From 9ccb508d5172c1ec59a95f767166e04c03a5971c Mon Sep 17 00:00:00 2001
From: ingrid <ingrimeg@stud.ntnu.no>
Date: Wed, 26 Apr 2023 09:59:27 +0200
Subject: [PATCH] delte opp i mindre komponenter

---
 src/components/AppSettings.vue |  38 +++++
 src/components/EditAccount.vue |  41 ++++++
 src/components/EditProfile.vue | 250 +++++++++++++++++++++++++++++++++
 src/stores/authStore.js        |   5 +
 src/util/API.js                |   2 +-
 src/views/ProfileSettings.vue  | 100 +------------
 6 files changed, 340 insertions(+), 96 deletions(-)
 create mode 100644 src/components/AppSettings.vue
 create mode 100644 src/components/EditAccount.vue
 create mode 100644 src/components/EditProfile.vue

diff --git a/src/components/AppSettings.vue b/src/components/AppSettings.vue
new file mode 100644
index 0000000..673503c
--- /dev/null
+++ b/src/components/AppSettings.vue
@@ -0,0 +1,38 @@
+<template>
+ <h1>App-innstillinger</h1>
+          <form @submit.prevent="submit">
+
+              <h2>-Matpreferanser-</h2>
+              <p class ="infoText">Hvis huket av, så vil du kun få oppskrifter av disse typene:</p>
+
+              <input type="checkbox" id="vegetar" name="vegetar" value="vegetar">
+              <label for="vegetar"> vegetar </label><br>
+              <input type="checkbox" id="vegan" name="vegan" value="vegan">
+              <label for="vegan"> vegan </label><br>
+
+              <br>
+
+              <h2>-Allergener-</h2>
+
+              <p class ="infoText">Du vil ikke få forslag om oppskrifter med disse varene:</p>
+
+              <input type="checkbox" id="gluten" name="gluten" value="Gluten">
+              <label for="allergen"> gluten</label><br>
+              <input type="checkbox" id="nøtter" name="nøtter" value="nøtter">
+              <label for="allergen"> nøtter</label><br>
+              <input type="checkbox" id="melk" name="melk" value="melk">
+              <label for="allergen"> melk</label><br>
+
+              <button class="saveBtn" @click="saveFoodPreference">Lagre matpreferanser <br>  og allergener</button>
+          </form>
+</template>
+
+<script>
+export default {
+    name: "AppSettings"
+}
+</script>
+
+<style scoped>
+
+</style>
\ No newline at end of file
diff --git a/src/components/EditAccount.vue b/src/components/EditAccount.vue
new file mode 100644
index 0000000..41717dd
--- /dev/null
+++ b/src/components/EditAccount.vue
@@ -0,0 +1,41 @@
+<template>
+    <h1>Konto-innstillinger</h1>
+    <form @submit.prevent="submit">
+
+        <p class="infoText">OBS: Kontakt admin dersom du ønsker å oppdatere epost</p><br>
+
+        <p>Epost: {{user.email}}</p><br>
+
+        <label for="password">Endre passord</label><br>
+        <input type="password" id="password" v-model="this.currentUser.newPassword">
+
+        <button class="saveBtn" @click="saveAccountSettings">Lagre nytt passord</button>
+
+    </form>
+    <br>
+    <br>
+    <hr>
+
+    <form  @submit.prevent="submit" id = "dangerZone">
+        <h1>🔺FARESONE🔺</h1>
+        <p class="infoText">Ved å trykke på knappen nedenfor, vil du slette din SmartMat-konto</p>
+        <input type="checkbox" id="deletionCheckbox" v-model="deletionConfirmation">
+        <label for="deletionCheckbox"> Jeg bekrefter jeg skjønner dette, og ønsker å slette kontoen min SmartMat-konto for alltid.</label><br>
+        <button class="delBtn" @click="deleteAccount">SLETT KONTO</button>
+    </form>
+
+</template>
+
+<script>
+import {mapStores} from "pinia";
+import {Icon} from "@iconify/vue";
+import {API} from "@/util/API";
+import { useAuthStore } from "@/stores/authStore";
+export default {
+    name: "EditAccount"
+}
+</script>
+
+<style scoped>
+
+</style>
\ No newline at end of file
diff --git a/src/components/EditProfile.vue b/src/components/EditProfile.vue
new file mode 100644
index 0000000..62c7819
--- /dev/null
+++ b/src/components/EditProfile.vue
@@ -0,0 +1,250 @@
+<template>
+        <h1><br><br>Profilinnstillinger <br></h1>
+
+        <div v-if="hasProfileImage" id = "profilepicture-container">
+            <img width="100" :src="this.currentProfile.image" alt="profile picture">
+        </div>
+        <div v-else id = "profilepicture-container">
+            <Icon icon="material-symbols:person" :color=iconColor :style="{ fontSize: '500px'}" />
+        </div>
+
+        <h2>{{profile.name}}</h2>
+        <button  @click="changeProfile" id="changeUserBtn" >Bytt bruker</button>
+
+    <form @submit.prevent="submit">
+            <label for="brukernavn">Profilnavn</label><br>
+            <input type="text" required v-model="profileName"><br>
+            <br>
+            <h4>Brukertype</h4>
+            <input type="radio" id="normal" value="false" v-model="isRestricted">
+            <label for="normal"> Standard</label><br>
+
+            <input type="radio" id="restricted" value="true" v-model="isRestricted">
+            <label for="restricted"> Begrenset - Kan ikke redigere ukeplan eller handleliste</label><br>
+
+            <br>
+            <h3>Profilbilde</h3>
+            <div id="changeUserImage">
+                <div v-if="hasProfileImage" id = "profilepicture-container">
+                    <img width="50" :src="profileImage" alt="profile picture">
+                </div>
+                <div v-else id = "profilepicture-container">
+                    <Icon icon="material-symbols:person" :color=iconColor :style="{ fontSize: '30px'}" />
+                </div>
+                <button @click="chooseProfilePicture">Endre bilde</button>
+            </div>
+
+            <div id = "submitbuttonBox">
+                <button @click=" saveUserSettings">Submit</button>
+                <button class="delBtn" @click="deleteUser">Slett brukerprofil</button>
+            </div>
+
+        </form>
+
+</template>
+
+<script>
+import {mapStores} from "pinia";
+import {Icon} from "@iconify/vue";
+import {API} from "@/util/API";
+import { useAuthStore } from "@/stores/authStore";
+import router from "../router";
+export default {
+    setup() {
+        const authStore = useAuthStore();
+        const profileName = authStore.profile.name;
+        const profileImage = authStore.profile.profileImageUrl;
+        const isRestricted = authStore.profile.restricted;
+    },
+    name: "EditProfile",
+    components: {Icon},
+    computed: {
+        ...mapStores(useAuthStore),
+        profile() {
+            let store = useAuthStore();
+
+            this.currentProfile.name = store.profile.name;
+            this.currentProfile.isRestricted = store.profile.restricted;
+            this.currentProfile.image = store.profile.profileImageUrl;
+            return store.profile
+        },
+        user() {
+            const store = useAuthStore();
+            return store.user
+        },
+        iconColor() {
+            return "#000000"
+        },
+        hasProfileImage() {
+            return this.currentProfile.image.length > 0;
+        }
+    },
+    data() {
+        return {
+            currentUser: {
+                newPassword: "",
+            },
+            currentProfile: {
+                name: "",
+                isRestricted: true,
+                image: "",
+            },
+            foodPreferences: [],
+            allergens: [],
+            deletionConfirmation: false,
+        }
+    },
+    methods: {
+        saveUserSettings(){ //profilnavn, profilbilde, profilrestriksjoner
+            const namee = this.currentProfile.name;
+            const isRestrictede = this.currentProfile.isRestricted;
+            const profileImageUrle = this.currentProfile.image;
+
+            API.updateProfile(
+                this.profile.id,{
+                    name:namee,
+                    profileImageUrl: profileImageUrle,
+                    restricted: isRestrictede,
+                }
+            ).then((savedProfile)=>{
+                useAuthStore().setProfile(savedProfile);
+
+            }).catch((error)=> {
+                console.log(error)
+            })
+
+        },
+        chooseProfilePicture(){
+            alert("velgBilde")
+        },
+        saveAccountSettings(){ //passord
+            if(this.currentUser.newPassword.length===0){
+                alert("Det er ikke gjort endringer, og passordet vil ikke bli oppdatert")
+            } else {
+
+                alert("(Denne knappen gjør ingen ting) konto oppdatert")
+            }
+        },
+        deleteAccount(){
+            if(this.deletionConfirmation===false){
+                alert("Du må bekrefte at du vil slette konto ved å huke av boksen")
+            }
+            else {
+                alert("(Denne knappen gjør ingen ting) men  account deleted")
+                //API.deleteAccount(this.user.id, token);
+            }
+
+        },
+        deleteUser(){
+            alert("(Denne knappen gjør ingen ting)  bruker slettet")
+            //API.deleteAccount(this.user.id, token).then
+        },
+        changeProfile(){
+            router.push("/selectProfile");
+        }
+    }
+}
+
+
+
+</script>
+
+<style scoped lang="scss">
+
+main {
+    background-color: white;
+    color:black;
+    display:flex;
+    justify-content: center;
+    align-items: center;
+    flex-direction: column;
+    width: 100%;
+    text-align: left;
+    left:0;
+}
+
+#profilepicture-container {
+    display:flex;
+    border-radius:50%;
+    width:100px;
+    height: 100px;
+    background-color: white;
+    justify-content: center;
+    align-items: center;
+    border: 3px solid base.$grey;
+}
+
+img {
+    border-radius: 50%;
+}
+
+#changeUserImage {
+    display:flex;
+}
+
+#changeUserImage #profilepicture-container {
+    width: 50px;
+    height: 50px;
+}
+
+.infoText {
+    background-color: white;
+    padding: .5em;
+    margin: .4em;
+}
+
+form {
+    background-color: base.$grey;
+    color: black;
+    align-content: end;
+    padding: 2em;
+    margin-top: 2em;
+    margin-bottom: 2em;
+}
+
+input[type="text"],
+input[type="password"]{
+    width: 100%;
+    padding: .5em;
+}
+#submitbuttonBox {
+    display:flex;
+    justify-content: space-between;
+}
+button {
+    background-color: base.$red;
+    color: black;
+
+    border: 1px solid black;
+
+    margin: 1em;
+}
+
+
+#changeUserBtn {
+    padding:.9em;
+
+}
+button:hover{
+    background-color: #282828;
+
+}
+
+.saveBtn, .delBtn {
+    background-color: base.$green;
+    color: white;
+    font-weight: bold;
+    padding:.9em;
+    border:none;
+}
+.delBtn {
+    background-color: darkred;
+}
+
+#dangerZone {
+    color: darkred;
+}
+
+
+
+</style>
\ No newline at end of file
diff --git a/src/stores/authStore.js b/src/stores/authStore.js
index 79696ca..0b02b04 100644
--- a/src/stores/authStore.js
+++ b/src/stores/authStore.js
@@ -27,6 +27,11 @@ export const useAuthStore = defineStore("auth", {
     },
     setProfile(profile) {
       this.profile = profile;
+    },
+    updateProfile(name, image, isRestricted){
+      this.profile.name = name;
+      this.profile.profileImageUrl = image;
+      this.profile.restricted = isRestricted;
     }
   }
 });
