@dragonmastery/dragoncore-vue 0.0.23 → 0.0.25
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-CYuCCosx.js → ChangePasswordPage-C7rqJfii.js} +1 -1
- package/dist/{ChangePasswordPage-C633yQiU.js → ChangePasswordPage-nr0B06HB.js} +1 -1
- package/dist/{ChangePasswordPage-C633yQiU.js.map → ChangePasswordPage-nr0B06HB.js.map} +1 -1
- package/dist/ConsentFlowStep-Dwg2HpnI.js +157 -0
- package/dist/ConsentFlowStep-Dwg2HpnI.js.map +1 -0
- package/dist/ConsentRequired-Cp9QGWiV.js +114 -0
- package/dist/ConsentRequired-Cp9QGWiV.js.map +1 -0
- package/dist/{CreateTeamForm-CeaC41VY.js → CreateTeamForm-DmBiBqC0.js} +5 -5
- package/dist/{CreateTeamForm-CeaC41VY.js.map → CreateTeamForm-DmBiBqC0.js.map} +1 -1
- package/dist/CreateTeamForm-DoMkefS8.js +12 -0
- package/dist/{CreateTeamMemberForm-CnHfpob_.js → CreateTeamMemberForm-CSF-tD6B.js} +5 -5
- package/dist/{CreateTeamMemberForm-Bv9gNG4z.js → CreateTeamMemberForm-ITp4XFn9.js} +5 -5
- package/dist/{CreateTeamMemberForm-Bv9gNG4z.js.map → CreateTeamMemberForm-ITp4XFn9.js.map} +1 -1
- package/dist/{CreateUserPage-CqKcY7_X.js → CreateUserPage-1WiLNGr_.js} +1 -1
- package/dist/{CreateUserPage-CqKcY7_X.js.map → CreateUserPage-1WiLNGr_.js.map} +1 -1
- package/dist/{CreateUserPage-C9uOeYDJ.js → CreateUserPage-DNi45YF4.js} +1 -1
- package/dist/{CreditBalanceDashboard-k_orNn4h.js → CreditBalanceDashboard-B-CQpNNH.js} +2 -2
- package/dist/{CreditBalanceDashboard-k_orNn4h.js.map → CreditBalanceDashboard-B-CQpNNH.js.map} +1 -1
- package/dist/{CreditBalanceDashboard-0HiJE_OS.js → CreditBalanceDashboard-C9aofnmG.js} +5 -5
- package/dist/{CreditManagement-DXdIN-0d.js → CreditManagement-BqwuCfPL.js} +5 -5
- package/dist/{CreditManagement-BVBZQDI4.js → CreditManagement-DC-v2lmd.js} +2 -2
- package/dist/{CreditManagement-BVBZQDI4.js.map → CreditManagement-DC-v2lmd.js.map} +1 -1
- package/dist/{CreditTransactionHistory-DSu-6aDi.js → CreditTransactionHistory-Cnf23BQr.js} +3 -3
- package/dist/{CreditTransactionHistory-DSu-6aDi.js.map → CreditTransactionHistory-Cnf23BQr.js.map} +1 -1
- package/dist/{CustomerCreateSupportTicketForm-BsjX8Pja.js → CustomerCreateSupportTicketForm-BglXTkKj.js} +5 -5
- package/dist/{CustomerCreateSupportTicketForm-kf8YIGjx.js → CustomerCreateSupportTicketForm-DpMy7RN3.js} +3 -3
- package/dist/{CustomerCreateSupportTicketForm-kf8YIGjx.js.map → CustomerCreateSupportTicketForm-DpMy7RN3.js.map} +1 -1
- package/dist/{CustomerSupportTicketDetailPage-C_-YoAaP.js → CustomerSupportTicketDetailPage-CI0UmP2U.js} +5 -5
- package/dist/{CustomerSupportTicketDetailPage-C_-YoAaP.js.map → CustomerSupportTicketDetailPage-CI0UmP2U.js.map} +1 -1
- package/dist/CustomerSupportTicketList-DgXBedwz.js +64 -0
- package/dist/{CustomerSupportTicketParent-BpBuYCrP.js → CustomerSupportTicketParent-BaKfkSlU.js} +2 -2
- package/dist/{CustomerSupportTicketParent-BpBuYCrP.js.map → CustomerSupportTicketParent-BaKfkSlU.js.map} +1 -1
- package/dist/{CustomerSupportTicketParent-Djy7pNqO.js → CustomerSupportTicketParent-D19kei4H.js} +1 -1
- package/dist/{CustomerSupportTicketSuccess-cumNSGdx.js → CustomerSupportTicketSuccess-BQ_a8BPV.js} +2 -2
- package/dist/{CustomerSupportTicketSuccess-cumNSGdx.js.map → CustomerSupportTicketSuccess-BQ_a8BPV.js.map} +1 -1
- package/dist/{CustomerSupportTicketSuccess-DsFzpJFU.js → CustomerSupportTicketSuccess-DToQdwdr.js} +4 -4
- package/dist/EditTeamForm-BKnTz2F4.js +12 -0
- package/dist/{EditTeamForm-BxRN338L.js → EditTeamForm-Cgi1EghV.js} +4 -4
- package/dist/{EditTeamForm-BxRN338L.js.map → EditTeamForm-Cgi1EghV.js.map} +1 -1
- package/dist/{EditTeamMemberForm-D7D1Zddh.js → EditTeamMemberForm-CIqEjFF8.js} +3 -3
- package/dist/{EditTeamMemberForm-DfgJr5Cy.js → EditTeamMemberForm-Fyf8Zxfh.js} +3 -3
- package/dist/{EditTeamMemberForm-DfgJr5Cy.js.map → EditTeamMemberForm-Fyf8Zxfh.js.map} +1 -1
- package/dist/{EditUserPage-CI_jtU8P.js → EditUserPage-BBzGmOrx.js} +2 -2
- package/dist/{EditUserPage-CI_jtU8P.js.map → EditUserPage-BBzGmOrx.js.map} +1 -1
- package/dist/{TeamNotesTab-o7glfjoY.js → EditUserPage-D3AWaHT2.js} +2 -2
- package/dist/ExternalLinkIcon-FidcmNOa.js +34 -0
- package/dist/ExternalLinkIcon-FidcmNOa.js.map +1 -0
- package/dist/{FieldsetSection-Cd4B8Ad7.js → FieldsetSection-CH1jAwcc.js} +1 -1
- package/dist/{FieldsetSection-Cd4B8Ad7.js.map → FieldsetSection-CH1jAwcc.js.map} +1 -1
- package/dist/{ForgotPassword-tJVSg7PB.js → ForgotPassword-BhmO5Lfd.js} +1 -1
- package/dist/{ForgotPassword-Ckb9Z-wb.js → ForgotPassword-Dd-E3_o1.js} +1 -1
- package/dist/{ForgotPassword-Ckb9Z-wb.js.map → ForgotPassword-Dd-E3_o1.js.map} +1 -1
- package/dist/{LoginForm-QFJ8NHww.js → LoginForm-By2I6TuV.js} +1 -1
- package/dist/{LoginForm-CMN2T1fA.js → LoginForm-DPmrJ_wm.js} +1 -1
- package/dist/{LoginForm-CMN2T1fA.js.map → LoginForm-DPmrJ_wm.js.map} +1 -1
- package/dist/{Logout-CjDBff3W.js → Logout-DZD4gSWp.js} +1 -1
- package/dist/{Logout-CFLYHlLr.js → Logout-DnkdqN78.js} +1 -1
- package/dist/{Logout-CFLYHlLr.js.map → Logout-DnkdqN78.js.map} +1 -1
- package/dist/{MfaSetup-XqoAwBXx.js → MfaSetup-Bjc3v0hs.js} +4 -4
- package/dist/{MfaSetup-XqoAwBXx.js.map → MfaSetup-Bjc3v0hs.js.map} +1 -1
- package/dist/{MfaSetup-BZcoxJx-.js → MfaSetup-BtfQXhLn.js} +2 -2
- package/dist/{MfaVerify-Dy2aV5Gk.js → MfaVerify-SUfSRf4m.js} +2 -2
- package/dist/{MfaVerify-C-A75TFZ.js → MfaVerify-uJlPz8xg.js} +2 -2
- package/dist/{MfaVerify-C-A75TFZ.js.map → MfaVerify-uJlPz8xg.js.map} +1 -1
- package/dist/{RecordVersionViewer-D2j10HdK.js → RecordVersionViewer-NLn1gVys.js} +1 -1
- package/dist/{RecordVersionViewer-D2j10HdK.js.map → RecordVersionViewer-NLn1gVys.js.map} +1 -1
- package/dist/{ResetPassword-Cd-Yxp8E.js → ResetPassword-CyizBRob.js} +1 -1
- package/dist/{ResetPassword-Cd-Yxp8E.js.map → ResetPassword-CyizBRob.js.map} +1 -1
- package/dist/{ResetPassword-D6to3G6a.js → ResetPassword-Dz2N3pH4.js} +1 -1
- package/dist/{SavedFiltersPage-DM5DvAFa.js → SavedFiltersPage-CQl3CThS.js} +52 -51
- package/dist/{SavedFiltersPage-DM5DvAFa.js.map → SavedFiltersPage-CQl3CThS.js.map} +1 -1
- package/dist/{Signup-2pqvJiVt.js → Signup-BCVZZCR_.js} +3 -3
- package/dist/{Signup-2pqvJiVt.js.map → Signup-BCVZZCR_.js.map} +1 -1
- package/dist/Signup-CJrY4IK-.js +9 -0
- package/dist/{SignupConsentFlow-X3kXuviv.js → SignupConsentFlow-Dd3QAkVF.js} +37 -127
- package/dist/SignupConsentFlow-Dd3QAkVF.js.map +1 -0
- package/dist/{SignupRequirementsPage-Cf-ElkEq.js → SignupRequirementsPage-DUQ63ZuW.js} +6 -6
- package/dist/SignupRequirementsPage-DUQ63ZuW.js.map +1 -0
- package/dist/{StaffCreateSupportTicketForm-D2nn4rTU.js → StaffCreateSupportTicketForm-BlXd0-fF.js} +4 -4
- package/dist/{StaffCreateSupportTicketForm-D2nn4rTU.js.map → StaffCreateSupportTicketForm-BlXd0-fF.js.map} +1 -1
- package/dist/{StaffCreateSupportTicketForm-BlUP2XXy.js → StaffCreateSupportTicketForm-DZLB4g3g.js} +5 -5
- package/dist/{StaffSupportTicketDetailPage-MFtm06BE.js → StaffSupportTicketDetailPage--idGVu5P.js} +10 -10
- package/dist/StaffSupportTicketDetailPage--idGVu5P.js.map +1 -0
- package/dist/StaffSupportTicketList-qPI92eBV.js +64 -0
- package/dist/{StaffSupportTicketParent-B7mEN1oD.js → StaffSupportTicketParent-ByUwsYGx.js} +1 -1
- package/dist/{StaffSupportTicketParent-BvPwgOqH.js → StaffSupportTicketParent-yoC-_Lku.js} +2 -2
- package/dist/{StaffSupportTicketParent-BvPwgOqH.js.map → StaffSupportTicketParent-yoC-_Lku.js.map} +1 -1
- package/dist/{StaffSupportTicketSuccess-Ca2WrcRg.js → StaffSupportTicketSuccess-D9ZUkc88.js} +2 -2
- package/dist/{StaffSupportTicketSuccess-Ca2WrcRg.js.map → StaffSupportTicketSuccess-D9ZUkc88.js.map} +1 -1
- package/dist/{StaffSupportTicketSuccess-BMCOP3ko.js → StaffSupportTicketSuccess-DSKqZFmV.js} +4 -4
- package/dist/{SupportStaffPage-B69-kuvg.js → SupportStaffPage-c2ouJwJk.js} +3 -3
- package/dist/{SupportStaffPage-B69-kuvg.js.map → SupportStaffPage-c2ouJwJk.js.map} +1 -1
- package/dist/{SupportTicketDevLifecycleBadge-BoAjMb08.js → SupportTicketDevLifecycleBadge-BYKZjEv6.js} +1 -1
- package/dist/{SupportTicketDevLifecycleBadge-BoAjMb08.js.map → SupportTicketDevLifecycleBadge-BYKZjEv6.js.map} +1 -1
- package/dist/{SupportTicketMaintenancePage-Bptja-xb.js → SupportTicketMaintenancePage-B07avInx.js} +1 -1
- package/dist/{SupportTicketMaintenancePage-Bptja-xb.js.map → SupportTicketMaintenancePage-B07avInx.js.map} +1 -1
- package/dist/TeamAttachmentsTab-BmypKYXr.js +64 -0
- package/dist/TeamHistoryTab-BSEOYC_5.js +6 -0
- package/dist/{TeamHistoryTab-DM8KBEG1.js → TeamHistoryTab-p3hDxCc3.js} +3 -3
- package/dist/{TeamHistoryTab-DM8KBEG1.js.map → TeamHistoryTab-p3hDxCc3.js.map} +1 -1
- package/dist/{TeamList-qdwlMuJv.js → TeamList-BlwTWVnP.js} +3 -3
- package/dist/{TeamList-qdwlMuJv.js.map → TeamList-BlwTWVnP.js.map} +1 -1
- package/dist/TeamList-DlHGLlmO.js +8 -0
- package/dist/{TeamMemberList-DyI1U1t_.js → TeamMemberList-D0-dM5kI.js} +3 -3
- package/dist/{TeamMemberList-DyI1U1t_.js.map → TeamMemberList-D0-dM5kI.js.map} +1 -1
- package/dist/TeamMemberList-uwSe9zdv.js +7 -0
- package/dist/{TeamMemberParent-B63pRfI6.js → TeamMemberParent-C9OEziOK.js} +3 -3
- package/dist/{TeamMemberParent-D9Fxu7GD.js → TeamMemberParent-CJGWXjuM.js} +2 -2
- package/dist/{TeamMemberParent-D9Fxu7GD.js.map → TeamMemberParent-CJGWXjuM.js.map} +1 -1
- package/dist/{EditUserPage-C0K7EGjM.js → TeamNotesTab-BnkgZd-5.js} +2 -2
- package/dist/{TeamNotesTab-BgxleidZ.js → TeamNotesTab-DPw9YEwK.js} +2 -2
- package/dist/{TeamNotesTab-BgxleidZ.js.map → TeamNotesTab-DPw9YEwK.js.map} +1 -1
- package/dist/{TeamParent-BwXqA3rj.js → TeamParent-EPbNiMmg.js} +2 -2
- package/dist/{TeamParent-BwXqA3rj.js.map → TeamParent-EPbNiMmg.js.map} +1 -1
- package/dist/TeamParent-pt8XxZpt.js +11 -0
- package/dist/{TimelineNoteInput-DXaodm43.js → TimelineNoteInput--q4ENAgu.js} +2 -2
- package/dist/{TimelineNoteInput-DXaodm43.js.map → TimelineNoteInput--q4ENAgu.js.map} +1 -1
- package/dist/{TimelineSystemEvent-zCMUx5Zz.js → TimelineSystemEvent-Ch1sZiyO.js} +1 -1
- package/dist/{TimelineSystemEvent-zCMUx5Zz.js.map → TimelineSystemEvent-Ch1sZiyO.js.map} +1 -1
- package/dist/{UserListPage-DtA8tLff.js → UserListPage-A0_eNpQ1.js} +2 -2
- package/dist/{UserListPage-DtA8tLff.js.map → UserListPage-A0_eNpQ1.js.map} +1 -1
- package/dist/UserListPage-CjpxiETO.js +5 -0
- package/dist/{UserProfilePage-DRbCAr9H.js → UserProfilePage-BWK97ODt.js} +1 -1
- package/dist/{UserProfilePage-g4-VEDXo.js → UserProfilePage-FNLYK9kj.js} +1 -1
- package/dist/{UserProfilePage-g4-VEDXo.js.map → UserProfilePage-FNLYK9kj.js.map} +1 -1
- package/dist/{VerifyEmail-CM5ehFB8.js → VerifyEmail-CEbvnWLl.js} +2 -2
- package/dist/{VerifyEmail-CM5ehFB8.js.map → VerifyEmail-CEbvnWLl.js.map} +1 -1
- package/dist/{VerifyEmail-DMHczC9f.js → VerifyEmail-DdUKxJnk.js} +2 -2
- package/dist/{ViewTeam-DSbKV60o.js → ViewTeam-BeSKgVYp.js} +4 -4
- package/dist/{ViewTeam-DSbKV60o.js.map → ViewTeam-BeSKgVYp.js.map} +1 -1
- package/dist/ViewTeam-tBi95Q7D.js +8 -0
- package/dist/{ViewTeamMember-BB0nvPOe.js → ViewTeamMember-Cf5yXdv6.js} +4 -4
- package/dist/{ViewTeamMember-BB0nvPOe.js.map → ViewTeamMember-Cf5yXdv6.js.map} +1 -1
- package/dist/ViewTeamMember-DtQCZU-X.js +7 -0
- package/dist/{ZiniaContainer-CjVhCnGB.js → ZiniaContainer-BV6sojLa.js} +1 -1
- package/dist/{ZiniaContainer-CjVhCnGB.js.map → ZiniaContainer-BV6sojLa.js.map} +1 -1
- package/dist/{convertToLocalDateTime-BF25N4xd.js → convertToLocalDateTime-C13-PrSA.js} +1 -1
- package/dist/{convertToLocalDateTime-BF25N4xd.js.map → convertToLocalDateTime-C13-PrSA.js.map} +1 -1
- package/dist/{customerSupportTicketRoutes-C7OxGAGl.js → customerSupportTicketRoutes-aXOZjl41.js} +8 -8
- package/dist/{customerSupportTicketRoutes-C7OxGAGl.js.map → customerSupportTicketRoutes-aXOZjl41.js.map} +1 -1
- package/dist/{displayIdFormatter-B-_WQHOr.js → displayIdFormatter-Cr-QaEk1.js} +1 -1
- package/dist/{displayIdFormatter-B-_WQHOr.js.map → displayIdFormatter-Cr-QaEk1.js.map} +1 -1
- package/dist/{extractRpcErrorMessage-diUBl6Ij.js → extractRpcErrorMessage-CAaeVysa.js} +1 -1
- package/dist/{extractRpcErrorMessage-diUBl6Ij.js.map → extractRpcErrorMessage-CAaeVysa.js.map} +1 -1
- package/dist/index.d.ts +1093 -1081
- package/dist/index.js +55 -54
- package/dist/{mfaSchema-Ukqzdyck.js → mfaSchema-C6PatIbY.js} +1 -1
- package/dist/{mfaSchema-Ukqzdyck.js.map → mfaSchema-C6PatIbY.js.map} +1 -1
- package/dist/{saved_filter-CfzH0BzK.js → saved_filter-DMUiaPSP.js} +3 -3
- package/dist/{saved_filter-CfzH0BzK.js.map → saved_filter-DMUiaPSP.js.map} +1 -1
- package/dist/{signupConsentStorage-DS9vCUuC.js → signupConsentStorage-Ct4ZuKi-.js} +1 -1
- package/dist/{signupConsentStorage-DS9vCUuC.js.map → signupConsentStorage-Ct4ZuKi-.js.map} +1 -1
- package/dist/{src-DVe_0RO9.js → src-DJeB_pSK.js} +32 -31
- package/dist/src-DJeB_pSK.js.map +1 -0
- package/dist/{staffSupportTicketRoutes-CWutoQWp.js → staffSupportTicketRoutes-bHqYUfii.js} +8 -8
- package/dist/{staffSupportTicketRoutes-CWutoQWp.js.map → staffSupportTicketRoutes-bHqYUfii.js.map} +1 -1
- package/dist/{teamMemberMetadata-CQnbVepq.js → teamMemberMetadata-DX0W-B7p.js} +1 -1
- package/dist/{teamMemberMetadata-CQnbVepq.js.map → teamMemberMetadata-DX0W-B7p.js.map} +1 -1
- package/dist/{teamMetadata-DlvwO5V0.js → teamMetadata-26Mwjb2i.js} +1 -1
- package/dist/{teamMetadata-DlvwO5V0.js.map → teamMetadata-26Mwjb2i.js.map} +1 -1
- package/dist/{teamRoutes-KFgnsdDP.js → teamRoutes-CbCuofgD.js} +12 -12
- package/dist/{teamRoutes-KFgnsdDP.js.map → teamRoutes-CbCuofgD.js.map} +1 -1
- package/dist/{team_memberRoutes-Cjpw_ql6.js → team_memberRoutes-Cxgte_vj.js} +7 -7
- package/dist/{team_memberRoutes-Cjpw_ql6.js.map → team_memberRoutes-Cxgte_vj.js.map} +1 -1
- package/dist/{useEmailVerificationChannel-B51z65PN.js → useEmailVerificationChannel-QuMSgzzM.js} +1 -1
- package/dist/{useEmailVerificationChannel-B51z65PN.js.map → useEmailVerificationChannel-QuMSgzzM.js.map} +1 -1
- package/dist/{userAuthorized-C09FHWGL.js → userAuthorized-klLUHGxT.js} +5 -1
- package/dist/userAuthorized-klLUHGxT.js.map +1 -0
- package/package.json +2 -2
- package/dist/ConsentRequired-BPjsZoPY.js +0 -211
- package/dist/ConsentRequired-BPjsZoPY.js.map +0 -1
- package/dist/CreateTeamForm-DfgCaUwX.js +0 -12
- package/dist/CustomerSupportTicketList-DdACn3ug.js +0 -63
- package/dist/EditTeamForm-BE3iX2x3.js +0 -12
- package/dist/Signup-XdImA1os.js +0 -9
- package/dist/SignupConsentFlow-X3kXuviv.js.map +0 -1
- package/dist/SignupRequirementsPage-Cf-ElkEq.js.map +0 -1
- package/dist/StaffSupportTicketDetailPage-MFtm06BE.js.map +0 -1
- package/dist/StaffSupportTicketList-LfLx0pYP.js +0 -63
- package/dist/TeamAttachmentsTab-Dk3LxX3n.js +0 -63
- package/dist/TeamHistoryTab-CRONdHcL.js +0 -6
- package/dist/TeamList-DYm_vQ2z.js +0 -8
- package/dist/TeamMemberList-4LRLT_7Z.js +0 -7
- package/dist/TeamParent-CFOmyKPz.js +0 -11
- package/dist/UserListPage-Bmwg0an5.js +0 -5
- package/dist/ViewTeam-CXyABxE6.js +0 -8
- package/dist/ViewTeamMember-jrOnBaDh.js +0 -7
- package/dist/src-DVe_0RO9.js.map +0 -1
- package/dist/userAuthorized-C09FHWGL.js.map +0 -1
- /package/dist/{Appearance-Ch4zfWZ3.js → Appearance-CHCv4Fd1.js} +0 -0
- /package/dist/{TeamMembersTab-BGcdyEE8.js → TeamMembersTab-CeOJAhhR.js} +0 -0
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
import { o as useUserSessionStore } from "./useRpcAuth-CJtq1dqM.js";
|
|
2
|
-
import "./EnhancedRefreshTokenHandler-C6tZCcfX.js";
|
|
3
|
-
import "./useQueryCache-alzaRWEb.js";
|
|
4
|
-
import { t as useMutation } from "./useMutation-BLNuJoYl.js";
|
|
5
|
-
import { t as useQuery } from "./useQuery-BzUGEOj0.js";
|
|
6
|
-
import { r as getValidReturnUrl } from "./useReturnUrl-B5V3SJf5.js";
|
|
7
|
-
import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, defineComponent, nextTick, openBlock, ref, toDisplayString, unref, watch } from "vue";
|
|
8
|
-
import { useRoute, useRouter } from "vue-router";
|
|
9
|
-
import { toast } from "vue3-toastify";
|
|
10
|
-
import DOMPurify from "dompurify";
|
|
11
|
-
import { marked } from "marked";
|
|
12
|
-
|
|
13
|
-
//#region src/slices/auth/features/consent_required/ConsentRequired.vue
|
|
14
|
-
const _hoisted_1 = { class: "w-full max-w-md mx-auto mb-8 sm:mb-10 bg-base-200 px-3 py-4 sm:px-6 sm:py-6 rounded-xl shadow-md container min-w-0" };
|
|
15
|
-
const _hoisted_2 = {
|
|
16
|
-
key: 0,
|
|
17
|
-
class: "text-center"
|
|
18
|
-
};
|
|
19
|
-
const _hoisted_3 = {
|
|
20
|
-
key: 1,
|
|
21
|
-
class: "space-y-6"
|
|
22
|
-
};
|
|
23
|
-
const _hoisted_4 = { class: "text-center space-y-1" };
|
|
24
|
-
const _hoisted_5 = { class: "text-2xl font-bold" };
|
|
25
|
-
const _hoisted_6 = { class: "text-base-content/80" };
|
|
26
|
-
const _hoisted_7 = {
|
|
27
|
-
key: 0,
|
|
28
|
-
class: "alert alert-error flex flex-col gap-3"
|
|
29
|
-
};
|
|
30
|
-
const _hoisted_8 = { class: "flex flex-wrap gap-2 mt-1" };
|
|
31
|
-
const _hoisted_9 = ["disabled"];
|
|
32
|
-
const _hoisted_10 = {
|
|
33
|
-
key: 1,
|
|
34
|
-
class: "text-sm text-base-content/70 mb-2"
|
|
35
|
-
};
|
|
36
|
-
const _hoisted_11 = ["data-consent-type"];
|
|
37
|
-
const _hoisted_12 = ["innerHTML"];
|
|
38
|
-
const _hoisted_13 = ["href"];
|
|
39
|
-
const _hoisted_14 = {
|
|
40
|
-
key: 4,
|
|
41
|
-
class: "flex flex-col gap-5"
|
|
42
|
-
};
|
|
43
|
-
const _hoisted_15 = ["disabled"];
|
|
44
|
-
const _hoisted_16 = ["disabled"];
|
|
45
|
-
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
46
|
-
__name: "ConsentRequired",
|
|
47
|
-
setup(__props) {
|
|
48
|
-
const sessionStore = useUserSessionStore();
|
|
49
|
-
const router = useRouter();
|
|
50
|
-
const route = useRoute();
|
|
51
|
-
const { data: pendingConsents, loading } = useQuery((api) => api.users.getPendingConsents(), { skipAuthCheck: false });
|
|
52
|
-
const currentStep = ref(1);
|
|
53
|
-
const totalSteps = computed(() => (pendingConsents.value ?? []).length);
|
|
54
|
-
const currentConfig = computed(() => (pendingConsents.value ?? [])[currentStep.value - 1] ?? null);
|
|
55
|
-
const hasScrolledToBottom = ref(false);
|
|
56
|
-
const scrollEl = ref(null);
|
|
57
|
-
function setScrollRef(el) {
|
|
58
|
-
scrollEl.value = el instanceof HTMLElement ? el : null;
|
|
59
|
-
}
|
|
60
|
-
watch(() => currentConfig.value, (config) => {
|
|
61
|
-
hasScrolledToBottom.value = !config?.content;
|
|
62
|
-
nextTick(() => {
|
|
63
|
-
scrollEl.value?.scrollTo(0, 0);
|
|
64
|
-
});
|
|
65
|
-
}, { immediate: true });
|
|
66
|
-
function renderMarkdown(content) {
|
|
67
|
-
const html = marked.parse(content);
|
|
68
|
-
return DOMPurify.sanitize(html, {
|
|
69
|
-
ALLOWED_TAGS: [
|
|
70
|
-
"p",
|
|
71
|
-
"br",
|
|
72
|
-
"strong",
|
|
73
|
-
"em",
|
|
74
|
-
"u",
|
|
75
|
-
"a",
|
|
76
|
-
"ul",
|
|
77
|
-
"ol",
|
|
78
|
-
"li",
|
|
79
|
-
"h1",
|
|
80
|
-
"h2",
|
|
81
|
-
"h3",
|
|
82
|
-
"h4",
|
|
83
|
-
"blockquote",
|
|
84
|
-
"code",
|
|
85
|
-
"pre",
|
|
86
|
-
"hr"
|
|
87
|
-
],
|
|
88
|
-
ALLOWED_ATTR: [
|
|
89
|
-
"href",
|
|
90
|
-
"target",
|
|
91
|
-
"rel"
|
|
92
|
-
]
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
function checkScrolledToBottom() {
|
|
96
|
-
const el = scrollEl.value;
|
|
97
|
-
if (!el) return;
|
|
98
|
-
const { scrollTop, scrollHeight, clientHeight } = el;
|
|
99
|
-
if (scrollHeight - scrollTop - clientHeight < 10) hasScrolledToBottom.value = true;
|
|
100
|
-
}
|
|
101
|
-
function onScroll() {
|
|
102
|
-
checkScrolledToBottom();
|
|
103
|
-
}
|
|
104
|
-
nextTick(checkScrolledToBottom);
|
|
105
|
-
const declining = ref(false);
|
|
106
|
-
const submitting = ref(false);
|
|
107
|
-
const submitError = ref(null);
|
|
108
|
-
function getErrorMessage(error) {
|
|
109
|
-
if (error instanceof Error && error.message) return error.message;
|
|
110
|
-
if (error && typeof error === "object" && "message" in error && typeof error.message === "string") return error.message;
|
|
111
|
-
return "Failed to record consents. Please try again.";
|
|
112
|
-
}
|
|
113
|
-
const { mutate: recordConsentsMutate } = useMutation((api, input) => api.users.recordConsents(input), { skipAuthCheck: false });
|
|
114
|
-
async function handleAccept() {
|
|
115
|
-
const config = currentConfig.value;
|
|
116
|
-
const consents = pendingConsents.value ?? [];
|
|
117
|
-
if (!config || consents.length === 0) return;
|
|
118
|
-
submitError.value = null;
|
|
119
|
-
const acceptancesSoFar = {};
|
|
120
|
-
for (let i = 0; i < currentStep.value; i++) {
|
|
121
|
-
const c = consents[i];
|
|
122
|
-
if (c) acceptancesSoFar[c.type] = true;
|
|
123
|
-
}
|
|
124
|
-
if (currentStep.value >= totalSteps.value) {
|
|
125
|
-
submitting.value = true;
|
|
126
|
-
try {
|
|
127
|
-
await recordConsentsMutate({ acceptances: acceptancesSoFar });
|
|
128
|
-
await sessionStore.refreshToken();
|
|
129
|
-
toast.success("Consents recorded. You can now continue.");
|
|
130
|
-
window.scrollTo(0, 0);
|
|
131
|
-
const targetUrl = getValidReturnUrl(route, "/");
|
|
132
|
-
await router.push(targetUrl);
|
|
133
|
-
} catch (err) {
|
|
134
|
-
submitError.value = getErrorMessage(err);
|
|
135
|
-
} finally {
|
|
136
|
-
submitting.value = false;
|
|
137
|
-
}
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
currentStep.value++;
|
|
141
|
-
hasScrolledToBottom.value = !currentConfig.value?.content;
|
|
142
|
-
nextTick(checkScrolledToBottom);
|
|
143
|
-
}
|
|
144
|
-
async function handleDecline() {
|
|
145
|
-
declining.value = true;
|
|
146
|
-
try {
|
|
147
|
-
sessionStore.clearSession();
|
|
148
|
-
toast.info("You have declined. You have been logged out.");
|
|
149
|
-
await router.push("/auth/login");
|
|
150
|
-
} finally {
|
|
151
|
-
declining.value = false;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
watch([pendingConsents, loading], ([consents, isLoading]) => {
|
|
155
|
-
if (!isLoading && Array.isArray(consents) && consents.length === 0) router.push(getValidReturnUrl(route, "/"));
|
|
156
|
-
}, { immediate: true });
|
|
157
|
-
return (_ctx, _cache) => {
|
|
158
|
-
return openBlock(), createElementBlock("div", _hoisted_1, [unref(loading) ? (openBlock(), createElementBlock("div", _hoisted_2, [..._cache[0] || (_cache[0] = [createElementVNode("p", { class: "text-base-content/80" }, "Loading...", -1)])])) : currentConfig.value ? (openBlock(), createElementBlock("div", _hoisted_3, [
|
|
159
|
-
createElementVNode("div", _hoisted_4, [
|
|
160
|
-
createElementVNode("h1", _hoisted_5, toDisplayString(currentConfig.value.label), 1),
|
|
161
|
-
createElementVNode("p", _hoisted_6, "Step " + toDisplayString(currentStep.value) + " of " + toDisplayString(totalSteps.value), 1),
|
|
162
|
-
_cache[1] || (_cache[1] = createElementVNode("p", { class: "text-base-content/70 text-sm" }, "Review and accept", -1))
|
|
163
|
-
]),
|
|
164
|
-
submitError.value ? (openBlock(), createElementBlock("div", _hoisted_7, [
|
|
165
|
-
createElementVNode("span", null, toDisplayString(submitError.value), 1),
|
|
166
|
-
_cache[2] || (_cache[2] = createElementVNode("p", { class: "text-sm opacity-90" }, "You can try again.", -1)),
|
|
167
|
-
createElementVNode("div", _hoisted_8, [createElementVNode("button", {
|
|
168
|
-
type: "button",
|
|
169
|
-
class: "btn btn-primary btn-sm",
|
|
170
|
-
disabled: submitting.value,
|
|
171
|
-
onClick: handleAccept
|
|
172
|
-
}, toDisplayString(submitting.value ? "Saving..." : "Try again"), 9, _hoisted_9)])
|
|
173
|
-
])) : createCommentVNode("v-if", true),
|
|
174
|
-
currentConfig.value.content ? (openBlock(), createElementBlock("p", _hoisted_10, " Please read the full document before accepting. Scroll to the bottom when you've finished reading. You can decline at any time; if you decline, you will not have access to the application and will be logged out. ")) : createCommentVNode("v-if", true),
|
|
175
|
-
createCommentVNode(" Scrollable terms box when content is provided "),
|
|
176
|
-
currentConfig.value.content ? (openBlock(), createElementBlock("div", {
|
|
177
|
-
key: currentConfig.value.type,
|
|
178
|
-
ref: (el) => setScrollRef(el),
|
|
179
|
-
class: "border border-base-300 rounded-lg px-3 py-4 sm:p-4 bg-base-100 overflow-y-auto overflow-x-hidden min-h-80 max-h-[min(32rem,70vh)] w-full min-w-0",
|
|
180
|
-
"data-consent-type": currentConfig.value.type,
|
|
181
|
-
onScroll
|
|
182
|
-
}, [createElementVNode("div", {
|
|
183
|
-
class: "prose prose-sm prose-max-w-none max-w-full min-w-0 text-sm prose-headings:font-semibold prose-p:my-2",
|
|
184
|
-
innerHTML: renderMarkdown(currentConfig.value.content)
|
|
185
|
-
}, null, 8, _hoisted_12)], 40, _hoisted_11)) : (openBlock(), createElementBlock(Fragment, { key: 3 }, [createCommentVNode(" Link-only when no content "), createElementVNode("div", null, [currentConfig.value.url ? (openBlock(), createElementBlock("a", {
|
|
186
|
-
key: 0,
|
|
187
|
-
href: currentConfig.value.url,
|
|
188
|
-
target: "_blank",
|
|
189
|
-
rel: "noopener noreferrer",
|
|
190
|
-
class: "link link-accent"
|
|
191
|
-
}, " View " + toDisplayString(currentConfig.value.label), 9, _hoisted_13)) : createCommentVNode("v-if", true)])], 2112)),
|
|
192
|
-
!submitError.value ? (openBlock(), createElementBlock("div", _hoisted_14, [createElementVNode("button", {
|
|
193
|
-
type: "button",
|
|
194
|
-
class: "btn btn-primary",
|
|
195
|
-
disabled: (currentConfig.value.content ? !hasScrolledToBottom.value : false) || submitting.value,
|
|
196
|
-
onClick: handleAccept
|
|
197
|
-
}, toDisplayString(submitting.value ? "Saving..." : "Accept and continue"), 9, _hoisted_15), createElementVNode("button", {
|
|
198
|
-
type: "button",
|
|
199
|
-
class: "btn btn-outline btn-sm btn-error",
|
|
200
|
-
disabled: declining.value || submitting.value,
|
|
201
|
-
onClick: handleDecline
|
|
202
|
-
}, toDisplayString(declining.value ? "Logging out..." : "Decline and log out"), 9, _hoisted_16)])) : createCommentVNode("v-if", true)
|
|
203
|
-
])) : createCommentVNode("v-if", true)]);
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
});
|
|
207
|
-
var ConsentRequired_default = _sfc_main;
|
|
208
|
-
|
|
209
|
-
//#endregion
|
|
210
|
-
export { ConsentRequired_default as default };
|
|
211
|
-
//# sourceMappingURL=ConsentRequired-BPjsZoPY.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ConsentRequired-BPjsZoPY.js","names":["acceptancesSoFar: Record<string, boolean>"],"sources":["../src/slices/auth/features/consent_required/ConsentRequired.vue"],"sourcesContent":["<template>\n <div class=\"w-full max-w-md mx-auto mb-8 sm:mb-10 bg-base-200 px-3 py-4 sm:px-6 sm:py-6 rounded-xl shadow-md container min-w-0\">\n <div v-if=\"loading\" class=\"text-center\">\n <p class=\"text-base-content/80\">Loading...</p>\n </div>\n\n <div v-else-if=\"currentConfig\" class=\"space-y-6\">\n <div class=\"text-center space-y-1\">\n <h1 class=\"text-2xl font-bold\">{{ currentConfig.label }}</h1>\n <p class=\"text-base-content/80\">Step {{ currentStep }} of {{ totalSteps }}</p>\n <p class=\"text-base-content/70 text-sm\">Review and accept</p>\n </div>\n\n <div v-if=\"submitError\" class=\"alert alert-error flex flex-col gap-3\">\n <span>{{ submitError }}</span>\n <p class=\"text-sm opacity-90\">You can try again.</p>\n <div class=\"flex flex-wrap gap-2 mt-1\">\n <button\n type=\"button\"\n class=\"btn btn-primary btn-sm\"\n :disabled=\"submitting\"\n @click=\"handleAccept\"\n >\n {{ submitting ? 'Saving...' : 'Try again' }}\n </button>\n </div>\n </div>\n\n <p v-if=\"currentConfig.content\" class=\"text-sm text-base-content/70 mb-2\">\n Please read the full document before accepting. Scroll to the bottom when you've finished reading. You can decline at any time; if you decline, you will not have access to the application and will be logged out.\n </p>\n\n <!-- Scrollable terms box when content is provided -->\n <div\n v-if=\"currentConfig.content\"\n :key=\"currentConfig.type\"\n :ref=\"(el) => setScrollRef(el)\"\n class=\"border border-base-300 rounded-lg px-3 py-4 sm:p-4 bg-base-100 overflow-y-auto overflow-x-hidden min-h-80 max-h-[min(32rem,70vh)] w-full min-w-0\"\n :data-consent-type=\"currentConfig.type\"\n @scroll=\"onScroll\"\n >\n <div\n class=\"prose prose-sm prose-max-w-none max-w-full min-w-0 text-sm prose-headings:font-semibold prose-p:my-2\"\n v-html=\"renderMarkdown(currentConfig.content)\"\n />\n </div>\n\n <!-- Link-only when no content -->\n <div v-else>\n <a\n v-if=\"currentConfig.url\"\n :href=\"currentConfig.url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"link link-accent\"\n >\n View {{ currentConfig.label }}\n </a>\n </div>\n\n <div v-if=\"!submitError\" class=\"flex flex-col gap-5\">\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n :disabled=\"(currentConfig.content ? !hasScrolledToBottom : false) || submitting\"\n @click=\"handleAccept\"\n >\n {{ submitting ? 'Saving...' : 'Accept and continue' }}\n </button>\n <button\n type=\"button\"\n class=\"btn btn-outline btn-sm btn-error\"\n :disabled=\"declining || submitting\"\n @click=\"handleDecline\"\n >\n {{ declining ? 'Logging out...' : 'Decline and log out' }}\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { RecordConsentsInputDto } from '@dragonmastery/dragoncore-shared';\nimport DOMPurify from 'dompurify';\nimport { marked } from 'marked';\nimport { computed, nextTick, ref, watch } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useQuery } from '../../../../composables/useQuery';\nimport { useUserSessionStore } from '../../../../composables/useUserSessionStore';\nimport { getValidReturnUrl } from '../../../../utils/useReturnUrl';\n\nconst sessionStore = useUserSessionStore();\nconst router = useRouter();\nconst route = useRoute();\n\nconst { data: pendingConsents, loading } = useQuery(\n (api) => api.users.getPendingConsents(),\n { skipAuthCheck: false },\n);\n\nconst currentStep = ref(1);\nconst totalSteps = computed(() => (pendingConsents.value ?? []).length);\nconst currentConfig = computed(\n () => (pendingConsents.value ?? [])[currentStep.value - 1] ?? null,\n);\n\nconst hasScrolledToBottom = ref(false);\nconst scrollEl = ref<HTMLElement | null>(null);\n\nfunction setScrollRef(el: unknown) {\n scrollEl.value = el instanceof HTMLElement ? el : null;\n}\n\nwatch(\n () => currentConfig.value,\n (config) => {\n hasScrolledToBottom.value = !config?.content;\n nextTick(() => {\n scrollEl.value?.scrollTo(0, 0);\n });\n },\n { immediate: true },\n);\n\nfunction renderMarkdown(content: string): string {\n const html = marked.parse(content) as string;\n return DOMPurify.sanitize(html, {\n ALLOWED_TAGS: ['p', 'br', 'strong', 'em', 'u', 'a', 'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'h4', 'blockquote', 'code', 'pre', 'hr'],\n ALLOWED_ATTR: ['href', 'target', 'rel'],\n });\n}\n\nfunction checkScrolledToBottom() {\n const el = scrollEl.value;\n if (!el) return;\n const { scrollTop, scrollHeight, clientHeight } = el;\n const atBottom = scrollHeight - scrollTop - clientHeight < 10;\n if (atBottom) {\n hasScrolledToBottom.value = true;\n }\n}\n\nfunction onScroll() {\n checkScrolledToBottom();\n}\n\nnextTick(checkScrolledToBottom);\n\nconst declining = ref(false);\nconst submitting = ref(false);\nconst submitError = ref<string | null>(null);\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error && error.message) return error.message;\n if (error && typeof error === 'object' && 'message' in error && typeof (error as { message: unknown }).message === 'string') {\n return (error as { message: string }).message;\n }\n return 'Failed to record consents. Please try again.';\n}\n\nconst { mutate: recordConsentsMutate } = useMutation(\n (api, input: RecordConsentsInputDto) => api.users.recordConsents(input),\n { skipAuthCheck: false },\n);\n\nasync function handleAccept() {\n const config = currentConfig.value;\n const consents = pendingConsents.value ?? [];\n if (!config || consents.length === 0) return;\n\n submitError.value = null;\n\n const acceptancesSoFar: Record<string, boolean> = {};\n for (let i = 0; i < currentStep.value; i++) {\n const c = consents[i];\n if (c) acceptancesSoFar[c.type] = true;\n }\n\n if (currentStep.value >= totalSteps.value) {\n submitting.value = true;\n try {\n await recordConsentsMutate({ acceptances: acceptancesSoFar });\n await sessionStore.refreshToken();\n toast.success('Consents recorded. You can now continue.');\n window.scrollTo(0, 0);\n const targetUrl = getValidReturnUrl(route, '/');\n await router.push(targetUrl);\n } catch (err) {\n submitError.value = getErrorMessage(err);\n } finally {\n submitting.value = false;\n }\n return;\n }\n\n currentStep.value++;\n hasScrolledToBottom.value = !currentConfig.value?.content;\n nextTick(checkScrolledToBottom);\n}\n\nasync function handleDecline() {\n declining.value = true;\n try {\n sessionStore.clearSession();\n toast.info('You have declined. You have been logged out.');\n await router.push('/auth/login');\n } finally {\n declining.value = false;\n }\n}\n\n// If no pending consents (e.g. already completed or consent disabled), redirect\nwatch(\n [pendingConsents, loading],\n ([consents, isLoading]) => {\n if (!isLoading && Array.isArray(consents) && consents.length === 0) {\n router.push(getValidReturnUrl(route, '/'));\n }\n },\n { immediate: true },\n);\n</script>\n"],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
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 "./userAuthorized-C09FHWGL.js";
|
|
7
|
-
import "./teamMetadata-DlvwO5V0.js";
|
|
8
|
-
import "./team_memberRoutes-Cjpw_ql6.js";
|
|
9
|
-
import "./teamRoutes-KFgnsdDP.js";
|
|
10
|
-
import { t as CreateTeamForm_default } from "./CreateTeamForm-CeaC41VY.js";
|
|
11
|
-
|
|
12
|
-
export { CreateTeamForm_default as default };
|
|
@@ -1,63 +0,0 @@
|
|
|
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 { x as CustomerSupportTicketList_default } from "./src-DVe_0RO9.js";
|
|
7
|
-
import "./AppLink-FcNGKgvG.js";
|
|
8
|
-
import "./saved_filter-CfzH0BzK.js";
|
|
9
|
-
import "./ConfirmDialog-DjthOYU6.js";
|
|
10
|
-
import "./InlineAttachments-DAn_QknY.js";
|
|
11
|
-
import "./TeamMembersTab-BigqpBDH.js";
|
|
12
|
-
import "./Appearance-shr0Aql0.js";
|
|
13
|
-
import "./useBreadcrumbs-DIqU5AAp.js";
|
|
14
|
-
import "./FieldsetSection-Cd4B8Ad7.js";
|
|
15
|
-
import "./RecordVersionViewer-D2j10HdK.js";
|
|
16
|
-
import "./ZiniaContainer-CjVhCnGB.js";
|
|
17
|
-
import "./userAuthorized-C09FHWGL.js";
|
|
18
|
-
import "./UserProfilePage-g4-VEDXo.js";
|
|
19
|
-
import "./ChangePasswordPage-C633yQiU.js";
|
|
20
|
-
import "./teamMetadata-DlvwO5V0.js";
|
|
21
|
-
import "./team_memberRoutes-Cjpw_ql6.js";
|
|
22
|
-
import "./teamRoutes-KFgnsdDP.js";
|
|
23
|
-
import "./CreateTeamForm-CeaC41VY.js";
|
|
24
|
-
import "./EditTeamForm-BxRN338L.js";
|
|
25
|
-
import "./TeamHistoryTab-DM8KBEG1.js";
|
|
26
|
-
import "./TeamList-qdwlMuJv.js";
|
|
27
|
-
import "./TeamNotesTab-BgxleidZ.js";
|
|
28
|
-
import "./TeamParent-BwXqA3rj.js";
|
|
29
|
-
import "./ViewTeam-DSbKV60o.js";
|
|
30
|
-
import "./teamMemberMetadata-CQnbVepq.js";
|
|
31
|
-
import "./CreateTeamMemberForm-Bv9gNG4z.js";
|
|
32
|
-
import "./EditTeamMemberForm-DfgJr5Cy.js";
|
|
33
|
-
import "./TeamMemberList-DyI1U1t_.js";
|
|
34
|
-
import "./TeamMemberParent-D9Fxu7GD.js";
|
|
35
|
-
import "./ViewTeamMember-BB0nvPOe.js";
|
|
36
|
-
import "./customerSupportTicketRoutes-C7OxGAGl.js";
|
|
37
|
-
import "./staffSupportTicketRoutes-CWutoQWp.js";
|
|
38
|
-
import "./TimelineSystemEvent-zCMUx5Zz.js";
|
|
39
|
-
import "./CustomerCreateSupportTicketForm-kf8YIGjx.js";
|
|
40
|
-
import "./CustomerSupportTicketParent-BpBuYCrP.js";
|
|
41
|
-
import "./CustomerSupportTicketSuccess-cumNSGdx.js";
|
|
42
|
-
import "./StaffCreateSupportTicketForm-D2nn4rTU.js";
|
|
43
|
-
import "./SupportTicketDevLifecycleBadge-BoAjMb08.js";
|
|
44
|
-
import "./StaffSupportTicketParent-BvPwgOqH.js";
|
|
45
|
-
import "./StaffSupportTicketSuccess-Ca2WrcRg.js";
|
|
46
|
-
import "./LoginForm-CMN2T1fA.js";
|
|
47
|
-
import "./useEmailVerificationChannel-B51z65PN.js";
|
|
48
|
-
import "./Signup-2pqvJiVt.js";
|
|
49
|
-
import "./ForgotPassword-Ckb9Z-wb.js";
|
|
50
|
-
import "./ResetPassword-Cd-Yxp8E.js";
|
|
51
|
-
import "./Logout-CFLYHlLr.js";
|
|
52
|
-
import "./mfaSchema-Ukqzdyck.js";
|
|
53
|
-
import "./MfaSetup-XqoAwBXx.js";
|
|
54
|
-
import "./MfaVerify-C-A75TFZ.js";
|
|
55
|
-
import "./VerifyEmail-CM5ehFB8.js";
|
|
56
|
-
import "./UserListPage-DtA8tLff.js";
|
|
57
|
-
import "./CreateUserPage-CqKcY7_X.js";
|
|
58
|
-
import "./EditUserPage-CI_jtU8P.js";
|
|
59
|
-
import "./CreditTransactionHistory-DSu-6aDi.js";
|
|
60
|
-
import "./CreditBalanceDashboard-k_orNn4h.js";
|
|
61
|
-
import "./CreditManagement-BVBZQDI4.js";
|
|
62
|
-
|
|
63
|
-
export { CustomerSupportTicketList_default as default };
|
|
@@ -1,12 +0,0 @@
|
|
|
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 "./userAuthorized-C09FHWGL.js";
|
|
7
|
-
import "./teamMetadata-DlvwO5V0.js";
|
|
8
|
-
import "./team_memberRoutes-Cjpw_ql6.js";
|
|
9
|
-
import "./teamRoutes-KFgnsdDP.js";
|
|
10
|
-
import { t as EditTeamForm_default } from "./EditTeamForm-BxRN338L.js";
|
|
11
|
-
|
|
12
|
-
export { EditTeamForm_default as default };
|
package/dist/Signup-XdImA1os.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
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 "./useEmailVerificationChannel-B51z65PN.js";
|
|
7
|
-
import { t as Signup_default } from "./Signup-2pqvJiVt.js";
|
|
8
|
-
|
|
9
|
-
export { Signup_default as default };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SignupConsentFlow-X3kXuviv.js","names":["acceptancesSoFar: Record<string, boolean>"],"sources":["../src/slices/auth/features/signup_consents/SignupConsentFlow.vue"],"sourcesContent":["<template>\n <div class=\"w-full max-w-md mx-auto mb-8 sm:mb-10 bg-base-200 px-3 py-4 sm:px-6 sm:py-6 rounded-xl shadow-md container min-w-0\">\n <div v-if=\"loading\" class=\"text-center\">\n <p class=\"text-base-content/80\">Loading...</p>\n </div>\n\n <div v-else-if=\"!token || !consents.length\" class=\"text-center\">\n <p class=\"text-base-content/80\">Invalid or expired signup link. Please start over.</p>\n <AppLink :to=\"signupLink\" class=\"btn btn-primary btn-sm mt-4\">Back to sign up</AppLink>\n </div>\n\n <div v-else-if=\"currentConfig\" class=\"space-y-6\">\n <div class=\"text-center space-y-1\">\n <h1 class=\"text-2xl font-bold\">{{ currentConfig.label }}</h1>\n <p class=\"text-base-content/80\">Step {{ currentStep }} of {{ totalSteps }}</p>\n <p class=\"text-base-content/70 text-sm\">Review and accept</p>\n </div>\n\n <div v-if=\"submitError\" class=\"alert alert-error flex flex-col gap-3\">\n <span>{{ submitError }}</span>\n <p class=\"text-sm opacity-90\">\n You can try again or go back to sign up and try again later.\n </p>\n <div class=\"flex flex-wrap gap-2 mt-1\">\n <button\n type=\"button\"\n class=\"btn btn-primary btn-sm\"\n :disabled=\"goingBack || submitting\"\n @click=\"goBackToSignup\"\n >\n {{ goingBack ? 'Returning...' : 'Back to sign up' }}\n </button>\n <button\n type=\"button\"\n class=\"btn btn-ghost btn-sm\"\n :disabled=\"submitting || goingBack\"\n @click=\"handleAccept\"\n >\n {{ submitting ? 'Submitting...' : 'Try again' }}\n </button>\n </div>\n </div>\n\n <p v-if=\"currentConfig.content\" class=\"text-sm text-base-content/70 mb-2\">\n Please read the full document before accepting. Scroll to the bottom when you've finished reading. You can decline at any time; if you decline, your account will not be created and you will return to sign up.\n </p>\n\n <!-- Scrollable terms box when content is provided -->\n <div\n v-if=\"currentConfig.content\"\n :key=\"currentConfig.type\"\n :ref=\"(el) => setScrollRef(el)\"\n class=\"border border-base-300 rounded-lg px-3 py-4 sm:p-4 bg-base-100 overflow-y-auto overflow-x-hidden min-h-80 max-h-[min(32rem,70vh)] w-full min-w-0\"\n :data-consent-type=\"currentConfig.type\"\n @scroll=\"onScroll\"\n >\n <div\n class=\"prose prose-sm prose-max-w-none max-w-full min-w-0 text-sm prose-headings:font-semibold prose-p:my-2\"\n v-html=\"renderMarkdown(currentConfig.content)\"\n />\n </div>\n\n <!-- Link-only when no content -->\n <div v-else>\n <a\n v-if=\"currentConfig.url\"\n :href=\"currentConfig.url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"link link-accent\"\n >\n View {{ currentConfig.label }}\n </a>\n </div>\n\n <div v-if=\"!submitError\" class=\"flex flex-col gap-5\">\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n :disabled=\"(currentConfig.content ? !hasScrolledToBottom : false) || submitting\"\n @click=\"handleAccept\"\n >\n {{ submitting ? 'Submitting...' : 'Accept and continue' }}\n </button>\n <button\n type=\"button\"\n class=\"btn btn-outline btn-sm btn-error\"\n :disabled=\"declining || submitting\"\n @click=\"handleDecline\"\n >\n {{ declining ? 'Returning...' : 'Decline' }}\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { SignupRequirementsDto } from '@dragonmastery/dragoncore-shared';\nimport AppLink from '../../../../components/AppLink.vue';\nimport {\n clearSignupConsentFlowData,\n getSignupConsentFlowData,\n} from '../../signupConsentStorage';\nimport DOMPurify from 'dompurify';\nimport { marked } from 'marked';\nimport { computed, nextTick, ref, watch } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { useEnv } from '../../../../composables/useEnv';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useUserSessionStore } from '../../../../composables/useUserSessionStore';\nimport {\n getValidReturnUrl,\n setEmailVerificationReturnUrl,\n withReturnUrl,\n} from '../../../../utils/useReturnUrl';\n\nconst sessionStore = useUserSessionStore();\nconst router = useRouter();\nconst route = useRoute();\nconst { emailVerificationMode } = useEnv();\n\nconst returnUrl = computed(() => route.query.returnUrl as string | undefined);\nconst signupLink = computed(() => withReturnUrl('/auth/signup', returnUrl.value));\n\nconst token = computed(() => (route.query.token as string) ?? '');\nconst storedData = ref<{ token: string; consents: SignupRequirementsDto } | null>(null);\nconst loading = ref(true);\n\n// Load consents from sessionStorage (must match token from URL)\nconst consents = computed(() => {\n const t = token.value;\n const data = storedData.value;\n if (!t || !data || data.token !== t) return [];\n return data.consents;\n});\n\n// Fallback: if no stored data, fetch consents with token (e.g. user opened link in new tab)\nconst { mutate: fetchConsentsForToken } = useMutation(\n (api, _t: string) => api.users.getSignupConsentsForToken(),\n {\n skipAuthCheck: true,\n credentials: 'include',\n customAuthToken: (t) => t,\n },\n);\n\nasync function loadConsents() {\n loading.value = true;\n const t = token.value;\n if (!t) {\n loading.value = false;\n return;\n }\n const data = getSignupConsentFlowData();\n if (data && data.token === t) {\n storedData.value = data;\n loading.value = false;\n return;\n }\n try {\n const reqs = await fetchConsentsForToken(t);\n if (reqs && Array.isArray(reqs) && reqs.length > 0) {\n storedData.value = { token: t, consents: reqs };\n }\n } catch {\n // Token invalid/expired - consents stay empty, user sees \"Invalid or expired\" message\n }\n loading.value = false;\n}\n\nloadConsents();\n\nconst currentStep = ref(1);\nconst totalSteps = computed(() => consents.value.length);\nconst currentConfig = computed(\n () => consents.value[currentStep.value - 1] ?? null,\n);\n\nconst hasScrolledToBottom = ref(false);\nconst scrollEl = ref<HTMLElement | null>(null);\n\nfunction setScrollRef(el: unknown) {\n scrollEl.value = el instanceof HTMLElement ? el : null;\n}\n\nwatch(\n () => currentConfig.value,\n (config) => {\n hasScrolledToBottom.value = !config?.content;\n nextTick(() => {\n scrollEl.value?.scrollTo(0, 0);\n });\n },\n { immediate: true },\n);\n\nfunction renderMarkdown(content: string): string {\n const html = marked.parse(content) as string;\n return DOMPurify.sanitize(html, {\n ALLOWED_TAGS: ['p', 'br', 'strong', 'em', 'u', 'a', 'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'h4', 'blockquote', 'code', 'pre', 'hr'],\n ALLOWED_ATTR: ['href', 'target', 'rel'],\n });\n}\n\nfunction checkScrolledToBottom() {\n const el = scrollEl.value;\n if (!el) return;\n const { scrollTop, scrollHeight, clientHeight } = el;\n const atBottom = scrollHeight - scrollTop - clientHeight < 10;\n if (atBottom) {\n hasScrolledToBottom.value = true;\n }\n}\n\nfunction onScroll() {\n checkScrolledToBottom();\n}\n\nnextTick(checkScrolledToBottom);\n\nconst declining = ref(false);\nconst goingBack = ref(false);\nconst submitting = ref(false);\nconst submitError = ref<string | null>(null);\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error && error.message) return error.message;\n if (error && typeof error === 'object' && 'message' in error && typeof (error as { message: unknown }).message === 'string') {\n return (error as { message: string }).message;\n }\n return 'Registration failed. Please try again.';\n}\n\nconst { mutate: signupCompleteMutate } = useMutation(\n (api, input: { token: string; acceptances: Record<string, boolean> }) =>\n api.users.signupComplete({ acceptances: input.acceptances }),\n {\n skipAuthCheck: true,\n credentials: 'include',\n customAuthToken: (input) => input.token,\n },\n);\n\nasync function handleAccept() {\n const config = currentConfig.value;\n if (!config || !token.value || !consents.value.length) return;\n\n submitError.value = null;\n\n const acceptancesSoFar: Record<string, boolean> = {};\n for (let i = 0; i < currentStep.value; i++) {\n const c = consents.value[i];\n if (c) acceptancesSoFar[c.type] = true;\n }\n\n if (currentStep.value >= totalSteps.value) {\n submitting.value = true;\n try {\n await completeSignup(acceptancesSoFar);\n } catch (err) {\n submitError.value = getErrorMessage(err);\n } finally {\n submitting.value = false;\n }\n return;\n }\n\n currentStep.value++;\n hasScrolledToBottom.value = !currentConfig.value?.content;\n nextTick(checkScrolledToBottom);\n}\n\nasync function completeSignup(acceptances: Record<string, boolean>) {\n const t = token.value;\n if (!t) return;\n\n const session = await signupCompleteMutate({ token: t, acceptances });\n if (!session?.access_token || !session?.user_details_token) {\n throw new Error('Signup failed');\n }\n\n clearSignupConsentFlowData();\n\n sessionStore.setSession(session.user_details_token);\n sessionStore.setAccessToken(session.access_token);\n\n if (emailVerificationMode !== 'disabled') {\n if (emailVerificationMode === 'strict') {\n const targetUrl = getValidReturnUrl(route, '/');\n setEmailVerificationReturnUrl(targetUrl);\n }\n window.scrollTo(0, 0);\n const verifyPath = withReturnUrl('/auth/verify-email', returnUrl.value);\n await router.push(verifyPath);\n return;\n }\n\n window.scrollTo(0, 0);\n const defaultRedirect = getValidReturnUrl(route, '/');\n await router.push(defaultRedirect);\n toast.success('Registration successful! You are now logged in.');\n}\n\nasync function handleDecline() {\n declining.value = true;\n try {\n clearSignupConsentFlowData();\n const signupPath = withReturnUrl('/auth/signup', returnUrl.value);\n await router.push({ path: signupPath, query: { ...route.query, declined: '1' } });\n } finally {\n declining.value = false;\n }\n}\n\nasync function goBackToSignup() {\n goingBack.value = true;\n try {\n clearSignupConsentFlowData();\n const signupPath = withReturnUrl('/auth/signup', returnUrl.value);\n const { declined: _d, token: _t, ...rest } = route.query;\n await router.push({ path: signupPath, query: rest });\n } finally {\n goingBack.value = false;\n }\n}\n</script>\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SignupRequirementsPage-Cf-ElkEq.js","names":["consentItemFieldMetadata: {\n [K in PathsOf<typeof SignupConsentItemFormSchema>]: SchemaFieldMetadata;\n}","config: SignupRequirementsDto"],"sources":["../src/slices/admin/features/signup_requirements/signupRequirementsFormMetadata.ts","../src/slices/admin/features/signup_requirements/SignupRequirementsPage.vue"],"sourcesContent":["import {\n SignupConsentItemFormSchema,\n type SignupConsentItemFormDto,\n} from '@dragonmastery/dragoncore-shared';\nimport {\n withMetadata,\n type PathsOf,\n type SchemaFieldMetadata,\n} from '@dragonmastery/zinia-forms-core';\nimport { z } from 'zod';\n\n/** Field metadata for consent item form — keys must match schema paths */\nexport const consentItemFieldMetadata: {\n [K in PathsOf<typeof SignupConsentItemFormSchema>]: SchemaFieldMetadata;\n} = {\n type: {\n label: 'Type',\n helpText: 'Type (e.g. terms_of_service, privacy_policy)',\n placeholder: 'terms_of_service',\n },\n version: {\n label: 'Version',\n helpText: 'Version (e.g. 2025.1)',\n placeholder: '2025.1',\n },\n label: {\n label: 'Label',\n placeholder: 'Terms of Service',\n },\n effective_at: {\n label: 'Effective at',\n inputType: 'datetime-local',\n helpText:\n 'When this version becomes enforceable for existing users. Set to now for immediate effect.',\n },\n url: {\n label: 'URL',\n helpText: 'URL (link to document)',\n placeholder: 'https://example.com/terms',\n },\n required: {\n label: 'Required',\n helpText: 'User must accept to sign up',\n inputType: 'checkbox' as const,\n },\n content: {\n label: 'Content',\n helpText: 'Optional, Markdown — when set, shown in scroll box; user must scroll to bottom',\n placeholder: '# Terms of Service\\n\\nYour markdown content here...',\n inputType: 'textarea',\n },\n};\n\n/** Item schema with metadata - used as array element (like followupCreateMetadata in tracker) */\nexport const signupConsentItemFormMetadata = withMetadata(\n SignupConsentItemFormSchema,\n 'signupConsentItemForm',\n consentItemFieldMetadata,\n);\n\n/** Full form schema with items array using metadata-wrapped item schema */\nexport const signupRequirementsFormMetadata = withMetadata(\n z.object({\n items: z.array(signupConsentItemFormMetadata).default([]),\n }),\n 'signupRequirementsForm',\n {},\n);\n\nexport function createEmptyConsentItem(): SignupConsentItemFormDto {\n const now = new Date();\n const pad = (n: number) => String(n).padStart(2, '0');\n const effectiveAt = `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())}T${pad(now.getHours())}:${pad(now.getMinutes())}`;\n return {\n type: '',\n required: true,\n url: '',\n label: '',\n version: '1',\n effective_at: effectiveAt,\n content: '',\n };\n}\n","<template>\n <div class=\"mt-2\">\n <div class=\"flex justify-between items-center mb-4\">\n <h1 class=\"text-2xl font-bold\">Signup Requirements</h1>\n </div>\n\n <p class=\"text-base-content/70 mb-4\">\n Configure consent checkboxes shown on signup and consent-required flows. Each item can be\n required or optional. When <strong>content</strong> is provided, terms are shown in a\n scroll box (Markdown supported) and the user must scroll to bottom before accepting. When\n content is omitted, only a link is shown.\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 <div v-else class=\"space-y-6\">\n <ZiniaForm\n @handle-submit=\"handleSubmit\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n title=\"\"\n subtitle=\"\"\n >\n <zinia.ItemsField label=\"Consent Items\" :create-item=\"createEmptyConsentItem\">\n <template #itemPreview=\"{ item }\">\n <div class=\"font-medium text-sm\">\n {{ item.label || item.type || 'Item' }}\n <span v-if=\"item.type\" class=\"text-base-content/60\">({{ item.type }})</span>\n </div>\n </template>\n <template #itemRenderer=\"{ fields }\">\n <div class=\"space-y-3\">\n <div class=\"grid grid-cols-1 md:grid-cols-3 gap-3\">\n <ziniaGeneric.TextField\n :name=\"fields.type\"\n :label=\"consentItemFieldMetadata.type.label\"\n :placeholder=\"consentItemFieldMetadata.type.placeholder\"\n required\n />\n <ziniaGeneric.TextField\n :name=\"fields.version\"\n :label=\"consentItemFieldMetadata.version.label\"\n :placeholder=\"consentItemFieldMetadata.version.placeholder\"\n required\n />\n <ziniaGeneric.TextField\n :name=\"fields.label\"\n :label=\"consentItemFieldMetadata.label.label\"\n :placeholder=\"consentItemFieldMetadata.label.placeholder\"\n required\n />\n </div>\n <ziniaGeneric.DateField\n :name=\"fields.effective_at\"\n :label=\"consentItemFieldMetadata.effective_at.label\"\n :formatter=\"formatToISODatetime\"\n required\n />\n <ziniaGeneric.TextField\n :name=\"fields.url\"\n :label=\"consentItemFieldMetadata.url.label\"\n :placeholder=\"consentItemFieldMetadata.url.placeholder\"\n type=\"url\"\n />\n <ziniaGeneric.CheckboxField\n :name=\"fields.required\"\n :label=\"consentItemFieldMetadata.required.label\"\n />\n <ziniaGeneric.TextareaField\n :name=\"fields.content\"\n :label=\"consentItemFieldMetadata.content.label\"\n :placeholder=\"consentItemFieldMetadata.content.placeholder\"\n :rows=\"5\"\n class=\"font-mono text-sm\"\n />\n </div>\n </template>\n </zinia.ItemsField>\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 :disabled=\"!hasChanges\"\n />\n </div>\n </ZiniaForm>\n\n <!-- Version History -->\n <div class=\"card bg-base-200\">\n <div class=\"card-body\">\n <h2 class=\"card-title text-lg\">Version History</h2>\n <p class=\"text-sm text-base-content/70\">\n Past changes to signup requirements. Each save creates a new version.\n </p>\n <RecordVersionList\n :versions=\"versionHistoryItems\"\n :loading=\"versionHistoryLoading\"\n :error=\"versionHistoryError\"\n :has-next-page=\"versionHistoryPageInfo?.hasNextPage ?? false\"\n :loading-more=\"versionHistoryLoadingMore\"\n :config=\"versionListConfig\"\n exclude-latest\n @retry=\"refetchVersionHistory\"\n @load-more=\"loadMoreVersions\"\n />\n <dialog ref=\"versionModalRef\" class=\"modal\">\n <div class=\"modal-box max-w-4xl max-h-[90vh] overflow-auto\">\n <RecordVersionViewer\n v-if=\"selectedVersion\"\n :version=\"selectedVersion\"\n :record-data=\"selectedVersionRecordData\"\n :config=\"versionViewerConfig\"\n >\n <template #content=\"{ recordData }\">\n <div v-if=\"recordData?.items?.length\" class=\"space-y-4\">\n <h3 class=\"font-semibold\">Consent items at this version</h3>\n <div\n v-for=\"(item, idx) in recordData.items\"\n :key=\"idx\"\n class=\"border border-base-300 rounded p-3 text-sm space-y-1\"\n >\n <div><strong>Type:</strong> {{ item.type }}</div>\n <div><strong>Version:</strong> {{ item.version }}</div>\n <div><strong>Label:</strong> {{ item.label }}</div>\n <div><strong>Effective at:</strong> {{ item.effective_at }}</div>\n <div><strong>Required:</strong> {{ item.required ? 'Yes' : 'No' }}</div>\n <div v-if=\"item.url\"><strong>URL:</strong> {{ item.url }}</div>\n </div>\n </div>\n <pre v-else class=\"text-xs bg-base-200 p-3 rounded overflow-auto max-h-96\">{{\n JSON.stringify(recordData, null, 2)\n }}</pre>\n </template>\n </RecordVersionViewer>\n </div>\n <form method=\"dialog\" class=\"modal-backdrop\">\n <button type=\"button\" @click=\"closeVersionModal\">close</button>\n </form>\n </dialog>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { SignupRequirementsDto } from '@dragonmastery/dragoncore-shared';\nimport { RecordConst } from '@dragonmastery/dragoncore-shared';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { computed, ref } from 'vue';\nimport { toast } from 'vue3-toastify';\nimport RecordVersionList from '../../../../components/ui/RecordVersionList.vue';\nimport RecordVersionViewer from '../../../../components/ui/RecordVersionViewer.vue';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useQuery } from '../../../../composables/useQuery';\nimport { formatToISODatetime } from '../../../../utils/convertToLocalDateTime';\nimport { extractRpcErrorMessage } from '../../../../utils/extractRpcErrorMessage';\nimport {\n consentItemFieldMetadata,\n createEmptyConsentItem,\n signupRequirementsFormMetadata,\n} from './signupRequirementsFormMetadata';\n\nconst {\n data: _signupRequirements,\n loading: isLoading,\n refetch,\n} = useQuery((api) => api.appSettings.getSignupRequirements(), {\n // cacheKey: 'admin-signup-requirements',\n // staleTime: 30 * 1000,\n});\n\nconst { form, zinia, ziniaGeneric, ZiniaForm, ZiniaSubmitButton } = useForm(\n signupRequirementsFormMetadata,\n {\n storeName: 'admin-signup-requirements-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n // wait for signup requirements to load\n fetchData: async () => {\n while (isLoading.value) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n return { items: _signupRequirements.value ?? [] };\n },\n },\n);\n\nconst initialSnapshot = ref<string>('');\n\nconst hasChanges = computed(() => {\n const current = form.values?.items ?? [];\n return JSON.stringify(current) !== initialSnapshot.value;\n});\n\nconst { mutate: updateSignupRequirements } = useMutation(\n (api, config: SignupRequirementsDto) => api.appSettings.updateSignupRequirements(config),\n { invalidate: /admin-signup-requirements/ },\n);\n\nasync function handleSubmit(formData: {\n items: Array<{\n type: string;\n required: boolean;\n url: string;\n label: string;\n version: string;\n effective_at: string;\n content?: string | null;\n }>;\n}) {\n const config: SignupRequirementsDto = formData.items.map((c) => ({\n type: c.type.trim() || 'unknown',\n required: c.required,\n url: c.url.trim(),\n label: c.label.trim() || c.type.trim() || 'Consent',\n version: c.version.trim() || '1',\n effective_at:\n (c.effective_at?.trim()\n ? formatToISODatetime(c.effective_at.trim())\n : formatToISODatetime(new Date().toISOString())) ?? new Date().toISOString(),\n content: c.content?.trim() ? c.content.trim() : undefined,\n }));\n await updateSignupRequirements(config);\n}\n\nasync function handleSuccess() {\n toast.success('Signup requirements saved');\n initialSnapshot.value = JSON.stringify(form.values?.items ?? []);\n await refetch();\n await refetchVersionHistory();\n}\n\nfunction handleError(error: Error | unknown) {\n const message = error instanceof Error ? error.message : 'An unknown error occurred';\n form.setSubmitError(extractRpcErrorMessage(error, message));\n toast.error(form.submitError ?? 'Failed to save signup requirements');\n}\n\n// Version history\nconst VERSION_HISTORY_KEY = 'admin-signup-requirements-history';\n\nconst {\n data: versionHistoryData,\n loading: versionHistoryLoading,\n error: versionHistoryError,\n refetch: refetchVersionHistory,\n} = useQuery(\n async (api) =>\n api.recordVersions.listRecordVersionsPaginated(\n 'signup_requirements',\n RecordConst.APP_SETTING,\n {\n first: 50,\n sortBy: 'recorded_at',\n sortDirection: 'desc',\n },\n ),\n {\n cacheKey: VERSION_HISTORY_KEY,\n staleTime: 60 * 1000,\n },\n);\n\nconst versionHistoryItems = computed(() => versionHistoryData.value?.items ?? []);\nconst versionHistoryPageInfo = computed(() => versionHistoryData.value?.pageInfo);\nconst versionHistoryLoadingMore = ref(false);\n\nfunction loadMoreVersions() {\n // Pagination: could add cursor-based load more if needed\n}\n\nconst versionListConfig = {\n recordDisplayName: 'signup requirements',\n noVersionsText: 'No previous versions. Save changes to create the first version.',\n viewAction: (version: { id: string }) => openVersionModal(version),\n viewActionText: 'View',\n};\n\nconst versionModalRef = ref<HTMLDialogElement | null>(null);\nconst selectedVersion = ref<{\n id: string;\n operation: string;\n recorded_at: string;\n auth_username?: string | null;\n record?: unknown;\n old_record?: unknown;\n} | null>(null);\n\nconst selectedVersionRecordData = computed(() => {\n if (!selectedVersion.value) return null;\n const v = selectedVersion.value;\n const record = v.record;\n if (Array.isArray(record)) return { items: record };\n if (typeof record === 'object' && record !== null) return record;\n if (typeof record === 'string') {\n try {\n const parsed = JSON.parse(record);\n return Array.isArray(parsed) ? { items: parsed } : parsed;\n } catch {\n return { raw: record };\n }\n }\n return null;\n});\n\nconst versionViewerConfig = {\n recordDisplayName: 'signup requirements',\n title: 'Signup Requirements Version',\n onBack: () => closeVersionModal(),\n excludeFields: ['raw'],\n};\n\nfunction openVersionModal(version: { id: string; record?: unknown; old_record?: unknown }) {\n selectedVersion.value = version as typeof selectedVersion.value;\n versionModalRef.value?.showModal();\n}\n\nfunction closeVersionModal() {\n selectedVersion.value = null;\n versionModalRef.value?.close();\n}\n</script>\n"],"mappings":"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"}
|