@solidxai/core-ui 0.1.20-beta.1 → 0.1.21-beta.0

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.
Files changed (180) hide show
  1. package/dist/components/common/FileReaderExt.d.ts.map +1 -1
  2. package/dist/components/common/FileReaderExt.js +22 -11
  3. package/dist/components/common/FileReaderExt.js.map +1 -1
  4. package/dist/components/common/FileReaderExt.tsx +27 -14
  5. package/dist/components/common/SocialMediaLogin.d.ts.map +1 -1
  6. package/dist/components/common/SocialMediaLogin.js +1 -1
  7. package/dist/components/common/SocialMediaLogin.js.map +1 -1
  8. package/dist/components/common/SocialMediaLogin.tsx +50 -19
  9. package/dist/components/common/solid-export.css +75 -0
  10. package/dist/components/core/common/SolidGenericImport/SolidImport.module.css +71 -0
  11. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  12. package/dist/components/core/form/SolidFormView.js +14 -0
  13. package/dist/components/core/form/SolidFormView.js.map +1 -1
  14. package/dist/components/core/form/SolidFormView.tsx +13 -0
  15. package/dist/components/core/form/fields/SolidMediaMultipleField.js +3 -3
  16. package/dist/components/core/form/fields/SolidMediaMultipleField.js.map +1 -1
  17. package/dist/components/core/form/fields/SolidMediaMultipleField.tsx +3 -3
  18. package/dist/components/core/form/fields/SolidMediaSingleField.js +2 -2
  19. package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
  20. package/dist/components/core/form/fields/SolidMediaSingleField.tsx +2 -2
  21. package/dist/components/core/list/columns/SolidMediaMultipleColumn.js +2 -2
  22. package/dist/components/core/list/columns/SolidMediaMultipleColumn.js.map +1 -1
  23. package/dist/components/core/list/columns/SolidMediaMultipleColumn.tsx +4 -4
  24. package/dist/components/core/list/columns/SolidMediaSingleColumn.js +1 -1
  25. package/dist/components/core/list/columns/SolidMediaSingleColumn.js.map +1 -1
  26. package/dist/components/core/list/columns/SolidMediaSingleColumn.tsx +3 -3
  27. package/dist/components/core/solid-agent/SolidAgentChat.d.ts +3 -1
  28. package/dist/components/core/solid-agent/SolidAgentChat.d.ts.map +1 -1
  29. package/dist/components/core/solid-agent/SolidAgentChat.js +150 -22
  30. package/dist/components/core/solid-agent/SolidAgentChat.js.map +1 -1
  31. package/dist/components/core/solid-agent/SolidAgentChat.tsx +76 -15
  32. package/dist/components/core/solid-agent/SolidAgentEmbedded.d.ts +2 -0
  33. package/dist/components/core/solid-agent/SolidAgentEmbedded.d.ts.map +1 -1
  34. package/dist/components/core/solid-agent/SolidAgentEmbedded.js +4 -4
  35. package/dist/components/core/solid-agent/SolidAgentEmbedded.js.map +1 -1
  36. package/dist/components/core/solid-agent/SolidAgentEmbedded.tsx +7 -1
  37. package/dist/components/core/solid-agent/SolidAgentHost.d.ts.map +1 -1
  38. package/dist/components/core/solid-agent/SolidAgentHost.js +79 -1
  39. package/dist/components/core/solid-agent/SolidAgentHost.js.map +1 -1
  40. package/dist/components/core/solid-agent/SolidAgentHost.tsx +69 -2
  41. package/dist/components/core/solid-agent/agentEvents.d.ts.map +1 -1
  42. package/dist/components/core/solid-agent/agentEvents.js +1 -3
  43. package/dist/components/core/solid-agent/agentEvents.js.map +1 -1
  44. package/dist/components/core/solid-agent/agentEvents.ts +5 -3
  45. package/dist/components/core/solid-agent/client/agentPublicEvents.d.ts +88 -0
  46. package/dist/components/core/solid-agent/client/agentPublicEvents.d.ts.map +1 -0
  47. package/dist/components/core/solid-agent/client/agentPublicEvents.js +26 -0
  48. package/dist/components/core/solid-agent/client/agentPublicEvents.js.map +1 -0
  49. package/dist/components/core/solid-agent/client/agentPublicEvents.ts +66 -0
  50. package/dist/components/core/solid-agent/client/agentRuntime.d.ts +18 -3
  51. package/dist/components/core/solid-agent/client/agentRuntime.d.ts.map +1 -1
  52. package/dist/components/core/solid-agent/client/agentRuntime.js +173 -31
  53. package/dist/components/core/solid-agent/client/agentRuntime.js.map +1 -1
  54. package/dist/components/core/solid-agent/client/agentRuntime.ts +126 -16
  55. package/dist/components/core/solid-agent/client/agentSocket.d.ts +3 -0
  56. package/dist/components/core/solid-agent/client/agentSocket.d.ts.map +1 -1
  57. package/dist/components/core/solid-agent/client/agentSocket.js +19 -1
  58. package/dist/components/core/solid-agent/client/agentSocket.js.map +1 -1
  59. package/dist/components/core/solid-agent/client/agentSocket.ts +11 -1
  60. package/dist/components/core/solid-agent/client/beforeUserMessageSend.d.ts +9 -0
  61. package/dist/components/core/solid-agent/client/beforeUserMessageSend.d.ts.map +1 -0
  62. package/dist/components/core/solid-agent/client/beforeUserMessageSend.js +53 -0
  63. package/dist/components/core/solid-agent/client/beforeUserMessageSend.js.map +1 -0
  64. package/dist/components/core/solid-agent/client/beforeUserMessageSend.ts +26 -0
  65. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.d.ts.map +1 -1
  66. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.js +4 -3
  67. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.js.map +1 -1
  68. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.tsx +4 -2
  69. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.d.ts +29 -0
  70. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.d.ts.map +1 -1
  71. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.js +45 -2
  72. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.js.map +1 -1
  73. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.ts +49 -2
  74. package/dist/components/core/solid-agent/embed/agentEmbedSamples.d.ts +1 -0
  75. package/dist/components/core/solid-agent/embed/agentEmbedSamples.d.ts.map +1 -1
  76. package/dist/components/core/solid-agent/embed/agentEmbedSamples.js +2 -1
  77. package/dist/components/core/solid-agent/embed/agentEmbedSamples.js.map +1 -1
  78. package/dist/components/core/solid-agent/embed/agentEmbedSamples.ts +15 -1
  79. package/dist/components/core/solid-agent/types.d.ts +13 -0
  80. package/dist/components/core/solid-agent/types.d.ts.map +1 -1
  81. package/dist/components/core/solid-agent/types.js.map +1 -1
  82. package/dist/components/core/solid-agent/types.ts +8 -0
  83. package/dist/components/core/solid-agent/useAgentChat.d.ts +1 -1
  84. package/dist/components/core/solid-agent/useAgentChat.d.ts.map +1 -1
  85. package/dist/components/core/solid-agent/useAgentChat.js +7 -4
  86. package/dist/components/core/solid-agent/useAgentChat.js.map +1 -1
  87. package/dist/components/core/solid-agent/useAgentChat.ts +9 -5
  88. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.d.ts.map +1 -1
  89. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.js +12 -4
  90. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.js.map +1 -1
  91. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.tsx +18 -0
  92. package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.d.ts +4 -0
  93. package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.d.ts.map +1 -0
  94. package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.js +30 -0
  95. package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.js.map +1 -0
  96. package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.tsx +41 -0
  97. package/dist/components/core/solid-agent/widgets/solidChatWidgets.module.css +39 -0
  98. package/dist/components/shad-cn-ui/SolidCodeEditor.d.ts +2 -1
  99. package/dist/components/shad-cn-ui/SolidCodeEditor.d.ts.map +1 -1
  100. package/dist/components/shad-cn-ui/SolidCodeEditor.js +3 -2
  101. package/dist/components/shad-cn-ui/SolidCodeEditor.js.map +1 -1
  102. package/dist/components/shad-cn-ui/SolidCodeEditor.tsx +3 -0
  103. package/dist/helpers/adminViewRefresh.d.ts +13 -0
  104. package/dist/helpers/adminViewRefresh.d.ts.map +1 -0
  105. package/dist/helpers/adminViewRefresh.js +14 -0
  106. package/dist/helpers/adminViewRefresh.js.map +1 -0
  107. package/dist/helpers/adminViewRefresh.ts +26 -0
  108. package/dist/helpers/eventBus.d.ts +1 -0
  109. package/dist/helpers/eventBus.d.ts.map +1 -1
  110. package/dist/helpers/eventBus.js +1 -0
  111. package/dist/helpers/eventBus.js.map +1 -1
  112. package/dist/helpers/eventBus.ts +1 -0
  113. package/dist/helpers/fileTypeIcon.d.ts.map +1 -1
  114. package/dist/helpers/fileTypeIcon.js +4 -1
  115. package/dist/helpers/fileTypeIcon.js.map +1 -1
  116. package/dist/helpers/fileTypeIcon.tsx +15 -0
  117. package/dist/helpers/registry.d.ts.map +1 -1
  118. package/dist/helpers/registry.js +2 -0
  119. package/dist/helpers/registry.js.map +1 -1
  120. package/dist/helpers/registry.ts +2 -0
  121. package/dist/helpers/routePaths.d.ts +13 -0
  122. package/dist/helpers/routePaths.d.ts.map +1 -1
  123. package/dist/helpers/routePaths.js +39 -0
  124. package/dist/helpers/routePaths.js.map +1 -1
  125. package/dist/helpers/routePaths.ts +48 -0
  126. package/dist/redux/features/agentSlice.d.ts +2 -1
  127. package/dist/redux/features/agentSlice.d.ts.map +1 -1
  128. package/dist/redux/features/agentSlice.js +2 -2
  129. package/dist/redux/features/agentSlice.js.map +1 -1
  130. package/dist/redux/features/agentSlice.ts +8 -3
  131. package/dist/resources/solid-custom.css +42 -0
  132. package/dist/resources/solid-tailwind-generated.css +1 -1
  133. package/dist/routes/pages/admin/core/AgentHubModuleField.css +15 -0
  134. package/dist/routes/pages/admin/core/AgentHubModuleField.d.ts +22 -0
  135. package/dist/routes/pages/admin/core/AgentHubModuleField.d.ts.map +1 -0
  136. package/dist/routes/pages/admin/core/AgentHubModuleField.js +42 -0
  137. package/dist/routes/pages/admin/core/AgentHubModuleField.js.map +1 -0
  138. package/dist/routes/pages/admin/core/AgentHubModuleField.tsx +54 -0
  139. package/dist/routes/pages/admin/core/AgentHubTagsField.d.ts +3 -1
  140. package/dist/routes/pages/admin/core/AgentHubTagsField.d.ts.map +1 -1
  141. package/dist/routes/pages/admin/core/AgentHubTagsField.js +3 -3
  142. package/dist/routes/pages/admin/core/AgentHubTagsField.js.map +1 -1
  143. package/dist/routes/pages/admin/core/AgentHubTagsField.tsx +7 -3
  144. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.d.ts.map +1 -1
  145. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.js +37 -29
  146. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.js.map +1 -1
  147. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.tsx +12 -6
  148. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.d.ts.map +1 -1
  149. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.js +22 -15
  150. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.js.map +1 -1
  151. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.tsx +17 -7
  152. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.d.ts.map +1 -1
  153. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.js +21 -15
  154. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.js.map +1 -1
  155. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.tsx +16 -9
  156. package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.d.ts.map +1 -1
  157. package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.js +149 -37
  158. package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.js.map +1 -1
  159. package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.tsx +283 -73
  160. package/dist/routes/pages/admin/core/CardPage.d.ts.map +1 -1
  161. package/dist/routes/pages/admin/core/CardPage.js +9 -1
  162. package/dist/routes/pages/admin/core/CardPage.js.map +1 -1
  163. package/dist/routes/pages/admin/core/CardPage.tsx +9 -1
  164. package/dist/routes/pages/admin/core/KanbanPage.d.ts.map +1 -1
  165. package/dist/routes/pages/admin/core/KanbanPage.js +9 -1
  166. package/dist/routes/pages/admin/core/KanbanPage.js.map +1 -1
  167. package/dist/routes/pages/admin/core/KanbanPage.tsx +9 -1
  168. package/dist/routes/pages/admin/core/ListPage.d.ts.map +1 -1
  169. package/dist/routes/pages/admin/core/ListPage.js +10 -1
  170. package/dist/routes/pages/admin/core/ListPage.js.map +1 -1
  171. package/dist/routes/pages/admin/core/ListPage.tsx +10 -1
  172. package/dist/routes/pages/admin/core/TreePage.d.ts.map +1 -1
  173. package/dist/routes/pages/admin/core/TreePage.js +9 -1
  174. package/dist/routes/pages/admin/core/TreePage.js.map +1 -1
  175. package/dist/routes/pages/admin/core/TreePage.tsx +9 -1
  176. package/dist/routes/pages/embed/AgentEmbedPage.d.ts.map +1 -1
  177. package/dist/routes/pages/embed/AgentEmbedPage.js +67 -4
  178. package/dist/routes/pages/embed/AgentEmbedPage.js.map +1 -1
  179. package/dist/routes/pages/embed/AgentEmbedPage.tsx +61 -4
  180. package/package.json +1 -1
