@dragonmastery/dragoncore-vue 0.0.17 → 0.0.18

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.
Files changed (109) hide show
  1. package/dist/CreateTeamForm-LadKAxsM.js +32 -0
  2. package/dist/CreateTeamMemberForm-eWL__TEt.js +32 -0
  3. package/dist/CreditBalanceDashboard-CgRRO6MD.js +32 -0
  4. package/dist/CreditManagement-BBb_Xumq.js +32 -0
  5. package/dist/CustomerCreateSupportTicketForm-yfyeXr0V.js +32 -0
  6. package/dist/{CustomerSupportTicketDetailPage-CPnNMJRz.js → CustomerSupportTicketDetailPage-CthS9akm.js} +2 -2
  7. package/dist/{CustomerSupportTicketDetailPage-CPnNMJRz.js.map → CustomerSupportTicketDetailPage-CthS9akm.js.map} +1 -1
  8. package/dist/CustomerSupportTicketList-Zzsg1FtO.js +32 -0
  9. package/dist/{CustomerSupportTicketParent-Ex-sumQ_.js → CustomerSupportTicketParent-CqR8lF7r.js} +2 -2
  10. package/dist/{CustomerSupportTicketParent-C_vgUq3B.js → CustomerSupportTicketParent-iBV1KRKL.js} +2 -2
  11. package/dist/{CustomerSupportTicketParent-C_vgUq3B.js.map → CustomerSupportTicketParent-iBV1KRKL.js.map} +1 -1
  12. package/dist/CustomerSupportTicketSuccess-BPyydSLQ.js +32 -0
  13. package/dist/EditTeamForm-D0wZKYm2.js +32 -0
  14. package/dist/{EditTeamMemberForm-y4Klbm2x.js → EditTeamMemberForm-Cy8nzoUb.js} +1 -1
  15. package/dist/{EditTeamMemberForm-y4Klbm2x.js.map → EditTeamMemberForm-Cy8nzoUb.js.map} +1 -1
  16. package/dist/{EditTeamMemberForm-8CNRrEIT.js → EditTeamMemberForm-JuRGiWOn.js} +1 -1
  17. package/dist/{EditUserPage-0lqrgP5T.js → EditUserPage-CIRqNko-.js} +2 -2
  18. package/dist/{EditUserPage-0lqrgP5T.js.map → EditUserPage-CIRqNko-.js.map} +1 -1
  19. package/dist/{TeamNotesTab-BlmZQfCR.js → EditUserPage-Dl6d3Cuh.js} +2 -2
  20. package/dist/{ForgotPassword-CiEfdVT-.js → ForgotPassword-CJg_buPl.js} +2 -2
  21. package/dist/{ForgotPassword-CiEfdVT-.js.map → ForgotPassword-CJg_buPl.js.map} +1 -1
  22. package/dist/{ForgotPassword-DTqvZE3S.js → ForgotPassword-rSN-8EC4.js} +1 -1
  23. package/dist/{LoginForm-o4gJ0QwA.js → LoginForm-DyHmiC1I.js} +2 -2
  24. package/dist/{LoginForm-o4gJ0QwA.js.map → LoginForm-DyHmiC1I.js.map} +1 -1
  25. package/dist/{LoginForm-INwjqMmZ.js → LoginForm-YCzdrekw.js} +1 -1
  26. package/dist/{Logout-D8Ql8-OY.js → Logout-C6pWyTIm.js} +2 -2
  27. package/dist/{Logout-D8Ql8-OY.js.map → Logout-C6pWyTIm.js.map} +1 -1
  28. package/dist/{Logout-KA5WB93_.js → Logout-Ctc8b-B0.js} +1 -1
  29. package/dist/{MfaSetup-DzaJLZtx.js → MfaSetup-D80HhwEz.js} +2 -2
  30. package/dist/{MfaSetup-DzaJLZtx.js.map → MfaSetup-D80HhwEz.js.map} +1 -1
  31. package/dist/{MfaSetup-B3-QSuKe.js → MfaSetup-xNmNjSh1.js} +1 -1
  32. package/dist/{MfaVerify-C04XD4r3.js → MfaVerify-BEd-f6oV.js} +2 -2
  33. package/dist/{MfaVerify-C04XD4r3.js.map → MfaVerify-BEd-f6oV.js.map} +1 -1
  34. package/dist/{MfaVerify-5DOMPhdq.js → MfaVerify-C0COXH_W.js} +1 -1
  35. package/dist/{ResetPassword-DcVvfMU3.js → ResetPassword-4HLdgM7s.js} +2 -2
  36. package/dist/{ResetPassword-DcVvfMU3.js.map → ResetPassword-4HLdgM7s.js.map} +1 -1
  37. package/dist/{ResetPassword-rtEJreLv.js → ResetPassword-BCzMTXpT.js} +1 -1
  38. package/dist/{SavedFiltersPage-PfwukNXV.js → SavedFiltersPage-p0qGRIuN.js} +18 -18
  39. package/dist/{SavedFiltersPage-PfwukNXV.js.map → SavedFiltersPage-p0qGRIuN.js.map} +1 -1
  40. package/dist/{Signup-Wz2h_ayt.js → Signup-Ct0m0x78.js} +2 -2
  41. package/dist/{Signup-Wz2h_ayt.js.map → Signup-Ct0m0x78.js.map} +1 -1
  42. package/dist/{Signup-DWFxpoGA.js → Signup-DNEklGpK.js} +1 -1
  43. package/dist/StaffCreateSupportTicketForm-CxpKnqCq.js +32 -0
  44. package/dist/{StaffSupportTicketDetailPage-DDkJcKVC.js → StaffSupportTicketDetailPage-TaAPQARa.js} +3 -3
  45. package/dist/{StaffSupportTicketDetailPage-DDkJcKVC.js.map → StaffSupportTicketDetailPage-TaAPQARa.js.map} +1 -1
  46. package/dist/StaffSupportTicketList-BuKBTk2v.js +32 -0
  47. package/dist/{StaffSupportTicketParent-Bp5pNF45.js → StaffSupportTicketParent-KYzy4eb4.js} +2 -2
  48. package/dist/{StaffSupportTicketParent-Bp5pNF45.js.map → StaffSupportTicketParent-KYzy4eb4.js.map} +1 -1
  49. package/dist/{StaffSupportTicketParent-BiyZAW5w.js → StaffSupportTicketParent-Lkn-5u7C.js} +2 -2
  50. package/dist/StaffSupportTicketSuccess-BD1Xsnx1.js +32 -0
  51. package/dist/{SupportStaffPage-DwILSSas.js → SupportStaffPage-D_YsHZZa.js} +3 -3
  52. package/dist/{SupportStaffPage-DwILSSas.js.map → SupportStaffPage-D_YsHZZa.js.map} +1 -1
  53. package/dist/TeamAttachmentsTab-DA_MBYj8.js +32 -0
  54. package/dist/{TeamHistoryTab-B3DvaIzC.js → TeamHistoryTab-BQ-eXtiw.js} +2 -2
  55. package/dist/{TeamHistoryTab-B3DvaIzC.js.map → TeamHistoryTab-BQ-eXtiw.js.map} +1 -1
  56. package/dist/TeamHistoryTab-lz2ouNyP.js +4 -0
  57. package/dist/TeamList-T3mZJTzq.js +32 -0
  58. package/dist/TeamMemberList-BW4qqzC1.js +32 -0
  59. package/dist/TeamMemberParent-Wcht0pIz.js +32 -0
  60. package/dist/{TeamNotesTab-DBrJGCIe.js → TeamNotesTab-Dj12Q2gD.js} +2 -2
  61. package/dist/{TeamNotesTab-DBrJGCIe.js.map → TeamNotesTab-Dj12Q2gD.js.map} +1 -1
  62. package/dist/{EditUserPage-BgMNOa8G.js → TeamNotesTab-aGD8O49y.js} +2 -2
  63. package/dist/TeamParent-BkhaJwud.js +32 -0
  64. package/dist/UserListPage-C9zUjaOK.js +4 -0
  65. package/dist/{UserListPage-BGDgsd_S.js → UserListPage-D-IdlsHK.js} +2 -2
  66. package/dist/{UserListPage-BGDgsd_S.js.map → UserListPage-D-IdlsHK.js.map} +1 -1
  67. package/dist/{VerifyEmail-CG1BHGSh.js → VerifyEmail-5thal4d_.js} +1 -1
  68. package/dist/{VerifyEmail-CUexC8mg.js → VerifyEmail-CHfTzrHg.js} +2 -2
  69. package/dist/{VerifyEmail-CUexC8mg.js.map → VerifyEmail-CHfTzrHg.js.map} +1 -1
  70. package/dist/{VerifyEmailRequired-C35bkaXZ.js → VerifyEmailRequired-BCKREd_C.js} +2 -2
  71. package/dist/{VerifyEmailRequired-C35bkaXZ.js.map → VerifyEmailRequired-BCKREd_C.js.map} +1 -1
  72. package/dist/ViewTeam-g7WhYvsR.js +32 -0
  73. package/dist/ViewTeamMember-ByCSsl5k.js +32 -0
  74. package/dist/{convertToLocalDateTime-DOSGtMn8.js → convertToLocalDateTime-mKs5eC9T.js} +1 -1
  75. package/dist/{convertToLocalDateTime-DOSGtMn8.js.map → convertToLocalDateTime-mKs5eC9T.js.map} +1 -1
  76. package/dist/{extractRpcErrorMessage-C_UbKgHL.js → extractRpcErrorMessage-pP3v8kKE.js} +1 -1
  77. package/dist/{extractRpcErrorMessage-C_UbKgHL.js.map → extractRpcErrorMessage-pP3v8kKE.js.map} +1 -1
  78. package/dist/index.d.ts +802 -788
  79. package/dist/index.js +21 -21
  80. package/dist/{src-DYBi81fS.js → src-B5eswi_J.js} +50 -47
  81. package/dist/src-B5eswi_J.js.map +1 -0
  82. package/dist/{useBreadcrumbs-DmgSucoe.js → useBreadcrumbs-B-W-miq6.js} +1 -1
  83. package/dist/{useBreadcrumbs-DmgSucoe.js.map → useBreadcrumbs-B-W-miq6.js.map} +1 -1
  84. package/dist/useReturnUrl-BBoPnDR3.js +51 -0
  85. package/dist/useReturnUrl-BBoPnDR3.js.map +1 -0
  86. package/package.json +1 -1
  87. package/dist/CreateTeamForm-DH0k3ra-.js +0 -32
  88. package/dist/CreateTeamMemberForm-DR0krDAy.js +0 -32
  89. package/dist/CreditBalanceDashboard-Bh6G7DdM.js +0 -32
  90. package/dist/CreditManagement-BGqIkJf8.js +0 -32
  91. package/dist/CustomerCreateSupportTicketForm-DROOc8QU.js +0 -32
  92. package/dist/CustomerSupportTicketList-BdCyjYTK.js +0 -32
  93. package/dist/CustomerSupportTicketSuccess-BiccWyEb.js +0 -32
  94. package/dist/EditTeamForm-COtlNY2k.js +0 -32
  95. package/dist/StaffCreateSupportTicketForm-Cs3puA0j.js +0 -32
  96. package/dist/StaffSupportTicketList-B3HBQJ9r.js +0 -32
  97. package/dist/StaffSupportTicketSuccess-CegCdk-v.js +0 -32
  98. package/dist/TeamAttachmentsTab-B6_qHPKJ.js +0 -32
  99. package/dist/TeamHistoryTab-HXc3zqhQ.js +0 -4
  100. package/dist/TeamList-DrMqaMvI.js +0 -32
  101. package/dist/TeamMemberList-CEV6-g3t.js +0 -32
  102. package/dist/TeamMemberParent-D-MnEdRq.js +0 -32
  103. package/dist/TeamParent-Dw6Njuup.js +0 -32
  104. package/dist/UserListPage-BZp9fGeT.js +0 -4
  105. package/dist/ViewTeam-D9PDDpY6.js +0 -32
  106. package/dist/ViewTeamMember-sJb79wUy.js +0 -32
  107. package/dist/src-DYBi81fS.js.map +0 -1
  108. package/dist/useReturnUrl-DobHOKp3.js +0 -23
  109. package/dist/useReturnUrl-DobHOKp3.js.map +0 -1
