@vertesia/ui 1.4.0 → 1.5.0-dev.20260713.113008Z

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 (344) hide show
  1. package/lib/core/components/InputList.d.ts.map +1 -1
  2. package/lib/core/components/InputList.js +3 -2
  3. package/lib/core/components/InputList.js.map +1 -1
  4. package/lib/core/components/SelectList.d.ts.map +1 -1
  5. package/lib/core/components/SelectList.js +1 -1
  6. package/lib/core/components/SelectList.js.map +1 -1
  7. package/lib/core/components/TagsInput.d.ts.map +1 -1
  8. package/lib/core/components/TagsInput.js +36 -4
  9. package/lib/core/components/TagsInput.js.map +1 -1
  10. package/lib/core/components/popup/Popup.js +2 -1
  11. package/lib/core/components/popup/Popup.js.map +1 -1
  12. package/lib/core/components/popup/position.d.ts.map +1 -1
  13. package/lib/core/components/popup/position.js +3 -6
  14. package/lib/core/components/popup/position.js.map +1 -1
  15. package/lib/core/components/shadcn/badge.d.ts +2 -2
  16. package/lib/core/components/shadcn/badge.d.ts.map +1 -1
  17. package/lib/core/components/shadcn/badge.js +3 -0
  18. package/lib/core/components/shadcn/badge.js.map +1 -1
  19. package/lib/core/components/shadcn/breadcrumb.d.ts.map +1 -1
  20. package/lib/core/components/shadcn/breadcrumb.js +2 -2
  21. package/lib/core/components/shadcn/breadcrumb.js.map +1 -1
  22. package/lib/core/components/shadcn/filters/filterBar.d.ts.map +1 -1
  23. package/lib/core/components/shadcn/filters/filterBar.js +1 -3
  24. package/lib/core/components/shadcn/filters/filterBar.js.map +1 -1
  25. package/lib/core/components/shadcn/resizeable.d.ts +1 -1
  26. package/lib/core/components/shadcn/resizeable.d.ts.map +1 -1
  27. package/lib/core/components/shadcn/resizeable.js +12 -2
  28. package/lib/core/components/shadcn/resizeable.js.map +1 -1
  29. package/lib/core/components/shadcn/selectBox.d.ts +7 -1
  30. package/lib/core/components/shadcn/selectBox.d.ts.map +1 -1
  31. package/lib/core/components/shadcn/selectBox.js +29 -12
  32. package/lib/core/components/shadcn/selectBox.js.map +1 -1
  33. package/lib/core/components/table/index.d.ts.map +1 -1
  34. package/lib/core/components/table/index.js +1 -1
  35. package/lib/core/components/table/index.js.map +1 -1
  36. package/lib/core/hooks/useIntersectionObserver.d.ts.map +1 -1
  37. package/lib/core/hooks/useIntersectionObserver.js +3 -1
  38. package/lib/core/hooks/useIntersectionObserver.js.map +1 -1
  39. package/lib/features/agent/chat/AgentRightPanel.d.ts.map +1 -1
  40. package/lib/features/agent/chat/AgentRightPanel.js +3 -6
  41. package/lib/features/agent/chat/AgentRightPanel.js.map +1 -1
  42. package/lib/features/agent/chat/AnimatedThinkingDots.d.ts.map +1 -1
  43. package/lib/features/agent/chat/AnimatedThinkingDots.js +1 -1
  44. package/lib/features/agent/chat/AnimatedThinkingDots.js.map +1 -1
  45. package/lib/features/agent/chat/AskUserWidget.d.ts.map +1 -1
  46. package/lib/features/agent/chat/AskUserWidget.js +4 -3
  47. package/lib/features/agent/chat/AskUserWidget.js.map +1 -1
  48. package/lib/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
  49. package/lib/features/agent/chat/ModernAgentConversation.js +56 -11
  50. package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
  51. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts +8 -1
  52. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
  53. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +40 -31
  54. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  55. package/lib/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.js +3 -3
  56. package/lib/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.js.map +1 -1
  57. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.d.ts.map +1 -1
  58. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js +5 -1
  59. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
  60. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +3 -7
  61. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  62. package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.d.ts.map +1 -1
  63. package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.js +5 -5
  64. package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.js.map +1 -1
  65. package/lib/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.d.ts.map +1 -1
  66. package/lib/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js +4 -4
  67. package/lib/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js.map +1 -1
  68. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
  69. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +3 -3
  70. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
  71. package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.d.ts.map +1 -1
  72. package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js +156 -8
  73. package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js.map +1 -1
  74. package/lib/features/agent/chat/hooks/useFileProcessing.d.ts +1 -0
  75. package/lib/features/agent/chat/hooks/useFileProcessing.d.ts.map +1 -1
  76. package/lib/features/agent/chat/hooks/useFileProcessing.js +37 -3
  77. package/lib/features/agent/chat/hooks/useFileProcessing.js.map +1 -1
  78. package/lib/features/facets/AgentRunnerFacetsNav.d.ts.map +1 -1
  79. package/lib/features/facets/AgentRunnerFacetsNav.js +1 -1
  80. package/lib/features/facets/AgentRunnerFacetsNav.js.map +1 -1
  81. package/lib/features/facets/InteractionsFacetsNav.d.ts +10 -1
  82. package/lib/features/facets/InteractionsFacetsNav.d.ts.map +1 -1
  83. package/lib/features/facets/InteractionsFacetsNav.js +14 -5
  84. package/lib/features/facets/InteractionsFacetsNav.js.map +1 -1
  85. package/lib/features/facets/PromptsFacetsNav.d.ts.map +1 -1
  86. package/lib/features/facets/PromptsFacetsNav.js +12 -1
  87. package/lib/features/facets/PromptsFacetsNav.js.map +1 -1
  88. package/lib/features/facets/RunsFacetsNav.d.ts.map +1 -1
  89. package/lib/features/facets/RunsFacetsNav.js +1 -1
  90. package/lib/features/facets/RunsFacetsNav.js.map +1 -1
  91. package/lib/features/magic-pdf/AnnotatedImageSlider.d.ts.map +1 -1
  92. package/lib/features/magic-pdf/AnnotatedImageSlider.js +1 -3
  93. package/lib/features/magic-pdf/AnnotatedImageSlider.js.map +1 -1
  94. package/lib/features/magic-pdf/MagicPdfProvider.js +2 -3
  95. package/lib/features/magic-pdf/MagicPdfProvider.js.map +1 -1
  96. package/lib/features/store/objects/DocumentSearchResults.d.ts +6 -2
  97. package/lib/features/store/objects/DocumentSearchResults.d.ts.map +1 -1
  98. package/lib/features/store/objects/DocumentSearchResults.js +6 -6
  99. package/lib/features/store/objects/DocumentSearchResults.js.map +1 -1
  100. package/lib/features/store/objects/components/ContentOverview.js +1 -1
  101. package/lib/features/store/objects/components/ContentOverview.js.map +1 -1
  102. package/lib/features/store/objects/components/DocumentIcon.d.ts.map +1 -1
  103. package/lib/features/store/objects/components/DocumentIcon.js +1 -1
  104. package/lib/features/store/objects/components/DocumentIcon.js.map +1 -1
  105. package/lib/features/store/objects/components/DocumentInput.js.map +1 -1
  106. package/lib/features/store/objects/search/DocumentSearchContext.d.ts +4 -4
  107. package/lib/features/store/objects/search/DocumentSearchContext.d.ts.map +1 -1
  108. package/lib/features/store/objects/search/DocumentSearchContext.js +1 -1
  109. package/lib/features/store/objects/search/DocumentSearchContext.js.map +1 -1
  110. package/lib/features/store/objects/selection/ObjectsActionContext.d.ts.map +1 -1
  111. package/lib/features/store/objects/selection/ObjectsActionContext.js +2 -25
  112. package/lib/features/store/objects/selection/ObjectsActionContext.js.map +1 -1
  113. package/lib/features/store/objects/selection/ObjectsActionContextClass.d.ts +0 -2
  114. package/lib/features/store/objects/selection/ObjectsActionContextClass.d.ts.map +1 -1
  115. package/lib/features/store/objects/selection/ObjectsActionContextClass.js +1 -7
  116. package/lib/features/store/objects/selection/ObjectsActionContextClass.js.map +1 -1
  117. package/lib/features/store/objects/selection/ObjectsActionHooks.d.ts +0 -1
  118. package/lib/features/store/objects/selection/ObjectsActionHooks.d.ts.map +1 -1
  119. package/lib/features/store/objects/selection/ObjectsActionHooks.js +0 -10
  120. package/lib/features/store/objects/selection/ObjectsActionHooks.js.map +1 -1
  121. package/lib/features/store/objects/selection/SelectionActions.d.ts +4 -0
  122. package/lib/features/store/objects/selection/SelectionActions.d.ts.map +1 -1
  123. package/lib/features/store/objects/selection/SelectionActions.js +4 -18
  124. package/lib/features/store/objects/selection/SelectionActions.js.map +1 -1
  125. package/lib/features/store/objects/selection/actions/DeleteObjectsAction.d.ts.map +1 -1
  126. package/lib/features/store/objects/selection/actions/DeleteObjectsAction.js +16 -7
  127. package/lib/features/store/objects/selection/actions/DeleteObjectsAction.js.map +1 -1
  128. package/lib/features/store/objects/selection/actions/StartWorkflowButton.d.ts +7 -0
  129. package/lib/features/store/objects/selection/actions/StartWorkflowButton.d.ts.map +1 -0
  130. package/lib/features/store/objects/selection/actions/StartWorkflowButton.js +51 -0
  131. package/lib/features/store/objects/selection/actions/StartWorkflowButton.js.map +1 -0
  132. package/lib/features/store/objects/selection/actions/index.d.ts +0 -1
  133. package/lib/features/store/objects/selection/actions/index.d.ts.map +1 -1
  134. package/lib/features/store/objects/selection/actions/index.js +0 -1
  135. package/lib/features/store/objects/selection/actions/index.js.map +1 -1
  136. package/lib/features/store/types/ContentObjectTypesSearch.d.ts.map +1 -1
  137. package/lib/features/store/types/ContentObjectTypesSearch.js +55 -3
  138. package/lib/features/store/types/ContentObjectTypesSearch.js.map +1 -1
  139. package/lib/features/store/types/ContentObjectTypesTable.d.ts +5 -1
  140. package/lib/features/store/types/ContentObjectTypesTable.d.ts.map +1 -1
  141. package/lib/features/store/types/ContentObjectTypesTable.js +4 -2
  142. package/lib/features/store/types/ContentObjectTypesTable.js.map +1 -1
  143. package/lib/features/store/types/search/ObjectTypeSearchContext.js +1 -1
  144. package/lib/features/store/types/search/ObjectTypeSearchContext.js.map +1 -1
  145. package/lib/i18n/locales/ar.json +17 -0
  146. package/lib/i18n/locales/de.json +17 -0
  147. package/lib/i18n/locales/en.json +33 -0
  148. package/lib/i18n/locales/es.json +17 -0
  149. package/lib/i18n/locales/fr.json +17 -0
  150. package/lib/i18n/locales/it.json +17 -0
  151. package/lib/i18n/locales/ja.json +17 -0
  152. package/lib/i18n/locales/ko.json +17 -0
  153. package/lib/i18n/locales/pt.json +17 -0
  154. package/lib/i18n/locales/ru.json +17 -0
  155. package/lib/i18n/locales/tr.json +17 -0
  156. package/lib/i18n/locales/zh-TW.json +17 -0
  157. package/lib/i18n/locales/zh.json +17 -0
  158. package/lib/layout/Sidebar.d.ts +5 -1
  159. package/lib/layout/Sidebar.d.ts.map +1 -1
  160. package/lib/layout/Sidebar.js.map +1 -1
  161. package/lib/router/NestedRouterProvider.d.ts +1 -1
  162. package/lib/router/NestedRouterProvider.d.ts.map +1 -1
  163. package/lib/router/NestedRouterProvider.js +2 -2
  164. package/lib/router/NestedRouterProvider.js.map +1 -1
  165. package/lib/router/Redirect.d.ts +13 -0
  166. package/lib/router/Redirect.d.ts.map +1 -0
  167. package/lib/router/Redirect.js +20 -0
  168. package/lib/router/Redirect.js.map +1 -0
  169. package/lib/router/Router.d.ts.map +1 -1
  170. package/lib/router/Router.js +1 -2
  171. package/lib/router/Router.js.map +1 -1
  172. package/lib/router/index.d.ts +1 -0
  173. package/lib/router/index.d.ts.map +1 -1
  174. package/lib/router/index.js +1 -0
  175. package/lib/router/index.js.map +1 -1
  176. package/lib/session/DevSessionProvider.d.ts +8 -0
  177. package/lib/session/DevSessionProvider.d.ts.map +1 -0
  178. package/lib/session/DevSessionProvider.js +33 -0
  179. package/lib/session/DevSessionProvider.js.map +1 -0
  180. package/lib/session/UserSessionProvider.d.ts.map +1 -1
  181. package/lib/session/UserSessionProvider.js +16 -2
  182. package/lib/session/UserSessionProvider.js.map +1 -1
  183. package/lib/session/auth/composable.d.ts +10 -1
  184. package/lib/session/auth/composable.d.ts.map +1 -1
  185. package/lib/session/auth/composable.js +38 -2
  186. package/lib/session/auth/composable.js.map +1 -1
  187. package/lib/session/index.d.ts +1 -0
  188. package/lib/session/index.d.ts.map +1 -1
  189. package/lib/session/index.js +1 -0
  190. package/lib/session/index.js.map +1 -1
  191. package/lib/shell/VertesiaShell.d.ts +3 -1
  192. package/lib/shell/VertesiaShell.d.ts.map +1 -1
  193. package/lib/shell/VertesiaShell.js +5 -4
  194. package/lib/shell/VertesiaShell.js.map +1 -1
  195. package/lib/shell/login/SignInRestrictedEnvStep.d.ts +14 -0
  196. package/lib/shell/login/SignInRestrictedEnvStep.d.ts.map +1 -0
  197. package/lib/shell/login/SignInRestrictedEnvStep.js +50 -0
  198. package/lib/shell/login/SignInRestrictedEnvStep.js.map +1 -0
  199. package/lib/shell/login/SigninScreen.d.ts.map +1 -1
  200. package/lib/shell/login/SigninScreen.js +16 -3
  201. package/lib/shell/login/SigninScreen.js.map +1 -1
  202. package/lib/shell/login/productionUrl.d.ts +16 -0
  203. package/lib/shell/login/productionUrl.d.ts.map +1 -0
  204. package/lib/shell/login/productionUrl.js +19 -0
  205. package/lib/shell/login/productionUrl.js.map +1 -0
  206. package/lib/shell/login/signInUtils.d.ts.map +1 -1
  207. package/lib/shell/login/signInUtils.js +14 -1
  208. package/lib/shell/login/signInUtils.js.map +1 -1
  209. package/lib/vertesia-ui-core.js +95 -2
  210. package/lib/vertesia-ui-core.js.map +1 -1
  211. package/lib/vertesia-ui-env.js +2 -2
  212. package/lib/vertesia-ui-env.js.map +1 -1
  213. package/lib/vertesia-ui-features.js +454 -2
  214. package/lib/vertesia-ui-features.js.map +1 -1
  215. package/lib/vertesia-ui-i18n.js +41 -2
  216. package/lib/vertesia-ui-i18n.js.map +1 -1
  217. package/lib/vertesia-ui-layout.js +2 -2
  218. package/lib/vertesia-ui-layout.js.map +1 -1
  219. package/lib/vertesia-ui-router.js +2 -2
  220. package/lib/vertesia-ui-router.js.map +1 -1
  221. package/lib/vertesia-ui-session.js +2 -2
  222. package/lib/vertesia-ui-session.js.map +1 -1
  223. package/lib/vertesia-ui-shell.js +2 -2
  224. package/lib/vertesia-ui-shell.js.map +1 -1
  225. package/lib/vertesia-ui-widgets.js +9 -2
  226. package/lib/vertesia-ui-widgets.js.map +1 -1
  227. package/lib/widgets/json-view/JSONCode.d.ts.map +1 -1
  228. package/lib/widgets/json-view/JSONCode.js +1 -1
  229. package/lib/widgets/json-view/JSONCode.js.map +1 -1
  230. package/lib/widgets/json-view/JSONTable.d.ts.map +1 -1
  231. package/lib/widgets/json-view/JSONTable.js +1 -1
  232. package/lib/widgets/json-view/JSONTable.js.map +1 -1
  233. package/lib/widgets/markdown/ArtifactContentRenderer.d.ts.map +1 -1
  234. package/lib/widgets/markdown/ArtifactContentRenderer.js +1 -1
  235. package/lib/widgets/markdown/ArtifactContentRenderer.js.map +1 -1
  236. package/lib/widgets/markdown/CodeBlockPlaceholder.d.ts.map +1 -1
  237. package/lib/widgets/markdown/CodeBlockPlaceholder.js +1 -1
  238. package/lib/widgets/markdown/CodeBlockPlaceholder.js.map +1 -1
  239. package/lib/widgets/monacoEditor/foldingProviders.d.ts.map +1 -1
  240. package/lib/widgets/monacoEditor/foldingProviders.js +5 -10
  241. package/lib/widgets/monacoEditor/foldingProviders.js.map +1 -1
  242. package/lib/widgets/schema-editor/ManagedSchema.d.ts.map +1 -1
  243. package/lib/widgets/schema-editor/ManagedSchema.js +1 -2
  244. package/lib/widgets/schema-editor/ManagedSchema.js.map +1 -1
  245. package/lib/widgets/upload/UploadResultCategory.d.ts.map +1 -1
  246. package/lib/widgets/upload/UploadResultCategory.js +1 -1
  247. package/lib/widgets/upload/UploadResultCategory.js.map +1 -1
  248. package/lib/widgets/xml-viewer/components/TextElement/index.d.ts.map +1 -1
  249. package/lib/widgets/xml-viewer/components/TextElement/index.js +1 -1
  250. package/lib/widgets/xml-viewer/components/TextElement/index.js.map +1 -1
  251. package/package.json +38 -43
  252. package/src/core/components/InputList.tsx +5 -10
  253. package/src/core/components/SelectList.tsx +7 -2
  254. package/src/core/components/TagsInput.tsx +41 -4
  255. package/src/core/components/popup/Popup.tsx +3 -3
  256. package/src/core/components/popup/position.ts +3 -6
  257. package/src/core/components/shadcn/badge.tsx +3 -0
  258. package/src/core/components/shadcn/breadcrumb.tsx +2 -4
  259. package/src/core/components/shadcn/filters/filterBar.tsx +2 -3
  260. package/src/core/components/shadcn/resizeable.test.tsx +77 -0
  261. package/src/core/components/shadcn/resizeable.tsx +28 -2
  262. package/src/core/components/shadcn/selectBox.tsx +70 -36
  263. package/src/core/components/table/index.tsx +1 -2
  264. package/src/core/hooks/useIntersectionObserver.tsx +3 -1
  265. package/src/features/agent/chat/AgentRightPanel.tsx +5 -6
  266. package/src/features/agent/chat/AnimatedThinkingDots.tsx +1 -2
  267. package/src/features/agent/chat/AskUserWidget.test.tsx +49 -0
  268. package/src/features/agent/chat/AskUserWidget.tsx +32 -22
  269. package/src/features/agent/chat/ModernAgentConversation.test.tsx +198 -1
  270. package/src/features/agent/chat/ModernAgentConversation.tsx +62 -15
  271. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +60 -34
  272. package/src/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.tsx +3 -3
  273. package/src/features/agent/chat/ModernAgentOutput/MessageInput.test.tsx +25 -0
  274. package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +5 -1
  275. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +30 -30
  276. package/src/features/agent/chat/ModernAgentOutput/PlanPanel.tsx +5 -6
  277. package/src/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.tsx +4 -5
  278. package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +3 -5
  279. package/src/features/agent/chat/ModernAgentOutput/WorkstreamTabs.tsx +326 -42
  280. package/src/features/agent/chat/hooks/useFileProcessing.test.tsx +70 -0
  281. package/src/features/agent/chat/hooks/useFileProcessing.ts +37 -6
  282. package/src/features/facets/AgentRunnerFacetsNav.tsx +1 -2
  283. package/src/features/facets/InteractionsFacetsNav.tsx +30 -5
  284. package/src/features/facets/PromptsFacetsNav.tsx +13 -1
  285. package/src/features/facets/RunsFacetsNav.tsx +1 -2
  286. package/src/features/magic-pdf/AnnotatedImageSlider.tsx +1 -2
  287. package/src/features/magic-pdf/MagicPdfProvider.tsx +4 -4
  288. package/src/features/store/objects/DocumentSearchResults.tsx +11 -1
  289. package/src/features/store/objects/components/ContentOverview.tsx +1 -2
  290. package/src/features/store/objects/components/DocumentIcon.tsx +1 -2
  291. package/src/features/store/objects/components/DocumentInput.tsx +2 -2
  292. package/src/features/store/objects/search/DocumentSearchContext.test.ts +2 -2
  293. package/src/features/store/objects/search/DocumentSearchContext.ts +3 -3
  294. package/src/features/store/objects/selection/ObjectsActionContext.tsx +2 -27
  295. package/src/features/store/objects/selection/ObjectsActionContextClass.ts +1 -7
  296. package/src/features/store/objects/selection/ObjectsActionHooks.ts +0 -11
  297. package/src/features/store/objects/selection/SelectionActions.tsx +9 -34
  298. package/src/features/store/objects/selection/actions/DeleteObjectsAction.tsx +40 -7
  299. package/src/features/store/objects/selection/actions/StartWorkflowButton.tsx +104 -0
  300. package/src/features/store/objects/selection/actions/index.ts +0 -1
  301. package/src/features/store/types/ContentObjectTypesSearch.tsx +110 -1
  302. package/src/features/store/types/ContentObjectTypesTable.tsx +42 -3
  303. package/src/features/store/types/search/ObjectTypeSearchContext.tsx +1 -1
  304. package/src/i18n/locales/ar.json +17 -0
  305. package/src/i18n/locales/de.json +17 -0
  306. package/src/i18n/locales/en.json +33 -0
  307. package/src/i18n/locales/es.json +17 -0
  308. package/src/i18n/locales/fr.json +17 -0
  309. package/src/i18n/locales/it.json +17 -0
  310. package/src/i18n/locales/ja.json +17 -0
  311. package/src/i18n/locales/ko.json +17 -0
  312. package/src/i18n/locales/pt.json +17 -0
  313. package/src/i18n/locales/ru.json +17 -0
  314. package/src/i18n/locales/tr.json +17 -0
  315. package/src/i18n/locales/zh-TW.json +17 -0
  316. package/src/i18n/locales/zh.json +17 -0
  317. package/src/layout/Sidebar.tsx +6 -1
  318. package/src/router/NestedRouterProvider.tsx +2 -2
  319. package/src/router/Redirect.tsx +29 -0
  320. package/src/router/Router.tsx +1 -2
  321. package/src/router/index.ts +1 -0
  322. package/src/session/DevSessionProvider.tsx +46 -0
  323. package/src/session/UserSessionProvider.tsx +18 -2
  324. package/src/session/auth/composable.ts +41 -3
  325. package/src/session/index.ts +1 -0
  326. package/src/shell/VertesiaShell.tsx +27 -14
  327. package/src/shell/login/SignInRestrictedEnvStep.tsx +87 -0
  328. package/src/shell/login/SigninScreen.tsx +29 -16
  329. package/src/shell/login/productionUrl.test.ts +19 -0
  330. package/src/shell/login/productionUrl.ts +18 -0
  331. package/src/shell/login/signInUtils.ts +14 -1
  332. package/src/widgets/json-view/JSONCode.tsx +1 -2
  333. package/src/widgets/json-view/JSONTable.tsx +1 -2
  334. package/src/widgets/markdown/ArtifactContentRenderer.tsx +4 -7
  335. package/src/widgets/markdown/CodeBlockPlaceholder.tsx +1 -2
  336. package/src/widgets/monacoEditor/foldingProviders.ts +10 -15
  337. package/src/widgets/schema-editor/ManagedSchema.ts +1 -2
  338. package/src/widgets/upload/UploadResultCategory.tsx +2 -3
  339. package/src/widgets/xml-viewer/components/TextElement/index.tsx +1 -2
  340. package/lib/features/store/objects/selection/actions/StartWorkflowComponent.d.ts +0 -4
  341. package/lib/features/store/objects/selection/actions/StartWorkflowComponent.d.ts.map +0 -1
  342. package/lib/features/store/objects/selection/actions/StartWorkflowComponent.js +0 -77
  343. package/lib/features/store/objects/selection/actions/StartWorkflowComponent.js.map +0 -1
  344. package/src/features/store/objects/selection/actions/StartWorkflowComponent.tsx +0 -127
