@superblocksteam/vite-plugin-file-sync 2.0.6 → 2.0.7

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 (288) hide show
  1. package/dist/ai-service/app-interface/linter.d.ts +7 -2
  2. package/dist/ai-service/app-interface/linter.d.ts.map +1 -1
  3. package/dist/ai-service/app-interface/linter.js +52 -41
  4. package/dist/ai-service/app-interface/linter.js.map +1 -1
  5. package/dist/ai-service/app-interface/shell.d.ts +2 -0
  6. package/dist/ai-service/app-interface/shell.d.ts.map +1 -1
  7. package/dist/ai-service/app-interface/shell.js +13 -4
  8. package/dist/ai-service/app-interface/shell.js.map +1 -1
  9. package/dist/ai-service/const.d.ts +2 -0
  10. package/dist/ai-service/const.d.ts.map +1 -1
  11. package/dist/ai-service/const.js +2 -0
  12. package/dist/ai-service/const.js.map +1 -1
  13. package/dist/ai-service/eval/template-renderer.d.ts.map +1 -1
  14. package/dist/ai-service/eval/template-renderer.js +1 -1
  15. package/dist/ai-service/eval/template-renderer.js.map +1 -1
  16. package/dist/ai-service/index.d.ts.map +1 -1
  17. package/dist/ai-service/index.js +4 -12
  18. package/dist/ai-service/index.js.map +1 -1
  19. package/dist/ai-service/integrations/from-prompt-context.d.ts +1 -1
  20. package/dist/ai-service/integrations/from-prompt-context.d.ts.map +1 -1
  21. package/dist/ai-service/prompts/generated/library-components/SbButtonPropsDocs.d.ts +1 -1
  22. package/dist/ai-service/prompts/generated/library-components/SbButtonPropsDocs.d.ts.map +1 -1
  23. package/dist/ai-service/prompts/generated/library-components/SbButtonPropsDocs.js +2 -2
  24. package/dist/ai-service/prompts/generated/library-components/SbButtonPropsDocs.js.map +1 -1
  25. package/dist/ai-service/prompts/generated/library-components/SbCheckboxPropsDocs.d.ts +1 -1
  26. package/dist/ai-service/prompts/generated/library-components/SbCheckboxPropsDocs.d.ts.map +1 -1
  27. package/dist/ai-service/prompts/generated/library-components/SbCheckboxPropsDocs.js +2 -2
  28. package/dist/ai-service/prompts/generated/library-components/SbCheckboxPropsDocs.js.map +1 -1
  29. package/dist/ai-service/prompts/generated/library-components/SbColumnPropsDocs.d.ts +1 -1
  30. package/dist/ai-service/prompts/generated/library-components/SbColumnPropsDocs.d.ts.map +1 -1
  31. package/dist/ai-service/prompts/generated/library-components/SbColumnPropsDocs.js +2 -2
  32. package/dist/ai-service/prompts/generated/library-components/SbColumnPropsDocs.js.map +1 -1
  33. package/dist/ai-service/prompts/generated/library-components/SbContainerPropsDocs.d.ts +1 -1
  34. package/dist/ai-service/prompts/generated/library-components/SbContainerPropsDocs.d.ts.map +1 -1
  35. package/dist/ai-service/prompts/generated/library-components/SbContainerPropsDocs.js +2 -2
  36. package/dist/ai-service/prompts/generated/library-components/SbContainerPropsDocs.js.map +1 -1
  37. package/dist/ai-service/prompts/generated/library-components/SbDatePickerPropsDocs.d.ts +1 -1
  38. package/dist/ai-service/prompts/generated/library-components/SbDatePickerPropsDocs.d.ts.map +1 -1
  39. package/dist/ai-service/prompts/generated/library-components/SbDatePickerPropsDocs.js +2 -2
  40. package/dist/ai-service/prompts/generated/library-components/SbDatePickerPropsDocs.js.map +1 -1
  41. package/dist/ai-service/prompts/generated/library-components/SbDropdownPropsDocs.d.ts +1 -1
  42. package/dist/ai-service/prompts/generated/library-components/SbDropdownPropsDocs.d.ts.map +1 -1
  43. package/dist/ai-service/prompts/generated/library-components/SbDropdownPropsDocs.js +2 -2
  44. package/dist/ai-service/prompts/generated/library-components/SbDropdownPropsDocs.js.map +1 -1
  45. package/dist/ai-service/prompts/generated/library-components/SbIconPropsDocs.d.ts +1 -1
  46. package/dist/ai-service/prompts/generated/library-components/SbIconPropsDocs.d.ts.map +1 -1
  47. package/dist/ai-service/prompts/generated/library-components/SbIconPropsDocs.js +2 -2
  48. package/dist/ai-service/prompts/generated/library-components/SbIconPropsDocs.js.map +1 -1
  49. package/dist/ai-service/prompts/generated/library-components/SbImagePropsDocs.d.ts +1 -1
  50. package/dist/ai-service/prompts/generated/library-components/SbImagePropsDocs.d.ts.map +1 -1
  51. package/dist/ai-service/prompts/generated/library-components/SbImagePropsDocs.js +2 -2
  52. package/dist/ai-service/prompts/generated/library-components/SbImagePropsDocs.js.map +1 -1
  53. package/dist/ai-service/prompts/generated/library-components/SbInputPropsDocs.d.ts +1 -1
  54. package/dist/ai-service/prompts/generated/library-components/SbInputPropsDocs.d.ts.map +1 -1
  55. package/dist/ai-service/prompts/generated/library-components/SbInputPropsDocs.js +2 -2
  56. package/dist/ai-service/prompts/generated/library-components/SbInputPropsDocs.js.map +1 -1
  57. package/dist/ai-service/prompts/generated/library-components/SbModalPropsDocs.d.ts +1 -1
  58. package/dist/ai-service/prompts/generated/library-components/SbModalPropsDocs.d.ts.map +1 -1
  59. package/dist/ai-service/prompts/generated/library-components/SbModalPropsDocs.js +2 -2
  60. package/dist/ai-service/prompts/generated/library-components/SbModalPropsDocs.js.map +1 -1
  61. package/dist/ai-service/prompts/generated/library-components/SbPagePropsDocs.d.ts +1 -1
  62. package/dist/ai-service/prompts/generated/library-components/SbPagePropsDocs.d.ts.map +1 -1
  63. package/dist/ai-service/prompts/generated/library-components/SbPagePropsDocs.js +2 -2
  64. package/dist/ai-service/prompts/generated/library-components/SbPagePropsDocs.js.map +1 -1
  65. package/dist/ai-service/prompts/generated/library-components/SbSectionPropsDocs.d.ts +1 -1
  66. package/dist/ai-service/prompts/generated/library-components/SbSectionPropsDocs.d.ts.map +1 -1
  67. package/dist/ai-service/prompts/generated/library-components/SbSectionPropsDocs.js +2 -2
  68. package/dist/ai-service/prompts/generated/library-components/SbSectionPropsDocs.js.map +1 -1
  69. package/dist/ai-service/prompts/generated/library-components/SbSlideoutPropsDocs.d.ts +1 -1
  70. package/dist/ai-service/prompts/generated/library-components/SbSlideoutPropsDocs.d.ts.map +1 -1
  71. package/dist/ai-service/prompts/generated/library-components/SbSlideoutPropsDocs.js +2 -2
  72. package/dist/ai-service/prompts/generated/library-components/SbSlideoutPropsDocs.js.map +1 -1
  73. package/dist/ai-service/prompts/generated/library-components/SbSwitchPropsDocs.d.ts +1 -1
  74. package/dist/ai-service/prompts/generated/library-components/SbSwitchPropsDocs.d.ts.map +1 -1
  75. package/dist/ai-service/prompts/generated/library-components/SbSwitchPropsDocs.js +2 -2
  76. package/dist/ai-service/prompts/generated/library-components/SbSwitchPropsDocs.js.map +1 -1
  77. package/dist/ai-service/prompts/generated/library-components/SbTablePropsDocs.d.ts +1 -1
  78. package/dist/ai-service/prompts/generated/library-components/SbTablePropsDocs.d.ts.map +1 -1
  79. package/dist/ai-service/prompts/generated/library-components/SbTablePropsDocs.js +2 -2
  80. package/dist/ai-service/prompts/generated/library-components/SbTablePropsDocs.js.map +1 -1
  81. package/dist/ai-service/prompts/generated/library-components/SbTextPropsDocs.d.ts +1 -1
  82. package/dist/ai-service/prompts/generated/library-components/SbTextPropsDocs.d.ts.map +1 -1
  83. package/dist/ai-service/prompts/generated/library-components/SbTextPropsDocs.js +2 -2
  84. package/dist/ai-service/prompts/generated/library-components/SbTextPropsDocs.js.map +1 -1
  85. package/dist/ai-service/prompts/generated/library-typedefs/Dim.js +1 -1
  86. package/dist/ai-service/prompts/generated/library-typedefs/SbEventFlow.js +1 -1
  87. package/dist/ai-service/prompts/generated/library-typedefs/TextStyleWithVariant.d.ts +2 -0
  88. package/dist/ai-service/prompts/generated/library-typedefs/TextStyleWithVariant.d.ts.map +1 -0
  89. package/dist/ai-service/prompts/generated/library-typedefs/TextStyleWithVariant.js +6 -0
  90. package/dist/ai-service/prompts/generated/library-typedefs/TextStyleWithVariant.js.map +1 -0
  91. package/dist/ai-service/prompts/generated/library-typedefs/index.d.ts +1 -0
  92. package/dist/ai-service/prompts/generated/library-typedefs/index.d.ts.map +1 -1
  93. package/dist/ai-service/prompts/generated/library-typedefs/index.js +1 -0
  94. package/dist/ai-service/prompts/generated/library-typedefs/index.js.map +1 -1
  95. package/dist/ai-service/prompts/generated/subprompts/full-examples.js +1 -1
  96. package/dist/ai-service/prompts/generated/subprompts/superblocks-api.d.ts +1 -1
  97. package/dist/ai-service/prompts/generated/subprompts/superblocks-api.d.ts.map +1 -1
  98. package/dist/ai-service/prompts/generated/subprompts/superblocks-api.js +2 -2
  99. package/dist/ai-service/prompts/generated/subprompts/superblocks-api.js.map +1 -1
  100. package/dist/ai-service/prompts/generated/subprompts/superblocks-components-rules.js +1 -1
  101. package/dist/ai-service/prompts/generated/subprompts/superblocks-custom-components.js +1 -1
  102. package/dist/ai-service/prompts/generated/subprompts/superblocks-data-filtering.js +1 -1
  103. package/dist/ai-service/prompts/generated/subprompts/superblocks-event-flow.js +1 -1
  104. package/dist/ai-service/prompts/generated/subprompts/superblocks-forms.js +1 -1
  105. package/dist/ai-service/prompts/generated/subprompts/superblocks-layouts.js +1 -1
  106. package/dist/ai-service/prompts/generated/subprompts/superblocks-page.js +1 -1
  107. package/dist/ai-service/prompts/generated/subprompts/superblocks-rbac.js +1 -1
  108. package/dist/ai-service/prompts/generated/subprompts/superblocks-routes.js +1 -1
  109. package/dist/ai-service/prompts/generated/subprompts/superblocks-state.js +1 -1
  110. package/dist/ai-service/prompts/generated/subprompts/superblocks-theming.js +1 -1
  111. package/dist/ai-service/prompts/generated/subprompts/system.js +1 -1
  112. package/dist/ai-service/prompts/system.d.ts.map +1 -1
  113. package/dist/ai-service/prompts/system.js +4 -0
  114. package/dist/ai-service/prompts/system.js.map +1 -1
  115. package/dist/ai-service/state-machine/clark-fsm.d.ts +2 -0
  116. package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
  117. package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
  118. package/dist/ai-service/state-machine/handlers/agent-planning.js +13 -2
  119. package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
  120. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts +1 -1
  121. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
  122. package/dist/ai-service/state-machine/handlers/llm-generating.js +75 -24
  123. package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
  124. package/dist/ai-service/state-machine/handlers/runtime-reviewing.d.ts.map +1 -1
  125. package/dist/ai-service/state-machine/handlers/runtime-reviewing.js +18 -6
  126. package/dist/ai-service/state-machine/handlers/runtime-reviewing.js.map +1 -1
  127. package/dist/ai-service/state-machine/helpers/rate-limiting.d.ts +6 -0
  128. package/dist/ai-service/state-machine/helpers/rate-limiting.d.ts.map +1 -0
  129. package/dist/ai-service/state-machine/helpers/rate-limiting.js +26 -0
  130. package/dist/ai-service/state-machine/helpers/rate-limiting.js.map +1 -0
  131. package/dist/ai-service/test-utils/app-generation-mocks/orders-app.d.ts +3 -0
  132. package/dist/ai-service/test-utils/app-generation-mocks/orders-app.d.ts.map +1 -0
  133. package/dist/ai-service/test-utils/app-generation-mocks/orders-app.js +851 -0
  134. package/dist/ai-service/test-utils/app-generation-mocks/orders-app.js.map +1 -0
  135. package/dist/ai-service/test-utils/app-generation-mocks/smoketest.d.ts +3 -0
  136. package/dist/ai-service/test-utils/app-generation-mocks/smoketest.d.ts.map +1 -0
  137. package/dist/ai-service/test-utils/app-generation-mocks/smoketest.js +111 -0
  138. package/dist/ai-service/test-utils/app-generation-mocks/smoketest.js.map +1 -0
  139. package/dist/ai-service/test-utils/mock-utils.d.ts +22 -0
  140. package/dist/ai-service/test-utils/mock-utils.d.ts.map +1 -0
  141. package/dist/ai-service/test-utils/mock-utils.js +46 -0
  142. package/dist/ai-service/test-utils/mock-utils.js.map +1 -0
  143. package/dist/ai-service/transform/add-metadata-to-api-yaml/transformer.d.ts.map +1 -1
  144. package/dist/ai-service/transform/add-metadata-to-api-yaml/transformer.js +3 -2
  145. package/dist/ai-service/transform/add-metadata-to-api-yaml/transformer.js.map +1 -1
  146. package/dist/ai-service/transform/shared.d.ts.map +1 -1
  147. package/dist/ai-service/transform/shared.js +9 -8
  148. package/dist/ai-service/transform/shared.js.map +1 -1
  149. package/dist/ai-service/types.d.ts +23 -10
  150. package/dist/ai-service/types.d.ts.map +1 -1
  151. package/dist/ai-service/types.js.map +1 -1
  152. package/dist/binding-extraction/extract-control-block-identifiers.d.ts +1 -1
  153. package/dist/binding-extraction/extract-control-block-identifiers.d.ts.map +1 -1
  154. package/dist/binding-extraction/extract-control-block-identifiers.js +15 -13
  155. package/dist/binding-extraction/extract-control-block-identifiers.js.map +1 -1
  156. package/dist/binding-extraction/extract-identifiers.d.ts +3 -3
  157. package/dist/binding-extraction/extract-identifiers.d.ts.map +1 -1
  158. package/dist/binding-extraction/extract-identifiers.js +83 -52
  159. package/dist/binding-extraction/extract-identifiers.js.map +1 -1
  160. package/dist/binding-extraction/index.d.ts +2 -0
  161. package/dist/binding-extraction/index.d.ts.map +1 -0
  162. package/dist/binding-extraction/index.js +2 -0
  163. package/dist/binding-extraction/index.js.map +1 -0
  164. package/dist/binding-extraction/shared.d.ts +0 -199
  165. package/dist/binding-extraction/shared.d.ts.map +1 -1
  166. package/dist/binding-extraction/shared.js +1 -42
  167. package/dist/binding-extraction/shared.js.map +1 -1
  168. package/dist/codegen.js +1 -1
  169. package/dist/codegen.js.map +1 -1
  170. package/dist/components-manager.d.ts +4 -1
  171. package/dist/components-manager.d.ts.map +1 -1
  172. package/dist/components-manager.js +34 -4
  173. package/dist/components-manager.js.map +1 -1
  174. package/dist/file-sync-vite-plugin.d.ts.map +1 -1
  175. package/dist/file-sync-vite-plugin.js +44 -17
  176. package/dist/file-sync-vite-plugin.js.map +1 -1
  177. package/dist/file-system-helpers.d.ts +4 -0
  178. package/dist/file-system-helpers.d.ts.map +1 -1
  179. package/dist/file-system-helpers.js +10 -0
  180. package/dist/file-system-helpers.js.map +1 -1
  181. package/dist/file-system-manager.d.ts +52 -39
  182. package/dist/file-system-manager.d.ts.map +1 -1
  183. package/dist/file-system-manager.js +659 -532
  184. package/dist/file-system-manager.js.map +1 -1
  185. package/dist/index.d.ts +1 -0
  186. package/dist/index.d.ts.map +1 -1
  187. package/dist/index.js +1 -0
  188. package/dist/index.js.map +1 -1
  189. package/dist/inject-index-vite-plugin.d.ts +0 -2
  190. package/dist/inject-index-vite-plugin.d.ts.map +1 -1
  191. package/dist/inject-index-vite-plugin.js +2 -2
  192. package/dist/inject-index-vite-plugin.js.map +1 -1
  193. package/dist/injected-index.d.ts +2 -2
  194. package/dist/injected-index.d.ts.map +1 -1
  195. package/dist/injected-index.js.map +1 -1
  196. package/dist/lock-service/index.d.ts.map +1 -1
  197. package/dist/lock-service/index.js +13 -2
  198. package/dist/lock-service/index.js.map +1 -1
  199. package/dist/operations/operation-processor.d.ts +24 -0
  200. package/dist/operations/operation-processor.d.ts.map +1 -0
  201. package/dist/operations/operation-processor.js +80 -0
  202. package/dist/operations/operation-processor.js.map +1 -0
  203. package/dist/operations/types.d.ts +8 -0
  204. package/dist/operations/types.d.ts.map +1 -0
  205. package/dist/operations/types.js +2 -0
  206. package/dist/operations/types.js.map +1 -0
  207. package/dist/parsing/computed/to-code-computed.d.ts.map +1 -1
  208. package/dist/parsing/computed/to-code-computed.js +7 -3
  209. package/dist/parsing/computed/to-code-computed.js.map +1 -1
  210. package/dist/parsing/entity/to-value-entity.js.map +1 -1
  211. package/dist/parsing/events/to-code-events.d.ts +1 -1
  212. package/dist/parsing/events/to-code-events.d.ts.map +1 -1
  213. package/dist/parsing/events/to-code-events.js +15 -4
  214. package/dist/parsing/events/to-code-events.js.map +1 -1
  215. package/dist/parsing/events/to-value-events.d.ts.map +1 -1
  216. package/dist/parsing/events/to-value-events.js +47 -0
  217. package/dist/parsing/events/to-value-events.js.map +1 -1
  218. package/dist/parsing/index.d.ts +3 -0
  219. package/dist/parsing/index.d.ts.map +1 -0
  220. package/dist/parsing/index.js +3 -0
  221. package/dist/parsing/index.js.map +1 -0
  222. package/dist/parsing/properties.js.map +1 -1
  223. package/dist/parsing/template/index.js +1 -1
  224. package/dist/parsing/template/index.js.map +1 -1
  225. package/dist/parsing/template/to-code-template.d.ts +2 -1
  226. package/dist/parsing/template/to-code-template.d.ts.map +1 -1
  227. package/dist/parsing/template/to-code-template.js +2 -2
  228. package/dist/parsing/template/to-code-template.js.map +1 -1
  229. package/dist/plugin-options.d.ts +0 -2
  230. package/dist/plugin-options.d.ts.map +1 -1
  231. package/dist/plugin-options.js.map +1 -1
  232. package/dist/refactor/blocks.d.ts.map +1 -1
  233. package/dist/refactor/blocks.js +2 -69
  234. package/dist/refactor/blocks.js.map +1 -1
  235. package/dist/refactor/entities.d.ts +6 -0
  236. package/dist/refactor/entities.d.ts.map +1 -0
  237. package/dist/refactor/entities.js +62 -0
  238. package/dist/refactor/entities.js.map +1 -0
  239. package/dist/refactor/javascript.d.ts +0 -4
  240. package/dist/refactor/javascript.d.ts.map +1 -1
  241. package/dist/refactor/javascript.js +0 -8
  242. package/dist/refactor/javascript.js.map +1 -1
  243. package/dist/rename-manager.d.ts +0 -5
  244. package/dist/rename-manager.d.ts.map +1 -1
  245. package/dist/rename-manager.js +1 -27
  246. package/dist/rename-manager.js.map +1 -1
  247. package/dist/routing.d.ts +2 -2
  248. package/dist/routing.d.ts.map +1 -1
  249. package/dist/routing.js +21 -1
  250. package/dist/routing.js.map +1 -1
  251. package/dist/sb-scope-manager.d.ts +1 -1
  252. package/dist/sb-scope-manager.d.ts.map +1 -1
  253. package/dist/sb-scope-manager.js +10 -0
  254. package/dist/sb-scope-manager.js.map +1 -1
  255. package/dist/socket-manager.d.ts +2 -2
  256. package/dist/socket-manager.d.ts.map +1 -1
  257. package/dist/socket-manager.js +7 -5
  258. package/dist/socket-manager.js.map +1 -1
  259. package/dist/source-tracker.d.ts +20 -20
  260. package/dist/source-tracker.d.ts.map +1 -1
  261. package/dist/source-tracker.js +33 -17
  262. package/dist/source-tracker.js.map +1 -1
  263. package/dist/sync-service/hash-cache.d.ts +1 -0
  264. package/dist/sync-service/hash-cache.d.ts.map +1 -1
  265. package/dist/sync-service/hash-cache.js +4 -0
  266. package/dist/sync-service/hash-cache.js.map +1 -1
  267. package/dist/sync-service/index.d.ts +4 -0
  268. package/dist/sync-service/index.d.ts.map +1 -1
  269. package/dist/sync-service/index.js +30 -2
  270. package/dist/sync-service/index.js.map +1 -1
  271. package/dist/sync-service/list-dir.js +1 -1
  272. package/dist/sync-service/list-dir.js.map +1 -1
  273. package/dist/sync-service/server-rpc/client.d.ts.map +1 -1
  274. package/dist/sync-service/server-rpc/client.js +4 -1
  275. package/dist/sync-service/server-rpc/client.js.map +1 -1
  276. package/dist/util/logger.d.ts +13 -17
  277. package/dist/util/logger.d.ts.map +1 -1
  278. package/dist/util/logger.js +34 -44
  279. package/dist/util/logger.js.map +1 -1
  280. package/dist/util.d.ts +1 -0
  281. package/dist/util.d.ts.map +1 -1
  282. package/dist/util.js +8 -0
  283. package/dist/util.js.map +1 -1
  284. package/package.json +15 -6
  285. package/dist/util/tracing.d.ts +0 -4
  286. package/dist/util/tracing.d.ts.map +0 -1
  287. package/dist/util/tracing.js +0 -56
  288. package/dist/util/tracing.js.map +0 -1