@@ -0,0 +1,32 @@
1
+ import "./useRpcAuth-SgNzCAPa.js";
2
+ import "./useQueryCache-DIGf3fCM.js";
3
+ import "./useMutation-DzRSXPB1.js";
4
+ import "./useQuery-bvJabe9Q.js";
5
+ import { w as StaffSupportTicketList_default } from "./src-B5eswi_J.js";
6
+ import "./AppLink-CHMMrSFI.js";
7
+ import "./TimelineSystemEvent-CBwUl5G8.js";
8
+ import "./TeamMembersTab-4gmnP9sD.js";
9
+ import "./Appearance-BfPdKMXw.js";
10
+ import "./useBreadcrumbs-B-W-miq6.js";
11
+ import "./EditTeamMemberForm-Cy8nzoUb.js";
12
+ import "./TeamHistoryTab-BQ-eXtiw.js";
13
+ import "./UserProfilePage-DMwDVgXa.js";
14
+ import "./ChangePasswordPage-D2Ci00Sh.js";
15
+ import "./TeamNotesTab-Dj12Q2gD.js";
16
+ import "./CustomerSupportTicketParent-iBV1KRKL.js";
17
+ import "./SupportTicketDevLifecycleBadge-B2NysMAj.js";
18
+ import "./StaffSupportTicketParent-KYzy4eb4.js";
19
+ import "./LoginForm-DyHmiC1I.js";
20
+ import "./Signup-Ct0m0x78.js";
21
+ import "./ForgotPassword-CJg_buPl.js";
22
+ import "./ResetPassword-4HLdgM7s.js";
23
+ import "./Logout-C6pWyTIm.js";
24
+ import "./mfaSchema-_vbG9jiT.js";
25
+ import "./MfaSetup-D80HhwEz.js";
26
+ import "./MfaVerify-BEd-f6oV.js";
27
+ import "./VerifyEmail-CHfTzrHg.js";
28
+ import "./UserListPage-D-IdlsHK.js";
29
+ import "./CreateUserPage-DbT_l32W.js";
30
+ import "./EditUserPage-CIRqNko-.js";
31
+
32
+ export { StaffSupportTicketList_default as default };
@@ -1,5 +1,5 @@
1
1
  import { t as useQuery } from "./useQuery-bvJabe9Q.js";
2
- import { n as useBreadcrumbs } from "./useBreadcrumbs-DmgSucoe.js";
2
+ import { n as useBreadcrumbs } from "./useBreadcrumbs-B-W-miq6.js";
3
3
  import { t as formatTicketDisplayId } from "./displayIdFormatter-rSbbsHIX.js";
4
4
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, openBlock, provide, resolveComponent, toDisplayString, unref } from "vue";
5
5
  import { useRoute } from "vue-router";
@@ -63,4 +63,4 @@ var StaffSupportTicketParent_default = _sfc_main;
63
63
 
64
64
  //#endregion
65
65
  export { StaffSupportTicketParent_default as t };
66
- //# sourceMappingURL=StaffSupportTicketParent-Bp5pNF45.js.map
66
+ //# sourceMappingURL=StaffSupportTicketParent-KYzy4eb4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StaffSupportTicketParent-Bp5pNF45.js","names":[],"sources":["../src/slices/support_ticket/staff/StaffSupportTicketParent.vue"],"sourcesContent":["<template>\n <!-- Only show full-page spinner on initial load; refetch keeps content visible -->\n <div v-if=\"isLoading && !ticket\" 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=\"error && !ticket\" 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>{{ error.message }}</span>\n </div>\n\n <RouterView v-else :ticket=\"ticket\" :isLoading=\"isLoading\" :error=\"error\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { useBreadcrumbs } from '../../../composables/useBreadcrumbs';\nimport { useQuery } from '../../../composables/useQuery';\nimport { computed, provide } from 'vue';\nimport { useRoute } from 'vue-router';\nimport { formatTicketDisplayId } from '../utils/displayIdFormatter';\n\nconst route = useRoute();\nconst ticketId = route.params.id as string;\n\n// Fetch ticket data once at parent level\nconst {\n data,\n loading: isLoading,\n error,\n refetch,\n} = useQuery((api) => api.supportTickets.staffGetTicket(ticketId), {});\n\nconst ticket = computed(() => data.value ?? null);\n\n// Provide refresh function to child components\nconst refreshTicket = async () => {\n await refetch();\n};\n\nprovide('refreshTicket', refreshTicket);\n\n// Manage breadcrumbs at parent level\nuseBreadcrumbs(() => [\n {\n label: 'Staff Support',\n to: { name: 'StaffSupportTicketList' },\n },\n {\n label: ticket.value\n ? formatTicketDisplayId(\n ticket.value.display_id,\n ticket.value.display_id_prefix,\n ticket.value.id,\n )\n : '',\n loading: !ticket.value,\n to: {\n name: 'StaffEditSupportTicket',\n params: { id: ticketId },\n },\n },\n]);\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAkCA,MAAM,WADQ,UAAU,CACD,OAAO;EAG9B,MAAM,EACJ,MACA,SAAS,WACT,OACA,YACE,UAAU,QAAQ,IAAI,eAAe,eAAe,SAAS,EAAE,EAAE,CAAC;EAEtE,MAAM,SAAS,eAAe,KAAK,SAAS,KAAK;EAGjD,MAAM,gBAAgB,YAAY;AAChC,SAAM,SAAS;;AAGjB,UAAQ,iBAAiB,cAAc;AAGvC,uBAAqB,CACnB;GACE,OAAO;GACP,IAAI,EAAE,MAAM,0BAA0B;GACvC,EACD;GACE,OAAO,OAAO,QACV,sBACE,OAAO,MAAM,YACb,OAAO,MAAM,mBACb,OAAO,MAAM,GACf,GACA;GACJ,SAAS,CAAC,OAAO;GACjB,IAAI;IACF,MAAM;IACN,QAAQ,EAAE,IAAI,UAAU;IACzB;GACF,CACF,CAAC;;;2DAxEA,mBAAA,+EAAmF,EACxE,MAAA,UAAS,IAAA,CAAK,OAAA,SAAA,WAAA,EAAzB,mBAEM,OAFN,YAEM,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CADJ,mBAAwD,QAAA,EAAlD,OAAM,sCAAoC,EAAA,MAAA,GAAA,CAAA,EAAA,CAAA,IAGlC,MAAA,MAAK,IAAA,CAAK,OAAA,SAAA,WAAA,EAA1B,mBAeM,OAfN,YAeM,CAAA,OAAA,OAAA,OAAA,KAdJ,mBAYM,OAAA;IAXJ,OAAM;IACN,OAAM;IACN,MAAK;IACL,SAAQ;OAER,mBAKE,QAAA;IAJA,kBAAe;IACf,mBAAgB;IAChB,gBAAa;IACb,GAAE;cAGN,mBAAgC,QAAA,MAAA,gBAAvB,MAAA,MAAK,CAAC,QAAO,EAAA,EAAA,CAAA,CAAA,KAAA,WAAA,EAGxB,YAA4E,uBAAA;;IAAxD,QAAQ,OAAA;IAAS,WAAW,MAAA,UAAS;IAAG,OAAO,MAAA,MAAK"}
1
+ {"version":3,"file":"StaffSupportTicketParent-KYzy4eb4.js","names":[],"sources":["../src/slices/support_ticket/staff/StaffSupportTicketParent.vue"],"sourcesContent":["<template>\n <!-- Only show full-page spinner on initial load; refetch keeps content visible -->\n <div v-if=\"isLoading && !ticket\" 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=\"error && !ticket\" 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>{{ error.message }}</span>\n </div>\n\n <RouterView v-else :ticket=\"ticket\" :isLoading=\"isLoading\" :error=\"error\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { useBreadcrumbs } from '../../../composables/useBreadcrumbs';\nimport { useQuery } from '../../../composables/useQuery';\nimport { computed, provide } from 'vue';\nimport { useRoute } from 'vue-router';\nimport { formatTicketDisplayId } from '../utils/displayIdFormatter';\n\nconst route = useRoute();\nconst ticketId = route.params.id as string;\n\n// Fetch ticket data once at parent level\nconst {\n data,\n loading: isLoading,\n error,\n refetch,\n} = useQuery((api) => api.supportTickets.staffGetTicket(ticketId), {});\n\nconst ticket = computed(() => data.value ?? null);\n\n// Provide refresh function to child components\nconst refreshTicket = async () => {\n await refetch();\n};\n\nprovide('refreshTicket', refreshTicket);\n\n// Manage breadcrumbs at parent level\nuseBreadcrumbs(() => [\n {\n label: 'Staff Support',\n to: { name: 'StaffSupportTicketList' },\n },\n {\n label: ticket.value\n ? formatTicketDisplayId(\n ticket.value.display_id,\n ticket.value.display_id_prefix,\n ticket.value.id,\n )\n : '',\n loading: !ticket.value,\n to: {\n name: 'StaffEditSupportTicket',\n params: { id: ticketId },\n },\n },\n]);\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAkCA,MAAM,WADQ,UAAU,CACD,OAAO;EAG9B,MAAM,EACJ,MACA,SAAS,WACT,OACA,YACE,UAAU,QAAQ,IAAI,eAAe,eAAe,SAAS,EAAE,EAAE,CAAC;EAEtE,MAAM,SAAS,eAAe,KAAK,SAAS,KAAK;EAGjD,MAAM,gBAAgB,YAAY;AAChC,SAAM,SAAS;;AAGjB,UAAQ,iBAAiB,cAAc;AAGvC,uBAAqB,CACnB;GACE,OAAO;GACP,IAAI,EAAE,MAAM,0BAA0B;GACvC,EACD;GACE,OAAO,OAAO,QACV,sBACE,OAAO,MAAM,YACb,OAAO,MAAM,mBACb,OAAO,MAAM,GACf,GACA;GACJ,SAAS,CAAC,OAAO;GACjB,IAAI;IACF,MAAM;IACN,QAAQ,EAAE,IAAI,UAAU;IACzB;GACF,CACF,CAAC;;;2DAxEA,mBAAA,+EAAmF,EACxE,MAAA,UAAS,IAAA,CAAK,OAAA,SAAA,WAAA,EAAzB,mBAEM,OAFN,YAEM,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CADJ,mBAAwD,QAAA,EAAlD,OAAM,sCAAoC,EAAA,MAAA,GAAA,CAAA,EAAA,CAAA,IAGlC,MAAA,MAAK,IAAA,CAAK,OAAA,SAAA,WAAA,EAA1B,mBAeM,OAfN,YAeM,CAAA,OAAA,OAAA,OAAA,KAdJ,mBAYM,OAAA;IAXJ,OAAM;IACN,OAAM;IACN,MAAK;IACL,SAAQ;OAER,mBAKE,QAAA;IAJA,kBAAe;IACf,mBAAgB;IAChB,gBAAa;IACb,GAAE;cAGN,mBAAgC,QAAA,MAAA,gBAAvB,MAAA,MAAK,CAAC,QAAO,EAAA,EAAA,CAAA,CAAA,KAAA,WAAA,EAGxB,YAA4E,uBAAA;;IAAxD,QAAQ,OAAA;IAAS,WAAW,MAAA,UAAS;IAAG,OAAO,MAAA,MAAK"}
@@ -1,7 +1,7 @@
1
1
  import "./useRpcAuth-SgNzCAPa.js";
2
2
  import "./useQueryCache-DIGf3fCM.js";
3
3
  import "./useQuery-bvJabe9Q.js";
4
- import "./useBreadcrumbs-DmgSucoe.js";
5
- import { t as StaffSupportTicketParent_default } from "./StaffSupportTicketParent-Bp5pNF45.js";
4
+ import "./useBreadcrumbs-B-W-miq6.js";
5
+ import { t as StaffSupportTicketParent_default } from "./StaffSupportTicketParent-KYzy4eb4.js";
6
6
 
7
7
  export { StaffSupportTicketParent_default as default };
@@ -0,0 +1,32 @@
1
+ import "./useRpcAuth-SgNzCAPa.js";
2
+ import "./useQueryCache-DIGf3fCM.js";
3
+ import "./useMutation-DzRSXPB1.js";
4
+ import "./useQuery-bvJabe9Q.js";
5
+ import { C as StaffSupportTicketSuccess_default } from "./src-B5eswi_J.js";
6
+ import "./AppLink-CHMMrSFI.js";
7
+ import "./TimelineSystemEvent-CBwUl5G8.js";
8
+ import "./TeamMembersTab-4gmnP9sD.js";
9
+ import "./Appearance-BfPdKMXw.js";
10
+ import "./useBreadcrumbs-B-W-miq6.js";
11
+ import "./EditTeamMemberForm-Cy8nzoUb.js";
12
+ import "./TeamHistoryTab-BQ-eXtiw.js";
13
+ import "./UserProfilePage-DMwDVgXa.js";
14
+ import "./ChangePasswordPage-D2Ci00Sh.js";
15
+ import "./TeamNotesTab-Dj12Q2gD.js";
16
+ import "./CustomerSupportTicketParent-iBV1KRKL.js";
17
+ import "./SupportTicketDevLifecycleBadge-B2NysMAj.js";
18
+ import "./StaffSupportTicketParent-KYzy4eb4.js";
19
+ import "./LoginForm-DyHmiC1I.js";
20
+ import "./Signup-Ct0m0x78.js";
21
+ import "./ForgotPassword-CJg_buPl.js";
22
+ import "./ResetPassword-4HLdgM7s.js";
23
+ import "./Logout-C6pWyTIm.js";
24
+ import "./mfaSchema-_vbG9jiT.js";
25
+ import "./MfaSetup-D80HhwEz.js";
26
+ import "./MfaVerify-BEd-f6oV.js";
27
+ import "./VerifyEmail-CHfTzrHg.js";
28
+ import "./UserListPage-D-IdlsHK.js";
29
+ import "./CreateUserPage-DbT_l32W.js";
30
+ import "./EditUserPage-CIRqNko-.js";
31
+
32
+ export { StaffSupportTicketSuccess_default as default };
@@ -2,8 +2,8 @@ import { r as executeWithAuth, s as getRefreshTokenHandler, t as BATCH_MODE } fr
2
2
  import "./useQueryCache-DIGf3fCM.js";
3
3
  import { t as useMutation } from "./useMutation-DzRSXPB1.js";
4
4
  import { t as useQuery } from "./useQuery-bvJabe9Q.js";
5
- import { t as formatSystemTimestamp } from "./convertToLocalDateTime-DOSGtMn8.js";
6
- import { t as extractRpcErrorMessage } from "./extractRpcErrorMessage-C_UbKgHL.js";
5
+ import { t as formatSystemTimestamp } from "./convertToLocalDateTime-mKs5eC9T.js";
6
+ import { t as extractRpcErrorMessage } from "./extractRpcErrorMessage-pP3v8kKE.js";
7
7
  import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, openBlock, ref, renderList, toDisplayString, unref, vModelSelect, watch, withDirectives } from "vue";
