diff --git a/src/components/ItemComponents/NewItemForm.vue b/src/components/ItemComponents/NewItemForm.vue index 8f332cf983dca3f7f3e332ff83d71b0257b33631..aa969c15b3ec82ba9d90b67e9bcb4c38a607397f 100644 --- a/src/components/ItemComponents/NewItemForm.vue +++ b/src/components/ItemComponents/NewItemForm.vue @@ -66,43 +66,58 @@ </div> </div> - <!-- Select Group --> <div class="mb-6"> <label - class="block mb-2 text-sm font-medium text-gray-900 dark:text-gray-400" - id="selectCommunityLabel" - >Gruppe</label - > - <select - v-model="v$.item.selectGroup.$model" - class="block w-full px-4 py-2 mt-2 text-gray-700 placeholder-gray-500 bg-white border rounded-md dark:bg-gray-800 dark:border-gray-600 dark:placeholder-gray-400 focus:border-primary-light dark:focus:border-primary-light focus:ring-opacity-40 focus:outline-none focus:ring focus:ring-primary-light" + class="block text-sm font-medium text-gray-900 dark:text-gray-400" + >Grupper</label> + <div + class="overflow-auto w-full h-32 mt-2 text-base list-none bg-white rounded divide-y divide-gray-100 dark:bg-gray-700" > - <option class="text-gray-400" value="" disabled selected> - Velg en gruppe - </option> - <option - v-for="group in groups" - :key="group" - class="text-gray-900 text-sm" - > - {{ group }} - </option> - </select> + <ul class="py-1" aria-labelledby="dropdownDefault"> + <li> + <div class="form-check" v-for="group in groups" :key="group"> + <input + + class="form-check-input appearance-none h-4 w-4 border border-gray-300 rounded-sm bg-white checked:bg-primary-medium checked:bg-primary-medium focus:outline-none transition duration-200 mt-1 align-top bg-no-repeat bg-center bg-contain float-left mr-2 cursor-pointer" + type="checkbox" + :value="group.communityId" + @change="onChangeGroup($event)" + > + <label class="form-check-label inline-block text-gray-800"> + {{ group.name }} + </label> + </div> + </li> + </ul> + </div> + <label class="text-error text-sm block">{{ groupErrorMessage }}</label> + </div> <!-- error message for select box --> <div - class="text-error" - v-for="(error, index) of v$.item.selectGroup.$errors" - :key="index" + class="overflow-auto w-full h-32 mt-2 text-base list-none bg-white rounded divide-y divide-gray-100 dark:bg-gray-700" > - <div class="text-error text-sm"> - {{ error.$message }} - </div> + <ul class="py-1" aria-labelledby="dropdownDefault"> + <li> + <div class="form-check" v-for="group in groups" :key="group"> + <input + + class="form-check-input appearance-none h-4 w-4 border border-gray-300 rounded-sm bg-white checked:bg-primary-medium checked:bg-primary-medium focus:outline-none transition duration-200 mt-1 align-top bg-no-repeat bg-center bg-contain float-left mr-2 cursor-pointer" + type="checkbox" + :value="group.communityId" + @change="onChangeGroup($event)" + > + <label class="form-check-label inline-block text-gray-800"> + {{ group.name }} + </label> + </div> + </li> + </ul> </div> - </div> + <label class="text-error text-sm block">{{ groupErrorMessage }}</label> <!-- price --> - <div class="mb-6" :class="{ error: v$.item.price.$errors.length }"> + <div class="mb-6 mt-4" :class="{ error: v$.item.price.$errors.length }"> <label class="block mb-2 text-sm font-medium text-gray-900 dark:text-gray-300" id="priceLabel" @@ -217,7 +232,7 @@ <script> import useVuelidate from "@vuelidate/core"; import { parseUserFromToken } from "@/utils/token-utils"; -import { postNewItem } from "@/utils/apiutil"; +import { postNewItem, getMyGroups } from "@/utils/apiutil"; import Button from "@/components/BaseComponents/ColoredButton"; import { @@ -276,9 +291,6 @@ export default { select: { required: helpers.withMessage(() => `Velg en kategori`, required), }, - selectGroup: { - required: helpers.withMessage(() => `Velg en gruppe`, required), - }, address: { required: helpers.withMessage( () => "Addressen kan ikke være tom", @@ -305,11 +317,13 @@ export default { type: "", images: [], userId: -1, - selectGroup: null, + selectedGroupId: -1, + selectedGroups: [], }, //Kategorier skal legges inn ved api/hente fra db, her må det endres etterhvert categories: ["Hage", "Kjøkken", "Musikk", "Annet"], - groups: [4040, 4041], + groups: [], + groupErrorMessage: '', }; }, methods: { @@ -317,7 +331,10 @@ export default { console.log("sjekker validering"); this.v$.item.$touch(); - if (this.v$.item.$invalid) { + if (this.v$.item.$invalid || this.item.selectedGroups.length === 0) { + if(this.item.selectedGroups.length === 0){ + this.groupErrorMessage = "Velg gruppe/grupper"; + } console.log("Invalid, avslutter..."); return false; } @@ -340,7 +357,7 @@ export default { console.log("Addressen: " + this.item.address); console.log("Pris: " + this.item.price); console.log("bilder: " + this.item.images); - console.log("gruppe: " + this.item.selectGroup); + console.log("gruppe: " + this.item.selectedGroups); const itemInfo = { title: this.item.title, @@ -349,7 +366,7 @@ export default { address: this.item.address, userID: this.item.userId, categoryNames: [], - communityIDs: [this.item.selectGroup], + communityIDs: this.item.selectedGroups, }; console.log(itemInfo); @@ -357,20 +374,49 @@ export default { const postRequest = await postNewItem(itemInfo); console.log("posted: " + postRequest); + + this.$router.push('/'); } }, checkUser: async function () { let user = parseUserFromToken(this.$store.state.user.token); this.item.userId = parseInt(user.accountId); - console.log("id: " + this.item.userId); }, addImage: function (event) { console.log(event.target.files); this.item.images.push(URL.createObjectURL(event.target.files[0])); - console.log("antall bilder: " + this.item.images.length); + }, + + getGroups: async function(){ + this.groups = await getMyGroups(); + }, + + onChangeGroup: function(e){ + this.selectedGroupId = e.target.value; + let alreadyInGroupList = false; + console.log("selected clicked"); + + for (let i = 0; i <= this.item.selectedGroups.length; i++) { + if (this.selectedGroupId == this.item.selectedGroups[i]) { + const index = this.item.selectedGroups.indexOf(this.selectedGroupId); + if (index > -1) { + this.item.selectedGroups.splice(index, 1); + } + alreadyInGroupList = true; + } + } + + if(!alreadyInGroupList){ + this.item.selectedGroups.push(this.selectedGroupId); + this.groupErrorMessage = ""; + } + }, }, + beforeMount() { + this.getGroups(); + } }; </script>