@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.
Files changed (244) hide show
  1. package/README.md +51 -0
  2. package/dist/package.json +112 -0
  3. package/dist/public/bundle.82dc5d29fffb9f205051.js +3 -0
  4. package/dist/public/bundle.82dc5d29fffb9f205051.js.LICENSE.txt +92 -0
  5. package/dist/public/bundle.82dc5d29fffb9f205051.js.map +1 -0
  6. package/dist/public/index.html +1 -0
  7. package/dist/src/cli.d.ts +2 -0
  8. package/dist/src/cli.js +115 -0
  9. package/dist/src/cli.js.map +1 -0
  10. package/dist/src/executor/DestinationExecutor.d.ts +19 -0
  11. package/dist/src/executor/DestinationExecutor.js +72 -0
  12. package/dist/src/executor/DestinationExecutor.js.map +1 -0
  13. package/dist/src/executor/FunctionExecutor.d.ts +67 -0
  14. package/dist/src/executor/FunctionExecutor.js +189 -0
  15. package/dist/src/executor/FunctionExecutor.js.map +1 -0
  16. package/dist/src/executor/JobExecutor.d.ts +79 -0
  17. package/dist/src/executor/JobExecutor.js +215 -0
  18. package/dist/src/executor/JobExecutor.js.map +1 -0
  19. package/dist/src/executor/LifecycleExecutor.d.ts +64 -0
  20. package/dist/src/executor/LifecycleExecutor.js +167 -0
  21. package/dist/src/executor/LifecycleExecutor.js.map +1 -0
  22. package/dist/src/executor/SourceExecutor.d.ts +32 -0
  23. package/dist/src/executor/SourceExecutor.js +163 -0
  24. package/dist/src/executor/SourceExecutor.js.map +1 -0
  25. package/dist/src/executor/watcher.d.ts +62 -0
  26. package/dist/src/executor/watcher.js +213 -0
  27. package/dist/src/executor/watcher.js.map +1 -0
  28. package/dist/src/functions/hello.d.ts +4 -0
  29. package/dist/src/functions/hello.js +8 -0
  30. package/dist/src/functions/hello.js.map +1 -0
  31. package/dist/src/index.d.ts +1 -0
  32. package/dist/src/index.js +9 -0
  33. package/dist/src/index.js.map +1 -0
  34. package/dist/src/jobs/dailyJob.d.ts +4 -0
  35. package/dist/src/jobs/dailyJob.js +8 -0
  36. package/dist/src/jobs/dailyJob.js.map +1 -0
  37. package/dist/src/local_engine/LocalFunctionApi.d.ts +17 -0
  38. package/dist/src/local_engine/LocalFunctionApi.js +54 -0
  39. package/dist/src/local_engine/LocalFunctionApi.js.map +1 -0
  40. package/dist/src/local_engine/LocalJobApi.d.ts +67 -0
  41. package/dist/src/local_engine/LocalJobApi.js +205 -0
  42. package/dist/src/local_engine/LocalJobApi.js.map +1 -0
  43. package/dist/src/local_engine/LocalNotifier.d.ts +9 -0
  44. package/dist/src/local_engine/LocalNotifier.js +26 -0
  45. package/dist/src/local_engine/LocalNotifier.js.map +1 -0
  46. package/dist/src/local_engine/local-engine-child-base.d.ts +110 -0
  47. package/dist/src/local_engine/local-engine-child-base.js +607 -0
  48. package/dist/src/local_engine/local-engine-child-base.js.map +1 -0
  49. package/dist/src/local_engine/local-engine-client.d.ts +161 -0
  50. package/dist/src/local_engine/local-engine-client.js +888 -0
  51. package/dist/src/local_engine/local-engine-client.js.map +1 -0
  52. package/dist/src/local_engine/local-engine-types.d.ts +245 -0
  53. package/dist/src/local_engine/local-engine-types.js +6 -0
  54. package/dist/src/local_engine/local-engine-types.js.map +1 -0
  55. package/dist/src/local_engine/local-engine-unified.d.ts +71 -0
  56. package/dist/src/local_engine/local-engine-unified.js +723 -0
  57. package/dist/src/local_engine/local-engine-unified.js.map +1 -0
  58. package/dist/src/local_engine/local-engine-utils.d.ts +68 -0
  59. package/dist/src/local_engine/local-engine-utils.js +219 -0
  60. package/dist/src/local_engine/local-engine-utils.js.map +1 -0
  61. package/dist/src/local_engine/localSDKConfig.d.ts +40 -0
  62. package/dist/src/local_engine/localSDKConfig.js +247 -0
  63. package/dist/src/local_engine/localSDKConfig.js.map +1 -0
  64. package/dist/src/local_engine/storage/BaseKVStoreWrapper.d.ts +37 -0
  65. package/dist/src/local_engine/storage/BaseKVStoreWrapper.js +110 -0
  66. package/dist/src/local_engine/storage/BaseKVStoreWrapper.js.map +1 -0
  67. package/dist/src/local_engine/storage/LocalConfigStore.d.ts +74 -0
  68. package/dist/src/local_engine/storage/LocalConfigStore.js +178 -0
  69. package/dist/src/local_engine/storage/LocalConfigStore.js.map +1 -0
  70. package/dist/src/local_engine/storage/LocalJobStore.d.ts +111 -0
  71. package/dist/src/local_engine/storage/LocalJobStore.js +249 -0
  72. package/dist/src/local_engine/storage/LocalJobStore.js.map +1 -0
  73. package/dist/src/local_engine/storage/LocalKVStore.d.ts +106 -0
  74. package/dist/src/local_engine/storage/LocalKVStore.js +1061 -0
  75. package/dist/src/local_engine/storage/LocalKVStore.js.map +1 -0
  76. package/dist/src/local_engine/storage/LocalNotificationStore.d.ts +28 -0
  77. package/dist/src/local_engine/storage/LocalNotificationStore.js +149 -0
  78. package/dist/src/local_engine/storage/LocalNotificationStore.js.map +1 -0
  79. package/dist/src/local_engine/storage/LocalSecretsStore.d.ts +115 -0
  80. package/dist/src/local_engine/storage/LocalSecretsStore.js +350 -0
  81. package/dist/src/local_engine/storage/LocalSecretsStore.js.map +1 -0
  82. package/dist/src/local_engine/storage/LocalSecretsStoreWrapper.d.ts +19 -0
  83. package/dist/src/local_engine/storage/LocalSecretsStoreWrapper.js +52 -0
  84. package/dist/src/local_engine/storage/LocalSecretsStoreWrapper.js.map +1 -0
  85. package/dist/src/local_engine/storage/LocalSettingsStore.d.ts +168 -0
  86. package/dist/src/local_engine/storage/LocalSettingsStore.js +509 -0
  87. package/dist/src/local_engine/storage/LocalSettingsStore.js.map +1 -0
  88. package/dist/src/local_engine/storage/LocalSettingsStoreWrapper.d.ts +15 -0
  89. package/dist/src/local_engine/storage/LocalSettingsStoreWrapper.js +28 -0
  90. package/dist/src/local_engine/storage/LocalSettingsStoreWrapper.js.map +1 -0
  91. package/dist/src/local_engine/storage/NumberSet.d.ts +21 -0
  92. package/dist/src/local_engine/storage/NumberSet.js +32 -0
  93. package/dist/src/local_engine/storage/NumberSet.js.map +1 -0
  94. package/dist/src/local_engine/storage/SourceDataStore.d.ts +23 -0
  95. package/dist/src/local_engine/storage/SourceDataStore.js +83 -0
  96. package/dist/src/local_engine/storage/SourceDataStore.js.map +1 -0
  97. package/dist/src/local_engine/storage/SourceJobExecutionStore.d.ts +25 -0
  98. package/dist/src/local_engine/storage/SourceJobExecutionStore.js +61 -0
  99. package/dist/src/local_engine/storage/SourceJobExecutionStore.js.map +1 -0
  100. package/dist/src/local_engine/storage/StringSet.d.ts +21 -0
  101. package/dist/src/local_engine/storage/StringSet.js +32 -0
  102. package/dist/src/local_engine/storage/StringSet.js.map +1 -0
  103. package/dist/src/local_engine/types.d.ts +53 -0
  104. package/dist/src/local_engine/types.js +6 -0
  105. package/dist/src/local_engine/types.js.map +1 -0
  106. package/dist/src/local_engine/utils.d.ts +33 -0
  107. package/dist/src/local_engine/utils.js +143 -0
  108. package/dist/src/local_engine/utils.js.map +1 -0
  109. package/dist/src/logging/LogManager.d.ts +246 -0
  110. package/dist/src/logging/LogManager.js +343 -0
  111. package/dist/src/logging/LogManager.js.map +1 -0
  112. package/dist/src/server/api/destinations.d.ts +7 -0
  113. package/dist/src/server/api/destinations.js +170 -0
  114. package/dist/src/server/api/destinations.js.map +1 -0
  115. package/dist/src/server/api/functions.d.ts +7 -0
  116. package/dist/src/server/api/functions.js +80 -0
  117. package/dist/src/server/api/functions.js.map +1 -0
  118. package/dist/src/server/api/jobs.d.ts +10 -0
  119. package/dist/src/server/api/jobs.js +244 -0
  120. package/dist/src/server/api/jobs.js.map +1 -0
  121. package/dist/src/server/api/settings.d.ts +6 -0
  122. package/dist/src/server/api/settings.js +116 -0
  123. package/dist/src/server/api/settings.js.map +1 -0
  124. package/dist/src/server/api/sources.d.ts +7 -0
  125. package/dist/src/server/api/sources.js +382 -0
  126. package/dist/src/server/api/sources.js.map +1 -0
  127. package/dist/src/server/api/stores.d.ts +2 -0
  128. package/dist/src/server/api/stores.js +341 -0
  129. package/dist/src/server/api/stores.js.map +1 -0
  130. package/dist/src/server/api/v1.d.ts +10 -0
  131. package/dist/src/server/api/v1.js +718 -0
  132. package/dist/src/server/api/v1.js.map +1 -0
  133. package/dist/src/server/api.d.ts +8 -0
  134. package/dist/src/server/api.js +217 -0
  135. package/dist/src/server/api.js.map +1 -0
  136. package/dist/src/server/app-discovery.d.ts +5 -0
  137. package/dist/src/server/app-discovery.js +113 -0
  138. package/dist/src/server/app-discovery.js.map +1 -0
  139. package/dist/src/server/config.d.ts +26 -0
  140. package/dist/src/server/config.js +112 -0
  141. package/dist/src/server/config.js.map +1 -0
  142. package/dist/src/server/mockDataGenerator.d.ts +1 -0
  143. package/dist/src/server/mockDataGenerator.js +154 -0
  144. package/dist/src/server/mockDataGenerator.js.map +1 -0
  145. package/dist/src/server/websocket.d.ts +0 -0
  146. package/dist/src/server/websocket.js +2 -0
  147. package/dist/src/server/websocket.js.map +1 -0
  148. package/dist/src/server.d.ts +2 -0
  149. package/dist/src/server.js +735 -0
  150. package/dist/src/server.js.map +1 -0
  151. package/dist/src/types/app.d.ts +154 -0
  152. package/dist/src/types/app.js +24 -0
  153. package/dist/src/types/app.js.map +1 -0
  154. package/dist/src/types/kvstore.d.ts +320 -0
  155. package/dist/src/types/kvstore.js +5 -0
  156. package/dist/src/types/kvstore.js.map +1 -0
  157. package/dist/src/ui/components/App.d.ts +6 -0
  158. package/dist/src/ui/components/App.js +432 -0
  159. package/dist/src/ui/components/App.js.map +1 -0
  160. package/dist/src/ui/components/DestinationBatchEditor.d.ts +7 -0
  161. package/dist/src/ui/components/DestinationBatchEditor.js +160 -0
  162. package/dist/src/ui/components/DestinationBatchEditor.js.map +1 -0
  163. package/dist/src/ui/components/DestinationSchemaViewer.d.ts +7 -0
  164. package/dist/src/ui/components/DestinationSchemaViewer.js +61 -0
  165. package/dist/src/ui/components/DestinationSchemaViewer.js.map +1 -0
  166. package/dist/src/ui/components/DestinationsView.d.ts +14 -0
  167. package/dist/src/ui/components/DestinationsView.js +68 -0
  168. package/dist/src/ui/components/DestinationsView.js.map +1 -0
  169. package/dist/src/ui/components/FunctionsView.d.ts +13 -0
  170. package/dist/src/ui/components/FunctionsView.js +288 -0
  171. package/dist/src/ui/components/FunctionsView.js.map +1 -0
  172. package/dist/src/ui/components/JobsView.d.ts +13 -0
  173. package/dist/src/ui/components/JobsView.js +320 -0
  174. package/dist/src/ui/components/JobsView.js.map +1 -0
  175. package/dist/src/ui/components/KVStoreViewer.d.ts +11 -0
  176. package/dist/src/ui/components/KVStoreViewer.js +168 -0
  177. package/dist/src/ui/components/KVStoreViewer.js.map +1 -0
  178. package/dist/src/ui/components/MetadataModal.d.ts +14 -0
  179. package/dist/src/ui/components/MetadataModal.js +28 -0
  180. package/dist/src/ui/components/MetadataModal.js.map +1 -0
  181. package/dist/src/ui/components/MetadataModal.test.d.ts +1 -0
  182. package/dist/src/ui/components/MetadataModal.test.js +143 -0
  183. package/dist/src/ui/components/MetadataModal.test.js.map +1 -0
  184. package/dist/src/ui/components/NotificationViewer.d.ts +16 -0
  185. package/dist/src/ui/components/NotificationViewer.js +69 -0
  186. package/dist/src/ui/components/NotificationViewer.js.map +1 -0
  187. package/dist/src/ui/components/SecretsStoreViewer.d.ts +11 -0
  188. package/dist/src/ui/components/SecretsStoreViewer.js +179 -0
  189. package/dist/src/ui/components/SecretsStoreViewer.js.map +1 -0
  190. package/dist/src/ui/components/SettingsStoreViewer.d.ts +24 -0
  191. package/dist/src/ui/components/SettingsStoreViewer.js +132 -0
  192. package/dist/src/ui/components/SettingsStoreViewer.js.map +1 -0
  193. package/dist/src/ui/components/SourceDataViewer.d.ts +8 -0
  194. package/dist/src/ui/components/SourceDataViewer.js +84 -0
  195. package/dist/src/ui/components/SourceDataViewer.js.map +1 -0
  196. package/dist/src/ui/components/SourceJobsSection.d.ts +8 -0
  197. package/dist/src/ui/components/SourceJobsSection.js +99 -0
  198. package/dist/src/ui/components/SourceJobsSection.js.map +1 -0
  199. package/dist/src/ui/components/SourceLifecycleSection.d.ts +7 -0
  200. package/dist/src/ui/components/SourceLifecycleSection.js +58 -0
  201. package/dist/src/ui/components/SourceLifecycleSection.js.map +1 -0
  202. package/dist/src/ui/components/SourceSchemaViewer.d.ts +7 -0
  203. package/dist/src/ui/components/SourceSchemaViewer.js +65 -0
  204. package/dist/src/ui/components/SourceSchemaViewer.js.map +1 -0
  205. package/dist/src/ui/components/SourceWebhookEditor.d.ts +8 -0
  206. package/dist/src/ui/components/SourceWebhookEditor.js +181 -0
  207. package/dist/src/ui/components/SourceWebhookEditor.js.map +1 -0
  208. package/dist/src/ui/components/SourcesView.d.ts +14 -0
  209. package/dist/src/ui/components/SourcesView.js +74 -0
  210. package/dist/src/ui/components/SourcesView.js.map +1 -0
  211. package/dist/src/ui/components/StoreViewer.d.ts +16 -0
  212. package/dist/src/ui/components/StoreViewer.js +86 -0
  213. package/dist/src/ui/components/StoreViewer.js.map +1 -0
  214. package/dist/src/ui/components/TabbedConsole.d.ts +17 -0
  215. package/dist/src/ui/components/TabbedConsole.js +163 -0
  216. package/dist/src/ui/components/TabbedConsole.js.map +1 -0
  217. package/dist/src/ui/components/common/DataTree.d.ts +15 -0
  218. package/dist/src/ui/components/common/DataTree.js +95 -0
  219. package/dist/src/ui/components/common/DataTree.js.map +1 -0
  220. package/dist/src/ui/components/common/EyeIcon.d.ts +11 -0
  221. package/dist/src/ui/components/common/EyeIcon.js +11 -0
  222. package/dist/src/ui/components/common/EyeIcon.js.map +1 -0
  223. package/dist/src/ui/hooks/useEntityNavigation.d.ts +72 -0
  224. package/dist/src/ui/hooks/useEntityNavigation.js +150 -0
  225. package/dist/src/ui/hooks/useEntityNavigation.js.map +1 -0
  226. package/dist/src/ui/hooks/useQueryParams.d.ts +6 -0
  227. package/dist/src/ui/hooks/useQueryParams.js +39 -0
  228. package/dist/src/ui/hooks/useQueryParams.js.map +1 -0
  229. package/dist/src/ui/index.d.ts +1 -0
  230. package/dist/src/ui/index.js +23 -0
  231. package/dist/src/ui/index.js.map +1 -0
  232. package/dist/src/ui/store/formStateSlice.d.ts +54 -0
  233. package/dist/src/ui/store/formStateSlice.js +94 -0
  234. package/dist/src/ui/store/formStateSlice.js.map +1 -0
  235. package/dist/src/ui/store/hooks.d.ts +6 -0
  236. package/dist/src/ui/store/hooks.js +8 -0
  237. package/dist/src/ui/store/hooks.js.map +1 -0
  238. package/dist/src/ui/store/index.d.ts +11 -0
  239. package/dist/src/ui/store/index.js +107 -0
  240. package/dist/src/ui/store/index.js.map +1 -0
  241. package/dist/src/utils/functionEndpoints.d.ts +24 -0
  242. package/dist/src/utils/functionEndpoints.js +45 -0
  243. package/dist/src/utils/functionEndpoints.js.map +1 -0
  244. package/package.json +112 -0
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DestinationBatchEditor = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const MetadataModal_1 = require("./MetadataModal");
7
+ const hooks_1 = require("../store/hooks");
8
+ const formStateSlice_1 = require("../store/formStateSlice");
9
+ const DestinationBatchEditor = ({ destinationId, apiBaseUrl }) => {
10
+ // Redux state for persisted form data
11
+ const dispatch = (0, hooks_1.useAppDispatch)();
12
+ const destinationFormState = (0, hooks_1.useAppSelector)(state => state.formState.destinations[destinationId] || (0, formStateSlice_1.getDefaultDestinationFormState)());
13
+ // Destructure for convenience
14
+ const { batchJson, attempt, syncId, syncName } = destinationFormState;
15
+ // Helper to update Redux state
16
+ const updateFormState = (updates) => {
17
+ dispatch((0, formStateSlice_1.updateDestinationState)({ id: destinationId, data: updates }));
18
+ };
19
+ // Local ephemeral state (not persisted)
20
+ const [readyResult, setReadyResult] = (0, react_1.useState)(null);
21
+ const [deliverResult, setDeliverResult] = (0, react_1.useState)(null);
22
+ const [loading, setLoading] = (0, react_1.useState)(false);
23
+ const [error, setError] = (0, react_1.useState)(null);
24
+ const [isModalOpen, setIsModalOpen] = (0, react_1.useState)(false);
25
+ // Auto-clear ready result after 10 seconds
26
+ (0, react_1.useEffect)(() => {
27
+ if (readyResult) {
28
+ const timer = setTimeout(() => {
29
+ setReadyResult(null);
30
+ }, 10000);
31
+ return () => clearTimeout(timer);
32
+ }
33
+ }, [readyResult]);
34
+ // Auto-clear deliver result after 10 seconds
35
+ (0, react_1.useEffect)(() => {
36
+ if (deliverResult) {
37
+ const timer = setTimeout(() => {
38
+ setDeliverResult(null);
39
+ }, 10000);
40
+ return () => clearTimeout(timer);
41
+ }
42
+ }, [deliverResult]);
43
+ // Auto-clear error after 10 seconds
44
+ (0, react_1.useEffect)(() => {
45
+ if (error) {
46
+ const timer = setTimeout(() => {
47
+ setError(null);
48
+ }, 10000);
49
+ return () => clearTimeout(timer);
50
+ }
51
+ }, [error]);
52
+ const generateMockBatch = async () => {
53
+ try {
54
+ setLoading(true);
55
+ setError(null);
56
+ const response = await fetch(`${apiBaseUrl}/destinations/${destinationId}/generate-mock`, {
57
+ method: 'POST',
58
+ headers: { 'Content-Type': 'application/json' },
59
+ body: JSON.stringify({ itemCount: 1 })
60
+ });
61
+ if (!response.ok) {
62
+ const errorData = await response.json();
63
+ throw new Error(errorData.error || 'Failed to generate mock batch');
64
+ }
65
+ const data = await response.json();
66
+ updateFormState({
67
+ batchJson: JSON.stringify(data.batch.items, null, 2),
68
+ attempt: data.batch.attempt.toString(),
69
+ syncId: data.batch.sync.id,
70
+ syncName: data.batch.sync.name,
71
+ });
72
+ }
73
+ catch (err) {
74
+ setError(`Failed to generate mock batch: ${err.message}`);
75
+ console.error(err);
76
+ }
77
+ finally {
78
+ setLoading(false);
79
+ }
80
+ };
81
+ const testReady = async () => {
82
+ try {
83
+ setLoading(true);
84
+ setError(null);
85
+ setReadyResult(null);
86
+ const response = await fetch(`${apiBaseUrl}/destinations/${destinationId}/ready`, {
87
+ method: 'POST',
88
+ headers: { 'Content-Type': 'application/json' }
89
+ });
90
+ if (!response.ok) {
91
+ const errorData = await response.json();
92
+ throw new Error(errorData.error || 'Failed to test ready');
93
+ }
94
+ const data = await response.json();
95
+ setReadyResult(data.result);
96
+ }
97
+ catch (err) {
98
+ setError(`Failed to test ready: ${err.message}`);
99
+ console.error(err);
100
+ }
101
+ finally {
102
+ setLoading(false);
103
+ }
104
+ };
105
+ const deliverBatch = async () => {
106
+ try {
107
+ setLoading(true);
108
+ setError(null);
109
+ setDeliverResult(null);
110
+ // Parse and validate JSON
111
+ let items;
112
+ try {
113
+ items = JSON.parse(batchJson);
114
+ }
115
+ catch (parseError) {
116
+ throw new Error('Invalid JSON in batch editor');
117
+ }
118
+ const batch = {
119
+ items: Array.isArray(items) ? items : [items],
120
+ attempt: parseInt(attempt, 10),
121
+ sync: {
122
+ id: syncId,
123
+ name: syncName
124
+ }
125
+ };
126
+ const response = await fetch(`${apiBaseUrl}/destinations/${destinationId}/deliver`, {
127
+ method: 'POST',
128
+ headers: { 'Content-Type': 'application/json' },
129
+ body: JSON.stringify({ batch })
130
+ });
131
+ if (!response.ok) {
132
+ const errorData = await response.json();
133
+ throw new Error(errorData.error || 'Failed to deliver batch');
134
+ }
135
+ const data = await response.json();
136
+ setDeliverResult(data.result);
137
+ }
138
+ catch (err) {
139
+ setError(`Failed to deliver batch: ${err.message}`);
140
+ console.error(err);
141
+ }
142
+ finally {
143
+ setLoading(false);
144
+ }
145
+ };
146
+ const isValidJson = () => {
147
+ if (!batchJson.trim())
148
+ return false;
149
+ try {
150
+ JSON.parse(batchJson);
151
+ return true;
152
+ }
153
+ catch {
154
+ return false;
155
+ }
156
+ };
157
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "batch-editor", children: [(0, jsx_runtime_1.jsxs)("div", { className: "all-buttons-section", children: [(0, jsx_runtime_1.jsx)("button", { className: "generate-button", onClick: generateMockBatch, disabled: loading, children: "Generate Sample Batch" }), (0, jsx_runtime_1.jsx)("button", { className: "deliver-button primary", onClick: deliverBatch, disabled: loading || !isValidJson(), children: "Deliver Batch" }), (0, jsx_runtime_1.jsx)("div", { className: "button-separator" }), (0, jsx_runtime_1.jsx)("button", { className: "ready-button secondary", onClick: testReady, disabled: loading, children: "Ready" }), (0, jsx_runtime_1.jsx)("button", { className: "settings-icon-button", onClick: () => setIsModalOpen(true), title: "Batch Metadata Settings", children: "\u2699\uFE0F" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "batch-json-editor", children: [(0, jsx_runtime_1.jsx)("label", { children: "Batch Items (JSON):" }), (0, jsx_runtime_1.jsx)("textarea", { value: batchJson, onChange: (e) => updateFormState({ batchJson: e.target.value }), placeholder: "Click 'Generate Sample Batch' or paste JSON array", className: isValidJson() ? 'valid' : batchJson ? 'invalid' : '' }), batchJson && !isValidJson() && ((0, jsx_runtime_1.jsx)("div", { className: "json-error", children: "Invalid JSON syntax" }))] }), error && ((0, jsx_runtime_1.jsx)("div", { className: "toast-notification toast-error", children: (0, jsx_runtime_1.jsxs)("div", { className: "toast-content", children: [(0, jsx_runtime_1.jsx)("strong", { children: "Error" }), (0, jsx_runtime_1.jsx)("div", { className: "toast-message", children: error })] }) })), readyResult && ((0, jsx_runtime_1.jsx)("div", { className: `toast-notification ${readyResult.ready ? 'toast-success' : 'toast-warning'}`, children: (0, jsx_runtime_1.jsxs)("div", { className: "toast-content", children: [(0, jsx_runtime_1.jsx)("strong", { children: "Ready Check" }), (0, jsx_runtime_1.jsxs)("div", { className: "toast-message", children: [readyResult.ready ? 'Destination is ready' : 'Destination not ready', readyResult.message && (0, jsx_runtime_1.jsx)("div", { children: readyResult.message })] })] }) })), deliverResult && ((0, jsx_runtime_1.jsx)("div", { className: `toast-notification ${deliverResult.success ? 'toast-success' : 'toast-error'}`, children: (0, jsx_runtime_1.jsxs)("div", { className: "toast-content", children: [(0, jsx_runtime_1.jsxs)("strong", { children: ["Delivery ", deliverResult.success ? 'Successful' : 'Failed'] }), (0, jsx_runtime_1.jsxs)("div", { className: "toast-message", children: [deliverResult.failureReason && (0, jsx_runtime_1.jsx)("div", { children: deliverResult.failureReason }), deliverResult.retryable !== undefined && ((0, jsx_runtime_1.jsxs)("div", { className: "toast-detail", children: ["Retryable: ", deliverResult.retryable ? 'Yes' : 'No'] }))] })] }) })), (0, jsx_runtime_1.jsx)(MetadataModal_1.MetadataModal, { isOpen: isModalOpen, onClose: () => setIsModalOpen(false), attempt: attempt, syncId: syncId, syncName: syncName, onAttemptChange: (value) => updateFormState({ attempt: value }), onSyncIdChange: (value) => updateFormState({ syncId: value }), onSyncNameChange: (value) => updateFormState({ syncName: value }) })] }));
158
+ };
159
+ exports.DestinationBatchEditor = DestinationBatchEditor;
160
+ //# sourceMappingURL=DestinationBatchEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DestinationBatchEditor.js","sourceRoot":"","sources":["../../../../src/ui/components/DestinationBatchEditor.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ interface DestinationSchemaViewerProps {
3
+ destinationId: string;
4
+ apiBaseUrl: string;
5
+ }
6
+ export declare const DestinationSchemaViewer: React.FC<DestinationSchemaViewerProps>;
7
+ export {};
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DestinationSchemaViewer = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const DestinationSchemaViewer = ({ destinationId, apiBaseUrl }) => {
7
+ const [schema, setSchema] = (0, react_1.useState)(null);
8
+ const [loading, setLoading] = (0, react_1.useState)(true);
9
+ const [error, setError] = (0, react_1.useState)(null);
10
+ const [expandedTypes, setExpandedTypes] = (0, react_1.useState)(new Set());
11
+ (0, react_1.useEffect)(() => {
12
+ fetchSchema();
13
+ }, [destinationId]);
14
+ const fetchSchema = async () => {
15
+ try {
16
+ setLoading(true);
17
+ setError(null);
18
+ const response = await fetch(`${apiBaseUrl}/destinations/${destinationId}/schema`);
19
+ if (!response.ok) {
20
+ const errorData = await response.json();
21
+ throw new Error(errorData.error || 'Failed to load schema');
22
+ }
23
+ const data = await response.json();
24
+ setSchema(data.schema);
25
+ }
26
+ catch (err) {
27
+ setError(err.message);
28
+ console.error('Failed to load schema:', err);
29
+ }
30
+ finally {
31
+ setLoading(false);
32
+ }
33
+ };
34
+ const toggleCustomType = (typeName) => {
35
+ setExpandedTypes(prev => {
36
+ const newSet = new Set(prev);
37
+ if (newSet.has(typeName)) {
38
+ newSet.delete(typeName);
39
+ }
40
+ else {
41
+ newSet.add(typeName);
42
+ }
43
+ return newSet;
44
+ });
45
+ };
46
+ const renderFieldRow = (field) => {
47
+ return ((0, jsx_runtime_1.jsxs)("tr", { className: field.primary ? 'primary-field' : '', children: [(0, jsx_runtime_1.jsx)("td", { className: "field-name", children: field.name }), (0, jsx_runtime_1.jsx)("td", { className: "field-display-name", children: field.display_name }), (0, jsx_runtime_1.jsxs)("td", { className: "field-type", children: [(0, jsx_runtime_1.jsx)("span", { className: `type-badge type-${field.type.replace(/[^a-z]/gi, '')}`, children: field.type }), field.primary && (0, jsx_runtime_1.jsx)("span", { className: "primary-badge", children: "PRIMARY" })] }), (0, jsx_runtime_1.jsx)("td", { className: "field-description", children: field.description })] }, field.name));
48
+ };
49
+ if (loading) {
50
+ return (0, jsx_runtime_1.jsx)("div", { className: "schema-viewer", children: "Loading schema..." });
51
+ }
52
+ if (error) {
53
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "schema-viewer error", children: [(0, jsx_runtime_1.jsx)("h3", { children: "Schema Error" }), (0, jsx_runtime_1.jsx)("p", { children: error })] }));
54
+ }
55
+ if (!schema) {
56
+ return (0, jsx_runtime_1.jsx)("div", { className: "schema-viewer", children: "No schema available" });
57
+ }
58
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "schema-viewer", children: [(0, jsx_runtime_1.jsxs)("div", { className: "schema-header", children: [(0, jsx_runtime_1.jsx)("h4", { children: schema.display_name }), (0, jsx_runtime_1.jsx)("p", { className: "schema-description", children: schema.description })] }), (0, jsx_runtime_1.jsxs)("div", { className: "schema-fields", children: [(0, jsx_runtime_1.jsx)("h4", { children: "Fields" }), (0, jsx_runtime_1.jsxs)("table", { className: "fields-table", children: [(0, jsx_runtime_1.jsx)("thead", { children: (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("th", { children: "Name" }), (0, jsx_runtime_1.jsx)("th", { children: "Display Name" }), (0, jsx_runtime_1.jsx)("th", { children: "Type" }), (0, jsx_runtime_1.jsx)("th", { children: "Description" })] }) }), (0, jsx_runtime_1.jsx)("tbody", { children: schema.fields.map(renderFieldRow) })] })] }), schema.custom_types && schema.custom_types.length > 0 && ((0, jsx_runtime_1.jsxs)("div", { className: "schema-custom-types", children: [(0, jsx_runtime_1.jsx)("h4", { children: "Custom Types" }), schema.custom_types.map(customType => ((0, jsx_runtime_1.jsxs)("div", { className: "custom-type", children: [(0, jsx_runtime_1.jsxs)("div", { className: "custom-type-header", onClick: () => toggleCustomType(customType.name), children: [(0, jsx_runtime_1.jsx)("span", { className: "expand-icon", children: expandedTypes.has(customType.name) ? '▼' : '▶' }), (0, jsx_runtime_1.jsx)("span", { className: "custom-type-name", children: customType.display_name }), (0, jsx_runtime_1.jsx)("span", { className: "custom-type-description", children: customType.description })] }), expandedTypes.has(customType.name) && ((0, jsx_runtime_1.jsxs)("table", { className: "fields-table", children: [(0, jsx_runtime_1.jsx)("thead", { children: (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("th", { children: "Name" }), (0, jsx_runtime_1.jsx)("th", { children: "Display Name" }), (0, jsx_runtime_1.jsx)("th", { children: "Type" }), (0, jsx_runtime_1.jsx)("th", { children: "Description" })] }) }), (0, jsx_runtime_1.jsx)("tbody", { children: customType.fields.map(renderFieldRow) })] }))] }, customType.name)))] }))] }));
59
+ };
60
+ exports.DestinationSchemaViewer = DestinationSchemaViewer;
61
+ //# sourceMappingURL=DestinationSchemaViewer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DestinationSchemaViewer.js","sourceRoot":"","sources":["../../../../src/ui/components/DestinationSchemaViewer.tsx"],"names":[],"mappings":";;;;AAAA,iCAAmD;AA+B5C,MAAM,uBAAuB,GAA2C,CAAC,EAC9E,aAAa,EACb,UAAU,EACX,EAAE,EAAE;IACH,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAA2B,IAAI,CAAC,CAAC;IACrE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAc,IAAI,GAAG,EAAE,CAAC,CAAC;IAE3E,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,WAAW,EAAE,CAAC;IAChB,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC7B,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;YACf,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,iBAAiB,aAAa,SAAS,CAAC,CAAC;YAEnF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI,uBAAuB,CAAC,CAAC;YAC9D,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;QAC/C,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAE,EAAE;QAC5C,gBAAgB,CAAC,IAAI,CAAC,EAAE;YACtB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACvB,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,KAA6B,EAAE,EAAE;QACvD,OAAO,CACL,gCAAqB,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,aAClE,+BAAI,SAAS,EAAC,YAAY,YAAE,KAAK,CAAC,IAAI,GAAM,EAC5C,+BAAI,SAAS,EAAC,oBAAoB,YAAE,KAAK,CAAC,YAAY,GAAM,EAC5D,gCAAI,SAAS,EAAC,YAAY,aACxB,iCAAM,SAAS,EAAE,mBAAmB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,YACrE,KAAK,CAAC,IAAI,GACN,EACN,KAAK,CAAC,OAAO,IAAI,iCAAM,SAAS,EAAC,eAAe,wBAAe,IAC7D,EACL,+BAAI,SAAS,EAAC,mBAAmB,YAAE,KAAK,CAAC,WAAW,GAAM,KATnD,KAAK,CAAC,IAAI,CAUd,CACN,CAAC;IACJ,CAAC,CAAC;IAEF,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,gCAAK,SAAS,EAAC,eAAe,kCAAwB,CAAC;IAChE,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CACL,iCAAK,SAAS,EAAC,qBAAqB,aAClC,0DAAqB,EACrB,wCAAI,KAAK,GAAK,IACV,CACP,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,gCAAK,SAAS,EAAC,eAAe,oCAA0B,CAAC;IAClE,CAAC;IAED,OAAO,CACL,iCAAK,SAAS,EAAC,eAAe,aAC5B,iCAAK,SAAS,EAAC,eAAe,aAC5B,yCAAK,MAAM,CAAC,YAAY,GAAM,EAC9B,8BAAG,SAAS,EAAC,oBAAoB,YAAE,MAAM,CAAC,WAAW,GAAK,IACtD,EAEN,iCAAK,SAAS,EAAC,eAAe,aAC5B,oDAAe,EACf,mCAAO,SAAS,EAAC,cAAc,aAC7B,4CACE,2CACE,kDAAa,EACb,0DAAqB,EACrB,kDAAa,EACb,yDAAoB,IACjB,GACC,EACR,4CACG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,GAC5B,IACF,IACJ,EAEL,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CACxD,iCAAK,SAAS,EAAC,qBAAqB,aAClC,0DAAqB,EACpB,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CACrC,iCAA2B,SAAS,EAAC,aAAa,aAChD,iCACE,SAAS,EAAC,oBAAoB,EAC9B,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,aAEhD,iCAAM,SAAS,EAAC,aAAa,YAC1B,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAC1C,EACP,iCAAM,SAAS,EAAC,kBAAkB,YAAE,UAAU,CAAC,YAAY,GAAQ,EACnE,iCAAM,SAAS,EAAC,yBAAyB,YAAE,UAAU,CAAC,WAAW,GAAQ,IACrE,EACL,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CACrC,mCAAO,SAAS,EAAC,cAAc,aAC7B,4CACE,2CACE,kDAAa,EACb,0DAAqB,EACrB,kDAAa,EACb,yDAAoB,IACjB,GACC,EACR,4CACG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,GAChC,IACF,CACT,KAzBO,UAAU,CAAC,IAAI,CA0BnB,CACP,CAAC,IACE,CACP,IACG,CACP,CAAC;AACJ,CAAC,CAAC;AA3IW,QAAA,uBAAuB,2BA2IlC"}
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ interface BuildStatus {
3
+ buildInProgress: boolean;
4
+ lastBuildSuccess: boolean | null;
5
+ lastBuildTimestamp: string | null;
6
+ lastBuildError: string | null;
7
+ }
8
+ interface DestinationsViewProps {
9
+ apiBaseUrl: string;
10
+ appInstalled: boolean;
11
+ buildStatus?: BuildStatus | null;
12
+ }
13
+ export declare const DestinationsView: React.FC<DestinationsViewProps>;
14
+ export {};
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DestinationsView = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const react_router_dom_1 = require("react-router-dom");
7
+ const DestinationSchemaViewer_1 = require("./DestinationSchemaViewer");
8
+ const DestinationBatchEditor_1 = require("./DestinationBatchEditor");
9
+ const useEntityNavigation_1 = require("../hooks/useEntityNavigation");
10
+ const DestinationsView = ({ apiBaseUrl, appInstalled, buildStatus }) => {
11
+ const location = (0, react_router_dom_1.useLocation)();
12
+ const [destinations, setDestinations] = (0, react_1.useState)([]);
13
+ const [loading, setLoading] = (0, react_1.useState)(true);
14
+ const [error, setError] = (0, react_1.useState)(null);
15
+ // Derive selection from URL
16
+ const pathParts = location.pathname.split('/').filter(Boolean);
17
+ const selectedDestination = pathParts.length > 1 ? pathParts[1] : null;
18
+ // Use entity navigation hook for navigation, validation, and auto-selection
19
+ const { navigateToEntity: setSelectedDestinationAndNavigate } = (0, useEntityNavigation_1.useEntityNavigation)({
20
+ basePath: '/destinations',
21
+ entityName: 'destination',
22
+ entities: destinations,
23
+ selectedEntityId: selectedDestination,
24
+ });
25
+ (0, react_1.useEffect)(() => {
26
+ if (appInstalled) {
27
+ fetchDestinations();
28
+ }
29
+ }, [appInstalled]);
30
+ const fetchDestinations = async () => {
31
+ try {
32
+ setLoading(true);
33
+ const response = await fetch(`${apiBaseUrl}/destinations`);
34
+ const data = await response.json();
35
+ setDestinations(data.destinations || []);
36
+ setError(null);
37
+ }
38
+ catch (err) {
39
+ setError(`Failed to load destinations: ${err.message}`);
40
+ }
41
+ finally {
42
+ setLoading(false);
43
+ }
44
+ };
45
+ // Show loading state during initial build or when build is in progress
46
+ if (buildStatus?.buildInProgress || (buildStatus?.lastBuildSuccess === null && buildStatus?.lastBuildTimestamp === null)) {
47
+ return ((0, jsx_runtime_1.jsx)("div", { className: "destinations-not-installed", children: (0, jsx_runtime_1.jsxs)("div", { className: "placeholder-content", children: [(0, jsx_runtime_1.jsx)("h3", { children: "Building App..." }), (0, jsx_runtime_1.jsx)("p", { children: "Please wait while the app is being built." }), (0, jsx_runtime_1.jsx)("div", { className: "spinner" })] }) }));
48
+ }
49
+ // Show error state if build failed
50
+ if (buildStatus?.lastBuildSuccess === false) {
51
+ return ((0, jsx_runtime_1.jsx)("div", { className: "destinations-not-installed", children: (0, jsx_runtime_1.jsxs)("div", { className: "placeholder-content", children: [(0, jsx_runtime_1.jsx)("h3", { children: "Build Failed" }), (0, jsx_runtime_1.jsx)("p", { children: "The app failed to build. Please check the console for errors." }), buildStatus.lastBuildError && ((0, jsx_runtime_1.jsx)("pre", { className: "error-details", children: buildStatus.lastBuildError }))] }) }));
52
+ }
53
+ if (!appInstalled) {
54
+ return ((0, jsx_runtime_1.jsx)("div", { className: "destinations-not-installed", children: (0, jsx_runtime_1.jsxs)("div", { className: "placeholder-content", children: [(0, jsx_runtime_1.jsx)("h3", { children: "Destinations Not Available" }), (0, jsx_runtime_1.jsx)("p", { children: "Install your app first to configure destinations. Destinations will appear here after installation." })] }) }));
55
+ }
56
+ if (loading) {
57
+ return ((0, jsx_runtime_1.jsx)("div", { className: "destinations-view", children: (0, jsx_runtime_1.jsx)("div", { className: "placeholder-content", children: (0, jsx_runtime_1.jsx)("p", { children: "Loading destinations..." }) }) }));
58
+ }
59
+ if (error) {
60
+ return ((0, jsx_runtime_1.jsx)("div", { className: "destinations-view", children: (0, jsx_runtime_1.jsxs)("div", { className: "placeholder-content", children: [(0, jsx_runtime_1.jsx)("h3", { children: "Error" }), (0, jsx_runtime_1.jsx)("p", { children: error })] }) }));
61
+ }
62
+ if (destinations.length === 0) {
63
+ return ((0, jsx_runtime_1.jsx)("div", { className: "destinations-view", children: (0, jsx_runtime_1.jsxs)("div", { className: "placeholder-content", children: [(0, jsx_runtime_1.jsx)("h3", { children: "No Destinations Found" }), (0, jsx_runtime_1.jsx)("p", { children: "No destinations defined in app.yml" })] }) }));
64
+ }
65
+ return ((0, jsx_runtime_1.jsx)("div", { className: "destinations-view", children: (0, jsx_runtime_1.jsxs)("div", { className: "destinations-layout", children: [(0, jsx_runtime_1.jsxs)("div", { className: "destinations-sidebar", children: [(0, jsx_runtime_1.jsx)("div", { className: "destinations-header", children: (0, jsx_runtime_1.jsx)("h4", { children: "Destinations" }) }), (0, jsx_runtime_1.jsx)("div", { className: "destinations-list", children: destinations.map(dest => ((0, jsx_runtime_1.jsxs)("div", { className: `destination-item ${selectedDestination === dest.id ? 'active' : ''}`, onClick: () => setSelectedDestinationAndNavigate(dest.id), children: [(0, jsx_runtime_1.jsx)("div", { className: "destination-name", children: dest.id }), (0, jsx_runtime_1.jsx)("div", { className: "destination-description", children: dest.description })] }, dest.id))) })] }), (0, jsx_runtime_1.jsx)("div", { className: "destinations-content", children: selectedDestination ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: "batch-section", children: (0, jsx_runtime_1.jsx)(DestinationBatchEditor_1.DestinationBatchEditor, { destinationId: selectedDestination, apiBaseUrl: apiBaseUrl }) }), (0, jsx_runtime_1.jsx)("div", { className: "schema-section", children: (0, jsx_runtime_1.jsx)(DestinationSchemaViewer_1.DestinationSchemaViewer, { destinationId: selectedDestination, apiBaseUrl: apiBaseUrl }) })] })) : ((0, jsx_runtime_1.jsx)("div", { className: "no-destination-selected", children: (0, jsx_runtime_1.jsxs)("div", { className: "placeholder-content", children: [(0, jsx_runtime_1.jsx)("h3", { children: "Select a Destination" }), (0, jsx_runtime_1.jsx)("p", { children: "Choose a destination from the sidebar to view its schema and test it" })] }) })) })] }) }));
66
+ };
67
+ exports.DestinationsView = DestinationsView;
68
+ //# sourceMappingURL=DestinationsView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DestinationsView.js","sourceRoot":"","sources":["../../../../src/ui/components/DestinationsView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ interface BuildStatus {
3
+ buildInProgress: boolean;
4
+ lastBuildSuccess: boolean | null;
5
+ lastBuildTimestamp: string | null;
6
+ lastBuildError: string | null;
7
+ }
8
+ interface FunctionsViewProps {
9
+ appInstalled: boolean;
10
+ buildStatus: BuildStatus | null;
11
+ }
12
+ declare const FunctionsView: React.FC<FunctionsViewProps>;
13
+ export default FunctionsView;