8
8
  import { toast } from "vue3-toastify";
9
9
 
@@ -153,4 +153,4 @@ var SupportStaffPage_default = _sfc_main;
153
153
 
154
154
  //#endregion
155
155
  export { SupportStaffPage_default as default };
156
- //# sourceMappingURL=SupportStaffPage-DwILSSas.js.map
156
+ //# sourceMappingURL=SupportStaffPage-D_YsHZZa.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SupportStaffPage-DwILSSas.js","names":[],"sources":["../src/slices/admin/features/support_staff/SupportStaffPage.vue"],"sourcesContent":["<template>\n <div class=\"mt-2\">\n <div class=\"flex justify-between items-center mb-4\">\n <h1 class=\"text-2xl font-bold\">Support Staff</h1>\n </div>\n\n <p class=\"text-base-content/70 mb-4\">\n Users who can triage support tickets. They receive round-robin assignment when new tickets are created.\n </p>\n\n <!-- Add support staff -->\n <div class=\"card bg-base-200 mb-6\">\n <div class=\"card-body\">\n <h2 class=\"card-title text-lg\">Add Support Staff</h2>\n <div class=\"flex flex-wrap items-end gap-4\">\n <div class=\"form-control flex-1 min-w-[200px]\">\n <label class=\"label\">\n <span class=\"label-text\">User</span>\n </label>\n <select\n v-model=\"selectedUserId\"\n class=\"select select-bordered w-full\"\n :disabled=\"isAdding || !addableUsers.length\"\n >\n <option value=\"\">Select a user...</option>\n <option\n v-for=\"u in addableUsers\"\n :key=\"u.id\"\n :value=\"u.id\"\n >\n {{ u.email }} ({{ u.user_type }})\n </option>\n </select>\n <p v-if=\"!addableUsers.length && !isLoading\" class=\"text-sm text-base-content/50 mt-1\">\n All staff users are already support staff.\n </p>\n </div>\n <button\n class=\"btn btn-primary\"\n :disabled=\"!selectedUserId || isAdding\"\n @click=\"handleAdd\"\n >\n <span v-if=\"isAdding\" class=\"loading loading-spinner loading-sm\"></span>\n {{ isAdding ? 'Adding...' : 'Add' }}\n </button>\n </div>\n <p v-if=\"addError\" class=\"text-sm text-error mt-2\">{{ addError }}</p>\n </div>\n </div>\n\n <!-- List -->\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-if=\"!(supportStaffPageData?.members ?? []).length\" class=\"alert alert-info\">\n <span>No support staff yet. Add users above to enable triage assignment.</span>\n </div>\n\n <div v-else class=\"overflow-x-auto\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>Email</th>\n <th>Added</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"m in (supportStaffPageData?.members ?? [])\" :key=\"m.id\">\n <td>{{ m.email }}</td>\n <td>{{ formatDate(m.created_at) }}</td>\n <td>\n <button\n class=\"btn btn-sm btn-ghost text-error\"\n :disabled=\"isRemoving === m.user_id\"\n @click=\"handleRemove(m.user_id)\"\n >\n <span v-if=\"isRemoving === m.user_id\" class=\"loading loading-spinner loading-xs\"></span>\n {{ isRemoving === m.user_id ? 'Removing...' : 'Remove' }}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport { toast } from 'vue3-toastify';\nimport { BATCH_MODE } from '../../../../composables/useRpcAuth';\nimport { executeWithAuth } from '../../../../composables/useRpcAuth';\nimport { getRefreshTokenHandler } from '../../../../utils/EnhancedRefreshTokenHandler';\nimport { formatSystemTimestamp } from '../../../../utils/convertToLocalDateTime';\nimport { useQuery } from '../../../../composables/useQuery';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { extractRpcErrorMessage } from '../../../../utils/extractRpcErrorMessage';\n\nconst STAFF_TYPES = ['staff', 'super_admin'] as const;\n\nconst {\n data: supportStaffPageData,\n loading: isLoading,\n refetch,\n} = useQuery(\n async (api) => {\n const [members, allUsers] = await Promise.all([\n api.supportStaff.listSupportStaff(),\n api.users.listUsers(),\n ]);\n return { members, allUsers };\n },\n {\n cacheKey: 'support-staff-page',\n staleTime: 30 * 1000,\n batchMode: BATCH_MODE.batch,\n trackedSegment: 'support-staff-page',\n },\n);\n\nconst addableUsers = computed(() => {\n const users = supportStaffPageData.value?.allUsers ?? [];\n const staffIds = new Set((supportStaffPageData.value?.members ?? []).map((m) => m.user_id));\n return users.filter(\n (u) =>\n STAFF_TYPES.includes(u.user_type as (typeof STAFF_TYPES)[number]) &&\n !staffIds.has(u.id),\n );\n});\n\nconst selectedUserId = ref('');\nwatch(addableUsers, (users) => {\n if (!selectedUserId.value || !users.some((u) => u.id === selectedUserId.value)) {\n selectedUserId.value = '';\n }\n});\n\nconst { mutate: addSupportStaff, loading: isAdding } = useMutation(\n (api, userId: string) => api.supportStaff.addSupportStaff(userId),\n { invalidate: /support-staff|triage-users/ },\n);\n\nconst addError = ref<string | null>(null);\n\nasync function handleAdd() {\n if (!selectedUserId.value) return;\n addError.value = null;\n try {\n await addSupportStaff(selectedUserId.value);\n toast.success('Support staff added');\n selectedUserId.value = '';\n await refetch();\n } catch (e) {\n addError.value = extractRpcErrorMessage(e, 'Failed to add support staff');\n toast.error(addError.value);\n }\n}\n\nconst isRemoving = ref<string | null>(null);\n\nasync function handleRemove(userId: string) {\n isRemoving.value = userId;\n try {\n await executeWithAuth(\n async (api) => api.supportStaff.removeSupportStaff(userId),\n { refreshTokenHandler: getRefreshTokenHandler() },\n );\n toast.success('Support staff removed');\n await refetch();\n } catch (e) {\n toast.error(extractRpcErrorMessage(e, 'Failed to remove support staff'));\n } finally {\n isRemoving.value = null;\n }\n}\n\nfunction formatDate(s: string) {\n return formatSystemTimestamp(s);\n}\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"SupportStaffPage-D_YsHZZa.js","names":[],"sources":["../src/slices/admin/features/support_staff/SupportStaffPage.vue"],"sourcesContent":["<template>\n <div class=\"mt-2\">\n <div class=\"flex justify-between items-center mb-4\">\n <h1 class=\"text-2xl font-bold\">Support Staff</h1>\n </div>\n\n <p class=\"text-base-content/70 mb-4\">\n Users who can triage support tickets. They receive round-robin assignment when new tickets are created.\n </p>\n\n <!-- Add support staff -->\n <div class=\"card bg-base-200 mb-6\">\n <div class=\"card-body\">\n <h2 class=\"card-title text-lg\">Add Support Staff</h2>\n <div class=\"flex flex-wrap items-end gap-4\">\n <div class=\"form-control flex-1 min-w-[200px]\">\n <label class=\"label\">\n <span class=\"label-text\">User</span>\n </label>\n <select\n v-model=\"selectedUserId\"\n class=\"select select-bordered w-full\"\n :disabled=\"isAdding || !addableUsers.length\"\n >\n <option value=\"\">Select a user...</option>\n <option\n v-for=\"u in addableUsers\"\n :key=\"u.id\"\n :value=\"u.id\"\n >\n {{ u.email }} ({{ u.user_type }})\n </option>\n </select>\n <p v-if=\"!addableUsers.length && !isLoading\" class=\"text-sm text-base-content/50 mt-1\">\n All staff users are already support staff.\n </p>\n </div>\n <button\n class=\"btn btn-primary\"\n :disabled=\"!selectedUserId || isAdding\"\n @click=\"handleAdd\"\n >\n <span v-if=\"isAdding\" class=\"loading loading-spinner loading-sm\"></span>\n {{ isAdding ? 'Adding...' : 'Add' }}\n </button>\n </div>\n <p v-if=\"addError\" class=\"text-sm text-error mt-2\">{{ addError }}</p>\n </div>\n </div>\n\n <!-- List -->\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-if=\"!(supportStaffPageData?.members ?? []).length\" class=\"alert alert-info\">\n <span>No support staff yet. Add users above to enable triage assignment.</span>\n </div>\n\n <div v-else class=\"overflow-x-auto\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>Email</th>\n <th>Added</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"m in (supportStaffPageData?.members ?? [])\" :key=\"m.id\">\n <td>{{ m.email }}</td>\n <td>{{ formatDate(m.created_at) }}</td>\n <td>\n <button\n class=\"btn btn-sm btn-ghost text-error\"\n :disabled=\"isRemoving === m.user_id\"\n @click=\"handleRemove(m.user_id)\"\n >\n <span v-if=\"isRemoving === m.user_id\" class=\"loading loading-spinner loading-xs\"></span>\n {{ isRemoving === m.user_id ? 'Removing...' : 'Remove' }}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport { toast } from 'vue3-toastify';\nimport { BATCH_MODE } from '../../../../composables/useRpcAuth';\nimport { executeWithAuth } from '../../../../composables/useRpcAuth';\nimport { getRefreshTokenHandler } from '../../../../utils/EnhancedRefreshTokenHandler';\nimport { formatSystemTimestamp } from '../../../../utils/convertToLocalDateTime';\nimport { useQuery } from '../../../../composables/useQuery';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { extractRpcErrorMessage } from '../../../../utils/extractRpcErrorMessage';\n\nconst STAFF_TYPES = ['staff', 'super_admin'] as const;\n\nconst {\n data: supportStaffPageData,\n loading: isLoading,\n refetch,\n} = useQuery(\n async (api) => {\n const [members, allUsers] = await Promise.all([\n api.supportStaff.listSupportStaff(),\n api.users.listUsers(),\n ]);\n return { members, allUsers };\n },\n {\n cacheKey: 'support-staff-page',\n staleTime: 30 * 1000,\n batchMode: BATCH_MODE.batch,\n trackedSegment: 'support-staff-page',\n },\n);\n\nconst addableUsers = computed(() => {\n const users = supportStaffPageData.value?.allUsers ?? [];\n const staffIds = new Set((supportStaffPageData.value?.members ?? []).map((m) => m.user_id));\n return users.filter(\n (u) =>\n STAFF_TYPES.includes(u.user_type as (typeof STAFF_TYPES)[number]) &&\n !staffIds.has(u.id),\n );\n});\n\nconst selectedUserId = ref('');\nwatch(addableUsers, (users) => {\n if (!selectedUserId.value || !users.some((u) => u.id === selectedUserId.value)) {\n selectedUserId.value = '';\n }\n});\n\nconst { mutate: addSupportStaff, loading: isAdding } = useMutation(\n (api, userId: string) => api.supportStaff.addSupportStaff(userId),\n { invalidate: /support-staff|triage-users/ },\n);\n\nconst addError = ref<string | null>(null);\n\nasync function handleAdd() {\n if (!selectedUserId.value) return;\n addError.value = null;\n try {\n await addSupportStaff(selectedUserId.value);\n toast.success('Support staff added');\n selectedUserId.value = '';\n await refetch();\n } catch (e) {\n addError.value = extractRpcErrorMessage(e, 'Failed to add support staff');\n toast.error(addError.value);\n }\n}\n\nconst isRemoving = ref<string | null>(null);\n\nasync function handleRemove(userId: string) {\n isRemoving.value = userId;\n try {\n await executeWithAuth(\n async (api) => api.supportStaff.removeSupportStaff(userId),\n { refreshTokenHandler: getRefreshTokenHandler() },\n );\n toast.success('Support staff removed');\n await refetch();\n } catch (e) {\n toast.error(extractRpcErrorMessage(e, 'Failed to remove support staff'));\n } finally {\n isRemoving.value = null;\n }\n}\n\nfunction formatDate(s: string) {\n return formatSystemTimestamp(s);\n}\n</script>\n"],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import "./useRpcAuth-SgNzCAPa.js";
2
+ import "./useQueryCache-DIGf3fCM.js";
3
+ import "./useMutation-DzRSXPB1.js";
4
+ import "./useQuery-bvJabe9Q.js";
5
+ import { ft as TeamAttachmentsTab_default } from "./src-B5eswi_J.js";
6
+ import "./AppLink-CHMMrSFI.js";
7
+ import "./TimelineSystemEvent-CBwUl5G8.js";
8
+ import "./TeamMembersTab-4gmnP9sD.js";
9
+ import "./Appearance-BfPdKMXw.js";
10
+ import "./useBreadcrumbs-B-W-miq6.js";
11
+ import "./EditTeamMemberForm-Cy8nzoUb.js";
12
+ import "./TeamHistoryTab-BQ-eXtiw.js";
13
+ import "./UserProfilePage-DMwDVgXa.js";
14
+ import "./ChangePasswordPage-D2Ci00Sh.js";
15
+ import "./TeamNotesTab-Dj12Q2gD.js";
16
+ import "./CustomerSupportTicketParent-iBV1KRKL.js";
17
+ import "./SupportTicketDevLifecycleBadge-B2NysMAj.js";
18
+ import "./StaffSupportTicketParent-KYzy4eb4.js";
19
+ import "./LoginForm-DyHmiC1I.js";
20
+ import "./Signup-Ct0m0x78.js";
21
+ import "./ForgotPassword-CJg_buPl.js";
22
+ import "./ResetPassword-4HLdgM7s.js";
23
+ import "./Logout-C6pWyTIm.js";
24
+ import "./mfaSchema-_vbG9jiT.js";
25
+ import "./MfaSetup-D80HhwEz.js";
26
+ import "./MfaVerify-BEd-f6oV.js";
27
+ import "./VerifyEmail-CHfTzrHg.js";
28
+ import "./UserListPage-D-IdlsHK.js";
29
+ import "./CreateUserPage-DbT_l32W.js";
30
+ import "./EditUserPage-CIRqNko-.js";
31
+
32
+ export { TeamAttachmentsTab_default as default };
@@ -1,5 +1,5 @@
1
1
  import { r as executeWithAuth, s as getRefreshTokenHandler } from "./useRpcAuth-SgNzCAPa.js";
