@dragonmastery/dragoncore-vue 0.0.1
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/LICENSE +75 -0
- package/dist/AppLink-CHMMrSFI.js +54 -0
- package/dist/AppLink-CHMMrSFI.js.map +1 -0
- package/dist/Appearance-BfPdKMXw.js +70 -0
- package/dist/Appearance-BfPdKMXw.js.map +1 -0
- package/dist/Appearance-C3WguxT-.js +3 -0
- package/dist/ChangePasswordPage-Btu5lf-r.js +86 -0
- package/dist/ChangePasswordPage-Btu5lf-r.js.map +1 -0
- package/dist/ChangePasswordPage-mBBuQMkT.js +6 -0
- package/dist/CreateTeamForm-n2ut93vM.js +43 -0
- package/dist/CreateTeamMemberForm-CcH3AxNL.js +43 -0
- package/dist/CreateUserPage-CDrGuW9B.js +6 -0
- package/dist/CreateUserPage-Cmx8xjjv.js +76 -0
- package/dist/CreateUserPage-Cmx8xjjv.js.map +1 -0
- package/dist/CreditBalanceDashboard-DLz0ioP3.js +43 -0
- package/dist/CreditManagement-D3q5S-qc.js +43 -0
- package/dist/CustomerCreateSupportTicketForm-Ci7QYkG-.js +43 -0
- package/dist/CustomerEditSupportTicketForm-Dd5ZB74k.js +159 -0
- package/dist/CustomerEditSupportTicketForm-Dd5ZB74k.js.map +1 -0
- package/dist/CustomerEditSupportTicketForm-lLchVjnw.js +9 -0
- package/dist/CustomerSupportTicketAttachmentsTab-gBrVO97t.js +43 -0
- package/dist/CustomerSupportTicketCustomerNotesTab-D0jhzbOY.js +8 -0
- package/dist/CustomerSupportTicketCustomerNotesTab-D1aa9It7.js +23 -0
- package/dist/CustomerSupportTicketCustomerNotesTab-D1aa9It7.js.map +1 -0
- package/dist/CustomerSupportTicketHistoryTab-BNTf8EZq.js +6 -0
- package/dist/CustomerSupportTicketHistoryTab-CFYN_Sa4.js +17 -0
- package/dist/CustomerSupportTicketHistoryTab-CFYN_Sa4.js.map +1 -0
- package/dist/CustomerSupportTicketList-BkOzFxMP.js +6 -0
- package/dist/CustomerSupportTicketList-C2nUPawb.js +166 -0
- package/dist/CustomerSupportTicketList-C2nUPawb.js.map +1 -0
- package/dist/CustomerSupportTicketParent-2mONd9kL.js +66 -0
- package/dist/CustomerSupportTicketParent-2mONd9kL.js.map +1 -0
- package/dist/CustomerSupportTicketParent-N8ko1yFE.js +7 -0
- package/dist/CustomerSupportTicketSuccess-w_-9NXT4.js +43 -0
- package/dist/CustomerViewSupportTicket-CVwNH0lS.js +11 -0
- package/dist/CustomerViewSupportTicket-tZkxragu.js +363 -0
- package/dist/CustomerViewSupportTicket-tZkxragu.js.map +1 -0
- package/dist/EditTeamForm-BioqiTWE.js +43 -0
- package/dist/EditTeamMemberForm-DCq0Gsn_.js +7 -0
- package/dist/EditTeamMemberForm-ru4WgLz-.js +169 -0
- package/dist/EditTeamMemberForm-ru4WgLz-.js.map +1 -0
- package/dist/EditUserPage-BxJ5QvIM.js +112 -0
- package/dist/EditUserPage-BxJ5QvIM.js.map +1 -0
- package/dist/EditUserPage-XOBuxUxd.js +7 -0
- package/dist/FieldsetSection-CsHN38_o.js +27 -0
- package/dist/FieldsetSection-CsHN38_o.js.map +1 -0
- package/dist/ForgotPassword-CpqvcSFg.js +7 -0
- package/dist/ForgotPassword-CqhenzUG.js +73 -0
- package/dist/ForgotPassword-CqhenzUG.js.map +1 -0
- package/dist/InlineAttachments-I39rOvip.js +1351 -0
- package/dist/InlineAttachments-I39rOvip.js.map +1 -0
- package/dist/LoginForm-AM0qkfbU.js +7 -0
- package/dist/LoginForm-_PZ51Uwe.js +116 -0
- package/dist/LoginForm-_PZ51Uwe.js.map +1 -0
- package/dist/Logout-BMjiqHnS.js +38 -0
- package/dist/Logout-BMjiqHnS.js.map +1 -0
- package/dist/Logout-BfiBjlaH.js +6 -0
- package/dist/NoteList-C0hRPNMO.js +497 -0
- package/dist/NoteList-C0hRPNMO.js.map +1 -0
- package/dist/NotificationEmailsPage-BjRqtW95.js +141 -0
- package/dist/NotificationEmailsPage-BjRqtW95.js.map +1 -0
- package/dist/NotificationEmailsPage-bx-9rg3x.js +7 -0
- package/dist/ResetPassword-BQLkR9TZ.js +43 -0
- package/dist/Signup-CnCcQlB8.js +7 -0
- package/dist/Signup-c2-_yMOM.js +106 -0
- package/dist/Signup-c2-_yMOM.js.map +1 -0
- package/dist/StaffCreateSupportTicketForm-ChVFDJdA.js +43 -0
- package/dist/StaffEditSupportTicketForm-DY1Zkf5k.js +9 -0
- package/dist/StaffEditSupportTicketForm-DuUKuIGg.js +263 -0
- package/dist/StaffEditSupportTicketForm-DuUKuIGg.js.map +1 -0
- package/dist/StaffSupportTicketAttachmentsTab-DpDXsHXP.js +43 -0
- package/dist/StaffSupportTicketCustomerNotesTab-CusqQV2-.js +23 -0
- package/dist/StaffSupportTicketCustomerNotesTab-CusqQV2-.js.map +1 -0
- package/dist/StaffSupportTicketCustomerNotesTab-rbJHJ0_V.js +8 -0
- package/dist/StaffSupportTicketHistoryTab-D24myEm3.js +17 -0
- package/dist/StaffSupportTicketHistoryTab-D24myEm3.js.map +1 -0
- package/dist/StaffSupportTicketHistoryTab-nmVma5vp.js +6 -0
- package/dist/StaffSupportTicketInternalNotesTab-D8HM--dp.js +23 -0
- package/dist/StaffSupportTicketInternalNotesTab-D8HM--dp.js.map +1 -0
- package/dist/StaffSupportTicketInternalNotesTab-DihYd5XI.js +8 -0
- package/dist/StaffSupportTicketList-DelptSmK.js +43 -0
- package/dist/StaffSupportTicketParent-BCrj3ckV.js +7 -0
- package/dist/StaffSupportTicketParent-Cx1buQZw.js +66 -0
- package/dist/StaffSupportTicketParent-Cx1buQZw.js.map +1 -0
- package/dist/StaffSupportTicketSuccess-BYxtY5wZ.js +43 -0
- package/dist/StaffSupportTicketWorkflowTab-BrDDBeK9.js +9 -0
- package/dist/StaffSupportTicketWorkflowTab-DmVTPzxS.js +1234 -0
- package/dist/StaffSupportTicketWorkflowTab-DmVTPzxS.js.map +1 -0
- package/dist/SupportTicketHistoryTab-CLMopA7a.js +220 -0
- package/dist/SupportTicketHistoryTab-CLMopA7a.js.map +1 -0
- package/dist/SupportTicketStatusBadge-YdZzjvkh.js +163 -0
- package/dist/SupportTicketStatusBadge-YdZzjvkh.js.map +1 -0
- package/dist/TeamAttachmentsTab-BxUpTWYh.js +43 -0
- package/dist/TeamHistoryTab-CUCT9MRG.js +5 -0
- package/dist/TeamHistoryTab-gB3H2KZv.js +219 -0
- package/dist/TeamHistoryTab-gB3H2KZv.js.map +1 -0
- package/dist/TeamList-By6pzWm5.js +43 -0
- package/dist/TeamMemberList-CYV9fWEb.js +43 -0
- package/dist/TeamMemberParent-CVvGqpxD.js +43 -0
- package/dist/TeamMembersTab-4gmnP9sD.js +21 -0
- package/dist/TeamMembersTab-4gmnP9sD.js.map +1 -0
- package/dist/TeamMembersTab-CpE9BaCi.js +3 -0
- package/dist/TeamNotesTab-pfXTDhg6.js +23 -0
- package/dist/TeamNotesTab-pfXTDhg6.js.map +1 -0
- package/dist/TeamNotesTab-u4cDC67X.js +8 -0
- package/dist/TeamParent-BxT1KubK.js +43 -0
- package/dist/UserListPage-DsQdH2Sm.js +4 -0
- package/dist/UserListPage-WU56KiWj.js +153 -0
- package/dist/UserListPage-WU56KiWj.js.map +1 -0
- package/dist/UserProfilePage-B73JhjUu.js +7 -0
- package/dist/UserProfilePage-BtLUY1kt.js +125 -0
- package/dist/UserProfilePage-BtLUY1kt.js.map +1 -0
- package/dist/ViewTeam-DzX-obEl.js +43 -0
- package/dist/ViewTeamMember-PF6S_4Pb.js +43 -0
- package/dist/ZiniaContainer-C7c7Vwkh.js +18 -0
- package/dist/ZiniaContainer-C7c7Vwkh.js.map +1 -0
- package/dist/convertToLocalDateTime-D4IoNvRj.js +111 -0
- package/dist/convertToLocalDateTime-D4IoNvRj.js.map +1 -0
- package/dist/creditValueFormatter-DftEzu8d.js +128 -0
- package/dist/creditValueFormatter-DftEzu8d.js.map +1 -0
- package/dist/displayIdFormatter-Dz900Awr.js +13 -0
- package/dist/displayIdFormatter-Dz900Awr.js.map +1 -0
- package/dist/index.d.ts +6068 -0
- package/dist/index.js +45 -0
- package/dist/src-o5fMIo5_.js +6649 -0
- package/dist/src-o5fMIo5_.js.map +1 -0
- package/dist/useBreadcrumbs-DmgSucoe.js +41 -0
- package/dist/useBreadcrumbs-DmgSucoe.js.map +1 -0
- package/dist/useMutation-CFwe7H9j.js +50 -0
- package/dist/useMutation-CFwe7H9j.js.map +1 -0
- package/dist/useQuery-p7oJO7OD.js +107 -0
- package/dist/useQuery-p7oJO7OD.js.map +1 -0
- package/dist/useQueryCache-ByayvZgZ.js +254 -0
- package/dist/useQueryCache-ByayvZgZ.js.map +1 -0
- package/dist/useRpcAuth-BLlRSHy8.js +722 -0
- package/dist/useRpcAuth-BLlRSHy8.js.map +1 -0
- package/package.json +62 -0
- package/src/daisyui.css +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertToLocalDateTime-D4IoNvRj.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 * 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 // Handle YYYY-MM-DD format specially to avoid timezone issues\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(dateString)) {\n // For date-only strings, parse as local date to avoid UTC interpretation\n const [year, month, day] = dateString.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(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;;;;;;;;;;AAWX,SAAgB,eACd,YACA,WAAoB,MACZ;AACR,KAAI,CAAC,WAAY,QAAO;AAExB,KAAI;EACF,IAAIA;AAGJ,MAAI,sBAAsB,KAAK,WAAW,EAAE;GAE1C,MAAM,CAAC,MAAM,OAAO,OAAO,WAAW,MAAM,IAAI,CAAC,IAAI,OAAO;AAC5D,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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { computed, createElementBlock, defineComponent, normalizeClass, openBlock, toDisplayString } from "vue";
|
|
2
|
+
|
|
3
|
+
//#region src/slices/support_ticket/components/SupportTicketTypeBadge.vue
|
|
4
|
+
const _hoisted_1 = ["aria-label"];
|
|
5
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
6
|
+
__name: "SupportTicketTypeBadge",
|
|
7
|
+
props: {
|
|
8
|
+
type: {},
|
|
9
|
+
size: { default: "md" },
|
|
10
|
+
variant: { default: "default" }
|
|
11
|
+
},
|
|
12
|
+
setup(__props) {
|
|
13
|
+
/**
|
|
14
|
+
* SupportTicketTypeBadge - A reusable Vue component for displaying support ticket type
|
|
15
|
+
* as color-coded badges with consistent DaisyUI styling and accessibility features.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* <SupportTicketTypeBadge :type="'BUG'" size="md" />
|
|
19
|
+
* <SupportTicketTypeBadge :type="'FEATURE_REQUEST'" size="sm" variant="outline" />
|
|
20
|
+
*/
|
|
21
|
+
const props = __props;
|
|
22
|
+
/**
|
|
23
|
+
* Configuration for each type badge
|
|
24
|
+
*/
|
|
25
|
+
const typeConfig = {
|
|
26
|
+
BUG: {
|
|
27
|
+
color: "badge-neutral",
|
|
28
|
+
text: "Bug",
|
|
29
|
+
ariaLabel: "Type: Bug report requiring fix"
|
|
30
|
+
},
|
|
31
|
+
FEATURE_REQUEST: {
|
|
32
|
+
color: "badge-neutral",
|
|
33
|
+
text: "Feature",
|
|
34
|
+
ariaLabel: "Type: New feature request"
|
|
35
|
+
},
|
|
36
|
+
IMPROVEMENT: {
|
|
37
|
+
color: "badge-neutral",
|
|
38
|
+
text: "Improvement",
|
|
39
|
+
ariaLabel: "Type: Enhancement to existing feature"
|
|
40
|
+
},
|
|
41
|
+
OPERATIONAL: {
|
|
42
|
+
color: "badge-neutral",
|
|
43
|
+
text: "Ops",
|
|
44
|
+
ariaLabel: "Type: Operational/admin work"
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
const getTypeConfig = (type) => {
|
|
48
|
+
const config$1 = typeConfig[type];
|
|
49
|
+
if (!config$1) return {
|
|
50
|
+
color: "badge-neutral",
|
|
51
|
+
text: type || "Unknown",
|
|
52
|
+
ariaLabel: `Type: ${type || "Unknown type"}`
|
|
53
|
+
};
|
|
54
|
+
return config$1;
|
|
55
|
+
};
|
|
56
|
+
const config = computed(() => getTypeConfig(props.type));
|
|
57
|
+
const badgeClasses = computed(() => {
|
|
58
|
+
const baseClasses = ["badge", "text-xs"];
|
|
59
|
+
baseClasses.push(config.value.color);
|
|
60
|
+
if (props.size === "sm") baseClasses.push("badge-sm", "text-xs");
|
|
61
|
+
else if (props.size === "lg") baseClasses.push("badge-lg", "text-sm");
|
|
62
|
+
else baseClasses.push("text-xs", "sm:text-sm");
|
|
63
|
+
if (props.variant === "outline") baseClasses.push("badge-outline");
|
|
64
|
+
return baseClasses.join(" ");
|
|
65
|
+
});
|
|
66
|
+
const displayText = computed(() => config.value.text);
|
|
67
|
+
const ariaLabel = computed(() => config.value.ariaLabel);
|
|
68
|
+
return (_ctx, _cache) => {
|
|
69
|
+
return openBlock(), createElementBlock("div", {
|
|
70
|
+
class: normalizeClass(badgeClasses.value),
|
|
71
|
+
"aria-label": ariaLabel.value,
|
|
72
|
+
role: "status"
|
|
73
|
+
}, toDisplayString(displayText.value), 11, _hoisted_1);
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
var SupportTicketTypeBadge_default = _sfc_main;
|
|
78
|
+
|
|
79
|
+
//#endregion
|
|
80
|
+
//#region src/slices/support_ticket/utils/creditValueFormatter.ts
|
|
81
|
+
/**
|
|
82
|
+
* Helper function to check if credit value is empty
|
|
83
|
+
*/
|
|
84
|
+
function isCreditValueEmpty(value) {
|
|
85
|
+
return value === null || value === void 0 || value.trim() === "";
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Core credit formatting logic
|
|
89
|
+
*/
|
|
90
|
+
function formatCreditValueCore(creditValue) {
|
|
91
|
+
if (isCreditValueEmpty(creditValue)) return "TBD";
|
|
92
|
+
const trimmed = creditValue.trim();
|
|
93
|
+
if (parseFloat(trimmed) === 0) return "0";
|
|
94
|
+
return trimmed.replace(/\.?0+$/, "");
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Formats credit value for staff views (includes internal ticket logic)
|
|
98
|
+
*
|
|
99
|
+
* @param creditValue - The credit value from the database
|
|
100
|
+
* @param approvalStatus - The approval status to determine display logic
|
|
101
|
+
* @returns Formatted string for display
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* formatStaffCreditValue("5.50", "PENDING") // "5.5"
|
|
105
|
+
* formatStaffCreditValue("10", "INTERNAL") // "N/A"
|
|
106
|
+
*/
|
|
107
|
+
function formatStaffCreditValue(creditValue, approvalStatus) {
|
|
108
|
+
if (approvalStatus === "INTERNAL") return "N/A";
|
|
109
|
+
return formatCreditValueCore(creditValue);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Formats credit value for customer views (status-based logic)
|
|
113
|
+
*
|
|
114
|
+
* @param creditValue - The credit value from the database
|
|
115
|
+
* @param status - The computed status from the customer query
|
|
116
|
+
* @returns Formatted string for display
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* formatCustomerCreditValue("5.50", "PENDING") // "5.5"
|
|
120
|
+
* formatCustomerCreditValue("5.50", "FOLLOWUP") // "5.5"
|
|
121
|
+
*/
|
|
122
|
+
function formatCustomerCreditValue(creditValue) {
|
|
123
|
+
return formatCreditValueCore(creditValue);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
//#endregion
|
|
127
|
+
export { formatStaffCreditValue as n, SupportTicketTypeBadge_default as r, formatCustomerCreditValue as t };
|
|
128
|
+
//# sourceMappingURL=creditValueFormatter-DftEzu8d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"creditValueFormatter-DftEzu8d.js","names":["typeConfig: Record<SupportTicketType, TypeBadgeConfig>"],"sources":["../src/slices/support_ticket/components/SupportTicketTypeBadge.vue","../src/slices/support_ticket/utils/creditValueFormatter.ts"],"sourcesContent":["<template>\n <div :class=\"badgeClasses\" :aria-label=\"ariaLabel\" role=\"status\">\n {{ displayText }}\n </div>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * SupportTicketTypeBadge - A reusable Vue component for displaying support ticket type\n * as color-coded badges with consistent DaisyUI styling and accessibility features.\n *\n * @example\n * <SupportTicketTypeBadge :type=\"'BUG'\" size=\"md\" />\n * <SupportTicketTypeBadge :type=\"'FEATURE_REQUEST'\" size=\"sm\" variant=\"outline\" />\n */\nimport type { SupportTicketType } from '@dragonmastery/dragoncore-shared';\nimport { computed } from 'vue';\n\n/**\n * Props for the SupportTicketTypeBadge component\n */\ninterface Props {\n /** The support ticket type to display */\n type: SupportTicketType;\n /** Size of the badge - defaults to 'md' */\n size?: 'sm' | 'md' | 'lg';\n /** Visual variant of the badge - defaults to 'default' */\n variant?: 'default' | 'outline';\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n size: 'md',\n variant: 'default',\n});\n\n/**\n * Configuration for each type badge\n */\ninterface TypeBadgeConfig {\n /** DaisyUI badge color class */\n color: string;\n /** Display text for the badge */\n text: string;\n /** Accessibility label for screen readers */\n ariaLabel: string;\n}\n\nconst typeConfig: Record<SupportTicketType, TypeBadgeConfig> = {\n BUG: {\n color: 'badge-neutral',\n text: 'Bug',\n ariaLabel: 'Type: Bug report requiring fix',\n },\n FEATURE_REQUEST: {\n color: 'badge-neutral',\n text: 'Feature',\n ariaLabel: 'Type: New feature request',\n },\n IMPROVEMENT: {\n color: 'badge-neutral',\n text: 'Improvement',\n ariaLabel: 'Type: Enhancement to existing feature',\n },\n OPERATIONAL: {\n color: 'badge-neutral',\n text: 'Ops',\n ariaLabel: 'Type: Operational/admin work',\n },\n};\n\nconst getTypeConfig = (type: SupportTicketType): TypeBadgeConfig => {\n const config = typeConfig[type];\n if (!config) {\n return {\n color: 'badge-neutral',\n text: type || 'Unknown',\n ariaLabel: `Type: ${type || 'Unknown type'}`,\n };\n }\n return config;\n};\n\nconst config = computed(() => getTypeConfig(props.type));\n\nconst badgeClasses = computed(() => {\n const baseClasses = ['badge', 'text-xs'];\n\n // Add color class\n baseClasses.push(config.value.color);\n\n // Add size class with responsive text sizing\n if (props.size === 'sm') {\n baseClasses.push('badge-sm', 'text-xs');\n } else if (props.size === 'lg') {\n baseClasses.push('badge-lg', 'text-sm');\n } else {\n // md size - responsive text\n baseClasses.push('text-xs', 'sm:text-sm');\n }\n\n // Add variant class\n if (props.variant === 'outline') {\n baseClasses.push('badge-outline');\n }\n\n return baseClasses.join(' ');\n});\n\nconst displayText = computed(() => config.value.text);\nconst ariaLabel = computed(() => config.value.ariaLabel);\n</script>\n","import type { SupportTicketApproval } from '@dragonmastery/dragoncore-shared';\n\n/**\n * Helper function to check if credit value is empty\n */\nfunction isCreditValueEmpty(value: string | null | undefined): boolean {\n return value === null || value === undefined || value.trim() === '';\n}\n\n/**\n * Core credit formatting logic\n */\nfunction formatCreditValueCore(creditValue: string | null | undefined): string {\n // Use same logic as backend formatter\n if (isCreditValueEmpty(creditValue)) {\n return 'TBD';\n }\n\n const trimmed = creditValue!.trim();\n const num = parseFloat(trimmed);\n\n // Explicit zero is valid - preserve it (same as backend)\n if (num === 0) {\n return '0';\n }\n\n // Remove trailing zeros for non-zero values (same as backend)\n // Examples: \"100.00\" -> \"100\", \"9.50\" -> \"9.5\", \"123.45\" -> \"123.45\"\n return trimmed.replace(/\\.?0+$/, '');\n}\n\n/**\n * Formats credit value for staff views (includes internal ticket logic)\n *\n * @param creditValue - The credit value from the database\n * @param approvalStatus - The approval status to determine display logic\n * @returns Formatted string for display\n *\n * @example\n * formatStaffCreditValue(\"5.50\", \"PENDING\") // \"5.5\"\n * formatStaffCreditValue(\"10\", \"INTERNAL\") // \"N/A\"\n */\nexport function formatStaffCreditValue(\n creditValue: string | null | undefined,\n approvalStatus?: SupportTicketApproval,\n): string {\n // Internal tickets don't use credits\n if (approvalStatus === 'INTERNAL') {\n return 'N/A';\n }\n\n return formatCreditValueCore(creditValue);\n}\n\n/**\n * Formats credit value for customer views (status-based logic)\n *\n * @param creditValue - The credit value from the database\n * @param status - The computed status from the customer query\n * @returns Formatted string for display\n *\n * @example\n * formatCustomerCreditValue(\"5.50\", \"PENDING\") // \"5.5\"\n * formatCustomerCreditValue(\"5.50\", \"FOLLOWUP\") // \"5.5\"\n */\nexport function formatCustomerCreditValue(creditValue: string | null | undefined): string {\n // Note: Internal tickets (status would be different) are handled by backend\n // Customers don't see internal tickets, so we don't need to check for INTERNAL here\n return formatCreditValueCore(creditValue);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;EA8BA,MAAM,QAAQ;;;;EAiBd,MAAMA,aAAyD;GAC7D,KAAK;IACH,OAAO;IACP,MAAM;IACN,WAAW;IACZ;GACD,iBAAiB;IACf,OAAO;IACP,MAAM;IACN,WAAW;IACZ;GACD,aAAa;IACX,OAAO;IACP,MAAM;IACN,WAAW;IACZ;GACD,aAAa;IACX,OAAO;IACP,MAAM;IACN,WAAW;IACZ;GACF;EAED,MAAM,iBAAiB,SAA6C;GAClE,MAAM,WAAS,WAAW;AAC1B,OAAI,CAAC,SACH,QAAO;IACL,OAAO;IACP,MAAM,QAAQ;IACd,WAAW,SAAS,QAAQ;IAC7B;AAEH,UAAO;;EAGT,MAAM,SAAS,eAAe,cAAc,MAAM,KAAK,CAAC;EAExD,MAAM,eAAe,eAAe;GAClC,MAAM,cAAc,CAAC,SAAS,UAAU;AAGxC,eAAY,KAAK,OAAO,MAAM,MAAM;AAGpC,OAAI,MAAM,SAAS,KACjB,aAAY,KAAK,YAAY,UAAU;YAC9B,MAAM,SAAS,KACxB,aAAY,KAAK,YAAY,UAAU;OAGvC,aAAY,KAAK,WAAW,aAAa;AAI3C,OAAI,MAAM,YAAY,UACpB,aAAY,KAAK,gBAAgB;AAGnC,UAAO,YAAY,KAAK,IAAI;IAC5B;EAEF,MAAM,cAAc,eAAe,OAAO,MAAM,KAAK;EACrD,MAAM,YAAY,eAAe,OAAO,MAAM,UAAU;;uBA5GtD,mBAEM,OAAA;IAFA,OAAK,eAAE,aAAA,MAAY;IAAG,cAAY,UAAA;IAAW,MAAK;sBACnD,YAAA,MAAW,EAAA,IAAA,WAAA;;;;;;;;;;;ACGlB,SAAS,mBAAmB,OAA2C;AACrE,QAAO,UAAU,QAAQ,UAAU,UAAa,MAAM,MAAM,KAAK;;;;;AAMnE,SAAS,sBAAsB,aAAgD;AAE7E,KAAI,mBAAmB,YAAY,CACjC,QAAO;CAGT,MAAM,UAAU,YAAa,MAAM;AAInC,KAHY,WAAW,QAAQ,KAGnB,EACV,QAAO;AAKT,QAAO,QAAQ,QAAQ,UAAU,GAAG;;;;;;;;;;;;;AActC,SAAgB,uBACd,aACA,gBACQ;AAER,KAAI,mBAAmB,WACrB,QAAO;AAGT,QAAO,sBAAsB,YAAY;;;;;;;;;;;;;AAc3C,SAAgB,0BAA0B,aAAgD;AAGxF,QAAO,sBAAsB,YAAY"}
|
|
@@ -0,0 +1,13 @@
|
|
|
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-Dz900Awr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"displayIdFormatter-Dz900Awr.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"}
|