@vived/app 6.7.1 → 6.9.0

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 (228) hide show
  1. package/README.md +145 -1
  2. package/dist/cjs/BaseApp/UC/RenderCanvasUC.js.map +1 -1
  3. package/dist/cjs/BaseApp/UC/RenderCanvasUC.test.js.map +1 -1
  4. package/dist/cjs/Challenge/Factories/ChallengeFeatureFactory.js.map +1 -1
  5. package/dist/cjs/Challenge/Factories/ChallengeFeatureFactory.test.js.map +1 -1
  6. package/dist/cjs/Dispatcher/Factories/DispatcherFeatureFactory.js +4 -3
  7. package/dist/cjs/Dispatcher/Factories/DispatcherFeatureFactory.js.map +1 -1
  8. package/dist/cjs/Dispatcher/Factories/DispatcherFeatureFactory.test.js +35 -0
  9. package/dist/cjs/Dispatcher/Factories/DispatcherFeatureFactory.test.js.map +1 -0
  10. package/dist/cjs/Dispatcher/Factories/setupDispatchers.js +1 -0
  11. package/dist/cjs/Dispatcher/Factories/setupDispatchers.js.map +1 -1
  12. package/dist/cjs/Dispatcher/Factories/setupDispatchers.test.js +33 -0
  13. package/dist/cjs/Dispatcher/Factories/setupDispatchers.test.js.map +1 -0
  14. package/dist/cjs/EventSystem/Entities/EventEntity.js.map +1 -1
  15. package/dist/cjs/EventSystem/Entities/EventEntity.test.js +4 -1
  16. package/dist/cjs/EventSystem/Entities/EventEntity.test.js.map +1 -1
  17. package/dist/cjs/EventSystem/Entities/index.js.map +1 -1
  18. package/dist/cjs/EventSystem/EventSystem.integration.test.js.map +1 -1
  19. package/dist/cjs/EventSystem/Factories/EventSystemFeatureFactory.js.map +1 -1
  20. package/dist/cjs/EventSystem/Factories/EventSystemFeatureFactory.test.js.map +1 -1
  21. package/dist/cjs/EventSystem/Factories/index.js.map +1 -1
  22. package/dist/cjs/EventSystem/Mocks/MockEventEntity.js.map +1 -1
  23. package/dist/cjs/EventSystem/Mocks/index.js.map +1 -1
  24. package/dist/cjs/EventSystem/index.js.map +1 -1
  25. package/dist/cjs/EventSystem/types.js.map +1 -1
  26. package/dist/cjs/LabelDrop/Factories/LabelDropFeatureFactory.js.map +1 -1
  27. package/dist/cjs/LabelDrop/UseCases/SubmitLabelDropResultUC.js.map +1 -1
  28. package/dist/cjs/LabelDrop/UseCases/SubmitLabelDropResultUC.test.js.map +1 -1
  29. package/dist/cjs/LabelDrop/UseCases/index.js.map +1 -1
  30. package/dist/cjs/Procedure/Adapters/index.js.map +1 -1
  31. package/dist/cjs/Procedure/Adapters/procedureAdapter.js.map +1 -1
  32. package/dist/cjs/Procedure/Adapters/procedureAdapter.test.js.map +1 -1
  33. package/dist/cjs/Procedure/Adapters/procedureAuthoringAdapter.js.map +1 -1
  34. package/dist/cjs/Procedure/Adapters/procedureAuthoringAdapter.test.js.map +1 -1
  35. package/dist/cjs/Procedure/Adapters/procedureHintAdapter.js.map +1 -1
  36. package/dist/cjs/Procedure/Adapters/procedureHintAdapter.test.js.map +1 -1
  37. package/dist/cjs/Procedure/Adapters/procedureProgressAdapter.js.map +1 -1
  38. package/dist/cjs/Procedure/Adapters/procedureProgressAdapter.test.js.map +1 -1
  39. package/dist/cjs/Procedure/Adapters/procedureQuizResultAdapter.js.map +1 -1
  40. package/dist/cjs/Procedure/Adapters/procedureQuizResultAdapter.test.js +3 -1
  41. package/dist/cjs/Procedure/Adapters/procedureQuizResultAdapter.test.js.map +1 -1
  42. package/dist/cjs/Procedure/Entities/HintRegistry.js.map +1 -1
  43. package/dist/cjs/Procedure/Entities/HintRegistry.test.js.map +1 -1
  44. package/dist/cjs/Procedure/Entities/ProcedureEntity.js.map +1 -1
  45. package/dist/cjs/Procedure/Entities/ProcedureEntity.test.js +1 -12
  46. package/dist/cjs/Procedure/Entities/ProcedureEntity.test.js.map +1 -1
  47. package/dist/cjs/Procedure/Entities/index.js.map +1 -1
  48. package/dist/cjs/Procedure/Factories/ProcedureFeatureFactory.js.map +1 -1
  49. package/dist/cjs/Procedure/Factories/ProcedureFeatureFactory.test.js +3 -1
  50. package/dist/cjs/Procedure/Factories/ProcedureFeatureFactory.test.js.map +1 -1
  51. package/dist/cjs/Procedure/Factories/index.js.map +1 -1
  52. package/dist/cjs/Procedure/Mocks/MockProcedureEntity.js.map +1 -1
  53. package/dist/cjs/Procedure/Mocks/MockProcedurePM.js.map +1 -1
  54. package/dist/cjs/Procedure/Mocks/index.js.map +1 -1
  55. package/dist/cjs/Procedure/PM/ProcedurePM.js.map +1 -1
  56. package/dist/cjs/Procedure/PM/ProcedurePM.test.js +1 -1
  57. package/dist/cjs/Procedure/PM/ProcedurePM.test.js.map +1 -1
  58. package/dist/cjs/Procedure/PM/index.js.map +1 -1
  59. package/dist/cjs/Procedure/ProcedureEventSystem.integration.test.js.map +1 -1
  60. package/dist/cjs/Procedure/UCs/AddProcedureEventUC.js.map +1 -1
  61. package/dist/cjs/Procedure/UCs/AddProcedureEventUC.test.js +1 -4
  62. package/dist/cjs/Procedure/UCs/AddProcedureEventUC.test.js.map +1 -1
  63. package/dist/cjs/Procedure/UCs/MoveProcedureEventDownUC.js.map +1 -1
  64. package/dist/cjs/Procedure/UCs/MoveProcedureEventDownUC.test.js.map +1 -1
  65. package/dist/cjs/Procedure/UCs/MoveProcedureEventUpUC.js.map +1 -1
  66. package/dist/cjs/Procedure/UCs/MoveProcedureEventUpUC.test.js.map +1 -1
  67. package/dist/cjs/Procedure/UCs/RecordProcedureEventUC.js.map +1 -1
  68. package/dist/cjs/Procedure/UCs/RecordProcedureEventUC.test.js.map +1 -1
  69. package/dist/cjs/Procedure/UCs/RecordProcedureSessionUC.js.map +1 -1
  70. package/dist/cjs/Procedure/UCs/RecordProcedureSessionUC.test.js +22 -4
  71. package/dist/cjs/Procedure/UCs/RecordProcedureSessionUC.test.js.map +1 -1
  72. package/dist/cjs/Procedure/UCs/RemoveProcedureEventUC.js.map +1 -1
  73. package/dist/cjs/Procedure/UCs/RemoveProcedureEventUC.test.js.map +1 -1
  74. package/dist/cjs/Procedure/UCs/ResetProcedureProgressUC.js.map +1 -1
  75. package/dist/cjs/Procedure/UCs/ResetProcedureProgressUC.test.js.map +1 -1
  76. package/dist/cjs/Procedure/UCs/SerializeProcedure.js.map +1 -1
  77. package/dist/cjs/Procedure/UCs/SerializeProcedure.test.js +6 -1
  78. package/dist/cjs/Procedure/UCs/SerializeProcedure.test.js.map +1 -1
  79. package/dist/cjs/Procedure/UCs/SetProcedureIsQuizUC.js.map +1 -1
  80. package/dist/cjs/Procedure/UCs/SetProcedureIsQuizUC.test.js.map +1 -1
  81. package/dist/cjs/Procedure/UCs/SetProcedureOrderMattersUC.js.map +1 -1
  82. package/dist/cjs/Procedure/UCs/SetProcedureOrderMattersUC.test.js.map +1 -1
  83. package/dist/cjs/Procedure/UCs/SetProcedureShowHintsUC.js.map +1 -1
  84. package/dist/cjs/Procedure/UCs/SetProcedureShowHintsUC.test.js.map +1 -1
  85. package/dist/cjs/Procedure/UCs/SubmitProcedureQuizUC.js.map +1 -1
  86. package/dist/cjs/Procedure/UCs/SubmitProcedureQuizUC.test.js.map +1 -1
  87. package/dist/cjs/Procedure/UCs/UpdateProcedureEventsUCHook.js.map +1 -1
  88. package/dist/cjs/Procedure/UCs/UpdateProcedureEventsUCHook.test.js.map +1 -1
  89. package/dist/cjs/Procedure/UCs/index.js.map +1 -1
  90. package/dist/cjs/Procedure/index.js.map +1 -1
  91. package/dist/cjs/Procedure/types.js.map +1 -1
  92. package/dist/cjs/RequestHandler/UC/SetThemeColorUC.test.js +9 -0
  93. package/dist/cjs/RequestHandler/UC/SetThemeColorUC.test.js.map +1 -1
  94. package/dist/cjs/ThemeColors/Entities/ThemeColors.js +24 -0
  95. package/dist/cjs/ThemeColors/Entities/ThemeColors.js.map +1 -1
  96. package/dist/cjs/ThemeColors/Entities/ThemeColors.test.js +20 -0
  97. package/dist/cjs/ThemeColors/Entities/ThemeColors.test.js.map +1 -1
  98. package/dist/cjs/TouchController/UC/UpdateTouchInoutBound.test.js.map +1 -1
  99. package/dist/cjs/TouchController/UC/UpdateTouchInputBound.js.map +1 -1
  100. package/dist/cjs/index.js.map +1 -1
  101. package/dist/esm/BaseApp/UC/RenderCanvasUC.js.map +1 -1
  102. package/dist/esm/BaseApp/UC/RenderCanvasUC.test.js.map +1 -1
  103. package/dist/esm/Challenge/Factories/ChallengeFeatureFactory.js.map +1 -1
  104. package/dist/esm/Challenge/Factories/ChallengeFeatureFactory.test.js.map +1 -1
  105. package/dist/esm/Dispatcher/Factories/DispatcherFeatureFactory.js +5 -4
  106. package/dist/esm/Dispatcher/Factories/DispatcherFeatureFactory.js.map +1 -1
  107. package/dist/esm/Dispatcher/Factories/DispatcherFeatureFactory.test.js +33 -0
  108. package/dist/esm/Dispatcher/Factories/DispatcherFeatureFactory.test.js.map +1 -0
  109. package/dist/esm/Dispatcher/Factories/setupDispatchers.js +2 -1
  110. package/dist/esm/Dispatcher/Factories/setupDispatchers.js.map +1 -1
  111. package/dist/esm/Dispatcher/Factories/setupDispatchers.test.js +31 -0
  112. package/dist/esm/Dispatcher/Factories/setupDispatchers.test.js.map +1 -0
  113. package/dist/esm/EventSystem/Entities/EventEntity.js.map +1 -1
  114. package/dist/esm/EventSystem/Entities/EventEntity.test.js +4 -1
  115. package/dist/esm/EventSystem/Entities/EventEntity.test.js.map +1 -1
  116. package/dist/esm/EventSystem/Entities/index.js.map +1 -1
  117. package/dist/esm/EventSystem/EventSystem.integration.test.js.map +1 -1
  118. package/dist/esm/EventSystem/Factories/EventSystemFeatureFactory.js.map +1 -1
  119. package/dist/esm/EventSystem/Factories/EventSystemFeatureFactory.test.js.map +1 -1
  120. package/dist/esm/EventSystem/Factories/index.js.map +1 -1
  121. package/dist/esm/EventSystem/Mocks/MockEventEntity.js.map +1 -1
  122. package/dist/esm/EventSystem/Mocks/index.js.map +1 -1
  123. package/dist/esm/EventSystem/index.js.map +1 -1
  124. package/dist/esm/EventSystem/types.js.map +1 -1
  125. package/dist/esm/LabelDrop/Factories/LabelDropFeatureFactory.js.map +1 -1
  126. package/dist/esm/LabelDrop/UseCases/SubmitLabelDropResultUC.js.map +1 -1
  127. package/dist/esm/LabelDrop/UseCases/SubmitLabelDropResultUC.test.js.map +1 -1
  128. package/dist/esm/LabelDrop/UseCases/index.js.map +1 -1
  129. package/dist/esm/Procedure/Adapters/index.js.map +1 -1
  130. package/dist/esm/Procedure/Adapters/procedureAdapter.js.map +1 -1
  131. package/dist/esm/Procedure/Adapters/procedureAdapter.test.js.map +1 -1
  132. package/dist/esm/Procedure/Adapters/procedureAuthoringAdapter.js.map +1 -1
  133. package/dist/esm/Procedure/Adapters/procedureAuthoringAdapter.test.js.map +1 -1
  134. package/dist/esm/Procedure/Adapters/procedureHintAdapter.js.map +1 -1
  135. package/dist/esm/Procedure/Adapters/procedureHintAdapter.test.js.map +1 -1
  136. package/dist/esm/Procedure/Adapters/procedureProgressAdapter.js.map +1 -1
  137. package/dist/esm/Procedure/Adapters/procedureProgressAdapter.test.js.map +1 -1
  138. package/dist/esm/Procedure/Adapters/procedureQuizResultAdapter.js.map +1 -1
  139. package/dist/esm/Procedure/Adapters/procedureQuizResultAdapter.test.js +3 -1
  140. package/dist/esm/Procedure/Adapters/procedureQuizResultAdapter.test.js.map +1 -1
  141. package/dist/esm/Procedure/Entities/HintRegistry.js.map +1 -1
  142. package/dist/esm/Procedure/Entities/HintRegistry.test.js.map +1 -1
  143. package/dist/esm/Procedure/Entities/ProcedureEntity.js.map +1 -1
  144. package/dist/esm/Procedure/Entities/ProcedureEntity.test.js +1 -12
  145. package/dist/esm/Procedure/Entities/ProcedureEntity.test.js.map +1 -1
  146. package/dist/esm/Procedure/Entities/index.js.map +1 -1
  147. package/dist/esm/Procedure/Factories/ProcedureFeatureFactory.js.map +1 -1
  148. package/dist/esm/Procedure/Factories/ProcedureFeatureFactory.test.js +5 -3
  149. package/dist/esm/Procedure/Factories/ProcedureFeatureFactory.test.js.map +1 -1
  150. package/dist/esm/Procedure/Factories/index.js.map +1 -1
  151. package/dist/esm/Procedure/Mocks/MockProcedureEntity.js.map +1 -1
  152. package/dist/esm/Procedure/Mocks/MockProcedurePM.js.map +1 -1
  153. package/dist/esm/Procedure/Mocks/index.js.map +1 -1
  154. package/dist/esm/Procedure/PM/ProcedurePM.js.map +1 -1
  155. package/dist/esm/Procedure/PM/ProcedurePM.test.js +2 -2
  156. package/dist/esm/Procedure/PM/ProcedurePM.test.js.map +1 -1
  157. package/dist/esm/Procedure/PM/index.js.map +1 -1
  158. package/dist/esm/Procedure/ProcedureEventSystem.integration.test.js +2 -2
  159. package/dist/esm/Procedure/ProcedureEventSystem.integration.test.js.map +1 -1
  160. package/dist/esm/Procedure/UCs/AddProcedureEventUC.js.map +1 -1
  161. package/dist/esm/Procedure/UCs/AddProcedureEventUC.test.js +3 -6
  162. package/dist/esm/Procedure/UCs/AddProcedureEventUC.test.js.map +1 -1
  163. package/dist/esm/Procedure/UCs/MoveProcedureEventDownUC.js.map +1 -1
  164. package/dist/esm/Procedure/UCs/MoveProcedureEventDownUC.test.js +2 -2
  165. package/dist/esm/Procedure/UCs/MoveProcedureEventDownUC.test.js.map +1 -1
  166. package/dist/esm/Procedure/UCs/MoveProcedureEventUpUC.js.map +1 -1
  167. package/dist/esm/Procedure/UCs/MoveProcedureEventUpUC.test.js +2 -2
  168. package/dist/esm/Procedure/UCs/MoveProcedureEventUpUC.test.js.map +1 -1
  169. package/dist/esm/Procedure/UCs/RecordProcedureEventUC.js.map +1 -1
  170. package/dist/esm/Procedure/UCs/RecordProcedureEventUC.test.js +2 -2
  171. package/dist/esm/Procedure/UCs/RecordProcedureEventUC.test.js.map +1 -1
  172. package/dist/esm/Procedure/UCs/RecordProcedureSessionUC.js.map +1 -1
  173. package/dist/esm/Procedure/UCs/RecordProcedureSessionUC.test.js +22 -4
  174. package/dist/esm/Procedure/UCs/RecordProcedureSessionUC.test.js.map +1 -1
  175. package/dist/esm/Procedure/UCs/RemoveProcedureEventUC.js.map +1 -1
  176. package/dist/esm/Procedure/UCs/RemoveProcedureEventUC.test.js +2 -2
  177. package/dist/esm/Procedure/UCs/RemoveProcedureEventUC.test.js.map +1 -1
  178. package/dist/esm/Procedure/UCs/ResetProcedureProgressUC.js.map +1 -1
  179. package/dist/esm/Procedure/UCs/ResetProcedureProgressUC.test.js +2 -2
  180. package/dist/esm/Procedure/UCs/ResetProcedureProgressUC.test.js.map +1 -1
  181. package/dist/esm/Procedure/UCs/SerializeProcedure.js.map +1 -1
  182. package/dist/esm/Procedure/UCs/SerializeProcedure.test.js +8 -3
  183. package/dist/esm/Procedure/UCs/SerializeProcedure.test.js.map +1 -1
  184. package/dist/esm/Procedure/UCs/SetProcedureIsQuizUC.js.map +1 -1
  185. package/dist/esm/Procedure/UCs/SetProcedureIsQuizUC.test.js +1 -1
  186. package/dist/esm/Procedure/UCs/SetProcedureIsQuizUC.test.js.map +1 -1
  187. package/dist/esm/Procedure/UCs/SetProcedureOrderMattersUC.js.map +1 -1
  188. package/dist/esm/Procedure/UCs/SetProcedureOrderMattersUC.test.js +1 -1
  189. package/dist/esm/Procedure/UCs/SetProcedureOrderMattersUC.test.js.map +1 -1
  190. package/dist/esm/Procedure/UCs/SetProcedureShowHintsUC.js.map +1 -1
  191. package/dist/esm/Procedure/UCs/SetProcedureShowHintsUC.test.js +1 -1
  192. package/dist/esm/Procedure/UCs/SetProcedureShowHintsUC.test.js.map +1 -1
  193. package/dist/esm/Procedure/UCs/SubmitProcedureQuizUC.js.map +1 -1
  194. package/dist/esm/Procedure/UCs/SubmitProcedureQuizUC.test.js +2 -2
  195. package/dist/esm/Procedure/UCs/SubmitProcedureQuizUC.test.js.map +1 -1
  196. package/dist/esm/Procedure/UCs/UpdateProcedureEventsUCHook.js.map +1 -1
  197. package/dist/esm/Procedure/UCs/UpdateProcedureEventsUCHook.test.js +1 -1
  198. package/dist/esm/Procedure/UCs/UpdateProcedureEventsUCHook.test.js.map +1 -1
  199. package/dist/esm/Procedure/UCs/index.js.map +1 -1
  200. package/dist/esm/Procedure/index.js.map +1 -1
  201. package/dist/esm/Procedure/types.js.map +1 -1
  202. package/dist/esm/RequestHandler/UC/SetThemeColorUC.test.js +9 -0
  203. package/dist/esm/RequestHandler/UC/SetThemeColorUC.test.js.map +1 -1
  204. package/dist/esm/ThemeColors/Entities/ThemeColors.js +24 -0
  205. package/dist/esm/ThemeColors/Entities/ThemeColors.js.map +1 -1
  206. package/dist/esm/ThemeColors/Entities/ThemeColors.test.js +20 -0
  207. package/dist/esm/ThemeColors/Entities/ThemeColors.test.js.map +1 -1
  208. package/dist/esm/TouchController/UC/UpdateTouchInoutBound.test.js.map +1 -1
  209. package/dist/esm/TouchController/UC/UpdateTouchInputBound.js.map +1 -1
  210. package/dist/esm/index.js.map +1 -1
  211. package/dist/types/Dispatcher/Factories/DispatcherFeatureFactory.d.ts +3 -3
  212. package/dist/types/Dispatcher/Factories/DispatcherFeatureFactory.d.ts.map +1 -1
  213. package/dist/types/Dispatcher/Factories/DispatcherFeatureFactory.test.d.ts +2 -0
  214. package/dist/types/Dispatcher/Factories/DispatcherFeatureFactory.test.d.ts.map +1 -0
  215. package/dist/types/Dispatcher/Factories/setupDispatchers.d.ts.map +1 -1
  216. package/dist/types/Dispatcher/Factories/setupDispatchers.test.d.ts +2 -0
  217. package/dist/types/Dispatcher/Factories/setupDispatchers.test.d.ts.map +1 -0
  218. package/dist/types/Procedure/Entities/ProcedureEntity.d.ts.map +1 -1
  219. package/dist/types/Procedure/Mocks/MockProcedureEntity.d.ts.map +1 -1
  220. package/dist/types/Procedure/UCs/AddProcedureEventUC.d.ts.map +1 -1
  221. package/dist/types/Procedure/UCs/RecordProcedureSessionUC.d.ts.map +1 -1
  222. package/dist/types/Procedure/UCs/SetProcedureIsQuizUC.d.ts.map +1 -1
  223. package/dist/types/Procedure/UCs/SubmitProcedureQuizUC.d.ts.map +1 -1
  224. package/dist/types/Procedure/types.d.ts.map +1 -1
  225. package/dist/types/ThemeColors/Entities/ThemeColors.d.ts +12 -0
  226. package/dist/types/ThemeColors/Entities/ThemeColors.d.ts.map +1 -1
  227. package/package.json +1 -1
  228. package/src/Dispatcher/README.md +9 -6
