@jrapps/my_tickets_dashboard_modals_ui 0.0.2
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/README.md +0 -0
- package/dist/cjs/components/ManageTicketModal/index.js +314 -0
- package/dist/cjs/components/ManageTicketModal/index.js.map +7 -0
- package/dist/cjs/index.js +314 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/esm/chunks/chunk-O2PNODDQ.js +288 -0
- package/dist/esm/chunks/chunk-O2PNODDQ.js.map +7 -0
- package/dist/esm/components/ManageTicketModal/index.js +7 -0
- package/dist/esm/components/ManageTicketModal/index.js.map +7 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +7 -0
- package/dist/types/components/ManageTicketModal/ManageTicketModal.d.ts +6 -0
- package/dist/types/components/ManageTicketModal/ManageTicketModal.d.ts.map +1 -0
- package/dist/types/components/ManageTicketModal/ManageTicketModal.types.d.ts +37 -0
- package/dist/types/components/ManageTicketModal/ManageTicketModal.types.d.ts.map +1 -0
- package/dist/types/components/ManageTicketModal/index.d.ts +3 -0
- package/dist/types/components/ManageTicketModal/index.d.ts.map +1 -0
- package/dist/types/components/ManageTicketModal/priority-change-content.d.ts +5 -0
- package/dist/types/components/ManageTicketModal/priority-change-content.d.ts.map +1 -0
- package/dist/types/components/ManageTicketModal/status-change-content.d.ts +5 -0
- package/dist/types/components/ManageTicketModal/status-change-content.d.ts.map +1 -0
- package/dist/types/components/ManageTicketModal/transfer-ticket-content.d.ts +5 -0
- package/dist/types/components/ManageTicketModal/transfer-ticket-content.d.ts.map +1 -0
- package/dist/types/components/ManageTicketModal/useManageTicketModal.d.ts +30 -0
- package/dist/types/components/ManageTicketModal/useManageTicketModal.d.ts.map +1 -0
- package/dist/types/components/index.d.ts +2 -0
- package/dist/types/components/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/test/test.d.ts +8 -0
- package/dist/types/test/test.d.ts.map +1 -0
- package/package.json +49 -0
package/README.md
ADDED
|
Binary file
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/components/ManageTicketModal/index.ts
|
|
31
|
+
var ManageTicketModal_exports = {};
|
|
32
|
+
__export(ManageTicketModal_exports, {
|
|
33
|
+
ManageTicketModal: () => ManageTicketModal
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(ManageTicketModal_exports);
|
|
36
|
+
|
|
37
|
+
// src/components/ManageTicketModal/ManageTicketModal.tsx
|
|
38
|
+
var import_react2 = __toESM(require("react"));
|
|
39
|
+
|
|
40
|
+
// src/components/ManageTicketModal/useManageTicketModal.ts
|
|
41
|
+
var import_react = require("react");
|
|
42
|
+
var import_essentials = require("@wix/essentials");
|
|
43
|
+
var BASE_URL = new URL("").origin;
|
|
44
|
+
var STATE_CONFIG = {
|
|
45
|
+
STATUS_CHANGE: {
|
|
46
|
+
title: "Change Status",
|
|
47
|
+
getUrl: (id, value) => `${BASE_URL}/api/tickets/update-ticket-status?id=${id}&status=${value}`,
|
|
48
|
+
getPayload: (value) => ({ newStatus: value })
|
|
49
|
+
},
|
|
50
|
+
PRIORITY_CHANGE: {
|
|
51
|
+
title: "Change Priority",
|
|
52
|
+
getUrl: (id, value) => `${BASE_URL}/api/tickets/update-ticket-priority?id=${id}&priority=${value}`,
|
|
53
|
+
getPayload: (value) => ({ newPriority: value })
|
|
54
|
+
},
|
|
55
|
+
TRANSFER_TICKET: {
|
|
56
|
+
title: "Transfer Ticket",
|
|
57
|
+
getUrl: (id, value) => `${BASE_URL}/api/tickets/transfer-ticket?id=${id}&teamId=${value}`,
|
|
58
|
+
getPayload: (value) => ({ newTeamId: value })
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
function useManageTicketModal({ id, state, onClose }) {
|
|
62
|
+
const [isSaving, setIsSaving] = (0, import_react.useState)(false);
|
|
63
|
+
const [newStatus, setNewStatus] = (0, import_react.useState)("");
|
|
64
|
+
const [newPriority, setNewPriority] = (0, import_react.useState)("");
|
|
65
|
+
const [selectedTeam, setSelectedTeam] = (0, import_react.useState)("");
|
|
66
|
+
const [teams, setTeams] = (0, import_react.useState)([]);
|
|
67
|
+
const [isLoading, setIsLoading] = (0, import_react.useState)(false);
|
|
68
|
+
const [isError, setIsError] = (0, import_react.useState)(false);
|
|
69
|
+
const modalTitle = STATE_CONFIG[state]?.title ?? "Manage Ticket";
|
|
70
|
+
(0, import_react.useEffect)(() => {
|
|
71
|
+
if (state !== "TRANSFER_TICKET") {
|
|
72
|
+
setIsLoading(false);
|
|
73
|
+
setIsError(false);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
setIsLoading(true);
|
|
77
|
+
setIsError(false);
|
|
78
|
+
const fetchTeams = async () => {
|
|
79
|
+
try {
|
|
80
|
+
const response = await import_essentials.httpClient.fetchWithAuth(`${BASE_URL}/api/teams/teams`);
|
|
81
|
+
const data = await response.json();
|
|
82
|
+
setTeams(data.teams);
|
|
83
|
+
} catch (error) {
|
|
84
|
+
console.error("Error fetching teams:", error);
|
|
85
|
+
setIsError(true);
|
|
86
|
+
} finally {
|
|
87
|
+
setIsLoading(false);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
fetchTeams();
|
|
91
|
+
}, [id, state]);
|
|
92
|
+
const handleSave = async () => {
|
|
93
|
+
const config = STATE_CONFIG[state];
|
|
94
|
+
if (!config) return;
|
|
95
|
+
const valueMap = {
|
|
96
|
+
STATUS_CHANGE: newStatus,
|
|
97
|
+
PRIORITY_CHANGE: newPriority,
|
|
98
|
+
TRANSFER_TICKET: selectedTeam
|
|
99
|
+
};
|
|
100
|
+
const value = valueMap[state];
|
|
101
|
+
if (!value) return;
|
|
102
|
+
setIsSaving(true);
|
|
103
|
+
try {
|
|
104
|
+
await import_essentials.httpClient.fetchWithAuth(config.getUrl(id, value), { method: "PUT" });
|
|
105
|
+
onClose(config.getPayload(value));
|
|
106
|
+
} catch (error) {
|
|
107
|
+
console.error("Error saving:", error);
|
|
108
|
+
} finally {
|
|
109
|
+
setIsSaving(false);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
const handleCancel = () => onClose({ cancelled: true });
|
|
113
|
+
return {
|
|
114
|
+
// State
|
|
115
|
+
isSaving,
|
|
116
|
+
isLoading,
|
|
117
|
+
isError,
|
|
118
|
+
teams,
|
|
119
|
+
newStatus,
|
|
120
|
+
newPriority,
|
|
121
|
+
selectedTeam,
|
|
122
|
+
modalTitle,
|
|
123
|
+
// Setters
|
|
124
|
+
setNewStatus,
|
|
125
|
+
setNewPriority,
|
|
126
|
+
setSelectedTeam,
|
|
127
|
+
// Handlers
|
|
128
|
+
handleSave,
|
|
129
|
+
handleCancel
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// src/components/ManageTicketModal/ManageTicketModal.tsx
|
|
134
|
+
var import_design_system4 = require("@wix/design-system");
|
|
135
|
+
var import_styles_studio_global = require("@wix/design-system/styles-studio.global.css");
|
|
136
|
+
|
|
137
|
+
// src/components/ManageTicketModal/status-change-content.tsx
|
|
138
|
+
var import_design_system = require("@wix/design-system");
|
|
139
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
140
|
+
var STATUS_LABELS = {
|
|
141
|
+
closed: "Closed",
|
|
142
|
+
in_progress: "In Progress",
|
|
143
|
+
open: "Open"
|
|
144
|
+
};
|
|
145
|
+
var StatusChangeContent = ({ currentStatus, newStatus, onStatusChange }) => {
|
|
146
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_design_system.Box, { direction: "vertical", width: "stretch", gap: "10px", children: [
|
|
147
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_design_system.FormField, { label: "Current Status", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_design_system.Input, { value: STATUS_LABELS[currentStatus] ?? currentStatus, disabled: true }) }),
|
|
148
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_design_system.FormField, { label: "New Status", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
149
|
+
import_design_system.Dropdown,
|
|
150
|
+
{
|
|
151
|
+
options: [
|
|
152
|
+
{ id: "open", value: "Open" },
|
|
153
|
+
{ id: "in_progress", value: "In Progress" },
|
|
154
|
+
{ id: "closed", value: "Closed" }
|
|
155
|
+
],
|
|
156
|
+
placeholder: "Select new status",
|
|
157
|
+
selectedId: newStatus || "",
|
|
158
|
+
popoverProps: { appendTo: "window", zIndex: 9999 },
|
|
159
|
+
onSelect: (option) => onStatusChange(option?.id ?? "")
|
|
160
|
+
}
|
|
161
|
+
) })
|
|
162
|
+
] });
|
|
163
|
+
};
|
|
164
|
+
var status_change_content_default = StatusChangeContent;
|
|
165
|
+
|
|
166
|
+
// src/components/ManageTicketModal/priority-change-content.tsx
|
|
167
|
+
var import_design_system2 = require("@wix/design-system");
|
|
168
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
169
|
+
var PRIORITY_LABELS = {
|
|
170
|
+
high: "High",
|
|
171
|
+
medium: "Medium",
|
|
172
|
+
low: "Low"
|
|
173
|
+
};
|
|
174
|
+
var PriorityChangeContent = ({ currentPriority, newPriority, onPriorityChange }) => {
|
|
175
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_design_system2.Box, { direction: "vertical", width: "stretch", gap: "10px", children: [
|
|
176
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_design_system2.FormField, { label: "Current Priority", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_design_system2.Input, { value: PRIORITY_LABELS[currentPriority] ?? currentPriority, disabled: true }) }),
|
|
177
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_design_system2.FormField, { label: "New Priority", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
178
|
+
import_design_system2.Dropdown,
|
|
179
|
+
{
|
|
180
|
+
options: [
|
|
181
|
+
{ id: "high", value: "High" },
|
|
182
|
+
{ id: "medium", value: "Medium" },
|
|
183
|
+
{ id: "low", value: "Low" }
|
|
184
|
+
],
|
|
185
|
+
placeholder: "Select new priority",
|
|
186
|
+
selectedId: newPriority || "",
|
|
187
|
+
popoverProps: { appendTo: "window", zIndex: 9999 },
|
|
188
|
+
onSelect: (option) => onPriorityChange(option?.id ?? "")
|
|
189
|
+
}
|
|
190
|
+
) })
|
|
191
|
+
] });
|
|
192
|
+
};
|
|
193
|
+
var priority_change_content_default = PriorityChangeContent;
|
|
194
|
+
|
|
195
|
+
// src/components/ManageTicketModal/transfer-ticket-content.tsx
|
|
196
|
+
var import_design_system3 = require("@wix/design-system");
|
|
197
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
198
|
+
var TransferTicketContent = ({ currentTeam, teams, selectedTeam, onTeamChange }) => {
|
|
199
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_design_system3.Box, { direction: "vertical", width: "stretch", gap: "10px", children: [
|
|
200
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_design_system3.FormField, { label: "Current Team", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_design_system3.Input, { value: currentTeam, disabled: true }) }),
|
|
201
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_design_system3.FormField, { label: "New Team", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
202
|
+
import_design_system3.Dropdown,
|
|
203
|
+
{
|
|
204
|
+
options: teams.map((team) => ({ id: team._id, value: team.name })),
|
|
205
|
+
placeholder: "Select new team",
|
|
206
|
+
selectedId: selectedTeam || "",
|
|
207
|
+
popoverProps: { appendTo: "window", zIndex: 9999 },
|
|
208
|
+
onSelect: (option) => onTeamChange(option?.id ?? "")
|
|
209
|
+
}
|
|
210
|
+
) })
|
|
211
|
+
] });
|
|
212
|
+
};
|
|
213
|
+
var transfer_ticket_content_default = TransferTicketContent;
|
|
214
|
+
|
|
215
|
+
// src/components/ManageTicketModal/ManageTicketModal.css
|
|
216
|
+
if (typeof document !== "undefined" && !document.getElementById("jrapps-style-450fcfe5")) {
|
|
217
|
+
const s = document.createElement("style");
|
|
218
|
+
s.id = "jrapps-style-450fcfe5";
|
|
219
|
+
s.textContent = ".manage-ticket-modal {\n /* ManageTicketModal base styles */\n}\n";
|
|
220
|
+
document.head.appendChild(s);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// src/components/ManageTicketModal/ManageTicketModal.tsx
|
|
224
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
225
|
+
var ManageTicketModal = import_react2.default.forwardRef(
|
|
226
|
+
({
|
|
227
|
+
className,
|
|
228
|
+
isOpen,
|
|
229
|
+
id,
|
|
230
|
+
state,
|
|
231
|
+
onClose,
|
|
232
|
+
currentStatus,
|
|
233
|
+
currentPriority,
|
|
234
|
+
ticketNumber,
|
|
235
|
+
currentTeamName
|
|
236
|
+
}, ref) => {
|
|
237
|
+
const {
|
|
238
|
+
isSaving,
|
|
239
|
+
isLoading,
|
|
240
|
+
isError,
|
|
241
|
+
teams,
|
|
242
|
+
newStatus,
|
|
243
|
+
newPriority,
|
|
244
|
+
selectedTeam,
|
|
245
|
+
modalTitle,
|
|
246
|
+
setNewStatus,
|
|
247
|
+
setNewPriority,
|
|
248
|
+
setSelectedTeam,
|
|
249
|
+
handleSave,
|
|
250
|
+
handleCancel
|
|
251
|
+
} = useManageTicketModal({ id, state, onClose });
|
|
252
|
+
const renderContent = () => {
|
|
253
|
+
if (isLoading) {
|
|
254
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system4.Box, { direction: "vertical", width: "stretch", gap: "10px", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system4.Loader, { size: "medium", status: "loading", text: "Loading..." }) });
|
|
255
|
+
}
|
|
256
|
+
if (isError) {
|
|
257
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system4.Box, { direction: "vertical", width: "stretch", gap: "10px", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system4.Loader, { size: "medium", status: "error", text: "Error loading data" }) });
|
|
258
|
+
}
|
|
259
|
+
if (state === "STATUS_CHANGE") {
|
|
260
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
261
|
+
status_change_content_default,
|
|
262
|
+
{
|
|
263
|
+
currentStatus: currentStatus ?? "",
|
|
264
|
+
newStatus,
|
|
265
|
+
onStatusChange: setNewStatus
|
|
266
|
+
}
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
if (state === "PRIORITY_CHANGE") {
|
|
270
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
271
|
+
priority_change_content_default,
|
|
272
|
+
{
|
|
273
|
+
currentPriority: currentPriority ?? "",
|
|
274
|
+
newPriority,
|
|
275
|
+
onPriorityChange: setNewPriority
|
|
276
|
+
}
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
if (state === "TRANSFER_TICKET") {
|
|
280
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
281
|
+
transfer_ticket_content_default,
|
|
282
|
+
{
|
|
283
|
+
currentTeam: currentTeamName,
|
|
284
|
+
teams,
|
|
285
|
+
selectedTeam,
|
|
286
|
+
onTeamChange: setSelectedTeam
|
|
287
|
+
}
|
|
288
|
+
);
|
|
289
|
+
}
|
|
290
|
+
return null;
|
|
291
|
+
};
|
|
292
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system4.Modal, { isOpen, ref, className, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
293
|
+
import_design_system4.CustomModalLayout,
|
|
294
|
+
{
|
|
295
|
+
width: "500px",
|
|
296
|
+
primaryButtonText: isSaving ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system4.Loader, { size: "tiny" }) : "Save",
|
|
297
|
+
secondaryButtonText: "Cancel",
|
|
298
|
+
primaryButtonOnClick: handleSave,
|
|
299
|
+
secondaryButtonOnClick: handleCancel,
|
|
300
|
+
showHeaderDivider: true,
|
|
301
|
+
showFooterDivider: true,
|
|
302
|
+
title: modalTitle,
|
|
303
|
+
subtitle: !isLoading ? ticketNumber : "",
|
|
304
|
+
footnote: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system4.Box, { alignContent: "center", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_design_system4.Text, { size: "small", children: [
|
|
305
|
+
"Powered by ",
|
|
306
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system4.Text, { size: "small", weight: "bold", children: "My Tickets" })
|
|
307
|
+
] }) }),
|
|
308
|
+
content: renderContent()
|
|
309
|
+
}
|
|
310
|
+
) });
|
|
311
|
+
}
|
|
312
|
+
);
|
|
313
|
+
ManageTicketModal.displayName = "ManageTicketModal";
|
|
314
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/ManageTicketModal/index.ts", "../../../../src/components/ManageTicketModal/ManageTicketModal.tsx", "../../../../src/components/ManageTicketModal/useManageTicketModal.ts", "../../../../src/components/ManageTicketModal/status-change-content.tsx", "../../../../src/components/ManageTicketModal/priority-change-content.tsx", "../../../../src/components/ManageTicketModal/transfer-ticket-content.tsx", "../../../../src/components/ManageTicketModal/ManageTicketModal.css"],
|
|
4
|
+
"sourcesContent": ["export { ManageTicketModal } from './ManageTicketModal';\nexport type { ManageTicketModalProps } from './ManageTicketModal.types';\n", "import React from 'react';\nimport type { ManageTicketModalProps } from './ManageTicketModal.types';\nimport { useManageTicketModal } from './useManageTicketModal';\nimport {\n CustomModalLayout,\n Box,\n Text,\n Loader,\n Modal,\n} from '@wix/design-system';\nimport '@wix/design-system/styles-studio.global.css';\n\nimport StatusChangeContent from './status-change-content';\nimport PriorityChangeContent from './priority-change-content';\nimport TransferTicketContent from './transfer-ticket-content';\nimport './ManageTicketModal.css';\n\nexport const ManageTicketModal = React.forwardRef<HTMLDivElement, ManageTicketModalProps>(\n (\n {\n className,\n isOpen,\n id,\n state,\n onClose,\n currentStatus,\n currentPriority,\n ticketNumber,\n currentTeamName,\n },\n ref,\n ) => {\n const {\n isSaving,\n isLoading,\n isError,\n teams,\n newStatus,\n newPriority,\n selectedTeam,\n modalTitle,\n setNewStatus,\n setNewPriority,\n setSelectedTeam,\n handleSave,\n handleCancel,\n } = useManageTicketModal({ id, state, onClose });\n\n const renderContent = () => {\n if (isLoading) {\n return (\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n <Loader size=\"medium\" status=\"loading\" text=\"Loading...\" />\n </Box>\n );\n }\n\n if (isError) {\n return (\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n <Loader size=\"medium\" status=\"error\" text=\"Error loading data\" />\n </Box>\n );\n }\n\n if (state === 'STATUS_CHANGE') {\n return (\n <StatusChangeContent\n currentStatus={currentStatus ?? ''}\n newStatus={newStatus}\n onStatusChange={setNewStatus}\n />\n );\n }\n\n if (state === 'PRIORITY_CHANGE') {\n return (\n <PriorityChangeContent\n currentPriority={currentPriority ?? ''}\n newPriority={newPriority}\n onPriorityChange={setNewPriority}\n />\n );\n }\n\n if (state === 'TRANSFER_TICKET') {\n return (\n <TransferTicketContent\n currentTeam={currentTeamName}\n teams={teams}\n selectedTeam={selectedTeam}\n onTeamChange={setSelectedTeam}\n />\n );\n }\n\n return null;\n };\n\n return (\n <Modal isOpen={isOpen} ref={ref} className={className}>\n <CustomModalLayout\n width=\"500px\"\n primaryButtonText={isSaving ? <Loader size=\"tiny\" /> : 'Save'}\n secondaryButtonText=\"Cancel\"\n primaryButtonOnClick={handleSave}\n secondaryButtonOnClick={handleCancel}\n showHeaderDivider\n showFooterDivider\n title={modalTitle}\n subtitle={!isLoading ? ticketNumber : ''}\n footnote={\n <Box alignContent=\"center\">\n <Text size=\"small\">\n Powered by <Text size=\"small\" weight=\"bold\">My Tickets</Text>\n </Text>\n </Box>\n }\n content={renderContent()}\n />\n </Modal>\n );\n },\n);\n\nManageTicketModal.displayName = 'ManageTicketModal';\n", "import { useState, useEffect } from 'react';\nimport { httpClient } from '@wix/essentials';\n\nconst BASE_URL = new URL(import.meta.url).origin;\n\nconst STATE_CONFIG = {\n STATUS_CHANGE: {\n title: 'Change Status',\n getUrl: (id: string, value: string | number) =>\n `${BASE_URL}/api/tickets/update-ticket-status?id=${id}&status=${value}`,\n getPayload: (value: string | number) => ({ newStatus: value }),\n },\n PRIORITY_CHANGE: {\n title: 'Change Priority',\n getUrl: (id: string, value: string | number) =>\n `${BASE_URL}/api/tickets/update-ticket-priority?id=${id}&priority=${value}`,\n getPayload: (value: string | number) => ({ newPriority: value }),\n },\n TRANSFER_TICKET: {\n title: 'Transfer Ticket',\n getUrl: (id: string, value: string | number) =>\n `${BASE_URL}/api/tickets/transfer-ticket?id=${id}&teamId=${value}`,\n getPayload: (value: string | number) => ({ newTeamId: value }),\n },\n} as const;\n\ninterface UseManageTicketModalParams {\n id: string;\n state: string;\n onClose: (params: {\n newStatus?: string | number;\n newPriority?: string | number;\n newTeamId?: string | number;\n cancelled?: boolean;\n }) => void;\n}\n\nexport function useManageTicketModal({ id, state, onClose }: UseManageTicketModalParams) {\n const [isSaving, setIsSaving] = useState(false);\n const [newStatus, setNewStatus] = useState<string | number>('');\n const [newPriority, setNewPriority] = useState<string | number>('');\n const [selectedTeam, setSelectedTeam] = useState<string | number>('');\n const [teams, setTeams] = useState<{ _id: string; name: string }[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [isError, setIsError] = useState(false);\n\n const modalTitle = STATE_CONFIG[state as keyof typeof STATE_CONFIG]?.title ?? 'Manage Ticket';\n\n useEffect(() => {\n if (state !== 'TRANSFER_TICKET') {\n setIsLoading(false);\n setIsError(false);\n return;\n }\n\n setIsLoading(true);\n setIsError(false);\n\n const fetchTeams = async () => {\n try {\n const response = await httpClient.fetchWithAuth(`${BASE_URL}/api/teams/teams`);\n const data = await response.json();\n setTeams(data.teams);\n } catch (error) {\n console.error('Error fetching teams:', error);\n setIsError(true);\n } finally {\n setIsLoading(false);\n }\n };\n\n fetchTeams();\n }, [id, state]);\n\n const handleSave = async () => {\n const config = STATE_CONFIG[state as keyof typeof STATE_CONFIG];\n if (!config) return;\n\n const valueMap: Record<string, string | number> = {\n STATUS_CHANGE: newStatus,\n PRIORITY_CHANGE: newPriority,\n TRANSFER_TICKET: selectedTeam,\n };\n const value = valueMap[state];\n if (!value) return;\n\n setIsSaving(true);\n try {\n await httpClient.fetchWithAuth(config.getUrl(id, value), { method: 'PUT' });\n onClose(config.getPayload(value));\n } catch (error) {\n console.error('Error saving:', error);\n } finally {\n setIsSaving(false);\n }\n };\n\n const handleCancel = () => onClose({ cancelled: true });\n\n return {\n // State\n isSaving,\n isLoading,\n isError,\n teams,\n newStatus,\n newPriority,\n selectedTeam,\n modalTitle,\n // Setters\n setNewStatus,\n setNewPriority,\n setSelectedTeam,\n // Handlers\n handleSave,\n handleCancel,\n };\n}\n", "import type { FC } from 'react';\nimport { Box, FormField, Input, Dropdown } from '@wix/design-system';\nimport type { StatusChangeContentProps } from './ManageTicketModal.types';\n\nconst STATUS_LABELS: Record<string, string> = {\n closed: 'Closed',\n in_progress: 'In Progress',\n open: 'Open',\n};\n\nconst StatusChangeContent: FC<StatusChangeContentProps> = ({ currentStatus, newStatus, onStatusChange }) => {\n return (\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n <FormField label=\"Current Status\">\n <Input value={STATUS_LABELS[currentStatus] ?? currentStatus} disabled />\n </FormField>\n <FormField label=\"New Status\">\n <Dropdown\n options={[\n { id: 'open', value: 'Open' },\n { id: 'in_progress', value: 'In Progress' },\n { id: 'closed', value: 'Closed' },\n ]}\n placeholder=\"Select new status\"\n selectedId={newStatus || ''}\n popoverProps={{ appendTo: 'window', zIndex: 9999 }}\n onSelect={(option: any) => onStatusChange(option?.id ?? '')}\n />\n </FormField>\n </Box>\n );\n};\n\nexport default StatusChangeContent;\n", "import type { FC } from 'react';\nimport { Box, FormField, Input, Dropdown } from '@wix/design-system';\nimport type { PriorityChangeContentProps } from './ManageTicketModal.types';\n\nconst PRIORITY_LABELS: Record<string, string> = {\n high: 'High',\n medium: 'Medium',\n low: 'Low',\n};\n\nconst PriorityChangeContent: FC<PriorityChangeContentProps> = ({ currentPriority, newPriority, onPriorityChange }) => {\n return (\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n <FormField label=\"Current Priority\">\n <Input value={PRIORITY_LABELS[currentPriority] ?? currentPriority} disabled />\n </FormField>\n <FormField label=\"New Priority\">\n <Dropdown\n options={[\n { id: 'high', value: 'High' },\n { id: 'medium', value: 'Medium' },\n { id: 'low', value: 'Low' },\n ]}\n placeholder=\"Select new priority\"\n selectedId={newPriority || ''}\n popoverProps={{ appendTo: 'window', zIndex: 9999 }}\n onSelect={(option: any) => onPriorityChange(option?.id ?? '')}\n />\n </FormField>\n </Box>\n );\n};\n\nexport default PriorityChangeContent;\n", "import type { FC } from 'react';\nimport { Box, FormField, Input, Dropdown } from '@wix/design-system';\nimport type { TransferTicketContentProps } from './ManageTicketModal.types';\n\nconst TransferTicketContent: FC<TransferTicketContentProps> = ({ currentTeam, teams, selectedTeam, onTeamChange }) => {\n return (\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n <FormField label=\"Current Team\">\n <Input value={currentTeam} disabled />\n </FormField>\n <FormField label=\"New Team\">\n <Dropdown\n options={teams.map((team) => ({ id: team._id, value: team.name }))}\n placeholder=\"Select new team\"\n selectedId={selectedTeam || ''}\n popoverProps={{ appendTo: 'window', zIndex: 9999 }}\n onSelect={(option: any) => onTeamChange(option?.id ?? '')}\n />\n </FormField>\n </Box>\n );\n};\n\nexport default TransferTicketContent;\n", "if (typeof document !== 'undefined' && !document.getElementById(\"jrapps-style-450fcfe5\")) {\n const s = document.createElement('style');\n s.id = \"jrapps-style-450fcfe5\";\n s.textContent = \".manage-ticket-modal {\\n /* ManageTicketModal base styles */\\n}\\n\";\n document.head.appendChild(s);\n}"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_react", "import_design_system", "import_design_system", "import_jsx_runtime", "import_design_system", "import_jsx_runtime", "import_jsx_runtime", "React"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/index.ts
|
|
31
|
+
var src_exports = {};
|
|
32
|
+
__export(src_exports, {
|
|
33
|
+
ManageTicketModal: () => ManageTicketModal
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(src_exports);
|
|
36
|
+
|
|
37
|
+
// src/components/ManageTicketModal/ManageTicketModal.tsx
|
|
38
|
+
var import_react2 = __toESM(require("react"));
|
|
39
|
+
|
|
40
|
+
// src/components/ManageTicketModal/useManageTicketModal.ts
|
|
41
|
+
var import_react = require("react");
|
|
42
|
+
var import_essentials = require("@wix/essentials");
|
|
43
|
+
var BASE_URL = new URL("").origin;
|
|
44
|
+
var STATE_CONFIG = {
|
|
45
|
+
STATUS_CHANGE: {
|
|
46
|
+
title: "Change Status",
|
|
47
|
+
getUrl: (id, value) => `${BASE_URL}/api/tickets/update-ticket-status?id=${id}&status=${value}`,
|
|
48
|
+
getPayload: (value) => ({ newStatus: value })
|
|
49
|
+
},
|
|
50
|
+
PRIORITY_CHANGE: {
|
|
51
|
+
title: "Change Priority",
|
|
52
|
+
getUrl: (id, value) => `${BASE_URL}/api/tickets/update-ticket-priority?id=${id}&priority=${value}`,
|
|
53
|
+
getPayload: (value) => ({ newPriority: value })
|
|
54
|
+
},
|
|
55
|
+
TRANSFER_TICKET: {
|
|
56
|
+
title: "Transfer Ticket",
|
|
57
|
+
getUrl: (id, value) => `${BASE_URL}/api/tickets/transfer-ticket?id=${id}&teamId=${value}`,
|
|
58
|
+
getPayload: (value) => ({ newTeamId: value })
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
function useManageTicketModal({ id, state, onClose }) {
|
|
62
|
+
const [isSaving, setIsSaving] = (0, import_react.useState)(false);
|
|
63
|
+
const [newStatus, setNewStatus] = (0, import_react.useState)("");
|
|
64
|
+
const [newPriority, setNewPriority] = (0, import_react.useState)("");
|
|
65
|
+
const [selectedTeam, setSelectedTeam] = (0, import_react.useState)("");
|
|
66
|
+
const [teams, setTeams] = (0, import_react.useState)([]);
|
|
67
|
+
const [isLoading, setIsLoading] = (0, import_react.useState)(false);
|
|
68
|
+
const [isError, setIsError] = (0, import_react.useState)(false);
|
|
69
|
+
const modalTitle = STATE_CONFIG[state]?.title ?? "Manage Ticket";
|
|
70
|
+
(0, import_react.useEffect)(() => {
|
|
71
|
+
if (state !== "TRANSFER_TICKET") {
|
|
72
|
+
setIsLoading(false);
|
|
73
|
+
setIsError(false);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
setIsLoading(true);
|
|
77
|
+
setIsError(false);
|
|
78
|
+
const fetchTeams = async () => {
|
|
79
|
+
try {
|
|
80
|
+
const response = await import_essentials.httpClient.fetchWithAuth(`${BASE_URL}/api/teams/teams`);
|
|
81
|
+
const data = await response.json();
|
|
82
|
+
setTeams(data.teams);
|
|
83
|
+
} catch (error) {
|
|
84
|
+
console.error("Error fetching teams:", error);
|
|
85
|
+
setIsError(true);
|
|
86
|
+
} finally {
|
|
87
|
+
setIsLoading(false);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
fetchTeams();
|
|
91
|
+
}, [id, state]);
|
|
92
|
+
const handleSave = async () => {
|
|
93
|
+
const config = STATE_CONFIG[state];
|
|
94
|
+
if (!config) return;
|
|
95
|
+
const valueMap = {
|
|
96
|
+
STATUS_CHANGE: newStatus,
|
|
97
|
+
PRIORITY_CHANGE: newPriority,
|
|
98
|
+
TRANSFER_TICKET: selectedTeam
|
|
99
|
+
};
|
|
100
|
+
const value = valueMap[state];
|
|
101
|
+
if (!value) return;
|
|
102
|
+
setIsSaving(true);
|
|
103
|
+
try {
|
|
104
|
+
await import_essentials.httpClient.fetchWithAuth(config.getUrl(id, value), { method: "PUT" });
|
|
105
|
+
onClose(config.getPayload(value));
|
|
106
|
+
} catch (error) {
|
|
107
|
+
console.error("Error saving:", error);
|
|
108
|
+
} finally {
|
|
109
|
+
setIsSaving(false);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
const handleCancel = () => onClose({ cancelled: true });
|
|
113
|
+
return {
|
|
114
|
+
// State
|
|
115
|
+
isSaving,
|
|
116
|
+
isLoading,
|
|
117
|
+
isError,
|
|
118
|
+
teams,
|
|
119
|
+
newStatus,
|
|
120
|
+
newPriority,
|
|
121
|
+
selectedTeam,
|
|
122
|
+
modalTitle,
|
|
123
|
+
// Setters
|
|
124
|
+
setNewStatus,
|
|
125
|
+
setNewPriority,
|
|
126
|
+
setSelectedTeam,
|
|
127
|
+
// Handlers
|
|
128
|
+
handleSave,
|
|
129
|
+
handleCancel
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// src/components/ManageTicketModal/ManageTicketModal.tsx
|
|
134
|
+
var import_design_system4 = require("@wix/design-system");
|
|
135
|
+
var import_styles_studio_global = require("@wix/design-system/styles-studio.global.css");
|
|
136
|
+
|
|
137
|
+
// src/components/ManageTicketModal/status-change-content.tsx
|
|
138
|
+
var import_design_system = require("@wix/design-system");
|
|
139
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
140
|
+
var STATUS_LABELS = {
|
|
141
|
+
closed: "Closed",
|
|
142
|
+
in_progress: "In Progress",
|
|
143
|
+
open: "Open"
|
|
144
|
+
};
|
|
145
|
+
var StatusChangeContent = ({ currentStatus, newStatus, onStatusChange }) => {
|
|
146
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_design_system.Box, { direction: "vertical", width: "stretch", gap: "10px", children: [
|
|
147
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_design_system.FormField, { label: "Current Status", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_design_system.Input, { value: STATUS_LABELS[currentStatus] ?? currentStatus, disabled: true }) }),
|
|
148
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_design_system.FormField, { label: "New Status", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
149
|
+
import_design_system.Dropdown,
|
|
150
|
+
{
|
|
151
|
+
options: [
|
|
152
|
+
{ id: "open", value: "Open" },
|
|
153
|
+
{ id: "in_progress", value: "In Progress" },
|
|
154
|
+
{ id: "closed", value: "Closed" }
|
|
155
|
+
],
|
|
156
|
+
placeholder: "Select new status",
|
|
157
|
+
selectedId: newStatus || "",
|
|
158
|
+
popoverProps: { appendTo: "window", zIndex: 9999 },
|
|
159
|
+
onSelect: (option) => onStatusChange(option?.id ?? "")
|
|
160
|
+
}
|
|
161
|
+
) })
|
|
162
|
+
] });
|
|
163
|
+
};
|
|
164
|
+
var status_change_content_default = StatusChangeContent;
|
|
165
|
+
|
|
166
|
+
// src/components/ManageTicketModal/priority-change-content.tsx
|
|
167
|
+
var import_design_system2 = require("@wix/design-system");
|
|
168
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
169
|
+
var PRIORITY_LABELS = {
|
|
170
|
+
high: "High",
|
|
171
|
+
medium: "Medium",
|
|
172
|
+
low: "Low"
|
|
173
|
+
};
|
|
174
|
+
var PriorityChangeContent = ({ currentPriority, newPriority, onPriorityChange }) => {
|
|
175
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_design_system2.Box, { direction: "vertical", width: "stretch", gap: "10px", children: [
|
|
176
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_design_system2.FormField, { label: "Current Priority", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_design_system2.Input, { value: PRIORITY_LABELS[currentPriority] ?? currentPriority, disabled: true }) }),
|
|
177
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_design_system2.FormField, { label: "New Priority", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
178
|
+
import_design_system2.Dropdown,
|
|
179
|
+
{
|
|
180
|
+
options: [
|
|
181
|
+
{ id: "high", value: "High" },
|
|
182
|
+
{ id: "medium", value: "Medium" },
|
|
183
|
+
{ id: "low", value: "Low" }
|
|
184
|
+
],
|
|
185
|
+
placeholder: "Select new priority",
|
|
186
|
+
selectedId: newPriority || "",
|
|
187
|
+
popoverProps: { appendTo: "window", zIndex: 9999 },
|
|
188
|
+
onSelect: (option) => onPriorityChange(option?.id ?? "")
|
|
189
|
+
}
|
|
190
|
+
) })
|
|
191
|
+
] });
|
|
192
|
+
};
|
|
193
|
+
var priority_change_content_default = PriorityChangeContent;
|
|
194
|
+
|
|
195
|
+
// src/components/ManageTicketModal/transfer-ticket-content.tsx
|
|
196
|
+
var import_design_system3 = require("@wix/design-system");
|
|
197
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
198
|
+
var TransferTicketContent = ({ currentTeam, teams, selectedTeam, onTeamChange }) => {
|
|
199
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_design_system3.Box, { direction: "vertical", width: "stretch", gap: "10px", children: [
|
|
200
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_design_system3.FormField, { label: "Current Team", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_design_system3.Input, { value: currentTeam, disabled: true }) }),
|
|
201
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_design_system3.FormField, { label: "New Team", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
202
|
+
import_design_system3.Dropdown,
|
|
203
|
+
{
|
|
204
|
+
options: teams.map((team) => ({ id: team._id, value: team.name })),
|
|
205
|
+
placeholder: "Select new team",
|
|
206
|
+
selectedId: selectedTeam || "",
|
|
207
|
+
popoverProps: { appendTo: "window", zIndex: 9999 },
|
|
208
|
+
onSelect: (option) => onTeamChange(option?.id ?? "")
|
|
209
|
+
}
|
|
210
|
+
) })
|
|
211
|
+
] });
|
|
212
|
+
};
|
|
213
|
+
var transfer_ticket_content_default = TransferTicketContent;
|
|
214
|
+
|
|
215
|
+
// src/components/ManageTicketModal/ManageTicketModal.css
|
|
216
|
+
if (typeof document !== "undefined" && !document.getElementById("jrapps-style-450fcfe5")) {
|
|
217
|
+
const s = document.createElement("style");
|
|
218
|
+
s.id = "jrapps-style-450fcfe5";
|
|
219
|
+
s.textContent = ".manage-ticket-modal {\n /* ManageTicketModal base styles */\n}\n";
|
|
220
|
+
document.head.appendChild(s);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// src/components/ManageTicketModal/ManageTicketModal.tsx
|
|
224
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
225
|
+
var ManageTicketModal = import_react2.default.forwardRef(
|
|
226
|
+
({
|
|
227
|
+
className,
|
|
228
|
+
isOpen,
|
|
229
|
+
id,
|
|
230
|
+
state,
|
|
231
|
+
onClose,
|
|
232
|
+
currentStatus,
|
|
233
|
+
currentPriority,
|
|
234
|
+
ticketNumber,
|
|
235
|
+
currentTeamName
|
|
236
|
+
}, ref) => {
|
|
237
|
+
const {
|
|
238
|
+
isSaving,
|
|
239
|
+
isLoading,
|
|
240
|
+
isError,
|
|
241
|
+
teams,
|
|
242
|
+
newStatus,
|
|
243
|
+
newPriority,
|
|
244
|
+
selectedTeam,
|
|
245
|
+
modalTitle,
|
|
246
|
+
setNewStatus,
|
|
247
|
+
setNewPriority,
|
|
248
|
+
setSelectedTeam,
|
|
249
|
+
handleSave,
|
|
250
|
+
handleCancel
|
|
251
|
+
} = useManageTicketModal({ id, state, onClose });
|
|
252
|
+
const renderContent = () => {
|
|
253
|
+
if (isLoading) {
|
|
254
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system4.Box, { direction: "vertical", width: "stretch", gap: "10px", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system4.Loader, { size: "medium", status: "loading", text: "Loading..." }) });
|
|
255
|
+
}
|
|
256
|
+
if (isError) {
|
|
257
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system4.Box, { direction: "vertical", width: "stretch", gap: "10px", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system4.Loader, { size: "medium", status: "error", text: "Error loading data" }) });
|
|
258
|
+
}
|
|
259
|
+
if (state === "STATUS_CHANGE") {
|
|
260
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
261
|
+
status_change_content_default,
|
|
262
|
+
{
|
|
263
|
+
currentStatus: currentStatus ?? "",
|
|
264
|
+
newStatus,
|
|
265
|
+
onStatusChange: setNewStatus
|
|
266
|
+
}
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
if (state === "PRIORITY_CHANGE") {
|
|
270
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
271
|
+
priority_change_content_default,
|
|
272
|
+
{
|
|
273
|
+
currentPriority: currentPriority ?? "",
|
|
274
|
+
newPriority,
|
|
275
|
+
onPriorityChange: setNewPriority
|
|
276
|
+
}
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
if (state === "TRANSFER_TICKET") {
|
|
280
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
281
|
+
transfer_ticket_content_default,
|
|
282
|
+
{
|
|
283
|
+
currentTeam: currentTeamName,
|
|
284
|
+
teams,
|
|
285
|
+
selectedTeam,
|
|
286
|
+
onTeamChange: setSelectedTeam
|
|
287
|
+
}
|
|
288
|
+
);
|
|
289
|
+
}
|
|
290
|
+
return null;
|
|
291
|
+
};
|
|
292
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system4.Modal, { isOpen, ref, className, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
293
|
+
import_design_system4.CustomModalLayout,
|
|
294
|
+
{
|
|
295
|
+
width: "500px",
|
|
296
|
+
primaryButtonText: isSaving ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system4.Loader, { size: "tiny" }) : "Save",
|
|
297
|
+
secondaryButtonText: "Cancel",
|
|
298
|
+
primaryButtonOnClick: handleSave,
|
|
299
|
+
secondaryButtonOnClick: handleCancel,
|
|
300
|
+
showHeaderDivider: true,
|
|
301
|
+
showFooterDivider: true,
|
|
302
|
+
title: modalTitle,
|
|
303
|
+
subtitle: !isLoading ? ticketNumber : "",
|
|
304
|
+
footnote: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system4.Box, { alignContent: "center", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_design_system4.Text, { size: "small", children: [
|
|
305
|
+
"Powered by ",
|
|
306
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system4.Text, { size: "small", weight: "bold", children: "My Tickets" })
|
|
307
|
+
] }) }),
|
|
308
|
+
content: renderContent()
|
|
309
|
+
}
|
|
310
|
+
) });
|
|
311
|
+
}
|
|
312
|
+
);
|
|
313
|
+
ManageTicketModal.displayName = "ManageTicketModal";
|
|
314
|
+
//# sourceMappingURL=index.js.map
|