2
- import { t as formatSystemTimestamp } from "./convertToLocalDateTime-DOSGtMn8.js";
2
+ import { t as formatSystemTimestamp } from "./convertToLocalDateTime-mKs5eC9T.js";
3
3
  import { Fragment, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, normalizeClass, openBlock, ref, renderList, renderSlot, toDisplayString, unref, withCtx } from "vue";
4
4
  import { useRoute } from "vue-router";
5
5
  import { recordVersionSchema } from "@dragonmastery/dragoncore-shared";
@@ -229,4 +229,4 @@ var TeamHistoryTab_default = _sfc_main;
229
229
 
230
230
  //#endregion
231
231
  export { recordVersionRowSchemaWithMetadata as n, ZiniaContainer_default as r, TeamHistoryTab_default as t };
232
- //# sourceMappingURL=TeamHistoryTab-B3DvaIzC.js.map
232
+ //# sourceMappingURL=TeamHistoryTab-BQ-eXtiw.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TeamHistoryTab-B3DvaIzC.js","names":["fields: Array<{ name: string; value: any }>","changes: Array<{ field: string; oldValue: any; newValue: any }>"],"sources":["../src/components/ui/ZiniaContainer.vue","../src/slices/team/recordVersionRowSchema.ts","../src/slices/team/components/TeamHistoryTab.vue","../src/slices/team/TeamHistoryTab.vue"],"sourcesContent":["<template>\n <div class=\"p-0 md:p-4 max-w-4xl mx-auto bg-base-200 card\">\n <div class=\"card-body p-4\">\n <slot />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n// Reusable container that matches ZiniaForm styling\n// Use this for cards/sections that should visually match forms\n</script>\n","import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { recordVersionSchema } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\n\nexport const recordVersionRowSchemaWithMetadata = withMetadata(\n recordVersionSchema,\n 'recordVersionRowSchema',\n {},\n);\n\nexport type RecordVersionRow = z.infer<typeof recordVersionSchema>;\n","<template>\n <div class=\"mt-2\">\n <ZiniaContainer>\n <ZiniaDataTable>\n <!-- Custom cell templates -->\n <template #cell-operation=\"{ row }\">\n <div class=\"space-y-3\">\n <!-- Operation Badge -->\n <div class=\"flex flex-col sm:flex-row sm:items-center gap-2\">\n <div class=\"flex items-center gap-2\">\n <span\n class=\"badge badge-xs\"\n :class=\"{\n 'badge-success': row.operation === 'insert',\n 'badge-warning': row.operation === 'update',\n 'badge-error': row.operation === 'delete',\n }\"\n >\n {{ formatOperation(row.operation) }}\n </span>\n </div>\n <div class=\"flex flex-col sm:flex-row sm:items-center gap-1 sm:gap-2 text-xs\">\n <span class=\"text-base-content/70\">\n {{ formatSystemTimestamp(row.recorded_at) }}\n </span>\n <span class=\"text-base-content/60\">\n by {{ row.auth_username || 'Unknown' }}\n </span>\n <button class=\"btn btn-primary btn-xs\" @click=\"toggleDetails(row.id)\">\n {{ expandedItems.has(row.id) ? 'Hide Details' : 'View Details' }}\n </button>\n </div>\n </div>\n\n <!-- Details based on operation type -->\n <div v-if=\"expandedItems.has(row.id)\" class=\"mt-3\">\n <div v-if=\"row.operation === 'insert'\">\n <h4 class=\"font-medium text-sm text-base-content/80 mb-2\">Created Record</h4>\n <div class=\"bg-base-200 rounded-lg p-3 text-sm\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-2\">\n <div\n v-for=\"field in getCreatedFields(row.record)\"\n :key=\"field.name\"\n class=\"flex flex-col\"\n >\n <span class=\"text-xs font-medium text-base-content/70 mb-1\">\n {{ formatFieldName(field.name) }}\n </span>\n <span class=\"text-xs font-mono text-base-content\">\n <span\n v-if=\"field.value === null || field.value === undefined\"\n class=\"text-base-content/50 italic\"\n >No value</span\n >\n <span v-else>{{ formatFieldValue(field.name, field.value) }}</span>\n </span>\n </div>\n </div>\n </div>\n </div>\n\n <div v-else-if=\"row.operation === 'update'\">\n <h4 class=\"font-medium text-sm text-base-content/80 mb-2\">Changes Made</h4>\n <div class=\"space-y-2\">\n <div\n v-for=\"change in getChangedFields(row.record, row.old_record)\"\n :key=\"change.field\"\n class=\"border border-base-300 rounded p-2 bg-base-50\"\n >\n <div class=\"flex items-center justify-between mb-1\">\n <h5 class=\"font-medium text-xs text-base-content\">\n {{ formatFieldName(change.field) }}\n </h5>\n <span class=\"badge badge-xs badge-warning\">Updated</span>\n </div>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-2\">\n <div>\n <div class=\"text-xs font-medium text-base-content/70 mb-1\">\n Previous\n </div>\n <div class=\"bg-error/10 border border-error/20 rounded p-1 text-xs\">\n <span\n v-if=\"change.oldValue === null\"\n class=\"text-base-content/50 italic\"\n >No value</span\n >\n <span v-else class=\"font-mono\">{{\n formatFieldValue(change.field, change.oldValue)\n }}</span>\n </div>\n </div>\n <div>\n <div class=\"text-xs font-medium text-base-content/70 mb-1\">New</div>\n <div\n class=\"bg-success/10 border border-success/20 rounded p-1 text-xs\"\n >\n <span\n v-if=\"change.newValue === null\"\n class=\"text-base-content/50 italic\"\n >No value</span\n >\n <span v-else class=\"font-mono\">{{\n formatFieldValue(change.field, change.newValue)\n }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div v-else-if=\"row.operation === 'delete'\">\n <h4 class=\"font-medium text-sm text-base-content/80 mb-2\">Deleted Record</h4>\n <div class=\"bg-error/10 rounded p-2 text-xs font-mono\">\n <pre class=\"whitespace-pre-wrap\">{{ formatRecordData(row.old_record) }}</pre>\n </div>\n </div>\n </div>\n </div>\n </template>\n </ZiniaDataTable>\n </ZiniaContainer>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useCursorDataTable } from '@dragonmastery/zinia-forms-core';\nimport { ref } from 'vue';\nimport { useRoute } from 'vue-router';\nimport ZiniaContainer from '../../../components/ui/ZiniaContainer.vue';\nimport { executeWithAuth } from '../../../composables/useRpcAuth';\nimport { getRefreshTokenHandler } from '../../../utils/EnhancedRefreshTokenHandler';\nimport { formatSystemTimestamp } from '../../../utils/convertToLocalDateTime';\nimport { recordVersionRowSchemaWithMetadata } from '../recordVersionRowSchema';\n\n// Get team ID from route\nconst route = useRoute();\nconst team_id = route.params.id as string;\n\n// Expanded items state\nconst expandedItems = ref(new Set<string>());\n\n// Data table configuration\nconst { ZiniaDataTable } = useCursorDataTable(recordVersionRowSchemaWithMetadata, {\n fetchData: async ({ cursor, pageSize, sort, filters }) => {\n // Build query variables for breadcrumb pagination\n const input = {\n record_id: team_id,\n record_type: 'team' as const,\n filters: {\n first: pageSize,\n ...(cursor ? { after: cursor } : {}),\n sortBy: sort?.field || 'recorded_at',\n sortDirection: (sort?.direction || 'desc') as 'asc' | 'desc',\n ...filters,\n },\n };\n\n // Call RPC endpoint\n const result = await executeWithAuth(\n async (api) => {\n return await api.recordVersions.listRecordVersionsPaginated(\n input.record_id,\n input.record_type,\n input.filters,\n );\n },\n { refreshTokenHandler: getRefreshTokenHandler() },\n );\n\n // Return paginated data with bidirectional navigation\n return {\n data: result.items || [],\n hasNextPage: result.pageInfo?.hasNextPage ?? false,\n hasPreviousPage: result.pageInfo?.hasPreviousPage ?? false,\n prevPageCursor: result.pageInfo?.prevPageCursor ?? undefined,\n nextPageCursor: result.pageInfo?.nextPageCursor ?? undefined,\n };\n },\n\n // Column configuration - only show operation column since everything is consolidated there\n columns: {\n operation: {\n label: '',\n field: 'operation',\n },\n },\n\n // Pagination settings\n pagination: {\n pageSize: 25,\n },\n});\n\n// Methods\nconst toggleDetails = (itemId: string) => {\n if (expandedItems.value.has(itemId)) {\n expandedItems.value.delete(itemId);\n } else {\n expandedItems.value.add(itemId);\n }\n};\n\nconst formatOperation = (operation: string) => {\n switch (operation) {\n case 'insert':\n return 'Created';\n case 'update':\n return 'Updated';\n case 'delete':\n return 'Deleted';\n default:\n return operation;\n }\n};\n\nconst formatRecordData = (recordData: string | null | undefined) => {\n if (!recordData) return 'No data';\n try {\n return JSON.stringify(JSON.parse(recordData), null, 2);\n } catch {\n return recordData;\n }\n};\n\nfunction getCreatedFields(record: string | null | undefined) {\n if (!record) return [];\n\n try {\n const createdData = JSON.parse(record);\n const fields: Array<{ name: string; value: any }> = [];\n\n for (const [name, value] of Object.entries(createdData)) {\n fields.push({ name, value });\n }\n\n return fields;\n } catch (error) {\n console.error('Error parsing record data:', error);\n return [];\n }\n}\n\nfunction getChangedFields(\n record: string | null | undefined,\n oldRecord: string | null | undefined,\n) {\n if (!record || !oldRecord) return [];\n\n try {\n const changedFields = JSON.parse(record);\n const oldData = JSON.parse(oldRecord);\n\n const changes: Array<{ field: string; oldValue: any; newValue: any }> = [];\n\n for (const [field, newValue] of Object.entries(changedFields)) {\n const oldValue = oldData[field];\n changes.push({ field, oldValue, newValue });\n }\n\n return changes;\n } catch (error) {\n console.error('Error parsing record data:', error);\n return [];\n }\n}\n\nfunction formatFieldName(fieldName: string): string {\n // Convert snake_case to Title Case\n return fieldName\n .split('_')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n}\n\nfunction formatFieldValue(fieldName: string, value: any): string {\n if (value === null || value === undefined) {\n return 'No value';\n }\n\n // Format dates\n if (fieldName.includes('_at') || fieldName.includes('At')) {\n try {\n return formatSystemTimestamp(value);\n } catch {\n return String(value);\n }\n }\n\n // Format booleans\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No';\n }\n\n // Format enums/status fields\n if (fieldName.includes('status') || fieldName.includes('Status')) {\n return String(value).replace(/_/g, ' ').toUpperCase();\n }\n\n return String(value);\n}\n</script>\n","<template>\n <TeamHistoryTabComponent />\n</template>\n\n<script setup lang=\"ts\">\nimport TeamHistoryTabComponent from './components/TeamHistoryTab.vue';\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"TeamHistoryTab-BQ-eXtiw.js","names":["fields: Array<{ name: string; value: any }>","changes: Array<{ field: string; oldValue: any; newValue: any }>"],"sources":["../src/components/ui/ZiniaContainer.vue","../src/slices/team/recordVersionRowSchema.ts","../src/slices/team/components/TeamHistoryTab.vue","../src/slices/team/TeamHistoryTab.vue"],"sourcesContent":["<template>\n <div class=\"p-0 md:p-4 max-w-4xl mx-auto bg-base-200 card\">\n <div class=\"card-body p-4\">\n <slot />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n// Reusable container that matches ZiniaForm styling\n// Use this for cards/sections that should visually match forms\n</script>\n","import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { recordVersionSchema } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\n\nexport const recordVersionRowSchemaWithMetadata = withMetadata(\n recordVersionSchema,\n 'recordVersionRowSchema',\n {},\n);\n\nexport type RecordVersionRow = z.infer<typeof recordVersionSchema>;\n","<template>\n <div class=\"mt-2\">\n <ZiniaContainer>\n <ZiniaDataTable>\n <!-- Custom cell templates -->\n <template #cell-operation=\"{ row }\">\n <div class=\"space-y-3\">\n <!-- Operation Badge -->\n <div class=\"flex flex-col sm:flex-row sm:items-center gap-2\">\n <div class=\"flex items-center gap-2\">\n <span\n class=\"badge badge-xs\"\n :class=\"{\n 'badge-success': row.operation === 'insert',\n 'badge-warning': row.operation === 'update',\n 'badge-error': row.operation === 'delete',\n }\"\n >\n {{ formatOperation(row.operation) }}\n </span>\n </div>\n <div class=\"flex flex-col sm:flex-row sm:items-center gap-1 sm:gap-2 text-xs\">\n <span class=\"text-base-content/70\">\n {{ formatSystemTimestamp(row.recorded_at) }}\n </span>\n <span class=\"text-base-content/60\">\n by {{ row.auth_username || 'Unknown' }}\n </span>\n <button class=\"btn btn-primary btn-xs\" @click=\"toggleDetails(row.id)\">\n {{ expandedItems.has(row.id) ? 'Hide Details' : 'View Details' }}\n </button>\n </div>\n </div>\n\n <!-- Details based on operation type -->\n <div v-if=\"expandedItems.has(row.id)\" class=\"mt-3\">\n <div v-if=\"row.operation === 'insert'\">\n <h4 class=\"font-medium text-sm text-base-content/80 mb-2\">Created Record</h4>\n <div class=\"bg-base-200 rounded-lg p-3 text-sm\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-2\">\n <div\n v-for=\"field in getCreatedFields(row.record)\"\n :key=\"field.name\"\n class=\"flex flex-col\"\n >\n <span class=\"text-xs font-medium text-base-content/70 mb-1\">\n {{ formatFieldName(field.name) }}\n </span>\n <span class=\"text-xs font-mono text-base-content\">\n <span\n v-if=\"field.value === null || field.value === undefined\"\n class=\"text-base-content/50 italic\"\n >No value</span\n >\n <span v-else>{{ formatFieldValue(field.name, field.value) }}</span>\n </span>\n </div>\n </div>\n </div>\n </div>\n\n <div v-else-if=\"row.operation === 'update'\">\n <h4 class=\"font-medium text-sm text-base-content/80 mb-2\">Changes Made</h4>\n <div class=\"space-y-2\">\n <div\n v-for=\"change in getChangedFields(row.record, row.old_record)\"\n :key=\"change.field\"\n class=\"border border-base-300 rounded p-2 bg-base-50\"\n >\n <div class=\"flex items-center justify-between mb-1\">\n <h5 class=\"font-medium text-xs text-base-content\">\n {{ formatFieldName(change.field) }}\n </h5>\n <span class=\"badge badge-xs badge-warning\">Updated</span>\n </div>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-2\">\n <div>\n <div class=\"text-xs font-medium text-base-content/70 mb-1\">\n Previous\n </div>\n <div class=\"bg-error/10 border border-error/20 rounded p-1 text-xs\">\n <span\n v-if=\"change.oldValue === null\"\n class=\"text-base-content/50 italic\"\n >No value</span\n >\n <span v-else class=\"font-mono\">{{\n formatFieldValue(change.field, change.oldValue)\n }}</span>\n </div>\n </div>\n <div>\n <div class=\"text-xs font-medium text-base-content/70 mb-1\">New</div>\n <div\n class=\"bg-success/10 border border-success/20 rounded p-1 text-xs\"\n >\n <span\n v-if=\"change.newValue === null\"\n class=\"text-base-content/50 italic\"\n >No value</span\n >\n <span v-else class=\"font-mono\">{{\n formatFieldValue(change.field, change.newValue)\n }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div v-else-if=\"row.operation === 'delete'\">\n <h4 class=\"font-medium text-sm text-base-content/80 mb-2\">Deleted Record</h4>\n <div class=\"bg-error/10 rounded p-2 text-xs font-mono\">\n <pre class=\"whitespace-pre-wrap\">{{ formatRecordData(row.old_record) }}</pre>\n </div>\n </div>\n </div>\n </div>\n </template>\n </ZiniaDataTable>\n </ZiniaContainer>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useCursorDataTable } from '@dragonmastery/zinia-forms-core';\nimport { ref } from 'vue';\nimport { useRoute } from 'vue-router';\nimport ZiniaContainer from '../../../components/ui/ZiniaContainer.vue';\nimport { executeWithAuth } from '../../../composables/useRpcAuth';\nimport { getRefreshTokenHandler } from '../../../utils/EnhancedRefreshTokenHandler';\nimport { formatSystemTimestamp } from '../../../utils/convertToLocalDateTime';\nimport { recordVersionRowSchemaWithMetadata } from '../recordVersionRowSchema';\n\n// Get team ID from route\nconst route = useRoute();\nconst team_id = route.params.id as string;\n\n// Expanded items state\nconst expandedItems = ref(new Set<string>());\n\n// Data table configuration\nconst { ZiniaDataTable } = useCursorDataTable(recordVersionRowSchemaWithMetadata, {\n fetchData: async ({ cursor, pageSize, sort, filters }) => {\n // Build query variables for breadcrumb pagination\n const input = {\n record_id: team_id,\n record_type: 'team' as const,\n filters: {\n first: pageSize,\n ...(cursor ? { after: cursor } : {}),\n sortBy: sort?.field || 'recorded_at',\n sortDirection: (sort?.direction || 'desc') as 'asc' | 'desc',\n ...filters,\n },\n };\n\n // Call RPC endpoint\n const result = await executeWithAuth(\n async (api) => {\n return await api.recordVersions.listRecordVersionsPaginated(\n input.record_id,\n input.record_type,\n input.filters,\n );\n },\n { refreshTokenHandler: getRefreshTokenHandler() },\n );\n\n // Return paginated data with bidirectional navigation\n return {\n data: result.items || [],\n hasNextPage: result.pageInfo?.hasNextPage ?? false,\n hasPreviousPage: result.pageInfo?.hasPreviousPage ?? false,\n prevPageCursor: result.pageInfo?.prevPageCursor ?? undefined,\n nextPageCursor: result.pageInfo?.nextPageCursor ?? undefined,\n };\n },\n\n // Column configuration - only show operation column since everything is consolidated there\n columns: {\n operation: {\n label: '',\n field: 'operation',\n },\n },\n\n // Pagination settings\n pagination: {\n pageSize: 25,\n },\n});\n\n// Methods\nconst toggleDetails = (itemId: string) => {\n if (expandedItems.value.has(itemId)) {\n expandedItems.value.delete(itemId);\n } else {\n expandedItems.value.add(itemId);\n }\n};\n\nconst formatOperation = (operation: string) => {\n switch (operation) {\n case 'insert':\n return 'Created';\n case 'update':\n return 'Updated';\n case 'delete':\n return 'Deleted';\n default:\n return operation;\n }\n};\n\nconst formatRecordData = (recordData: string | null | undefined) => {\n if (!recordData) return 'No data';\n try {\n return JSON.stringify(JSON.parse(recordData), null, 2);\n } catch {\n return recordData;\n }\n};\n\nfunction getCreatedFields(record: string | null | undefined) {\n if (!record) return [];\n\n try {\n const createdData = JSON.parse(record);\n const fields: Array<{ name: string; value: any }> = [];\n\n for (const [name, value] of Object.entries(createdData)) {\n fields.push({ name, value });\n }\n\n return fields;\n } catch (error) {\n console.error('Error parsing record data:', error);\n return [];\n }\n}\n\nfunction getChangedFields(\n record: string | null | undefined,\n oldRecord: string | null | undefined,\n) {\n if (!record || !oldRecord) return [];\n\n try {\n const changedFields = JSON.parse(record);\n const oldData = JSON.parse(oldRecord);\n\n const changes: Array<{ field: string; oldValue: any; newValue: any }> = [];\n\n for (const [field, newValue] of Object.entries(changedFields)) {\n const oldValue = oldData[field];\n changes.push({ field, oldValue, newValue });\n }\n\n return changes;\n } catch (error) {\n console.error('Error parsing record data:', error);\n return [];\n }\n}\n\nfunction formatFieldName(fieldName: string): string {\n // Convert snake_case to Title Case\n return fieldName\n .split('_')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n}\n\nfunction formatFieldValue(fieldName: string, value: any): string {\n if (value === null || value === undefined) {\n return 'No value';\n }\n\n // Format dates\n if (fieldName.includes('_at') || fieldName.includes('At')) {\n try {\n return formatSystemTimestamp(value);\n } catch {\n return String(value);\n }\n }\n\n // Format booleans\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No';\n }\n\n // Format enums/status fields\n if (fieldName.includes('status') || fieldName.includes('Status')) {\n return String(value).replace(/_/g, ' ').toUpperCase();\n }\n\n return String(value);\n}\n</script>\n","<template>\n <TeamHistoryTabComponent />\n</template>\n\n<script setup lang=\"ts\">\nimport TeamHistoryTabComponent from './components/TeamHistoryTab.vue';\n</script>\n"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import "./useRpcAuth-SgNzCAPa.js";
2
+ import { t as TeamHistoryTab_default } from "./TeamHistoryTab-BQ-eXtiw.js";
3
+
4
+ export { TeamHistoryTab_default as default };
@@ -0,0 +1,32 @@
1
+ import "./useRpcAuth-SgNzCAPa.js";
2
+ import "./useQueryCache-DIGf3fCM.js";
3
+ import "./useMutation-DzRSXPB1.js";
4
+ import "./useQuery-bvJabe9Q.js";
5
+ import { lt as TeamList_default } from "./src-B5eswi_J.js";
6
+ import "./AppLink-CHMMrSFI.js";
7
+ import "./TimelineSystemEvent-CBwUl5G8.js";
8
+ import "./TeamMembersTab-4gmnP9sD.js";
9
+ import "./Appearance-BfPdKMXw.js";
10
+ import "./useBreadcrumbs-B-W-miq6.js";
11
+ import "./EditTeamMemberForm-Cy8nzoUb.js";
12
+ import "./TeamHistoryTab-BQ-eXtiw.js";
13
+ import "./UserProfilePage-DMwDVgXa.js";
14
+ import "./ChangePasswordPage-D2Ci00Sh.js";
15
+ import "./TeamNotesTab-Dj12Q2gD.js";
16
+ import "./CustomerSupportTicketParent-iBV1KRKL.js";
17
+ import "./SupportTicketDevLifecycleBadge-B2NysMAj.js";
18
+ import "./StaffSupportTicketParent-KYzy4eb4.js";
19
+ import "./LoginForm-DyHmiC1I.js";
20
+ import "./Signup-Ct0m0x78.js";
21
+ import "./ForgotPassword-CJg_buPl.js";
22
+ import "./ResetPassword-4HLdgM7s.js";
23
+ import "./Logout-C6pWyTIm.js";
24
+ import "./mfaSchema-_vbG9jiT.js";
25
+ import "./MfaSetup-D80HhwEz.js";
26
+ import "./MfaVerify-BEd-f6oV.js";
27
+ import "./VerifyEmail-CHfTzrHg.js";
28
+ import "./UserListPage-D-IdlsHK.js";
29
+ import "./CreateUserPage-DbT_l32W.js";
30
+ import "./EditUserPage-CIRqNko-.js";
31
+
32
+ export { TeamList_default as default };
@@ -0,0 +1,32 @@
1
+ import "./useRpcAuth-SgNzCAPa.js";
2
+ import "./useQueryCache-DIGf3fCM.js";
3
+ import "./useMutation-DzRSXPB1.js";
4
+ import "./useQuery-bvJabe9Q.js";
5
+ import { rt as TeamMemberList_default } from "./src-B5eswi_J.js";
6
+ import "./AppLink-CHMMrSFI.js";
7
+ import "./TimelineSystemEvent-CBwUl5G8.js";
8
+ import "./TeamMembersTab-4gmnP9sD.js";
9
+ import "./Appearance-BfPdKMXw.js";
10
+ import "./useBreadcrumbs-B-W-miq6.js";
11
+ import "./EditTeamMemberForm-Cy8nzoUb.js";
12
+ import "./TeamHistoryTab-BQ-eXtiw.js";
13
+ import "./UserProfilePage-DMwDVgXa.js";
14
+ import "./ChangePasswordPage-D2Ci00Sh.js";
15
+ import "./TeamNotesTab-Dj12Q2gD.js";
16
+ import "./CustomerSupportTicketParent-iBV1KRKL.js";
17
+ import "./SupportTicketDevLifecycleBadge-B2NysMAj.js";
18
+ import "./StaffSupportTicketParent-KYzy4eb4.js";
19
+ import "./LoginForm-DyHmiC1I.js";
20
+ import "./Signup-Ct0m0x78.js";
21
+ import "./ForgotPassword-CJg_buPl.js";
22
+ import "./ResetPassword-4HLdgM7s.js";
23
+ import "./Logout-C6pWyTIm.js";
24
+ import "./mfaSchema-_vbG9jiT.js";
25
+ import "./MfaSetup-D80HhwEz.js";
26
+ import "./MfaVerify-BEd-f6oV.js";
27
+ import "./VerifyEmail-CHfTzrHg.js";
28
+ import "./UserListPage-D-IdlsHK.js";
29
+ import "./CreateUserPage-DbT_l32W.js";
30
+ import "./EditUserPage-CIRqNko-.js";
31
+
32
+ export { TeamMemberList_default as default };
@@ -0,0 +1,32 @@
1
+ import "./useRpcAuth-SgNzCAPa.js";
2
+ import "./useQueryCache-DIGf3fCM.js";
3
+ import "./useMutation-DzRSXPB1.js";
4
+ import "./useQuery-bvJabe9Q.js";
5
+ import { nt as TeamMemberParent_default } from "./src-B5eswi_J.js";
6
+ import "./AppLink-CHMMrSFI.js";
7
+ import "./TimelineSystemEvent-CBwUl5G8.js";
8
+ import "./TeamMembersTab-4gmnP9sD.js";
9
+ import "./Appearance-BfPdKMXw.js";
10
+ import "./useBreadcrumbs-B-W-miq6.js";
11
+ import "./EditTeamMemberForm-Cy8nzoUb.js";
12
+ import "./TeamHistoryTab-BQ-eXtiw.js";
13
+ import "./UserProfilePage-DMwDVgXa.js";
14
+ import "./ChangePasswordPage-D2Ci00Sh.js";
15
+ import "./TeamNotesTab-Dj12Q2gD.js";
16
+ import "./CustomerSupportTicketParent-iBV1KRKL.js";
17
+ import "./SupportTicketDevLifecycleBadge-B2NysMAj.js";
18
+ import "./StaffSupportTicketParent-KYzy4eb4.js";
19
+ import "./LoginForm-DyHmiC1I.js";
20
+ import "./Signup-Ct0m0x78.js";
21
+ import "./ForgotPassword-CJg_buPl.js";
22
+ import "./ResetPassword-4HLdgM7s.js";
23
+ import "./Logout-C6pWyTIm.js";
24
+ import "./mfaSchema-_vbG9jiT.js";
25
+ import "./MfaSetup-D80HhwEz.js";
26
+ import "./MfaVerify-BEd-f6oV.js";
27
+ import "./VerifyEmail-CHfTzrHg.js";
28
+ import "./UserListPage-D-IdlsHK.js";
29
+ import "./CreateUserPage-DbT_l32W.js";
30
+ import "./EditUserPage-CIRqNko-.js";
31
+
32
+ export { TeamMemberParent_default as default };
@@ -1,7 +1,7 @@
1
1
  import { r as executeWithAuth, s as getRefreshTokenHandler } from "./useRpcAuth-SgNzCAPa.js";