@@ -2,11 +2,12 @@ import type { SignupData, SignupPayload } from '@vertesia/common';
2
2
  import { Env } from '@vertesia/ui/env';
3
3
  import { useUITranslation } from '@vertesia/ui/i18n';
4
4
  import { RegionTag } from '@vertesia/ui/layout';
5
- import { UserNotFoundError, useUserSession, useUXTracking } from '@vertesia/ui/session';
5
+ import { RestrictedEnvironmentError, UserNotFoundError, useUserSession, useUXTracking } from '@vertesia/ui/session';
6
6
  import { useCallback, useEffect, useState } from 'react';
7
7
  import SignInAuthPending from './SignInAuthPending';
8
8
  import SignInEmailStep, { type TenantInfo } from './SignInEmailStep';
9
9
  import SignInProvidersStep from './SignInProvidersStep';
10
+ import SignInRestrictedEnvStep from './SignInRestrictedEnvStep';
10
11
  import SignInReturningStep from './SignInReturningStep';
11
12
  import SignInTenantBlockedStep from './SignInTenantBlockedStep';
12
13
  import SignInTenantStep from './SignInTenantStep';
@@ -64,7 +65,7 @@ function matchesPathPrefix(pathname: string, prefix?: string | string[]) {
64
65
  });
65
66
  }