@@ -0,0 +1,851 @@
1
+ export default `BUILDING APPLICATION FROM MOCK RESPONSE: I'll create a comprehensive order management app with CRUD operations using the DemoOrders and DemoShipping databases.
2
+
3
+ <boltArtifact id="order-management-app" title="Order Management App">
4
+ <boltAction type="file" filePath="routes.json">
5
+ {
6
+ "/": {
7
+ "file": "Page1/index.tsx"
8
+ }
9
+ }
10
+ </boltAction>
11
+
12
+ <boltAction type="file" filePath="pages/Page1/scope.ts">
13
+ import {
14
+ createSbScope,
15
+ SbApi,
16
+ SbVariable,
17
+ SbVariablePersistence,
18
+ sbComputed,
19
+ } from "@superblocksteam/library";
20
+
21
+ export const Page1Scope = createSbScope<{
22
+ OrdersTable: any;
23
+ ProductFilterInput: any;
24
+ CreateOrderModal: any;
25
+ EditOrderModal: any;
26
+ OrderDetailsModal: any;
27
+ CreateOrderButton: any;
28
+ NewOrderProductInput: any;
29
+ NewOrderUserEmailInput: any;
30
+ NewOrderPriceInput: any;
31
+ NewOrderImageInput: any;
32
+ EditOrderProductInput: any;
33
+ EditOrderUserEmailInput: any;
34
+ EditOrderPriceInput: any;
35
+ EditOrderImageInput: any;
36
+ }>(
37
+ ({
38
+ entities: {
39
+ OrdersTable,
40
+ ProductFilterInput,
41
+ getMetricsApi,
42
+ getOrdersApi,
43
+ getOrderDetailsApi,
44
+ getShippingInfoApi,
45
+ createOrderApi,
46
+ updateOrderApi,
47
+ deleteOrderApi,
48
+ NewOrderProductInput,
49
+ NewOrderUserEmailInput,
50
+ NewOrderPriceInput,
51
+ NewOrderImageInput,
52
+ EditOrderProductInput,
53
+ EditOrderUserEmailInput,
54
+ EditOrderPriceInput,
55
+ EditOrderImageInput,
56
+ },
57
+ }) => ({
58
+ getMetricsApi: SbApi({}),
59
+ getOrdersApi: SbApi({}),
60
+ getOrderDetailsApi: SbApi({}),
61
+ getShippingInfoApi: SbApi({}),
62
+ createOrderApi: SbApi({}),
63
+ updateOrderApi: SbApi({}),
64
+ deleteOrderApi: SbApi({}),
65
+
66
+ filteredOrdersVar: SbVariable({
67
+ defaultValue: sbComputed(() => {
68
+ const orders = getOrdersApi.response || [];
69
+ const filterText = ProductFilterInput.value?.toLowerCase() || '';
70
+
71
+ if (!filterText) return orders;
72
+
73
+ return orders.filter((order: any) =>
74
+ order.product?.toLowerCase().includes(filterText)
75
+ );
76
+ }),
77
+ persistence: SbVariablePersistence.TEMPORARY,
78
+ }),
79
+ }),
80
+ {
81
+ name: "Page1",
82
+ }
83
+ );
84
+
85
+ export const Page1 = Page1Scope.entities;
86
+ </boltAction>
87
+
88
+ <boltAction type="file" filePath="pages/Page1/index.tsx">
89
+ import {
90
+ SbPage,
91
+ Dim,
92
+ SbSection,
93
+ SbColumn,
94
+ registerPage,
95
+ SbTable,
96
+ sbComputed,
97
+ SbContainer,
98
+ SbInput,
99
+ SbButton,
100
+ SbEventFlow,
101
+ SbModal,
102
+ SbText,
103
+ Theme,
104
+ } from "@superblocksteam/library";
105
+ import MetricCard from "components/MetricCard/MetricCard";
106
+ import AppHeader from "components/AppHeader/AppHeader";
107
+ import KeyValue from "components/KeyValue";
108
+ import { Page1, Page1Scope } from "./scope";
109
+
110
+ function Page() {
111
+ const {
112
+ OrdersTable,
113
+ ProductFilterInput,
114
+ CreateOrderModal,
115
+ EditOrderModal,
116
+ CreateOrderButton,
117
+ OrderDetailsModal,
118
+ NewOrderProductInput,
119
+ NewOrderUserEmailInput,
120
+ NewOrderPriceInput,
121
+ NewOrderImageInput,
122
+ EditOrderProductInput,
123
+ EditOrderUserEmailInput,
124
+ EditOrderPriceInput,
125
+ EditOrderImageInput,
126
+ getMetricsApi,
127
+ getOrdersApi,
128
+ getOrderDetailsApi,
129
+ getShippingInfoApi,
130
+ createOrderApi,
131
+ updateOrderApi,
132
+ deleteOrderApi,
133
+ filteredOrdersVar,
134
+ } = Page1;
135
+
136
+ return (
137
+ <SbPage
138
+ name="Page1"
139
+ height={Dim.fill()}
140
+ width={Dim.fill()}
141
+ onLoad={SbEventFlow.runApis([getMetricsApi, getOrdersApi])}
142
+ >
143
+ <SbSection height={Dim.fill()}>
144
+ <SbColumn width={Dim.fill()} spacing={Dim.px(0)}>
145
+ <AppHeader
146
+ title="Order Management"
147
+ avatarUrl="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=40&h=40&fit=crop&crop=face"
148
+ userEmail="admin@company.com"
149
+ height={Dim.fit()}
150
+ />
151
+
152
+ <SbContainer
153
+ layout="vertical"
154
+ spacing={Dim.px(24)}
155
+ padding={{
156
+ top: Dim.px(24),
157
+ bottom: Dim.px(24),
158
+ left: Dim.px(24),
159
+ right: Dim.px(24),
160
+ }}
161
+ height={Dim.fill()}
162
+ >
163
+ {/* Metrics Cards */}
164
+ <SbContainer layout="horizontal" spacing={Dim.px(16)}>
165
+ <MetricCard
166
+ title="Total Orders"
167
+ value={sbComputed(() => getMetricsApi.response?.totalOrders?.toString() || "0")}
168
+ icon="receipt_long"
169
+ width={Dim.fill()}
170
+ />
171
+ <MetricCard
172
+ title="Total Revenue"
173
+ value={sbComputed(() => \`$\${getMetricsApi.response?.totalRevenue?.toLocaleString() || "0"}\`)}
174
+ icon="attach_money"
175
+ width={Dim.fill()}
176
+ />
177
+ <MetricCard
178
+ title="Orders This Month"
179
+ value={sbComputed(() => getMetricsApi.response?.ordersThisMonth?.toString() || "0")}
180
+ icon="calendar_today"
181
+ width={Dim.fill()}
182
+ />
183
+ <MetricCard
184
+ title="Active Shipments"
185
+ value={sbComputed(() => getMetricsApi.response?.activeShipments?.toString() || "0")}
186
+ icon="local_shipping"
187
+ width={Dim.fill()}
188
+ />
189
+ </SbContainer>
190
+
191
+ {/* Orders Section */}
192
+ <SbContainer layout="vertical" spacing={Dim.px(16)} variant="card">
193
+ <SbContainer layout="horizontal" spacing={Dim.px(12)} verticalAlign="bottom">
194
+ <SbInput
195
+ bind={ProductFilterInput}
196
+ label="Filter by Product"
197
+ placeholder="Search products..."
198
+ width={Dim.px(300)}
199
+ />
200
+ <SbButton
201
+ bind={CreateOrderButton}
202
+ label="Create Order"
203
+ variant="primary"
204
+ icon="add"
205
+ onClick={SbEventFlow.controlModal(CreateOrderModal, "open")}
206
+ />
207
+ </SbContainer>
208
+
209
+ <SbTable
210
+ bind={OrdersTable}
211
+ tableData={sbComputed(() => filteredOrdersVar.value)}
212
+ columns={{
213
+ id: {
214
+ label: "Order ID",
215
+ columnType: "text",
216
+ },
217
+ product: {
218
+ label: "Product",
219
+ columnType: "text",
220
+ },
221
+ user_email: {
222
+ label: "Customer Email",
223
+ columnType: "email",
224
+ },
225
+ date_purchased: {
226
+ label: "Date Purchased",
227
+ columnType: "date",
228
+ inputFormat: "YYYY-MM-DD",
229
+ outputFormat: "MM/DD/YYYY",
230
+ },
231
+ price: {
232
+ label: "Price",
233
+ columnType: "currency",
234
+ currency: "USD",
235
+ },
236
+ actions: {
237
+ label: "Actions",
238
+ columnType: "button",
239
+ buttonLabel: "View Details",
240
+ onClick: SbEventFlow.runJS(() => {
241
+ getOrderDetailsApi.run();
242
+ getShippingInfoApi.run();
243
+ }).controlModal(OrderDetailsModal, "open"),
244
+ },
245
+ }}
246
+ onRowClick={SbEventFlow.runJS(() => {
247
+ EditOrderProductInput.text = OrdersTable.selectedRow?.product || "";
248
+ EditOrderUserEmailInput.text = OrdersTable.selectedRow?.user_email || "";
249
+ EditOrderPriceInput.text = OrdersTable.selectedRow?.price?.toString() || "";
250
+ EditOrderImageInput.text = OrdersTable.selectedRow?.image || "";
251
+ }).controlModal(EditOrderModal, "open")}
252
+ height={Dim.px(400)}
253
+ />
254
+ </SbContainer>
255
+ </SbContainer>
256
+ </SbColumn>
257
+ </SbSection>
258
+
259
+ {/* Create Order Modal */}
260
+ <SbModal bind={CreateOrderModal}>
261
+ <SbContainer layout="vertical" spacing={Dim.px(24)} width={Dim.fill()}>
262
+ <SbText text="Create New Order" textStyle={{ variant: "heading3" }} />
263
+
264
+ <SbContainer layout="vertical" spacing={Dim.px(16)} width={Dim.fill()}>
265
+ <SbInput
266
+ bind={NewOrderProductInput}
267
+ label="Product Name"
268
+ placeholder="Enter product name"
269
+ width={Dim.fill()}
270
+ isRequired={true}
271
+ />
272
+ <SbInput
273
+ bind={NewOrderUserEmailInput}
274
+ label="Customer Email"
275
+ placeholder="Enter customer email"
276
+ inputType="EMAIL"
277
+ width={Dim.fill()}
278
+ isRequired={true}
279
+ />
280
+ <SbInput
281
+ bind={NewOrderPriceInput}
282
+ label="Price"
283
+ placeholder="Enter price"
284
+ inputType="NUMBER"
285
+ width={Dim.fill()}
286
+ isRequired={true}
287
+ />
288
+ <SbInput
289
+ bind={NewOrderImageInput}
290
+ label="Product Image URL"
291
+ placeholder="Enter image URL (optional)"
292
+ width={Dim.fill()}
293
+ />
294
+ </SbContainer>
295
+
296
+ <SbContainer layout="horizontal" spacing={Dim.px(12)} horizontalAlign="right" width={Dim.fill()}>
297
+ <SbButton
298
+ label="Cancel"
299
+ variant="secondary"
300
+ onClick={SbEventFlow.runJS(() => {
301
+ NewOrderProductInput.text = "";
302
+ NewOrderUserEmailInput.text = "";
303
+ NewOrderPriceInput.text = "";
304
+ NewOrderImageInput.text = "";
305
+ }).controlModal(CreateOrderModal, "close")}
306
+ />
307
+ <SbButton
308
+ label="Create Order"
309
+ variant="primary"
310
+ onClick={SbEventFlow.runApis([createOrderApi])
311
+ .runApis([getMetricsApi, getOrdersApi])
312
+ .runJS(() => {
313
+ NewOrderProductInput.text = "";
314
+ NewOrderUserEmailInput.text = "";
315
+ NewOrderPriceInput.text = "";
316
+ NewOrderImageInput.text = "";
317
+ })
318
+ .controlModal(CreateOrderModal, "close")}
319
+ />
320
+ </SbContainer>
321
+ </SbContainer>
322
+ </SbModal>
323
+
324
+ {/* Edit Order Modal */}
325
+ <SbModal bind={EditOrderModal}>
326
+ <SbContainer layout="vertical" spacing={Dim.px(24)} width={Dim.fill()}>
327
+ <SbContainer layout="horizontal" spacing={Dim.px(12)} horizontalAlign="space-between" width={Dim.fill()}>
328
+ <SbText
329
+ width={Dim.fit()}
330
+ text={sbComputed(() => \`Edit Order #\${OrdersTable.selectedRow?.id || ""}\`)}
331
+ textStyle={{ variant: "heading3" }}
332
+ />
333
+ </SbContainer>
334
+
335
+ <SbContainer layout="vertical" spacing={Dim.px(16)} width={Dim.fill()}>
336
+ <SbInput
337
+ bind={EditOrderProductInput}
338
+ label="Product Name"
339
+ width={Dim.fill()}
340
+ isRequired={true}
341
+ />
342
+ <SbInput
343
+ bind={EditOrderUserEmailInput}
344
+ label="Customer Email"
345
+ inputType="EMAIL"
346
+ width={Dim.fill()}
347
+ isRequired={true}
348
+ />
349
+ <SbInput
350
+ bind={EditOrderPriceInput}
351
+ label="Price"
352
+ inputType="NUMBER"
353
+ width={Dim.fill()}
354
+ isRequired={true}
355
+ />
356
+ <SbInput
357
+ bind={EditOrderImageInput}
358
+ label="Product Image URL"
359
+ width={Dim.fill()}
360
+ />
361
+ </SbContainer>
362
+
363
+ <SbContainer layout="horizontal" spacing={Dim.px(12)} horizontalAlign="right" width={Dim.fill()}>
364
+ <SbButton
365
+ label="Cancel"
366
+ variant="secondary"
367
+ onClick={SbEventFlow.controlModal(EditOrderModal, "close")}
368
+ />
369
+ <SbButton
370
+ label="Update Order"
371
+ variant="primary"
372
+ onClick={SbEventFlow.runApis([updateOrderApi])
373
+ .runApis([getMetricsApi, getOrdersApi])
374
+ .controlModal(EditOrderModal, "close")}
375
+ />
376
+ </SbContainer>
377
+ </SbContainer>
378
+ </SbModal>
379
+
380
+ {/* Order Details Modal */}
381
+ <SbModal bind={OrderDetailsModal}>
382
+ <SbContainer layout="vertical" spacing={Dim.px(24)} width={Dim.fill()}>
383
+ <SbText
384
+ text={sbComputed(() => \`Order Details #\${OrdersTable.selectedRow?.id || ""}\`)}
385
+ textStyle={{ variant: "heading3" }}
386
+ />
387
+
388
+ <SbContainer layout="horizontal" spacing={Dim.px(24)} width={Dim.fill()}>
389
+ <SbContainer layout="vertical" spacing={Dim.px(16)} width={Dim.fill()}>
390
+ <KeyValue
391
+ label="Order Information"
392
+ data={sbComputed(() => getOrderDetailsApi.response || {})}
393
+ />
394
+ </SbContainer>
395
+
396
+ <SbContainer layout="vertical" spacing={Dim.px(16)} width={Dim.fill()}>
397
+ <KeyValue
398
+ label="Shipping Information"
399
+ data={sbComputed(() => getShippingInfoApi.response || {})}
400
+ />
401
+ </SbContainer>
402
+ </SbContainer>
403
+
404
+ <SbContainer layout="horizontal" spacing={Dim.px(12)} horizontalAlign="right" width={Dim.fill()}>
405
+ <SbButton
406
+ label="Close"
407
+ variant="secondary"
408
+ onClick={SbEventFlow.controlModal(OrderDetailsModal, "close")}
409
+ />
410
+ </SbContainer>
411
+ </SbContainer>
412
+ </SbModal>
413
+ </SbPage>
414
+ );
415
+ }
416
+
417
+ export default registerPage(Page, Page1Scope);
418
+ </boltAction>
419
+
420
+ <boltAction type="file" filePath="pages/Page1/apis/getMetricsApi.ts">
421
+ import {
422
+ Api,
423
+ JavaScript,
424
+ Python,
425
+ Databricks,
426
+ Snowflake,
427
+ PostgreSQL,
428
+ RestApi,
429
+ Email,
430
+ Conditional,
431
+ TryCatch,
432
+ Variables,
433
+ Loop,
434
+ Parallel,
435
+ Throw,
436
+ Return,
437
+ } from "@superblocksteam/library";
438
+
439
+ export default new Api("getMetricsApi", [
440
+ new JavaScript("getMetrics", {
441
+ fn: () => {
442
+ return {
443
+ totalOrders: 45,
444
+ totalRevenue: 12489.50,
445
+ ordersThisMonth: 8,
446
+ activeShipments: 12,
447
+ };
448
+ },
449
+ }),
450
+ ]);
451
+ </boltAction>
452
+
453
+ <boltAction type="file" filePath="pages/Page1/apis/getOrdersApi.ts">
454
+ import {
455
+ Api,
456
+ JavaScript,
457
+ Python,
458
+ Databricks,
459
+ Snowflake,
460
+ PostgreSQL,
461
+ RestApi,
462
+ Email,
463
+ Conditional,
464
+ TryCatch,
465
+ Variables,
466
+ Loop,
467
+ Parallel,
468
+ Throw,
469
+ Return,
470
+ } from "@superblocksteam/library";
471
+
472
+ export default new Api("getOrdersApi", [
473
+ new JavaScript("getOrders", {
474
+ fn: () => {
475
+ return [
476
+ {
477
+ id: 1,
478
+ product: "Wireless Headphones",
479
+ user_email: "john.doe@example.com",
480
+ date_purchased: "2024-01-15",
481
+ price: 199.99,
482
+ image: "https://images.unsplash.com/photo-1505740420928-5e560c06d30e?w=200&h=200&fit=crop",
483
+ },
484
+ {
485
+ id: 2,
486
+ product: "Smart Watch",
487
+ user_email: "jane.smith@example.com",
488
+ date_purchased: "2024-01-14",
489
+ price: 299.99,
490
+ image: "https://images.unsplash.com/photo-1523275335684-37898b6baf30?w=200&h=200&fit=crop",
491
+ },
492
+ {
493
+ id: 3,
494
+ product: "Laptop Stand",
495
+ user_email: "mike.johnson@example.com",
496
+ date_purchased: "2024-01-13",
497
+ price: 49.99,
498
+ image: "https://images.unsplash.com/photo-1527864550417-7fd91fc51a46?w=200&h=200&fit=crop",
499
+ },
500
+ {
501
+ id: 4,
502
+ product: "Bluetooth Speaker",
503
+ user_email: "sarah.wilson@example.com",
504
+ date_purchased: "2024-01-12",
505
+ price: 79.99,
506
+ image: "https://images.unsplash.com/photo-1608043152269-423dbba4e7e1?w=200&h=200&fit=crop",
507
+ },
508
+ {
509
+ id: 5,
510
+ product: "Gaming Mouse",
511
+ user_email: "alex.brown@example.com",
512
+ date_purchased: "2024-01-11",
513
+ price: 89.99,
514
+ image: "https://images.unsplash.com/photo-1527814050087-3793815479db?w=200&h=200&fit=crop",
515
+ },
516
+ {
517
+ id: 6,
518
+ product: "USB-C Hub",
519
+ user_email: "emily.davis@example.com",
520
+ date_purchased: "2024-01-10",
521
+ price: 39.99,
522
+ image: "https://images.unsplash.com/photo-1558618047-3c8c76ca7d13?w=200&h=200&fit=crop",
523
+ },
524
+ {
525
+ id: 7,
526
+ product: "Phone Case",
527
+ user_email: "david.miller@example.com",
528
+ date_purchased: "2024-01-09",
529
+ price: 24.99,
530
+ image: "https://images.unsplash.com/photo-1601944177325-f8867652837f?w=200&h=200&fit=crop",
531
+ },
532
+ {
533
+ id: 8,
534
+ product: "Tablet Stand",
535
+ user_email: "lisa.garcia@example.com",
536
+ date_purchased: "2024-01-08",
537
+ price: 34.99,
538
+ image: "https://images.unsplash.com/photo-1544244015-0df4b3ffc6b0?w=200&h=200&fit=crop",
539
+ },
540
+ ];
541
+ },
542
+ }),
543
+ ]);
544
+ </boltAction>
545
+
546
+ <boltAction type="file" filePath="pages/Page1/apis/getOrderDetailsApi.ts">
547
+ import {
548
+ Api,
549
+ JavaScript,
550
+ Python,
551
+ Databricks,
552
+ Snowflake,
553
+ PostgreSQL,
554
+ RestApi,
555
+ Email,
556
+ Conditional,
557
+ TryCatch,
558
+ Variables,
559
+ Loop,
560
+ Parallel,
561
+ Throw,
562
+ Return,
563
+ } from "@superblocksteam/library";
564
+
565
+ export default new Api("getOrderDetailsApi", [
566
+ new JavaScript("getOrderDetails", {
567
+ fn: ({ OrdersTable }) => {
568
+ const order = OrdersTable.selectedRow;
569
+ if (!order) return {};
570
+
571
+ // Generate a user_id if not present (for display purposes)
572
+ const userId = order.user_id || Math.floor(Math.random() * 10000) + 1000;
573
+
574
+ return {
575
+ "Order ID": order.id,
576
+ "Product": order.product,
577
+ "Customer Email": order.user_email,
578
+ "User ID": userId,
579
+ "Date Purchased": order.date_purchased,
580
+ "Price": \`$\${order.price}\`,
581
+ "Image URL": order.image || "N/A",
582
+ };
583
+ },
584
+ }),
585
+ ]);
586
+ </boltAction>
587
+
588
+ <boltAction type="file" filePath="pages/Page1/apis/getShippingInfoApi.ts">
589
+ import {
590
+ Api,
591
+ JavaScript,
592
+ Python,
593
+ Databricks,
594
+ Snowflake,
595
+ PostgreSQL,
596
+ RestApi,
597
+ Email,
598
+ Conditional,
599
+ TryCatch,
600
+ Variables,
601
+ Loop,
602
+ Parallel,
603
+ Throw,
604
+ Return,
605
+ } from "@superblocksteam/library";
606
+
607
+ export default new Api("getShippingInfoApi", [
608
+ new JavaScript("getShippingInfo", {
609
+ fn: ({ OrdersTable }) => {
610
+ const order = OrdersTable.selectedRow;
611
+ if (!order) return { "Shipping Status": "No shipping info" };
612
+
613
+ const orderId = order.id;
614
+
615
+ // Generate shipping data based on order ID patterns
616
+ const shippingStatuses = ["Processing", "In Transit", "Delivered", "Out for Delivery"];
617
+ const locations = ["Los Angeles, CA", "Phoenix, AZ", "Denver, CO", "Chicago, IL", "Miami, FL"];
618
+ const activities = ["Order received", "Package shipped", "In transit", "Out for delivery", "Delivered"];
619
+
620
+ const statusIndex = orderId % shippingStatuses.length;
621
+ const status = shippingStatuses[statusIndex];
622
+
623
+ // Generate 2-3 shipping activities
624
+ const numActivities = 2 + (orderId % 2);
625
+ const history = [];
626
+
627
+ for (let i = 0; i < numActivities; i++) {
628
+ const date = new Date();
629
+ date.setDate(date.getDate() - (numActivities - i));
630
+ const timestamp = date.toISOString().replace('T', ' ').substring(0, 19);
631
+
632
+ history.push({
633
+ TIMESTAMP: timestamp,
634
+ ACTIVITY: activities[i % activities.length],
635
+ LOCATION: locations[i % locations.length],
636
+ });
637
+ }
638
+
639
+ const result = {
640
+ "Shipping Status": status,
641
+ };
642
+
643
+ history.forEach((item, index) => {
644
+ result[\`Activity \${index + 1}\`] = \`\${item.ACTIVITY} - \${item.LOCATION} (\${item.TIMESTAMP})\`;
645
+ });
646
+
647
+ return result;
648
+ },
649
+ }),
650
+ ]);
651
+ </boltAction>
652
+
653
+ <boltAction type="file" filePath="pages/Page1/apis/createOrderApi.ts">
654
+ import {
655
+ Api,
656
+ JavaScript,
657
+ Python,
658
+ Databricks,
659
+ Snowflake,
660
+ PostgreSQL,
661
+ RestApi,
662
+ Email,
663
+ Conditional,
664
+ TryCatch,
665
+ Variables,
666
+ Loop,
667
+ Parallel,
668
+ Throw,
669
+ Return,
670
+ } from "@superblocksteam/library";
671
+
672
+ export default new Api("createOrderApi", [
673
+ new Conditional("validateInputs", {
674
+ if: {
675
+ when: ({ NewOrderProductInput, NewOrderUserEmailInput, NewOrderPriceInput }) =>
676
+ !NewOrderProductInput.value ||
677
+ !NewOrderUserEmailInput.value ||
678
+ !NewOrderPriceInput.value,
679
+ then: [
680
+ new Throw("validation_error", {
681
+ error: "Product name, customer email, and price are required",
682
+ }),
683
+ ],
684
+ },
685
+ }),
686
+
687
+ new JavaScript("createOrder", {
688
+ fn: ({ NewOrderProductInput, NewOrderUserEmailInput, NewOrderPriceInput, NewOrderImageInput }) => {
689
+ // Generate a new order ID and user ID
690
+ const orderId = Math.floor(Math.random() * 1000) + 100;
691
+ const userId = Math.floor(Math.random() * 10000) + 1;
692
+ const currentDate = new Date().toISOString().split('T')[0];
693
+
694
+ // Simulate order creation
695
+ console.log("Creating order:", {
696
+ id: orderId,
697
+ user_id: userId,
698
+ product: NewOrderProductInput.value,
699
+ user_email: NewOrderUserEmailInput.value,
700
+ price: NewOrderPriceInput.value,
701
+ date_purchased: currentDate,
702
+ image: NewOrderImageInput.value || "",
703
+ });
704
+
705
+ return {
706
+ success: true,
707
+ message: "Order created successfully",
708
+ orderId: orderId,
709
+ };
710
+ },
711
+ }),
712
+ ]);
713
+ </boltAction>
714
+
715
+ <boltAction type="file" filePath="pages/Page1/apis/updateOrderApi.ts">
716
+ import {
717
+ Api,
718
+ JavaScript,
719
+ Python,
720
+ Databricks,
721
+ Snowflake,
722
+ PostgreSQL,
723
+ RestApi,
724
+ Email,
725
+ Conditional,
726
+ TryCatch,
727
+ Variables,
728
+ Loop,
729
+ Parallel,
730
+ Throw,
731
+ Return,
732
+ } from "@superblocksteam/library";
733
+
734
+ export default new Api("updateOrderApi", [
735
+ new Conditional("validateInputs", {
736
+ if: {
737
+ when: ({ EditOrderProductInput, EditOrderUserEmailInput, EditOrderPriceInput }) =>
738
+ !EditOrderProductInput.value ||
739
+ !EditOrderUserEmailInput.value ||
740
+ !EditOrderPriceInput.value,
741
+ then: [
742
+ new Throw("validation_error", {
743
+ error: "Product name, customer email, and price are required",
744
+ }),
745
+ ],
746
+ },
747
+ }),
748
+
749
+ new JavaScript("updateOrder", {
750
+ fn: ({ OrdersTable, EditOrderProductInput, EditOrderUserEmailInput, EditOrderPriceInput, EditOrderImageInput }) => {
751
+ const orderId = OrdersTable.selectedRow?.id;
752
+ if (!orderId) {
753
+ throw new Error("No order selected for update");
754
+ }
755
+
756
+ // Simulate order update
757
+ console.log("Updating order:", {
758
+ id: orderId,
759
+ product: EditOrderProductInput.value,
760
+ user_email: EditOrderUserEmailInput.value,
761
+ price: EditOrderPriceInput.value,
762
+ image: EditOrderImageInput.value || "",
763
+ });
764
+
765
+ return {
766
+ success: true,
767
+ message: "Order updated successfully",
768
+ orderId: orderId,
769
+ };
770
+ },
771
+ }),
772
+ ]);
773
+ </boltAction>
774
+
775
+ <boltAction type="file" filePath="pages/Page1/apis/deleteOrderApi.ts">
776
+ import {
777
+ Api,
778
+ JavaScript,
779
+ Python,
780
+ Databricks,
781
+ Snowflake,
782
+ PostgreSQL,
783
+ RestApi,
784
+ Email,
785
+ Conditional,
786
+ TryCatch,
787
+ Variables,
788
+ Loop,
789
+ Parallel,
790
+ Throw,
791
+ Return,
792
+ } from "@superblocksteam/library";
793
+
794
+ export default new Api("deleteOrderApi", [
795
+ new JavaScript("deleteOrder", {
796
+ fn: ({ OrdersTable }) => {
797
+ const orderId = OrdersTable.selectedRow?.id;
798
+ if (!orderId) {
799
+ throw new Error("No order selected for deletion");
800
+ }
801
+
802
+ // Simulate order deletion
803
+ console.log("Deleting order:", {
804
+ id: orderId,
805
+ product: OrdersTable.selectedRow?.product,
806
+ user_email: OrdersTable.selectedRow?.user_email,
807
+ });
808
+
809
+ return {
810
+ success: true,
811
+ message: "Order deleted successfully",
812
+ deletedOrderId: orderId,
813
+ };
814
+ },
815
+ }),
816
+ ]);
817
+ </boltAction>
818
+ </boltArtifact>
819
+
820
+ The order management app is now complete with all the requested features:
821
+
822
+ ## **Key Features:**
823
+
824
+ ### **Metrics Dashboard**
825
+ - **Total Orders**: Count of all records from DemoOrders
826
+ - **Total Revenue**: Sum of price field from DemoOrders
827
+ - **Orders This Month**: Count of orders from current month
828
+ - **Active Shipments**: Count of records in DemoShipping SHIPPING_STATUS table
829
+
830
+ ### **Orders Management**
831
+ - **Orders Table**: Displays all orders with id, product, user_email, date_purchased, price
832
+ - **Product Filter**: Real-time text filtering on product names
833
+ - **CRUD Operations**:
834
+ - **Create**: Add new orders with product, email, price, and optional image
835
+ - **Update**: Edit existing orders (click row to edit)
836
+ - **Delete**: Remove orders (delete button in edit modal)
837
+ - **View Details**: See full order info plus shipping status (click "View Details" button)
838
+
839
+ ### **Shipping Integration**
840
+ - **Order Details Modal**: Shows order information plus shipping status and recent activity from DemoShipping tables
841
+ - **Real-time Data**: Fetches shipping status and history by ORDER_ID
842
+
843
+ ### **User Experience**
844
+ - Clean, professional interface with metric cards
845
+ - Intuitive modals for all CRUD operations
846
+ - Real-time filtering and data updates
847
+ - Proper validation and error handling
848
+ - Responsive design with consistent spacing
849
+
850
+ The app automatically loads metrics and orders data on page load, and all operations refresh the data to keep everything in sync.`;
851
+ //# sourceMappingURL=orders-app.js.map