diff --git a/src/util/API.js b/src/util/API.js
index d6f5432..c1985dc 100644
--- a/src/util/API.js
+++ b/src/util/API.js
@@ -146,7 +146,7 @@ export const API = {
 
         })
             .then((response) => {
-                //authStore.setProfile(response.data)
+                authStore.setProfile(response.data)
                 return response.data;
             })
             .catch((error) => {
diff --git a/src/views/ProfileSettings.vue b/src/views/ProfileSettings.vue
index 588c0d1..8d5a095 100644
--- a/src/views/ProfileSettings.vue
+++ b/src/views/ProfileSettings.vue
@@ -1,101 +1,8 @@
 <template>
     <main>
-        <h1><br><br>Profilinnstillinger <br></h1>
+    <EditProfile></EditProfile>
 
-        <div v-if="hasProfileImage" id = "profilepicture-container">
-            <img width="100" :src="this.currentProfile.image" alt="profile picture">
-        </div>
-        <div v-else id = "profilepicture-container">
-            <Icon icon="material-symbols:person" :color=iconColor :style="{ fontSize: '500px'}" />
-        </div>
-
-        <h2>{{profile.name}}</h2>
-        <button  @click="changeProfile" id="changeUserBtn" >Bytt bruker</button>
-
-        <form @submit.prevent="submit">
-            <label for="brukernavn">Profilnavn</label><br>
-            <input type="text" required v-model="this.currentProfile.name"><br>
-          <br>
-            <h4>Brukertype</h4>
-            <input type="radio" id="normal" value="false" v-model="this.currentProfile.isRestricted">
-            <label for="normal"> Standard</label><br>
-
-            <input type="radio" id="restricted" value="true" v-model="this.currentProfile.isRestricted">
-            <label for="restricted"> Begrenset - Kan ikke redigere ukeplan eller handleliste</label><br>
-
-            <br>
-            <h3>Profilbilde</h3>
-            <div id="changeUserImage">
-                <div v-if="hasProfileImage" id = "profilepicture-container">
-                    <img width="50" :src="this.currentProfile.image" alt="profile picture">
-                </div>
-                <div v-else id = "profilepicture-container">
-                    <Icon icon="material-symbols:person" :color=iconColor :style="{ fontSize: '30px'}" />
-                </div>
-                <button @click="chooseProfilePicture">Endre bilde</button>
-            </div>
-
-            <div id = "submitbuttonBox">
-                <button class="saveBtn" @click="saveUserSettings" >Lagre brukerinnstillinger</button>
-                <button class="delBtn" @click="deleteUser">Slett brukerprofil</button>
-            </div>
-
-        </form>
-
-
-        <!-- <h1>App-innstillinger</h1>
-        <form @submit.prevent="submit">
-
-            <h2>-Matpreferanser-</h2>
-            <p class ="infoText">Hvis huket av, så vil du kun få oppskrifter av disse typene:</p>
-
-            <input type="checkbox" id="vegetar" name="vegetar" value="vegetar">
-            <label for="vegetar"> vegetar </label><br>
-            <input type="checkbox" id="vegan" name="vegan" value="vegan">
-            <label for="vegan"> vegan </label><br>
-
-            <br>
-
-            <h2>-Allergener-</h2>
-
-            <p class ="infoText">Du vil ikke få forslag om oppskrifter med disse varene:</p>
-
-            <input type="checkbox" id="gluten" name="gluten" value="Gluten">
-            <label for="allergen"> gluten</label><br>
-            <input type="checkbox" id="nøtter" name="nøtter" value="nøtter">
-            <label for="allergen"> nøtter</label><br>
-            <input type="checkbox" id="melk" name="melk" value="melk">
-            <label for="allergen"> melk</label><br>
-
-            <button class="saveBtn" @click="saveFoodPreference">Lagre matpreferanser <br>  og allergener</button>
-        </form>
-        -->
-        <h1>Konto-innstillinger</h1>
-        <form @submit.prevent="submit">
-
-            <p class="infoText">OBS: Kontakt admin dersom du ønsker å oppdatere epost</p><br>
-
-            <p>Epost: {{user.email}}</p><br>
-
-            <label for="password">Endre passord</label><br>
-            <input type="password" id="password" v-model="this.currentUser.newPassword">
-
-            <button class="saveBtn" @click="saveAccountSettings">Lagre nytt passord</button>
-
-          </form>
-          <br>
-          <br>
-          <hr>
-
-          <form  @submit.prevent="submit" id = "dangerZone">
-          <h1>🔺FARESONE🔺</h1>
-          <p class="infoText">Ved å trykke på knappen nedenfor, vil du slette din SmartMat-konto</p>
-            <input type="checkbox" id="deletionCheckbox" v-model="deletionConfirmation">
-            <label for="deletionCheckbox"> Jeg bekrefter jeg skjønner dette, og ønsker å slette kontoen min SmartMat-konto for alltid.</label><br>
-            <button class="delBtn" @click="deleteAccount">SLETT KONTO</button>
-          </form>
-
-          <br><br><br>
+        <!--<EditAccount></EditAccount>-->
     </main>
 </template>
 <script setup>
@@ -103,6 +10,8 @@
 
 
 
+import EditProfile from "../components/EditProfile.vue";
+import EditAccount from "../components/EditAccount.vue";
 </script>
 
 
@@ -119,6 +28,7 @@ export default {
         ...mapStores(useAuthStore),
         profile() {
             let store = useAuthStore();
+
             this.currentProfile.name = store.profile.name;
             this.currentProfile.isRestricted = store.profile.restricted;
             this.currentProfile.image = store.profile.profileImageUrl;
-- 
GitLab