@dragonmastery/dragoncore-vue 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +75 -0
- package/dist/AppLink-CHMMrSFI.js +54 -0
- package/dist/AppLink-CHMMrSFI.js.map +1 -0
- package/dist/Appearance-BfPdKMXw.js +70 -0
- package/dist/Appearance-BfPdKMXw.js.map +1 -0
- package/dist/Appearance-C3WguxT-.js +3 -0
- package/dist/ChangePasswordPage-Btu5lf-r.js +86 -0
- package/dist/ChangePasswordPage-Btu5lf-r.js.map +1 -0
- package/dist/ChangePasswordPage-mBBuQMkT.js +6 -0
- package/dist/CreateTeamForm-n2ut93vM.js +43 -0
- package/dist/CreateTeamMemberForm-CcH3AxNL.js +43 -0
- package/dist/CreateUserPage-CDrGuW9B.js +6 -0
- package/dist/CreateUserPage-Cmx8xjjv.js +76 -0
- package/dist/CreateUserPage-Cmx8xjjv.js.map +1 -0
- package/dist/CreditBalanceDashboard-DLz0ioP3.js +43 -0
- package/dist/CreditManagement-D3q5S-qc.js +43 -0
- package/dist/CustomerCreateSupportTicketForm-Ci7QYkG-.js +43 -0
- package/dist/CustomerEditSupportTicketForm-Dd5ZB74k.js +159 -0
- package/dist/CustomerEditSupportTicketForm-Dd5ZB74k.js.map +1 -0
- package/dist/CustomerEditSupportTicketForm-lLchVjnw.js +9 -0
- package/dist/CustomerSupportTicketAttachmentsTab-gBrVO97t.js +43 -0
- package/dist/CustomerSupportTicketCustomerNotesTab-D0jhzbOY.js +8 -0
- package/dist/CustomerSupportTicketCustomerNotesTab-D1aa9It7.js +23 -0
- package/dist/CustomerSupportTicketCustomerNotesTab-D1aa9It7.js.map +1 -0
- package/dist/CustomerSupportTicketHistoryTab-BNTf8EZq.js +6 -0
- package/dist/CustomerSupportTicketHistoryTab-CFYN_Sa4.js +17 -0
- package/dist/CustomerSupportTicketHistoryTab-CFYN_Sa4.js.map +1 -0
- package/dist/CustomerSupportTicketList-BkOzFxMP.js +6 -0
- package/dist/CustomerSupportTicketList-C2nUPawb.js +166 -0
- package/dist/CustomerSupportTicketList-C2nUPawb.js.map +1 -0
- package/dist/CustomerSupportTicketParent-2mONd9kL.js +66 -0
- package/dist/CustomerSupportTicketParent-2mONd9kL.js.map +1 -0
- package/dist/CustomerSupportTicketParent-N8ko1yFE.js +7 -0
- package/dist/CustomerSupportTicketSuccess-w_-9NXT4.js +43 -0
- package/dist/CustomerViewSupportTicket-CVwNH0lS.js +11 -0
- package/dist/CustomerViewSupportTicket-tZkxragu.js +363 -0
- package/dist/CustomerViewSupportTicket-tZkxragu.js.map +1 -0
- package/dist/EditTeamForm-BioqiTWE.js +43 -0
- package/dist/EditTeamMemberForm-DCq0Gsn_.js +7 -0
- package/dist/EditTeamMemberForm-ru4WgLz-.js +169 -0
- package/dist/EditTeamMemberForm-ru4WgLz-.js.map +1 -0
- package/dist/EditUserPage-BxJ5QvIM.js +112 -0
- package/dist/EditUserPage-BxJ5QvIM.js.map +1 -0
- package/dist/EditUserPage-XOBuxUxd.js +7 -0
- package/dist/FieldsetSection-CsHN38_o.js +27 -0
- package/dist/FieldsetSection-CsHN38_o.js.map +1 -0
- package/dist/ForgotPassword-CpqvcSFg.js +7 -0
- package/dist/ForgotPassword-CqhenzUG.js +73 -0
- package/dist/ForgotPassword-CqhenzUG.js.map +1 -0
- package/dist/InlineAttachments-I39rOvip.js +1351 -0
- package/dist/InlineAttachments-I39rOvip.js.map +1 -0
- package/dist/LoginForm-AM0qkfbU.js +7 -0
- package/dist/LoginForm-_PZ51Uwe.js +116 -0
- package/dist/LoginForm-_PZ51Uwe.js.map +1 -0
- package/dist/Logout-BMjiqHnS.js +38 -0
- package/dist/Logout-BMjiqHnS.js.map +1 -0
- package/dist/Logout-BfiBjlaH.js +6 -0
- package/dist/NoteList-C0hRPNMO.js +497 -0
- package/dist/NoteList-C0hRPNMO.js.map +1 -0
- package/dist/NotificationEmailsPage-BjRqtW95.js +141 -0
- package/dist/NotificationEmailsPage-BjRqtW95.js.map +1 -0
- package/dist/NotificationEmailsPage-bx-9rg3x.js +7 -0
- package/dist/ResetPassword-BQLkR9TZ.js +43 -0
- package/dist/Signup-CnCcQlB8.js +7 -0
- package/dist/Signup-c2-_yMOM.js +106 -0
- package/dist/Signup-c2-_yMOM.js.map +1 -0
- package/dist/StaffCreateSupportTicketForm-ChVFDJdA.js +43 -0
- package/dist/StaffEditSupportTicketForm-DY1Zkf5k.js +9 -0
- package/dist/StaffEditSupportTicketForm-DuUKuIGg.js +263 -0
- package/dist/StaffEditSupportTicketForm-DuUKuIGg.js.map +1 -0
- package/dist/StaffSupportTicketAttachmentsTab-DpDXsHXP.js +43 -0
- package/dist/StaffSupportTicketCustomerNotesTab-CusqQV2-.js +23 -0
- package/dist/StaffSupportTicketCustomerNotesTab-CusqQV2-.js.map +1 -0
- package/dist/StaffSupportTicketCustomerNotesTab-rbJHJ0_V.js +8 -0
- package/dist/StaffSupportTicketHistoryTab-D24myEm3.js +17 -0
- package/dist/StaffSupportTicketHistoryTab-D24myEm3.js.map +1 -0
- package/dist/StaffSupportTicketHistoryTab-nmVma5vp.js +6 -0
- package/dist/StaffSupportTicketInternalNotesTab-D8HM--dp.js +23 -0
- package/dist/StaffSupportTicketInternalNotesTab-D8HM--dp.js.map +1 -0
- package/dist/StaffSupportTicketInternalNotesTab-DihYd5XI.js +8 -0
- package/dist/StaffSupportTicketList-DelptSmK.js +43 -0
- package/dist/StaffSupportTicketParent-BCrj3ckV.js +7 -0
- package/dist/StaffSupportTicketParent-Cx1buQZw.js +66 -0
- package/dist/StaffSupportTicketParent-Cx1buQZw.js.map +1 -0
- package/dist/StaffSupportTicketSuccess-BYxtY5wZ.js +43 -0
- package/dist/StaffSupportTicketWorkflowTab-BrDDBeK9.js +9 -0
- package/dist/StaffSupportTicketWorkflowTab-DmVTPzxS.js +1234 -0
- package/dist/StaffSupportTicketWorkflowTab-DmVTPzxS.js.map +1 -0
- package/dist/SupportTicketHistoryTab-CLMopA7a.js +220 -0
- package/dist/SupportTicketHistoryTab-CLMopA7a.js.map +1 -0
- package/dist/SupportTicketStatusBadge-YdZzjvkh.js +163 -0
- package/dist/SupportTicketStatusBadge-YdZzjvkh.js.map +1 -0
- package/dist/TeamAttachmentsTab-BxUpTWYh.js +43 -0
- package/dist/TeamHistoryTab-CUCT9MRG.js +5 -0
- package/dist/TeamHistoryTab-gB3H2KZv.js +219 -0
- package/dist/TeamHistoryTab-gB3H2KZv.js.map +1 -0
- package/dist/TeamList-By6pzWm5.js +43 -0
- package/dist/TeamMemberList-CYV9fWEb.js +43 -0
- package/dist/TeamMemberParent-CVvGqpxD.js +43 -0
- package/dist/TeamMembersTab-4gmnP9sD.js +21 -0
- package/dist/TeamMembersTab-4gmnP9sD.js.map +1 -0
- package/dist/TeamMembersTab-CpE9BaCi.js +3 -0
- package/dist/TeamNotesTab-pfXTDhg6.js +23 -0
- package/dist/TeamNotesTab-pfXTDhg6.js.map +1 -0
- package/dist/TeamNotesTab-u4cDC67X.js +8 -0
- package/dist/TeamParent-BxT1KubK.js +43 -0
- package/dist/UserListPage-DsQdH2Sm.js +4 -0
- package/dist/UserListPage-WU56KiWj.js +153 -0
- package/dist/UserListPage-WU56KiWj.js.map +1 -0
- package/dist/UserProfilePage-B73JhjUu.js +7 -0
- package/dist/UserProfilePage-BtLUY1kt.js +125 -0
- package/dist/UserProfilePage-BtLUY1kt.js.map +1 -0
- package/dist/ViewTeam-DzX-obEl.js +43 -0
- package/dist/ViewTeamMember-PF6S_4Pb.js +43 -0
- package/dist/ZiniaContainer-C7c7Vwkh.js +18 -0
- package/dist/ZiniaContainer-C7c7Vwkh.js.map +1 -0
- package/dist/convertToLocalDateTime-D4IoNvRj.js +111 -0
- package/dist/convertToLocalDateTime-D4IoNvRj.js.map +1 -0
- package/dist/creditValueFormatter-DftEzu8d.js +128 -0
- package/dist/creditValueFormatter-DftEzu8d.js.map +1 -0
- package/dist/displayIdFormatter-Dz900Awr.js +13 -0
- package/dist/displayIdFormatter-Dz900Awr.js.map +1 -0
- package/dist/index.d.ts +6068 -0
- package/dist/index.js +45 -0
- package/dist/src-o5fMIo5_.js +6649 -0
- package/dist/src-o5fMIo5_.js.map +1 -0
- package/dist/useBreadcrumbs-DmgSucoe.js +41 -0
- package/dist/useBreadcrumbs-DmgSucoe.js.map +1 -0
- package/dist/useMutation-CFwe7H9j.js +50 -0
- package/dist/useMutation-CFwe7H9j.js.map +1 -0
- package/dist/useQuery-p7oJO7OD.js +107 -0
- package/dist/useQuery-p7oJO7OD.js.map +1 -0
- package/dist/useQueryCache-ByayvZgZ.js +254 -0
- package/dist/useQueryCache-ByayvZgZ.js.map +1 -0
- package/dist/useRpcAuth-BLlRSHy8.js +722 -0
- package/dist/useRpcAuth-BLlRSHy8.js.map +1 -0
- package/package.json +62 -0
- package/src/daisyui.css +63 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { t as useMutation } from "./useMutation-CFwe7H9j.js";
|
|
2
|
+
import { t as FieldsetSection_default } from "./FieldsetSection-CsHN38_o.js";
|
|
3
|
+
import { createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, inject, openBlock, toDisplayString, unref, withCtx } from "vue";
|
|
4
|
+
import { useRoute } from "vue-router";
|
|
5
|
+
import { TeamMemberCreateSchema, TeamMemberUpdateSchema } from "@dragonmastery/dragoncore-shared";
|
|
6
|
+
import { useForm, withMetadata } from "@dragonmastery/zinia-forms-core";
|
|
7
|
+
import { toast } from "vue3-toastify";
|
|
8
|
+
|
|
9
|
+
//#region src/slices/team/team_member/teamMemberMetadata.ts
|
|
10
|
+
const teamMemberCreateSchemaWithMetadata = withMetadata(TeamMemberCreateSchema.omit({ team_id: true }), "teamMemberCreateSchema", {
|
|
11
|
+
user_id: {
|
|
12
|
+
inputType: "select",
|
|
13
|
+
placeholder: "Select user"
|
|
14
|
+
},
|
|
15
|
+
email_address: {
|
|
16
|
+
inputType: "email",
|
|
17
|
+
placeholder: "Enter email address"
|
|
18
|
+
},
|
|
19
|
+
website_address: {
|
|
20
|
+
inputType: "text",
|
|
21
|
+
placeholder: "Enter website address"
|
|
22
|
+
},
|
|
23
|
+
business_phone: {
|
|
24
|
+
inputType: "tel",
|
|
25
|
+
placeholder: "Enter business phone"
|
|
26
|
+
},
|
|
27
|
+
mobile_phone: {
|
|
28
|
+
inputType: "tel",
|
|
29
|
+
placeholder: "Enter mobile phone"
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
const teamMemberUpdateSchemaWithMetadata = withMetadata(TeamMemberUpdateSchema, "teamMemberUpdateSchema", {
|
|
33
|
+
email_address: {
|
|
34
|
+
inputType: "email",
|
|
35
|
+
placeholder: "Enter email address"
|
|
36
|
+
},
|
|
37
|
+
website_address: {
|
|
38
|
+
inputType: "text",
|
|
39
|
+
placeholder: "Enter website address"
|
|
40
|
+
},
|
|
41
|
+
business_phone: {
|
|
42
|
+
inputType: "tel",
|
|
43
|
+
placeholder: "Enter business phone"
|
|
44
|
+
},
|
|
45
|
+
mobile_phone: {
|
|
46
|
+
inputType: "tel",
|
|
47
|
+
placeholder: "Enter mobile phone"
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
//#endregion
|
|
52
|
+
//#region src/slices/team/team_member/EditTeamMemberForm.vue
|
|
53
|
+
const _hoisted_1 = {
|
|
54
|
+
key: 0,
|
|
55
|
+
class: "flex justify-center items-center p-8"
|
|
56
|
+
};
|
|
57
|
+
const _hoisted_2 = {
|
|
58
|
+
key: 1,
|
|
59
|
+
class: "alert alert-error mb-4"
|
|
60
|
+
};
|
|
61
|
+
const _hoisted_3 = {
|
|
62
|
+
key: 0,
|
|
63
|
+
class: "alert alert-error mb-4"
|
|
64
|
+
};
|
|
65
|
+
const _hoisted_4 = { class: "flex justify-center mt-6" };
|
|
66
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
67
|
+
__name: "EditTeamMemberForm",
|
|
68
|
+
props: {
|
|
69
|
+
teamMember: {},
|
|
70
|
+
isLoading: { type: Boolean },
|
|
71
|
+
error: {}
|
|
72
|
+
},
|
|
73
|
+
setup(__props) {
|
|
74
|
+
const props = __props;
|
|
75
|
+
const member_id = useRoute().params.member_id;
|
|
76
|
+
const { form, zinia, ZiniaForm, ZiniaSubmitButton, ZiniaResetButton, ZiniaFormErrorsSummary, clearSavedFormState } = useForm(teamMemberUpdateSchemaWithMetadata, {
|
|
77
|
+
storeName: `edit-team-member-${member_id}`,
|
|
78
|
+
persistToLocalStorage: false,
|
|
79
|
+
renderStyle: "daisy_ui",
|
|
80
|
+
fetchData: async () => {
|
|
81
|
+
if (!props.teamMember) throw new Error("No team member data found");
|
|
82
|
+
return props.teamMember;
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
const refreshTeamMember = inject("refreshTeamMember");
|
|
86
|
+
const { mutate: updateTeamMember } = useMutation((api, input) => api.teamMembers.updateTeamMember(input), { invalidate: /^team-members?:|^user:teams/ });
|
|
87
|
+
const handleSubmit = async (formData) => {
|
|
88
|
+
const updatedTeamMember = await updateTeamMember(formData);
|
|
89
|
+
if (!updatedTeamMember) throw new Error("Failed to update team member");
|
|
90
|
+
return updatedTeamMember;
|
|
91
|
+
};
|
|
92
|
+
const handleSuccess = async () => {
|
|
93
|
+
clearSavedFormState();
|
|
94
|
+
toast.success(`Team member updated successfully!`);
|
|
95
|
+
if (refreshTeamMember) await refreshTeamMember();
|
|
96
|
+
};
|
|
97
|
+
const handleError = (error) => {
|
|
98
|
+
form.setSubmitError(error instanceof Error ? error.message : "An unknown error occurred");
|
|
99
|
+
};
|
|
100
|
+
return (_ctx, _cache) => {
|
|
101
|
+
return unref(form).isLoading ? (openBlock(), createElementBlock("div", _hoisted_1, [..._cache[0] || (_cache[0] = [createElementVNode("span", { class: "loading loading-spinner loading-lg" }, null, -1)])])) : unref(form).loadError ? (openBlock(), createElementBlock("div", _hoisted_2, [_cache[1] || (_cache[1] = createElementVNode("svg", {
|
|
102
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
103
|
+
class: "stroke-current shrink-0 h-6 w-6",
|
|
104
|
+
fill: "none",
|
|
105
|
+
viewBox: "0 0 24 24"
|
|
106
|
+
}, [createElementVNode("path", {
|
|
107
|
+
"stroke-linecap": "round",
|
|
108
|
+
"stroke-linejoin": "round",
|
|
109
|
+
"stroke-width": "2",
|
|
110
|
+
d: "M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"
|
|
111
|
+
})], -1)), createElementVNode("span", null, toDisplayString(unref(form).loadError), 1)])) : (openBlock(), createBlock(unref(ZiniaForm), {
|
|
112
|
+
key: 2,
|
|
113
|
+
onHandleSubmit: handleSubmit,
|
|
114
|
+
onSuccess: handleSuccess,
|
|
115
|
+
onError: handleError,
|
|
116
|
+
title: "Edit Team Member",
|
|
117
|
+
subtitle: "Update team member details"
|
|
118
|
+
}, {
|
|
119
|
+
default: withCtx(() => [
|
|
120
|
+
createCommentVNode(" Basic Information "),
|
|
121
|
+
createVNode(FieldsetSection_default, { title: "Member Details" }, {
|
|
122
|
+
default: withCtx(() => [createVNode(unref(zinia).DisplayNameField, { placeholder: "Enter display name (optional)" }), createVNode(unref(zinia).RoleField, { placeholder: "Enter role (optional)" })]),
|
|
123
|
+
_: 1
|
|
124
|
+
}),
|
|
125
|
+
createCommentVNode(" Contact Information "),
|
|
126
|
+
createVNode(FieldsetSection_default, { title: "Contact Information" }, {
|
|
127
|
+
default: withCtx(() => [
|
|
128
|
+
createVNode(unref(zinia).EmailAddressField, { placeholder: "Enter email address (optional)" }),
|
|
129
|
+
createVNode(unref(zinia).BusinessPhoneField, { placeholder: "Enter business phone (optional)" }),
|
|
130
|
+
createVNode(unref(zinia).MobilePhoneField, { placeholder: "Enter mobile phone (optional)" }),
|
|
131
|
+
createVNode(unref(zinia).TimeZoneField, { placeholder: "Enter time zone (optional)" })
|
|
132
|
+
]),
|
|
133
|
+
_: 1
|
|
134
|
+
}),
|
|
135
|
+
createCommentVNode(" Web Presence "),
|
|
136
|
+
createVNode(FieldsetSection_default, { title: "Web Presence" }, {
|
|
137
|
+
default: withCtx(() => [createVNode(unref(zinia).WebsiteAddressField, { placeholder: "Enter website address (optional)" })]),
|
|
138
|
+
_: 1
|
|
139
|
+
}),
|
|
140
|
+
createCommentVNode(" Form Status Messages "),
|
|
141
|
+
unref(form).submitError ? (openBlock(), createElementBlock("div", _hoisted_3, [_cache[2] || (_cache[2] = createElementVNode("svg", {
|
|
142
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
143
|
+
class: "stroke-current shrink-0 h-6 w-6",
|
|
144
|
+
fill: "none",
|
|
145
|
+
viewBox: "0 0 24 24"
|
|
146
|
+
}, [createElementVNode("path", {
|
|
147
|
+
"stroke-linecap": "round",
|
|
148
|
+
"stroke-linejoin": "round",
|
|
149
|
+
"stroke-width": "2",
|
|
150
|
+
d: "M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"
|
|
151
|
+
})], -1)), createElementVNode("span", null, toDisplayString(unref(form).submitError), 1)])) : createCommentVNode("v-if", true),
|
|
152
|
+
createCommentVNode(" Submit Button "),
|
|
153
|
+
createElementVNode("div", _hoisted_4, [createVNode(unref(ZiniaSubmitButton), {
|
|
154
|
+
submitText: "Update Team Member",
|
|
155
|
+
submittingText: "Updating Team Member..."
|
|
156
|
+
})]),
|
|
157
|
+
createVNode(unref(ZiniaFormErrorsSummary), { title: "Please fix the following errors:" }),
|
|
158
|
+
createVNode(unref(ZiniaResetButton))
|
|
159
|
+
]),
|
|
160
|
+
_: 1
|
|
161
|
+
}));
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
var EditTeamMemberForm_default = _sfc_main;
|
|
166
|
+
|
|
167
|
+
//#endregion
|
|
168
|
+
export { teamMemberCreateSchemaWithMetadata as n, teamMemberUpdateSchemaWithMetadata as r, EditTeamMemberForm_default as t };
|
|
169
|
+
//# sourceMappingURL=EditTeamMemberForm-ru4WgLz-.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditTeamMemberForm-ru4WgLz-.js","names":[],"sources":["../src/slices/team/team_member/teamMemberMetadata.ts","../src/slices/team/team_member/EditTeamMemberForm.vue"],"sourcesContent":["import {\n type UseFormTyped,\n withMetadata,\n ZINIA_FIELDS_KEY,\n ZINIA_FORM_KEY,\n} from '@dragonmastery/zinia-forms-core';\nimport { TeamMemberCreateSchema, TeamMemberUpdateSchema } from '@dragonmastery/dragoncore-shared';\nimport { inject } from 'vue';\n\n// Create schema (no ID)\nexport const teamMemberCreateSchemaWithMetadata = withMetadata(\n TeamMemberCreateSchema.omit({ team_id: true }),\n 'teamMemberCreateSchema',\n {\n user_id: {\n inputType: 'select',\n placeholder: 'Select user',\n },\n email_address: {\n inputType: 'email',\n placeholder: 'Enter email address',\n },\n website_address: {\n inputType: 'text',\n placeholder: 'Enter website address',\n },\n business_phone: {\n inputType: 'tel',\n placeholder: 'Enter business phone',\n },\n mobile_phone: {\n inputType: 'tel',\n placeholder: 'Enter mobile phone',\n },\n },\n);\n\n// Update schema (with ID)\nexport const teamMemberUpdateSchemaWithMetadata = withMetadata(\n TeamMemberUpdateSchema,\n 'teamMemberUpdateSchema',\n {\n email_address: {\n inputType: 'email',\n placeholder: 'Enter email address',\n },\n website_address: {\n inputType: 'text',\n placeholder: 'Enter website address',\n },\n business_phone: {\n inputType: 'tel',\n placeholder: 'Enter business phone',\n },\n mobile_phone: {\n inputType: 'tel',\n placeholder: 'Enter mobile phone',\n },\n },\n);\n\nexport type TeamMemberCreateFormDto = UseFormTyped<typeof TeamMemberCreateSchema>;\nexport type TeamMemberUpdateFormDto = UseFormTyped<typeof TeamMemberUpdateSchema>;\n\nexport const injectTeamMemberCreateForm = () =>\n inject<TeamMemberCreateFormDto['form']>(ZINIA_FORM_KEY);\nexport const injectTeamMemberUpdateForm = () =>\n inject<TeamMemberUpdateFormDto['form']>(ZINIA_FORM_KEY);\nexport const injectTeamMemberZinia = () =>\n inject<TeamMemberCreateFormDto['zinia'] | TeamMemberUpdateFormDto['zinia']>(\n ZINIA_FIELDS_KEY,\n );\n","<template>\n <div v-if=\"form.isLoading\" class=\"flex justify-center items-center p-8\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n\n <div v-else-if=\"form.loadError\" class=\"alert alert-error mb-4\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"stroke-current shrink-0 h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <span>{{ form.loadError }}</span>\n </div>\n\n <ZiniaForm\n v-else\n @handle-submit=\"handleSubmit\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n title=\"Edit Team Member\"\n subtitle=\"Update team member details\"\n >\n <!-- Basic Information -->\n <FieldsetSection title=\"Member Details\">\n <zinia.DisplayNameField placeholder=\"Enter display name (optional)\" />\n <zinia.RoleField placeholder=\"Enter role (optional)\" />\n </FieldsetSection>\n\n <!-- Contact Information -->\n <FieldsetSection title=\"Contact Information\">\n <zinia.EmailAddressField placeholder=\"Enter email address (optional)\" />\n <zinia.BusinessPhoneField placeholder=\"Enter business phone (optional)\" />\n <zinia.MobilePhoneField placeholder=\"Enter mobile phone (optional)\" />\n <zinia.TimeZoneField placeholder=\"Enter time zone (optional)\" />\n </FieldsetSection>\n\n <!-- Web Presence -->\n <FieldsetSection title=\"Web Presence\">\n <zinia.WebsiteAddressField placeholder=\"Enter website address (optional)\" />\n </FieldsetSection>\n\n <!-- Form Status Messages -->\n <div v-if=\"form.submitError\" class=\"alert alert-error mb-4\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"stroke-current shrink-0 h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <span>{{ form.submitError }}</span>\n </div>\n\n <!-- Submit Button -->\n <div class=\"flex justify-center mt-6\">\n <ZiniaSubmitButton\n submitText=\"Update Team Member\"\n submittingText=\"Updating Team Member...\"\n />\n </div>\n <ZiniaFormErrorsSummary title=\"Please fix the following errors:\" />\n <ZiniaResetButton />\n </ZiniaForm>\n</template>\n\n<script setup lang=\"ts\">\nimport FieldsetSection from '../../../components/ui/FieldsetSection.vue';\nimport { useMutation } from '../../../composables/useMutation';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport type { TeamMemberReadDto, TeamMemberUpdateDto } from '@dragonmastery/dragoncore-shared';\nimport { inject } from 'vue';\nimport { useRoute } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { teamMemberUpdateSchemaWithMetadata } from './teamMemberMetadata';\n\ninterface Props {\n teamMember: TeamMemberReadDto | null;\n isLoading?: boolean;\n error?: Error | null;\n}\n\nconst props = defineProps<Props>();\n\nconst route = useRoute();\nconst member_id = route.params.member_id as string;\n\nconst {\n form,\n zinia,\n ZiniaForm,\n ZiniaSubmitButton,\n ZiniaResetButton,\n ZiniaFormErrorsSummary,\n clearSavedFormState,\n} = useForm(teamMemberUpdateSchemaWithMetadata, {\n storeName: `edit-team-member-${member_id}`,\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n fetchData: async () => {\n if (!props.teamMember) {\n throw new Error('No team member data found');\n }\n\n return props.teamMember as TeamMemberUpdateDto;\n },\n});\n\n// Get refresh function from parent\nconst refreshTeamMember = inject<(() => Promise<void>) | undefined>('refreshTeamMember');\n\n// Setup mutation for updating team member\nconst { mutate: updateTeamMember } = useMutation(\n (api, input: TeamMemberUpdateDto) => api.teamMembers.updateTeamMember(input),\n { invalidate: /^team-members?:|^user:teams/ },\n);\n\n// Handle form submission\nconst handleSubmit = async (formData: TeamMemberUpdateDto) => {\n const updatedTeamMember = await updateTeamMember(formData);\n if (!updatedTeamMember) {\n throw new Error('Failed to update team member');\n }\n return updatedTeamMember;\n};\n\n// Handle successful submission\nconst handleSuccess = async () => {\n clearSavedFormState();\n toast.success(`Team member updated successfully!`);\n // Refresh team member data via parent\n if (refreshTeamMember) {\n await refreshTeamMember();\n }\n};\n\n// Handle submission error\nconst handleError = (error: Error | unknown) => {\n form.setSubmitError(error instanceof Error ? error.message : 'An unknown error occurred');\n};\n</script>\n"],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { t as useMutation } from "./useMutation-CFwe7H9j.js";
|
|
2
|
+
import { t as useQuery } from "./useQuery-p7oJO7OD.js";
|
|
3
|
+
import { t as formatSystemTimestamp } from "./convertToLocalDateTime-D4IoNvRj.js";
|
|
4
|
+
import { Fragment, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, normalizeClass, openBlock, ref, toDisplayString, unref, withCtx } from "vue";
|
|
5
|
+
import { useRoute, useRouter } from "vue-router";
|
|
6
|
+
import { UserUpdateSchema } from "@dragonmastery/dragoncore-shared";
|
|
7
|
+
import { useForm, withMetadata } from "@dragonmastery/zinia-forms-core";
|
|
8
|
+
import { toast } from "vue3-toastify";
|
|
9
|
+
|
|
10
|
+
//#region src/slices/admin/features/user_management/updateUserMetadata.ts
|
|
11
|
+
const updateUserSchemaWithMetadata = withMetadata(UserUpdateSchema, "updateUserSchema", { user_type: {
|
|
12
|
+
label: "User Role",
|
|
13
|
+
helpText: "Select the role for this user"
|
|
14
|
+
} });
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
//#region src/slices/admin/features/user_management/EditUserPage.vue
|
|
18
|
+
const _hoisted_1 = { class: "max-w-2xl mx-auto bg-base-200 p-6 rounded-xl shadow-md container" };
|
|
19
|
+
const _hoisted_2 = {
|
|
20
|
+
key: 0,
|
|
21
|
+
class: "flex justify-center py-8"
|
|
22
|
+
};
|
|
23
|
+
const _hoisted_3 = { class: "alert alert-error mb-4" };
|
|
24
|
+
const _hoisted_4 = { class: "card bg-base-100 shadow-xl mb-6" };
|
|
25
|
+
const _hoisted_5 = { class: "card-body" };
|
|
26
|
+
const _hoisted_6 = { class: "grid grid-cols-1 md:grid-cols-2 gap-4" };
|
|
27
|
+
const _hoisted_7 = { class: "input input-bordered bg-base-200" };
|
|
28
|
+
const _hoisted_8 = { class: "input input-bordered bg-base-200" };
|
|
29
|
+
const _hoisted_9 = { class: "flex items-center" };
|
|
30
|
+
const _hoisted_10 = { class: "input input-bordered bg-base-200" };
|
|
31
|
+
const _hoisted_11 = {
|
|
32
|
+
key: 0,
|
|
33
|
+
class: "alert alert-error mb-4"
|
|
34
|
+
};
|
|
35
|
+
const _hoisted_12 = { class: "flex justify-center mt-6" };
|
|
36
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
37
|
+
__name: "EditUserPage",
|
|
38
|
+
setup(__props) {
|
|
39
|
+
const route = useRoute();
|
|
40
|
+
const router = useRouter();
|
|
41
|
+
const userId = route.params.id;
|
|
42
|
+
const { data, loading: fetching, error } = useQuery((api) => api.users.getUser(userId), { staleTime: 300 * 1e3 });
|
|
43
|
+
const userData = ref(null);
|
|
44
|
+
const { form, zinia, ZiniaForm, ZiniaSubmitButton, ZiniaResetButton, ZiniaFormErrorsSummary } = useForm(updateUserSchemaWithMetadata, {
|
|
45
|
+
storeName: `edit-user-form-${userId}`,
|
|
46
|
+
persistToLocalStorage: false,
|
|
47
|
+
renderStyle: "daisy_ui",
|
|
48
|
+
fetchData: async () => {
|
|
49
|
+
while (fetching.value) await new Promise((resolve) => setTimeout(resolve, 100));
|
|
50
|
+
if (!data.value) throw new Error("User not found");
|
|
51
|
+
userData.value = data.value;
|
|
52
|
+
return {
|
|
53
|
+
id: data.value?.id,
|
|
54
|
+
user_type: data.value?.user_type
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
const { mutate: updateUser } = useMutation((api, formData) => api.users.updateUser(formData), { invalidate: /^users?:/ });
|
|
59
|
+
const handleSubmit = async (formData) => {
|
|
60
|
+
const result = await updateUser(formData);
|
|
61
|
+
if (!result) throw new Error("Failed to update user");
|
|
62
|
+
return result;
|
|
63
|
+
};
|
|
64
|
+
const handleSuccess = async (_result) => {
|
|
65
|
+
await router.push({ name: "UserManagement" });
|
|
66
|
+
toast.success("User role updated successfully!");
|
|
67
|
+
};
|
|
68
|
+
const handleError = (error$1) => {
|
|
69
|
+
form.setSubmitError(error$1 instanceof Error ? error$1.message : "An unknown error occurred");
|
|
70
|
+
};
|
|
71
|
+
return (_ctx, _cache) => {
|
|
72
|
+
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
73
|
+
_cache[6] || (_cache[6] = createElementVNode("h1", { class: "text-2xl font-bold mb-6 text-center" }, "Edit User", -1)),
|
|
74
|
+
createCommentVNode(" Loading State "),
|
|
75
|
+
unref(fetching) ? (openBlock(), createElementBlock("div", _hoisted_2, [..._cache[0] || (_cache[0] = [createElementVNode("span", { class: "loading loading-spinner loading-lg" }, null, -1)])])) : unref(error) ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" Error State "), createElementVNode("div", _hoisted_3, [createElementVNode("span", null, "Error loading user: " + toDisplayString(unref(error).message), 1)])], 2112)) : userData.value ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [createCommentVNode(" Edit Form "), createElementVNode("div", null, [
|
|
76
|
+
createCommentVNode(" Read-only user info "),
|
|
77
|
+
createElementVNode("div", _hoisted_4, [createElementVNode("div", _hoisted_5, [_cache[5] || (_cache[5] = createElementVNode("h2", { class: "card-title" }, "User Information", -1)), createElementVNode("div", _hoisted_6, [
|
|
78
|
+
createElementVNode("div", null, [_cache[1] || (_cache[1] = createElementVNode("label", { class: "label" }, [createElementVNode("span", { class: "label-text font-semibold" }, "Username")], -1)), createElementVNode("div", _hoisted_7, toDisplayString(userData.value.username), 1)]),
|
|
79
|
+
createElementVNode("div", null, [_cache[2] || (_cache[2] = createElementVNode("label", { class: "label" }, [createElementVNode("span", { class: "label-text font-semibold" }, "Email")], -1)), createElementVNode("div", _hoisted_8, toDisplayString(userData.value.email), 1)]),
|
|
80
|
+
createElementVNode("div", null, [_cache[3] || (_cache[3] = createElementVNode("label", { class: "label" }, [createElementVNode("span", { class: "label-text font-semibold" }, "Email Verified")], -1)), createElementVNode("div", _hoisted_9, [createElementVNode("span", { class: normalizeClass(["badge", userData.value.email_verified ? "badge-success" : "badge-error"]) }, toDisplayString(userData.value.email_verified ? "Verified" : "Not Verified"), 3)])]),
|
|
81
|
+
createElementVNode("div", null, [_cache[4] || (_cache[4] = createElementVNode("label", { class: "label" }, [createElementVNode("span", { class: "label-text font-semibold" }, "Created")], -1)), createElementVNode("div", _hoisted_10, toDisplayString(unref(formatSystemTimestamp)(userData.value.created_at)), 1)])
|
|
82
|
+
])])]),
|
|
83
|
+
createCommentVNode(" Editable role "),
|
|
84
|
+
createVNode(unref(ZiniaForm), {
|
|
85
|
+
onHandleSubmit: handleSubmit,
|
|
86
|
+
onSuccess: handleSuccess,
|
|
87
|
+
onError: handleError,
|
|
88
|
+
title: "Update User Role",
|
|
89
|
+
subtitle: "Change the user's role in the system"
|
|
90
|
+
}, {
|
|
91
|
+
default: withCtx(() => [
|
|
92
|
+
createVNode(unref(zinia).UserTypeField),
|
|
93
|
+
unref(form).submitError ? (openBlock(), createElementBlock("div", _hoisted_11, [createElementVNode("span", null, toDisplayString(unref(form).submitError), 1)])) : createCommentVNode("v-if", true),
|
|
94
|
+
createElementVNode("div", _hoisted_12, [createVNode(unref(ZiniaSubmitButton), {
|
|
95
|
+
submitText: "Update Role",
|
|
96
|
+
submittingText: "Updating..."
|
|
97
|
+
})]),
|
|
98
|
+
createVNode(unref(ZiniaFormErrorsSummary), { title: "Please fix the following errors:" }),
|
|
99
|
+
createVNode(unref(ZiniaResetButton))
|
|
100
|
+
]),
|
|
101
|
+
_: 1
|
|
102
|
+
})
|
|
103
|
+
])], 2112)) : createCommentVNode("v-if", true)
|
|
104
|
+
]);
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
var EditUserPage_default = _sfc_main;
|
|
109
|
+
|
|
110
|
+
//#endregion
|
|
111
|
+
export { updateUserSchemaWithMetadata as n, EditUserPage_default as t };
|
|
112
|
+
//# sourceMappingURL=EditUserPage-BxJ5QvIM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditUserPage-BxJ5QvIM.js","names":[],"sources":["../src/slices/admin/features/user_management/updateUserMetadata.ts","../src/slices/admin/features/user_management/EditUserPage.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { UserUpdateSchema } from '@dragonmastery/dragoncore-shared';\n\nexport const updateUserSchemaWithMetadata = withMetadata(\n UserUpdateSchema,\n 'updateUserSchema',\n {\n user_type: {\n label: 'User Role',\n helpText: 'Select the role for this user',\n },\n },\n);\n","<template>\n <div class=\"max-w-2xl mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Edit User</h1>\n\n <!-- Loading State -->\n <div v-if=\"fetching\" class=\"flex justify-center py-8\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n\n <!-- Error State -->\n <div v-else-if=\"error\" class=\"alert alert-error mb-4\">\n <span>Error loading user: {{ error.message }}</span>\n </div>\n\n <!-- Edit Form -->\n <div v-else-if=\"userData\">\n <!-- Read-only user info -->\n <div class=\"card bg-base-100 shadow-xl mb-6\">\n <div class=\"card-body\">\n <h2 class=\"card-title\">User Information</h2>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div>\n <label class=\"label\">\n <span class=\"label-text font-semibold\">Username</span>\n </label>\n <div class=\"input input-bordered bg-base-200\">\n {{ userData.username }}\n </div>\n </div>\n <div>\n <label class=\"label\">\n <span class=\"label-text font-semibold\">Email</span>\n </label>\n <div class=\"input input-bordered bg-base-200\">\n {{ userData.email }}\n </div>\n </div>\n <div>\n <label class=\"label\">\n <span class=\"label-text font-semibold\">Email Verified</span>\n </label>\n <div class=\"flex items-center\">\n <span\n class=\"badge\"\n :class=\"userData.email_verified ? 'badge-success' : 'badge-error'\"\n >\n {{ userData.email_verified ? 'Verified' : 'Not Verified' }}\n </span>\n </div>\n </div>\n <div>\n <label class=\"label\">\n <span class=\"label-text font-semibold\">Created</span>\n </label>\n <div class=\"input input-bordered bg-base-200\">\n {{ formatSystemTimestamp(userData.created_at) }}\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Editable role -->\n <ZiniaForm\n @handle-submit=\"handleSubmit\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n title=\"Update User Role\"\n subtitle=\"Change the user's role in the system\"\n >\n <zinia.UserTypeField />\n\n <div v-if=\"form.submitError\" class=\"alert alert-error mb-4\">\n <span>{{ form.submitError }}</span>\n </div>\n\n <div class=\"flex justify-center mt-6\">\n <ZiniaSubmitButton submitText=\"Update Role\" submittingText=\"Updating...\" />\n </div>\n\n <ZiniaFormErrorsSummary title=\"Please fix the following errors:\" />\n <ZiniaResetButton />\n </ZiniaForm>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useQuery } from '../../../../composables/useQuery';\nimport { formatSystemTimestamp } from '../../../../utils/convertToLocalDateTime';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport type { UserUpdateDto } from '@dragonmastery/dragoncore-shared';\nimport { ref } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { updateUserSchemaWithMetadata } from './updateUserMetadata';\n\nconst route = useRoute();\nconst router = useRouter();\nconst userId = route.params.id as string;\n\n// Fetch user data\nconst {\n data,\n loading: fetching,\n error,\n} = useQuery((api) => api.users.getUser(userId), {\n staleTime: 5 * 60 * 1000,\n});\n\nconst userData = ref<any | null>(null);\n\n// Create form with user data\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton, ZiniaResetButton, ZiniaFormErrorsSummary } =\n useForm(updateUserSchemaWithMetadata, {\n storeName: `edit-user-form-${userId}`,\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n fetchData: async () => {\n while (fetching.value) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n if (!data.value) {\n throw new Error('User not found');\n }\n\n userData.value = data.value;\n return {\n id: data.value?.id,\n user_type: data.value?.user_type,\n } satisfies UserUpdateDto;\n },\n });\n\nconst { mutate: updateUser } = useMutation(\n (api, formData: UserUpdateDto) => api.users.updateUser(formData),\n { invalidate: /^users?:/ },\n);\n\nconst handleSubmit = async (formData: UserUpdateDto) => {\n const result = await updateUser(formData);\n if (!result) throw new Error('Failed to update user');\n return result;\n};\n\nconst handleSuccess = async (_result: any) => {\n await router.push({ name: 'UserManagement' });\n toast.success('User role updated successfully!');\n};\n\nconst handleError = (error: Error | unknown) => {\n form.setSubmitError(error instanceof Error ? error.message : 'An unknown error occurred');\n};\n</script>\n"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import "./useRpcAuth-BLlRSHy8.js";
|
|
2
|
+
import "./useQueryCache-ByayvZgZ.js";
|
|
3
|
+
import "./useMutation-CFwe7H9j.js";
|
|
4
|
+
import "./useQuery-p7oJO7OD.js";
|
|
5
|
+
import { t as EditUserPage_default } from "./EditUserPage-BxJ5QvIM.js";
|
|
6
|
+
|
|
7
|
+
export { EditUserPage_default as default };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createCommentVNode, createElementBlock, createElementVNode, defineComponent, openBlock, renderSlot, toDisplayString } from "vue";
|
|
2
|
+
|
|
3
|
+
//#region src/components/ui/FieldsetSection.vue
|
|
4
|
+
const _hoisted_1 = { class: "bg-base-100 border-base-300 border p-4 mb-6 rounded-xl" };
|
|
5
|
+
const _hoisted_2 = { class: "text-xl font-medium mb-5 top-4 text-center relative" };
|
|
6
|
+
const _hoisted_3 = { class: "grid grid-cols-1 sm:grid-cols-2 gap-6 pt-2" };
|
|
7
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
8
|
+
__name: "FieldsetSection",
|
|
9
|
+
props: { title: {
|
|
10
|
+
type: String,
|
|
11
|
+
required: true
|
|
12
|
+
} },
|
|
13
|
+
setup(__props) {
|
|
14
|
+
return (_ctx, _cache) => {
|
|
15
|
+
return openBlock(), createElementBlock("fieldset", _hoisted_1, [
|
|
16
|
+
createElementVNode("legend", _hoisted_2, toDisplayString(__props.title), 1),
|
|
17
|
+
createCommentVNode(" Mobile: Single column "),
|
|
18
|
+
createElementVNode("div", _hoisted_3, [renderSlot(_ctx.$slots, "default")])
|
|
19
|
+
]);
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
var FieldsetSection_default = _sfc_main;
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
export { FieldsetSection_default as t };
|
|
27
|
+
//# sourceMappingURL=FieldsetSection-CsHN38_o.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldsetSection-CsHN38_o.js","names":[],"sources":["../src/components/ui/FieldsetSection.vue"],"sourcesContent":["<template>\n <fieldset class=\"bg-base-100 border-base-300 border p-4 mb-6 rounded-xl\">\n <legend class=\"text-xl font-medium mb-5 top-4 text-center relative\">{{ title }}</legend>\n\n <!-- Mobile: Single column -->\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-6 pt-2\">\n <slot></slot>\n </div>\n </fieldset>\n</template>\n\n<script setup lang=\"ts\">\ndefineProps({\n title: {\n type: String,\n required: true,\n },\n});\n</script>\n"],"mappings":";;;;;;;;;;;;;;uBACE,mBAOW,YAPX,YAOW;IANT,mBAAwF,UAAxF,YAAwF,gBAAjB,QAAA,MAAK,EAAA,EAAA;IAE5E,mBAAA,0BAA8B;IAC9B,mBAEM,OAFN,YAEM,CADJ,WAAa,KAAA,QAAA,UAAA,CAAA,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import "./useRpcAuth-BLlRSHy8.js";
|
|
2
|
+
import "./useQueryCache-ByayvZgZ.js";
|
|
3
|
+
import "./useMutation-CFwe7H9j.js";
|
|
4
|
+
import "./AppLink-CHMMrSFI.js";
|
|
5
|
+
import { t as ForgotPassword_default } from "./ForgotPassword-CqhenzUG.js";
|
|
6
|
+
|
|
7
|
+
export { ForgotPassword_default as default };
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { t as useMutation } from "./useMutation-CFwe7H9j.js";
|
|
2
|
+
import { t as AppLink_default } from "./AppLink-CHMMrSFI.js";
|
|
3
|
+
import { createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, unref, withCtx } from "vue";
|
|
4
|
+
import { forgot_password_zod } from "@dragonmastery/dragoncore-shared";
|
|
5
|
+
import { useForm, withMetadata } from "@dragonmastery/zinia-forms-core";
|
|
6
|
+
import { toast } from "vue3-toastify";
|
|
7
|
+
|
|
8
|
+
//#region src/slices/auth/features/forgot_password/forgot_password_schema.ts
|
|
9
|
+
const forgotPasswordSchemaWithMetadata = withMetadata(forgot_password_zod, "forgotPasswordSchema", { email: {
|
|
10
|
+
inputType: "email",
|
|
11
|
+
placeholder: "you@example.com",
|
|
12
|
+
helpText: "Enter the email address you used to register",
|
|
13
|
+
autocomplete: "username",
|
|
14
|
+
className: "login-field",
|
|
15
|
+
autofocus: true
|
|
16
|
+
} });
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/slices/auth/features/forgot_password/ForgotPassword.vue
|
|
20
|
+
const _hoisted_1 = { class: "max-w-md mx-auto bg-base-200 p-6 rounded-xl shadow-md container" };
|
|
21
|
+
const _hoisted_2 = { class: "text-center mt-2" };
|
|
22
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
23
|
+
__name: "ForgotPassword",
|
|
24
|
+
setup(__props) {
|
|
25
|
+
const { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(forgotPasswordSchemaWithMetadata, {
|
|
26
|
+
storeName: "forgot-password-form",
|
|
27
|
+
persistToLocalStorage: false,
|
|
28
|
+
renderStyle: "daisy_ui"
|
|
29
|
+
});
|
|
30
|
+
const { mutate: forgotPasswordMutate } = useMutation((api, email) => api.passwordReset.forgotPassword(email), { skipAuthCheck: true });
|
|
31
|
+
const handleSubmit = async (data) => {
|
|
32
|
+
const result = await forgotPasswordMutate(data.email);
|
|
33
|
+
if (!result?.ok) throw new Error("Forgot password failed");
|
|
34
|
+
return result.ok;
|
|
35
|
+
};
|
|
36
|
+
const handleSuccess = async (_data) => {
|
|
37
|
+
form.reset();
|
|
38
|
+
toast.success("If the email address exists, an email has been sent to your email address with instructions to reset your password.");
|
|
39
|
+
};
|
|
40
|
+
const handleError = (error) => {
|
|
41
|
+
console.log("Forgot password failed", error);
|
|
42
|
+
toast.error(error.message || "Forgot password failed");
|
|
43
|
+
};
|
|
44
|
+
return (_ctx, _cache) => {
|
|
45
|
+
return openBlock(), createElementBlock("div", _hoisted_1, [_cache[2] || (_cache[2] = createElementVNode("h1", { class: "text-2xl font-bold mb-6 text-center" }, "Forgot Password", -1)), createVNode(unref(ZiniaForm), {
|
|
46
|
+
onHandleSubmit: handleSubmit,
|
|
47
|
+
onSuccess: handleSuccess,
|
|
48
|
+
onError: handleError
|
|
49
|
+
}, {
|
|
50
|
+
default: withCtx(() => [
|
|
51
|
+
createVNode(unref(zinia).EmailField),
|
|
52
|
+
createVNode(unref(ZiniaSubmitButton), {
|
|
53
|
+
submitText: "Send Reset Password Email",
|
|
54
|
+
submittingText: "Sending..."
|
|
55
|
+
}),
|
|
56
|
+
createElementVNode("div", _hoisted_2, [createElementVNode("p", null, [_cache[1] || (_cache[1] = createTextVNode(" Already have an account? ", -1)), createVNode(AppLink_default, {
|
|
57
|
+
class: "link-accent link",
|
|
58
|
+
to: "/auth/login"
|
|
59
|
+
}, {
|
|
60
|
+
default: withCtx(() => [..._cache[0] || (_cache[0] = [createTextVNode("Login", -1)])]),
|
|
61
|
+
_: 1
|
|
62
|
+
})])])
|
|
63
|
+
]),
|
|
64
|
+
_: 1
|
|
65
|
+
})]);
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
var ForgotPassword_default = _sfc_main;
|
|
70
|
+
|
|
71
|
+
//#endregion
|
|
72
|
+
export { forgotPasswordSchemaWithMetadata as n, ForgotPassword_default as t };
|
|
73
|
+
//# sourceMappingURL=ForgotPassword-CqhenzUG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ForgotPassword-CqhenzUG.js","names":[],"sources":["../src/slices/auth/features/forgot_password/forgot_password_schema.ts","../src/slices/auth/features/forgot_password/ForgotPassword.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { forgot_password_zod } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\n\n// Define the login form type\nexport type ForgotPasswordForm = z.infer<typeof forgot_password_zod>;\n\n// Enhance the schema with metadata\nexport const forgotPasswordSchemaWithMetadata = withMetadata(\n forgot_password_zod,\n 'forgotPasswordSchema',\n {\n email: {\n inputType: 'email',\n placeholder: 'you@example.com',\n helpText: 'Enter the email address you used to register',\n autocomplete: 'username',\n className: 'login-field',\n autofocus: true,\n },\n },\n);\n","<template>\n <div class=\"max-w-md mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Forgot Password</h1>\n\n <ZiniaForm @handle-submit=\"handleSubmit\" @success=\"handleSuccess\" @error=\"handleError\">\n <zinia.EmailField />\n\n <ZiniaSubmitButton submitText=\"Send Reset Password Email\" submittingText=\"Sending...\" />\n\n <div class=\"text-center mt-2\">\n <p>\n Already have an account?\n <AppLink class=\"link-accent link\" to=\"/auth/login\">Login</AppLink>\n </p>\n </div>\n </ZiniaForm>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AppLink from '../../../../components/AppLink.vue';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { toast } from 'vue3-toastify';\nimport { z } from 'zod';\nimport { forgotPasswordSchemaWithMetadata } from './forgot_password_schema';\n\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(\n forgotPasswordSchemaWithMetadata,\n {\n storeName: 'forgot-password-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n },\n);\n\nconst { mutate: forgotPasswordMutate } = useMutation(\n (api, email: string) => api.passwordReset.forgotPassword(email),\n {\n skipAuthCheck: true, // Forgot password should work without authentication\n },\n);\n\n// Handle form submission\nconst handleSubmit = async (data: z.infer<typeof forgotPasswordSchemaWithMetadata>) => {\n const result = await forgotPasswordMutate(data.email);\n if (!result?.ok) throw new Error('Forgot password failed');\n return result.ok;\n};\n\n// Handle success\nconst handleSuccess = async (_data: boolean) => {\n form.reset();\n toast.success(\n 'If the email address exists, an email has been sent to your email address with instructions to reset your password.',\n );\n};\n\n// Handle error\nconst handleError = (error: any) => {\n console.log('Forgot password failed', error);\n toast.error(error.message || 'Forgot password failed');\n};\n</script>\n"],"mappings":";;;;;;;;AAQA,MAAa,mCAAmC,aAC9C,qBACA,wBACA,EACE,OAAO;CACL,WAAW;CACX,aAAa;CACb,UAAU;CACV,cAAc;CACd,WAAW;CACX,WAAW;CACZ,EACF,CACF;;;;;;;;;ECMD,MAAM,EAAE,MAAM,OAAO,WAAW,sBAAsB,QACpD,kCACA;GACE,WAAW;GACX,uBAAuB;GACvB,aAAa;GACd,CACF;EAED,MAAM,EAAE,QAAQ,yBAAyB,aACtC,KAAK,UAAkB,IAAI,cAAc,eAAe,MAAM,EAC/D,EACE,eAAe,MAChB,CACF;EAGD,MAAM,eAAe,OAAO,SAA2D;GACrF,MAAM,SAAS,MAAM,qBAAqB,KAAK,MAAM;AACrD,OAAI,CAAC,QAAQ,GAAI,OAAM,IAAI,MAAM,yBAAyB;AAC1D,UAAO,OAAO;;EAIhB,MAAM,gBAAgB,OAAO,UAAmB;AAC9C,QAAK,OAAO;AACZ,SAAM,QACJ,sHACD;;EAIH,MAAM,eAAe,UAAe;AAClC,WAAQ,IAAI,0BAA0B,MAAM;AAC5C,SAAM,MAAM,MAAM,WAAW,yBAAyB;;;uBA5DtD,mBAeM,OAfN,YAeM,CAAA,OAAA,OAAA,OAAA,KAdJ,mBAAoE,MAAA,EAAhE,OAAM,uCAAqC,EAAC,mBAAe,GAAA,GAE/D,YAWY,MAAA,UAAA,EAAA;IAXA,gBAAe;IAAe,WAAS;IAAgB,SAAO;;2BACpD;KAApB,YAAoB,MAAA,MAAA,CAAA,WAAA;KAEpB,YAAwF,MAAA,kBAAA,EAAA;MAArE,YAAW;MAA4B,gBAAe;;KAEzE,mBAKM,OALN,YAKM,CAJJ,mBAGI,KAAA,MAAA,CAAA,OAAA,OAAA,OAAA,KAAA,gBAHD,8BAED,GAAA,GAAA,YAAkE,iBAAA;MAAzD,OAAM;MAAmB,IAAG;;6BAAmB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAL,SAAK,GAAA,CAAA,EAAA,CAAA"}
|