@@ -1 +1 @@
1
- {"version":3,"file":"SetProcedureIsQuizUC.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/SetProcedureIsQuizUC.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAiB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,OAAgB,oBAAqB,SAAQ,WAAW;;AAC5C,yBAAI,GAAG,sBAAsB,CAAC;AAIvC,wBAAG,GAAG,CACX,UAAyB,EACS,EAAE,CACpC,UAAU;KACP,WAAW,CAAC,WAAW,CAAC;KACxB,YAAY,CAAuB,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAGrE,MAAM,UAAU,wBAAwB,CACtC,SAAoB;IAEpB,OAAO,IAAI,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,uBAAwB,SAAQ,oBAAoB;IACxD,IAAY,eAAe;QACzB,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,SAAS,CAAC,MAAe;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QAED,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;CACF","sourcesContent":["import { AppObject, AppObjectUC, AppObjectRepo } from \"@vived/core\";\r\nimport { ProcedureEntity } from \"../Entities/ProcedureEntity\";\r\n\r\nexport abstract class SetProcedureIsQuizUC extends AppObjectUC {\r\n static readonly type = \"SetProcedureIsQuizUC\";\r\n\r\n abstract setIsQuiz(isQuiz: boolean): void;\r\n\r\n static get = (\r\n appObjects: AppObjectRepo,\r\n ): SetProcedureIsQuizUC | undefined =>\r\n appObjects\r\n .getOrCreate(\"Procedure\")\r\n .getComponent<SetProcedureIsQuizUC>(SetProcedureIsQuizUC.type);\r\n}\r\n\r\nexport function makeSetProcedureIsQuizUC(\r\n appObject: AppObject,\r\n): SetProcedureIsQuizUC {\r\n return new SetProcedureIsQuizUCImp(appObject);\r\n}\r\n\r\nclass SetProcedureIsQuizUCImp extends SetProcedureIsQuizUC {\r\n private get procedureEntity(): ProcedureEntity | undefined {\r\n return ProcedureEntity.get(this.appObjects);\r\n }\r\n\r\n setIsQuiz(isQuiz: boolean): void {\r\n const entity = this.procedureEntity;\r\n if (!entity) {\r\n this.warn(\"ProcedureEntity not found - cannot set isQuiz\");\r\n return;\r\n }\r\n\r\n entity.setIsQuiz(isQuiz);\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, SetProcedureIsQuizUC.type);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SetProcedureIsQuizUC.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/SetProcedureIsQuizUC.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAiB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,OAAgB,oBAAqB,SAAQ,WAAW;;AAC5C,yBAAI,GAAG,sBAAsB,CAAC;AAIvC,wBAAG,GAAG,CAAC,UAAyB,EAAoC,EAAE,CAC3E,UAAU;KACP,WAAW,CAAC,WAAW,CAAC;KACxB,YAAY,CAAuB,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAGrE,MAAM,UAAU,wBAAwB,CACtC,SAAoB;IAEpB,OAAO,IAAI,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,uBAAwB,SAAQ,oBAAoB;IACxD,IAAY,eAAe;QACzB,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,SAAS,CAAC,MAAe;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QAED,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;CACF","sourcesContent":["import { AppObject, AppObjectUC, AppObjectRepo } from \"@vived/core\";\nimport { ProcedureEntity } from \"../Entities/ProcedureEntity\";\n\nexport abstract class SetProcedureIsQuizUC extends AppObjectUC {\n static readonly type = \"SetProcedureIsQuizUC\";\n\n abstract setIsQuiz(isQuiz: boolean): void;\n\n static get = (appObjects: AppObjectRepo): SetProcedureIsQuizUC | undefined =>\n appObjects\n .getOrCreate(\"Procedure\")\n .getComponent<SetProcedureIsQuizUC>(SetProcedureIsQuizUC.type);\n}\n\nexport function makeSetProcedureIsQuizUC(\n appObject: AppObject,\n): SetProcedureIsQuizUC {\n return new SetProcedureIsQuizUCImp(appObject);\n}\n\nclass SetProcedureIsQuizUCImp extends SetProcedureIsQuizUC {\n private get procedureEntity(): ProcedureEntity | undefined {\n return ProcedureEntity.get(this.appObjects);\n }\n\n setIsQuiz(isQuiz: boolean): void {\n const entity = this.procedureEntity;\n if (!entity) {\n this.warn(\"ProcedureEntity not found - cannot set isQuiz\");\n return;\n }\n\n entity.setIsQuiz(isQuiz);\n }\n\n constructor(appObject: AppObject) {\n super(appObject, SetProcedureIsQuizUC.type);\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { makeAppObjectRepo } from "@vived/core";
2
- import { makeProcedureEntity } from "../Entities/ProcedureEntity";
2
+ import { makeProcedureEntity, } from "../Entities/ProcedureEntity";
3
3
  import { SetProcedureIsQuizUC, makeSetProcedureIsQuizUC, } from "./SetProcedureIsQuizUC";
4
4
  describe("SetProcedureIsQuizUC", () => {
5
5
  let appObjects;
@@ -1 +1 @@
1
- {"version":3,"file":"SetProcedureIsQuizUC.test.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/SetProcedureIsQuizUC.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAmB,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EACL,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAEhC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,IAAI,UAAyB,CAAC;IAC9B,IAAI,eAAgC,CAAC;IACrC,IAAI,WAAiC,CAAC;IAEtC,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAEtD,eAAe,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACjD,WAAW,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CACtC,oBAAoB,CAAC,IAAI,CAC1B,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE3C,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE5B,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1C,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC;QAE5C,WAAW,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC;QAErC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAClD,MAAM,kBAAkB,GAAG,iBAAiB,EAAE,CAAC;QAC/C,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,wBAAwB,CAAC,iBAAiB,CAAC,CAAC;QAE/D,kBAAkB,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAE7C,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE3B,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\r\nimport { ProcedureEntity, makeProcedureEntity } from \"../Entities/ProcedureEntity\";\r\nimport {\r\n SetProcedureIsQuizUC,\r\n makeSetProcedureIsQuizUC,\r\n} from \"./SetProcedureIsQuizUC\";\r\n\r\ndescribe(\"SetProcedureIsQuizUC\", () => {\r\n let appObjects: AppObjectRepo;\r\n let procedureEntity: ProcedureEntity;\r\n let setIsQuizUC: SetProcedureIsQuizUC;\r\n\r\n beforeEach(() => {\r\n appObjects = makeAppObjectRepo();\r\n const appObject = appObjects.getOrCreate(\"Procedure\");\r\n\r\n procedureEntity = makeProcedureEntity(appObject);\r\n setIsQuizUC = makeSetProcedureIsQuizUC(appObject);\r\n });\r\n\r\n it(\"can be retrieved via static get method\", () => {\r\n const retrieved = SetProcedureIsQuizUC.get(appObjects);\r\n expect(retrieved).toBe(setIsQuizUC);\r\n });\r\n\r\n it(\"registers itself on the AppObject\", () => {\r\n const appObject = appObjects.getOrCreate(\"Procedure\");\r\n const retrieved = appObject.getComponent<SetProcedureIsQuizUC>(\r\n SetProcedureIsQuizUC.type,\r\n );\r\n expect(retrieved).toBe(setIsQuizUC);\r\n });\r\n\r\n it(\"successfully sets isQuiz to true\", () => {\r\n expect(procedureEntity.isQuiz).toBe(false);\r\n\r\n setIsQuizUC.setIsQuiz(true);\r\n\r\n expect(procedureEntity.isQuiz).toBe(true);\r\n });\r\n\r\n it(\"successfully sets isQuiz to false\", () => {\r\n setIsQuizUC.setIsQuiz(true);\r\n expect(procedureEntity.isQuiz).toBe(true);\r\n\r\n setIsQuizUC.setIsQuiz(false);\r\n expect(procedureEntity.isQuiz).toBe(false);\r\n });\r\n\r\n it(\"triggers state update when property changes\", () => {\r\n const initialState = procedureEntity.isQuiz;\r\n\r\n setIsQuizUC.setIsQuiz(!initialState);\r\n\r\n expect(procedureEntity.isQuiz).toBe(!initialState);\r\n });\r\n\r\n it(\"handles missing ProcedureEntity gracefully\", () => {\r\n const isolatedAppObjects = makeAppObjectRepo();\r\n const isolatedAppObject = isolatedAppObjects.getOrCreate(\"Isolated\");\r\n const isolatedUC = makeSetProcedureIsQuizUC(isolatedAppObject);\r\n\r\n isolatedAppObjects.submitWarning = jest.fn();\r\n\r\n isolatedUC.setIsQuiz(true);\r\n\r\n expect(isolatedAppObjects.submitWarning).toHaveBeenCalled();\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"SetProcedureIsQuizUC.test.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/SetProcedureIsQuizUC.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAEL,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAEhC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,IAAI,UAAyB,CAAC;IAC9B,IAAI,eAAgC,CAAC;IACrC,IAAI,WAAiC,CAAC;IAEtC,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAEtD,eAAe,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACjD,WAAW,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CACtC,oBAAoB,CAAC,IAAI,CAC1B,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE3C,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE5B,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1C,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC;QAE5C,WAAW,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC;QAErC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,kBAAkB,GAAG,iBAAiB,EAAE,CAAC;QAC/C,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,wBAAwB,CAAC,iBAAiB,CAAC,CAAC;QAE/D,kBAAkB,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAE7C,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE3B,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\nimport {\n ProcedureEntity,\n makeProcedureEntity,\n} from \"../Entities/ProcedureEntity\";\nimport {\n SetProcedureIsQuizUC,\n makeSetProcedureIsQuizUC,\n} from \"./SetProcedureIsQuizUC\";\n\ndescribe(\"SetProcedureIsQuizUC\", () => {\n let appObjects: AppObjectRepo;\n let procedureEntity: ProcedureEntity;\n let setIsQuizUC: SetProcedureIsQuizUC;\n\n beforeEach(() => {\n appObjects = makeAppObjectRepo();\n const appObject = appObjects.getOrCreate(\"Procedure\");\n\n procedureEntity = makeProcedureEntity(appObject);\n setIsQuizUC = makeSetProcedureIsQuizUC(appObject);\n });\n\n it(\"can be retrieved via static get method\", () => {\n const retrieved = SetProcedureIsQuizUC.get(appObjects);\n expect(retrieved).toBe(setIsQuizUC);\n });\n\n it(\"registers itself on the AppObject\", () => {\n const appObject = appObjects.getOrCreate(\"Procedure\");\n const retrieved = appObject.getComponent<SetProcedureIsQuizUC>(\n SetProcedureIsQuizUC.type,\n );\n expect(retrieved).toBe(setIsQuizUC);\n });\n\n it(\"successfully sets isQuiz to true\", () => {\n expect(procedureEntity.isQuiz).toBe(false);\n\n setIsQuizUC.setIsQuiz(true);\n\n expect(procedureEntity.isQuiz).toBe(true);\n });\n\n it(\"successfully sets isQuiz to false\", () => {\n setIsQuizUC.setIsQuiz(true);\n expect(procedureEntity.isQuiz).toBe(true);\n\n setIsQuizUC.setIsQuiz(false);\n expect(procedureEntity.isQuiz).toBe(false);\n });\n\n it(\"triggers state update when property changes\", () => {\n const initialState = procedureEntity.isQuiz;\n\n setIsQuizUC.setIsQuiz(!initialState);\n\n expect(procedureEntity.isQuiz).toBe(!initialState);\n });\n\n it(\"handles missing ProcedureEntity gracefully\", () => {\n const isolatedAppObjects = makeAppObjectRepo();\n const isolatedAppObject = isolatedAppObjects.getOrCreate(\"Isolated\");\n const isolatedUC = makeSetProcedureIsQuizUC(isolatedAppObject);\n\n isolatedAppObjects.submitWarning = jest.fn();\n\n isolatedUC.setIsQuiz(true);\n\n expect(isolatedAppObjects.submitWarning).toHaveBeenCalled();\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SetProcedureOrderMattersUC.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/SetProcedureOrderMattersUC.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAiB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,OAAgB,0BAA2B,SAAQ,WAAW;;AAClD,+BAAI,GAAG,4BAA4B,CAAC;AAI7C,8BAAG,GAAG,CACX,UAAyB,EACe,EAAE,CAC1C,UAAU;KACP,WAAW,CAAC,WAAW,CAAC;KACxB,YAAY,CACX,0BAA0B,CAAC,IAAI,CAChC,CAAC;AAGR,MAAM,UAAU,8BAA8B,CAC5C,SAAoB;IAEpB,OAAO,IAAI,6BAA6B,CAAC,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,6BAA8B,SAAQ,0BAA0B;IACpE,IAAY,eAAe;QACzB,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,eAAe,CAAC,YAAqB;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QAED,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,0BAA0B,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;CACF","sourcesContent":["import { AppObject, AppObjectUC, AppObjectRepo } from \"@vived/core\";\r\nimport { ProcedureEntity } from \"../Entities/ProcedureEntity\";\r\n\r\nexport abstract class SetProcedureOrderMattersUC extends AppObjectUC {\r\n static readonly type = \"SetProcedureOrderMattersUC\";\r\n\r\n abstract setOrderMatters(orderMatters: boolean): void;\r\n\r\n static get = (\r\n appObjects: AppObjectRepo,\r\n ): SetProcedureOrderMattersUC | undefined =>\r\n appObjects\r\n .getOrCreate(\"Procedure\")\r\n .getComponent<SetProcedureOrderMattersUC>(\r\n SetProcedureOrderMattersUC.type,\r\n );\r\n}\r\n\r\nexport function makeSetProcedureOrderMattersUC(\r\n appObject: AppObject,\r\n): SetProcedureOrderMattersUC {\r\n return new SetProcedureOrderMattersUCImp(appObject);\r\n}\r\n\r\nclass SetProcedureOrderMattersUCImp extends SetProcedureOrderMattersUC {\r\n private get procedureEntity(): ProcedureEntity | undefined {\r\n return ProcedureEntity.get(this.appObjects);\r\n }\r\n\r\n setOrderMatters(orderMatters: boolean): void {\r\n const entity = this.procedureEntity;\r\n if (!entity) {\r\n this.warn(\"ProcedureEntity not found - cannot set orderMatters\");\r\n return;\r\n }\r\n\r\n entity.setOrderMatters(orderMatters);\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, SetProcedureOrderMattersUC.type);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SetProcedureOrderMattersUC.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/SetProcedureOrderMattersUC.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAiB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,OAAgB,0BAA2B,SAAQ,WAAW;;AAClD,+BAAI,GAAG,4BAA4B,CAAC;AAI7C,8BAAG,GAAG,CACX,UAAyB,EACe,EAAE,CAC1C,UAAU;KACP,WAAW,CAAC,WAAW,CAAC;KACxB,YAAY,CACX,0BAA0B,CAAC,IAAI,CAChC,CAAC;AAGR,MAAM,UAAU,8BAA8B,CAC5C,SAAoB;IAEpB,OAAO,IAAI,6BAA6B,CAAC,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,6BAA8B,SAAQ,0BAA0B;IACpE,IAAY,eAAe;QACzB,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,eAAe,CAAC,YAAqB;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QAED,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,0BAA0B,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;CACF","sourcesContent":["import { AppObject, AppObjectUC, AppObjectRepo } from \"@vived/core\";\nimport { ProcedureEntity } from \"../Entities/ProcedureEntity\";\n\nexport abstract class SetProcedureOrderMattersUC extends AppObjectUC {\n static readonly type = \"SetProcedureOrderMattersUC\";\n\n abstract setOrderMatters(orderMatters: boolean): void;\n\n static get = (\n appObjects: AppObjectRepo,\n ): SetProcedureOrderMattersUC | undefined =>\n appObjects\n .getOrCreate(\"Procedure\")\n .getComponent<SetProcedureOrderMattersUC>(\n SetProcedureOrderMattersUC.type,\n );\n}\n\nexport function makeSetProcedureOrderMattersUC(\n appObject: AppObject,\n): SetProcedureOrderMattersUC {\n return new SetProcedureOrderMattersUCImp(appObject);\n}\n\nclass SetProcedureOrderMattersUCImp extends SetProcedureOrderMattersUC {\n private get procedureEntity(): ProcedureEntity | undefined {\n return ProcedureEntity.get(this.appObjects);\n }\n\n setOrderMatters(orderMatters: boolean): void {\n const entity = this.procedureEntity;\n if (!entity) {\n this.warn(\"ProcedureEntity not found - cannot set orderMatters\");\n return;\n }\n\n entity.setOrderMatters(orderMatters);\n }\n\n constructor(appObject: AppObject) {\n super(appObject, SetProcedureOrderMattersUC.type);\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { makeAppObjectRepo } from "@vived/core";
2
- import { makeProcedureEntity } from "../Entities/ProcedureEntity";
2
+ import { makeProcedureEntity, } from "../Entities/ProcedureEntity";
3
3
  import { SetProcedureOrderMattersUC, makeSetProcedureOrderMattersUC, } from "./SetProcedureOrderMattersUC";
4
4
  describe("SetProcedureOrderMattersUC", () => {
5
5
  let appObjects;
@@ -1 +1 @@
1
- {"version":3,"file":"SetProcedureOrderMattersUC.test.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/SetProcedureOrderMattersUC.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAmB,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,8BAA8B,CAAC;AAEtC,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,IAAI,UAAyB,CAAC;IAC9B,IAAI,eAAgC,CAAC;IACrC,IAAI,iBAA6C,CAAC;IAElD,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAEtD,eAAe,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACjD,iBAAiB,GAAG,8BAA8B,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,MAAM,SAAS,GAAG,0BAA0B,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7D,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CACtC,0BAA0B,CAAC,IAAI,CAChC,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhD,iBAAiB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAEzC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,iBAAiB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjD,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,YAAY,GAAG,eAAe,CAAC,YAAY,CAAC;QAElD,iBAAiB,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC;QAEjD,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAClD,MAAM,kBAAkB,GAAG,iBAAiB,EAAE,CAAC;QAC/C,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,8BAA8B,CAAC,iBAAiB,CAAC,CAAC;QAErE,kBAAkB,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAE7C,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAElC,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\r\nimport { ProcedureEntity, makeProcedureEntity } from \"../Entities/ProcedureEntity\";\r\nimport {\r\n SetProcedureOrderMattersUC,\r\n makeSetProcedureOrderMattersUC,\r\n} from \"./SetProcedureOrderMattersUC\";\r\n\r\ndescribe(\"SetProcedureOrderMattersUC\", () => {\r\n let appObjects: AppObjectRepo;\r\n let procedureEntity: ProcedureEntity;\r\n let setOrderMattersUC: SetProcedureOrderMattersUC;\r\n\r\n beforeEach(() => {\r\n appObjects = makeAppObjectRepo();\r\n const appObject = appObjects.getOrCreate(\"Procedure\");\r\n\r\n procedureEntity = makeProcedureEntity(appObject);\r\n setOrderMattersUC = makeSetProcedureOrderMattersUC(appObject);\r\n });\r\n\r\n it(\"can be retrieved via static get method\", () => {\r\n const retrieved = SetProcedureOrderMattersUC.get(appObjects);\r\n expect(retrieved).toBe(setOrderMattersUC);\r\n });\r\n\r\n it(\"registers itself on the AppObject\", () => {\r\n const appObject = appObjects.getOrCreate(\"Procedure\");\r\n const retrieved = appObject.getComponent<SetProcedureOrderMattersUC>(\r\n SetProcedureOrderMattersUC.type,\r\n );\r\n expect(retrieved).toBe(setOrderMattersUC);\r\n });\r\n\r\n it(\"successfully sets orderMatters to false\", () => {\r\n expect(procedureEntity.orderMatters).toBe(true);\r\n\r\n setOrderMattersUC.setOrderMatters(false);\r\n\r\n expect(procedureEntity.orderMatters).toBe(false);\r\n });\r\n\r\n it(\"successfully sets orderMatters to true\", () => {\r\n setOrderMattersUC.setOrderMatters(false);\r\n expect(procedureEntity.orderMatters).toBe(false);\r\n\r\n setOrderMattersUC.setOrderMatters(true);\r\n expect(procedureEntity.orderMatters).toBe(true);\r\n });\r\n\r\n it(\"triggers state update when property changes\", () => {\r\n const initialState = procedureEntity.orderMatters;\r\n\r\n setOrderMattersUC.setOrderMatters(!initialState);\r\n\r\n expect(procedureEntity.orderMatters).toBe(!initialState);\r\n });\r\n\r\n it(\"handles missing ProcedureEntity gracefully\", () => {\r\n const isolatedAppObjects = makeAppObjectRepo();\r\n const isolatedAppObject = isolatedAppObjects.getOrCreate(\"Isolated\");\r\n const isolatedUC = makeSetProcedureOrderMattersUC(isolatedAppObject);\r\n\r\n isolatedAppObjects.submitWarning = jest.fn();\r\n\r\n isolatedUC.setOrderMatters(false);\r\n\r\n expect(isolatedAppObjects.submitWarning).toHaveBeenCalled();\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"SetProcedureOrderMattersUC.test.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/SetProcedureOrderMattersUC.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAEL,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,8BAA8B,CAAC;AAEtC,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,IAAI,UAAyB,CAAC;IAC9B,IAAI,eAAgC,CAAC;IACrC,IAAI,iBAA6C,CAAC;IAElD,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAEtD,eAAe,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACjD,iBAAiB,GAAG,8BAA8B,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,SAAS,GAAG,0BAA0B,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7D,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CACtC,0BAA0B,CAAC,IAAI,CAChC,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhD,iBAAiB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAEzC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,iBAAiB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjD,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,YAAY,GAAG,eAAe,CAAC,YAAY,CAAC;QAElD,iBAAiB,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC;QAEjD,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,kBAAkB,GAAG,iBAAiB,EAAE,CAAC;QAC/C,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,8BAA8B,CAAC,iBAAiB,CAAC,CAAC;QAErE,kBAAkB,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAE7C,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAElC,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\nimport {\n ProcedureEntity,\n makeProcedureEntity,\n} from \"../Entities/ProcedureEntity\";\nimport {\n SetProcedureOrderMattersUC,\n makeSetProcedureOrderMattersUC,\n} from \"./SetProcedureOrderMattersUC\";\n\ndescribe(\"SetProcedureOrderMattersUC\", () => {\n let appObjects: AppObjectRepo;\n let procedureEntity: ProcedureEntity;\n let setOrderMattersUC: SetProcedureOrderMattersUC;\n\n beforeEach(() => {\n appObjects = makeAppObjectRepo();\n const appObject = appObjects.getOrCreate(\"Procedure\");\n\n procedureEntity = makeProcedureEntity(appObject);\n setOrderMattersUC = makeSetProcedureOrderMattersUC(appObject);\n });\n\n it(\"can be retrieved via static get method\", () => {\n const retrieved = SetProcedureOrderMattersUC.get(appObjects);\n expect(retrieved).toBe(setOrderMattersUC);\n });\n\n it(\"registers itself on the AppObject\", () => {\n const appObject = appObjects.getOrCreate(\"Procedure\");\n const retrieved = appObject.getComponent<SetProcedureOrderMattersUC>(\n SetProcedureOrderMattersUC.type,\n );\n expect(retrieved).toBe(setOrderMattersUC);\n });\n\n it(\"successfully sets orderMatters to false\", () => {\n expect(procedureEntity.orderMatters).toBe(true);\n\n setOrderMattersUC.setOrderMatters(false);\n\n expect(procedureEntity.orderMatters).toBe(false);\n });\n\n it(\"successfully sets orderMatters to true\", () => {\n setOrderMattersUC.setOrderMatters(false);\n expect(procedureEntity.orderMatters).toBe(false);\n\n setOrderMattersUC.setOrderMatters(true);\n expect(procedureEntity.orderMatters).toBe(true);\n });\n\n it(\"triggers state update when property changes\", () => {\n const initialState = procedureEntity.orderMatters;\n\n setOrderMattersUC.setOrderMatters(!initialState);\n\n expect(procedureEntity.orderMatters).toBe(!initialState);\n });\n\n it(\"handles missing ProcedureEntity gracefully\", () => {\n const isolatedAppObjects = makeAppObjectRepo();\n const isolatedAppObject = isolatedAppObjects.getOrCreate(\"Isolated\");\n const isolatedUC = makeSetProcedureOrderMattersUC(isolatedAppObject);\n\n isolatedAppObjects.submitWarning = jest.fn();\n\n isolatedUC.setOrderMatters(false);\n\n expect(isolatedAppObjects.submitWarning).toHaveBeenCalled();\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SetProcedureShowHintsUC.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/SetProcedureShowHintsUC.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAiB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,OAAgB,uBAAwB,SAAQ,WAAW;;AAC/C,4BAAI,GAAG,yBAAyB,CAAC;AAI1C,2BAAG,GAAG,CACX,UAAyB,EACY,EAAE,CACvC,UAAU;KACP,WAAW,CAAC,WAAW,CAAC;KACxB,YAAY,CAA0B,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAG3E,MAAM,UAAU,2BAA2B,CACzC,SAAoB;IAEpB,OAAO,IAAI,0BAA0B,CAAC,SAAS,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,0BAA2B,SAAQ,uBAAuB;IAC9D,IAAY,eAAe;QACzB,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,YAAY,CAAC,SAAkB;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;CACF","sourcesContent":["import { AppObject, AppObjectUC, AppObjectRepo } from \"@vived/core\";\r\nimport { ProcedureEntity } from \"../Entities/ProcedureEntity\";\r\n\r\nexport abstract class SetProcedureShowHintsUC extends AppObjectUC {\r\n static readonly type = \"SetProcedureShowHintsUC\";\r\n\r\n abstract setShowHints(showHints: boolean): void;\r\n\r\n static get = (\r\n appObjects: AppObjectRepo,\r\n ): SetProcedureShowHintsUC | undefined =>\r\n appObjects\r\n .getOrCreate(\"Procedure\")\r\n .getComponent<SetProcedureShowHintsUC>(SetProcedureShowHintsUC.type);\r\n}\r\n\r\nexport function makeSetProcedureShowHintsUC(\r\n appObject: AppObject,\r\n): SetProcedureShowHintsUC {\r\n return new SetProcedureShowHintsUCImp(appObject);\r\n}\r\n\r\nclass SetProcedureShowHintsUCImp extends SetProcedureShowHintsUC {\r\n private get procedureEntity(): ProcedureEntity | undefined {\r\n return ProcedureEntity.get(this.appObjects);\r\n }\r\n\r\n setShowHints(showHints: boolean): void {\r\n const entity = this.procedureEntity;\r\n if (!entity) {\r\n this.warn(\"ProcedureEntity not found - cannot set showHints\");\r\n return;\r\n }\r\n\r\n entity.setShowHints(showHints);\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, SetProcedureShowHintsUC.type);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SetProcedureShowHintsUC.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/SetProcedureShowHintsUC.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAiB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,OAAgB,uBAAwB,SAAQ,WAAW;;AAC/C,4BAAI,GAAG,yBAAyB,CAAC;AAI1C,2BAAG,GAAG,CACX,UAAyB,EACY,EAAE,CACvC,UAAU;KACP,WAAW,CAAC,WAAW,CAAC;KACxB,YAAY,CAA0B,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAG3E,MAAM,UAAU,2BAA2B,CACzC,SAAoB;IAEpB,OAAO,IAAI,0BAA0B,CAAC,SAAS,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,0BAA2B,SAAQ,uBAAuB;IAC9D,IAAY,eAAe;QACzB,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,YAAY,CAAC,SAAkB;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;CACF","sourcesContent":["import { AppObject, AppObjectUC, AppObjectRepo } from \"@vived/core\";\nimport { ProcedureEntity } from \"../Entities/ProcedureEntity\";\n\nexport abstract class SetProcedureShowHintsUC extends AppObjectUC {\n static readonly type = \"SetProcedureShowHintsUC\";\n\n abstract setShowHints(showHints: boolean): void;\n\n static get = (\n appObjects: AppObjectRepo,\n ): SetProcedureShowHintsUC | undefined =>\n appObjects\n .getOrCreate(\"Procedure\")\n .getComponent<SetProcedureShowHintsUC>(SetProcedureShowHintsUC.type);\n}\n\nexport function makeSetProcedureShowHintsUC(\n appObject: AppObject,\n): SetProcedureShowHintsUC {\n return new SetProcedureShowHintsUCImp(appObject);\n}\n\nclass SetProcedureShowHintsUCImp extends SetProcedureShowHintsUC {\n private get procedureEntity(): ProcedureEntity | undefined {\n return ProcedureEntity.get(this.appObjects);\n }\n\n setShowHints(showHints: boolean): void {\n const entity = this.procedureEntity;\n if (!entity) {\n this.warn(\"ProcedureEntity not found - cannot set showHints\");\n return;\n }\n\n entity.setShowHints(showHints);\n }\n\n constructor(appObject: AppObject) {\n super(appObject, SetProcedureShowHintsUC.type);\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { makeAppObjectRepo } from "@vived/core";
2
- import { makeProcedureEntity } from "../Entities/ProcedureEntity";
2
+ import { makeProcedureEntity, } from "../Entities/ProcedureEntity";
3
3
  import { SetProcedureShowHintsUC, makeSetProcedureShowHintsUC, } from "./SetProcedureShowHintsUC";
4
4
  describe("SetProcedureShowHintsUC", () => {
5
5
  let appObjects;
@@ -1 +1 @@
1
- {"version":3,"file":"SetProcedureShowHintsUC.test.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/SetProcedureShowHintsUC.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAmB,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EACL,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AAEnC,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,IAAI,UAAyB,CAAC;IAC9B,IAAI,eAAgC,CAAC;IACrC,IAAI,cAAuC,CAAC;IAE5C,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAEtD,eAAe,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACjD,cAAc,GAAG,2BAA2B,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,MAAM,SAAS,GAAG,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CACtC,uBAAuB,CAAC,IAAI,CAC7B,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7C,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAEnC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE9C,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC;QAE/C,cAAc,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC;QAE3C,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAClD,MAAM,kBAAkB,GAAG,iBAAiB,EAAE,CAAC;QAC/C,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,2BAA2B,CAAC,iBAAiB,CAAC,CAAC;QAElE,kBAAkB,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAE7C,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAE/B,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\r\nimport { ProcedureEntity, makeProcedureEntity } from \"../Entities/ProcedureEntity\";\r\nimport {\r\n SetProcedureShowHintsUC,\r\n makeSetProcedureShowHintsUC,\r\n} from \"./SetProcedureShowHintsUC\";\r\n\r\ndescribe(\"SetProcedureShowHintsUC\", () => {\r\n let appObjects: AppObjectRepo;\r\n let procedureEntity: ProcedureEntity;\r\n let setShowHintsUC: SetProcedureShowHintsUC;\r\n\r\n beforeEach(() => {\r\n appObjects = makeAppObjectRepo();\r\n const appObject = appObjects.getOrCreate(\"Procedure\");\r\n\r\n procedureEntity = makeProcedureEntity(appObject);\r\n setShowHintsUC = makeSetProcedureShowHintsUC(appObject);\r\n });\r\n\r\n it(\"can be retrieved via static get method\", () => {\r\n const retrieved = SetProcedureShowHintsUC.get(appObjects);\r\n expect(retrieved).toBe(setShowHintsUC);\r\n });\r\n\r\n it(\"registers itself on the AppObject\", () => {\r\n const appObject = appObjects.getOrCreate(\"Procedure\");\r\n const retrieved = appObject.getComponent<SetProcedureShowHintsUC>(\r\n SetProcedureShowHintsUC.type,\r\n );\r\n expect(retrieved).toBe(setShowHintsUC);\r\n });\r\n\r\n it(\"successfully sets showHints to false\", () => {\r\n expect(procedureEntity.showHints).toBe(true);\r\n\r\n setShowHintsUC.setShowHints(false);\r\n\r\n expect(procedureEntity.showHints).toBe(false);\r\n });\r\n\r\n it(\"successfully sets showHints to true\", () => {\r\n setShowHintsUC.setShowHints(false);\r\n expect(procedureEntity.showHints).toBe(false);\r\n\r\n setShowHintsUC.setShowHints(true);\r\n expect(procedureEntity.showHints).toBe(true);\r\n });\r\n\r\n it(\"triggers state update when property changes\", () => {\r\n const initialState = procedureEntity.showHints;\r\n\r\n setShowHintsUC.setShowHints(!initialState);\r\n\r\n expect(procedureEntity.showHints).toBe(!initialState);\r\n });\r\n\r\n it(\"handles missing ProcedureEntity gracefully\", () => {\r\n const isolatedAppObjects = makeAppObjectRepo();\r\n const isolatedAppObject = isolatedAppObjects.getOrCreate(\"Isolated\");\r\n const isolatedUC = makeSetProcedureShowHintsUC(isolatedAppObject);\r\n\r\n isolatedAppObjects.submitWarning = jest.fn();\r\n\r\n isolatedUC.setShowHints(false);\r\n\r\n expect(isolatedAppObjects.submitWarning).toHaveBeenCalled();\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"SetProcedureShowHintsUC.test.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/SetProcedureShowHintsUC.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAEL,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AAEnC,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,IAAI,UAAyB,CAAC;IAC9B,IAAI,eAAgC,CAAC;IACrC,IAAI,cAAuC,CAAC;IAE5C,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAEtD,eAAe,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACjD,cAAc,GAAG,2BAA2B,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,SAAS,GAAG,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CACtC,uBAAuB,CAAC,IAAI,CAC7B,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7C,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAEnC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE9C,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC;QAE/C,cAAc,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC;QAE3C,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,kBAAkB,GAAG,iBAAiB,EAAE,CAAC;QAC/C,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,2BAA2B,CAAC,iBAAiB,CAAC,CAAC;QAElE,kBAAkB,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAE7C,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAE/B,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\nimport {\n ProcedureEntity,\n makeProcedureEntity,\n} from \"../Entities/ProcedureEntity\";\nimport {\n SetProcedureShowHintsUC,\n makeSetProcedureShowHintsUC,\n} from \"./SetProcedureShowHintsUC\";\n\ndescribe(\"SetProcedureShowHintsUC\", () => {\n let appObjects: AppObjectRepo;\n let procedureEntity: ProcedureEntity;\n let setShowHintsUC: SetProcedureShowHintsUC;\n\n beforeEach(() => {\n appObjects = makeAppObjectRepo();\n const appObject = appObjects.getOrCreate(\"Procedure\");\n\n procedureEntity = makeProcedureEntity(appObject);\n setShowHintsUC = makeSetProcedureShowHintsUC(appObject);\n });\n\n it(\"can be retrieved via static get method\", () => {\n const retrieved = SetProcedureShowHintsUC.get(appObjects);\n expect(retrieved).toBe(setShowHintsUC);\n });\n\n it(\"registers itself on the AppObject\", () => {\n const appObject = appObjects.getOrCreate(\"Procedure\");\n const retrieved = appObject.getComponent<SetProcedureShowHintsUC>(\n SetProcedureShowHintsUC.type,\n );\n expect(retrieved).toBe(setShowHintsUC);\n });\n\n it(\"successfully sets showHints to false\", () => {\n expect(procedureEntity.showHints).toBe(true);\n\n setShowHintsUC.setShowHints(false);\n\n expect(procedureEntity.showHints).toBe(false);\n });\n\n it(\"successfully sets showHints to true\", () => {\n setShowHintsUC.setShowHints(false);\n expect(procedureEntity.showHints).toBe(false);\n\n setShowHintsUC.setShowHints(true);\n expect(procedureEntity.showHints).toBe(true);\n });\n\n it(\"triggers state update when property changes\", () => {\n const initialState = procedureEntity.showHints;\n\n setShowHintsUC.setShowHints(!initialState);\n\n expect(procedureEntity.showHints).toBe(!initialState);\n });\n\n it(\"handles missing ProcedureEntity gracefully\", () => {\n const isolatedAppObjects = makeAppObjectRepo();\n const isolatedAppObject = isolatedAppObjects.getOrCreate(\"Isolated\");\n const isolatedUC = makeSetProcedureShowHintsUC(isolatedAppObject);\n\n isolatedAppObjects.submitWarning = jest.fn();\n\n isolatedUC.setShowHints(false);\n\n expect(isolatedAppObjects.submitWarning).toHaveBeenCalled();\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SubmitProcedureQuizUC.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/SubmitProcedureQuizUC.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAiB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,OAAgB,qBAAsB,SAAQ,WAAW;;AAC7C,0BAAI,GAAG,uBAAuB,CAAC;AAIxC,yBAAG,GAAG,CACX,UAAyB,EACU,EAAE,CACrC,UAAU;KACP,WAAW,CAAC,WAAW,CAAC;KACxB,YAAY,CAAwB,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAGvE,MAAM,UAAU,yBAAyB,CACvC,SAAoB;IAEpB,OAAO,IAAI,wBAAwB,CAAC,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,wBAAyB,SAAQ,qBAAqB;IAC1D,IAAY,eAAe;QACzB,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,IAAY,YAAY;QACtB,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,MAAM,CAAC,MAAM,EAAE,CAAC;QAEhB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CACP,sFAAsF,CACvF,CAAC;YACF,OAAO;QACT,CAAC;QAED,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;QAE3B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,UAAU,IAAI,CAAC,CAAC;QAC5C,iBAAiB,CACf;YACE,KAAK;YACL,QAAQ,EAAE,GAAG;YACb,WAAW,EAAE,OAAO,CAAC,SAAS;SAC/B,EACD,IAAI,CAAC,UAAU,CAChB,CAAC;IACJ,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;CACF","sourcesContent":["import { AppObject, AppObjectUC, AppObjectRepo } from \"@vived/core\";\r\nimport { BaseAppState } from \"../../BaseApp\";\r\nimport { submitScoreResult } from \"../../Dispatcher\";\r\nimport { ProcedureEntity } from \"../Entities/ProcedureEntity\";\r\n\r\nexport abstract class SubmitProcedureQuizUC extends AppObjectUC {\r\n static readonly type = \"SubmitProcedureQuizUC\";\r\n\r\n abstract submit(): void;\r\n\r\n static get = (\r\n appObjects: AppObjectRepo,\r\n ): SubmitProcedureQuizUC | undefined =>\r\n appObjects\r\n .getOrCreate(\"Procedure\")\r\n .getComponent<SubmitProcedureQuizUC>(SubmitProcedureQuizUC.type);\r\n}\r\n\r\nexport function makeSubmitProcedureQuizUC(\r\n appObject: AppObject,\r\n): SubmitProcedureQuizUC {\r\n return new SubmitProcedureQuizUCImp(appObject);\r\n}\r\n\r\nclass SubmitProcedureQuizUCImp extends SubmitProcedureQuizUC {\r\n private get procedureEntity(): ProcedureEntity | undefined {\r\n return ProcedureEntity.get(this.appObjects);\r\n }\r\n\r\n private get baseAppState(): BaseAppState | undefined {\r\n return BaseAppState.get(this.appObjects);\r\n }\r\n\r\n submit(): void {\r\n const entity = this.procedureEntity;\r\n if (!entity) {\r\n this.warn(\"ProcedureEntity not found - cannot submit quiz\");\r\n return;\r\n }\r\n\r\n if (!entity.isQuiz) {\r\n this.warn(\"Cannot submit - not in quiz mode\");\r\n return;\r\n }\r\n\r\n entity.submit();\r\n\r\n const baseApp = this.baseAppState;\r\n if (!baseApp) {\r\n this.warn(\r\n \"BaseAppState not found - quiz submitted locally but score cannot be reported to host\",\r\n );\r\n return;\r\n }\r\n\r\n baseApp.isReviewing = true;\r\n\r\n const score = entity.score?.percentage ?? 0;\r\n submitScoreResult(\r\n {\r\n score,\r\n maxScore: 100,\r\n description: baseApp.slideText,\r\n },\r\n this.appObjects,\r\n );\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, SubmitProcedureQuizUC.type);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SubmitProcedureQuizUC.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/SubmitProcedureQuizUC.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAiB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,OAAgB,qBAAsB,SAAQ,WAAW;;AAC7C,0BAAI,GAAG,uBAAuB,CAAC;AAIxC,yBAAG,GAAG,CAAC,UAAyB,EAAqC,EAAE,CAC5E,UAAU;KACP,WAAW,CAAC,WAAW,CAAC;KACxB,YAAY,CAAwB,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAGvE,MAAM,UAAU,yBAAyB,CACvC,SAAoB;IAEpB,OAAO,IAAI,wBAAwB,CAAC,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,wBAAyB,SAAQ,qBAAqB;IAC1D,IAAY,eAAe;QACzB,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,IAAY,YAAY;QACtB,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,MAAM,CAAC,MAAM,EAAE,CAAC;QAEhB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CACP,sFAAsF,CACvF,CAAC;YACF,OAAO;QACT,CAAC;QAED,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;QAE3B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,UAAU,IAAI,CAAC,CAAC;QAC5C,iBAAiB,CACf;YACE,KAAK;YACL,QAAQ,EAAE,GAAG;YACb,WAAW,EAAE,OAAO,CAAC,SAAS;SAC/B,EACD,IAAI,CAAC,UAAU,CAChB,CAAC;IACJ,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;CACF","sourcesContent":["import { AppObject, AppObjectUC, AppObjectRepo } from \"@vived/core\";\nimport { BaseAppState } from \"../../BaseApp\";\nimport { submitScoreResult } from \"../../Dispatcher\";\nimport { ProcedureEntity } from \"../Entities/ProcedureEntity\";\n\nexport abstract class SubmitProcedureQuizUC extends AppObjectUC {\n static readonly type = \"SubmitProcedureQuizUC\";\n\n abstract submit(): void;\n\n static get = (appObjects: AppObjectRepo): SubmitProcedureQuizUC | undefined =>\n appObjects\n .getOrCreate(\"Procedure\")\n .getComponent<SubmitProcedureQuizUC>(SubmitProcedureQuizUC.type);\n}\n\nexport function makeSubmitProcedureQuizUC(\n appObject: AppObject,\n): SubmitProcedureQuizUC {\n return new SubmitProcedureQuizUCImp(appObject);\n}\n\nclass SubmitProcedureQuizUCImp extends SubmitProcedureQuizUC {\n private get procedureEntity(): ProcedureEntity | undefined {\n return ProcedureEntity.get(this.appObjects);\n }\n\n private get baseAppState(): BaseAppState | undefined {\n return BaseAppState.get(this.appObjects);\n }\n\n submit(): void {\n const entity = this.procedureEntity;\n if (!entity) {\n this.warn(\"ProcedureEntity not found - cannot submit quiz\");\n return;\n }\n\n if (!entity.isQuiz) {\n this.warn(\"Cannot submit - not in quiz mode\");\n return;\n }\n\n entity.submit();\n\n const baseApp = this.baseAppState;\n if (!baseApp) {\n this.warn(\n \"BaseAppState not found - quiz submitted locally but score cannot be reported to host\",\n );\n return;\n }\n\n baseApp.isReviewing = true;\n\n const score = entity.score?.percentage ?? 0;\n submitScoreResult(\n {\n score,\n maxScore: 100,\n description: baseApp.slideText,\n },\n this.appObjects,\n );\n }\n\n constructor(appObject: AppObject) {\n super(appObject, SubmitProcedureQuizUC.type);\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
- import { makeAppObjectRepo, } from "@vived/core";
1
+ import { makeAppObjectRepo } from "@vived/core";
2
2
  import { makeBaseAppState } from "../../BaseApp";
3
3
  import { SubmitResultResultUC } from "../../Dispatcher";
4
- import { makeProcedureEntity } from "../Entities/ProcedureEntity";
4
+ import { makeProcedureEntity, } from "../Entities/ProcedureEntity";
5
5
  import { SubmitProcedureQuizUC, makeSubmitProcedureQuizUC, } from "./SubmitProcedureQuizUC";
6
6
  class MockSubmitResultUC extends SubmitResultResultUC {
7
7
  constructor(appObject) {
@@ -1 +1 @@
1
- {"version":3,"file":"SubmitProcedureQuizUC.test.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/SubmitProcedureQuizUC.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAgB,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAmB,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EACL,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,kBAAmB,SAAQ,oBAAoB;IAOnD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAP9C,oBAAe,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC5B,yBAAoB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACjC,yBAAoB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACjC,wBAAmB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAChC,sBAAiB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAI9B,CAAC;CACF;AAED,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,IAAI,UAAyB,CAAC;IAC9B,IAAI,eAAgC,CAAC;IACrC,IAAI,YAAmC,CAAC;IACxC,IAAI,YAA0B,CAAC;IAE/B,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAEtD,eAAe,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACjD,YAAY,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;QAEpD,YAAY,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC3C,UAAU,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAC3C,YAAY,CAAC,SAAS,GAAG,iCAAiC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,sBAAsB,GAAG,CAC7B,gBAA+B,EACX,EAAE;QACtB,MAAM,gBAAgB,GAAG,IAAI,kBAAkB,CAC7C,gBAAgB,CAAC,WAAW,CAAC,YAAY,CAAC,CAC3C,CAAC;QACF,gBAAgB,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QACrD,OAAO,gBAAgB,CAAC;IAC1B,CAAC,CAAC;IAEF,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,MAAM,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC3D,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAE5D,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACtC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACtC,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAE3C,YAAY,CAAC,MAAM,EAAE,CAAC;QAEtB,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAAC;YAC9D,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,GAAG;YACb,WAAW,EAAE,iCAAiC;SAC/C,CAAC,CAAC;QACH,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC7B,UAAU,CAAC,aAAa,GAAG,UAAU,CAAC;QACtC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAE5D,YAAY,CAAC,MAAM,EAAE,CAAC;QAEtB,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAClE,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CACrC,iCAAiC,EACjC,kCAAkC,CACnC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,kBAAkB,GAAG,iBAAiB,EAAE,CAAC;QAC/C,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACtE,MAAM,UAAU,GAAG,yBAAyB,CAAC,iBAAiB,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC7B,kBAAkB,CAAC,aAAa,GAAG,UAAU,CAAC;QAE9C,UAAU,CAAC,MAAM,EAAE,CAAC;QAEpB,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CACrC,iCAAiC,EACjC,gDAAgD,CACjD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,gBAAgB,GAAG,iBAAiB,EAAE,CAAC;QAC7C,MAAM,SAAS,GAAG,gBAAgB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,EAAE,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC7B,gBAAgB,CAAC,aAAa,GAAG,UAAU,CAAC;QAE5C,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;QAElE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC7B,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAElC,EAAE,CAAC,MAAM,EAAE,CAAC;QAEZ,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAClE,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CACrC,iCAAiC,EACjC,sFAAsF,CACvF,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC7B,UAAU,CAAC,aAAa,GAAG,UAAU,CAAC;QAEtC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACtC,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAE3C,YAAY,CAAC,MAAM,EAAE,CAAC;QAEtB,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CACrC,mBAAmB,EACnB,iCAAiC,CAClC,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC","sourcesContent":["import {\r\n AppObject,\r\n AppObjectRepo,\r\n makeAppObjectRepo,\r\n} from \"@vived/core\";\r\nimport { BaseAppState, makeBaseAppState } from \"../../BaseApp\";\r\nimport { SubmitResultResultUC } from \"../../Dispatcher\";\r\nimport { ProcedureEntity, makeProcedureEntity } from \"../Entities/ProcedureEntity\";\r\nimport {\r\n SubmitProcedureQuizUC,\r\n makeSubmitProcedureQuizUC,\r\n} from \"./SubmitProcedureQuizUC\";\r\n\r\nclass MockSubmitResultUC extends SubmitResultResultUC {\r\n submitHitResult = jest.fn();\r\n submitProgressResult = jest.fn();\r\n submitMultiHitResult = jest.fn();\r\n submitQualityResult = jest.fn();\r\n submitScoreResult = jest.fn();\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, SubmitResultResultUC.type);\r\n }\r\n}\r\n\r\ndescribe(\"SubmitProcedureQuizUC\", () => {\r\n let appObjects: AppObjectRepo;\r\n let procedureEntity: ProcedureEntity;\r\n let submitQuizUC: SubmitProcedureQuizUC;\r\n let baseAppState: BaseAppState;\r\n\r\n beforeEach(() => {\r\n jest.restoreAllMocks();\r\n\r\n appObjects = makeAppObjectRepo();\r\n const appObject = appObjects.getOrCreate(\"Procedure\");\r\n\r\n procedureEntity = makeProcedureEntity(appObject);\r\n submitQuizUC = makeSubmitProcedureQuizUC(appObject);\r\n\r\n baseAppState = makeBaseAppState(appObject);\r\n appObjects.registerSingleton(baseAppState);\r\n baseAppState.slideText = \"Procedure challenge description\";\r\n });\r\n\r\n const createSubmitResultMock = (\r\n targetAppObjects: AppObjectRepo,\r\n ): MockSubmitResultUC => {\r\n const mockSubmitResult = new MockSubmitResultUC(\r\n targetAppObjects.getOrCreate(\"Dispatcher\"),\r\n );\r\n targetAppObjects.registerSingleton(mockSubmitResult);\r\n return mockSubmitResult;\r\n };\r\n\r\n it(\"can be retrieved via static get method\", () => {\r\n const retrieved = SubmitProcedureQuizUC.get(appObjects);\r\n expect(retrieved).toBe(submitQuizUC);\r\n });\r\n\r\n it(\"submits score result to host and enters review mode\", () => {\r\n const mockSubmitResult = createSubmitResultMock(appObjects);\r\n\r\n procedureEntity.setIsQuiz(true);\r\n procedureEntity.addEventId(\"event-1\");\r\n procedureEntity.addEventId(\"event-2\");\r\n procedureEntity.recordUserEvent(\"event-1\");\r\n\r\n submitQuizUC.submit();\r\n\r\n expect(mockSubmitResult.submitScoreResult).toHaveBeenCalledWith({\r\n score: 50,\r\n maxScore: 100,\r\n description: \"Procedure challenge description\",\r\n });\r\n expect(baseAppState.isReviewing).toBe(true);\r\n });\r\n\r\n it(\"warns and does not submit score when not in quiz mode\", () => {\r\n const warningSpy = jest.fn();\r\n appObjects.submitWarning = warningSpy;\r\n const mockSubmitResult = createSubmitResultMock(appObjects);\r\n\r\n submitQuizUC.submit();\r\n\r\n expect(mockSubmitResult.submitScoreResult).not.toHaveBeenCalled();\r\n expect(warningSpy).toHaveBeenCalledWith(\r\n \"Procedure/SubmitProcedureQuizUC\",\r\n \"Cannot submit - not in quiz mode\",\r\n );\r\n });\r\n\r\n it(\"warns and does not submit score when ProcedureEntity is missing\", () => {\r\n const isolatedAppObjects = makeAppObjectRepo();\r\n const isolatedAppObject = isolatedAppObjects.getOrCreate(\"Procedure\");\r\n const isolatedUC = makeSubmitProcedureQuizUC(isolatedAppObject);\r\n const warningSpy = jest.fn();\r\n isolatedAppObjects.submitWarning = warningSpy;\r\n\r\n isolatedUC.submit();\r\n\r\n expect(warningSpy).toHaveBeenCalledWith(\r\n \"Procedure/SubmitProcedureQuizUC\",\r\n \"ProcedureEntity not found - cannot submit quiz\",\r\n );\r\n });\r\n\r\n it(\"warns and does not submit score when BaseAppState is missing\", () => {\r\n const noBaseAppObjects = makeAppObjectRepo();\r\n const appObject = noBaseAppObjects.getOrCreate(\"Procedure\");\r\n const entity = makeProcedureEntity(appObject);\r\n const uc = makeSubmitProcedureQuizUC(appObject);\r\n const warningSpy = jest.fn();\r\n noBaseAppObjects.submitWarning = warningSpy;\r\n\r\n const mockSubmitResult = createSubmitResultMock(noBaseAppObjects);\r\n\r\n entity.setIsQuiz(true);\r\n entity.addEventId(\"event-1\");\r\n entity.recordUserEvent(\"event-1\");\r\n\r\n uc.submit();\r\n\r\n expect(mockSubmitResult.submitScoreResult).not.toHaveBeenCalled();\r\n expect(warningSpy).toHaveBeenCalledWith(\r\n \"Procedure/SubmitProcedureQuizUC\",\r\n \"BaseAppState not found - quiz submitted locally but score cannot be reported to host\",\r\n );\r\n expect(entity.isSubmitted).toBe(true);\r\n });\r\n\r\n it(\"submits locally and warns when SubmitResultResultUC is missing\", () => {\r\n const warningSpy = jest.fn();\r\n appObjects.submitWarning = warningSpy;\r\n\r\n procedureEntity.setIsQuiz(true);\r\n procedureEntity.addEventId(\"event-1\");\r\n procedureEntity.recordUserEvent(\"event-1\");\r\n\r\n submitQuizUC.submit();\r\n\r\n expect(procedureEntity.isSubmitted).toBe(true);\r\n expect(procedureEntity.score?.percentage).toBe(100);\r\n expect(warningSpy).toHaveBeenCalledWith(\r\n \"submitScoreResult\",\r\n \"Can't find SubmitResultResultUC\",\r\n );\r\n expect(baseAppState.isReviewing).toBe(true);\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"SubmitProcedureQuizUC.test.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/SubmitProcedureQuizUC.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\nimport { BaseAppState, makeBaseAppState } from \"../../BaseApp\";\nimport { SubmitResultResultUC } from \"../../Dispatcher\";\nimport {\n ProcedureEntity,\n makeProcedureEntity,\n} from \"../Entities/ProcedureEntity\";\nimport {\n SubmitProcedureQuizUC,\n makeSubmitProcedureQuizUC,\n} from \"./SubmitProcedureQuizUC\";\n\nclass MockSubmitResultUC extends SubmitResultResultUC {\n submitHitResult = jest.fn();\n submitProgressResult = jest.fn();\n submitMultiHitResult = jest.fn();\n submitQualityResult = jest.fn();\n submitScoreResult = jest.fn();\n\n constructor(appObject: AppObject) {\n super(appObject, SubmitResultResultUC.type);\n }\n}\n\ndescribe(\"SubmitProcedureQuizUC\", () => {\n let appObjects: AppObjectRepo;\n let procedureEntity: ProcedureEntity;\n let submitQuizUC: SubmitProcedureQuizUC;\n let baseAppState: BaseAppState;\n\n beforeEach(() => {\n jest.restoreAllMocks();\n\n appObjects = makeAppObjectRepo();\n const appObject = appObjects.getOrCreate(\"Procedure\");\n\n procedureEntity = makeProcedureEntity(appObject);\n submitQuizUC = makeSubmitProcedureQuizUC(appObject);\n\n baseAppState = makeBaseAppState(appObject);\n appObjects.registerSingleton(baseAppState);\n baseAppState.slideText = \"Procedure challenge description\";\n });\n\n const createSubmitResultMock = (\n targetAppObjects: AppObjectRepo,\n ): MockSubmitResultUC => {\n const mockSubmitResult = new MockSubmitResultUC(\n targetAppObjects.getOrCreate(\"Dispatcher\"),\n );\n targetAppObjects.registerSingleton(mockSubmitResult);\n return mockSubmitResult;\n };\n\n it(\"can be retrieved via static get method\", () => {\n const retrieved = SubmitProcedureQuizUC.get(appObjects);\n expect(retrieved).toBe(submitQuizUC);\n });\n\n it(\"submits score result to host and enters review mode\", () => {\n const mockSubmitResult = createSubmitResultMock(appObjects);\n\n procedureEntity.setIsQuiz(true);\n procedureEntity.addEventId(\"event-1\");\n procedureEntity.addEventId(\"event-2\");\n procedureEntity.recordUserEvent(\"event-1\");\n\n submitQuizUC.submit();\n\n expect(mockSubmitResult.submitScoreResult).toHaveBeenCalledWith({\n score: 50,\n maxScore: 100,\n description: \"Procedure challenge description\",\n });\n expect(baseAppState.isReviewing).toBe(true);\n });\n\n it(\"warns and does not submit score when not in quiz mode\", () => {\n const warningSpy = jest.fn();\n appObjects.submitWarning = warningSpy;\n const mockSubmitResult = createSubmitResultMock(appObjects);\n\n submitQuizUC.submit();\n\n expect(mockSubmitResult.submitScoreResult).not.toHaveBeenCalled();\n expect(warningSpy).toHaveBeenCalledWith(\n \"Procedure/SubmitProcedureQuizUC\",\n \"Cannot submit - not in quiz mode\",\n );\n });\n\n it(\"warns and does not submit score when ProcedureEntity is missing\", () => {\n const isolatedAppObjects = makeAppObjectRepo();\n const isolatedAppObject = isolatedAppObjects.getOrCreate(\"Procedure\");\n const isolatedUC = makeSubmitProcedureQuizUC(isolatedAppObject);\n const warningSpy = jest.fn();\n isolatedAppObjects.submitWarning = warningSpy;\n\n isolatedUC.submit();\n\n expect(warningSpy).toHaveBeenCalledWith(\n \"Procedure/SubmitProcedureQuizUC\",\n \"ProcedureEntity not found - cannot submit quiz\",\n );\n });\n\n it(\"warns and does not submit score when BaseAppState is missing\", () => {\n const noBaseAppObjects = makeAppObjectRepo();\n const appObject = noBaseAppObjects.getOrCreate(\"Procedure\");\n const entity = makeProcedureEntity(appObject);\n const uc = makeSubmitProcedureQuizUC(appObject);\n const warningSpy = jest.fn();\n noBaseAppObjects.submitWarning = warningSpy;\n\n const mockSubmitResult = createSubmitResultMock(noBaseAppObjects);\n\n entity.setIsQuiz(true);\n entity.addEventId(\"event-1\");\n entity.recordUserEvent(\"event-1\");\n\n uc.submit();\n\n expect(mockSubmitResult.submitScoreResult).not.toHaveBeenCalled();\n expect(warningSpy).toHaveBeenCalledWith(\n \"Procedure/SubmitProcedureQuizUC\",\n \"BaseAppState not found - quiz submitted locally but score cannot be reported to host\",\n );\n expect(entity.isSubmitted).toBe(true);\n });\n\n it(\"submits locally and warns when SubmitResultResultUC is missing\", () => {\n const warningSpy = jest.fn();\n appObjects.submitWarning = warningSpy;\n\n procedureEntity.setIsQuiz(true);\n procedureEntity.addEventId(\"event-1\");\n procedureEntity.recordUserEvent(\"event-1\");\n\n submitQuizUC.submit();\n\n expect(procedureEntity.isSubmitted).toBe(true);\n expect(procedureEntity.score?.percentage).toBe(100);\n expect(warningSpy).toHaveBeenCalledWith(\n \"submitScoreResult\",\n \"Can't find SubmitResultResultUC\",\n );\n expect(baseAppState.isReviewing).toBe(true);\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateProcedureEventsUCHook.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/UpdateProcedureEventsUCHook.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n AppObject,\r\n AppObjectUC,\r\n AppObjectRepo,\r\n getSingletonComponent,\r\n} from \"@vived/core\";\r\nimport { BaseAppState } from \"../../BaseApp\";\r\nimport { ChallengeEntity } from \"../../Challenge\";\r\nimport { EventEntity } from \"../../EventSystem\";\r\nimport { ProcedureEntity } from \"../Entities/ProcedureEntity\";\r\n\r\nexport abstract class UpdateProcedureEventsUCHook extends AppObjectUC {\r\n static readonly type = \"UpdateProcedureEventsUCHook\";\r\n\r\n static get = (\r\n appObjects: AppObjectRepo,\r\n ): UpdateProcedureEventsUCHook | undefined =>\r\n getSingletonComponent(UpdateProcedureEventsUCHook.type, appObjects);\r\n}\r\n\r\nexport function makeUpdateProcedureEventsUCHook(\r\n appObject: AppObject,\r\n): UpdateProcedureEventsUCHook {\r\n return new UpdateProcedureEventsUCHookImp(appObject);\r\n}\r\n\r\nclass UpdateProcedureEventsUCHookImp extends UpdateProcedureEventsUCHook {\r\n private lastSelectedChallenge: string | null = null;\r\n\r\n private get baseAppState(): BaseAppState | undefined {\r\n return BaseAppState.get(this.appObjects);\r\n }\r\n\r\n private get challengeEntity(): ChallengeEntity | undefined {\r\n return ChallengeEntity.get(this.appObjects);\r\n }\r\n\r\n private get procedureEntity(): ProcedureEntity | undefined {\r\n return ProcedureEntity.get(this.appObjects);\r\n }\r\n\r\n private get eventEntity(): EventEntity | undefined {\r\n return EventEntity.get(this.appObjects);\r\n }\r\n\r\n private get isAuthoring(): boolean {\r\n const baseApp = this.baseAppState;\r\n return baseApp ? baseApp.isAuthoring : false;\r\n }\r\n\r\n private get selectedChallenge(): string | null {\r\n const challenge = this.challengeEntity;\r\n return challenge ? challenge.selectedChallenge : null;\r\n }\r\n\r\n private shouldProcessEvents(): boolean {\r\n return !this.isAuthoring && this.selectedChallenge === \"PROCEDURE\";\r\n }\r\n\r\n private shouldResetProcedure(newChallenge: string | null): boolean {\r\n if (this.isAuthoring) return false;\r\n if (newChallenge !== \"PROCEDURE\") return false;\r\n if (this.lastSelectedChallenge === \"PROCEDURE\") return false;\r\n return true;\r\n }\r\n\r\n private onStateChange = (): void => {\r\n const currentChallenge = this.selectedChallenge;\r\n\r\n if (this.shouldResetProcedure(currentChallenge)) {\r\n this.lastSelectedChallenge = currentChallenge;\r\n\r\n const procedureEntity = this.procedureEntity;\r\n if (procedureEntity) {\r\n procedureEntity.reset();\r\n } else {\r\n this.warn(\r\n \"ProcedureEntity not found - cannot reset on challenge change\",\r\n );\r\n }\r\n }\r\n\r\n this.lastSelectedChallenge = currentChallenge;\r\n };\r\n\r\n private onEmission = (eventId: string): void => {\r\n if (!this.shouldProcessEvents()) return;\r\n\r\n const procedureEntity = this.procedureEntity;\r\n if (!procedureEntity) return;\r\n\r\n procedureEntity.recordUserEvent(eventId);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, UpdateProcedureEventsUCHook.type);\r\n\r\n this.appObjects.registerSingleton(this);\r\n\r\n const baseApp = this.baseAppState;\r\n if (baseApp) {\r\n baseApp.addChangeObserver(this.onStateChange);\r\n } else {\r\n this.warn(\r\n \"BaseAppState not found - authoring mode changes will not be detected\",\r\n );\r\n }\r\n\r\n const challenge = this.challengeEntity;\r\n if (challenge) {\r\n challenge.addChangeObserver(this.onStateChange);\r\n } else {\r\n this.warn(\r\n \"ChallengeEntity not found - challenge changes will not be detected\",\r\n );\r\n }\r\n\r\n const eventEntity = this.eventEntity;\r\n if (eventEntity) {\r\n eventEntity.addEmissionListener(this.onEmission);\r\n } else {\r\n this.warn(\"EventEntity not found - events will not be processed\");\r\n }\r\n\r\n this.lastSelectedChallenge = this.selectedChallenge;\r\n this.onStateChange();\r\n }\r\n\r\n dispose(): void {\r\n this.baseAppState?.removeChangeObserver(this.onStateChange);\r\n this.challengeEntity?.removeChangeObserver(this.onStateChange);\r\n this.eventEntity?.removeEmissionListener(this.onEmission);\r\n this.lastSelectedChallenge = null;\r\n super.dispose();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"UpdateProcedureEventsUCHook.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/UpdateProcedureEventsUCHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EAEX,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,OAAgB,2BAA4B,SAAQ,WAAW;;AACnD,gCAAI,GAAG,6BAA6B,CAAC;AAE9C,+BAAG,GAAG,CACX,UAAyB,EACgB,EAAE,CAC3C,qBAAqB,CAAC,2BAA2B,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAGxE,MAAM,UAAU,+BAA+B,CAC7C,SAAoB;IAEpB,OAAO,IAAI,8BAA8B,CAAC,SAAS,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,8BAA+B,SAAQ,2BAA2B;IAGtE,IAAY,YAAY;QACtB,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAED,IAAY,eAAe;QACzB,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,IAAY,eAAe;QACzB,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,IAAY,WAAW;QACrB,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED,IAAY,WAAW;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;QAClC,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/C,CAAC;IAED,IAAY,iBAAiB;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;QACvC,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,CAAC;IAEO,mBAAmB;QACzB,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,iBAAiB,KAAK,WAAW,CAAC;IACrE,CAAC;IAEO,oBAAoB,CAAC,YAA2B;QACtD,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC;QACnC,IAAI,YAAY,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QAC/C,IAAI,IAAI,CAAC,qBAAqB,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IA8BD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,2BAA2B,CAAC,IAAI,CAAC,CAAC;QApE7C,0BAAqB,GAAkB,IAAI,CAAC;QAuC5C,kBAAa,GAAG,GAAS,EAAE;YACjC,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC;YAEhD,IAAI,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAChD,IAAI,CAAC,qBAAqB,GAAG,gBAAgB,CAAC;gBAE9C,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;gBAC7C,IAAI,eAAe,EAAE,CAAC;oBACpB,eAAe,CAAC,KAAK,EAAE,CAAC;gBAC1B,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,IAAI,CACP,8DAA8D,CAC/D,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,IAAI,CAAC,qBAAqB,GAAG,gBAAgB,CAAC;QAChD,CAAC,CAAC;QAEM,eAAU,GAAG,CAAC,OAAe,EAAQ,EAAE;YAC7C,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBAAE,OAAO;YAExC,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;YAC7C,IAAI,CAAC,eAAe;gBAAE,OAAO;YAE7B,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC,CAAC;QAKA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;QAClC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CACP,sEAAsE,CACvE,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;QACvC,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CACP,oEAAoE,CACrE,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACpD,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,YAAY,EAAE,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,eAAe,EAAE,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/D,IAAI,CAAC,WAAW,EAAE,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;CACF","sourcesContent":["import {\n AppObject,\n AppObjectUC,\n AppObjectRepo,\n getSingletonComponent,\n} from \"@vived/core\";\nimport { BaseAppState } from \"../../BaseApp\";\nimport { ChallengeEntity } from \"../../Challenge\";\nimport { EventEntity } from \"../../EventSystem\";\nimport { ProcedureEntity } from \"../Entities/ProcedureEntity\";\n\nexport abstract class UpdateProcedureEventsUCHook extends AppObjectUC {\n static readonly type = \"UpdateProcedureEventsUCHook\";\n\n static get = (\n appObjects: AppObjectRepo,\n ): UpdateProcedureEventsUCHook | undefined =>\n getSingletonComponent(UpdateProcedureEventsUCHook.type, appObjects);\n}\n\nexport function makeUpdateProcedureEventsUCHook(\n appObject: AppObject,\n): UpdateProcedureEventsUCHook {\n return new UpdateProcedureEventsUCHookImp(appObject);\n}\n\nclass UpdateProcedureEventsUCHookImp extends UpdateProcedureEventsUCHook {\n private lastSelectedChallenge: string | null = null;\n\n private get baseAppState(): BaseAppState | undefined {\n return BaseAppState.get(this.appObjects);\n }\n\n private get challengeEntity(): ChallengeEntity | undefined {\n return ChallengeEntity.get(this.appObjects);\n }\n\n private get procedureEntity(): ProcedureEntity | undefined {\n return ProcedureEntity.get(this.appObjects);\n }\n\n private get eventEntity(): EventEntity | undefined {\n return EventEntity.get(this.appObjects);\n }\n\n private get isAuthoring(): boolean {\n const baseApp = this.baseAppState;\n return baseApp ? baseApp.isAuthoring : false;\n }\n\n private get selectedChallenge(): string | null {\n const challenge = this.challengeEntity;\n return challenge ? challenge.selectedChallenge : null;\n }\n\n private shouldProcessEvents(): boolean {\n return !this.isAuthoring && this.selectedChallenge === \"PROCEDURE\";\n }\n\n private shouldResetProcedure(newChallenge: string | null): boolean {\n if (this.isAuthoring) return false;\n if (newChallenge !== \"PROCEDURE\") return false;\n if (this.lastSelectedChallenge === \"PROCEDURE\") return false;\n return true;\n }\n\n private onStateChange = (): void => {\n const currentChallenge = this.selectedChallenge;\n\n if (this.shouldResetProcedure(currentChallenge)) {\n this.lastSelectedChallenge = currentChallenge;\n\n const procedureEntity = this.procedureEntity;\n if (procedureEntity) {\n procedureEntity.reset();\n } else {\n this.warn(\n \"ProcedureEntity not found - cannot reset on challenge change\",\n );\n }\n }\n\n this.lastSelectedChallenge = currentChallenge;\n };\n\n private onEmission = (eventId: string): void => {\n if (!this.shouldProcessEvents()) return;\n\n const procedureEntity = this.procedureEntity;\n if (!procedureEntity) return;\n\n procedureEntity.recordUserEvent(eventId);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, UpdateProcedureEventsUCHook.type);\n\n this.appObjects.registerSingleton(this);\n\n const baseApp = this.baseAppState;\n if (baseApp) {\n baseApp.addChangeObserver(this.onStateChange);\n } else {\n this.warn(\n \"BaseAppState not found - authoring mode changes will not be detected\",\n );\n }\n\n const challenge = this.challengeEntity;\n if (challenge) {\n challenge.addChangeObserver(this.onStateChange);\n } else {\n this.warn(\n \"ChallengeEntity not found - challenge changes will not be detected\",\n );\n }\n\n const eventEntity = this.eventEntity;\n if (eventEntity) {\n eventEntity.addEmissionListener(this.onEmission);\n } else {\n this.warn(\"EventEntity not found - events will not be processed\");\n }\n\n this.lastSelectedChallenge = this.selectedChallenge;\n this.onStateChange();\n }\n\n dispose(): void {\n this.baseAppState?.removeChangeObserver(this.onStateChange);\n this.challengeEntity?.removeChangeObserver(this.onStateChange);\n this.eventEntity?.removeEmissionListener(this.onEmission);\n this.lastSelectedChallenge = null;\n super.dispose();\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { AppObjectEntity, makeAppObjectRepo, } from "@vived/core";
2
2
  import { UpdateProcedureEventsUCHook, makeUpdateProcedureEventsUCHook, } from "./UpdateProcedureEventsUCHook";
3
- import { makeProcedureEntity } from "../Entities/ProcedureEntity";
3
+ import { makeProcedureEntity, } from "../Entities/ProcedureEntity";
4
4
  import { EventEntity } from "../../EventSystem/Entities/EventEntity";
5
5
  class MockBaseAppState extends AppObjectEntity {
6
6
  get isAuthoring() {
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateProcedureEventsUCHook.test.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/UpdateProcedureEventsUCHook.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EAEf,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAmB,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAErE,MAAM,gBAAiB,SAAQ,eAAe;IAK5C,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAI,WAAW,CAAC,GAAY;QAC1B,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;QACxB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAWO,eAAe;QACrB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,UAAU,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAEvC,CAAC;IAChB,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAhClC,iBAAY,GAAG,KAAK,CAAC;QACrB,cAAS,GAAmB,EAAE,CAAC;QAWvC,sBAAiB,GAAG,CAAC,QAAoB,EAAQ,EAAE;YACjD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC;QAEF,yBAAoB,GAAG,CAAC,QAAoB,EAAQ,EAAE;YACpD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,KAAK,IAAI,CAAC;gBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC;IAcF,CAAC;;AAlCe,qBAAI,GAAG,cAAc,AAAjB,CAAkB;AAqCxC,MAAM,mBAAoB,SAAQ,eAAe;IAK/C,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,IAAI,iBAAiB,CAAC,EAAU;QAC9B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAWO,eAAe;QACrB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,UAAU,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAE1C,CAAC;IAChB,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAhCrC,uBAAkB,GAAG,OAAO,CAAC;QAC7B,cAAS,GAAmB,EAAE,CAAC;QAWvC,sBAAiB,GAAG,CAAC,QAAoB,EAAQ,EAAE;YACjD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC;QAEF,yBAAoB,GAAG,CAAC,QAAoB,EAAQ,EAAE;YACpD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,KAAK,IAAI,CAAC;gBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC;IAcF,CAAC;;AAlCe,wBAAI,GAAG,iBAAiB,AAApB,CAAqB;AAqC3C,MAAM,eAAgB,SAAQ,WAAW;IAOvC,QAAQ,CAAC,EAAU,EAAE,IAAY;QAC/B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,CAAC,EAAU;QACb,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,mBAAmB;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACvE,EAAE;YACF,IAAI;SACL,CAAC,CAAC,CAAC;IACN,CAAC;IAED,gBAAgB;QACd,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,gBAAgB;QACd,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAoBD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAjE7B,kBAAa,GAAG,IAAI,GAAG,EAA4B,CAAC;QACpD,aAAQ,GAAa,EAAE,CAAC;QACxB,mBAAc,GAAkB,IAAI,CAAC;QACrC,eAAU,GAAmB,EAAE,CAAC;QAChC,uBAAkB,GAAkC,EAAE,CAAC;QA0C/D,sBAAiB,GAAG,CAAC,QAAoB,EAAQ,EAAE;YACjD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC;QAEF,yBAAoB,GAAG,CAAC,QAAoB,EAAQ,EAAE;YACpD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,KAAK,IAAI,CAAC;gBAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC;QAEF,wBAAmB,GAAG,CAAC,QAAmC,EAAQ,EAAE;YAClE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF,2BAAsB,GAAG,CAAC,QAAmC,EAAQ,EAAE;YACrE,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACxD,IAAI,KAAK,IAAI,CAAC;gBAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC;IAIF,CAAC;CACF;AAED,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC5C,IAAI,UAAyB,CAAC;IAC9B,IAAI,EAA+B,CAAC;IACpC,IAAI,eAAgC,CAAC;IACrC,IAAI,WAA4B,CAAC;IACjC,IAAI,YAA8B,CAAC;IACnC,IAAI,eAAoC,CAAC;IAEzC,UAAU,CAAC,GAAG,EAAE;QACf,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAEtD,eAAe,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACjD,WAAW,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC;QAC7C,YAAY,GAAG,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC/C,eAAe,GAAG,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAErD,YAAY,CAAC,WAAW,GAAG,KAAK,CAAC;QACjC,eAAe,CAAC,iBAAiB,GAAG,WAAW,CAAC;QAEhD,UAAU,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAC1C,UAAU,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAC3C,UAAU,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAE9C,EAAE,GAAG,+BAA+B,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QACjD,MAAM,SAAS,GAAG,2BAA2B,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC1C,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;QAC5E,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QACjD,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAErD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QACjE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACzD,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAErD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QACjE,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9B,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACzD,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAErD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QACjE,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC;QAChC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QAClE,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAErD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QACjE,eAAe,CAAC,iBAAiB,GAAG,OAAO,CAAC;QAC5C,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACtF,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAErD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QACjE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QAC1D,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAErD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QACjE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC3D,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAErD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QACjE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAE3C,WAAW,CAAC,KAAK,EAAE,CAAC;QAEpB,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAEtD,eAAe,CAAC,iBAAiB,GAAG,OAAO,CAAC;QAC5C,YAAY,CAAC,WAAW,GAAG,KAAK,CAAC;QAEjC,eAAe,CAAC,iBAAiB,GAAG,WAAW,CAAC;QAEhD,MAAM,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAEtD,eAAe,CAAC,iBAAiB,GAAG,WAAW,CAAC;QAChD,YAAY,CAAC,WAAW,GAAG,KAAK,CAAC;QAEjC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAErB,eAAe,CAAC,iBAAiB,GAAG,WAAW,CAAC;QAEhD,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAEtD,eAAe,CAAC,iBAAiB,GAAG,WAAW,CAAC;QAChD,YAAY,CAAC,WAAW,GAAG,KAAK,CAAC;QAEjC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAErB,eAAe,CAAC,iBAAiB,GAAG,OAAO,CAAC;QAE5C,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAEtD,eAAe,CAAC,iBAAiB,GAAG,OAAO,CAAC;QAC5C,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC;QAEhC,eAAe,CAAC,iBAAiB,GAAG,WAAW,CAAC;QAEhD,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC3F,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE1C,eAAe,CAAC,iBAAiB,GAAG,WAAW,CAAC;QAChD,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE3B,eAAe,CAAC,iBAAiB,GAAG,OAAO,CAAC;QAE5C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QACjE,SAAS,CAAC,SAAS,EAAE,CAAC;QACtB,eAAe,CAAC,iBAAiB,GAAG,WAAW,CAAC;QAEhD,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACzC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QACjF,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE1C,eAAe,CAAC,iBAAiB,GAAG,WAAW,CAAC;QAChD,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE3B,eAAe,CAAC,iBAAiB,GAAG,OAAO,CAAC;QAC5C,eAAe,CAAC,iBAAiB,GAAG,WAAW,CAAC;QAEhD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QAEjE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACpF,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAErC,eAAe,CAAC,iBAAiB,GAAG,WAAW,CAAC;QAChD,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEzD,eAAe,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEjD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QACjE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACrE,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAErC,eAAe,CAAC,iBAAiB,GAAG,WAAW,CAAC;QAChD,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEzD,eAAe,CAAC,KAAK,EAAE,CAAC;QAExB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QACjE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACxE,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE1C,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAErC,eAAe,CAAC,iBAAiB,GAAG,WAAW,CAAC;QAChD,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE3B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClD,QAAQ,CAAC,SAAS,EAAE,CAAC;QAErB,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACxF,WAAW,CAAC,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QACrD,WAAW,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;QAC3D,eAAe,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAE9C,eAAe,CAAC,iBAAiB,GAAG,WAAW,CAAC;QAChD,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QACjE,SAAS,CAAC,SAAS,EAAE,CAAC;QAEtB,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACpC,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;QAC1D,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC7C,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE1C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QAEjE,eAAe,CAAC,iBAAiB,GAAG,WAAW,CAAC;QAChD,YAAY,CAAC,WAAW,GAAG,KAAK,CAAC;QAEjC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAEjD,SAAS,CAAC,SAAS,EAAE,CAAC;QAEtB,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC;QAEhC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC7D,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE1C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QAEjE,eAAe,CAAC,iBAAiB,GAAG,WAAW,CAAC;QAChD,YAAY,CAAC,WAAW,GAAG,KAAK,CAAC;QAEjC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAEjD,SAAS,CAAC,SAAS,EAAE,CAAC;QAEtB,eAAe,CAAC,iBAAiB,GAAG,OAAO,CAAC;QAE5C,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACrD,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAE5D,MAAM,cAAc,GAAG,IAAI,eAAe,CAAC,YAAY,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAE3D,aAAa,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAChD,aAAa,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC5C,aAAa,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAE9C,MAAM,kBAAkB,GAAG,+BAA+B,CAAC,YAAY,CAAC,CAAC;QACzE,MAAM,CAAC,kBAAkB,CAAC,CAAC,WAAW,EAAE,CAAC;QAEzC,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QACjD,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAE5D,MAAM,YAAY,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAE3D,aAAa,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAC9C,aAAa,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC5C,aAAa,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAE9C,MAAM,cAAc,GAAG,+BAA+B,CAAC,YAAY,CAAC,CAAC;QACrE,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QAClD,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAE5D,MAAM,YAAY,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,cAAc,GAAG,IAAI,eAAe,CAAC,YAAY,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAE3D,aAAa,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAC9C,aAAa,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAChD,aAAa,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAE9C,MAAM,gBAAgB,GAAG,+BAA+B,CAAC,YAAY,CAAC,CAAC;QACvE,MAAM,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACrD,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAE5D,MAAM,YAAY,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,cAAc,GAAG,IAAI,eAAe,CAAC,YAAY,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAEtD,aAAa,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAC9C,aAAa,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAChD,aAAa,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAE5C,MAAM,kBAAkB,GAAG,+BAA+B,CAAC,YAAY,CAAC,CAAC;QACzE,MAAM,CAAC,kBAAkB,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC5C,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAAC;QAC1E,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC;QAC/E,MAAM,yBAAyB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;QAEpF,EAAE,CAAC,OAAO,EAAE,CAAC;QAEb,MAAM,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC5C,MAAM,CAAC,kBAAkB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC9C,MAAM,CAAC,yBAAyB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACvC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,eAAe,CAAC,iBAAiB,GAAG,WAAW,CAAC;QAEhD,EAAE,CAAC,OAAO,EAAE,CAAC;QAEb,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAChE,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC5D,MAAM,aAAa,GAAG,+BAA+B,CAAC,YAAY,CAAC,CAAC;QAEpE,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import {\r\n AppObject,\r\n AppObjectEntity,\r\n AppObjectRepo,\r\n makeAppObjectRepo,\r\n} from \"@vived/core\";\r\nimport {\r\n UpdateProcedureEventsUCHook,\r\n makeUpdateProcedureEventsUCHook,\r\n} from \"./UpdateProcedureEventsUCHook\";\r\nimport { ProcedureEntity, makeProcedureEntity } from \"../Entities/ProcedureEntity\";\r\nimport { EventEntity } from \"../../EventSystem/Entities/EventEntity\";\r\n\r\nclass MockBaseAppState extends AppObjectEntity {\r\n static readonly type = \"BaseAppState\";\r\n private _isAuthoring = false;\r\n private observers: (() => void)[] = [];\r\n\r\n get isAuthoring(): boolean {\r\n return this._isAuthoring;\r\n }\r\n\r\n set isAuthoring(val: boolean) {\r\n this._isAuthoring = val;\r\n this.notifyObservers();\r\n }\r\n\r\n addChangeObserver = (observer: () => void): void => {\r\n this.observers.push(observer);\r\n };\r\n\r\n removeChangeObserver = (observer: () => void): void => {\r\n const index = this.observers.indexOf(observer);\r\n if (index >= 0) this.observers.splice(index, 1);\r\n };\r\n\r\n private notifyObservers(): void {\r\n this.observers.forEach((o) => o());\r\n }\r\n\r\n static get(appObjects: AppObjectRepo): MockBaseAppState | undefined {\r\n return appObjects.getSingleton(MockBaseAppState.type) as\r\n | MockBaseAppState\r\n | undefined;\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, MockBaseAppState.type);\r\n }\r\n}\r\n\r\nclass MockChallengeEntity extends AppObjectEntity {\r\n static readonly type = \"ChallengeEntity\";\r\n private _selectedChallenge = \"OTHER\";\r\n private observers: (() => void)[] = [];\r\n\r\n get selectedChallenge(): string {\r\n return this._selectedChallenge;\r\n }\r\n\r\n set selectedChallenge(id: string) {\r\n this._selectedChallenge = id;\r\n this.notifyObservers();\r\n }\r\n\r\n addChangeObserver = (observer: () => void): void => {\r\n this.observers.push(observer);\r\n };\r\n\r\n removeChangeObserver = (observer: () => void): void => {\r\n const index = this.observers.indexOf(observer);\r\n if (index >= 0) this.observers.splice(index, 1);\r\n };\r\n\r\n private notifyObservers(): void {\r\n this.observers.forEach((o) => o());\r\n }\r\n\r\n static get(appObjects: AppObjectRepo): MockChallengeEntity | undefined {\r\n return appObjects.getSingleton(MockChallengeEntity.type) as\r\n | MockChallengeEntity\r\n | undefined;\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, MockChallengeEntity.type);\r\n }\r\n}\r\n\r\nclass MockEventEntity extends EventEntity {\r\n private eventRegistry = new Map<string, { name: string }>();\r\n private eventLog: string[] = [];\r\n private lastEmittedId_: string | null = null;\r\n private observers_: (() => void)[] = [];\r\n private emissionListeners_: ((eventId: string) => void)[] = [];\r\n\r\n register(id: string, name: string): void {\r\n this.eventRegistry.set(id, { name });\r\n }\r\n\r\n emit(id: string): void {\r\n if (this.eventRegistry.has(id)) {\r\n this.eventLog.push(id);\r\n this.lastEmittedId_ = id;\r\n this.notifyOnChange();\r\n this.observers_.forEach((o) => o());\r\n this.emissionListeners_.forEach((l) => l(id));\r\n }\r\n }\r\n\r\n reset(): void {\r\n this.eventLog = [];\r\n this.lastEmittedId_ = null;\r\n this.notifyOnChange();\r\n this.observers_.forEach((o) => o());\r\n }\r\n\r\n getRegisteredEvents() {\r\n return Array.from(this.eventRegistry.entries()).map(([id, { name }]) => ({\r\n id,\r\n name,\r\n }));\r\n }\r\n\r\n getEventCategory(): \"assessed\" | \"instructional\" {\r\n return \"assessed\";\r\n }\r\n\r\n getEmittedEvents(): string[] {\r\n return [...this.eventLog];\r\n }\r\n\r\n getLastEmittedId(): string | null {\r\n return this.lastEmittedId_;\r\n }\r\n\r\n addChangeObserver = (observer: () => void): void => {\r\n this.observers_.push(observer);\r\n };\r\n\r\n removeChangeObserver = (observer: () => void): void => {\r\n const index = this.observers_.indexOf(observer);\r\n if (index >= 0) this.observers_.splice(index, 1);\r\n };\r\n\r\n addEmissionListener = (callback: (eventId: string) => void): void => {\r\n this.emissionListeners_.push(callback);\r\n };\r\n\r\n removeEmissionListener = (callback: (eventId: string) => void): void => {\r\n const index = this.emissionListeners_.indexOf(callback);\r\n if (index >= 0) this.emissionListeners_.splice(index, 1);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, EventEntity.type);\r\n }\r\n}\r\n\r\ndescribe(\"UpdateProcedureEventsUCHook\", () => {\r\n\tlet appObjects: AppObjectRepo;\r\n\tlet uc: UpdateProcedureEventsUCHook;\r\n\tlet procedureEntity: ProcedureEntity;\r\n\tlet eventEntity: MockEventEntity;\r\n\tlet baseAppState: MockBaseAppState;\r\n\tlet challengeEntity: MockChallengeEntity;\r\n\r\n\tbeforeEach(() => {\r\n\t\tappObjects = makeAppObjectRepo();\r\n\t\tconst appObject = appObjects.getOrCreate(\"Procedure\");\r\n\r\n\t\tprocedureEntity = makeProcedureEntity(appObject);\r\n\t\teventEntity = new MockEventEntity(appObject);\r\n\t\tbaseAppState = new MockBaseAppState(appObject);\r\n\t\tchallengeEntity = new MockChallengeEntity(appObject);\r\n\r\n\t\tbaseAppState.isAuthoring = false;\r\n\t\tchallengeEntity.selectedChallenge = \"PROCEDURE\";\r\n\r\n\t\tappObjects.registerSingleton(eventEntity);\r\n\t\tappObjects.registerSingleton(baseAppState);\r\n\t\tappObjects.registerSingleton(challengeEntity);\r\n\r\n\t\tuc = makeUpdateProcedureEventsUCHook(appObject);\r\n\t});\r\n\r\n\tit(\"can be retrieved via static get method\", () => {\r\n\t\tconst retrieved = UpdateProcedureEventsUCHook.get(appObjects);\r\n\t\texpect(retrieved).toBe(uc);\r\n\t});\r\n\r\n\tit(\"registers itself as a singleton\", () => {\r\n\t\tconst singleton = appObjects.getSingleton(UpdateProcedureEventsUCHook.type);\r\n\t\texpect(singleton).toBe(uc);\r\n\t});\r\n\r\n\tit(\"records events when conditions are met\", () => {\r\n\t\tprocedureEntity.addEventId(\"event1\");\r\n\t\tprocedureEntity.addEventId(\"event2\");\r\n\t\tprocedureEntity.addEventId(\"event3\");\r\n\t\teventEntity.register(\"event1\", \"Event 1\");\r\n\t\teventEntity.register(\"event2\", \"Event 2\");\r\n\t\teventEntity.register(\"event3\", \"Event 3\");\r\n\t\teventEntity.register(\"unrelated\", \"Unrelated Event\");\r\n\r\n\t\tconst recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\r\n\t\teventEntity.emit(\"event1\");\r\n\t\texpect(recordSpy).toHaveBeenCalledWith(\"event1\");\r\n\t});\r\n\r\n\tit(\"records ALL events without relevance filtering\", () => {\r\n\t\tprocedureEntity.addEventId(\"event1\");\r\n\t\tprocedureEntity.addEventId(\"event2\");\r\n\t\tprocedureEntity.addEventId(\"event3\");\r\n\t\teventEntity.register(\"event1\", \"Event 1\");\r\n\t\teventEntity.register(\"event2\", \"Event 2\");\r\n\t\teventEntity.register(\"event3\", \"Event 3\");\r\n\t\teventEntity.register(\"unrelated\", \"Unrelated Event\");\r\n\r\n\t\tconst recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\r\n\t\teventEntity.emit(\"unrelated\");\r\n\t\texpect(recordSpy).toHaveBeenCalledWith(\"unrelated\");\r\n\t});\r\n\r\n\tit(\"does not process events when in authoring mode\", () => {\r\n\t\tprocedureEntity.addEventId(\"event1\");\r\n\t\tprocedureEntity.addEventId(\"event2\");\r\n\t\tprocedureEntity.addEventId(\"event3\");\r\n\t\teventEntity.register(\"event1\", \"Event 1\");\r\n\t\teventEntity.register(\"event2\", \"Event 2\");\r\n\t\teventEntity.register(\"event3\", \"Event 3\");\r\n\t\teventEntity.register(\"unrelated\", \"Unrelated Event\");\r\n\r\n\t\tconst recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\r\n\t\tbaseAppState.isAuthoring = true;\r\n\t\teventEntity.emit(\"event1\");\r\n\t\texpect(recordSpy).not.toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"does not process events when not on PROCEDURE challenge\", () => {\r\n\t\tprocedureEntity.addEventId(\"event1\");\r\n\t\tprocedureEntity.addEventId(\"event2\");\r\n\t\tprocedureEntity.addEventId(\"event3\");\r\n\t\teventEntity.register(\"event1\", \"Event 1\");\r\n\t\teventEntity.register(\"event2\", \"Event 2\");\r\n\t\teventEntity.register(\"event3\", \"Event 3\");\r\n\t\teventEntity.register(\"unrelated\", \"Unrelated Event\");\r\n\r\n\t\tconst recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\r\n\t\tchallengeEntity.selectedChallenge = \"OTHER\";\r\n\t\teventEntity.emit(\"event1\");\r\n\t\texpect(recordSpy).not.toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"records each emission independently, including consecutive identical events\", () => {\r\n\t\tprocedureEntity.addEventId(\"event1\");\r\n\t\tprocedureEntity.addEventId(\"event2\");\r\n\t\tprocedureEntity.addEventId(\"event3\");\r\n\t\teventEntity.register(\"event1\", \"Event 1\");\r\n\t\teventEntity.register(\"event2\", \"Event 2\");\r\n\t\teventEntity.register(\"event3\", \"Event 3\");\r\n\t\teventEntity.register(\"unrelated\", \"Unrelated Event\");\r\n\r\n\t\tconst recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\r\n\t\teventEntity.emit(\"event1\");\r\n\t\teventEntity.emit(\"event1\");\r\n\t\texpect(recordSpy).toHaveBeenCalledTimes(2);\r\n\t});\r\n\r\n\tit(\"processes multiple different events in sequence\", () => {\r\n\t\tprocedureEntity.addEventId(\"event1\");\r\n\t\tprocedureEntity.addEventId(\"event2\");\r\n\t\tprocedureEntity.addEventId(\"event3\");\r\n\t\teventEntity.register(\"event1\", \"Event 1\");\r\n\t\teventEntity.register(\"event2\", \"Event 2\");\r\n\t\teventEntity.register(\"event3\", \"Event 3\");\r\n\t\teventEntity.register(\"unrelated\", \"Unrelated Event\");\r\n\r\n\t\tconst recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\r\n\t\teventEntity.emit(\"event1\");\r\n\t\teventEntity.emit(\"event2\");\r\n\t\teventEntity.emit(\"event3\");\r\n\t\texpect(recordSpy).toHaveBeenCalledTimes(3);\r\n\t\texpect(recordSpy).toHaveBeenCalledWith(\"event1\");\r\n\t\texpect(recordSpy).toHaveBeenCalledWith(\"event2\");\r\n\t\texpect(recordSpy).toHaveBeenCalledWith(\"event3\");\r\n\t});\r\n\r\n\tit(\"records same event again after EventEntity reset\", () => {\r\n\t\tprocedureEntity.addEventId(\"event1\");\r\n\t\tprocedureEntity.addEventId(\"event2\");\r\n\t\tprocedureEntity.addEventId(\"event3\");\r\n\t\teventEntity.register(\"event1\", \"Event 1\");\r\n\t\teventEntity.register(\"event2\", \"Event 2\");\r\n\t\teventEntity.register(\"event3\", \"Event 3\");\r\n\t\teventEntity.register(\"unrelated\", \"Unrelated Event\");\r\n\r\n\t\tconst recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\r\n\t\teventEntity.emit(\"event1\");\r\n\t\texpect(recordSpy).toHaveBeenCalledTimes(1);\r\n\r\n\t\teventEntity.reset();\r\n\r\n\t\teventEntity.emit(\"event1\");\r\n\t\texpect(recordSpy).toHaveBeenCalledTimes(2);\r\n\t\texpect(recordSpy).toHaveBeenCalledWith(\"event1\");\r\n\t});\r\n\r\n\tit(\"resets procedure when switching TO PROCEDURE challenge\", () => {\r\n\t\tconst resetSpy = jest.spyOn(procedureEntity, \"reset\");\r\n\r\n\t\tchallengeEntity.selectedChallenge = \"OTHER\";\r\n\t\tbaseAppState.isAuthoring = false;\r\n\r\n\t\tchallengeEntity.selectedChallenge = \"PROCEDURE\";\r\n\r\n\t\texpect(resetSpy).toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"does not reset when already on PROCEDURE challenge\", () => {\r\n\t\tconst resetSpy = jest.spyOn(procedureEntity, \"reset\");\r\n\r\n\t\tchallengeEntity.selectedChallenge = \"PROCEDURE\";\r\n\t\tbaseAppState.isAuthoring = false;\r\n\r\n\t\tresetSpy.mockClear();\r\n\r\n\t\tchallengeEntity.selectedChallenge = \"PROCEDURE\";\r\n\r\n\t\texpect(resetSpy).not.toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"does not reset when switching FROM PROCEDURE challenge\", () => {\r\n\t\tconst resetSpy = jest.spyOn(procedureEntity, \"reset\");\r\n\r\n\t\tchallengeEntity.selectedChallenge = \"PROCEDURE\";\r\n\t\tbaseAppState.isAuthoring = false;\r\n\r\n\t\tresetSpy.mockClear();\r\n\r\n\t\tchallengeEntity.selectedChallenge = \"OTHER\";\r\n\r\n\t\texpect(resetSpy).not.toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"does not reset when in authoring mode\", () => {\r\n\t\tconst resetSpy = jest.spyOn(procedureEntity, \"reset\");\r\n\r\n\t\tchallengeEntity.selectedChallenge = \"OTHER\";\r\n\t\tbaseAppState.isAuthoring = true;\r\n\r\n\t\tchallengeEntity.selectedChallenge = \"PROCEDURE\";\r\n\r\n\t\texpect(resetSpy).not.toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"does not record stale event from previous challenge after switching to PROCEDURE\", () => {\r\n\t\teventEntity.register(\"event1\", \"Event 1\");\r\n\r\n\t\tchallengeEntity.selectedChallenge = \"PROCEDURE\";\r\n\t\teventEntity.emit(\"event1\");\r\n\r\n\t\tchallengeEntity.selectedChallenge = \"OTHER\";\r\n\r\n\t\tconst recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\r\n\t\trecordSpy.mockClear();\r\n\t\tchallengeEntity.selectedChallenge = \"PROCEDURE\";\r\n\r\n\t\texpect(recordSpy).not.toHaveBeenCalled();\r\n\t\texpect(procedureEntity.userEventLog).toEqual([]);\r\n\t});\r\n\r\n\tit(\"records first event after challenge switch even if same as stale event\", () => {\r\n\t\teventEntity.register(\"event1\", \"Event 1\");\r\n\r\n\t\tchallengeEntity.selectedChallenge = \"PROCEDURE\";\r\n\t\teventEntity.emit(\"event1\");\r\n\r\n\t\tchallengeEntity.selectedChallenge = \"OTHER\";\r\n\t\tchallengeEntity.selectedChallenge = \"PROCEDURE\";\r\n\r\n\t\tconst recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\r\n\r\n\t\teventEntity.emit(\"event1\");\r\n\t\texpect(recordSpy).toHaveBeenCalledWith(\"event1\");\r\n\t});\r\n\r\n\tit(\"detects external procedure reset during PROCEDURE to PROCEDURE transition\", () => {\r\n\t\teventEntity.register(\"event1\", \"Event 1\");\r\n\t\tprocedureEntity.addEventId(\"event1\");\r\n\r\n\t\tchallengeEntity.selectedChallenge = \"PROCEDURE\";\r\n\t\teventEntity.emit(\"event1\");\r\n\t\texpect(procedureEntity.userEventLog).toEqual([\"event1\"]);\r\n\r\n\t\tprocedureEntity.reset();\r\n\t\texpect(procedureEntity.userEventLog).toEqual([]);\r\n\r\n\t\tconst recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\r\n\t\teventEntity.emit(\"event1\");\r\n\t\texpect(recordSpy).toHaveBeenCalledWith(\"event1\");\r\n\t});\r\n\r\n\tit(\"records same event after PROCEDURE to PROCEDURE transition\", () => {\r\n\t\teventEntity.register(\"event1\", \"Event 1\");\r\n\t\tprocedureEntity.addEventId(\"event1\");\r\n\r\n\t\tchallengeEntity.selectedChallenge = \"PROCEDURE\";\r\n\t\teventEntity.emit(\"event1\");\r\n\t\texpect(procedureEntity.userEventLog).toEqual([\"event1\"]);\r\n\r\n\t\tprocedureEntity.reset();\r\n\r\n\t\tconst recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\r\n\t\teventEntity.emit(\"event1\");\r\n\t\texpect(recordSpy).toHaveBeenCalledWith(\"event1\");\r\n\t});\r\n\r\n\tit(\"does not reset EventEntity when procedure has recorded events\", () => {\r\n\t\teventEntity.register(\"event1\", \"Event 1\");\r\n\t\teventEntity.register(\"event2\", \"Event 2\");\r\n\r\n\t\tprocedureEntity.addEventId(\"event1\");\r\n\t\tprocedureEntity.addEventId(\"event2\");\r\n\r\n\t\tchallengeEntity.selectedChallenge = \"PROCEDURE\";\r\n\t\teventEntity.emit(\"event1\");\r\n\t\teventEntity.emit(\"event2\");\r\n\r\n\t\tconst resetSpy = jest.spyOn(eventEntity, \"reset\");\r\n\t\tresetSpy.mockClear();\r\n\r\n\t\teventEntity.emit(\"event1\");\r\n\t\texpect(resetSpy).not.toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"processes new event even when external reset is detected from unrelated event\", () => {\r\n\t\teventEntity.register(\"unrelated-event\", \"Unrelated\");\r\n\t\teventEntity.register(\"procedure-event\", \"Procedure Event\");\r\n\t\tprocedureEntity.addEventId(\"procedure-event\");\r\n\r\n\t\tchallengeEntity.selectedChallenge = \"PROCEDURE\";\r\n\t\teventEntity.emit(\"unrelated-event\");\r\n\r\n\t\tconst recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\r\n\t\trecordSpy.mockClear();\r\n\r\n\t\teventEntity.emit(\"procedure-event\");\r\n\t\texpect(recordSpy).toHaveBeenCalledWith(\"procedure-event\");\r\n\t\texpect(procedureEntity.userEventLog).toContain(\"procedure-event\");\r\n\t});\r\n\r\n\tit(\"responds to authoring mode changes\", () => {\r\n\t\teventEntity.register(\"event1\", \"Event 1\");\r\n\t\teventEntity.register(\"event2\", \"Event 2\");\r\n\r\n\t\tconst recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\r\n\r\n\t\tchallengeEntity.selectedChallenge = \"PROCEDURE\";\r\n\t\tbaseAppState.isAuthoring = false;\r\n\r\n\t\teventEntity.emit(\"event1\");\r\n\t\texpect(recordSpy).toHaveBeenCalledWith(\"event1\");\r\n\r\n\t\trecordSpy.mockClear();\r\n\r\n\t\tbaseAppState.isAuthoring = true;\r\n\r\n\t\teventEntity.emit(\"event2\");\r\n\t\texpect(recordSpy).not.toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"responds to challenge changes for event processing\", () => {\r\n\t\teventEntity.register(\"event1\", \"Event 1\");\r\n\t\teventEntity.register(\"event2\", \"Event 2\");\r\n\r\n\t\tconst recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\r\n\r\n\t\tchallengeEntity.selectedChallenge = \"PROCEDURE\";\r\n\t\tbaseAppState.isAuthoring = false;\r\n\r\n\t\teventEntity.emit(\"event1\");\r\n\t\texpect(recordSpy).toHaveBeenCalledWith(\"event1\");\r\n\r\n\t\trecordSpy.mockClear();\r\n\r\n\t\tchallengeEntity.selectedChallenge = \"OTHER\";\r\n\r\n\t\teventEntity.emit(\"event2\");\r\n\t\texpect(recordSpy).not.toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"handles missing ProcedureEntity gracefully\", () => {\r\n\t\tconst newAppObjects = makeAppObjectRepo();\r\n\t\tconst newAppObject = newAppObjects.getOrCreate(\"Procedure\");\r\n\r\n\t\tconst newEventEntity = new MockEventEntity(newAppObject);\r\n\t\tconst newBaseApp = new MockBaseAppState(newAppObject);\r\n\t\tconst newChallenge = new MockChallengeEntity(newAppObject);\r\n\r\n\t\tnewAppObjects.registerSingleton(newEventEntity);\r\n\t\tnewAppObjects.registerSingleton(newBaseApp);\r\n\t\tnewAppObjects.registerSingleton(newChallenge);\r\n\r\n\t\tconst ucWithoutProcedure = makeUpdateProcedureEventsUCHook(newAppObject);\r\n\t\texpect(ucWithoutProcedure).toBeDefined();\r\n\r\n\t\tnewEventEntity.register(\"test\", \"Test\");\r\n\t\tnewEventEntity.emit(\"test\");\r\n\t});\r\n\r\n\tit(\"handles missing EventEntity gracefully\", () => {\r\n\t\tconst newAppObjects = makeAppObjectRepo();\r\n\t\tconst newAppObject = newAppObjects.getOrCreate(\"Procedure\");\r\n\r\n\t\tconst newProcedure = makeProcedureEntity(newAppObject);\r\n\t\tconst newBaseApp = new MockBaseAppState(newAppObject);\r\n\t\tconst newChallenge = new MockChallengeEntity(newAppObject);\r\n\r\n\t\tnewAppObjects.registerSingleton(newProcedure);\r\n\t\tnewAppObjects.registerSingleton(newBaseApp);\r\n\t\tnewAppObjects.registerSingleton(newChallenge);\r\n\r\n\t\tconst ucWithoutEvent = makeUpdateProcedureEventsUCHook(newAppObject);\r\n\t\texpect(ucWithoutEvent).toBeDefined();\r\n\t});\r\n\r\n\tit(\"handles missing BaseAppState gracefully\", () => {\r\n\t\tconst newAppObjects = makeAppObjectRepo();\r\n\t\tconst newAppObject = newAppObjects.getOrCreate(\"Procedure\");\r\n\r\n\t\tconst newProcedure = makeProcedureEntity(newAppObject);\r\n\t\tconst newEventEntity = new MockEventEntity(newAppObject);\r\n\t\tconst newChallenge = new MockChallengeEntity(newAppObject);\r\n\r\n\t\tnewAppObjects.registerSingleton(newProcedure);\r\n\t\tnewAppObjects.registerSingleton(newEventEntity);\r\n\t\tnewAppObjects.registerSingleton(newChallenge);\r\n\r\n\t\tconst ucWithoutBaseApp = makeUpdateProcedureEventsUCHook(newAppObject);\r\n\t\texpect(ucWithoutBaseApp).toBeDefined();\r\n\t});\r\n\r\n\tit(\"handles missing ChallengeEntity gracefully\", () => {\r\n\t\tconst newAppObjects = makeAppObjectRepo();\r\n\t\tconst newAppObject = newAppObjects.getOrCreate(\"Procedure\");\r\n\r\n\t\tconst newProcedure = makeProcedureEntity(newAppObject);\r\n\t\tconst newEventEntity = new MockEventEntity(newAppObject);\r\n\t\tconst newBaseApp = new MockBaseAppState(newAppObject);\r\n\r\n\t\tnewAppObjects.registerSingleton(newProcedure);\r\n\t\tnewAppObjects.registerSingleton(newEventEntity);\r\n\t\tnewAppObjects.registerSingleton(newBaseApp);\r\n\r\n\t\tconst ucWithoutChallenge = makeUpdateProcedureEventsUCHook(newAppObject);\r\n\t\texpect(ucWithoutChallenge).toBeDefined();\r\n\t});\r\n\r\n\tit(\"removes observers during disposal\", () => {\r\n\t\tconst removeBaseAppSpy = jest.spyOn(baseAppState, \"removeChangeObserver\");\r\n\t\tconst removeChallengeSpy = jest.spyOn(challengeEntity, \"removeChangeObserver\");\r\n\t\tconst removeEmissionListenerSpy = jest.spyOn(eventEntity, \"removeEmissionListener\");\r\n\r\n\t\tuc.dispose();\r\n\r\n\t\texpect(removeBaseAppSpy).toHaveBeenCalled();\r\n\t\texpect(removeChallengeSpy).toHaveBeenCalled();\r\n\t\texpect(removeEmissionListenerSpy).toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"resets state during disposal\", () => {\r\n\t\teventEntity.emit(\"event1\");\r\n\t\tchallengeEntity.selectedChallenge = \"PROCEDURE\";\r\n\r\n\t\tuc.dispose();\r\n\r\n\t\texpect(uc).toBeDefined();\r\n\t});\r\n\r\n\tit(\"handles disposal gracefully when entities are missing\", () => {\r\n\t\tconst newAppObjects = makeAppObjectRepo();\r\n\t\tconst newAppObject = newAppObjects.getOrCreate(\"Procedure\");\r\n\t\tconst ucForDisposal = makeUpdateProcedureEventsUCHook(newAppObject);\r\n\r\n\t\texpect(() => ucForDisposal.dispose()).not.toThrow();\r\n\t});\r\n});\r\n"]}
1
+ {"version":3,"file":"UpdateProcedureEventsUCHook.test.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/UpdateProcedureEventsUCHook.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AppObject,\n AppObjectEntity,\n AppObjectRepo,\n makeAppObjectRepo,\n} from \"@vived/core\";\nimport {\n UpdateProcedureEventsUCHook,\n makeUpdateProcedureEventsUCHook,\n} from \"./UpdateProcedureEventsUCHook\";\nimport {\n ProcedureEntity,\n makeProcedureEntity,\n} from \"../Entities/ProcedureEntity\";\nimport { EventEntity } from \"../../EventSystem/Entities/EventEntity\";\n\nclass MockBaseAppState extends AppObjectEntity {\n static readonly type = \"BaseAppState\";\n private _isAuthoring = false;\n private observers: (() => void)[] = [];\n\n get isAuthoring(): boolean {\n return this._isAuthoring;\n }\n\n set isAuthoring(val: boolean) {\n this._isAuthoring = val;\n this.notifyObservers();\n }\n\n addChangeObserver = (observer: () => void): void => {\n this.observers.push(observer);\n };\n\n removeChangeObserver = (observer: () => void): void => {\n const index = this.observers.indexOf(observer);\n if (index >= 0) this.observers.splice(index, 1);\n };\n\n private notifyObservers(): void {\n this.observers.forEach((o) => o());\n }\n\n static get(appObjects: AppObjectRepo): MockBaseAppState | undefined {\n return appObjects.getSingleton(MockBaseAppState.type) as\n | MockBaseAppState\n | undefined;\n }\n\n constructor(appObject: AppObject) {\n super(appObject, MockBaseAppState.type);\n }\n}\n\nclass MockChallengeEntity extends AppObjectEntity {\n static readonly type = \"ChallengeEntity\";\n private _selectedChallenge = \"OTHER\";\n private observers: (() => void)[] = [];\n\n get selectedChallenge(): string {\n return this._selectedChallenge;\n }\n\n set selectedChallenge(id: string) {\n this._selectedChallenge = id;\n this.notifyObservers();\n }\n\n addChangeObserver = (observer: () => void): void => {\n this.observers.push(observer);\n };\n\n removeChangeObserver = (observer: () => void): void => {\n const index = this.observers.indexOf(observer);\n if (index >= 0) this.observers.splice(index, 1);\n };\n\n private notifyObservers(): void {\n this.observers.forEach((o) => o());\n }\n\n static get(appObjects: AppObjectRepo): MockChallengeEntity | undefined {\n return appObjects.getSingleton(MockChallengeEntity.type) as\n | MockChallengeEntity\n | undefined;\n }\n\n constructor(appObject: AppObject) {\n super(appObject, MockChallengeEntity.type);\n }\n}\n\nclass MockEventEntity extends EventEntity {\n private eventRegistry = new Map<string, { name: string }>();\n private eventLog: string[] = [];\n private lastEmittedId_: string | null = null;\n private observers_: (() => void)[] = [];\n private emissionListeners_: ((eventId: string) => void)[] = [];\n\n register(id: string, name: string): void {\n this.eventRegistry.set(id, { name });\n }\n\n emit(id: string): void {\n if (this.eventRegistry.has(id)) {\n this.eventLog.push(id);\n this.lastEmittedId_ = id;\n this.notifyOnChange();\n this.observers_.forEach((o) => o());\n this.emissionListeners_.forEach((l) => l(id));\n }\n }\n\n reset(): void {\n this.eventLog = [];\n this.lastEmittedId_ = null;\n this.notifyOnChange();\n this.observers_.forEach((o) => o());\n }\n\n getRegisteredEvents() {\n return Array.from(this.eventRegistry.entries()).map(([id, { name }]) => ({\n id,\n name,\n }));\n }\n\n getEventCategory(): \"assessed\" | \"instructional\" {\n return \"assessed\";\n }\n\n getEmittedEvents(): string[] {\n return [...this.eventLog];\n }\n\n getLastEmittedId(): string | null {\n return this.lastEmittedId_;\n }\n\n addChangeObserver = (observer: () => void): void => {\n this.observers_.push(observer);\n };\n\n removeChangeObserver = (observer: () => void): void => {\n const index = this.observers_.indexOf(observer);\n if (index >= 0) this.observers_.splice(index, 1);\n };\n\n addEmissionListener = (callback: (eventId: string) => void): void => {\n this.emissionListeners_.push(callback);\n };\n\n removeEmissionListener = (callback: (eventId: string) => void): void => {\n const index = this.emissionListeners_.indexOf(callback);\n if (index >= 0) this.emissionListeners_.splice(index, 1);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, EventEntity.type);\n }\n}\n\ndescribe(\"UpdateProcedureEventsUCHook\", () => {\n let appObjects: AppObjectRepo;\n let uc: UpdateProcedureEventsUCHook;\n let procedureEntity: ProcedureEntity;\n let eventEntity: MockEventEntity;\n let baseAppState: MockBaseAppState;\n let challengeEntity: MockChallengeEntity;\n\n beforeEach(() => {\n appObjects = makeAppObjectRepo();\n const appObject = appObjects.getOrCreate(\"Procedure\");\n\n procedureEntity = makeProcedureEntity(appObject);\n eventEntity = new MockEventEntity(appObject);\n baseAppState = new MockBaseAppState(appObject);\n challengeEntity = new MockChallengeEntity(appObject);\n\n baseAppState.isAuthoring = false;\n challengeEntity.selectedChallenge = \"PROCEDURE\";\n\n appObjects.registerSingleton(eventEntity);\n appObjects.registerSingleton(baseAppState);\n appObjects.registerSingleton(challengeEntity);\n\n uc = makeUpdateProcedureEventsUCHook(appObject);\n });\n\n it(\"can be retrieved via static get method\", () => {\n const retrieved = UpdateProcedureEventsUCHook.get(appObjects);\n expect(retrieved).toBe(uc);\n });\n\n it(\"registers itself as a singleton\", () => {\n const singleton = appObjects.getSingleton(UpdateProcedureEventsUCHook.type);\n expect(singleton).toBe(uc);\n });\n\n it(\"records events when conditions are met\", () => {\n procedureEntity.addEventId(\"event1\");\n procedureEntity.addEventId(\"event2\");\n procedureEntity.addEventId(\"event3\");\n eventEntity.register(\"event1\", \"Event 1\");\n eventEntity.register(\"event2\", \"Event 2\");\n eventEntity.register(\"event3\", \"Event 3\");\n eventEntity.register(\"unrelated\", \"Unrelated Event\");\n\n const recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\n eventEntity.emit(\"event1\");\n expect(recordSpy).toHaveBeenCalledWith(\"event1\");\n });\n\n it(\"records ALL events without relevance filtering\", () => {\n procedureEntity.addEventId(\"event1\");\n procedureEntity.addEventId(\"event2\");\n procedureEntity.addEventId(\"event3\");\n eventEntity.register(\"event1\", \"Event 1\");\n eventEntity.register(\"event2\", \"Event 2\");\n eventEntity.register(\"event3\", \"Event 3\");\n eventEntity.register(\"unrelated\", \"Unrelated Event\");\n\n const recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\n eventEntity.emit(\"unrelated\");\n expect(recordSpy).toHaveBeenCalledWith(\"unrelated\");\n });\n\n it(\"does not process events when in authoring mode\", () => {\n procedureEntity.addEventId(\"event1\");\n procedureEntity.addEventId(\"event2\");\n procedureEntity.addEventId(\"event3\");\n eventEntity.register(\"event1\", \"Event 1\");\n eventEntity.register(\"event2\", \"Event 2\");\n eventEntity.register(\"event3\", \"Event 3\");\n eventEntity.register(\"unrelated\", \"Unrelated Event\");\n\n const recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\n baseAppState.isAuthoring = true;\n eventEntity.emit(\"event1\");\n expect(recordSpy).not.toHaveBeenCalled();\n });\n\n it(\"does not process events when not on PROCEDURE challenge\", () => {\n procedureEntity.addEventId(\"event1\");\n procedureEntity.addEventId(\"event2\");\n procedureEntity.addEventId(\"event3\");\n eventEntity.register(\"event1\", \"Event 1\");\n eventEntity.register(\"event2\", \"Event 2\");\n eventEntity.register(\"event3\", \"Event 3\");\n eventEntity.register(\"unrelated\", \"Unrelated Event\");\n\n const recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\n challengeEntity.selectedChallenge = \"OTHER\";\n eventEntity.emit(\"event1\");\n expect(recordSpy).not.toHaveBeenCalled();\n });\n\n it(\"records each emission independently, including consecutive identical events\", () => {\n procedureEntity.addEventId(\"event1\");\n procedureEntity.addEventId(\"event2\");\n procedureEntity.addEventId(\"event3\");\n eventEntity.register(\"event1\", \"Event 1\");\n eventEntity.register(\"event2\", \"Event 2\");\n eventEntity.register(\"event3\", \"Event 3\");\n eventEntity.register(\"unrelated\", \"Unrelated Event\");\n\n const recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\n eventEntity.emit(\"event1\");\n eventEntity.emit(\"event1\");\n expect(recordSpy).toHaveBeenCalledTimes(2);\n });\n\n it(\"processes multiple different events in sequence\", () => {\n procedureEntity.addEventId(\"event1\");\n procedureEntity.addEventId(\"event2\");\n procedureEntity.addEventId(\"event3\");\n eventEntity.register(\"event1\", \"Event 1\");\n eventEntity.register(\"event2\", \"Event 2\");\n eventEntity.register(\"event3\", \"Event 3\");\n eventEntity.register(\"unrelated\", \"Unrelated Event\");\n\n const recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\n eventEntity.emit(\"event1\");\n eventEntity.emit(\"event2\");\n eventEntity.emit(\"event3\");\n expect(recordSpy).toHaveBeenCalledTimes(3);\n expect(recordSpy).toHaveBeenCalledWith(\"event1\");\n expect(recordSpy).toHaveBeenCalledWith(\"event2\");\n expect(recordSpy).toHaveBeenCalledWith(\"event3\");\n });\n\n it(\"records same event again after EventEntity reset\", () => {\n procedureEntity.addEventId(\"event1\");\n procedureEntity.addEventId(\"event2\");\n procedureEntity.addEventId(\"event3\");\n eventEntity.register(\"event1\", \"Event 1\");\n eventEntity.register(\"event2\", \"Event 2\");\n eventEntity.register(\"event3\", \"Event 3\");\n eventEntity.register(\"unrelated\", \"Unrelated Event\");\n\n const recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\n eventEntity.emit(\"event1\");\n expect(recordSpy).toHaveBeenCalledTimes(1);\n\n eventEntity.reset();\n\n eventEntity.emit(\"event1\");\n expect(recordSpy).toHaveBeenCalledTimes(2);\n expect(recordSpy).toHaveBeenCalledWith(\"event1\");\n });\n\n it(\"resets procedure when switching TO PROCEDURE challenge\", () => {\n const resetSpy = jest.spyOn(procedureEntity, \"reset\");\n\n challengeEntity.selectedChallenge = \"OTHER\";\n baseAppState.isAuthoring = false;\n\n challengeEntity.selectedChallenge = \"PROCEDURE\";\n\n expect(resetSpy).toHaveBeenCalled();\n });\n\n it(\"does not reset when already on PROCEDURE challenge\", () => {\n const resetSpy = jest.spyOn(procedureEntity, \"reset\");\n\n challengeEntity.selectedChallenge = \"PROCEDURE\";\n baseAppState.isAuthoring = false;\n\n resetSpy.mockClear();\n\n challengeEntity.selectedChallenge = \"PROCEDURE\";\n\n expect(resetSpy).not.toHaveBeenCalled();\n });\n\n it(\"does not reset when switching FROM PROCEDURE challenge\", () => {\n const resetSpy = jest.spyOn(procedureEntity, \"reset\");\n\n challengeEntity.selectedChallenge = \"PROCEDURE\";\n baseAppState.isAuthoring = false;\n\n resetSpy.mockClear();\n\n challengeEntity.selectedChallenge = \"OTHER\";\n\n expect(resetSpy).not.toHaveBeenCalled();\n });\n\n it(\"does not reset when in authoring mode\", () => {\n const resetSpy = jest.spyOn(procedureEntity, \"reset\");\n\n challengeEntity.selectedChallenge = \"OTHER\";\n baseAppState.isAuthoring = true;\n\n challengeEntity.selectedChallenge = \"PROCEDURE\";\n\n expect(resetSpy).not.toHaveBeenCalled();\n });\n\n it(\"does not record stale event from previous challenge after switching to PROCEDURE\", () => {\n eventEntity.register(\"event1\", \"Event 1\");\n\n challengeEntity.selectedChallenge = \"PROCEDURE\";\n eventEntity.emit(\"event1\");\n\n challengeEntity.selectedChallenge = \"OTHER\";\n\n const recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\n recordSpy.mockClear();\n challengeEntity.selectedChallenge = \"PROCEDURE\";\n\n expect(recordSpy).not.toHaveBeenCalled();\n expect(procedureEntity.userEventLog).toEqual([]);\n });\n\n it(\"records first event after challenge switch even if same as stale event\", () => {\n eventEntity.register(\"event1\", \"Event 1\");\n\n challengeEntity.selectedChallenge = \"PROCEDURE\";\n eventEntity.emit(\"event1\");\n\n challengeEntity.selectedChallenge = \"OTHER\";\n challengeEntity.selectedChallenge = \"PROCEDURE\";\n\n const recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\n\n eventEntity.emit(\"event1\");\n expect(recordSpy).toHaveBeenCalledWith(\"event1\");\n });\n\n it(\"detects external procedure reset during PROCEDURE to PROCEDURE transition\", () => {\n eventEntity.register(\"event1\", \"Event 1\");\n procedureEntity.addEventId(\"event1\");\n\n challengeEntity.selectedChallenge = \"PROCEDURE\";\n eventEntity.emit(\"event1\");\n expect(procedureEntity.userEventLog).toEqual([\"event1\"]);\n\n procedureEntity.reset();\n expect(procedureEntity.userEventLog).toEqual([]);\n\n const recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\n eventEntity.emit(\"event1\");\n expect(recordSpy).toHaveBeenCalledWith(\"event1\");\n });\n\n it(\"records same event after PROCEDURE to PROCEDURE transition\", () => {\n eventEntity.register(\"event1\", \"Event 1\");\n procedureEntity.addEventId(\"event1\");\n\n challengeEntity.selectedChallenge = \"PROCEDURE\";\n eventEntity.emit(\"event1\");\n expect(procedureEntity.userEventLog).toEqual([\"event1\"]);\n\n procedureEntity.reset();\n\n const recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\n eventEntity.emit(\"event1\");\n expect(recordSpy).toHaveBeenCalledWith(\"event1\");\n });\n\n it(\"does not reset EventEntity when procedure has recorded events\", () => {\n eventEntity.register(\"event1\", \"Event 1\");\n eventEntity.register(\"event2\", \"Event 2\");\n\n procedureEntity.addEventId(\"event1\");\n procedureEntity.addEventId(\"event2\");\n\n challengeEntity.selectedChallenge = \"PROCEDURE\";\n eventEntity.emit(\"event1\");\n eventEntity.emit(\"event2\");\n\n const resetSpy = jest.spyOn(eventEntity, \"reset\");\n resetSpy.mockClear();\n\n eventEntity.emit(\"event1\");\n expect(resetSpy).not.toHaveBeenCalled();\n });\n\n it(\"processes new event even when external reset is detected from unrelated event\", () => {\n eventEntity.register(\"unrelated-event\", \"Unrelated\");\n eventEntity.register(\"procedure-event\", \"Procedure Event\");\n procedureEntity.addEventId(\"procedure-event\");\n\n challengeEntity.selectedChallenge = \"PROCEDURE\";\n eventEntity.emit(\"unrelated-event\");\n\n const recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\n recordSpy.mockClear();\n\n eventEntity.emit(\"procedure-event\");\n expect(recordSpy).toHaveBeenCalledWith(\"procedure-event\");\n expect(procedureEntity.userEventLog).toContain(\"procedure-event\");\n });\n\n it(\"responds to authoring mode changes\", () => {\n eventEntity.register(\"event1\", \"Event 1\");\n eventEntity.register(\"event2\", \"Event 2\");\n\n const recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\n\n challengeEntity.selectedChallenge = \"PROCEDURE\";\n baseAppState.isAuthoring = false;\n\n eventEntity.emit(\"event1\");\n expect(recordSpy).toHaveBeenCalledWith(\"event1\");\n\n recordSpy.mockClear();\n\n baseAppState.isAuthoring = true;\n\n eventEntity.emit(\"event2\");\n expect(recordSpy).not.toHaveBeenCalled();\n });\n\n it(\"responds to challenge changes for event processing\", () => {\n eventEntity.register(\"event1\", \"Event 1\");\n eventEntity.register(\"event2\", \"Event 2\");\n\n const recordSpy = jest.spyOn(procedureEntity, \"recordUserEvent\");\n\n challengeEntity.selectedChallenge = \"PROCEDURE\";\n baseAppState.isAuthoring = false;\n\n eventEntity.emit(\"event1\");\n expect(recordSpy).toHaveBeenCalledWith(\"event1\");\n\n recordSpy.mockClear();\n\n challengeEntity.selectedChallenge = \"OTHER\";\n\n eventEntity.emit(\"event2\");\n expect(recordSpy).not.toHaveBeenCalled();\n });\n\n it(\"handles missing ProcedureEntity gracefully\", () => {\n const newAppObjects = makeAppObjectRepo();\n const newAppObject = newAppObjects.getOrCreate(\"Procedure\");\n\n const newEventEntity = new MockEventEntity(newAppObject);\n const newBaseApp = new MockBaseAppState(newAppObject);\n const newChallenge = new MockChallengeEntity(newAppObject);\n\n newAppObjects.registerSingleton(newEventEntity);\n newAppObjects.registerSingleton(newBaseApp);\n newAppObjects.registerSingleton(newChallenge);\n\n const ucWithoutProcedure = makeUpdateProcedureEventsUCHook(newAppObject);\n expect(ucWithoutProcedure).toBeDefined();\n\n newEventEntity.register(\"test\", \"Test\");\n newEventEntity.emit(\"test\");\n });\n\n it(\"handles missing EventEntity gracefully\", () => {\n const newAppObjects = makeAppObjectRepo();\n const newAppObject = newAppObjects.getOrCreate(\"Procedure\");\n\n const newProcedure = makeProcedureEntity(newAppObject);\n const newBaseApp = new MockBaseAppState(newAppObject);\n const newChallenge = new MockChallengeEntity(newAppObject);\n\n newAppObjects.registerSingleton(newProcedure);\n newAppObjects.registerSingleton(newBaseApp);\n newAppObjects.registerSingleton(newChallenge);\n\n const ucWithoutEvent = makeUpdateProcedureEventsUCHook(newAppObject);\n expect(ucWithoutEvent).toBeDefined();\n });\n\n it(\"handles missing BaseAppState gracefully\", () => {\n const newAppObjects = makeAppObjectRepo();\n const newAppObject = newAppObjects.getOrCreate(\"Procedure\");\n\n const newProcedure = makeProcedureEntity(newAppObject);\n const newEventEntity = new MockEventEntity(newAppObject);\n const newChallenge = new MockChallengeEntity(newAppObject);\n\n newAppObjects.registerSingleton(newProcedure);\n newAppObjects.registerSingleton(newEventEntity);\n newAppObjects.registerSingleton(newChallenge);\n\n const ucWithoutBaseApp = makeUpdateProcedureEventsUCHook(newAppObject);\n expect(ucWithoutBaseApp).toBeDefined();\n });\n\n it(\"handles missing ChallengeEntity gracefully\", () => {\n const newAppObjects = makeAppObjectRepo();\n const newAppObject = newAppObjects.getOrCreate(\"Procedure\");\n\n const newProcedure = makeProcedureEntity(newAppObject);\n const newEventEntity = new MockEventEntity(newAppObject);\n const newBaseApp = new MockBaseAppState(newAppObject);\n\n newAppObjects.registerSingleton(newProcedure);\n newAppObjects.registerSingleton(newEventEntity);\n newAppObjects.registerSingleton(newBaseApp);\n\n const ucWithoutChallenge = makeUpdateProcedureEventsUCHook(newAppObject);\n expect(ucWithoutChallenge).toBeDefined();\n });\n\n it(\"removes observers during disposal\", () => {\n const removeBaseAppSpy = jest.spyOn(baseAppState, \"removeChangeObserver\");\n const removeChallengeSpy = jest.spyOn(\n challengeEntity,\n \"removeChangeObserver\",\n );\n const removeEmissionListenerSpy = jest.spyOn(\n eventEntity,\n \"removeEmissionListener\",\n );\n\n uc.dispose();\n\n expect(removeBaseAppSpy).toHaveBeenCalled();\n expect(removeChallengeSpy).toHaveBeenCalled();\n expect(removeEmissionListenerSpy).toHaveBeenCalled();\n });\n\n it(\"resets state during disposal\", () => {\n eventEntity.emit(\"event1\");\n challengeEntity.selectedChallenge = \"PROCEDURE\";\n\n uc.dispose();\n\n expect(uc).toBeDefined();\n });\n\n it(\"handles disposal gracefully when entities are missing\", () => {\n const newAppObjects = makeAppObjectRepo();\n const newAppObject = newAppObjects.getOrCreate(\"Procedure\");\n const ucForDisposal = makeUpdateProcedureEventsUCHook(newAppObject);\n\n expect(() => ucForDisposal.dispose()).not.toThrow();\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC","sourcesContent":["export * from \"./AddProcedureEventUC\";\r\nexport * from \"./RecordProcedureEventUC\";\r\nexport * from \"./ResetProcedureProgressUC\";\r\nexport * from \"./RemoveProcedureEventUC\";\r\nexport * from \"./MoveProcedureEventUpUC\";\r\nexport * from \"./MoveProcedureEventDownUC\";\r\nexport * from \"./SetProcedureOrderMattersUC\";\r\nexport * from \"./SetProcedureShowHintsUC\";\r\nexport * from \"./SetProcedureIsQuizUC\";\r\nexport * from \"./SubmitProcedureQuizUC\";\r\nexport * from \"./SerializeProcedure\";\r\nexport * from \"./UpdateProcedureEventsUCHook\";\r\nexport * from \"./RecordProcedureSessionUC\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC","sourcesContent":["export * from \"./AddProcedureEventUC\";\nexport * from \"./RecordProcedureEventUC\";\nexport * from \"./ResetProcedureProgressUC\";\nexport * from \"./RemoveProcedureEventUC\";\nexport * from \"./MoveProcedureEventUpUC\";\nexport * from \"./MoveProcedureEventDownUC\";\nexport * from \"./SetProcedureOrderMattersUC\";\nexport * from \"./SetProcedureShowHintsUC\";\nexport * from \"./SetProcedureIsQuizUC\";\nexport * from \"./SubmitProcedureQuizUC\";\nexport * from \"./SerializeProcedure\";\nexport * from \"./UpdateProcedureEventsUCHook\";\nexport * from \"./RecordProcedureSessionUC\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Procedure/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,MAAM,CAAC;AACrB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC","sourcesContent":["export * from \"./Adapters\";\r\nexport * from \"./Entities\";\r\nexport * from \"./Factories\";\r\nexport * from \"./Mocks\";\r\nexport * from \"./PM\";\r\nexport * from \"./UCs\";\r\nexport * from \"./types\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Procedure/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,MAAM,CAAC;AACrB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC","sourcesContent":["export * from \"./Adapters\";\nexport * from \"./Entities\";\nexport * from \"./Factories\";\nexport * from \"./Mocks\";\nexport * from \"./PM\";\nexport * from \"./UCs\";\nexport * from \"./types\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/Procedure/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qBAAqB,GAAG,WAAW,CAAC","sourcesContent":["import { EventCategory, EventDefinition } from \"../EventSystem/types\";\r\n\r\nexport const PROCEDURE_SYSTEM_NAME = \"procedure\";\r\n\r\n/**\r\n * Resolves an authored step's `EventCategory` at evaluation time. Injected into\r\n * the `ProcedureEntity` by `ProcedureFeatureFactory` from the EventSystem\r\n * Registry; never serialized. Unknown ids must resolve to `\"assessed\"`.\r\n */\r\nexport type EventCategoryLookup = (eventId: string) => EventCategory;\r\n\r\n/**\r\n * Serialization format for Procedure state persistence (Version 1)\r\n */\r\nexport interface SerializeProcedureStateV1 {\r\n eventIds: string[];\r\n orderMatters: boolean;\r\n showHints: boolean;\r\n isQuiz: boolean;\r\n}\r\n\r\n/**\r\n * View Model interface for Procedure presentation\r\n */\r\nexport interface ProcedureVM {\r\n eventIds: string[];\r\n orderMatters: boolean;\r\n showHints: boolean;\r\n isQuiz: boolean;\r\n isRecording: boolean;\r\n userEventLog: string[];\r\n currentStepIndex: number;\r\n isComplete: boolean;\r\n validationMessage: string | null;\r\n nextExpectedEvent: string | null;\r\n progressPercentage: number;\r\n availableEvents: EventDefinition[];\r\n authoringValidationMessage: string | null;\r\n score: {\r\n percentage: number;\r\n comparison: {eventId: string; expected: boolean; actual: boolean; correct: boolean}[];\r\n } | null;\r\n isSubmitted: boolean;\r\n /**\r\n * Each authored step's category, keyed by event id (#53). A view hides a row\r\n * when `isQuiz && stepCategories[id] === \"instructional\"`; the authoring\r\n * inspector shows a \"guidance\" badge on the same rows. `eventIds` itself is\r\n * never filtered.\r\n */\r\n stepCategories: Record<string, EventCategory>;\r\n}\r\n\r\n\r\n/** Fields needed by the Babylon hint view */\r\nexport interface ProcedureHintVM {\r\n showHints: boolean;\r\n nextExpectedEvent: string | null;\r\n}\r\n\r\n/** Fields needed by the runtime step checklist and slide content */\r\nexport interface ProcedureProgressVM {\r\n eventIds: string[];\r\n availableEvents: EventDefinition[];\r\n userEventLog: string[];\r\n currentStepIndex: number;\r\n isComplete: boolean;\r\n orderMatters: boolean;\r\n progressPercentage: number;\r\n isQuiz: boolean;\r\n isSubmitted: boolean;\r\n stepCategories: Record<string, EventCategory>;\r\n}\r\n\r\n/** Fields needed by the quiz review / score screen */\r\nexport interface ProcedureQuizResultVM {\r\n isComplete: boolean;\r\n isQuiz: boolean;\r\n progressPercentage: number;\r\n eventIds: string[];\r\n availableEvents: EventDefinition[];\r\n orderMatters: boolean;\r\n userEventLog: string[];\r\n score: {\r\n percentage: number;\r\n comparison: {eventId: string; expected: boolean; actual: boolean; correct: boolean}[];\r\n } | null;\r\n isSubmitted: boolean;\r\n stepCategories: Record<string, EventCategory>;\r\n}\r\n/** Fields needed by the authoring inspector UI */\r\nexport interface ProcedureAuthoringVM {\r\n eventIds: string[];\r\n availableEvents: EventDefinition[];\r\n authoringValidationMessage: string | null;\r\n orderMatters: boolean;\r\n showHints: boolean;\r\n isQuiz: boolean;\r\n stepCategories: Record<string, EventCategory>;\r\n}\r\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/Procedure/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qBAAqB,GAAG,WAAW,CAAC","sourcesContent":["import { EventCategory, EventDefinition } from \"../EventSystem/types\";\n\nexport const PROCEDURE_SYSTEM_NAME = \"procedure\";\n\n/**\n * Resolves an authored step's `EventCategory` at evaluation time. Injected into\n * the `ProcedureEntity` by `ProcedureFeatureFactory` from the EventSystem\n * Registry; never serialized. Unknown ids must resolve to `\"assessed\"`.\n */\nexport type EventCategoryLookup = (eventId: string) => EventCategory;\n\n/**\n * Serialization format for Procedure state persistence (Version 1)\n */\nexport interface SerializeProcedureStateV1 {\n eventIds: string[];\n orderMatters: boolean;\n showHints: boolean;\n isQuiz: boolean;\n}\n\n/**\n * View Model interface for Procedure presentation\n */\nexport interface ProcedureVM {\n eventIds: string[];\n orderMatters: boolean;\n showHints: boolean;\n isQuiz: boolean;\n isRecording: boolean;\n userEventLog: string[];\n currentStepIndex: number;\n isComplete: boolean;\n validationMessage: string | null;\n nextExpectedEvent: string | null;\n progressPercentage: number;\n availableEvents: EventDefinition[];\n authoringValidationMessage: string | null;\n score: {\n percentage: number;\n comparison: {\n eventId: string;\n expected: boolean;\n actual: boolean;\n correct: boolean;\n }[];\n } | null;\n isSubmitted: boolean;\n /**\n * Each authored step's category, keyed by event id (#53). A view hides a row\n * when `isQuiz && stepCategories[id] === \"instructional\"`; the authoring\n * inspector shows a \"guidance\" badge on the same rows. `eventIds` itself is\n * never filtered.\n */\n stepCategories: Record<string, EventCategory>;\n}\n\n/** Fields needed by the Babylon hint view */\nexport interface ProcedureHintVM {\n showHints: boolean;\n nextExpectedEvent: string | null;\n}\n\n/** Fields needed by the runtime step checklist and slide content */\nexport interface ProcedureProgressVM {\n eventIds: string[];\n availableEvents: EventDefinition[];\n userEventLog: string[];\n currentStepIndex: number;\n isComplete: boolean;\n orderMatters: boolean;\n progressPercentage: number;\n isQuiz: boolean;\n isSubmitted: boolean;\n stepCategories: Record<string, EventCategory>;\n}\n\n/** Fields needed by the quiz review / score screen */\nexport interface ProcedureQuizResultVM {\n isComplete: boolean;\n isQuiz: boolean;\n progressPercentage: number;\n eventIds: string[];\n availableEvents: EventDefinition[];\n orderMatters: boolean;\n userEventLog: string[];\n score: {\n percentage: number;\n comparison: {\n eventId: string;\n expected: boolean;\n actual: boolean;\n correct: boolean;\n }[];\n } | null;\n isSubmitted: boolean;\n stepCategories: Record<string, EventCategory>;\n}\n/** Fields needed by the authoring inspector UI */\nexport interface ProcedureAuthoringVM {\n eventIds: string[];\n availableEvents: EventDefinition[];\n authoringValidationMessage: string | null;\n orderMatters: boolean;\n showHints: boolean;\n isQuiz: boolean;\n stepCategories: Record<string, EventCategory>;\n}\n"]}
@@ -59,5 +59,14 @@ describe("Set Theme Colors base handler", () => {
59
59
  expect(themeColors.getColorForType(type1).hex).toEqual(colors[type1]);
60
60
  expect(themeColors.getColorForType(type2).hex).toEqual(colors[type2]);
61
61
  });
62
+ it("Sets the status colors the Host sends", () => {
63
+ const { themeColors, setTheme } = makeTestRig();
64
+ setTheme.handleRequest(1, {
65
+ colors: { success: "#34c08f", warning: "#ffb951", info: "#a2c9ff" },
66
+ });
67
+ expect(themeColors.getColorForType(ThemeColorType.success).hex).toEqual("#34c08f");
68
+ expect(themeColors.getColorForType(ThemeColorType.warning).hex).toEqual("#ffb951");
69
+ expect(themeColors.getColorForType(ThemeColorType.info).hex).toEqual("#a2c9ff");
70
+ });
62
71
  });
63
72
  //# sourceMappingURL=SetThemeColorUC.test.js.map