mirror of
				https://github.com/mealie-recipes/mealie.git
				synced 2025-10-31 10:13:32 -04:00 
			
		
		
		
	fix: user & household creation (#5699)
This commit is contained in:
		| @@ -21,26 +21,23 @@ | ||||
|       <v-card variant="outlined"> | ||||
|         <v-card-text> | ||||
|           <v-select | ||||
|             v-if="groups" | ||||
|             v-model="selectedGroupId" | ||||
|             :items="groups" | ||||
|             v-model="selectedGroup" | ||||
|             :items="groups || []" | ||||
|             item-title="name" | ||||
|             item-value="id" | ||||
|             :return-object="false" | ||||
|             return-object | ||||
|             variant="filled" | ||||
|             :label="$t('group.user-group')" | ||||
|             :rules="[validators.required]" | ||||
|           /> | ||||
|           <v-select | ||||
|             v-model="newUserData.household" | ||||
|             :disabled="!selectedGroupId" | ||||
|             :disabled="!selectedGroup" | ||||
|             :items="households" | ||||
|             item-title="name" | ||||
|             item-value="name" | ||||
|             :return-object="false" | ||||
|             variant="filled" | ||||
|             :label="$t('household.user-household')" | ||||
|             :hint="selectedGroupId ? '' : $t('group.you-must-select-a-group-before-selecting-a-household')" | ||||
|             :hint="selectedGroup ? '' : $t('group.you-must-select-a-group-before-selecting-a-household')" | ||||
|             persistent-hint | ||||
|             :rules="[validators.required]" | ||||
|           /> | ||||
| @@ -60,82 +57,51 @@ | ||||
|   </v-container> | ||||
| </template> | ||||
|  | ||||
| <script lang="ts"> | ||||
| <script setup lang="ts"> | ||||
| import { useAdminApi } from "~/composables/api"; | ||||
| import { useGroups } from "~/composables/use-groups"; | ||||
| import { useAdminHouseholds } from "~/composables/use-households"; | ||||
| import { useUserForm } from "~/composables/use-users"; | ||||
| import { validators } from "~/composables/use-validators"; | ||||
| import type { UserIn } from "~/lib/api/types/user"; | ||||
| import type { GroupInDB, UserIn } from "~/lib/api/types/user"; | ||||
| import type { VForm } from "~/types/auto-forms"; | ||||
|  | ||||
| export default defineNuxtComponent({ | ||||
|   setup() { | ||||
|     definePageMeta({ | ||||
|       layout: "admin", | ||||
|     }); | ||||
|  | ||||
|     const { userForm } = useUserForm(); | ||||
|     const { groups } = useGroups(); | ||||
|     const { useHouseholdsInGroup } = useAdminHouseholds(); | ||||
|     const router = useRouter(); | ||||
|  | ||||
|     // ============================================== | ||||
|     // New User Form | ||||
|  | ||||
|     const refNewUserForm = ref<VForm | null>(null); | ||||
|  | ||||
|     const adminApi = useAdminApi(); | ||||
|  | ||||
|     const selectedGroupId = ref<string>(""); | ||||
|     const households = useHouseholdsInGroup(selectedGroupId); | ||||
|  | ||||
|     const selectedGroup = computed(() => { | ||||
|       return groups.value?.find(group => group.id === selectedGroupId.value); | ||||
|     }); | ||||
|     const state = reactive({ | ||||
|       newUserData: { | ||||
|         username: "", | ||||
|         fullName: "", | ||||
|         email: "", | ||||
|         admin: false, | ||||
|         group: selectedGroup.value?.name || "", | ||||
|         household: "", | ||||
|         advanced: false, | ||||
|         canInvite: false, | ||||
|         canManage: false, | ||||
|         canOrganize: false, | ||||
|         password: "", | ||||
|         authMethod: "Mealie", | ||||
|       }, | ||||
|     }); | ||||
|     watch(selectedGroup, (newGroup) => { | ||||
|       state.newUserData.group = newGroup?.name || ""; | ||||
|       state.newUserData.household = ""; | ||||
|     }); | ||||
|  | ||||
|     async function handleSubmit() { | ||||
|       if (!refNewUserForm.value?.validate()) return; | ||||
|  | ||||
|       const { response } = await adminApi.users.createOne(state.newUserData as UserIn); | ||||
|  | ||||
|       if (response?.status === 201) { | ||||
|         router.push("/admin/manage/users"); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     return { | ||||
|       ...toRefs(state), | ||||
|       userForm, | ||||
|       refNewUserForm, | ||||
|       handleSubmit, | ||||
|       groups, | ||||
|       selectedGroupId, | ||||
|       households, | ||||
|       validators, | ||||
|     }; | ||||
|   }, | ||||
| definePageMeta({ | ||||
|   layout: "admin", | ||||
| }); | ||||
| const { userForm } = useUserForm(); | ||||
| const { groups } = useGroups(); | ||||
| const router = useRouter(); | ||||
|  | ||||
| const refNewUserForm = ref<VForm | null>(null); | ||||
| const adminApi = useAdminApi(); | ||||
|  | ||||
| const selectedGroup = ref<GroupInDB | undefined>(undefined); | ||||
| const households = computed(() => selectedGroup.value?.households || []); | ||||
|  | ||||
| const newUserData = ref({ | ||||
|   username: "", | ||||
|   fullName: "", | ||||
|   email: "", | ||||
|   admin: false, | ||||
|   group: computed(() => selectedGroup.value?.name || ""), | ||||
|   household: "", | ||||
|   advanced: false, | ||||
|   canInvite: false, | ||||
|   canManage: false, | ||||
|   canOrganize: false, | ||||
|   password: "", | ||||
|   authMethod: "Mealie", | ||||
| }); | ||||
|  | ||||
| async function handleSubmit() { | ||||
|   if (!refNewUserForm.value?.validate()) return; | ||||
|  | ||||
|   const { response } = await adminApi.users.createOne(newUserData.value as UserIn); | ||||
|  | ||||
|   if (response?.status === 201) { | ||||
|     router.push("/admin/manage/users"); | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped></style> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user