@@ -48,61 +48,173 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
48
48
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
49
49
  import React from 'react';
50
50
  import qs from 'qs';
51
- import { ChevronLeft, ChevronRight, Loader2 } from 'lucide-react';
52
- import { SolidButton } from '../../../../components/shad-cn-ui';
51
+ import { Loader2 } from 'lucide-react';
52
+ import { SolidAutocomplete } from '../../../../components/shad-cn-ui/SolidAutocomplete';
53
+ import { Column, SolidDataTable } from '../../../../components/core/list/SolidDataTable';
54
+ import { useLazyGetModelsQuery } from '../../../../redux/api/modelApi';
55
+ import { createSolidEntityApi } from '../../../../redux/api/solidEntityApi';
53
56
  import { useGetArchivedChatterMessagesQuery, useLazyGetArchivedChatterMessageQuery } from '../../../../redux/api/solidChatterMessageApi';
54
- var PAGE_SIZE = 25;
57
+ var DEFAULT_PAGE_SIZE = 25;
58
+ var PAGE_SIZE_OPTIONS = [10, 25, 50, 100];
59
+ var MESSAGE_TYPES = [
60
+ { label: 'All types', value: '' },
61
+ { label: 'Audit', value: 'audit' },
62
+ { label: 'Custom', value: 'custom' },
63
+ ];
64
+ var MESSAGE_SUBTYPES = [
65
+ { label: 'All subtypes', value: '' },
66
+ { label: 'Audit insert', value: 'audit_insert' },
67
+ { label: 'Audit update', value: 'audit_update' },
68
+ { label: 'Audit delete', value: 'audit_delete' },
69
+ { label: 'Custom', value: 'custom' },
70
+ { label: 'Note', value: 'note' },
71
+ { label: 'Task', value: 'task' },
72
+ ];
73
+ var userApi = createSolidEntityApi('User');
74
+ var buildQueryString = function (query) {
75
+ return qs.stringify(query, { encodeValuesOnly: true });
76
+ };
77
+ function toLocalDateBoundary(value, endOfDay) {
78
+ if (endOfDay === void 0) { endOfDay = false; }
79
+ var date = new Date("".concat(value, "T").concat(endOfDay ? '23:59:59.999' : '00:00:00'));
80
+ return date.toISOString();
81
+ }
55
82
  export function ArchivedChatterMessagesPage() {
56
83
  var _this = this;
57
84
  var _a, _b, _c, _d, _e;
58
- var _f = React.useState({ entityName: '', entityId: '', messageType: '', messageSubType: '', user: '', from: '', to: '' }), filters = _f[0], setFilters = _f[1];
59
- var _g = React.useState(0), offset = _g[0], setOffset = _g[1];
60
- var _h = React.useState(null), selectedId = _h[0], setSelectedId = _h[1];
61
- var queryString = React.useMemo(function () {
62
- var query = { limit: PAGE_SIZE, offset: offset };
85
+ var _f = React.useState({
86
+ entity: null,
87
+ entityId: '',
88
+ messageType: '',
89
+ messageSubType: '',
90
+ user: null,
91
+ from: '',
92
+ to: '',
93
+ }), filters = _f[0], setFilters = _f[1];
94
+ var _g = React.useState(0), first = _g[0], setFirst = _g[1];
95
+ var _h = React.useState(DEFAULT_PAGE_SIZE), rows = _h[0], setRows = _h[1];
96
+ var _j = React.useState(null), selectedId = _j[0], setSelectedId = _j[1];
97
+ var _k = React.useState([]), modelOptions = _k[0], setModelOptions = _k[1];
98
+ var _l = React.useState([]), userOptions = _l[0], setUserOptions = _l[1];
99
+ var _m = useLazyGetModelsQuery(), getModels = _m[0], modelsData = _m[1].data;
100
+ var getUsers = userApi.useLazyGetSolidEntitiesQuery()[0];
101
+ var _o = useGetArchivedChatterMessagesQuery(React.useMemo(function () {
102
+ var _a, _b;
103
+ var query = {
104
+ limit: rows,
105
+ offset: first,
106
+ sort: ['createdAt:DESC'],
107
+ };
63
108
  var where = {};
64
- if (filters.entityName.trim())
65
- where.coModelName = { $containsi: filters.entityName.trim() };
66
- if (filters.entityId.trim() && Number.isFinite(Number(filters.entityId)))
109
+ if ((_a = filters.entity) === null || _a === void 0 ? void 0 : _a.value)
110
+ where.coModelName = { $eq: filters.entity.value };
111
+ if (filters.entityId.trim() && Number.isFinite(Number(filters.entityId))) {
67
112
  where.coModelEntityId = { $eq: Number(filters.entityId) };
113
+ }
68
114
  if (filters.messageType)
69
115
  where.messageType = { $eq: filters.messageType };
70
- if (filters.messageSubType.trim())
71
- where.messageSubType = { $containsi: filters.messageSubType.trim() };
72
- if (filters.user.trim())
73
- where.user = { fullName: { $containsi: filters.user.trim() } };
116
+ if (filters.messageSubType)
117
+ where.messageSubType = { $eq: filters.messageSubType };
118
+ if ((_b = filters.user) === null || _b === void 0 ? void 0 : _b.value)
119
+ where.user = { id: { $eq: filters.user.value } };
74
120
  if (filters.from || filters.to) {
75
121
  where.createdAt = {};
76
122
  if (filters.from)
77
- where.createdAt.$gte = new Date(filters.from).toISOString();
123
+ where.createdAt.$gte = toLocalDateBoundary(filters.from);
78
124
  if (filters.to)
79
- where.createdAt.$lte = new Date(filters.to).toISOString();
125
+ where.createdAt.$lte = toLocalDateBoundary(filters.to, true);
80
126
  }
81
127
  if (Object.keys(where).length)
82
128
  query.filters = where;
83
- query.sort = ['createdAt:DESC'];
84
- return qs.stringify(query, { encodeValuesOnly: true });
85
- }, [filters, offset]);
86
- var _j = useGetArchivedChatterMessagesQuery(queryString), data = _j.data, isLoading = _j.isLoading, isFetching = _j.isFetching, error = _j.error;
87
- var _k = useLazyGetArchivedChatterMessageQuery(), fetchOne = _k[0], _l = _k[1], detailData = _l.data, detailLoading = _l.isFetching;
129
+ return buildQueryString(query);
130
+ }, [filters, first, rows])), data = _o.data, isLoading = _o.isLoading, isError = _o.isError;
131
+ var _p = useLazyGetArchivedChatterMessageQuery(), fetchOne = _p[0], _q = _p[1], detailData = _q.currentData, detailLoading = _q.isFetching;
88
132
  var records = (_a = data === null || data === void 0 ? void 0 : data.records) !== null && _a !== void 0 ? _a : [];
89
133
  var meta = (_b = data === null || data === void 0 ? void 0 : data.meta) !== null && _b !== void 0 ? _b : {};
90
- var openRecord = function (id) { return __awaiter(_this, void 0, void 0, function () {
91
- return __generator(this, function (_a) {
92
- switch (_a.label) {
93
- case 0:
94
- setSelectedId(id);
95
- return [4 /*yield*/, fetchOne(id)];
96
- case 1:
97
- _a.sent();
98
- return [2 /*return*/];
99
- }
134
+ React.useEffect(function () {
135
+ getModels('offset=0&limit=1000&sort[0]=displayName%3AASC');
136
+ }, [getModels]);
137
+ React.useEffect(function () {
138
+ var _a;
139
+ var options = ((_a = modelsData === null || modelsData === void 0 ? void 0 : modelsData.records) !== null && _a !== void 0 ? _a : [])
140
+ .filter(function (model) { return model === null || model === void 0 ? void 0 : model.singularName; })
141
+ .map(function (model) { return ({
142
+ label: model.displayName && model.displayName !== model.singularName
143
+ ? "".concat(model.displayName, " (").concat(model.singularName, ")")
144
+ : model.singularName,
145
+ value: model.singularName,
146
+ }); });
147
+ setModelOptions(options);
148
+ }, [modelsData]);
149
+ var updateFilter = function (key, value) {
150
+ setFirst(0);
151
+ setFilters(function (current) {
152
+ var _a;
153
+ return (__assign(__assign({}, current), (_a = {}, _a[key] = value, _a)));
100
154
  });
101
- }); };
155
+ };
156
+ var completeModels = function (_a) {
157
+ var _b;
158
+ var query = _a.query;
159
+ var normalizedQuery = query.trim().toLocaleLowerCase();
160
+ setModelOptions(((_b = modelsData === null || modelsData === void 0 ? void 0 : modelsData.records) !== null && _b !== void 0 ? _b : [])
161
+ .filter(function (model) { return model === null || model === void 0 ? void 0 : model.singularName; })
162
+ .filter(function (model) {
163
+ var _a;
164
+ return !normalizedQuery ||
165
+ "".concat((_a = model.displayName) !== null && _a !== void 0 ? _a : '', " ").concat(model.singularName).toLocaleLowerCase().includes(normalizedQuery);
166
+ })
167
+ .slice(0, 25)
168
+ .map(function (model) { return ({
169
+ label: model.displayName && model.displayName !== model.singularName
170
+ ? "".concat(model.displayName, " (").concat(model.singularName, ")")
171
+ : model.singularName,
172
+ value: model.singularName,
173
+ }); }));
174
+ };
175
+ var completeUsers = function (_a) {
176
+ var query = _a.query;
177
+ return __awaiter(_this, void 0, void 0, function () {
178
+ var queryString, response, users;
179
+ var _b, _c;
180
+ return __generator(this, function (_d) {
181
+ switch (_d.label) {
182
+ case 0:
183
+ queryString = buildQueryString({
184
+ offset: 0,
185
+ limit: 10,
186
+ sort: ['fullName:ASC'],
187
+ filters: query.trim() ? { fullName: { $containsi: query.trim() } } : {},
188
+ });
189
+ return [4 /*yield*/, getUsers(queryString)];
190
+ case 1:
191
+ response = _d.sent();
192
+ users = (_c = (_b = response.data) === null || _b === void 0 ? void 0 : _b.records) !== null && _c !== void 0 ? _c : [];
193
+ setUserOptions(users.map(function (user) { return ({
194
+ label: user.fullName || user.username || "User ".concat(user.id),
195
+ value: user.id,
196
+ }); }));
197
+ return [2 /*return*/];
198
+ }
199
+ });
200
+ });
201
+ };
202
+ var openRecord = function (id) {
203
+ setSelectedId(id);
204
+ void fetchOne(id);
205
+ };
102
206
  var selected = detailData === null || detailData === void 0 ? void 0 : detailData.record;
103
- return _jsxs("main", { className: "mx-auto flex w-full max-w-7xl flex-col gap-5 p-6", children: [_jsxs("header", { children: [_jsx("h1", { className: "m-0 text-2xl font-semibold", children: "Archived Messages" }), _jsx("p", { className: "mt-1 text-sm text-muted-foreground", children: "Search chatter messages moved to the configured archive store." })] }), (data === null || data === void 0 ? void 0 : data.available) === false ? _jsxs("section", { className: "rounded-lg border p-6", role: "status", children: [_jsx("h2", { className: "m-0 text-lg font-semibold", children: "Chatter archival is not enabled" }), _jsx("p", { className: "mb-0 mt-2 text-sm text-muted-foreground", children: "Configure and register an IChatterMessageArchive provider in the consuming project to archive and browse messages." })] }) : _jsxs(_Fragment, { children: [_jsxs("section", { className: "grid grid-cols-1 gap-3 rounded-lg border p-4 sm:grid-cols-2 lg:grid-cols-7", "aria-label": "Archive filters", children: [_jsxs("label", { className: "flex flex-col gap-1 text-sm", children: ["Entity name", _jsx("input", { className: "rounded border px-3 py-2", value: filters.entityName, onChange: function (e) { setOffset(0); setFilters(__assign(__assign({}, filters), { entityName: e.target.value })); }, placeholder: "e.g. customer" })] }), _jsxs("label", { className: "flex flex-col gap-1 text-sm", children: ["Entity ID", _jsx("input", { className: "rounded border px-3 py-2", inputMode: "numeric", value: filters.entityId, onChange: function (e) { setOffset(0); setFilters(__assign(__assign({}, filters), { entityId: e.target.value })); }, placeholder: "Record ID" })] }), _jsxs("label", { className: "flex flex-col gap-1 text-sm", children: ["Message type", _jsxs("select", { className: "rounded border px-3 py-2", value: filters.messageType, onChange: function (e) { setOffset(0); setFilters(__assign(__assign({}, filters), { messageType: e.target.value })); }, children: [_jsx("option", { value: "", children: "All types" }), _jsx("option", { value: "audit", children: "Audit" }), _jsx("option", { value: "custom", children: "Custom" })] })] }), _jsxs("label", { className: "flex flex-col gap-1 text-sm", children: ["Message subtype", _jsx("input", { className: "rounded border px-3 py-2", value: filters.messageSubType, onChange: function (e) { setOffset(0); setFilters(__assign(__assign({}, filters), { messageSubType: e.target.value })); }, placeholder: "e.g. audit_update" })] }), _jsxs("label", { className: "flex flex-col gap-1 text-sm", children: ["Changed by", _jsx("input", { className: "rounded border px-3 py-2", value: filters.user, onChange: function (e) { setOffset(0); setFilters(__assign(__assign({}, filters), { user: e.target.value })); }, placeholder: "User name" })] }), _jsxs("label", { className: "flex flex-col gap-1 text-sm", children: ["From", _jsx("input", { className: "rounded border px-3 py-2", type: "datetime-local", value: filters.from, onChange: function (e) { setOffset(0); setFilters(__assign(__assign({}, filters), { from: e.target.value })); } })] }), _jsxs("label", { className: "flex flex-col gap-1 text-sm", children: ["To", _jsx("input", { className: "rounded border px-3 py-2", type: "datetime-local", value: filters.to, onChange: function (e) { setOffset(0); setFilters(__assign(__assign({}, filters), { to: e.target.value })); } })] })] }), error && _jsx("p", { role: "alert", className: "text-sm text-red-600", children: "Unable to load archived messages. Check provider availability and try again." }), _jsx("section", { className: "overflow-hidden rounded-lg border", children: isLoading ? _jsxs("div", { className: "flex items-center gap-2 p-8", children: [_jsx(Loader2, { className: "animate-spin", size: 18 }), "Loading archived messages\u2026"] }) : records.length === 0 ? _jsx("p", { className: "p-8 text-center text-sm text-muted-foreground", children: "No archived messages match these filters." }) : _jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full border-collapse text-left text-sm", children: [_jsx("thead", { className: "bg-muted/50", children: _jsxs("tr", { children: [_jsx("th", { className: "p-3", children: "Date" }), _jsx("th", { className: "p-3", children: "Entity" }), _jsx("th", { className: "p-3", children: "Entity ID" }), _jsx("th", { className: "p-3", children: "Type" }), _jsx("th", { className: "p-3", children: "User" }), _jsx("th", { className: "p-3", children: "Message" })] }) }), _jsx("tbody", { children: records.map(function (message) {
104
- var _a;
105
- return _jsxs("tr", { className: "border-t hover:bg-muted/30", children: [_jsx("td", { className: "whitespace-nowrap p-3", children: message.createdAt ? new Date(message.createdAt).toLocaleString() : '—' }), _jsx("td", { className: "p-3", children: message.modelDisplayName || message.coModelName }), _jsx("td", { className: "p-3", children: message.coModelEntityId }), _jsx("td", { className: "p-3", children: message.messageSubType || message.messageType }), _jsx("td", { className: "p-3", children: ((_a = message.user) === null || _a === void 0 ? void 0 : _a.fullName) || 'System' }), _jsx("td", { className: "max-w-md p-3", children: _jsx("button", { type: "button", className: "text-left text-primary underline", onClick: function () { return openRecord(message.id); }, children: message.messageBody || 'View message' }) })] }, message.id);
106
- }) })] }) }) }), _jsxs("footer", { className: "flex items-center justify-between", children: [_jsxs("span", { className: "text-sm text-muted-foreground", children: [(_c = meta.totalRecords) !== null && _c !== void 0 ? _c : records.length, " archived messages", isFetching ? ' · Updating…' : ''] }), _jsxs("div", { className: "flex gap-2", children: [_jsxs(SolidButton, { variant: "outline", disabled: offset === 0 || isFetching, onClick: function () { return setOffset(Math.max(0, offset - PAGE_SIZE)); }, children: [_jsx(ChevronLeft, { size: 16 }), "Previous"] }), _jsxs(SolidButton, { variant: "outline", disabled: records.length < PAGE_SIZE || isFetching, onClick: function () { return setOffset(offset + PAGE_SIZE); }, children: ["Next", _jsx(ChevronRight, { size: 16 })] })] })] })] }), selectedId !== null && _jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/40 p-4", role: "presentation", onClick: function () { return setSelectedId(null); }, children: _jsxs("section", { role: "dialog", "aria-modal": "true", "aria-label": "Archived chatter message", className: "max-h-[85vh] w-full max-w-3xl overflow-auto rounded-lg bg-background p-6 shadow-xl", onClick: function (e) { return e.stopPropagation(); }, children: [_jsxs("div", { className: "mb-4 flex items-start justify-between", children: [_jsxs("h2", { className: "m-0 text-xl font-semibold", children: ["Archived message #", selectedId] }), _jsx("button", { type: "button", className: "rounded px-2 py-1 hover:bg-muted", onClick: function () { return setSelectedId(null); }, children: "Close" })] }), detailLoading ? _jsx("p", { children: "Loading message\u2026" }) : selected ? _jsxs(_Fragment, { children: [_jsxs("dl", { className: "grid grid-cols-2 gap-3 text-sm", children: [_jsx("dt", { children: "Entity" }), _jsx("dd", { children: selected.modelDisplayName || selected.coModelName }), _jsx("dt", { children: "Entity ID" }), _jsx("dd", { children: selected.coModelEntityId }), _jsx("dt", { children: "Date" }), _jsx("dd", { children: selected.createdAt ? new Date(selected.createdAt).toLocaleString() : '—' }), _jsx("dt", { children: "User" }), _jsx("dd", { children: ((_d = selected.user) === null || _d === void 0 ? void 0 : _d.fullName) || 'System' }), _jsx("dt", { children: "Subtype" }), _jsx("dd", { children: selected.messageSubType })] }), _jsx("h3", { className: "mt-5 text-base font-semibold", children: "Message" }), _jsx("pre", { className: "whitespace-pre-wrap break-words rounded bg-muted p-3 text-sm", children: selected.messageBody || '' }), !!((_e = selected.chatterMessageDetails) === null || _e === void 0 ? void 0 : _e.length) && _jsxs(_Fragment, { children: [_jsx("h3", { className: "mt-5 text-base font-semibold", children: "Change details" }), _jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full text-left text-sm", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { className: "p-2", children: "Field" }), _jsx("th", { className: "p-2", children: "Previous" }), _jsx("th", { className: "p-2", children: "Current" })] }) }), _jsx("tbody", { children: selected.chatterMessageDetails.map(function (detail, index) { var _a, _b, _c, _d, _e; return _jsxs("tr", { className: "border-t", children: [_jsx("td", { className: "p-2", children: detail.fieldDisplayName || detail.fieldName }), _jsx("td", { className: "p-2", children: (_b = (_a = detail.oldValueDisplay) !== null && _a !== void 0 ? _a : detail.oldValue) !== null && _b !== void 0 ? _b : '—' }), _jsx("td", { className: "p-2", children: (_d = (_c = detail.newValueDisplay) !== null && _c !== void 0 ? _c : detail.newValue) !== null && _d !== void 0 ? _d : '—' })] }, (_e = detail.id) !== null && _e !== void 0 ? _e : index); }) })] }) })] })] }) : _jsx("p", { role: "alert", children: "Could not load this archived message." })] }) })] });
207
+ var emptyMessage = isLoading
208
+ ? _jsxs("span", { className: "inline-flex items-center justify-center gap-2", children: [_jsx(Loader2, { className: "animate-spin", size: 16 }), "Loading archived messages\u2026"] })
209
+ : isError
210
+ ? _jsx("span", { role: "alert", className: "text-red-600", children: "Unable to load archived messages. Check the archive store connection and try again." })
211
+ : 'No archived messages found';
212
+ return (_jsxs("div", { className: "page-parent-wrapper solid-list-page-wrapper flex h-full min-h-0 overflow-hidden", children: [_jsx("div", { className: "solid-list-content flex min-w-0 flex-grow-1 flex-col", children: _jsxs("div", { className: "solid-list-surface flex min-h-0 flex-1 flex-col", children: [_jsx("div", { className: "page-header solid-list-toolbar flex-col", children: _jsxs("section", { className: "solid-list-toolbar-left grid w-full grid-cols-1 items-end gap-3 sm:grid-cols-2 xl:grid-cols-7", "aria-label": "Archived message filters", children: [_jsxs("label", { className: "flex min-w-0 flex-col gap-1 text-sm", children: ["Entity", _jsx(SolidAutocomplete, { dropdown: true, forceSelection: true, field: "label", value: filters.entity, suggestions: modelOptions, completeMethod: completeModels, onChange: function (event) { return updateFilter('entity', event.value); }, placeholder: "All entities", className: "w-full solid-standard-autocomplete", inputClassName: "w-full solid-filter-compact-control", emptyMessage: "No models found" })] }), _jsxs("label", { className: "flex min-w-0 flex-col gap-1 text-sm", children: ["Entity ID", _jsx("input", { className: "solid-input w-full solid-filter-compact-control", type: "text", value: filters.entityId, onChange: function (event) { return updateFilter('entityId', event.target.value); }, placeholder: "Any entity ID" })] }), _jsxs("label", { className: "flex min-w-0 flex-col gap-1 text-sm", children: ["Message type", _jsx("select", { className: "solid-input w-full solid-filter-compact-control", value: filters.messageType, onChange: function (event) { return updateFilter('messageType', event.target.value); }, children: MESSAGE_TYPES.map(function (option) { return _jsx("option", { value: option.value, children: option.label }, option.value || 'all'); }) })] }), _jsxs("label", { className: "flex min-w-0 flex-col gap-1 text-sm", children: ["Message subtype", _jsx("select", { className: "solid-input w-full solid-filter-compact-control", value: filters.messageSubType, onChange: function (event) { return updateFilter('messageSubType', event.target.value); }, children: MESSAGE_SUBTYPES.map(function (option) { return _jsx("option", { value: option.value, children: option.label }, option.value || 'all'); }) })] }), _jsxs("label", { className: "flex min-w-0 flex-col gap-1 text-sm", children: ["Changed by", _jsx(SolidAutocomplete, { dropdown: true, forceSelection: true, field: "label", value: filters.user, suggestions: userOptions, completeMethod: completeUsers, onChange: function (event) { return updateFilter('user', event.value); }, placeholder: "Any user", className: "w-full solid-standard-autocomplete", inputClassName: "w-full solid-filter-compact-control", emptyMessage: "No users found" })] }), _jsxs("label", { className: "flex min-w-0 flex-col gap-1 text-sm", children: ["From", _jsx("input", { className: "solid-input w-full solid-filter-compact-control", type: "date", value: filters.from, onChange: function (event) { return updateFilter('from', event.target.value); } })] }), _jsxs("label", { className: "flex min-w-0 flex-col gap-1 text-sm", children: ["To", _jsx("input", { className: "solid-input w-full solid-filter-compact-control", type: "date", value: filters.to, onChange: function (event) { return updateFilter('to', event.target.value); } })] })] }) }), (data === null || data === void 0 ? void 0 : data.available) === false ? (_jsxs("section", { className: "m-4 rounded-md border border-border/60 bg-background p-6 text-center", role: "status", children: [_jsx("h2", { className: "m-0 text-base font-semibold", children: "Chatter archival is not enabled" }), _jsx("p", { className: "mb-0 mt-2 text-sm text-muted-foreground", children: "Configure and register an IChatterMessageArchive provider in the consuming project to archive and browse messages." })] })) : (_jsx(_Fragment, { children: _jsx("div", { className: "solid-datatable-wrapper solid-list-table-area min-h-0 flex-1 overflow-hidden", children: _jsxs(SolidDataTable, { value: records, dataKey: "id", rows: rows, first: first, totalRecords: (_c = meta.totalRecords) !== null && _c !== void 0 ? _c : records.length, rowsPerPageOptions: PAGE_SIZE_OPTIONS, onPage: function (event) {
213
+ setFirst(event.first);
214
+ setRows(event.rows);
215
+ }, emptyMessage: emptyMessage, viewportHeight: "100%", rowClassName: function () { return 'cursor-pointer'; }, onRowClick: function (event) { return openRecord(event.data.id); }, currentPageReportTemplate: "{first} - {last} of {totalRecords}", children: [_jsx(Column, { header: "Date", body: function (message) { return message.createdAt ? new Date(message.createdAt).toLocaleString() : '—'; } }), _jsx(Column, { header: "Entity", body: function (message) { return message.modelDisplayName || message.coModelName || '—'; } }), _jsx(Column, { header: "Entity ID", body: function (message) { var _a; return (_a = message.coModelEntityId) !== null && _a !== void 0 ? _a : '—'; } }), _jsx(Column, { header: "Type", body: function (message) { return message.messageType || '—'; } }), _jsx(Column, { header: "Subtype", body: function (message) { return message.messageSubType || '—'; } }), _jsx(Column, { header: "Changed by", body: function (message) { var _a; return ((_a = message.user) === null || _a === void 0 ? void 0 : _a.fullName) || 'System'; } }), _jsx(Column, { header: "Message", body: function (message) { return _jsx("span", { className: "line-clamp-2 min-w-48", children: message.messageBody || 'View message details' }); } })] }) }) }))] }) }), selectedId !== null && (_jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/40 p-4", role: "presentation", onClick: function () { return setSelectedId(null); }, children: _jsxs("section", { role: "dialog", "aria-modal": "true", "aria-label": "Archived chatter message", className: "max-h-[85vh] w-full max-w-3xl overflow-auto rounded-lg bg-background p-6 shadow-xl", onClick: function (event) { return event.stopPropagation(); }, children: [_jsxs("div", { className: "mb-4 flex items-start justify-between", children: [_jsxs("h2", { className: "m-0 text-xl font-semibold", children: ["Archived message #", selectedId] }), _jsx("button", { type: "button", className: "rounded px-2 py-1 hover:bg-muted", onClick: function () { return setSelectedId(null); }, children: "Close" })] }), detailLoading ? _jsx("p", { children: "Loading message\u2026" }) : selected ? _jsxs(_Fragment, { children: [_jsxs("dl", { className: "grid grid-cols-2 gap-3 text-sm", children: [_jsx("dt", { children: "Entity" }), _jsx("dd", { children: selected.modelDisplayName || selected.coModelName }), _jsx("dt", { children: "Entity ID" }), _jsx("dd", { children: selected.coModelEntityId }), _jsx("dt", { children: "Date" }), _jsx("dd", { children: selected.createdAt ? new Date(selected.createdAt).toLocaleString() : '—' }), _jsx("dt", { children: "Changed by" }), _jsx("dd", { children: ((_d = selected.user) === null || _d === void 0 ? void 0 : _d.fullName) || 'System' }), _jsx("dt", { children: "Type" }), _jsx("dd", { children: selected.messageType }), _jsx("dt", { children: "Subtype" }), _jsx("dd", { children: selected.messageSubType })] }), _jsx("h3", { className: "mt-5 text-base font-semibold", children: "Message" }), _jsx("pre", { className: "whitespace-pre-wrap break-words rounded bg-muted p-3 text-sm", children: selected.messageBody || '' }), !!((_e = selected.chatterMessageDetails) === null || _e === void 0 ? void 0 : _e.length) && _jsxs(_Fragment, { children: [_jsx("h3", { className: "mt-5 text-base font-semibold", children: "Change details" }), _jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full text-left text-sm", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { className: "p-2", children: "Field" }), _jsx("th", { className: "p-2", children: "Previous" }), _jsx("th", { className: "p-2", children: "Current" })] }) }), _jsx("tbody", { children: selected.chatterMessageDetails.map(function (detail, index) {
216
+ var _a, _b, _c, _d, _e;
217
+ return _jsxs("tr", { className: "border-t", children: [_jsx("td", { className: "p-2", children: detail.fieldDisplayName || detail.fieldName }), _jsx("td", { className: "p-2", children: (_b = (_a = detail.oldValueDisplay) !== null && _a !== void 0 ? _a : detail.oldValue) !== null && _b !== void 0 ? _b : '—' }), _jsx("td", { className: "p-2", children: (_d = (_c = detail.newValueDisplay) !== null && _c !== void 0 ? _c : detail.newValue) !== null && _d !== void 0 ? _d : '—' })] }, (_e = detail.id) !== null && _e !== void 0 ? _e : index);
218
+ }) })] }) })] })] }) : _jsx("p", { role: "alert", children: "Could not load this archived message." })] }) }))] }));
107
219
  }
