@dragonmastery/dragoncore-vue 0.0.8 → 0.0.9
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/package.json +4 -13
- package/dist/AppLink-CHMMrSFI.js +0 -54
- package/dist/AppLink-CHMMrSFI.js.map +0 -1
- package/dist/Appearance-BfPdKMXw.js +0 -70
- package/dist/Appearance-BfPdKMXw.js.map +0 -1
- package/dist/Appearance-C3WguxT-.js +0 -3
- package/dist/ChangePasswordPage-DCews8GU.js +0 -86
- package/dist/ChangePasswordPage-DCews8GU.js.map +0 -1
- package/dist/ChangePasswordPage-Dm5vW0nl.js +0 -6
- package/dist/CreateTeamForm-Cg4sD65k.js +0 -27
- package/dist/CreateTeamMemberForm-CiG-fCJD.js +0 -27
- package/dist/CreateUserPage-B8qeBZij.js +0 -76
- package/dist/CreateUserPage-B8qeBZij.js.map +0 -1
- package/dist/CreateUserPage-WjYDkwpb.js +0 -6
- package/dist/CreditBalanceDashboard-BUdKWieE.js +0 -27
- package/dist/CreditManagement-BcyUY_J0.js +0 -27
- package/dist/CustomerCreateSupportTicketForm-BplS0xSi.js +0 -27
- package/dist/CustomerSupportTicketDetailPage-DZQCplSM.js +0 -717
- package/dist/CustomerSupportTicketDetailPage-DZQCplSM.js.map +0 -1
- package/dist/CustomerSupportTicketList-DGwy4Wje.js +0 -27
- package/dist/CustomerSupportTicketParent-BnmTFigo.js +0 -7
- package/dist/CustomerSupportTicketParent-BzY4pmBk.js +0 -66
- package/dist/CustomerSupportTicketParent-BzY4pmBk.js.map +0 -1
- package/dist/CustomerSupportTicketSuccess-DC1jJG1E.js +0 -27
- package/dist/EditTeamForm-BnPwhv5B.js +0 -27
- package/dist/EditTeamMemberForm-B8-pI6Xm.js +0 -6
- package/dist/EditTeamMemberForm-CKbKomrL.js +0 -191
- package/dist/EditTeamMemberForm-CKbKomrL.js.map +0 -1
- package/dist/EditUserPage-BG-Fkx_c.js +0 -7
- package/dist/EditUserPage-XqF25iwz.js +0 -112
- package/dist/EditUserPage-XqF25iwz.js.map +0 -1
- package/dist/ForgotPassword-CjWv2V7p.js +0 -7
- package/dist/ForgotPassword-D3bjL48L.js +0 -73
- package/dist/ForgotPassword-D3bjL48L.js.map +0 -1
- package/dist/LoginForm--br4Il85.js +0 -7
- package/dist/LoginForm-C85U2E2r.js +0 -116
- package/dist/LoginForm-C85U2E2r.js.map +0 -1
- package/dist/Logout-DHT-5Qz3.js +0 -6
- package/dist/Logout-DZuWLh0O.js +0 -38
- package/dist/Logout-DZuWLh0O.js.map +0 -1
- package/dist/ResetPassword-M6mvTS24.js +0 -27
- package/dist/SavedFiltersPage-D3vJrfzt.js +0 -419
- package/dist/SavedFiltersPage-D3vJrfzt.js.map +0 -1
- package/dist/Signup-VZa7U-Ur.js +0 -7
- package/dist/Signup-hpV8J5cM.js +0 -106
- package/dist/Signup-hpV8J5cM.js.map +0 -1
- package/dist/StaffCreateSupportTicketForm-Bc7UnK0Q.js +0 -27
- package/dist/StaffSupportTicketDetailPage-DY07Ez0R.js +0 -1928
- package/dist/StaffSupportTicketDetailPage-DY07Ez0R.js.map +0 -1
- package/dist/StaffSupportTicketList-ChJP_67k.js +0 -27
- package/dist/StaffSupportTicketParent-CWWhaM37.js +0 -66
- package/dist/StaffSupportTicketParent-CWWhaM37.js.map +0 -1
- package/dist/StaffSupportTicketParent-Dp1G85wc.js +0 -7
- package/dist/StaffSupportTicketSuccess-B6X_dP4f.js +0 -27
- package/dist/SupportStaffPage-nd0HowtH.js +0 -156
- package/dist/SupportStaffPage-nd0HowtH.js.map +0 -1
- package/dist/SupportTicketDevLifecycleBadge-Ba-Rm6QW.js +0 -116
- package/dist/SupportTicketDevLifecycleBadge-Ba-Rm6QW.js.map +0 -1
- package/dist/SupportTicketMaintenancePage-rcJ7EfDj.js +0 -56
- package/dist/SupportTicketMaintenancePage-rcJ7EfDj.js.map +0 -1
- package/dist/TeamAttachmentsTab-Dk_Bnk-1.js +0 -27
- package/dist/TeamHistoryTab-CNelXR3Q.js +0 -232
- package/dist/TeamHistoryTab-CNelXR3Q.js.map +0 -1
- package/dist/TeamHistoryTab-siesF93u.js +0 -4
- package/dist/TeamList-BtLzbjls.js +0 -27
- package/dist/TeamMemberList-EoDXIr0w.js +0 -27
- package/dist/TeamMemberParent-DZ5YVyi6.js +0 -27
- package/dist/TeamMembersTab-4gmnP9sD.js +0 -21
- package/dist/TeamMembersTab-4gmnP9sD.js.map +0 -1
- package/dist/TeamMembersTab-DTJxmb-M.js +0 -3
- package/dist/TeamNotesTab-BhVRLG8h.js +0 -458
- package/dist/TeamNotesTab-BhVRLG8h.js.map +0 -1
- package/dist/TeamNotesTab-Crp-afAe.js +0 -7
- package/dist/TeamParent-CbrXXzAr.js +0 -27
- package/dist/TimelineNoteInput-BVqF4MtZ.js +0 -513
- package/dist/TimelineNoteInput-BVqF4MtZ.js.map +0 -1
- package/dist/TimelineSystemEvent-D58zN850.js +0 -1897
- package/dist/TimelineSystemEvent-D58zN850.js.map +0 -1
- package/dist/UserListPage-D68AjrjM.js +0 -4
- package/dist/UserListPage-OGYOLwlw.js +0 -153
- package/dist/UserListPage-OGYOLwlw.js.map +0 -1
- package/dist/UserProfilePage-Q68NAGQQ.js +0 -7
- package/dist/UserProfilePage-uAIfC_NW.js +0 -125
- package/dist/UserProfilePage-uAIfC_NW.js.map +0 -1
- package/dist/ViewTeam-DpE_NfRq.js +0 -27
- package/dist/ViewTeamMember-BdBwkuXC.js +0 -27
- package/dist/convertToLocalDateTime-DOSGtMn8.js +0 -121
- package/dist/convertToLocalDateTime-DOSGtMn8.js.map +0 -1
- package/dist/displayIdFormatter-B1ZKgofu.js +0 -13
- package/dist/displayIdFormatter-B1ZKgofu.js.map +0 -1
- package/dist/extractRpcErrorMessage-C_UbKgHL.js +0 -20
- package/dist/extractRpcErrorMessage-C_UbKgHL.js.map +0 -1
- package/dist/index.d.ts +0 -6366
- package/dist/index.js +0 -30
- package/dist/src-CEBiyg_f.css +0 -13
- package/dist/src-CEBiyg_f.css.map +0 -1
- package/dist/src-CHw8DdkR.js +0 -9200
- package/dist/src-CHw8DdkR.js.map +0 -1
- package/dist/useBreadcrumbs-DmgSucoe.js +0 -41
- package/dist/useBreadcrumbs-DmgSucoe.js.map +0 -1
- package/dist/useMutation-B4_S4Xoa.js +0 -50
- package/dist/useMutation-B4_S4Xoa.js.map +0 -1
- package/dist/useQuery-B7ndu5_P.js +0 -107
- package/dist/useQuery-B7ndu5_P.js.map +0 -1
- package/dist/useQueryCache-DqcDMsxb.js +0 -254
- package/dist/useQueryCache-DqcDMsxb.js.map +0 -1
- package/dist/useRpcAuth-Dp2sec-X.js +0 -731
- package/dist/useRpcAuth-Dp2sec-X.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UserProfilePage-uAIfC_NW.js","names":[],"sources":["../src/slices/user/features/user_profile/userProfileSchema.ts","../src/slices/user/features/user_profile/UserProfilePage.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { UserProfileBaseSchema, UserProfileUpdateSchema } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\n\n// Define the login form type\nexport type UserProfileForm = z.infer<typeof UserProfileBaseSchema>;\n\n// Enhance the schema with metadata\nexport const userProfileSchemaWithMetadata = withMetadata(\n UserProfileUpdateSchema,\n 'userProfileSchema',\n {\n first_name: {\n inputType: 'text',\n placeholder: 'Enter first name',\n helpText: 'Enter the first name',\n autocomplete: 'first-name',\n autofocus: true,\n },\n\n last_name: {\n inputType: 'text',\n placeholder: 'Enter last name',\n helpText: 'Enter the last name',\n autocomplete: 'last-name',\n },\n\n bio: {\n inputType: 'textarea',\n placeholder: 'Enter bio',\n helpText: 'Enter a short bio',\n },\n },\n);\n","<template>\n <div v-if=\"form.isLoading\" class=\"flex justify-center items-center p-8\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n <div v-else-if=\"form.loadError\" class=\"alert alert-error mb-4\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"stroke-current shrink-0 h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <span>{{ form.loadError }}</span>\n </div>\n <div v-else class=\"max-w-md mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Update User Profile</h1>\n\n <ZiniaForm @handle-submit=\"handleSubmit\" @success=\"handleSuccess\" @error=\"handleError\">\n <zinia.FirstNameField />\n <zinia.LastNameField />\n <zinia.BioField />\n\n <ZiniaSubmitButton submitText=\"Update\" submittingText=\"Updating...\" />\n </ZiniaForm>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { UserProfileUpdateDto } from '@dragonmastery/dragoncore-shared';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { toast } from 'vue3-toastify';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useQuery } from '../../../../composables/useQuery';\nimport { useUserSessionStore } from '../../../../composables/useUserSessionStore';\nimport { userProfileSchemaWithMetadata } from './userProfileSchema';\n\n//user session\nconst session = useUserSessionStore();\n\n// fetch user profile data\nconst { data: userProfileData, loading: userProfileFetching } = useQuery(\n (api) => api.userProfiles.getCurrentUserProfile(),\n {\n enabled: !!session.userSession?.user.userId,\n staleTime: 5 * 60 * 1000,\n },\n);\n\n// Create a type-safe form using our schema with metadata\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(userProfileSchemaWithMetadata, {\n storeName: 'user-profile-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n fetchData: async () => {\n while (userProfileFetching.value) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n if (!userProfileData.value) {\n return {\n user_id: session.userSession?.user.userId || '',\n bio: '',\n first_name: '',\n last_name: '',\n };\n }\n\n return {\n user_id: userProfileData.value.user_id,\n bio: userProfileData.value.bio || '',\n first_name: userProfileData.value.first_name || '',\n last_name: userProfileData.value.last_name || '',\n };\n },\n});\n\nconst { mutate: updateUserProfile } = useMutation(\n (api, input: UserProfileUpdateDto) => api.userProfiles.updateUserProfile(input),\n { invalidate: /^user:profile/ },\n);\n\n// Handle form submission\nconst handleSubmit = async (data: UserProfileUpdateDto) => {\n if (!session.userSession?.user.userId) {\n throw new Error('User session not found');\n }\n\n const result = await updateUserProfile({\n user_id: session.userSession?.user.userId,\n first_name: data.first_name,\n last_name: data.last_name,\n bio: data.bio,\n });\n if (!result) throw new Error('Update user profile failed');\n\n return result;\n};\n\n// Handle success\nconst handleSuccess = (_data: any) => {\n toast.success('User profile updated successfully!');\n};\n\n// Handle error\nconst handleError = (error: any) => {\n toast.error(error.message || 'Update user profile failed');\n};\n</script>\n"],"mappings":";;;;;;;;;AAQA,MAAa,gCAAgC,aAC3C,yBACA,qBACA;CACE,YAAY;EACV,WAAW;EACX,aAAa;EACb,UAAU;EACV,cAAc;EACd,WAAW;EACZ;CAED,WAAW;EACT,WAAW;EACX,aAAa;EACb,UAAU;EACV,cAAc;EACf;CAED,KAAK;EACH,WAAW;EACX,aAAa;EACb,UAAU;EACX;CACF,CACF;;;;;;;;;;;;;;;;;;;ECUD,MAAM,UAAU,qBAAqB;EAGrC,MAAM,EAAE,MAAM,iBAAiB,SAAS,wBAAwB,UAC7D,QAAQ,IAAI,aAAa,uBAAuB,EACjD;GACE,SAAS,CAAC,CAAC,QAAQ,aAAa,KAAK;GACrC,WAAW,MAAS;GACrB,CACF;EAGD,MAAM,EAAE,MAAM,OAAO,WAAW,sBAAsB,QAAQ,+BAA+B;GAC3F,WAAW;GACX,uBAAuB;GACvB,aAAa;GACb,WAAW,YAAY;AACrB,WAAO,oBAAoB,MACzB,OAAM,IAAI,SAAS,YAAY,WAAW,SAAS,IAAI,CAAC;AAG1D,QAAI,CAAC,gBAAgB,MACnB,QAAO;KACL,SAAS,QAAQ,aAAa,KAAK,UAAU;KAC7C,KAAK;KACL,YAAY;KACZ,WAAW;KACZ;AAGH,WAAO;KACL,SAAS,gBAAgB,MAAM;KAC/B,KAAK,gBAAgB,MAAM,OAAO;KAClC,YAAY,gBAAgB,MAAM,cAAc;KAChD,WAAW,gBAAgB,MAAM,aAAa;KAC/C;;GAEJ,CAAC;EAEF,MAAM,EAAE,QAAQ,sBAAsB,aACnC,KAAK,UAAgC,IAAI,aAAa,kBAAkB,MAAM,EAC/E,EAAE,YAAY,iBAAiB,CAChC;EAGD,MAAM,eAAe,OAAO,SAA+B;AACzD,OAAI,CAAC,QAAQ,aAAa,KAAK,OAC7B,OAAM,IAAI,MAAM,yBAAyB;GAG3C,MAAM,SAAS,MAAM,kBAAkB;IACrC,SAAS,QAAQ,aAAa,KAAK;IACnC,YAAY,KAAK;IACjB,WAAW,KAAK;IAChB,KAAK,KAAK;IACX,CAAC;AACF,OAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,6BAA6B;AAE1D,UAAO;;EAIT,MAAM,iBAAiB,UAAe;AACpC,SAAM,QAAQ,qCAAqC;;EAIrD,MAAM,eAAe,UAAe;AAClC,SAAM,MAAM,MAAM,WAAW,6BAA6B;;;UA9G/C,MAAA,KAAI,CAAC,aAAA,WAAA,EAAhB,mBAEM,OAFN,YAEM,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CADJ,mBAAwD,QAAA,EAAlD,OAAM,sCAAoC,EAAA,MAAA,GAAA,CAAA,EAAA,CAAA,IAElC,MAAA,KAAI,CAAC,aAAA,WAAA,EAArB,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,mBAAiC,QAAA,MAAA,gBAAxB,MAAA,KAAI,CAAC,UAAS,EAAA,EAAA,CAAA,CAAA,KAAA,WAAA,EAEzB,mBAUM,OAVN,YAUM,CAAA,OAAA,OAAA,OAAA,KATJ,mBAAwE,MAAA,EAApE,OAAM,uCAAqC,EAAC,uBAAmB,GAAA,GAEnE,YAMY,MAAA,UAAA,EAAA;IANA,gBAAe;IAAe,WAAS;IAAgB,SAAO;;2BAChD;KAAxB,YAAwB,MAAA,MAAA,CAAA,eAAA;KACxB,YAAuB,MAAA,MAAA,CAAA,cAAA;KACvB,YAAkB,MAAA,MAAA,CAAA,SAAA;KAElB,YAAsE,MAAA,kBAAA,EAAA;MAAnD,YAAW;MAAS,gBAAe"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import "./useRpcAuth-Dp2sec-X.js";
|
|
2
|
-
import "./useQueryCache-DqcDMsxb.js";
|
|
3
|
-
import "./useMutation-B4_S4Xoa.js";
|
|
4
|
-
import "./useQuery-B7ndu5_P.js";
|
|
5
|
-
import { lt as ViewTeam_default } from "./src-CHw8DdkR.js";
|
|
6
|
-
import "./AppLink-CHMMrSFI.js";
|
|
7
|
-
import "./TimelineSystemEvent-D58zN850.js";
|
|
8
|
-
import "./TeamMembersTab-4gmnP9sD.js";
|
|
9
|
-
import "./Appearance-BfPdKMXw.js";
|
|
10
|
-
import "./useBreadcrumbs-DmgSucoe.js";
|
|
11
|
-
import "./EditTeamMemberForm-CKbKomrL.js";
|
|
12
|
-
import "./TeamHistoryTab-CNelXR3Q.js";
|
|
13
|
-
import "./UserProfilePage-uAIfC_NW.js";
|
|
14
|
-
import "./ChangePasswordPage-DCews8GU.js";
|
|
15
|
-
import "./TeamNotesTab-BhVRLG8h.js";
|
|
16
|
-
import "./CustomerSupportTicketParent-BzY4pmBk.js";
|
|
17
|
-
import "./SupportTicketDevLifecycleBadge-Ba-Rm6QW.js";
|
|
18
|
-
import "./StaffSupportTicketParent-CWWhaM37.js";
|
|
19
|
-
import "./LoginForm-C85U2E2r.js";
|
|
20
|
-
import "./Signup-hpV8J5cM.js";
|
|
21
|
-
import "./ForgotPassword-D3bjL48L.js";
|
|
22
|
-
import "./Logout-DZuWLh0O.js";
|
|
23
|
-
import "./UserListPage-OGYOLwlw.js";
|
|
24
|
-
import "./CreateUserPage-B8qeBZij.js";
|
|
25
|
-
import "./EditUserPage-XqF25iwz.js";
|
|
26
|
-
|
|
27
|
-
export { ViewTeam_default as default };
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import "./useRpcAuth-Dp2sec-X.js";
|
|
2
|
-
import "./useQueryCache-DqcDMsxb.js";
|
|
3
|
-
import "./useMutation-B4_S4Xoa.js";
|
|
4
|
-
import "./useQuery-B7ndu5_P.js";
|
|
5
|
-
import { rt as ViewTeamMember_default } from "./src-CHw8DdkR.js";
|
|
6
|
-
import "./AppLink-CHMMrSFI.js";
|
|
7
|
-
import "./TimelineSystemEvent-D58zN850.js";
|
|
8
|
-
import "./TeamMembersTab-4gmnP9sD.js";
|
|
9
|
-
import "./Appearance-BfPdKMXw.js";
|
|
10
|
-
import "./useBreadcrumbs-DmgSucoe.js";
|
|
11
|
-
import "./EditTeamMemberForm-CKbKomrL.js";
|
|
12
|
-
import "./TeamHistoryTab-CNelXR3Q.js";
|
|
13
|
-
import "./UserProfilePage-uAIfC_NW.js";
|
|
14
|
-
import "./ChangePasswordPage-DCews8GU.js";
|
|
15
|
-
import "./TeamNotesTab-BhVRLG8h.js";
|
|
16
|
-
import "./CustomerSupportTicketParent-BzY4pmBk.js";
|
|
17
|
-
import "./SupportTicketDevLifecycleBadge-Ba-Rm6QW.js";
|
|
18
|
-
import "./StaffSupportTicketParent-CWWhaM37.js";
|
|
19
|
-
import "./LoginForm-C85U2E2r.js";
|
|
20
|
-
import "./Signup-hpV8J5cM.js";
|
|
21
|
-
import "./ForgotPassword-D3bjL48L.js";
|
|
22
|
-
import "./Logout-DZuWLh0O.js";
|
|
23
|
-
import "./UserListPage-OGYOLwlw.js";
|
|
24
|
-
import "./CreateUserPage-B8qeBZij.js";
|
|
25
|
-
import "./EditUserPage-XqF25iwz.js";
|
|
26
|
-
|
|
27
|
-
export { ViewTeamMember_default as default };
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
//#region src/utils/convertToLocalDateTime.ts
|
|
2
|
-
/**
|
|
3
|
-
* Format a date value to ISO date string (YYYY-MM-DD)
|
|
4
|
-
* Used as formatter for date input fields to ensure consistent ISO format
|
|
5
|
-
* @param date - Date string or Date object
|
|
6
|
-
* @returns ISO date string (YYYY-MM-DD) or null if invalid
|
|
7
|
-
*/
|
|
8
|
-
function formatToISODate(date) {
|
|
9
|
-
if (!date) return null;
|
|
10
|
-
try {
|
|
11
|
-
return new Date(date).toISOString().split("T")[0] ?? null;
|
|
12
|
-
} catch (e) {
|
|
13
|
-
console.error("Invalid date format:", e);
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Extracts YYYY-MM-DD from a date string (handles both date-only and ISO format)
|
|
19
|
-
* Used to avoid timezone issues: ISO strings like "2024-02-02T00:00:00.000Z" are
|
|
20
|
-
* interpreted as UTC by Date(), which shows wrong date in western timezones
|
|
21
|
-
*/
|
|
22
|
-
function extractDateOnly(dateString) {
|
|
23
|
-
const datePart = dateString.match(/^(\d{4}-\d{2}-\d{2})/)?.[1];
|
|
24
|
-
return datePart != null ? datePart : null;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Formats user-inputted date-only fields (YYYY-MM-DD format) or ISO timestamps
|
|
28
|
-
* These represent calendar dates in the user's local context, not precise timestamps
|
|
29
|
-
* @param dateString - Date string in YYYY-MM-DD format or ISO timestamp
|
|
30
|
-
* @param dateOnly - If true, returns only the date portion without time (default: true)
|
|
31
|
-
* @returns Formatted date string or empty string if no date provided
|
|
32
|
-
*/
|
|
33
|
-
function formatUserDate(dateString, dateOnly = true) {
|
|
34
|
-
if (!dateString) return "";
|
|
35
|
-
try {
|
|
36
|
-
let date;
|
|
37
|
-
const dateOnlyPart = extractDateOnly(dateString);
|
|
38
|
-
if (dateOnlyPart) {
|
|
39
|
-
const [year, month, day] = dateOnlyPart.split("-").map(Number);
|
|
40
|
-
date = new Date(year, month - 1, day);
|
|
41
|
-
} else date = new Date(dateString);
|
|
42
|
-
if (isNaN(date.getTime())) {
|
|
43
|
-
console.warn("formatUserDate received invalid date:", dateString);
|
|
44
|
-
return dateString;
|
|
45
|
-
}
|
|
46
|
-
if (dateOnly) return date.toLocaleDateString(void 0, {
|
|
47
|
-
year: "numeric",
|
|
48
|
-
month: "short",
|
|
49
|
-
day: "numeric"
|
|
50
|
-
});
|
|
51
|
-
return date.toLocaleString(void 0, {
|
|
52
|
-
year: "numeric",
|
|
53
|
-
month: "short",
|
|
54
|
-
day: "numeric",
|
|
55
|
-
hour: "2-digit",
|
|
56
|
-
minute: "2-digit",
|
|
57
|
-
timeZoneName: "short"
|
|
58
|
-
});
|
|
59
|
-
} catch (error) {
|
|
60
|
-
console.error("Error formatting user date:", error);
|
|
61
|
-
return dateString;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Formats system-generated timestamps (ISO format with time)
|
|
66
|
-
* These represent precise moments in time, typically in UTC
|
|
67
|
-
* @param timestamp - ISO timestamp string or YYYY-MM-DD date string
|
|
68
|
-
* @param dateOnly - If true, returns only the date portion without time (default: false)
|
|
69
|
-
* @returns Formatted timestamp string or empty string if no timestamp provided
|
|
70
|
-
*/
|
|
71
|
-
function formatSystemTimestamp(timestamp, dateOnly = false) {
|
|
72
|
-
if (!timestamp) return "";
|
|
73
|
-
try {
|
|
74
|
-
let date;
|
|
75
|
-
if (dateOnly && /^\d{4}-\d{2}-\d{2}$/.test(timestamp)) {
|
|
76
|
-
const [year, month, day] = timestamp.split("-").map(Number);
|
|
77
|
-
date = new Date(year, month - 1, day);
|
|
78
|
-
} else date = new Date(timestamp);
|
|
79
|
-
if (isNaN(date.getTime())) {
|
|
80
|
-
console.warn("formatSystemTimestamp received invalid timestamp:", timestamp);
|
|
81
|
-
return timestamp;
|
|
82
|
-
}
|
|
83
|
-
if (dateOnly) return date.toLocaleDateString(void 0, {
|
|
84
|
-
year: "numeric",
|
|
85
|
-
month: "short",
|
|
86
|
-
day: "numeric"
|
|
87
|
-
});
|
|
88
|
-
return date.toLocaleString(void 0, {
|
|
89
|
-
year: "numeric",
|
|
90
|
-
month: "short",
|
|
91
|
-
day: "numeric",
|
|
92
|
-
hour: "2-digit",
|
|
93
|
-
minute: "2-digit",
|
|
94
|
-
timeZoneName: "short"
|
|
95
|
-
});
|
|
96
|
-
} catch (error) {
|
|
97
|
-
console.error("Error formatting system timestamp:", error);
|
|
98
|
-
return timestamp;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
const toStringWithLocalTimeZoneOffSet = (date) => {
|
|
102
|
-
if (!date) return null;
|
|
103
|
-
date = date.split("Z")[0];
|
|
104
|
-
if (!date) return null;
|
|
105
|
-
if (date.includes("T")) return date + getTimezoneOffsetString(date);
|
|
106
|
-
else return date + "T12:00:00.000" + getTimezoneOffsetString(date);
|
|
107
|
-
};
|
|
108
|
-
function getTimezoneOffsetString(date) {
|
|
109
|
-
let offset = -new Date(date).getTimezoneOffset();
|
|
110
|
-
let sign = offset < 0 ? "-" : "+";
|
|
111
|
-
let hours = Math.floor(Math.abs(offset / 60));
|
|
112
|
-
let minutes = Math.abs(offset % 60);
|
|
113
|
-
return sign + pad(hours) + ":" + pad(minutes);
|
|
114
|
-
function pad(n) {
|
|
115
|
-
return n < 10 ? "0" + n : "" + n;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
//#endregion
|
|
120
|
-
export { toStringWithLocalTimeZoneOffSet as a, getTimezoneOffsetString as i, formatToISODate as n, formatUserDate as r, formatSystemTimestamp as t };
|
|
121
|
-
//# sourceMappingURL=convertToLocalDateTime-DOSGtMn8.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"convertToLocalDateTime-DOSGtMn8.js","names":["date: Date"],"sources":["../src/utils/convertToLocalDateTime.ts"],"sourcesContent":["/**\n * Format a date value to ISO date string (YYYY-MM-DD)\n * Used as formatter for date input fields to ensure consistent ISO format\n * @param date - Date string or Date object\n * @returns ISO date string (YYYY-MM-DD) or null if invalid\n */\nexport function formatToISODate(date: string | Date | null): string | null {\n if (!date) {\n return null;\n }\n try {\n return new Date(date).toISOString().split('T')[0] ?? null;\n } catch (e) {\n console.error('Invalid date format:', e);\n return null;\n }\n}\n\n/**\n * Extracts YYYY-MM-DD from a date string (handles both date-only and ISO format)\n * Used to avoid timezone issues: ISO strings like \"2024-02-02T00:00:00.000Z\" are\n * interpreted as UTC by Date(), which shows wrong date in western timezones\n */\nfunction extractDateOnly(dateString: string): string | null {\n const match = dateString.match(/^(\\d{4}-\\d{2}-\\d{2})/);\n const datePart = match?.[1];\n return datePart != null ? datePart : null;\n}\n\n/**\n * Formats user-inputted date-only fields (YYYY-MM-DD format) or ISO timestamps\n * These represent calendar dates in the user's local context, not precise timestamps\n * @param dateString - Date string in YYYY-MM-DD format or ISO timestamp\n * @param dateOnly - If true, returns only the date portion without time (default: true)\n * @returns Formatted date string or empty string if no date provided\n */\nexport function formatUserDate(\n dateString: string | null | undefined,\n dateOnly: boolean = true,\n): string {\n if (!dateString) return '';\n\n try {\n let date: Date;\n\n // For date-only fields, extract YYYY-MM-DD and parse as local to avoid timezone issues.\n // ISO strings like \"2024-02-02T00:00:00.000Z\" would otherwise be parsed as UTC midnight,\n // showing the wrong day (e.g. Feb 1 instead of Feb 2) in western timezones.\n const dateOnlyPart = extractDateOnly(dateString);\n if (dateOnlyPart) {\n const [year, month, day] = dateOnlyPart.split('-').map(Number);\n date = new Date(year!, month! - 1, day!); // month is 0-indexed\n } else {\n // Fallback for non-standard formats\n date = new Date(dateString);\n }\n\n // Check if date is valid (e.g., catches invalid dates like 2023-02-31)\n if (isNaN(date.getTime())) {\n console.warn('formatUserDate received invalid date:', dateString);\n return dateString;\n }\n\n if (dateOnly) {\n return date.toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n });\n }\n\n return date.toLocaleString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n timeZoneName: 'short',\n });\n } catch (error) {\n console.error('Error formatting user date:', error);\n return dateString;\n }\n}\n\n/**\n * Formats system-generated timestamps (ISO format with time)\n * These represent precise moments in time, typically in UTC\n * @param timestamp - ISO timestamp string or YYYY-MM-DD date string\n * @param dateOnly - If true, returns only the date portion without time (default: false)\n * @returns Formatted timestamp string or empty string if no timestamp provided\n */\nexport function formatSystemTimestamp(\n timestamp: string | null | undefined,\n dateOnly: boolean = false,\n): string {\n if (!timestamp) return '';\n\n try {\n let date: Date;\n\n // Handle YYYY-MM-DD format specially to avoid timezone issues\n if (dateOnly && /^\\d{4}-\\d{2}-\\d{2}$/.test(timestamp)) {\n // For date-only strings, parse as local date to avoid UTC interpretation\n const [year, month, day] = timestamp.split('-').map(Number);\n date = new Date(year!, month! - 1, day!); // month is 0-indexed\n } else {\n // Handle ISO timestamp or other formats\n date = new Date(timestamp);\n }\n\n // Check if date is valid\n if (isNaN(date.getTime())) {\n console.warn('formatSystemTimestamp received invalid timestamp:', timestamp);\n return timestamp;\n }\n\n if (dateOnly) {\n return date.toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n });\n }\n\n return date.toLocaleString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n timeZoneName: 'short',\n });\n } catch (error) {\n console.error('Error formatting system timestamp:', error);\n return timestamp;\n }\n}\n\nexport const toStringWithLocalTimeZoneOffSet = (date?: string | null) => {\n if (!date) return null;\n date = date.split('Z')[0];\n if (!date) return null;\n if (date.includes('T')) {\n return date + getTimezoneOffsetString(date);\n } else {\n return date + 'T12:00:00.000' + getTimezoneOffsetString(date);\n }\n};\n\nexport function getTimezoneOffsetString(date: string) {\n let offset = -new Date(date).getTimezoneOffset();\n let sign = offset < 0 ? '-' : '+';\n let hours = Math.floor(Math.abs(offset / 60));\n let minutes = Math.abs(offset % 60);\n return sign + pad(hours) + ':' + pad(minutes);\n\n function pad(n: number) {\n return n < 10 ? '0' + n : '' + n;\n }\n}\n"],"mappings":";;;;;;;AAMA,SAAgB,gBAAgB,MAA2C;AACzE,KAAI,CAAC,KACH,QAAO;AAET,KAAI;AACF,SAAO,IAAI,KAAK,KAAK,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,MAAM;UAC9C,GAAG;AACV,UAAQ,MAAM,wBAAwB,EAAE;AACxC,SAAO;;;;;;;;AASX,SAAS,gBAAgB,YAAmC;CAE1D,MAAM,WADQ,WAAW,MAAM,uBAAuB,GAC7B;AACzB,QAAO,YAAY,OAAO,WAAW;;;;;;;;;AAUvC,SAAgB,eACd,YACA,WAAoB,MACZ;AACR,KAAI,CAAC,WAAY,QAAO;AAExB,KAAI;EACF,IAAIA;EAKJ,MAAM,eAAe,gBAAgB,WAAW;AAChD,MAAI,cAAc;GAChB,MAAM,CAAC,MAAM,OAAO,OAAO,aAAa,MAAM,IAAI,CAAC,IAAI,OAAO;AAC9D,UAAO,IAAI,KAAK,MAAO,QAAS,GAAG,IAAK;QAGxC,QAAO,IAAI,KAAK,WAAW;AAI7B,MAAI,MAAM,KAAK,SAAS,CAAC,EAAE;AACzB,WAAQ,KAAK,yCAAyC,WAAW;AACjE,UAAO;;AAGT,MAAI,SACF,QAAO,KAAK,mBAAmB,QAAW;GACxC,MAAM;GACN,OAAO;GACP,KAAK;GACN,CAAC;AAGJ,SAAO,KAAK,eAAe,QAAW;GACpC,MAAM;GACN,OAAO;GACP,KAAK;GACL,MAAM;GACN,QAAQ;GACR,cAAc;GACf,CAAC;UACK,OAAO;AACd,UAAQ,MAAM,+BAA+B,MAAM;AACnD,SAAO;;;;;;;;;;AAWX,SAAgB,sBACd,WACA,WAAoB,OACZ;AACR,KAAI,CAAC,UAAW,QAAO;AAEvB,KAAI;EACF,IAAIA;AAGJ,MAAI,YAAY,sBAAsB,KAAK,UAAU,EAAE;GAErD,MAAM,CAAC,MAAM,OAAO,OAAO,UAAU,MAAM,IAAI,CAAC,IAAI,OAAO;AAC3D,UAAO,IAAI,KAAK,MAAO,QAAS,GAAG,IAAK;QAGxC,QAAO,IAAI,KAAK,UAAU;AAI5B,MAAI,MAAM,KAAK,SAAS,CAAC,EAAE;AACzB,WAAQ,KAAK,qDAAqD,UAAU;AAC5E,UAAO;;AAGT,MAAI,SACF,QAAO,KAAK,mBAAmB,QAAW;GACxC,MAAM;GACN,OAAO;GACP,KAAK;GACN,CAAC;AAGJ,SAAO,KAAK,eAAe,QAAW;GACpC,MAAM;GACN,OAAO;GACP,KAAK;GACL,MAAM;GACN,QAAQ;GACR,cAAc;GACf,CAAC;UACK,OAAO;AACd,UAAQ,MAAM,sCAAsC,MAAM;AAC1D,SAAO;;;AAIX,MAAa,mCAAmC,SAAyB;AACvE,KAAI,CAAC,KAAM,QAAO;AAClB,QAAO,KAAK,MAAM,IAAI,CAAC;AACvB,KAAI,CAAC,KAAM,QAAO;AAClB,KAAI,KAAK,SAAS,IAAI,CACpB,QAAO,OAAO,wBAAwB,KAAK;KAE3C,QAAO,OAAO,kBAAkB,wBAAwB,KAAK;;AAIjE,SAAgB,wBAAwB,MAAc;CACpD,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,CAAC,mBAAmB;CAChD,IAAI,OAAO,SAAS,IAAI,MAAM;CAC9B,IAAI,QAAQ,KAAK,MAAM,KAAK,IAAI,SAAS,GAAG,CAAC;CAC7C,IAAI,UAAU,KAAK,IAAI,SAAS,GAAG;AACnC,QAAO,OAAO,IAAI,MAAM,GAAG,MAAM,IAAI,QAAQ;CAE7C,SAAS,IAAI,GAAW;AACtB,SAAO,IAAI,KAAK,MAAM,IAAI,KAAK"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
//#region src/slices/support_ticket/utils/displayIdFormatter.ts
|
|
2
|
-
/**
|
|
3
|
-
* Formats a display ID with prefix (e.g., "SP-123")
|
|
4
|
-
* Falls back to last 8 chars of ID if display_id not available
|
|
5
|
-
*/
|
|
6
|
-
function formatTicketDisplayId(display_id, display_id_prefix, fallbackId) {
|
|
7
|
-
if (display_id && display_id_prefix) return `${display_id_prefix}-${display_id}`;
|
|
8
|
-
return `#${fallbackId.slice(-8)}`;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
//#endregion
|
|
12
|
-
export { formatTicketDisplayId as t };
|
|
13
|
-
//# sourceMappingURL=displayIdFormatter-B1ZKgofu.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"displayIdFormatter-B1ZKgofu.js","names":[],"sources":["../src/slices/support_ticket/utils/displayIdFormatter.ts"],"sourcesContent":["/**\n * Formats a display ID with prefix (e.g., \"SP-123\")\n * Falls back to last 8 chars of ID if display_id not available\n */\nexport function formatTicketDisplayId(\n display_id: string | null | undefined,\n display_id_prefix: string | null | undefined,\n fallbackId: string,\n): string {\n if (display_id && display_id_prefix) {\n return `${display_id_prefix}-${display_id}`;\n }\n // Fallback to last 8 chars of ID\n return `#${fallbackId.slice(-8)}`;\n}\n"],"mappings":";;;;;AAIA,SAAgB,sBACd,YACA,mBACA,YACQ;AACR,KAAI,cAAc,kBAChB,QAAO,GAAG,kBAAkB,GAAG;AAGjC,QAAO,IAAI,WAAW,MAAM,GAAG"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
//#region src/utils/extractRpcErrorMessage.ts
|
|
2
|
-
/**
|
|
3
|
-
* Extracts a user-friendly error message from RPC/API errors.
|
|
4
|
-
* Handles various error shapes: Error instances, nested RPC payloads, etc.
|
|
5
|
-
*/
|
|
6
|
-
function extractRpcErrorMessage(error, fallback = "An unknown error occurred.") {
|
|
7
|
-
if (error instanceof Error && error.message) return error.message;
|
|
8
|
-
if (typeof error === "object" && error !== null) {
|
|
9
|
-
const obj = error;
|
|
10
|
-
const inner = obj.error;
|
|
11
|
-
if (inner && typeof inner === "object" && typeof inner.error_message === "string") return inner.error_message;
|
|
12
|
-
if (typeof obj.error_message === "string") return obj.error_message;
|
|
13
|
-
if (typeof obj.message === "string") return obj.message;
|
|
14
|
-
}
|
|
15
|
-
return fallback;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
//#endregion
|
|
19
|
-
export { extractRpcErrorMessage as t };
|
|
20
|
-
//# sourceMappingURL=extractRpcErrorMessage-C_UbKgHL.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extractRpcErrorMessage-C_UbKgHL.js","names":[],"sources":["../src/utils/extractRpcErrorMessage.ts"],"sourcesContent":["/**\n * Extracts a user-friendly error message from RPC/API errors.\n * Handles various error shapes: Error instances, nested RPC payloads, etc.\n */\nexport function extractRpcErrorMessage(error: unknown, fallback = 'An unknown error occurred.'): string {\n if (error instanceof Error && error.message) {\n return error.message;\n }\n if (typeof error === 'object' && error !== null) {\n const obj = error as Record<string, unknown>;\n // RPC errors may nest: { error: { error_message: '...' } }\n const inner = obj.error as Record<string, unknown> | undefined;\n if (inner && typeof inner === 'object' && typeof inner.error_message === 'string') {\n return inner.error_message;\n }\n if (typeof obj.error_message === 'string') {\n return obj.error_message;\n }\n if (typeof obj.message === 'string') {\n return obj.message;\n }\n }\n return fallback;\n}\n"],"mappings":";;;;;AAIA,SAAgB,uBAAuB,OAAgB,WAAW,8BAAsC;AACtG,KAAI,iBAAiB,SAAS,MAAM,QAClC,QAAO,MAAM;AAEf,KAAI,OAAO,UAAU,YAAY,UAAU,MAAM;EAC/C,MAAM,MAAM;EAEZ,MAAM,QAAQ,IAAI;AAClB,MAAI,SAAS,OAAO,UAAU,YAAY,OAAO,MAAM,kBAAkB,SACvE,QAAO,MAAM;AAEf,MAAI,OAAO,IAAI,kBAAkB,SAC/B,QAAO,IAAI;AAEb,MAAI,OAAO,IAAI,YAAY,SACzB,QAAO,IAAI;;AAGf,QAAO"}
|