@qoretechnologies/reqraft 0.10.25 → 0.10.26
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/.claude/CLAUDE.md +52 -23
- package/design/COMPACT_ENGINE_REDESIGN.md +156 -0
- package/design/FORM_ENGINE_COMPACT_UX_PLAN.md +353 -0
- package/dist/components/FocusedEditing/index.d.ts +9 -1
- package/dist/components/FocusedEditing/index.d.ts.map +1 -1
- package/dist/components/FocusedEditing/index.js +2 -2
- package/dist/components/FocusedEditing/index.js.map +1 -1
- package/dist/components/composer/Composer.d.ts +108 -0
- package/dist/components/composer/Composer.d.ts.map +1 -0
- package/dist/components/composer/Composer.js +238 -0
- package/dist/components/composer/Composer.js.map +1 -0
- package/dist/components/composer/helpers.d.ts +21 -0
- package/dist/components/composer/helpers.d.ts.map +1 -0
- package/dist/components/composer/helpers.js +75 -0
- package/dist/components/composer/helpers.js.map +1 -0
- package/dist/components/composer/index.d.ts +3 -0
- package/dist/components/composer/index.d.ts.map +1 -0
- package/dist/components/composer/index.js +19 -0
- package/dist/components/composer/index.js.map +1 -0
- package/dist/components/form/engine/CompactRow.d.ts.map +1 -1
- package/dist/components/form/engine/CompactRow.js +307 -110
- package/dist/components/form/engine/CompactRow.js.map +1 -1
- package/dist/components/form/engine/CompactToolbar.d.ts.map +1 -1
- package/dist/components/form/engine/CompactToolbar.js +123 -106
- package/dist/components/form/engine/CompactToolbar.js.map +1 -1
- package/dist/components/form/engine/FormEngine.d.ts +107 -11
- package/dist/components/form/engine/FormEngine.d.ts.map +1 -1
- package/dist/components/form/engine/FormEngine.js +618 -179
- package/dist/components/form/engine/FormEngine.js.map +1 -1
- package/dist/components/form/engine/compactRowContext.d.ts +9 -0
- package/dist/components/form/engine/compactRowContext.d.ts.map +1 -1
- package/dist/components/form/engine/compactRowContext.js.map +1 -1
- package/dist/components/form/engine/compactRowStyles.d.ts +7 -3
- package/dist/components/form/engine/compactRowStyles.d.ts.map +1 -1
- package/dist/components/form/engine/compactRowStyles.js +88 -51
- package/dist/components/form/engine/compactRowStyles.js.map +1 -1
- package/dist/components/form/engine/compactToolbarContext.d.ts +1 -0
- package/dist/components/form/engine/compactToolbarContext.d.ts.map +1 -1
- package/dist/components/form/engine/compactToolbarContext.js.map +1 -1
- package/dist/components/form/engine/optionActions.d.ts +28 -0
- package/dist/components/form/engine/optionActions.d.ts.map +1 -0
- package/dist/components/form/engine/optionActions.js +18 -0
- package/dist/components/form/engine/optionActions.js.map +1 -0
- package/dist/components/form/engine/readFirst.d.ts +63 -2
- package/dist/components/form/engine/readFirst.d.ts.map +1 -1
- package/dist/components/form/engine/readFirst.js +121 -6
- package/dist/components/form/engine/readFirst.js.map +1 -1
- package/dist/components/form/engine/rendererTypes.d.ts +35 -0
- package/dist/components/form/engine/rendererTypes.d.ts.map +1 -0
- package/dist/components/form/engine/rendererTypes.js +63 -0
- package/dist/components/form/engine/rendererTypes.js.map +1 -0
- package/dist/components/form/engine/variants/VariantCalmTable.d.ts +6 -0
- package/dist/components/form/engine/variants/VariantCalmTable.d.ts.map +1 -0
- package/dist/components/form/engine/variants/VariantCalmTable.js +94 -0
- package/dist/components/form/engine/variants/VariantCalmTable.js.map +1 -0
- package/dist/components/form/engine/variants/VariantCards.d.ts +6 -0
- package/dist/components/form/engine/variants/VariantCards.d.ts.map +1 -0
- package/dist/components/form/engine/variants/VariantCards.js +80 -0
- package/dist/components/form/engine/variants/VariantCards.js.map +1 -0
- package/dist/components/form/engine/variants/VariantFocus.d.ts +7 -0
- package/dist/components/form/engine/variants/VariantFocus.d.ts.map +1 -0
- package/dist/components/form/engine/variants/VariantFocus.js +138 -0
- package/dist/components/form/engine/variants/VariantFocus.js.map +1 -0
- package/dist/components/form/engine/variants/VariantMinimal.d.ts +6 -0
- package/dist/components/form/engine/variants/VariantMinimal.d.ts.map +1 -0
- package/dist/components/form/engine/variants/VariantMinimal.js +73 -0
- package/dist/components/form/engine/variants/VariantMinimal.js.map +1 -0
- package/dist/components/form/engine/variants/focusDemo.d.ts +13 -0
- package/dist/components/form/engine/variants/focusDemo.d.ts.map +1 -0
- package/dist/components/form/engine/variants/focusDemo.js +139 -0
- package/dist/components/form/engine/variants/focusDemo.js.map +1 -0
- package/dist/components/form/engine/variants/variantModel.d.ts +70 -0
- package/dist/components/form/engine/variants/variantModel.d.ts.map +1 -0
- package/dist/components/form/engine/variants/variantModel.js +133 -0
- package/dist/components/form/engine/variants/variantModel.js.map +1 -0
- package/dist/components/form/engine/variants/variantParts.d.ts +79 -0
- package/dist/components/form/engine/variants/variantParts.d.ts.map +1 -0
- package/dist/components/form/engine/variants/variantParts.js +191 -0
- package/dist/components/form/engine/variants/variantParts.js.map +1 -0
- package/dist/components/form/expressions/builder/index.d.ts.map +1 -1
- package/dist/components/form/expressions/builder/index.js +13 -2
- package/dist/components/form/expressions/builder/index.js.map +1 -1
- package/dist/components/form/expressions/useExpressions.d.ts.map +1 -1
- package/dist/components/form/expressions/useExpressions.js +4 -1
- package/dist/components/form/expressions/useExpressions.js.map +1 -1
- package/dist/components/form/fields/Field.d.ts.map +1 -1
- package/dist/components/form/fields/Field.js +5 -3
- package/dist/components/form/fields/Field.js.map +1 -1
- package/dist/components/form/fields/allowed-values/AllowedValues.d.ts +2 -1
- package/dist/components/form/fields/allowed-values/AllowedValues.d.ts.map +1 -1
- package/dist/components/form/fields/allowed-values/AllowedValues.js +8 -26
- package/dist/components/form/fields/allowed-values/AllowedValues.js.map +1 -1
- package/dist/components/form/fields/auto/AutoFormField.d.ts +3 -0
- package/dist/components/form/fields/auto/AutoFormField.d.ts.map +1 -1
- package/dist/components/form/fields/auto/AutoFormField.js +42 -8
- package/dist/components/form/fields/auto/AutoFormField.js.map +1 -1
- package/dist/components/form/fields/binary/Binary.d.ts +15 -0
- package/dist/components/form/fields/binary/Binary.d.ts.map +1 -0
- package/dist/components/form/fields/binary/Binary.js +74 -0
- package/dist/components/form/fields/binary/Binary.js.map +1 -0
- package/dist/components/form/fields/boolean/Boolean.js +1 -1
- package/dist/components/form/fields/boolean/Boolean.js.map +1 -1
- package/dist/components/form/fields/multi-select/MultiSelectFormField.d.ts.map +1 -1
- package/dist/components/form/fields/multi-select/MultiSelectFormField.js +5 -4
- package/dist/components/form/fields/multi-select/MultiSelectFormField.js.map +1 -1
- package/dist/components/form/fields/select/Select.d.ts.map +1 -1
- package/dist/components/form/fields/select/Select.js +29 -12
- package/dist/components/form/fields/select/Select.js.map +1 -1
- package/dist/components/form/fields/select/SelectCollection.d.ts +8 -2
- package/dist/components/form/fields/select/SelectCollection.d.ts.map +1 -1
- package/dist/components/form/fields/select/SelectCollection.js +52 -16
- package/dist/components/form/fields/select/SelectCollection.js.map +1 -1
- package/dist/components/form/index.d.ts +2 -0
- package/dist/components/form/index.d.ts.map +1 -1
- package/dist/components/form/index.js +2 -0
- package/dist/components/form/index.js.map +1 -1
- package/dist/components/imageLightbox/ImageLightbox.d.ts +21 -0
- package/dist/components/imageLightbox/ImageLightbox.d.ts.map +1 -0
- package/dist/components/imageLightbox/ImageLightbox.js +169 -0
- package/dist/components/imageLightbox/ImageLightbox.js.map +1 -0
- package/dist/components/imageLightbox/index.d.ts +2 -0
- package/dist/components/imageLightbox/index.d.ts.map +1 -0
- package/dist/components/imageLightbox/index.js +18 -0
- package/dist/components/imageLightbox/index.js.map +1 -0
- package/dist/components/searchFilterBar/SearchFilterBar.d.ts +33 -0
- package/dist/components/searchFilterBar/SearchFilterBar.d.ts.map +1 -0
- package/dist/components/searchFilterBar/SearchFilterBar.js +76 -0
- package/dist/components/searchFilterBar/SearchFilterBar.js.map +1 -0
- package/dist/components/searchFilterBar/index.d.ts +2 -0
- package/dist/components/searchFilterBar/index.d.ts.map +1 -0
- package/dist/components/searchFilterBar/index.js +18 -0
- package/dist/components/searchFilterBar/index.js.map +1 -0
- package/dist/components/supportTicket/AttachmentChips.d.ts +10 -0
- package/dist/components/supportTicket/AttachmentChips.d.ts.map +1 -0
- package/dist/components/supportTicket/AttachmentChips.js +122 -0
- package/dist/components/supportTicket/AttachmentChips.js.map +1 -0
- package/dist/components/supportTicket/InterfaceReferenceTags.d.ts +43 -0
- package/dist/components/supportTicket/InterfaceReferenceTags.d.ts.map +1 -0
- package/dist/components/supportTicket/InterfaceReferenceTags.js +31 -0
- package/dist/components/supportTicket/InterfaceReferenceTags.js.map +1 -0
- package/dist/components/supportTicket/ReferencePicker.d.ts +87 -0
- package/dist/components/supportTicket/ReferencePicker.d.ts.map +1 -0
- package/dist/components/supportTicket/ReferencePicker.js +295 -0
- package/dist/components/supportTicket/ReferencePicker.js.map +1 -0
- package/dist/components/supportTicket/TicketHeader.d.ts +86 -0
- package/dist/components/supportTicket/TicketHeader.d.ts.map +1 -0
- package/dist/components/supportTicket/TicketHeader.js +149 -0
- package/dist/components/supportTicket/TicketHeader.js.map +1 -0
- package/dist/components/supportTicket/TicketMetaTags.d.ts +32 -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 +63 -0
- package/dist/components/supportTicket/TicketReplyBox.d.ts.map +1 -0
- package/dist/components/supportTicket/TicketReplyBox.js +115 -0
- package/dist/components/supportTicket/TicketReplyBox.js.map +1 -0
- package/dist/components/supportTicket/attachmentAccess.d.ts +37 -0
- package/dist/components/supportTicket/attachmentAccess.d.ts.map +1 -0
- package/dist/components/supportTicket/attachmentAccess.js +132 -0
- package/dist/components/supportTicket/attachmentAccess.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 +11 -0
- package/dist/components/supportTicket/index.d.ts.map +1 -0
- package/dist/components/supportTicket/index.js +27 -0
- package/dist/components/supportTicket/index.js.map +1 -0
- package/dist/components/supportTicket/meta.d.ts +71 -0
- package/dist/components/supportTicket/meta.d.ts.map +1 -0
- package/dist/components/supportTicket/meta.js +115 -0
- package/dist/components/supportTicket/meta.js.map +1 -0
- package/dist/components/supportTicket/ticketModel.d.ts +102 -0
- package/dist/components/supportTicket/ticketModel.d.ts.map +1 -0
- package/dist/components/supportTicket/ticketModel.js +3 -0
- package/dist/components/supportTicket/ticketModel.js.map +1 -0
- package/dist/components/ticketReferences/TicketReferences.d.ts +52 -0
- package/dist/components/ticketReferences/TicketReferences.d.ts.map +1 -0
- package/dist/components/ticketReferences/TicketReferences.js +492 -0
- package/dist/components/ticketReferences/TicketReferences.js.map +1 -0
- package/dist/components/ticketReferences/index.d.ts +3 -0
- package/dist/components/ticketReferences/index.d.ts.map +1 -0
- package/dist/components/ticketReferences/index.js +6 -0
- package/dist/components/ticketReferences/index.js.map +1 -0
- package/dist/components/ticketThread/TicketThread.d.ts +57 -0
- package/dist/components/ticketThread/TicketThread.d.ts.map +1 -0
- package/dist/components/ticketThread/TicketThread.js +299 -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 +7 -0
- package/dist/components/ticketThread/index.js.map +1 -0
- package/dist/helpers/common.d.ts +5 -0
- package/dist/helpers/common.d.ts.map +1 -1
- package/dist/helpers/common.js +20 -1
- package/dist/helpers/common.js.map +1 -1
- package/dist/helpers/scrollbar.d.ts +2 -0
- package/dist/helpers/scrollbar.d.ts.map +1 -0
- package/dist/helpers/scrollbar.js +25 -0
- package/dist/helpers/scrollbar.js.map +1 -0
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/providers/StorageProvider.d.ts +13 -0
- package/dist/providers/StorageProvider.d.ts.map +1 -1
- package/dist/providers/StorageProvider.js +29 -5
- package/dist/providers/StorageProvider.js.map +1 -1
- package/package.json +6 -5
- package/src/components/FocusedEditing/index.tsx +17 -2
- package/src/components/composer/Composer.stories.tsx +238 -0
- package/src/components/composer/Composer.tsx +545 -0
- package/src/components/composer/helpers.ts +74 -0
- package/src/components/composer/index.ts +2 -0
- package/src/components/dpqlEditor/DpqlEditor.stories.tsx +74 -2
- package/src/components/form/engine/CompactRow.tsx +561 -283
- package/src/components/form/engine/CompactToolbar.tsx +216 -182
- package/src/components/form/engine/FormEngine.stories.tsx +1736 -162
- package/src/components/form/engine/FormEngine.tsx +886 -170
- package/src/components/form/engine/FormEngineRemote.stories.tsx +377 -0
- package/src/components/form/engine/_structuredData/StructuredDataView.stories.tsx +8 -0
- package/src/components/form/engine/compactRowContext.ts +14 -0
- package/src/components/form/engine/compactRowStyles.ts +273 -146
- package/src/components/form/engine/compactToolbarContext.ts +1 -0
- package/src/components/form/engine/optionActions.ts +40 -0
- package/src/components/form/engine/readFirst.ts +169 -10
- package/src/components/form/engine/rendererTypes.ts +55 -0
- package/src/components/form/engine/variants/FormEngineVariants.stories.tsx +159 -0
- package/src/components/form/engine/variants/VariantCalmTable.tsx +242 -0
- package/src/components/form/engine/variants/VariantCards.tsx +212 -0
- package/src/components/form/engine/variants/VariantFocus.tsx +382 -0
- package/src/components/form/engine/variants/VariantMinimal.tsx +170 -0
- package/src/components/form/engine/variants/focusDemo.ts +145 -0
- package/src/components/form/engine/variants/variantModel.ts +216 -0
- package/src/components/form/engine/variants/variantParts.tsx +313 -0
- package/src/components/form/expressions/ExpressionField.stories.tsx +84 -2
- package/src/components/form/expressions/builder/ExpressionBuilder.stories.tsx +213 -19
- package/src/components/form/expressions/builder/index.tsx +12 -1
- package/src/components/form/expressions/useExpressions.ts +4 -1
- package/src/components/form/fields/Field.stories.tsx +40 -0
- package/src/components/form/fields/Field.tsx +10 -1
- package/src/components/form/fields/allowed-values/AllowedValues.tsx +13 -36
- package/src/components/form/fields/array/ArrayAutoField.stories.tsx +64 -0
- package/src/components/form/fields/auto/AutoFormField.stories.tsx +146 -2
- package/src/components/form/fields/auto/AutoFormField.tsx +42 -1
- package/src/components/form/fields/binary/Binary.stories.tsx +122 -0
- package/src/components/form/fields/binary/Binary.tsx +81 -0
- package/src/components/form/fields/boolean/Boolean.stories.tsx +58 -0
- package/src/components/form/fields/boolean/Boolean.tsx +1 -1
- package/src/components/form/fields/byte-size/ByteSize.stories.tsx +24 -0
- package/src/components/form/fields/color/Color.stories.tsx +30 -0
- package/src/components/form/fields/cron/Cron.stories.tsx +8 -0
- package/src/components/form/fields/date/Date.stories.tsx +22 -0
- package/src/components/form/fields/file/File.stories.tsx +48 -0
- package/src/components/form/fields/long-string/LongString.stories.tsx +24 -0
- package/src/components/form/fields/markdown/Markdown.stories.tsx +8 -0
- package/src/components/form/fields/multi-select/MultiSelectFormField.tsx +14 -10
- package/src/components/form/fields/number/Number.stories.tsx +31 -0
- package/src/components/form/fields/object/Object.stories.tsx +88 -0
- package/src/components/form/fields/radio-group/RadioGroup.stories.tsx +24 -0
- package/src/components/form/fields/rich-text/RichText.stories.tsx +23 -0
- package/src/components/form/fields/schema-definition/SchemaDefinitionField.stories.tsx +72 -0
- package/src/components/form/fields/select/Select.stories.tsx +108 -0
- package/src/components/form/fields/select/Select.tsx +38 -12
- package/src/components/form/fields/select/SelectCollection.tsx +78 -17
- package/src/components/form/fields/string/String.stories.tsx +16 -0
- package/src/components/form/fields/template/TemplateField.stories.tsx +160 -0
- package/src/components/form/fields/url/Url.stories.tsx +24 -0
- package/src/components/form/index.tsx +2 -0
- package/src/components/imageLightbox/ImageLightbox.stories.tsx +238 -0
- package/src/components/imageLightbox/ImageLightbox.tsx +236 -0
- package/src/components/imageLightbox/index.ts +1 -0
- package/src/components/log/Log.stories.tsx +96 -0
- package/src/components/menu/Menu.stories.tsx +54 -0
- package/src/components/qonsoleSmartInput/QonsoleSmartInput.stories.tsx +83 -37
- package/src/components/searchFilterBar/SearchFilterBar.tsx +131 -0
- package/src/components/searchFilterBar/index.ts +1 -0
- package/src/components/smartEditor/SmartEditor.stories.tsx +32 -0
- package/src/components/supportTicket/AttachmentChips.stories.tsx +171 -0
- package/src/components/supportTicket/AttachmentChips.tsx +147 -0
- package/src/components/supportTicket/InterfaceReferenceTags.stories.tsx +171 -0
- package/src/components/supportTicket/InterfaceReferenceTags.tsx +96 -0
- package/src/components/supportTicket/ReferencePicker.stories.tsx +519 -0
- package/src/components/supportTicket/ReferencePicker.tsx +563 -0
- package/src/components/supportTicket/TicketConversation.stories.tsx +121 -0
- package/src/components/supportTicket/TicketHeader.stories.tsx +183 -0
- package/src/components/supportTicket/TicketHeader.tsx +247 -0
- package/src/components/supportTicket/TicketMetaTags.stories.tsx +103 -0
- package/src/components/supportTicket/TicketMetaTags.tsx +85 -0
- package/src/components/supportTicket/TicketReplyBox.stories.tsx +351 -0
- package/src/components/supportTicket/TicketReplyBox.tsx +146 -0
- package/src/components/supportTicket/attachmentAccess.ts +97 -0
- package/src/components/supportTicket/fileToAttachment.ts +24 -0
- package/src/components/supportTicket/index.ts +10 -0
- package/src/components/supportTicket/meta.ts +185 -0
- package/src/components/supportTicket/ticketModel.ts +131 -0
- package/src/components/ticketReferences/TicketReferences.stories.tsx +315 -0
- package/src/components/ticketReferences/TicketReferences.tsx +886 -0
- package/src/components/ticketReferences/index.ts +2 -0
- package/src/components/ticketThread/TicketThread.stories.tsx +828 -0
- package/src/components/ticketThread/TicketThread.tsx +704 -0
- package/src/components/ticketThread/index.ts +6 -0
- package/src/helpers/common.ts +19 -0
- package/src/helpers/scrollbar.ts +32 -0
- package/src/hooks/useFetch/useFetch.stories.tsx +30 -0
- package/src/hooks/useStorage/useStorage.stories.tsx +82 -0
- package/src/hooks/useWebSocket/useWebsocket.stories.tsx +127 -1
- package/src/index.tsx +8 -1
- package/src/providers/StorageProvider.tsx +30 -4
- package/src/stores/currentUser/currentUser.stories.tsx +49 -0
|
@@ -0,0 +1,492 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
3
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
4
|
+
return cooked;
|
|
5
|
+
};
|
|
6
|
+
var __assign = (this && this.__assign) || function () {
|
|
7
|
+
__assign = Object.assign || function(t) {
|
|
8
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
9
|
+
s = arguments[i];
|
|
10
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
11
|
+
t[p] = s[p];
|
|
12
|
+
}
|
|
13
|
+
return t;
|
|
14
|
+
};
|
|
15
|
+
return __assign.apply(this, arguments);
|
|
16
|
+
};
|
|
17
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
18
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
19
|
+
if (ar || !(i in from)) {
|
|
20
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
21
|
+
ar[i] = from[i];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
25
|
+
};
|
|
26
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
27
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
28
|
+
};
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.TicketReferences = void 0;
|
|
31
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
32
|
+
var reqore_1 = require("@qoretechnologies/reqore");
|
|
33
|
+
var react_1 = require("react");
|
|
34
|
+
var epoch_timeago_1 = __importDefault(require("epoch-timeago"));
|
|
35
|
+
var searchFilterBar_1 = require("../searchFilterBar");
|
|
36
|
+
var styled_components_1 = __importDefault(require("styled-components"));
|
|
37
|
+
var common_1 = require("../../helpers/common");
|
|
38
|
+
var imageLightbox_1 = require("../imageLightbox");
|
|
39
|
+
var meta_1 = require("../supportTicket/meta");
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// helpers
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// `epoch-timeago` — the same library reqore's `ReqoreTimeAgo` and the IDE's ticket
|
|
44
|
+
// list use. This is a string context (a metadata run), so a helper rather than the
|
|
45
|
+
// component; it stays consistent with them instead of a bespoke Intl reimplementation.
|
|
46
|
+
var timeAgo = function (iso) {
|
|
47
|
+
if (!iso) {
|
|
48
|
+
return '';
|
|
49
|
+
}
|
|
50
|
+
var ms = Date.parse(iso);
|
|
51
|
+
return Number.isNaN(ms) ? '' : (0, epoch_timeago_1.default)(ms);
|
|
52
|
+
};
|
|
53
|
+
// MIME → a type icon (glyph) + a category tint, Fluent-style: colour distinguishes
|
|
54
|
+
// the file family, the glyph its shape. Tints stay moderate for a dark surface.
|
|
55
|
+
var fileType = function (contentType) {
|
|
56
|
+
var ct = contentType.toLowerCase();
|
|
57
|
+
if (ct === 'application/pdf') {
|
|
58
|
+
return { icon: 'FilePdf2Line', color: '#f56059', label: 'PDF' };
|
|
59
|
+
}
|
|
60
|
+
if (ct.includes('zip') || ct.includes('gzip')) {
|
|
61
|
+
return { icon: 'FileZipLine', color: '#f2a63c', label: 'Archive' };
|
|
62
|
+
}
|
|
63
|
+
if (ct === 'text/csv') {
|
|
64
|
+
return { icon: 'FileExcel2Line', color: '#46c96f', label: 'CSV' };
|
|
65
|
+
}
|
|
66
|
+
if (ct.includes('json') || ct.includes('yaml') || ct.includes('xml')) {
|
|
67
|
+
return { icon: 'CodeSLine', color: '#55a0ff', label: 'Data' };
|
|
68
|
+
}
|
|
69
|
+
if (ct.includes('markdown')) {
|
|
70
|
+
return { icon: 'MarkdownLine', color: '#55a0ff', label: 'Markdown' };
|
|
71
|
+
}
|
|
72
|
+
if (ct === 'text/x-log') {
|
|
73
|
+
return { icon: 'FileList2Line', color: '#8b8a97', label: 'Log' };
|
|
74
|
+
}
|
|
75
|
+
if (ct.startsWith('text/')) {
|
|
76
|
+
return { icon: 'FileTextLine', color: '#8b8a97', label: 'Text' };
|
|
77
|
+
}
|
|
78
|
+
return { icon: 'FileLine', color: '#8b8a97', label: 'File' };
|
|
79
|
+
};
|
|
80
|
+
var fileCategory = function (contentType) {
|
|
81
|
+
var ct = contentType.toLowerCase();
|
|
82
|
+
if (ct.includes('zip') || ct.includes('gzip')) {
|
|
83
|
+
return 'archives';
|
|
84
|
+
}
|
|
85
|
+
if (ct === 'text/x-log') {
|
|
86
|
+
return 'logs';
|
|
87
|
+
}
|
|
88
|
+
if (ct === 'text/csv' || ct.includes('json') || ct.includes('yaml') || ct.includes('xml')) {
|
|
89
|
+
return 'data';
|
|
90
|
+
}
|
|
91
|
+
return 'documents';
|
|
92
|
+
};
|
|
93
|
+
var FILTER_META = {
|
|
94
|
+
all: { label: 'All types', icon: 'Apps2Line' },
|
|
95
|
+
links: { label: 'Linked interfaces', icon: 'LinksLine' },
|
|
96
|
+
screenshots: { label: 'Screenshots', icon: 'ImageLine' },
|
|
97
|
+
documents: { label: 'Documents', icon: 'FileTextLine' },
|
|
98
|
+
data: { label: 'Data', icon: 'CodeSLine' },
|
|
99
|
+
logs: { label: 'Logs', icon: 'FileList2Line' },
|
|
100
|
+
archives: { label: 'Archives', icon: 'FileZipLine' },
|
|
101
|
+
};
|
|
102
|
+
// the four filter keys that live inside the "Files" section
|
|
103
|
+
var FILE_FILTERS = ['documents', 'data', 'logs', 'archives'];
|
|
104
|
+
// menu order mirrors the section order on screen: screenshots, links, then files
|
|
105
|
+
var FILTER_ORDER = __spreadArray(['all', 'screenshots', 'links'], FILE_FILTERS, true);
|
|
106
|
+
var SORT_META = {
|
|
107
|
+
newest: { label: 'Newest first', icon: 'SortDesc' },
|
|
108
|
+
oldest: { label: 'Oldest first', icon: 'SortAsc' },
|
|
109
|
+
name: { label: 'Name (A–Z)', icon: 'SortAlphabetAsc' },
|
|
110
|
+
size: { label: 'Largest first', icon: 'ScalesLine' },
|
|
111
|
+
};
|
|
112
|
+
var SORT_ORDER = ['newest', 'oldest', 'name', 'size'];
|
|
113
|
+
var createdMs = function (a) {
|
|
114
|
+
return a.created ? new Date(a.created).getTime() || 0 : 0;
|
|
115
|
+
};
|
|
116
|
+
// dedupe a mixed run of references (ticket + every message) by identity — the same
|
|
117
|
+
// interface referenced ticket-level and in a reply is one entry, not two.
|
|
118
|
+
var dedupeRefs = function (refs) {
|
|
119
|
+
var byKey = new Map();
|
|
120
|
+
for (var _i = 0, refs_1 = refs; _i < refs_1.length; _i++) {
|
|
121
|
+
var r = refs_1[_i];
|
|
122
|
+
var key = "".concat(r.interface_kind, ":").concat(r.interface_name);
|
|
123
|
+
var kept = byKey.get(key);
|
|
124
|
+
if (!kept) {
|
|
125
|
+
byKey.set(key, r);
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
// The ticket-level copy is merged first and carries no message. When the same
|
|
129
|
+
// interface also appears in a reply, adopt that linkage instead of discarding it —
|
|
130
|
+
// otherwise an interface that demonstrably IS in the thread offers no way to jump
|
|
131
|
+
// to it, purely because it happened to be cited on the ticket as well.
|
|
132
|
+
if (!kept.message_id && r.message_id) {
|
|
133
|
+
byKey.set(key, __assign(__assign({}, kept), { message_id: r.message_id }));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return Array.from(byKey.values());
|
|
137
|
+
};
|
|
138
|
+
var META_EFFECT = { textSize: 'small', opacity: 0.55 };
|
|
139
|
+
// ---------------------------------------------------------------------------
|
|
140
|
+
// image URLs — fetch every screenshot's bytes once as an object URL, cached, and
|
|
141
|
+
// revoked on unmount / when the set changes. Shared by the grid and the lightbox.
|
|
142
|
+
// ---------------------------------------------------------------------------
|
|
143
|
+
var useImageUrls = function (ids, fetchAttachmentUrl) {
|
|
144
|
+
var _a = (0, react_1.useState)({}), urls = _a[0], setUrls = _a[1];
|
|
145
|
+
var key = ids.join(',');
|
|
146
|
+
(0, react_1.useEffect)(function () {
|
|
147
|
+
if (!ids.length) {
|
|
148
|
+
return undefined;
|
|
149
|
+
}
|
|
150
|
+
// No fetcher wired means there is no preview to wait for — resolve every id
|
|
151
|
+
// straight to the "no preview" state (null) so tiles fall through to the
|
|
152
|
+
// filename / download fallback instead of a forever-pending "…" (undefined
|
|
153
|
+
// is reserved for a wired fetcher's genuinely in-flight requests).
|
|
154
|
+
if (!fetchAttachmentUrl) {
|
|
155
|
+
setUrls(Object.fromEntries(ids.map(function (id) { return [id, null]; })));
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
var active = true;
|
|
159
|
+
var created = [];
|
|
160
|
+
Promise.allSettled(ids.map(function (id) { return fetchAttachmentUrl(id).then(function (url) { return ({ id: id, url: url }); }); })).then(function (results) {
|
|
161
|
+
if (!active) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
var next = {};
|
|
165
|
+
results.forEach(function (r, i) {
|
|
166
|
+
if (r.status === 'fulfilled') {
|
|
167
|
+
next[r.value.id] = r.value.url;
|
|
168
|
+
created.push(r.value.url);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
next[ids[i]] = null;
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
setUrls(next);
|
|
175
|
+
});
|
|
176
|
+
return function () {
|
|
177
|
+
active = false;
|
|
178
|
+
created.forEach(function (url) { return URL.revokeObjectURL(url); });
|
|
179
|
+
};
|
|
180
|
+
// `key` is the stable signature of `ids`; re-run when the image set changes.
|
|
181
|
+
}, [key, fetchAttachmentUrl]);
|
|
182
|
+
return urls;
|
|
183
|
+
};
|
|
184
|
+
// ---------------------------------------------------------------------------
|
|
185
|
+
// styled bits (reqore covers the rest)
|
|
186
|
+
// ---------------------------------------------------------------------------
|
|
187
|
+
/*
|
|
188
|
+
* The search/filter/sort strip reads as part of the list it filters, not as a stray
|
|
189
|
+
* row above it: it gets its own tinted, bordered surface and sticks to the top of the
|
|
190
|
+
* scroll container. Free-floating, it was easy to lose track of — and scrolling the
|
|
191
|
+
* sections took the search box away with them, which is exactly when you want it.
|
|
192
|
+
*/
|
|
193
|
+
/*
|
|
194
|
+
* A screenshot tile: the image is the button, and the overflow menu is a sibling
|
|
195
|
+
* layered over it — a <button> cannot legally contain another button, so the menu
|
|
196
|
+
* cannot live inside Thumb. It stays hidden until the tile is hovered or something
|
|
197
|
+
* inside it takes focus, so a wall of screenshots still reads as images rather than
|
|
198
|
+
* a grid of controls. Hidden by opacity rather than display, so it remains reachable
|
|
199
|
+
* by keyboard.
|
|
200
|
+
*/
|
|
201
|
+
var ThumbTile = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n position: relative;\n /*\n * A single-cell grid, not flex: a grid child stretches to fill by default, so the\n * thumbnail spans the whole tile and the overlay's top-right corner IS the image's\n * top-right corner. Under flex the button sized itself from its aspect-ratio, left a\n * strip of empty tile beside it, and the menu \u2014 anchored to the tile \u2014 landed in that\n * strip instead of over the image.\n */\n display: grid;\n\n > .screenshot-menu {\n position: absolute;\n top: 5px;\n right: 5px;\n opacity: 0;\n transition: opacity 0.12s ease-out;\n }\n\n &:hover > .screenshot-menu,\n &:focus-within > .screenshot-menu {\n opacity: 1;\n }\n"], ["\n position: relative;\n /*\n * A single-cell grid, not flex: a grid child stretches to fill by default, so the\n * thumbnail spans the whole tile and the overlay's top-right corner IS the image's\n * top-right corner. Under flex the button sized itself from its aspect-ratio, left a\n * strip of empty tile beside it, and the menu \u2014 anchored to the tile \u2014 landed in that\n * strip instead of over the image.\n */\n display: grid;\n\n > .screenshot-menu {\n position: absolute;\n top: 5px;\n right: 5px;\n opacity: 0;\n transition: opacity 0.12s ease-out;\n }\n\n &:hover > .screenshot-menu,\n &:focus-within > .screenshot-menu {\n opacity: 1;\n }\n"])));
|
|
202
|
+
var Thumb = styled_components_1.default.button(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n appearance: none;\n border: 1px solid rgba(255, 255, 255, 0.1);\n border-radius: 8px;\n overflow: hidden;\n padding: 0;\n cursor: pointer;\n aspect-ratio: 1 / 1;\n background: rgba(255, 255, 255, 0.03);\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n transition: border-color 0.15s;\n &:hover {\n border-color: rgba(169, 116, 255, 0.6);\n }\n &:focus-visible {\n outline: 2px solid #a974ff;\n outline-offset: 2px;\n }\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n }\n"], ["\n appearance: none;\n border: 1px solid rgba(255, 255, 255, 0.1);\n border-radius: 8px;\n overflow: hidden;\n padding: 0;\n cursor: pointer;\n aspect-ratio: 1 / 1;\n background: rgba(255, 255, 255, 0.03);\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n transition: border-color 0.15s;\n &:hover {\n border-color: rgba(169, 116, 255, 0.6);\n }\n &:focus-visible {\n outline: 2px solid #a974ff;\n outline-offset: 2px;\n }\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n }\n"])));
|
|
203
|
+
var ThumbCaption = styled_components_1.default.span(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n padding: 4px 6px;\n font-size: 10px;\n color: #fff;\n background: linear-gradient(0deg, rgba(0, 0, 0, 0.75), transparent);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n text-align: left;\n"], ["\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n padding: 4px 6px;\n font-size: 10px;\n color: #fff;\n background: linear-gradient(0deg, rgba(0, 0, 0, 0.75), transparent);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n text-align: left;\n"])));
|
|
204
|
+
// ---------------------------------------------------------------------------
|
|
205
|
+
// screenshot thumbnail
|
|
206
|
+
// ---------------------------------------------------------------------------
|
|
207
|
+
var Screenshot = function (_a) {
|
|
208
|
+
var att = _a.att, url = _a.url, onOpen = _a.onOpen, menu = _a.menu;
|
|
209
|
+
return ((0, jsx_runtime_1.jsxs)(ThumbTile, { children: [(0, jsx_runtime_1.jsxs)(Thumb, { type: 'button', title: att.filename, onClick: onOpen, children: [url ?
|
|
210
|
+
(0, jsx_runtime_1.jsx)("img", { src: url, alt: att.filename })
|
|
211
|
+
: (0, jsx_runtime_1.jsx)(reqore_1.ReqoreSpan, { effect: { opacity: 0.5, textSize: 'small' }, children: url === null ? att.filename : '…' }), (0, jsx_runtime_1.jsx)(ThumbCaption, { children: att.filename })] }), (menu === null || menu === void 0 ? void 0 : menu.length) === 1 ?
|
|
212
|
+
(0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { className: 'screenshot-menu', icon: menu[0].icon, tooltip: menu[0].label, size: 'small', flat: true, minimal: true, fixed: true, onClick: function (event) {
|
|
213
|
+
var _a, _b;
|
|
214
|
+
event.stopPropagation();
|
|
215
|
+
(_b = (_a = menu[0]).onClick) === null || _b === void 0 ? void 0 : _b.call(_a, menu[0]);
|
|
216
|
+
} })
|
|
217
|
+
: (menu === null || menu === void 0 ? void 0 : menu.length) ?
|
|
218
|
+
(0, jsx_runtime_1.jsx)(reqore_1.ReqoreDropdown, { className: 'screenshot-menu', icon: 'More2Line', tooltip: 'More actions', size: 'small', flat: true, minimal: true, fixed: true, useTargetWidth: false, items: menu, onClick: function (event) { return event.stopPropagation(); } })
|
|
219
|
+
: null] }));
|
|
220
|
+
};
|
|
221
|
+
// ---------------------------------------------------------------------------
|
|
222
|
+
// main
|
|
223
|
+
// ---------------------------------------------------------------------------
|
|
224
|
+
var TicketReferences = function (_a) {
|
|
225
|
+
var _b = _a.references, references = _b === void 0 ? [] : _b, _c = _a.messages, messages = _c === void 0 ? [] : _c, attachments = _a.attachments, viewerRole = _a.viewerRole, fetchAttachmentUrl = _a.fetchAttachmentUrl, onDownloadAttachment = _a.onDownloadAttachment, onInterfaceClick = _a.onInterfaceClick, onShowInChat = _a.onShowInChat, resolveInterfaceIcon = _a.resolveInterfaceIcon, loading = _a.loading;
|
|
226
|
+
// references: ticket-level + every message's, deduped. Rendered as rows carrying
|
|
227
|
+
// their kind as metadata — the same treatment as the files below — so the tab
|
|
228
|
+
// reads as one consistent list rather than chips above rows.
|
|
229
|
+
var allRefs = (0, react_1.useMemo)(function () {
|
|
230
|
+
return dedupeRefs(__spreadArray(__spreadArray([], references, true), messages.flatMap(function (m) { var _a; return ((_a = m.referenced_interfaces) !== null && _a !== void 0 ? _a : []).map(function (r) { return (__assign(__assign({}, r), { message_id: m.message_id })); }); }), true));
|
|
231
|
+
}, [references, messages]);
|
|
232
|
+
var resolveIcon = resolveInterfaceIcon !== null && resolveInterfaceIcon !== void 0 ? resolveInterfaceIcon : meta_1.defaultInterfaceIcon;
|
|
233
|
+
/**
|
|
234
|
+
* The trailing controls for a row: its primary action, plus a "three dots" menu when
|
|
235
|
+
* there is anything else to offer. Built in one place so the interface rows and the
|
|
236
|
+
* file rows can't drift into different affordances.
|
|
237
|
+
*
|
|
238
|
+
* The menu is omitted entirely when it would be empty — a row filed against the
|
|
239
|
+
* ticket rather than a reply has no message to reveal, and an always-present menu
|
|
240
|
+
* that is sometimes empty is worse than no menu.
|
|
241
|
+
*/
|
|
242
|
+
/**
|
|
243
|
+
* The reveal action. One definition, used by the reference rows, the file rows and
|
|
244
|
+
* the screenshot tiles.
|
|
245
|
+
*
|
|
246
|
+
* Present on every row, but DISABLED for anything filed against the ticket itself
|
|
247
|
+
* rather than a reply — those have no message to jump to. Showing the menu on some
|
|
248
|
+
* rows and not others read as breakage rather than as a distinction, and the
|
|
249
|
+
* disabled entry says why instead of leaving the reader to infer it.
|
|
250
|
+
*/
|
|
251
|
+
var showInChatItem = function (messageId) {
|
|
252
|
+
if (!onShowInChat) {
|
|
253
|
+
return [];
|
|
254
|
+
}
|
|
255
|
+
return messageId ?
|
|
256
|
+
[{ label: 'Show in chat', icon: 'Chat1Line', onClick: function () { return onShowInChat(messageId); } }]
|
|
257
|
+
: [
|
|
258
|
+
{
|
|
259
|
+
label: 'Show in chat',
|
|
260
|
+
icon: 'Chat1Line',
|
|
261
|
+
disabled: true,
|
|
262
|
+
description: 'Filed on the ticket, not in a reply',
|
|
263
|
+
},
|
|
264
|
+
];
|
|
265
|
+
};
|
|
266
|
+
var rowActions = function (primary, messageId) {
|
|
267
|
+
var menu = showInChatItem(messageId);
|
|
268
|
+
return __spreadArray(__spreadArray([], (primary ? [primary] : []), true), (menu.length ?
|
|
269
|
+
[
|
|
270
|
+
{
|
|
271
|
+
icon: 'More2Line',
|
|
272
|
+
tooltip: 'More actions',
|
|
273
|
+
flat: true,
|
|
274
|
+
minimal: true,
|
|
275
|
+
actions: menu,
|
|
276
|
+
},
|
|
277
|
+
]
|
|
278
|
+
: []), true);
|
|
279
|
+
};
|
|
280
|
+
// attachments: the list-endpoint set (with provenance) or, failing that, the
|
|
281
|
+
// ones embedded per message (deriving provenance from the carrying message)
|
|
282
|
+
var allAttachments = (0, react_1.useMemo)(function () {
|
|
283
|
+
var source = attachments !== null && attachments !== void 0 ? attachments : messages.flatMap(function (m) {
|
|
284
|
+
var _a;
|
|
285
|
+
return ((_a = m.attachments) !== null && _a !== void 0 ? _a : []).map(function (a) { return (__assign(__assign({}, a), { message_id: m.message_id, uploaded_by: m.author_id, created: m.created })); });
|
|
286
|
+
});
|
|
287
|
+
var seen = new Set();
|
|
288
|
+
return source.filter(function (a) {
|
|
289
|
+
if (seen.has(a.attachment_id)) {
|
|
290
|
+
return false;
|
|
291
|
+
}
|
|
292
|
+
seen.add(a.attachment_id);
|
|
293
|
+
return true;
|
|
294
|
+
});
|
|
295
|
+
}, [attachments, messages]);
|
|
296
|
+
var images = (0, react_1.useMemo)(function () { return allAttachments.filter(function (a) { return (0, common_1.isImage)(a.content_type); }); }, [allAttachments]);
|
|
297
|
+
var files = (0, react_1.useMemo)(function () { return allAttachments.filter(function (a) { return !(0, common_1.isImage)(a.content_type); }); }, [allAttachments]);
|
|
298
|
+
var imageIds = (0, react_1.useMemo)(function () { return images.map(function (a) { return a.attachment_id; }); }, [images]);
|
|
299
|
+
var urls = useImageUrls(imageIds, fetchAttachmentUrl);
|
|
300
|
+
var _d = (0, react_1.useState)(null), lightbox = _d[0], setLightbox = _d[1];
|
|
301
|
+
// --- search / filter / sort ------------------------------------------------
|
|
302
|
+
var _e = (0, react_1.useState)(''), search = _e[0], setSearch = _e[1];
|
|
303
|
+
var _f = (0, react_1.useState)('all'), filter = _f[0], setFilter = _f[1];
|
|
304
|
+
var _g = (0, react_1.useState)('newest'), sort = _g[0], setSort = _g[1];
|
|
305
|
+
var query = search.trim().toLowerCase();
|
|
306
|
+
var matchesText = (0, react_1.useCallback)(function () {
|
|
307
|
+
var fields = [];
|
|
308
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
309
|
+
fields[_i] = arguments[_i];
|
|
310
|
+
}
|
|
311
|
+
return !query || fields.some(function (f) { return f === null || f === void 0 ? void 0 : f.toLowerCase().includes(query); });
|
|
312
|
+
}, [query]);
|
|
313
|
+
var sortAttachments = (0, react_1.useCallback)(function (arr) {
|
|
314
|
+
var next = __spreadArray([], arr, true);
|
|
315
|
+
switch (sort) {
|
|
316
|
+
case 'oldest':
|
|
317
|
+
return next.sort(function (a, b) { return createdMs(a) - createdMs(b); });
|
|
318
|
+
case 'name':
|
|
319
|
+
return next.sort(function (a, b) { return a.filename.localeCompare(b.filename); });
|
|
320
|
+
case 'size':
|
|
321
|
+
return next.sort(function (a, b) { var _a, _b; return ((_a = b.size_bytes) !== null && _a !== void 0 ? _a : 0) - ((_b = a.size_bytes) !== null && _b !== void 0 ? _b : 0); });
|
|
322
|
+
case 'newest':
|
|
323
|
+
default:
|
|
324
|
+
return next.sort(function (a, b) { return createdMs(b) - createdMs(a); });
|
|
325
|
+
}
|
|
326
|
+
}, [sort]);
|
|
327
|
+
// per-family counts feed the filter menu: empty families are dropped, and the
|
|
328
|
+
// surviving ones carry a count badge in their label.
|
|
329
|
+
var counts = (0, react_1.useMemo)(function () {
|
|
330
|
+
var byCategory = {
|
|
331
|
+
documents: 0,
|
|
332
|
+
data: 0,
|
|
333
|
+
logs: 0,
|
|
334
|
+
archives: 0,
|
|
335
|
+
};
|
|
336
|
+
for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
|
|
337
|
+
var f = files_1[_i];
|
|
338
|
+
byCategory[fileCategory(f.content_type)] += 1;
|
|
339
|
+
}
|
|
340
|
+
return __assign({ all: allRefs.length + allAttachments.length, links: allRefs.length, screenshots: images.length }, byCategory);
|
|
341
|
+
}, [files, images.length, allRefs.length, allAttachments.length]);
|
|
342
|
+
// the three sections after search + type filter are applied. References sort by
|
|
343
|
+
// kind then name so like sits with like; "Name" sorts them purely by name.
|
|
344
|
+
var visibleRefs = (0, react_1.useMemo)(function () {
|
|
345
|
+
if (filter !== 'all' && filter !== 'links') {
|
|
346
|
+
return [];
|
|
347
|
+
}
|
|
348
|
+
return allRefs
|
|
349
|
+
.filter(function (r) { return matchesText(r.interface_name, r.interface_kind); })
|
|
350
|
+
.sort(function (a, b) {
|
|
351
|
+
return sort === 'name' ?
|
|
352
|
+
a.interface_name.localeCompare(b.interface_name)
|
|
353
|
+
: a.interface_kind.localeCompare(b.interface_kind) ||
|
|
354
|
+
a.interface_name.localeCompare(b.interface_name);
|
|
355
|
+
});
|
|
356
|
+
}, [allRefs, filter, matchesText, sort]);
|
|
357
|
+
var visibleImages = (0, react_1.useMemo)(function () {
|
|
358
|
+
if (filter !== 'all' && filter !== 'screenshots') {
|
|
359
|
+
return [];
|
|
360
|
+
}
|
|
361
|
+
return sortAttachments(images.filter(function (a) { return matchesText(a.filename); }));
|
|
362
|
+
}, [images, filter, matchesText, sortAttachments]);
|
|
363
|
+
var visibleFiles = (0, react_1.useMemo)(function () {
|
|
364
|
+
var fileFilter = FILE_FILTERS.includes(filter);
|
|
365
|
+
if (filter !== 'all' && !fileFilter) {
|
|
366
|
+
return [];
|
|
367
|
+
}
|
|
368
|
+
var list = files.filter(function (a) { return matchesText(a.filename); });
|
|
369
|
+
if (fileFilter) {
|
|
370
|
+
list = list.filter(function (a) { return fileCategory(a.content_type) === filter; });
|
|
371
|
+
}
|
|
372
|
+
return sortAttachments(list);
|
|
373
|
+
}, [files, filter, matchesText, sortAttachments]);
|
|
374
|
+
// a filtered-out lightbox target would dangle — close it if its index falls away
|
|
375
|
+
(0, react_1.useEffect)(function () {
|
|
376
|
+
if (lightbox !== null && lightbox >= visibleImages.length) {
|
|
377
|
+
setLightbox(null);
|
|
378
|
+
}
|
|
379
|
+
}, [visibleImages.length, lightbox]);
|
|
380
|
+
if (loading) {
|
|
381
|
+
return ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreControlGroup, { fluid: true, horizontalAlign: 'center', style: { padding: '32px 0' }, children: (0, jsx_runtime_1.jsx)(reqore_1.ReqoreSpinner, { iconColor: 'info', size: 'big', children: "Loading references\u2026" }) }));
|
|
382
|
+
}
|
|
383
|
+
if (!allRefs.length && !allAttachments.length) {
|
|
384
|
+
return ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreEmptyState, { icon: 'FolderInfoLine', title: 'No references or files yet', description: 'Interface references and any screenshots, documents, or files attached to this ticket will appear here.', flat: true, transparent: true }));
|
|
385
|
+
}
|
|
386
|
+
// A search + type-filter + sort strip, shown once a ticket carries enough to be
|
|
387
|
+
// worth narrowing (any files, or 3+ linked interfaces). Empty type-families are
|
|
388
|
+
// dropped from the filter menu so it only ever offers what's actually present.
|
|
389
|
+
var showControls = allAttachments.length > 0 || allRefs.length > 2;
|
|
390
|
+
var filterOptions = FILTER_ORDER.filter(function (key) { return key === 'all' || counts[key] > 0; });
|
|
391
|
+
var nothingVisible = !visibleRefs.length && !visibleImages.length && !visibleFiles.length;
|
|
392
|
+
var controlBar = showControls ?
|
|
393
|
+
(0, jsx_runtime_1.jsx)(searchFilterBar_1.SearchFilterBar, { sticky: true, value: search, onChange: setSearch, placeholder: 'Search files and references\u2026', filters: [
|
|
394
|
+
{
|
|
395
|
+
icon: FILTER_META[filter].icon,
|
|
396
|
+
label: FILTER_META[filter].label,
|
|
397
|
+
items: filterOptions.map(function (key) { return ({
|
|
398
|
+
selected: filter === key,
|
|
399
|
+
icon: FILTER_META[key].icon,
|
|
400
|
+
label: key === 'all' ?
|
|
401
|
+
FILTER_META.all.label
|
|
402
|
+
: "".concat(FILTER_META[key].label, " (").concat(counts[key], ")"),
|
|
403
|
+
onClick: function () { return setFilter(key); },
|
|
404
|
+
}); }),
|
|
405
|
+
},
|
|
406
|
+
{
|
|
407
|
+
icon: 'ArrowUpDownLine',
|
|
408
|
+
label: SORT_META[sort].label,
|
|
409
|
+
items: SORT_ORDER.map(function (key) { return ({
|
|
410
|
+
selected: sort === key,
|
|
411
|
+
icon: SORT_META[key].icon,
|
|
412
|
+
label: SORT_META[key].label,
|
|
413
|
+
onClick: function () { return setSort(key); },
|
|
414
|
+
}); }),
|
|
415
|
+
},
|
|
416
|
+
] })
|
|
417
|
+
: null;
|
|
418
|
+
return ((0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { vertical: true, fluid: true, gapSize: 'big', children: [controlBar, nothingVisible ?
|
|
419
|
+
(0, jsx_runtime_1.jsx)(reqore_1.ReqoreEmptyState, { icon: 'Search2Line', title: 'No matching references or files', description: query ?
|
|
420
|
+
"Nothing here matches \u201C".concat(search.trim(), "\u201D.")
|
|
421
|
+
: 'Nothing matches the current filter.', flat: true, transparent: true, actions: (0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { icon: 'CloseLine', minimal: true, onClick: function () {
|
|
422
|
+
setSearch('');
|
|
423
|
+
setFilter('all');
|
|
424
|
+
}, children: "Clear filters" }) })
|
|
425
|
+
: null, visibleImages.length ?
|
|
426
|
+
(0, jsx_runtime_1.jsx)(reqore_1.ReqorePanel, { label: 'Screenshots', icon: 'ImageLine', badge: visibleImages.length, flat: true, transparent: true, size: 'small', labelSize: 4, collapsible: true, children: (0, jsx_runtime_1.jsx)(reqore_1.ReqoreColumns, { columns: 'auto-fill', minColumnWidth: '140px', columnsGap: '10px', children: visibleImages.map(function (att, i) { return ((0, jsx_runtime_1.jsx)(Screenshot, { att: att, url: urls[att.attachment_id], onOpen: function () {
|
|
427
|
+
return urls[att.attachment_id] ?
|
|
428
|
+
setLightbox(i)
|
|
429
|
+
: onDownloadAttachment === null || onDownloadAttachment === void 0 ? void 0 : onDownloadAttachment(att.attachment_id, att.filename);
|
|
430
|
+
}, menu: __spreadArray(__spreadArray([], (onDownloadAttachment ?
|
|
431
|
+
[
|
|
432
|
+
{
|
|
433
|
+
label: 'Download',
|
|
434
|
+
icon: 'DownloadLine',
|
|
435
|
+
onClick: function () { return onDownloadAttachment(att.attachment_id, att.filename); },
|
|
436
|
+
},
|
|
437
|
+
]
|
|
438
|
+
: []), true), showInChatItem(att.message_id), true) }, att.attachment_id)); }) }) })
|
|
439
|
+
: null, visibleRefs.length ?
|
|
440
|
+
(0, jsx_runtime_1.jsx)(reqore_1.ReqorePanel, { label: 'Linked interfaces', icon: 'LinksLine', badge: visibleRefs.length, flat: true, transparent: true, size: 'small', labelSize: 4, collapsible: true, children: (0, jsx_runtime_1.jsx)(reqore_1.ReqoreControlGroup, { vertical: true, fluid: true, gapSize: 'small', size: 'small', children: visibleRefs.map(function (reference) {
|
|
441
|
+
var _a;
|
|
442
|
+
// an app-triggered qog carries its trigger app's logo; everything else
|
|
443
|
+
// shows its kind glyph — the same vocabulary the reference chips use.
|
|
444
|
+
var image = reference.logo;
|
|
445
|
+
return ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreEntityRow, { icon: image ? undefined : resolveIcon(reference.interface_kind), iconImage: image, label: reference.interface_name, metadata: (0, jsx_runtime_1.jsx)(reqore_1.ReqoreTextEffect, { effect: META_EFFECT, children: reference.interface_kind }), flat: true, tooltip: onInterfaceClick ?
|
|
446
|
+
"Open ".concat(reference.interface_kind, " ").concat(reference.interface_name)
|
|
447
|
+
: undefined, actions: rowActions(onInterfaceClick ?
|
|
448
|
+
{
|
|
449
|
+
icon: 'ArrowRightUpLine',
|
|
450
|
+
tooltip: 'Open',
|
|
451
|
+
onClick: function () { return onInterfaceClick(reference); },
|
|
452
|
+
}
|
|
453
|
+
: undefined, reference.message_id) }, (_a = reference.reference_id) !== null && _a !== void 0 ? _a : "".concat(reference.interface_kind, ":").concat(reference.interface_name)));
|
|
454
|
+
}) }) })
|
|
455
|
+
: null, visibleFiles.length ?
|
|
456
|
+
(0, jsx_runtime_1.jsx)(reqore_1.ReqorePanel, { label: 'Files', icon: 'FileList3Line', badge: visibleFiles.length, flat: true, transparent: true, size: 'small', labelSize: 4, collapsible: true, actions: visibleFiles.length > 1 && onDownloadAttachment ?
|
|
457
|
+
[
|
|
458
|
+
{
|
|
459
|
+
icon: 'DownloadCloud2Line',
|
|
460
|
+
label: 'Download all',
|
|
461
|
+
onClick: function () {
|
|
462
|
+
return visibleFiles.forEach(function (f) { return onDownloadAttachment(f.attachment_id, f.filename); });
|
|
463
|
+
},
|
|
464
|
+
},
|
|
465
|
+
]
|
|
466
|
+
: [], children: (0, jsx_runtime_1.jsx)(reqore_1.ReqoreControlGroup, { vertical: true, fluid: true, gapSize: 'small', size: 'small', children: visibleFiles.map(function (f) {
|
|
467
|
+
var type = fileType(f.content_type);
|
|
468
|
+
// a customer's own upload reads "you"; everything else shows the
|
|
469
|
+
// (already server-masked) uploader — "Qorus Support" for staff replies.
|
|
470
|
+
var uploader = viewerRole === 'customer' && f.uploader_type === 'customer' ? 'you' : f.uploaded_by;
|
|
471
|
+
var provenance = [
|
|
472
|
+
(0, common_1.formatBytes)(f.size_bytes),
|
|
473
|
+
uploader ? "added by ".concat(uploader) : undefined,
|
|
474
|
+
timeAgo(f.created) || undefined,
|
|
475
|
+
]
|
|
476
|
+
.filter(Boolean)
|
|
477
|
+
.join(' · ');
|
|
478
|
+
return ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreEntityRow, { icon: type.icon, iconColor: type.color, label: f.filename, metadata: (0, jsx_runtime_1.jsx)(reqore_1.ReqoreTextEffect, { effect: META_EFFECT, children: provenance }), flat: true, actions: rowActions(onDownloadAttachment ?
|
|
479
|
+
{
|
|
480
|
+
icon: 'DownloadLine',
|
|
481
|
+
tooltip: 'Download',
|
|
482
|
+
onClick: function () { return onDownloadAttachment(f.attachment_id, f.filename); },
|
|
483
|
+
}
|
|
484
|
+
: undefined, f.message_id) }, f.attachment_id));
|
|
485
|
+
}) }) })
|
|
486
|
+
: null, lightbox !== null && fetchAttachmentUrl ?
|
|
487
|
+
(0, jsx_runtime_1.jsx)(imageLightbox_1.ImageLightbox, { images: visibleImages, index: lightbox, onIndex: setLightbox, onClose: function () { return setLightbox(null); }, fetchAttachmentUrl: fetchAttachmentUrl, onDownload: onDownloadAttachment })
|
|
488
|
+
: null] }));
|
|
489
|
+
};
|
|
490
|
+
exports.TicketReferences = TicketReferences;
|
|
491
|
+
var templateObject_1, templateObject_2, templateObject_3;
|
|
492
|
+
//# sourceMappingURL=TicketReferences.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TicketReferences.js","sourceRoot":"","sources":["../../../src/components/ticketReferences/TicketReferences.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ticketReferences/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TicketReferences = void 0;
|
|
4
|
+
var TicketReferences_1 = require("./TicketReferences");
|
|
5
|
+
Object.defineProperty(exports, "TicketReferences", { enumerable: true, get: function () { return TicketReferences_1.TicketReferences; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ticketReferences/index.ts"],"names":[],"mappings":";;;AAAA,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { IReqoreIconName } from '@qoretechnologies/reqore/dist/types/icons';
|
|
2
|
+
import { IInterfaceReference, TTicketMessageAuthor, TTicketViewerRole } from '../supportTicket';
|
|
3
|
+
export interface ITicketThreadAttachment {
|
|
4
|
+
attachment_id: string;
|
|
5
|
+
filename: string;
|
|
6
|
+
content_type: string;
|
|
7
|
+
size_bytes: number;
|
|
8
|
+
}
|
|
9
|
+
export interface ITicketThreadMessage {
|
|
10
|
+
message_id: string;
|
|
11
|
+
author_type: TTicketMessageAuthor;
|
|
12
|
+
author_id: string;
|
|
13
|
+
body: string;
|
|
14
|
+
internal?: boolean;
|
|
15
|
+
created: string;
|
|
16
|
+
attachments?: ITicketThreadAttachment[];
|
|
17
|
+
/** Qorus interfaces this message references, as `{kind, name}` snapshots. */
|
|
18
|
+
referenced_interfaces?: IInterfaceReference[];
|
|
19
|
+
}
|
|
20
|
+
export interface ITicketThreadProps {
|
|
21
|
+
messages: ITicketThreadMessage[];
|
|
22
|
+
/** which side "you" sit on + how internal notes render. */
|
|
23
|
+
viewerRole?: TTicketViewerRole;
|
|
24
|
+
loading?: boolean;
|
|
25
|
+
/** download an attachment (the consumer wires this to its API). */
|
|
26
|
+
onDownloadAttachment?: (attachmentId: string, filename: string) => void;
|
|
27
|
+
/**
|
|
28
|
+
* Fetch an image attachment's bytes as an object URL, for the inline thumbnail +
|
|
29
|
+
* click-to-enlarge preview. Omitted ⇒ image attachments fall back to the same
|
|
30
|
+
* download chip as every other file, so the thread degrades rather than breaks
|
|
31
|
+
* where a consumer hasn't wired it. Non-image attachments never use it.
|
|
32
|
+
*/
|
|
33
|
+
fetchAttachmentUrl?: (attachmentId: string) => Promise<string>;
|
|
34
|
+
/** resolve a per-kind icon for a referenced interface. Consumers with their own
|
|
35
|
+
* icon vocabulary (e.g. the qorus-ide IDE) pass one; when omitted, a built-in
|
|
36
|
+
* per-kind default is used so every surface shows consistent chips. */
|
|
37
|
+
resolveInterfaceIcon?: (kind: string) => IReqoreIconName;
|
|
38
|
+
/** open a referenced interface; reference chips are static when omitted (e.g. the staff
|
|
39
|
+
* view, which can't reach the customer's instance, leaves this out). */
|
|
40
|
+
onInterfaceClick?: (reference: IInterfaceReference) => void;
|
|
41
|
+
/** The TICKET's own references (picked when filing). Echoed as chips on the opening
|
|
42
|
+
* message so the conversation carries them too — when they lived only in the header
|
|
43
|
+
* rail + References tab, readers looked for them in the thread and concluded the
|
|
44
|
+
* ticket had none. Deduped against the opening message's own message-level refs. */
|
|
45
|
+
ticketReferences?: IInterfaceReference[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* DOM id of a message in the rendered thread.
|
|
49
|
+
*
|
|
50
|
+
* Exported rather than inlined so that anything wanting to reveal a message — a
|
|
51
|
+
* "show in chat" action on a reference, a deep link — derives the id from the same
|
|
52
|
+
* function the thread renders with. Two copies of the same template string is exactly
|
|
53
|
+
* how that contract silently breaks when one side is renamed.
|
|
54
|
+
*/
|
|
55
|
+
export declare const ticketMessageDomId: (messageId: string) => string;
|
|
56
|
+
export declare const TicketThread: ({ messages, viewerRole, loading, onDownloadAttachment, fetchAttachmentUrl, resolveInterfaceIcon, onInterfaceClick, ticketReferences, }: ITicketThreadProps) => import("react/jsx-runtime").JSX.Element;
|
|
57
|
+
//# sourceMappingURL=TicketThread.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TicketThread.d.ts","sourceRoot":"","sources":["../../../src/components/ticketThread/TicketThread.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAO5E,OAAO,EACL,mBAAmB,EAEnB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AA4B1B,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,oBAAoB,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACxC,6EAA6E;IAC7E,qBAAqB,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,2DAA2D;IAC3D,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxE;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/D;;4EAEwE;IACxE,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;IACzD;6EACyE;IACzE,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC5D;;;yFAGqF;IACrF,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAC1C;AAmCD;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,cAAe,MAAM,KAAG,MAAuC,CAAC;AAoZ/F,eAAO,MAAM,YAAY,2IAStB,kBAAkB,4CAqJpB,CAAC"}
|