108
220
  //# sourceMappingURL=ArchivedChatterMessagesPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ArchivedChatterMessagesPage.js","sourceRoot":"","sources":["../../../../../src/routes/pages/admin/core/ArchivedChatterMessagesPage.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport qs from 'qs';\nimport { ChevronLeft, ChevronRight, Loader2 } from 'lucide-react';\nimport { SolidButton } from '../../../../components/shad-cn-ui';\nimport { useGetArchivedChatterMessagesQuery, useLazyGetArchivedChatterMessageQuery } from '../../../../redux/api/solidChatterMessageApi';\n\nconst PAGE_SIZE = 25;\ntype Filters = { entityName: string; entityId: string; messageType: string; messageSubType: string; user: string; from: string; to: string };\n\nexport function ArchivedChatterMessagesPage() {\n const [filters, setFilters] = React.useState<Filters>({ entityName: '', entityId: '', messageType: '', messageSubType: '', user: '', from: '', to: '' });\n const [offset, setOffset] = React.useState(0);\n const [selectedId, setSelectedId] = React.useState<number | null>(null);\n\n const queryString = React.useMemo(() => {\n const query: any = { limit: PAGE_SIZE, offset };\n const where: Record<string, any> = {};\n if (filters.entityName.trim()) where.coModelName = { $containsi: filters.entityName.trim() };\n if (filters.entityId.trim() && Number.isFinite(Number(filters.entityId))) where.coModelEntityId = { $eq: Number(filters.entityId) };\n if (filters.messageType) where.messageType = { $eq: filters.messageType };\n if (filters.messageSubType.trim()) where.messageSubType = { $containsi: filters.messageSubType.trim() };\n if (filters.user.trim()) where.user = { fullName: { $containsi: filters.user.trim() } };\n if (filters.from || filters.to) {\n where.createdAt = {};\n if (filters.from) where.createdAt.$gte = new Date(filters.from).toISOString();\n if (filters.to) where.createdAt.$lte = new Date(filters.to).toISOString();\n }\n if (Object.keys(where).length) query.filters = where;\n query.sort = ['createdAt:DESC'];\n return qs.stringify(query, { encodeValuesOnly: true });\n }, [filters, offset]);\n\n const { data, isLoading, isFetching, error } = useGetArchivedChatterMessagesQuery(queryString);\n const [fetchOne, { data: detailData, isFetching: detailLoading }] = useLazyGetArchivedChatterMessageQuery();\n const records = data?.records ?? [];\n const meta = data?.meta ?? {};\n\n const openRecord = async (id: number) => {\n setSelectedId(id);\n await fetchOne(id);\n };\n const selected = detailData?.record;\n\n return <main className=\"mx-auto flex w-full max-w-7xl flex-col gap-5 p-6\">\n <header>\n <h1 className=\"m-0 text-2xl font-semibold\">Archived Messages</h1>\n <p className=\"mt-1 text-sm text-muted-foreground\">Search chatter messages moved to the configured archive store.</p>\n </header>\n\n {data?.available === false ? <section className=\"rounded-lg border p-6\" role=\"status\">\n <h2 className=\"m-0 text-lg font-semibold\">Chatter archival is not enabled</h2>\n <p className=\"mb-0 mt-2 text-sm text-muted-foreground\">Configure and register an IChatterMessageArchive provider in the consuming project to archive and browse messages.</p>\n </section> : <>\n <section className=\"grid grid-cols-1 gap-3 rounded-lg border p-4 sm:grid-cols-2 lg:grid-cols-7\" aria-label=\"Archive filters\">\n <label className=\"flex flex-col gap-1 text-sm\">Entity name<input className=\"rounded border px-3 py-2\" value={filters.entityName} onChange={e => { setOffset(0); setFilters({ ...filters, entityName: e.target.value }); }} placeholder=\"e.g. customer\" /></label>\n <label className=\"flex flex-col gap-1 text-sm\">Entity ID<input className=\"rounded border px-3 py-2\" inputMode=\"numeric\" value={filters.entityId} onChange={e => { setOffset(0); setFilters({ ...filters, entityId: e.target.value }); }} placeholder=\"Record ID\" /></label>\n <label className=\"flex flex-col gap-1 text-sm\">Message type<select className=\"rounded border px-3 py-2\" value={filters.messageType} onChange={e => { setOffset(0); setFilters({ ...filters, messageType: e.target.value }); }}><option value=\"\">All types</option><option value=\"audit\">Audit</option><option value=\"custom\">Custom</option></select></label>\n <label className=\"flex flex-col gap-1 text-sm\">Message subtype<input className=\"rounded border px-3 py-2\" value={filters.messageSubType} onChange={e => { setOffset(0); setFilters({ ...filters, messageSubType: e.target.value }); }} placeholder=\"e.g. audit_update\" /></label>\n <label className=\"flex flex-col gap-1 text-sm\">Changed by<input className=\"rounded border px-3 py-2\" value={filters.user} onChange={e => { setOffset(0); setFilters({ ...filters, user: e.target.value }); }} placeholder=\"User name\" /></label>\n <label className=\"flex flex-col gap-1 text-sm\">From<input className=\"rounded border px-3 py-2\" type=\"datetime-local\" value={filters.from} onChange={e => { setOffset(0); setFilters({ ...filters, from: e.target.value }); }} /></label>\n <label className=\"flex flex-col gap-1 text-sm\">To<input className=\"rounded border px-3 py-2\" type=\"datetime-local\" value={filters.to} onChange={e => { setOffset(0); setFilters({ ...filters, to: e.target.value }); }} /></label>\n </section>\n\n {error && <p role=\"alert\" className=\"text-sm text-red-600\">Unable to load archived messages. Check provider availability and try again.</p>}\n <section className=\"overflow-hidden rounded-lg border\">\n {isLoading ? <div className=\"flex items-center gap-2 p-8\"><Loader2 className=\"animate-spin\" size={18} />Loading archived messages…</div> : records.length === 0 ? <p className=\"p-8 text-center text-sm text-muted-foreground\">No archived messages match these filters.</p> : <div className=\"overflow-x-auto\">\n <table className=\"w-full border-collapse text-left text-sm\">\n <thead className=\"bg-muted/50\"><tr><th className=\"p-3\">Date</th><th className=\"p-3\">Entity</th><th className=\"p-3\">Entity ID</th><th className=\"p-3\">Type</th><th className=\"p-3\">User</th><th className=\"p-3\">Message</th></tr></thead>\n <tbody>{records.map((message: any) => <tr key={message.id} className=\"border-t hover:bg-muted/30\">\n <td className=\"whitespace-nowrap p-3\">{message.createdAt ? new Date(message.createdAt).toLocaleString() : '—'}</td>\n <td className=\"p-3\">{message.modelDisplayName || message.coModelName}</td><td className=\"p-3\">{message.coModelEntityId}</td>\n <td className=\"p-3\">{message.messageSubType || message.messageType}</td><td className=\"p-3\">{message.user?.fullName || 'System'}</td>\n <td className=\"max-w-md p-3\"><button type=\"button\" className=\"text-left text-primary underline\" onClick={() => openRecord(message.id)}>{message.messageBody || 'View message'}</button></td>\n </tr>)}</tbody>\n </table>\n </div>}\n </section>\n\n <footer className=\"flex items-center justify-between\">\n <span className=\"text-sm text-muted-foreground\">{meta.totalRecords ?? records.length} archived messages{isFetching ? ' · Updating…' : ''}</span>\n <div className=\"flex gap-2\"><SolidButton variant=\"outline\" disabled={offset === 0 || isFetching} onClick={() => setOffset(Math.max(0, offset - PAGE_SIZE))}><ChevronLeft size={16} />Previous</SolidButton><SolidButton variant=\"outline\" disabled={records.length < PAGE_SIZE || isFetching} onClick={() => setOffset(offset + PAGE_SIZE)}>Next<ChevronRight size={16} /></SolidButton></div>\n </footer>\n </>}\n\n {selectedId !== null && <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/40 p-4\" role=\"presentation\" onClick={() => setSelectedId(null)}>\n <section role=\"dialog\" aria-modal=\"true\" aria-label=\"Archived chatter message\" className=\"max-h-[85vh] w-full max-w-3xl overflow-auto rounded-lg bg-background p-6 shadow-xl\" onClick={e => e.stopPropagation()}>\n <div className=\"mb-4 flex items-start justify-between\"><h2 className=\"m-0 text-xl font-semibold\">Archived message #{selectedId}</h2><button type=\"button\" className=\"rounded px-2 py-1 hover:bg-muted\" onClick={() => setSelectedId(null)}>Close</button></div>\n {detailLoading ? <p>Loading message…</p> : selected ? <>\n <dl className=\"grid grid-cols-2 gap-3 text-sm\"><dt>Entity</dt><dd>{selected.modelDisplayName || selected.coModelName}</dd><dt>Entity ID</dt><dd>{selected.coModelEntityId}</dd><dt>Date</dt><dd>{selected.createdAt ? new Date(selected.createdAt).toLocaleString() : '—'}</dd><dt>User</dt><dd>{selected.user?.fullName || 'System'}</dd><dt>Subtype</dt><dd>{selected.messageSubType}</dd></dl>\n <h3 className=\"mt-5 text-base font-semibold\">Message</h3><pre className=\"whitespace-pre-wrap break-words rounded bg-muted p-3 text-sm\">{selected.messageBody || ''}</pre>\n {!!selected.chatterMessageDetails?.length && <><h3 className=\"mt-5 text-base font-semibold\">Change details</h3><div className=\"overflow-x-auto\"><table className=\"w-full text-left text-sm\"><thead><tr><th className=\"p-2\">Field</th><th className=\"p-2\">Previous</th><th className=\"p-2\">Current</th></tr></thead><tbody>{selected.chatterMessageDetails.map((detail: any, index: number) => <tr className=\"border-t\" key={detail.id ?? index}><td className=\"p-2\">{detail.fieldDisplayName || detail.fieldName}</td><td className=\"p-2\">{detail.oldValueDisplay ?? detail.oldValue ?? '—'}</td><td className=\"p-2\">{detail.newValueDisplay ?? detail.newValue ?? '—'}</td></tr>)}</tbody></table></div></>}\n </> : <p role=\"alert\">Could not load this archived message.</p>}\n </section>\n </div>}\n </main>;\n}\n"]}
