@dragonmastery/dragoncore-vue 0.0.21 → 0.0.23
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/{AppLink-CHMMrSFI.js → AppLink-FcNGKgvG.js} +1 -1
- package/dist/{AppLink-CHMMrSFI.js.map → AppLink-FcNGKgvG.js.map} +1 -1
- package/dist/Appearance-Ch4zfWZ3.js +3 -0
- package/dist/{Appearance-DxWTyx1M.js → Appearance-shr0Aql0.js} +1 -1
- package/dist/{Appearance-DxWTyx1M.js.map → Appearance-shr0Aql0.js.map} +1 -1
- package/dist/{ChangePasswordPage--3XwluwE.js → ChangePasswordPage-C633yQiU.js} +2 -2
- package/dist/{ChangePasswordPage--3XwluwE.js.map → ChangePasswordPage-C633yQiU.js.map} +1 -1
- package/dist/ChangePasswordPage-CYuCCosx.js +7 -0
- package/dist/ConfirmDialog-DjthOYU6.js +85 -0
- package/dist/ConfirmDialog-DjthOYU6.js.map +1 -0
- package/dist/ConsentRequired-BPjsZoPY.js +211 -0
- package/dist/ConsentRequired-BPjsZoPY.js.map +1 -0
- package/dist/CreateTeamForm-CeaC41VY.js +142 -0
- package/dist/CreateTeamForm-CeaC41VY.js.map +1 -0
- package/dist/CreateTeamForm-DfgCaUwX.js +12 -0
- package/dist/CreateTeamMemberForm-Bv9gNG4z.js +140 -0
- package/dist/CreateTeamMemberForm-Bv9gNG4z.js.map +1 -0
- package/dist/CreateTeamMemberForm-CnHfpob_.js +12 -0
- package/dist/CreateUserPage-C9uOeYDJ.js +7 -0
- package/dist/{CreateUserPage-DLwXeLAq.js → CreateUserPage-CqKcY7_X.js} +2 -2
- package/dist/{CreateUserPage-DLwXeLAq.js.map → CreateUserPage-CqKcY7_X.js.map} +1 -1
- package/dist/CreditBalanceDashboard-0HiJE_OS.js +13 -0
- package/dist/CreditBalanceDashboard-k_orNn4h.js +28 -0
- package/dist/CreditBalanceDashboard-k_orNn4h.js.map +1 -0
- package/dist/CreditManagement-BVBZQDI4.js +356 -0
- package/dist/CreditManagement-BVBZQDI4.js.map +1 -0
- package/dist/CreditManagement-DXdIN-0d.js +13 -0
- package/dist/CreditTransactionHistory-DSu-6aDi.js +229 -0
- package/dist/CreditTransactionHistory-DSu-6aDi.js.map +1 -0
- package/dist/CustomerCreateSupportTicketForm-BsjX8Pja.js +14 -0
- package/dist/CustomerCreateSupportTicketForm-kf8YIGjx.js +158 -0
- package/dist/CustomerCreateSupportTicketForm-kf8YIGjx.js.map +1 -0
- package/dist/{CustomerSupportTicketDetailPage-BdyaKG1v.js → CustomerSupportTicketDetailPage-C_-YoAaP.js} +12 -9
- package/dist/{CustomerSupportTicketDetailPage-BdyaKG1v.js.map → CustomerSupportTicketDetailPage-C_-YoAaP.js.map} +1 -1
- package/dist/CustomerSupportTicketList-DdACn3ug.js +63 -0
- package/dist/{CustomerSupportTicketParent-HIxwSVdu.js → CustomerSupportTicketParent-BpBuYCrP.js} +4 -4
- package/dist/{CustomerSupportTicketParent-HIxwSVdu.js.map → CustomerSupportTicketParent-BpBuYCrP.js.map} +1 -1
- package/dist/CustomerSupportTicketParent-Djy7pNqO.js +8 -0
- package/dist/CustomerSupportTicketSuccess-DsFzpJFU.js +12 -0
- package/dist/CustomerSupportTicketSuccess-cumNSGdx.js +54 -0
- package/dist/CustomerSupportTicketSuccess-cumNSGdx.js.map +1 -0
- package/dist/EditTeamForm-BE3iX2x3.js +12 -0
- package/dist/EditTeamForm-BxRN338L.js +163 -0
- package/dist/EditTeamForm-BxRN338L.js.map +1 -0
- package/dist/EditTeamMemberForm-D7D1Zddh.js +9 -0
- package/dist/{EditTeamMemberForm-CaS2GLjV.js → EditTeamMemberForm-DfgJr5Cy.js} +7 -72
- package/dist/EditTeamMemberForm-DfgJr5Cy.js.map +1 -0
- package/dist/EditUserPage-C0K7EGjM.js +8 -0
- package/dist/{EditUserPage-DURc5rmi.js → EditUserPage-CI_jtU8P.js} +4 -4
- package/dist/{EditUserPage-DURc5rmi.js.map → EditUserPage-CI_jtU8P.js.map} +1 -1
- package/dist/EnhancedRefreshTokenHandler-C6tZCcfX.js +189 -0
- package/dist/EnhancedRefreshTokenHandler-C6tZCcfX.js.map +1 -0
- package/dist/FieldsetSection-Cd4B8Ad7.js +27 -0
- package/dist/FieldsetSection-Cd4B8Ad7.js.map +1 -0
- package/dist/{ForgotPassword-OjIPi9s9.js → ForgotPassword-Ckb9Z-wb.js} +4 -4
- package/dist/{ForgotPassword-OjIPi9s9.js.map → ForgotPassword-Ckb9Z-wb.js.map} +1 -1
- package/dist/ForgotPassword-tJVSg7PB.js +8 -0
- package/dist/{TimelineSystemEvent-BHzFr46C.js → InlineAttachments-DAn_QknY.js} +60 -661
- package/dist/InlineAttachments-DAn_QknY.js.map +1 -0
- package/dist/{LoginForm-9UFnA-fO.js → LoginForm-CMN2T1fA.js} +5 -5
- package/dist/{LoginForm-9UFnA-fO.js.map → LoginForm-CMN2T1fA.js.map} +1 -1
- package/dist/LoginForm-QFJ8NHww.js +8 -0
- package/dist/{Logout-YgTgOFUH.js → Logout-CFLYHlLr.js} +5 -5
- package/dist/{Logout-YgTgOFUH.js.map → Logout-CFLYHlLr.js.map} +1 -1
- package/dist/Logout-CjDBff3W.js +8 -0
- package/dist/MfaSetup-BZcoxJx-.js +9 -0
- package/dist/{MfaSetup-RtFMY_dj.js → MfaSetup-XqoAwBXx.js} +5 -5
- package/dist/{MfaSetup-RtFMY_dj.js.map → MfaSetup-XqoAwBXx.js.map} +1 -1
- package/dist/{MfaVerify-Cvhe8bEM.js → MfaVerify-C-A75TFZ.js} +6 -6
- package/dist/{MfaVerify-Cvhe8bEM.js.map → MfaVerify-C-A75TFZ.js.map} +1 -1
- package/dist/MfaVerify-Dy2aV5Gk.js +9 -0
- package/dist/{RecordVersionViewer-BWZ78vvE.js → RecordVersionViewer-D2j10HdK.js} +1 -1
- package/dist/{RecordVersionViewer-BWZ78vvE.js.map → RecordVersionViewer-D2j10HdK.js.map} +1 -1
- package/dist/{ResetPassword-BE4mXK9q.js → ResetPassword-Cd-Yxp8E.js} +4 -4
- package/dist/{ResetPassword-BE4mXK9q.js.map → ResetPassword-Cd-Yxp8E.js.map} +1 -1
- package/dist/ResetPassword-D6to3G6a.js +8 -0
- package/dist/{SavedFiltersPage-DQt6uc8m.js → SavedFiltersPage-DM5DvAFa.js} +62 -34
- package/dist/{SavedFiltersPage-DQt6uc8m.js.map → SavedFiltersPage-DM5DvAFa.js.map} +1 -1
- package/dist/{Signup-9TjMMnU4.js → Signup-2pqvJiVt.js} +57 -57
- package/dist/Signup-2pqvJiVt.js.map +1 -0
- package/dist/Signup-XdImA1os.js +9 -0
- package/dist/{SignupConsentFlow-QUZGKjdB.js → SignupConsentFlow-X3kXuviv.js} +106 -70
- package/dist/SignupConsentFlow-X3kXuviv.js.map +1 -0
- package/dist/{SignupRequirementsPage-DfbYmpQD.js → SignupRequirementsPage-Cf-ElkEq.js} +9 -8
- package/dist/{SignupRequirementsPage-DfbYmpQD.js.map → SignupRequirementsPage-Cf-ElkEq.js.map} +1 -1
- package/dist/StaffCreateSupportTicketForm-BlUP2XXy.js +14 -0
- package/dist/StaffCreateSupportTicketForm-D2nn4rTU.js +255 -0
- package/dist/StaffCreateSupportTicketForm-D2nn4rTU.js.map +1 -0
- package/dist/{StaffSupportTicketDetailPage-DQdfh6H1.js → StaffSupportTicketDetailPage-MFtm06BE.js} +14 -11
- package/dist/{StaffSupportTicketDetailPage-DQdfh6H1.js.map → StaffSupportTicketDetailPage-MFtm06BE.js.map} +1 -1
- package/dist/StaffSupportTicketList-LfLx0pYP.js +63 -0
- package/dist/StaffSupportTicketParent-B7mEN1oD.js +8 -0
- package/dist/{StaffSupportTicketParent-CilR4RGM.js → StaffSupportTicketParent-BvPwgOqH.js} +4 -4
- package/dist/{StaffSupportTicketParent-CilR4RGM.js.map → StaffSupportTicketParent-BvPwgOqH.js.map} +1 -1
- package/dist/StaffSupportTicketSuccess-BMCOP3ko.js +12 -0
- package/dist/StaffSupportTicketSuccess-Ca2WrcRg.js +54 -0
- package/dist/StaffSupportTicketSuccess-Ca2WrcRg.js.map +1 -0
- package/dist/{SupportStaffPage-KKugAnFm.js → SupportStaffPage-B69-kuvg.js} +8 -7
- package/dist/{SupportStaffPage-KKugAnFm.js.map → SupportStaffPage-B69-kuvg.js.map} +1 -1
- package/dist/{SupportTicketDevLifecycleBadge-EMrQHfyG.js → SupportTicketDevLifecycleBadge-BoAjMb08.js} +1 -1
- package/dist/{SupportTicketDevLifecycleBadge-EMrQHfyG.js.map → SupportTicketDevLifecycleBadge-BoAjMb08.js.map} +1 -1
- package/dist/{SupportTicketMaintenancePage-smItdkrD.js → SupportTicketMaintenancePage-Bptja-xb.js} +5 -4
- package/dist/{SupportTicketMaintenancePage-smItdkrD.js.map → SupportTicketMaintenancePage-Bptja-xb.js.map} +1 -1
- package/dist/TeamAttachmentsTab-Dk3LxX3n.js +63 -0
- package/dist/TeamHistoryTab-CRONdHcL.js +6 -0
- package/dist/{TeamHistoryTab-D5biUPmq.js → TeamHistoryTab-DM8KBEG1.js} +7 -19
- package/dist/TeamHistoryTab-DM8KBEG1.js.map +1 -0
- package/dist/TeamList-DYm_vQ2z.js +8 -0
- package/dist/TeamList-qdwlMuJv.js +141 -0
- package/dist/TeamList-qdwlMuJv.js.map +1 -0
- package/dist/TeamMemberList-4LRLT_7Z.js +7 -0
- package/dist/TeamMemberList-DyI1U1t_.js +166 -0
- package/dist/TeamMemberList-DyI1U1t_.js.map +1 -0
- package/dist/TeamMemberParent-B63pRfI6.js +10 -0
- package/dist/TeamMemberParent-D9Fxu7GD.js +83 -0
- package/dist/TeamMemberParent-D9Fxu7GD.js.map +1 -0
- package/dist/TeamMembersTab-BGcdyEE8.js +3 -0
- package/dist/{TeamMembersTab-4gmnP9sD.js → TeamMembersTab-BigqpBDH.js} +1 -1
- package/dist/{TeamMembersTab-4gmnP9sD.js.map → TeamMembersTab-BigqpBDH.js.map} +1 -1
- package/dist/{TeamNotesTab-BzGZZ1h8.js → TeamNotesTab-BgxleidZ.js} +6 -5
- package/dist/{TeamNotesTab-BzGZZ1h8.js.map → TeamNotesTab-BgxleidZ.js.map} +1 -1
- package/dist/TeamNotesTab-o7glfjoY.js +8 -0
- package/dist/TeamParent-BwXqA3rj.js +83 -0
- package/dist/TeamParent-BwXqA3rj.js.map +1 -0
- package/dist/TeamParent-CFOmyKPz.js +11 -0
- package/dist/{TimelineNoteInput-0p-M4Qie.js → TimelineNoteInput-DXaodm43.js} +3 -2
- package/dist/{TimelineNoteInput-0p-M4Qie.js.map → TimelineNoteInput-DXaodm43.js.map} +1 -1
- package/dist/TimelineSystemEvent-zCMUx5Zz.js +525 -0
- package/dist/TimelineSystemEvent-zCMUx5Zz.js.map +1 -0
- package/dist/UserListPage-Bmwg0an5.js +5 -0
- package/dist/{UserListPage-DUE5gJTo.js → UserListPage-DtA8tLff.js} +4 -3
- package/dist/{UserListPage-DUE5gJTo.js.map → UserListPage-DtA8tLff.js.map} +1 -1
- package/dist/UserProfilePage-DRbCAr9H.js +8 -0
- package/dist/{UserProfilePage-C3b93Keh.js → UserProfilePage-g4-VEDXo.js} +4 -4
- package/dist/{UserProfilePage-C3b93Keh.js.map → UserProfilePage-g4-VEDXo.js.map} +1 -1
- package/dist/{VerifyEmail-DlOmWGG-.js → VerifyEmail-CM5ehFB8.js} +7 -7
- package/dist/{VerifyEmail-DlOmWGG-.js.map → VerifyEmail-CM5ehFB8.js.map} +1 -1
- package/dist/VerifyEmail-DMHczC9f.js +10 -0
- package/dist/ViewTeam-CXyABxE6.js +8 -0
- package/dist/ViewTeam-DSbKV60o.js +220 -0
- package/dist/ViewTeam-DSbKV60o.js.map +1 -0
- package/dist/ViewTeamMember-BB0nvPOe.js +167 -0
- package/dist/ViewTeamMember-BB0nvPOe.js.map +1 -0
- package/dist/ViewTeamMember-jrOnBaDh.js +7 -0
- package/dist/ZiniaContainer-CjVhCnGB.js +18 -0
- package/dist/ZiniaContainer-CjVhCnGB.js.map +1 -0
- package/dist/{convertToLocalDateTime-CFhtN6PI.js → convertToLocalDateTime-BF25N4xd.js} +1 -2
- package/dist/convertToLocalDateTime-BF25N4xd.js.map +1 -0
- package/dist/customerSupportTicketRoutes-C7OxGAGl.js +142 -0
- package/dist/customerSupportTicketRoutes-C7OxGAGl.js.map +1 -0
- package/dist/{displayIdFormatter-Dz900Awr.js → displayIdFormatter-B-_WQHOr.js} +1 -1
- package/dist/{displayIdFormatter-Dz900Awr.js.map → displayIdFormatter-B-_WQHOr.js.map} +1 -1
- package/dist/{extractRpcErrorMessage-Di8E8-Wh.js → extractRpcErrorMessage-diUBl6Ij.js} +1 -1
- package/dist/{extractRpcErrorMessage-Di8E8-Wh.js.map → extractRpcErrorMessage-diUBl6Ij.js.map} +1 -1
- package/dist/index.d.ts +793 -834
- package/dist/index.js +66 -38
- package/dist/{mfaSchema-BnRWf0ma.js → mfaSchema-Ukqzdyck.js} +1 -1
- package/dist/{mfaSchema-BnRWf0ma.js.map → mfaSchema-Ukqzdyck.js.map} +1 -1
- package/dist/saved_filter-CfzH0BzK.js +1210 -0
- package/dist/saved_filter-CfzH0BzK.js.map +1 -0
- package/dist/signupConsentStorage-DS9vCUuC.js +27 -0
- package/dist/signupConsentStorage-DS9vCUuC.js.map +1 -0
- package/dist/{src-CEBiyg_f.css → src-C6ZmNSSU.css} +1 -1
- package/dist/{src-CEBiyg_f.css.map → src-C6ZmNSSU.css.map} +1 -1
- package/dist/src-DVe_0RO9.js +4654 -0
- package/dist/src-DVe_0RO9.js.map +1 -0
- package/dist/staffSupportTicketRoutes-CWutoQWp.js +135 -0
- package/dist/staffSupportTicketRoutes-CWutoQWp.js.map +1 -0
- package/dist/teamMemberMetadata-CQnbVepq.js +49 -0
- package/dist/teamMemberMetadata-CQnbVepq.js.map +1 -0
- package/dist/teamMetadata-DlvwO5V0.js +53 -0
- package/dist/teamMetadata-DlvwO5V0.js.map +1 -0
- package/dist/teamRoutes-KFgnsdDP.js +192 -0
- package/dist/teamRoutes-KFgnsdDP.js.map +1 -0
- package/dist/team_memberRoutes-Cjpw_ql6.js +84 -0
- package/dist/team_memberRoutes-Cjpw_ql6.js.map +1 -0
- package/dist/{useBreadcrumbs-qB6ghsAf.js → useBreadcrumbs-DIqU5AAp.js} +1 -1
- package/dist/{useBreadcrumbs-qB6ghsAf.js.map → useBreadcrumbs-DIqU5AAp.js.map} +1 -1
- package/dist/{useEmailVerificationChannel-BNi926Ho.js → useEmailVerificationChannel-B51z65PN.js} +3 -3
- package/dist/{useEmailVerificationChannel-BNi926Ho.js.map → useEmailVerificationChannel-B51z65PN.js.map} +1 -1
- package/dist/{useMutation-BTsyHKyn.js → useMutation-BLNuJoYl.js} +6 -3
- package/dist/useMutation-BLNuJoYl.js.map +1 -0
- package/dist/{useQuery-BggIE52P.js → useQuery-BzUGEOj0.js} +4 -3
- package/dist/{useQuery-BggIE52P.js.map → useQuery-BzUGEOj0.js.map} +1 -1
- package/dist/{useQueryCache-Bjm-S8v5.js → useQueryCache-alzaRWEb.js} +2 -2
- package/dist/{useQueryCache-Bjm-S8v5.js.map → useQueryCache-alzaRWEb.js.map} +1 -1
- package/dist/{useReturnUrl-qFeazn-G.js → useReturnUrl-B5V3SJf5.js} +1 -1
- package/dist/{useReturnUrl-qFeazn-G.js.map → useReturnUrl-B5V3SJf5.js.map} +1 -1
- package/dist/{useRpcAuth-rmHf7bYx.js → useRpcAuth-CJtq1dqM.js} +25 -194
- package/dist/useRpcAuth-CJtq1dqM.js.map +1 -0
- package/dist/userAuthorized-C09FHWGL.js +185 -0
- package/dist/userAuthorized-C09FHWGL.js.map +1 -0
- package/package.json +3 -3
- package/dist/Appearance-D5pwxuf4.js +0 -3
- package/dist/ChangePasswordPage-CpDPmEml.js +0 -6
- package/dist/ConsentRequired-C4IRMA0c.js +0 -213
- package/dist/ConsentRequired-C4IRMA0c.js.map +0 -1
- package/dist/CreateTeamForm-B4cIuYAf.js +0 -35
- package/dist/CreateTeamMemberForm-Chrw1y00.js +0 -35
- package/dist/CreateUserPage-WruMs7WP.js +0 -6
- package/dist/CreditBalanceDashboard-CkcsrZ_e.js +0 -35
- package/dist/CreditManagement-Ddvu9dMw.js +0 -35
- package/dist/CustomerCreateSupportTicketForm-BKperKGS.js +0 -35
- package/dist/CustomerSupportTicketList-DcbrjDa9.js +0 -35
- package/dist/CustomerSupportTicketParent-BeNzUwuP.js +0 -7
- package/dist/CustomerSupportTicketSuccess-CC967u3y.js +0 -35
- package/dist/EditTeamForm-B5Tee5wL.js +0 -35
- package/dist/EditTeamMemberForm-CaS2GLjV.js.map +0 -1
- package/dist/EditTeamMemberForm-OtcS8QWt.js +0 -6
- package/dist/EditUserPage-T4DQlKhf.js +0 -7
- package/dist/ForgotPassword-CUifhmqP.js +0 -7
- package/dist/LoginForm-Bg7GoZEA.js +0 -7
- package/dist/Logout-Bs92csWH.js +0 -7
- package/dist/MfaSetup-BACX5XP-.js +0 -8
- package/dist/MfaVerify-ak4iSdQ2.js +0 -8
- package/dist/ResetPassword-pY1uhTdl.js +0 -7
- package/dist/Signup-9TjMMnU4.js.map +0 -1
- package/dist/Signup-Bq-G3D-s.js +0 -9
- package/dist/SignupConsentFlow-QUZGKjdB.js.map +0 -1
- package/dist/StaffCreateSupportTicketForm-D0ZuisDk.js +0 -35
- package/dist/StaffSupportTicketList-CiqC05XB.js +0 -35
- package/dist/StaffSupportTicketParent-DkV329NI.js +0 -7
- package/dist/StaffSupportTicketSuccess-CUYnimaI.js +0 -35
- package/dist/TeamAttachmentsTab-DUtCD1Yi.js +0 -35
- package/dist/TeamHistoryTab-BsUoH4VK.js +0 -4
- package/dist/TeamHistoryTab-D5biUPmq.js.map +0 -1
- package/dist/TeamList-BkPIqZ8V.js +0 -35
- package/dist/TeamMemberList-1mxUGCNa.js +0 -35
- package/dist/TeamMemberParent-DzeBIElY.js +0 -35
- package/dist/TeamMembersTab-CBB2Yl_I.js +0 -3
- package/dist/TeamNotesTab-ClHl2nXd.js +0 -7
- package/dist/TeamParent-DJa9UZTP.js +0 -35
- package/dist/TimelineSystemEvent-BHzFr46C.js.map +0 -1
- package/dist/UserListPage-BTLE4J0s.js +0 -4
- package/dist/UserProfilePage-CVTORtSx.js +0 -7
- package/dist/VerifyEmail-DCP4DWIw.js +0 -9
- package/dist/ViewTeam-DVfnLMhV.js +0 -35
- package/dist/ViewTeamMember-L4v3gCIn.js +0 -35
- package/dist/convertToLocalDateTime-CFhtN6PI.js.map +0 -1
- package/dist/src-QZJyMfGX.js +0 -8951
- package/dist/src-QZJyMfGX.js.map +0 -1
- package/dist/useMutation-BTsyHKyn.js.map +0 -1
- package/dist/useRpcAuth-rmHf7bYx.js.map +0 -1
- package/dist/useSignupPendingData-BWHwUHhL.js +0 -47
- package/dist/useSignupPendingData-BWHwUHhL.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditTeamForm-BxRN338L.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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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import "./useRpcAuth-CJtq1dqM.js";
|
|
2
|
+
import "./EnhancedRefreshTokenHandler-C6tZCcfX.js";
|
|
3
|
+
import "./useQueryCache-alzaRWEb.js";
|
|
4
|
+
import "./useMutation-BLNuJoYl.js";
|
|
5
|
+
import "./FieldsetSection-Cd4B8Ad7.js";
|
|
6
|
+
import "./teamMemberMetadata-CQnbVepq.js";
|
|
7
|
+
import { t as EditTeamMemberForm_default } from "./EditTeamMemberForm-DfgJr5Cy.js";
|
|
8
|
+
|
|
9
|
+
export { EditTeamMemberForm_default as default };
|
|
@@ -1,76 +1,11 @@
|
|
|
1
|
-
import { t as useMutation } from "./useMutation-
|
|
2
|
-
import {
|
|
1
|
+
import { t as useMutation } from "./useMutation-BLNuJoYl.js";
|
|
2
|
+
import { t as FieldsetSection_default } from "./FieldsetSection-Cd4B8Ad7.js";
|
|
3
|
+
import { n as teamMemberUpdateSchemaWithMetadata } from "./teamMemberMetadata-CQnbVepq.js";
|
|
4
|
+
import { createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, inject, openBlock, toDisplayString, unref, withCtx } from "vue";
|
|
3
5
|
import { useRoute } from "vue-router";
|
|
4
6
|
import { toast } from "vue3-toastify";
|
|
5
|
-
import {
|
|
6
|
-
import { useForm, withMetadata } from "@dragonmastery/zinia-forms-core";
|
|
7
|
+
import { useForm } from "@dragonmastery/zinia-forms-core";
|
|
7
8
|
|
|
8
|
-
//#region src/components/ui/FieldsetSection.vue
|
|
9
|
-
const _hoisted_1$1 = { class: "bg-base-100 border-base-300 border p-4 mb-6 rounded-xl" };
|
|
10
|
-
const _hoisted_2$1 = { class: "text-xl font-medium mb-5 top-4 text-center relative" };
|
|
11
|
-
const _hoisted_3$1 = { class: "grid grid-cols-1 sm:grid-cols-2 gap-6 pt-2" };
|
|
12
|
-
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
13
|
-
__name: "FieldsetSection",
|
|
14
|
-
props: { title: {
|
|
15
|
-
type: String,
|
|
16
|
-
required: true
|
|
17
|
-
} },
|
|
18
|
-
setup(__props) {
|
|
19
|
-
return (_ctx, _cache) => {
|
|
20
|
-
return openBlock(), createElementBlock("fieldset", _hoisted_1$1, [
|
|
21
|
-
createElementVNode("legend", _hoisted_2$1, toDisplayString(__props.title), 1),
|
|
22
|
-
createCommentVNode(" Mobile: Single column "),
|
|
23
|
-
createElementVNode("div", _hoisted_3$1, [renderSlot(_ctx.$slots, "default")])
|
|
24
|
-
]);
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
var FieldsetSection_default = _sfc_main$1;
|
|
29
|
-
|
|
30
|
-
//#endregion
|
|
31
|
-
//#region src/slices/team/team_member/teamMemberMetadata.ts
|
|
32
|
-
const teamMemberCreateSchemaWithMetadata = withMetadata(TeamMemberCreateSchema.omit({ team_id: true }), "teamMemberCreateSchema", {
|
|
33
|
-
user_id: {
|
|
34
|
-
inputType: "select",
|
|
35
|
-
placeholder: "Select user"
|
|
36
|
-
},
|
|
37
|
-
email_address: {
|
|
38
|
-
inputType: "email",
|
|
39
|
-
placeholder: "Enter email address"
|
|
40
|
-
},
|
|
41
|
-
website_address: {
|
|
42
|
-
inputType: "text",
|
|
43
|
-
placeholder: "Enter website address"
|
|
44
|
-
},
|
|
45
|
-
business_phone: {
|
|
46
|
-
inputType: "tel",
|
|
47
|
-
placeholder: "Enter business phone"
|
|
48
|
-
},
|
|
49
|
-
mobile_phone: {
|
|
50
|
-
inputType: "tel",
|
|
51
|
-
placeholder: "Enter mobile phone"
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
const teamMemberUpdateSchemaWithMetadata = withMetadata(TeamMemberUpdateSchema, "teamMemberUpdateSchema", {
|
|
55
|
-
email_address: {
|
|
56
|
-
inputType: "email",
|
|
57
|
-
placeholder: "Enter email address"
|
|
58
|
-
},
|
|
59
|
-
website_address: {
|
|
60
|
-
inputType: "text",
|
|
61
|
-
placeholder: "Enter website address"
|
|
62
|
-
},
|
|
63
|
-
business_phone: {
|
|
64
|
-
inputType: "tel",
|
|
65
|
-
placeholder: "Enter business phone"
|
|
66
|
-
},
|
|
67
|
-
mobile_phone: {
|
|
68
|
-
inputType: "tel",
|
|
69
|
-
placeholder: "Enter mobile phone"
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
//#endregion
|
|
74
9
|
//#region src/slices/team/team_member/EditTeamMemberForm.vue
|
|
75
10
|
const _hoisted_1 = {
|
|
76
11
|
key: 0,
|
|
@@ -187,5 +122,5 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
187
122
|
var EditTeamMemberForm_default = _sfc_main;
|
|
188
123
|
|
|
189
124
|
//#endregion
|
|
190
|
-
export {
|
|
191
|
-
//# sourceMappingURL=EditTeamMemberForm-
|
|
125
|
+
export { EditTeamMemberForm_default as t };
|
|
126
|
+
//# sourceMappingURL=EditTeamMemberForm-DfgJr5Cy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditTeamMemberForm-DfgJr5Cy.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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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import "./useRpcAuth-CJtq1dqM.js";
|
|
2
|
+
import "./EnhancedRefreshTokenHandler-C6tZCcfX.js";
|
|
3
|
+
import "./useQueryCache-alzaRWEb.js";
|
|
4
|
+
import "./useMutation-BLNuJoYl.js";
|
|
5
|
+
import "./useQuery-BzUGEOj0.js";
|
|
6
|
+
import { t as EditUserPage_default } from "./EditUserPage-CI_jtU8P.js";
|
|
7
|
+
|
|
8
|
+
export { EditUserPage_default as default };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as useMutation } from "./useMutation-
|
|
2
|
-
import { t as useQuery } from "./useQuery-
|
|
3
|
-
import { t as formatSystemTimestamp } from "./convertToLocalDateTime-
|
|
1
|
+
import { t as useMutation } from "./useMutation-BLNuJoYl.js";
|
|
2
|
+
import { t as useQuery } from "./useQuery-BzUGEOj0.js";
|
|
3
|
+
import { t as formatSystemTimestamp } from "./convertToLocalDateTime-BF25N4xd.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-CI_jtU8P.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditUserPage-
|
|
1
|
+
{"version":3,"file":"EditUserPage-CI_jtU8P.js","names":[],"sources":["../src/slices/admin/features/user_management/updateUserMetadata.ts","../src/slices/admin/features/user_management/EditUserPage.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { UserUpdateSchema } from '@dragonmastery/dragoncore-shared';\n\nexport const updateUserSchemaWithMetadata = withMetadata(\n UserUpdateSchema,\n 'updateUserSchema',\n {\n user_type: {\n label: 'User Role',\n helpText: 'Select the role for this user',\n },\n },\n);\n","<template>\n <div class=\"max-w-2xl mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Edit User</h1>\n\n <!-- Loading State -->\n <div v-if=\"fetching\" class=\"flex justify-center py-8\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n\n <!-- Error State -->\n <div v-else-if=\"error\" class=\"alert alert-error mb-4\">\n <span>Error loading user: {{ error.message }}</span>\n </div>\n\n <!-- Edit Form -->\n <div v-else-if=\"userData\">\n <!-- Read-only user info -->\n <div class=\"card bg-base-100 shadow-xl mb-6\">\n <div class=\"card-body\">\n <h2 class=\"card-title\">User Information</h2>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div>\n <label class=\"label\">\n <span class=\"label-text font-semibold\">Username</span>\n </label>\n <div class=\"input input-bordered bg-base-200\">\n {{ userData.username }}\n </div>\n </div>\n <div>\n <label class=\"label\">\n <span class=\"label-text font-semibold\">Email</span>\n </label>\n <div class=\"input input-bordered bg-base-200\">\n {{ userData.email }}\n </div>\n </div>\n <div>\n <label class=\"label\">\n <span class=\"label-text font-semibold\">Email Verified</span>\n </label>\n <div class=\"flex items-center\">\n <span\n class=\"badge\"\n :class=\"userData.email_verified ? 'badge-success' : 'badge-error'\"\n >\n {{ userData.email_verified ? 'Verified' : 'Not Verified' }}\n </span>\n </div>\n </div>\n <div>\n <label class=\"label\">\n <span class=\"label-text font-semibold\">Created</span>\n </label>\n <div class=\"input input-bordered bg-base-200\">\n {{ formatSystemTimestamp(userData.created_at) }}\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Editable role -->\n <ZiniaForm\n @handle-submit=\"handleSubmit\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n title=\"Update User Role\"\n subtitle=\"Change the user's role in the system\"\n >\n <zinia.UserTypeField />\n\n <div v-if=\"form.submitError\" class=\"alert alert-error mb-4\">\n <span>{{ form.submitError }}</span>\n </div>\n\n <div class=\"flex justify-center mt-6\">\n <ZiniaSubmitButton submitText=\"Update Role\" submittingText=\"Updating...\" />\n </div>\n\n <ZiniaFormErrorsSummary title=\"Please fix the following errors:\" />\n <ZiniaResetButton />\n </ZiniaForm>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useQuery } from '../../../../composables/useQuery';\nimport { formatSystemTimestamp } from '../../../../utils/convertToLocalDateTime';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport type { UserUpdateDto } from '@dragonmastery/dragoncore-shared';\nimport { ref } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { updateUserSchemaWithMetadata } from './updateUserMetadata';\n\nconst route = useRoute();\nconst router = useRouter();\nconst userId = route.params.id as string;\n\n// Fetch user data\nconst {\n data,\n loading: fetching,\n error,\n} = useQuery((api) => api.users.getUser(userId), {\n staleTime: 5 * 60 * 1000,\n});\n\nconst userData = ref<any | null>(null);\n\n// Create form with user data\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton, ZiniaResetButton, ZiniaFormErrorsSummary } =\n useForm(updateUserSchemaWithMetadata, {\n storeName: `edit-user-form-${userId}`,\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n fetchData: async () => {\n while (fetching.value) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n if (!data.value) {\n throw new Error('User not found');\n }\n\n userData.value = data.value;\n return {\n id: data.value?.id,\n user_type: data.value?.user_type,\n } satisfies UserUpdateDto;\n },\n });\n\nconst { mutate: updateUser } = useMutation(\n (api, formData: UserUpdateDto) => api.users.updateUser(formData),\n { invalidate: /^users?:/ },\n);\n\nconst handleSubmit = async (formData: UserUpdateDto) => {\n const result = await updateUser(formData);\n if (!result) throw new Error('Failed to update user');\n return result;\n};\n\nconst handleSuccess = async (_result: any) => {\n await router.push({ name: 'UserManagement' });\n toast.success('User role updated successfully!');\n};\n\nconst handleError = (error: Error | unknown) => {\n form.setSubmitError(error instanceof Error ? error.message : 'An unknown error occurred');\n};\n</script>\n"],"mappings":"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"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { a as createAppBatch, d as useEnv, u as logger } from "./useRpcAuth-CJtq1dqM.js";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/EnhancedRefreshTokenHandler.ts
|
|
4
|
+
var EnhancedRefreshTokenHandler = class {
|
|
5
|
+
refreshState = {
|
|
6
|
+
isRefreshing: false,
|
|
7
|
+
pendingPromise: null,
|
|
8
|
+
lastAttempt: 0,
|
|
9
|
+
failureCount: 0
|
|
10
|
+
};
|
|
11
|
+
async performRefreshWithStrategies() {
|
|
12
|
+
if (this.refreshState.isRefreshing && this.refreshState.pendingPromise) {
|
|
13
|
+
logger.debug("[EnhancedRefresh] Refresh already in progress, returning existing promise");
|
|
14
|
+
return this.refreshState.pendingPromise;
|
|
15
|
+
}
|
|
16
|
+
this.refreshState.isRefreshing = true;
|
|
17
|
+
this.refreshState.pendingPromise = this.executeRefreshStrategies();
|
|
18
|
+
try {
|
|
19
|
+
const tokens = await this.refreshState.pendingPromise;
|
|
20
|
+
this.refreshState.failureCount = 0;
|
|
21
|
+
logger.debug("[EnhancedRefresh] Refresh completed successfully");
|
|
22
|
+
return tokens;
|
|
23
|
+
} catch (error) {
|
|
24
|
+
this.refreshState.failureCount++;
|
|
25
|
+
logger.error("[EnhancedRefresh] All refresh strategies failed:", error);
|
|
26
|
+
throw error;
|
|
27
|
+
} finally {
|
|
28
|
+
this.refreshState.isRefreshing = false;
|
|
29
|
+
this.refreshState.pendingPromise = null;
|
|
30
|
+
this.refreshState.lastAttempt = Date.now();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async executeRefreshStrategies() {
|
|
34
|
+
const strategies = [
|
|
35
|
+
{
|
|
36
|
+
name: "Direct RefreshToken",
|
|
37
|
+
execute: () => this.directRefreshToken()
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: "Warmup + Retry RefreshToken",
|
|
41
|
+
execute: () => this.warmupAndRetryRefresh()
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: "Alternative Domain RefreshToken",
|
|
45
|
+
execute: () => this.alternativeDomainRefresh()
|
|
46
|
+
}
|
|
47
|
+
];
|
|
48
|
+
let lastError;
|
|
49
|
+
let partialSuccess = false;
|
|
50
|
+
for (const [index, strategy] of strategies.entries()) try {
|
|
51
|
+
logger.debug(`[EnhancedRefresh] Attempting strategy ${index + 1}: ${strategy.name}`);
|
|
52
|
+
const tokens = await strategy.execute();
|
|
53
|
+
logger.debug(`[EnhancedRefresh] Strategy ${index + 1} (${strategy.name}) succeeded`);
|
|
54
|
+
return tokens;
|
|
55
|
+
} catch (error) {
|
|
56
|
+
lastError = error;
|
|
57
|
+
logger.debug(`[EnhancedRefresh] Strategy ${index + 1} (${strategy.name}) failed:`, error);
|
|
58
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
59
|
+
if (!errorMessage.includes("No refresh_token") && !errorMessage.includes("REFRESH_TOKEN_EXPIRED")) partialSuccess = true;
|
|
60
|
+
if (index < strategies.length - 1) {
|
|
61
|
+
const backoffDelay = 100 * (index + 1);
|
|
62
|
+
await this.delay(backoffDelay);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (lastError && partialSuccess) {
|
|
66
|
+
const enhancedError = lastError;
|
|
67
|
+
enhancedError.partialSuccess = true;
|
|
68
|
+
enhancedError.isTemporaryFailure = true;
|
|
69
|
+
}
|
|
70
|
+
throw lastError;
|
|
71
|
+
}
|
|
72
|
+
async directRefreshToken() {
|
|
73
|
+
try {
|
|
74
|
+
const tokens = await createAppBatch({
|
|
75
|
+
credentials: "include",
|
|
76
|
+
trackedSegment: "userSessions.refreshToken"
|
|
77
|
+
}).userSessions.refreshToken();
|
|
78
|
+
if (!tokens || !tokens.access_token || !tokens.user_details_token) throw new Error("No refresh_token in response");
|
|
79
|
+
return {
|
|
80
|
+
access_token: tokens.access_token,
|
|
81
|
+
user_details_token: tokens.user_details_token
|
|
82
|
+
};
|
|
83
|
+
} catch (error) {
|
|
84
|
+
logger.error("[EnhancedRefresh] Refresh token call failed:", {
|
|
85
|
+
error,
|
|
86
|
+
name: error?.name,
|
|
87
|
+
message: error?.message,
|
|
88
|
+
code: error?.code,
|
|
89
|
+
originalError: error?.originalError,
|
|
90
|
+
stack: error?.stack
|
|
91
|
+
});
|
|
92
|
+
if (error?.name === "InternalServerError" && error?.originalError) throw error.originalError;
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async warmupAndRetryRefresh() {
|
|
97
|
+
logger.debug("[EnhancedRefresh] Warming up cookie context");
|
|
98
|
+
await this.warmupCookieContext();
|
|
99
|
+
await this.delay(150);
|
|
100
|
+
return this.directRefreshToken();
|
|
101
|
+
}
|
|
102
|
+
async alternativeDomainRefresh() {
|
|
103
|
+
await this.warmupCookieContext();
|
|
104
|
+
await this.delay(300);
|
|
105
|
+
return this.directRefreshToken();
|
|
106
|
+
}
|
|
107
|
+
async warmupCookieContext() {
|
|
108
|
+
const warmupStrategies = [
|
|
109
|
+
() => fetch(window.location.origin + "/favicon.ico", {
|
|
110
|
+
method: "HEAD",
|
|
111
|
+
credentials: "include",
|
|
112
|
+
cache: "no-cache",
|
|
113
|
+
mode: "same-origin"
|
|
114
|
+
}),
|
|
115
|
+
() => {
|
|
116
|
+
const rpcEndpoint = useEnv().restApiClient.apiUrl + "/rpc";
|
|
117
|
+
return fetch(rpcEndpoint, {
|
|
118
|
+
method: "OPTIONS",
|
|
119
|
+
credentials: "include",
|
|
120
|
+
cache: "no-cache"
|
|
121
|
+
});
|
|
122
|
+
},
|
|
123
|
+
() => fetch(window.location.origin + "/", {
|
|
124
|
+
method: "HEAD",
|
|
125
|
+
credentials: "include",
|
|
126
|
+
cache: "no-cache",
|
|
127
|
+
mode: "same-origin"
|
|
128
|
+
})
|
|
129
|
+
];
|
|
130
|
+
try {
|
|
131
|
+
await Promise.race(warmupStrategies.map((strategy) => strategy().catch(() => {})));
|
|
132
|
+
logger.debug("[EnhancedRefresh] Cookie context warmed up");
|
|
133
|
+
} catch (error) {
|
|
134
|
+
logger.debug("[EnhancedRefresh] Cookie warmup failed, continuing:", error);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
delay(ms) {
|
|
138
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
139
|
+
}
|
|
140
|
+
shouldAttemptRefresh() {
|
|
141
|
+
return Date.now() - this.refreshState.lastAttempt > Math.min(5e3, 1e3 * Math.pow(2, this.refreshState.failureCount));
|
|
142
|
+
}
|
|
143
|
+
getRefreshState() {
|
|
144
|
+
return { ...this.refreshState };
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
/**
|
|
148
|
+
* Create an instance of the refresh token handler for your API type.
|
|
149
|
+
* Your API must extend AuthenticatableApi (must have userSessions.refreshToken method).
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* ```typescript
|
|
153
|
+
* // In your app's setup/config
|
|
154
|
+
* import type { AppApi } from '@follow-zap/shared';
|
|
155
|
+
* import { createRefreshTokenHandler, setRefreshTokenHandler } from '@dragonmastery/dragoncore-vue';
|
|
156
|
+
*
|
|
157
|
+
* // Initialize during app setup
|
|
158
|
+
* setRefreshTokenHandler(createRefreshTokenHandler<AppApi>());
|
|
159
|
+
* ```
|
|
160
|
+
*/
|
|
161
|
+
function createRefreshTokenHandler() {
|
|
162
|
+
return new EnhancedRefreshTokenHandler();
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Global refresh token handler instance.
|
|
166
|
+
* Set this once in your app's initialization.
|
|
167
|
+
*/
|
|
168
|
+
let globalRefreshTokenHandler = null;
|
|
169
|
+
/**
|
|
170
|
+
* Set the global refresh token handler for your application.
|
|
171
|
+
* Call this once during app initialization.
|
|
172
|
+
*/
|
|
173
|
+
function setRefreshTokenHandler(handler) {
|
|
174
|
+
globalRefreshTokenHandler = handler;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Get the global refresh token handler.
|
|
178
|
+
* This is used internally by useQuery and useMutation.
|
|
179
|
+
*
|
|
180
|
+
* @throws Error if handler is not set
|
|
181
|
+
*/
|
|
182
|
+
function getRefreshTokenHandler() {
|
|
183
|
+
if (!globalRefreshTokenHandler) throw new Error("Refresh token handler not initialized. Call setRefreshTokenHandler() in your app initialization.");
|
|
184
|
+
return globalRefreshTokenHandler;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
//#endregion
|
|
188
|
+
export { setRefreshTokenHandler as i, createRefreshTokenHandler as n, getRefreshTokenHandler as r, EnhancedRefreshTokenHandler as t };
|
|
189
|
+
//# sourceMappingURL=EnhancedRefreshTokenHandler-C6tZCcfX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnhancedRefreshTokenHandler-C6tZCcfX.js","names":["lastError: Error | undefined","error: any","globalRefreshTokenHandler: EnhancedRefreshTokenHandler<any> | null"],"sources":["../src/utils/EnhancedRefreshTokenHandler.ts"],"sourcesContent":["import { useEnv } from '../composables/useEnv';\nimport { createAppBatch } from '../composables/useRpc';\nimport { logger } from './logger';\n\ninterface AuthTokens {\n access_token: string;\n user_details_token: string;\n}\n\ninterface RefreshState {\n isRefreshing: boolean;\n pendingPromise: Promise<AuthTokens> | null;\n lastAttempt: number;\n failureCount: number;\n}\n\n/**\n * Minimum API shape required for authentication.\n * Your API must have a userSessions service with a refreshToken method.\n */\nexport interface AuthenticatableApi {\n userSessions: {\n refreshToken(): Promise<{\n access_token: string;\n user_details_token: string;\n }>;\n };\n}\n\nexport class EnhancedRefreshTokenHandler<TApi extends AuthenticatableApi> {\n private refreshState: RefreshState = {\n isRefreshing: false,\n pendingPromise: null,\n lastAttempt: 0,\n failureCount: 0,\n };\n\n async performRefreshWithStrategies(): Promise<AuthTokens> {\n // Prevent duplicate refresh attempts\n if (this.refreshState.isRefreshing && this.refreshState.pendingPromise) {\n logger.debug(\n '[EnhancedRefresh] Refresh already in progress, returning existing promise',\n );\n return this.refreshState.pendingPromise;\n }\n\n this.refreshState.isRefreshing = true;\n this.refreshState.pendingPromise = this.executeRefreshStrategies();\n\n try {\n const tokens = await this.refreshState.pendingPromise;\n this.refreshState.failureCount = 0;\n logger.debug('[EnhancedRefresh] Refresh completed successfully');\n return tokens;\n } catch (error) {\n this.refreshState.failureCount++;\n logger.error('[EnhancedRefresh] All refresh strategies failed:', error);\n throw error;\n } finally {\n this.refreshState.isRefreshing = false;\n this.refreshState.pendingPromise = null;\n this.refreshState.lastAttempt = Date.now();\n }\n }\n\n private async executeRefreshStrategies(): Promise<AuthTokens> {\n const strategies = [\n {\n name: 'Direct RefreshToken',\n execute: () => this.directRefreshToken(),\n },\n {\n name: 'Warmup + Retry RefreshToken',\n execute: () => this.warmupAndRetryRefresh(),\n },\n {\n name: 'Alternative Domain RefreshToken',\n execute: () => this.alternativeDomainRefresh(),\n },\n ];\n\n let lastError: Error | undefined;\n let partialSuccess = false;\n\n for (const [index, strategy] of strategies.entries()) {\n try {\n logger.debug(`[EnhancedRefresh] Attempting strategy ${index + 1}: ${strategy.name}`);\n const tokens = await strategy.execute();\n logger.debug(`[EnhancedRefresh] Strategy ${index + 1} (${strategy.name}) succeeded`);\n return tokens;\n } catch (error) {\n lastError = error as Error;\n logger.debug(\n `[EnhancedRefresh] Strategy ${index + 1} (${strategy.name}) failed:`,\n error,\n );\n\n // Check if we got a partial response or if this is a network/temporary issue\n const errorMessage = error instanceof Error ? error.message : String(error);\n if (\n !errorMessage.includes('No refresh_token') &&\n !errorMessage.includes('REFRESH_TOKEN_EXPIRED')\n ) {\n // This might be a temporary failure, mark as partial success\n partialSuccess = true;\n }\n\n // Progressive backoff between strategies\n if (index < strategies.length - 1) {\n const backoffDelay = 100 * (index + 1); // 100ms, 200ms, etc.\n await this.delay(backoffDelay);\n }\n }\n }\n\n // Add context to error object for better handling\n if (lastError && partialSuccess) {\n const enhancedError = lastError;\n (enhancedError as any).partialSuccess = true;\n (enhancedError as any).isTemporaryFailure = true;\n }\n\n throw lastError!;\n }\n\n private async directRefreshToken(): Promise<AuthTokens> {\n try {\n // Create RPC batch directly - refresh endpoint is public, doesn't need auth check\n // Use credentials: 'include' to send cookies with refresh token\n const batch = createAppBatch<TApi>({\n credentials: 'include',\n trackedSegment: 'userSessions.refreshToken',\n });\n const tokens = await batch.userSessions.refreshToken();\n\n if (!tokens || !tokens.access_token || !tokens.user_details_token) {\n throw new Error('No refresh_token in response');\n }\n\n return {\n access_token: tokens.access_token,\n user_details_token: tokens.user_details_token,\n };\n } catch (error: any) {\n // Log the full error to help debug\n logger.error('[EnhancedRefresh] Refresh token call failed:', {\n error,\n name: error?.name,\n message: error?.message,\n code: error?.code,\n originalError: error?.originalError,\n stack: error?.stack,\n });\n\n // Re-throw with more context if it's an InternalServerError\n if (error?.name === 'InternalServerError' && error?.originalError) {\n throw error.originalError;\n }\n throw error;\n }\n }\n\n private async warmupAndRetryRefresh(): Promise<AuthTokens> {\n logger.debug('[EnhancedRefresh] Warming up cookie context');\n\n // First, make a lightweight request to restore cookie context\n await this.warmupCookieContext();\n\n // Wait briefly for browser to restore cookie state\n await this.delay(150);\n\n // Now attempt the refresh\n return this.directRefreshToken();\n }\n\n private async alternativeDomainRefresh(): Promise<AuthTokens> {\n // This strategy could use a different approach if backend supports it\n // For now, just retry with longer delay after warmup\n await this.warmupCookieContext();\n await this.delay(300);\n return this.directRefreshToken();\n }\n\n private async warmupCookieContext(): Promise<void> {\n const warmupStrategies = [\n // Strategy 1: Favicon request (lightweight)\n () =>\n fetch(window.location.origin + '/favicon.ico', {\n method: 'HEAD',\n credentials: 'include',\n cache: 'no-cache',\n mode: 'same-origin',\n }),\n\n // Strategy 2: OPTIONS request to RPC endpoint\n () => {\n const rpcEndpoint = useEnv().restApiClient.apiUrl + '/rpc';\n return fetch(rpcEndpoint, {\n method: 'OPTIONS',\n credentials: 'include',\n cache: 'no-cache',\n });\n },\n\n // Strategy 3: Root path request\n () =>\n fetch(window.location.origin + '/', {\n method: 'HEAD',\n credentials: 'include',\n cache: 'no-cache',\n mode: 'same-origin',\n }),\n ];\n\n // Try warmup strategies in parallel, use the fastest one\n try {\n await Promise.race(\n warmupStrategies.map((strategy) =>\n strategy().catch(() => {\n // Ignore individual strategy failures\n }),\n ),\n );\n logger.debug('[EnhancedRefresh] Cookie context warmed up');\n } catch (error) {\n // If all warmup strategies fail, continue anyway\n logger.debug('[EnhancedRefresh] Cookie warmup failed, continuing:', error);\n }\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n // Utility method to check if we should attempt refresh based on recent failures\n shouldAttemptRefresh(): boolean {\n const timeSinceLastAttempt = Date.now() - this.refreshState.lastAttempt;\n const minRetryInterval = Math.min(\n 5000,\n 1000 * Math.pow(2, this.refreshState.failureCount),\n ); // Exponential backoff, max 5s\n\n return timeSinceLastAttempt > minRetryInterval;\n }\n\n // Get current refresh state for debugging\n getRefreshState(): RefreshState {\n return { ...this.refreshState };\n }\n}\n\n/**\n * Create an instance of the refresh token handler for your API type.\n * Your API must extend AuthenticatableApi (must have userSessions.refreshToken method).\n *\n * @example\n * ```typescript\n * // In your app's setup/config\n * import type { AppApi } from '@follow-zap/shared';\n * import { createRefreshTokenHandler, setRefreshTokenHandler } from '@dragonmastery/dragoncore-vue';\n *\n * // Initialize during app setup\n * setRefreshTokenHandler(createRefreshTokenHandler<AppApi>());\n * ```\n */\nexport function createRefreshTokenHandler<TApi extends AuthenticatableApi>() {\n return new EnhancedRefreshTokenHandler<TApi>();\n}\n\n/**\n * Global refresh token handler instance.\n * Set this once in your app's initialization.\n */\nlet globalRefreshTokenHandler: EnhancedRefreshTokenHandler<any> | null = null;\n\n/**\n * Set the global refresh token handler for your application.\n * Call this once during app initialization.\n */\nexport function setRefreshTokenHandler<TApi extends AuthenticatableApi>(\n handler: EnhancedRefreshTokenHandler<TApi>,\n): void {\n globalRefreshTokenHandler = handler;\n}\n\n/**\n * Get the global refresh token handler.\n * This is used internally by useQuery and useMutation.\n *\n * @throws Error if handler is not set\n */\nexport function getRefreshTokenHandler(): EnhancedRefreshTokenHandler<any> {\n if (!globalRefreshTokenHandler) {\n throw new Error(\n 'Refresh token handler not initialized. Call setRefreshTokenHandler() in your app initialization.',\n );\n }\n return globalRefreshTokenHandler as EnhancedRefreshTokenHandler<any>;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createCommentVNode, createElementBlock, createElementVNode, defineComponent, openBlock, renderSlot, toDisplayString } from "vue";
|
|
2
|
+
|
|
3
|
+
//#region src/components/ui/FieldsetSection.vue
|
|
4
|
+
const _hoisted_1 = { class: "bg-base-100 border-base-300 border p-4 mb-6 rounded-xl" };
|
|
5
|
+
const _hoisted_2 = { class: "text-xl font-medium mb-5 top-4 text-center relative" };
|
|
6
|
+
const _hoisted_3 = { class: "grid grid-cols-1 sm:grid-cols-2 gap-6 pt-2" };
|
|
7
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
8
|
+
__name: "FieldsetSection",
|
|
9
|
+
props: { title: {
|
|
10
|
+
type: String,
|
|
11
|
+
required: true
|
|
12
|
+
} },
|
|
13
|
+
setup(__props) {
|
|
14
|
+
return (_ctx, _cache) => {
|
|
15
|
+
return openBlock(), createElementBlock("fieldset", _hoisted_1, [
|
|
16
|
+
createElementVNode("legend", _hoisted_2, toDisplayString(__props.title), 1),
|
|
17
|
+
createCommentVNode(" Mobile: Single column "),
|
|
18
|
+
createElementVNode("div", _hoisted_3, [renderSlot(_ctx.$slots, "default")])
|
|
19
|
+
]);
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
var FieldsetSection_default = _sfc_main;
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
export { FieldsetSection_default as t };
|
|
27
|
+
//# sourceMappingURL=FieldsetSection-Cd4B8Ad7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldsetSection-Cd4B8Ad7.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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as useMutation } from "./useMutation-
|
|
2
|
-
import { t as AppLink_default } from "./AppLink-
|
|
3
|
-
import { o as withReturnUrl } from "./useReturnUrl-
|
|
1
|
+
import { t as useMutation } from "./useMutation-BLNuJoYl.js";
|
|
2
|
+
import { t as AppLink_default } from "./AppLink-FcNGKgvG.js";
|
|
3
|
+
import { o as withReturnUrl } from "./useReturnUrl-B5V3SJf5.js";
|
|
4
4
|
import { computed, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, unref, withCtx } from "vue";
|
|
5
5
|
import { useRoute } from "vue-router";
|
|
6
6
|
import { toast } from "vue3-toastify";
|
|
@@ -74,4 +74,4 @@ var ForgotPassword_default = _sfc_main;
|
|
|
74
74
|
|
|
75
75
|
//#endregion
|
|
76
76
|
export { forgotPasswordSchemaWithMetadata as n, ForgotPassword_default as t };
|
|
77
|
-
//# sourceMappingURL=ForgotPassword-
|
|
77
|
+
//# sourceMappingURL=ForgotPassword-Ckb9Z-wb.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ForgotPassword-
|
|
1
|
+
{"version":3,"file":"ForgotPassword-Ckb9Z-wb.js","names":[],"sources":["../src/slices/auth/features/forgot_password/forgot_password_schema.ts","../src/slices/auth/features/forgot_password/ForgotPassword.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { forgot_password_zod } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\n\n// Define the login form type\nexport type ForgotPasswordForm = z.infer<typeof forgot_password_zod>;\n\n// Enhance the schema with metadata\nexport const forgotPasswordSchemaWithMetadata = withMetadata(\n forgot_password_zod,\n 'forgotPasswordSchema',\n {\n email: {\n inputType: 'email',\n placeholder: 'you@example.com',\n helpText: 'Enter the email address you used to register',\n autocomplete: 'username',\n className: 'login-field',\n autofocus: true,\n },\n },\n);\n","<template>\n <div class=\"max-w-md mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Forgot Password</h1>\n\n <ZiniaForm @handle-submit=\"handleSubmit\" @success=\"handleSuccess\" @error=\"handleError\">\n <zinia.EmailField />\n\n <ZiniaSubmitButton submitText=\"Send Reset Password Email\" submittingText=\"Sending...\" />\n\n <div class=\"text-center mt-2\">\n <p>\n Already have an account?\n <AppLink class=\"link-accent link\" :to=\"loginLink\">Login</AppLink>\n </p>\n </div>\n </ZiniaForm>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AppLink from '../../../../components/AppLink.vue';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { withReturnUrl } from '../../../../utils/useReturnUrl';\nimport { computed } from 'vue';\nimport { useRoute } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { z } from 'zod';\nimport { forgotPasswordSchemaWithMetadata } from './forgot_password_schema';\n\nconst route = useRoute();\nconst returnUrl = computed(() => route.query.returnUrl as string | undefined);\nconst loginLink = computed(() => withReturnUrl('/auth/login', returnUrl.value));\n\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(\n forgotPasswordSchemaWithMetadata,\n {\n storeName: 'forgot-password-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n },\n);\n\nconst { mutate: forgotPasswordMutate } = useMutation(\n (api, email: string) => api.passwordReset.forgotPassword(email),\n {\n skipAuthCheck: true, // Forgot password should work without authentication\n },\n);\n\n// Handle form submission\nconst handleSubmit = async (data: z.infer<typeof forgotPasswordSchemaWithMetadata>) => {\n const result = await forgotPasswordMutate(data.email);\n if (!result?.ok) throw new Error('Forgot password failed');\n return result.ok;\n};\n\n// Handle success\nconst handleSuccess = async (_data: boolean) => {\n form.reset();\n toast.success(\n 'If the email address exists, an email has been sent to your email address with instructions to reset your password.',\n );\n};\n\n// Handle error\nconst handleError = (error: unknown) => {\n toast.error(error instanceof Error ? error.message : 'Forgot password failed');\n};\n</script>\n"],"mappings":";;;;;;;;;;AAQA,MAAa,mCAAmC,aAC9C,qBACA,wBACA,EACE,OAAO;CACL,WAAW;CACX,aAAa;CACb,UAAU;CACV,cAAc;CACd,WAAW;CACX,WAAW;CACZ,EACF,CACF;;;;;;;;;ECSD,MAAM,QAAQ,UAAU;EACxB,MAAM,YAAY,eAAe,MAAM,MAAM,UAAgC;EAC7E,MAAM,YAAY,eAAe,cAAc,eAAe,UAAU,MAAM,CAAC;EAE/E,MAAM,EAAE,MAAM,OAAO,WAAW,sBAAsB,QACpD,kCACA;GACE,WAAW;GACX,uBAAuB;GACvB,aAAa;GACd,CACF;EAED,MAAM,EAAE,QAAQ,yBAAyB,aACtC,KAAK,UAAkB,IAAI,cAAc,eAAe,MAAM,EAC/D,EACE,eAAe,MAChB,CACF;EAGD,MAAM,eAAe,OAAO,SAA2D;GACrF,MAAM,SAAS,MAAM,qBAAqB,KAAK,MAAM;AACrD,OAAI,CAAC,QAAQ,GAAI,OAAM,IAAI,MAAM,yBAAyB;AAC1D,UAAO,OAAO;;EAIhB,MAAM,gBAAgB,OAAO,UAAmB;AAC9C,QAAK,OAAO;AACZ,SAAM,QACJ,sHACD;;EAIH,MAAM,eAAe,UAAmB;AACtC,SAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,yBAAyB;;;uBAlE9E,mBAeM,OAfN,YAeM,CAAA,OAAA,OAAA,OAAA,KAdJ,mBAAoE,MAAA,EAAhE,OAAM,uCAAqC,EAAC,mBAAe,GAAA,GAE/D,YAWY,MAAA,UAAA,EAAA;IAXA,gBAAe;IAAe,WAAS;IAAgB,SAAO;;2BACpD;KAApB,YAAoB,MAAA,MAAA,CAAA,WAAA;KAEpB,YAAwF,MAAA,kBAAA,EAAA;MAArE,YAAW;MAA4B,gBAAe;;KAEzE,mBAKM,OALN,YAKM,CAJJ,mBAGI,KAAA,MAAA,CAAA,OAAA,OAAA,OAAA,KAAA,gBAHD,8BAED,GAAA,GAAA,YAAiE,iBAAA;MAAxD,OAAM;MAAoB,IAAI,UAAA;;6BAAgB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAL,SAAK,GAAA,CAAA,EAAA,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import "./useRpcAuth-CJtq1dqM.js";
|
|
2
|
+
import "./EnhancedRefreshTokenHandler-C6tZCcfX.js";
|
|
3
|
+
import "./useQueryCache-alzaRWEb.js";
|
|
4
|
+
import "./useMutation-BLNuJoYl.js";
|
|
5
|
+
import "./AppLink-FcNGKgvG.js";
|
|
6
|
+
import { t as ForgotPassword_default } from "./ForgotPassword-Ckb9Z-wb.js";
|
|
7
|
+
|
|
8
|
+
export { ForgotPassword_default as default };
|