@optimizely/ocp-local-env 1.0.0-beta.4
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 +165 -0
- package/dist/package.json +104 -0
- package/dist/public/bundle.da978bb5437cd82e6d37.js +3 -0
- package/dist/public/bundle.da978bb5437cd82e6d37.js.LICENSE.txt +49 -0
- package/dist/public/bundle.da978bb5437cd82e6d37.js.map +1 -0
- package/dist/public/index.html +1 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +88 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/executor/FunctionExecutor.d.ts +56 -0
- package/dist/src/executor/FunctionExecutor.js +175 -0
- package/dist/src/executor/FunctionExecutor.js.map +1 -0
- package/dist/src/executor/JobExecutor.d.ts +60 -0
- package/dist/src/executor/JobExecutor.js +203 -0
- package/dist/src/executor/JobExecutor.js.map +1 -0
- package/dist/src/executor/LifecycleExecutor.d.ts +45 -0
- package/dist/src/executor/LifecycleExecutor.js +153 -0
- package/dist/src/executor/LifecycleExecutor.js.map +1 -0
- package/dist/src/executor/watcher.d.ts +63 -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/LocalNotifier.d.ts +10 -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 +79 -0
- package/dist/src/local_engine/local-engine-child-base.js +304 -0
- package/dist/src/local_engine/local-engine-child-base.js.map +1 -0
- package/dist/src/local_engine/local-engine-client.d.ts +80 -0
- package/dist/src/local_engine/local-engine-client.js +333 -0
- package/dist/src/local_engine/local-engine-client.js.map +1 -0
- package/dist/src/local_engine/local-engine-types.d.ts +132 -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 +40 -0
- package/dist/src/local_engine/local-engine-unified.js +406 -0
- package/dist/src/local_engine/local-engine-unified.js.map +1 -0
- package/dist/src/local_engine/local-engine-utils.d.ts +70 -0
- package/dist/src/local_engine/local-engine-utils.js +192 -0
- package/dist/src/local_engine/local-engine-utils.js.map +1 -0
- package/dist/src/local_engine/localSDKConfig.d.ts +30 -0
- package/dist/src/local_engine/localSDKConfig.js +392 -0
- package/dist/src/local_engine/localSDKConfig.js.map +1 -0
- package/dist/src/local_engine/storage/LocalConfigStore.d.ts +56 -0
- package/dist/src/local_engine/storage/LocalConfigStore.js +129 -0
- package/dist/src/local_engine/storage/LocalConfigStore.js.map +1 -0
- package/dist/src/local_engine/storage/LocalJobStore.d.ts +110 -0
- package/dist/src/local_engine/storage/LocalJobStore.js +239 -0
- package/dist/src/local_engine/storage/LocalJobStore.js.map +1 -0
- package/dist/src/local_engine/storage/LocalKVStore.d.ts +105 -0
- package/dist/src/local_engine/storage/LocalKVStore.js +1002 -0
- package/dist/src/local_engine/storage/LocalKVStore.js.map +1 -0
- package/dist/src/local_engine/storage/LocalNotificationStore.d.ts +27 -0
- package/dist/src/local_engine/storage/LocalNotificationStore.js +125 -0
- package/dist/src/local_engine/storage/LocalNotificationStore.js.map +1 -0
- package/dist/src/local_engine/storage/LocalSecretsStore.d.ts +114 -0
- package/dist/src/local_engine/storage/LocalSecretsStore.js +319 -0
- package/dist/src/local_engine/storage/LocalSecretsStore.js.map +1 -0
- package/dist/src/local_engine/storage/LocalSettingsStore.d.ts +161 -0
- package/dist/src/local_engine/storage/LocalSettingsStore.js +417 -0
- package/dist/src/local_engine/storage/LocalSettingsStore.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/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 +52 -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 +31 -0
- package/dist/src/local_engine/utils.js +126 -0
- package/dist/src/local_engine/utils.js.map +1 -0
- package/dist/src/logging/LogManager.d.ts +89 -0
- package/dist/src/logging/LogManager.js +237 -0
- package/dist/src/logging/LogManager.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 +8 -0
- package/dist/src/server/api/jobs.js +242 -0
- package/dist/src/server/api/jobs.js.map +1 -0
- package/dist/src/server/api/lifecycle.d.ts +6 -0
- package/dist/src/server/api/lifecycle.js +73 -0
- package/dist/src/server/api/lifecycle.js.map +1 -0
- package/dist/src/server/api/settings.d.ts +6 -0
- package/dist/src/server/api/settings.js +117 -0
- package/dist/src/server/api/settings.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 +711 -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 +154 -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 +81 -0
- package/dist/src/server/app-discovery.js.map +1 -0
- package/dist/src/server/config.d.ts +21 -0
- package/dist/src/server/config.js +100 -0
- package/dist/src/server/config.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 +546 -0
- package/dist/src/server.js.map +1 -0
- package/dist/src/types/app.d.ts +155 -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 +255 -0
- package/dist/src/ui/components/App.js.map +1 -0
- package/dist/src/ui/components/FunctionsView.d.ts +6 -0
- package/dist/src/ui/components/FunctionsView.js +217 -0
- package/dist/src/ui/components/FunctionsView.js.map +1 -0
- package/dist/src/ui/components/JobsView.d.ts +6 -0
- package/dist/src/ui/components/JobsView.js +257 -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/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/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 +15 -0
- package/dist/src/ui/components/TabbedConsole.js +93 -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/index.d.ts +1 -0
- package/dist/src/ui/index.js +20 -0
- package/dist/src/ui/index.js.map +1 -0
- package/package.json +104 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const JobsView = ({ appInstalled }) => {
|
|
6
|
+
const [jobs, setJobs] = (0, react_1.useState)([]);
|
|
7
|
+
const [selectedJob, setSelectedJob] = (0, react_1.useState)(null);
|
|
8
|
+
const [executions, setExecutions] = (0, react_1.useState)([]);
|
|
9
|
+
const [selectedExecution, setSelectedExecution] = (0, react_1.useState)(null);
|
|
10
|
+
const [executionStates, setExecutionStates] = (0, react_1.useState)([]);
|
|
11
|
+
const [expandedStates, setExpandedStates] = (0, react_1.useState)(new Set());
|
|
12
|
+
const [loading, setLoading] = (0, react_1.useState)(false);
|
|
13
|
+
const [startJobDialogOpen, setStartJobDialogOpen] = (0, react_1.useState)(false);
|
|
14
|
+
const [jobParameters, setJobParameters] = (0, react_1.useState)({});
|
|
15
|
+
const [startJobError, setStartJobError] = (0, react_1.useState)(null);
|
|
16
|
+
const [pollingInterval, setPollingInterval] = (0, react_1.useState)(null);
|
|
17
|
+
// Fetch jobs on mount
|
|
18
|
+
(0, react_1.useEffect)(() => {
|
|
19
|
+
if (appInstalled) {
|
|
20
|
+
fetchJobs();
|
|
21
|
+
}
|
|
22
|
+
}, [appInstalled]);
|
|
23
|
+
// Fetch executions when job is selected
|
|
24
|
+
(0, react_1.useEffect)(() => {
|
|
25
|
+
// Clear any existing polling when job changes
|
|
26
|
+
if (pollingInterval) {
|
|
27
|
+
clearInterval(pollingInterval);
|
|
28
|
+
setPollingInterval(null);
|
|
29
|
+
}
|
|
30
|
+
if (selectedJob) {
|
|
31
|
+
fetchExecutions(selectedJob);
|
|
32
|
+
}
|
|
33
|
+
}, [selectedJob]);
|
|
34
|
+
// Fetch execution states when execution is selected
|
|
35
|
+
(0, react_1.useEffect)(() => {
|
|
36
|
+
if (selectedExecution) {
|
|
37
|
+
fetchExecutionStates(selectedExecution);
|
|
38
|
+
}
|
|
39
|
+
}, [selectedExecution]);
|
|
40
|
+
// Polling effect for running jobs
|
|
41
|
+
(0, react_1.useEffect)(() => {
|
|
42
|
+
const hasRunningJobs = executions.some(execution => execution.status === 'running');
|
|
43
|
+
if (hasRunningJobs && selectedJob && !pollingInterval) {
|
|
44
|
+
// Start polling every 2 seconds for running jobs
|
|
45
|
+
const interval = setInterval(async () => {
|
|
46
|
+
await fetchExecutions(selectedJob);
|
|
47
|
+
if (selectedExecution) {
|
|
48
|
+
await fetchExecutionStates(selectedExecution);
|
|
49
|
+
}
|
|
50
|
+
}, 2000);
|
|
51
|
+
setPollingInterval(interval);
|
|
52
|
+
}
|
|
53
|
+
else if (!hasRunningJobs && pollingInterval) {
|
|
54
|
+
// Stop polling when no running jobs
|
|
55
|
+
clearInterval(pollingInterval);
|
|
56
|
+
setPollingInterval(null);
|
|
57
|
+
}
|
|
58
|
+
// Cleanup on unmount
|
|
59
|
+
return () => {
|
|
60
|
+
if (pollingInterval) {
|
|
61
|
+
clearInterval(pollingInterval);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
}, [executions, selectedJob, selectedExecution, pollingInterval]);
|
|
65
|
+
const fetchJobs = async () => {
|
|
66
|
+
try {
|
|
67
|
+
const response = await fetch('/devserver/api/jobs');
|
|
68
|
+
if (response.ok) {
|
|
69
|
+
const data = await response.json();
|
|
70
|
+
setJobs(data.jobs || []);
|
|
71
|
+
if (data.jobs && data.jobs.length > 0 && !selectedJob) {
|
|
72
|
+
setSelectedJob(data.jobs[0].id);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
console.error('Error fetching jobs:', error);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const fetchExecutions = async (jobId) => {
|
|
81
|
+
try {
|
|
82
|
+
const response = await fetch(`/devserver/api/jobs/executions?jobId=${jobId}&limit=50`);
|
|
83
|
+
if (response.ok) {
|
|
84
|
+
const data = await response.json();
|
|
85
|
+
setExecutions(data.executions || []);
|
|
86
|
+
if (data.executions && data.executions.length > 0) {
|
|
87
|
+
setSelectedExecution(data.executions[0].id);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
setSelectedExecution(null);
|
|
91
|
+
setExecutionStates([]);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
console.error('Error fetching executions:', error);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
const fetchExecutionStates = async (executionId) => {
|
|
100
|
+
try {
|
|
101
|
+
const response = await fetch(`/devserver/api/jobs/executions/${executionId}/states`);
|
|
102
|
+
if (response.ok) {
|
|
103
|
+
const data = await response.json();
|
|
104
|
+
setExecutionStates(data.states || []);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
console.error('Error fetching execution states:', error);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
const startJob = async () => {
|
|
112
|
+
if (!selectedJob)
|
|
113
|
+
return;
|
|
114
|
+
setLoading(true);
|
|
115
|
+
setStartJobError(null);
|
|
116
|
+
try {
|
|
117
|
+
const response = await fetch(`/devserver/api/jobs/${selectedJob}/start`, {
|
|
118
|
+
method: 'POST',
|
|
119
|
+
headers: {
|
|
120
|
+
'Content-Type': 'application/json',
|
|
121
|
+
},
|
|
122
|
+
body: JSON.stringify({
|
|
123
|
+
parameters: jobParameters
|
|
124
|
+
})
|
|
125
|
+
});
|
|
126
|
+
const data = await response.json();
|
|
127
|
+
if (response.ok) {
|
|
128
|
+
// Job started successfully - close modal immediately and reset loading state
|
|
129
|
+
setStartJobDialogOpen(false);
|
|
130
|
+
setJobParameters({});
|
|
131
|
+
setStartJobError(null);
|
|
132
|
+
setLoading(false);
|
|
133
|
+
// Get the execution ID from the response
|
|
134
|
+
const newExecutionId = data.execution?.id;
|
|
135
|
+
// Refresh executions to show the new running job (with small delay to ensure job is persisted)
|
|
136
|
+
setTimeout(async () => {
|
|
137
|
+
await fetchExecutions(selectedJob);
|
|
138
|
+
// Force polling for a short period to catch the running state and completion
|
|
139
|
+
const forcePollingInterval = setInterval(async () => {
|
|
140
|
+
await fetchExecutions(selectedJob);
|
|
141
|
+
// Always fetch states for the newest execution (first in list)
|
|
142
|
+
const response = await fetch(`/devserver/api/jobs/executions?jobId=${selectedJob}&limit=1`);
|
|
143
|
+
if (response.ok) {
|
|
144
|
+
const data = await response.json();
|
|
145
|
+
if (data.executions && data.executions.length > 0) {
|
|
146
|
+
await fetchExecutionStates(data.executions[0].id);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}, 1000);
|
|
150
|
+
// Stop force polling after 15 seconds
|
|
151
|
+
setTimeout(() => {
|
|
152
|
+
clearInterval(forcePollingInterval);
|
|
153
|
+
}, 15000);
|
|
154
|
+
}, 100);
|
|
155
|
+
if (!data.success) {
|
|
156
|
+
// Job failed to start - log the error but modal is already closed
|
|
157
|
+
console.error('Job execution failed to start:', data.error);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
// Request failed - show error and keep modal open for retry
|
|
162
|
+
const errorMessage = data.error?.message || data.error || 'Failed to start job';
|
|
163
|
+
setStartJobError(errorMessage);
|
|
164
|
+
console.error('Failed to start job:', data.error);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
// Network or other error
|
|
169
|
+
const errorMessage = error instanceof Error ? error.message : 'Network error occurred';
|
|
170
|
+
setStartJobError(errorMessage);
|
|
171
|
+
console.error('Error starting job:', error);
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
setLoading(false);
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
const formatTimestamp = (timestamp) => {
|
|
178
|
+
return new Date(timestamp).toLocaleString();
|
|
179
|
+
};
|
|
180
|
+
const formatExecutionTime = (time) => {
|
|
181
|
+
if (!time)
|
|
182
|
+
return 'N/A';
|
|
183
|
+
return `${time}ms`;
|
|
184
|
+
};
|
|
185
|
+
const getStatusColor = (status) => {
|
|
186
|
+
switch (status) {
|
|
187
|
+
case 'completed': return '#28a745';
|
|
188
|
+
case 'running': return '#007bff';
|
|
189
|
+
case 'failed': return '#dc3545';
|
|
190
|
+
case 'interrupted': return '#ffc107';
|
|
191
|
+
default: return '#6c757d';
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
const toggleStateExpansion = (stateId) => {
|
|
195
|
+
const newExpanded = new Set(expandedStates);
|
|
196
|
+
if (newExpanded.has(stateId)) {
|
|
197
|
+
newExpanded.delete(stateId);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
newExpanded.add(stateId);
|
|
201
|
+
}
|
|
202
|
+
setExpandedStates(newExpanded);
|
|
203
|
+
};
|
|
204
|
+
const updateJobParameter = (key, value) => {
|
|
205
|
+
setJobParameters(prev => ({
|
|
206
|
+
...prev,
|
|
207
|
+
[key]: value
|
|
208
|
+
}));
|
|
209
|
+
};
|
|
210
|
+
const removeJobParameter = (key) => {
|
|
211
|
+
const newParams = { ...jobParameters };
|
|
212
|
+
delete newParams[key];
|
|
213
|
+
setJobParameters(newParams);
|
|
214
|
+
};
|
|
215
|
+
const addJobParameter = () => {
|
|
216
|
+
const key = `param_${Object.keys(jobParameters).length + 1}`;
|
|
217
|
+
updateJobParameter(key, '');
|
|
218
|
+
};
|
|
219
|
+
if (!appInstalled) {
|
|
220
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "jobs-not-installed", children: (0, jsx_runtime_1.jsxs)("div", { className: "placeholder-content", children: [(0, jsx_runtime_1.jsx)("h3", { children: "Jobs Not Available" }), (0, jsx_runtime_1.jsx)("p", { children: "Install your app first to manage jobs. Jobs will appear here after installation." })] }) }));
|
|
221
|
+
}
|
|
222
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "jobs-view", children: [(0, jsx_runtime_1.jsxs)("div", { className: "jobs-layout", children: [(0, jsx_runtime_1.jsxs)("div", { className: "jobs-sidebar", children: [(0, jsx_runtime_1.jsxs)("div", { className: "jobs-header", children: [(0, jsx_runtime_1.jsx)("h4", { children: "Jobs" }), selectedJob && ((0, jsx_runtime_1.jsx)("button", { className: "start-job-btn", onClick: () => {
|
|
223
|
+
setStartJobDialogOpen(true);
|
|
224
|
+
setStartJobError(null);
|
|
225
|
+
}, disabled: loading, children: "Start Job" }))] }), (0, jsx_runtime_1.jsx)("div", { className: "jobs-list", children: jobs.length === 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "no-jobs", children: (0, jsx_runtime_1.jsx)("p", { children: "No jobs defined in app.yml" }) })) : (jobs.map((job) => ((0, jsx_runtime_1.jsxs)("div", { className: `job-item ${selectedJob === job.id ? 'active' : ''} ${!job.validation.valid ? 'invalid' : ''}`, onClick: () => setSelectedJob(job.id), children: [(0, jsx_runtime_1.jsx)("div", { className: "job-name", children: job.id }), (0, jsx_runtime_1.jsx)("div", { className: "job-description", children: job.description }), (0, jsx_runtime_1.jsxs)("div", { className: "job-meta", children: [job.isSourceJob && (0, jsx_runtime_1.jsx)("span", { className: "job-badge source", children: "Source" }), job.cron && (0, jsx_runtime_1.jsx)("span", { className: "job-badge cron", children: "Scheduled" }), !job.validation.valid && ((0, jsx_runtime_1.jsx)("span", { className: "job-badge error", title: job.validation.error, children: "Invalid" }))] })] }, job.id)))) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "executions-panel", children: [(0, jsx_runtime_1.jsxs)("div", { className: "executions-header", children: [(0, jsx_runtime_1.jsx)("h4", { children: "Execution History" }), selectedJob && ((0, jsx_runtime_1.jsxs)("span", { className: "selected-job", children: ["Job: ", selectedJob] }))] }), (0, jsx_runtime_1.jsx)("div", { className: "executions-list", children: executions.length === 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "no-executions", children: (0, jsx_runtime_1.jsx)("p", { children: selectedJob ? 'No executions yet' : 'Select a job to see executions' }) })) : (executions.map((execution) => ((0, jsx_runtime_1.jsxs)("div", { className: `execution-item ${selectedExecution === execution.id ? 'active' : ''}`, onClick: () => setSelectedExecution(execution.id), children: [(0, jsx_runtime_1.jsxs)("div", { className: "execution-status", children: [execution.status === 'running' ? ((0, jsx_runtime_1.jsx)("span", { className: "status-spinner" })) : ((0, jsx_runtime_1.jsx)("span", { className: "status-dot", style: { backgroundColor: getStatusColor(execution.status) } })), (0, jsx_runtime_1.jsx)("span", { className: "status-text", children: execution.status })] }), (0, jsx_runtime_1.jsxs)("div", { className: "execution-time", children: [(0, jsx_runtime_1.jsx)("div", { className: "started-at", children: formatTimestamp(execution.startedAt) }), execution.completedAt && ((0, jsx_runtime_1.jsxs)("div", { className: "execution-duration", children: ["Duration: ", formatExecutionTime(execution.executionTime)] }))] }), (0, jsx_runtime_1.jsx)("div", { className: "execution-stats", children: (0, jsx_runtime_1.jsxs)("span", { className: "state-count", children: [execution.stateCount, " states"] }) }), execution.error && ((0, jsx_runtime_1.jsxs)("div", { className: "execution-error", children: ["Error: ", execution.error.message] }))] }, execution.id)))) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "states-panel", children: [(0, jsx_runtime_1.jsxs)("div", { className: "states-header", children: [(0, jsx_runtime_1.jsx)("h4", { children: "Job States" }), selectedExecution && ((0, jsx_runtime_1.jsxs)("span", { className: "selected-execution", children: ["Execution: ", selectedExecution.slice(0, 8), "..."] }))] }), (0, jsx_runtime_1.jsx)("div", { className: "states-list", children: executionStates.length === 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "no-states", children: (0, jsx_runtime_1.jsx)("p", { children: selectedExecution ? 'No states recorded' : 'Select an execution to see states' }) })) : (executionStates.map((state) => ((0, jsx_runtime_1.jsxs)("div", { className: "state-item", children: [(0, jsx_runtime_1.jsxs)("div", { className: "state-header", onClick: () => toggleStateExpansion(state.id), children: [(0, jsx_runtime_1.jsxs)("div", { className: "state-meta", children: [(0, jsx_runtime_1.jsxs)("div", { className: "state-primary-info", children: [(0, jsx_runtime_1.jsx)("span", { className: "state-timestamp", children: formatTimestamp(state.timestamp) }), (0, jsx_runtime_1.jsx)("span", { className: `state-phase ${state.phase}`, children: state.phase })] }), state.complete && ((0, jsx_runtime_1.jsx)("div", { className: "state-secondary-info", children: (() => {
|
|
226
|
+
const currentExecution = executions.find(e => e.id === state.executionId);
|
|
227
|
+
const isError = currentExecution?.status === 'failed' && currentExecution?.error;
|
|
228
|
+
return ((0, jsx_runtime_1.jsx)("span", { className: `state-status ${isError ? 'error' : 'complete'}`, children: isError ? 'Error' : 'Completed' }));
|
|
229
|
+
})() }))] }), (0, jsx_runtime_1.jsx)("div", { className: "state-expand", children: (0, jsx_runtime_1.jsx)("span", { className: `expand-icon ${expandedStates.has(state.id) ? 'expanded' : ''}`, children: "\u25BC" }) })] }), expandedStates.has(state.id) && ((0, jsx_runtime_1.jsx)("div", { className: "state-content", children: (0, jsx_runtime_1.jsx)("pre", { children: JSON.stringify(state.state, null, 2) }) }))] }, state.id)))) })] })] }), startJobDialogOpen && ((0, jsx_runtime_1.jsx)("div", { className: "modal-overlay", children: (0, jsx_runtime_1.jsxs)("div", { className: "modal", children: [(0, jsx_runtime_1.jsxs)("div", { className: "modal-header", children: [(0, jsx_runtime_1.jsxs)("h3", { children: ["Start Job: ", selectedJob] }), (0, jsx_runtime_1.jsx)("button", { className: "modal-close", onClick: () => {
|
|
230
|
+
setStartJobDialogOpen(false);
|
|
231
|
+
setStartJobError(null);
|
|
232
|
+
setJobParameters({});
|
|
233
|
+
}, children: "\u00D7" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "modal-body", children: [startJobError && ((0, jsx_runtime_1.jsxs)("div", { className: "start-job-error", children: [(0, jsx_runtime_1.jsx)("h4", { children: "Error" }), (0, jsx_runtime_1.jsx)("p", { children: startJobError })] })), (0, jsx_runtime_1.jsxs)("div", { className: "job-parameters", children: [(0, jsx_runtime_1.jsx)("h4", { children: "Parameters" }), (0, jsx_runtime_1.jsxs)("div", { className: "parameter-list", children: [Object.entries(jobParameters).map(([key, value]) => ((0, jsx_runtime_1.jsxs)("div", { className: "parameter-row", children: [(0, jsx_runtime_1.jsx)("input", { type: "text", value: key, onChange: (e) => {
|
|
234
|
+
const newKey = e.target.value;
|
|
235
|
+
const newParams = { ...jobParameters };
|
|
236
|
+
delete newParams[key];
|
|
237
|
+
newParams[newKey] = value;
|
|
238
|
+
setJobParameters(newParams);
|
|
239
|
+
}, placeholder: "Parameter name", className: "parameter-key" }), (0, jsx_runtime_1.jsx)("input", { type: "text", value: typeof value === 'string' ? value : JSON.stringify(value), onChange: (e) => {
|
|
240
|
+
try {
|
|
241
|
+
updateJobParameter(key, JSON.parse(e.target.value));
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
updateJobParameter(key, e.target.value);
|
|
245
|
+
}
|
|
246
|
+
}, placeholder: "Parameter value (JSON or string)", className: "parameter-value" }), (0, jsx_runtime_1.jsx)("button", { className: "remove-parameter", onClick: () => removeJobParameter(key), children: "\u00D7" })] }, key))), (0, jsx_runtime_1.jsx)("button", { className: "add-parameter", onClick: addJobParameter, children: "Add Parameter" })] })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "modal-footer", children: [(0, jsx_runtime_1.jsx)("button", { className: "cancel-btn", onClick: () => {
|
|
247
|
+
setStartJobDialogOpen(false);
|
|
248
|
+
setStartJobError(null);
|
|
249
|
+
setJobParameters({});
|
|
250
|
+
}, children: "Cancel" }), startJobError ? ((0, jsx_runtime_1.jsx)("button", { className: "start-btn", onClick: () => {
|
|
251
|
+
setStartJobDialogOpen(false);
|
|
252
|
+
setStartJobError(null);
|
|
253
|
+
setJobParameters({});
|
|
254
|
+
}, children: "Close" })) : ((0, jsx_runtime_1.jsx)("button", { className: "start-btn", onClick: startJob, disabled: loading, children: loading ? 'Starting...' : 'Start Job' }))] })] }) }))] }));
|
|
255
|
+
};
|
|
256
|
+
exports.default = JobsView;
|
|
257
|
+
//# sourceMappingURL=JobsView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JobsView.js","sourceRoot":"","sources":["../../../../src/ui/components/JobsView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface KVStoreViewerProps {
|
|
3
|
+
data: {
|
|
4
|
+
[key: string]: any;
|
|
5
|
+
};
|
|
6
|
+
title: string;
|
|
7
|
+
apiEndpoint: string;
|
|
8
|
+
onUpdate: (updatedData: any) => void;
|
|
9
|
+
}
|
|
10
|
+
declare const KVStoreViewer: React.FC<KVStoreViewerProps>;
|
|
11
|
+
export default KVStoreViewer;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const KVStoreViewer = ({ data, title, apiEndpoint, onUpdate }) => {
|
|
6
|
+
const [editingKey, setEditingKey] = (0, react_1.useState)(null);
|
|
7
|
+
const [editValue, setEditValue] = (0, react_1.useState)('');
|
|
8
|
+
const [newKey, setNewKey] = (0, react_1.useState)('');
|
|
9
|
+
const [newValue, setNewValue] = (0, react_1.useState)('');
|
|
10
|
+
const [showAddForm, setShowAddForm] = (0, react_1.useState)(false);
|
|
11
|
+
const startEditing = (key, value) => {
|
|
12
|
+
setEditingKey(key);
|
|
13
|
+
// Format JSON for editing
|
|
14
|
+
setEditValue(JSON.stringify(value, null, 2));
|
|
15
|
+
};
|
|
16
|
+
const saveEdit = async (key) => {
|
|
17
|
+
try {
|
|
18
|
+
// Parse JSON value
|
|
19
|
+
let newValue;
|
|
20
|
+
try {
|
|
21
|
+
newValue = JSON.parse(editValue);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
alert('Invalid JSON format. Please check your syntax.');
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
// Update via API - API expects value wrapped in object
|
|
28
|
+
const response = await fetch(`${apiEndpoint}/${encodeURIComponent(key)}`, {
|
|
29
|
+
method: 'PUT',
|
|
30
|
+
headers: {
|
|
31
|
+
'Content-Type': 'application/json',
|
|
32
|
+
},
|
|
33
|
+
body: JSON.stringify(newValue),
|
|
34
|
+
});
|
|
35
|
+
if (!response.ok) {
|
|
36
|
+
throw new Error(`Failed to update KV value: ${response.statusText}`);
|
|
37
|
+
}
|
|
38
|
+
const result = await response.json();
|
|
39
|
+
// API only returns the key, so we trust that our value was stored correctly
|
|
40
|
+
// Update local state with what we sent
|
|
41
|
+
const updatedData = { ...data, [key]: newValue };
|
|
42
|
+
onUpdate(updatedData);
|
|
43
|
+
setEditingKey(null);
|
|
44
|
+
setEditValue('');
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
console.error('Error updating KV value:', error);
|
|
48
|
+
alert(`Failed to update value: ${error instanceof Error ? error.message : String(error)}`);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const deleteKey = async (key) => {
|
|
52
|
+
if (!confirm(`Are you sure you want to delete the key "${key}"?`)) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
// Delete via API
|
|
57
|
+
const response = await fetch(`${apiEndpoint}/${encodeURIComponent(key)}`, {
|
|
58
|
+
method: 'DELETE',
|
|
59
|
+
});
|
|
60
|
+
if (!response.ok) {
|
|
61
|
+
throw new Error(`Failed to delete KV value: ${response.statusText}`);
|
|
62
|
+
}
|
|
63
|
+
// Update local state
|
|
64
|
+
const updatedData = { ...data };
|
|
65
|
+
delete updatedData[key];
|
|
66
|
+
onUpdate(updatedData);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
console.error('Error deleting KV value:', error);
|
|
70
|
+
alert(`Failed to delete value: ${error instanceof Error ? error.message : String(error)}`);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const addNewEntry = async () => {
|
|
74
|
+
if (!newKey.trim()) {
|
|
75
|
+
alert('Please enter a key name');
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
// Parse JSON value
|
|
80
|
+
let value;
|
|
81
|
+
try {
|
|
82
|
+
value = JSON.parse(newValue);
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
alert('Invalid JSON format. Please check your syntax.');
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
// Add via API - API expects value wrapped in object
|
|
89
|
+
const response = await fetch(`${apiEndpoint}/${encodeURIComponent(newKey)}`, {
|
|
90
|
+
method: 'PUT',
|
|
91
|
+
headers: {
|
|
92
|
+
'Content-Type': 'application/json',
|
|
93
|
+
},
|
|
94
|
+
body: JSON.stringify({ value }),
|
|
95
|
+
});
|
|
96
|
+
if (!response.ok) {
|
|
97
|
+
throw new Error(`Failed to add KV value: ${response.statusText}`);
|
|
98
|
+
}
|
|
99
|
+
const result = await response.json();
|
|
100
|
+
// API only returns the key, so we trust that our value was stored correctly
|
|
101
|
+
// Update local state with what we sent
|
|
102
|
+
const updatedData = { ...data, [newKey]: value };
|
|
103
|
+
onUpdate(updatedData);
|
|
104
|
+
// Reset form
|
|
105
|
+
setNewKey('');
|
|
106
|
+
setNewValue('');
|
|
107
|
+
setShowAddForm(false);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
console.error('Error adding KV value:', error);
|
|
111
|
+
alert(`Failed to add value: ${error instanceof Error ? error.message : String(error)}`);
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
const cancelEdit = () => {
|
|
115
|
+
setEditingKey(null);
|
|
116
|
+
setEditValue('');
|
|
117
|
+
};
|
|
118
|
+
const cancelAdd = () => {
|
|
119
|
+
setNewKey('');
|
|
120
|
+
setNewValue('');
|
|
121
|
+
setShowAddForm(false);
|
|
122
|
+
};
|
|
123
|
+
const keys = Object.keys(data).sort();
|
|
124
|
+
const [expandedKeys, setExpandedKeys] = (0, react_1.useState)(new Set());
|
|
125
|
+
const toggleKey = (key) => {
|
|
126
|
+
const newExpanded = new Set(expandedKeys);
|
|
127
|
+
if (newExpanded.has(key)) {
|
|
128
|
+
newExpanded.delete(key);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
newExpanded.add(key);
|
|
132
|
+
}
|
|
133
|
+
setExpandedKeys(newExpanded);
|
|
134
|
+
};
|
|
135
|
+
const renderKeyValue = (key, value) => {
|
|
136
|
+
const isEditing = editingKey === key;
|
|
137
|
+
if (isEditing) {
|
|
138
|
+
return ((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), placeholder: "Enter JSON document", rows: 8, style: { width: '100%', fontFamily: 'monospace' } }), (0, jsx_runtime_1.jsxs)("div", { className: "edit-controls", children: [(0, jsx_runtime_1.jsx)("button", { className: "save-btn", onClick: () => saveEdit(key), children: "Save" }), (0, jsx_runtime_1.jsx)("button", { className: "cancel-btn", onClick: cancelEdit, children: "Cancel" })] })] }));
|
|
139
|
+
}
|
|
140
|
+
// Show formatted JSON for all values
|
|
141
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "json-display", children: (0, jsx_runtime_1.jsx)("pre", { style: {
|
|
142
|
+
margin: 0,
|
|
143
|
+
padding: '8px',
|
|
144
|
+
background: '#3c3c3c',
|
|
145
|
+
border: '1px solid #4a4a4a',
|
|
146
|
+
borderRadius: '3px',
|
|
147
|
+
color: '#cccccc',
|
|
148
|
+
fontFamily: 'monospace',
|
|
149
|
+
fontSize: '11px',
|
|
150
|
+
whiteSpace: 'pre-wrap',
|
|
151
|
+
wordWrap: 'break-word',
|
|
152
|
+
overflowX: 'auto'
|
|
153
|
+
}, children: JSON.stringify(value, null, 2) }) }));
|
|
154
|
+
};
|
|
155
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "kv-store-viewer compact-store", children: (0, jsx_runtime_1.jsxs)("div", { className: "store-sections", children: [keys.map((key) => {
|
|
156
|
+
const value = data[key];
|
|
157
|
+
const isExpanded = expandedKeys.has(key);
|
|
158
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "store-section", children: [(0, jsx_runtime_1.jsxs)("div", { className: "section-header", onClick: () => toggleKey(key), style: { cursor: 'pointer' }, children: [(0, jsx_runtime_1.jsx)("span", { className: "expand-icon", children: isExpanded ? '▼' : '▶' }), (0, jsx_runtime_1.jsx)("span", { className: "section-name", children: key }), (0, jsx_runtime_1.jsxs)("div", { className: "section-actions", children: [(0, jsx_runtime_1.jsx)("button", { className: "edit-icon", onClick: (e) => {
|
|
159
|
+
e.stopPropagation();
|
|
160
|
+
startEditing(key, value);
|
|
161
|
+
}, title: "Edit JSON", children: "\u270F\uFE0F" }), (0, jsx_runtime_1.jsx)("button", { className: "delete-icon", onClick: (e) => {
|
|
162
|
+
e.stopPropagation();
|
|
163
|
+
deleteKey(key);
|
|
164
|
+
}, title: "Delete Entry", children: "\uD83D\uDDD1\uFE0F" })] })] }), isExpanded && ((0, jsx_runtime_1.jsx)("div", { className: "json-content", children: renderKeyValue(key, value) }))] }, key));
|
|
165
|
+
}), showAddForm && ((0, jsx_runtime_1.jsxs)("div", { className: "store-section add-form", children: [(0, jsx_runtime_1.jsxs)("div", { className: "section-header", children: [(0, jsx_runtime_1.jsx)("span", { className: "expand-icon" }), (0, jsx_runtime_1.jsx)("input", { type: "text", value: newKey, onChange: (e) => setNewKey(e.target.value), placeholder: "Key name", className: "key-input" }), (0, jsx_runtime_1.jsxs)("div", { className: "section-actions", children: [(0, jsx_runtime_1.jsx)("button", { className: "save-btn", onClick: addNewEntry, children: "Save" }), (0, jsx_runtime_1.jsx)("button", { className: "cancel-btn", onClick: cancelAdd, children: "Cancel" })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "primitive-value", children: (0, jsx_runtime_1.jsx)("textarea", { value: newValue, onChange: (e) => setNewValue(e.target.value), placeholder: 'Enter JSON document (e.g., {"field1": "value1", "field2": "value2"})', className: "value-input", rows: 4, style: { width: '100%', fontFamily: 'monospace' } }) })] })), (0, jsx_runtime_1.jsx)("div", { className: "add-entry-section", children: (0, jsx_runtime_1.jsx)("button", { className: "add-entry-btn", onClick: () => setShowAddForm(!showAddForm), children: showAddForm ? 'Cancel' : '+ Add Entry' }) }), keys.length === 0 && !showAddForm && ((0, jsx_runtime_1.jsx)("div", { className: "empty-store", children: "No entries in this store" }))] }) }));
|
|
166
|
+
};
|
|
167
|
+
exports.default = KVStoreViewer;
|
|
168
|
+
//# sourceMappingURL=KVStoreViewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KVStoreViewer.js","sourceRoot":"","sources":["../../../../src/ui/components/KVStoreViewer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface NotificationEntry {
|
|
3
|
+
id: string;
|
|
4
|
+
status: 'info' | 'success' | 'warn' | 'error';
|
|
5
|
+
activity: string;
|
|
6
|
+
title: string;
|
|
7
|
+
summary: string;
|
|
8
|
+
details?: string;
|
|
9
|
+
timestamp: string;
|
|
10
|
+
}
|
|
11
|
+
interface NotificationViewerProps {
|
|
12
|
+
notifications: NotificationEntry[];
|
|
13
|
+
onRefresh?: () => void;
|
|
14
|
+
}
|
|
15
|
+
declare const NotificationViewer: React.FC<NotificationViewerProps>;
|
|
16
|
+
export default NotificationViewer;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const NotificationViewer = ({ notifications, onRefresh }) => {
|
|
6
|
+
const [expandedNotifications, setExpandedNotifications] = (0, react_1.useState)(new Set());
|
|
7
|
+
const toggleNotification = (id) => {
|
|
8
|
+
const newExpanded = new Set(expandedNotifications);
|
|
9
|
+
if (newExpanded.has(id)) {
|
|
10
|
+
newExpanded.delete(id);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
newExpanded.add(id);
|
|
14
|
+
}
|
|
15
|
+
setExpandedNotifications(newExpanded);
|
|
16
|
+
};
|
|
17
|
+
const clearAllNotifications = async () => {
|
|
18
|
+
if (!confirm('Are you sure you want to clear all notifications?')) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const response = await fetch('/devserver/api/stores/notifications', {
|
|
23
|
+
method: 'DELETE',
|
|
24
|
+
});
|
|
25
|
+
if (response.ok && onRefresh) {
|
|
26
|
+
onRefresh();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
console.error('Error clearing notifications:', error);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const deleteNotification = async (id) => {
|
|
34
|
+
try {
|
|
35
|
+
const response = await fetch(`/devserver/api/stores/notifications/${id}`, {
|
|
36
|
+
method: 'DELETE',
|
|
37
|
+
});
|
|
38
|
+
if (response.ok && onRefresh) {
|
|
39
|
+
onRefresh();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
console.error('Error deleting notification:', error);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const formatTimestamp = (timestamp) => {
|
|
47
|
+
return new Date(timestamp).toLocaleString();
|
|
48
|
+
};
|
|
49
|
+
const getStatusIcon = (status) => {
|
|
50
|
+
switch (status) {
|
|
51
|
+
case 'info': return 'ℹ️';
|
|
52
|
+
case 'success': return '✅';
|
|
53
|
+
case 'warn': return '⚠️';
|
|
54
|
+
case 'error': return '❌';
|
|
55
|
+
default: return 'ℹ️';
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
// Sort notifications by timestamp (newest first)
|
|
59
|
+
const sortedNotifications = [...notifications].sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
|
|
60
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "notification-viewer", children: [(0, jsx_runtime_1.jsxs)("div", { className: "notification-controls", children: [(0, jsx_runtime_1.jsx)("button", { className: "clear-notifications-btn", onClick: clearAllNotifications, children: "Clear All" }), onRefresh && ((0, jsx_runtime_1.jsx)("button", { className: "refresh-notifications-btn", onClick: onRefresh, children: "Refresh" }))] }), (0, jsx_runtime_1.jsx)("div", { className: "notification-list", children: sortedNotifications.length > 0 ? (sortedNotifications.map((notification) => {
|
|
61
|
+
const isExpanded = expandedNotifications.has(notification.id);
|
|
62
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: `notification-item notification-${notification.status}`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "notification-header", onClick: () => toggleNotification(notification.id), children: [(0, jsx_runtime_1.jsx)("div", { className: "notification-main", children: (0, jsx_runtime_1.jsxs)("div", { className: "notification-single-line", children: [(0, jsx_runtime_1.jsx)("span", { className: "notification-icon", children: getStatusIcon(notification.status) }), (0, jsx_runtime_1.jsx)("span", { className: "notification-activity", children: notification.activity }), (0, jsx_runtime_1.jsx)("span", { className: "notification-separator", children: "\u2022" }), (0, jsx_runtime_1.jsx)("span", { className: "notification-title", children: notification.title }), (0, jsx_runtime_1.jsx)("span", { className: "notification-separator", children: "\u2022" }), (0, jsx_runtime_1.jsx)("span", { className: "notification-summary", children: notification.summary }), (0, jsx_runtime_1.jsx)("span", { className: "notification-timestamp", children: formatTimestamp(notification.timestamp) })] }) }), (0, jsx_runtime_1.jsxs)("div", { className: "notification-actions", children: [(0, jsx_runtime_1.jsx)("button", { className: "delete-notification-btn", onClick: (e) => {
|
|
63
|
+
e.stopPropagation();
|
|
64
|
+
deleteNotification(notification.id);
|
|
65
|
+
}, title: "Delete notification", children: "\uD83D\uDDD1\uFE0F" }), (0, jsx_runtime_1.jsx)("span", { className: "expand-icon", children: isExpanded ? '▼' : '▶' })] })] }), isExpanded && notification.details && ((0, jsx_runtime_1.jsx)("div", { className: "notification-details", children: (0, jsx_runtime_1.jsx)("pre", { children: notification.details }) }))] }, notification.id));
|
|
66
|
+
})) : ((0, jsx_runtime_1.jsx)("div", { className: "no-notifications", children: "No notifications yet" })) })] }));
|
|
67
|
+
};
|
|
68
|
+
exports.default = NotificationViewer;
|
|
69
|
+
//# sourceMappingURL=NotificationViewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotificationViewer.js","sourceRoot":"","sources":["../../../../src/ui/components/NotificationViewer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface SecretsStoreViewerProps {
|
|
3
|
+
secrets: {
|
|
4
|
+
[sectionName: string]: {
|
|
5
|
+
[fieldName: string]: any;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
onUpdate: (updatedSecrets: any) => void;
|
|
9
|
+
}
|
|
10
|
+
declare const SecretsStoreViewer: React.FC<SecretsStoreViewerProps>;
|
|
11
|
+
export default SecretsStoreViewer;
|