@vived/host 5.2.2 → 5.2.3

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 (320) hide show
  1. package/dist/cjs/AppSandbox/Adapters/babylonInspectorSupportedAdapter.js +24 -0
  2. package/dist/cjs/AppSandbox/Adapters/babylonInspectorSupportedAdapter.js.map +1 -0
  3. package/dist/cjs/AppSandbox/Adapters/index.js +1 -0
  4. package/dist/cjs/AppSandbox/Adapters/index.js.map +1 -1
  5. package/dist/cjs/AppSandbox/Controller/index.js +1 -0
  6. package/dist/cjs/AppSandbox/Controller/index.js.map +1 -1
  7. package/dist/cjs/AppSandbox/Controller/setBabylonInspectorSupported.js +13 -0
  8. package/dist/cjs/AppSandbox/Controller/setBabylonInspectorSupported.js.map +1 -0
  9. package/dist/cjs/AppSandbox/Entities/AppSandboxEntity.js +7 -0
  10. package/dist/cjs/AppSandbox/Entities/AppSandboxEntity.js.map +1 -1
  11. package/dist/cjs/AppSandbox/Factories/AppSandboxFeatureFactory.js +1 -0
  12. package/dist/cjs/AppSandbox/Factories/AppSandboxFeatureFactory.js.map +1 -1
  13. package/dist/cjs/AppSandbox/Factories/index.js.map +1 -1
  14. package/dist/cjs/AppSandbox/Mocks/BabylonInspectorSupportedPMMock.js +16 -0
  15. package/dist/cjs/AppSandbox/Mocks/BabylonInspectorSupportedPMMock.js.map +1 -0
  16. package/dist/cjs/AppSandbox/Mocks/index.js +1 -0
  17. package/dist/cjs/AppSandbox/Mocks/index.js.map +1 -1
  18. package/dist/cjs/AppSandbox/PMs/BabylonInspectorSupportedPM.js +37 -0
  19. package/dist/cjs/AppSandbox/PMs/BabylonInspectorSupportedPM.js.map +1 -0
  20. package/dist/cjs/AppSandbox/PMs/DevFeaturesEnabledPM.js.map +1 -1
  21. package/dist/cjs/AppSandbox/PMs/ShowInspectorPM.js.map +1 -1
  22. package/dist/cjs/AppSandbox/PMs/StartInZSpacePM.js.map +1 -1
  23. package/dist/cjs/AppSandbox/PMs/index.js +1 -0
  24. package/dist/cjs/AppSandbox/PMs/index.js.map +1 -1
  25. package/dist/cjs/Apps/Entities/AppEntity.js.map +1 -1
  26. package/dist/cjs/Apps/Entities/AppRepo.js.map +1 -1
  27. package/dist/cjs/Apps/Factories/AppsFeatureFactory.js.map +1 -1
  28. package/dist/cjs/Apps/Factories/index.js.map +1 -1
  29. package/dist/cjs/Apps/UCs/Mounters/MounterUC.js.map +1 -1
  30. package/dist/cjs/Apps/UCs/Mounters/SandboxMounterUC.js.map +1 -1
  31. package/dist/cjs/Apps/UCs/StartAppUC.js.map +1 -1
  32. package/dist/cjs/Apps/UCs/StopAppUC.js.map +1 -1
  33. package/dist/cjs/Apps/index.js.map +1 -1
  34. package/dist/cjs/AssetPlugin/Factories/AssetPluginFeatureFactory.js.map +1 -1
  35. package/dist/cjs/AssetPlugin/Factories/index.js.map +1 -1
  36. package/dist/cjs/Assets/Adapters/assetFileAdapter.js.map +1 -1
  37. package/dist/cjs/Assets/Controllers/archiveAsset.js.map +1 -1
  38. package/dist/cjs/Assets/Controllers/deleteAsset.js.map +1 -1
  39. package/dist/cjs/Assets/Controllers/downloadAssetFile.js.map +1 -1
  40. package/dist/cjs/Assets/Controllers/editAppAsset.js.map +1 -1
  41. package/dist/cjs/Assets/Controllers/fetchAssetFile.js.map +1 -1
  42. package/dist/cjs/Assets/Controllers/getAppAssets.js.map +1 -1
  43. package/dist/cjs/Assets/Controllers/index.js.map +1 -1
  44. package/dist/cjs/Assets/Controllers/newAppAsset.js.map +1 -1
  45. package/dist/cjs/Assets/Controllers/toggleShowArchivedAssets.js.map +1 -1
  46. package/dist/cjs/Assets/Controllers/updateAppAssetMeta.js.map +1 -1
  47. package/dist/cjs/Assets/Controllers/updateAssetFile.js.map +1 -1
  48. package/dist/cjs/Assets/Entities/AppAssetsEntity.js.map +1 -1
  49. package/dist/cjs/Assets/Entities/AssetEntity.js.map +1 -1
  50. package/dist/cjs/Assets/Entities/AssetRepo.js.map +1 -1
  51. package/dist/cjs/Assets/Factories/AssetsFactory.js.map +1 -1
  52. package/dist/cjs/Assets/Factories/SandboxAssetsFactory.js.map +1 -1
  53. package/dist/cjs/Assets/Factories/index.js.map +1 -1
  54. package/dist/cjs/Assets/PMs/AssetFilePM.js.map +1 -1
  55. package/dist/cjs/Assets/PMs/AssetPM.js.map +1 -1
  56. package/dist/cjs/Assets/PMs/ShowArchivedAppAssetPM.js.map +1 -1
  57. package/dist/cjs/Assets/UCs/ArchiveAssetUC.js.map +1 -1
  58. package/dist/cjs/Assets/UCs/DeleteAssetUC.js.map +1 -1
  59. package/dist/cjs/Assets/UCs/DownloadAssetFileUC.js.map +1 -1
  60. package/dist/cjs/Assets/UCs/EditAppAssetUC.js.map +1 -1
  61. package/dist/cjs/Assets/UCs/GetAssetBlobURLUC.js.map +1 -1
  62. package/dist/cjs/Assets/UCs/GetAssetFileUC.js.map +1 -1
  63. package/dist/cjs/Assets/UCs/GetAssetUC.js.map +1 -1
  64. package/dist/cjs/Assets/UCs/NewAppAssetUC.js.map +1 -1
  65. package/dist/cjs/Assets/UCs/NewAssetUC.js.map +1 -1
  66. package/dist/cjs/Assets/UCs/UpdateAppAssetMetaUC.js.map +1 -1
  67. package/dist/cjs/Assets/UCs/UpdateAssetFileUC.js.map +1 -1
  68. package/dist/cjs/Assets/UCs/index.js.map +1 -1
  69. package/dist/cjs/Cache/Factories/CacheFeatureFactory.js.map +1 -1
  70. package/dist/cjs/Cache/Factories/index.js.map +1 -1
  71. package/dist/cjs/ChallengeResults/Entities/ChallengeResults.js.map +1 -1
  72. package/dist/cjs/ChallengeResults/Factories/ChallengeResultsFactory.js.map +1 -1
  73. package/dist/cjs/ChallengeResults/PMs/ChallengeResultsListPM.js.map +1 -1
  74. package/dist/cjs/ChallengeResults/PMs/HasChallengeResultsPM.js.map +1 -1
  75. package/dist/cjs/Dialog/Factories/SandboxDialogFactory.js +1 -2
  76. package/dist/cjs/Dialog/Factories/SandboxDialogFactory.js.map +1 -1
  77. package/dist/cjs/Handler/UCs/SubmitResultHandler.js.map +1 -1
  78. package/dist/cjs/Logger/Factories/SandboxLoggerFactory.js.map +1 -1
  79. package/dist/cjs/Logger/PMs/ForwardLogsToConsolePM.js.map +1 -1
  80. package/dist/cjs/StateMachine/Controllers/index.js.map +1 -1
  81. package/dist/cjs/StateMachine/Controllers/setTransitionDuration.js.map +1 -1
  82. package/dist/cjs/StateMachine/Factories/SandboxStateMachineFactory.js.map +1 -1
  83. package/dist/cjs/StateMachine/PMs/HostStatePM.js.map +1 -1
  84. package/dist/cjs/ThemeColors/Controllers/index.js.map +1 -1
  85. package/dist/cjs/ThemeColors/Controllers/setThemeByName.js.map +1 -1
  86. package/dist/cjs/ThemeColors/Factories/ThemeFactory.js.map +1 -1
  87. package/dist/cjs/ThemeColors/Mocks/MockSetThemeUC.js.map +1 -1
  88. package/dist/cjs/ThemeColors/Mocks/index.js.map +1 -1
  89. package/dist/cjs/VivedAPI/Adapters/apiStageAdapter.js.map +1 -1
  90. package/dist/cjs/VivedAPI/Adapters/index.js.map +1 -1
  91. package/dist/cjs/VivedAPI/Adapters/userTokenAdapter.js.map +1 -1
  92. package/dist/cjs/VivedAPI/Controllers/index.js.map +1 -1
  93. package/dist/cjs/VivedAPI/Controllers/loginUser.js.map +1 -1
  94. package/dist/cjs/VivedAPI/Controllers/logoutUser.js.map +1 -1
  95. package/dist/cjs/VivedAPI/Controllers/setApiStage.js.map +1 -1
  96. package/dist/cjs/VivedAPI/Entities/VivedAPIEntity.js.map +1 -1
  97. package/dist/cjs/VivedAPI/Entities/index.js.map +1 -1
  98. package/dist/cjs/VivedAPI/Factories/SandboxVivedAPIFactory.js.map +1 -1
  99. package/dist/cjs/VivedAPI/Factories/VivedAPIFactory.js.map +1 -1
  100. package/dist/cjs/VivedAPI/Factories/index.js.map +1 -1
  101. package/dist/cjs/VivedAPI/Factories/setupAPI.js.map +1 -1
  102. package/dist/cjs/VivedAPI/Factories/setupVivedAPIForSandbox.js.map +1 -1
  103. package/dist/cjs/VivedAPI/Mocks/MockJsonRequestUC.js.map +1 -1
  104. package/dist/cjs/VivedAPI/Mocks/index.js.map +1 -1
  105. package/dist/cjs/VivedAPI/PMs/ApiStagePM.js.map +1 -1
  106. package/dist/cjs/VivedAPI/PMs/UserTokenPM.js.map +1 -1
  107. package/dist/cjs/VivedAPI/PMs/index.js.map +1 -1
  108. package/dist/cjs/VivedAPI/UCs/BasicFetchUC.js.map +1 -1
  109. package/dist/cjs/VivedAPI/UCs/BlobRequestUC.js.map +1 -1
  110. package/dist/cjs/VivedAPI/UCs/DeleteAssetOnAPIUC.js.map +1 -1
  111. package/dist/cjs/VivedAPI/UCs/FileUploadUC.js.map +1 -1
  112. package/dist/cjs/VivedAPI/UCs/JsonRequestUC.js.map +1 -1
  113. package/dist/cjs/VivedAPI/UCs/PostNewAssetUC.js.map +1 -1
  114. package/dist/cjs/VivedAPI/UCs/SignedAuthTokenUC.js.map +1 -1
  115. package/dist/cjs/VivedAPI/UCs/UserAuthUC.js.map +1 -1
  116. package/dist/cjs/VivedAPI/UCs/index.js.map +1 -1
  117. package/dist/cjs/VivedAPI/index.js.map +1 -1
  118. package/dist/cjs/ZSpaceHost/Adapters/index.js +1 -0
  119. package/dist/cjs/ZSpaceHost/Adapters/index.js.map +1 -1
  120. package/dist/cjs/ZSpaceHost/Adapters/zSpaceIsSupportedAdapter.js +24 -0
  121. package/dist/cjs/ZSpaceHost/Adapters/zSpaceIsSupportedAdapter.js.map +1 -0
  122. package/dist/cjs/ZSpaceHost/Controllers/index.js.map +1 -1
  123. package/dist/cjs/ZSpaceHost/Controllers/setZSpaceIsSupported.js.map +1 -1
  124. package/dist/cjs/ZSpaceHost/Factories/SandboxZSpaceFactory.js +1 -0
  125. package/dist/cjs/ZSpaceHost/Factories/SandboxZSpaceFactory.js.map +1 -1
  126. package/dist/cjs/ZSpaceHost/Factories/setupZSpaceForSandbox.js +1 -0
  127. package/dist/cjs/ZSpaceHost/Factories/setupZSpaceForSandbox.js.map +1 -1
  128. package/dist/cjs/ZSpaceHost/Mocks/ZSpaceIsSupportedPMMock.js +16 -0
  129. package/dist/cjs/ZSpaceHost/Mocks/ZSpaceIsSupportedPMMock.js.map +1 -0
  130. package/dist/cjs/ZSpaceHost/Mocks/index.js +1 -0
  131. package/dist/cjs/ZSpaceHost/Mocks/index.js.map +1 -1
  132. package/dist/cjs/ZSpaceHost/PMs/EmulateZSpacePM.js.map +1 -1
  133. package/dist/cjs/ZSpaceHost/PMs/ZSpaceIsActivePM.js.map +1 -1
  134. package/dist/cjs/ZSpaceHost/PMs/ZSpaceIsSupportedPM.js +40 -0
  135. package/dist/cjs/ZSpaceHost/PMs/ZSpaceIsSupportedPM.js.map +1 -0
  136. package/dist/cjs/ZSpaceHost/PMs/index.js +1 -0
  137. package/dist/cjs/ZSpaceHost/PMs/index.js.map +1 -1
  138. package/dist/esm/AppSandbox/Adapters/babylonInspectorSupportedAdapter.js +21 -0
  139. package/dist/esm/AppSandbox/Adapters/babylonInspectorSupportedAdapter.js.map +1 -0
  140. package/dist/esm/AppSandbox/Adapters/index.js +1 -0
  141. package/dist/esm/AppSandbox/Adapters/index.js.map +1 -1
  142. package/dist/esm/AppSandbox/Controller/index.js +1 -0
  143. package/dist/esm/AppSandbox/Controller/index.js.map +1 -1
  144. package/dist/esm/AppSandbox/Controller/setBabylonInspectorSupported.js +10 -0
  145. package/dist/esm/AppSandbox/Controller/setBabylonInspectorSupported.js.map +1 -0
  146. package/dist/esm/AppSandbox/Entities/AppSandboxEntity.js +7 -0
  147. package/dist/esm/AppSandbox/Entities/AppSandboxEntity.js.map +1 -1
  148. package/dist/esm/AppSandbox/Factories/AppSandboxFeatureFactory.js +2 -1
  149. package/dist/esm/AppSandbox/Factories/AppSandboxFeatureFactory.js.map +1 -1
  150. package/dist/esm/AppSandbox/Factories/index.js.map +1 -1
  151. package/dist/esm/AppSandbox/Mocks/BabylonInspectorSupportedPMMock.js +11 -0
  152. package/dist/esm/AppSandbox/Mocks/BabylonInspectorSupportedPMMock.js.map +1 -0
  153. package/dist/esm/AppSandbox/Mocks/index.js +1 -0
  154. package/dist/esm/AppSandbox/Mocks/index.js.map +1 -1
  155. package/dist/esm/AppSandbox/PMs/BabylonInspectorSupportedPM.js +32 -0
  156. package/dist/esm/AppSandbox/PMs/BabylonInspectorSupportedPM.js.map +1 -0
  157. package/dist/esm/AppSandbox/PMs/DevFeaturesEnabledPM.js.map +1 -1
  158. package/dist/esm/AppSandbox/PMs/ShowInspectorPM.js.map +1 -1
  159. package/dist/esm/AppSandbox/PMs/StartInZSpacePM.js.map +1 -1
  160. package/dist/esm/AppSandbox/PMs/index.js +1 -0
  161. package/dist/esm/AppSandbox/PMs/index.js.map +1 -1
  162. package/dist/esm/Apps/Entities/AppEntity.js.map +1 -1
  163. package/dist/esm/Apps/Entities/AppRepo.js.map +1 -1
  164. package/dist/esm/Apps/Factories/AppsFeatureFactory.js.map +1 -1
  165. package/dist/esm/Apps/Factories/index.js.map +1 -1
  166. package/dist/esm/Apps/UCs/Mounters/MounterUC.js.map +1 -1
  167. package/dist/esm/Apps/UCs/Mounters/SandboxMounterUC.js.map +1 -1
  168. package/dist/esm/Apps/UCs/StartAppUC.js.map +1 -1
  169. package/dist/esm/Apps/UCs/StopAppUC.js.map +1 -1
  170. package/dist/esm/Apps/index.js.map +1 -1
  171. package/dist/esm/AssetPlugin/Factories/AssetPluginFeatureFactory.js.map +1 -1
  172. package/dist/esm/AssetPlugin/Factories/index.js.map +1 -1
  173. package/dist/esm/Assets/Adapters/assetFileAdapter.js.map +1 -1
  174. package/dist/esm/Assets/Controllers/archiveAsset.js.map +1 -1
  175. package/dist/esm/Assets/Controllers/deleteAsset.js.map +1 -1
  176. package/dist/esm/Assets/Controllers/downloadAssetFile.js.map +1 -1
  177. package/dist/esm/Assets/Controllers/editAppAsset.js.map +1 -1
  178. package/dist/esm/Assets/Controllers/fetchAssetFile.js.map +1 -1
  179. package/dist/esm/Assets/Controllers/getAppAssets.js.map +1 -1
  180. package/dist/esm/Assets/Controllers/index.js.map +1 -1
  181. package/dist/esm/Assets/Controllers/newAppAsset.js.map +1 -1
  182. package/dist/esm/Assets/Controllers/toggleShowArchivedAssets.js.map +1 -1
  183. package/dist/esm/Assets/Controllers/updateAppAssetMeta.js.map +1 -1
  184. package/dist/esm/Assets/Controllers/updateAssetFile.js.map +1 -1
  185. package/dist/esm/Assets/Entities/AppAssetsEntity.js.map +1 -1
  186. package/dist/esm/Assets/Entities/AssetEntity.js.map +1 -1
  187. package/dist/esm/Assets/Entities/AssetRepo.js.map +1 -1
  188. package/dist/esm/Assets/Factories/AssetsFactory.js.map +1 -1
  189. package/dist/esm/Assets/Factories/SandboxAssetsFactory.js.map +1 -1
  190. package/dist/esm/Assets/Factories/index.js.map +1 -1
  191. package/dist/esm/Assets/PMs/AssetFilePM.js.map +1 -1
  192. package/dist/esm/Assets/PMs/AssetPM.js.map +1 -1
  193. package/dist/esm/Assets/PMs/ShowArchivedAppAssetPM.js.map +1 -1
  194. package/dist/esm/Assets/UCs/ArchiveAssetUC.js.map +1 -1
  195. package/dist/esm/Assets/UCs/DeleteAssetUC.js.map +1 -1
  196. package/dist/esm/Assets/UCs/DownloadAssetFileUC.js.map +1 -1
  197. package/dist/esm/Assets/UCs/EditAppAssetUC.js.map +1 -1
  198. package/dist/esm/Assets/UCs/GetAssetBlobURLUC.js.map +1 -1
  199. package/dist/esm/Assets/UCs/GetAssetFileUC.js.map +1 -1
  200. package/dist/esm/Assets/UCs/GetAssetUC.js.map +1 -1
  201. package/dist/esm/Assets/UCs/NewAppAssetUC.js.map +1 -1
  202. package/dist/esm/Assets/UCs/NewAssetUC.js.map +1 -1
  203. package/dist/esm/Assets/UCs/UpdateAppAssetMetaUC.js.map +1 -1
  204. package/dist/esm/Assets/UCs/UpdateAssetFileUC.js.map +1 -1
  205. package/dist/esm/Assets/UCs/index.js.map +1 -1
  206. package/dist/esm/Cache/Factories/CacheFeatureFactory.js.map +1 -1
  207. package/dist/esm/Cache/Factories/index.js.map +1 -1
  208. package/dist/esm/ChallengeResults/Entities/ChallengeResults.js.map +1 -1
  209. package/dist/esm/ChallengeResults/Factories/ChallengeResultsFactory.js.map +1 -1
  210. package/dist/esm/ChallengeResults/PMs/ChallengeResultsListPM.js.map +1 -1
  211. package/dist/esm/ChallengeResults/PMs/HasChallengeResultsPM.js.map +1 -1
  212. package/dist/esm/Dialog/Factories/SandboxDialogFactory.js +1 -2
  213. package/dist/esm/Dialog/Factories/SandboxDialogFactory.js.map +1 -1
  214. package/dist/esm/Handler/UCs/SubmitResultHandler.js.map +1 -1
  215. package/dist/esm/Logger/Factories/SandboxLoggerFactory.js.map +1 -1
  216. package/dist/esm/Logger/PMs/ForwardLogsToConsolePM.js.map +1 -1
  217. package/dist/esm/StateMachine/Controllers/index.js.map +1 -1
  218. package/dist/esm/StateMachine/Controllers/setTransitionDuration.js.map +1 -1
  219. package/dist/esm/StateMachine/Factories/SandboxStateMachineFactory.js.map +1 -1
  220. package/dist/esm/StateMachine/PMs/HostStatePM.js.map +1 -1
  221. package/dist/esm/ThemeColors/Controllers/index.js.map +1 -1
  222. package/dist/esm/ThemeColors/Controllers/setThemeByName.js.map +1 -1
  223. package/dist/esm/ThemeColors/Factories/ThemeFactory.js.map +1 -1
  224. package/dist/esm/ThemeColors/Mocks/MockSetThemeUC.js.map +1 -1
  225. package/dist/esm/ThemeColors/Mocks/index.js.map +1 -1
  226. package/dist/esm/VivedAPI/Adapters/apiStageAdapter.js.map +1 -1
  227. package/dist/esm/VivedAPI/Adapters/index.js.map +1 -1
  228. package/dist/esm/VivedAPI/Adapters/userTokenAdapter.js.map +1 -1
  229. package/dist/esm/VivedAPI/Controllers/index.js.map +1 -1
  230. package/dist/esm/VivedAPI/Controllers/loginUser.js.map +1 -1
  231. package/dist/esm/VivedAPI/Controllers/logoutUser.js.map +1 -1
  232. package/dist/esm/VivedAPI/Controllers/setApiStage.js.map +1 -1
  233. package/dist/esm/VivedAPI/Entities/VivedAPIEntity.js.map +1 -1
  234. package/dist/esm/VivedAPI/Entities/index.js.map +1 -1
  235. package/dist/esm/VivedAPI/Factories/SandboxVivedAPIFactory.js.map +1 -1
  236. package/dist/esm/VivedAPI/Factories/VivedAPIFactory.js.map +1 -1
  237. package/dist/esm/VivedAPI/Factories/index.js.map +1 -1
  238. package/dist/esm/VivedAPI/Factories/setupAPI.js.map +1 -1
  239. package/dist/esm/VivedAPI/Factories/setupVivedAPIForSandbox.js.map +1 -1
  240. package/dist/esm/VivedAPI/Mocks/MockJsonRequestUC.js.map +1 -1
  241. package/dist/esm/VivedAPI/Mocks/index.js.map +1 -1
  242. package/dist/esm/VivedAPI/PMs/ApiStagePM.js.map +1 -1
  243. package/dist/esm/VivedAPI/PMs/UserTokenPM.js.map +1 -1
  244. package/dist/esm/VivedAPI/PMs/index.js.map +1 -1
  245. package/dist/esm/VivedAPI/UCs/BasicFetchUC.js.map +1 -1
  246. package/dist/esm/VivedAPI/UCs/BlobRequestUC.js.map +1 -1
  247. package/dist/esm/VivedAPI/UCs/DeleteAssetOnAPIUC.js.map +1 -1
  248. package/dist/esm/VivedAPI/UCs/FileUploadUC.js.map +1 -1
  249. package/dist/esm/VivedAPI/UCs/JsonRequestUC.js.map +1 -1
  250. package/dist/esm/VivedAPI/UCs/PostNewAssetUC.js.map +1 -1
  251. package/dist/esm/VivedAPI/UCs/SignedAuthTokenUC.js.map +1 -1
  252. package/dist/esm/VivedAPI/UCs/UserAuthUC.js.map +1 -1
  253. package/dist/esm/VivedAPI/UCs/index.js.map +1 -1
  254. package/dist/esm/VivedAPI/index.js.map +1 -1
  255. package/dist/esm/ZSpaceHost/Adapters/index.js +1 -0
  256. package/dist/esm/ZSpaceHost/Adapters/index.js.map +1 -1
  257. package/dist/esm/ZSpaceHost/Adapters/zSpaceIsSupportedAdapter.js +21 -0
  258. package/dist/esm/ZSpaceHost/Adapters/zSpaceIsSupportedAdapter.js.map +1 -0
  259. package/dist/esm/ZSpaceHost/Controllers/index.js.map +1 -1
  260. package/dist/esm/ZSpaceHost/Controllers/setZSpaceIsSupported.js.map +1 -1
  261. package/dist/esm/ZSpaceHost/Factories/SandboxZSpaceFactory.js +2 -1
  262. package/dist/esm/ZSpaceHost/Factories/SandboxZSpaceFactory.js.map +1 -1
  263. package/dist/esm/ZSpaceHost/Factories/setupZSpaceForSandbox.js +2 -1
  264. package/dist/esm/ZSpaceHost/Factories/setupZSpaceForSandbox.js.map +1 -1
  265. package/dist/esm/ZSpaceHost/Mocks/ZSpaceIsSupportedPMMock.js +11 -0
  266. package/dist/esm/ZSpaceHost/Mocks/ZSpaceIsSupportedPMMock.js.map +1 -0
  267. package/dist/esm/ZSpaceHost/Mocks/index.js +1 -0
  268. package/dist/esm/ZSpaceHost/Mocks/index.js.map +1 -1
  269. package/dist/esm/ZSpaceHost/PMs/EmulateZSpacePM.js.map +1 -1
  270. package/dist/esm/ZSpaceHost/PMs/ZSpaceIsActivePM.js.map +1 -1
  271. package/dist/esm/ZSpaceHost/PMs/ZSpaceIsSupportedPM.js +35 -0
  272. package/dist/esm/ZSpaceHost/PMs/ZSpaceIsSupportedPM.js.map +1 -0
  273. package/dist/esm/ZSpaceHost/PMs/index.js +1 -0
  274. package/dist/esm/ZSpaceHost/PMs/index.js.map +1 -1
  275. package/dist/types/AppSandbox/Adapters/babylonInspectorSupportedAdapter.d.ts +3 -0
  276. package/dist/types/AppSandbox/Adapters/babylonInspectorSupportedAdapter.d.ts.map +1 -0
  277. package/dist/types/AppSandbox/Adapters/index.d.ts +1 -0
  278. package/dist/types/AppSandbox/Adapters/index.d.ts.map +1 -1
  279. package/dist/types/AppSandbox/Controller/index.d.ts +1 -0
  280. package/dist/types/AppSandbox/Controller/index.d.ts.map +1 -1
  281. package/dist/types/AppSandbox/Controller/setBabylonInspectorSupported.d.ts +3 -0
  282. package/dist/types/AppSandbox/Controller/setBabylonInspectorSupported.d.ts.map +1 -0
  283. package/dist/types/AppSandbox/Entities/AppSandboxEntity.d.ts +2 -0
  284. package/dist/types/AppSandbox/Entities/AppSandboxEntity.d.ts.map +1 -1
  285. package/dist/types/AppSandbox/Factories/AppSandboxFeatureFactory.d.ts.map +1 -1
  286. package/dist/types/AppSandbox/Mocks/BabylonInspectorSupportedPMMock.d.ts +8 -0
  287. package/dist/types/AppSandbox/Mocks/BabylonInspectorSupportedPMMock.d.ts.map +1 -0
  288. package/dist/types/AppSandbox/Mocks/index.d.ts +1 -0
  289. package/dist/types/AppSandbox/Mocks/index.d.ts.map +1 -1
  290. package/dist/types/AppSandbox/PMs/BabylonInspectorSupportedPM.d.ts +7 -0
  291. package/dist/types/AppSandbox/PMs/BabylonInspectorSupportedPM.d.ts.map +1 -0
  292. package/dist/types/AppSandbox/PMs/index.d.ts +1 -0
  293. package/dist/types/AppSandbox/PMs/index.d.ts.map +1 -1
  294. package/dist/types/Apps/Factories/AppsFeatureFactory.d.ts.map +1 -1
  295. package/dist/types/AssetPlugin/Factories/AssetPluginFeatureFactory.d.ts.map +1 -1
  296. package/dist/types/Assets/Factories/AssetsFactory.d.ts.map +1 -1
  297. package/dist/types/Dialog/Factories/SandboxDialogFactory.d.ts.map +1 -1
  298. package/dist/types/StateMachine/Factories/SandboxStateMachineFactory.d.ts.map +1 -1
  299. package/dist/types/ZSpaceHost/Adapters/index.d.ts +1 -0
  300. package/dist/types/ZSpaceHost/Adapters/index.d.ts.map +1 -1
  301. package/dist/types/ZSpaceHost/Adapters/zSpaceIsSupportedAdapter.d.ts +3 -0
  302. package/dist/types/ZSpaceHost/Adapters/zSpaceIsSupportedAdapter.d.ts.map +1 -0
  303. package/dist/types/ZSpaceHost/Factories/SandboxZSpaceFactory.d.ts.map +1 -1
  304. package/dist/types/ZSpaceHost/Factories/setupZSpaceForSandbox.d.ts.map +1 -1
  305. package/dist/types/ZSpaceHost/Mocks/ZSpaceIsSupportedPMMock.d.ts +8 -0
  306. package/dist/types/ZSpaceHost/Mocks/ZSpaceIsSupportedPMMock.d.ts.map +1 -0
  307. package/dist/types/ZSpaceHost/Mocks/index.d.ts +1 -0
  308. package/dist/types/ZSpaceHost/Mocks/index.d.ts.map +1 -1
  309. package/dist/types/ZSpaceHost/PMs/ZSpaceIsSupportedPM.d.ts +7 -0
  310. package/dist/types/ZSpaceHost/PMs/ZSpaceIsSupportedPM.d.ts.map +1 -0
  311. package/dist/types/ZSpaceHost/PMs/index.d.ts +1 -0
  312. package/dist/types/ZSpaceHost/PMs/index.d.ts.map +1 -1
  313. package/package.json +1 -1
  314. package/README.md +0 -105
  315. package/dist/cjs/Assets/Factories/setupAssets.js +0 -14
  316. package/dist/cjs/Assets/Factories/setupAssets.js.map +0 -1
  317. package/dist/esm/Assets/Factories/setupAssets.js +0 -11
  318. package/dist/esm/Assets/Factories/setupAssets.js.map +0 -1
  319. package/dist/types/Assets/Factories/setupAssets.d.ts +0 -8
  320. package/dist/types/Assets/Factories/setupAssets.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"NewAppAssetUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/NewAppAssetUC.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * NewAppAssetUC.ts\r\n *\r\n * This use case handles creation of new assets within application contexts,\r\n * managing the complete workflow from file upload to UI state transitions.\r\n */\r\n\r\nimport {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectRepo,\r\n AppObjectUC\r\n} from \"@vived/core\";\r\nimport { AppSandboxEntity, SandboxState } from \"../../AppSandbox/Entities\";\r\nimport {\r\n DialogAlertDTO,\r\n MakeAlertDialogUC,\r\n MakeSpinnerDialogUC\r\n} from \"../../Dialog\";\r\nimport { NewAssetApiDto, PostNewAssetUC } from \"../../VivedAPI/UCs\";\r\nimport { AppAssetsEntity, AssetRepo } from \"../Entities\";\r\n\r\n/**\r\n * Data transfer object for new application asset creation requests.\r\n */\r\nexport interface NewAppAssetDTO {\r\n /** The file object to be uploaded and stored as the asset */\r\n file: File;\r\n /** Display name for the asset */\r\n name: string;\r\n /** Detailed description of the asset's purpose or content */\r\n description: string;\r\n}\r\n\r\n/**\r\n * NewAppAssetUC handles creation of new assets within application contexts.\r\n *\r\n * This singleton use case manages asset creation with UI feedback and state transitions.\r\n */\r\nexport abstract class NewAppAssetUC extends AppObjectUC {\r\n /** Static type identifier for component registration */\r\n static type = \"NewAppAssetUC\";\r\n\r\n /**\r\n * Creates a new asset with the provided data.\r\n *\r\n * @param data - Complete asset information including file and metadata\r\n * @returns Promise that resolves when the asset is successfully created\r\n */\r\n abstract create(data: NewAppAssetDTO): Promise<void>;\r\n\r\n /**\r\n * Retrieves the singleton NewAppAssetUC instance.\r\n *\r\n * @param appObjects - Repository for accessing the singleton component\r\n * @returns NewAppAssetUC instance or undefined if not found\r\n */\r\n static get(appObjects: AppObjectRepo): NewAppAssetUC | undefined {\r\n return getSingletonComponent(NewAppAssetUC.type, appObjects);\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new NewAppAssetUC instance.\r\n *\r\n * @param appObject - The AppObject that will host this singleton use case\r\n * @returns A new NewAppAssetUC implementation instance\r\n */\r\nexport function makeNewAppAssetUC(appObject: AppObject): NewAppAssetUC {\r\n return new NewAppAssetUCImp(appObject);\r\n}\r\n\r\n/**\r\n * Private implementation of NewAppAssetUC with app context and state management.\r\n */\r\nclass NewAppAssetUCImp extends NewAppAssetUC {\r\n private appAssets?: AppAssetsEntity;\r\n\r\n private get postNewAsset() {\r\n return this.getCachedSingleton<PostNewAssetUC>(PostNewAssetUC.type)?.doPost;\r\n }\r\n\r\n private get assetRepo() {\r\n return this.getCachedSingleton<AssetRepo>(AssetRepo.type);\r\n }\r\n\r\n private get sandbox() {\r\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\r\n }\r\n\r\n private get spinnerFactory() {\r\n return this.getCachedSingleton<MakeSpinnerDialogUC>(\r\n MakeSpinnerDialogUC.type\r\n );\r\n }\r\n\r\n private get alertFactory() {\r\n return this.getCachedSingleton<MakeAlertDialogUC>(MakeAlertDialogUC.type);\r\n }\r\n\r\n create = (data: NewAppAssetDTO): Promise<void> => {\r\n const appAssets = this.appAssets;\r\n const postNewAsset = this.postNewAsset;\r\n const sandbox = this.sandbox;\r\n const assetRepo = this.assetRepo;\r\n\r\n if (!appAssets || !postNewAsset || !sandbox || !assetRepo) {\r\n return Promise.reject();\r\n }\r\n\r\n return new Promise<void>((resolve) => {\r\n const { description, file, name } = data;\r\n\r\n const newAssetData: NewAssetApiDto = {\r\n description,\r\n name,\r\n file,\r\n ownerID: sandbox.appID\r\n };\r\n\r\n const spinnerDialog = this.spinnerFactory?.make({\r\n title: \"New App Asset\",\r\n message: \"Posting new app asset...\"\r\n });\r\n\r\n postNewAsset(newAssetData)\r\n .then((resp) => {\r\n appAssets.add(resp.id);\r\n\r\n const newAsset = assetRepo.assetFactory(resp.id);\r\n newAsset.setFile(file);\r\n newAsset.description = description;\r\n newAsset.name = name;\r\n newAsset.filename = resp.filename;\r\n\r\n assetRepo.add(newAsset);\r\n this.sandbox!.state = SandboxState.MOUNTED;\r\n\r\n spinnerDialog?.close();\r\n resolve();\r\n })\r\n .catch((e: Error) => {\r\n this.error(\"create new asset error: \" + e.message);\r\n spinnerDialog?.close();\r\n\r\n const dialogDTO: DialogAlertDTO = {\r\n buttonLabel: \"OK\",\r\n message: `Something went wrong when creating a new app asset. Check the console. ${e.message}`,\r\n title: \"New App Asset Error\"\r\n };\r\n this.alertFactory?.make(dialogDTO);\r\n\r\n resolve();\r\n });\r\n });\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, NewAppAssetUC.type);\r\n this.appObjects.registerSingleton(this);\r\n\r\n this.appAssets = appObject.getComponent<AppAssetsEntity>(\r\n AppAssetsEntity.type\r\n );\r\n if (!this.appAssets) {\r\n this.error(\r\n \"UC added to an App Object that does not have AppAssetsEntity\"\r\n );\r\n return;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"NewAppAssetUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/NewAppAssetUC.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * NewAppAssetUC.ts\n *\n * This use case handles creation of new assets within application contexts,\n * managing the complete workflow from file upload to UI state transitions.\n */\n\nimport {\n getSingletonComponent,\n AppObject,\n AppObjectRepo,\n AppObjectUC\n} from \"@vived/core\";\nimport { AppSandboxEntity, SandboxState } from \"../../AppSandbox/Entities\";\nimport {\n DialogAlertDTO,\n MakeAlertDialogUC,\n MakeSpinnerDialogUC\n} from \"../../Dialog\";\nimport { NewAssetApiDto, PostNewAssetUC } from \"../../VivedAPI/UCs\";\nimport { AppAssetsEntity, AssetRepo } from \"../Entities\";\n\n/**\n * Data transfer object for new application asset creation requests.\n */\nexport interface NewAppAssetDTO {\n /** The file object to be uploaded and stored as the asset */\n file: File;\n /** Display name for the asset */\n name: string;\n /** Detailed description of the asset's purpose or content */\n description: string;\n}\n\n/**\n * NewAppAssetUC handles creation of new assets within application contexts.\n *\n * This singleton use case manages asset creation with UI feedback and state transitions.\n */\nexport abstract class NewAppAssetUC extends AppObjectUC {\n /** Static type identifier for component registration */\n static type = \"NewAppAssetUC\";\n\n /**\n * Creates a new asset with the provided data.\n *\n * @param data - Complete asset information including file and metadata\n * @returns Promise that resolves when the asset is successfully created\n */\n abstract create(data: NewAppAssetDTO): Promise<void>;\n\n /**\n * Retrieves the singleton NewAppAssetUC instance.\n *\n * @param appObjects - Repository for accessing the singleton component\n * @returns NewAppAssetUC instance or undefined if not found\n */\n static get(appObjects: AppObjectRepo): NewAppAssetUC | undefined {\n return getSingletonComponent(NewAppAssetUC.type, appObjects);\n }\n}\n\n/**\n * Factory function to create a new NewAppAssetUC instance.\n *\n * @param appObject - The AppObject that will host this singleton use case\n * @returns A new NewAppAssetUC implementation instance\n */\nexport function makeNewAppAssetUC(appObject: AppObject): NewAppAssetUC {\n return new NewAppAssetUCImp(appObject);\n}\n\n/**\n * Private implementation of NewAppAssetUC with app context and state management.\n */\nclass NewAppAssetUCImp extends NewAppAssetUC {\n private appAssets?: AppAssetsEntity;\n\n private get postNewAsset() {\n return this.getCachedSingleton<PostNewAssetUC>(PostNewAssetUC.type)?.doPost;\n }\n\n private get assetRepo() {\n return this.getCachedSingleton<AssetRepo>(AssetRepo.type);\n }\n\n private get sandbox() {\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\n }\n\n private get spinnerFactory() {\n return this.getCachedSingleton<MakeSpinnerDialogUC>(\n MakeSpinnerDialogUC.type\n );\n }\n\n private get alertFactory() {\n return this.getCachedSingleton<MakeAlertDialogUC>(MakeAlertDialogUC.type);\n }\n\n create = (data: NewAppAssetDTO): Promise<void> => {\n const appAssets = this.appAssets;\n const postNewAsset = this.postNewAsset;\n const sandbox = this.sandbox;\n const assetRepo = this.assetRepo;\n\n if (!appAssets || !postNewAsset || !sandbox || !assetRepo) {\n return Promise.reject();\n }\n\n return new Promise<void>((resolve) => {\n const { description, file, name } = data;\n\n const newAssetData: NewAssetApiDto = {\n description,\n name,\n file,\n ownerID: sandbox.appID\n };\n\n const spinnerDialog = this.spinnerFactory?.make({\n title: \"New App Asset\",\n message: \"Posting new app asset...\"\n });\n\n postNewAsset(newAssetData)\n .then((resp) => {\n appAssets.add(resp.id);\n\n const newAsset = assetRepo.assetFactory(resp.id);\n newAsset.setFile(file);\n newAsset.description = description;\n newAsset.name = name;\n newAsset.filename = resp.filename;\n\n assetRepo.add(newAsset);\n this.sandbox!.state = SandboxState.MOUNTED;\n\n spinnerDialog?.close();\n resolve();\n })\n .catch((e: Error) => {\n this.error(\"create new asset error: \" + e.message);\n spinnerDialog?.close();\n\n const dialogDTO: DialogAlertDTO = {\n buttonLabel: \"OK\",\n message: `Something went wrong when creating a new app asset. Check the console. ${e.message}`,\n title: \"New App Asset Error\"\n };\n this.alertFactory?.make(dialogDTO);\n\n resolve();\n });\n });\n };\n\n constructor(appObject: AppObject) {\n super(appObject, NewAppAssetUC.type);\n this.appObjects.registerSingleton(this);\n\n this.appAssets = appObject.getComponent<AppAssetsEntity>(\n AppAssetsEntity.type\n );\n if (!this.appAssets) {\n this.error(\n \"UC added to an App Object that does not have AppAssetsEntity\"\n );\n return;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NewAssetUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/NewAssetUC.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAGL,WAAW,EACX,qBAAqB,EACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAkB,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAiBxC;;;;;GAKG;AACH,MAAM,OAAgB,UAAW,SAAQ,WAAW;IAYlD;;;;;OAKG;IACH,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC5D,CAAC;;AAnBD,wDAAwD;AACjD,eAAI,GAAG,YAAY,CAAC;AAqB7B;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,SAAoB;IACjD,OAAO,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,aAAc,SAAQ,UAAU;IACpC;;;OAGG;IACH,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAiB,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9E,CAAC;IAED;;;OAGG;IACH,IAAY,SAAS;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAY,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IA8CD;;;;OAIG;IACH,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAlDpC;;;;;;;;;;;;;WAaG;QACH,WAAM,GAAG,CAAC,IAAiB,EAAmB,EAAE;YAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YACvC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAEjC,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC3D,CAAC;YAED,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YAChD,MAAM,YAAY,GAAmB;gBACnC,WAAW;gBACX,IAAI;gBACJ,IAAI;gBACJ,OAAO,EAAE,KAAK;aACf,CAAC;YAEF,OAAO,YAAY,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC9C,4CAA4C;gBAC5C,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACvB,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;gBACnC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;gBACrB,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAElC,mCAAmC;gBACnC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACxB,OAAO,IAAI,CAAC,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QASA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["/**\r\n * NewAssetUC.ts\r\n *\r\n * This use case handles the creation of new assets, managing the complete workflow\r\n * from file upload through API persistence to local entity creation and storage.\r\n *\r\n * Key Concepts:\r\n * - Singleton use case that handles asset creation operations\r\n * - Coordinates file upload with metadata persistence via API\r\n * - Creates and configures new asset entities in the local repository\r\n * - Transforms between DTO formats for API and internal use\r\n * - Provides unique asset IDs for tracking and reference\r\n *\r\n * Usage Patterns:\r\n * - Accessed as a singleton through static get() method\r\n * - Called with complete asset data including file and metadata\r\n * - Returns asset ID for immediate reference by calling code\r\n * - Handles async operations with proper error propagation\r\n */\r\n\r\nimport {\r\n AppObject,\r\n AppObjectRepo,\r\n AppObjectUC,\r\n getSingletonComponent\r\n} from \"@vived/core\";\r\nimport { NewAssetApiDto, PostNewAssetUC } from \"../../VivedAPI/UCs\";\r\nimport { AssetRepo } from \"../Entities\";\r\n\r\n/**\r\n * Data transfer object for new asset creation requests.\r\n * Contains all necessary information to create a new asset in the system.\r\n */\r\nexport interface NewAssetDto {\r\n /** The file object to be uploaded and stored as the asset */\r\n file: File;\r\n /** Display name for the asset */\r\n name: string;\r\n /** Detailed description of the asset's purpose or content */\r\n description: string;\r\n /** ID of the user or entity that owns this asset */\r\n owner: string;\r\n}\r\n\r\n/**\r\n * NewAssetUC handles the creation of new assets in the VIVED system.\r\n *\r\n * This singleton use case manages the complete asset creation workflow,\r\n * from initial file upload through API persistence to local entity creation.\r\n */\r\nexport abstract class NewAssetUC extends AppObjectUC {\r\n /** Static type identifier for component registration */\r\n static type = \"NewAssetUC\";\r\n\r\n /**\r\n * Creates a new asset with the provided data.\r\n *\r\n * @param data - Complete asset information including file and metadata\r\n * @returns Promise resolving to the unique ID of the newly created asset\r\n */\r\n abstract create(data: NewAssetDto): Promise<string>;\r\n\r\n /**\r\n * Retrieves the singleton NewAssetUC instance.\r\n *\r\n * @param appObjects - Repository for accessing the singleton component\r\n * @returns NewAssetUC instance or undefined if not found\r\n */\r\n static get(appObjects: AppObjectRepo): NewAssetUC | undefined {\r\n return getSingletonComponent(NewAssetUC.type, appObjects);\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new NewAssetUC instance.\r\n *\r\n * @param appObject - The AppObject that will host this singleton use case\r\n * @returns A new NewAssetUC implementation instance\r\n */\r\nexport function makeNewAssetUC(appObject: AppObject): NewAssetUC {\r\n return new NewAssetUCImp(appObject);\r\n}\r\n\r\n/**\r\n * Private implementation of NewAssetUC that handles the concrete asset creation operations.\r\n *\r\n * Key Implementation Details:\r\n * - Validates required dependencies (API and repository components)\r\n * - Transforms NewAssetDto to NewAssetApiDto for API communication\r\n * - Creates and configures new asset entities with file and metadata\r\n * - Adds created assets to the repository for management and access\r\n * - Handles async operations with proper error propagation\r\n * - Registers itself as a singleton for system-wide access\r\n */\r\nclass NewAssetUCImp extends NewAssetUC {\r\n /**\r\n * Gets the API use case for posting new assets to the backend\r\n * Cached for efficient repeated access during operations\r\n */\r\n private get postNewAsset() {\r\n return this.getCachedSingleton<PostNewAssetUC>(PostNewAssetUC.type)?.doPost;\r\n }\r\n\r\n /**\r\n * Gets the asset repository for entity creation and management\r\n * Cached for efficient repeated access during operations\r\n */\r\n private get assetRepo() {\r\n return this.getCachedSingleton<AssetRepo>(AssetRepo.type);\r\n }\r\n\r\n /**\r\n * Creates a new asset with complete workflow handling.\r\n *\r\n * This method handles the complete asset creation process:\r\n * 1. Validates required dependencies are available\r\n * 2. Transforms the DTO to API format\r\n * 3. Posts the asset data to the backend API\r\n * 4. Creates a new asset entity with the returned information\r\n * 5. Configures the entity with file and metadata\r\n * 6. Adds the entity to the repository for management\r\n *\r\n * @param data - Complete asset creation data\r\n * @returns Promise resolving to the unique asset ID\r\n */\r\n create = (data: NewAssetDto): Promise<string> => {\r\n const postNewAsset = this.postNewAsset;\r\n const assetRepo = this.assetRepo;\r\n\r\n if (!postNewAsset || !assetRepo) {\r\n return Promise.reject(new Error(\"Missing dependencies\"));\r\n }\r\n\r\n const { description, file, name, owner } = data;\r\n const newAssetData: NewAssetApiDto = {\r\n description,\r\n name,\r\n file,\r\n ownerID: owner\r\n };\r\n\r\n return postNewAsset(newAssetData).then((resp) => {\r\n // Create and configure the new asset entity\r\n const newAsset = assetRepo.assetFactory(resp.id);\r\n newAsset.setFile(file);\r\n newAsset.description = description;\r\n newAsset.name = name;\r\n newAsset.filename = resp.filename;\r\n\r\n // Add to repository for management\r\n assetRepo.add(newAsset);\r\n return resp.id;\r\n });\r\n };\r\n\r\n /**\r\n * Initializes the NewAssetUC and registers it as a singleton.\r\n *\r\n * @param appObject - The AppObject that will host this singleton use case\r\n */\r\n constructor(appObject: AppObject) {\r\n super(appObject, NewAssetUC.type);\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"NewAssetUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/NewAssetUC.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAGL,WAAW,EACX,qBAAqB,EACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAkB,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAiBxC;;;;;GAKG;AACH,MAAM,OAAgB,UAAW,SAAQ,WAAW;IAYlD;;;;;OAKG;IACH,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC5D,CAAC;;AAnBD,wDAAwD;AACjD,eAAI,GAAG,YAAY,CAAC;AAqB7B;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,SAAoB;IACjD,OAAO,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,aAAc,SAAQ,UAAU;IACpC;;;OAGG;IACH,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAiB,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9E,CAAC;IAED;;;OAGG;IACH,IAAY,SAAS;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAY,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IA8CD;;;;OAIG;IACH,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAlDpC;;;;;;;;;;;;;WAaG;QACH,WAAM,GAAG,CAAC,IAAiB,EAAmB,EAAE;YAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YACvC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAEjC,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC3D,CAAC;YAED,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YAChD,MAAM,YAAY,GAAmB;gBACnC,WAAW;gBACX,IAAI;gBACJ,IAAI;gBACJ,OAAO,EAAE,KAAK;aACf,CAAC;YAEF,OAAO,YAAY,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC9C,4CAA4C;gBAC5C,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACvB,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;gBACnC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;gBACrB,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAElC,mCAAmC;gBACnC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACxB,OAAO,IAAI,CAAC,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QASA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["/**\n * NewAssetUC.ts\n *\n * This use case handles the creation of new assets, managing the complete workflow\n * from file upload through API persistence to local entity creation and storage.\n *\n * Key Concepts:\n * - Singleton use case that handles asset creation operations\n * - Coordinates file upload with metadata persistence via API\n * - Creates and configures new asset entities in the local repository\n * - Transforms between DTO formats for API and internal use\n * - Provides unique asset IDs for tracking and reference\n *\n * Usage Patterns:\n * - Accessed as a singleton through static get() method\n * - Called with complete asset data including file and metadata\n * - Returns asset ID for immediate reference by calling code\n * - Handles async operations with proper error propagation\n */\n\nimport {\n AppObject,\n AppObjectRepo,\n AppObjectUC,\n getSingletonComponent\n} from \"@vived/core\";\nimport { NewAssetApiDto, PostNewAssetUC } from \"../../VivedAPI/UCs\";\nimport { AssetRepo } from \"../Entities\";\n\n/**\n * Data transfer object for new asset creation requests.\n * Contains all necessary information to create a new asset in the system.\n */\nexport interface NewAssetDto {\n /** The file object to be uploaded and stored as the asset */\n file: File;\n /** Display name for the asset */\n name: string;\n /** Detailed description of the asset's purpose or content */\n description: string;\n /** ID of the user or entity that owns this asset */\n owner: string;\n}\n\n/**\n * NewAssetUC handles the creation of new assets in the VIVED system.\n *\n * This singleton use case manages the complete asset creation workflow,\n * from initial file upload through API persistence to local entity creation.\n */\nexport abstract class NewAssetUC extends AppObjectUC {\n /** Static type identifier for component registration */\n static type = \"NewAssetUC\";\n\n /**\n * Creates a new asset with the provided data.\n *\n * @param data - Complete asset information including file and metadata\n * @returns Promise resolving to the unique ID of the newly created asset\n */\n abstract create(data: NewAssetDto): Promise<string>;\n\n /**\n * Retrieves the singleton NewAssetUC instance.\n *\n * @param appObjects - Repository for accessing the singleton component\n * @returns NewAssetUC instance or undefined if not found\n */\n static get(appObjects: AppObjectRepo): NewAssetUC | undefined {\n return getSingletonComponent(NewAssetUC.type, appObjects);\n }\n}\n\n/**\n * Factory function to create a new NewAssetUC instance.\n *\n * @param appObject - The AppObject that will host this singleton use case\n * @returns A new NewAssetUC implementation instance\n */\nexport function makeNewAssetUC(appObject: AppObject): NewAssetUC {\n return new NewAssetUCImp(appObject);\n}\n\n/**\n * Private implementation of NewAssetUC that handles the concrete asset creation operations.\n *\n * Key Implementation Details:\n * - Validates required dependencies (API and repository components)\n * - Transforms NewAssetDto to NewAssetApiDto for API communication\n * - Creates and configures new asset entities with file and metadata\n * - Adds created assets to the repository for management and access\n * - Handles async operations with proper error propagation\n * - Registers itself as a singleton for system-wide access\n */\nclass NewAssetUCImp extends NewAssetUC {\n /**\n * Gets the API use case for posting new assets to the backend\n * Cached for efficient repeated access during operations\n */\n private get postNewAsset() {\n return this.getCachedSingleton<PostNewAssetUC>(PostNewAssetUC.type)?.doPost;\n }\n\n /**\n * Gets the asset repository for entity creation and management\n * Cached for efficient repeated access during operations\n */\n private get assetRepo() {\n return this.getCachedSingleton<AssetRepo>(AssetRepo.type);\n }\n\n /**\n * Creates a new asset with complete workflow handling.\n *\n * This method handles the complete asset creation process:\n * 1. Validates required dependencies are available\n * 2. Transforms the DTO to API format\n * 3. Posts the asset data to the backend API\n * 4. Creates a new asset entity with the returned information\n * 5. Configures the entity with file and metadata\n * 6. Adds the entity to the repository for management\n *\n * @param data - Complete asset creation data\n * @returns Promise resolving to the unique asset ID\n */\n create = (data: NewAssetDto): Promise<string> => {\n const postNewAsset = this.postNewAsset;\n const assetRepo = this.assetRepo;\n\n if (!postNewAsset || !assetRepo) {\n return Promise.reject(new Error(\"Missing dependencies\"));\n }\n\n const { description, file, name, owner } = data;\n const newAssetData: NewAssetApiDto = {\n description,\n name,\n file,\n ownerID: owner\n };\n\n return postNewAsset(newAssetData).then((resp) => {\n // Create and configure the new asset entity\n const newAsset = assetRepo.assetFactory(resp.id);\n newAsset.setFile(file);\n newAsset.description = description;\n newAsset.name = name;\n newAsset.filename = resp.filename;\n\n // Add to repository for management\n assetRepo.add(newAsset);\n return resp.id;\n });\n };\n\n /**\n * Initializes the NewAssetUC and registers it as a singleton.\n *\n * @param appObject - The AppObject that will host this singleton use case\n */\n constructor(appObject: AppObject) {\n super(appObject, NewAssetUC.type);\n this.appObjects.registerSingleton(this);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateAppAssetMetaUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/UpdateAppAssetMetaUC.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAA4B,WAAW,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EACL,gBAAgB,EAChB,YAAY,EACb,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAe1C;;;;;GAKG;AACH,MAAM,OAAgB,oBAAqB,SAAQ,WAAW;IAY5D;;;;;;OAMG;IACH,MAAM,CAAC,GAAG,CACR,OAAe,EACf,UAAyB;QAEzB,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,UAAU,CAAC,aAAa,CACtB,0BAA0B,EAC1B,2BAA2B,CAC5B,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,EAAE,GAAG,SAAS,CAAC,YAAY,CAC/B,oBAAoB,CAAC,IAAI,CAC1B,CAAC;QACF,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,UAAU,CAAC,aAAa,CACtB,0BAA0B,EAC1B,4CAA4C,CAC7C,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;;AA3CD,wDAAwD;AACjD,yBAAI,GAAG,sBAAsB,CAAC;AA6CvC;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,SAAoB;IAEpB,OAAO,IAAI,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,uBAAwB,SAAQ,oBAAoB;IACxD,yEAAyE;IACzE,IAAY,KAAK;QACf,OAAO,IAAI,CAAC,uBAAuB,CAAc,WAAW,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC;IAED,kFAAkF;IAClF,IAAY,cAAc;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAC5B,mBAAmB,CAAC,IAAI,CACzB,CAAC;IACJ,CAAC;IAED,uEAAuE;IACvE,IAAY,cAAc;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,gBAAgB,CAAC,IAAI,CAAC;YACrE,EAAE,OAAO,CAAC;IACd,CAAC;IAED,wEAAwE;IACxE,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAoB,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IAED,yEAAyE;IACzE,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAuED;;;;OAIG;IACH,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;QA3E9C;;;;;;;;;;;;;WAaG;QACH,eAAU,GAAG,CAAC,IAA2B,EAAiB,EAAE;YAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAEzB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;YAC3C,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;YAClD,CAAC;YAED,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;YAE7C,sCAAsC;YACtC,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC;gBAC9C,KAAK,EAAE,YAAY;gBACnB,OAAO,EAAE,0BAA0B;aACpC,CAAC,CAAC;YAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,cAAc,CAAC;oBACb,QAAQ;oBACR,WAAW;oBACX,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,IAAI;iBACL,CAAC;qBACC,IAAI,CAAC,GAAG,EAAE;oBACT,6CAA6C;oBAC7C,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;oBAC1B,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;oBAClB,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;oBAEhC,aAAa,EAAE,KAAK,EAAE,CAAC;oBAEvB,0CAA0C;oBAC1C,IAAI,IAAI,CAAC,OAAO;wBAAE,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC;oBAE5D,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oBACX,mCAAmC;oBACnC,IAAI,CAAC,KAAK,CAAC,qBAAqB,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;oBAC9C,aAAa,EAAE,KAAK,EAAE,CAAC;oBACvB,MAAM,SAAS,GAAmB;wBAChC,WAAW,EAAE,IAAI;wBACjB,OAAO,EAAE,0EAA0E,CAAC,CAAC,OAAO,EAAE;wBAC9F,KAAK,EAAE,oBAAoB;qBAC5B,CAAC;oBACF,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;oBACnC,OAAO,EAAE,CAAC,CAAC,oEAAoE;gBACjF,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;IASF,CAAC;CACF","sourcesContent":["/**\r\n * UpdateAppAssetMetaUC.ts\r\n *\r\n * This use case handles updating asset metadata (name, description, archived status)\r\n * for existing assets. It provides a complete workflow for modifying asset information\r\n * with user feedback and sandbox state management.\r\n *\r\n * Key Concepts:\r\n * - Updates asset metadata without affecting the actual file content\r\n * - Uses API calls to persist metadata changes on the backend\r\n * - Provides user feedback through spinner and error dialogs\r\n * - Manages sandbox state transitions after successful updates\r\n * - Supports partial metadata updates through DTO pattern\r\n *\r\n * Usage Patterns:\r\n * - Created per-asset during factory setup\r\n * - Accessed through static get() method with asset ID\r\n * - Called with metadata DTO containing updated field values\r\n * - Handles async operations with proper error handling and user feedback\r\n */\r\n\r\nimport { AppObject, AppObjectRepo, AppObjectUC } from \"@vived/core\";\r\nimport {\r\n AppSandboxEntity,\r\n SandboxState\r\n} from \"../../AppSandbox/Entities/AppSandboxEntity\";\r\nimport { DialogAlertDTO } from \"../../Dialog/Entities\";\r\nimport { MakeAlertDialogUC, MakeSpinnerDialogUC } from \"../../Dialog/UCs\";\r\nimport { PatchAssetMetaUC } from \"../../VivedAPI/UCs/PatchAssetMetaUC\";\r\nimport { AssetEntity } from \"../Entities\";\r\n\r\n/**\r\n * Data transfer object for asset metadata updates.\r\n * Contains all the metadata fields that can be modified for an asset.\r\n */\r\nexport interface UpdateAppAssetMetaDTO {\r\n /** Display name for the asset */\r\n name: string;\r\n /** Detailed description of the asset's purpose or content */\r\n description: string;\r\n /** Whether the asset should be archived (hidden from normal views) */\r\n archived: boolean;\r\n}\r\n\r\n/**\r\n * UpdateAppAssetMetaUC manages updating the metadata of individual assets.\r\n *\r\n * This use case provides the business logic for modifying asset metadata,\r\n * handling API persistence, and managing user feedback during the operation.\r\n */\r\nexport abstract class UpdateAppAssetMetaUC extends AppObjectUC {\r\n /** Static type identifier for component registration */\r\n static type = \"UpdateAppAssetMetaUC\";\r\n\r\n /**\r\n * Updates the metadata of the associated asset.\r\n *\r\n * @param data - DTO containing the updated metadata fields\r\n * @returns Promise that resolves when the operation completes successfully\r\n */\r\n abstract updateMeta(data: UpdateAppAssetMetaDTO): Promise<void>;\r\n\r\n /**\r\n * Retrieves an UpdateAppAssetMetaUC component for a specific asset.\r\n *\r\n * @param assetID - The unique identifier of the asset\r\n * @param appObjects - Repository for accessing app objects and components\r\n * @returns UpdateAppAssetMetaUC instance or undefined if not found\r\n */\r\n static get(\r\n assetID: string,\r\n appObjects: AppObjectRepo\r\n ): UpdateAppAssetMetaUC | undefined {\r\n const appObject = appObjects.get(assetID);\r\n if (!appObject) {\r\n appObjects.submitWarning(\r\n \"UpdateAppAssetMetaUC.get\",\r\n \"Unable to find app object\"\r\n );\r\n return undefined;\r\n }\r\n\r\n const uc = appObject.getComponent<UpdateAppAssetMetaUC>(\r\n UpdateAppAssetMetaUC.type\r\n );\r\n if (!uc) {\r\n appObjects.submitWarning(\r\n \"UpdateAppAssetMetaUC.get\",\r\n \"App Object does not have UpdateAssetMetaUC\"\r\n );\r\n return undefined;\r\n }\r\n\r\n return uc;\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new UpdateAppAssetMetaUC instance.\r\n *\r\n * @param appObject - The AppObject that will host this use case (should contain an AssetEntity)\r\n * @returns A new UpdateAppAssetMetaUC implementation instance\r\n */\r\nexport function makeUpdateAppAssetMetaUC(\r\n appObject: AppObject\r\n): UpdateAppAssetMetaUC {\r\n return new UpdateAppAssetMetaUCImp(appObject);\r\n}\r\n\r\n/**\r\n * Private implementation of UpdateAppAssetMetaUC that handles the concrete metadata update operations.\r\n *\r\n * Key Implementation Details:\r\n * - Gets asset entity from local AppObject components\r\n * - Uses PatchAssetMetaUC for backend API persistence\r\n * - Shows spinner dialogs during metadata update operations\r\n * - Handles errors gracefully with alert dialogs and logging\r\n * - Updates local asset state after successful API operations\r\n * - Manages sandbox state transitions for UI consistency\r\n */\r\nclass UpdateAppAssetMetaUCImp extends UpdateAppAssetMetaUC {\r\n /** Gets the asset entity from the local AppObject this UC operates on */\r\n private get asset() {\r\n return this.getCachedLocalComponent<AssetEntity>(AssetEntity.type);\r\n }\r\n\r\n /** Gets the spinner dialog factory for showing user feedback during operations */\r\n private get spinnerFactory() {\r\n return this.getCachedSingleton<MakeSpinnerDialogUC>(\r\n MakeSpinnerDialogUC.type\r\n );\r\n }\r\n\r\n /** Gets the API use case for patching asset metadata on the backend */\r\n private get patchAssetMeta() {\r\n return this.getCachedSingleton<PatchAssetMetaUC>(PatchAssetMetaUC.type)\r\n ?.doPatch;\r\n }\r\n\r\n /** Gets the alert dialog factory for showing error messages to users */\r\n private get alertFactory() {\r\n return this.getCachedSingleton<MakeAlertDialogUC>(MakeAlertDialogUC.type);\r\n }\r\n\r\n /** Gets the sandbox entity for managing application state transitions */\r\n private get sandbox() {\r\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\r\n }\r\n\r\n /**\r\n * Updates the asset metadata with full error handling and user feedback.\r\n *\r\n * This method handles the complete metadata update workflow:\r\n * 1. Validates the asset exists and required dependencies are available\r\n * 2. Shows a spinner dialog during the API operation\r\n * 3. Patches the metadata on the backend via API\r\n * 4. Updates the local asset entity with the new metadata\r\n * 5. Manages sandbox state transitions for UI consistency\r\n * 6. Shows error dialogs and logs failures appropriately\r\n *\r\n * @param data - DTO containing the updated metadata fields\r\n * @returns Promise that resolves when the operation completes (successfully or with handled error)\r\n */\r\n updateMeta = (data: UpdateAppAssetMetaDTO): Promise<void> => {\r\n const asset = this.asset;\r\n\r\n if (!asset) {\r\n return Promise.reject(new Error(\"No Asset Entity\"));\r\n }\r\n\r\n const patchAssetMeta = this.patchAssetMeta;\r\n if (!patchAssetMeta) {\r\n return Promise.reject(new Error(\"No Patch UC\"));\r\n }\r\n\r\n const { archived, description, name } = data;\r\n\r\n // Show user feedback during operation\r\n const spinnerDialog = this.spinnerFactory?.make({\r\n title: \"Asset Meta\",\r\n message: \"Updating asset's meta...\"\r\n });\r\n\r\n return new Promise((resolve, reject) => {\r\n patchAssetMeta({\r\n archived,\r\n description,\r\n id: asset.id,\r\n name\r\n })\r\n .then(() => {\r\n // Update local asset state with new metadata\r\n asset.archived = archived;\r\n asset.name = name;\r\n asset.description = description;\r\n\r\n spinnerDialog?.close();\r\n\r\n // Manage sandbox state for UI consistency\r\n if (this.sandbox) this.sandbox.state = SandboxState.MOUNTED;\r\n\r\n resolve();\r\n })\r\n .catch((e) => {\r\n // Handle errors with user feedback\r\n this.error(\"Patch asset error: \" + e.message);\r\n spinnerDialog?.close();\r\n const dialogDTO: DialogAlertDTO = {\r\n buttonLabel: \"OK\",\r\n message: `Something went wrong when updating the assets meta. Check the console. ${e.message}`,\r\n title: \"Update Asset Error\"\r\n };\r\n this.alertFactory?.make(dialogDTO);\r\n resolve(); // Resolve to prevent unhandled rejections, error is already handled\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Initializes the UpdateAppAssetMetaUC.\r\n *\r\n * @param appObject - The AppObject that should contain the AssetEntity this UC will operate on\r\n */\r\n constructor(appObject: AppObject) {\r\n super(appObject, UpdateAppAssetMetaUC.type);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"UpdateAppAssetMetaUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/UpdateAppAssetMetaUC.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * UpdateAppAssetMetaUC.ts\n *\n * This use case handles updating asset metadata (name, description, archived status)\n * for existing assets. It provides a complete workflow for modifying asset information\n * with user feedback and sandbox state management.\n *\n * Key Concepts:\n * - Updates asset metadata without affecting the actual file content\n * - Uses API calls to persist metadata changes on the backend\n * - Provides user feedback through spinner and error dialogs\n * - Manages sandbox state transitions after successful updates\n * - Supports partial metadata updates through DTO pattern\n *\n * Usage Patterns:\n * - Created per-asset during factory setup\n * - Accessed through static get() method with asset ID\n * - Called with metadata DTO containing updated field values\n * - Handles async operations with proper error handling and user feedback\n */\n\nimport { AppObject, AppObjectRepo, AppObjectUC } from \"@vived/core\";\nimport {\n AppSandboxEntity,\n SandboxState\n} from \"../../AppSandbox/Entities/AppSandboxEntity\";\nimport { DialogAlertDTO } from \"../../Dialog/Entities\";\nimport { MakeAlertDialogUC, MakeSpinnerDialogUC } from \"../../Dialog/UCs\";\nimport { PatchAssetMetaUC } from \"../../VivedAPI/UCs/PatchAssetMetaUC\";\nimport { AssetEntity } from \"../Entities\";\n\n/**\n * Data transfer object for asset metadata updates.\n * Contains all the metadata fields that can be modified for an asset.\n */\nexport interface UpdateAppAssetMetaDTO {\n /** Display name for the asset */\n name: string;\n /** Detailed description of the asset's purpose or content */\n description: string;\n /** Whether the asset should be archived (hidden from normal views) */\n archived: boolean;\n}\n\n/**\n * UpdateAppAssetMetaUC manages updating the metadata of individual assets.\n *\n * This use case provides the business logic for modifying asset metadata,\n * handling API persistence, and managing user feedback during the operation.\n */\nexport abstract class UpdateAppAssetMetaUC extends AppObjectUC {\n /** Static type identifier for component registration */\n static type = \"UpdateAppAssetMetaUC\";\n\n /**\n * Updates the metadata of the associated asset.\n *\n * @param data - DTO containing the updated metadata fields\n * @returns Promise that resolves when the operation completes successfully\n */\n abstract updateMeta(data: UpdateAppAssetMetaDTO): Promise<void>;\n\n /**\n * Retrieves an UpdateAppAssetMetaUC component for a specific asset.\n *\n * @param assetID - The unique identifier of the asset\n * @param appObjects - Repository for accessing app objects and components\n * @returns UpdateAppAssetMetaUC instance or undefined if not found\n */\n static get(\n assetID: string,\n appObjects: AppObjectRepo\n ): UpdateAppAssetMetaUC | undefined {\n const appObject = appObjects.get(assetID);\n if (!appObject) {\n appObjects.submitWarning(\n \"UpdateAppAssetMetaUC.get\",\n \"Unable to find app object\"\n );\n return undefined;\n }\n\n const uc = appObject.getComponent<UpdateAppAssetMetaUC>(\n UpdateAppAssetMetaUC.type\n );\n if (!uc) {\n appObjects.submitWarning(\n \"UpdateAppAssetMetaUC.get\",\n \"App Object does not have UpdateAssetMetaUC\"\n );\n return undefined;\n }\n\n return uc;\n }\n}\n\n/**\n * Factory function to create a new UpdateAppAssetMetaUC instance.\n *\n * @param appObject - The AppObject that will host this use case (should contain an AssetEntity)\n * @returns A new UpdateAppAssetMetaUC implementation instance\n */\nexport function makeUpdateAppAssetMetaUC(\n appObject: AppObject\n): UpdateAppAssetMetaUC {\n return new UpdateAppAssetMetaUCImp(appObject);\n}\n\n/**\n * Private implementation of UpdateAppAssetMetaUC that handles the concrete metadata update operations.\n *\n * Key Implementation Details:\n * - Gets asset entity from local AppObject components\n * - Uses PatchAssetMetaUC for backend API persistence\n * - Shows spinner dialogs during metadata update operations\n * - Handles errors gracefully with alert dialogs and logging\n * - Updates local asset state after successful API operations\n * - Manages sandbox state transitions for UI consistency\n */\nclass UpdateAppAssetMetaUCImp extends UpdateAppAssetMetaUC {\n /** Gets the asset entity from the local AppObject this UC operates on */\n private get asset() {\n return this.getCachedLocalComponent<AssetEntity>(AssetEntity.type);\n }\n\n /** Gets the spinner dialog factory for showing user feedback during operations */\n private get spinnerFactory() {\n return this.getCachedSingleton<MakeSpinnerDialogUC>(\n MakeSpinnerDialogUC.type\n );\n }\n\n /** Gets the API use case for patching asset metadata on the backend */\n private get patchAssetMeta() {\n return this.getCachedSingleton<PatchAssetMetaUC>(PatchAssetMetaUC.type)\n ?.doPatch;\n }\n\n /** Gets the alert dialog factory for showing error messages to users */\n private get alertFactory() {\n return this.getCachedSingleton<MakeAlertDialogUC>(MakeAlertDialogUC.type);\n }\n\n /** Gets the sandbox entity for managing application state transitions */\n private get sandbox() {\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\n }\n\n /**\n * Updates the asset metadata with full error handling and user feedback.\n *\n * This method handles the complete metadata update workflow:\n * 1. Validates the asset exists and required dependencies are available\n * 2. Shows a spinner dialog during the API operation\n * 3. Patches the metadata on the backend via API\n * 4. Updates the local asset entity with the new metadata\n * 5. Manages sandbox state transitions for UI consistency\n * 6. Shows error dialogs and logs failures appropriately\n *\n * @param data - DTO containing the updated metadata fields\n * @returns Promise that resolves when the operation completes (successfully or with handled error)\n */\n updateMeta = (data: UpdateAppAssetMetaDTO): Promise<void> => {\n const asset = this.asset;\n\n if (!asset) {\n return Promise.reject(new Error(\"No Asset Entity\"));\n }\n\n const patchAssetMeta = this.patchAssetMeta;\n if (!patchAssetMeta) {\n return Promise.reject(new Error(\"No Patch UC\"));\n }\n\n const { archived, description, name } = data;\n\n // Show user feedback during operation\n const spinnerDialog = this.spinnerFactory?.make({\n title: \"Asset Meta\",\n message: \"Updating asset's meta...\"\n });\n\n return new Promise((resolve, reject) => {\n patchAssetMeta({\n archived,\n description,\n id: asset.id,\n name\n })\n .then(() => {\n // Update local asset state with new metadata\n asset.archived = archived;\n asset.name = name;\n asset.description = description;\n\n spinnerDialog?.close();\n\n // Manage sandbox state for UI consistency\n if (this.sandbox) this.sandbox.state = SandboxState.MOUNTED;\n\n resolve();\n })\n .catch((e) => {\n // Handle errors with user feedback\n this.error(\"Patch asset error: \" + e.message);\n spinnerDialog?.close();\n const dialogDTO: DialogAlertDTO = {\n buttonLabel: \"OK\",\n message: `Something went wrong when updating the assets meta. Check the console. ${e.message}`,\n title: \"Update Asset Error\"\n };\n this.alertFactory?.make(dialogDTO);\n resolve(); // Resolve to prevent unhandled rejections, error is already handled\n });\n });\n };\n\n /**\n * Initializes the UpdateAppAssetMetaUC.\n *\n * @param appObject - The AppObject that should contain the AssetEntity this UC will operate on\n */\n constructor(appObject: AppObject) {\n super(appObject, UpdateAppAssetMetaUC.type);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateAssetFileUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/UpdateAssetFileUC.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAA4B,WAAW,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAGL,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAetD;;;;;GAKG;AACH,MAAM,OAAgB,iBAAkB,SAAQ,WAAW;IAYzD;;;;;;OAMG;IACH,MAAM,CAAC,GAAG,CACR,OAAe,EACf,UAAyB;QAEzB,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,UAAU,CAAC,aAAa,CACtB,uBAAuB,EACvB,2BAA2B,CAC5B,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,EAAE,GAAG,SAAS,CAAC,YAAY,CAC/B,iBAAiB,CAAC,IAAI,CACvB,CAAC;QACF,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,UAAU,CAAC,aAAa,CACtB,uBAAuB,EACvB,4CAA4C,CAC7C,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;;AA3CD,wDAAwD;AACjD,sBAAI,GAAG,mBAAmB,CAAC;AA6CpC;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,SAAoB;IACxD,OAAO,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,oBAAqB,SAAQ,iBAAiB;IAIlD;;;OAGG;IACH,IAAY,cAAc;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,gBAAgB,CAAC,IAAI,CAAC;YACrE,EAAE,OAAO,CAAC;IACd,CAAC;IA6DD;;;;OAIG;IACH,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAjE3C;;;;;;;;;;;;WAYG;QACH,eAAU,GAAG,CAAC,IAAU,EAAiB,EAAE;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAEzB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;YAC3C,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,CAAC;YAED,sCAAsC;YACtC,MAAM,aAAa,GAAG,mBAAmB,CAAC,IAAI,CAC5C;gBACE,KAAK,EAAE,YAAY;gBACnB,OAAO,EAAE,0BAA0B;aACpC,EACD,IAAI,CAAC,UAAU,CAChB,CAAC;YAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC;qBAC3B,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE;oBACpB,sDAAsD;oBACtD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACpB,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC;oBAE7B,aAAa,EAAE,KAAK,EAAE,CAAC;oBACvB,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oBACX,mCAAmC;oBACnC,IAAI,CAAC,KAAK,CAAC,0BAA0B,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;oBACnD,aAAa,EAAE,KAAK,EAAE,CAAC;oBACvB,MAAM,SAAS,GAAmB;wBAChC,WAAW,EAAE,IAAI;wBACjB,OAAO,EAAE,2EAA2E,CAAC,CAAC,OAAO,EAAE;wBAC/F,KAAK,EAAE,yBAAyB;qBACjC,CAAC;oBACF,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;oBACnD,OAAO,EAAE,CAAC,CAAC,oEAAoE;gBACjF,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAUA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,YAAY,CAAc,WAAW,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,CACR,sEAAsE,CACvE,CAAC;QACJ,CAAC;IACH,CAAC;CACF","sourcesContent":["/**\r\n * UpdateAssetFileUC.ts\r\n *\r\n * This use case handles updating the file content of existing assets while\r\n * preserving metadata and relationships. It provides a complete workflow\r\n * for replacing asset files with user feedback and error handling.\r\n *\r\n * Key Concepts:\r\n * - Updates asset file content while preserving metadata and relationships\r\n * - Uses API calls to persist file changes on the backend\r\n * - Provides user feedback through spinner and error dialogs\r\n * - Manages local asset state updates after successful operations\r\n * - Handles filename updates from backend processing\r\n *\r\n * Usage Patterns:\r\n * - Created per-asset during factory setup\r\n * - Accessed through static get() method with asset ID\r\n * - Called with new File object to replace existing asset content\r\n * - Handles async operations with proper error handling and user feedback\r\n */\r\n\r\nimport { AppObject, AppObjectRepo, AppObjectUC } from \"@vived/core\";\r\nimport {\r\n DialogAlertDTO,\r\n DialogQueue,\r\n MakeAlertDialogUC,\r\n MakeSpinnerDialogUC\r\n} from \"../../Dialog\";\r\nimport { PatchAssetFileUC } from \"../../VivedAPI\";\r\nimport { AssetEntity } from \"../Entities/AssetEntity\";\r\n\r\n/**\r\n * Data transfer object for asset metadata updates.\r\n * Contains the basic metadata fields that can be modified for an asset.\r\n */\r\nexport interface UpdateAssetMetaDTO {\r\n /** Display name for the asset */\r\n name: string;\r\n /** Detailed description of the asset's purpose or content */\r\n description: string;\r\n /** Whether the asset should be archived (hidden from normal views) */\r\n archived: boolean;\r\n}\r\n\r\n/**\r\n * UpdateAssetFileUC manages updating the file content of individual assets.\r\n *\r\n * This use case provides the business logic for replacing asset files,\r\n * handling API persistence, and managing user feedback during the operation.\r\n */\r\nexport abstract class UpdateAssetFileUC extends AppObjectUC {\r\n /** Static type identifier for component registration */\r\n static type = \"UpdateAssetFileUC\";\r\n\r\n /**\r\n * Updates the file content of the associated asset.\r\n *\r\n * @param file - The new file to replace the existing asset content\r\n * @returns Promise that resolves when the operation completes successfully\r\n */\r\n abstract updateFile(file: File): Promise<void>;\r\n\r\n /**\r\n * Retrieves an UpdateAssetFileUC component for a specific asset.\r\n *\r\n * @param assetID - The unique identifier of the asset\r\n * @param appObjects - Repository for accessing app objects and components\r\n * @returns UpdateAssetFileUC instance or undefined if not found\r\n */\r\n static get(\r\n assetID: string,\r\n appObjects: AppObjectRepo\r\n ): UpdateAssetFileUC | undefined {\r\n const appObject = appObjects.get(assetID);\r\n if (!appObject) {\r\n appObjects.submitWarning(\r\n \"UpdateAssetFileUC.get\",\r\n \"Unable to find app object\"\r\n );\r\n return undefined;\r\n }\r\n\r\n const uc = appObject.getComponent<UpdateAssetFileUC>(\r\n UpdateAssetFileUC.type\r\n );\r\n if (!uc) {\r\n appObjects.submitWarning(\r\n \"UpdateAssetFileUC.get\",\r\n \"App Object does not have UpdateAssetFileUC\"\r\n );\r\n return undefined;\r\n }\r\n\r\n return uc;\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new UpdateAssetFileUC instance.\r\n *\r\n * @param appObject - The AppObject that will host this use case (should contain an AssetEntity)\r\n * @returns A new UpdateAssetFileUC implementation instance\r\n */\r\nexport function makeUpdateAssetFileUC(appObject: AppObject): UpdateAssetFileUC {\r\n return new UpdateAssetFileUCImp(appObject);\r\n}\r\n\r\n/**\r\n * Private implementation of UpdateAssetFileUC that handles the concrete file update operations.\r\n *\r\n * Key Implementation Details:\r\n * - Validates asset entity existence before operations\r\n * - Uses PatchAssetFileUC for backend API persistence\r\n * - Shows spinner dialogs during file upload operations\r\n * - Handles errors gracefully with alert dialogs and logging\r\n * - Updates local asset state including file content and filename\r\n * - Preserves asset metadata and relationships during file replacement\r\n */\r\nclass UpdateAssetFileUCImp extends UpdateAssetFileUC {\r\n /** The asset entity this use case operates on */\r\n private asset?: AssetEntity;\r\n\r\n /**\r\n * Gets the API use case for patching asset files on the backend\r\n * Cached for efficient repeated access during operations\r\n */\r\n private get patchAssetFile() {\r\n return this.getCachedSingleton<PatchAssetFileUC>(PatchAssetFileUC.type)\r\n ?.doPatch;\r\n }\r\n\r\n /**\r\n * Updates the asset file with full error handling and user feedback.\r\n *\r\n * This method handles the complete file update workflow:\r\n * 1. Validates the asset exists\r\n * 2. Shows a spinner dialog during the API operation\r\n * 3. Uploads the new file to the backend via API\r\n * 4. Updates the local asset with the new file and filename\r\n * 5. Shows error dialogs and logs failures appropriately\r\n *\r\n * @param file - The new file to replace the existing asset content\r\n * @returns Promise that resolves when the operation completes (successfully or with handled error)\r\n */\r\n updateFile = (file: File): Promise<void> => {\r\n const asset = this.asset;\r\n\r\n if (!asset) {\r\n return Promise.reject(new Error(\"No Asset Entity\"));\r\n }\r\n\r\n const patchAssetFile = this.patchAssetFile;\r\n if (!patchAssetFile) {\r\n return Promise.reject();\r\n }\r\n\r\n // Show user feedback during operation\r\n const spinnerDialog = MakeSpinnerDialogUC.make(\r\n {\r\n title: \"Asset File\",\r\n message: \"Updating asset's file...\"\r\n },\r\n this.appObjects\r\n );\r\n\r\n return new Promise((resolve, reject) => {\r\n patchAssetFile(asset.id, file)\r\n .then((newFilename) => {\r\n // Update local asset state with new file and filename\r\n asset.setFile(file);\r\n asset.filename = newFilename;\r\n\r\n spinnerDialog?.close();\r\n resolve();\r\n })\r\n .catch((e) => {\r\n // Handle errors with user feedback\r\n this.error(\"Patch asset file error: \" + e.message);\r\n spinnerDialog?.close();\r\n const dialogDTO: DialogAlertDTO = {\r\n buttonLabel: \"OK\",\r\n message: `Something went wrong when updating the asset's file. Check the console. ${e.message}`,\r\n title: \"Update Asset File Error\"\r\n };\r\n MakeAlertDialogUC.make(dialogDTO, this.appObjects);\r\n resolve(); // Resolve to prevent unhandled rejections, error is already handled\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Initializes the UpdateAssetFileUC with validation of required components.\r\n *\r\n * @param appObject - The AppObject that should contain the AssetEntity this UC will operate on\r\n */\r\n constructor(appObject: AppObject) {\r\n super(appObject, UpdateAssetFileUC.type);\r\n\r\n this.asset = appObject.getComponent<AssetEntity>(AssetEntity.type);\r\n if (!this.asset) {\r\n this.error(\r\n \"UC has been added to an App Object that does not have ArchiveAssetUC\"\r\n );\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"UpdateAssetFileUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/UpdateAssetFileUC.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * UpdateAssetFileUC.ts\n *\n * This use case handles updating the file content of existing assets while\n * preserving metadata and relationships. It provides a complete workflow\n * for replacing asset files with user feedback and error handling.\n *\n * Key Concepts:\n * - Updates asset file content while preserving metadata and relationships\n * - Uses API calls to persist file changes on the backend\n * - Provides user feedback through spinner and error dialogs\n * - Manages local asset state updates after successful operations\n * - Handles filename updates from backend processing\n *\n * Usage Patterns:\n * - Created per-asset during factory setup\n * - Accessed through static get() method with asset ID\n * - Called with new File object to replace existing asset content\n * - Handles async operations with proper error handling and user feedback\n */\n\nimport { AppObject, AppObjectRepo, AppObjectUC } from \"@vived/core\";\nimport {\n DialogAlertDTO,\n DialogQueue,\n MakeAlertDialogUC,\n MakeSpinnerDialogUC\n} from \"../../Dialog\";\nimport { PatchAssetFileUC } from \"../../VivedAPI\";\nimport { AssetEntity } from \"../Entities/AssetEntity\";\n\n/**\n * Data transfer object for asset metadata updates.\n * Contains the basic metadata fields that can be modified for an asset.\n */\nexport interface UpdateAssetMetaDTO {\n /** Display name for the asset */\n name: string;\n /** Detailed description of the asset's purpose or content */\n description: string;\n /** Whether the asset should be archived (hidden from normal views) */\n archived: boolean;\n}\n\n/**\n * UpdateAssetFileUC manages updating the file content of individual assets.\n *\n * This use case provides the business logic for replacing asset files,\n * handling API persistence, and managing user feedback during the operation.\n */\nexport abstract class UpdateAssetFileUC extends AppObjectUC {\n /** Static type identifier for component registration */\n static type = \"UpdateAssetFileUC\";\n\n /**\n * Updates the file content of the associated asset.\n *\n * @param file - The new file to replace the existing asset content\n * @returns Promise that resolves when the operation completes successfully\n */\n abstract updateFile(file: File): Promise<void>;\n\n /**\n * Retrieves an UpdateAssetFileUC component for a specific asset.\n *\n * @param assetID - The unique identifier of the asset\n * @param appObjects - Repository for accessing app objects and components\n * @returns UpdateAssetFileUC instance or undefined if not found\n */\n static get(\n assetID: string,\n appObjects: AppObjectRepo\n ): UpdateAssetFileUC | undefined {\n const appObject = appObjects.get(assetID);\n if (!appObject) {\n appObjects.submitWarning(\n \"UpdateAssetFileUC.get\",\n \"Unable to find app object\"\n );\n return undefined;\n }\n\n const uc = appObject.getComponent<UpdateAssetFileUC>(\n UpdateAssetFileUC.type\n );\n if (!uc) {\n appObjects.submitWarning(\n \"UpdateAssetFileUC.get\",\n \"App Object does not have UpdateAssetFileUC\"\n );\n return undefined;\n }\n\n return uc;\n }\n}\n\n/**\n * Factory function to create a new UpdateAssetFileUC instance.\n *\n * @param appObject - The AppObject that will host this use case (should contain an AssetEntity)\n * @returns A new UpdateAssetFileUC implementation instance\n */\nexport function makeUpdateAssetFileUC(appObject: AppObject): UpdateAssetFileUC {\n return new UpdateAssetFileUCImp(appObject);\n}\n\n/**\n * Private implementation of UpdateAssetFileUC that handles the concrete file update operations.\n *\n * Key Implementation Details:\n * - Validates asset entity existence before operations\n * - Uses PatchAssetFileUC for backend API persistence\n * - Shows spinner dialogs during file upload operations\n * - Handles errors gracefully with alert dialogs and logging\n * - Updates local asset state including file content and filename\n * - Preserves asset metadata and relationships during file replacement\n */\nclass UpdateAssetFileUCImp extends UpdateAssetFileUC {\n /** The asset entity this use case operates on */\n private asset?: AssetEntity;\n\n /**\n * Gets the API use case for patching asset files on the backend\n * Cached for efficient repeated access during operations\n */\n private get patchAssetFile() {\n return this.getCachedSingleton<PatchAssetFileUC>(PatchAssetFileUC.type)\n ?.doPatch;\n }\n\n /**\n * Updates the asset file with full error handling and user feedback.\n *\n * This method handles the complete file update workflow:\n * 1. Validates the asset exists\n * 2. Shows a spinner dialog during the API operation\n * 3. Uploads the new file to the backend via API\n * 4. Updates the local asset with the new file and filename\n * 5. Shows error dialogs and logs failures appropriately\n *\n * @param file - The new file to replace the existing asset content\n * @returns Promise that resolves when the operation completes (successfully or with handled error)\n */\n updateFile = (file: File): Promise<void> => {\n const asset = this.asset;\n\n if (!asset) {\n return Promise.reject(new Error(\"No Asset Entity\"));\n }\n\n const patchAssetFile = this.patchAssetFile;\n if (!patchAssetFile) {\n return Promise.reject();\n }\n\n // Show user feedback during operation\n const spinnerDialog = MakeSpinnerDialogUC.make(\n {\n title: \"Asset File\",\n message: \"Updating asset's file...\"\n },\n this.appObjects\n );\n\n return new Promise((resolve, reject) => {\n patchAssetFile(asset.id, file)\n .then((newFilename) => {\n // Update local asset state with new file and filename\n asset.setFile(file);\n asset.filename = newFilename;\n\n spinnerDialog?.close();\n resolve();\n })\n .catch((e) => {\n // Handle errors with user feedback\n this.error(\"Patch asset file error: \" + e.message);\n spinnerDialog?.close();\n const dialogDTO: DialogAlertDTO = {\n buttonLabel: \"OK\",\n message: `Something went wrong when updating the asset's file. Check the console. ${e.message}`,\n title: \"Update Asset File Error\"\n };\n MakeAlertDialogUC.make(dialogDTO, this.appObjects);\n resolve(); // Resolve to prevent unhandled rejections, error is already handled\n });\n });\n };\n\n /**\n * Initializes the UpdateAssetFileUC with validation of required components.\n *\n * @param appObject - The AppObject that should contain the AssetEntity this UC will operate on\n */\n constructor(appObject: AppObject) {\n super(appObject, UpdateAssetFileUC.type);\n\n this.asset = appObject.getComponent<AssetEntity>(AssetEntity.type);\n if (!this.asset) {\n this.error(\n \"UC has been added to an App Object that does not have ArchiveAssetUC\"\n );\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC","sourcesContent":["/**\r\n * Assets Use Cases Index\r\n *\r\n * This module exports all use case classes for the Assets feature.\r\n * Use cases contain the business logic for asset operations and coordinate\r\n * between entities, external services, and user interface components.\r\n *\r\n * Key Concepts:\r\n * - Use cases implement specific business operations and workflows\r\n * - They coordinate between entities, APIs, and UI components\r\n * - Each UC handles validation, error management, and state updates\r\n * - Singleton UCs manage system-wide operations, per-asset UCs handle individual items\r\n * - UCs provide clean interfaces for controllers and other components\r\n *\r\n * Available Use Cases:\r\n * - Asset lifecycle: create, archive, delete, update\r\n * - File management: download, fetch, update file content\r\n * - Metadata management: update asset information and properties\r\n * - Collection management: get assets for apps, prefetch for performance\r\n * - Caching and optimization: blob URL generation, file caching strategies\r\n */\r\n\r\nexport * from \"./ArchiveAssetUC\";\r\nexport * from \"./DeleteAssetUC\";\r\nexport * from \"./DownloadAssetFileUC\";\r\nexport * from \"./EditAppAssetUC\";\r\nexport * from \"./GetAppAssetsUC\";\r\nexport * from \"./GetAssetBlobURLUC\";\r\nexport * from \"./GetAssetFileUC\";\r\nexport * from \"./GetAssetUC\";\r\nexport * from \"./NewAppAssetUC\";\r\nexport * from \"./NewAssetUC\";\r\nexport * from \"./PrefetchAssetsUC\";\r\nexport * from \"./UpdateAppAssetMetaUC\";\r\nexport * from \"./UpdateAssetFileUC\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC","sourcesContent":["/**\n * Assets Use Cases Index\n *\n * This module exports all use case classes for the Assets feature.\n * Use cases contain the business logic for asset operations and coordinate\n * between entities, external services, and user interface components.\n *\n * Key Concepts:\n * - Use cases implement specific business operations and workflows\n * - They coordinate between entities, APIs, and UI components\n * - Each UC handles validation, error management, and state updates\n * - Singleton UCs manage system-wide operations, per-asset UCs handle individual items\n * - UCs provide clean interfaces for controllers and other components\n *\n * Available Use Cases:\n * - Asset lifecycle: create, archive, delete, update\n * - File management: download, fetch, update file content\n * - Metadata management: update asset information and properties\n * - Collection management: get assets for apps, prefetch for performance\n * - Caching and optimization: blob URL generation, file caching strategies\n */\n\nexport * from \"./ArchiveAssetUC\";\nexport * from \"./DeleteAssetUC\";\nexport * from \"./DownloadAssetFileUC\";\nexport * from \"./EditAppAssetUC\";\nexport * from \"./GetAppAssetsUC\";\nexport * from \"./GetAssetBlobURLUC\";\nexport * from \"./GetAssetFileUC\";\nexport * from \"./GetAssetUC\";\nexport * from \"./NewAppAssetUC\";\nexport * from \"./NewAssetUC\";\nexport * from \"./PrefetchAssetsUC\";\nexport * from \"./UpdateAppAssetMetaUC\";\nexport * from \"./UpdateAssetFileUC\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CacheFeatureFactory.js","sourceRoot":"","sources":["../../../../src/Cache/Factories/CacheFeatureFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,aAAa,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,QAAQ,CAAC;AAEhB;;;;GAIG;AACH,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IAIpD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,CAAC,CAAC;QAJnB,+BAA+B;QACtB,gBAAW,GAAG,qBAAqB,CAAC;IAI7C,CAAC;IAED;;OAEG;IACH,aAAa;QACX,sBAAsB;QACtB,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,kBAAkB;QAClB,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,sDAAsD;IACxD,CAAC;IAED;;OAEG;IACH,UAAU;QACR,yCAAyC;IAC3C,CAAC;CACF;AAED,MAAM,UAAU,uBAAuB,CACrC,UAAyB;IAEzB,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAAC;AACrC,CAAC","sourcesContent":["import { AppObject, AppObjectRepo, DomainFactory } from \"@vived/core\";\r\nimport { makeAssetCacheEntity, makeScriptCacheEntity } from \"../Entities\";\r\nimport {\r\n makeGetAssetFromCacheUC,\r\n makeGetScriptFromCacheUC,\r\n makeStoreAssetInCacheUC,\r\n makeStoreScriptInCacheUC\r\n} from \"../UCs\";\r\n\r\n/**\r\n * Factory responsible for setting up the Cache domain components.\r\n * This factory initializes all entities, use cases, and presentation models\r\n * required for the Cache functionality.\r\n */\r\nexport class CacheFeatureFactory extends DomainFactory {\r\n // Unique name for this factory\r\n readonly factoryName = \"CacheFeatureFactory\";\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject);\r\n }\r\n\r\n /**\r\n * Sets up all entities required for the Cache system\r\n */\r\n setupEntities(): void {\r\n // Initialize entities\r\n makeScriptCacheEntity(this.appObject);\r\n makeAssetCacheEntity(this.appObject);\r\n }\r\n\r\n /**\r\n * Sets up all use cases for the Cache system\r\n */\r\n setupUCs(): void {\r\n // Cache use cases\r\n makeGetScriptFromCacheUC(this.appObject);\r\n makeStoreScriptInCacheUC(this.appObject);\r\n makeGetAssetFromCacheUC(this.appObject);\r\n makeStoreAssetInCacheUC(this.appObject);\r\n }\r\n\r\n /**\r\n * Sets up all presentation managers for the Cache system\r\n */\r\n setupPMs(): void {\r\n // No presentation managers exist for the Cache system\r\n }\r\n\r\n /**\r\n * Performs any final setup operations after all components are initialized\r\n */\r\n finalSetup(): void {\r\n // No additional setup required for cache\r\n }\r\n}\r\n\r\nexport function makeCacheFeatureFactory(\r\n appObjects: AppObjectRepo\r\n): CacheFeatureFactory {\r\n const ao = appObjects.getOrCreate(\"Cache\");\r\n return new CacheFeatureFactory(ao);\r\n}\r\n"]}
1
+ {"version":3,"file":"CacheFeatureFactory.js","sourceRoot":"","sources":["../../../../src/Cache/Factories/CacheFeatureFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,aAAa,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,QAAQ,CAAC;AAEhB;;;;GAIG;AACH,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IAIpD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,CAAC,CAAC;QAJnB,+BAA+B;QACtB,gBAAW,GAAG,qBAAqB,CAAC;IAI7C,CAAC;IAED;;OAEG;IACH,aAAa;QACX,sBAAsB;QACtB,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,kBAAkB;QAClB,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,sDAAsD;IACxD,CAAC;IAED;;OAEG;IACH,UAAU;QACR,yCAAyC;IAC3C,CAAC;CACF;AAED,MAAM,UAAU,uBAAuB,CACrC,UAAyB;IAEzB,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAAC;AACrC,CAAC","sourcesContent":["import { AppObject, AppObjectRepo, DomainFactory } from \"@vived/core\";\nimport { makeAssetCacheEntity, makeScriptCacheEntity } from \"../Entities\";\nimport {\n makeGetAssetFromCacheUC,\n makeGetScriptFromCacheUC,\n makeStoreAssetInCacheUC,\n makeStoreScriptInCacheUC\n} from \"../UCs\";\n\n/**\n * Factory responsible for setting up the Cache domain components.\n * This factory initializes all entities, use cases, and presentation models\n * required for the Cache functionality.\n */\nexport class CacheFeatureFactory extends DomainFactory {\n // Unique name for this factory\n readonly factoryName = \"CacheFeatureFactory\";\n\n constructor(appObject: AppObject) {\n super(appObject);\n }\n\n /**\n * Sets up all entities required for the Cache system\n */\n setupEntities(): void {\n // Initialize entities\n makeScriptCacheEntity(this.appObject);\n makeAssetCacheEntity(this.appObject);\n }\n\n /**\n * Sets up all use cases for the Cache system\n */\n setupUCs(): void {\n // Cache use cases\n makeGetScriptFromCacheUC(this.appObject);\n makeStoreScriptInCacheUC(this.appObject);\n makeGetAssetFromCacheUC(this.appObject);\n makeStoreAssetInCacheUC(this.appObject);\n }\n\n /**\n * Sets up all presentation managers for the Cache system\n */\n setupPMs(): void {\n // No presentation managers exist for the Cache system\n }\n\n /**\n * Performs any final setup operations after all components are initialized\n */\n finalSetup(): void {\n // No additional setup required for cache\n }\n}\n\nexport function makeCacheFeatureFactory(\n appObjects: AppObjectRepo\n): CacheFeatureFactory {\n const ao = appObjects.getOrCreate(\"Cache\");\n return new CacheFeatureFactory(ao);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Cache/Factories/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC","sourcesContent":["export * from \"./setupCache\";\r\nexport * from \"./CacheFeatureFactory\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Cache/Factories/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC","sourcesContent":["export * from \"./setupCache\";\nexport * from \"./CacheFeatureFactory\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ChallengeResults.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/Entities/ChallengeResults.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectEntity,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\n\r\nexport type ChallengeResultType =\r\n | \"HIT\"\r\n | \"MULTIHIT\"\r\n | \"QUALITY\"\r\n | \"SCORE\"\r\n | \"PROGRESS\";\r\n\r\nexport interface ChallengeResult {\r\n slideID: string;\r\n tries: number;\r\n message: string;\r\n type: ChallengeResultType;\r\n resultData:\r\n | ChallengeResultHitData\r\n | ChallengeResultMultiHitData\r\n | ChallengeResultQualityData\r\n | ChallengeResultScoreData\r\n | ChallengeResultProgressData;\r\n}\r\n\r\nexport interface ChallengeResultHitData {\r\n success: boolean;\r\n}\r\n\r\nexport interface ChallengeResultProgressData {\r\n maxProgress: number;\r\n}\r\n\r\nexport interface ChallengeResultMultiHitData {\r\n hits: number;\r\n misses: number;\r\n unanswered: number;\r\n}\r\n\r\nexport interface ChallengeResultQualityData {\r\n stars: number;\r\n maxStars: number;\r\n}\r\n\r\nexport interface ChallengeResultScoreData {\r\n score: number;\r\n maxScore: number;\r\n}\r\n\r\nexport interface ChallengeResultsState {\r\n [slideID: string]: ChallengeResult;\r\n}\r\n\r\nexport interface ActivityProgressState {\r\n slide: string;\r\n progress: number;\r\n results: ChallengeResultsState;\r\n}\r\n\r\nexport abstract class ChallengeResultsEntity extends AppObjectEntity {\r\n static type = \"ChallengeResultsEntity\";\r\n\r\n abstract get results(): ChallengeResult[];\r\n abstract submitHitResult: (\r\n slideID: string,\r\n success: boolean,\r\n tries: number,\r\n message: string\r\n ) => void;\r\n\r\n abstract submitMultiHitResult: (\r\n slideID: string,\r\n hits: number,\r\n misses: number,\r\n unanswered: number,\r\n tries: number,\r\n message: string\r\n ) => void;\r\n\r\n abstract submitQualityResult: (\r\n slideID: string,\r\n stars: number,\r\n maxStars: number,\r\n tries: number,\r\n message: string\r\n ) => void;\r\n\r\n abstract submitScoreResult: (\r\n slideID: string,\r\n score: number,\r\n maxScore: number,\r\n tries: number,\r\n message: string\r\n ) => void;\r\n\r\n abstract submitProgressResult: (\r\n slideID: string,\r\n maxProgress: number,\r\n message: string\r\n ) => void;\r\n\r\n abstract getResultForSlide: (slideID: string) => ChallengeResult | undefined;\r\n\r\n abstract getScoreForSlide: (slideID: string) => number;\r\n\r\n abstract getResultsState: () => ChallengeResultsState;\r\n\r\n abstract getInitialResultsState: () => ChallengeResultsState;\r\n\r\n abstract setResultsState: (state: ChallengeResultsState) => void;\r\n\r\n abstract get postActivityProgress():\r\n | ((progressState: ActivityProgressState) => Promise<void>)\r\n | undefined;\r\n\r\n abstract set postActivityProgress(\r\n fn: ((progressState: ActivityProgressState) => Promise<void>) | undefined\r\n );\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<ChallengeResultsEntity>(\r\n ChallengeResultsEntity.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeChallengeResults(\r\n appObject: AppObject\r\n): ChallengeResultsEntity {\r\n return new ChallengeResultsImp(appObject);\r\n}\r\n\r\nclass ChallengeResultsImp extends ChallengeResultsEntity {\r\n private resultLookup = new Map<string, ChallengeResult>();\r\n private newAttemptInProgress = new Set<string>();\r\n private initialResultsState: ChallengeResultsState = {};\r\n private _postActivityProgress:\r\n | ((progressState: ActivityProgressState) => Promise<void>)\r\n | undefined;\r\n\r\n get results(): ChallengeResult[] {\r\n return Array.from(this.resultLookup.values());\r\n }\r\n\r\n submitHitResult = (\r\n slideID: string,\r\n success: boolean,\r\n tries: number,\r\n message: string\r\n ): void => {\r\n const existingResult = this.resultLookup.get(slideID);\r\n if (existingResult && existingResult.type === \"HIT\") {\r\n const existingData = existingResult.resultData as ChallengeResultHitData;\r\n if (existingData.success === true) {\r\n return; // Already have a successful result\r\n }\r\n }\r\n\r\n const resultData: ChallengeResultHitData = {\r\n success\r\n };\r\n const result: ChallengeResult = {\r\n slideID,\r\n message,\r\n resultData,\r\n tries,\r\n type: \"HIT\"\r\n };\r\n\r\n this.resultLookup.set(slideID, result);\r\n this.notifyOnChange();\r\n };\r\n\r\n submitMultiHitResult = (\r\n slideID: string,\r\n hits: number,\r\n misses: number,\r\n unanswered: number,\r\n tries: number,\r\n message: string\r\n ): void => {\r\n const existingResult = this.resultLookup.get(slideID);\r\n if (existingResult && existingResult.type === \"MULTIHIT\") {\r\n const existingData =\r\n existingResult.resultData as ChallengeResultMultiHitData;\r\n\r\n if (existingData.hits > hits) {\r\n this.newAttemptInProgress.add(slideID); // Already have a better result, so a new attempt is in progress\r\n return;\r\n }\r\n\r\n if (existingData.hits === hits && existingData.misses <= misses) {\r\n return; // Already have an equal or better result, but it might not be a new attempt\r\n }\r\n }\r\n\r\n const isNewAttempt = this.newAttemptInProgress.has(slideID);\r\n if (isNewAttempt) {\r\n tries += 1;\r\n this.newAttemptInProgress.delete(slideID);\r\n }\r\n\r\n const resultData: ChallengeResultMultiHitData = {\r\n hits,\r\n misses,\r\n unanswered\r\n };\r\n const result: ChallengeResult = {\r\n slideID,\r\n message,\r\n resultData,\r\n tries,\r\n type: \"MULTIHIT\"\r\n };\r\n\r\n this.resultLookup.set(slideID, result);\r\n this.notifyOnChange();\r\n };\r\n\r\n submitQualityResult = (\r\n slideID: string,\r\n stars: number,\r\n maxStars: number,\r\n tries: number,\r\n message: string\r\n ): void => {\r\n const resultData: ChallengeResultQualityData = {\r\n stars,\r\n maxStars\r\n };\r\n const result: ChallengeResult = {\r\n slideID,\r\n message,\r\n resultData,\r\n tries,\r\n type: \"QUALITY\"\r\n };\r\n\r\n this.resultLookup.set(slideID, result);\r\n this.notifyOnChange();\r\n };\r\n\r\n submitScoreResult = (\r\n slideID: string,\r\n score: number,\r\n maxScore: number,\r\n tries: number,\r\n message: string\r\n ): void => {\r\n const resultData: ChallengeResultScoreData = {\r\n score,\r\n maxScore\r\n };\r\n const result: ChallengeResult = {\r\n slideID,\r\n message,\r\n resultData,\r\n tries,\r\n type: \"SCORE\"\r\n };\r\n\r\n this.resultLookup.set(slideID, result);\r\n this.notifyOnChange();\r\n };\r\n\r\n getResultForSlide = (slideID: string): ChallengeResult | undefined => {\r\n const result = this.resultLookup.get(slideID);\r\n\r\n return result;\r\n };\r\n\r\n getScoreForSlide = (slideID: string): number => {\r\n const result = this.getResultForSlide(slideID);\r\n if (!result) {\r\n return 0;\r\n }\r\n\r\n switch (result.type) {\r\n case \"HIT\": {\r\n const hitData = result.resultData as ChallengeResultHitData;\r\n return hitData.success ? 1 : 0;\r\n }\r\n case \"MULTIHIT\": {\r\n const multiHitData = result.resultData as ChallengeResultMultiHitData;\r\n const total = multiHitData.hits + multiHitData.unanswered;\r\n return total > 0 ? multiHitData.hits / total : 0;\r\n }\r\n case \"QUALITY\": {\r\n const qualityData = result.resultData as ChallengeResultQualityData;\r\n return qualityData.maxStars > 0\r\n ? qualityData.stars / qualityData.maxStars\r\n : 0;\r\n }\r\n case \"SCORE\": {\r\n const scoreData = result.resultData as ChallengeResultScoreData;\r\n return scoreData.maxScore > 0\r\n ? scoreData.score / scoreData.maxScore\r\n : 0;\r\n }\r\n case \"PROGRESS\": {\r\n const progressData = result.resultData as ChallengeResultProgressData;\r\n return progressData.maxProgress / 100;\r\n }\r\n default:\r\n return 0;\r\n }\r\n };\r\n\r\n submitProgressResult = (\r\n slideID: string,\r\n maxProgress: number,\r\n message: string\r\n ): void => {\r\n const currentResult = this.getResultForSlide(slideID);\r\n if (\r\n currentResult &&\r\n (currentResult.resultData as ChallengeResultProgressData).maxProgress >\r\n maxProgress\r\n ) {\r\n return;\r\n }\r\n\r\n const resultData: ChallengeResultProgressData = {\r\n maxProgress\r\n };\r\n const result: ChallengeResult = {\r\n slideID,\r\n message,\r\n resultData,\r\n tries: 1,\r\n type: \"PROGRESS\"\r\n };\r\n\r\n this.resultLookup.set(slideID, result);\r\n this.notifyOnChange();\r\n };\r\n\r\n getResultsState = (): ChallengeResultsState => {\r\n const state: ChallengeResultsState = {};\r\n this.resultLookup.forEach((result, slideID) => {\r\n state[slideID] = result;\r\n });\r\n return state;\r\n };\r\n\r\n getInitialResultsState = (): ChallengeResultsState => {\r\n return this.initialResultsState;\r\n };\r\n\r\n setResultsState = (state: ChallengeResultsState): void => {\r\n this.resultLookup.clear();\r\n this.newAttemptInProgress.clear();\r\n this.initialResultsState = { ...state };\r\n Object.entries(state).forEach(([slideID, result]) => {\r\n this.resultLookup.set(slideID, result);\r\n });\r\n this.notifyOnChange();\r\n };\r\n\r\n get postActivityProgress() {\r\n return this._postActivityProgress;\r\n }\r\n\r\n set postActivityProgress(\r\n fn: ((progressState: ActivityProgressState) => Promise<void>) | undefined\r\n ) {\r\n if (this._postActivityProgress !== fn) {\r\n this._postActivityProgress = fn;\r\n this.notifyOnChange();\r\n }\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ChallengeResultsEntity.type);\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ChallengeResults.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/Entities/ChallengeResults.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getSingletonComponent,\n AppObject,\n AppObjectEntity,\n AppObjectRepo\n} from \"@vived/core\";\n\nexport type ChallengeResultType =\n | \"HIT\"\n | \"MULTIHIT\"\n | \"QUALITY\"\n | \"SCORE\"\n | \"PROGRESS\";\n\nexport interface ChallengeResult {\n slideID: string;\n tries: number;\n message: string;\n type: ChallengeResultType;\n resultData:\n | ChallengeResultHitData\n | ChallengeResultMultiHitData\n | ChallengeResultQualityData\n | ChallengeResultScoreData\n | ChallengeResultProgressData;\n}\n\nexport interface ChallengeResultHitData {\n success: boolean;\n}\n\nexport interface ChallengeResultProgressData {\n maxProgress: number;\n}\n\nexport interface ChallengeResultMultiHitData {\n hits: number;\n misses: number;\n unanswered: number;\n}\n\nexport interface ChallengeResultQualityData {\n stars: number;\n maxStars: number;\n}\n\nexport interface ChallengeResultScoreData {\n score: number;\n maxScore: number;\n}\n\nexport interface ChallengeResultsState {\n [slideID: string]: ChallengeResult;\n}\n\nexport interface ActivityProgressState {\n slide: string;\n progress: number;\n results: ChallengeResultsState;\n}\n\nexport abstract class ChallengeResultsEntity extends AppObjectEntity {\n static type = \"ChallengeResultsEntity\";\n\n abstract get results(): ChallengeResult[];\n abstract submitHitResult: (\n slideID: string,\n success: boolean,\n tries: number,\n message: string\n ) => void;\n\n abstract submitMultiHitResult: (\n slideID: string,\n hits: number,\n misses: number,\n unanswered: number,\n tries: number,\n message: string\n ) => void;\n\n abstract submitQualityResult: (\n slideID: string,\n stars: number,\n maxStars: number,\n tries: number,\n message: string\n ) => void;\n\n abstract submitScoreResult: (\n slideID: string,\n score: number,\n maxScore: number,\n tries: number,\n message: string\n ) => void;\n\n abstract submitProgressResult: (\n slideID: string,\n maxProgress: number,\n message: string\n ) => void;\n\n abstract getResultForSlide: (slideID: string) => ChallengeResult | undefined;\n\n abstract getScoreForSlide: (slideID: string) => number;\n\n abstract getResultsState: () => ChallengeResultsState;\n\n abstract getInitialResultsState: () => ChallengeResultsState;\n\n abstract setResultsState: (state: ChallengeResultsState) => void;\n\n abstract get postActivityProgress():\n | ((progressState: ActivityProgressState) => Promise<void>)\n | undefined;\n\n abstract set postActivityProgress(\n fn: ((progressState: ActivityProgressState) => Promise<void>) | undefined\n );\n\n static get(appObjects: AppObjectRepo) {\n return getSingletonComponent<ChallengeResultsEntity>(\n ChallengeResultsEntity.type,\n appObjects\n );\n }\n}\n\nexport function makeChallengeResults(\n appObject: AppObject\n): ChallengeResultsEntity {\n return new ChallengeResultsImp(appObject);\n}\n\nclass ChallengeResultsImp extends ChallengeResultsEntity {\n private resultLookup = new Map<string, ChallengeResult>();\n private newAttemptInProgress = new Set<string>();\n private initialResultsState: ChallengeResultsState = {};\n private _postActivityProgress:\n | ((progressState: ActivityProgressState) => Promise<void>)\n | undefined;\n\n get results(): ChallengeResult[] {\n return Array.from(this.resultLookup.values());\n }\n\n submitHitResult = (\n slideID: string,\n success: boolean,\n tries: number,\n message: string\n ): void => {\n const existingResult = this.resultLookup.get(slideID);\n if (existingResult && existingResult.type === \"HIT\") {\n const existingData = existingResult.resultData as ChallengeResultHitData;\n if (existingData.success === true) {\n return; // Already have a successful result\n }\n }\n\n const resultData: ChallengeResultHitData = {\n success\n };\n const result: ChallengeResult = {\n slideID,\n message,\n resultData,\n tries,\n type: \"HIT\"\n };\n\n this.resultLookup.set(slideID, result);\n this.notifyOnChange();\n };\n\n submitMultiHitResult = (\n slideID: string,\n hits: number,\n misses: number,\n unanswered: number,\n tries: number,\n message: string\n ): void => {\n const existingResult = this.resultLookup.get(slideID);\n if (existingResult && existingResult.type === \"MULTIHIT\") {\n const existingData =\n existingResult.resultData as ChallengeResultMultiHitData;\n\n if (existingData.hits > hits) {\n this.newAttemptInProgress.add(slideID); // Already have a better result, so a new attempt is in progress\n return;\n }\n\n if (existingData.hits === hits && existingData.misses <= misses) {\n return; // Already have an equal or better result, but it might not be a new attempt\n }\n }\n\n const isNewAttempt = this.newAttemptInProgress.has(slideID);\n if (isNewAttempt) {\n tries += 1;\n this.newAttemptInProgress.delete(slideID);\n }\n\n const resultData: ChallengeResultMultiHitData = {\n hits,\n misses,\n unanswered\n };\n const result: ChallengeResult = {\n slideID,\n message,\n resultData,\n tries,\n type: \"MULTIHIT\"\n };\n\n this.resultLookup.set(slideID, result);\n this.notifyOnChange();\n };\n\n submitQualityResult = (\n slideID: string,\n stars: number,\n maxStars: number,\n tries: number,\n message: string\n ): void => {\n const resultData: ChallengeResultQualityData = {\n stars,\n maxStars\n };\n const result: ChallengeResult = {\n slideID,\n message,\n resultData,\n tries,\n type: \"QUALITY\"\n };\n\n this.resultLookup.set(slideID, result);\n this.notifyOnChange();\n };\n\n submitScoreResult = (\n slideID: string,\n score: number,\n maxScore: number,\n tries: number,\n message: string\n ): void => {\n const resultData: ChallengeResultScoreData = {\n score,\n maxScore\n };\n const result: ChallengeResult = {\n slideID,\n message,\n resultData,\n tries,\n type: \"SCORE\"\n };\n\n this.resultLookup.set(slideID, result);\n this.notifyOnChange();\n };\n\n getResultForSlide = (slideID: string): ChallengeResult | undefined => {\n const result = this.resultLookup.get(slideID);\n\n return result;\n };\n\n getScoreForSlide = (slideID: string): number => {\n const result = this.getResultForSlide(slideID);\n if (!result) {\n return 0;\n }\n\n switch (result.type) {\n case \"HIT\": {\n const hitData = result.resultData as ChallengeResultHitData;\n return hitData.success ? 1 : 0;\n }\n case \"MULTIHIT\": {\n const multiHitData = result.resultData as ChallengeResultMultiHitData;\n const total = multiHitData.hits + multiHitData.unanswered;\n return total > 0 ? multiHitData.hits / total : 0;\n }\n case \"QUALITY\": {\n const qualityData = result.resultData as ChallengeResultQualityData;\n return qualityData.maxStars > 0\n ? qualityData.stars / qualityData.maxStars\n : 0;\n }\n case \"SCORE\": {\n const scoreData = result.resultData as ChallengeResultScoreData;\n return scoreData.maxScore > 0\n ? scoreData.score / scoreData.maxScore\n : 0;\n }\n case \"PROGRESS\": {\n const progressData = result.resultData as ChallengeResultProgressData;\n return progressData.maxProgress / 100;\n }\n default:\n return 0;\n }\n };\n\n submitProgressResult = (\n slideID: string,\n maxProgress: number,\n message: string\n ): void => {\n const currentResult = this.getResultForSlide(slideID);\n if (\n currentResult &&\n (currentResult.resultData as ChallengeResultProgressData).maxProgress >\n maxProgress\n ) {\n return;\n }\n\n const resultData: ChallengeResultProgressData = {\n maxProgress\n };\n const result: ChallengeResult = {\n slideID,\n message,\n resultData,\n tries: 1,\n type: \"PROGRESS\"\n };\n\n this.resultLookup.set(slideID, result);\n this.notifyOnChange();\n };\n\n getResultsState = (): ChallengeResultsState => {\n const state: ChallengeResultsState = {};\n this.resultLookup.forEach((result, slideID) => {\n state[slideID] = result;\n });\n return state;\n };\n\n getInitialResultsState = (): ChallengeResultsState => {\n return this.initialResultsState;\n };\n\n setResultsState = (state: ChallengeResultsState): void => {\n this.resultLookup.clear();\n this.newAttemptInProgress.clear();\n this.initialResultsState = { ...state };\n Object.entries(state).forEach(([slideID, result]) => {\n this.resultLookup.set(slideID, result);\n });\n this.notifyOnChange();\n };\n\n get postActivityProgress() {\n return this._postActivityProgress;\n }\n\n set postActivityProgress(\n fn: ((progressState: ActivityProgressState) => Promise<void>) | undefined\n ) {\n if (this._postActivityProgress !== fn) {\n this._postActivityProgress = fn;\n this.notifyOnChange();\n }\n }\n\n constructor(appObject: AppObject) {\n super(appObject, ChallengeResultsEntity.type);\n this.appObjects.registerSingleton(this);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ChallengeResultsFactory.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/Factories/ChallengeResultsFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,aAAa,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,QAAQ,CAAC;AAEhB;;;;GAIG;AACH,MAAM,OAAO,uBAAwB,SAAQ,aAAa;IAIxD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,CAAC,CAAC;QAJnB,+BAA+B;QACtB,gBAAW,GAAG,yBAAyB,CAAC;IAIjD,CAAC;IAED;;OAEG;IACH,aAAa;QACX,sBAAsB;QACtB,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,oCAAoC;IACtC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,mCAAmC;QACnC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,UAAU;QACR,oDAAoD;IACtD,CAAC;CACF;AAED,MAAM,UAAU,2BAA2B,CACzC,UAAyB;IAEzB,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IACtD,OAAO,IAAI,uBAAuB,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC","sourcesContent":["import { AppObject, AppObjectRepo, DomainFactory } from \"@vived/core\";\r\nimport { makeChallengeResults } from \"../Entities\";\r\nimport {\r\n makeChallengeResultsPM,\r\n makeChallengeScoreListPM,\r\n makeHasChallengeResultsPM\r\n} from \"../PMs\";\r\n\r\n/**\r\n * Factory responsible for setting up the ChallengeResults domain components.\r\n * This factory initializes all entities, use cases, and presentation models\r\n * required for the ChallengeResults functionality.\r\n */\r\nexport class ChallengeResultsFactory extends DomainFactory {\r\n // Unique name for this factory\r\n readonly factoryName = \"ChallengeResultsFactory\";\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject);\r\n }\r\n\r\n /**\r\n * Sets up all entities required for the ChallengeResults system\r\n */\r\n setupEntities(): void {\r\n // Initialize entities\r\n makeChallengeResults(this.appObject);\r\n }\r\n\r\n /**\r\n * Sets up all use cases for the ChallengeResults system\r\n */\r\n setupUCs(): void {\r\n // No use cases for ChallengeResults\r\n }\r\n\r\n /**\r\n * Sets up all presentation managers for the ChallengeResults system\r\n */\r\n setupPMs(): void {\r\n // Initialize presentation managers\r\n makeChallengeResultsPM(this.appObject);\r\n makeChallengeScoreListPM(this.appObject);\r\n makeHasChallengeResultsPM(this.appObject);\r\n }\r\n\r\n /**\r\n * Performs any final setup operations after all components are initialized\r\n */\r\n finalSetup(): void {\r\n // No additional setup required for ChallengeResults\r\n }\r\n}\r\n\r\nexport function makeChallengeResultsFactory(\r\n appObjects: AppObjectRepo\r\n): ChallengeResultsFactory {\r\n const ao = appObjects.getOrCreate(\"ChallengeResults\");\r\n return new ChallengeResultsFactory(ao);\r\n}\r\n"]}
1
+ {"version":3,"file":"ChallengeResultsFactory.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/Factories/ChallengeResultsFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,aAAa,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,QAAQ,CAAC;AAEhB;;;;GAIG;AACH,MAAM,OAAO,uBAAwB,SAAQ,aAAa;IAIxD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,CAAC,CAAC;QAJnB,+BAA+B;QACtB,gBAAW,GAAG,yBAAyB,CAAC;IAIjD,CAAC;IAED;;OAEG;IACH,aAAa;QACX,sBAAsB;QACtB,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,oCAAoC;IACtC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,mCAAmC;QACnC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,UAAU;QACR,oDAAoD;IACtD,CAAC;CACF;AAED,MAAM,UAAU,2BAA2B,CACzC,UAAyB;IAEzB,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IACtD,OAAO,IAAI,uBAAuB,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC","sourcesContent":["import { AppObject, AppObjectRepo, DomainFactory } from \"@vived/core\";\nimport { makeChallengeResults } from \"../Entities\";\nimport {\n makeChallengeResultsPM,\n makeChallengeScoreListPM,\n makeHasChallengeResultsPM\n} from \"../PMs\";\n\n/**\n * Factory responsible for setting up the ChallengeResults domain components.\n * This factory initializes all entities, use cases, and presentation models\n * required for the ChallengeResults functionality.\n */\nexport class ChallengeResultsFactory extends DomainFactory {\n // Unique name for this factory\n readonly factoryName = \"ChallengeResultsFactory\";\n\n constructor(appObject: AppObject) {\n super(appObject);\n }\n\n /**\n * Sets up all entities required for the ChallengeResults system\n */\n setupEntities(): void {\n // Initialize entities\n makeChallengeResults(this.appObject);\n }\n\n /**\n * Sets up all use cases for the ChallengeResults system\n */\n setupUCs(): void {\n // No use cases for ChallengeResults\n }\n\n /**\n * Sets up all presentation managers for the ChallengeResults system\n */\n setupPMs(): void {\n // Initialize presentation managers\n makeChallengeResultsPM(this.appObject);\n makeChallengeScoreListPM(this.appObject);\n makeHasChallengeResultsPM(this.appObject);\n }\n\n /**\n * Performs any final setup operations after all components are initialized\n */\n finalSetup(): void {\n // No additional setup required for ChallengeResults\n }\n}\n\nexport function makeChallengeResultsFactory(\n appObjects: AppObjectRepo\n): ChallengeResultsFactory {\n const ao = appObjects.getOrCreate(\"ChallengeResults\");\n return new ChallengeResultsFactory(ao);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ChallengeResultsListPM.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/PMs/ChallengeResultsListPM.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectPM, AppObjectRepo } from \"@vived/core\";\r\nimport { HostStateMachine } from \"../../StateMachine/Entities/HostStateMachine\";\r\nimport {\r\n ChallengeResultHitData,\r\n ChallengeResultMultiHitData,\r\n ChallengeResultProgressData,\r\n ChallengeResultQualityData,\r\n ChallengeResultScoreData,\r\n ChallengeResultsEntity,\r\n ChallengeResultType\r\n} from \"../Entities/ChallengeResults\";\r\nimport { ChallengeResponse } from \"../../StateMachine\";\r\n\r\nexport interface ChallengeResultVM {\r\n id: string;\r\n slideName: string;\r\n attempts: number;\r\n message: string;\r\n resultType?: ChallengeResultType;\r\n stateIndex: number;\r\n resultData?:\r\n | ChallengeResultHitData\r\n | ChallengeResultMultiHitData\r\n | ChallengeResultQualityData\r\n | ChallengeResultScoreData\r\n | ChallengeResultProgressData;\r\n}\r\n\r\nexport abstract class ChallengeResultsListPM extends AppObjectPM<\r\n ChallengeResultVM[]\r\n> {\r\n static type = \"ChallengeResultsListPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return appObjects.getSingleton<ChallengeResultsListPM>(\r\n ChallengeResultsListPM.type\r\n );\r\n }\r\n}\r\n\r\nexport function makeChallengeResultsPM(\r\n appObject: AppObject\r\n): ChallengeResultsListPM {\r\n return new ChallengeResultsPMImp(appObject);\r\n}\r\n\r\nclass ChallengeResultsPMImp extends ChallengeResultsListPM {\r\n private get results() {\r\n return this.getCachedSingleton<ChallengeResultsEntity>(\r\n ChallengeResultsEntity.type\r\n );\r\n }\r\n\r\n private get stateMachine() {\r\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\r\n }\r\n\r\n vmsAreEqual(a: ChallengeResultVM[], b: ChallengeResultVM[]): boolean {\r\n if (a.length !== b.length) return false;\r\n\r\n let areEqual = true;\r\n a.forEach((aResult, i) => {\r\n const bResult = b[i];\r\n if (aResult.id !== bResult.id) areEqual = false;\r\n else if (aResult.attempts !== bResult.attempts) areEqual = false;\r\n else if (aResult.resultData !== bResult.resultData) areEqual = false;\r\n });\r\n return areEqual;\r\n }\r\n\r\n onEntityChange = (): void => {\r\n if (!this.results || !this.stateMachine) return;\r\n\r\n const organizedResults: ChallengeResultVM[] = [];\r\n\r\n // Get all states from state machine\r\n const stateIds = this.stateMachine.states;\r\n\r\n // Process each state\r\n stateIds.forEach((stateId) => {\r\n const state = this.stateMachine!.getStateByID(stateId);\r\n if (!state) return;\r\n\r\n const stateIndex = this.stateMachine!.getStateIndex(stateId) ?? -1;\r\n const result = this.results!.getResultForSlide(stateId);\r\n\r\n // If state has a result, add it with all result data\r\n if (result) {\r\n const vm: ChallengeResultVM = {\r\n id: stateId,\r\n slideName: state.name,\r\n attempts: result.tries,\r\n resultType: result.type,\r\n message: result.message,\r\n stateIndex,\r\n resultData: result.resultData\r\n };\r\n\r\n organizedResults.push(vm);\r\n }\r\n // If state has no result but has expected response that's not NONE, add it with partial data\r\n else if (\r\n state.expectedResponse !== undefined &&\r\n state.expectedResponse !== ChallengeResponse.NONE\r\n ) {\r\n const vm: ChallengeResultVM = {\r\n id: stateId,\r\n slideName: state.name,\r\n attempts: 0,\r\n stateIndex,\r\n message: \"Incomplete\"\r\n };\r\n\r\n organizedResults.push(vm);\r\n }\r\n });\r\n\r\n this.doUpdateView(organizedResults);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ChallengeResultsListPM.type);\r\n this.doUpdateView([]);\r\n this.results?.addChangeObserver(this.onEntityChange);\r\n this.stateMachine?.addChangeObserver(this.onEntityChange);\r\n\r\n // Initial update\r\n this.onEntityChange();\r\n\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ChallengeResultsListPM.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/PMs/ChallengeResultsListPM.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectPM, AppObjectRepo } from \"@vived/core\";\nimport { HostStateMachine } from \"../../StateMachine/Entities/HostStateMachine\";\nimport {\n ChallengeResultHitData,\n ChallengeResultMultiHitData,\n ChallengeResultProgressData,\n ChallengeResultQualityData,\n ChallengeResultScoreData,\n ChallengeResultsEntity,\n ChallengeResultType\n} from \"../Entities/ChallengeResults\";\nimport { ChallengeResponse } from \"../../StateMachine\";\n\nexport interface ChallengeResultVM {\n id: string;\n slideName: string;\n attempts: number;\n message: string;\n resultType?: ChallengeResultType;\n stateIndex: number;\n resultData?:\n | ChallengeResultHitData\n | ChallengeResultMultiHitData\n | ChallengeResultQualityData\n | ChallengeResultScoreData\n | ChallengeResultProgressData;\n}\n\nexport abstract class ChallengeResultsListPM extends AppObjectPM<\n ChallengeResultVM[]\n> {\n static type = \"ChallengeResultsListPM\";\n\n static get(appObjects: AppObjectRepo) {\n return appObjects.getSingleton<ChallengeResultsListPM>(\n ChallengeResultsListPM.type\n );\n }\n}\n\nexport function makeChallengeResultsPM(\n appObject: AppObject\n): ChallengeResultsListPM {\n return new ChallengeResultsPMImp(appObject);\n}\n\nclass ChallengeResultsPMImp extends ChallengeResultsListPM {\n private get results() {\n return this.getCachedSingleton<ChallengeResultsEntity>(\n ChallengeResultsEntity.type\n );\n }\n\n private get stateMachine() {\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\n }\n\n vmsAreEqual(a: ChallengeResultVM[], b: ChallengeResultVM[]): boolean {\n if (a.length !== b.length) return false;\n\n let areEqual = true;\n a.forEach((aResult, i) => {\n const bResult = b[i];\n if (aResult.id !== bResult.id) areEqual = false;\n else if (aResult.attempts !== bResult.attempts) areEqual = false;\n else if (aResult.resultData !== bResult.resultData) areEqual = false;\n });\n return areEqual;\n }\n\n onEntityChange = (): void => {\n if (!this.results || !this.stateMachine) return;\n\n const organizedResults: ChallengeResultVM[] = [];\n\n // Get all states from state machine\n const stateIds = this.stateMachine.states;\n\n // Process each state\n stateIds.forEach((stateId) => {\n const state = this.stateMachine!.getStateByID(stateId);\n if (!state) return;\n\n const stateIndex = this.stateMachine!.getStateIndex(stateId) ?? -1;\n const result = this.results!.getResultForSlide(stateId);\n\n // If state has a result, add it with all result data\n if (result) {\n const vm: ChallengeResultVM = {\n id: stateId,\n slideName: state.name,\n attempts: result.tries,\n resultType: result.type,\n message: result.message,\n stateIndex,\n resultData: result.resultData\n };\n\n organizedResults.push(vm);\n }\n // If state has no result but has expected response that's not NONE, add it with partial data\n else if (\n state.expectedResponse !== undefined &&\n state.expectedResponse !== ChallengeResponse.NONE\n ) {\n const vm: ChallengeResultVM = {\n id: stateId,\n slideName: state.name,\n attempts: 0,\n stateIndex,\n message: \"Incomplete\"\n };\n\n organizedResults.push(vm);\n }\n });\n\n this.doUpdateView(organizedResults);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, ChallengeResultsListPM.type);\n this.doUpdateView([]);\n this.results?.addChangeObserver(this.onEntityChange);\n this.stateMachine?.addChangeObserver(this.onEntityChange);\n\n // Initial update\n this.onEntityChange();\n\n this.appObjects.registerSingleton(this);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"HasChallengeResultsPM.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/PMs/HasChallengeResultsPM.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oBAAoB,EAEpB,qBAAqB,EACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAEhF,MAAM,OAAgB,qBAAsB,SAAQ,oBAA6B;IAG/E,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAC1B,qBAAqB,CAAC,IAAI,EAC1B,UAAU,CACX,CAAC;IACJ,CAAC;;AAPM,0BAAI,GAAG,uBAAuB,CAAC;AAUxC,MAAM,UAAU,yBAAyB,CACvC,SAAoB;IAEpB,OAAO,IAAI,wBAAwB,CAAC,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,wBAAyB,SAAQ,qBAAqB;IAG1D,IAAY,aAAa;QACvB,OAAO,IAAI,CAAC,kBAAkB,CAC5B,sBAAsB,CAAC,IAAI,CAC5B,CAAC;IACJ,CAAC;IAED,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IA2BD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;QA1C/C,cAAS,GAAG,KAAK,CAAC;QAgBlB,WAAM,GAAG,GAAS,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,aAAa;gBAAE,OAAO;YAEhC,IAAI,oBAAoB,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC;YAE3E,kEAAkE;YAClE,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBAE1C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtD,IACE,KAAK;wBACL,KAAK,CAAC,gBAAgB,KAAK,SAAS;wBACpC,KAAK,CAAC,gBAAgB,KAAK,iBAAiB,CAAC,IAAI,EACjD,CAAC;wBACD,oBAAoB,GAAG,IAAI,CAAC;wBAC5B,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;QAC1C,CAAC,CAAC;QAKA,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;CACF","sourcesContent":["import {\r\n AppObject,\r\n AppObjectSingletonPM,\r\n AppObjectRepo,\r\n getSingletonComponent\r\n} from \"@vived/core\";\r\nimport { ChallengeResultsEntity } from \"../Entities\";\r\nimport { HostStateMachine } from \"../../StateMachine/Entities/HostStateMachine\";\r\nimport { ChallengeResponse } from \"../../StateMachine/Entities/HostStateEntity\";\r\n\r\nexport abstract class HasChallengeResultsPM extends AppObjectSingletonPM<boolean> {\r\n static type = \"HasChallengeResultsPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<HasChallengeResultsPM>(\r\n HasChallengeResultsPM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeHasChallengeResultsPM(\r\n appObject: AppObject\r\n): HasChallengeResultsPM {\r\n return new HasChallengeResultsPMImp(appObject);\r\n}\r\n\r\nclass HasChallengeResultsPMImp extends HasChallengeResultsPM {\r\n defaultVM = false;\r\n\r\n private get resultsEntity() {\r\n return this.getCachedSingleton<ChallengeResultsEntity>(\r\n ChallengeResultsEntity.type\r\n );\r\n }\r\n\r\n private get stateMachine() {\r\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\r\n }\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n formVM = (): void => {\r\n if (!this.resultsEntity) return;\r\n\r\n let hasAssessmentResults = this.resultsEntity.results?.length > 0 || false;\r\n\r\n // If no results are found, check for expected responses in states\r\n if (!hasAssessmentResults && this.stateMachine) {\r\n const stateIds = this.stateMachine.states;\r\n\r\n for (const stateId of stateIds) {\r\n const state = this.stateMachine.getStateByID(stateId);\r\n if (\r\n state &&\r\n state.expectedResponse !== undefined &&\r\n state.expectedResponse !== ChallengeResponse.NONE\r\n ) {\r\n hasAssessmentResults = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.doUpdateView(hasAssessmentResults);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, HasChallengeResultsPM.type);\r\n\r\n if (this.resultsEntity) {\r\n this.observeEntity(this.resultsEntity);\r\n }\r\n if (this.stateMachine) {\r\n this.observeEntity(this.stateMachine);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"HasChallengeResultsPM.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/PMs/HasChallengeResultsPM.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oBAAoB,EAEpB,qBAAqB,EACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAEhF,MAAM,OAAgB,qBAAsB,SAAQ,oBAA6B;IAG/E,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAC1B,qBAAqB,CAAC,IAAI,EAC1B,UAAU,CACX,CAAC;IACJ,CAAC;;AAPM,0BAAI,GAAG,uBAAuB,CAAC;AAUxC,MAAM,UAAU,yBAAyB,CACvC,SAAoB;IAEpB,OAAO,IAAI,wBAAwB,CAAC,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,wBAAyB,SAAQ,qBAAqB;IAG1D,IAAY,aAAa;QACvB,OAAO,IAAI,CAAC,kBAAkB,CAC5B,sBAAsB,CAAC,IAAI,CAC5B,CAAC;IACJ,CAAC;IAED,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IA2BD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;QA1C/C,cAAS,GAAG,KAAK,CAAC;QAgBlB,WAAM,GAAG,GAAS,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,aAAa;gBAAE,OAAO;YAEhC,IAAI,oBAAoB,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC;YAE3E,kEAAkE;YAClE,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBAE1C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtD,IACE,KAAK;wBACL,KAAK,CAAC,gBAAgB,KAAK,SAAS;wBACpC,KAAK,CAAC,gBAAgB,KAAK,iBAAiB,CAAC,IAAI,EACjD,CAAC;wBACD,oBAAoB,GAAG,IAAI,CAAC;wBAC5B,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;QAC1C,CAAC,CAAC;QAKA,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;CACF","sourcesContent":["import {\n AppObject,\n AppObjectSingletonPM,\n AppObjectRepo,\n getSingletonComponent\n} from \"@vived/core\";\nimport { ChallengeResultsEntity } from \"../Entities\";\nimport { HostStateMachine } from \"../../StateMachine/Entities/HostStateMachine\";\nimport { ChallengeResponse } from \"../../StateMachine/Entities/HostStateEntity\";\n\nexport abstract class HasChallengeResultsPM extends AppObjectSingletonPM<boolean> {\n static type = \"HasChallengeResultsPM\";\n\n static get(appObjects: AppObjectRepo) {\n return getSingletonComponent<HasChallengeResultsPM>(\n HasChallengeResultsPM.type,\n appObjects\n );\n }\n}\n\nexport function makeHasChallengeResultsPM(\n appObject: AppObject\n): HasChallengeResultsPM {\n return new HasChallengeResultsPMImp(appObject);\n}\n\nclass HasChallengeResultsPMImp extends HasChallengeResultsPM {\n defaultVM = false;\n\n private get resultsEntity() {\n return this.getCachedSingleton<ChallengeResultsEntity>(\n ChallengeResultsEntity.type\n );\n }\n\n private get stateMachine() {\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\n }\n\n vmsAreEqual(a: boolean, b: boolean): boolean {\n return a === b;\n }\n\n formVM = (): void => {\n if (!this.resultsEntity) return;\n\n let hasAssessmentResults = this.resultsEntity.results?.length > 0 || false;\n\n // If no results are found, check for expected responses in states\n if (!hasAssessmentResults && this.stateMachine) {\n const stateIds = this.stateMachine.states;\n\n for (const stateId of stateIds) {\n const state = this.stateMachine.getStateByID(stateId);\n if (\n state &&\n state.expectedResponse !== undefined &&\n state.expectedResponse !== ChallengeResponse.NONE\n ) {\n hasAssessmentResults = true;\n break;\n }\n }\n }\n\n this.doUpdateView(hasAssessmentResults);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, HasChallengeResultsPM.type);\n\n if (this.resultsEntity) {\n this.observeEntity(this.resultsEntity);\n }\n if (this.stateMachine) {\n this.observeEntity(this.stateMachine);\n }\n }\n}\n"]}
@@ -28,8 +28,7 @@ export class SandboxDialogFactory extends DomainFactory {
28
28
  /**
29
29
  * Sets up all use cases for the Dialog system
30
30
  */
31
- setupUCs() {
32
- }
31
+ setupUCs() { }
33
32
  /**
34
33
  * Sets up all presentation managers for the Dialog system
35
34
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SandboxDialogFactory.js","sourceRoot":"","sources":["../../../../src/Dialog/Factories/SandboxDialogFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,aAAa,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,2BAA2B,EAC3B,uBAAuB,EACxB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D;;;;GAIG;AACH,MAAM,OAAO,oBAAqB,SAAQ,aAAa;IAIrD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,CAAC,CAAC;QAJnB,+BAA+B;QACtB,gBAAW,GAAG,sBAAsB,CAAC;IAI9C,CAAC;IAED;;OAEG;IACH,aAAa;QACX,sBAAsB;QACtB,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,QAAQ;IACR,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,mCAAmC;QACnC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,wCAAwC;QACxC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,gBAAgB,CAC9D,IAAI,CAAC,UAAU,CAChB,CAAC;QACF,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,kBAAkB,CAClE,IAAI,CAAC,UAAU,CAChB,CAAC;QACF,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO;YAC9C,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,kBAAkB,CAClE,IAAI,CAAC,UAAU,CAChB,CAAC;QACF,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO;YACjD,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;CACF;AAED,MAAM,UAAU,wBAAwB,CACtC,UAAyB;IAEzB,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,IAAI,oBAAoB,CAAC,EAAE,CAAC,CAAC;AACtC,CAAC","sourcesContent":["import { AppObject, AppObjectRepo, DomainFactory } from \"@vived/core\";\r\nimport { makeDialogQueue } from \"../Entities\";\r\nimport { makeDialogQueuePM } from \"../PMs\";\r\nimport {\r\n makeMakeAlertDialogUC,\r\n makeMakeConfirmDialogUC,\r\n makeMakeMarkdownDialogUC,\r\n makeMakeSelectModelDialogUC,\r\n makeMakeSpinnerDialogUC\r\n} from \"../UCs\";\r\nimport { makeAlertFactory } from \"./alertDialogFactory\";\r\nimport { makeConfirmFactory } from \"./confirmDialogFactory\";\r\nimport { makeMarkdownEditorFactory } from \"./markdownDialogEditorFactory\";\r\nimport { makeSelectModelFactory } from \"./selectDialogModelFactory\";\r\nimport { makeSpinnerFactory } from \"./spinnerDialogFactory\";\r\n\r\n/**\r\n * Factory responsible for setting up the Dialog domain components for sandbox.\r\n * This factory initializes all entities, use cases, and presentation models\r\n * required for the Dialog functionality.\r\n */\r\nexport class SandboxDialogFactory extends DomainFactory {\r\n // Unique name for this factory\r\n readonly factoryName = \"SandboxDialogFactory\";\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject);\r\n }\r\n\r\n /**\r\n * Sets up all entities required for the Dialog system\r\n */\r\n setupEntities(): void {\r\n // Initialize entities\r\n makeDialogQueue(this.appObject);\r\n }\r\n\r\n /**\r\n * Sets up all use cases for the Dialog system\r\n */\r\n setupUCs(): void {\r\n }\r\n\r\n /**\r\n * Sets up all presentation managers for the Dialog system\r\n */\r\n setupPMs(): void {\r\n // Initialize presentation managers\r\n makeDialogQueuePM(this.appObject);\r\n }\r\n\r\n /**\r\n * Performs any final setup operations after all components are initialized\r\n */\r\n finalSetup(): void {\r\n // Assign factory functions to use cases\r\n makeMakeAlertDialogUC(this.appObject).factory = makeAlertFactory(\r\n this.appObjects\r\n );\r\n makeMakeConfirmDialogUC(this.appObject).factory = makeConfirmFactory(\r\n this.appObjects\r\n );\r\n makeMakeMarkdownDialogUC(this.appObject).factory =\r\n makeMarkdownEditorFactory(this.appObjects);\r\n makeMakeSpinnerDialogUC(this.appObject).factory = makeSpinnerFactory(\r\n this.appObjects\r\n );\r\n makeMakeSelectModelDialogUC(this.appObject).factory =\r\n makeSelectModelFactory(this.appObjects);\r\n }\r\n}\r\n\r\nexport function makeSandboxDialogFactory(\r\n appObjects: AppObjectRepo\r\n): SandboxDialogFactory {\r\n const ao = appObjects.getOrCreate(\"Dialog\");\r\n return new SandboxDialogFactory(ao);\r\n}\r\n"]}
1
+ {"version":3,"file":"SandboxDialogFactory.js","sourceRoot":"","sources":["../../../../src/Dialog/Factories/SandboxDialogFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,aAAa,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,2BAA2B,EAC3B,uBAAuB,EACxB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D;;;;GAIG;AACH,MAAM,OAAO,oBAAqB,SAAQ,aAAa;IAIrD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,CAAC,CAAC;QAJnB,+BAA+B;QACtB,gBAAW,GAAG,sBAAsB,CAAC;IAI9C,CAAC;IAED;;OAEG;IACH,aAAa;QACX,sBAAsB;QACtB,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,QAAQ,KAAU,CAAC;IAEnB;;OAEG;IACH,QAAQ;QACN,mCAAmC;QACnC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,wCAAwC;QACxC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,gBAAgB,CAC9D,IAAI,CAAC,UAAU,CAChB,CAAC;QACF,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,kBAAkB,CAClE,IAAI,CAAC,UAAU,CAChB,CAAC;QACF,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO;YAC9C,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,kBAAkB,CAClE,IAAI,CAAC,UAAU,CAChB,CAAC;QACF,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO;YACjD,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;CACF;AAED,MAAM,UAAU,wBAAwB,CACtC,UAAyB;IAEzB,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,IAAI,oBAAoB,CAAC,EAAE,CAAC,CAAC;AACtC,CAAC","sourcesContent":["import { AppObject, AppObjectRepo, DomainFactory } from \"@vived/core\";\nimport { makeDialogQueue } from \"../Entities\";\nimport { makeDialogQueuePM } from \"../PMs\";\nimport {\n makeMakeAlertDialogUC,\n makeMakeConfirmDialogUC,\n makeMakeMarkdownDialogUC,\n makeMakeSelectModelDialogUC,\n makeMakeSpinnerDialogUC\n} from \"../UCs\";\nimport { makeAlertFactory } from \"./alertDialogFactory\";\nimport { makeConfirmFactory } from \"./confirmDialogFactory\";\nimport { makeMarkdownEditorFactory } from \"./markdownDialogEditorFactory\";\nimport { makeSelectModelFactory } from \"./selectDialogModelFactory\";\nimport { makeSpinnerFactory } from \"./spinnerDialogFactory\";\n\n/**\n * Factory responsible for setting up the Dialog domain components for sandbox.\n * This factory initializes all entities, use cases, and presentation models\n * required for the Dialog functionality.\n */\nexport class SandboxDialogFactory extends DomainFactory {\n // Unique name for this factory\n readonly factoryName = \"SandboxDialogFactory\";\n\n constructor(appObject: AppObject) {\n super(appObject);\n }\n\n /**\n * Sets up all entities required for the Dialog system\n */\n setupEntities(): void {\n // Initialize entities\n makeDialogQueue(this.appObject);\n }\n\n /**\n * Sets up all use cases for the Dialog system\n */\n setupUCs(): void {}\n\n /**\n * Sets up all presentation managers for the Dialog system\n */\n setupPMs(): void {\n // Initialize presentation managers\n makeDialogQueuePM(this.appObject);\n }\n\n /**\n * Performs any final setup operations after all components are initialized\n */\n finalSetup(): void {\n // Assign factory functions to use cases\n makeMakeAlertDialogUC(this.appObject).factory = makeAlertFactory(\n this.appObjects\n );\n makeMakeConfirmDialogUC(this.appObject).factory = makeConfirmFactory(\n this.appObjects\n );\n makeMakeMarkdownDialogUC(this.appObject).factory =\n makeMarkdownEditorFactory(this.appObjects);\n makeMakeSpinnerDialogUC(this.appObject).factory = makeSpinnerFactory(\n this.appObjects\n );\n makeMakeSelectModelDialogUC(this.appObject).factory =\n makeSelectModelFactory(this.appObjects);\n }\n}\n\nexport function makeSandboxDialogFactory(\n appObjects: AppObjectRepo\n): SandboxDialogFactory {\n const ao = appObjects.getOrCreate(\"Dialog\");\n return new SandboxDialogFactory(ao);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SubmitResultHandler.js","sourceRoot":"","sources":["../../../../src/Handler/UCs/SubmitResultHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectUC } from \"@vived/core\";\r\nimport {\r\n ChallengeResultMultiHitData,\r\n ChallengeResultsEntity\r\n} from \"../../ChallengeResults\";\r\nimport { ChallengeResponse, HostStateMachine } from \"../../StateMachine\";\r\nimport {\r\n HostHandlerEntity,\r\n RequestHandler,\r\n UnableToParsePayload,\r\n UnsupportedRequestVersion\r\n} from \"../Entities\";\r\n\r\nexport type ResultType =\r\n | \"HIT_V1\"\r\n | \"MULTIHIT_V1\"\r\n | \"QUALITY_V1\"\r\n | \"SCORE_V1\"\r\n | \"PROGRESS_V1\";\r\nexport type Results =\r\n | HitResultV1\r\n | MultiHitResultV1\r\n | QualityResultV1\r\n | ScoreResultV1\r\n | ProgressResultV1;\r\n\r\nexport type HitResultV1 = {\r\n success: boolean;\r\n};\r\n\r\nexport type MultiHitResultV1 = {\r\n hits: number;\r\n misses: number;\r\n unanswered: number;\r\n};\r\n\r\nexport type QualityResultV1 = {\r\n stars: number;\r\n maxStars: number;\r\n};\r\n\r\nexport type ScoreResultV1 = {\r\n score: number;\r\n maxScore: number;\r\n};\r\n\r\nexport type ProgressResultV1 = {\r\n progress: number;\r\n};\r\n\r\nexport type SubmitResultAction = (\r\n type: ResultType,\r\n result: Results,\r\n description: string\r\n) => void;\r\n\r\nexport abstract class SubmitResultHandler\r\n extends AppObjectUC\r\n implements RequestHandler\r\n{\r\n static readonly type = \"SubmitResultHandler\";\r\n\r\n readonly requestType = \"SUBMIT_RESULTS\";\r\n\r\n abstract action: SubmitResultAction;\r\n abstract handleRequest: (version: number, payload?: unknown) => void;\r\n}\r\n\r\nexport function makeSubmitResultHandler(\r\n appObject: AppObject\r\n): SubmitResultHandler {\r\n return new SubmitResultHandlerImp(appObject);\r\n}\r\n\r\nclass SubmitResultHandlerImp extends SubmitResultHandler {\r\n private get challengeResults() {\r\n return this.getCachedSingleton<ChallengeResultsEntity>(\r\n ChallengeResultsEntity.type\r\n );\r\n }\r\n\r\n private get stateMachine() {\r\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\r\n }\r\n\r\n // Map result types to challenge responses\r\n private resultTypeToResponseMap: Record<ResultType, ChallengeResponse> = {\r\n HIT_V1: ChallengeResponse.HIT,\r\n MULTIHIT_V1: ChallengeResponse.MULTIHIT,\r\n QUALITY_V1: ChallengeResponse.QUALITY,\r\n SCORE_V1: ChallengeResponse.SCORE,\r\n PROGRESS_V1: ChallengeResponse.PROGRESS\r\n };\r\n\r\n action = (type: ResultType, result: Results, description: string) => {\r\n if (!this.challengeResults || !this.stateMachine) {\r\n this.error(\"Missing Component\");\r\n return;\r\n }\r\n\r\n if (this.stateMachine.activeState === undefined) {\r\n this.warn(\"Cannot store result because there is no active slide\");\r\n return;\r\n }\r\n\r\n const currentSlideId = this.stateMachine.activeState;\r\n const currentStateEntity = this.stateMachine.getStateByID(currentSlideId);\r\n\r\n if (!currentStateEntity) {\r\n this.warn(\"Cannot find active state entity\");\r\n return;\r\n }\r\n\r\n // Set the expected response based on the result type\r\n currentStateEntity.expectedResponse = this.resultTypeToResponseMap[type];\r\n\r\n let tries =\r\n this.challengeResults.getResultForSlide(currentSlideId)?.tries ?? 0;\r\n if (type !== \"PROGRESS_V1\") {\r\n tries += 1;\r\n }\r\n\r\n if (type === \"HIT_V1\") {\r\n this.handleHitV1(\r\n result as HitResultV1,\r\n tries,\r\n currentSlideId,\r\n description\r\n );\r\n } else if (type === \"MULTIHIT_V1\") {\r\n this.handleMultiHitV1(\r\n result as MultiHitResultV1,\r\n tries,\r\n currentSlideId,\r\n description\r\n );\r\n } else if (type === \"QUALITY_V1\") {\r\n this.handleQualityV1(\r\n result as QualityResultV1,\r\n tries,\r\n currentSlideId,\r\n description\r\n );\r\n } else if (type === \"SCORE_V1\") {\r\n this.handleScoreV1(\r\n result as ScoreResultV1,\r\n tries,\r\n currentSlideId,\r\n description\r\n );\r\n } else if (type === \"PROGRESS_V1\") {\r\n this.handleProgressV1(\r\n result as ProgressResultV1,\r\n currentSlideId,\r\n description\r\n );\r\n }\r\n };\r\n\r\n handleRequest = (version: number, payload: unknown) => {\r\n if (version === 2) {\r\n const { description, result, resultType } = this.castPayloadV2(payload);\r\n this.action(resultType, result, description);\r\n } else if (version === 3) {\r\n const { description, result, resultType } = this.castPayloadV3(payload);\r\n this.action(resultType, result, description);\r\n } else {\r\n throw new UnsupportedRequestVersion(this.requestType, version);\r\n }\r\n };\r\n\r\n private handleHitV1(\r\n result: HitResultV1,\r\n tries: number,\r\n slideId: string,\r\n message: string\r\n ) {\r\n const castResult = result;\r\n\r\n if (castResult.success === undefined) {\r\n this.warn(\r\n `Cannot parse Hit Result V1 payload: ${JSON.stringify(result)}`\r\n );\r\n return;\r\n }\r\n\r\n this.challengeResults?.submitHitResult(\r\n slideId,\r\n castResult.success,\r\n tries,\r\n message\r\n );\r\n }\r\n\r\n private handleProgressV1(\r\n result: ProgressResultV1,\r\n slideId: string,\r\n message: string\r\n ) {\r\n const castResult = result;\r\n\r\n if (castResult.progress === undefined) {\r\n this.warn(\r\n `Cannot parse Progress Result V1 payload: ${JSON.stringify(result)}`\r\n );\r\n return;\r\n }\r\n\r\n this.challengeResults?.submitProgressResult(\r\n slideId,\r\n castResult.progress,\r\n message\r\n );\r\n }\r\n\r\n private handleMultiHitV1(\r\n result: MultiHitResultV1,\r\n tries: number,\r\n slideId: string,\r\n message: string\r\n ) {\r\n const { hits, misses, unanswered } = result;\r\n\r\n if (\r\n hits === undefined ||\r\n misses === undefined ||\r\n unanswered === undefined\r\n ) {\r\n this.warn(\r\n `Cannot parse Multi Hit Result V1 payload: ${JSON.stringify(result)}`\r\n );\r\n return;\r\n }\r\n\r\n let existingTries = 1;\r\n\r\n const currentResultData = this.challengeResults?.results.find(\r\n (r) => r.slideID === slideId\r\n );\r\n if (currentResultData && currentResultData.type === \"MULTIHIT\") {\r\n existingTries = currentResultData.tries;\r\n }\r\n\r\n this.challengeResults?.submitMultiHitResult(\r\n slideId,\r\n hits,\r\n misses,\r\n unanswered,\r\n existingTries, // Using existing tries count since submitMultiHitResult handles incrementing\r\n message\r\n );\r\n }\r\n\r\n private handleQualityV1(\r\n result: QualityResultV1,\r\n tries: number,\r\n slideId: string,\r\n message: string\r\n ) {\r\n const { maxStars, stars } = result;\r\n\r\n if (maxStars === undefined || stars === undefined) {\r\n this.warn(\r\n `Cannot parse Quality Result V1 payload: ${JSON.stringify(result)}`\r\n );\r\n return;\r\n }\r\n\r\n this.challengeResults?.submitQualityResult(\r\n slideId,\r\n stars,\r\n maxStars,\r\n tries,\r\n message\r\n );\r\n }\r\n\r\n private handleScoreV1(\r\n result: ScoreResultV1,\r\n tries: number,\r\n slideId: string,\r\n message: string\r\n ) {\r\n const { score, maxScore } = result;\r\n\r\n if (maxScore === undefined || score === undefined) {\r\n this.warn(\r\n `Cannot parse Score Result V1 payload: ${JSON.stringify(result)}`\r\n );\r\n return;\r\n }\r\n\r\n this.challengeResults?.submitScoreResult(\r\n slideId,\r\n score,\r\n maxScore,\r\n tries,\r\n message\r\n );\r\n }\r\n\r\n private castPayloadV2(payload: unknown): Payload_V2 {\r\n const castPayload = payload as Payload_V2;\r\n if (\r\n castPayload.result === undefined ||\r\n castPayload.resultType === undefined\r\n ) {\r\n throw new UnableToParsePayload(\r\n this.requestType,\r\n 1,\r\n JSON.stringify(payload)\r\n );\r\n }\r\n\r\n return castPayload;\r\n }\r\n\r\n private castPayloadV3(payload: unknown): Payload_V3 {\r\n const castPayload = payload as Payload_V3;\r\n if (\r\n castPayload.result === undefined ||\r\n castPayload.resultType === undefined\r\n ) {\r\n throw new UnableToParsePayload(\r\n this.requestType,\r\n 2,\r\n JSON.stringify(payload)\r\n );\r\n }\r\n\r\n return castPayload;\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, SubmitResultHandler.type);\r\n\r\n const hostHandler = HostHandlerEntity.get(appObject);\r\n if (!hostHandler) {\r\n this.error(\"UC added to an entity that does not have HostHandlerEntity\");\r\n return;\r\n }\r\n\r\n hostHandler.registerRequestHandler(this);\r\n }\r\n}\r\n\r\n// Payload V1 is unsupported\r\n\r\ntype Payload_V2 = {\r\n tries: number;\r\n description: string;\r\n result: Results;\r\n resultType: ResultType;\r\n};\r\n\r\ntype Payload_V3 = {\r\n description: string;\r\n result: Results;\r\n resultType: ResultType;\r\n};\r\n"]}
1
+ {"version":3,"file":"SubmitResultHandler.js","sourceRoot":"","sources":["../../../../src/Handler/UCs/SubmitResultHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectUC } from \"@vived/core\";\nimport {\n ChallengeResultMultiHitData,\n ChallengeResultsEntity\n} from \"../../ChallengeResults\";\nimport { ChallengeResponse, HostStateMachine } from \"../../StateMachine\";\nimport {\n HostHandlerEntity,\n RequestHandler,\n UnableToParsePayload,\n UnsupportedRequestVersion\n} from \"../Entities\";\n\nexport type ResultType =\n | \"HIT_V1\"\n | \"MULTIHIT_V1\"\n | \"QUALITY_V1\"\n | \"SCORE_V1\"\n | \"PROGRESS_V1\";\nexport type Results =\n | HitResultV1\n | MultiHitResultV1\n | QualityResultV1\n | ScoreResultV1\n | ProgressResultV1;\n\nexport type HitResultV1 = {\n success: boolean;\n};\n\nexport type MultiHitResultV1 = {\n hits: number;\n misses: number;\n unanswered: number;\n};\n\nexport type QualityResultV1 = {\n stars: number;\n maxStars: number;\n};\n\nexport type ScoreResultV1 = {\n score: number;\n maxScore: number;\n};\n\nexport type ProgressResultV1 = {\n progress: number;\n};\n\nexport type SubmitResultAction = (\n type: ResultType,\n result: Results,\n description: string\n) => void;\n\nexport abstract class SubmitResultHandler\n extends AppObjectUC\n implements RequestHandler\n{\n static readonly type = \"SubmitResultHandler\";\n\n readonly requestType = \"SUBMIT_RESULTS\";\n\n abstract action: SubmitResultAction;\n abstract handleRequest: (version: number, payload?: unknown) => void;\n}\n\nexport function makeSubmitResultHandler(\n appObject: AppObject\n): SubmitResultHandler {\n return new SubmitResultHandlerImp(appObject);\n}\n\nclass SubmitResultHandlerImp extends SubmitResultHandler {\n private get challengeResults() {\n return this.getCachedSingleton<ChallengeResultsEntity>(\n ChallengeResultsEntity.type\n );\n }\n\n private get stateMachine() {\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\n }\n\n // Map result types to challenge responses\n private resultTypeToResponseMap: Record<ResultType, ChallengeResponse> = {\n HIT_V1: ChallengeResponse.HIT,\n MULTIHIT_V1: ChallengeResponse.MULTIHIT,\n QUALITY_V1: ChallengeResponse.QUALITY,\n SCORE_V1: ChallengeResponse.SCORE,\n PROGRESS_V1: ChallengeResponse.PROGRESS\n };\n\n action = (type: ResultType, result: Results, description: string) => {\n if (!this.challengeResults || !this.stateMachine) {\n this.error(\"Missing Component\");\n return;\n }\n\n if (this.stateMachine.activeState === undefined) {\n this.warn(\"Cannot store result because there is no active slide\");\n return;\n }\n\n const currentSlideId = this.stateMachine.activeState;\n const currentStateEntity = this.stateMachine.getStateByID(currentSlideId);\n\n if (!currentStateEntity) {\n this.warn(\"Cannot find active state entity\");\n return;\n }\n\n // Set the expected response based on the result type\n currentStateEntity.expectedResponse = this.resultTypeToResponseMap[type];\n\n let tries =\n this.challengeResults.getResultForSlide(currentSlideId)?.tries ?? 0;\n if (type !== \"PROGRESS_V1\") {\n tries += 1;\n }\n\n if (type === \"HIT_V1\") {\n this.handleHitV1(\n result as HitResultV1,\n tries,\n currentSlideId,\n description\n );\n } else if (type === \"MULTIHIT_V1\") {\n this.handleMultiHitV1(\n result as MultiHitResultV1,\n tries,\n currentSlideId,\n description\n );\n } else if (type === \"QUALITY_V1\") {\n this.handleQualityV1(\n result as QualityResultV1,\n tries,\n currentSlideId,\n description\n );\n } else if (type === \"SCORE_V1\") {\n this.handleScoreV1(\n result as ScoreResultV1,\n tries,\n currentSlideId,\n description\n );\n } else if (type === \"PROGRESS_V1\") {\n this.handleProgressV1(\n result as ProgressResultV1,\n currentSlideId,\n description\n );\n }\n };\n\n handleRequest = (version: number, payload: unknown) => {\n if (version === 2) {\n const { description, result, resultType } = this.castPayloadV2(payload);\n this.action(resultType, result, description);\n } else if (version === 3) {\n const { description, result, resultType } = this.castPayloadV3(payload);\n this.action(resultType, result, description);\n } else {\n throw new UnsupportedRequestVersion(this.requestType, version);\n }\n };\n\n private handleHitV1(\n result: HitResultV1,\n tries: number,\n slideId: string,\n message: string\n ) {\n const castResult = result;\n\n if (castResult.success === undefined) {\n this.warn(\n `Cannot parse Hit Result V1 payload: ${JSON.stringify(result)}`\n );\n return;\n }\n\n this.challengeResults?.submitHitResult(\n slideId,\n castResult.success,\n tries,\n message\n );\n }\n\n private handleProgressV1(\n result: ProgressResultV1,\n slideId: string,\n message: string\n ) {\n const castResult = result;\n\n if (castResult.progress === undefined) {\n this.warn(\n `Cannot parse Progress Result V1 payload: ${JSON.stringify(result)}`\n );\n return;\n }\n\n this.challengeResults?.submitProgressResult(\n slideId,\n castResult.progress,\n message\n );\n }\n\n private handleMultiHitV1(\n result: MultiHitResultV1,\n tries: number,\n slideId: string,\n message: string\n ) {\n const { hits, misses, unanswered } = result;\n\n if (\n hits === undefined ||\n misses === undefined ||\n unanswered === undefined\n ) {\n this.warn(\n `Cannot parse Multi Hit Result V1 payload: ${JSON.stringify(result)}`\n );\n return;\n }\n\n let existingTries = 1;\n\n const currentResultData = this.challengeResults?.results.find(\n (r) => r.slideID === slideId\n );\n if (currentResultData && currentResultData.type === \"MULTIHIT\") {\n existingTries = currentResultData.tries;\n }\n\n this.challengeResults?.submitMultiHitResult(\n slideId,\n hits,\n misses,\n unanswered,\n existingTries, // Using existing tries count since submitMultiHitResult handles incrementing\n message\n );\n }\n\n private handleQualityV1(\n result: QualityResultV1,\n tries: number,\n slideId: string,\n message: string\n ) {\n const { maxStars, stars } = result;\n\n if (maxStars === undefined || stars === undefined) {\n this.warn(\n `Cannot parse Quality Result V1 payload: ${JSON.stringify(result)}`\n );\n return;\n }\n\n this.challengeResults?.submitQualityResult(\n slideId,\n stars,\n maxStars,\n tries,\n message\n );\n }\n\n private handleScoreV1(\n result: ScoreResultV1,\n tries: number,\n slideId: string,\n message: string\n ) {\n const { score, maxScore } = result;\n\n if (maxScore === undefined || score === undefined) {\n this.warn(\n `Cannot parse Score Result V1 payload: ${JSON.stringify(result)}`\n );\n return;\n }\n\n this.challengeResults?.submitScoreResult(\n slideId,\n score,\n maxScore,\n tries,\n message\n );\n }\n\n private castPayloadV2(payload: unknown): Payload_V2 {\n const castPayload = payload as Payload_V2;\n if (\n castPayload.result === undefined ||\n castPayload.resultType === undefined\n ) {\n throw new UnableToParsePayload(\n this.requestType,\n 1,\n JSON.stringify(payload)\n );\n }\n\n return castPayload;\n }\n\n private castPayloadV3(payload: unknown): Payload_V3 {\n const castPayload = payload as Payload_V3;\n if (\n castPayload.result === undefined ||\n castPayload.resultType === undefined\n ) {\n throw new UnableToParsePayload(\n this.requestType,\n 2,\n JSON.stringify(payload)\n );\n }\n\n return castPayload;\n }\n\n constructor(appObject: AppObject) {\n super(appObject, SubmitResultHandler.type);\n\n const hostHandler = HostHandlerEntity.get(appObject);\n if (!hostHandler) {\n this.error(\"UC added to an entity that does not have HostHandlerEntity\");\n return;\n }\n\n hostHandler.registerRequestHandler(this);\n }\n}\n\n// Payload V1 is unsupported\n\ntype Payload_V2 = {\n tries: number;\n description: string;\n result: Results;\n resultType: ResultType;\n};\n\ntype Payload_V3 = {\n description: string;\n result: Results;\n resultType: ResultType;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SandboxLoggerFactory.js","sourceRoot":"","sources":["../../../../src/Logger/Factories/SandboxLoggerFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,aAAa,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAE3C;;;;GAIG;AACH,MAAM,OAAO,oBAAqB,SAAQ,aAAa;IAIrD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,CAAC,CAAC;QAJnB,+BAA+B;QACtB,gBAAW,GAAG,sBAAsB,CAAC;IAI9C,CAAC;IAED;;OAEG;IACH,aAAa;QACX,sBAAsB;QACtB,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,uBAAuB;QACvB,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,mCAAmC;QACnC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,UAAU;QACR,0CAA0C;IAC5C,CAAC;CACF;AAED,MAAM,UAAU,wBAAwB,CACtC,UAAyB;IAEzB,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,IAAI,oBAAoB,CAAC,EAAE,CAAC,CAAC;AACtC,CAAC","sourcesContent":["import { AppObject, AppObjectRepo, DomainFactory } from \"@vived/core\";\r\nimport { makeLoggerEntity } from \"../Entities\";\r\nimport { makeForwardLogsToConsolePM, makeLogSummaryPM } from \"../PMs\";\r\nimport { makeDownloadLogUC } from \"../UCs\";\r\n\r\n/**\r\n * Factory responsible for setting up the Logger domain components for sandbox.\r\n * This factory initializes all entities, use cases, and presentation models\r\n * required for the Logger functionality.\r\n */\r\nexport class SandboxLoggerFactory extends DomainFactory {\r\n // Unique name for this factory\r\n readonly factoryName = \"SandboxLoggerFactory\";\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject);\r\n }\r\n\r\n /**\r\n * Sets up all entities required for the Logger system\r\n */\r\n setupEntities(): void {\r\n // Initialize entities\r\n makeLoggerEntity(this.appObject);\r\n }\r\n\r\n /**\r\n * Sets up all use cases for the Logger system\r\n */\r\n setupUCs(): void {\r\n // Initialize use cases\r\n makeDownloadLogUC(this.appObject);\r\n }\r\n\r\n /**\r\n * Sets up all presentation managers for the Logger system\r\n */\r\n setupPMs(): void {\r\n // Initialize presentation managers\r\n makeLogSummaryPM(this.appObject);\r\n makeForwardLogsToConsolePM(this.appObject);\r\n }\r\n\r\n /**\r\n * Performs any final setup operations after all components are initialized\r\n */\r\n finalSetup(): void {\r\n // No additional setup required for Logger\r\n }\r\n}\r\n\r\nexport function makeSandboxLoggerFactory(\r\n appObjects: AppObjectRepo\r\n): SandboxLoggerFactory {\r\n const ao = appObjects.getOrCreate(\"Logger\");\r\n return new SandboxLoggerFactory(ao);\r\n}\r\n"]}
1
+ {"version":3,"file":"SandboxLoggerFactory.js","sourceRoot":"","sources":["../../../../src/Logger/Factories/SandboxLoggerFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,aAAa,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAE3C;;;;GAIG;AACH,MAAM,OAAO,oBAAqB,SAAQ,aAAa;IAIrD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,CAAC,CAAC;QAJnB,+BAA+B;QACtB,gBAAW,GAAG,sBAAsB,CAAC;IAI9C,CAAC;IAED;;OAEG;IACH,aAAa;QACX,sBAAsB;QACtB,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,uBAAuB;QACvB,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,mCAAmC;QACnC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,UAAU;QACR,0CAA0C;IAC5C,CAAC;CACF;AAED,MAAM,UAAU,wBAAwB,CACtC,UAAyB;IAEzB,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,IAAI,oBAAoB,CAAC,EAAE,CAAC,CAAC;AACtC,CAAC","sourcesContent":["import { AppObject, AppObjectRepo, DomainFactory } from \"@vived/core\";\nimport { makeLoggerEntity } from \"../Entities\";\nimport { makeForwardLogsToConsolePM, makeLogSummaryPM } from \"../PMs\";\nimport { makeDownloadLogUC } from \"../UCs\";\n\n/**\n * Factory responsible for setting up the Logger domain components for sandbox.\n * This factory initializes all entities, use cases, and presentation models\n * required for the Logger functionality.\n */\nexport class SandboxLoggerFactory extends DomainFactory {\n // Unique name for this factory\n readonly factoryName = \"SandboxLoggerFactory\";\n\n constructor(appObject: AppObject) {\n super(appObject);\n }\n\n /**\n * Sets up all entities required for the Logger system\n */\n setupEntities(): void {\n // Initialize entities\n makeLoggerEntity(this.appObject);\n }\n\n /**\n * Sets up all use cases for the Logger system\n */\n setupUCs(): void {\n // Initialize use cases\n makeDownloadLogUC(this.appObject);\n }\n\n /**\n * Sets up all presentation managers for the Logger system\n */\n setupPMs(): void {\n // Initialize presentation managers\n makeLogSummaryPM(this.appObject);\n makeForwardLogsToConsolePM(this.appObject);\n }\n\n /**\n * Performs any final setup operations after all components are initialized\n */\n finalSetup(): void {\n // No additional setup required for Logger\n }\n}\n\nexport function makeSandboxLoggerFactory(\n appObjects: AppObjectRepo\n): SandboxLoggerFactory {\n const ao = appObjects.getOrCreate(\"Logger\");\n return new SandboxLoggerFactory(ao);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ForwardLogsToConsolePM.js","sourceRoot":"","sources":["../../../../src/Logger/PMs/ForwardLogsToConsolePM.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAErB,oBAAoB,EAErB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,OAAgB,sBAAuB,SAAQ,oBAA6B;IAGhF,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAC1B,sBAAsB,CAAC,IAAI,EAC3B,UAAU,CACX,CAAC;IACJ,CAAC;;AAPM,2BAAI,GAAG,wBAAwB,CAAC;AASzC,MAAM,UAAU,0BAA0B,CACxC,SAAoB;IAEpB,OAAO,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,yBAA0B,SAAQ,sBAAsB;IAG5D,IAAY,MAAM;QAChB,OAAO,IAAI,CAAC,kBAAkB,CAAe,YAAY,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAOD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAhBhD,cAAS,GAAG,KAAK,CAAC;QAUlB,WAAM,GAAG,GAAS,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO;YACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACtD,CAAC,CAAC;QAKA,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectSingletonPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { LoggerEntity } from \"../Entities\";\r\n\r\nexport abstract class ForwardLogsToConsolePM extends AppObjectSingletonPM<boolean> {\r\n static type = \"ForwardLogsToConsolePM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<ForwardLogsToConsolePM>(\r\n ForwardLogsToConsolePM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\nexport function makeForwardLogsToConsolePM(\r\n appObject: AppObject\r\n): ForwardLogsToConsolePM {\r\n return new ForwardLogsToConsolePMImp(appObject);\r\n}\r\n\r\nclass ForwardLogsToConsolePMImp extends ForwardLogsToConsolePM {\r\n defaultVM = false;\r\n\r\n private get logger() {\r\n return this.getCachedSingleton<LoggerEntity>(LoggerEntity.type);\r\n }\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n formVM = (): void => {\r\n if (!this.logger) return;\r\n this.doUpdateView(this.logger.forwardLogsToConsole);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ForwardLogsToConsolePM.type);\r\n\r\n if (this.logger) {\r\n this.observeEntity(this.logger);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ForwardLogsToConsolePM.js","sourceRoot":"","sources":["../../../../src/Logger/PMs/ForwardLogsToConsolePM.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAErB,oBAAoB,EAErB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,OAAgB,sBAAuB,SAAQ,oBAA6B;IAGhF,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAC1B,sBAAsB,CAAC,IAAI,EAC3B,UAAU,CACX,CAAC;IACJ,CAAC;;AAPM,2BAAI,GAAG,wBAAwB,CAAC;AASzC,MAAM,UAAU,0BAA0B,CACxC,SAAoB;IAEpB,OAAO,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,yBAA0B,SAAQ,sBAAsB;IAG5D,IAAY,MAAM;QAChB,OAAO,IAAI,CAAC,kBAAkB,CAAe,YAAY,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAOD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAhBhD,cAAS,GAAG,KAAK,CAAC;QAUlB,WAAM,GAAG,GAAS,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO;YACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACtD,CAAC,CAAC;QAKA,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;CACF","sourcesContent":["import {\n getSingletonComponent,\n AppObject,\n AppObjectSingletonPM,\n AppObjectRepo\n} from \"@vived/core\";\nimport { LoggerEntity } from \"../Entities\";\n\nexport abstract class ForwardLogsToConsolePM extends AppObjectSingletonPM<boolean> {\n static type = \"ForwardLogsToConsolePM\";\n\n static get(appObjects: AppObjectRepo) {\n return getSingletonComponent<ForwardLogsToConsolePM>(\n ForwardLogsToConsolePM.type,\n appObjects\n );\n }\n}\nexport function makeForwardLogsToConsolePM(\n appObject: AppObject\n): ForwardLogsToConsolePM {\n return new ForwardLogsToConsolePMImp(appObject);\n}\n\nclass ForwardLogsToConsolePMImp extends ForwardLogsToConsolePM {\n defaultVM = false;\n\n private get logger() {\n return this.getCachedSingleton<LoggerEntity>(LoggerEntity.type);\n }\n\n vmsAreEqual(a: boolean, b: boolean): boolean {\n return a === b;\n }\n\n formVM = (): void => {\n if (!this.logger) return;\n this.doUpdateView(this.logger.forwardLogsToConsole);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, ForwardLogsToConsolePM.type);\n\n if (this.logger) {\n this.observeEntity(this.logger);\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/StateMachine/Controllers/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC","sourcesContent":["export * from \"./cancelEditing\";\r\nexport * from \"./consumeState\";\r\nexport * from \"./deleteState\";\r\nexport * from \"./duplicateState\";\r\nexport * from \"./editActiveState\";\r\nexport * from \"./editState\";\r\nexport * from \"./editStateName\";\r\nexport * from \"./endActivity\";\r\nexport * from \"./newState\";\r\nexport * from \"./saveAuthoring\";\r\nexport * from \"./setTransitionDuration\";\r\nexport * from \"./transitionToState\";\r\nexport * from \"./savePersistentStates\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/StateMachine/Controllers/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC","sourcesContent":["export * from \"./cancelEditing\";\nexport * from \"./consumeState\";\nexport * from \"./deleteState\";\nexport * from \"./duplicateState\";\nexport * from \"./editActiveState\";\nexport * from \"./editState\";\nexport * from \"./editStateName\";\nexport * from \"./endActivity\";\nexport * from \"./newState\";\nexport * from \"./saveAuthoring\";\nexport * from \"./setTransitionDuration\";\nexport * from \"./transitionToState\";\nexport * from \"./savePersistentStates\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"setTransitionDuration.js","sourceRoot":"","sources":["../../../../src/StateMachine/Controllers/setTransitionDuration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,UAAU,qBAAqB,CACnC,UAAyB,EACzB,QAAgB;IAEhB,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,UAAU,CAAC,WAAW,CACpB,uBAAuB,EACvB,iCAAiC,CAClC,CAAC;QACF,OAAO;IACT,CAAC;IAED,YAAY,CAAC,kBAAkB,GAAG,QAAQ,CAAC;AAC7C,CAAC","sourcesContent":["import { AppObjectRepo } from \"@vived/core\";\r\nimport { HostStateMachine } from \"../Entities\";\r\n\r\nexport function setTransitionDuration(\r\n appObjects: AppObjectRepo,\r\n duration: number\r\n) {\r\n const stateMachine = HostStateMachine.get(appObjects);\r\n if (!stateMachine) {\r\n appObjects.submitError(\r\n \"setTransitionDuration\",\r\n \"Unable to find HostStateMachine\"\r\n );\r\n return;\r\n }\r\n\r\n stateMachine.transitionDuration = duration;\r\n}\r\n"]}
1
+ {"version":3,"file":"setTransitionDuration.js","sourceRoot":"","sources":["../../../../src/StateMachine/Controllers/setTransitionDuration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,UAAU,qBAAqB,CACnC,UAAyB,EACzB,QAAgB;IAEhB,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,UAAU,CAAC,WAAW,CACpB,uBAAuB,EACvB,iCAAiC,CAClC,CAAC;QACF,OAAO;IACT,CAAC;IAED,YAAY,CAAC,kBAAkB,GAAG,QAAQ,CAAC;AAC7C,CAAC","sourcesContent":["import { AppObjectRepo } from \"@vived/core\";\nimport { HostStateMachine } from \"../Entities\";\n\nexport function setTransitionDuration(\n appObjects: AppObjectRepo,\n duration: number\n) {\n const stateMachine = HostStateMachine.get(appObjects);\n if (!stateMachine) {\n appObjects.submitError(\n \"setTransitionDuration\",\n \"Unable to find HostStateMachine\"\n );\n return;\n }\n\n stateMachine.transitionDuration = duration;\n}\n"]}