@localazy/strapi-plugin 1.0.11 → 1.1.1
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/_chunks/{FetchIdentity-BB5V79aG.js → FetchIdentity-CevvxeEj.js} +73 -46
- package/dist/_chunks/{FetchIdentity-CkL7UYRt.mjs → FetchIdentity-DeThazz9.mjs} +43 -16
- package/dist/_chunks/{LanguagesSelector-DDjJ90sz.js → LanguagesSelector-BExpl4Vx.js} +15 -3
- package/dist/_chunks/{LanguagesSelector-BUSLrXE9.mjs → LanguagesSelector-D62gLZsM.mjs} +15 -3
- package/dist/_chunks/{LocalazyApp-H3kYTy7p.mjs → LocalazyApp-Czkb4s5J.mjs} +796 -69
- package/dist/_chunks/{LocalazyApp-BzcT9jmq.js → LocalazyApp-DIcO748C.js} +796 -67
- package/dist/_chunks/{LocalazyContentTransferSetup-rrXuAqRA.js → LocalazyContentTransferSetup-DAyZdwi9.js} +13 -10
- package/dist/_chunks/{LocalazyContentTransferSetup-BrLho135.mjs → LocalazyContentTransferSetup-Dx0Z6DXc.mjs} +13 -10
- package/dist/_chunks/{LocalazyGlobalSettings-NhjPAqfZ.mjs → LocalazyGlobalSettings-DWMBqlN4.mjs} +149 -12
- package/dist/_chunks/{LocalazyGlobalSettings-Dj93M25t.js → LocalazyGlobalSettings-DjrXGVxl.js} +148 -11
- package/dist/_chunks/{LocalazyPanel-DokDDR0T.mjs → LocalazyPanel-B-0HBTL_.mjs} +4 -4
- package/dist/_chunks/{LocalazyPanel-C1r8FU9w.js → LocalazyPanel-nBOpQo5B.js} +4 -4
- package/dist/_chunks/{LocalazyStatusColumn-CaAL-caH.mjs → LocalazyStatusColumn-CpO3yccG.mjs} +9 -7
- package/dist/_chunks/{LocalazyStatusColumn-D50ZkXY-.js → LocalazyStatusColumn-cGsUDMlX.js} +9 -7
- package/dist/_chunks/{RequireLocalazyAuth-C9qzj01C.js → RequireLocalazyAuth-56K8HUNR.js} +4 -4
- package/dist/_chunks/{RequireLocalazyAuth-c-nP7C0A.mjs → RequireLocalazyAuth-Dh-mAMcg.mjs} +4 -4
- package/dist/_chunks/{entry-exclusion-service-Db6jzNVM.mjs → entry-exclusion-service-Dm5_iP7I.mjs} +1 -1
- package/dist/_chunks/{entry-exclusion-service-0Ul5AWi-.js → entry-exclusion-service-Rf4Tr0zW.js} +1 -1
- package/dist/_chunks/{has-model-changed-VkgGfN-6.mjs → has-model-changed-6p1lR-Ho.mjs} +2 -2
- package/dist/_chunks/{has-model-changed-CmZh9bwD.js → has-model-changed-CGyDQARr.js} +2 -2
- package/dist/_chunks/{i18n-DaBjUC3Y.js → i18n-CAsbU4pi.js} +62 -4
- package/dist/_chunks/{i18n-Bga-GG_Z.mjs → i18n-QelOdIB2.mjs} +62 -4
- package/dist/_chunks/{index-BSNW1ypR.js → index-BK7lmZSN.js} +57 -19
- package/dist/_chunks/{index-C_svJuLd.mjs → index-Bpf1Mw2A.mjs} +8 -8
- package/dist/_chunks/{index-CaHacyle.js → index-BsQ_ie4C.js} +8 -8
- package/dist/_chunks/{index-BIHAiJnE.mjs → index-CHjIMO9T.mjs} +78 -40
- package/dist/_chunks/{strapi-api-base-BTpukPev.mjs → strapi-api-base-Bem_CGuz.mjs} +2 -2
- package/dist/_chunks/{strapi-api-base-DJi1gdZT.js → strapi-api-base-W_bUTSlY.js} +2 -2
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/components/PluginErrorBoundary.d.ts +5 -0
- package/dist/admin/src/modules/@common/locale/en.d.ts +4 -0
- package/dist/admin/src/modules/@common/services/product-analytics-service.d.ts +1 -0
- package/dist/admin/src/modules/@common/services/project-service.d.ts +9 -0
- package/dist/admin/src/modules/@common/styles/heading-fix.d.ts +7 -0
- package/dist/admin/src/modules/@common/utils/export-json.d.ts +1 -0
- package/dist/admin/src/modules/@common/utils/redirect-to-plugin-route.d.ts +1 -0
- package/dist/admin/src/modules/activity-logs/components/HighlightMatch.d.ts +6 -0
- package/dist/admin/src/modules/activity-logs/components/SessionMetadata.d.ts +7 -0
- package/dist/admin/src/modules/activity-logs/components/SessionsTable.d.ts +17 -0
- package/dist/admin/src/modules/activity-logs/components/SortableHeader.d.ts +10 -0
- package/dist/admin/src/modules/activity-logs/components/StatusLabel.d.ts +6 -0
- package/dist/admin/src/modules/activity-logs/hooks/use-debounced-search.d.ts +6 -0
- package/dist/admin/src/modules/activity-logs/locale/en.d.ts +33 -0
- package/dist/admin/src/modules/activity-logs/models/activity-logs.d.ts +19 -0
- package/dist/admin/src/modules/activity-logs/services/activity-logs-service.d.ts +6 -0
- package/dist/admin/src/modules/activity-logs/utils/export-logs.d.ts +1 -0
- package/dist/admin/src/modules/activity-logs/utils/format-utils.d.ts +4 -0
- package/dist/admin/src/modules/plugin-settings/components/WebhookSetup.d.ts +2 -0
- package/dist/admin/src/modules/plugin-settings/locale/en.d.ts +21 -0
- package/dist/admin/src/pages/ActivityLogDetail.d.ts +7 -0
- package/dist/admin/src/pages/ActivityLogs.d.ts +7 -0
- package/dist/server/index.js +516 -61
- package/dist/server/index.mjs +516 -61
- package/dist/server/src/controllers/activity-logs-controller.d.ts +10 -0
- package/dist/server/src/controllers/index.d.ts +14 -3
- package/dist/server/src/controllers/localazy-auth-controller.d.ts +1 -1
- package/dist/server/src/controllers/localazy-project-controller.d.ts +3 -0
- package/dist/server/src/controllers/localazy-user-controller.d.ts +1 -1
- package/dist/server/src/controllers/plugin-settings-controller.d.ts +1 -1
- package/dist/server/src/core/index.d.ts +14 -0
- package/dist/server/src/db/model/activity-logs.d.ts +20 -0
- package/dist/server/src/db/model/plugin-settings.d.ts +14 -0
- package/dist/server/src/destroy.d.ts +1 -1
- package/dist/server/src/index.d.ts +31 -4
- package/dist/server/src/routes/activity-logs-routes.d.ts +9 -0
- package/dist/server/src/services/activity-logs-service.d.ts +17 -0
- package/dist/server/src/services/index.d.ts +16 -0
- package/dist/server/src/services/localazy-pubapi-service.d.ts +2 -0
- package/dist/server/src/services/strapi-service.d.ts +1 -0
- package/dist/server/src/utils/get-character-limits-metadata.d.ts +13 -0
- package/dist/server/src/utils/get-picked-flatten-keys-for-hook-entry.d.ts +3 -1
- package/package.json +5 -4
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { useNavigate, useLocation, NavLink, Routes, Route } from "react-router-dom";
|
|
3
|
-
import {
|
|
4
|
-
import { useState, useEffect } from "react";
|
|
5
|
-
import { u as useLocalazyIdentity,
|
|
6
|
-
import { P as PLUGIN_ID } from "./index-
|
|
2
|
+
import { useNavigate, useLocation, NavLink, useParams, Routes, Route } from "react-router-dom";
|
|
3
|
+
import { o as ForwardRef$2H, p as ForwardRef$d, q as ForwardRef$3P, r as ForwardRef$4j, c as Flex, L as Loader, e as Button, B as Box, T as Typography, g as Link, s as SubNav, t as SubNavHeader, u as SubNavSections, v as SubNavSection, w as SubNavLink, x as ForwardRef$L, G as Grid, j as Divider, f as ForwardRef$3, A as Alert, D as Dialog, y as ForwardRef$4L, z as ForwardRef$4N, P as Pagination, E as PreviousLink, H as PageLink, I as Dots, N as NextLink, J as lodashExports, K as ForwardRef$j, i as ForwardRef$2x, F as Field, O as DatePicker$1, Q as Tabs, R as ForwardRef$57, l as DesignSystemProvider } from "./index-CHjIMO9T.mjs";
|
|
4
|
+
import React__default, { useState, useEffect, useCallback, useMemo, useRef } from "react";
|
|
5
|
+
import { u as useLocalazyIdentity, w as LocalazyUserService, x as emptyIdentity, P as PluginSettingsService, c as cloneDeep, s as set, g as getDefaultTheme, H as HeadingFixGlobalStyle, L as LocalazyIdentityProvider, F as FetchIdentity } from "./FetchIdentity-DeThazz9.mjs";
|
|
6
|
+
import { P as PLUGIN_ID } from "./index-Bpf1Mw2A.mjs";
|
|
7
7
|
import { u as useTranslation } from "./useTranslation-CZQ4lU1m.mjs";
|
|
8
8
|
import { g as getDefaultExportFromCjs } from "./_commonjsHelpers-DWwsNxpa.mjs";
|
|
9
|
-
import { c as createStrapiApiAxiosInstance } from "./strapi-api-base-
|
|
10
|
-
import { P as ProjectService, L as LanguagesSelector } from "./LanguagesSelector-
|
|
9
|
+
import { c as createStrapiApiAxiosInstance } from "./strapi-api-base-Bem_CGuz.mjs";
|
|
10
|
+
import { P as ProjectService, L as LanguagesSelector } from "./LanguagesSelector-D62gLZsM.mjs";
|
|
11
11
|
import { Layouts, Page } from "@strapi/strapi/admin";
|
|
12
|
-
import "./i18n-
|
|
13
|
-
import { h as hasModelChanged } from "./has-model-changed-
|
|
12
|
+
import "./i18n-QelOdIB2.mjs";
|
|
13
|
+
import { h as hasModelChanged } from "./has-model-changed-6p1lR-Ho.mjs";
|
|
14
|
+
import { useTheme } from "styled-components";
|
|
14
15
|
var PLUGIN_ROUTES = /* @__PURE__ */ ((PLUGIN_ROUTES2) => {
|
|
15
16
|
PLUGIN_ROUTES2["ROOT"] = "";
|
|
16
17
|
PLUGIN_ROUTES2["LOGIN"] = "login";
|
|
17
18
|
PLUGIN_ROUTES2["UPLOAD"] = "upload";
|
|
18
19
|
PLUGIN_ROUTES2["DOWNLOAD"] = "download";
|
|
19
20
|
PLUGIN_ROUTES2["OVERVIEW"] = "overview";
|
|
21
|
+
PLUGIN_ROUTES2["ACTIVITY_LOGS"] = "activity-logs";
|
|
20
22
|
PLUGIN_ROUTES2["CONTENT_TRANSFER_SETUP"] = "content-transfer-setup";
|
|
21
23
|
PLUGIN_ROUTES2["GLOBAL_SETTINGS"] = "global-settings";
|
|
22
24
|
return PLUGIN_ROUTES2;
|
|
@@ -64,6 +66,14 @@ const useNav = () => {
|
|
|
64
66
|
icon: /* @__PURE__ */ jsx(ForwardRef$3P, {}),
|
|
65
67
|
to: `/plugins/${PLUGIN_ID}/download`,
|
|
66
68
|
active: false
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
id: "activity-logs",
|
|
72
|
+
label: t2("common.activity_logs"),
|
|
73
|
+
description: t2("activity_logs.description"),
|
|
74
|
+
icon: /* @__PURE__ */ jsx(ForwardRef$4j, {}),
|
|
75
|
+
to: `/plugins/${PLUGIN_ID}/activity-logs`,
|
|
76
|
+
active: false
|
|
67
77
|
}
|
|
68
78
|
];
|
|
69
79
|
};
|
|
@@ -1115,12 +1125,12 @@ function l(t2, e2) {
|
|
|
1115
1125
|
const n2 = e2 || "https://localazy.com";
|
|
1116
1126
|
return "/" !== new URL(n2).pathname ? `${n2}?${a2.toString()}` : `${n2}/oauth/authorize?${a2.toString()}`;
|
|
1117
1127
|
}
|
|
1118
|
-
const BASE_PATH$
|
|
1119
|
-
const axiosInstance = createStrapiApiAxiosInstance();
|
|
1128
|
+
const BASE_PATH$3 = "/auth";
|
|
1129
|
+
const axiosInstance$1 = createStrapiApiAxiosInstance();
|
|
1120
1130
|
class LocalazyLoginService {
|
|
1121
1131
|
static async generateKeys() {
|
|
1122
1132
|
try {
|
|
1123
|
-
const result = await axiosInstance.get(`${BASE_PATH$
|
|
1133
|
+
const result = await axiosInstance$1.get(`${BASE_PATH$3}/generate-keys`);
|
|
1124
1134
|
return result.data;
|
|
1125
1135
|
} catch (e2) {
|
|
1126
1136
|
throw e2;
|
|
@@ -1128,7 +1138,7 @@ class LocalazyLoginService {
|
|
|
1128
1138
|
}
|
|
1129
1139
|
static async continuousPoll(readKey) {
|
|
1130
1140
|
try {
|
|
1131
|
-
const result = await axiosInstance.get(`${BASE_PATH$
|
|
1141
|
+
const result = await axiosInstance$1.get(`${BASE_PATH$3}/continuous-poll?readKey=${readKey}`);
|
|
1132
1142
|
return result.data;
|
|
1133
1143
|
} catch (e2) {
|
|
1134
1144
|
throw e2;
|
|
@@ -1354,13 +1364,14 @@ class ProductAnalyticsService {
|
|
|
1354
1364
|
}
|
|
1355
1365
|
}
|
|
1356
1366
|
static async buildData(event, project, params) {
|
|
1357
|
-
const { version } = await PluginService.getPluginVersion();
|
|
1367
|
+
const { version, versionStrapi } = await PluginService.getPluginVersion();
|
|
1358
1368
|
return {
|
|
1359
1369
|
event,
|
|
1360
1370
|
data: {
|
|
1361
1371
|
"Project Id": project.id,
|
|
1362
1372
|
"Project Name": project.name,
|
|
1363
1373
|
version,
|
|
1374
|
+
versionStrapi,
|
|
1364
1375
|
...params
|
|
1365
1376
|
}
|
|
1366
1377
|
};
|
|
@@ -1376,7 +1387,7 @@ const Login = ({ title, subtitle, isLoading = false }) => {
|
|
|
1376
1387
|
};
|
|
1377
1388
|
useEffect(() => {
|
|
1378
1389
|
if (isLoggedIn && identity.user && identity.project) {
|
|
1379
|
-
ProductAnalyticsService.trackAppConnected(identity.user.id, identity.project);
|
|
1390
|
+
void ProductAnalyticsService.trackAppConnected(identity.user.id, identity.project);
|
|
1380
1391
|
}
|
|
1381
1392
|
}, [isLoggedIn, identity]);
|
|
1382
1393
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -1427,7 +1438,7 @@ const LogoutButton = (props) => {
|
|
|
1427
1438
|
const { setIdentity } = useLocalazyIdentity();
|
|
1428
1439
|
const logout = async () => {
|
|
1429
1440
|
setIsLoading(true);
|
|
1430
|
-
LocalazyUserService.deleteIdentity();
|
|
1441
|
+
void LocalazyUserService.deleteIdentity();
|
|
1431
1442
|
setIdentity(emptyIdentity);
|
|
1432
1443
|
setIsLoading(false);
|
|
1433
1444
|
props.onResultFetched();
|
|
@@ -1463,13 +1474,13 @@ const Overview = ({ title, subtitle, isLoadingProp = false }) => {
|
|
|
1463
1474
|
setIsLoading(true);
|
|
1464
1475
|
const project = await ProjectService.getConnectedProject();
|
|
1465
1476
|
setConnectedProject(project);
|
|
1466
|
-
PluginSettingsService.updatePluginSettings({ defaultRoute: PLUGIN_ROUTES.OVERVIEW });
|
|
1477
|
+
void PluginSettingsService.updatePluginSettings({ defaultRoute: PLUGIN_ROUTES.OVERVIEW });
|
|
1467
1478
|
setIsLoading(false);
|
|
1468
1479
|
}
|
|
1469
|
-
initComponent();
|
|
1480
|
+
void initComponent();
|
|
1470
1481
|
}, []);
|
|
1471
1482
|
const onLoggedOut = () => {
|
|
1472
|
-
ProductAnalyticsService.trackAppDisconnected(identity.user.id, identity.project);
|
|
1483
|
+
void ProductAnalyticsService.trackAppDisconnected(identity.user.id, identity.project);
|
|
1473
1484
|
navigateToPluginRoute(PLUGIN_ROUTES.LOGIN);
|
|
1474
1485
|
};
|
|
1475
1486
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -1478,8 +1489,7 @@ const Overview = ({ title, subtitle, isLoadingProp = false }) => {
|
|
|
1478
1489
|
{
|
|
1479
1490
|
title,
|
|
1480
1491
|
subtitle,
|
|
1481
|
-
primaryAction: /* @__PURE__ */ jsx(LogoutButton, { onResultFetched: onLoggedOut })
|
|
1482
|
-
as: "h2"
|
|
1492
|
+
primaryAction: /* @__PURE__ */ jsx(LogoutButton, { onResultFetched: onLoggedOut })
|
|
1483
1493
|
}
|
|
1484
1494
|
),
|
|
1485
1495
|
(isLoadingProp || isLoading) && /* @__PURE__ */ jsx(PluginPageLoader, {}),
|
|
@@ -1525,21 +1535,56 @@ const Overview = ({ title, subtitle, isLoadingProp = false }) => {
|
|
|
1525
1535
|
) })
|
|
1526
1536
|
] });
|
|
1527
1537
|
};
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
}
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1538
|
+
class ErrorBoundaryInner extends React__default.Component {
|
|
1539
|
+
constructor(props) {
|
|
1540
|
+
super(props);
|
|
1541
|
+
this.state = { hasError: false, error: null };
|
|
1542
|
+
}
|
|
1543
|
+
static getDerivedStateFromError(error) {
|
|
1544
|
+
return { hasError: true, error };
|
|
1545
|
+
}
|
|
1546
|
+
reset = () => {
|
|
1547
|
+
this.setState({ hasError: false, error: null });
|
|
1548
|
+
};
|
|
1549
|
+
render() {
|
|
1550
|
+
if (this.state.hasError && this.state.error) {
|
|
1551
|
+
return this.props.fallback(this.state.error, this.reset);
|
|
1552
|
+
}
|
|
1553
|
+
return this.props.children;
|
|
1554
|
+
}
|
|
1555
|
+
}
|
|
1556
|
+
const ErrorFallback = ({ error, reset }) => {
|
|
1557
|
+
const { t: t2 } = useTranslation();
|
|
1558
|
+
const { setIdentity } = useLocalazyIdentity();
|
|
1559
|
+
const handleDisconnect = useCallback(() => {
|
|
1560
|
+
void LocalazyUserService.deleteIdentity();
|
|
1561
|
+
setIdentity(emptyIdentity);
|
|
1562
|
+
reset();
|
|
1563
|
+
}, [setIdentity, reset]);
|
|
1564
|
+
return /* @__PURE__ */ jsx(Layouts.Root, { children: /* @__PURE__ */ jsx(Box, { padding: 10, children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "center", gap: 6, paddingTop: 10, children: [
|
|
1565
|
+
/* @__PURE__ */ jsx(ForwardRef$3, { width: 48, height: 48, fill: "danger600" }),
|
|
1566
|
+
/* @__PURE__ */ jsx(Typography, { variant: "alpha", textColor: "neutral800", children: t2("common.error_boundary_title") }),
|
|
1567
|
+
/* @__PURE__ */ jsx(Box, { maxWidth: "600px", children: /* @__PURE__ */ jsx(Typography, { variant: "omega", textColor: "neutral600", textAlign: "center", children: t2("common.error_boundary_description") }) }),
|
|
1568
|
+
/* @__PURE__ */ jsx(Box, { padding: 4, background: "neutral100", hasRadius: true, maxWidth: "600px", width: "100%", children: /* @__PURE__ */ jsx(
|
|
1569
|
+
Typography,
|
|
1570
|
+
{
|
|
1571
|
+
variant: "pi",
|
|
1572
|
+
textColor: "neutral500",
|
|
1573
|
+
tag: "pre",
|
|
1574
|
+
style: { whiteSpace: "pre-wrap", wordBreak: "break-word" },
|
|
1575
|
+
children: error.message
|
|
1576
|
+
}
|
|
1577
|
+
) }),
|
|
1578
|
+
/* @__PURE__ */ jsx(Button, { startIcon: /* @__PURE__ */ jsx(ForwardRef$L, {}), variant: "danger-light", onClick: handleDisconnect, children: t2("common.error_boundary_disconnect") })
|
|
1579
|
+
] }) }) });
|
|
1536
1580
|
};
|
|
1537
|
-
const
|
|
1581
|
+
const PluginErrorBoundary = ({ children }) => /* @__PURE__ */ jsx(ErrorBoundaryInner, { fallback: (error, reset) => /* @__PURE__ */ jsx(ErrorFallback, { error, reset }), children });
|
|
1582
|
+
const BASE_PATH$2 = "/transfer";
|
|
1538
1583
|
class LocalazyUploadService {
|
|
1539
1584
|
static async upload(data = {}) {
|
|
1540
1585
|
try {
|
|
1541
1586
|
const strapiApiInstance2 = createStrapiApiAxiosInstance();
|
|
1542
|
-
const result = await strapiApiInstance2.post(`${BASE_PATH$
|
|
1587
|
+
const result = await strapiApiInstance2.post(`${BASE_PATH$2}/upload`, data);
|
|
1543
1588
|
return result.data;
|
|
1544
1589
|
} catch (e2) {
|
|
1545
1590
|
throw e2.data;
|
|
@@ -4999,7 +5044,7 @@ const Upload = (props) => {
|
|
|
4999
5044
|
setIsUploading(false);
|
|
5000
5045
|
setShowUploadFinishedModal(true);
|
|
5001
5046
|
});
|
|
5002
|
-
ProductAnalyticsService.trackUploadToLocalazy(identity.user.id, identity.project, {
|
|
5047
|
+
void ProductAnalyticsService.trackUploadToLocalazy(identity.user.id, identity.project, {
|
|
5003
5048
|
"Source Language Code": localazySourceLanguage.code
|
|
5004
5049
|
});
|
|
5005
5050
|
};
|
|
@@ -5016,10 +5061,10 @@ const Upload = (props) => {
|
|
|
5016
5061
|
setLocalazySourceLanguage(sourceLanguage);
|
|
5017
5062
|
setModelChanged(modelChangedResult);
|
|
5018
5063
|
setLocalesIncompatible(!localesCompatibleResult);
|
|
5019
|
-
PluginSettingsService.updatePluginSettings({ defaultRoute: PLUGIN_ROUTES.UPLOAD });
|
|
5064
|
+
void PluginSettingsService.updatePluginSettings({ defaultRoute: PLUGIN_ROUTES.UPLOAD });
|
|
5020
5065
|
setIsLoading(false);
|
|
5021
5066
|
}
|
|
5022
|
-
initComponent();
|
|
5067
|
+
void initComponent();
|
|
5023
5068
|
}, []);
|
|
5024
5069
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
5025
5070
|
/* @__PURE__ */ jsx(
|
|
@@ -5036,8 +5081,7 @@ const Upload = (props) => {
|
|
|
5036
5081
|
onClick: onUploadClick,
|
|
5037
5082
|
children: t2("upload.upload_to_localazy")
|
|
5038
5083
|
}
|
|
5039
|
-
)
|
|
5040
|
-
as: "h2"
|
|
5084
|
+
)
|
|
5041
5085
|
}
|
|
5042
5086
|
),
|
|
5043
5087
|
isLoading && /* @__PURE__ */ jsx(PluginPageLoader, {}),
|
|
@@ -5111,12 +5155,12 @@ const Upload = (props) => {
|
|
|
5111
5155
|
] })
|
|
5112
5156
|
] });
|
|
5113
5157
|
};
|
|
5114
|
-
const BASE_PATH = "/transfer";
|
|
5158
|
+
const BASE_PATH$1 = "/transfer";
|
|
5115
5159
|
class LocalazyDownloadService {
|
|
5116
5160
|
static async download(data = {}) {
|
|
5117
5161
|
try {
|
|
5118
5162
|
const strapiApiInstance2 = createStrapiApiAxiosInstance();
|
|
5119
|
-
const result = await strapiApiInstance2.post(`${BASE_PATH}/download`, data);
|
|
5163
|
+
const result = await strapiApiInstance2.post(`${BASE_PATH$1}/download`, data);
|
|
5120
5164
|
return result.data;
|
|
5121
5165
|
} catch (e2) {
|
|
5122
5166
|
throw e2.data;
|
|
@@ -5156,7 +5200,7 @@ const Download = (props) => {
|
|
|
5156
5200
|
set(newFormModel, "download.uiLanguages", languages);
|
|
5157
5201
|
setFormModel(newFormModel);
|
|
5158
5202
|
try {
|
|
5159
|
-
PluginSettingsService.updatePluginSettings(newFormModel);
|
|
5203
|
+
void PluginSettingsService.updatePluginSettings(newFormModel);
|
|
5160
5204
|
} catch (e2) {
|
|
5161
5205
|
console.error(e2.message);
|
|
5162
5206
|
}
|
|
@@ -5186,13 +5230,11 @@ const Download = (props) => {
|
|
|
5186
5230
|
setshowDownloadFinishedModal(true);
|
|
5187
5231
|
try {
|
|
5188
5232
|
const cursor = await PluginSettingsService.getSyncCursor();
|
|
5189
|
-
setHasSyncCursor(
|
|
5190
|
-
|
|
5191
|
-
);
|
|
5192
|
-
} catch (_e) {
|
|
5233
|
+
setHasSyncCursor(cursor?.processedKeys !== void 0 && Object.keys(cursor.processedKeys).length > 0);
|
|
5234
|
+
} catch {
|
|
5193
5235
|
}
|
|
5194
5236
|
});
|
|
5195
|
-
ProductAnalyticsService.trackDownloadToStrapi(identity.user.id, identity.project, {
|
|
5237
|
+
void ProductAnalyticsService.trackDownloadToStrapi(identity.user.id, identity.project, {
|
|
5196
5238
|
"Target Languages Codes": "all"
|
|
5197
5239
|
});
|
|
5198
5240
|
};
|
|
@@ -5208,16 +5250,14 @@ const Download = (props) => {
|
|
|
5208
5250
|
]);
|
|
5209
5251
|
setModelChanged(modelChangedResult);
|
|
5210
5252
|
setLocalesIncompatible(!localesCompatibleResult);
|
|
5211
|
-
setHasSyncCursor(
|
|
5212
|
-
syncCursor?.processedKeys !== void 0 && Object.keys(syncCursor.processedKeys).length > 0
|
|
5213
|
-
);
|
|
5253
|
+
setHasSyncCursor(syncCursor?.processedKeys !== void 0 && Object.keys(syncCursor.processedKeys).length > 0);
|
|
5214
5254
|
const projectLanguagesWithoutDefaultLanguage = project?.languages?.filter((language) => language.id !== project.sourceLanguage) || [];
|
|
5215
5255
|
setProjectLanguages(projectLanguagesWithoutDefaultLanguage);
|
|
5216
5256
|
setFormModel(globalSettings);
|
|
5217
|
-
PluginSettingsService.updatePluginSettings({ defaultRoute: PLUGIN_ROUTES.DOWNLOAD });
|
|
5257
|
+
void PluginSettingsService.updatePluginSettings({ defaultRoute: PLUGIN_ROUTES.DOWNLOAD });
|
|
5218
5258
|
setIsLoading(false);
|
|
5219
5259
|
}
|
|
5220
|
-
initComponent();
|
|
5260
|
+
void initComponent();
|
|
5221
5261
|
}, []);
|
|
5222
5262
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
5223
5263
|
/* @__PURE__ */ jsx(
|
|
@@ -5246,8 +5286,7 @@ const Download = (props) => {
|
|
|
5246
5286
|
children: t2("download.incremental_download")
|
|
5247
5287
|
}
|
|
5248
5288
|
)
|
|
5249
|
-
] })
|
|
5250
|
-
as: "h2"
|
|
5289
|
+
] })
|
|
5251
5290
|
}
|
|
5252
5291
|
),
|
|
5253
5292
|
isLoading && /* @__PURE__ */ jsx(PluginPageLoader, {}),
|
|
@@ -5334,7 +5373,7 @@ const Download = (props) => {
|
|
|
5334
5373
|
variant: "danger-light",
|
|
5335
5374
|
onClick: () => {
|
|
5336
5375
|
setShowFullSyncConfirm(false);
|
|
5337
|
-
onDownloadClick(true);
|
|
5376
|
+
void onDownloadClick(true);
|
|
5338
5377
|
},
|
|
5339
5378
|
children: t2("download.full_sync")
|
|
5340
5379
|
}
|
|
@@ -5343,6 +5382,677 @@ const Download = (props) => {
|
|
|
5343
5382
|
] }) })
|
|
5344
5383
|
] });
|
|
5345
5384
|
};
|
|
5385
|
+
const BASE_PATH = "/activity-logs";
|
|
5386
|
+
const axiosInstance = createStrapiApiAxiosInstance();
|
|
5387
|
+
class ActivityLogsService {
|
|
5388
|
+
static async getSessions(type) {
|
|
5389
|
+
const params = type ? `?type=${type}` : "";
|
|
5390
|
+
const result = await axiosInstance.get(`${BASE_PATH}${params}`);
|
|
5391
|
+
return result.data;
|
|
5392
|
+
}
|
|
5393
|
+
static async getSession(sessionId) {
|
|
5394
|
+
const result = await axiosInstance.get(`${BASE_PATH}/${sessionId}`);
|
|
5395
|
+
return result.data;
|
|
5396
|
+
}
|
|
5397
|
+
static async exportSessions() {
|
|
5398
|
+
const result = await axiosInstance.get(`${BASE_PATH}/export`);
|
|
5399
|
+
return result.data;
|
|
5400
|
+
}
|
|
5401
|
+
static async clearSessions() {
|
|
5402
|
+
const result = await axiosInstance.delete(`${BASE_PATH}`);
|
|
5403
|
+
return result.data;
|
|
5404
|
+
}
|
|
5405
|
+
}
|
|
5406
|
+
const exportAsJson = (data, filename) => {
|
|
5407
|
+
const json = JSON.stringify(data, null, 2);
|
|
5408
|
+
const blob = new Blob([json], { type: "application/json" });
|
|
5409
|
+
const url2 = URL.createObjectURL(blob);
|
|
5410
|
+
const a2 = document.createElement("a");
|
|
5411
|
+
a2.href = url2;
|
|
5412
|
+
a2.download = filename.endsWith(".json") ? filename : `${filename}.json`;
|
|
5413
|
+
a2.click();
|
|
5414
|
+
URL.revokeObjectURL(url2);
|
|
5415
|
+
};
|
|
5416
|
+
const exportLogsAsJson = async () => {
|
|
5417
|
+
const sessions = await ActivityLogsService.exportSessions();
|
|
5418
|
+
exportAsJson(sessions, `localazy-activity-logs-${(/* @__PURE__ */ new Date()).toISOString().split("T")[0]}`);
|
|
5419
|
+
};
|
|
5420
|
+
const formatDate = (timestamp) => {
|
|
5421
|
+
return new Date(timestamp).toLocaleString();
|
|
5422
|
+
};
|
|
5423
|
+
const formatTime = (timestamp) => {
|
|
5424
|
+
return new Date(timestamp).toLocaleTimeString(void 0, {
|
|
5425
|
+
hour: "2-digit",
|
|
5426
|
+
minute: "2-digit",
|
|
5427
|
+
second: "2-digit",
|
|
5428
|
+
fractionalSecondDigits: 3
|
|
5429
|
+
});
|
|
5430
|
+
};
|
|
5431
|
+
const formatDuration = (start, end) => {
|
|
5432
|
+
if (!end) return "-";
|
|
5433
|
+
const diff = end - start;
|
|
5434
|
+
if (diff < 1e3) return `${diff}ms`;
|
|
5435
|
+
if (diff < 6e4) return `${Math.round(diff / 1e3)}s`;
|
|
5436
|
+
return `${Math.round(diff / 6e4)}m ${Math.round(diff % 6e4 / 1e3)}s`;
|
|
5437
|
+
};
|
|
5438
|
+
const getStatusColor = (status) => {
|
|
5439
|
+
switch (status) {
|
|
5440
|
+
case "completed":
|
|
5441
|
+
return "success600";
|
|
5442
|
+
case "failed":
|
|
5443
|
+
return "danger600";
|
|
5444
|
+
case "in-progress":
|
|
5445
|
+
return "warning600";
|
|
5446
|
+
default:
|
|
5447
|
+
return "neutral600";
|
|
5448
|
+
}
|
|
5449
|
+
};
|
|
5450
|
+
const SortableHeader = ({ label, sortKey, activeSortKey, direction, onSort }) => {
|
|
5451
|
+
const isActive = sortKey === activeSortKey;
|
|
5452
|
+
const theme = useTheme();
|
|
5453
|
+
return /* @__PURE__ */ jsx(
|
|
5454
|
+
"th",
|
|
5455
|
+
{
|
|
5456
|
+
onClick: () => onSort(sortKey),
|
|
5457
|
+
style: {
|
|
5458
|
+
textAlign: "left",
|
|
5459
|
+
padding: "12px 16px",
|
|
5460
|
+
borderBottom: `1px solid ${theme.colors.neutral150}`,
|
|
5461
|
+
cursor: "pointer",
|
|
5462
|
+
userSelect: "none"
|
|
5463
|
+
},
|
|
5464
|
+
children: /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: 1, children: [
|
|
5465
|
+
/* @__PURE__ */ jsx(Typography, { variant: "sigma", textColor: isActive ? "primary600" : "neutral600", children: label }),
|
|
5466
|
+
/* @__PURE__ */ jsx("span", { style: { width: 8, display: "inline-flex", flexShrink: 0 }, children: isActive && (direction === "asc" ? /* @__PURE__ */ jsx(ForwardRef$4L, { width: 8, height: 8 }) : /* @__PURE__ */ jsx(ForwardRef$4N, { width: 8, height: 8 })) })
|
|
5467
|
+
] })
|
|
5468
|
+
}
|
|
5469
|
+
);
|
|
5470
|
+
};
|
|
5471
|
+
const HighlightMatch = ({ text, query }) => {
|
|
5472
|
+
const theme = useTheme();
|
|
5473
|
+
if (!query) return /* @__PURE__ */ jsx(Fragment, { children: text });
|
|
5474
|
+
const escaped = query.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
5475
|
+
const parts2 = text.split(new RegExp(`(${escaped})`, "gi"));
|
|
5476
|
+
if (parts2.length === 1) return /* @__PURE__ */ jsx(Fragment, { children: text });
|
|
5477
|
+
return /* @__PURE__ */ jsx(Fragment, { children: parts2.map(
|
|
5478
|
+
(part, i2) => part.toLowerCase() === query.toLowerCase() ? /* @__PURE__ */ jsx("span", { style: { backgroundColor: theme.colors.warning200, borderRadius: "2px", padding: "0 1px" }, children: part }, i2) : part
|
|
5479
|
+
) });
|
|
5480
|
+
};
|
|
5481
|
+
const StatusLabel = ({ status, searchQuery }) => {
|
|
5482
|
+
const { t: t2 } = useTranslation();
|
|
5483
|
+
const label = status === "in-progress" ? t2("activity_logs.status_in_progress") : status === "completed" ? t2("activity_logs.status_completed") : t2("activity_logs.status_failed");
|
|
5484
|
+
return /* @__PURE__ */ jsx(Typography, { variant: "omega", textColor: getStatusColor(status), children: searchQuery ? /* @__PURE__ */ jsx(HighlightMatch, { text: label, query: searchQuery }) : label });
|
|
5485
|
+
};
|
|
5486
|
+
const DEFAULT_SORT = { key: "startedAt", direction: "desc" };
|
|
5487
|
+
const PAGE_SIZE = 20;
|
|
5488
|
+
const getDuration = (session) => {
|
|
5489
|
+
if (!session.finishedAt) return Infinity;
|
|
5490
|
+
return session.finishedAt - session.startedAt;
|
|
5491
|
+
};
|
|
5492
|
+
const compareSessions = (a2, b, sortKey, direction) => {
|
|
5493
|
+
let cmp = 0;
|
|
5494
|
+
switch (sortKey) {
|
|
5495
|
+
case "status":
|
|
5496
|
+
cmp = a2.status.localeCompare(b.status);
|
|
5497
|
+
break;
|
|
5498
|
+
case "startedAt":
|
|
5499
|
+
cmp = a2.startedAt - b.startedAt;
|
|
5500
|
+
break;
|
|
5501
|
+
case "duration":
|
|
5502
|
+
cmp = getDuration(a2) - getDuration(b);
|
|
5503
|
+
break;
|
|
5504
|
+
case "initiatedBy":
|
|
5505
|
+
cmp = a2.initiatedBy.localeCompare(b.initiatedBy);
|
|
5506
|
+
break;
|
|
5507
|
+
case "summary":
|
|
5508
|
+
cmp = (a2.summary || "").localeCompare(b.summary || "");
|
|
5509
|
+
break;
|
|
5510
|
+
}
|
|
5511
|
+
return direction === "asc" ? cmp : -cmp;
|
|
5512
|
+
};
|
|
5513
|
+
const SessionsTable = ({ sessions, searchQuery, dateFrom, dateTo, eventType, sortPreferences, onSortChange, onSessionClick, t: t2 }) => {
|
|
5514
|
+
const theme = useTheme();
|
|
5515
|
+
const stored = sortPreferences[eventType];
|
|
5516
|
+
const [sortKey, setSortKey] = useState(stored?.key || DEFAULT_SORT.key);
|
|
5517
|
+
const [sortDirection, setSortDirection] = useState(
|
|
5518
|
+
stored?.direction || DEFAULT_SORT.direction
|
|
5519
|
+
);
|
|
5520
|
+
const [page, setPage] = useState(1);
|
|
5521
|
+
useEffect(() => {
|
|
5522
|
+
const pref = sortPreferences[eventType];
|
|
5523
|
+
if (pref?.key) setSortKey(pref.key);
|
|
5524
|
+
if (pref?.direction) setSortDirection(pref.direction);
|
|
5525
|
+
}, [eventType, sortPreferences]);
|
|
5526
|
+
useEffect(() => {
|
|
5527
|
+
setPage(1);
|
|
5528
|
+
}, [searchQuery, dateFrom, dateTo, eventType]);
|
|
5529
|
+
const onSort = (key) => {
|
|
5530
|
+
const newDirection = key === sortKey ? sortDirection === "asc" ? "desc" : "asc" : "asc";
|
|
5531
|
+
setSortKey(key);
|
|
5532
|
+
setSortDirection(newDirection);
|
|
5533
|
+
onSortChange(eventType, key, newDirection);
|
|
5534
|
+
setPage(1);
|
|
5535
|
+
};
|
|
5536
|
+
const filteredSessions = sessions.filter((session) => {
|
|
5537
|
+
if (dateFrom) {
|
|
5538
|
+
const startOfDay = new Date(dateFrom.getUTCFullYear(), dateFrom.getUTCMonth(), dateFrom.getUTCDate()).getTime();
|
|
5539
|
+
if (session.startedAt < startOfDay) return false;
|
|
5540
|
+
}
|
|
5541
|
+
if (dateTo) {
|
|
5542
|
+
const endOfDay = new Date(
|
|
5543
|
+
dateTo.getUTCFullYear(),
|
|
5544
|
+
dateTo.getUTCMonth(),
|
|
5545
|
+
dateTo.getUTCDate(),
|
|
5546
|
+
23,
|
|
5547
|
+
59,
|
|
5548
|
+
59,
|
|
5549
|
+
999
|
|
5550
|
+
).getTime();
|
|
5551
|
+
if (session.startedAt > endOfDay) return false;
|
|
5552
|
+
}
|
|
5553
|
+
if (!searchQuery) return true;
|
|
5554
|
+
const query = searchQuery.toLowerCase();
|
|
5555
|
+
return session.summary.toLowerCase().includes(query) || session.initiatedBy.toLowerCase().includes(query) || session.status.toLowerCase().includes(query) || formatDate(session.startedAt).toLowerCase().includes(query);
|
|
5556
|
+
}).sort((a2, b) => compareSessions(a2, b, sortKey, sortDirection));
|
|
5557
|
+
const totalCount = filteredSessions.length;
|
|
5558
|
+
const totalPages = Math.max(1, Math.ceil(totalCount / PAGE_SIZE));
|
|
5559
|
+
const safePage = Math.min(page, totalPages);
|
|
5560
|
+
const paginatedSessions = filteredSessions.slice((safePage - 1) * PAGE_SIZE, safePage * PAGE_SIZE);
|
|
5561
|
+
if (filteredSessions.length === 0) {
|
|
5562
|
+
return /* @__PURE__ */ jsx(Box, { padding: 4, children: /* @__PURE__ */ jsx(Typography, { variant: "omega", textColor: "neutral600", children: t2("activity_logs.no_sessions") }) });
|
|
5563
|
+
}
|
|
5564
|
+
return /* @__PURE__ */ jsxs(Box, { children: [
|
|
5565
|
+
/* @__PURE__ */ jsxs("table", { style: { width: "100%", borderCollapse: "collapse" }, children: [
|
|
5566
|
+
/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
5567
|
+
/* @__PURE__ */ jsx(
|
|
5568
|
+
SortableHeader,
|
|
5569
|
+
{
|
|
5570
|
+
label: t2("activity_logs.status"),
|
|
5571
|
+
sortKey: "status",
|
|
5572
|
+
activeSortKey: sortKey,
|
|
5573
|
+
direction: sortDirection,
|
|
5574
|
+
onSort
|
|
5575
|
+
}
|
|
5576
|
+
),
|
|
5577
|
+
/* @__PURE__ */ jsx(
|
|
5578
|
+
SortableHeader,
|
|
5579
|
+
{
|
|
5580
|
+
label: t2("activity_logs.started_at"),
|
|
5581
|
+
sortKey: "startedAt",
|
|
5582
|
+
activeSortKey: sortKey,
|
|
5583
|
+
direction: sortDirection,
|
|
5584
|
+
onSort
|
|
5585
|
+
}
|
|
5586
|
+
),
|
|
5587
|
+
/* @__PURE__ */ jsx(
|
|
5588
|
+
SortableHeader,
|
|
5589
|
+
{
|
|
5590
|
+
label: t2("activity_logs.duration"),
|
|
5591
|
+
sortKey: "duration",
|
|
5592
|
+
activeSortKey: sortKey,
|
|
5593
|
+
direction: sortDirection,
|
|
5594
|
+
onSort
|
|
5595
|
+
}
|
|
5596
|
+
),
|
|
5597
|
+
/* @__PURE__ */ jsx(
|
|
5598
|
+
SortableHeader,
|
|
5599
|
+
{
|
|
5600
|
+
label: t2("activity_logs.initiated_by"),
|
|
5601
|
+
sortKey: "initiatedBy",
|
|
5602
|
+
activeSortKey: sortKey,
|
|
5603
|
+
direction: sortDirection,
|
|
5604
|
+
onSort
|
|
5605
|
+
}
|
|
5606
|
+
),
|
|
5607
|
+
/* @__PURE__ */ jsx(
|
|
5608
|
+
SortableHeader,
|
|
5609
|
+
{
|
|
5610
|
+
label: t2("activity_logs.summary"),
|
|
5611
|
+
sortKey: "summary",
|
|
5612
|
+
activeSortKey: sortKey,
|
|
5613
|
+
direction: sortDirection,
|
|
5614
|
+
onSort
|
|
5615
|
+
}
|
|
5616
|
+
)
|
|
5617
|
+
] }) }),
|
|
5618
|
+
/* @__PURE__ */ jsx("tbody", { children: paginatedSessions.map((session) => /* @__PURE__ */ jsxs(
|
|
5619
|
+
"tr",
|
|
5620
|
+
{
|
|
5621
|
+
onClick: () => onSessionClick(session.id),
|
|
5622
|
+
style: { cursor: "pointer", borderBottom: `1px solid ${theme.colors.neutral150}` },
|
|
5623
|
+
onMouseEnter: (e2) => {
|
|
5624
|
+
e2.currentTarget.style.backgroundColor = theme.colors.neutral100;
|
|
5625
|
+
},
|
|
5626
|
+
onMouseLeave: (e2) => {
|
|
5627
|
+
e2.currentTarget.style.backgroundColor = "transparent";
|
|
5628
|
+
},
|
|
5629
|
+
children: [
|
|
5630
|
+
/* @__PURE__ */ jsx("td", { style: { padding: "12px 16px" }, children: /* @__PURE__ */ jsx(StatusLabel, { status: session.status, searchQuery }) }),
|
|
5631
|
+
/* @__PURE__ */ jsx("td", { style: { padding: "12px 16px" }, children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: /* @__PURE__ */ jsx(HighlightMatch, { text: formatDate(session.startedAt), query: searchQuery }) }) }),
|
|
5632
|
+
/* @__PURE__ */ jsx("td", { style: { padding: "12px 16px" }, children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatDuration(session.startedAt, session.finishedAt) }) }),
|
|
5633
|
+
/* @__PURE__ */ jsx("td", { style: { padding: "12px 16px" }, children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: /* @__PURE__ */ jsx(HighlightMatch, { text: session.initiatedBy, query: searchQuery }) }) }),
|
|
5634
|
+
/* @__PURE__ */ jsx("td", { style: { padding: "12px 16px" }, children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: /* @__PURE__ */ jsx(HighlightMatch, { text: session.summary || "-", query: searchQuery }) }) })
|
|
5635
|
+
]
|
|
5636
|
+
},
|
|
5637
|
+
session.id
|
|
5638
|
+
)) })
|
|
5639
|
+
] }),
|
|
5640
|
+
/* @__PURE__ */ jsx(Box, { paddingTop: 4, children: /* @__PURE__ */ jsxs(Pagination, { activePage: safePage, pageCount: totalPages, children: [
|
|
5641
|
+
/* @__PURE__ */ jsx(PreviousLink, { onClick: () => setPage(Math.max(1, safePage - 1)) }),
|
|
5642
|
+
(() => {
|
|
5643
|
+
const pages = [];
|
|
5644
|
+
const WINDOW = 2;
|
|
5645
|
+
if (totalPages <= 7) {
|
|
5646
|
+
for (let i2 = 1; i2 <= totalPages; i2++) {
|
|
5647
|
+
pages.push(/* @__PURE__ */ jsx(PageLink, { number: i2, onClick: () => setPage(i2) }, i2));
|
|
5648
|
+
}
|
|
5649
|
+
} else {
|
|
5650
|
+
pages.push(/* @__PURE__ */ jsx(PageLink, { number: 1, onClick: () => setPage(1) }, 1));
|
|
5651
|
+
if (safePage > 1 + WINDOW + 1) {
|
|
5652
|
+
pages.push(/* @__PURE__ */ jsx(Dots, {}, "dots-start"));
|
|
5653
|
+
}
|
|
5654
|
+
const start = Math.max(2, safePage - WINDOW);
|
|
5655
|
+
const end = Math.min(totalPages - 1, safePage + WINDOW);
|
|
5656
|
+
for (let i2 = start; i2 <= end; i2++) {
|
|
5657
|
+
pages.push(/* @__PURE__ */ jsx(PageLink, { number: i2, onClick: () => setPage(i2) }, i2));
|
|
5658
|
+
}
|
|
5659
|
+
if (safePage < totalPages - WINDOW - 1) {
|
|
5660
|
+
pages.push(/* @__PURE__ */ jsx(Dots, {}, "dots-end"));
|
|
5661
|
+
}
|
|
5662
|
+
pages.push(/* @__PURE__ */ jsx(PageLink, { number: totalPages, onClick: () => setPage(totalPages) }, totalPages));
|
|
5663
|
+
}
|
|
5664
|
+
return pages;
|
|
5665
|
+
})(),
|
|
5666
|
+
/* @__PURE__ */ jsx(NextLink, { onClick: () => setPage(Math.min(totalPages, safePage + 1)) })
|
|
5667
|
+
] }) })
|
|
5668
|
+
] });
|
|
5669
|
+
};
|
|
5670
|
+
const DEBOUNCE_MS = 300;
|
|
5671
|
+
const useDebouncedSearch = () => {
|
|
5672
|
+
const [searchInput, setSearchInput] = useState("");
|
|
5673
|
+
const [searchQuery, setSearchQuery] = useState("");
|
|
5674
|
+
const debouncedSetQuery = useMemo(() => lodashExports.debounce((value2) => setSearchQuery(value2), DEBOUNCE_MS), []);
|
|
5675
|
+
useEffect(() => {
|
|
5676
|
+
return () => {
|
|
5677
|
+
debouncedSetQuery.cancel();
|
|
5678
|
+
};
|
|
5679
|
+
}, [debouncedSetQuery]);
|
|
5680
|
+
const onSearchChange = useCallback(
|
|
5681
|
+
(value2) => {
|
|
5682
|
+
setSearchInput(value2);
|
|
5683
|
+
debouncedSetQuery(value2);
|
|
5684
|
+
},
|
|
5685
|
+
[debouncedSetQuery]
|
|
5686
|
+
);
|
|
5687
|
+
return { searchInput, searchQuery, onSearchChange };
|
|
5688
|
+
};
|
|
5689
|
+
const ActivityLogs = (props) => {
|
|
5690
|
+
const { t: t2 } = useTranslation();
|
|
5691
|
+
const navigate = useNavigate();
|
|
5692
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
5693
|
+
const [sessions, setSessions] = useState([]);
|
|
5694
|
+
const [activeTab, setActiveTab] = useState("upload");
|
|
5695
|
+
const { searchInput, searchQuery, onSearchChange } = useDebouncedSearch();
|
|
5696
|
+
const [dateFrom, setDateFrom] = useState(void 0);
|
|
5697
|
+
const [dateTo, setDateTo] = useState(void 0);
|
|
5698
|
+
const [showClearConfirm, setShowClearConfirm] = useState(false);
|
|
5699
|
+
const [clearSuccess, setClearSuccess] = useState(false);
|
|
5700
|
+
const [sortPreferences, setSortPreferences] = useState({});
|
|
5701
|
+
const saveSortTimerRef = useRef(null);
|
|
5702
|
+
const debouncedSaveSortPrefs = useCallback((prefs) => {
|
|
5703
|
+
if (saveSortTimerRef.current) clearTimeout(saveSortTimerRef.current);
|
|
5704
|
+
saveSortTimerRef.current = setTimeout(() => {
|
|
5705
|
+
void PluginSettingsService.updatePluginSettings({ activityLogsSort: prefs });
|
|
5706
|
+
}, 1e3);
|
|
5707
|
+
}, []);
|
|
5708
|
+
const onSortChange = (eventType, key, direction) => {
|
|
5709
|
+
const updated = { ...sortPreferences, [eventType]: { key, direction } };
|
|
5710
|
+
setSortPreferences(updated);
|
|
5711
|
+
debouncedSaveSortPrefs(updated);
|
|
5712
|
+
};
|
|
5713
|
+
const fetchSessions = async (type, showLoader = true) => {
|
|
5714
|
+
if (showLoader) setIsLoading(true);
|
|
5715
|
+
try {
|
|
5716
|
+
const data = await ActivityLogsService.getSessions(type);
|
|
5717
|
+
setSessions(data || []);
|
|
5718
|
+
} catch (e2) {
|
|
5719
|
+
console.error("Failed to fetch activity logs:", e2);
|
|
5720
|
+
setSessions([]);
|
|
5721
|
+
}
|
|
5722
|
+
if (showLoader) setIsLoading(false);
|
|
5723
|
+
};
|
|
5724
|
+
const onTabChange = (value2) => {
|
|
5725
|
+
setActiveTab(value2);
|
|
5726
|
+
void fetchSessions(value2, false);
|
|
5727
|
+
};
|
|
5728
|
+
const onSessionClick = (sessionId) => {
|
|
5729
|
+
navigate(`/plugins/${PLUGIN_ID}/activity-logs/${sessionId}`);
|
|
5730
|
+
};
|
|
5731
|
+
const onExportLogs = async () => {
|
|
5732
|
+
try {
|
|
5733
|
+
await exportLogsAsJson();
|
|
5734
|
+
} catch (e2) {
|
|
5735
|
+
console.error("Failed to export activity logs:", e2);
|
|
5736
|
+
}
|
|
5737
|
+
};
|
|
5738
|
+
const onClearLogs = async () => {
|
|
5739
|
+
try {
|
|
5740
|
+
await ActivityLogsService.clearSessions();
|
|
5741
|
+
setSessions([]);
|
|
5742
|
+
setClearSuccess(true);
|
|
5743
|
+
setShowClearConfirm(false);
|
|
5744
|
+
setTimeout(() => setClearSuccess(false), 3e3);
|
|
5745
|
+
} catch (e2) {
|
|
5746
|
+
console.error("Failed to clear activity logs:", e2);
|
|
5747
|
+
}
|
|
5748
|
+
};
|
|
5749
|
+
useEffect(() => {
|
|
5750
|
+
const init = async () => {
|
|
5751
|
+
try {
|
|
5752
|
+
const settings = await PluginSettingsService.getPluginSettings();
|
|
5753
|
+
if (settings?.activityLogsSort) {
|
|
5754
|
+
setSortPreferences(settings.activityLogsSort);
|
|
5755
|
+
}
|
|
5756
|
+
} catch {
|
|
5757
|
+
}
|
|
5758
|
+
void fetchSessions("upload");
|
|
5759
|
+
};
|
|
5760
|
+
void init();
|
|
5761
|
+
void PluginSettingsService.updatePluginSettings({ defaultRoute: PLUGIN_ROUTES.ACTIVITY_LOGS });
|
|
5762
|
+
}, []);
|
|
5763
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
5764
|
+
/* @__PURE__ */ jsx(
|
|
5765
|
+
Layouts.Header,
|
|
5766
|
+
{
|
|
5767
|
+
title: props.title,
|
|
5768
|
+
subtitle: props.subtitle,
|
|
5769
|
+
primaryAction: /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
5770
|
+
/* @__PURE__ */ jsx(Button, { variant: "secondary", startIcon: /* @__PURE__ */ jsx(ForwardRef$3P, {}), onClick: onExportLogs, children: t2("activity_logs.export_logs") }),
|
|
5771
|
+
/* @__PURE__ */ jsx(Button, { variant: "danger-light", startIcon: /* @__PURE__ */ jsx(ForwardRef$j, {}), onClick: () => setShowClearConfirm(true), children: t2("activity_logs.clear_logs") })
|
|
5772
|
+
] })
|
|
5773
|
+
}
|
|
5774
|
+
),
|
|
5775
|
+
/* @__PURE__ */ jsx(Box, { paddingRight: 10, paddingLeft: 10, paddingBottom: 4, children: /* @__PURE__ */ jsxs(Flex, { gap: 2, alignItems: "center", children: [
|
|
5776
|
+
/* @__PURE__ */ jsx(ForwardRef$2x, { width: 14, height: 14, fill: "neutral500" }),
|
|
5777
|
+
/* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral500", children: t2("activity_logs.retention_info") })
|
|
5778
|
+
] }) }),
|
|
5779
|
+
isLoading && /* @__PURE__ */ jsx(PluginPageLoader, {}),
|
|
5780
|
+
!isLoading && /* @__PURE__ */ jsxs(Box, { paddingRight: 10, paddingLeft: 10, children: [
|
|
5781
|
+
clearSuccess && /* @__PURE__ */ jsx(Box, { marginBottom: 4, children: /* @__PURE__ */ jsx(Alert, { onClose: () => setClearSuccess(false), closeLabel: t2("activity_logs.close"), variant: "success", children: t2("activity_logs.clear_logs_success") }) }),
|
|
5782
|
+
/* @__PURE__ */ jsxs(
|
|
5783
|
+
Box,
|
|
5784
|
+
{
|
|
5785
|
+
background: "neutral0",
|
|
5786
|
+
paddingTop: 6,
|
|
5787
|
+
paddingRight: 7,
|
|
5788
|
+
paddingBottom: 6,
|
|
5789
|
+
paddingLeft: 7,
|
|
5790
|
+
hasRadius: true,
|
|
5791
|
+
shadow: "tableShadow",
|
|
5792
|
+
children: [
|
|
5793
|
+
/* @__PURE__ */ jsxs(Flex, { marginBottom: 4, gap: 3, wrap: "wrap", alignItems: "center", children: [
|
|
5794
|
+
/* @__PURE__ */ jsx(Box, { grow: 1, basis: "200px", children: /* @__PURE__ */ jsx(Field.Root, { children: /* @__PURE__ */ jsx(
|
|
5795
|
+
Field.Input,
|
|
5796
|
+
{
|
|
5797
|
+
placeholder: t2("activity_logs.search_placeholder"),
|
|
5798
|
+
value: searchInput,
|
|
5799
|
+
onChange: (e2) => onSearchChange(e2.target.value)
|
|
5800
|
+
}
|
|
5801
|
+
) }) }),
|
|
5802
|
+
/* @__PURE__ */ jsx(Box, { basis: "160px", children: /* @__PURE__ */ jsx(
|
|
5803
|
+
DatePicker$1,
|
|
5804
|
+
{
|
|
5805
|
+
placeholder: t2("activity_logs.date_from"),
|
|
5806
|
+
value: dateFrom,
|
|
5807
|
+
onChange: (date) => {
|
|
5808
|
+
if (!date) {
|
|
5809
|
+
setDateFrom(void 0);
|
|
5810
|
+
return;
|
|
5811
|
+
}
|
|
5812
|
+
setDateFrom(new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate())));
|
|
5813
|
+
},
|
|
5814
|
+
onClear: () => setDateFrom(void 0),
|
|
5815
|
+
clearLabel: t2("activity_logs.clear"),
|
|
5816
|
+
size: "M"
|
|
5817
|
+
}
|
|
5818
|
+
) }),
|
|
5819
|
+
/* @__PURE__ */ jsx(Box, { basis: "160px", children: /* @__PURE__ */ jsx(
|
|
5820
|
+
DatePicker$1,
|
|
5821
|
+
{
|
|
5822
|
+
placeholder: t2("activity_logs.date_to"),
|
|
5823
|
+
value: dateTo,
|
|
5824
|
+
onChange: (date) => {
|
|
5825
|
+
if (!date) {
|
|
5826
|
+
setDateTo(void 0);
|
|
5827
|
+
return;
|
|
5828
|
+
}
|
|
5829
|
+
setDateTo(new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate())));
|
|
5830
|
+
},
|
|
5831
|
+
onClear: () => setDateTo(void 0),
|
|
5832
|
+
clearLabel: t2("activity_logs.clear"),
|
|
5833
|
+
size: "M"
|
|
5834
|
+
}
|
|
5835
|
+
) })
|
|
5836
|
+
] }),
|
|
5837
|
+
/* @__PURE__ */ jsxs(Tabs.Root, { value: activeTab, onValueChange: onTabChange, children: [
|
|
5838
|
+
/* @__PURE__ */ jsxs(Tabs.List, { children: [
|
|
5839
|
+
/* @__PURE__ */ jsx(Tabs.Trigger, { value: "upload", children: t2("activity_logs.tab_upload") }),
|
|
5840
|
+
/* @__PURE__ */ jsx(Tabs.Trigger, { value: "download", children: t2("activity_logs.tab_download") }),
|
|
5841
|
+
/* @__PURE__ */ jsx(Tabs.Trigger, { value: "webhook", children: t2("activity_logs.tab_webhooks") })
|
|
5842
|
+
] }),
|
|
5843
|
+
/* @__PURE__ */ jsx(Tabs.Content, { value: "upload", children: /* @__PURE__ */ jsx(
|
|
5844
|
+
SessionsTable,
|
|
5845
|
+
{
|
|
5846
|
+
sessions,
|
|
5847
|
+
searchQuery,
|
|
5848
|
+
dateFrom,
|
|
5849
|
+
dateTo,
|
|
5850
|
+
eventType: "upload",
|
|
5851
|
+
sortPreferences,
|
|
5852
|
+
onSortChange,
|
|
5853
|
+
onSessionClick,
|
|
5854
|
+
t: t2
|
|
5855
|
+
}
|
|
5856
|
+
) }),
|
|
5857
|
+
/* @__PURE__ */ jsx(Tabs.Content, { value: "download", children: /* @__PURE__ */ jsx(
|
|
5858
|
+
SessionsTable,
|
|
5859
|
+
{
|
|
5860
|
+
sessions,
|
|
5861
|
+
searchQuery,
|
|
5862
|
+
dateFrom,
|
|
5863
|
+
dateTo,
|
|
5864
|
+
eventType: "download",
|
|
5865
|
+
sortPreferences,
|
|
5866
|
+
onSortChange,
|
|
5867
|
+
onSessionClick,
|
|
5868
|
+
t: t2
|
|
5869
|
+
}
|
|
5870
|
+
) }),
|
|
5871
|
+
/* @__PURE__ */ jsx(Tabs.Content, { value: "webhook", children: /* @__PURE__ */ jsx(
|
|
5872
|
+
SessionsTable,
|
|
5873
|
+
{
|
|
5874
|
+
sessions,
|
|
5875
|
+
searchQuery,
|
|
5876
|
+
dateFrom,
|
|
5877
|
+
dateTo,
|
|
5878
|
+
eventType: "webhook",
|
|
5879
|
+
sortPreferences,
|
|
5880
|
+
onSortChange,
|
|
5881
|
+
onSessionClick,
|
|
5882
|
+
t: t2
|
|
5883
|
+
}
|
|
5884
|
+
) })
|
|
5885
|
+
] })
|
|
5886
|
+
]
|
|
5887
|
+
}
|
|
5888
|
+
)
|
|
5889
|
+
] }),
|
|
5890
|
+
/* @__PURE__ */ jsx(Dialog.Root, { open: showClearConfirm, onOpenChange: setShowClearConfirm, children: /* @__PURE__ */ jsxs(Dialog.Content, { children: [
|
|
5891
|
+
/* @__PURE__ */ jsx(Dialog.Header, { children: t2("activity_logs.clear_logs") }),
|
|
5892
|
+
/* @__PURE__ */ jsx(Dialog.Body, { children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: t2("activity_logs.clear_logs_confirm") }) }),
|
|
5893
|
+
/* @__PURE__ */ jsxs(Dialog.Footer, { children: [
|
|
5894
|
+
/* @__PURE__ */ jsx(Dialog.Cancel, { children: /* @__PURE__ */ jsx(Button, { variant: "tertiary", children: t2("activity_logs.close") }) }),
|
|
5895
|
+
/* @__PURE__ */ jsx(Dialog.Action, { children: /* @__PURE__ */ jsx(Button, { variant: "danger-light", onClick: onClearLogs, children: t2("activity_logs.clear_logs") }) })
|
|
5896
|
+
] })
|
|
5897
|
+
] }) })
|
|
5898
|
+
] });
|
|
5899
|
+
};
|
|
5900
|
+
const SessionMetadata = ({ session, showEntryCount }) => {
|
|
5901
|
+
const { t: t2 } = useTranslation();
|
|
5902
|
+
return /* @__PURE__ */ jsxs(Flex, { gap: 6, wrap: "wrap", children: [
|
|
5903
|
+
/* @__PURE__ */ jsxs(Box, { children: [
|
|
5904
|
+
/* @__PURE__ */ jsx(Typography, { variant: "sigma", textColor: "neutral600", children: t2("activity_logs.status") }),
|
|
5905
|
+
/* @__PURE__ */ jsx("br", {}),
|
|
5906
|
+
/* @__PURE__ */ jsx(StatusLabel, { status: session.status })
|
|
5907
|
+
] }),
|
|
5908
|
+
/* @__PURE__ */ jsxs(Box, { children: [
|
|
5909
|
+
/* @__PURE__ */ jsx(Typography, { variant: "sigma", textColor: "neutral600", children: t2("activity_logs.started_at") }),
|
|
5910
|
+
/* @__PURE__ */ jsx("br", {}),
|
|
5911
|
+
/* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatDate(session.startedAt) })
|
|
5912
|
+
] }),
|
|
5913
|
+
/* @__PURE__ */ jsxs(Box, { children: [
|
|
5914
|
+
/* @__PURE__ */ jsx(Typography, { variant: "sigma", textColor: "neutral600", children: t2("activity_logs.duration") }),
|
|
5915
|
+
/* @__PURE__ */ jsx("br", {}),
|
|
5916
|
+
/* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatDuration(session.startedAt, session.finishedAt) })
|
|
5917
|
+
] }),
|
|
5918
|
+
/* @__PURE__ */ jsxs(Box, { children: [
|
|
5919
|
+
/* @__PURE__ */ jsx(Typography, { variant: "sigma", textColor: "neutral600", children: t2("activity_logs.initiated_by") }),
|
|
5920
|
+
/* @__PURE__ */ jsx("br", {}),
|
|
5921
|
+
/* @__PURE__ */ jsx(Typography, { variant: "omega", children: session.initiatedBy })
|
|
5922
|
+
] }),
|
|
5923
|
+
showEntryCount !== void 0 && /* @__PURE__ */ jsxs(Box, { children: [
|
|
5924
|
+
/* @__PURE__ */ jsx(Typography, { variant: "sigma", textColor: "neutral600", children: t2("activity_logs.entries_count") }),
|
|
5925
|
+
/* @__PURE__ */ jsx("br", {}),
|
|
5926
|
+
/* @__PURE__ */ jsx(Typography, { variant: "omega", children: showEntryCount })
|
|
5927
|
+
] })
|
|
5928
|
+
] });
|
|
5929
|
+
};
|
|
5930
|
+
const ActivityLogDetail = (props) => {
|
|
5931
|
+
const { t: t2 } = useTranslation();
|
|
5932
|
+
const theme = useTheme();
|
|
5933
|
+
const { sessionId } = useParams();
|
|
5934
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
5935
|
+
const [session, setSession] = useState(null);
|
|
5936
|
+
const { searchInput, searchQuery, onSearchChange } = useDebouncedSearch();
|
|
5937
|
+
useEffect(() => {
|
|
5938
|
+
const fetchSession = async () => {
|
|
5939
|
+
if (!sessionId) return;
|
|
5940
|
+
setIsLoading(true);
|
|
5941
|
+
try {
|
|
5942
|
+
const data = await ActivityLogsService.getSession(sessionId);
|
|
5943
|
+
setSession(data);
|
|
5944
|
+
} catch (e2) {
|
|
5945
|
+
console.error("Failed to fetch session detail:", e2);
|
|
5946
|
+
}
|
|
5947
|
+
setIsLoading(false);
|
|
5948
|
+
};
|
|
5949
|
+
void fetchSession();
|
|
5950
|
+
}, [sessionId]);
|
|
5951
|
+
const filteredEntries = (session?.entries || []).filter((entry) => {
|
|
5952
|
+
if (!searchQuery) return true;
|
|
5953
|
+
const query = searchQuery.toLowerCase();
|
|
5954
|
+
return entry.message.toLowerCase().includes(query) || formatTime(entry.timestamp).toLowerCase().includes(query);
|
|
5955
|
+
});
|
|
5956
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
5957
|
+
/* @__PURE__ */ jsx(
|
|
5958
|
+
Layouts.Header,
|
|
5959
|
+
{
|
|
5960
|
+
title: props.title,
|
|
5961
|
+
subtitle: props.subtitle,
|
|
5962
|
+
navigationAction: /* @__PURE__ */ jsx(Link, { tag: NavLink, to: `/plugins/${PLUGIN_ID}/activity-logs`, startIcon: /* @__PURE__ */ jsx(ForwardRef$57, {}), children: t2("activity_logs.back_to_list") })
|
|
5963
|
+
}
|
|
5964
|
+
),
|
|
5965
|
+
isLoading && /* @__PURE__ */ jsx(PluginPageLoader, {}),
|
|
5966
|
+
!isLoading && !session && /* @__PURE__ */ jsx(Box, { paddingRight: 10, paddingLeft: 10, children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: t2("activity_logs.no_sessions") }) }),
|
|
5967
|
+
!isLoading && session && /* @__PURE__ */ jsxs(Box, { paddingRight: 10, paddingLeft: 10, children: [
|
|
5968
|
+
/* @__PURE__ */ jsxs(
|
|
5969
|
+
Box,
|
|
5970
|
+
{
|
|
5971
|
+
background: "neutral0",
|
|
5972
|
+
paddingTop: 6,
|
|
5973
|
+
paddingRight: 7,
|
|
5974
|
+
paddingBottom: 6,
|
|
5975
|
+
paddingLeft: 7,
|
|
5976
|
+
hasRadius: true,
|
|
5977
|
+
shadow: "tableShadow",
|
|
5978
|
+
children: [
|
|
5979
|
+
/* @__PURE__ */ jsx(SessionMetadata, { session, showEntryCount: session.entries.length }),
|
|
5980
|
+
session.summary && /* @__PURE__ */ jsxs(Box, { marginTop: 4, children: [
|
|
5981
|
+
/* @__PURE__ */ jsx(Typography, { variant: "sigma", textColor: "neutral600", children: t2("activity_logs.summary") }),
|
|
5982
|
+
/* @__PURE__ */ jsx("br", {}),
|
|
5983
|
+
/* @__PURE__ */ jsx(Typography, { variant: "omega", children: session.summary })
|
|
5984
|
+
] })
|
|
5985
|
+
]
|
|
5986
|
+
}
|
|
5987
|
+
),
|
|
5988
|
+
/* @__PURE__ */ jsx(Box, { marginTop: 4, children: /* @__PURE__ */ jsxs(
|
|
5989
|
+
Box,
|
|
5990
|
+
{
|
|
5991
|
+
background: "neutral0",
|
|
5992
|
+
paddingTop: 6,
|
|
5993
|
+
paddingRight: 7,
|
|
5994
|
+
paddingBottom: 6,
|
|
5995
|
+
paddingLeft: 7,
|
|
5996
|
+
hasRadius: true,
|
|
5997
|
+
shadow: "tableShadow",
|
|
5998
|
+
children: [
|
|
5999
|
+
/* @__PURE__ */ jsx(Box, { marginBottom: 4, children: /* @__PURE__ */ jsx(Field.Root, { children: /* @__PURE__ */ jsx(
|
|
6000
|
+
Field.Input,
|
|
6001
|
+
{
|
|
6002
|
+
placeholder: t2("activity_logs.search_entries_placeholder"),
|
|
6003
|
+
value: searchInput,
|
|
6004
|
+
onChange: (e2) => onSearchChange(e2.target.value)
|
|
6005
|
+
}
|
|
6006
|
+
) }) }),
|
|
6007
|
+
/* @__PURE__ */ jsx(Divider, {}),
|
|
6008
|
+
filteredEntries.length === 0 && /* @__PURE__ */ jsx(Box, { padding: 4, children: /* @__PURE__ */ jsx(Typography, { variant: "omega", textColor: "neutral600", children: t2("activity_logs.no_entries") }) }),
|
|
6009
|
+
filteredEntries.map((entry, index) => /* @__PURE__ */ jsxs(
|
|
6010
|
+
Box,
|
|
6011
|
+
{
|
|
6012
|
+
paddingTop: 3,
|
|
6013
|
+
paddingBottom: 3,
|
|
6014
|
+
paddingLeft: 4,
|
|
6015
|
+
paddingRight: 4,
|
|
6016
|
+
style: {
|
|
6017
|
+
borderBottom: index < filteredEntries.length - 1 ? `1px solid ${theme.colors.neutral150}` : "none",
|
|
6018
|
+
fontFamily: "monospace"
|
|
6019
|
+
},
|
|
6020
|
+
children: [
|
|
6021
|
+
/* @__PURE__ */ jsxs(Flex, { gap: 3, children: [
|
|
6022
|
+
/* @__PURE__ */ jsx(
|
|
6023
|
+
Typography,
|
|
6024
|
+
{
|
|
6025
|
+
variant: "pi",
|
|
6026
|
+
textColor: "neutral500",
|
|
6027
|
+
style: { whiteSpace: "nowrap", fontFamily: "monospace" },
|
|
6028
|
+
children: /* @__PURE__ */ jsx(HighlightMatch, { text: formatTime(entry.timestamp), query: searchQuery })
|
|
6029
|
+
}
|
|
6030
|
+
),
|
|
6031
|
+
/* @__PURE__ */ jsx(Typography, { variant: "omega", style: { fontFamily: "monospace" }, children: /* @__PURE__ */ jsx(HighlightMatch, { text: entry.message, query: searchQuery }) })
|
|
6032
|
+
] }),
|
|
6033
|
+
entry.data && /* @__PURE__ */ jsx(Box, { marginTop: 2, marginLeft: 6, children: /* @__PURE__ */ jsx(
|
|
6034
|
+
Typography,
|
|
6035
|
+
{
|
|
6036
|
+
variant: "pi",
|
|
6037
|
+
textColor: "neutral500",
|
|
6038
|
+
style: {
|
|
6039
|
+
fontFamily: "monospace",
|
|
6040
|
+
whiteSpace: "pre-wrap",
|
|
6041
|
+
wordBreak: "break-all"
|
|
6042
|
+
},
|
|
6043
|
+
children: JSON.stringify(entry.data, null, 2)
|
|
6044
|
+
}
|
|
6045
|
+
) })
|
|
6046
|
+
]
|
|
6047
|
+
},
|
|
6048
|
+
index
|
|
6049
|
+
))
|
|
6050
|
+
]
|
|
6051
|
+
}
|
|
6052
|
+
) })
|
|
6053
|
+
] })
|
|
6054
|
+
] });
|
|
6055
|
+
};
|
|
5346
6056
|
const App = () => {
|
|
5347
6057
|
const { navigateToPluginRoute } = useRedirectToPluginRoute();
|
|
5348
6058
|
const location2 = useLocation();
|
|
@@ -5368,24 +6078,41 @@ const App = () => {
|
|
|
5368
6078
|
navigateToPluginRoute(lastRoute);
|
|
5369
6079
|
}
|
|
5370
6080
|
};
|
|
5371
|
-
fetchData();
|
|
6081
|
+
void fetchData();
|
|
5372
6082
|
}, [isLoggedIn, isFetchingIdentity, normalizedPath]);
|
|
5373
|
-
return /* @__PURE__ */
|
|
5374
|
-
|
|
5375
|
-
/* @__PURE__ */ jsxs(
|
|
5376
|
-
|
|
5377
|
-
/* @__PURE__ */
|
|
5378
|
-
|
|
5379
|
-
|
|
5380
|
-
|
|
5381
|
-
|
|
5382
|
-
|
|
5383
|
-
|
|
5384
|
-
|
|
5385
|
-
|
|
5386
|
-
|
|
5387
|
-
|
|
5388
|
-
|
|
6083
|
+
return /* @__PURE__ */ jsxs(DesignSystemProvider, { theme: getDefaultTheme(), children: [
|
|
6084
|
+
/* @__PURE__ */ jsx(HeadingFixGlobalStyle, {}),
|
|
6085
|
+
/* @__PURE__ */ jsx(PluginErrorBoundary, { children: /* @__PURE__ */ jsx(Box, { background: "neutral100", children: /* @__PURE__ */ jsxs(Layouts.Root, { sideNav: isLoggedIn && /* @__PURE__ */ jsx(SideNav, {}), children: [
|
|
6086
|
+
isFetchingIdentity && /* @__PURE__ */ jsx(PluginPageLoader, {}),
|
|
6087
|
+
/* @__PURE__ */ jsxs(Routes, { children: [
|
|
6088
|
+
/* @__PURE__ */ jsx(
|
|
6089
|
+
Route,
|
|
6090
|
+
{
|
|
6091
|
+
path: `login`,
|
|
6092
|
+
element: /* @__PURE__ */ jsx(Login, { title: headerTitle, subtitle: headerSubtitle, isLoading: false })
|
|
6093
|
+
}
|
|
6094
|
+
),
|
|
6095
|
+
/* @__PURE__ */ jsx(
|
|
6096
|
+
Route,
|
|
6097
|
+
{
|
|
6098
|
+
path: `overview`,
|
|
6099
|
+
element: /* @__PURE__ */ jsx(Overview, { title: headerTitle, subtitle: headerSubtitle, isLoadingProp: false })
|
|
6100
|
+
}
|
|
6101
|
+
),
|
|
6102
|
+
/* @__PURE__ */ jsx(Route, { path: `upload`, element: /* @__PURE__ */ jsx(Upload, { title: headerTitle, subtitle: headerSubtitle }) }),
|
|
6103
|
+
/* @__PURE__ */ jsx(Route, { path: `download`, element: /* @__PURE__ */ jsx(Download, { title: headerTitle, subtitle: headerSubtitle }) }),
|
|
6104
|
+
/* @__PURE__ */ jsx(Route, { path: `activity-logs`, element: /* @__PURE__ */ jsx(ActivityLogs, { title: headerTitle, subtitle: headerSubtitle }) }),
|
|
6105
|
+
/* @__PURE__ */ jsx(
|
|
6106
|
+
Route,
|
|
6107
|
+
{
|
|
6108
|
+
path: `activity-logs/:sessionId`,
|
|
6109
|
+
element: /* @__PURE__ */ jsx(ActivityLogDetail, { title: headerTitle, subtitle: headerSubtitle })
|
|
6110
|
+
}
|
|
6111
|
+
),
|
|
6112
|
+
/* @__PURE__ */ jsx(Route, { path: "*", element: /* @__PURE__ */ jsx(Page.Error, {}) })
|
|
6113
|
+
] })
|
|
6114
|
+
] }) }) })
|
|
6115
|
+
] });
|
|
5389
6116
|
};
|
|
5390
6117
|
const LocalazyApp = () => /* @__PURE__ */ jsxs(LocalazyIdentityProvider, { children: [
|
|
5391
6118
|
/* @__PURE__ */ jsx(FetchIdentity, {}),
|