@qoretechnologies/reqraft 0.10.7 → 0.10.9-pr.74.g452d4d3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/supportTicket/AttachmentChips.d.ts +7 -0
- package/dist/components/supportTicket/AttachmentChips.d.ts.map +1 -0
- package/dist/components/supportTicket/AttachmentChips.js +26 -0
- package/dist/components/supportTicket/AttachmentChips.js.map +1 -0
- package/dist/components/supportTicket/InterfaceReferenceTags.d.ts +25 -0
- package/dist/components/supportTicket/InterfaceReferenceTags.d.ts.map +1 -0
- package/dist/components/supportTicket/InterfaceReferenceTags.js +28 -0
- package/dist/components/supportTicket/InterfaceReferenceTags.js.map +1 -0
- package/dist/components/supportTicket/TicketMetaTags.d.ts +24 -0
- package/dist/components/supportTicket/TicketMetaTags.d.ts.map +1 -0
- package/dist/components/supportTicket/TicketMetaTags.js +21 -0
- package/dist/components/supportTicket/TicketMetaTags.js.map +1 -0
- package/dist/components/supportTicket/TicketReplyBox.d.ts +59 -0
- package/dist/components/supportTicket/TicketReplyBox.d.ts.map +1 -0
- package/dist/components/supportTicket/TicketReplyBox.js +169 -0
- package/dist/components/supportTicket/TicketReplyBox.js.map +1 -0
- package/dist/components/supportTicket/fileToAttachment.d.ts +9 -0
- package/dist/components/supportTicket/fileToAttachment.d.ts.map +1 -0
- package/dist/components/supportTicket/fileToAttachment.js +28 -0
- package/dist/components/supportTicket/fileToAttachment.js.map +1 -0
- package/dist/components/supportTicket/index.d.ts +7 -0
- package/dist/components/supportTicket/index.d.ts.map +1 -0
- package/dist/components/supportTicket/index.js +23 -0
- package/dist/components/supportTicket/index.js.map +1 -0
- package/dist/components/supportTicket/meta.d.ts +55 -0
- package/dist/components/supportTicket/meta.d.ts.map +1 -0
- package/dist/components/supportTicket/meta.js +77 -0
- package/dist/components/supportTicket/meta.js.map +1 -0
- package/dist/components/ticketThread/TicketThread.d.ts +36 -0
- package/dist/components/ticketThread/TicketThread.d.ts.map +1 -0
- package/dist/components/ticketThread/TicketThread.js +137 -0
- package/dist/components/ticketThread/TicketThread.js.map +1 -0
- package/dist/components/ticketThread/index.d.ts +3 -0
- package/dist/components/ticketThread/index.d.ts.map +1 -0
- package/dist/components/ticketThread/index.js +6 -0
- package/dist/components/ticketThread/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/supportTicket/AttachmentChips.tsx +50 -0
- package/src/components/supportTicket/InterfaceReferenceTags.stories.tsx +102 -0
- package/src/components/supportTicket/InterfaceReferenceTags.tsx +62 -0
- package/src/components/supportTicket/TicketMetaTags.stories.tsx +71 -0
- package/src/components/supportTicket/TicketMetaTags.tsx +58 -0
- package/src/components/supportTicket/TicketReplyBox.stories.tsx +111 -0
- package/src/components/supportTicket/TicketReplyBox.tsx +251 -0
- package/src/components/supportTicket/fileToAttachment.ts +24 -0
- package/src/components/supportTicket/index.ts +6 -0
- package/src/components/supportTicket/meta.ts +135 -0
- package/src/components/ticketThread/TicketThread.stories.tsx +192 -0
- package/src/components/ticketThread/TicketThread.tsx +331 -0
- package/src/components/ticketThread/index.ts +6 -0
- package/src/index.tsx +2 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface IAttachmentChipsProps {
|
|
2
|
+
files: File[];
|
|
3
|
+
onRemove: (index: number) => void;
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare const AttachmentChips: ({ files, onRemove, disabled }: IAttachmentChipsProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=AttachmentChips.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AttachmentChips.d.ts","sourceRoot":"","sources":["../../../src/components/supportTicket/AttachmentChips.tsx"],"names":[],"mappings":"AAWA,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,eAAe,kCAAmC,qBAAqB,4CAgCnF,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AttachmentChips = void 0;
|
|
4
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
var reqore_1 = require("@qoretechnologies/reqore");
|
|
6
|
+
var react_1 = require("react");
|
|
7
|
+
var AttachmentChips = function (_a) {
|
|
8
|
+
var files = _a.files, onRemove = _a.onRemove, disabled = _a.disabled;
|
|
9
|
+
var _b = (0, react_1.useState)([]), thumbnails = _b[0], setThumbnails = _b[1];
|
|
10
|
+
(0, react_1.useEffect)(function () {
|
|
11
|
+
var urls = files.map(function (file) {
|
|
12
|
+
return file.type.startsWith('image/') ? URL.createObjectURL(file) : '';
|
|
13
|
+
});
|
|
14
|
+
setThumbnails(urls);
|
|
15
|
+
return function () { return urls.forEach(function (url) { return url && URL.revokeObjectURL(url); }); };
|
|
16
|
+
}, [files]);
|
|
17
|
+
if (!files.length) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
return ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreControlGroup, { wrap: true, gapSize: 'small', verticalAlign: 'center', children: files.map(function (file, index) {
|
|
21
|
+
var thumbnail = thumbnails[index];
|
|
22
|
+
return ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreTag, { icon: thumbnail ? undefined : 'AttachmentLine', leftIconProps: thumbnail ? { image: thumbnail } : undefined, label: file.name, size: 'small', onRemoveClick: disabled ? undefined : function () { return onRemove(index); } }, "".concat(file.name, "-").concat(index)));
|
|
23
|
+
}) }));
|
|
24
|
+
};
|
|
25
|
+
exports.AttachmentChips = AttachmentChips;
|
|
26
|
+
//# sourceMappingURL=AttachmentChips.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AttachmentChips.js","sourceRoot":"","sources":["../../../src/components/supportTicket/AttachmentChips.tsx"],"names":[],"mappings":";;;;AAAA,mDAAyE;AACzE,+BAA4C;AAgBrC,IAAM,eAAe,GAAG,UAAC,EAAoD;QAAlD,KAAK,WAAA,EAAE,QAAQ,cAAA,EAAE,QAAQ,cAAA;IACnD,IAAA,KAA8B,IAAA,gBAAQ,EAAW,EAAE,CAAC,EAAnD,UAAU,QAAA,EAAE,aAAa,QAA0B,CAAC;IAE3D,IAAA,iBAAS,EAAC;QACR,IAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,UAAC,IAAI;YAC1B,OAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;QAA/D,CAA+D,CAChE,CAAC;QACF,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,cAAM,OAAA,IAAI,CAAC,OAAO,CAAC,UAAC,GAAG,IAAK,OAAA,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,EAA/B,CAA+B,CAAC,EAAtD,CAAsD,CAAC;IACtE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,uBAAC,2BAAkB,IAAC,IAAI,QAAC,OAAO,EAAC,OAAO,EAAC,aAAa,EAAC,QAAQ,YAC5D,KAAK,CAAC,GAAG,CAAC,UAAC,IAAI,EAAE,KAAK;YACrB,IAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YACpC,OAAO,CACL,uBAAC,kBAAS,IAER,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,EAC9C,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,EAC3D,KAAK,EAAE,IAAI,CAAC,IAAI,EAChB,IAAI,EAAC,OAAO,EACZ,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAM,OAAA,QAAQ,CAAC,KAAK,CAAC,EAAf,CAAe,IALtD,UAAG,IAAI,CAAC,IAAI,cAAI,KAAK,CAAE,CAM5B,CACH,CAAC;QACJ,CAAC,CAAC,GACiB,CACtB,CAAC;AACJ,CAAC,CAAC;AAhCW,QAAA,eAAe,mBAgC1B"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { TSizes } from '@qoretechnologies/reqore/dist/constants/sizes';
|
|
2
|
+
import { IReqoreIconName } from '@qoretechnologies/reqore/dist/types/icons';
|
|
3
|
+
import { IInterfaceReference } from './meta';
|
|
4
|
+
export interface IInterfaceReferenceTagsProps {
|
|
5
|
+
references?: IInterfaceReference[];
|
|
6
|
+
/** Optional leading label, e.g. "References" in a ticket header. Omitted (the
|
|
7
|
+
* default) inside the thread, where the chips sit under a message. */
|
|
8
|
+
label?: string;
|
|
9
|
+
/** Resolve a per-kind icon. Consumers with their own icon vocabulary (the IDE)
|
|
10
|
+
* pass one; when omitted the built-in per-kind default is used. */
|
|
11
|
+
resolveInterfaceIcon?: (kind: string) => IReqoreIconName;
|
|
12
|
+
/** Open a referenced interface; chips are static (informational) when omitted —
|
|
13
|
+
* e.g. the staff view, which can't reach the customer's instance. */
|
|
14
|
+
onInterfaceClick?: (reference: IInterfaceReference) => void;
|
|
15
|
+
size?: TSizes;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The chips for the Qorus interfaces a ticket or message references, as
|
|
19
|
+
* `{kind, name}` snapshots. The single renderer for interface references across
|
|
20
|
+
* every support surface — the ticket header (with a "References" label), the
|
|
21
|
+
* thread (per message, no label), and the Qonsole card — so a reference looks
|
|
22
|
+
* identical everywhere. Renders nothing when there are no references.
|
|
23
|
+
*/
|
|
24
|
+
export declare const InterfaceReferenceTags: ({ references, label, resolveInterfaceIcon, onInterfaceClick, size, }: IInterfaceReferenceTagsProps) => import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
//# sourceMappingURL=InterfaceReferenceTags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InterfaceReferenceTags.d.ts","sourceRoot":"","sources":["../../../src/components/supportTicket/InterfaceReferenceTags.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,+CAA+C,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAwB,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAEnE,MAAM,WAAW,4BAA4B;IAC3C,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACnC;2EACuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;wEACoE;IACpE,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;IACzD;0EACsE;IACtE,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,yEAMhC,4BAA4B,4CA6B9B,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InterfaceReferenceTags = void 0;
|
|
4
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
var reqore_1 = require("@qoretechnologies/reqore");
|
|
6
|
+
var meta_1 = require("./meta");
|
|
7
|
+
/**
|
|
8
|
+
* The chips for the Qorus interfaces a ticket or message references, as
|
|
9
|
+
* `{kind, name}` snapshots. The single renderer for interface references across
|
|
10
|
+
* every support surface — the ticket header (with a "References" label), the
|
|
11
|
+
* thread (per message, no label), and the Qonsole card — so a reference looks
|
|
12
|
+
* identical everywhere. Renders nothing when there are no references.
|
|
13
|
+
*/
|
|
14
|
+
var InterfaceReferenceTags = function (_a) {
|
|
15
|
+
var references = _a.references, label = _a.label, resolveInterfaceIcon = _a.resolveInterfaceIcon, onInterfaceClick = _a.onInterfaceClick, _b = _a.size, size = _b === void 0 ? 'small' : _b;
|
|
16
|
+
if (!(references === null || references === void 0 ? void 0 : references.length)) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
var resolveIcon = resolveInterfaceIcon !== null && resolveInterfaceIcon !== void 0 ? resolveInterfaceIcon : meta_1.defaultInterfaceIcon;
|
|
20
|
+
return ((0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { verticalAlign: 'center', wrap: true, gapSize: 'small', children: [label ? ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreP, { size: 'small', effect: { opacity: 0.6 }, children: label })) : null, references.map(function (reference) {
|
|
21
|
+
var _a;
|
|
22
|
+
return ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreTag, { icon: resolveIcon(reference.interface_kind), labelKey: reference.interface_kind, label: reference.interface_name, size: size, tooltip: onInterfaceClick
|
|
23
|
+
? "Open ".concat(reference.interface_kind, " ").concat(reference.interface_name)
|
|
24
|
+
: "".concat(reference.interface_kind, ": ").concat(reference.interface_name), onClick: onInterfaceClick ? function () { return onInterfaceClick(reference); } : undefined }, (_a = reference.reference_id) !== null && _a !== void 0 ? _a : "".concat(reference.interface_kind, ":").concat(reference.interface_name)));
|
|
25
|
+
})] }));
|
|
26
|
+
};
|
|
27
|
+
exports.InterfaceReferenceTags = InterfaceReferenceTags;
|
|
28
|
+
//# sourceMappingURL=InterfaceReferenceTags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InterfaceReferenceTags.js","sourceRoot":"","sources":["../../../src/components/supportTicket/InterfaceReferenceTags.tsx"],"names":[],"mappings":";;;;AAAA,mDAAkF;AAGlF,+BAAmE;AAgBnE;;;;;;GAMG;AACI,IAAM,sBAAsB,GAAG,UAAC,EAMR;QAL7B,UAAU,gBAAA,EACV,KAAK,WAAA,EACL,oBAAoB,0BAAA,EACpB,gBAAgB,sBAAA,EAChB,YAAc,EAAd,IAAI,mBAAG,OAAO,KAAA;IAEd,IAAI,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAA,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAM,WAAW,GAAG,oBAAoB,aAApB,oBAAoB,cAApB,oBAAoB,GAAI,2BAAoB,CAAC;IACjE,OAAO,CACL,wBAAC,2BAAkB,IAAC,aAAa,EAAC,QAAQ,EAAC,IAAI,QAAC,OAAO,EAAC,OAAO,aAC5D,KAAK,CAAC,CAAC,CAAC,CACP,uBAAC,gBAAO,IAAC,IAAI,EAAC,OAAO,EAAC,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,YAC3C,KAAK,GACE,CACX,CAAC,CAAC,CAAC,IAAI,EACP,UAAU,CAAC,GAAG,CAAC,UAAC,SAAS;;gBAAK,OAAA,CAC7B,uBAAC,kBAAS,IAER,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC,cAAc,CAAC,EAC3C,QAAQ,EAAE,SAAS,CAAC,cAAc,EAClC,KAAK,EAAE,SAAS,CAAC,cAAc,EAC/B,IAAI,EAAE,IAAI,EACV,OAAO,EACL,gBAAgB;wBACd,CAAC,CAAC,eAAQ,SAAS,CAAC,cAAc,cAAI,SAAS,CAAC,cAAc,CAAE;wBAChE,CAAC,CAAC,UAAG,SAAS,CAAC,cAAc,eAAK,SAAS,CAAC,cAAc,CAAE,EAEhE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,cAAM,OAAA,gBAAgB,CAAC,SAAS,CAAC,EAA3B,CAA2B,CAAC,CAAC,CAAC,SAAS,IAVpE,MAAA,SAAS,CAAC,YAAY,mCAAI,UAAG,SAAS,CAAC,cAAc,cAAI,SAAS,CAAC,cAAc,CAAE,CAWxF,CACH,CAAA;aAAA,CAAC,IACiB,CACtB,CAAC;AACJ,CAAC,CAAC;AAnCW,QAAA,sBAAsB,0BAmCjC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { TSizes } from '@qoretechnologies/reqore/dist/constants/sizes';
|
|
2
|
+
import { TTicketCategory, TTicketPriority, TTicketStatus, TTicketViewerRole } from './meta';
|
|
3
|
+
export interface ITicketMetaTagsProps {
|
|
4
|
+
/** The three enum values to badge — a full ticket satisfies this structurally. */
|
|
5
|
+
ticket: {
|
|
6
|
+
status: TTicketStatus;
|
|
7
|
+
priority: TTicketPriority;
|
|
8
|
+
category: TTicketCategory;
|
|
9
|
+
};
|
|
10
|
+
/** Picks audience-specific labels (e.g. "Awaiting your reply" vs "Awaiting
|
|
11
|
+
* customer"). Omit for the staff / neutral wording. */
|
|
12
|
+
viewerRole?: TTicketViewerRole;
|
|
13
|
+
size?: TSizes;
|
|
14
|
+
/** Hide the category tag (e.g. in a dense list row). */
|
|
15
|
+
hideCategory?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The status / priority / category badge row for a ticket — the single place the
|
|
19
|
+
* three enum vocabularies (`../supportTicket/meta`) turn into Reqore tags, so the
|
|
20
|
+
* customer list, the staff queue, the detail header and the Qonsole card all read
|
|
21
|
+
* identically. Each tag's label, intent and icon come from the shared meta maps.
|
|
22
|
+
*/
|
|
23
|
+
export declare const TicketMetaTags: ({ ticket, viewerRole, size, hideCategory, }: ITicketMetaTagsProps) => import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
//# sourceMappingURL=TicketMetaTags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TicketMetaTags.d.ts","sourceRoot":"","sources":["../../../src/components/supportTicket/TicketMetaTags.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,+CAA+C,CAAC;AACvE,OAAO,EAKL,eAAe,EACf,eAAe,EACf,aAAa,EACb,iBAAiB,EAClB,MAAM,QAAQ,CAAC;AAEhB,MAAM,WAAW,oBAAoB;IACnC,kFAAkF;IAClF,MAAM,EAAE;QACN,MAAM,EAAE,aAAa,CAAC;QACtB,QAAQ,EAAE,eAAe,CAAC;QAC1B,QAAQ,EAAE,eAAe,CAAC;KAC3B,CAAC;IACF;4DACwD;IACxD,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,gDAKxB,oBAAoB,4CAkBtB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TicketMetaTags = void 0;
|
|
4
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
var reqore_1 = require("@qoretechnologies/reqore");
|
|
6
|
+
var meta_1 = require("./meta");
|
|
7
|
+
/**
|
|
8
|
+
* The status / priority / category badge row for a ticket — the single place the
|
|
9
|
+
* three enum vocabularies (`../supportTicket/meta`) turn into Reqore tags, so the
|
|
10
|
+
* customer list, the staff queue, the detail header and the Qonsole card all read
|
|
11
|
+
* identically. Each tag's label, intent and icon come from the shared meta maps.
|
|
12
|
+
*/
|
|
13
|
+
var TicketMetaTags = function (_a) {
|
|
14
|
+
var ticket = _a.ticket, viewerRole = _a.viewerRole, _b = _a.size, size = _b === void 0 ? 'small' : _b, hideCategory = _a.hideCategory;
|
|
15
|
+
var status = meta_1.TICKET_STATUS_META[ticket.status];
|
|
16
|
+
var priority = meta_1.TICKET_PRIORITY_META[ticket.priority];
|
|
17
|
+
var category = meta_1.TICKET_CATEGORY_META[ticket.category];
|
|
18
|
+
return ((0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { size: size, wrap: true, children: [(0, jsx_runtime_1.jsx)(reqore_1.ReqoreTag, { icon: status.icon, intent: status.intent, label: (0, meta_1.ticketStatusLabel)(ticket.status, viewerRole), size: size, effect: { weight: 'bold' } }), (0, jsx_runtime_1.jsx)(reqore_1.ReqoreTag, { icon: priority.icon, intent: priority.intent, label: priority.label, size: size }), !hideCategory && (0, jsx_runtime_1.jsx)(reqore_1.ReqoreTag, { icon: category.icon, label: category.label, size: size })] }));
|
|
19
|
+
};
|
|
20
|
+
exports.TicketMetaTags = TicketMetaTags;
|
|
21
|
+
//# sourceMappingURL=TicketMetaTags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TicketMetaTags.js","sourceRoot":"","sources":["../../../src/components/supportTicket/TicketMetaTags.tsx"],"names":[],"mappings":";;;;AAAA,mDAAyE;AAEzE,+BASgB;AAiBhB;;;;;GAKG;AACI,IAAM,cAAc,GAAG,UAAC,EAKR;QAJrB,MAAM,YAAA,EACN,UAAU,gBAAA,EACV,YAAc,EAAd,IAAI,mBAAG,OAAO,KAAA,EACd,YAAY,kBAAA;IAEZ,IAAM,MAAM,GAAG,yBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjD,IAAM,QAAQ,GAAG,2BAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvD,IAAM,QAAQ,GAAG,2BAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEvD,OAAO,CACL,wBAAC,2BAAkB,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,mBAClC,uBAAC,kBAAS,IACR,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,KAAK,EAAE,IAAA,wBAAiB,EAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACnD,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAC1B,EACF,uBAAC,kBAAS,IAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,GAAI,EAC7F,CAAC,YAAY,IAAI,uBAAC,kBAAS,IAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,GAAI,IACpE,CACtB,CAAC;AACJ,CAAC,CAAC;AAvBW,QAAA,cAAc,kBAuBzB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ReqoreDropdown } from '@qoretechnologies/reqore';
|
|
2
|
+
import { ComponentProps, ReactNode } from 'react';
|
|
3
|
+
import { IAttachmentUpload } from './meta';
|
|
4
|
+
/** The exact `items` shape ReqoreDropdown accepts — no import-path guessing. */
|
|
5
|
+
type TAttachMenuItems = NonNullable<ComponentProps<typeof ReqoreDropdown>['items']>;
|
|
6
|
+
export interface ITicketReplyBoxProps {
|
|
7
|
+
/** Send the composed message. `internal` is only ever true when
|
|
8
|
+
* `allowInternalNote` is set (the staff surface). */
|
|
9
|
+
onSend: (body: string, options: {
|
|
10
|
+
internal: boolean;
|
|
11
|
+
attachments?: IAttachmentUpload[];
|
|
12
|
+
}) => void | Promise<void>;
|
|
13
|
+
/** File → base64 upload conversion; defaults to the shared `fileToAttachment`. */
|
|
14
|
+
fileToAttachment?: (file: File) => Promise<IAttachmentUpload>;
|
|
15
|
+
/** the send round-trip is in flight */
|
|
16
|
+
sending?: boolean;
|
|
17
|
+
/** the ticket can't be replied to (e.g. closed) — renders a notice instead */
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
disabledReason?: string;
|
|
20
|
+
/** placeholder text. (A function is called with `false` — there is no live
|
|
21
|
+
* internal-note mode any more; the mode is chosen at send time.) */
|
|
22
|
+
placeholder?: string | ((internal: boolean) => string);
|
|
23
|
+
/** send labels; a function is called with `false` for the primary "Send reply"
|
|
24
|
+
* and `true` for the "Add internal note" split-menu item. Defaults to
|
|
25
|
+
* "Send reply" / "Add internal note". */
|
|
26
|
+
sendLabel?: string | ((internal: boolean) => string);
|
|
27
|
+
/** Staff surface: split the send button so it also offers "Add internal note"
|
|
28
|
+
* (customer composers omit it and just send a reply). */
|
|
29
|
+
allowInternalNote?: boolean;
|
|
30
|
+
/** Extra attach-menu entries beyond "Upload files" — e.g. the IDE's screenshot /
|
|
31
|
+
* region capture, which need IDE-only capabilities. Receives the composer's
|
|
32
|
+
* `addFiles` so an item can stage the file(s) it produces. With any entry the
|
|
33
|
+
* attach control becomes a dropdown; otherwise it's a plain button. */
|
|
34
|
+
attachMenuItems?: (addFiles: (files: File[]) => void) => TAttachMenuItems;
|
|
35
|
+
/** Extra footer controls left of the send button — e.g. the IDE's
|
|
36
|
+
* reference-interfaces toggle. */
|
|
37
|
+
footerActions?: ReactNode;
|
|
38
|
+
/** Rendered below the textarea — e.g. the IDE's interface-reference picker. */
|
|
39
|
+
belowInput?: ReactNode;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The shared ticket reply composer core: a markdown textarea, staged file chips
|
|
43
|
+
* (with image thumbnails), an attach control, and a send button — presentational,
|
|
44
|
+
* with the parent owning the send round-trip and busy/disabled state. On the staff
|
|
45
|
+
* surface (`allowInternalNote`) the send button splits: the primary posts a public
|
|
46
|
+
* reply and a caret offers "Add internal note", so the mode is chosen at send time
|
|
47
|
+
* instead of held in a toggle that's easy to misread. A closed ticket renders a
|
|
48
|
+
* muted notice.
|
|
49
|
+
*
|
|
50
|
+
* App-specific affordances are injected through slots rather than baked in, so
|
|
51
|
+
* the IDE-only bits (screenshot / region capture, clipboard paste, the
|
|
52
|
+
* interface-reference picker — all of which need IDE helpers or the customer's
|
|
53
|
+
* instance) stay in qorus-ide: `attachMenuItems` adds to the attach menu,
|
|
54
|
+
* `belowInput` hosts the reference picker, `footerActions` adds footer buttons,
|
|
55
|
+
* and `onPaste` handles clipboard images.
|
|
56
|
+
*/
|
|
57
|
+
export declare const TicketReplyBox: ({ onSend, fileToAttachment, sending, disabled, disabledReason, placeholder, sendLabel, allowInternalNote, attachMenuItems, footerActions, belowInput, }: ITicketReplyBoxProps) => import("react/jsx-runtime").JSX.Element;
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=TicketReplyBox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TicketReplyBox.d.ts","sourceRoot":"","sources":["../../../src/components/supportTicket/TicketReplyBox.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,cAAc,EAGf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAoB,MAAM,OAAO,CAAC;AAGpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAE3C,gFAAgF;AAChF,KAAK,gBAAgB,GAAG,WAAW,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAEpF,MAAM,WAAW,oBAAoB;IACnC;0DACsD;IACtD,MAAM,EAAE,CACN,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAA;KAAE,KAC9D,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9D,uCAAuC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;yEACqE;IACrE,WAAW,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAC,CAAC;IACvD;;8CAE0C;IAC1C,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAC,CAAC;IACrD;8DAC0D;IAC1D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;4EAGwE;IACxE,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,gBAAgB,CAAC;IAC1E;uCACmC;IACnC,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,+EAA+E;IAC/E,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAiBD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,cAAc,4JAYxB,oBAAoB,4CA4JtB,CAAC"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
39
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
40
|
+
if (ar || !(i in from)) {
|
|
41
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
42
|
+
ar[i] = from[i];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.TicketReplyBox = void 0;
|
|
49
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
50
|
+
var reqore_1 = require("@qoretechnologies/reqore");
|
|
51
|
+
var react_1 = require("react");
|
|
52
|
+
var AttachmentChips_1 = require("./AttachmentChips");
|
|
53
|
+
var fileToAttachment_1 = require("./fileToAttachment");
|
|
54
|
+
/** Image files pasted from the clipboard (a screenshot, a copied image) — the
|
|
55
|
+
* generic bits, so pasting to attach works on every composer without an IDE dep. */
|
|
56
|
+
var clipboardImages = function (event) {
|
|
57
|
+
var _a, _b;
|
|
58
|
+
var images = [];
|
|
59
|
+
for (var _i = 0, _c = Array.from((_b = (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.items) !== null && _b !== void 0 ? _b : []); _i < _c.length; _i++) {
|
|
60
|
+
var item = _c[_i];
|
|
61
|
+
if (item.kind === 'file' && item.type.startsWith('image/')) {
|
|
62
|
+
var file = item.getAsFile();
|
|
63
|
+
if (file) {
|
|
64
|
+
images.push(file);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return images;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* The shared ticket reply composer core: a markdown textarea, staged file chips
|
|
72
|
+
* (with image thumbnails), an attach control, and a send button — presentational,
|
|
73
|
+
* with the parent owning the send round-trip and busy/disabled state. On the staff
|
|
74
|
+
* surface (`allowInternalNote`) the send button splits: the primary posts a public
|
|
75
|
+
* reply and a caret offers "Add internal note", so the mode is chosen at send time
|
|
76
|
+
* instead of held in a toggle that's easy to misread. A closed ticket renders a
|
|
77
|
+
* muted notice.
|
|
78
|
+
*
|
|
79
|
+
* App-specific affordances are injected through slots rather than baked in, so
|
|
80
|
+
* the IDE-only bits (screenshot / region capture, clipboard paste, the
|
|
81
|
+
* interface-reference picker — all of which need IDE helpers or the customer's
|
|
82
|
+
* instance) stay in qorus-ide: `attachMenuItems` adds to the attach menu,
|
|
83
|
+
* `belowInput` hosts the reference picker, `footerActions` adds footer buttons,
|
|
84
|
+
* and `onPaste` handles clipboard images.
|
|
85
|
+
*/
|
|
86
|
+
var TicketReplyBox = function (_a) {
|
|
87
|
+
var onSend = _a.onSend, _b = _a.fileToAttachment, fileToAttachment = _b === void 0 ? fileToAttachment_1.fileToAttachment : _b, sending = _a.sending, disabled = _a.disabled, _c = _a.disabledReason, disabledReason = _c === void 0 ? 'This ticket is closed. Open a new ticket to continue the conversation.' : _c, _d = _a.placeholder, placeholder = _d === void 0 ? 'Write a reply…' : _d, sendLabel = _a.sendLabel, allowInternalNote = _a.allowInternalNote, attachMenuItems = _a.attachMenuItems, footerActions = _a.footerActions, belowInput = _a.belowInput;
|
|
88
|
+
var _e = (0, react_1.useState)(''), body = _e[0], setBody = _e[1];
|
|
89
|
+
var _f = (0, react_1.useState)([]), files = _f[0], setFiles = _f[1];
|
|
90
|
+
var fileInput = (0, react_1.useRef)(null);
|
|
91
|
+
if (disabled) {
|
|
92
|
+
return ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreMessage, { intent: 'muted', icon: 'LockLine', size: 'small', flat: true, children: disabledReason }));
|
|
93
|
+
}
|
|
94
|
+
var canSend = !!body.trim() && !sending;
|
|
95
|
+
var resolvedPlaceholder = typeof placeholder === 'function' ? placeholder(false) : placeholder;
|
|
96
|
+
// Label for a given send mode: `false` = public reply, `true` = internal note.
|
|
97
|
+
var labelFor = function (note) {
|
|
98
|
+
return sendLabel !== undefined
|
|
99
|
+
? typeof sendLabel === 'function'
|
|
100
|
+
? sendLabel(note)
|
|
101
|
+
: sendLabel
|
|
102
|
+
: note
|
|
103
|
+
? 'Add internal note'
|
|
104
|
+
: 'Send reply';
|
|
105
|
+
};
|
|
106
|
+
var addFiles = function (incoming) {
|
|
107
|
+
if (incoming.length) {
|
|
108
|
+
setFiles(function (prev) { return __spreadArray(__spreadArray([], prev, true), incoming, true); });
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
var handlePaste = function (event) {
|
|
112
|
+
var images = clipboardImages(event);
|
|
113
|
+
if (images.length) {
|
|
114
|
+
event.preventDefault();
|
|
115
|
+
addFiles(images);
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
var extraAttachItems = attachMenuItems ? attachMenuItems(addFiles) : [];
|
|
119
|
+
var handleSend = function (internal) { return __awaiter(void 0, void 0, void 0, function () {
|
|
120
|
+
var attachments, _a;
|
|
121
|
+
return __generator(this, function (_b) {
|
|
122
|
+
switch (_b.label) {
|
|
123
|
+
case 0:
|
|
124
|
+
if (!body.trim()) {
|
|
125
|
+
return [2 /*return*/];
|
|
126
|
+
}
|
|
127
|
+
if (!files.length) return [3 /*break*/, 2];
|
|
128
|
+
return [4 /*yield*/, Promise.all(files.map(fileToAttachment))];
|
|
129
|
+
case 1:
|
|
130
|
+
_a = _b.sent();
|
|
131
|
+
return [3 /*break*/, 3];
|
|
132
|
+
case 2:
|
|
133
|
+
_a = undefined;
|
|
134
|
+
_b.label = 3;
|
|
135
|
+
case 3:
|
|
136
|
+
attachments = _a;
|
|
137
|
+
return [4 /*yield*/, onSend(body.trim(), { internal: internal, attachments: attachments })];
|
|
138
|
+
case 4:
|
|
139
|
+
_b.sent();
|
|
140
|
+
// only reached when onSend resolves — a thrown error keeps the draft + files
|
|
141
|
+
setBody('');
|
|
142
|
+
setFiles([]);
|
|
143
|
+
return [2 /*return*/];
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}); };
|
|
147
|
+
return ((0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { vertical: true, fluid: true, gapSize: 'small', onPaste: handlePaste, children: [(0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { fluid: true, verticalAlign: 'flex-end', gapSize: 'small', children: [(0, jsx_runtime_1.jsx)(reqore_1.ReqoreTextarea, { value: body, scaleWithContent: true, fluid: true, placeholder: resolvedPlaceholder, disabled: sending, onChange: function (e) { return setBody(e.target.value); } }), extraAttachItems.length ? ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreDropdown, { icon: 'AttachmentLine', minimal: true, flat: true, disabled: sending, tooltip: 'Attach', items: __spreadArray([
|
|
148
|
+
{ label: 'Upload files', icon: 'Upload2Line', onClick: function () { var _a; return (_a = fileInput.current) === null || _a === void 0 ? void 0 : _a.click(); } }
|
|
149
|
+
], extraAttachItems, true) })) : ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { icon: 'AttachmentLine', minimal: true, flat: true, disabled: sending, tooltip: 'Attach files', onClick: function () { var _a; return (_a = fileInput.current) === null || _a === void 0 ? void 0 : _a.click(); } })), footerActions, allowInternalNote ? ((0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { stack: true, fixed: true, children: [(0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { icon: 'SendPlane2Line', intent: 'info', disabled: !canSend, loading: sending, onClick: function () { return handleSend(false); }, children: labelFor(false) }), (0, jsx_runtime_1.jsx)(reqore_1.ReqoreDropdown, { className: 'ticket-send-more', icon: 'ArrowDownSLine', intent: 'info', disabled: !canSend, tooltip: 'More send options', items: [
|
|
150
|
+
{
|
|
151
|
+
label: labelFor(false),
|
|
152
|
+
icon: 'SendPlane2Line',
|
|
153
|
+
onClick: function () { return handleSend(false); },
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
label: labelFor(true),
|
|
157
|
+
icon: 'StickyNoteLine',
|
|
158
|
+
intent: 'warning',
|
|
159
|
+
onClick: function () { return handleSend(true); },
|
|
160
|
+
},
|
|
161
|
+
] })] })) : ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { icon: 'SendPlane2Line', intent: 'info', disabled: !canSend, loading: sending, onClick: function () { return handleSend(false); }, fixed: true, children: labelFor(false) }))] }), (0, jsx_runtime_1.jsx)(AttachmentChips_1.AttachmentChips, { files: files, onRemove: function (index) { return setFiles(function (prev) { return prev.filter(function (_, j) { return j !== index; }); }); }, disabled: sending }), belowInput, (0, jsx_runtime_1.jsx)("input", { ref: fileInput, type: 'file', multiple: true, style: { display: 'none' }, onChange: function (e) {
|
|
162
|
+
if (e.target.files) {
|
|
163
|
+
addFiles(Array.from(e.target.files));
|
|
164
|
+
}
|
|
165
|
+
e.target.value = '';
|
|
166
|
+
} })] }));
|
|
167
|
+
};
|
|
168
|
+
exports.TicketReplyBox = TicketReplyBox;
|
|
169
|
+
//# sourceMappingURL=TicketReplyBox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TicketReplyBox.js","sourceRoot":"","sources":["../../../src/components/supportTicket/TicketReplyBox.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IAttachmentUpload } from './meta';
|
|
2
|
+
/**
|
|
3
|
+
* Read a picked `File` into the inline base64 upload shape the support API expects
|
|
4
|
+
* (the SaaS plane accepts attachments as base64 on the create/reply payload, with
|
|
5
|
+
* no separate multipart upload). Shared by every composer so the customer and
|
|
6
|
+
* staff surfaces encode files identically.
|
|
7
|
+
*/
|
|
8
|
+
export declare const fileToAttachment: (file: File) => Promise<IAttachmentUpload>;
|
|
9
|
+
//# sourceMappingURL=fileToAttachment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileToAttachment.d.ts","sourceRoot":"","sources":["../../../src/components/supportTicket/fileToAttachment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,SAAU,IAAI,KAAG,QAAQ,iBAAiB,CAenE,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fileToAttachment = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Read a picked `File` into the inline base64 upload shape the support API expects
|
|
6
|
+
* (the SaaS plane accepts attachments as base64 on the create/reply payload, with
|
|
7
|
+
* no separate multipart upload). Shared by every composer so the customer and
|
|
8
|
+
* staff surfaces encode files identically.
|
|
9
|
+
*/
|
|
10
|
+
var fileToAttachment = function (file) {
|
|
11
|
+
return new Promise(function (resolve, reject) {
|
|
12
|
+
var reader = new FileReader();
|
|
13
|
+
reader.onerror = function () { return reject(new Error("Could not read ".concat(file.name))); };
|
|
14
|
+
reader.onload = function () {
|
|
15
|
+
// reader.result is a data URL: "data:<type>;base64,<content>"
|
|
16
|
+
var result = String(reader.result);
|
|
17
|
+
var content = result.slice(result.indexOf(',') + 1);
|
|
18
|
+
resolve({
|
|
19
|
+
filename: file.name,
|
|
20
|
+
content_type: file.type || 'application/octet-stream',
|
|
21
|
+
content: content,
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
reader.readAsDataURL(file);
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
exports.fileToAttachment = fileToAttachment;
|
|
28
|
+
//# sourceMappingURL=fileToAttachment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileToAttachment.js","sourceRoot":"","sources":["../../../src/components/supportTicket/fileToAttachment.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AACI,IAAM,gBAAgB,GAAG,UAAC,IAAU;IACzC,OAAA,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;QAC1B,IAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,OAAO,GAAG,cAAM,OAAA,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAkB,IAAI,CAAC,IAAI,CAAE,CAAC,CAAC,EAAhD,CAAgD,CAAC;QACxE,MAAM,CAAC,MAAM,GAAG;YACd,8DAA8D;YAC9D,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACrC,IAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC;gBACN,QAAQ,EAAE,IAAI,CAAC,IAAI;gBACnB,YAAY,EAAE,IAAI,CAAC,IAAI,IAAI,0BAA0B;gBACrD,OAAO,SAAA;aACR,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC;AAdF,CAcE,CAAC;AAfQ,QAAA,gBAAgB,oBAexB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/supportTicket/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./meta"), exports);
|
|
18
|
+
__exportStar(require("./AttachmentChips"), exports);
|
|
19
|
+
__exportStar(require("./TicketMetaTags"), exports);
|
|
20
|
+
__exportStar(require("./InterfaceReferenceTags"), exports);
|
|
21
|
+
__exportStar(require("./fileToAttachment"), exports);
|
|
22
|
+
__exportStar(require("./TicketReplyBox"), exports);
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/supportTicket/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,oDAAkC;AAClC,mDAAiC;AACjC,2DAAyC;AACzC,qDAAmC;AACnC,mDAAiC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { TReqoreIntent } from '@qoretechnologies/reqore/dist/constants/theme';
|
|
2
|
+
import { IReqoreIconName } from '@qoretechnologies/reqore/dist/types/icons';
|
|
3
|
+
export type TTicketStatus = 'new' | 'open' | 'awaiting_customer' | 'resolved' | 'closed';
|
|
4
|
+
export type TTicketPriority = 'low' | 'normal' | 'high' | 'urgent';
|
|
5
|
+
export type TTicketCategory = 'bug' | 'question' | 'billing' | 'feature' | 'other';
|
|
6
|
+
export type TTicketAuditAction = 'replied' | 'noted' | 'status_changed' | 'assigned' | 'updated';
|
|
7
|
+
/** A message author. Staff identities are masked from the customer by the backend. */
|
|
8
|
+
export type TTicketMessageAuthor = 'customer' | 'staff' | 'system';
|
|
9
|
+
/** Which side "you" sit on — decides self-alignment and audience-specific labels. */
|
|
10
|
+
export type TTicketViewerRole = 'customer' | 'staff';
|
|
11
|
+
export interface ITicketEnumMeta {
|
|
12
|
+
label: string;
|
|
13
|
+
intent: TReqoreIntent;
|
|
14
|
+
icon: IReqoreIconName;
|
|
15
|
+
/** Audience-specific label for the customer view; falls back to `label` (the
|
|
16
|
+
* staff / neutral wording). Only a few values differ by audience. */
|
|
17
|
+
customerLabel?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare const TICKET_STATUS_META: Record<TTicketStatus, ITicketEnumMeta>;
|
|
20
|
+
export declare const TICKET_PRIORITY_META: Record<TTicketPriority, ITicketEnumMeta>;
|
|
21
|
+
export declare const TICKET_CATEGORY_META: Record<TTicketCategory, ITicketEnumMeta>;
|
|
22
|
+
/** Staff-only audit trail vocabulary (used by the admin-portal staff surface).
|
|
23
|
+
* These are exactly the actions the backend writes (qorus-api
|
|
24
|
+
* `QorusSaasTicketStore::insertAudit`): a public reply, an internal note, a
|
|
25
|
+
* status change, an assignment, or `updated` (a priority/category change). */
|
|
26
|
+
export declare const TICKET_AUDIT_ACTION_META: Record<TTicketAuditAction, ITicketEnumMeta>;
|
|
27
|
+
/** The status label for a given viewer — the customer sees "Awaiting your reply"
|
|
28
|
+
* where staff see "Awaiting customer"; all other values are audience-neutral. */
|
|
29
|
+
export declare const ticketStatusLabel: (status: TTicketStatus, viewerRole?: TTicketViewerRole) => string;
|
|
30
|
+
/** A reply may be sent while a ticket is in any state except `closed`. */
|
|
31
|
+
export declare const REPLYABLE_STATUSES: TTicketStatus[];
|
|
32
|
+
/** Whether a ticket can still be replied to (closed ⇒ no). */
|
|
33
|
+
export declare const isTicketReplyable: (status: TTicketStatus) => boolean;
|
|
34
|
+
/** A file to upload with a ticket or reply — raw bytes as base64, inline on the
|
|
35
|
+
* create/reply payload (the SaaS plane has no separate multipart upload). */
|
|
36
|
+
export interface IAttachmentUpload {
|
|
37
|
+
filename: string;
|
|
38
|
+
content_type: string;
|
|
39
|
+
/** base64-encoded file content */
|
|
40
|
+
content: string;
|
|
41
|
+
}
|
|
42
|
+
/** A reference to a Qorus interface on the subscriber's instance, stored as a
|
|
43
|
+
* `{kind, name}` snapshot (the interface itself lives on the instance, not the
|
|
44
|
+
* SaaS plane). Attaches to a ticket (at creation) or a message (in a reply). */
|
|
45
|
+
export interface IInterfaceReference {
|
|
46
|
+
/** interface type: workflow / service / job / fsm / connection / ... */
|
|
47
|
+
interface_kind: string;
|
|
48
|
+
/** interface name (may include a version) */
|
|
49
|
+
interface_name: string;
|
|
50
|
+
/** server-assigned reference UUID (present on read, absent when submitting) */
|
|
51
|
+
reference_id?: string;
|
|
52
|
+
}
|
|
53
|
+
/** Default per-kind icon for a referenced interface, with a generic fallback. */
|
|
54
|
+
export declare const defaultInterfaceIcon: (kind: string) => IReqoreIconName;
|
|
55
|
+
//# sourceMappingURL=meta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/components/supportTicket/meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAW5E,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,GAAG,mBAAmB,GAAG,UAAU,GAAG,QAAQ,CAAC;AACzF,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AACnE,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AACnF,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,GAAG,gBAAgB,GAAG,UAAU,GAAG,SAAS,CAAC;AAEjG,sFAAsF;AACtF,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEnE,qFAAqF;AACrF,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,eAAe,CAAC;IACtB;0EACsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,aAAa,EAAE,eAAe,CAWrE,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,eAAe,EAAE,eAAe,CAKzE,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,eAAe,EAAE,eAAe,CAMzE,CAAC;AAEF;;;+EAG+E;AAC/E,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,kBAAkB,EAAE,eAAe,CAMhF,CAAC;AAEF;kFACkF;AAClF,eAAO,MAAM,iBAAiB,WACpB,aAAa,eACR,iBAAiB,KAC7B,MAGF,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,kBAAkB,EAAE,aAAa,EAK7C,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,WAAY,aAAa,KAAG,OAA8B,CAAC;AAEzF;8EAC8E;AAC9E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;iFAEiF;AACjF,MAAM,WAAW,mBAAmB;IAClC,wEAAwE;IACxE,cAAc,EAAE,MAAM,CAAC;IACvB,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAoBD,iFAAiF;AACjF,eAAO,MAAM,oBAAoB,SAAU,MAAM,KAAG,eACJ,CAAC"}
|