From 3866d406b20cd1df983a410393fcbc6df0f0a9a4 Mon Sep 17 00:00:00 2001 From: Julian Krauser Date: Sat, 25 Jan 2025 11:57:58 +0100 Subject: [PATCH 1/2] update usage of salutation --- .../admin/club/member/CreateMemberModal.vue | 21 ++++---- .../admin/club/member/DeleteMemberModal.vue | 3 -- src/enums/salutation.ts | 6 --- src/stores/admin/settings/salutation.ts | 53 +++++++++++++++++++ src/types/permissionTypes.ts | 3 ++ .../admin/club/member/member.models.ts | 10 ++-- .../admin/club/member/membership.models.ts | 4 +- .../admin/settings/salutation.models.ts | 13 +++++ src/views/admin/club/members/MemberEdit.vue | 17 +++--- 9 files changed, 96 insertions(+), 34 deletions(-) delete mode 100644 src/enums/salutation.ts create mode 100644 src/stores/admin/settings/salutation.ts create mode 100644 src/viewmodels/admin/settings/salutation.models.ts diff --git a/src/components/admin/club/member/CreateMemberModal.vue b/src/components/admin/club/member/CreateMemberModal.vue index 0436dd5..e3fc822 100644 --- a/src/components/admin/club/member/CreateMemberModal.vue +++ b/src/components/admin/club/member/CreateMemberModal.vue @@ -6,7 +6,7 @@
- + Anrede
@@ -39,7 +39,9 @@ 'relative cursor-default select-none py-2 pl-10 pr-4', ]" > - {{ salutation }} + {{ + salutation.salutation + }} @@ -97,9 +99,9 @@ import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import FailureXMark from "@/components/FailureXMark.vue"; import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid"; -import { Salutation } from "@/enums/salutation"; import { useMemberStore } from "@/stores/admin/club/member/member"; import type { CreateMemberViewModel } from "@/viewmodels/admin/club/member/member.models"; +import { useSalutationStore } from "../../../../stores/admin/settings/salutation"; diff --git a/src/enums/salutation.ts b/src/enums/salutation.ts deleted file mode 100644 index ba2fce4..0000000 --- a/src/enums/salutation.ts +++ /dev/null @@ -1,6 +0,0 @@ -export enum Salutation { - sir = "sir", - madam = "madam", - other = "other", - none = "none", -} diff --git a/src/stores/admin/settings/salutation.ts b/src/stores/admin/settings/salutation.ts new file mode 100644 index 0000000..1b26df3 --- /dev/null +++ b/src/stores/admin/settings/salutation.ts @@ -0,0 +1,53 @@ +import { defineStore } from "pinia"; +import type { + CreateSalutationViewModel, + UpdateSalutationViewModel, + SalutationViewModel, +} from "@/viewmodels/admin/settings/salutation.models"; +import { http } from "@/serverCom"; +import type { AxiosResponse } from "axios"; + +export const useSalutationStore = defineStore("salutation", { + state: () => { + return { + salutations: [] as Array, + loading: "loading" as "loading" | "fetched" | "failed", + }; + }, + actions: { + fetchSalutations() { + this.loading = "loading"; + http + .get("/admin/salutation") + .then((result) => { + this.salutations = result.data; + this.loading = "fetched"; + }) + .catch((err) => { + this.loading = "failed"; + }); + }, + fetchSalutationById(id: number): Promise> { + return http.get(`/admin/salutation/${id}`); + }, + async createSalutation(salutation: CreateSalutationViewModel): Promise> { + const result = await http.post(`/admin/salutation`, { + salutation: salutation.salutation, + }); + this.fetchSalutations(); + return result; + }, + async updateActiveSalutation(salutation: UpdateSalutationViewModel): Promise> { + const result = await http.patch(`/admin/salutation/${salutation.id}`, { + salutation: salutation.salutation, + }); + this.fetchSalutations(); + return result; + }, + async deleteSalutation(salutation: number): Promise> { + const result = await http.delete(`/admin/salutation/${salutation}`); + this.fetchSalutations(); + return result; + }, + }, +}); diff --git a/src/types/permissionTypes.ts b/src/types/permissionTypes.ts index 5ba5cb4..cd37e49 100644 --- a/src/types/permissionTypes.ts +++ b/src/types/permissionTypes.ts @@ -11,6 +11,7 @@ export type PermissionModule = | "executive_position" | "communication_type" | "membership_status" + | "salutation" | "calendar_type" | "user" | "role" @@ -53,6 +54,7 @@ export const permissionModules: Array = [ "executive_position", "communication_type", "membership_status", + "salutation", "calendar_type", "user", "role", @@ -71,6 +73,7 @@ export const sectionsAndModules: SectionsAndModulesObject = { "executive_position", "communication_type", "membership_status", + "salutation", "calendar_type", "query_store", "template", diff --git a/src/viewmodels/admin/club/member/member.models.ts b/src/viewmodels/admin/club/member/member.models.ts index 0283545..a6b49ff 100644 --- a/src/viewmodels/admin/club/member/member.models.ts +++ b/src/viewmodels/admin/club/member/member.models.ts @@ -1,10 +1,10 @@ -import { Salutation } from "@/enums/salutation"; import type { CommunicationViewModel } from "./communication.models"; import type { MembershipViewModel } from "./membership.models"; +import type { SalutationViewModel } from "../../settings/salutation.models"; export interface MemberViewModel { id: number; - salutation: Salutation; + salutation: SalutationViewModel; firstname: string; lastname: string; nameaffix: string; @@ -19,7 +19,7 @@ export interface MemberViewModel { export interface MemberStatisticsViewModel { id: number; - salutation: Salutation; + salutation: string; firstname: string; lastname: string; nameaffix: string; @@ -30,7 +30,7 @@ export interface MemberStatisticsViewModel { } export interface CreateMemberViewModel { - salutation: Salutation; + salutationId: number; firstname: string; lastname: string; nameaffix: string; @@ -40,7 +40,7 @@ export interface CreateMemberViewModel { export interface UpdateMemberViewModel { id: number; - salutation: Salutation; + salutationId: number; firstname: string; lastname: string; nameaffix: string; diff --git a/src/viewmodels/admin/club/member/membership.models.ts b/src/viewmodels/admin/club/member/membership.models.ts index b2114c0..6051ec9 100644 --- a/src/viewmodels/admin/club/member/membership.models.ts +++ b/src/viewmodels/admin/club/member/membership.models.ts @@ -1,5 +1,3 @@ -import type { Salutation } from "../../../../enums/salutation"; - export interface MembershipViewModel { id: number; start: Date; @@ -15,7 +13,7 @@ export interface MembershipStatisticsViewModel { status: string; statusId: number; memberId: number; - memberSalutation: Salutation; + memberSalutation: string; memberFirstname: string; memberLastname: string; memberNameaffix: string; diff --git a/src/viewmodels/admin/settings/salutation.models.ts b/src/viewmodels/admin/settings/salutation.models.ts new file mode 100644 index 0000000..73915ab --- /dev/null +++ b/src/viewmodels/admin/settings/salutation.models.ts @@ -0,0 +1,13 @@ +export interface SalutationViewModel { + id: number; + salutation: string; +} + +export interface CreateSalutationViewModel { + salutation: string; +} + +export interface UpdateSalutationViewModel { + id: number; + salutation: string; +} diff --git a/src/views/admin/club/members/MemberEdit.vue b/src/views/admin/club/members/MemberEdit.vue index af6e56b..94b1ef3 100644 --- a/src/views/admin/club/members/MemberEdit.vue +++ b/src/views/admin/club/members/MemberEdit.vue @@ -9,7 +9,7 @@ >

Mitglied bearbeiten

- + Anrede
@@ -42,7 +42,9 @@ 'relative cursor-default select-none py-2 pl-10 pr-4', ]" > - {{ salutation }} + {{ + salutation.salutation + }} @@ -101,7 +103,7 @@ import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } f import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid"; import cloneDeep from "lodash.clonedeep"; import isEqual from "lodash.isequal"; -import { Salutation } from "@/enums/salutation"; +import { useSalutationStore } from "../../../../stores/admin/settings/salutation"; + + diff --git a/src/components/admin/settings/salutation/DeleteSalutationModal.vue b/src/components/admin/settings/salutation/DeleteSalutationModal.vue new file mode 100644 index 0000000..dd58907 --- /dev/null +++ b/src/components/admin/settings/salutation/DeleteSalutationModal.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/src/components/admin/settings/salutation/SalutationListItem.vue b/src/components/admin/settings/salutation/SalutationListItem.vue new file mode 100644 index 0000000..d3d558b --- /dev/null +++ b/src/components/admin/settings/salutation/SalutationListItem.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/src/router/index.ts b/src/router/index.ts index ad7f073..4d46b2b 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -422,6 +422,28 @@ const router = createRouter({ }, ], }, + { + path: "salutation", + name: "admin-settings-salutation-route", + component: () => import("@/views/RouterView.vue"), + meta: { type: "read", section: "settings", module: "salutation" }, + beforeEnter: [abilityAndNavUpdate], + children: [ + { + path: "", + name: "admin-settings-salutation", + component: () => import("@/views/admin/settings/salutation/Salutation.vue"), + }, + { + path: ":id/edit", + name: "admin-settings-salutation-edit", + component: () => import("@/views/admin/settings/salutation/SalutationEdit.vue"), + meta: { type: "update", section: "settings", module: "salutation" }, + beforeEnter: [abilityAndNavUpdate], + props: true, + }, + ], + }, { path: "calendar-type", name: "admin-settings-calendar_type-route", diff --git a/src/stores/admin/club/member/member.ts b/src/stores/admin/club/member/member.ts index 1d96dc7..d92670e 100644 --- a/src/stores/admin/club/member/member.ts +++ b/src/stores/admin/club/member/member.ts @@ -88,7 +88,7 @@ export const useMemberStore = defineStore("member", { }, async createMember(member: CreateMemberViewModel): Promise> { const result = await http.post(`/admin/member`, { - salutation: member.salutation, + salutationId: member.salutationId, firstname: member.firstname, lastname: member.lastname, nameaffix: member.nameaffix, @@ -100,7 +100,7 @@ export const useMemberStore = defineStore("member", { }, async updateActiveMember(member: UpdateMemberViewModel): Promise> { const result = await http.patch(`/admin/member/${member.id}`, { - salutation: member.salutation, + salutationId: member.salutationId, firstname: member.firstname, lastname: member.lastname, nameaffix: member.nameaffix, diff --git a/src/stores/admin/navigation.ts b/src/stores/admin/navigation.ts index bd1bc84..003f868 100644 --- a/src/stores/admin/navigation.ts +++ b/src/stores/admin/navigation.ts @@ -63,7 +63,7 @@ export const useNavigationStore = defineStore("navigation", { { key: "settings", title: "Einstellungen", - levelDefault: "award", + levelDefault: "salutation", } as topLevelNavigationModel, ] : []), @@ -99,6 +99,7 @@ export const useNavigationStore = defineStore("navigation", { mainTitle: "Einstellungen", main: [ { key: "divider1", title: "Mitgliederdaten" }, + ...(abilityStore.can("read", "settings", "salutation") ? [{ key: "salutation", title: "Anrede" }] : []), ...(abilityStore.can("read", "settings", "award") ? [{ key: "award", title: "Auszeichnungen" }] : []), ...(abilityStore.can("read", "settings", "communication_type") ? [{ key: "communication_type", title: "Kommunikationsarten" }] diff --git a/src/views/admin/club/members/MemberEdit.vue b/src/views/admin/club/members/MemberEdit.vue index 94b1ef3..6053966 100644 --- a/src/views/admin/club/members/MemberEdit.vue +++ b/src/views/admin/club/members/MemberEdit.vue @@ -15,7 +15,7 @@ - {{ member.salutation }} + {{ member.salutation.salutation }} @@ -136,6 +136,7 @@ export default defineComponent({ }, mounted() { this.fetchItem(); + this.fetchSalutations(); }, beforeUnmount() { try { @@ -144,6 +145,7 @@ export default defineComponent({ }, methods: { ...mapActions(useMemberStore, ["fetchMemberByActiveId", "updateActiveMember"]), + ...mapActions(useSalutationStore, ["fetchSalutations"]), resetForm() { this.member = cloneDeep(this.activeMemberObj); }, diff --git a/src/views/admin/club/members/MemberOverview.vue b/src/views/admin/club/members/MemberOverview.vue index 6716daf..db2726c 100644 --- a/src/views/admin/club/members/MemberOverview.vue +++ b/src/views/admin/club/members/MemberOverview.vue @@ -7,7 +7,7 @@
- +
diff --git a/src/views/admin/settings/salutation/Salutation.vue b/src/views/admin/settings/salutation/Salutation.vue new file mode 100644 index 0000000..a07d432 --- /dev/null +++ b/src/views/admin/settings/salutation/Salutation.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/src/views/admin/settings/salutation/SalutationEdit.vue b/src/views/admin/settings/salutation/SalutationEdit.vue new file mode 100644 index 0000000..35def41 --- /dev/null +++ b/src/views/admin/settings/salutation/SalutationEdit.vue @@ -0,0 +1,120 @@ + + + + + -- 2.45.2