@optimizely/ocp-local-env 1.0.0-beta.10
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/README.md +51 -0
- package/dist/package.json +112 -0
- package/dist/public/bundle.82dc5d29fffb9f205051.js +3 -0
- package/dist/public/bundle.82dc5d29fffb9f205051.js.LICENSE.txt +92 -0
- package/dist/public/bundle.82dc5d29fffb9f205051.js.map +1 -0
- package/dist/public/index.html +1 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +115 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/executor/DestinationExecutor.d.ts +19 -0
- package/dist/src/executor/DestinationExecutor.js +72 -0
- package/dist/src/executor/DestinationExecutor.js.map +1 -0
- package/dist/src/executor/FunctionExecutor.d.ts +67 -0
- package/dist/src/executor/FunctionExecutor.js +189 -0
- package/dist/src/executor/FunctionExecutor.js.map +1 -0
- package/dist/src/executor/JobExecutor.d.ts +79 -0
- package/dist/src/executor/JobExecutor.js +215 -0
- package/dist/src/executor/JobExecutor.js.map +1 -0
- package/dist/src/executor/LifecycleExecutor.d.ts +64 -0
- package/dist/src/executor/LifecycleExecutor.js +167 -0
- package/dist/src/executor/LifecycleExecutor.js.map +1 -0
- package/dist/src/executor/SourceExecutor.d.ts +32 -0
- package/dist/src/executor/SourceExecutor.js +163 -0
- package/dist/src/executor/SourceExecutor.js.map +1 -0
- package/dist/src/executor/watcher.d.ts +62 -0
- package/dist/src/executor/watcher.js +213 -0
- package/dist/src/executor/watcher.js.map +1 -0
- package/dist/src/functions/hello.d.ts +4 -0
- package/dist/src/functions/hello.js +8 -0
- package/dist/src/functions/hello.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +9 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/jobs/dailyJob.d.ts +4 -0
- package/dist/src/jobs/dailyJob.js +8 -0
- package/dist/src/jobs/dailyJob.js.map +1 -0
- package/dist/src/local_engine/LocalFunctionApi.d.ts +17 -0
- package/dist/src/local_engine/LocalFunctionApi.js +54 -0
- package/dist/src/local_engine/LocalFunctionApi.js.map +1 -0
- package/dist/src/local_engine/LocalJobApi.d.ts +67 -0
- package/dist/src/local_engine/LocalJobApi.js +205 -0
- package/dist/src/local_engine/LocalJobApi.js.map +1 -0
- package/dist/src/local_engine/LocalNotifier.d.ts +9 -0
- package/dist/src/local_engine/LocalNotifier.js +26 -0
- package/dist/src/local_engine/LocalNotifier.js.map +1 -0
- package/dist/src/local_engine/local-engine-child-base.d.ts +110 -0
- package/dist/src/local_engine/local-engine-child-base.js +607 -0
- package/dist/src/local_engine/local-engine-child-base.js.map +1 -0
- package/dist/src/local_engine/local-engine-client.d.ts +161 -0
- package/dist/src/local_engine/local-engine-client.js +888 -0
- package/dist/src/local_engine/local-engine-client.js.map +1 -0
- package/dist/src/local_engine/local-engine-types.d.ts +245 -0
- package/dist/src/local_engine/local-engine-types.js +6 -0
- package/dist/src/local_engine/local-engine-types.js.map +1 -0
- package/dist/src/local_engine/local-engine-unified.d.ts +71 -0
- package/dist/src/local_engine/local-engine-unified.js +723 -0
- package/dist/src/local_engine/local-engine-unified.js.map +1 -0
- package/dist/src/local_engine/local-engine-utils.d.ts +68 -0
- package/dist/src/local_engine/local-engine-utils.js +219 -0
- package/dist/src/local_engine/local-engine-utils.js.map +1 -0
- package/dist/src/local_engine/localSDKConfig.d.ts +40 -0
- package/dist/src/local_engine/localSDKConfig.js +247 -0
- package/dist/src/local_engine/localSDKConfig.js.map +1 -0
- package/dist/src/local_engine/storage/BaseKVStoreWrapper.d.ts +37 -0
- package/dist/src/local_engine/storage/BaseKVStoreWrapper.js +110 -0
- package/dist/src/local_engine/storage/BaseKVStoreWrapper.js.map +1 -0
- package/dist/src/local_engine/storage/LocalConfigStore.d.ts +74 -0
- package/dist/src/local_engine/storage/LocalConfigStore.js +178 -0
- package/dist/src/local_engine/storage/LocalConfigStore.js.map +1 -0
- package/dist/src/local_engine/storage/LocalJobStore.d.ts +111 -0
- package/dist/src/local_engine/storage/LocalJobStore.js +249 -0
- package/dist/src/local_engine/storage/LocalJobStore.js.map +1 -0
- package/dist/src/local_engine/storage/LocalKVStore.d.ts +106 -0
- package/dist/src/local_engine/storage/LocalKVStore.js +1061 -0
- package/dist/src/local_engine/storage/LocalKVStore.js.map +1 -0
- package/dist/src/local_engine/storage/LocalNotificationStore.d.ts +28 -0
- package/dist/src/local_engine/storage/LocalNotificationStore.js +149 -0
- package/dist/src/local_engine/storage/LocalNotificationStore.js.map +1 -0
- package/dist/src/local_engine/storage/LocalSecretsStore.d.ts +115 -0
- package/dist/src/local_engine/storage/LocalSecretsStore.js +350 -0
- package/dist/src/local_engine/storage/LocalSecretsStore.js.map +1 -0
- package/dist/src/local_engine/storage/LocalSecretsStoreWrapper.d.ts +19 -0
- package/dist/src/local_engine/storage/LocalSecretsStoreWrapper.js +52 -0
- package/dist/src/local_engine/storage/LocalSecretsStoreWrapper.js.map +1 -0
- package/dist/src/local_engine/storage/LocalSettingsStore.d.ts +168 -0
- package/dist/src/local_engine/storage/LocalSettingsStore.js +509 -0
- package/dist/src/local_engine/storage/LocalSettingsStore.js.map +1 -0
- package/dist/src/local_engine/storage/LocalSettingsStoreWrapper.d.ts +15 -0
- package/dist/src/local_engine/storage/LocalSettingsStoreWrapper.js +28 -0
- package/dist/src/local_engine/storage/LocalSettingsStoreWrapper.js.map +1 -0
- package/dist/src/local_engine/storage/NumberSet.d.ts +21 -0
- package/dist/src/local_engine/storage/NumberSet.js +32 -0
- package/dist/src/local_engine/storage/NumberSet.js.map +1 -0
- package/dist/src/local_engine/storage/SourceDataStore.d.ts +23 -0
- package/dist/src/local_engine/storage/SourceDataStore.js +83 -0
- package/dist/src/local_engine/storage/SourceDataStore.js.map +1 -0
- package/dist/src/local_engine/storage/SourceJobExecutionStore.d.ts +25 -0
- package/dist/src/local_engine/storage/SourceJobExecutionStore.js +61 -0
- package/dist/src/local_engine/storage/SourceJobExecutionStore.js.map +1 -0
- package/dist/src/local_engine/storage/StringSet.d.ts +21 -0
- package/dist/src/local_engine/storage/StringSet.js +32 -0
- package/dist/src/local_engine/storage/StringSet.js.map +1 -0
- package/dist/src/local_engine/types.d.ts +53 -0
- package/dist/src/local_engine/types.js +6 -0
- package/dist/src/local_engine/types.js.map +1 -0
- package/dist/src/local_engine/utils.d.ts +33 -0
- package/dist/src/local_engine/utils.js +143 -0
- package/dist/src/local_engine/utils.js.map +1 -0
- package/dist/src/logging/LogManager.d.ts +246 -0
- package/dist/src/logging/LogManager.js +343 -0
- package/dist/src/logging/LogManager.js.map +1 -0
- package/dist/src/server/api/destinations.d.ts +7 -0
- package/dist/src/server/api/destinations.js +170 -0
- package/dist/src/server/api/destinations.js.map +1 -0
- package/dist/src/server/api/functions.d.ts +7 -0
- package/dist/src/server/api/functions.js +80 -0
- package/dist/src/server/api/functions.js.map +1 -0
- package/dist/src/server/api/jobs.d.ts +10 -0
- package/dist/src/server/api/jobs.js +244 -0
- package/dist/src/server/api/jobs.js.map +1 -0
- package/dist/src/server/api/settings.d.ts +6 -0
- package/dist/src/server/api/settings.js +116 -0
- package/dist/src/server/api/settings.js.map +1 -0
- package/dist/src/server/api/sources.d.ts +7 -0
- package/dist/src/server/api/sources.js +382 -0
- package/dist/src/server/api/sources.js.map +1 -0
- package/dist/src/server/api/stores.d.ts +2 -0
- package/dist/src/server/api/stores.js +341 -0
- package/dist/src/server/api/stores.js.map +1 -0
- package/dist/src/server/api/v1.d.ts +10 -0
- package/dist/src/server/api/v1.js +718 -0
- package/dist/src/server/api/v1.js.map +1 -0
- package/dist/src/server/api.d.ts +8 -0
- package/dist/src/server/api.js +217 -0
- package/dist/src/server/api.js.map +1 -0
- package/dist/src/server/app-discovery.d.ts +5 -0
- package/dist/src/server/app-discovery.js +113 -0
- package/dist/src/server/app-discovery.js.map +1 -0
- package/dist/src/server/config.d.ts +26 -0
- package/dist/src/server/config.js +112 -0
- package/dist/src/server/config.js.map +1 -0
- package/dist/src/server/mockDataGenerator.d.ts +1 -0
- package/dist/src/server/mockDataGenerator.js +154 -0
- package/dist/src/server/mockDataGenerator.js.map +1 -0
- package/dist/src/server/websocket.d.ts +0 -0
- package/dist/src/server/websocket.js +2 -0
- package/dist/src/server/websocket.js.map +1 -0
- package/dist/src/server.d.ts +2 -0
- package/dist/src/server.js +735 -0
- package/dist/src/server.js.map +1 -0
- package/dist/src/types/app.d.ts +154 -0
- package/dist/src/types/app.js +24 -0
- package/dist/src/types/app.js.map +1 -0
- package/dist/src/types/kvstore.d.ts +320 -0
- package/dist/src/types/kvstore.js +5 -0
- package/dist/src/types/kvstore.js.map +1 -0
- package/dist/src/ui/components/App.d.ts +6 -0
- package/dist/src/ui/components/App.js +432 -0
- package/dist/src/ui/components/App.js.map +1 -0
- package/dist/src/ui/components/DestinationBatchEditor.d.ts +7 -0
- package/dist/src/ui/components/DestinationBatchEditor.js +160 -0
- package/dist/src/ui/components/DestinationBatchEditor.js.map +1 -0
- package/dist/src/ui/components/DestinationSchemaViewer.d.ts +7 -0
- package/dist/src/ui/components/DestinationSchemaViewer.js +61 -0
- package/dist/src/ui/components/DestinationSchemaViewer.js.map +1 -0
- package/dist/src/ui/components/DestinationsView.d.ts +14 -0
- package/dist/src/ui/components/DestinationsView.js +68 -0
- package/dist/src/ui/components/DestinationsView.js.map +1 -0
- package/dist/src/ui/components/FunctionsView.d.ts +13 -0
- package/dist/src/ui/components/FunctionsView.js +288 -0
- package/dist/src/ui/components/FunctionsView.js.map +1 -0
- package/dist/src/ui/components/JobsView.d.ts +13 -0
- package/dist/src/ui/components/JobsView.js +320 -0
- package/dist/src/ui/components/JobsView.js.map +1 -0
- package/dist/src/ui/components/KVStoreViewer.d.ts +11 -0
- package/dist/src/ui/components/KVStoreViewer.js +168 -0
- package/dist/src/ui/components/KVStoreViewer.js.map +1 -0
- package/dist/src/ui/components/MetadataModal.d.ts +14 -0
- package/dist/src/ui/components/MetadataModal.js +28 -0
- package/dist/src/ui/components/MetadataModal.js.map +1 -0
- package/dist/src/ui/components/MetadataModal.test.d.ts +1 -0
- package/dist/src/ui/components/MetadataModal.test.js +143 -0
- package/dist/src/ui/components/MetadataModal.test.js.map +1 -0
- package/dist/src/ui/components/NotificationViewer.d.ts +16 -0
- package/dist/src/ui/components/NotificationViewer.js +69 -0
- package/dist/src/ui/components/NotificationViewer.js.map +1 -0
- package/dist/src/ui/components/SecretsStoreViewer.d.ts +11 -0
- package/dist/src/ui/components/SecretsStoreViewer.js +179 -0
- package/dist/src/ui/components/SecretsStoreViewer.js.map +1 -0
- package/dist/src/ui/components/SettingsStoreViewer.d.ts +24 -0
- package/dist/src/ui/components/SettingsStoreViewer.js +132 -0
- package/dist/src/ui/components/SettingsStoreViewer.js.map +1 -0
- package/dist/src/ui/components/SourceDataViewer.d.ts +8 -0
- package/dist/src/ui/components/SourceDataViewer.js +84 -0
- package/dist/src/ui/components/SourceDataViewer.js.map +1 -0
- package/dist/src/ui/components/SourceJobsSection.d.ts +8 -0
- package/dist/src/ui/components/SourceJobsSection.js +99 -0
- package/dist/src/ui/components/SourceJobsSection.js.map +1 -0
- package/dist/src/ui/components/SourceLifecycleSection.d.ts +7 -0
- package/dist/src/ui/components/SourceLifecycleSection.js +58 -0
- package/dist/src/ui/components/SourceLifecycleSection.js.map +1 -0
- package/dist/src/ui/components/SourceSchemaViewer.d.ts +7 -0
- package/dist/src/ui/components/SourceSchemaViewer.js +65 -0
- package/dist/src/ui/components/SourceSchemaViewer.js.map +1 -0
- package/dist/src/ui/components/SourceWebhookEditor.d.ts +8 -0
- package/dist/src/ui/components/SourceWebhookEditor.js +181 -0
- package/dist/src/ui/components/SourceWebhookEditor.js.map +1 -0
- package/dist/src/ui/components/SourcesView.d.ts +14 -0
- package/dist/src/ui/components/SourcesView.js +74 -0
- package/dist/src/ui/components/SourcesView.js.map +1 -0
- package/dist/src/ui/components/StoreViewer.d.ts +16 -0
- package/dist/src/ui/components/StoreViewer.js +86 -0
- package/dist/src/ui/components/StoreViewer.js.map +1 -0
- package/dist/src/ui/components/TabbedConsole.d.ts +17 -0
- package/dist/src/ui/components/TabbedConsole.js +163 -0
- package/dist/src/ui/components/TabbedConsole.js.map +1 -0
- package/dist/src/ui/components/common/DataTree.d.ts +15 -0
- package/dist/src/ui/components/common/DataTree.js +95 -0
- package/dist/src/ui/components/common/DataTree.js.map +1 -0
- package/dist/src/ui/components/common/EyeIcon.d.ts +11 -0
- package/dist/src/ui/components/common/EyeIcon.js +11 -0
- package/dist/src/ui/components/common/EyeIcon.js.map +1 -0
- package/dist/src/ui/hooks/useEntityNavigation.d.ts +72 -0
- package/dist/src/ui/hooks/useEntityNavigation.js +150 -0
- package/dist/src/ui/hooks/useEntityNavigation.js.map +1 -0
- package/dist/src/ui/hooks/useQueryParams.d.ts +6 -0
- package/dist/src/ui/hooks/useQueryParams.js +39 -0
- package/dist/src/ui/hooks/useQueryParams.js.map +1 -0
- package/dist/src/ui/index.d.ts +1 -0
- package/dist/src/ui/index.js +23 -0
- package/dist/src/ui/index.js.map +1 -0
- package/dist/src/ui/store/formStateSlice.d.ts +54 -0
- package/dist/src/ui/store/formStateSlice.js +94 -0
- package/dist/src/ui/store/formStateSlice.js.map +1 -0
- package/dist/src/ui/store/hooks.d.ts +6 -0
- package/dist/src/ui/store/hooks.js +8 -0
- package/dist/src/ui/store/hooks.js.map +1 -0
- package/dist/src/ui/store/index.d.ts +11 -0
- package/dist/src/ui/store/index.js +107 -0
- package/dist/src/ui/store/index.js.map +1 -0
- package/dist/src/utils/functionEndpoints.d.ts +24 -0
- package/dist/src/utils/functionEndpoints.js +45 -0
- package/dist/src/utils/functionEndpoints.js.map +1 -0
- package/package.json +112 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
|
+
const react_1 = require("react");
|
|
8
|
+
const StoreViewer_1 = __importDefault(require("./StoreViewer"));
|
|
9
|
+
const useQueryParams_1 = require("../hooks/useQueryParams");
|
|
10
|
+
const TabbedConsole = ({ logs, onClearLogs, storeTimestamps, onRefreshStores, notificationCount = 0 }) => {
|
|
11
|
+
const { getParam, setParam } = (0, useQueryParams_1.useQueryParams)();
|
|
12
|
+
// Derive activeTab from URL, default to 'console'
|
|
13
|
+
const activeTab = getParam('console') || 'console';
|
|
14
|
+
// Restore expanded state from localStorage, default to false
|
|
15
|
+
const [expanded, setExpanded] = (0, react_1.useState)(() => {
|
|
16
|
+
const stored = localStorage.getItem('consoleExpanded');
|
|
17
|
+
return stored ? JSON.parse(stored) : false;
|
|
18
|
+
});
|
|
19
|
+
// Restore height from localStorage, default to 200
|
|
20
|
+
const [height, setHeight] = (0, react_1.useState)(() => {
|
|
21
|
+
const stored = localStorage.getItem('consoleHeight');
|
|
22
|
+
return stored ? parseInt(stored, 10) : 200;
|
|
23
|
+
});
|
|
24
|
+
const [logFilter, setLogFilter] = (0, react_1.useState)('app');
|
|
25
|
+
const [categoryFilter, setCategoryFilter] = (0, react_1.useState)('all');
|
|
26
|
+
const [levelFilter, setLevelFilter] = (0, react_1.useState)('all');
|
|
27
|
+
const dragStateRef = (0, react_1.useRef)({
|
|
28
|
+
isMouseDown: false,
|
|
29
|
+
isDragging: false,
|
|
30
|
+
startY: 0,
|
|
31
|
+
startHeight: 200
|
|
32
|
+
});
|
|
33
|
+
// Log categories organized by source type
|
|
34
|
+
const APP_CATEGORIES = [
|
|
35
|
+
'function',
|
|
36
|
+
'lifecycle',
|
|
37
|
+
'jobs',
|
|
38
|
+
'notifications'
|
|
39
|
+
];
|
|
40
|
+
const SYSTEM_CATEGORIES = [
|
|
41
|
+
'build',
|
|
42
|
+
'destination',
|
|
43
|
+
'kvstore',
|
|
44
|
+
'settings',
|
|
45
|
+
'secrets',
|
|
46
|
+
'config',
|
|
47
|
+
'ipc',
|
|
48
|
+
'process'
|
|
49
|
+
];
|
|
50
|
+
// Save expanded state to localStorage when it changes
|
|
51
|
+
(0, react_1.useEffect)(() => {
|
|
52
|
+
localStorage.setItem('consoleExpanded', JSON.stringify(expanded));
|
|
53
|
+
}, [expanded]);
|
|
54
|
+
// Save height to localStorage when it changes
|
|
55
|
+
(0, react_1.useEffect)(() => {
|
|
56
|
+
localStorage.setItem('consoleHeight', String(height));
|
|
57
|
+
}, [height]);
|
|
58
|
+
const filterLogs = (logs) => {
|
|
59
|
+
let filtered = logs;
|
|
60
|
+
// Filter by source (all/app/engine)
|
|
61
|
+
if (logFilter === 'app') {
|
|
62
|
+
filtered = filtered.filter(log => log.source === 'app');
|
|
63
|
+
}
|
|
64
|
+
else if (logFilter === 'engine') {
|
|
65
|
+
filtered = filtered.filter(log => log.source === 'system');
|
|
66
|
+
}
|
|
67
|
+
// Filter by category
|
|
68
|
+
if (categoryFilter !== 'all') {
|
|
69
|
+
filtered = filtered.filter(log => log.category === categoryFilter);
|
|
70
|
+
}
|
|
71
|
+
// Filter by level (hierarchical: show selected level and above)
|
|
72
|
+
if (levelFilter !== 'all') {
|
|
73
|
+
const levels = ['debug', 'info', 'warn', 'error'];
|
|
74
|
+
const minLevelIndex = levels.indexOf(levelFilter);
|
|
75
|
+
filtered = filtered.filter(log => levels.indexOf(log.level) >= minLevelIndex);
|
|
76
|
+
}
|
|
77
|
+
return filtered;
|
|
78
|
+
};
|
|
79
|
+
const renderTabContent = () => {
|
|
80
|
+
switch (activeTab) {
|
|
81
|
+
case 'console':
|
|
82
|
+
const filteredLogs = filterLogs(logs);
|
|
83
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "console-tab-content", children: [(0, jsx_runtime_1.jsxs)("div", { className: "console-controls", children: [(0, jsx_runtime_1.jsxs)("div", { className: "filter-row", children: [(0, jsx_runtime_1.jsxs)("div", { className: "filter-group", children: [(0, jsx_runtime_1.jsx)("label", { className: "filter-label", children: "Source:" }), (0, jsx_runtime_1.jsxs)("select", { className: "filter-select", value: logFilter, onChange: (e) => setLogFilter(e.target.value), children: [(0, jsx_runtime_1.jsx)("option", { value: "app", children: "App" }), (0, jsx_runtime_1.jsx)("option", { value: "engine", children: "Engine (System)" }), (0, jsx_runtime_1.jsx)("option", { value: "all", children: "All Sources" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "filter-group", children: [(0, jsx_runtime_1.jsx)("label", { className: "filter-label", children: "Level:" }), (0, jsx_runtime_1.jsxs)("select", { className: "filter-select", value: levelFilter, onChange: (e) => setLevelFilter(e.target.value), children: [(0, jsx_runtime_1.jsx)("option", { value: "all", children: "All Levels" }), (0, jsx_runtime_1.jsx)("option", { value: "debug", children: "Debug+" }), (0, jsx_runtime_1.jsx)("option", { value: "info", children: "Info+" }), (0, jsx_runtime_1.jsx)("option", { value: "warn", children: "Warn+" }), (0, jsx_runtime_1.jsx)("option", { value: "error", children: "Error Only" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "filter-group", children: [(0, jsx_runtime_1.jsx)("label", { className: "filter-label", children: "Category:" }), (0, jsx_runtime_1.jsxs)("select", { className: "filter-select", value: categoryFilter, onChange: (e) => setCategoryFilter(e.target.value), children: [(0, jsx_runtime_1.jsx)("option", { value: "all", children: "All Categories" }), (0, jsx_runtime_1.jsx)("optgroup", { label: "\u2500\u2500\u2500 App \u2500\u2500\u2500", children: APP_CATEGORIES.map(cat => ((0, jsx_runtime_1.jsx)("option", { value: cat, children: cat }, cat))) }), (0, jsx_runtime_1.jsx)("optgroup", { label: "\u2500\u2500\u2500 System \u2500\u2500\u2500", children: SYSTEM_CATEGORIES.map(cat => ((0, jsx_runtime_1.jsx)("option", { value: cat, children: cat }, cat))) })] })] })] }), (0, jsx_runtime_1.jsx)("button", { className: "clear-logs-btn", onClick: onClearLogs, children: "Clear Logs" })] }), (0, jsx_runtime_1.jsx)("div", { className: "log-container", children: filteredLogs.length > 0 ? (filteredLogs.map((log) => {
|
|
84
|
+
// Format log inline with access to all fields
|
|
85
|
+
const time = new Date(log.timestamp).toLocaleTimeString();
|
|
86
|
+
const id = log.context?.id || 'unknown';
|
|
87
|
+
const sourceCategoryId = `${log.source}:${log.category}:${id}`;
|
|
88
|
+
const level = log.level.toUpperCase();
|
|
89
|
+
const formattedLog = `[${time}] ${sourceCategoryId.toUpperCase()} ${level}: ${log.message}`;
|
|
90
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: `log-line log-${log.level} log-source-${log.source} log-category-${log.category}`, children: formattedLog }, log.id));
|
|
91
|
+
})) : ((0, jsx_runtime_1.jsx)("div", { className: "no-logs", children: "No console output yet" })) })] }));
|
|
92
|
+
case 'settings':
|
|
93
|
+
case 'secrets':
|
|
94
|
+
case 'kv':
|
|
95
|
+
case 'sharedKv':
|
|
96
|
+
case 'notifications':
|
|
97
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "store-tab-content", children: (0, jsx_runtime_1.jsx)(StoreViewer_1.default, { initialTab: activeTab, hideTabs: true, storeTimestamps: storeTimestamps, onRefreshStores: onRefreshStores }) }));
|
|
98
|
+
default:
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
// Handle mouse resize events - ONLY for resize handle
|
|
103
|
+
const handleResizeMouseDown = (e) => {
|
|
104
|
+
e.preventDefault();
|
|
105
|
+
e.stopPropagation();
|
|
106
|
+
dragStateRef.current = {
|
|
107
|
+
isMouseDown: true,
|
|
108
|
+
isDragging: false,
|
|
109
|
+
startY: e.clientY,
|
|
110
|
+
startHeight: height
|
|
111
|
+
};
|
|
112
|
+
const handleMouseMove = (e) => {
|
|
113
|
+
const current = dragStateRef.current;
|
|
114
|
+
if (!current.isMouseDown)
|
|
115
|
+
return;
|
|
116
|
+
// Only start dragging if the mouse has moved enough
|
|
117
|
+
if (!current.isDragging) {
|
|
118
|
+
const deltaY = Math.abs(current.startY - e.clientY);
|
|
119
|
+
// Only start dragging if mouse moved at least 5px
|
|
120
|
+
if (deltaY < 5)
|
|
121
|
+
return;
|
|
122
|
+
current.isDragging = true;
|
|
123
|
+
document.body.style.cursor = 'ns-resize';
|
|
124
|
+
document.body.style.userSelect = 'none';
|
|
125
|
+
}
|
|
126
|
+
// Only resize if we're actually dragging
|
|
127
|
+
if (current.isDragging) {
|
|
128
|
+
const deltaY = current.startY - e.clientY; // Inverted: moving up increases height
|
|
129
|
+
const newHeight = current.startHeight + deltaY;
|
|
130
|
+
const minHeight = 100;
|
|
131
|
+
const maxHeight = window.innerHeight * 0.8;
|
|
132
|
+
const clampedHeight = Math.max(minHeight, Math.min(maxHeight, newHeight));
|
|
133
|
+
setHeight(clampedHeight);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
const handleMouseUp = () => {
|
|
137
|
+
dragStateRef.current = {
|
|
138
|
+
isMouseDown: false,
|
|
139
|
+
isDragging: false,
|
|
140
|
+
startY: 0,
|
|
141
|
+
startHeight: height // Keep current height instead of resetting to 200
|
|
142
|
+
};
|
|
143
|
+
document.body.style.cursor = '';
|
|
144
|
+
document.body.style.userSelect = '';
|
|
145
|
+
// Remove event listeners
|
|
146
|
+
document.removeEventListener('mousemove', handleMouseMove);
|
|
147
|
+
document.removeEventListener('mouseup', handleMouseUp);
|
|
148
|
+
};
|
|
149
|
+
// Add event listeners
|
|
150
|
+
document.addEventListener('mousemove', handleMouseMove);
|
|
151
|
+
document.addEventListener('mouseup', handleMouseUp);
|
|
152
|
+
};
|
|
153
|
+
// Handle tab click - switch tab and expand console if collapsed
|
|
154
|
+
const handleTabClick = (tab) => {
|
|
155
|
+
setParam('console', tab);
|
|
156
|
+
if (!expanded) {
|
|
157
|
+
setExpanded(true);
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: `console-panel ${expanded ? 'expanded' : 'collapsed'}`, style: { height: expanded ? `${height}px` : '32px' }, children: [expanded && ((0, jsx_runtime_1.jsx)("div", { className: "console-resize-handle", onMouseDown: handleResizeMouseDown })), (0, jsx_runtime_1.jsxs)("div", { className: "console-tab-headers", children: [(0, jsx_runtime_1.jsxs)("button", { className: `console-tab ${activeTab === 'console' ? 'active' : ''}`, onClick: () => handleTabClick('console'), children: [(0, jsx_runtime_1.jsx)("span", { className: "tab-icon", children: "\uD83D\uDCCB" }), (0, jsx_runtime_1.jsx)("span", { className: "tab-label", children: "Console" }), (0, jsx_runtime_1.jsxs)("span", { className: "tab-count", children: ["(", logs.length, ")"] })] }), (0, jsx_runtime_1.jsxs)("button", { className: `console-tab ${activeTab === 'settings' ? 'active' : ''}`, onClick: () => handleTabClick('settings'), children: [(0, jsx_runtime_1.jsx)("span", { className: "tab-icon", children: "\u2699\uFE0F" }), (0, jsx_runtime_1.jsx)("span", { className: "tab-label", children: "Settings" })] }), (0, jsx_runtime_1.jsxs)("button", { className: `console-tab ${activeTab === 'secrets' ? 'active' : ''}`, onClick: () => handleTabClick('secrets'), children: [(0, jsx_runtime_1.jsx)("span", { className: "tab-icon", children: "\uD83D\uDD10" }), (0, jsx_runtime_1.jsx)("span", { className: "tab-label", children: "Secrets" })] }), (0, jsx_runtime_1.jsxs)("button", { className: `console-tab ${activeTab === 'kv' ? 'active' : ''}`, onClick: () => handleTabClick('kv'), children: [(0, jsx_runtime_1.jsx)("span", { className: "tab-icon", children: "\uD83D\uDDC3\uFE0F" }), (0, jsx_runtime_1.jsx)("span", { className: "tab-label", children: "KV Store" })] }), (0, jsx_runtime_1.jsxs)("button", { className: `console-tab ${activeTab === 'sharedKv' ? 'active' : ''}`, onClick: () => handleTabClick('sharedKv'), children: [(0, jsx_runtime_1.jsx)("span", { className: "tab-icon", children: "\uD83D\uDD17" }), (0, jsx_runtime_1.jsx)("span", { className: "tab-label", children: "Shared KV" })] }), (0, jsx_runtime_1.jsxs)("button", { className: `console-tab ${activeTab === 'notifications' ? 'active' : ''}`, onClick: () => handleTabClick('notifications'), children: [(0, jsx_runtime_1.jsx)("span", { className: "tab-icon", children: "\uD83D\uDD14" }), (0, jsx_runtime_1.jsx)("span", { className: "tab-label", children: "Notifications" }), notificationCount > 0 && ((0, jsx_runtime_1.jsx)("span", { className: "notification-badge", children: notificationCount }))] }), (0, jsx_runtime_1.jsx)("button", { className: "console-toggle", onClick: () => setExpanded(!expanded), children: expanded ? '▼' : '▲' })] }), expanded && ((0, jsx_runtime_1.jsx)("div", { className: "console-content", children: (0, jsx_runtime_1.jsx)("div", { className: "console-tab-body", children: renderTabContent() }) }))] }));
|
|
161
|
+
};
|
|
162
|
+
exports.default = TabbedConsole;
|
|
163
|
+
//# sourceMappingURL=TabbedConsole.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabbedConsole.js","sourceRoot":"","sources":["../../../../src/ui/components/TabbedConsole.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface DataTreeProps {
|
|
3
|
+
data: any;
|
|
4
|
+
title?: string;
|
|
5
|
+
isSecret?: boolean;
|
|
6
|
+
showEyeIcon?: boolean;
|
|
7
|
+
onValueChange?: (newValue: any) => void;
|
|
8
|
+
readonly?: boolean;
|
|
9
|
+
depth?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Recursive tree component for displaying nested data structures
|
|
13
|
+
*/
|
|
14
|
+
declare const DataTree: React.FC<DataTreeProps>;
|
|
15
|
+
export default DataTree;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
|
+
const react_1 = require("react");
|
|
8
|
+
const EyeIcon_1 = __importDefault(require("./EyeIcon"));
|
|
9
|
+
/**
|
|
10
|
+
* Recursive tree component for displaying nested data structures
|
|
11
|
+
*/
|
|
12
|
+
const DataTree = ({ data, title, isSecret = false, showEyeIcon = false, onValueChange, readonly = false, depth = 0 }) => {
|
|
13
|
+
const [isVisible, setIsVisible] = (0, react_1.useState)(!isSecret);
|
|
14
|
+
const [isEditing, setIsEditing] = (0, react_1.useState)(false);
|
|
15
|
+
const [editValue, setEditValue] = (0, react_1.useState)('');
|
|
16
|
+
const toggleVisibility = () => {
|
|
17
|
+
setIsVisible(!isVisible);
|
|
18
|
+
};
|
|
19
|
+
const startEditing = () => {
|
|
20
|
+
if (readonly)
|
|
21
|
+
return;
|
|
22
|
+
setEditValue(JSON.stringify(data, null, 2));
|
|
23
|
+
setIsEditing(true);
|
|
24
|
+
};
|
|
25
|
+
const saveEdit = () => {
|
|
26
|
+
try {
|
|
27
|
+
const newValue = JSON.parse(editValue);
|
|
28
|
+
onValueChange?.(newValue);
|
|
29
|
+
setIsEditing(false);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
alert('Invalid JSON format');
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const cancelEdit = () => {
|
|
36
|
+
setIsEditing(false);
|
|
37
|
+
setEditValue('');
|
|
38
|
+
};
|
|
39
|
+
const renderValue = (value) => {
|
|
40
|
+
if (value === null)
|
|
41
|
+
return (0, jsx_runtime_1.jsx)("span", { className: "null-value", children: "null" });
|
|
42
|
+
if (value === undefined)
|
|
43
|
+
return (0, jsx_runtime_1.jsx)("span", { className: "undefined-value", children: "undefined" });
|
|
44
|
+
if (typeof value === 'boolean')
|
|
45
|
+
return (0, jsx_runtime_1.jsx)("span", { className: "boolean-value", children: String(value) });
|
|
46
|
+
if (typeof value === 'number')
|
|
47
|
+
return (0, jsx_runtime_1.jsx)("span", { className: "number-value", children: value });
|
|
48
|
+
if (typeof value === 'string') {
|
|
49
|
+
if (!isVisible && isSecret) {
|
|
50
|
+
return (0, jsx_runtime_1.jsx)("span", { className: "hidden-value", children: '•'.repeat(8) });
|
|
51
|
+
}
|
|
52
|
+
return (0, jsx_runtime_1.jsxs)("span", { className: "string-value", children: ["\"", value, "\""] });
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
};
|
|
56
|
+
const renderPrimitive = () => {
|
|
57
|
+
const displayValue = renderValue(data);
|
|
58
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: `data-tree-item primitive depth-${depth}`, children: (0, jsx_runtime_1.jsxs)("div", { className: "item-header", children: [title && (0, jsx_runtime_1.jsxs)("span", { className: "item-title", children: [title, ":"] }), (0, jsx_runtime_1.jsxs)("div", { className: "item-value", children: [isEditing ? ((0, jsx_runtime_1.jsxs)("div", { className: "edit-mode", children: [(0, jsx_runtime_1.jsx)("textarea", { className: "edit-input", value: editValue, onChange: (e) => setEditValue(e.target.value), rows: 3 }), (0, jsx_runtime_1.jsxs)("div", { className: "edit-controls", children: [(0, jsx_runtime_1.jsx)("button", { className: "save-btn", onClick: saveEdit, children: "Save" }), (0, jsx_runtime_1.jsx)("button", { className: "cancel-btn", onClick: cancelEdit, children: "Cancel" })] })] })) : ((0, jsx_runtime_1.jsx)("span", { className: `value ${readonly ? 'readonly' : 'editable'}`, onClick: !readonly ? startEditing : undefined, children: displayValue })), showEyeIcon && isSecret && ((0, jsx_runtime_1.jsx)(EyeIcon_1.default, { isVisible: isVisible, onClick: toggleVisibility }))] })] }) }));
|
|
59
|
+
};
|
|
60
|
+
const renderObject = () => {
|
|
61
|
+
const [isExpanded, setIsExpanded] = (0, react_1.useState)(depth < 2);
|
|
62
|
+
const keys = Object.keys(data);
|
|
63
|
+
if (keys.length === 0) {
|
|
64
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: `data-tree-item empty-object depth-${depth}`, children: [title && (0, jsx_runtime_1.jsxs)("span", { className: "item-title", children: [title, ":"] }), (0, jsx_runtime_1.jsx)("span", { className: "empty-value", children: '{}' })] }));
|
|
65
|
+
}
|
|
66
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: `data-tree-item object depth-${depth}`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "item-header", onClick: () => setIsExpanded(!isExpanded), children: [(0, jsx_runtime_1.jsx)("span", { className: "expand-icon", children: isExpanded ? '▼' : '▶' }), title && (0, jsx_runtime_1.jsxs)("span", { className: "item-title", children: [title, ":"] }), (0, jsx_runtime_1.jsx)("span", { className: "object-info", children: `{${keys.length} ${keys.length === 1 ? 'key' : 'keys'}}` })] }), isExpanded && ((0, jsx_runtime_1.jsx)("div", { className: "item-children", children: keys.map(key => ((0, jsx_runtime_1.jsx)(DataTree, { data: data[key], title: key, isSecret: isSecret, showEyeIcon: showEyeIcon && typeof data[key] !== 'object', onValueChange: onValueChange ? (newValue) => {
|
|
67
|
+
const updated = { ...data, [key]: newValue };
|
|
68
|
+
onValueChange(updated);
|
|
69
|
+
} : undefined, readonly: readonly, depth: depth + 1 }, key))) }))] }));
|
|
70
|
+
};
|
|
71
|
+
const renderArray = () => {
|
|
72
|
+
const [isExpanded, setIsExpanded] = (0, react_1.useState)(depth < 2);
|
|
73
|
+
if (data.length === 0) {
|
|
74
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: `data-tree-item empty-array depth-${depth}`, children: [title && (0, jsx_runtime_1.jsxs)("span", { className: "item-title", children: [title, ":"] }), (0, jsx_runtime_1.jsx)("span", { className: "empty-value", children: "[]" })] }));
|
|
75
|
+
}
|
|
76
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: `data-tree-item array depth-${depth}`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "item-header", onClick: () => setIsExpanded(!isExpanded), children: [(0, jsx_runtime_1.jsx)("span", { className: "expand-icon", children: isExpanded ? '▼' : '▶' }), title && (0, jsx_runtime_1.jsxs)("span", { className: "item-title", children: [title, ":"] }), (0, jsx_runtime_1.jsx)("span", { className: "array-info", children: `[${data.length} ${data.length === 1 ? 'item' : 'items'}]` })] }), isExpanded && ((0, jsx_runtime_1.jsx)("div", { className: "item-children", children: data.map((item, index) => ((0, jsx_runtime_1.jsx)(DataTree, { data: item, title: `[${index}]`, isSecret: isSecret, showEyeIcon: showEyeIcon && typeof item !== 'object', onValueChange: onValueChange ? (newValue) => {
|
|
77
|
+
const updated = [...data];
|
|
78
|
+
updated[index] = newValue;
|
|
79
|
+
onValueChange(updated);
|
|
80
|
+
} : undefined, readonly: readonly, depth: depth + 1 }, index))) }))] }));
|
|
81
|
+
};
|
|
82
|
+
// Determine what type of data we're rendering
|
|
83
|
+
if (data === null || data === undefined || typeof data === 'string' || typeof data === 'number' || typeof data === 'boolean') {
|
|
84
|
+
return renderPrimitive();
|
|
85
|
+
}
|
|
86
|
+
if (Array.isArray(data)) {
|
|
87
|
+
return renderArray();
|
|
88
|
+
}
|
|
89
|
+
if (typeof data === 'object') {
|
|
90
|
+
return renderObject();
|
|
91
|
+
}
|
|
92
|
+
return renderPrimitive();
|
|
93
|
+
};
|
|
94
|
+
exports.default = DataTree;
|
|
95
|
+
//# sourceMappingURL=DataTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataTree.js","sourceRoot":"","sources":["../../../../../src/ui/components/common/DataTree.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface EyeIconProps {
|
|
3
|
+
isVisible: boolean;
|
|
4
|
+
onClick: () => void;
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Toggleable eye icon for showing/hiding sensitive values
|
|
9
|
+
*/
|
|
10
|
+
declare const EyeIcon: React.FC<EyeIconProps>;
|
|
11
|
+
export default EyeIcon;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
4
|
+
/**
|
|
5
|
+
* Toggleable eye icon for showing/hiding sensitive values
|
|
6
|
+
*/
|
|
7
|
+
const EyeIcon = ({ isVisible, onClick, className = '' }) => {
|
|
8
|
+
return ((0, jsx_runtime_1.jsx)("button", { className: `eye-icon ${isVisible ? 'visible' : 'hidden'} ${className}`, onClick: onClick, title: isVisible ? 'Hide value' : 'Show value', type: "button", children: isVisible ? '👁️' : '👁️🗨️' }));
|
|
9
|
+
};
|
|
10
|
+
exports.default = EyeIcon;
|
|
11
|
+
//# sourceMappingURL=EyeIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EyeIcon.js","sourceRoot":"","sources":["../../../../../src/ui/components/common/EyeIcon.tsx"],"names":[],"mappings":";;;AAQA;;GAEG;AACH,MAAM,OAAO,GAA2B,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,GAAG,EAAE,EAAE,EAAE,EAAE;IACjF,OAAO,CACL,mCACE,SAAS,EAAE,YAAY,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,IAAI,SAAS,EAAE,EACtE,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAC9C,IAAI,EAAC,QAAQ,YAEZ,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,GACvB,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration for entity navigation hook
|
|
3
|
+
*/
|
|
4
|
+
interface EntityNavigationConfig<TTab extends string = never> {
|
|
5
|
+
/** Base path for the entity (e.g., '/functions', '/jobs') */
|
|
6
|
+
basePath: string;
|
|
7
|
+
/** Entity name for logging purposes (e.g., 'function', 'job') */
|
|
8
|
+
entityName: string;
|
|
9
|
+
/** List of available entities */
|
|
10
|
+
entities: Array<{
|
|
11
|
+
id: string;
|
|
12
|
+
}>;
|
|
13
|
+
/** Currently selected entity ID from URL */
|
|
14
|
+
selectedEntityId: string | null;
|
|
15
|
+
/** Default tab value (optional, for views with tabs) */
|
|
16
|
+
defaultTab?: TTab;
|
|
17
|
+
/** Valid tab values (optional, for views with tabs) */
|
|
18
|
+
validTabs?: readonly TTab[];
|
|
19
|
+
/** Additional query parameters to preserve during navigation (default: ['console']) */
|
|
20
|
+
preserveParams?: string[];
|
|
21
|
+
/** Additional query parameters to set when navigating to an entity */
|
|
22
|
+
additionalParams?: Record<string, string>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Return value from entity navigation hook
|
|
26
|
+
*/
|
|
27
|
+
interface EntityNavigationReturn<TTab extends string = never> {
|
|
28
|
+
/** Navigate to a specific entity or clear selection */
|
|
29
|
+
navigateToEntity: (entityId: string | null, replace?: boolean) => void;
|
|
30
|
+
/** Whether the currently selected entity exists in the entities list */
|
|
31
|
+
isValidEntity: boolean;
|
|
32
|
+
/** Whether the first entity should be auto-selected */
|
|
33
|
+
shouldAutoSelect: boolean;
|
|
34
|
+
/** Active tab (if tabs are configured) */
|
|
35
|
+
activeTab?: TTab;
|
|
36
|
+
/** Set the active tab (if tabs are configured) */
|
|
37
|
+
setActiveTab?: (tab: TTab) => void;
|
|
38
|
+
/** Whether the current tab is valid (if tabs are configured) */
|
|
39
|
+
isValidTab?: boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Custom hook for managing entity selection and navigation with URL synchronization.
|
|
43
|
+
*
|
|
44
|
+
* This hook handles:
|
|
45
|
+
* - Navigation to/from entities while preserving query parameters (e.g., console tab)
|
|
46
|
+
* - Auto-selection of first entity when none is selected
|
|
47
|
+
* - Validation of entity ID and redirect to first entity if invalid
|
|
48
|
+
* - Optional tab management with validation
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* // Simple entity navigation (no tabs)
|
|
53
|
+
* const { navigateToEntity } = useEntityNavigation({
|
|
54
|
+
* basePath: '/destinations',
|
|
55
|
+
* entityName: 'destination',
|
|
56
|
+
* entities: destinations,
|
|
57
|
+
* selectedEntityId: selectedDestination,
|
|
58
|
+
* });
|
|
59
|
+
*
|
|
60
|
+
* // With tabs
|
|
61
|
+
* const { navigateToEntity, activeTab, setActiveTab } = useEntityNavigation({
|
|
62
|
+
* basePath: '/functions',
|
|
63
|
+
* entityName: 'function',
|
|
64
|
+
* entities: functions,
|
|
65
|
+
* selectedEntityId: selectedFunction,
|
|
66
|
+
* defaultTab: 'body' as const,
|
|
67
|
+
* validTabs: ['params', 'headers', 'body'] as const,
|
|
68
|
+
* });
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export declare function useEntityNavigation<TTab extends string = never>(config: EntityNavigationConfig<TTab>): EntityNavigationReturn<TTab>;
|
|
72
|
+
export {};
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useEntityNavigation = useEntityNavigation;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const react_router_dom_1 = require("react-router-dom");
|
|
6
|
+
const useQueryParams_1 = require("./useQueryParams");
|
|
7
|
+
/**
|
|
8
|
+
* Custom hook for managing entity selection and navigation with URL synchronization.
|
|
9
|
+
*
|
|
10
|
+
* This hook handles:
|
|
11
|
+
* - Navigation to/from entities while preserving query parameters (e.g., console tab)
|
|
12
|
+
* - Auto-selection of first entity when none is selected
|
|
13
|
+
* - Validation of entity ID and redirect to first entity if invalid
|
|
14
|
+
* - Optional tab management with validation
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* // Simple entity navigation (no tabs)
|
|
19
|
+
* const { navigateToEntity } = useEntityNavigation({
|
|
20
|
+
* basePath: '/destinations',
|
|
21
|
+
* entityName: 'destination',
|
|
22
|
+
* entities: destinations,
|
|
23
|
+
* selectedEntityId: selectedDestination,
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* // With tabs
|
|
27
|
+
* const { navigateToEntity, activeTab, setActiveTab } = useEntityNavigation({
|
|
28
|
+
* basePath: '/functions',
|
|
29
|
+
* entityName: 'function',
|
|
30
|
+
* entities: functions,
|
|
31
|
+
* selectedEntityId: selectedFunction,
|
|
32
|
+
* defaultTab: 'body' as const,
|
|
33
|
+
* validTabs: ['params', 'headers', 'body'] as const,
|
|
34
|
+
* });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
function useEntityNavigation(config) {
|
|
38
|
+
const navigate = (0, react_router_dom_1.useNavigate)();
|
|
39
|
+
const { getParam, setParams } = (0, useQueryParams_1.useQueryParams)();
|
|
40
|
+
const { basePath, entityName, entities, selectedEntityId, defaultTab, validTabs, preserveParams = ['console'], additionalParams = {}, } = config;
|
|
41
|
+
/**
|
|
42
|
+
* Build URLSearchParams with preserved parameters
|
|
43
|
+
*/
|
|
44
|
+
const buildPreservedParams = (0, react_1.useCallback)(() => {
|
|
45
|
+
const params = new URLSearchParams();
|
|
46
|
+
// Preserve specified query params
|
|
47
|
+
preserveParams.forEach(param => {
|
|
48
|
+
const value = getParam(param);
|
|
49
|
+
if (value) {
|
|
50
|
+
params.set(param, value);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
// Add any additional params
|
|
54
|
+
Object.entries(additionalParams).forEach(([key, value]) => {
|
|
55
|
+
if (value) {
|
|
56
|
+
params.set(key, value);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
return params;
|
|
60
|
+
}, [getParam, preserveParams, additionalParams]);
|
|
61
|
+
/**
|
|
62
|
+
* Navigate to an entity (or clear selection if entityId is null)
|
|
63
|
+
*/
|
|
64
|
+
const navigateToEntity = (0, react_1.useCallback)((entityId, replace = false) => {
|
|
65
|
+
const params = buildPreservedParams();
|
|
66
|
+
if (entityId) {
|
|
67
|
+
// Add default tab if configured
|
|
68
|
+
if (defaultTab) {
|
|
69
|
+
params.set('tab', defaultTab);
|
|
70
|
+
}
|
|
71
|
+
const query = params.toString();
|
|
72
|
+
navigate(`${basePath}/${entityId}${query ? `?${query}` : ''}`, { replace });
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
// No entity selected, navigate to base path
|
|
76
|
+
const query = params.toString();
|
|
77
|
+
navigate(`${basePath}${query ? `?${query}` : ''}`, { replace });
|
|
78
|
+
}
|
|
79
|
+
}, [navigate, basePath, defaultTab, buildPreservedParams]);
|
|
80
|
+
/**
|
|
81
|
+
* Check if the selected entity exists in the entities list
|
|
82
|
+
*/
|
|
83
|
+
const isValidEntity = (0, react_1.useMemo)(() => {
|
|
84
|
+
if (!selectedEntityId || entities.length === 0)
|
|
85
|
+
return true;
|
|
86
|
+
return entities.some(e => e.id === selectedEntityId);
|
|
87
|
+
}, [selectedEntityId, entities]);
|
|
88
|
+
/**
|
|
89
|
+
* Determine if we should auto-select the first entity
|
|
90
|
+
*/
|
|
91
|
+
const shouldAutoSelect = (0, react_1.useMemo)(() => {
|
|
92
|
+
return entities.length > 0 && !selectedEntityId;
|
|
93
|
+
}, [entities.length, selectedEntityId]);
|
|
94
|
+
/**
|
|
95
|
+
* Validate entity ID and redirect if invalid
|
|
96
|
+
*/
|
|
97
|
+
(0, react_1.useEffect)(() => {
|
|
98
|
+
if (selectedEntityId && entities.length > 0 && !isValidEntity) {
|
|
99
|
+
console.warn(`${entityName} '${selectedEntityId}' not found, redirecting to first ${entityName}`);
|
|
100
|
+
navigateToEntity(entities[0].id, true);
|
|
101
|
+
}
|
|
102
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
103
|
+
}, [selectedEntityId, entities, isValidEntity, entityName]);
|
|
104
|
+
/**
|
|
105
|
+
* Auto-select first entity if none selected
|
|
106
|
+
*/
|
|
107
|
+
(0, react_1.useEffect)(() => {
|
|
108
|
+
if (shouldAutoSelect) {
|
|
109
|
+
navigateToEntity(entities[0].id, true);
|
|
110
|
+
}
|
|
111
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
112
|
+
}, [shouldAutoSelect, entities]);
|
|
113
|
+
// Tab handling (if configured)
|
|
114
|
+
const activeTab = (validTabs && getParam('tab')) || defaultTab;
|
|
115
|
+
const isValidTab = (0, react_1.useMemo)(() => {
|
|
116
|
+
if (!validTabs || !activeTab)
|
|
117
|
+
return true;
|
|
118
|
+
return validTabs.includes(activeTab);
|
|
119
|
+
}, [validTabs, activeTab]);
|
|
120
|
+
const setActiveTab = (0, react_1.useCallback)((tab) => {
|
|
121
|
+
setParams({ tab });
|
|
122
|
+
}, [setParams]);
|
|
123
|
+
/**
|
|
124
|
+
* Validate tab and set default if needed
|
|
125
|
+
*/
|
|
126
|
+
(0, react_1.useEffect)(() => {
|
|
127
|
+
if (!validTabs || !selectedEntityId)
|
|
128
|
+
return;
|
|
129
|
+
const urlTab = getParam('tab');
|
|
130
|
+
if (urlTab && !validTabs.includes(urlTab)) {
|
|
131
|
+
console.warn(`Invalid tab '${urlTab}', resetting to '${defaultTab}'`);
|
|
132
|
+
setParams({ tab: defaultTab });
|
|
133
|
+
}
|
|
134
|
+
else if (!urlTab && defaultTab) {
|
|
135
|
+
setParams({ tab: defaultTab });
|
|
136
|
+
}
|
|
137
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
138
|
+
}, [selectedEntityId, validTabs, defaultTab, getParam('tab')]);
|
|
139
|
+
return {
|
|
140
|
+
navigateToEntity,
|
|
141
|
+
isValidEntity,
|
|
142
|
+
shouldAutoSelect,
|
|
143
|
+
...(validTabs && {
|
|
144
|
+
activeTab,
|
|
145
|
+
setActiveTab,
|
|
146
|
+
isValidTab,
|
|
147
|
+
}),
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=useEntityNavigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEntityNavigation.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useEntityNavigation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function useQueryParams(): {
|
|
2
|
+
getParam: (key: string) => string | null;
|
|
3
|
+
setParam: (key: string, value: string | null, replace?: boolean) => void;
|
|
4
|
+
setParams: (updates: Record<string, string | null>, replace?: boolean) => void;
|
|
5
|
+
searchParams: URLSearchParams;
|
|
6
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useQueryParams = useQueryParams;
|
|
4
|
+
const react_router_dom_1 = require("react-router-dom");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
function useQueryParams() {
|
|
7
|
+
const [searchParams, setSearchParams] = (0, react_router_dom_1.useSearchParams)();
|
|
8
|
+
const getParam = (0, react_1.useCallback)((key) => {
|
|
9
|
+
return searchParams.get(key);
|
|
10
|
+
}, [searchParams]);
|
|
11
|
+
const setParam = (0, react_1.useCallback)((key, value, replace) => {
|
|
12
|
+
setSearchParams(prev => {
|
|
13
|
+
const next = new URLSearchParams(prev);
|
|
14
|
+
if (value === null || value === undefined) {
|
|
15
|
+
next.delete(key);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
next.set(key, value);
|
|
19
|
+
}
|
|
20
|
+
return next;
|
|
21
|
+
}, { replace });
|
|
22
|
+
}, [setSearchParams]);
|
|
23
|
+
const setParams = (0, react_1.useCallback)((updates, replace) => {
|
|
24
|
+
setSearchParams(prev => {
|
|
25
|
+
const next = new URLSearchParams(prev);
|
|
26
|
+
Object.entries(updates).forEach(([key, value]) => {
|
|
27
|
+
if (value === null || value === undefined) {
|
|
28
|
+
next.delete(key);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
next.set(key, value);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
return next;
|
|
35
|
+
}, { replace });
|
|
36
|
+
}, [setSearchParams]);
|
|
37
|
+
return { getParam, setParam, setParams, searchParams };
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=useQueryParams.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useQueryParams.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useQueryParams.ts"],"names":[],"mappings":";;AAGA,wCAkCC;AArCD,uDAAmD;AACnD,iCAAoC;AAEpC,SAAgB,cAAc;IAC5B,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,kCAAe,GAAE,CAAC;IAE1D,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,CAAC,GAAW,EAAiB,EAAE;QAC1D,OAAO,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,CAAC,GAAW,EAAE,KAAoB,EAAE,OAAiB,EAAE,EAAE;QACpF,eAAe,CAAC,IAAI,CAAC,EAAE;YACrB,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACvB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAClB,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,MAAM,SAAS,GAAG,IAAA,mBAAW,EAAC,CAAC,OAAsC,EAAE,OAAiB,EAAE,EAAE;QAC1F,eAAe,CAAC,IAAI,CAAC,EAAE;YACrB,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC/C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACnB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAClB,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "./styles.css";
|