2
2
  import { t as useMutation } from "./useMutation-DzRSXPB1.js";
3
3
  import { t as useQuery } from "./useQuery-bvJabe9Q.js";
4
- import { t as formatSystemTimestamp } from "./convertToLocalDateTime-DOSGtMn8.js";
4
+ import { t as formatSystemTimestamp } from "./convertToLocalDateTime-mKs5eC9T.js";
5
5
  import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, ref, toDisplayString, unref, watch, withCtx } from "vue";
6
6
  import { useRoute } from "vue-router";
7
7
  import { toast } from "vue3-toastify";
@@ -455,4 +455,4 @@ var TeamNotesTab_default = _sfc_main;
455
455
 
456
456
  //#endregion
457
457
  export { EditNoteModal_default as a, noteCreateMetadata as i, NoteList_default as n, noteUpdateMetadata as o, noteRowSchemaWithMetadata as r, TeamNotesTab_default as t };
458
- //# sourceMappingURL=TeamNotesTab-DBrJGCIe.js.map
458
+ //# sourceMappingURL=TeamNotesTab-Dj12Q2gD.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TeamNotesTab-DBrJGCIe.js","names":["variables: NoteFiltersDto"],"sources":["../src/slices/note/noteUpdateMetadata.ts","../src/slices/note/components/EditNoteModal.vue","../src/slices/note/noteFormMetadata.ts","../src/slices/note/noteRowSchema.ts","../src/slices/note/components/NoteList.vue","../src/slices/team/TeamNotesTab.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { NoteUpdateSchema } from '@dragonmastery/dragoncore-shared';\n\nexport const noteUpdateMetadata = withMetadata(\n NoteUpdateSchema.pick({ body: true, tag: true }),\n 'noteUpdateForm',\n {\n body: {\n label: 'Note',\n placeholder: 'Enter your note here...',\n inputType: 'textarea',\n helpText: 'Update the note content',\n },\n tag: {\n label: 'Tag',\n inputType: 'combobox',\n helpText: 'Optional tag to categorize this note',\n },\n },\n);\n","<template>\n <dialog ref=\"modal\" class=\"modal\">\n <div class=\"modal-box\">\n <h3 class=\"font-bold text-lg mb-4\">Edit Note</h3>\n\n <ZiniaForm\n @handle-submit=\"handleSubmit\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n title=\"\"\n subtitle=\"\"\n >\n <zinia.TagField :select-options=\"form.extraData.tag || []\" :allow-create=\"true\" />\n <zinia.BodyField />\n\n <!-- Show visibility status (read-only) -->\n <div class=\"form-control\">\n <label class=\"label\">\n <span class=\"label-text\">Visibility</span>\n <span class=\"badge\" :class=\"isInternalNote ? 'badge-warning' : 'badge-info'\">\n {{ isInternalNote ? 'Internal' : 'External' }}\n </span>\n </label>\n </div>\n\n <div v-if=\"form.submitError\" class=\"alert alert-error mt-2\">\n <span>{{ form.submitError }}</span>\n </div>\n\n <div class=\"flex justify-end gap-2 mt-6\">\n <button type=\"button\" class=\"btn btn-ghost\" @click=\"closeModal\">Cancel</button>\n <ZiniaSubmitButton submitText=\"Update Note\" submittingText=\"Updating...\" />\n </div>\n\n <ZiniaFormErrorsSummary title=\"Please fix the following errors:\" />\n </ZiniaForm>\n </div>\n <form method=\"dialog\" class=\"modal-backdrop\">\n <button @click=\"closeModal\">close</button>\n </form>\n </dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { ref, watch } from 'vue';\nimport { toast } from 'vue3-toastify';\nimport { useMutation } from '../../../composables/useMutation';\nimport { useQuery } from '../../../composables/useQuery';\nimport type { NoteRow } from '../noteRowSchema';\nimport { noteUpdateMetadata } from '../noteUpdateMetadata';\n\ninterface Props {\n note: NoteRow | null;\n isOpen: boolean;\n}\n\ninterface Emits {\n (e: 'close'): void;\n (e: 'success'): void;\n}\n\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\n\nconst modal = ref<HTMLDialogElement>();\n\n// Internal note toggle state\nconst isInternalNote = ref(false);\n\n// Fetch note tags for combobox\nconst {\n data: noteTagsData,\n loading: noteTagsLoading,\n error: noteTagsError,\n refetch: refetchNoteTags,\n} = useQuery((api) => api.notes.getNoteTags());\n\n// Load note tags for combobox options\nconst loadNoteTags = async () => {\n // Wait for query to complete\n while (noteTagsLoading.value) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n if (noteTagsError.value) {\n return [];\n }\n\n const tags = noteTagsData.value || [];\n\n return tags.map((tag: string) => ({\n value: tag,\n label: tag,\n }));\n};\n\nconst {\n form,\n zinia,\n ZiniaForm,\n ZiniaSubmitButton,\n ZiniaFormErrorsSummary,\n clearSavedFormState,\n refreshFormData,\n} = useForm(noteUpdateMetadata, {\n storeName: `edit-note-form-${props.note?.id || 'new'}`,\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n dataLoaders: {\n tag: loadNoteTags,\n },\n fetchData: async () => {\n if (!props.note) {\n return { body: '', tag: null };\n }\n return {\n body: props.note.body || '',\n tag: props.note.tag || null,\n };\n },\n});\n\nconst { mutate: updateNote } = useMutation(\n (api, input: { id: string; body: string; tag?: string | null }) =>\n api.notes.updateNote(input),\n {\n invalidate: /^notes?:/,\n onSuccess: () => {\n // Refetch tags to include any new tags\n refetchNoteTags();\n },\n },\n);\n\nconst handleSubmit = async (formData: any) => {\n if (!props.note) {\n throw new Error('No note selected for editing');\n }\n\n const response = await updateNote({\n id: props.note.id,\n body: formData.body,\n tag: formData.tag || null,\n });\n\n if (!response) {\n throw new Error('Failed to update note');\n }\n\n return response;\n};\n\nconst handleSuccess = async () => {\n clearSavedFormState();\n refreshFormData(); // Reset form to initial state\n toast.success('Note updated successfully!');\n emit('success');\n closeModal();\n};\n\nconst handleError = (error: Error | unknown) => {\n form.setSubmitError(error instanceof Error ? error.message : 'An unknown error occurred');\n};\n\nconst closeModal = () => {\n emit('close');\n};\n\n// Watch for modal open/close\nwatch(\n () => props.isOpen,\n (isOpen) => {\n if (isOpen && modal.value) {\n modal.value.showModal();\n } else if (!isOpen && modal.value) {\n modal.value.close();\n // Reset form when modal closes\n refreshFormData();\n }\n },\n);\n\n// Watch for note changes to refresh form data\nwatch(\n () => props.note,\n () => {\n if (props.note && props.isOpen) {\n form.setValue('body', props.note.body || '');\n form.setValue('tag', props.note.tag || null);\n isInternalNote.value = props.note.is_internal || false;\n }\n },\n { immediate: true },\n);\n</script>\n","import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { NoteCreateSchema } from '@dragonmastery/dragoncore-shared';\n\nexport const noteCreateMetadata = withMetadata(\n NoteCreateSchema.pick({ body: true, is_internal: true, tag: true }),\n 'noteCreateForm',\n {\n body: {\n label: 'Note',\n placeholder: 'Enter your note here...',\n inputType: 'textarea',\n helpText: 'Add a note about this record',\n },\n is_internal: {\n label: 'Internal Note',\n helpText: 'Check this box to make this note visible only to staff',\n },\n tag: {\n label: 'Tag',\n inputType: 'combobox',\n helpText: 'Optional tag to categorize this note',\n },\n },\n);\n","import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { NoteReadSchema } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\n\nexport const noteRowSchemaWithMetadata = withMetadata(NoteReadSchema, 'noteRowSchema', {\n body: { label: 'Note' },\n tag: { label: 'Tag', sortable: true },\n is_internal: { label: 'Visibility', sortable: true },\n created_at: { label: 'Created', sortable: true },\n created_by: { label: 'Created By', sortable: true },\n updated_at: { label: 'Updated', sortable: true },\n});\n\nexport type NoteRow = z.infer<typeof NoteReadSchema>;\n","<template>\n <div class=\"space-y-6\">\n <!-- Add Note Form -->\n <div class=\"mt-4\">\n <ZiniaForm\n @handle-submit=\"handleSubmit\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n title=\"\"\n subtitle=\"\"\n >\n <zinia.TagField :select-options=\"form.extraData.tag || []\" :allow-create=\"true\" />\n <zinia.BodyField />\n\n <div v-if=\"form.submitError\" class=\"alert alert-error mt-2\">\n <span>{{ form.submitError }}</span>\n </div>\n\n <div class=\"flex justify-end mt-6\">\n <ZiniaSubmitButton submitText=\"Add Note\" submittingText=\"Adding...\" />\n </div>\n\n <ZiniaFormErrorsSummary title=\"Please fix the following errors:\" />\n </ZiniaForm>\n </div>\n\n <!-- Notes Table -->\n <ZiniaDataTable>\n <template #cell-created_by=\"{ row }\">\n {{ row.created_by_display_name ?? row.created_by ?? '-' }}\n </template>\n <template #cell-created_at=\"{ row }\">\n {{ formatSystemTimestamp(row.created_at) }}\n </template>\n\n <template #cell-tag=\"{ row }\">\n {{ row.tag || '-' }}\n </template>\n\n <template #cell-updated_at=\"{ row }\">\n {{ row.updated_at ? formatSystemTimestamp(row.updated_at) : '-' }}\n </template>\n\n <template #cell-body=\"{ row }\">\n <div class=\"whitespace-pre-wrap\">\n {{ row.body || 'No content' }}\n </div>\n </template>\n </ZiniaDataTable>\n\n <!-- Edit Modal -->\n <EditNoteModal\n :note=\"selectedNote\"\n :is-open=\"isEditModalOpen\"\n @close=\"closeEditModal\"\n @success=\"handleEditSuccess\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { executeWithAuth } from '../../../composables/useRpcAuth';\nimport { getRefreshTokenHandler } from '../../../utils/EnhancedRefreshTokenHandler';\nimport { useMutation } from '../../../composables/useMutation';\nimport { useQuery } from '../../../composables/useQuery';\nimport { formatSystemTimestamp } from '../../../utils/convertToLocalDateTime';\nimport EditNoteModal from './EditNoteModal.vue';\nimport { noteCreateMetadata } from '../noteFormMetadata';\nimport { noteRowSchemaWithMetadata, type NoteRow } from '../noteRowSchema';\nimport { ActionIcons, useCursorDataTable, useForm } from '@dragonmastery/zinia-forms-core';\nimport { OPERATORS, type NoteFiltersDto } from '@dragonmastery/dragoncore-shared';\nimport { computed, ref, watch } from 'vue';\nimport { toast } from 'vue3-toastify';\n\ninterface Props {\n recordId: string;\n recordType: string;\n mode?: 'customer' | 'internal';\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n mode: 'customer',\n});\n\n// Edit modal state\nconst selectedNote = ref<NoteRow | null>(null);\nconst isEditModalOpen = ref(false);\n\n// Computed properties for component intelligence\nconst isInternalNote = computed(() => {\n // Determine internal state based on mode\n return props.mode === 'internal';\n});\n\n// Query filters state\nconst queryFilters = ref<NoteFiltersDto>({\n record_id: { operator: OPERATORS.EQUALS, value: props.recordId },\n record_type: { operator: OPERATORS.EQUALS, value: props.recordType as any },\n});\n\n// Pagination token for breadcrumb navigation\nconst currentPaginationToken = ref<string | undefined | null>();\n\n// Fetch note tags for filter and form\nconst {\n data: noteTagsData,\n loading: noteTagsLoading,\n error: noteTagsError,\n refetch: refetchNoteTags,\n} = useQuery((api) => api.notes.getNoteTags());\n\n// Load note tags for filter options and form combobox\n// This function reads from noteTagsData.value, which is reactive\n// When refetchNoteTags() is called, noteTagsData.value updates\n// The next time this function is called (when filter dropdown opens), it will get fresh data\nconst loadNoteTags = async () => {\n // If query is loading, wait for it to complete to ensure we have fresh data\n while (noteTagsLoading.value) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n if (noteTagsError.value) {\n return [];\n }\n\n const tags = noteTagsData.value || [];\n\n return tags.map((tag: string) => ({\n value: tag,\n label: tag,\n }));\n};\n\n// Form setup\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton, ZiniaFormErrorsSummary, refreshFormData } =\n useForm(noteCreateMetadata, {\n storeName: `note-form-${props.recordId}`,\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n dataLoaders: {\n tag: loadNoteTags,\n },\n fetchData: async () => ({\n body: '',\n tag: null,\n is_internal: isInternalNote.value,\n }),\n });\n\n// Data table configuration\nconst { ZiniaDataTable, refresh } = useCursorDataTable(noteRowSchemaWithMetadata, {\n fetchData: async ({ cursor, pageSize, sort, filters, search }) => {\n // Build query variables\n const variables: NoteFiltersDto = {\n first: pageSize,\n sortBy: sort?.field ? (sort.field as string) : 'created_at',\n sortDirection: (sort?.direction === 'asc' ? 'asc' : 'desc') as any,\n ...(cursor ? { after: cursor } : {}),\n ...(currentPaginationToken.value\n ? { paginationToken: currentPaginationToken.value }\n : {}),\n ...(search ? { search } : {}),\n record_id: { operator: OPERATORS.EQUALS, value: props.recordId },\n record_type: { operator: OPERATORS.EQUALS, value: props.recordType as any },\n ...filters,\n };\n\n // Apply visibility filter based on mode\n if (props.mode === 'customer') {\n variables.is_internal = { operator: OPERATORS.EQUALS, value: false };\n } else if (props.mode === 'internal') {\n variables.is_internal = { operator: OPERATORS.EQUALS, value: true };\n }\n // For 'all' mode, no filter is applied (shows everything)\n\n // Update query filters and execute\n queryFilters.value = variables;\n const result = await executeWithAuth(\n async (api) => {\n return await api.notes.getNotes(variables);\n },\n { refreshTokenHandler: getRefreshTokenHandler() },\n );\n currentPaginationToken.value = result?.pageInfo?.paginationToken;\n\n // Return paginated data\n return {\n data: result?.items || [],\n hasNextPage: result?.pageInfo?.hasNextPage ?? false,\n hasPreviousPage: result?.pageInfo?.hasPreviousPage ?? false,\n prevPageCursor: result?.pageInfo?.prevPageCursor ?? undefined,\n nextPageCursor: result?.pageInfo?.nextPageCursor ?? undefined,\n };\n },\n\n // Column configuration\n columns: {\n created_by: {\n label: 'Created By',\n field: 'created_by',\n sortable: true,\n verticalAlign: 'top',\n },\n updated_at: {\n label: 'Updated',\n field: 'updated_at',\n sortable: true,\n verticalAlign: 'top',\n },\n tag: {\n label: 'Tag',\n field: 'tag',\n sortable: true,\n filterable: true,\n filterType: 'select',\n filterOptionsLoader: loadNoteTags,\n verticalAlign: 'top',\n },\n body: {\n label: 'Note',\n field: 'body',\n sortable: false,\n },\n },\n\n // Action buttons\n actions: {\n column: {\n verticalAlign: 'top',\n },\n items: [\n {\n key: 'edit',\n icon: ActionIcons.edit,\n size: 'xs',\n variant: 'primary',\n type: 'button',\n onClick: (row: NoteRow) => openEditModal(row),\n },\n ],\n },\n\n // Pagination settings\n pagination: {\n pageSize: 25,\n },\n});\n\n// Mutations\nconst { mutate: createNote } = useMutation((api, input: any) => api.notes.createNote(input), {\n invalidate: /^notes?:/,\n onSuccess: () => {\n // Refetch tags to include any new tags\n refetchNoteTags();\n },\n});\n\n// Form handlers\nconst handleSubmit = async (formData: any) => {\n const result = await createNote({\n record_id: props.recordId,\n record_type: props.recordType,\n body: formData.body,\n tag: formData.tag || null,\n is_internal: isInternalNote.value,\n });\n refresh();\n return result;\n};\n\nconst handleSuccess = async () => {\n refreshFormData();\n toast.success('Note added successfully!');\n refresh();\n};\n\nconst handleError = (error: Error | unknown) => {\n form.setSubmitError(error instanceof Error ? error.message : 'An unknown error occurred');\n};\n\n// Edit modal handlers\nconst openEditModal = (note: NoteRow) => {\n selectedNote.value = note;\n isEditModalOpen.value = true;\n};\n\nconst closeEditModal = () => {\n isEditModalOpen.value = false;\n selectedNote.value = null;\n};\n\nconst handleEditSuccess = async () => {\n // Refetch tags to include any new tags from the updated note\n await refetchNoteTags();\n // Refresh the data table to show updated note\n refresh();\n};\n\n// Watch for changes in recordId or recordType to refresh the data table\nwatch(\n () => [props.recordId, props.recordType],\n () => {\n if (props.recordId && props.recordType) {\n refresh();\n }\n },\n);\n\n// Watch for changes in noteTagsData to refresh form's data loaders\n// This ensures the create note form's tag combobox gets updated options\nwatch(\n noteTagsData,\n async () => {\n // Reload the tag data loader to refresh form.extraData.tag\n if (form.extraData && form.extraData.tag !== undefined) {\n const newTags = await loadNoteTags();\n form.extraData.tag = newTags;\n }\n },\n { deep: true },\n);\n</script>\n","<template>\n <NoteList :recordId=\"team_id\" recordType=\"team\" mode=\"customer\" />\n</template>\n\n<script setup lang=\"ts\">\nimport NoteList from '../note/components/NoteList.vue';\nimport { useRoute } from 'vue-router';\n\nconst route = useRoute();\nconst team_id = route.params.id as string;\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"TeamNotesTab-Dj12Q2gD.js","names":["variables: NoteFiltersDto"],"sources":["../src/slices/note/noteUpdateMetadata.ts","../src/slices/note/components/EditNoteModal.vue","../src/slices/note/noteFormMetadata.ts","../src/slices/note/noteRowSchema.ts","../src/slices/note/components/NoteList.vue","../src/slices/team/TeamNotesTab.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { NoteUpdateSchema } from '@dragonmastery/dragoncore-shared';\n\nexport const noteUpdateMetadata = withMetadata(\n NoteUpdateSchema.pick({ body: true, tag: true }),\n 'noteUpdateForm',\n {\n body: {\n label: 'Note',\n placeholder: 'Enter your note here...',\n inputType: 'textarea',\n helpText: 'Update the note content',\n },\n tag: {\n label: 'Tag',\n inputType: 'combobox',\n helpText: 'Optional tag to categorize this note',\n },\n },\n);\n","<template>\n <dialog ref=\"modal\" class=\"modal\">\n <div class=\"modal-box\">\n <h3 class=\"font-bold text-lg mb-4\">Edit Note</h3>\n\n <ZiniaForm\n @handle-submit=\"handleSubmit\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n title=\"\"\n subtitle=\"\"\n >\n <zinia.TagField :select-options=\"form.extraData.tag || []\" :allow-create=\"true\" />\n <zinia.BodyField />\n\n <!-- Show visibility status (read-only) -->\n <div class=\"form-control\">\n <label class=\"label\">\n <span class=\"label-text\">Visibility</span>\n <span class=\"badge\" :class=\"isInternalNote ? 'badge-warning' : 'badge-info'\">\n {{ isInternalNote ? 'Internal' : 'External' }}\n </span>\n </label>\n </div>\n\n <div v-if=\"form.submitError\" class=\"alert alert-error mt-2\">\n <span>{{ form.submitError }}</span>\n </div>\n\n <div class=\"flex justify-end gap-2 mt-6\">\n <button type=\"button\" class=\"btn btn-ghost\" @click=\"closeModal\">Cancel</button>\n <ZiniaSubmitButton submitText=\"Update Note\" submittingText=\"Updating...\" />\n </div>\n\n <ZiniaFormErrorsSummary title=\"Please fix the following errors:\" />\n </ZiniaForm>\n </div>\n <form method=\"dialog\" class=\"modal-backdrop\">\n <button @click=\"closeModal\">close</button>\n </form>\n </dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { ref, watch } from 'vue';\nimport { toast } from 'vue3-toastify';\nimport { useMutation } from '../../../composables/useMutation';\nimport { useQuery } from '../../../composables/useQuery';\nimport type { NoteRow } from '../noteRowSchema';\nimport { noteUpdateMetadata } from '../noteUpdateMetadata';\n\ninterface Props {\n note: NoteRow | null;\n isOpen: boolean;\n}\n\ninterface Emits {\n (e: 'close'): void;\n (e: 'success'): void;\n}\n\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\n\nconst modal = ref<HTMLDialogElement>();\n\n// Internal note toggle state\nconst isInternalNote = ref(false);\n\n// Fetch note tags for combobox\nconst {\n data: noteTagsData,\n loading: noteTagsLoading,\n error: noteTagsError,\n refetch: refetchNoteTags,\n} = useQuery((api) => api.notes.getNoteTags());\n\n// Load note tags for combobox options\nconst loadNoteTags = async () => {\n // Wait for query to complete\n while (noteTagsLoading.value) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n if (noteTagsError.value) {\n return [];\n }\n\n const tags = noteTagsData.value || [];\n\n return tags.map((tag: string) => ({\n value: tag,\n label: tag,\n }));\n};\n\nconst {\n form,\n zinia,\n ZiniaForm,\n ZiniaSubmitButton,\n ZiniaFormErrorsSummary,\n clearSavedFormState,\n refreshFormData,\n} = useForm(noteUpdateMetadata, {\n storeName: `edit-note-form-${props.note?.id || 'new'}`,\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n dataLoaders: {\n tag: loadNoteTags,\n },\n fetchData: async () => {\n if (!props.note) {\n return { body: '', tag: null };\n }\n return {\n body: props.note.body || '',\n tag: props.note.tag || null,\n };\n },\n});\n\nconst { mutate: updateNote } = useMutation(\n (api, input: { id: string; body: string; tag?: string | null }) =>\n api.notes.updateNote(input),\n {\n invalidate: /^notes?:/,\n onSuccess: () => {\n // Refetch tags to include any new tags\n refetchNoteTags();\n },\n },\n);\n\nconst handleSubmit = async (formData: any) => {\n if (!props.note) {\n throw new Error('No note selected for editing');\n }\n\n const response = await updateNote({\n id: props.note.id,\n body: formData.body,\n tag: formData.tag || null,\n });\n\n if (!response) {\n throw new Error('Failed to update note');\n }\n\n return response;\n};\n\nconst handleSuccess = async () => {\n clearSavedFormState();\n refreshFormData(); // Reset form to initial state\n toast.success('Note updated successfully!');\n emit('success');\n closeModal();\n};\n\nconst handleError = (error: Error | unknown) => {\n form.setSubmitError(error instanceof Error ? error.message : 'An unknown error occurred');\n};\n\nconst closeModal = () => {\n emit('close');\n};\n\n// Watch for modal open/close\nwatch(\n () => props.isOpen,\n (isOpen) => {\n if (isOpen && modal.value) {\n modal.value.showModal();\n } else if (!isOpen && modal.value) {\n modal.value.close();\n // Reset form when modal closes\n refreshFormData();\n }\n },\n);\n\n// Watch for note changes to refresh form data\nwatch(\n () => props.note,\n () => {\n if (props.note && props.isOpen) {\n form.setValue('body', props.note.body || '');\n form.setValue('tag', props.note.tag || null);\n isInternalNote.value = props.note.is_internal || false;\n }\n },\n { immediate: true },\n);\n</script>\n","import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { NoteCreateSchema } from '@dragonmastery/dragoncore-shared';\n\nexport const noteCreateMetadata = withMetadata(\n NoteCreateSchema.pick({ body: true, is_internal: true, tag: true }),\n 'noteCreateForm',\n {\n body: {\n label: 'Note',\n placeholder: 'Enter your note here...',\n inputType: 'textarea',\n helpText: 'Add a note about this record',\n },\n is_internal: {\n label: 'Internal Note',\n helpText: 'Check this box to make this note visible only to staff',\n },\n tag: {\n label: 'Tag',\n inputType: 'combobox',\n helpText: 'Optional tag to categorize this note',\n },\n },\n);\n","import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { NoteReadSchema } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\n\nexport const noteRowSchemaWithMetadata = withMetadata(NoteReadSchema, 'noteRowSchema', {\n body: { label: 'Note' },\n tag: { label: 'Tag', sortable: true },\n is_internal: { label: 'Visibility', sortable: true },\n created_at: { label: 'Created', sortable: true },\n created_by: { label: 'Created By', sortable: true },\n updated_at: { label: 'Updated', sortable: true },\n});\n\nexport type NoteRow = z.infer<typeof NoteReadSchema>;\n","<template>\n <div class=\"space-y-6\">\n <!-- Add Note Form -->\n <div class=\"mt-4\">\n <ZiniaForm\n @handle-submit=\"handleSubmit\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n title=\"\"\n subtitle=\"\"\n >\n <zinia.TagField :select-options=\"form.extraData.tag || []\" :allow-create=\"true\" />\n <zinia.BodyField />\n\n <div v-if=\"form.submitError\" class=\"alert alert-error mt-2\">\n <span>{{ form.submitError }}</span>\n </div>\n\n <div class=\"flex justify-end mt-6\">\n <ZiniaSubmitButton submitText=\"Add Note\" submittingText=\"Adding...\" />\n </div>\n\n <ZiniaFormErrorsSummary title=\"Please fix the following errors:\" />\n </ZiniaForm>\n </div>\n\n <!-- Notes Table -->\n <ZiniaDataTable>\n <template #cell-created_by=\"{ row }\">\n {{ row.created_by_display_name ?? row.created_by ?? '-' }}\n </template>\n <template #cell-created_at=\"{ row }\">\n {{ formatSystemTimestamp(row.created_at) }}\n </template>\n\n <template #cell-tag=\"{ row }\">\n {{ row.tag || '-' }}\n </template>\n\n <template #cell-updated_at=\"{ row }\">\n {{ row.updated_at ? formatSystemTimestamp(row.updated_at) : '-' }}\n </template>\n\n <template #cell-body=\"{ row }\">\n <div class=\"whitespace-pre-wrap\">\n {{ row.body || 'No content' }}\n </div>\n </template>\n </ZiniaDataTable>\n\n <!-- Edit Modal -->\n <EditNoteModal\n :note=\"selectedNote\"\n :is-open=\"isEditModalOpen\"\n @close=\"closeEditModal\"\n @success=\"handleEditSuccess\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { executeWithAuth } from '../../../composables/useRpcAuth';\nimport { getRefreshTokenHandler } from '../../../utils/EnhancedRefreshTokenHandler';\nimport { useMutation } from '../../../composables/useMutation';\nimport { useQuery } from '../../../composables/useQuery';\nimport { formatSystemTimestamp } from '../../../utils/convertToLocalDateTime';\nimport EditNoteModal from './EditNoteModal.vue';\nimport { noteCreateMetadata } from '../noteFormMetadata';\nimport { noteRowSchemaWithMetadata, type NoteRow } from '../noteRowSchema';\nimport { ActionIcons, useCursorDataTable, useForm } from '@dragonmastery/zinia-forms-core';\nimport { OPERATORS, type NoteFiltersDto } from '@dragonmastery/dragoncore-shared';\nimport { computed, ref, watch } from 'vue';\nimport { toast } from 'vue3-toastify';\n\ninterface Props {\n recordId: string;\n recordType: string;\n mode?: 'customer' | 'internal';\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n mode: 'customer',\n});\n\n// Edit modal state\nconst selectedNote = ref<NoteRow | null>(null);\nconst isEditModalOpen = ref(false);\n\n// Computed properties for component intelligence\nconst isInternalNote = computed(() => {\n // Determine internal state based on mode\n return props.mode === 'internal';\n});\n\n// Query filters state\nconst queryFilters = ref<NoteFiltersDto>({\n record_id: { operator: OPERATORS.EQUALS, value: props.recordId },\n record_type: { operator: OPERATORS.EQUALS, value: props.recordType as any },\n});\n\n// Pagination token for breadcrumb navigation\nconst currentPaginationToken = ref<string | undefined | null>();\n\n// Fetch note tags for filter and form\nconst {\n data: noteTagsData,\n loading: noteTagsLoading,\n error: noteTagsError,\n refetch: refetchNoteTags,\n} = useQuery((api) => api.notes.getNoteTags());\n\n// Load note tags for filter options and form combobox\n// This function reads from noteTagsData.value, which is reactive\n// When refetchNoteTags() is called, noteTagsData.value updates\n// The next time this function is called (when filter dropdown opens), it will get fresh data\nconst loadNoteTags = async () => {\n // If query is loading, wait for it to complete to ensure we have fresh data\n while (noteTagsLoading.value) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n if (noteTagsError.value) {\n return [];\n }\n\n const tags = noteTagsData.value || [];\n\n return tags.map((tag: string) => ({\n value: tag,\n label: tag,\n }));\n};\n\n// Form setup\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton, ZiniaFormErrorsSummary, refreshFormData } =\n useForm(noteCreateMetadata, {\n storeName: `note-form-${props.recordId}`,\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n dataLoaders: {\n tag: loadNoteTags,\n },\n fetchData: async () => ({\n body: '',\n tag: null,\n is_internal: isInternalNote.value,\n }),\n });\n\n// Data table configuration\nconst { ZiniaDataTable, refresh } = useCursorDataTable(noteRowSchemaWithMetadata, {\n fetchData: async ({ cursor, pageSize, sort, filters, search }) => {\n // Build query variables\n const variables: NoteFiltersDto = {\n first: pageSize,\n sortBy: sort?.field ? (sort.field as string) : 'created_at',\n sortDirection: (sort?.direction === 'asc' ? 'asc' : 'desc') as any,\n ...(cursor ? { after: cursor } : {}),\n ...(currentPaginationToken.value\n ? { paginationToken: currentPaginationToken.value }\n : {}),\n ...(search ? { search } : {}),\n record_id: { operator: OPERATORS.EQUALS, value: props.recordId },\n record_type: { operator: OPERATORS.EQUALS, value: props.recordType as any },\n ...filters,\n };\n\n // Apply visibility filter based on mode\n if (props.mode === 'customer') {\n variables.is_internal = { operator: OPERATORS.EQUALS, value: false };\n } else if (props.mode === 'internal') {\n variables.is_internal = { operator: OPERATORS.EQUALS, value: true };\n }\n // For 'all' mode, no filter is applied (shows everything)\n\n // Update query filters and execute\n queryFilters.value = variables;\n const result = await executeWithAuth(\n async (api) => {\n return await api.notes.getNotes(variables);\n },\n { refreshTokenHandler: getRefreshTokenHandler() },\n );\n currentPaginationToken.value = result?.pageInfo?.paginationToken;\n\n // Return paginated data\n return {\n data: result?.items || [],\n hasNextPage: result?.pageInfo?.hasNextPage ?? false,\n hasPreviousPage: result?.pageInfo?.hasPreviousPage ?? false,\n prevPageCursor: result?.pageInfo?.prevPageCursor ?? undefined,\n nextPageCursor: result?.pageInfo?.nextPageCursor ?? undefined,\n };\n },\n\n // Column configuration\n columns: {\n created_by: {\n label: 'Created By',\n field: 'created_by',\n sortable: true,\n verticalAlign: 'top',\n },\n updated_at: {\n label: 'Updated',\n field: 'updated_at',\n sortable: true,\n verticalAlign: 'top',\n },\n tag: {\n label: 'Tag',\n field: 'tag',\n sortable: true,\n filterable: true,\n filterType: 'select',\n filterOptionsLoader: loadNoteTags,\n verticalAlign: 'top',\n },\n body: {\n label: 'Note',\n field: 'body',\n sortable: false,\n },\n },\n\n // Action buttons\n actions: {\n column: {\n verticalAlign: 'top',\n },\n items: [\n {\n key: 'edit',\n icon: ActionIcons.edit,\n size: 'xs',\n variant: 'primary',\n type: 'button',\n onClick: (row: NoteRow) => openEditModal(row),\n },\n ],\n },\n\n // Pagination settings\n pagination: {\n pageSize: 25,\n },\n});\n\n// Mutations\nconst { mutate: createNote } = useMutation((api, input: any) => api.notes.createNote(input), {\n invalidate: /^notes?:/,\n onSuccess: () => {\n // Refetch tags to include any new tags\n refetchNoteTags();\n },\n});\n\n// Form handlers\nconst handleSubmit = async (formData: any) => {\n const result = await createNote({\n record_id: props.recordId,\n record_type: props.recordType,\n body: formData.body,\n tag: formData.tag || null,\n is_internal: isInternalNote.value,\n });\n refresh();\n return result;\n};\n\nconst handleSuccess = async () => {\n refreshFormData();\n toast.success('Note added successfully!');\n refresh();\n};\n\nconst handleError = (error: Error | unknown) => {\n form.setSubmitError(error instanceof Error ? error.message : 'An unknown error occurred');\n};\n\n// Edit modal handlers\nconst openEditModal = (note: NoteRow) => {\n selectedNote.value = note;\n isEditModalOpen.value = true;\n};\n\nconst closeEditModal = () => {\n isEditModalOpen.value = false;\n selectedNote.value = null;\n};\n\nconst handleEditSuccess = async () => {\n // Refetch tags to include any new tags from the updated note\n await refetchNoteTags();\n // Refresh the data table to show updated note\n refresh();\n};\n\n// Watch for changes in recordId or recordType to refresh the data table\nwatch(\n () => [props.recordId, props.recordType],\n () => {\n if (props.recordId && props.recordType) {\n refresh();\n }\n },\n);\n\n// Watch for changes in noteTagsData to refresh form's data loaders\n// This ensures the create note form's tag combobox gets updated options\nwatch(\n noteTagsData,\n async () => {\n // Reload the tag data loader to refresh form.extraData.tag\n if (form.extraData && form.extraData.tag !== undefined) {\n const newTags = await loadNoteTags();\n form.extraData.tag = newTags;\n }\n },\n { deep: true },\n);\n</script>\n","<template>\n <NoteList :recordId=\"team_id\" recordType=\"team\" mode=\"customer\" />\n</template>\n\n<script setup lang=\"ts\">\nimport NoteList from '../note/components/NoteList.vue';\nimport { useRoute } from 'vue-router';\n\nconst route = useRoute();\nconst team_id = route.params.id as string;\n</script>\n"],"mappings":"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"}
@@ -2,6 +2,6 @@ import "./useRpcAuth-SgNzCAPa.js";
2
2
  import "./useQueryCache-DIGf3fCM.js";
3
3
  import "./useMutation-DzRSXPB1.js";
4
4
  import "./useQuery-bvJabe9Q.js";
5
- import { t as EditUserPage_default } from "./EditUserPage-0lqrgP5T.js";
5
+ import { t as TeamNotesTab_default } from "./TeamNotesTab-Dj12Q2gD.js";
6
6
 
7
- export { EditUserPage_default as default };
7
+ export { TeamNotesTab_default as default };