@open-mercato/core 0.7.1-develop.7153.1.7145d295e6 → 0.7.1-develop.7170.1.d95074d7ba
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/.turbo/turbo-build.log +1 -1
- package/AGENTS.md +2 -2
- package/dist/modules/auth/commands/users.js +14 -1
- package/dist/modules/auth/commands/users.js.map +2 -2
- package/dist/modules/auth/data/entities.js +2 -2
- package/dist/modules/auth/data/entities.js.map +2 -2
- package/dist/modules/auth/lib/backendChrome.js +26 -3
- package/dist/modules/auth/lib/backendChrome.js.map +2 -2
- package/dist/modules/auth/lib/profile-sections.js +1 -1
- package/dist/modules/auth/lib/profile-sections.js.map +2 -2
- package/dist/modules/auth/migrations/Migration20260907120000_auth.js +19 -0
- package/dist/modules/auth/migrations/Migration20260907120000_auth.js.map +7 -0
- package/dist/modules/communication_channels/backend/profile/communication-channels/page.meta.js +2 -2
- package/dist/modules/communication_channels/backend/profile/communication-channels/page.meta.js.map +1 -1
- package/dist/modules/customer_accounts/api/admin/demo-accounts.js +118 -0
- package/dist/modules/customer_accounts/api/admin/demo-accounts.js.map +7 -0
- package/dist/modules/customer_accounts/api/invitations/accept.js +23 -6
- package/dist/modules/customer_accounts/api/invitations/accept.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.js +10 -13
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/useDemoPortalAccounts.js +28 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/useDemoPortalAccounts.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js +6 -1
- package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js.map +2 -2
- package/dist/modules/customer_accounts/data/entities.js +4 -1
- package/dist/modules/customer_accounts/data/entities.js.map +2 -2
- package/dist/modules/customer_accounts/lib/exampleAccounts.js +9 -0
- package/dist/modules/customer_accounts/lib/exampleAccounts.js.map +7 -0
- package/dist/modules/customer_accounts/migrations/Migration20260827160000_customer_accounts.js +16 -0
- package/dist/modules/customer_accounts/migrations/Migration20260827160000_customer_accounts.js.map +7 -0
- package/dist/modules/customer_accounts/services/customerInvitationService.js +53 -6
- package/dist/modules/customer_accounts/services/customerInvitationService.js.map +2 -2
- package/dist/modules/customer_accounts/setup.js +2 -6
- package/dist/modules/customer_accounts/setup.js.map +2 -2
- package/dist/modules/customer_accounts/widgets/injection/account-status/widget.client.js +55 -40
- package/dist/modules/customer_accounts/widgets/injection/account-status/widget.client.js.map +2 -2
- package/dist/modules/customers/commands/people.js +16 -1
- package/dist/modules/customers/commands/people.js.map +2 -2
- package/dist/modules/data_sync/backend/data-sync/runs/[id]/page.js +18 -36
- package/dist/modules/data_sync/backend/data-sync/runs/[id]/page.js.map +2 -2
- package/dist/modules/data_sync/lib/sync-schedule-service.js +25 -23
- package/dist/modules/data_sync/lib/sync-schedule-service.js.map +2 -2
- package/dist/modules/entities/api/records.js +18 -15
- package/dist/modules/entities/api/records.js.map +3 -3
- package/dist/modules/entities/lib/scoped-field-defs.js +52 -0
- package/dist/modules/entities/lib/scoped-field-defs.js.map +7 -0
- package/dist/modules/entities/lib/validation.js +4 -35
- package/dist/modules/entities/lib/validation.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/[id]/page.js +32 -54
- package/dist/modules/integrations/backend/integrations/[id]/page.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js +12 -29
- package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js.map +2 -2
- package/dist/modules/notifications/backend/profile/notification-preferences/page.meta.js +2 -2
- package/dist/modules/notifications/backend/profile/notification-preferences/page.meta.js.map +1 -1
- package/dist/modules/progress/lib/progressServiceImpl.js +14 -3
- package/dist/modules/progress/lib/progressServiceImpl.js.map +2 -2
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +9 -9
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/sales/components/documents/LineItemDialog.js +50 -10
- package/dist/modules/sales/components/documents/LineItemDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/PaymentsSection.js +8 -3
- package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/ReturnEditDialog.js +2 -7
- package/dist/modules/sales/components/documents/ReturnEditDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/ReturnsSection.js +2 -7
- package/dist/modules/sales/components/documents/ReturnsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/ShipmentsSection.js +3 -8
- package/dist/modules/sales/components/documents/ShipmentsSection.js.map +2 -2
- package/package.json +7 -7
- package/src/modules/auth/commands/users.ts +14 -1
- package/src/modules/auth/data/entities.ts +2 -2
- package/src/modules/auth/lib/backendChrome.tsx +46 -2
- package/src/modules/auth/lib/profile-sections.tsx +14 -3
- package/src/modules/auth/migrations/.snapshot-open-mercato.json +4 -2
- package/src/modules/auth/migrations/Migration20260907120000_auth.ts +21 -0
- package/src/modules/communication_channels/backend/profile/communication-channels/page.meta.ts +2 -2
- package/src/modules/customer_accounts/AGENTS.md +3 -1
- package/src/modules/customer_accounts/api/admin/demo-accounts.ts +149 -0
- package/src/modules/customer_accounts/api/invitations/accept.ts +23 -6
- package/src/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.tsx +43 -41
- package/src/modules/customer_accounts/backend/customer_accounts/useDemoPortalAccounts.ts +42 -0
- package/src/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.tsx +10 -3
- package/src/modules/customer_accounts/data/entities.ts +5 -1
- package/src/modules/customer_accounts/i18n/de.json +4 -2
- package/src/modules/customer_accounts/i18n/en.json +4 -2
- package/src/modules/customer_accounts/i18n/es.json +4 -2
- package/src/modules/customer_accounts/i18n/ko.json +4 -2
- package/src/modules/customer_accounts/i18n/pl.json +4 -2
- package/src/modules/customer_accounts/lib/exampleAccounts.ts +18 -0
- package/src/modules/customer_accounts/migrations/.snapshot-open-mercato.json +5 -7
- package/src/modules/customer_accounts/migrations/Migration20260827160000_customer_accounts.ts +23 -0
- package/src/modules/customer_accounts/services/customerInvitationService.ts +89 -5
- package/src/modules/customer_accounts/setup.ts +2 -6
- package/src/modules/customer_accounts/widgets/injection/account-status/widget.client.tsx +74 -41
- package/src/modules/customers/commands/people.ts +15 -0
- package/src/modules/data_sync/backend/data-sync/runs/[id]/page.tsx +19 -44
- package/src/modules/data_sync/lib/sync-schedule-service.ts +32 -26
- package/src/modules/entities/api/records.ts +24 -15
- package/src/modules/entities/lib/scoped-field-defs.ts +76 -0
- package/src/modules/entities/lib/validation.ts +5 -45
- package/src/modules/integrations/backend/integrations/[id]/page.tsx +33 -62
- package/src/modules/integrations/backend/integrations/bundle/[id]/page.tsx +13 -37
- package/src/modules/notifications/backend/profile/notification-preferences/page.meta.ts +2 -2
- package/src/modules/progress/AGENTS.md +1 -1
- package/src/modules/progress/lib/progressServiceImpl.ts +26 -3
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +19 -25
- package/src/modules/sales/components/documents/LineItemDialog.tsx +53 -9
- package/src/modules/sales/components/documents/PaymentsSection.tsx +8 -8
- package/src/modules/sales/components/documents/ReturnEditDialog.tsx +2 -8
- package/src/modules/sales/components/documents/ReturnsSection.tsx +8 -7
- package/src/modules/sales/components/documents/ShipmentsSection.tsx +9 -8
- package/src/modules/sales/i18n/de.json +2 -0
- package/src/modules/sales/i18n/en.json +2 -0
- package/src/modules/sales/i18n/es.json +2 -0
- package/src/modules/sales/i18n/ko.json +2 -0
- package/src/modules/sales/i18n/pl.json +2 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { extensionPoints } from "@open-mercato/core/modules/integrations/extension-points";
|
|
5
|
-
import {
|
|
5
|
+
import { useRouter, useSearchParams } from "next/navigation";
|
|
6
6
|
import { z } from "zod";
|
|
7
7
|
import { Page, PageBody } from "@open-mercato/ui/backend/Page";
|
|
8
8
|
import { CrudForm } from "@open-mercato/ui/backend/CrudForm";
|
|
@@ -166,16 +166,6 @@ const CATEGORY_ICONS = {
|
|
|
166
166
|
storage: HardDrive,
|
|
167
167
|
webhook: Webhook
|
|
168
168
|
};
|
|
169
|
-
function resolveRouteId(value) {
|
|
170
|
-
if (Array.isArray(value)) return value[0];
|
|
171
|
-
return value;
|
|
172
|
-
}
|
|
173
|
-
function resolvePathnameId(pathname) {
|
|
174
|
-
const parts = pathname.split("/").filter(Boolean);
|
|
175
|
-
const integrationId = parts.at(-1);
|
|
176
|
-
if (!integrationId || integrationId === "integrations" || integrationId === "bundle") return void 0;
|
|
177
|
-
return decodeURIComponent(integrationId);
|
|
178
|
-
}
|
|
179
169
|
function buildCredentialFields(credFields, secretFieldsConfigured, t) {
|
|
180
170
|
return credFields.map((field) => {
|
|
181
171
|
const baseDescription = field.helpDetails ? /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
|
|
@@ -282,10 +272,9 @@ function splitLogPayload(payload) {
|
|
|
282
272
|
return { inlineEntries, nestedEntries };
|
|
283
273
|
}
|
|
284
274
|
function IntegrationDetailPage({ params }) {
|
|
285
|
-
const pathname = usePathname();
|
|
286
275
|
const router = useRouter();
|
|
287
276
|
const searchParams = useSearchParams();
|
|
288
|
-
const integrationId =
|
|
277
|
+
const integrationId = params?.id;
|
|
289
278
|
const t = useT();
|
|
290
279
|
const [detail, setDetail] = React.useState(null);
|
|
291
280
|
const [isLoading, setIsLoading] = React.useState(true);
|
|
@@ -311,13 +300,9 @@ function IntegrationDetailPage({ params }) {
|
|
|
311
300
|
isLoading: isLoadingCredentialsAccess,
|
|
312
301
|
canManageCredentials
|
|
313
302
|
} = useIntegrationCredentialsFeatureAccess();
|
|
314
|
-
const resolveCurrentIntegrationId = React.useCallback(() => {
|
|
315
|
-
return integrationId ?? (typeof window !== "undefined" ? resolvePathnameId(window.location.pathname) : void 0);
|
|
316
|
-
}, [integrationId]);
|
|
317
303
|
const loadDetail = React.useCallback(async (options) => {
|
|
318
304
|
const showLoading = options?.showLoading ?? true;
|
|
319
|
-
|
|
320
|
-
if (!currentIntegrationId) {
|
|
305
|
+
if (!integrationId) {
|
|
321
306
|
if (showLoading) setIsLoading(false);
|
|
322
307
|
if (showLoading) setError(t("integrations.detail.loadError", "Failed to load integration"));
|
|
323
308
|
return;
|
|
@@ -327,7 +312,7 @@ function IntegrationDetailPage({ params }) {
|
|
|
327
312
|
if (showLoading) setIsLoading(true);
|
|
328
313
|
try {
|
|
329
314
|
const call = await apiCall(
|
|
330
|
-
`/api/integrations/${encodeURIComponent(
|
|
315
|
+
`/api/integrations/${encodeURIComponent(integrationId)}`,
|
|
331
316
|
void 0,
|
|
332
317
|
{ fallback: null }
|
|
333
318
|
);
|
|
@@ -347,12 +332,11 @@ function IntegrationDetailPage({ params }) {
|
|
|
347
332
|
if (showLoading) setError(t("integrations.detail.loadError", "Failed to load integration"));
|
|
348
333
|
if (showLoading) setIsLoading(false);
|
|
349
334
|
}
|
|
350
|
-
}, [
|
|
335
|
+
}, [integrationId, t]);
|
|
351
336
|
const loadCredentials = React.useCallback(async () => {
|
|
352
|
-
|
|
353
|
-
if (!currentIntegrationId) return;
|
|
337
|
+
if (!integrationId) return;
|
|
354
338
|
const call = await apiCall(
|
|
355
|
-
`/api/integrations/${encodeURIComponent(
|
|
339
|
+
`/api/integrations/${encodeURIComponent(integrationId)}/credentials`,
|
|
356
340
|
{ headers: credentialsRequestHeaders },
|
|
357
341
|
{ fallback: null }
|
|
358
342
|
);
|
|
@@ -362,7 +346,7 @@ function IntegrationDetailPage({ params }) {
|
|
|
362
346
|
}
|
|
363
347
|
if (call.ok && call.result?.credentials) {
|
|
364
348
|
const next = { ...call.result.credentials };
|
|
365
|
-
if (
|
|
349
|
+
if (integrationId === "storage_s3") {
|
|
366
350
|
const authMode = next.authMode;
|
|
367
351
|
if (authMode !== "access_keys" && authMode !== "ambient") {
|
|
368
352
|
const hasKeys = Boolean(next.accessKeyId || next.secretAccessKey);
|
|
@@ -372,12 +356,11 @@ function IntegrationDetailPage({ params }) {
|
|
|
372
356
|
setCredValues(next);
|
|
373
357
|
setCredentialsFormKey((current) => current + 1);
|
|
374
358
|
}
|
|
375
|
-
}, [
|
|
359
|
+
}, [integrationId]);
|
|
376
360
|
const loadLogs = React.useCallback(async () => {
|
|
377
|
-
|
|
378
|
-
if (!currentIntegrationId) return;
|
|
361
|
+
if (!integrationId) return;
|
|
379
362
|
setIsLoadingLogs(true);
|
|
380
|
-
const params2 = new URLSearchParams({ integrationId
|
|
363
|
+
const params2 = new URLSearchParams({ integrationId, pageSize: "50" });
|
|
381
364
|
if (logLevel) params2.set("level", logLevel);
|
|
382
365
|
const call = await apiCall(
|
|
383
366
|
`/api/integrations/logs?${params2.toString()}`,
|
|
@@ -388,7 +371,7 @@ function IntegrationDetailPage({ params }) {
|
|
|
388
371
|
setLogs(call.result.items);
|
|
389
372
|
}
|
|
390
373
|
setIsLoadingLogs(false);
|
|
391
|
-
}, [logLevel,
|
|
374
|
+
}, [logLevel, integrationId]);
|
|
392
375
|
const detailWidgetSpotId = React.useMemo(
|
|
393
376
|
() => resolveIntegrationDetailWidgetSpotId(detail?.integration ?? null, extensionPoints.hosts.legacyDetailTabs.spotId),
|
|
394
377
|
[detail?.integration]
|
|
@@ -523,16 +506,15 @@ function IntegrationDetailPage({ params }) {
|
|
|
523
506
|
void loadLogs();
|
|
524
507
|
}, [loadLogs]);
|
|
525
508
|
const handleToggleState = React.useCallback(async (enabled) => {
|
|
526
|
-
|
|
527
|
-
if (!currentIntegrationId) return;
|
|
509
|
+
if (!integrationId) return;
|
|
528
510
|
setIsTogglingState(true);
|
|
529
511
|
try {
|
|
530
512
|
const call = await runMutationWithContext({
|
|
531
513
|
actionId: "toggle-state",
|
|
532
|
-
mutationPayload: { integrationId
|
|
514
|
+
mutationPayload: { integrationId, isEnabled: enabled },
|
|
533
515
|
operation: () => withScopedApiRequestHeaders(
|
|
534
516
|
buildOptimisticLockHeader(detail?.state.updatedAt),
|
|
535
|
-
() => apiCall(`/api/integrations/${encodeURIComponent(
|
|
517
|
+
() => apiCall(`/api/integrations/${encodeURIComponent(integrationId)}/state`, {
|
|
536
518
|
method: "PUT",
|
|
537
519
|
headers: { "Content-Type": "application/json" },
|
|
538
520
|
body: JSON.stringify({ isEnabled: enabled })
|
|
@@ -558,15 +540,14 @@ function IntegrationDetailPage({ params }) {
|
|
|
558
540
|
} finally {
|
|
559
541
|
setIsTogglingState(false);
|
|
560
542
|
}
|
|
561
|
-
}, [detail?.state.updatedAt, refreshDetail,
|
|
543
|
+
}, [detail?.state.updatedAt, refreshDetail, integrationId, runMutationWithContext, t]);
|
|
562
544
|
const handleSaveCredentials = React.useCallback(async (values) => {
|
|
563
|
-
|
|
564
|
-
if (!currentIntegrationId) return;
|
|
545
|
+
if (!integrationId) return;
|
|
565
546
|
setIsSavingCredentials(true);
|
|
566
547
|
try {
|
|
567
548
|
const credentialFields = detail?.integration.credentials?.fields ?? detail?.bundle?.credentials?.fields ?? [];
|
|
568
549
|
const savePayload = buildIntegrationCredentialSavePayload(
|
|
569
|
-
|
|
550
|
+
integrationId,
|
|
570
551
|
values,
|
|
571
552
|
credentialFields,
|
|
572
553
|
secretFieldsConfigured
|
|
@@ -574,10 +555,10 @@ function IntegrationDetailPage({ params }) {
|
|
|
574
555
|
const call = await runMutationWithContext({
|
|
575
556
|
actionId: "save-credentials",
|
|
576
557
|
tabId: "credentials",
|
|
577
|
-
mutationPayload: { integrationId
|
|
558
|
+
mutationPayload: { integrationId, ...savePayload },
|
|
578
559
|
operation: () => withScopedApiRequestHeaders(
|
|
579
560
|
buildOptimisticLockHeader(credentialsUpdatedAt),
|
|
580
|
-
() => apiCall(`/api/integrations/${encodeURIComponent(
|
|
561
|
+
() => apiCall(`/api/integrations/${encodeURIComponent(integrationId)}/credentials`, {
|
|
581
562
|
method: "PUT",
|
|
582
563
|
headers: { "Content-Type": "application/json" },
|
|
583
564
|
body: JSON.stringify(savePayload)
|
|
@@ -597,18 +578,17 @@ function IntegrationDetailPage({ params }) {
|
|
|
597
578
|
} finally {
|
|
598
579
|
setIsSavingCredentials(false);
|
|
599
580
|
}
|
|
600
|
-
}, [credentialsUpdatedAt, detail, loadCredentials,
|
|
581
|
+
}, [credentialsUpdatedAt, detail, loadCredentials, integrationId, runMutationWithContext, secretFieldsConfigured, t]);
|
|
601
582
|
const handleVersionChange = React.useCallback(async (version) => {
|
|
602
|
-
|
|
603
|
-
if (!currentIntegrationId) return;
|
|
583
|
+
if (!integrationId) return;
|
|
604
584
|
try {
|
|
605
585
|
const call = await runMutationWithContext({
|
|
606
586
|
actionId: "change-version",
|
|
607
587
|
tabId: "version",
|
|
608
|
-
mutationPayload: { integrationId
|
|
588
|
+
mutationPayload: { integrationId, apiVersion: version },
|
|
609
589
|
operation: () => withScopedApiRequestHeaders(
|
|
610
590
|
buildOptimisticLockHeader(detail?.state.updatedAt),
|
|
611
|
-
() => apiCall(`/api/integrations/${encodeURIComponent(
|
|
591
|
+
() => apiCall(`/api/integrations/${encodeURIComponent(integrationId)}/version`, {
|
|
612
592
|
method: "PUT",
|
|
613
593
|
headers: { "Content-Type": "application/json" },
|
|
614
594
|
body: JSON.stringify({ apiVersion: version })
|
|
@@ -625,18 +605,17 @@ function IntegrationDetailPage({ params }) {
|
|
|
625
605
|
} catch {
|
|
626
606
|
flash(t("integrations.detail.version.saveError"), "error");
|
|
627
607
|
}
|
|
628
|
-
}, [detail?.state.updatedAt, refreshDetail,
|
|
608
|
+
}, [detail?.state.updatedAt, refreshDetail, integrationId, runMutationWithContext, t]);
|
|
629
609
|
const handleHealthCheck = React.useCallback(async () => {
|
|
630
|
-
|
|
631
|
-
if (!currentIntegrationId) return;
|
|
610
|
+
if (!integrationId) return;
|
|
632
611
|
setIsCheckingHealth(true);
|
|
633
612
|
try {
|
|
634
613
|
const call = await runMutationWithContext({
|
|
635
614
|
actionId: "run-health-check",
|
|
636
615
|
tabId: "health",
|
|
637
|
-
mutationPayload: { integrationId
|
|
616
|
+
mutationPayload: { integrationId },
|
|
638
617
|
operation: () => apiCall(
|
|
639
|
-
`/api/integrations/${encodeURIComponent(
|
|
618
|
+
`/api/integrations/${encodeURIComponent(integrationId)}/health`,
|
|
640
619
|
{ method: "POST" },
|
|
641
620
|
{ fallback: null }
|
|
642
621
|
)
|
|
@@ -663,7 +642,7 @@ function IntegrationDetailPage({ params }) {
|
|
|
663
642
|
} finally {
|
|
664
643
|
setIsCheckingHealth(false);
|
|
665
644
|
}
|
|
666
|
-
}, [refreshLogs,
|
|
645
|
+
}, [refreshLogs, integrationId, runMutationWithContext, t]);
|
|
667
646
|
const hasVersions = Boolean(detail?.integration.apiVersions?.length);
|
|
668
647
|
const integration = detail?.integration ?? null;
|
|
669
648
|
const state = detail?.state ?? null;
|
|
@@ -794,17 +773,16 @@ function IntegrationDetailPage({ params }) {
|
|
|
794
773
|
setActiveTab(resolveRequestedIntegrationDetailTab(searchParams?.get("tab"), visibleTabIds));
|
|
795
774
|
}, [searchParams, visibleTabIds]);
|
|
796
775
|
const handleTabChange = React.useCallback((nextValue) => {
|
|
797
|
-
const currentIntegrationId = resolveCurrentIntegrationId();
|
|
798
776
|
const nextTab = resolveRequestedIntegrationDetailTab(nextValue, visibleTabIds);
|
|
799
777
|
setActiveTab(nextTab);
|
|
800
|
-
if (!
|
|
801
|
-
const basePath = `/backend/integrations/${encodeURIComponent(
|
|
778
|
+
if (!integrationId) return;
|
|
779
|
+
const basePath = `/backend/integrations/${encodeURIComponent(integrationId)}`;
|
|
802
780
|
const params2 = new URLSearchParams(searchParams?.toString() ?? "");
|
|
803
781
|
if (nextTab === "credentials") params2.delete("tab");
|
|
804
782
|
else params2.set("tab", nextTab);
|
|
805
783
|
const query = params2.toString();
|
|
806
784
|
router.replace(query ? `${basePath}?${query}` : basePath);
|
|
807
|
-
}, [
|
|
785
|
+
}, [integrationId, router, searchParams, visibleTabIds]);
|
|
808
786
|
React.useEffect(() => {
|
|
809
787
|
if (!runIdFromUrl) {
|
|
810
788
|
setActiveRunDetail(null);
|