@dragonmastery/dragoncore-vue 0.0.29 → 0.0.30
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/dist/{ChangePasswordPage-C7rqJfii.js → ChangePasswordPage-D1LGJ02W.js} +1 -1
- package/dist/{ChangePasswordPage-nr0B06HB.js → ChangePasswordPage-Dy8lFUcI.js} +1 -1
- package/dist/{ChangePasswordPage-nr0B06HB.js.map → ChangePasswordPage-Dy8lFUcI.js.map} +1 -1
- package/dist/{ConsentFlowStep-DstxorHZ.js → ConsentFlowStep-DsVhXa91.js} +2 -2
- package/dist/{ConsentFlowStep-DstxorHZ.js.map → ConsentFlowStep-DsVhXa91.js.map} +1 -1
- package/dist/{ConsentRequired-ELUidmNv.js → ConsentRequired-B3eLxJgx.js} +3 -3
- package/dist/{ConsentRequired-ELUidmNv.js.map → ConsentRequired-B3eLxJgx.js.map} +1 -1
- package/dist/CreateTeamForm-5V_ks5Ie.js +12 -0
- package/dist/{CreateTeamForm-DNkueBzR.js → CreateTeamForm-B7MsOsiV.js} +4 -4
- package/dist/{CreateTeamForm-DNkueBzR.js.map → CreateTeamForm-B7MsOsiV.js.map} +1 -1
- package/dist/{CreateTeamMemberForm-CSF-tD6B.js → CreateTeamMemberForm-CayF2tIJ.js} +5 -5
- package/dist/{CreateTeamMemberForm-ITp4XFn9.js → CreateTeamMemberForm-DeUyXnVa.js} +4 -4
- package/dist/{CreateTeamMemberForm-ITp4XFn9.js.map → CreateTeamMemberForm-DeUyXnVa.js.map} +1 -1
- package/dist/{CreditBalanceDashboard-CLQ8NZnY.js → CreditBalanceDashboard-CoIEyZWh.js} +2 -2
- package/dist/{CreditBalanceDashboard-CLQ8NZnY.js.map → CreditBalanceDashboard-CoIEyZWh.js.map} +1 -1
- package/dist/{CreditBalanceDashboard-jdvZa-ZT.js → CreditBalanceDashboard-D_TsFlTp.js} +5 -5
- package/dist/{CreditManagement-Dus4O1BY.js → CreditManagement-CCyU_yja.js} +2 -2
- package/dist/{CreditManagement-Dus4O1BY.js.map → CreditManagement-CCyU_yja.js.map} +1 -1
- package/dist/{CreditManagement-DvGikLLe.js → CreditManagement-CdkqQM7F.js} +5 -5
- package/dist/{CreditTransactionHistory-BZZGQxTV.js → CreditTransactionHistory-UPg9uDNy.js} +3 -3
- package/dist/{CreditTransactionHistory-BZZGQxTV.js.map → CreditTransactionHistory-UPg9uDNy.js.map} +1 -1
- package/dist/{CustomerCreateSupportTicketForm-C3CgjqXg.js → CustomerCreateSupportTicketForm-CiTTUqtW.js} +5 -5
- package/dist/{CustomerCreateSupportTicketForm-CeG8IKA1.js → CustomerCreateSupportTicketForm-DFH1JtlA.js} +3 -3
- package/dist/{CustomerCreateSupportTicketForm-CeG8IKA1.js.map → CustomerCreateSupportTicketForm-DFH1JtlA.js.map} +1 -1
- package/dist/{CustomerSupportTicketDetailPage-CUkf9swo.js → CustomerSupportTicketDetailPage-DAwiE2t6.js} +5 -5
- package/dist/{CustomerSupportTicketDetailPage-CUkf9swo.js.map → CustomerSupportTicketDetailPage-DAwiE2t6.js.map} +1 -1
- package/dist/CustomerSupportTicketList-CKZl8jxx.js +64 -0
- package/dist/{CustomerSupportTicketParent-D19kei4H.js → CustomerSupportTicketParent-D3Gj4Hel.js} +2 -2
- package/dist/{CustomerSupportTicketParent-BaKfkSlU.js → CustomerSupportTicketParent-rl4Ym8oa.js} +3 -3
- package/dist/{CustomerSupportTicketParent-BaKfkSlU.js.map → CustomerSupportTicketParent-rl4Ym8oa.js.map} +1 -1
- package/dist/{CustomerSupportTicketSuccess-Cc75m_p-.js → CustomerSupportTicketSuccess-BEhFZgtn.js} +2 -2
- package/dist/{CustomerSupportTicketSuccess-Cc75m_p-.js.map → CustomerSupportTicketSuccess-BEhFZgtn.js.map} +1 -1
- package/dist/{CustomerSupportTicketSuccess-ca10puM-.js → CustomerSupportTicketSuccess-BJO2xsQR.js} +4 -4
- package/dist/{DefaultReferralTeamPage-fO3tmwOb.js → DefaultReferralTeamPage-D3UIrIZK.js} +2 -2
- package/dist/{DefaultReferralTeamPage-fO3tmwOb.js.map → DefaultReferralTeamPage-D3UIrIZK.js.map} +1 -1
- package/dist/EditTeamForm-Bf4rSgQg.js +12 -0
- package/dist/{EditTeamForm-DdvKHlNj.js → EditTeamForm-C1_-p3lZ.js} +4 -4
- package/dist/{EditTeamForm-DdvKHlNj.js.map → EditTeamForm-C1_-p3lZ.js.map} +1 -1
- package/dist/{EditTeamMemberForm-CIqEjFF8.js → EditTeamMemberForm-Bh6zVNyJ.js} +3 -3
- package/dist/{EditTeamMemberForm-Fyf8Zxfh.js → EditTeamMemberForm-D9cofrUM.js} +3 -3
- package/dist/{EditTeamMemberForm-Fyf8Zxfh.js.map → EditTeamMemberForm-D9cofrUM.js.map} +1 -1
- package/dist/{EditUserPage-D3AWaHT2.js → EditUserPage-CQgp-08o.js} +1 -1
- package/dist/{EditUserPage-BBzGmOrx.js → EditUserPage-CwsO8naT.js} +2 -2
- package/dist/{EditUserPage-BBzGmOrx.js.map → EditUserPage-CwsO8naT.js.map} +1 -1
- package/dist/{ExternalLinkIcon-FidcmNOa.js → ExternalLinkIcon-BKVV5Gjm.js} +1 -1
- package/dist/{ExternalLinkIcon-FidcmNOa.js.map → ExternalLinkIcon-BKVV5Gjm.js.map} +1 -1
- package/dist/{FieldsetSection-CH1jAwcc.js → FieldsetSection-Br_sygWW.js} +1 -1
- package/dist/{FieldsetSection-CH1jAwcc.js.map → FieldsetSection-Br_sygWW.js.map} +1 -1
- package/dist/{RecordVersionViewer-NLn1gVys.js → RecordVersionViewer-DKIdX_BX.js} +1 -1
- package/dist/{RecordVersionViewer-NLn1gVys.js.map → RecordVersionViewer-DKIdX_BX.js.map} +1 -1
- package/dist/{SavedFiltersPage-B9aQYpwf.js → SavedFiltersPage-Cz01ZeHx.js} +45 -45
- package/dist/{SavedFiltersPage-B9aQYpwf.js.map → SavedFiltersPage-Cz01ZeHx.js.map} +1 -1
- package/dist/{Signup-EykiX-bQ.js → Signup-CkhRQErA.js} +4 -12
- package/dist/Signup-CkhRQErA.js.map +1 -0
- package/dist/{Signup-Ceh7XSea.js → Signup-cOvXCtJj.js} +2 -2
- package/dist/{SignupConsentFlow-CRtiMpcS.js → SignupConsentFlow-CKMFsnf5.js} +10 -7
- package/dist/SignupConsentFlow-CKMFsnf5.js.map +1 -0
- package/dist/{SignupRequirementsPage-CohJluxQ.js → SignupRequirementsPage-33z--rhH.js} +4 -4
- package/dist/{SignupRequirementsPage-CohJluxQ.js.map → SignupRequirementsPage-33z--rhH.js.map} +1 -1
- package/dist/{StaffCreateSupportTicketForm-ANtaO4pe.js → StaffCreateSupportTicketForm-BtR-Aowv.js} +4 -4
- package/dist/{StaffCreateSupportTicketForm-ANtaO4pe.js.map → StaffCreateSupportTicketForm-BtR-Aowv.js.map} +1 -1
- package/dist/{StaffCreateSupportTicketForm-CtU12OGq.js → StaffCreateSupportTicketForm-D7ctCaXe.js} +5 -5
- package/dist/{StaffSupportTicketDetailPage-B63QXyum.js → StaffSupportTicketDetailPage-LqnNfU34.js} +7 -7
- package/dist/{StaffSupportTicketDetailPage-B63QXyum.js.map → StaffSupportTicketDetailPage-LqnNfU34.js.map} +1 -1
- package/dist/StaffSupportTicketList-GyzlONKe.js +64 -0
- package/dist/{StaffSupportTicketParent-yoC-_Lku.js → StaffSupportTicketParent-DPvdLUii.js} +3 -3
- package/dist/{StaffSupportTicketParent-yoC-_Lku.js.map → StaffSupportTicketParent-DPvdLUii.js.map} +1 -1
- package/dist/{StaffSupportTicketParent-ByUwsYGx.js → StaffSupportTicketParent-Dyybqx74.js} +2 -2
- package/dist/{StaffSupportTicketSuccess-CB4Oa_2J.js → StaffSupportTicketSuccess-B3N-RMoT.js} +2 -2
- package/dist/{StaffSupportTicketSuccess-CB4Oa_2J.js.map → StaffSupportTicketSuccess-B3N-RMoT.js.map} +1 -1
- package/dist/{StaffSupportTicketSuccess-BMh5amWI.js → StaffSupportTicketSuccess-DvonYilY.js} +4 -4
- package/dist/{SupportStaffPage-CkFLlle4.js → SupportStaffPage-geoITTqt.js} +3 -3
- package/dist/{SupportStaffPage-CkFLlle4.js.map → SupportStaffPage-geoITTqt.js.map} +1 -1
- package/dist/{SupportTicketDevLifecycleBadge-BYKZjEv6.js → SupportTicketDevLifecycleBadge-D8-Cv1Np.js} +1 -1
- package/dist/{SupportTicketDevLifecycleBadge-BYKZjEv6.js.map → SupportTicketDevLifecycleBadge-D8-Cv1Np.js.map} +1 -1
- package/dist/TeamAttachmentsTab-ChP4DaUP.js +64 -0
- package/dist/{TeamHistoryTab-p3hDxCc3.js → TeamHistoryTab-CxzA4u_G.js} +3 -3
- package/dist/{TeamHistoryTab-p3hDxCc3.js.map → TeamHistoryTab-CxzA4u_G.js.map} +1 -1
- package/dist/TeamHistoryTab-wRpRizDE.js +6 -0
- package/dist/{TeamList-B4gWPzce.js → TeamList-_SsqJicG.js} +3 -3
- package/dist/{TeamList-B4gWPzce.js.map → TeamList-_SsqJicG.js.map} +1 -1
- package/dist/TeamList-cp8Pa2xg.js +8 -0
- package/dist/TeamMemberList-B16SuLwM.js +7 -0
- package/dist/{TeamMemberList-D0-dM5kI.js → TeamMemberList-BYUANoBg.js} +3 -3
- package/dist/{TeamMemberList-D0-dM5kI.js.map → TeamMemberList-BYUANoBg.js.map} +1 -1
- package/dist/{TeamMemberParent-C9OEziOK.js → TeamMemberParent-BJl8nBmP.js} +4 -4
- package/dist/{TeamMemberParent-CJGWXjuM.js → TeamMemberParent-DmYcHU3n.js} +3 -3
- package/dist/{TeamMemberParent-CJGWXjuM.js.map → TeamMemberParent-DmYcHU3n.js.map} +1 -1
- package/dist/{TeamNotesTab-BnkgZd-5.js → TeamNotesTab-BQN9niw-.js} +1 -1
- package/dist/{TeamNotesTab-DPw9YEwK.js → TeamNotesTab-Cego-QT3.js} +2 -2
- package/dist/{TeamNotesTab-DPw9YEwK.js.map → TeamNotesTab-Cego-QT3.js.map} +1 -1
- package/dist/{TeamParent-KQmJgJ9x.js → TeamParent-BUnqP-dr.js} +3 -3
- package/dist/{TeamParent-KQmJgJ9x.js.map → TeamParent-BUnqP-dr.js.map} +1 -1
- package/dist/TeamParent-BseZ6Zoi.js +11 -0
- package/dist/{TimelineNoteInput-DXZhcUkH.js → TimelineNoteInput-BBZv3X4p.js} +2 -2
- package/dist/{TimelineNoteInput-DXZhcUkH.js.map → TimelineNoteInput-BBZv3X4p.js.map} +1 -1
- package/dist/{TimelineSystemEvent-Ch1sZiyO.js → TimelineSystemEvent-D5fkhkZT.js} +1 -1
- package/dist/{TimelineSystemEvent-Ch1sZiyO.js.map → TimelineSystemEvent-D5fkhkZT.js.map} +1 -1
- package/dist/UserListPage-BABli3QG.js +5 -0
- package/dist/{UserListPage-A0_eNpQ1.js → UserListPage-CDMSZpXK.js} +2 -2
- package/dist/{UserListPage-A0_eNpQ1.js.map → UserListPage-CDMSZpXK.js.map} +1 -1
- package/dist/{UserProfilePage-FNLYK9kj.js → UserProfilePage-BYitd7QV.js} +1 -1
- package/dist/{UserProfilePage-FNLYK9kj.js.map → UserProfilePage-BYitd7QV.js.map} +1 -1
- package/dist/{UserProfilePage-BWK97ODt.js → UserProfilePage-Dmxp7oqP.js} +1 -1
- package/dist/{VerifyEmail-BYYsE-M_.js → VerifyEmail-CLDngljq.js} +2 -2
- package/dist/{VerifyEmail-BVwHQpbw.js → VerifyEmail-CWUhRA1o.js} +2 -2
- package/dist/{VerifyEmail-BVwHQpbw.js.map → VerifyEmail-CWUhRA1o.js.map} +1 -1
- package/dist/ViewTeam-rLNxVgS2.js +8 -0
- package/dist/{ViewTeam-BV7SjH8R.js → ViewTeam-ttqX2In8.js} +4 -4
- package/dist/{ViewTeam-BV7SjH8R.js.map → ViewTeam-ttqX2In8.js.map} +1 -1
- package/dist/ViewTeamMember-B5U8kZBw.js +7 -0
- package/dist/{ViewTeamMember-Cf5yXdv6.js → ViewTeamMember-DqWZ3F_h.js} +4 -4
- package/dist/{ViewTeamMember-Cf5yXdv6.js.map → ViewTeamMember-DqWZ3F_h.js.map} +1 -1
- package/dist/{ZiniaContainer-BV6sojLa.js → ZiniaContainer-BPIfQOc7.js} +1 -1
- package/dist/{ZiniaContainer-BV6sojLa.js.map → ZiniaContainer-BPIfQOc7.js.map} +1 -1
- package/dist/{convertToLocalDateTime-C13-PrSA.js → convertToLocalDateTime-BKBxm2Rc.js} +1 -1
- package/dist/{convertToLocalDateTime-C13-PrSA.js.map → convertToLocalDateTime-BKBxm2Rc.js.map} +1 -1
- package/dist/{customerSupportTicketRoutes-_HjQcEAD.js → customerSupportTicketRoutes-C-DKBy5g.js} +8 -8
- package/dist/{customerSupportTicketRoutes-_HjQcEAD.js.map → customerSupportTicketRoutes-C-DKBy5g.js.map} +1 -1
- package/dist/{displayIdFormatter-Cr-QaEk1.js → displayIdFormatter-Ca4Al9iB.js} +1 -1
- package/dist/{displayIdFormatter-Cr-QaEk1.js.map → displayIdFormatter-Ca4Al9iB.js.map} +1 -1
- package/dist/{extractRpcErrorMessage-CAaeVysa.js → extractRpcErrorMessage-Df8-CJGV.js} +1 -1
- package/dist/{extractRpcErrorMessage-CAaeVysa.js.map → extractRpcErrorMessage-Df8-CJGV.js.map} +1 -1
- package/dist/index.d.ts +763 -753
- package/dist/index.js +48 -47
- package/dist/{saved_filter-C6YHkEMV.js → saved_filter-C2N9l_a9.js} +3 -3
- package/dist/{saved_filter-C6YHkEMV.js.map → saved_filter-C2N9l_a9.js.map} +1 -1
- package/dist/{signupConsentStorage-foqtLkIk.js → signupConsentStorage-pWSoHuhO.js} +10 -2
- package/dist/signupConsentStorage-pWSoHuhO.js.map +1 -0
- package/dist/{src-BIX3mMjo.js → src-C8B9TJiH.js} +31 -26
- package/dist/src-C8B9TJiH.js.map +1 -0
- package/dist/{staffSupportTicketRoutes-WPaItK5S.js → staffSupportTicketRoutes-CyMecWpC.js} +8 -8
- package/dist/{staffSupportTicketRoutes-WPaItK5S.js.map → staffSupportTicketRoutes-CyMecWpC.js.map} +1 -1
- package/dist/{teamMemberMetadata-DX0W-B7p.js → teamMemberMetadata-C4urCwBU.js} +1 -1
- package/dist/{teamMemberMetadata-DX0W-B7p.js.map → teamMemberMetadata-C4urCwBU.js.map} +1 -1
- package/dist/{teamMetadata-26Mwjb2i.js → teamMetadata-NTjPt89L.js} +1 -1
- package/dist/{teamMetadata-26Mwjb2i.js.map → teamMetadata-NTjPt89L.js.map} +1 -1
- package/dist/{teamRoutes-CQWRPy3J.js → teamRoutes-CFDsHPkd.js} +12 -12
- package/dist/{teamRoutes-CQWRPy3J.js.map → teamRoutes-CFDsHPkd.js.map} +1 -1
- package/dist/{team_memberRoutes-Cxgte_vj.js → team_memberRoutes-BgjY9Kwq.js} +7 -7
- package/dist/{team_memberRoutes-Cxgte_vj.js.map → team_memberRoutes-BgjY9Kwq.js.map} +1 -1
- package/dist/{useBreadcrumbs-DIqU5AAp.js → useBreadcrumbs-CPWXm0hm.js} +1 -1
- package/dist/{useBreadcrumbs-DIqU5AAp.js.map → useBreadcrumbs-CPWXm0hm.js.map} +1 -1
- package/dist/{useEmailVerificationChannel-C4bvvG2b.js → useEmailVerificationChannel-QuMSgzzM.js} +1 -1
- package/dist/{useEmailVerificationChannel-C4bvvG2b.js.map → useEmailVerificationChannel-QuMSgzzM.js.map} +1 -1
- package/dist/{userAuthorized-klLUHGxT.js → userAuthorized-3RiCDXxr.js} +1 -1
- package/dist/{userAuthorized-klLUHGxT.js.map → userAuthorized-3RiCDXxr.js.map} +1 -1
- package/package.json +2 -2
- package/dist/CreateTeamForm-CCfgSWUA.js +0 -12
- package/dist/CustomerSupportTicketList-D1pcZzcX.js +0 -64
- package/dist/EditTeamForm-BzTAypZT.js +0 -12
- package/dist/Signup-EykiX-bQ.js.map +0 -1
- package/dist/SignupConsentFlow-CRtiMpcS.js.map +0 -1
- package/dist/StaffSupportTicketList-CqK8PVq4.js +0 -64
- package/dist/TeamAttachmentsTab-BG_K7uwG.js +0 -64
- package/dist/TeamHistoryTab-BSEOYC_5.js +0 -6
- package/dist/TeamList-iAH9mOdd.js +0 -8
- package/dist/TeamMemberList-uwSe9zdv.js +0 -7
- package/dist/TeamParent-D_IbzH8B.js +0 -11
- package/dist/UserListPage-CjpxiETO.js +0 -5
- package/dist/ViewTeam-BvLIv9Dd.js +0 -8
- package/dist/ViewTeamMember-DtQCZU-X.js +0 -7
- package/dist/signupConsentStorage-foqtLkIk.js.map +0 -1
- package/dist/src-BIX3mMjo.js.map +0 -1
- /package/dist/{Appearance-CHCv4Fd1.js → Appearance-BhzkZJOL.js} +0 -0
- /package/dist/{TeamMembersTab-CeOJAhhR.js → TeamMembersTab-D7y2nV__.js} +0 -0
|
@@ -3,7 +3,7 @@ import "./EnhancedRefreshTokenHandler-C6tZCcfX.js";
|
|
|
3
3
|
import "./useQueryCache-alzaRWEb.js";
|
|
4
4
|
import { t as useMutation } from "./useMutation-BLNuJoYl.js";
|
|
5
5
|
import { t as useQuery } from "./useQuery-BzUGEOj0.js";
|
|
6
|
-
import { t as extractRpcErrorMessage } from "./extractRpcErrorMessage-
|
|
6
|
+
import { t as extractRpcErrorMessage } from "./extractRpcErrorMessage-Df8-CJGV.js";
|
|
7
7
|
import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, reactive, ref, renderList, toDisplayString, unref, vModelText, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
|
|
8
8
|
import { toast } from "vue3-toastify";
|
|
9
9
|
import { DefaultReferralTeamFormSchema, ReferralTagValueSchema, normalizeToReferralTag } from "@dragonmastery/dragoncore-shared";
|
|
@@ -244,4 +244,4 @@ var DefaultReferralTeamPage_default = _sfc_main;
|
|
|
244
244
|
|
|
245
245
|
//#endregion
|
|
246
246
|
export { DefaultReferralTeamPage_default as default };
|
|
247
|
-
//# sourceMappingURL=DefaultReferralTeamPage-
|
|
247
|
+
//# sourceMappingURL=DefaultReferralTeamPage-D3UIrIZK.js.map
|
package/dist/{DefaultReferralTeamPage-fO3tmwOb.js.map → DefaultReferralTeamPage-D3UIrIZK.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultReferralTeamPage-fO3tmwOb.js","names":[],"sources":["../src/slices/admin/features/default_referral_team/defaultReferralTeamSchema.ts","../src/slices/admin/features/default_referral_team/DefaultReferralTeamPage.vue"],"sourcesContent":["import type { DefaultReferralTeamFormDto } from '@dragonmastery/dragoncore-shared';\nimport { DefaultReferralTeamFormSchema } from '@dragonmastery/dragoncore-shared';\nimport { withMetadata } from '@dragonmastery/zinia-forms-core';\n\nexport type { DefaultReferralTeamFormDto };\n\nexport const defaultReferralTeamSchemaWithMetadata = withMetadata(\n DefaultReferralTeamFormSchema,\n 'defaultReferralTeamSchema',\n {\n default_team_id: {\n inputType: 'select',\n label: 'Default team',\n placeholder: 'Select team',\n helpText:\n 'When a referral event arrives with an unknown tag, it will be routed to this team. Select \"None\" to reject unknown tags.',\n },\n },\n);\n","<template>\n <div class=\"mt-2 w-full max-w-2xl mx-auto px-4\">\n <h1 class=\"text-xl md:text-2xl font-bold mb-2\">Default Team for Unknown Referrals</h1>\n <p class=\"text-sm md:text-base text-base-content/70 mb-4\">\n When a referral event arrives with an unknown referral tag, it will be routed to this team.\n Select a team to use as the default, or clear to reject unknown tags.\n </p>\n\n <div v-if=\"isLoading\" class=\"flex justify-center py-8\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n\n <template v-else>\n <ZiniaForm\n @handle-submit=\"handleSubmit\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n title=\"\"\n subtitle=\"\"\n >\n <zinia.DefaultTeamIdField\n :select-options=\"form.extraData.teams ?? []\"\n placeholder=\"Select team\"\n />\n\n <div v-if=\"form.submitError\" class=\"alert alert-error mt-2\">\n <span>{{ form.submitError }}</span>\n </div>\n\n <div class=\"mt-4 flex justify-end\">\n <ZiniaSubmitButton\n submitText=\"Save\"\n submittingText=\"Saving...\"\n />\n </div>\n </ZiniaForm>\n\n <!-- Referral tags per team: mobile-first, DaisyUI -->\n <div class=\"mt-8 md:mt-12 w-full\">\n <h2 class=\"text-lg md:text-xl font-semibold mb-2\">Referral Tags per Team</h2>\n <p class=\"text-sm md:text-base text-base-content/70 mb-4\">\n Set a referral tag for each team. Other apps use this tag when pushing events.\n If empty, the team's unique name or path is used as fallback.\n </p>\n\n <div v-if=\"teamsData?.items?.length\" class=\"flex flex-col gap-4\">\n <!-- Mobile: stacked cards. md+: same, compact cards -->\n <div\n v-for=\"team in teamsData.items\"\n :key=\"team.id\"\n class=\"card bg-base-100 shadow-sm border border-base-300\"\n >\n <div class=\"card-body p-4 md:p-5\">\n <h3 class=\"card-title text-base md:text-lg mb-3\">\n {{ team.display_name || team.unique_name || team.id }}\n </h3>\n\n <div class=\"form-control w-full\">\n <label class=\"label py-1\">\n <span class=\"label-text text-sm\">Referral tag</span>\n </label>\n <div class=\"flex flex-wrap gap-2\">\n <input\n v-model=\"referralTagInputs[team.id]\"\n type=\"text\"\n :class=\"[\n 'input input-bordered input-sm flex-1 min-w-0',\n referralTagErrors[team.id] && 'input-error',\n ]\"\n placeholder=\"e.g. my-team\"\n @keydown.enter.prevent=\"saveReferralTag(team.id)\"\n @input=\"validateReferralTagInput(team.id)\"\n />\n <button\n type=\"button\"\n class=\"btn btn-sm btn-ghost btn-square shrink-0\"\n title=\"Normalize to URL-friendly tag from team name\"\n aria-label=\"Normalize tag\"\n @click=\"normalizeReferralTag(team)\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\n </svg>\n </button>\n </div>\n <!-- Fixed-height error slot: no layout shift -->\n <div class=\"h-5 text-xs text-error leading-tight mt-1\">\n {{ referralTagErrors[team.id] ?? '\\u00A0' }}\n </div>\n </div>\n\n <div class=\"card-actions justify-end mt-2\">\n <button\n type=\"button\"\n class=\"btn btn-primary btn-sm\"\n :disabled=\"savingTeamId === team.id || referralTagInputs[team.id] === (team.referral_tag ?? '')\"\n @click=\"saveReferralTag(team.id)\"\n >\n <span v-if=\"savingTeamId === team.id\" class=\"loading loading-spinner loading-sm\" />\n {{ savingTeamId === team.id ? 'Saving...' : 'Save' }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <p v-else class=\"text-base-content/60 text-sm\">No teams found.</p>\n </div>\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { normalizeToReferralTag, ReferralTagValueSchema } from '@dragonmastery/dragoncore-shared';\nimport type { DefaultReferralTeamFormDto } from './defaultReferralTeamSchema';\nimport { defaultReferralTeamSchemaWithMetadata } from './defaultReferralTeamSchema';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { computed, reactive, ref, watch } from 'vue';\nimport { toast } from 'vue3-toastify';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useQuery } from '../../../../composables/useQuery';\nimport { extractRpcErrorMessage } from '../../../../utils/extractRpcErrorMessage';\n\nconst {\n data: defaultTeamIdData,\n loading: defaultLoading,\n refetch: refetchDefault,\n} = useQuery((api) => api.appSettings.getDefaultTeamIdForUnknownReferrals(), {\n cacheKey: 'admin-default-referral-team',\n staleTime: 30 * 1000,\n});\n\nconst {\n data: teamsData,\n loading: teamsLoading,\n refetch: refetchTeams,\n} = useQuery(\n (api) => api.teams.listTeams({ first: 100 }),\n {\n cacheKey: 'admin-teams-for-default-referral',\n staleTime: 60 * 1000,\n },\n);\n\nconst referralTagInputs = reactive<Record<string, string>>({});\nconst referralTagErrors = reactive<Record<string, string>>({});\nconst savingTeamId = ref<string | null>(null);\n\nfunction validateReferralTagInput(teamId: string) {\n const raw = referralTagInputs[teamId]?.trim() ?? '';\n if (raw === '') {\n delete referralTagErrors[teamId];\n return;\n }\n const result = ReferralTagValueSchema.safeParse(raw);\n if (result.success) {\n delete referralTagErrors[teamId];\n } else {\n referralTagErrors[teamId] =\n result.error.errors[0]?.message ?? 'Invalid referral tag format';\n }\n}\n\nwatch(\n () => teamsData.value?.items ?? [],\n (teams) => {\n for (const team of teams) {\n referralTagInputs[team.id] = team.referral_tag ?? '';\n delete referralTagErrors[team.id];\n }\n },\n { immediate: true },\n);\n\nconst loadTeams = async () => {\n while (teamsLoading.value) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n const teams = teamsData.value?.items ?? [];\n const options = [\n { value: '', label: 'None (reject unknown tags)' },\n ...teams.map((team) => ({\n value: team.id,\n label: `${team.display_name || team.unique_name || team.id}${team.referral_tag ? ` (${team.referral_tag})` : ''}`,\n })),\n ];\n return options;\n};\n\nconst {\n form,\n zinia,\n ZiniaForm,\n ZiniaSubmitButton,\n} = useForm(defaultReferralTeamSchemaWithMetadata, {\n storeName: 'admin-default-referral-team-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n fetchData: async () => {\n while (defaultLoading.value) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n const data = defaultTeamIdData.value;\n return {\n default_team_id: data?.default_team_id ?? null,\n };\n },\n dataLoaders: {\n teams: loadTeams,\n },\n});\n\n// Only show full-page loading during initial load. When refetching teams after inline save,\n// we already have data—keep the table visible and show row-level \"Saving...\" instead.\nconst isLoading = computed(() => {\n if (form.isLoading) return true;\n if (defaultLoading.value && !defaultTeamIdData.value) return true;\n if (teamsLoading.value && !teamsData.value?.items?.length) return true;\n return false;\n});\n\nconst { mutate: updateDefaultTeam } = useMutation(\n (api, input: DefaultReferralTeamFormDto) =>\n api.appSettings.updateDefaultTeamIdForUnknownReferrals(input),\n { invalidate: /admin-default-referral-team/ },\n);\n\nconst { mutate: setReferralTag } = useMutation(\n (api, input: { team_id: string; referral_tag: string | null }) =>\n api.teams.setReferralTag(input),\n { invalidate: /admin-teams-for-default-referral/ },\n);\n\nfunction normalizeReferralTag(team: { id: string; display_name?: string | null; unique_name?: string | null }) {\n const name = team.display_name || team.unique_name || team.id;\n const normalized = normalizeToReferralTag(name);\n if (normalized) {\n referralTagInputs[team.id] = normalized;\n validateReferralTagInput(team.id);\n }\n}\n\nasync function saveReferralTag(teamId: string) {\n const raw = referralTagInputs[teamId]?.trim() ?? '';\n const referral_tag = raw === '' ? null : raw;\n const team = teamsData.value?.items?.find((t) => t.id === teamId);\n if (team && referral_tag === (team.referral_tag ?? null)) return;\n\n // Validate format before save—no transform, show error inline if invalid\n if (referral_tag !== null) {\n const result = ReferralTagValueSchema.safeParse(referral_tag);\n if (!result.success) {\n referralTagErrors[teamId] =\n result.error.errors[0]?.message ?? 'Invalid referral tag format';\n return;\n }\n }\n\n delete referralTagErrors[teamId];\n savingTeamId.value = teamId;\n try {\n await setReferralTag({ team_id: teamId, referral_tag });\n toast.success('Referral tag saved');\n referralTagInputs[teamId] = referral_tag ?? '';\n await refetchTeams();\n } catch (err) {\n referralTagErrors[teamId] = extractRpcErrorMessage(\n err,\n 'Failed to save referral tag',\n );\n } finally {\n savingTeamId.value = null;\n }\n}\n\nasync function handleSubmit(formData: DefaultReferralTeamFormDto) {\n const default_team_id = formData.default_team_id?.trim() || null;\n await updateDefaultTeam({ default_team_id });\n return { ok: true };\n}\n\nasync function handleSuccess() {\n toast.success('Default team saved');\n await refetchDefault();\n}\n\nfunction handleError(error: Error | unknown) {\n const message = error instanceof Error ? error.message : String(error);\n form.setSubmitError(extractRpcErrorMessage(error, message));\n toast.error(form.submitError ?? 'Failed to save');\n}\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DefaultReferralTeamPage-D3UIrIZK.js","names":[],"sources":["../src/slices/admin/features/default_referral_team/defaultReferralTeamSchema.ts","../src/slices/admin/features/default_referral_team/DefaultReferralTeamPage.vue"],"sourcesContent":["import type { DefaultReferralTeamFormDto } from '@dragonmastery/dragoncore-shared';\nimport { DefaultReferralTeamFormSchema } from '@dragonmastery/dragoncore-shared';\nimport { withMetadata } from '@dragonmastery/zinia-forms-core';\n\nexport type { DefaultReferralTeamFormDto };\n\nexport const defaultReferralTeamSchemaWithMetadata = withMetadata(\n DefaultReferralTeamFormSchema,\n 'defaultReferralTeamSchema',\n {\n default_team_id: {\n inputType: 'select',\n label: 'Default team',\n placeholder: 'Select team',\n helpText:\n 'When a referral event arrives with an unknown tag, it will be routed to this team. Select \"None\" to reject unknown tags.',\n },\n },\n);\n","<template>\n <div class=\"mt-2 w-full max-w-2xl mx-auto px-4\">\n <h1 class=\"text-xl md:text-2xl font-bold mb-2\">Default Team for Unknown Referrals</h1>\n <p class=\"text-sm md:text-base text-base-content/70 mb-4\">\n When a referral event arrives with an unknown referral tag, it will be routed to this team.\n Select a team to use as the default, or clear to reject unknown tags.\n </p>\n\n <div v-if=\"isLoading\" class=\"flex justify-center py-8\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n\n <template v-else>\n <ZiniaForm\n @handle-submit=\"handleSubmit\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n title=\"\"\n subtitle=\"\"\n >\n <zinia.DefaultTeamIdField\n :select-options=\"form.extraData.teams ?? []\"\n placeholder=\"Select team\"\n />\n\n <div v-if=\"form.submitError\" class=\"alert alert-error mt-2\">\n <span>{{ form.submitError }}</span>\n </div>\n\n <div class=\"mt-4 flex justify-end\">\n <ZiniaSubmitButton\n submitText=\"Save\"\n submittingText=\"Saving...\"\n />\n </div>\n </ZiniaForm>\n\n <!-- Referral tags per team: mobile-first, DaisyUI -->\n <div class=\"mt-8 md:mt-12 w-full\">\n <h2 class=\"text-lg md:text-xl font-semibold mb-2\">Referral Tags per Team</h2>\n <p class=\"text-sm md:text-base text-base-content/70 mb-4\">\n Set a referral tag for each team. Other apps use this tag when pushing events.\n If empty, the team's unique name or path is used as fallback.\n </p>\n\n <div v-if=\"teamsData?.items?.length\" class=\"flex flex-col gap-4\">\n <!-- Mobile: stacked cards. md+: same, compact cards -->\n <div\n v-for=\"team in teamsData.items\"\n :key=\"team.id\"\n class=\"card bg-base-100 shadow-sm border border-base-300\"\n >\n <div class=\"card-body p-4 md:p-5\">\n <h3 class=\"card-title text-base md:text-lg mb-3\">\n {{ team.display_name || team.unique_name || team.id }}\n </h3>\n\n <div class=\"form-control w-full\">\n <label class=\"label py-1\">\n <span class=\"label-text text-sm\">Referral tag</span>\n </label>\n <div class=\"flex flex-wrap gap-2\">\n <input\n v-model=\"referralTagInputs[team.id]\"\n type=\"text\"\n :class=\"[\n 'input input-bordered input-sm flex-1 min-w-0',\n referralTagErrors[team.id] && 'input-error',\n ]\"\n placeholder=\"e.g. my-team\"\n @keydown.enter.prevent=\"saveReferralTag(team.id)\"\n @input=\"validateReferralTagInput(team.id)\"\n />\n <button\n type=\"button\"\n class=\"btn btn-sm btn-ghost btn-square shrink-0\"\n title=\"Normalize to URL-friendly tag from team name\"\n aria-label=\"Normalize tag\"\n @click=\"normalizeReferralTag(team)\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\n </svg>\n </button>\n </div>\n <!-- Fixed-height error slot: no layout shift -->\n <div class=\"h-5 text-xs text-error leading-tight mt-1\">\n {{ referralTagErrors[team.id] ?? '\\u00A0' }}\n </div>\n </div>\n\n <div class=\"card-actions justify-end mt-2\">\n <button\n type=\"button\"\n class=\"btn btn-primary btn-sm\"\n :disabled=\"savingTeamId === team.id || referralTagInputs[team.id] === (team.referral_tag ?? '')\"\n @click=\"saveReferralTag(team.id)\"\n >\n <span v-if=\"savingTeamId === team.id\" class=\"loading loading-spinner loading-sm\" />\n {{ savingTeamId === team.id ? 'Saving...' : 'Save' }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <p v-else class=\"text-base-content/60 text-sm\">No teams found.</p>\n </div>\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { normalizeToReferralTag, ReferralTagValueSchema } from '@dragonmastery/dragoncore-shared';\nimport type { DefaultReferralTeamFormDto } from './defaultReferralTeamSchema';\nimport { defaultReferralTeamSchemaWithMetadata } from './defaultReferralTeamSchema';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { computed, reactive, ref, watch } from 'vue';\nimport { toast } from 'vue3-toastify';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useQuery } from '../../../../composables/useQuery';\nimport { extractRpcErrorMessage } from '../../../../utils/extractRpcErrorMessage';\n\nconst {\n data: defaultTeamIdData,\n loading: defaultLoading,\n refetch: refetchDefault,\n} = useQuery((api) => api.appSettings.getDefaultTeamIdForUnknownReferrals(), {\n cacheKey: 'admin-default-referral-team',\n staleTime: 30 * 1000,\n});\n\nconst {\n data: teamsData,\n loading: teamsLoading,\n refetch: refetchTeams,\n} = useQuery(\n (api) => api.teams.listTeams({ first: 100 }),\n {\n cacheKey: 'admin-teams-for-default-referral',\n staleTime: 60 * 1000,\n },\n);\n\nconst referralTagInputs = reactive<Record<string, string>>({});\nconst referralTagErrors = reactive<Record<string, string>>({});\nconst savingTeamId = ref<string | null>(null);\n\nfunction validateReferralTagInput(teamId: string) {\n const raw = referralTagInputs[teamId]?.trim() ?? '';\n if (raw === '') {\n delete referralTagErrors[teamId];\n return;\n }\n const result = ReferralTagValueSchema.safeParse(raw);\n if (result.success) {\n delete referralTagErrors[teamId];\n } else {\n referralTagErrors[teamId] =\n result.error.errors[0]?.message ?? 'Invalid referral tag format';\n }\n}\n\nwatch(\n () => teamsData.value?.items ?? [],\n (teams) => {\n for (const team of teams) {\n referralTagInputs[team.id] = team.referral_tag ?? '';\n delete referralTagErrors[team.id];\n }\n },\n { immediate: true },\n);\n\nconst loadTeams = async () => {\n while (teamsLoading.value) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n const teams = teamsData.value?.items ?? [];\n const options = [\n { value: '', label: 'None (reject unknown tags)' },\n ...teams.map((team) => ({\n value: team.id,\n label: `${team.display_name || team.unique_name || team.id}${team.referral_tag ? ` (${team.referral_tag})` : ''}`,\n })),\n ];\n return options;\n};\n\nconst {\n form,\n zinia,\n ZiniaForm,\n ZiniaSubmitButton,\n} = useForm(defaultReferralTeamSchemaWithMetadata, {\n storeName: 'admin-default-referral-team-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n fetchData: async () => {\n while (defaultLoading.value) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n const data = defaultTeamIdData.value;\n return {\n default_team_id: data?.default_team_id ?? null,\n };\n },\n dataLoaders: {\n teams: loadTeams,\n },\n});\n\n// Only show full-page loading during initial load. When refetching teams after inline save,\n// we already have data—keep the table visible and show row-level \"Saving...\" instead.\nconst isLoading = computed(() => {\n if (form.isLoading) return true;\n if (defaultLoading.value && !defaultTeamIdData.value) return true;\n if (teamsLoading.value && !teamsData.value?.items?.length) return true;\n return false;\n});\n\nconst { mutate: updateDefaultTeam } = useMutation(\n (api, input: DefaultReferralTeamFormDto) =>\n api.appSettings.updateDefaultTeamIdForUnknownReferrals(input),\n { invalidate: /admin-default-referral-team/ },\n);\n\nconst { mutate: setReferralTag } = useMutation(\n (api, input: { team_id: string; referral_tag: string | null }) =>\n api.teams.setReferralTag(input),\n { invalidate: /admin-teams-for-default-referral/ },\n);\n\nfunction normalizeReferralTag(team: { id: string; display_name?: string | null; unique_name?: string | null }) {\n const name = team.display_name || team.unique_name || team.id;\n const normalized = normalizeToReferralTag(name);\n if (normalized) {\n referralTagInputs[team.id] = normalized;\n validateReferralTagInput(team.id);\n }\n}\n\nasync function saveReferralTag(teamId: string) {\n const raw = referralTagInputs[teamId]?.trim() ?? '';\n const referral_tag = raw === '' ? null : raw;\n const team = teamsData.value?.items?.find((t) => t.id === teamId);\n if (team && referral_tag === (team.referral_tag ?? null)) return;\n\n // Validate format before save—no transform, show error inline if invalid\n if (referral_tag !== null) {\n const result = ReferralTagValueSchema.safeParse(referral_tag);\n if (!result.success) {\n referralTagErrors[teamId] =\n result.error.errors[0]?.message ?? 'Invalid referral tag format';\n return;\n }\n }\n\n delete referralTagErrors[teamId];\n savingTeamId.value = teamId;\n try {\n await setReferralTag({ team_id: teamId, referral_tag });\n toast.success('Referral tag saved');\n referralTagInputs[teamId] = referral_tag ?? '';\n await refetchTeams();\n } catch (err) {\n referralTagErrors[teamId] = extractRpcErrorMessage(\n err,\n 'Failed to save referral tag',\n );\n } finally {\n savingTeamId.value = null;\n }\n}\n\nasync function handleSubmit(formData: DefaultReferralTeamFormDto) {\n const default_team_id = formData.default_team_id?.trim() || null;\n await updateDefaultTeam({ default_team_id });\n return { ok: true };\n}\n\nasync function handleSuccess() {\n toast.success('Default team saved');\n await refetchDefault();\n}\n\nfunction handleError(error: Error | unknown) {\n const message = error instanceof Error ? error.message : String(error);\n form.setSubmitError(extractRpcErrorMessage(error, message));\n toast.error(form.submitError ?? 'Failed to save');\n}\n</script>\n"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import "./useRpcAuth-CJtq1dqM.js";
|
|
2
|
+
import "./EnhancedRefreshTokenHandler-C6tZCcfX.js";
|
|
3
|
+
import "./useQueryCache-alzaRWEb.js";
|
|
4
|
+
import "./useMutation-BLNuJoYl.js";
|
|
5
|
+
import "./FieldsetSection-Br_sygWW.js";
|
|
6
|
+
import "./userAuthorized-3RiCDXxr.js";
|
|
7
|
+
import "./teamMetadata-NTjPt89L.js";
|
|
8
|
+
import "./team_memberRoutes-BgjY9Kwq.js";
|
|
9
|
+
import "./teamRoutes-CFDsHPkd.js";
|
|
10
|
+
import { t as EditTeamForm_default } from "./EditTeamForm-C1_-p3lZ.js";
|
|
11
|
+
|
|
12
|
+
export { EditTeamForm_default as default };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as useMutation } from "./useMutation-BLNuJoYl.js";
|
|
2
|
-
import { t as FieldsetSection_default } from "./FieldsetSection-
|
|
3
|
-
import { n as teamUpdateSchemaWithMetadata } from "./teamMetadata-
|
|
4
|
-
import { t as teamPaths } from "./teamRoutes-
|
|
2
|
+
import { t as FieldsetSection_default } from "./FieldsetSection-Br_sygWW.js";
|
|
3
|
+
import { n as teamUpdateSchemaWithMetadata } from "./teamMetadata-NTjPt89L.js";
|
|
4
|
+
import { t as teamPaths } from "./teamRoutes-CFDsHPkd.js";
|
|
5
5
|
import { createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, inject, openBlock, toDisplayString, unref, watch, withCtx } from "vue";
|
|
6
6
|
import { useRoute, useRouter } from "vue-router";
|
|
7
7
|
import { toast } from "vue3-toastify";
|
|
@@ -160,4 +160,4 @@ var EditTeamForm_default = _sfc_main;
|
|
|
160
160
|
|
|
161
161
|
//#endregion
|
|
162
162
|
export { EditTeamForm_default as t };
|
|
163
|
-
//# sourceMappingURL=EditTeamForm-
|
|
163
|
+
//# sourceMappingURL=EditTeamForm-C1_-p3lZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditTeamForm-
|
|
1
|
+
{"version":3,"file":"EditTeamForm-C1_-p3lZ.js","names":[],"sources":["../src/slices/team/EditTeamForm.vue"],"sourcesContent":["<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\"\n subtitle=\"Update team details\"\n >\n <!-- Basic Information -->\n <FieldsetSection title=\"Team Details\">\n <zinia.UniqueNameField placeholder=\"Enter unique name\" />\n <zinia.DisplayNameField placeholder=\"Enter display name\" />\n <zinia.LegalNameField placeholder=\"Enter legal name (optional)\" />\n </FieldsetSection>\n\n <FieldsetSection title=\"Description\">\n <zinia.DescriptionField placeholder=\"Enter team description\" />\n </FieldsetSection>\n\n <!-- Contact Information -->\n <FieldsetSection title=\"Contact Information\">\n <zinia.ContactNameField placeholder=\"Enter contact name\" />\n <zinia.ContactEmailField placeholder=\"Enter contact email\" />\n <zinia.ContactBusinessPhoneField placeholder=\"Enter business phone\" />\n <zinia.ContactMobilePhoneField placeholder=\"Enter mobile phone\" />\n <zinia.ContactTimeZoneField placeholder=\"Enter time zone\" />\n </FieldsetSection>\n\n <!-- Address Information -->\n <FieldsetSection title=\"Address\">\n <zinia.AddressFullField placeholder=\"Enter address\" />\n <zinia.AddressCityField placeholder=\"Enter city\" />\n <zinia.AddressZipField placeholder=\"Enter zip code\" />\n </FieldsetSection>\n\n <!-- Web Presence -->\n <FieldsetSection title=\"Web Presence\">\n <zinia.TwitterUsernameField placeholder=\"Enter Twitter username\" />\n <zinia.UrlField placeholder=\"Enter URL\" />\n </FieldsetSection>\n\n <!-- Branding -->\n <FieldsetSection title=\"Branding\">\n <zinia.LogoField placeholder=\"Enter logo URL\" />\n </FieldsetSection>\n\n <!-- Email Settings -->\n <FieldsetSection title=\"Email Settings\">\n <zinia.EmailSentFromField placeholder=\"Enter sent from email\" />\n <zinia.EmailReplyToField placeholder=\"Enter reply to email\" />\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 submitText=\"Update Team\" submittingText=\"Updating Team...\" />\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 { TeamReadDto, TeamUpdateDto } from '@dragonmastery/dragoncore-shared';\nimport { inject, watch } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { teamUpdateSchemaWithMetadata } from './teamMetadata';\nimport { teamPaths } from './teamRoutes';\n\ninterface Props {\n team: TeamReadDto | null;\n isLoading?: boolean;\n error?: Error | null;\n}\n\nconst props = defineProps<Props>();\n\nconst route = useRoute();\nconst router = useRouter();\nconst team_id = route.params.id as string;\n\nconst {\n form,\n zinia,\n ZiniaForm,\n ZiniaSubmitButton,\n ZiniaResetButton,\n ZiniaFormErrorsSummary,\n clearSavedFormState,\n} = useForm(teamUpdateSchemaWithMetadata, {\n storeName: `edit-team-${team_id}`,\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n fetchData: async () => {\n if (!props.team) {\n throw new Error('No team data found');\n }\n\n return props.team as TeamUpdateDto;\n },\n});\n\n// Get refresh function from parent\nconst refreshTeam = inject<(() => Promise<void>) | undefined>('refreshTeam');\n\n// Redirect to view if team is archived\nwatch(\n () => props.team,\n (team) => {\n if (team?.archived_at) {\n router.replace({\n name: teamPaths.view.name,\n params: { id: team_id },\n });\n }\n },\n);\n\n// Setup mutation for updating team\nconst { mutate: updateTeam } = useMutation(\n (api, input: TeamUpdateDto) => api.teams.updateTeam(input),\n { invalidate: /^teams?:/ },\n);\n\n// Handle form submission\nconst handleSubmit = async (formData: TeamUpdateDto) => {\n const updatedTeam = await updateTeam(formData);\n if (!updatedTeam) {\n throw new Error('Failed to update team');\n }\n return updatedTeam;\n};\n\n// Handle successful submission\nconst handleSuccess = async () => {\n clearSavedFormState();\n toast.success(`Team updated successfully!`);\n // Refresh team data via parent\n if (refreshTeam) {\n await refreshTeam();\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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"}
|
|
@@ -2,8 +2,8 @@ import "./useRpcAuth-CJtq1dqM.js";
|
|
|
2
2
|
import "./EnhancedRefreshTokenHandler-C6tZCcfX.js";
|
|
3
3
|
import "./useQueryCache-alzaRWEb.js";
|
|
4
4
|
import "./useMutation-BLNuJoYl.js";
|
|
5
|
-
import "./FieldsetSection-
|
|
6
|
-
import "./teamMemberMetadata-
|
|
7
|
-
import { t as EditTeamMemberForm_default } from "./EditTeamMemberForm-
|
|
5
|
+
import "./FieldsetSection-Br_sygWW.js";
|
|
6
|
+
import "./teamMemberMetadata-C4urCwBU.js";
|
|
7
|
+
import { t as EditTeamMemberForm_default } from "./EditTeamMemberForm-D9cofrUM.js";
|
|
8
8
|
|
|
9
9
|
export { EditTeamMemberForm_default as default };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as useMutation } from "./useMutation-BLNuJoYl.js";
|
|
2
|
-
import { t as FieldsetSection_default } from "./FieldsetSection-
|
|
3
|
-
import { n as teamMemberUpdateSchemaWithMetadata } from "./teamMemberMetadata-
|
|
2
|
+
import { t as FieldsetSection_default } from "./FieldsetSection-Br_sygWW.js";
|
|
3
|
+
import { n as teamMemberUpdateSchemaWithMetadata } from "./teamMemberMetadata-C4urCwBU.js";
|
|
4
4
|
import { createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, inject, openBlock, toDisplayString, unref, withCtx } from "vue";
|
|
5
5
|
import { useRoute } from "vue-router";
|
|
6
6
|
import { toast } from "vue3-toastify";
|
|
@@ -123,4 +123,4 @@ var EditTeamMemberForm_default = _sfc_main;
|
|
|
123
123
|
|
|
124
124
|
//#endregion
|
|
125
125
|
export { EditTeamMemberForm_default as t };
|
|
126
|
-
//# sourceMappingURL=EditTeamMemberForm-
|
|
126
|
+
//# sourceMappingURL=EditTeamMemberForm-D9cofrUM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditTeamMemberForm-
|
|
1
|
+
{"version":3,"file":"EditTeamMemberForm-D9cofrUM.js","names":[],"sources":["../src/slices/team/team_member/EditTeamMemberForm.vue"],"sourcesContent":["<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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"}
|
|
@@ -3,6 +3,6 @@ import "./EnhancedRefreshTokenHandler-C6tZCcfX.js";
|
|
|
3
3
|
import "./useQueryCache-alzaRWEb.js";
|
|
4
4
|
import "./useMutation-BLNuJoYl.js";
|
|
5
5
|
import "./useQuery-BzUGEOj0.js";
|
|
6
|
-
import { t as EditUserPage_default } from "./EditUserPage-
|
|
6
|
+
import { t as EditUserPage_default } from "./EditUserPage-CwsO8naT.js";
|
|
7
7
|
|
|
8
8
|
export { EditUserPage_default as default };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as useMutation } from "./useMutation-BLNuJoYl.js";
|
|
2
2
|
import { t as useQuery } from "./useQuery-BzUGEOj0.js";
|
|
3
|
-
import { t as formatSystemTimestamp } from "./convertToLocalDateTime-
|
|
3
|
+
import { t as formatSystemTimestamp } from "./convertToLocalDateTime-BKBxm2Rc.js";
|
|
4
4
|
import { Fragment, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, normalizeClass, openBlock, ref, toDisplayString, unref, withCtx } from "vue";
|
|
5
5
|
import { useRoute, useRouter } from "vue-router";
|
|
6
6
|
import { toast } from "vue3-toastify";
|
|
@@ -109,4 +109,4 @@ var EditUserPage_default = _sfc_main;
|
|
|
109
109
|
|
|
110
110
|
//#endregion
|
|
111
111
|
export { updateUserSchemaWithMetadata as n, EditUserPage_default as t };
|
|
112
|
-
//# sourceMappingURL=EditUserPage-
|
|
112
|
+
//# sourceMappingURL=EditUserPage-CwsO8naT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditUserPage-
|
|
1
|
+
{"version":3,"file":"EditUserPage-CwsO8naT.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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExternalLinkIcon-
|
|
1
|
+
{"version":3,"file":"ExternalLinkIcon-BKVV5Gjm.js","names":[],"sources":["../src/components/ui/ExternalLinkIcon.vue"],"sourcesContent":["<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n :class=\"['shrink-0', sizeClass]\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25\"\n />\n </svg>\n</template>\n\n<script setup lang=\"ts\">\nconst props = withDefaults(\n defineProps<{\n /** Icon size: sm (3), default (4), lg (5) */\n size?: 'sm' | 'default' | 'lg';\n }>(),\n { size: 'default' },\n);\n\nconst sizeClass = {\n sm: 'w-3 h-3',\n default: 'w-4 h-4',\n lg: 'w-5 h-5',\n}[props.size];\n</script>\n"],"mappings":";;;;;;;EA2BA,MAAM,YAAY;GAChB,IAAI;GACJ,SAAS;GACT,IAAI;GACL,CAZa,QAYN;;uBA9BN,mBAcM,OAAA;IAbJ,OAAM;IACN,MAAK;IACL,SAAQ;IACR,gBAAa;IACb,QAAO;IACN,OAAK,eAAA,CAAA,YAAe,MAAA,UAAS,CAAA,CAAA;IAC9B,eAAY;qCAEZ,mBAIE,QAAA;IAHA,kBAAe;IACf,mBAAgB;IAChB,GAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldsetSection-
|
|
1
|
+
{"version":3,"file":"FieldsetSection-Br_sygWW.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"}
|
|
@@ -487,4 +487,4 @@ var RecordVersionViewer_default = _sfc_main;
|
|
|
487
487
|
|
|
488
488
|
//#endregion
|
|
489
489
|
export { LoadingErrorStates_default as i, RecordVersionList_default as n, RecordChangesSummary_default as r, RecordVersionViewer_default as t };
|
|
490
|
-
//# sourceMappingURL=RecordVersionViewer-
|
|
490
|
+
//# sourceMappingURL=RecordVersionViewer-DKIdX_BX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordVersionViewer-NLn1gVys.js","names":["$emit","$slots"],"sources":["../src/components/ui/LoadingErrorStates.vue","../src/components/ui/RecordChangesSummary.vue","../src/components/ui/RecordVersionList.vue","../src/components/ui/RecordVersionViewer.vue"],"sourcesContent":["<template>\n <!-- Loading State -->\n <div v-if=\"isLoading\" class=\"text-center py-8\">\n <slot name=\"loading\">\n <div class=\"flex justify-center\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n <p class=\"text-base-content/70 mt-2\">\n {{ config.loadingText || 'Loading...' }}\n </p>\n </slot>\n </div>\n\n <!-- Error State -->\n <div v-else-if=\"error\" class=\"text-center py-8\">\n <slot name=\"error\" :error=\"error\" :retry=\"handleRetry\">\n <div class=\"alert alert-error max-w-md mx-auto\">\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 <div>\n <h3 class=\"font-bold\">\n {{ config.errorTitle || 'Error' }}\n </h3>\n <div class=\"text-sm\">\n {{ getErrorMessage(error) }}\n </div>\n <button\n v-if=\"config.showRetry !== false\"\n class=\"btn btn-sm btn-outline mt-2\"\n @click=\"handleRetry\"\n >\n {{ config.retryText || 'Try Again' }}\n </button>\n </div>\n </div>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\ninterface LoadingErrorStatesConfig {\n loadingText?: string;\n errorTitle?: string;\n retryText?: string;\n showRetry?: boolean;\n customErrorMessage?: (error: Error) => string;\n}\n\nconst props = defineProps<{\n isLoading?: boolean;\n error?: Error | null;\n config?: LoadingErrorStatesConfig;\n}>();\n\nconst emit = defineEmits<{\n retry: [];\n}>();\n\nconst config = computed(() => props.config || {});\n\nfunction getErrorMessage(error: Error): string {\n if (config.value.customErrorMessage) {\n return config.value.customErrorMessage(error);\n }\n\n return error.message || 'An unexpected error occurred';\n}\n\nfunction handleRetry() {\n emit('retry');\n}\n</script>\n","<template>\n <div v-if=\"changedFields.length > 0\" class=\"card bg-base-100 shadow-sm mb-4\">\n <div class=\"card-body p-3 sm:p-5\">\n <div class=\"flex justify-between items-center\">\n <h2 class=\"card-title text-base sm:text-lg\">\n {{ config.title || 'Changes in This Version' }}\n </h2>\n <button @click=\"showChanges = !showChanges\" class=\"btn btn-sm btn-info\">\n {{\n showChanges ? config.hideText || 'Hide Changes' : config.showText || 'Show Changes'\n }}\n </button>\n </div>\n\n <div v-if=\"showChanges\">\n <!-- Desktop view - table format -->\n <div class=\"hidden md:block overflow-x-auto mt-4\">\n <table class=\"table table-zebra table-sm\">\n <thead>\n <tr>\n <th>{{ config.fieldColumnHeader || 'Field' }}</th>\n <th>{{ config.previousColumnHeader || 'Previous Value' }}</th>\n <th>{{ config.newColumnHeader || 'New Value' }}</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"(change, index) in changedFields\" :key=\"index\">\n <td class=\"font-mono text-xs\">\n {{ formatFieldName(change.path) }}\n </td>\n <td>{{ formatValue(change.oldValue) }}</td>\n <td>{{ formatValue(change.newValue) }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <!-- Mobile view - card format -->\n <div class=\"md:hidden space-y-4 mt-4\">\n <div\n v-for=\"(change, index) in changedFields\"\n :key=\"index\"\n class=\"border border-base-300 rounded-lg p-3\"\n >\n <div class=\"mb-2\">\n <span class=\"font-mono text-xs font-bold\">{{\n formatFieldName(change.path)\n }}</span>\n </div>\n <div class=\"grid grid-cols-2 gap-2\">\n <div>\n <div class=\"text-xs text-base-content/70 mb-1\">\n {{ config.previousLabel || 'Previous:' }}\n </div>\n <div class=\"text-sm break-words\">\n {{ formatValue(change.oldValue) }}\n </div>\n </div>\n <div>\n <div class=\"text-xs text-base-content/70 mb-1\">\n {{ config.newLabel || 'New:' }}\n </div>\n <div class=\"text-sm break-words\">\n {{ formatValue(change.newValue) }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div v-else class=\"mt-2 text-sm text-base-content/70\">\n {{ changedFields.length }}\n {{\n changedFields.length === 1\n ? config.fieldSingular || 'field'\n : config.fieldPlural || 'fields'\n }}\n changed\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport type { PropertyChange } from './RecordVersionViewerConfig';\n\ninterface RecordChangesSummaryConfig {\n title?: string;\n showText?: string;\n hideText?: string;\n fieldColumnHeader?: string;\n previousColumnHeader?: string;\n newColumnHeader?: string;\n previousLabel?: string;\n newLabel?: string;\n fieldSingular?: string;\n fieldPlural?: string;\n fieldNameFormatter?: (path: string) => string;\n valueFormatter?: (value: any, path: string) => string;\n customFieldLabels?: Record<string, string>;\n}\n\nconst props = defineProps<{\n changedFields: PropertyChange[];\n config?: RecordChangesSummaryConfig;\n}>();\n\nconst config = computed(() => props.config || {});\n\n// State for showing/hiding changes - hidden by default\nconst showChanges = ref(false);\n\n// Default field name formatter - converts camelCase and dot notation to readable labels\nfunction defaultFieldNameFormatter(path: string): string {\n // Check for custom field labels first\n if (config.value.customFieldLabels?.[path]) {\n return config.value.customFieldLabels[path];\n }\n\n return path\n .split('.')\n .map((segment) =>\n segment\n .replace(/([A-Z])/g, ' $1') // Add space before capital letters\n .replace(/^./, (str) => str.toUpperCase()) // Capitalize first letter\n .trim(),\n )\n .join(' → '); // Use arrow to show nesting\n}\n\n// Format field name for display\nfunction formatFieldName(path: string): string {\n if (config.value.fieldNameFormatter) {\n return config.value.fieldNameFormatter(path);\n }\n return defaultFieldNameFormatter(path);\n}\n\n// Default value formatter\nfunction defaultValueFormatter(value: any): string {\n if (value === null || value === undefined) return 'N/A';\n\n // Handle objects and arrays\n if (typeof value === 'object') {\n if (Array.isArray(value)) {\n return value.length === 0 ? 'Empty array' : `Array (${value.length} items)`;\n }\n return JSON.stringify(value, null, 2);\n }\n\n // Handle boolean values\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No';\n }\n\n // Handle numbers with potential formatting\n if (typeof value === 'number') {\n // Format currency if it looks like a monetary value\n if (value > 0 && (value % 1 === 0 || value.toString().includes('.'))) {\n // Simple currency detection - could be made more sophisticated\n return value.toLocaleString('en-US', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n }\n return value.toString();\n }\n\n // Default to string representation\n return String(value);\n}\n\n// Format value for display\nfunction formatValue(value: any, path?: string): string {\n if (config.value.valueFormatter) {\n return config.value.valueFormatter(value, path || '');\n }\n return defaultValueFormatter(value);\n}\n</script>\n","<template>\n <div class=\"space-y-4\">\n <!-- Loading State -->\n <div v-if=\"loading\" class=\"space-y-4\">\n <div v-for=\"i in 3\" :key=\"i\" class=\"card bg-base-100 shadow-xs animate-pulse\">\n <div class=\"card-body p-4\">\n <div class=\"h-4 bg-base-300 rounded-sm w-1/4 mb-2\"></div>\n <div class=\"h-3 bg-base-300 rounded-sm w-1/3\"></div>\n </div>\n </div>\n </div>\n\n <!-- Error State -->\n <div v-else-if=\"error\" class=\"alert alert-error shadow-lg text-sm\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"stroke-current shrink-0 h-5 w-5\"\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 <div>\n <h3 class=\"font-bold\">{{ config.errorTitle || 'Error Loading Version History' }}</h3>\n <div class=\"text-sm\">{{ error.message }}</div>\n </div>\n <button class=\"btn btn-xs\" @click=\"$emit('retry')\">\n {{ config.retryText || 'Retry' }}\n </button>\n </div>\n\n <!-- No Versions -->\n <div v-else-if=\"!filteredVersions.length\" class=\"alert alert-info shadow-lg text-sm\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n class=\"stroke-current shrink-0 w-5 h-5\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <span>{{\n config.noVersionsText ||\n `No previous versions available for this ${config.recordDisplayName || 'record'}.`\n }}</span>\n </div>\n\n <!-- Version List -->\n <div v-else class=\"space-y-3 max-w-4xl mx-auto\">\n <div\n v-for=\"version in filteredVersions\"\n :key=\"version.id\"\n class=\"card bg-base-100 shadow-xs hover:shadow-md transition-shadow duration-200\"\n >\n <div class=\"card-body p-4\">\n <div class=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2\">\n <div>\n <h3 class=\"font-medium text-sm\">\n {{\n config.versionLabelFormat\n ? config.versionLabelFormat(version)\n : `Version from ${formatDate(version.recorded_at)}`\n }}\n </h3>\n <div class=\"flex items-center gap-2 text-xs text-base-content/70\">\n <span\n class=\"badge badge-xs\"\n :class=\"getOperationBadgeClass(version.operation)\"\n >\n {{ formatOperation(version.operation) }}\n </span>\n <span>by {{ version.auth_username || 'Unknown' }}</span>\n </div>\n <!-- Custom metadata slot -->\n <div v-if=\"$slots.versionMetadata\" class=\"mt-1\">\n <slot name=\"versionMetadata\" :version=\"version\"></slot>\n </div>\n </div>\n <div class=\"flex gap-2\">\n <!-- Custom actions slot -->\n <slot name=\"versionActions\" :version=\"version\">\n <!-- Default view action -->\n <button\n v-if=\"config.viewAction\"\n class=\"btn btn-primary btn-xs\"\n @click=\"config.viewAction(version)\"\n >\n {{ config.viewActionText || 'View Version' }}\n </button>\n </slot>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Pagination -->\n <div v-if=\"loadingMore\" class=\"text-center py-4\">\n <span class=\"loading loading-spinner loading-md\"></span>\n </div>\n <div v-if=\"hasNextPage\" class=\"text-center py-4\">\n <button\n class=\"btn btn-sm btn-neutral\"\n @click=\"$emit('load-more')\"\n :disabled=\"loadingMore\"\n >\n {{ config.loadMoreText || 'Load More' }}\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script\n setup\n lang=\"ts\"\n generic=\"\n T extends {\n id: string;\n operation: string;\n recorded_at: string;\n auth_username?: string | null;\n }\n \"\n>\nimport { computed } from 'vue';\nimport type { RecordVersionListConfig } from './RecordVersionListConfig';\n\nconst props = defineProps<{\n versions: T[];\n loading?: boolean;\n error?: Error | null;\n hasNextPage?: boolean;\n loadingMore?: boolean;\n config?: RecordVersionListConfig;\n excludeLatest?: boolean;\n}>();\n\ndefineEmits<{\n retry: [];\n 'load-more': [];\n}>();\n\nconst config = computed(() => props.config || {});\n\n// Filter out the latest version if requested (default behavior)\nconst filteredVersions = computed(() => {\n if (!props.excludeLatest) {\n return props.versions;\n }\n\n if (props.versions.length <= 1) {\n return [];\n }\n return props.versions.slice(1);\n});\n\n// Default operation labels\nconst defaultOperationLabels = {\n insert: 'Created',\n update: 'Updated',\n delete: 'Deleted',\n};\n\n// Default operation badge classes\nconst defaultOperationBadgeClasses = {\n insert: 'badge-success',\n update: 'badge-warning',\n delete: 'badge-error',\n};\n\n/**\n * Format a date string to a readable format\n */\nfunction formatDate(dateString: string | undefined | null): string {\n if (!dateString) return 'Unknown date';\n\n try {\n const date = new Date(dateString);\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n }).format(date);\n } catch (e) {\n return 'Invalid date';\n }\n}\n\n/**\n * Format the operation type for display\n */\nfunction formatOperation(operation?: string): string {\n if (!operation) return 'Unknown';\n\n const labels = { ...defaultOperationLabels, ...config.value.operationLabels };\n return labels[operation as keyof typeof labels] || operation;\n}\n\n/**\n * Get CSS class for operation badge\n */\nfunction getOperationBadgeClass(operation?: string): string {\n if (!operation) return 'badge-neutral';\n\n const classes = { ...defaultOperationBadgeClasses, ...config.value.operationBadgeClasses };\n return classes[operation as keyof typeof classes] || 'badge-neutral';\n}\n</script>\n","<template>\n <div>\n <!-- Version Header - sticky on mobile -->\n <div class=\"sticky top-0 z-10 bg-base-100 shadow-sm\">\n <slot\n name=\"header\"\n :version=\"version\"\n :is-loading=\"isLoading\"\n :is-restoring=\"isRestoring\"\n >\n <!-- Default header -->\n <div class=\"flex justify-between items-center p-4 border-b\">\n <div>\n <h1 class=\"text-lg font-semibold\">\n {{ config.title || `View ${config.recordDisplayName || 'Record'} Version` }}\n </h1>\n <div v-if=\"version\" class=\"text-sm text-base-content/70\">\n {{ formatVersionInfo(version) }}\n </div>\n </div>\n <div class=\"flex gap-2\">\n <!-- Back button -->\n <button v-if=\"config.onBack\" @click=\"config.onBack\" class=\"btn btn-ghost btn-sm\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4 mr-1\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M10 19l-7-7m0 0l7-7m-7 7h18\"\n />\n </svg>\n {{ config.backText || 'Back' }}\n </button>\n\n <!-- Restore button -->\n <button\n v-if=\"config.onRestore && version && version.operation !== 'delete'\"\n @click=\"handleRestore\"\n :disabled=\"isRestoring\"\n class=\"btn btn-primary btn-sm\"\n >\n <span v-if=\"isRestoring\" class=\"loading loading-spinner loading-sm mr-1\"></span>\n {{ config.restoreText || 'Restore Version' }}\n </button>\n </div>\n </div>\n </slot>\n </div>\n\n <!-- Loading and Error States -->\n <LoadingErrorStates :is-loading=\"isLoading\" :error=\"error\" />\n\n <!-- Main content area -->\n <div\n v-if=\"!isLoading && !error && recordData\"\n class=\"max-w-4xl mx-auto p-2 md:p-4 bg-base-200 rounded-lg shadow-sm\"\n >\n <!-- Changes Summary - Only show for update operations -->\n <div v-if=\"shouldShowChanges\" class=\"mb-4\">\n <slot name=\"changes\" :changed-fields=\"changedFields\" :version=\"version\">\n <RecordChangesSummary\n :changed-fields=\"changedFields\"\n :config=\"config.changesSummaryConfig\"\n />\n </slot>\n </div>\n\n <!-- Deletion Notice -->\n <div v-if=\"version?.operation === 'delete'\" class=\"mb-4\">\n <slot name=\"deletion-notice\" :version=\"version\">\n <div class=\"alert alert-warning\">\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=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z\"\n />\n </svg>\n <div>\n <h3 class=\"font-bold\">\n {{ config.deletionNoticeTitle || 'Record Was Deleted' }}\n </h3>\n <div class=\"text-sm\">\n {{\n config.deletionNoticeText ||\n 'This version shows the state of the record before it was deleted.'\n }}\n </div>\n </div>\n </div>\n </slot>\n </div>\n\n <!-- Record Information -->\n <div class=\"mb-4 p-3 bg-base-100 rounded-lg shadow-sm\">\n <slot name=\"record-info\" :record-data=\"recordData\" :version=\"version\">\n <!-- Default record info display -->\n <h3 class=\"font-semibold mb-2\">\n {{ config.recordInfoTitle || 'Record Information' }}\n </h3>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4 text-sm\">\n <div v-for=\"(value, key) in filteredRecordData\" :key=\"key\">\n <strong class=\"text-base-content/70\">{{ formatFieldName(key) }}:</strong>\n <span class=\"ml-2\">{{ formatValue(value) }}</span>\n </div>\n </div>\n </slot>\n </div>\n\n <!-- Custom Content Area -->\n <div class=\"space-y-4\">\n <slot\n name=\"content\"\n :record-data=\"recordData\"\n :version=\"version\"\n :changed-fields=\"changedFields\"\n >\n <!-- Fallback content if no slot provided -->\n <div class=\"p-4 bg-base-100 rounded-lg shadow-sm\">\n <h3 class=\"font-semibold mb-2\">{{ config.rawDataTitle || 'Raw Data' }}</h3>\n <pre class=\"text-xs bg-base-200 p-3 rounded overflow-auto max-h-96\">{{\n JSON.stringify(recordData, null, 2)\n }}</pre>\n </div>\n </slot>\n </div>\n </div>\n </div>\n</template>\n\n<script\n setup\n lang=\"ts\"\n generic=\"\n TRecord extends Record<string, any>,\n TVersion extends {\n id: string;\n operation: string;\n recorded_at: string;\n auth_username?: string | null;\n }\n \"\n>\nimport { computed } from 'vue';\nimport LoadingErrorStates from './LoadingErrorStates.vue';\nimport RecordChangesSummary from './RecordChangesSummary.vue';\nimport type { PropertyChange, RecordVersionViewerConfig } from './RecordVersionViewerConfig';\n\nconst props = withDefaults(\n defineProps<{\n version: TVersion | null;\n recordData: TRecord | null;\n changedFields?: PropertyChange[];\n isLoading?: boolean;\n isRestoring?: boolean;\n error?: Error | null;\n config?: RecordVersionViewerConfig;\n }>(),\n {\n changedFields: () => [],\n },\n);\n\nconst config = computed(() => props.config || {});\n\n// Compute whether to show changes summary\nconst shouldShowChanges = computed(() => {\n return (\n props.changedFields &&\n props.changedFields.length > 0 &&\n props.version?.operation === 'update'\n );\n});\n\n// Filter out system fields from record data display\nconst filteredRecordData = computed(() => {\n if (!props.recordData) return {};\n\n const excludeFields = new Set([\n 'id',\n 'created_at',\n 'updated_at',\n 'created_by',\n 'updated_by',\n '__typename',\n ...(config.value.excludeFields || []),\n ]);\n\n return Object.entries(props.recordData)\n .filter(([key]) => !excludeFields.has(key))\n .reduce(\n (acc, [key, value]) => {\n acc[key] = value;\n return acc;\n },\n {} as Record<string, any>,\n );\n});\n\n// Format version info for display\nfunction formatVersionInfo(version: TVersion): string {\n const date = new Date(version.recorded_at).toLocaleString();\n const operation = version.operation.charAt(0).toUpperCase() + version.operation.slice(1);\n const user = version.auth_username || 'Unknown';\n\n return `${operation} on ${date} by ${user}`;\n}\n\n// Default field name formatter\nfunction formatFieldName(field: string): string {\n if (config.value.formatFieldName) {\n return config.value.formatFieldName(field);\n }\n\n return field\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, (str) => str.toUpperCase())\n .trim();\n}\n\n// Default value formatter\nfunction formatValue(value: any): string {\n if (config.value.formatValue) {\n return config.value.formatValue(value);\n }\n\n if (value === null || value === undefined) return 'N/A';\n if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n if (typeof value === 'object') return JSON.stringify(value);\n return String(value);\n}\n\n// Handle restore action\nasync function handleRestore() {\n if (config.value.onRestore && props.version) {\n await config.value.onRestore(props.version);\n }\n}\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RecordVersionViewer-DKIdX_BX.js","names":["$emit","$slots"],"sources":["../src/components/ui/LoadingErrorStates.vue","../src/components/ui/RecordChangesSummary.vue","../src/components/ui/RecordVersionList.vue","../src/components/ui/RecordVersionViewer.vue"],"sourcesContent":["<template>\n <!-- Loading State -->\n <div v-if=\"isLoading\" class=\"text-center py-8\">\n <slot name=\"loading\">\n <div class=\"flex justify-center\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n <p class=\"text-base-content/70 mt-2\">\n {{ config.loadingText || 'Loading...' }}\n </p>\n </slot>\n </div>\n\n <!-- Error State -->\n <div v-else-if=\"error\" class=\"text-center py-8\">\n <slot name=\"error\" :error=\"error\" :retry=\"handleRetry\">\n <div class=\"alert alert-error max-w-md mx-auto\">\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 <div>\n <h3 class=\"font-bold\">\n {{ config.errorTitle || 'Error' }}\n </h3>\n <div class=\"text-sm\">\n {{ getErrorMessage(error) }}\n </div>\n <button\n v-if=\"config.showRetry !== false\"\n class=\"btn btn-sm btn-outline mt-2\"\n @click=\"handleRetry\"\n >\n {{ config.retryText || 'Try Again' }}\n </button>\n </div>\n </div>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\ninterface LoadingErrorStatesConfig {\n loadingText?: string;\n errorTitle?: string;\n retryText?: string;\n showRetry?: boolean;\n customErrorMessage?: (error: Error) => string;\n}\n\nconst props = defineProps<{\n isLoading?: boolean;\n error?: Error | null;\n config?: LoadingErrorStatesConfig;\n}>();\n\nconst emit = defineEmits<{\n retry: [];\n}>();\n\nconst config = computed(() => props.config || {});\n\nfunction getErrorMessage(error: Error): string {\n if (config.value.customErrorMessage) {\n return config.value.customErrorMessage(error);\n }\n\n return error.message || 'An unexpected error occurred';\n}\n\nfunction handleRetry() {\n emit('retry');\n}\n</script>\n","<template>\n <div v-if=\"changedFields.length > 0\" class=\"card bg-base-100 shadow-sm mb-4\">\n <div class=\"card-body p-3 sm:p-5\">\n <div class=\"flex justify-between items-center\">\n <h2 class=\"card-title text-base sm:text-lg\">\n {{ config.title || 'Changes in This Version' }}\n </h2>\n <button @click=\"showChanges = !showChanges\" class=\"btn btn-sm btn-info\">\n {{\n showChanges ? config.hideText || 'Hide Changes' : config.showText || 'Show Changes'\n }}\n </button>\n </div>\n\n <div v-if=\"showChanges\">\n <!-- Desktop view - table format -->\n <div class=\"hidden md:block overflow-x-auto mt-4\">\n <table class=\"table table-zebra table-sm\">\n <thead>\n <tr>\n <th>{{ config.fieldColumnHeader || 'Field' }}</th>\n <th>{{ config.previousColumnHeader || 'Previous Value' }}</th>\n <th>{{ config.newColumnHeader || 'New Value' }}</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"(change, index) in changedFields\" :key=\"index\">\n <td class=\"font-mono text-xs\">\n {{ formatFieldName(change.path) }}\n </td>\n <td>{{ formatValue(change.oldValue) }}</td>\n <td>{{ formatValue(change.newValue) }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <!-- Mobile view - card format -->\n <div class=\"md:hidden space-y-4 mt-4\">\n <div\n v-for=\"(change, index) in changedFields\"\n :key=\"index\"\n class=\"border border-base-300 rounded-lg p-3\"\n >\n <div class=\"mb-2\">\n <span class=\"font-mono text-xs font-bold\">{{\n formatFieldName(change.path)\n }}</span>\n </div>\n <div class=\"grid grid-cols-2 gap-2\">\n <div>\n <div class=\"text-xs text-base-content/70 mb-1\">\n {{ config.previousLabel || 'Previous:' }}\n </div>\n <div class=\"text-sm break-words\">\n {{ formatValue(change.oldValue) }}\n </div>\n </div>\n <div>\n <div class=\"text-xs text-base-content/70 mb-1\">\n {{ config.newLabel || 'New:' }}\n </div>\n <div class=\"text-sm break-words\">\n {{ formatValue(change.newValue) }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div v-else class=\"mt-2 text-sm text-base-content/70\">\n {{ changedFields.length }}\n {{\n changedFields.length === 1\n ? config.fieldSingular || 'field'\n : config.fieldPlural || 'fields'\n }}\n changed\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport type { PropertyChange } from './RecordVersionViewerConfig';\n\ninterface RecordChangesSummaryConfig {\n title?: string;\n showText?: string;\n hideText?: string;\n fieldColumnHeader?: string;\n previousColumnHeader?: string;\n newColumnHeader?: string;\n previousLabel?: string;\n newLabel?: string;\n fieldSingular?: string;\n fieldPlural?: string;\n fieldNameFormatter?: (path: string) => string;\n valueFormatter?: (value: any, path: string) => string;\n customFieldLabels?: Record<string, string>;\n}\n\nconst props = defineProps<{\n changedFields: PropertyChange[];\n config?: RecordChangesSummaryConfig;\n}>();\n\nconst config = computed(() => props.config || {});\n\n// State for showing/hiding changes - hidden by default\nconst showChanges = ref(false);\n\n// Default field name formatter - converts camelCase and dot notation to readable labels\nfunction defaultFieldNameFormatter(path: string): string {\n // Check for custom field labels first\n if (config.value.customFieldLabels?.[path]) {\n return config.value.customFieldLabels[path];\n }\n\n return path\n .split('.')\n .map((segment) =>\n segment\n .replace(/([A-Z])/g, ' $1') // Add space before capital letters\n .replace(/^./, (str) => str.toUpperCase()) // Capitalize first letter\n .trim(),\n )\n .join(' → '); // Use arrow to show nesting\n}\n\n// Format field name for display\nfunction formatFieldName(path: string): string {\n if (config.value.fieldNameFormatter) {\n return config.value.fieldNameFormatter(path);\n }\n return defaultFieldNameFormatter(path);\n}\n\n// Default value formatter\nfunction defaultValueFormatter(value: any): string {\n if (value === null || value === undefined) return 'N/A';\n\n // Handle objects and arrays\n if (typeof value === 'object') {\n if (Array.isArray(value)) {\n return value.length === 0 ? 'Empty array' : `Array (${value.length} items)`;\n }\n return JSON.stringify(value, null, 2);\n }\n\n // Handle boolean values\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No';\n }\n\n // Handle numbers with potential formatting\n if (typeof value === 'number') {\n // Format currency if it looks like a monetary value\n if (value > 0 && (value % 1 === 0 || value.toString().includes('.'))) {\n // Simple currency detection - could be made more sophisticated\n return value.toLocaleString('en-US', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n }\n return value.toString();\n }\n\n // Default to string representation\n return String(value);\n}\n\n// Format value for display\nfunction formatValue(value: any, path?: string): string {\n if (config.value.valueFormatter) {\n return config.value.valueFormatter(value, path || '');\n }\n return defaultValueFormatter(value);\n}\n</script>\n","<template>\n <div class=\"space-y-4\">\n <!-- Loading State -->\n <div v-if=\"loading\" class=\"space-y-4\">\n <div v-for=\"i in 3\" :key=\"i\" class=\"card bg-base-100 shadow-xs animate-pulse\">\n <div class=\"card-body p-4\">\n <div class=\"h-4 bg-base-300 rounded-sm w-1/4 mb-2\"></div>\n <div class=\"h-3 bg-base-300 rounded-sm w-1/3\"></div>\n </div>\n </div>\n </div>\n\n <!-- Error State -->\n <div v-else-if=\"error\" class=\"alert alert-error shadow-lg text-sm\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"stroke-current shrink-0 h-5 w-5\"\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 <div>\n <h3 class=\"font-bold\">{{ config.errorTitle || 'Error Loading Version History' }}</h3>\n <div class=\"text-sm\">{{ error.message }}</div>\n </div>\n <button class=\"btn btn-xs\" @click=\"$emit('retry')\">\n {{ config.retryText || 'Retry' }}\n </button>\n </div>\n\n <!-- No Versions -->\n <div v-else-if=\"!filteredVersions.length\" class=\"alert alert-info shadow-lg text-sm\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n class=\"stroke-current shrink-0 w-5 h-5\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <span>{{\n config.noVersionsText ||\n `No previous versions available for this ${config.recordDisplayName || 'record'}.`\n }}</span>\n </div>\n\n <!-- Version List -->\n <div v-else class=\"space-y-3 max-w-4xl mx-auto\">\n <div\n v-for=\"version in filteredVersions\"\n :key=\"version.id\"\n class=\"card bg-base-100 shadow-xs hover:shadow-md transition-shadow duration-200\"\n >\n <div class=\"card-body p-4\">\n <div class=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2\">\n <div>\n <h3 class=\"font-medium text-sm\">\n {{\n config.versionLabelFormat\n ? config.versionLabelFormat(version)\n : `Version from ${formatDate(version.recorded_at)}`\n }}\n </h3>\n <div class=\"flex items-center gap-2 text-xs text-base-content/70\">\n <span\n class=\"badge badge-xs\"\n :class=\"getOperationBadgeClass(version.operation)\"\n >\n {{ formatOperation(version.operation) }}\n </span>\n <span>by {{ version.auth_username || 'Unknown' }}</span>\n </div>\n <!-- Custom metadata slot -->\n <div v-if=\"$slots.versionMetadata\" class=\"mt-1\">\n <slot name=\"versionMetadata\" :version=\"version\"></slot>\n </div>\n </div>\n <div class=\"flex gap-2\">\n <!-- Custom actions slot -->\n <slot name=\"versionActions\" :version=\"version\">\n <!-- Default view action -->\n <button\n v-if=\"config.viewAction\"\n class=\"btn btn-primary btn-xs\"\n @click=\"config.viewAction(version)\"\n >\n {{ config.viewActionText || 'View Version' }}\n </button>\n </slot>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Pagination -->\n <div v-if=\"loadingMore\" class=\"text-center py-4\">\n <span class=\"loading loading-spinner loading-md\"></span>\n </div>\n <div v-if=\"hasNextPage\" class=\"text-center py-4\">\n <button\n class=\"btn btn-sm btn-neutral\"\n @click=\"$emit('load-more')\"\n :disabled=\"loadingMore\"\n >\n {{ config.loadMoreText || 'Load More' }}\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script\n setup\n lang=\"ts\"\n generic=\"\n T extends {\n id: string;\n operation: string;\n recorded_at: string;\n auth_username?: string | null;\n }\n \"\n>\nimport { computed } from 'vue';\nimport type { RecordVersionListConfig } from './RecordVersionListConfig';\n\nconst props = defineProps<{\n versions: T[];\n loading?: boolean;\n error?: Error | null;\n hasNextPage?: boolean;\n loadingMore?: boolean;\n config?: RecordVersionListConfig;\n excludeLatest?: boolean;\n}>();\n\ndefineEmits<{\n retry: [];\n 'load-more': [];\n}>();\n\nconst config = computed(() => props.config || {});\n\n// Filter out the latest version if requested (default behavior)\nconst filteredVersions = computed(() => {\n if (!props.excludeLatest) {\n return props.versions;\n }\n\n if (props.versions.length <= 1) {\n return [];\n }\n return props.versions.slice(1);\n});\n\n// Default operation labels\nconst defaultOperationLabels = {\n insert: 'Created',\n update: 'Updated',\n delete: 'Deleted',\n};\n\n// Default operation badge classes\nconst defaultOperationBadgeClasses = {\n insert: 'badge-success',\n update: 'badge-warning',\n delete: 'badge-error',\n};\n\n/**\n * Format a date string to a readable format\n */\nfunction formatDate(dateString: string | undefined | null): string {\n if (!dateString) return 'Unknown date';\n\n try {\n const date = new Date(dateString);\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n }).format(date);\n } catch (e) {\n return 'Invalid date';\n }\n}\n\n/**\n * Format the operation type for display\n */\nfunction formatOperation(operation?: string): string {\n if (!operation) return 'Unknown';\n\n const labels = { ...defaultOperationLabels, ...config.value.operationLabels };\n return labels[operation as keyof typeof labels] || operation;\n}\n\n/**\n * Get CSS class for operation badge\n */\nfunction getOperationBadgeClass(operation?: string): string {\n if (!operation) return 'badge-neutral';\n\n const classes = { ...defaultOperationBadgeClasses, ...config.value.operationBadgeClasses };\n return classes[operation as keyof typeof classes] || 'badge-neutral';\n}\n</script>\n","<template>\n <div>\n <!-- Version Header - sticky on mobile -->\n <div class=\"sticky top-0 z-10 bg-base-100 shadow-sm\">\n <slot\n name=\"header\"\n :version=\"version\"\n :is-loading=\"isLoading\"\n :is-restoring=\"isRestoring\"\n >\n <!-- Default header -->\n <div class=\"flex justify-between items-center p-4 border-b\">\n <div>\n <h1 class=\"text-lg font-semibold\">\n {{ config.title || `View ${config.recordDisplayName || 'Record'} Version` }}\n </h1>\n <div v-if=\"version\" class=\"text-sm text-base-content/70\">\n {{ formatVersionInfo(version) }}\n </div>\n </div>\n <div class=\"flex gap-2\">\n <!-- Back button -->\n <button v-if=\"config.onBack\" @click=\"config.onBack\" class=\"btn btn-ghost btn-sm\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4 mr-1\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M10 19l-7-7m0 0l7-7m-7 7h18\"\n />\n </svg>\n {{ config.backText || 'Back' }}\n </button>\n\n <!-- Restore button -->\n <button\n v-if=\"config.onRestore && version && version.operation !== 'delete'\"\n @click=\"handleRestore\"\n :disabled=\"isRestoring\"\n class=\"btn btn-primary btn-sm\"\n >\n <span v-if=\"isRestoring\" class=\"loading loading-spinner loading-sm mr-1\"></span>\n {{ config.restoreText || 'Restore Version' }}\n </button>\n </div>\n </div>\n </slot>\n </div>\n\n <!-- Loading and Error States -->\n <LoadingErrorStates :is-loading=\"isLoading\" :error=\"error\" />\n\n <!-- Main content area -->\n <div\n v-if=\"!isLoading && !error && recordData\"\n class=\"max-w-4xl mx-auto p-2 md:p-4 bg-base-200 rounded-lg shadow-sm\"\n >\n <!-- Changes Summary - Only show for update operations -->\n <div v-if=\"shouldShowChanges\" class=\"mb-4\">\n <slot name=\"changes\" :changed-fields=\"changedFields\" :version=\"version\">\n <RecordChangesSummary\n :changed-fields=\"changedFields\"\n :config=\"config.changesSummaryConfig\"\n />\n </slot>\n </div>\n\n <!-- Deletion Notice -->\n <div v-if=\"version?.operation === 'delete'\" class=\"mb-4\">\n <slot name=\"deletion-notice\" :version=\"version\">\n <div class=\"alert alert-warning\">\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=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z\"\n />\n </svg>\n <div>\n <h3 class=\"font-bold\">\n {{ config.deletionNoticeTitle || 'Record Was Deleted' }}\n </h3>\n <div class=\"text-sm\">\n {{\n config.deletionNoticeText ||\n 'This version shows the state of the record before it was deleted.'\n }}\n </div>\n </div>\n </div>\n </slot>\n </div>\n\n <!-- Record Information -->\n <div class=\"mb-4 p-3 bg-base-100 rounded-lg shadow-sm\">\n <slot name=\"record-info\" :record-data=\"recordData\" :version=\"version\">\n <!-- Default record info display -->\n <h3 class=\"font-semibold mb-2\">\n {{ config.recordInfoTitle || 'Record Information' }}\n </h3>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4 text-sm\">\n <div v-for=\"(value, key) in filteredRecordData\" :key=\"key\">\n <strong class=\"text-base-content/70\">{{ formatFieldName(key) }}:</strong>\n <span class=\"ml-2\">{{ formatValue(value) }}</span>\n </div>\n </div>\n </slot>\n </div>\n\n <!-- Custom Content Area -->\n <div class=\"space-y-4\">\n <slot\n name=\"content\"\n :record-data=\"recordData\"\n :version=\"version\"\n :changed-fields=\"changedFields\"\n >\n <!-- Fallback content if no slot provided -->\n <div class=\"p-4 bg-base-100 rounded-lg shadow-sm\">\n <h3 class=\"font-semibold mb-2\">{{ config.rawDataTitle || 'Raw Data' }}</h3>\n <pre class=\"text-xs bg-base-200 p-3 rounded overflow-auto max-h-96\">{{\n JSON.stringify(recordData, null, 2)\n }}</pre>\n </div>\n </slot>\n </div>\n </div>\n </div>\n</template>\n\n<script\n setup\n lang=\"ts\"\n generic=\"\n TRecord extends Record<string, any>,\n TVersion extends {\n id: string;\n operation: string;\n recorded_at: string;\n auth_username?: string | null;\n }\n \"\n>\nimport { computed } from 'vue';\nimport LoadingErrorStates from './LoadingErrorStates.vue';\nimport RecordChangesSummary from './RecordChangesSummary.vue';\nimport type { PropertyChange, RecordVersionViewerConfig } from './RecordVersionViewerConfig';\n\nconst props = withDefaults(\n defineProps<{\n version: TVersion | null;\n recordData: TRecord | null;\n changedFields?: PropertyChange[];\n isLoading?: boolean;\n isRestoring?: boolean;\n error?: Error | null;\n config?: RecordVersionViewerConfig;\n }>(),\n {\n changedFields: () => [],\n },\n);\n\nconst config = computed(() => props.config || {});\n\n// Compute whether to show changes summary\nconst shouldShowChanges = computed(() => {\n return (\n props.changedFields &&\n props.changedFields.length > 0 &&\n props.version?.operation === 'update'\n );\n});\n\n// Filter out system fields from record data display\nconst filteredRecordData = computed(() => {\n if (!props.recordData) return {};\n\n const excludeFields = new Set([\n 'id',\n 'created_at',\n 'updated_at',\n 'created_by',\n 'updated_by',\n '__typename',\n ...(config.value.excludeFields || []),\n ]);\n\n return Object.entries(props.recordData)\n .filter(([key]) => !excludeFields.has(key))\n .reduce(\n (acc, [key, value]) => {\n acc[key] = value;\n return acc;\n },\n {} as Record<string, any>,\n );\n});\n\n// Format version info for display\nfunction formatVersionInfo(version: TVersion): string {\n const date = new Date(version.recorded_at).toLocaleString();\n const operation = version.operation.charAt(0).toUpperCase() + version.operation.slice(1);\n const user = version.auth_username || 'Unknown';\n\n return `${operation} on ${date} by ${user}`;\n}\n\n// Default field name formatter\nfunction formatFieldName(field: string): string {\n if (config.value.formatFieldName) {\n return config.value.formatFieldName(field);\n }\n\n return field\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, (str) => str.toUpperCase())\n .trim();\n}\n\n// Default value formatter\nfunction formatValue(value: any): string {\n if (config.value.formatValue) {\n return config.value.formatValue(value);\n }\n\n if (value === null || value === undefined) return 'N/A';\n if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n if (typeof value === 'object') return JSON.stringify(value);\n return String(value);\n}\n\n// Handle restore action\nasync function handleRestore() {\n if (config.value.onRestore && props.version) {\n await config.value.onRestore(props.version);\n }\n}\n</script>\n"],"mappings":"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"}
|