@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.
- package/dist/components/common/FileReaderExt.d.ts.map +1 -1
- package/dist/components/common/FileReaderExt.js +22 -11
- package/dist/components/common/FileReaderExt.js.map +1 -1
- package/dist/components/common/FileReaderExt.tsx +27 -14
- package/dist/components/common/SocialMediaLogin.d.ts.map +1 -1
- package/dist/components/common/SocialMediaLogin.js +1 -1
- package/dist/components/common/SocialMediaLogin.js.map +1 -1
- package/dist/components/common/SocialMediaLogin.tsx +50 -19
- package/dist/components/common/solid-export.css +75 -0
- package/dist/components/core/common/SolidGenericImport/SolidImport.module.css +71 -0
- package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
- package/dist/components/core/form/SolidFormView.js +14 -0
- package/dist/components/core/form/SolidFormView.js.map +1 -1
- package/dist/components/core/form/SolidFormView.tsx +13 -0
- package/dist/components/core/form/fields/SolidMediaMultipleField.js +3 -3
- package/dist/components/core/form/fields/SolidMediaMultipleField.js.map +1 -1
- package/dist/components/core/form/fields/SolidMediaMultipleField.tsx +3 -3
- package/dist/components/core/form/fields/SolidMediaSingleField.js +2 -2
- package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
- package/dist/components/core/form/fields/SolidMediaSingleField.tsx +2 -2
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.js +2 -2
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.js.map +1 -1
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.tsx +4 -4
- package/dist/components/core/list/columns/SolidMediaSingleColumn.js +1 -1
- package/dist/components/core/list/columns/SolidMediaSingleColumn.js.map +1 -1
- package/dist/components/core/list/columns/SolidMediaSingleColumn.tsx +3 -3
- package/dist/components/core/solid-agent/SolidAgentChat.d.ts +3 -1
- package/dist/components/core/solid-agent/SolidAgentChat.d.ts.map +1 -1
- package/dist/components/core/solid-agent/SolidAgentChat.js +150 -22
- package/dist/components/core/solid-agent/SolidAgentChat.js.map +1 -1
- package/dist/components/core/solid-agent/SolidAgentChat.tsx +76 -15
- package/dist/components/core/solid-agent/SolidAgentEmbedded.d.ts +2 -0
- package/dist/components/core/solid-agent/SolidAgentEmbedded.d.ts.map +1 -1
- package/dist/components/core/solid-agent/SolidAgentEmbedded.js +4 -4
- package/dist/components/core/solid-agent/SolidAgentEmbedded.js.map +1 -1
- package/dist/components/core/solid-agent/SolidAgentEmbedded.tsx +7 -1
- package/dist/components/core/solid-agent/SolidAgentHost.d.ts.map +1 -1
- package/dist/components/core/solid-agent/SolidAgentHost.js +79 -1
- package/dist/components/core/solid-agent/SolidAgentHost.js.map +1 -1
- package/dist/components/core/solid-agent/SolidAgentHost.tsx +69 -2
- package/dist/components/core/solid-agent/agentEvents.d.ts.map +1 -1
- package/dist/components/core/solid-agent/agentEvents.js +1 -3
- package/dist/components/core/solid-agent/agentEvents.js.map +1 -1
- package/dist/components/core/solid-agent/agentEvents.ts +5 -3
- package/dist/components/core/solid-agent/client/agentPublicEvents.d.ts +88 -0
- package/dist/components/core/solid-agent/client/agentPublicEvents.d.ts.map +1 -0
- package/dist/components/core/solid-agent/client/agentPublicEvents.js +26 -0
- package/dist/components/core/solid-agent/client/agentPublicEvents.js.map +1 -0
- package/dist/components/core/solid-agent/client/agentPublicEvents.ts +66 -0
- package/dist/components/core/solid-agent/client/agentRuntime.d.ts +18 -3
- package/dist/components/core/solid-agent/client/agentRuntime.d.ts.map +1 -1
- package/dist/components/core/solid-agent/client/agentRuntime.js +173 -31
- package/dist/components/core/solid-agent/client/agentRuntime.js.map +1 -1
- package/dist/components/core/solid-agent/client/agentRuntime.ts +126 -16
- package/dist/components/core/solid-agent/client/agentSocket.d.ts +3 -0
- package/dist/components/core/solid-agent/client/agentSocket.d.ts.map +1 -1
- package/dist/components/core/solid-agent/client/agentSocket.js +19 -1
- package/dist/components/core/solid-agent/client/agentSocket.js.map +1 -1
- package/dist/components/core/solid-agent/client/agentSocket.ts +11 -1
- package/dist/components/core/solid-agent/client/beforeUserMessageSend.d.ts +9 -0
- package/dist/components/core/solid-agent/client/beforeUserMessageSend.d.ts.map +1 -0
- package/dist/components/core/solid-agent/client/beforeUserMessageSend.js +53 -0
- package/dist/components/core/solid-agent/client/beforeUserMessageSend.js.map +1 -0
- package/dist/components/core/solid-agent/client/beforeUserMessageSend.ts +26 -0
- package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.d.ts.map +1 -1
- package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.js +4 -3
- package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.js.map +1 -1
- package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.tsx +4 -2
- package/dist/components/core/solid-agent/embed/agentEmbedProtocol.d.ts +29 -0
- package/dist/components/core/solid-agent/embed/agentEmbedProtocol.d.ts.map +1 -1
- package/dist/components/core/solid-agent/embed/agentEmbedProtocol.js +45 -2
- package/dist/components/core/solid-agent/embed/agentEmbedProtocol.js.map +1 -1
- package/dist/components/core/solid-agent/embed/agentEmbedProtocol.ts +49 -2
- package/dist/components/core/solid-agent/embed/agentEmbedSamples.d.ts +1 -0
- package/dist/components/core/solid-agent/embed/agentEmbedSamples.d.ts.map +1 -1
- package/dist/components/core/solid-agent/embed/agentEmbedSamples.js +2 -1
- package/dist/components/core/solid-agent/embed/agentEmbedSamples.js.map +1 -1
- package/dist/components/core/solid-agent/embed/agentEmbedSamples.ts +15 -1
- package/dist/components/core/solid-agent/types.d.ts +13 -0
- package/dist/components/core/solid-agent/types.d.ts.map +1 -1
- package/dist/components/core/solid-agent/types.js.map +1 -1
- package/dist/components/core/solid-agent/types.ts +8 -0
- package/dist/components/core/solid-agent/useAgentChat.d.ts +1 -1
- package/dist/components/core/solid-agent/useAgentChat.d.ts.map +1 -1
- package/dist/components/core/solid-agent/useAgentChat.js +7 -4
- package/dist/components/core/solid-agent/useAgentChat.js.map +1 -1
- package/dist/components/core/solid-agent/useAgentChat.ts +9 -5
- package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.d.ts.map +1 -1
- package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.js +12 -4
- package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.js.map +1 -1
- package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.tsx +18 -0
- package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.d.ts +4 -0
- package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.d.ts.map +1 -0
- package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.js +30 -0
- package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.js.map +1 -0
- package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.tsx +41 -0
- package/dist/components/core/solid-agent/widgets/solidChatWidgets.module.css +39 -0
- package/dist/components/shad-cn-ui/SolidCodeEditor.d.ts +2 -1
- package/dist/components/shad-cn-ui/SolidCodeEditor.d.ts.map +1 -1
- package/dist/components/shad-cn-ui/SolidCodeEditor.js +3 -2
- package/dist/components/shad-cn-ui/SolidCodeEditor.js.map +1 -1
- package/dist/components/shad-cn-ui/SolidCodeEditor.tsx +3 -0
- package/dist/helpers/adminViewRefresh.d.ts +13 -0
- package/dist/helpers/adminViewRefresh.d.ts.map +1 -0
- package/dist/helpers/adminViewRefresh.js +14 -0
- package/dist/helpers/adminViewRefresh.js.map +1 -0
- package/dist/helpers/adminViewRefresh.ts +26 -0
- package/dist/helpers/eventBus.d.ts +1 -0
- package/dist/helpers/eventBus.d.ts.map +1 -1
- package/dist/helpers/eventBus.js +1 -0
- package/dist/helpers/eventBus.js.map +1 -1
- package/dist/helpers/eventBus.ts +1 -0
- package/dist/helpers/fileTypeIcon.d.ts.map +1 -1
- package/dist/helpers/fileTypeIcon.js +4 -1
- package/dist/helpers/fileTypeIcon.js.map +1 -1
- package/dist/helpers/fileTypeIcon.tsx +15 -0
- package/dist/helpers/registry.d.ts.map +1 -1
- package/dist/helpers/registry.js +2 -0
- package/dist/helpers/registry.js.map +1 -1
- package/dist/helpers/registry.ts +2 -0
- package/dist/helpers/routePaths.d.ts +13 -0
- package/dist/helpers/routePaths.d.ts.map +1 -1
- package/dist/helpers/routePaths.js +39 -0
- package/dist/helpers/routePaths.js.map +1 -1
- package/dist/helpers/routePaths.ts +48 -0
- package/dist/redux/features/agentSlice.d.ts +2 -1
- package/dist/redux/features/agentSlice.d.ts.map +1 -1
- package/dist/redux/features/agentSlice.js +2 -2
- package/dist/redux/features/agentSlice.js.map +1 -1
- package/dist/redux/features/agentSlice.ts +8 -3
- package/dist/resources/solid-custom.css +42 -0
- package/dist/resources/solid-tailwind-generated.css +1 -1
- package/dist/routes/pages/admin/core/AgentHubModuleField.css +15 -0
- package/dist/routes/pages/admin/core/AgentHubModuleField.d.ts +22 -0
- package/dist/routes/pages/admin/core/AgentHubModuleField.d.ts.map +1 -0
- package/dist/routes/pages/admin/core/AgentHubModuleField.js +42 -0
- package/dist/routes/pages/admin/core/AgentHubModuleField.js.map +1 -0
- package/dist/routes/pages/admin/core/AgentHubModuleField.tsx +54 -0
- package/dist/routes/pages/admin/core/AgentHubTagsField.d.ts +3 -1
- package/dist/routes/pages/admin/core/AgentHubTagsField.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/AgentHubTagsField.js +3 -3
- package/dist/routes/pages/admin/core/AgentHubTagsField.js.map +1 -1
- package/dist/routes/pages/admin/core/AgentHubTagsField.tsx +7 -3
- package/dist/routes/pages/admin/core/AgentRegistryEditorPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/AgentRegistryEditorPage.js +37 -29
- package/dist/routes/pages/admin/core/AgentRegistryEditorPage.js.map +1 -1
- package/dist/routes/pages/admin/core/AgentRegistryEditorPage.tsx +12 -6
- package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.js +22 -15
- package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.js.map +1 -1
- package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.tsx +17 -7
- package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.js +21 -15
- package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.js.map +1 -1
- package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.tsx +16 -9
- package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.js +149 -37
- package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.js.map +1 -1
- package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.tsx +283 -73
- package/dist/routes/pages/admin/core/CardPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/CardPage.js +9 -1
- package/dist/routes/pages/admin/core/CardPage.js.map +1 -1
- package/dist/routes/pages/admin/core/CardPage.tsx +9 -1
- package/dist/routes/pages/admin/core/KanbanPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/KanbanPage.js +9 -1
- package/dist/routes/pages/admin/core/KanbanPage.js.map +1 -1
- package/dist/routes/pages/admin/core/KanbanPage.tsx +9 -1
- package/dist/routes/pages/admin/core/ListPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/ListPage.js +10 -1
- package/dist/routes/pages/admin/core/ListPage.js.map +1 -1
- package/dist/routes/pages/admin/core/ListPage.tsx +10 -1
- package/dist/routes/pages/admin/core/TreePage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/TreePage.js +9 -1
- package/dist/routes/pages/admin/core/TreePage.js.map +1 -1
- package/dist/routes/pages/admin/core/TreePage.tsx +9 -1
- package/dist/routes/pages/embed/AgentEmbedPage.d.ts.map +1 -1
- package/dist/routes/pages/embed/AgentEmbedPage.js +67 -4
- package/dist/routes/pages/embed/AgentEmbedPage.js.map +1 -1
- package/dist/routes/pages/embed/AgentEmbedPage.tsx +61 -4
- 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 {
|
|
52
|
-
import {
|
|
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
|
|
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({
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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.
|
|
65
|
-
where.coModelName = { $
|
|
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
|
|
71
|
-
where.messageSubType = { $
|
|
72
|
-
if (filters.user.
|
|
73
|
-
where.user = {
|
|
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 =
|
|
123
|
+
where.createdAt.$gte = toLocalDateBoundary(filters.from);
|
|
78
124
|
if (filters.to)
|
|
79
|
-
where.createdAt.$lte =
|
|
125
|
+
where.createdAt.$lte = toLocalDateBoundary(filters.to, true);
|
|
80
126
|
}
|
|
81
127
|
if (Object.keys(where).length)
|
|
82
128
|
query.filters = where;
|
|
83
|
-
query
|
|
84
|
-
|
|
85
|
-
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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"]}
|