1
+ {"version":3,"file":"ArchivedChatterMessagesPage.js","sourceRoot":"","sources":["../../../../../src/routes/pages/admin/core/ArchivedChatterMessagesPage.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport qs from 'qs';\nimport { Loader2 } from 'lucide-react';\nimport { SolidAutocomplete } from '../../../../components/shad-cn-ui/SolidAutocomplete';\nimport { Column, SolidDataTable } from '../../../../components/core/list/SolidDataTable';\nimport { useLazyGetModelsQuery } from '../../../../redux/api/modelApi';\nimport { createSolidEntityApi } from '../../../../redux/api/solidEntityApi';\nimport { useGetArchivedChatterMessagesQuery, useLazyGetArchivedChatterMessageQuery } from '../../../../redux/api/solidChatterMessageApi';\n\nconst DEFAULT_PAGE_SIZE = 25;\nconst PAGE_SIZE_OPTIONS = [10, 25, 50, 100];\nconst MESSAGE_TYPES = [\n { label: 'All types', value: '' },\n { label: 'Audit', value: 'audit' },\n { label: 'Custom', value: 'custom' },\n];\nconst MESSAGE_SUBTYPES = [\n { label: 'All subtypes', value: '' },\n { label: 'Audit insert', value: 'audit_insert' },\n { label: 'Audit update', value: 'audit_update' },\n { label: 'Audit delete', value: 'audit_delete' },\n { label: 'Custom', value: 'custom' },\n { label: 'Note', value: 'note' },\n { label: 'Task', value: 'task' },\n];\n\ntype AutocompleteOption = { label: string; value: string | number };\ntype ArchiveFilters = {\n entity: AutocompleteOption | null;\n entityId: string;\n messageType: string;\n messageSubType: string;\n user: AutocompleteOption | null;\n from: string;\n to: string;\n};\n\nconst userApi = createSolidEntityApi('User');\n\nconst buildQueryString = (query: Record<string, unknown>) =>\n qs.stringify(query, { encodeValuesOnly: true });\n\nfunction toLocalDateBoundary(value: string, endOfDay = false): string {\n const date = new Date(`${value}T${endOfDay ? '23:59:59.999' : '00:00:00'}`);\n return date.toISOString();\n}\n\nexport function ArchivedChatterMessagesPage() {\n const [filters, setFilters] = React.useState<ArchiveFilters>({\n entity: null,\n entityId: '',\n messageType: '',\n messageSubType: '',\n user: null,\n from: '',\n to: '',\n });\n const [first, setFirst] = React.useState(0);\n const [rows, setRows] = React.useState(DEFAULT_PAGE_SIZE);\n const [selectedId, setSelectedId] = React.useState<number | null>(null);\n const [modelOptions, setModelOptions] = React.useState<AutocompleteOption[]>([]);\n const [userOptions, setUserOptions] = React.useState<AutocompleteOption[]>([]);\n\n const [getModels, { data: modelsData }] = useLazyGetModelsQuery();\n const [getUsers] = userApi.useLazyGetSolidEntitiesQuery();\n const {\n data,\n isLoading,\n isError,\n } = useGetArchivedChatterMessagesQuery(React.useMemo(() => {\n const query: Record<string, unknown> = {\n limit: rows,\n offset: first,\n sort: ['createdAt:DESC'],\n };\n const where: Record<string, any> = {};\n if (filters.entity?.value) where.coModelName = { $eq: filters.entity.value };\n if (filters.entityId.trim() && Number.isFinite(Number(filters.entityId))) {\n where.coModelEntityId = { $eq: Number(filters.entityId) };\n }\n if (filters.messageType) where.messageType = { $eq: filters.messageType };\n if (filters.messageSubType) where.messageSubType = { $eq: filters.messageSubType };\n if (filters.user?.value) where.user = { id: { $eq: filters.user.value } };\n if (filters.from || filters.to) {\n where.createdAt = {};\n if (filters.from) where.createdAt.$gte = toLocalDateBoundary(filters.from);\n if (filters.to) where.createdAt.$lte = toLocalDateBoundary(filters.to, true);\n }\n if (Object.keys(where).length) query.filters = where;\n return buildQueryString(query);\n }, [filters, first, rows]));\n\n const [fetchOne, { currentData: detailData, isFetching: detailLoading }] = useLazyGetArchivedChatterMessageQuery();\n const records = data?.records ?? [];\n const meta = data?.meta ?? {};\n React.useEffect(() => {\n getModels('offset=0&limit=1000&sort[0]=displayName%3AASC');\n }, [getModels]);\n\n React.useEffect(() => {\n const options = (modelsData?.records ?? [])\n .filter((model: any) => model?.singularName)\n .map((model: any) => ({\n label: model.displayName && model.displayName !== model.singularName\n ? `${model.displayName} (${model.singularName})`\n : model.singularName,\n value: model.singularName,\n }));\n setModelOptions(options);\n }, [modelsData]);\n\n const updateFilter = <K extends keyof ArchiveFilters>(key: K, value: ArchiveFilters[K]) => {\n setFirst(0);\n setFilters(current => ({ ...current, [key]: value }));\n };\n\n const completeModels = ({ query }: { query: string }) => {\n const normalizedQuery = query.trim().toLocaleLowerCase();\n setModelOptions((modelsData?.records ?? [])\n .filter((model: any) => model?.singularName)\n .filter((model: any) => !normalizedQuery ||\n `${model.displayName ?? ''} ${model.singularName}`.toLocaleLowerCase().includes(normalizedQuery))\n .slice(0, 25)\n .map((model: any) => ({\n label: model.displayName && model.displayName !== model.singularName\n ? `${model.displayName} (${model.singularName})`\n : model.singularName,\n value: model.singularName,\n })));\n };\n\n const completeUsers = async ({ query }: { query: string }) => {\n const queryString = buildQueryString({\n offset: 0,\n limit: 10,\n sort: ['fullName:ASC'],\n filters: query.trim() ? { fullName: { $containsi: query.trim() } } : {},\n });\n const response = await getUsers(queryString);\n const users = response.data?.records ?? [];\n setUserOptions(users.map((user: any) => ({\n label: user.fullName || user.username || `User ${user.id}`,\n value: user.id,\n })));\n };\n\n const openRecord = (id: number) => {\n setSelectedId(id);\n void fetchOne(id);\n };\n\n const selected = detailData?.record;\n const emptyMessage = isLoading\n ? <span className=\"inline-flex items-center justify-center gap-2\"><Loader2 className=\"animate-spin\" size={16} />Loading archived messages…</span>\n : isError\n ? <span role=\"alert\" className=\"text-red-600\">Unable to load archived messages. Check the archive store connection and try again.</span>\n : 'No archived messages found';\n\n return (\n <div className=\"page-parent-wrapper solid-list-page-wrapper flex h-full min-h-0 overflow-hidden\">\n <div className=\"solid-list-content flex min-w-0 flex-grow-1 flex-col\">\n <div className=\"solid-list-surface flex min-h-0 flex-1 flex-col\">\n <div className=\"page-header solid-list-toolbar flex-col\">\n <section className=\"solid-list-toolbar-left grid w-full grid-cols-1 items-end gap-3 sm:grid-cols-2 xl:grid-cols-7\" aria-label=\"Archived message filters\">\n <label className=\"flex min-w-0 flex-col gap-1 text-sm\">\n Entity\n <SolidAutocomplete\n dropdown\n forceSelection\n field=\"label\"\n value={filters.entity}\n suggestions={modelOptions}\n completeMethod={completeModels}\n onChange={(event) => updateFilter('entity', event.value)}\n placeholder=\"All entities\"\n className=\"w-full solid-standard-autocomplete\"\n inputClassName=\"w-full solid-filter-compact-control\"\n emptyMessage=\"No models found\"\n />\n </label>\n <label className=\"flex min-w-0 flex-col gap-1 text-sm\">\n Entity ID\n <input\n className=\"solid-input w-full solid-filter-compact-control\"\n type=\"text\"\n value={filters.entityId}\n onChange={(event) => updateFilter('entityId', event.target.value)}\n placeholder=\"Any entity ID\"\n />\n </label>\n <label className=\"flex min-w-0 flex-col gap-1 text-sm\">\n Message type\n <select className=\"solid-input w-full solid-filter-compact-control\" value={filters.messageType} onChange={(event) => updateFilter('messageType', event.target.value)}>\n {MESSAGE_TYPES.map(option => <option key={option.value || 'all'} value={option.value}>{option.label}</option>)}\n </select>\n </label>\n <label className=\"flex min-w-0 flex-col gap-1 text-sm\">\n Message subtype\n <select className=\"solid-input w-full solid-filter-compact-control\" value={filters.messageSubType} onChange={(event) => updateFilter('messageSubType', event.target.value)}>\n {MESSAGE_SUBTYPES.map(option => <option key={option.value || 'all'} value={option.value}>{option.label}</option>)}\n </select>\n </label>\n <label className=\"flex min-w-0 flex-col gap-1 text-sm\">\n Changed by\n <SolidAutocomplete\n dropdown\n forceSelection\n field=\"label\"\n value={filters.user}\n suggestions={userOptions}\n completeMethod={completeUsers}\n onChange={(event) => updateFilter('user', event.value)}\n placeholder=\"Any user\"\n className=\"w-full solid-standard-autocomplete\"\n inputClassName=\"w-full solid-filter-compact-control\"\n emptyMessage=\"No users found\"\n />\n </label>\n <label className=\"flex min-w-0 flex-col gap-1 text-sm\">\n From\n <input className=\"solid-input w-full solid-filter-compact-control\" type=\"date\" value={filters.from} onChange={(event) => updateFilter('from', event.target.value)} />\n </label>\n <label className=\"flex min-w-0 flex-col gap-1 text-sm\">\n To\n <input className=\"solid-input w-full solid-filter-compact-control\" type=\"date\" value={filters.to} onChange={(event) => updateFilter('to', event.target.value)} />\n </label>\n </section>\n </div>\n\n {data?.available === false ? (\n <section className=\"m-4 rounded-md border border-border/60 bg-background p-6 text-center\" role=\"status\">\n <h2 className=\"m-0 text-base font-semibold\">Chatter archival is not enabled</h2>\n <p className=\"mb-0 mt-2 text-sm text-muted-foreground\">Configure and register an IChatterMessageArchive provider in the consuming project to archive and browse messages.</p>\n </section>\n ) : (\n <>\n <div className=\"solid-datatable-wrapper solid-list-table-area min-h-0 flex-1 overflow-hidden\">\n <SolidDataTable\n value={records}\n dataKey=\"id\"\n rows={rows}\n first={first}\n totalRecords={meta.totalRecords ?? records.length}\n rowsPerPageOptions={PAGE_SIZE_OPTIONS}\n onPage={(event) => {\n setFirst(event.first);\n setRows(event.rows);\n }}\n emptyMessage={emptyMessage}\n viewportHeight=\"100%\"\n rowClassName={() => 'cursor-pointer'}\n onRowClick={(event) => openRecord(event.data.id)}\n currentPageReportTemplate=\"{first} - {last} of {totalRecords}\"\n >\n <Column header=\"Date\" body={(message: any) => message.createdAt ? new Date(message.createdAt).toLocaleString() : '—'} />\n <Column header=\"Entity\" body={(message: any) => message.modelDisplayName || message.coModelName || '—'} />\n <Column header=\"Entity ID\" body={(message: any) => message.coModelEntityId ?? '—'} />\n <Column header=\"Type\" body={(message: any) => message.messageType || '—'} />\n <Column header=\"Subtype\" body={(message: any) => message.messageSubType || '—'} />\n <Column header=\"Changed by\" body={(message: any) => message.user?.fullName || 'System'} />\n <Column header=\"Message\" body={(message: any) => <span className=\"line-clamp-2 min-w-48\">{message.messageBody || 'View message details'}</span>} />\n </SolidDataTable>\n </div>\n </>\n )}\n </div>\n </div>\n\n {selectedId !== null && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/40 p-4\" role=\"presentation\" onClick={() => setSelectedId(null)}>\n <section role=\"dialog\" aria-modal=\"true\" aria-label=\"Archived chatter message\" className=\"max-h-[85vh] w-full max-w-3xl overflow-auto rounded-lg bg-background p-6 shadow-xl\" onClick={event => event.stopPropagation()}>\n <div className=\"mb-4 flex items-start justify-between\">\n <h2 className=\"m-0 text-xl font-semibold\">Archived message #{selectedId}</h2>\n <button type=\"button\" className=\"rounded px-2 py-1 hover:bg-muted\" onClick={() => setSelectedId(null)}>Close</button>\n </div>\n {detailLoading ? <p>Loading message…</p> : selected ? <>\n <dl className=\"grid grid-cols-2 gap-3 text-sm\">\n <dt>Entity</dt><dd>{selected.modelDisplayName || selected.coModelName}</dd>\n <dt>Entity ID</dt><dd>{selected.coModelEntityId}</dd>\n <dt>Date</dt><dd>{selected.createdAt ? new Date(selected.createdAt).toLocaleString() : '—'}</dd>\n <dt>Changed by</dt><dd>{selected.user?.fullName || 'System'}</dd>\n <dt>Type</dt><dd>{selected.messageType}</dd>\n <dt>Subtype</dt><dd>{selected.messageSubType}</dd>\n </dl>\n <h3 className=\"mt-5 text-base font-semibold\">Message</h3>\n <pre className=\"whitespace-pre-wrap break-words rounded bg-muted p-3 text-sm\">{selected.messageBody || ''}</pre>\n {!!selected.chatterMessageDetails?.length && <>\n <h3 className=\"mt-5 text-base font-semibold\">Change details</h3>\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-left text-sm\">\n <thead><tr><th className=\"p-2\">Field</th><th className=\"p-2\">Previous</th><th className=\"p-2\">Current</th></tr></thead>\n <tbody>{selected.chatterMessageDetails.map((detail: any, index: number) => <tr className=\"border-t\" key={detail.id ?? index}>\n <td className=\"p-2\">{detail.fieldDisplayName || detail.fieldName}</td>\n <td className=\"p-2\">{detail.oldValueDisplay ?? detail.oldValue ?? '—'}</td>\n <td className=\"p-2\">{detail.newValueDisplay ?? detail.newValue ?? '—'}</td>\n </tr>)}</tbody>\n </table>\n </div>\n </>}\n </> : <p role=\"alert\">Could not load this archived message.</p>}\n </section>\n </div>\n )}\n </div>\n );\n}\n"]}