66
67
 
67
- type Mode = 'email' | 'providers' | 'tenant' | 'blocked' | 'returning' | 'pending' | 'signup';
68
+ type Mode = 'email' | 'providers' | 'tenant' | 'blocked' | 'returning' | 'pending' | 'signup' | 'restricted';
68
69
 
69
70
  function SigninScreenImpl({
70
71
  isNested = false,
@@ -97,6 +98,8 @@ function SigninScreenImpl({
97
98
  if (!authError) return;
98
99
  if (authError instanceof UserNotFoundError) {
99
100
  setMode('signup');
101
+ } else if (authError instanceof RestrictedEnvironmentError) {
102
+ setMode('restricted');
100
103
  } else if (isInviteRequiredError(authError)) {
101
104
  const pending = readPendingSignin();
102
105
  if (pending) setEmail(pending.email);
@@ -179,7 +182,10 @@ function SigninScreenImpl({
179
182
  };
180
183
 
181
184
  const shouldHideTransientAuthError =
182
- suppressAuthError && authError !== undefined && !(authError instanceof UserNotFoundError);
185
+ suppressAuthError &&
186
+ authError !== undefined &&
187
+ !(authError instanceof UserNotFoundError) &&
188
+ !(authError instanceof RestrictedEnvironmentError);
183
189
 
184
190
  if (isLoading || user || shouldHideTransientAuthError) return null;
185
191
 
@@ -194,6 +200,8 @@ function SigninScreenImpl({
194
200
  onBack={startOver}
195
201
  />
196
202
  );
203
+ } else if (mode === 'restricted') {
204
+ content = <SignInRestrictedEnvStep onUseDifferentEmail={startOver} />;
197
205
  } else if (mode === 'signup' && !localStorage.getItem('tenantName')) {
198
206
  content = <SignupForm onSignup={onSignup} goBack={startOver} />;
199
207
  } else if (mode === 'tenant' && tenant) {
@@ -231,20 +239,25 @@ function SigninScreenImpl({
231
239
 
232
240
  {content}
233
241
 
234
- {authError && !(authError instanceof UserNotFoundError) && !isInviteRequiredError(authError) && (
235
- <div className="mt-6 max-w-[420px] text-center text-sm text-muted">
236
- <div>
237
- {t('auth.signInError')}
238
- <br />
239
- {t('auth.signInErrorContact')}
240
- <a className="text-info mx-1" href="mailto:support@vertesiahq.com">
241
- support@vertesiahq.com
242
- </a>
243
- {t('auth.signInErrorPersists')}
244
- <pre className="mt-2 text-xs">{t('auth.error', { message: authError.message })}</pre>
242
+ {authError &&
243
+ !(authError instanceof UserNotFoundError) &&
244
+ !(authError instanceof RestrictedEnvironmentError) &&
245
+ !isInviteRequiredError(authError) && (
246
+ <div className="mt-6 max-w-[420px] text-center text-sm text-muted">
247
+ <div>
248
+ {t('auth.signInError')}
249
+ <br />
250
+ {t('auth.signInErrorContact')}
251
+ <a className="text-info mx-1" href="mailto:support@vertesiahq.com">
252
+ support@vertesiahq.com
253
+ </a>
254
+ {t('auth.signInErrorPersists')}
255
+ <pre className="mt-2 text-xs">
256
+ {t('auth.error', { message: authError.message })}
257
+ </pre>
258
+ </div>
245
259
  </div>
246
- </div>
247
- )}
260
+ )}
248
261
 
249
262
  <div className="flex items-center gap-5 mt-10 text-xs text-muted-foreground">
250
263
  <a href="https://vertesiahq.com/privacy" className="hover:text-foreground transition">
@@ -0,0 +1,19 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { getProductionAppUrl } from './productionUrl.js';
3
+
4
+ describe('getProductionAppUrl', () => {
5
+ it('sends a non-US region to its own regional production site', () => {
6
+ expect(getProductionAppUrl('eu1')).toBe('https://cloud.eu1.vertesia.io/');
7
+ expect(getProductionAppUrl('jp1')).toBe('https://cloud.jp1.vertesia.io/');
8
+ });
9
+
10
+ it('sends US regions to the canonical non-regional production site', () => {
11
+ expect(getProductionAppUrl('us1')).toBe('https://cloud.vertesia.io/');
12
+ expect(getProductionAppUrl('us')).toBe('https://cloud.vertesia.io/');
13
+ });
14
+
15
+ it('falls back to the canonical production site when the region is unknown', () => {
16
+ expect(getProductionAppUrl(undefined)).toBe('https://cloud.vertesia.io/');
17
+ expect(getProductionAppUrl('')).toBe('https://cloud.vertesia.io/');
18
+ });
19
+ });
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Resolve the URL of the production Vertesia web application for a given deployment region. Used by
3
+ * the "restricted environment" sign-in step to send a user without early access to production, where
4
+ * they do have access — in their own region, never another one (an EU user must not land on the US
5
+ * site, and vice versa).
6
+ *
7
+ * The mapping mirrors the server's `detectUiUrl` production branch (packages/server-common):
8
+ * - US (`us` / `us1`) or unknown region → `https://cloud.vertesia.io/` (canonical, non-regional)
9
+ * - any other region (e.g. `eu1`, `jp1`) → `https://cloud.{region}.vertesia.io/`
10
+ *
11
+ * Region is preferred over parsing the current hostname because it is well-defined for every serving
12
+ * pattern (including the direct-routing `*.ui.{region}.vertesia.io` hosts, which carry no
13
+ * `preview.`/`preprod.` prefix to strip). Callers pass `Env.region` from `@vertesia/ui/env`.
14
+ */
15
+ export function getProductionAppUrl(region?: string): string {
16
+ const isNonUsRegion = region && region !== 'us' && region !== 'us1';
17
+ return isNonUsRegion ? `https://cloud.${region}.vertesia.io/` : 'https://cloud.vertesia.io/';
18
+ }
@@ -222,8 +222,21 @@ export function firstNameFromEmail(email: string): string {
222
222
  return first.charAt(0).toUpperCase() + first.slice(1).toLowerCase();
223
223
  }
224
224
 
225
+ function hasWhitespace(value: string): boolean {
226
+ for (const char of value) {
227
+ if (char.trim() === '') return true;
228
+ }
229
+ return false;
230
+ }
231
+
225
232
  export function isValidEmail(email: string): boolean {
226
- return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test((email || '').trim());
233
+ const value = (email || '').trim();
234
+ const at = value.indexOf('@');
235
+ if (at <= 0 || at !== value.lastIndexOf('@')) return false;
236
+
237
+ const domain = value.slice(at + 1);
238
+ const dot = domain.indexOf('.');
239
+ return dot > 0 && dot < domain.length - 1 && !hasWhitespace(value);
227
240
  }
228
241
 
229
242
  /**
@@ -17,8 +17,7 @@ export function JSONCode({ data, className }: { data: unknown; className?: strin
17
17
  >
18
18
  <code>
19
19
  {lines.map((line, index) => (
20
- // biome-ignore lint/suspicious/noArrayIndexKey: static formatted text lines
21
- <span key={index}>
20
+ <span key={`line-${index}`}>
22
21
  {renderJsonLine(line)}
23
22
  {index < lines.length - 1 ? '\n' : null}
24
23
  </span>
@@ -36,8 +36,7 @@ function formatValue(value: unknown): JSX.Element | string {
36
36
  return (
37
37
  <>
38
38
  {value.map((item, index) => (
39
- // biome-ignore lint/suspicious/noArrayIndexKey: list order is stable for this render
40
- <div className="flex gap-1" key={index}>
39
+ <div className="flex gap-1" key={`item-${index}`}>
41
40
  <span className="text-xs align-top pe-2 font-medium">{index + 1}:</span>
42
41
  <span className="text-xs">{formatValue(item)}</span>
43
42
  </div>
@@ -151,9 +151,8 @@ function TableRenderer({ content }: { content: unknown }): ReactElement {
151
151
  <table className="min-w-full text-sm border-collapse">
152
152
  <thead>
153
153
  <tr className="border-b">
154
- {headers.map((h, i) => (
155
- // biome-ignore lint/suspicious/noArrayIndexKey: list order is stable for this render
156
- <th key={i} className="px-3 py-2 text-start font-medium text-muted">
154
+ {headers.map((h) => (
155
+ <th key={h} className="px-3 py-2 text-start font-medium text-muted">
157
156
  {h}
158
157
  </th>
159
158
  ))}
@@ -161,11 +160,9 @@ function TableRenderer({ content }: { content: unknown }): ReactElement {
161
160
  </thead>
162
161
  <tbody>
163
162
  {rows.slice(0, 100).map((row, i) => (
164
- // biome-ignore lint/suspicious/noArrayIndexKey: list order is stable for this render
165
- <tr key={i} className="border-b border-muted/20">
163
+ <tr key={`row-${i}`} className="border-b border-muted/20">
166
164
  {row.map((cell, j) => (
167
- // biome-ignore lint/suspicious/noArrayIndexKey: list order is stable for this render
168
- <td key={j} className="px-3 py-2">
165
+ <td key={`cell-${j}`} className="px-3 py-2">
169
166
  {cell}
170
167
  </td>
171
168
  ))}
@@ -92,8 +92,7 @@ export function CodeBlockPlaceholder({ type, error, onRetry, message, height }:
92
92
  <div className="flex gap-1">
93
93
  {[...Array(3)].map((_, i) => (
94
94
  <div
95
- // biome-ignore lint/suspicious/noArrayIndexKey: list order is stable for this render
96
- key={i}
95
+ key={`dot-${i}`}
97
96
  className="h-2 w-2 rounded-full bg-muted animate-bounce"
98
97
  style={{ animationDelay: `${i * 150}ms` }}
99
98
  />
@@ -19,9 +19,8 @@ export function registerCustomFoldingProviders(monacoInstance: typeof import('mo
19
19
  if (match) {
20
20
  const level = match[1].length;
21
21
  while (stack.length > 0 && stack[stack.length - 1].level >= level) {
22
- // biome-ignore lint/style/noNonNullAssertion: intentional non-null assertion; TS can't prove narrowing here
23
- const top = stack.pop()!;
24
- if (lineNumber - 1 > top.line) {
22
+ const top = stack.pop();
23
+ if (top && lineNumber - 1 > top.line) {
25
24
  ranges.push({ start: top.line, end: lineNumber - 1 });
26
25
  }
27
26
  }
@@ -30,9 +29,8 @@ export function registerCustomFoldingProviders(monacoInstance: typeof import('mo
30
29
  }
31
30
  const lastLine = lines.length;
32
31
  while (stack.length > 0) {
33
- // biome-ignore lint/style/noNonNullAssertion: intentional non-null assertion; TS can't prove narrowing here
34
- const top = stack.pop()!;
35
- if (lastLine > top.line) {
32
+ const top = stack.pop();
33
+ if (top && lastLine > top.line) {
36
34
  ranges.push({ start: top.line, end: lastLine });
37
35
  }
38
36
  }
@@ -98,14 +96,13 @@ export function registerCustomFoldingProviders(monacoInstance: typeof import('mo
98
96
  braceStack.push(lineNumber);
99
97
  }
100
98
  if (ch === '}' && braceStack.length > 0) {
101
- // biome-ignore lint/style/noNonNullAssertion: intentional non-null assertion; TS can't prove narrowing here
102
- const start = braceStack.pop()!;
99
+ const start = braceStack.pop();
103
100
  // If there is non-whitespace content after `}` on this line
104
101
  // (e.g. "} else {"), end the fold at the previous line so
105
102
  // the continuation is not hidden inside the fold.
106
103
  const restOfLine = line.slice(j + 1).trimStart();
107
104
  const endLine = restOfLine.length > 0 ? lineNumber - 1 : lineNumber;
108
- if (endLine > start) braceRanges.push({ start, end: endLine });
105
+ if (start !== undefined && endLine > start) braceRanges.push({ start, end: endLine });
109
106
  }
110
107
  }
111
108
 
@@ -118,9 +115,8 @@ export function registerCustomFoldingProviders(monacoInstance: typeof import('mo
118
115
  headingStack.length > 0 &&
119
116
  headingStack[headingStack.length - 1].level >= level
120
117
  ) {
121
- // biome-ignore lint/style/noNonNullAssertion: intentional non-null assertion; TS can't prove narrowing here
122
- const top = headingStack.pop()!;
123
- if (lineNumber - 1 > top.line) {
118
+ const top = headingStack.pop();
119
+ if (top && lineNumber - 1 > top.line) {
124
120
  headingRanges.push({ start: top.line, end: lineNumber - 1 });
125
121
  }
126
122
  }
@@ -129,9 +125,8 @@ export function registerCustomFoldingProviders(monacoInstance: typeof import('mo
129
125
  // Template just closed — seal all open heading sections here
130
126
  if (!inTemplate) {
131
127
  while (headingStack.length > 0) {
132
- // biome-ignore lint/style/noNonNullAssertion: intentional non-null assertion; TS can't prove narrowing here
133
- const top = headingStack.pop()!;
134
- if (lineNumber > top.line) {
128
+ const top = headingStack.pop();
129
+ if (top && lineNumber > top.line) {
135
130
  headingRanges.push({ start: top.line, end: lineNumber });
136
131
  }
137
132
  }
@@ -58,8 +58,7 @@ export class ManagedSchema implements SchemaLoader {
58
58
  }
59
59
 
60
60
  get children() {
61
- // biome-ignore lint/style/noNonNullAssertion: intentional non-null assertion; TS can't prove narrowing here
62
- return this.root.children!;
61
+ return this.root.children ?? [];
63
62
  }
64
63
 
65
64
  reload() {
@@ -70,9 +70,8 @@ export function UploadResultCategory({
70
70
  <div id={panelId} className="p-3 border-t border-color-border max-h-48 overflow-y-auto">
71
71
  {items.length > 0 ? (
72
72
  <ul className="space-y-1">
73
- {items.map((item, index) => (
74
- // biome-ignore lint/suspicious/noArrayIndexKey: list order is stable for this render
75
- <li key={index} className="text-sm py-1 px-2 rounded hover:bg-color-muted/10">
73
+ {items.map((item) => (
74
+ <li key={item} className="text-sm py-1 px-2 rounded hover:bg-color-muted/10">
76
75
  {item}
77
76
  </li>
78
77
  ))}
@@ -19,8 +19,7 @@ export function TextElement(props: TextElementProps) {
19
19
  .split('\n')
20
20
  .filter((element) => !!element.trim())
21
21
  .map((line, index) => (
22
- // biome-ignore lint/suspicious/noArrayIndexKey: list order is stable for this render
23
- <div key={`${index}`}>{`${indentation}${line.trim()}`}</div>
22
+ <div key={`line-${index}`}>{`${indentation}${line.trim()}`}</div>
24
23
  ))}
25
24
  </div>
26
25
  ) : (
@@ -1,4 +0,0 @@
1
- import type { ActionComponentTypeProps, ObjectsActionSpec } from '../ObjectsActionSpec';
2
- export declare function StartWorkflowComponent({ action, objectIds, collectionId }: ActionComponentTypeProps): import("react").JSX.Element;
3
- export declare const StartWorkflowAction: ObjectsActionSpec;
4
- //# sourceMappingURL=StartWorkflowComponent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StartWorkflowComponent.d.ts","sourceRoot":"","sources":["../../../../../../src/features/store/objects/selection/actions/StartWorkflowComponent.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAExF,wBAAgB,sBAAsB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,wBAAwB,+BAwCnG;AAGD,eAAO,MAAM,mBAAmB,EAAE,iBAOjC,CAAC"}
@@ -1,77 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Button, Modal, ModalBody, ModalFooter, ModalTitle, SelectList, useToast } from '@vertesia/ui/core';
3
- import { i18nInstance, NAMESPACE, useUITranslation } from '@vertesia/ui/i18n';
4
- import { useUserSession } from '@vertesia/ui/session';
5
- import { useCallback, useState } from 'react';
6
- import { useObjectsActionCallback, useObjectsActionContext } from '../ObjectsActionHooks';
7
- export function StartWorkflowComponent({ action, objectIds, collectionId }) {
8
- const { t } = useUITranslation();
9
- const toast = useToast();
10
- const { client } = useUserSession();
11
- const [isOpen, setOpen] = useState(false);
12
- const callback = useCallback(() => {
13
- setOpen(true);
14
- return Promise.resolve(true);
15
- }, []);
16
- const onStartWorkflow = (workflowId) => {
17
- setOpen(false);
18
- if (!workflowId) {
19
- return;
20
- }
21
- // const objectIds = params.selection.getObjectIds();
22
- // const workflowId = params.action.id;
23
- return client.store.workflows.rules
24
- .execute(workflowId, objectIds, { collection_id: collectionId })
25
- .then(() => {
26
- toast({
27
- title: t('store.actions.workflowStarted'),
28
- status: 'success',
29
- duration: 3000,
30
- });
31
- })
32
- .catch((err) => {
33
- toast({
34
- title: t('store.actions.errorStartingWorkflow'),
35
- status: 'error',
36
- description: err.message,
37
- duration: 9000,
38
- });
39
- });
40
- };
41
- useObjectsActionCallback(action.id, callback);
42
- return _jsx(StartWorkflowModal, { isOpen: isOpen, onClose: onStartWorkflow });
43
- }
44
- const t = i18nInstance.getFixedT(null, NAMESPACE);
45
- export const StartWorkflowAction = {
46
- id: 'startWorkflow',
47
- name: t('store.actions.startWorkflow'),
48
- description: t('store.actions.startWorkflowDesc'),
49
- confirm: false,
50
- hideInList: true,
51
- component: StartWorkflowComponent,
52
- };
53
- function StartWorkflowModal({ isOpen, onClose }) {
54
- const { t } = useUITranslation();
55
- return (_jsxs(Modal, { onClose: () => onClose(undefined), isOpen: isOpen, className: "", children: [_jsx(ModalTitle, { children: t('store.actions.startWorkflowByRule') }), _jsx(StartWorkflowBody, { onClose: onClose })] }));
56
- }
57
- function optionLayout(option) {
58
- return {
59
- label: (_jsxs("div", { children: [_jsx("div", { children: option.name }), _jsx("div", { className: "text-sm text-muted", children: option.description })] })),
60
- reverse: true,
61
- };
62
- }
63
- function StartWorkflowBody({ onClose }) {
64
- const { t } = useUITranslation();
65
- const [selected, setSelected] = useState(undefined);
66
- const context = useObjectsActionContext();
67
- const onSelect = (value) => {
68
- setSelected(value);
69
- };
70
- const onStart = () => {
71
- if (selected) {
72
- onClose(selected.id);
73
- }
74
- };
75
- return (_jsxs("div", { children: [_jsxs(ModalBody, { children: [_jsx("div", { className: "pb-2", children: t('store.actions.chooseWorkflowRule') }), _jsx("div", { className: "max-h-[420px] overflow-y-scroll border-border border rounded-md", children: _jsx(SelectList, { options: context.wfRules, optionLayout: optionLayout, onChange: onSelect, value: selected }) })] }), _jsxs(ModalFooter, { children: [_jsx(Button, { variant: "secondary", onClick: () => onClose(), children: "Cancel" }), _jsx(Button, { onClick: onStart, isDisabled: !selected, children: "Start" })] })] }));
76
- }
77
- //# sourceMappingURL=StartWorkflowComponent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StartWorkflowComponent.js","sourceRoot":"","sources":["../../../../../../src/features/store/objects/selection/actions/StartWorkflowComponent.tsx"],"names":[],"mappings":"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"}
@@ -1,127 +0,0 @@
1
- import { Button, Modal, ModalBody, ModalFooter, ModalTitle, SelectList, useToast } from '@vertesia/ui/core';
2
- import { i18nInstance, NAMESPACE, useUITranslation } from '@vertesia/ui/i18n';
3
- import { useUserSession } from '@vertesia/ui/session';
4
- import { useCallback, useState } from 'react';
5
- import { useObjectsActionCallback, useObjectsActionContext } from '../ObjectsActionHooks';
6
- import type { ActionComponentTypeProps, ObjectsActionSpec } from '../ObjectsActionSpec';
7
-
8
- export function StartWorkflowComponent({ action, objectIds, collectionId }: ActionComponentTypeProps) {
9
- const { t } = useUITranslation();
10
- const toast = useToast();
11
- const { client } = useUserSession();
12
- const [isOpen, setOpen] = useState(false);
13
-
14
- const callback = useCallback(() => {
15
- setOpen(true);
16
- return Promise.resolve(true);
17
- }, []);
18
-
19
- const onStartWorkflow = (workflowId?: string | undefined) => {
20
- setOpen(false);
21
- if (!workflowId) {
22
- return;
23
- }
24
- // const objectIds = params.selection.getObjectIds();
25
- // const workflowId = params.action.id;
26
- return client.store.workflows.rules
27
- .execute(workflowId, objectIds, { collection_id: collectionId })
28
- .then(() => {
29
- toast({
30
- title: t('store.actions.workflowStarted'),
31
- status: 'success',
32
- duration: 3000,
33
- });
34
- })
35
- .catch((err) => {
36
- toast({
37
- title: t('store.actions.errorStartingWorkflow'),
38
- status: 'error',
39
- description: err.message,
40
- duration: 9000,
41
- });
42
- });
43
- };
44
-
45
- useObjectsActionCallback(action.id, callback);
46
-
47
- return <StartWorkflowModal isOpen={isOpen} onClose={onStartWorkflow} />;
48
- }
49
-
50
- const t = i18nInstance.getFixedT(null, NAMESPACE);
51
- export const StartWorkflowAction: ObjectsActionSpec = {
52
- id: 'startWorkflow',
53
- name: t('store.actions.startWorkflow'),
54
- description: t('store.actions.startWorkflowDesc'),
55
- confirm: false,
56
- hideInList: true,
57
- component: StartWorkflowComponent,
58
- };
59
-
60
- interface StartWorkflowModalProps {
61
- isOpen: boolean;
62
- onClose: (workflowId?: string | undefined) => void;
63
- }
64
- function StartWorkflowModal({ isOpen, onClose }: StartWorkflowModalProps) {
65
- const { t } = useUITranslation();
66
- return (
67
- <Modal onClose={() => onClose(undefined)} isOpen={isOpen} className="">
68
- <ModalTitle>{t('store.actions.startWorkflowByRule')}</ModalTitle>
69
- <StartWorkflowBody onClose={onClose} />
70
- </Modal>
71
- );
72
- }
73
-
74
- function optionLayout(option: ObjectsActionSpec) {
75
- return {
76
- label: (
77
- <div>
78
- <div>{option.name}</div>
79
- <div className="text-sm text-muted">{option.description}</div>
80
- </div>
81
- ),
82
- reverse: true,
83
- };
84
- }
85
-
86
- interface StartWorkflowBodyProps {
87
- onClose: (workflowId?: string | undefined) => void;
88
- }
89
- function StartWorkflowBody({ onClose }: StartWorkflowBodyProps) {
90
- const { t } = useUITranslation();
91
- const [selected, setSelected] = useState<ObjectsActionSpec | undefined>(undefined);
92
- const context = useObjectsActionContext();
93
-
94
- const onSelect = (value: ObjectsActionSpec) => {
95
- setSelected(value);
96
- };
97
-
98
- const onStart = () => {
99
- if (selected) {
100
- onClose(selected.id);
101
- }
102
- };
103
-
104
- return (
105
- <div>
106
- <ModalBody>
107
- <div className="pb-2">{t('store.actions.chooseWorkflowRule')}</div>
108
- <div className="max-h-[420px] overflow-y-scroll border-border border rounded-md">
109
- <SelectList
110
- options={context.wfRules}
111
- optionLayout={optionLayout}
112
- onChange={onSelect}
113
- value={selected}
114
- />
115
- </div>
116
- </ModalBody>
117
- <ModalFooter>
118
- <Button variant="secondary" onClick={() => onClose()}>
119
- Cancel
120
- </Button>
121
- <Button onClick={onStart} isDisabled={!selected}>
122
- Start
123
- </Button>
124
- </ModalFooter>
125
- </div>
126
- );
127
- }