@vived/app 6.6.0 → 6.7.1

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 (176) hide show
  1. package/dist/cjs/BaseApp/UC/RenderCanvasUC.js +17 -36
  2. package/dist/cjs/BaseApp/UC/RenderCanvasUC.js.map +1 -1
  3. package/dist/cjs/BaseApp/UC/RenderCanvasUC.test.js +18 -18
  4. package/dist/cjs/BaseApp/UC/RenderCanvasUC.test.js.map +1 -1
  5. package/dist/cjs/Challenge/Factories/ChallengeFeatureFactory.js +9 -28
  6. package/dist/cjs/Challenge/Factories/ChallengeFeatureFactory.js.map +1 -1
  7. package/dist/cjs/Challenge/Factories/ChallengeFeatureFactory.test.js +51 -0
  8. package/dist/cjs/Challenge/Factories/ChallengeFeatureFactory.test.js.map +1 -0
  9. package/dist/cjs/EventSystem/Entities/EventEntity.js +12 -2
  10. package/dist/cjs/EventSystem/Entities/EventEntity.js.map +1 -1
  11. package/dist/cjs/EventSystem/Entities/EventEntity.test.js +45 -0
  12. package/dist/cjs/EventSystem/Entities/EventEntity.test.js.map +1 -1
  13. package/dist/cjs/EventSystem/Mocks/MockEventEntity.js +7 -2
  14. package/dist/cjs/EventSystem/Mocks/MockEventEntity.js.map +1 -1
  15. package/dist/cjs/EventSystem/types.js.map +1 -1
  16. package/dist/cjs/ObjectPick/Factories/setupObjectPick.js +18 -1
  17. package/dist/cjs/ObjectPick/Factories/setupObjectPick.js.map +1 -1
  18. package/dist/cjs/ObjectPick/Factories/setupObjectPick.test.js +55 -0
  19. package/dist/cjs/ObjectPick/Factories/setupObjectPick.test.js.map +1 -0
  20. package/dist/cjs/Procedure/Adapters/procedureAdapter.js +1 -0
  21. package/dist/cjs/Procedure/Adapters/procedureAdapter.js.map +1 -1
  22. package/dist/cjs/Procedure/Adapters/procedureAdapter.test.js +1 -0
  23. package/dist/cjs/Procedure/Adapters/procedureAdapter.test.js.map +1 -1
  24. package/dist/cjs/Procedure/Adapters/procedureAuthoringAdapter.js +2 -0
  25. package/dist/cjs/Procedure/Adapters/procedureAuthoringAdapter.js.map +1 -1
  26. package/dist/cjs/Procedure/Adapters/procedureAuthoringAdapter.test.js +3 -0
  27. package/dist/cjs/Procedure/Adapters/procedureAuthoringAdapter.test.js.map +1 -1
  28. package/dist/cjs/Procedure/Adapters/procedureHintAdapter.test.js +1 -0
  29. package/dist/cjs/Procedure/Adapters/procedureHintAdapter.test.js.map +1 -1
  30. package/dist/cjs/Procedure/Adapters/procedureProgressAdapter.js +2 -0
  31. package/dist/cjs/Procedure/Adapters/procedureProgressAdapter.js.map +1 -1
  32. package/dist/cjs/Procedure/Adapters/procedureProgressAdapter.test.js +3 -0
  33. package/dist/cjs/Procedure/Adapters/procedureProgressAdapter.test.js.map +1 -1
  34. package/dist/cjs/Procedure/Adapters/procedureQuizResultAdapter.js +2 -0
  35. package/dist/cjs/Procedure/Adapters/procedureQuizResultAdapter.js.map +1 -1
  36. package/dist/cjs/Procedure/Adapters/procedureQuizResultAdapter.test.js +3 -0
  37. package/dist/cjs/Procedure/Adapters/procedureQuizResultAdapter.test.js.map +1 -1
  38. package/dist/cjs/Procedure/Entities/ProcedureEntity.js +163 -24
  39. package/dist/cjs/Procedure/Entities/ProcedureEntity.js.map +1 -1
  40. package/dist/cjs/Procedure/Entities/ProcedureEntity.test.js +240 -0
  41. package/dist/cjs/Procedure/Entities/ProcedureEntity.test.js.map +1 -1
  42. package/dist/cjs/Procedure/Factories/ProcedureFeatureFactory.js +20 -0
  43. package/dist/cjs/Procedure/Factories/ProcedureFeatureFactory.js.map +1 -1
  44. package/dist/cjs/Procedure/Factories/ProcedureFeatureFactory.test.js +25 -0
  45. package/dist/cjs/Procedure/Factories/ProcedureFeatureFactory.test.js.map +1 -1
  46. package/dist/cjs/Procedure/Mocks/MockProcedureEntity.js +2 -0
  47. package/dist/cjs/Procedure/Mocks/MockProcedureEntity.js.map +1 -1
  48. package/dist/cjs/Procedure/PM/ProcedurePM.js +13 -1
  49. package/dist/cjs/Procedure/PM/ProcedurePM.js.map +1 -1
  50. package/dist/cjs/Procedure/PM/ProcedurePM.test.js +34 -0
  51. package/dist/cjs/Procedure/PM/ProcedurePM.test.js.map +1 -1
  52. package/dist/cjs/Procedure/UCs/UpdateProcedureEventsUCHook.test.js +3 -0
  53. package/dist/cjs/Procedure/UCs/UpdateProcedureEventsUCHook.test.js.map +1 -1
  54. package/dist/cjs/Procedure/types.js.map +1 -1
  55. package/dist/cjs/TouchController/UC/UpdateTouchInoutBound.test.js +37 -0
  56. package/dist/cjs/TouchController/UC/UpdateTouchInoutBound.test.js.map +1 -1
  57. package/dist/cjs/TouchController/UC/UpdateTouchInputBound.js +17 -4
  58. package/dist/cjs/TouchController/UC/UpdateTouchInputBound.js.map +1 -1
  59. package/dist/esm/BaseApp/UC/RenderCanvasUC.js +17 -36
  60. package/dist/esm/BaseApp/UC/RenderCanvasUC.js.map +1 -1
  61. package/dist/esm/BaseApp/UC/RenderCanvasUC.test.js +18 -18
  62. package/dist/esm/BaseApp/UC/RenderCanvasUC.test.js.map +1 -1
  63. package/dist/esm/Challenge/Factories/ChallengeFeatureFactory.js +9 -28
  64. package/dist/esm/Challenge/Factories/ChallengeFeatureFactory.js.map +1 -1
  65. package/dist/esm/Challenge/Factories/ChallengeFeatureFactory.test.js +49 -0
  66. package/dist/esm/Challenge/Factories/ChallengeFeatureFactory.test.js.map +1 -0
  67. package/dist/esm/EventSystem/Entities/EventEntity.js +12 -2
  68. package/dist/esm/EventSystem/Entities/EventEntity.js.map +1 -1
  69. package/dist/esm/EventSystem/Entities/EventEntity.test.js +45 -0
  70. package/dist/esm/EventSystem/Entities/EventEntity.test.js.map +1 -1
  71. package/dist/esm/EventSystem/Mocks/MockEventEntity.js +7 -2
  72. package/dist/esm/EventSystem/Mocks/MockEventEntity.js.map +1 -1
  73. package/dist/esm/EventSystem/types.js.map +1 -1
  74. package/dist/esm/ObjectPick/Factories/setupObjectPick.js +18 -1
  75. package/dist/esm/ObjectPick/Factories/setupObjectPick.js.map +1 -1
  76. package/dist/esm/ObjectPick/Factories/setupObjectPick.test.js +53 -0
  77. package/dist/esm/ObjectPick/Factories/setupObjectPick.test.js.map +1 -0
  78. package/dist/esm/Procedure/Adapters/procedureAdapter.js +1 -0
  79. package/dist/esm/Procedure/Adapters/procedureAdapter.js.map +1 -1
  80. package/dist/esm/Procedure/Adapters/procedureAdapter.test.js +1 -0
  81. package/dist/esm/Procedure/Adapters/procedureAdapter.test.js.map +1 -1
  82. package/dist/esm/Procedure/Adapters/procedureAuthoringAdapter.js +2 -0
  83. package/dist/esm/Procedure/Adapters/procedureAuthoringAdapter.js.map +1 -1
  84. package/dist/esm/Procedure/Adapters/procedureAuthoringAdapter.test.js +3 -0
  85. package/dist/esm/Procedure/Adapters/procedureAuthoringAdapter.test.js.map +1 -1
  86. package/dist/esm/Procedure/Adapters/procedureHintAdapter.test.js +1 -0
  87. package/dist/esm/Procedure/Adapters/procedureHintAdapter.test.js.map +1 -1
  88. package/dist/esm/Procedure/Adapters/procedureProgressAdapter.js +2 -0
  89. package/dist/esm/Procedure/Adapters/procedureProgressAdapter.js.map +1 -1
  90. package/dist/esm/Procedure/Adapters/procedureProgressAdapter.test.js +3 -0
  91. package/dist/esm/Procedure/Adapters/procedureProgressAdapter.test.js.map +1 -1
  92. package/dist/esm/Procedure/Adapters/procedureQuizResultAdapter.js +2 -0
  93. package/dist/esm/Procedure/Adapters/procedureQuizResultAdapter.js.map +1 -1
  94. package/dist/esm/Procedure/Adapters/procedureQuizResultAdapter.test.js +3 -0
  95. package/dist/esm/Procedure/Adapters/procedureQuizResultAdapter.test.js.map +1 -1
  96. package/dist/esm/Procedure/Entities/ProcedureEntity.js +163 -24
  97. package/dist/esm/Procedure/Entities/ProcedureEntity.js.map +1 -1
  98. package/dist/esm/Procedure/Entities/ProcedureEntity.test.js +240 -0
  99. package/dist/esm/Procedure/Entities/ProcedureEntity.test.js.map +1 -1
  100. package/dist/esm/Procedure/Factories/ProcedureFeatureFactory.js +20 -0
  101. package/dist/esm/Procedure/Factories/ProcedureFeatureFactory.js.map +1 -1
  102. package/dist/esm/Procedure/Factories/ProcedureFeatureFactory.test.js +26 -1
  103. package/dist/esm/Procedure/Factories/ProcedureFeatureFactory.test.js.map +1 -1
  104. package/dist/esm/Procedure/Mocks/MockProcedureEntity.js +2 -0
  105. package/dist/esm/Procedure/Mocks/MockProcedureEntity.js.map +1 -1
  106. package/dist/esm/Procedure/PM/ProcedurePM.js +13 -1
  107. package/dist/esm/Procedure/PM/ProcedurePM.js.map +1 -1
  108. package/dist/esm/Procedure/PM/ProcedurePM.test.js +34 -0
  109. package/dist/esm/Procedure/PM/ProcedurePM.test.js.map +1 -1
  110. package/dist/esm/Procedure/UCs/UpdateProcedureEventsUCHook.test.js +3 -0
  111. package/dist/esm/Procedure/UCs/UpdateProcedureEventsUCHook.test.js.map +1 -1
  112. package/dist/esm/Procedure/types.js.map +1 -1
  113. package/dist/esm/TouchController/UC/UpdateTouchInoutBound.test.js +37 -0
  114. package/dist/esm/TouchController/UC/UpdateTouchInoutBound.test.js.map +1 -1
  115. package/dist/esm/TouchController/UC/UpdateTouchInputBound.js +17 -4
  116. package/dist/esm/TouchController/UC/UpdateTouchInputBound.js.map +1 -1
  117. package/dist/types/Challenge/Factories/ChallengeFeatureFactory.d.ts +7 -16
  118. package/dist/types/Challenge/Factories/ChallengeFeatureFactory.d.ts.map +1 -1
  119. package/dist/types/Challenge/Factories/ChallengeFeatureFactory.test.d.ts +2 -0
  120. package/dist/types/Challenge/Factories/ChallengeFeatureFactory.test.d.ts.map +1 -0
  121. package/dist/types/EventSystem/Entities/EventEntity.d.ts +13 -2
  122. package/dist/types/EventSystem/Entities/EventEntity.d.ts.map +1 -1
  123. package/dist/types/EventSystem/Mocks/MockEventEntity.d.ts +3 -2
  124. package/dist/types/EventSystem/Mocks/MockEventEntity.d.ts.map +1 -1
  125. package/dist/types/EventSystem/types.d.ts +23 -0
  126. package/dist/types/EventSystem/types.d.ts.map +1 -1
  127. package/dist/types/ObjectPick/Factories/setupObjectPick.d.ts +10 -0
  128. package/dist/types/ObjectPick/Factories/setupObjectPick.d.ts.map +1 -1
  129. package/dist/types/ObjectPick/Factories/setupObjectPick.test.d.ts +2 -0
  130. package/dist/types/ObjectPick/Factories/setupObjectPick.test.d.ts.map +1 -0
  131. package/dist/types/Procedure/Adapters/procedureAdapter.d.ts.map +1 -1
  132. package/dist/types/Procedure/Adapters/procedureAuthoringAdapter.d.ts.map +1 -1
  133. package/dist/types/Procedure/Adapters/procedureProgressAdapter.d.ts.map +1 -1
  134. package/dist/types/Procedure/Adapters/procedureQuizResultAdapter.d.ts.map +1 -1
  135. package/dist/types/Procedure/Entities/ProcedureEntity.d.ts +10 -0
  136. package/dist/types/Procedure/Entities/ProcedureEntity.d.ts.map +1 -1
  137. package/dist/types/Procedure/Factories/ProcedureFeatureFactory.d.ts +6 -0
  138. package/dist/types/Procedure/Factories/ProcedureFeatureFactory.d.ts.map +1 -1
  139. package/dist/types/Procedure/Mocks/MockProcedureEntity.d.ts +3 -0
  140. package/dist/types/Procedure/Mocks/MockProcedureEntity.d.ts.map +1 -1
  141. package/dist/types/Procedure/types.d.ts +17 -1
  142. package/dist/types/Procedure/types.d.ts.map +1 -1
  143. package/dist/types/TouchController/UC/UpdateTouchInputBound.d.ts +11 -0
  144. package/dist/types/TouchController/UC/UpdateTouchInputBound.d.ts.map +1 -1
  145. package/package.json +6 -3
  146. package/src/EventSystem/CONTEXT.md +29 -17
  147. package/dist/cjs/FramedScreen/Factories/setupStandardFramedScreen.test.js +0 -31
  148. package/dist/cjs/FramedScreen/Factories/setupStandardFramedScreen.test.js.map +0 -1
  149. package/dist/cjs/StateMachine/Controller/clickRestoreScene.js +0 -14
  150. package/dist/cjs/StateMachine/Controller/clickRestoreScene.js.map +0 -1
  151. package/dist/cjs/StateMachine/Controller/clickRestoreScene.test.js +0 -26
  152. package/dist/cjs/StateMachine/Controller/clickRestoreScene.test.js.map +0 -1
  153. package/dist/cjs/TestUtils/index.js +0 -18
  154. package/dist/cjs/TestUtils/index.js.map +0 -1
  155. package/dist/cjs/TestUtils/setupFeatureForTesting.js +0 -60
  156. package/dist/cjs/TestUtils/setupFeatureForTesting.js.map +0 -1
  157. package/dist/esm/FramedScreen/Factories/setupStandardFramedScreen.test.js +0 -29
  158. package/dist/esm/FramedScreen/Factories/setupStandardFramedScreen.test.js.map +0 -1
  159. package/dist/esm/StateMachine/Controller/clickRestoreScene.js +0 -11
  160. package/dist/esm/StateMachine/Controller/clickRestoreScene.js.map +0 -1
  161. package/dist/esm/StateMachine/Controller/clickRestoreScene.test.js +0 -24
  162. package/dist/esm/StateMachine/Controller/clickRestoreScene.test.js.map +0 -1
  163. package/dist/esm/TestUtils/index.js +0 -2
  164. package/dist/esm/TestUtils/index.js.map +0 -1
  165. package/dist/esm/TestUtils/setupFeatureForTesting.js +0 -57
  166. package/dist/esm/TestUtils/setupFeatureForTesting.js.map +0 -1
  167. package/dist/types/FramedScreen/Factories/setupStandardFramedScreen.test.d.ts +0 -2
  168. package/dist/types/FramedScreen/Factories/setupStandardFramedScreen.test.d.ts.map +0 -1
  169. package/dist/types/StateMachine/Controller/clickRestoreScene.d.ts +0 -3
  170. package/dist/types/StateMachine/Controller/clickRestoreScene.d.ts.map +0 -1
  171. package/dist/types/StateMachine/Controller/clickRestoreScene.test.d.ts +0 -2
  172. package/dist/types/StateMachine/Controller/clickRestoreScene.test.d.ts.map +0 -1
  173. package/dist/types/TestUtils/index.d.ts +0 -2
  174. package/dist/types/TestUtils/index.d.ts.map +0 -1
  175. package/dist/types/TestUtils/setupFeatureForTesting.d.ts +0 -48
  176. package/dist/types/TestUtils/setupFeatureForTesting.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"EventEntity.test.js","sourceRoot":"","sources":["../../../../src/EventSystem/Entities/EventEntity.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\r\nimport { EventEntity, makeEventEntity } from \"./EventEntity\";\r\n\r\ndescribe(\"EventEntity\", () => {\r\n let appObjects: AppObjectRepo;\r\n let entity: EventEntity;\r\n let registerSingletonSpy: jest.SpyInstance;\r\n let submitWarningSpy: jest.SpyInstance;\r\n\r\n beforeEach(() => {\r\n appObjects = makeAppObjectRepo();\r\n registerSingletonSpy = jest.spyOn(appObjects, \"registerSingleton\");\r\n submitWarningSpy = jest.spyOn(appObjects, \"submitWarning\");\r\n\r\n entity = makeEventEntity(appObjects.getOrCreate(\"test-entity\"));\r\n });\r\n\r\n it(\"registers itself as a singleton\", () => {\r\n expect(registerSingletonSpy).toHaveBeenCalledWith(entity);\r\n });\r\n\r\n it(\"should be accessible through the static getter\", () => {\r\n appObjects.getOrCreate(\"another-object\");\r\n const retrievedEntity = EventEntity.get(appObjects);\r\n expect(retrievedEntity).toBe(entity);\r\n });\r\n\r\n it(\"registers new events successfully\", () => {\r\n entity.register(\"button_click\", \"Button Click Event\");\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n expect(registeredEvents).toHaveLength(1);\r\n expect(registeredEvents[0]).toEqual({\r\n id: \"button_click\",\r\n name: \"Button Click Event\",\r\n });\r\n });\r\n\r\n it(\"should register multiple events\", () => {\r\n entity.register(\"button_click\", \"Button Click Event\");\r\n entity.register(\"page_load\", \"Page Load Event\");\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n expect(registeredEvents).toHaveLength(2);\r\n\r\n const eventIds = registeredEvents.map((e) => e.id);\r\n expect(eventIds).toContain(\"button_click\");\r\n expect(eventIds).toContain(\"page_load\");\r\n });\r\n\r\n it(\"should warn on duplicate registration\", () => {\r\n entity.register(\"button_click\", \"Button Click Event\");\r\n entity.register(\"button_click\", \"Another Button Click\");\r\n\r\n expect(submitWarningSpy).toHaveBeenCalledWith(\r\n \"EventEntity\",\r\n \"Event with id 'button_click' is already registered\",\r\n );\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n expect(registeredEvents).toHaveLength(1);\r\n });\r\n\r\n it(\"emits known events successfully\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toEqual([\"auto_cycle_clicked\"]);\r\n expect(entity.getLastEmittedId()).toBe(\"auto_cycle_clicked\");\r\n });\r\n\r\n it(\"maintains chronological order of emissions\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n entity.emit(\"manual_step\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toEqual([\r\n \"auto_cycle_clicked\",\r\n \"manual_step\",\r\n \"auto_cycle_clicked\",\r\n ]);\r\n expect(entity.getLastEmittedId()).toBe(\"auto_cycle_clicked\");\r\n });\r\n\r\n it(\"allows duplicate emissions\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toHaveLength(3);\r\n expect(\r\n emittedEvents.every((id) => id === \"auto_cycle_clicked\"),\r\n ).toBe(true);\r\n });\r\n\r\n it(\"warns and ignores unknown event emissions\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"unknown_event\");\r\n\r\n expect(submitWarningSpy).toHaveBeenCalledWith(\r\n \"EventEntity\",\r\n \"Cannot emit unknown event with id 'unknown_event'\",\r\n );\r\n\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toHaveLength(0);\r\n expect(entity.getLastEmittedId()).toBeNull();\r\n });\r\n\r\n it(\"allows late registration after emission attempt\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"late_event\");\r\n expect(submitWarningSpy).toHaveBeenCalled();\r\n\r\n entity.register(\"late_event\", \"Late Event\");\r\n\r\n entity.emit(\"late_event\");\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toEqual([\"late_event\"]);\r\n });\r\n\r\n it(\"clears event log while preserving registry after reset\", () => {\r\n entity.register(\"event1\", \"Event One\");\r\n entity.register(\"event2\", \"Event Two\");\r\n entity.emit(\"event1\");\r\n entity.emit(\"event2\");\r\n entity.emit(\"event1\");\r\n expect(entity.getEmittedEvents()).toHaveLength(3);\r\n expect(entity.getLastEmittedId()).toBe(\"event1\");\r\n\r\n entity.reset();\r\n\r\n expect(entity.getEmittedEvents()).toHaveLength(0);\r\n expect(entity.getLastEmittedId()).toBeNull();\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n expect(registeredEvents).toHaveLength(2);\r\n expect(registeredEvents.map((e) => e.id)).toContain(\"event1\");\r\n expect(registeredEvents.map((e) => e.id)).toContain(\"event2\");\r\n });\r\n\r\n it(\"allows emissions after reset\", () => {\r\n entity.register(\"event1\", \"Event One\");\r\n entity.register(\"event2\", \"Event Two\");\r\n entity.emit(\"event1\");\r\n entity.emit(\"event2\");\r\n entity.emit(\"event1\");\r\n entity.reset();\r\n\r\n entity.emit(\"event1\");\r\n expect(entity.getEmittedEvents()).toEqual([\"event1\"]);\r\n expect(entity.getLastEmittedId()).toBe(\"event1\");\r\n });\r\n\r\n it(\"notifies observers when events are emitted\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const mockObserver = jest.fn();\r\n entity.addChangeObserver(mockObserver);\r\n\r\n entity.emit(\"test_event\");\r\n\r\n expect(mockObserver).toHaveBeenCalledTimes(1);\r\n });\r\n\r\n it(\"notifies observers on reset\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n entity.emit(\"test_event\");\r\n\r\n const mockObserver = jest.fn();\r\n entity.addChangeObserver(mockObserver);\r\n\r\n entity.reset();\r\n\r\n expect(mockObserver).toHaveBeenCalledTimes(1);\r\n });\r\n\r\n it(\"does not notify observers for unknown event emissions\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const mockObserver = jest.fn();\r\n entity.addChangeObserver(mockObserver);\r\n\r\n entity.emit(\"unknown_event\");\r\n\r\n expect(mockObserver).not.toHaveBeenCalled();\r\n });\r\n\r\n it(\"fires emission listener on every emit\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const listener = jest.fn();\r\n entity.addEmissionListener(listener);\r\n\r\n entity.emit(\"test_event\");\r\n entity.emit(\"test_event\");\r\n\r\n expect(listener).toHaveBeenCalledTimes(2);\r\n expect(listener).toHaveBeenCalledWith(\"test_event\");\r\n });\r\n\r\n it(\"does not fire emission listener for unknown events\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const listener = jest.fn();\r\n entity.addEmissionListener(listener);\r\n\r\n entity.emit(\"unknown_event\");\r\n\r\n expect(listener).not.toHaveBeenCalled();\r\n });\r\n\r\n it(\"allows removing emission listeners\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const listener = jest.fn();\r\n entity.addEmissionListener(listener);\r\n\r\n entity.emit(\"test_event\");\r\n expect(listener).toHaveBeenCalledTimes(1);\r\n\r\n entity.removeEmissionListener(listener);\r\n entity.emit(\"test_event\");\r\n expect(listener).toHaveBeenCalledTimes(1);\r\n });\r\n\r\n it(\"returns empty arrays and null initially\", () => {\r\n expect(entity.getRegisteredEvents()).toEqual([]);\r\n expect(entity.getEmittedEvents()).toEqual([]);\r\n expect(entity.getLastEmittedId()).toBeNull();\r\n });\r\n\r\n it(\"returns copies of arrays to prevent external mutation\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n entity.emit(\"test_event\");\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n const emittedEvents = entity.getEmittedEvents();\r\n\r\n registeredEvents.push({ id: \"fake\", name: \"Fake\" });\r\n emittedEvents.push(\"fake_emission\");\r\n\r\n expect(entity.getRegisteredEvents()).toHaveLength(1);\r\n expect(entity.getEmittedEvents()).toHaveLength(1);\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"EventEntity.test.js","sourceRoot":"","sources":["../../../../src/EventSystem/Entities/EventEntity.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\r\nimport { EventEntity, makeEventEntity } from \"./EventEntity\";\r\n\r\ndescribe(\"EventEntity\", () => {\r\n let appObjects: AppObjectRepo;\r\n let entity: EventEntity;\r\n let registerSingletonSpy: jest.SpyInstance;\r\n let submitWarningSpy: jest.SpyInstance;\r\n\r\n beforeEach(() => {\r\n appObjects = makeAppObjectRepo();\r\n registerSingletonSpy = jest.spyOn(appObjects, \"registerSingleton\");\r\n submitWarningSpy = jest.spyOn(appObjects, \"submitWarning\");\r\n\r\n entity = makeEventEntity(appObjects.getOrCreate(\"test-entity\"));\r\n });\r\n\r\n it(\"registers itself as a singleton\", () => {\r\n expect(registerSingletonSpy).toHaveBeenCalledWith(entity);\r\n });\r\n\r\n it(\"should be accessible through the static getter\", () => {\r\n appObjects.getOrCreate(\"another-object\");\r\n const retrievedEntity = EventEntity.get(appObjects);\r\n expect(retrievedEntity).toBe(entity);\r\n });\r\n\r\n it(\"registers new events successfully\", () => {\r\n entity.register(\"button_click\", \"Button Click Event\");\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n expect(registeredEvents).toHaveLength(1);\r\n expect(registeredEvents[0]).toEqual({\r\n id: \"button_click\",\r\n name: \"Button Click Event\",\r\n });\r\n });\r\n\r\n it(\"should register multiple events\", () => {\r\n entity.register(\"button_click\", \"Button Click Event\");\r\n entity.register(\"page_load\", \"Page Load Event\");\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n expect(registeredEvents).toHaveLength(2);\r\n\r\n const eventIds = registeredEvents.map((e) => e.id);\r\n expect(eventIds).toContain(\"button_click\");\r\n expect(eventIds).toContain(\"page_load\");\r\n });\r\n\r\n it(\"should warn on duplicate registration\", () => {\r\n entity.register(\"button_click\", \"Button Click Event\");\r\n entity.register(\"button_click\", \"Another Button Click\");\r\n\r\n expect(submitWarningSpy).toHaveBeenCalledWith(\r\n \"EventEntity\",\r\n \"Event with id 'button_click' is already registered\",\r\n );\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n expect(registeredEvents).toHaveLength(1);\r\n });\r\n\r\n it(\"emits known events successfully\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toEqual([\"auto_cycle_clicked\"]);\r\n expect(entity.getLastEmittedId()).toBe(\"auto_cycle_clicked\");\r\n });\r\n\r\n it(\"maintains chronological order of emissions\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n entity.emit(\"manual_step\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toEqual([\r\n \"auto_cycle_clicked\",\r\n \"manual_step\",\r\n \"auto_cycle_clicked\",\r\n ]);\r\n expect(entity.getLastEmittedId()).toBe(\"auto_cycle_clicked\");\r\n });\r\n\r\n it(\"allows duplicate emissions\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toHaveLength(3);\r\n expect(\r\n emittedEvents.every((id) => id === \"auto_cycle_clicked\"),\r\n ).toBe(true);\r\n });\r\n\r\n it(\"warns and ignores unknown event emissions\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"unknown_event\");\r\n\r\n expect(submitWarningSpy).toHaveBeenCalledWith(\r\n \"EventEntity\",\r\n \"Cannot emit unknown event with id 'unknown_event'\",\r\n );\r\n\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toHaveLength(0);\r\n expect(entity.getLastEmittedId()).toBeNull();\r\n });\r\n\r\n it(\"allows late registration after emission attempt\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"late_event\");\r\n expect(submitWarningSpy).toHaveBeenCalled();\r\n\r\n entity.register(\"late_event\", \"Late Event\");\r\n\r\n entity.emit(\"late_event\");\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toEqual([\"late_event\"]);\r\n });\r\n\r\n it(\"clears event log while preserving registry after reset\", () => {\r\n entity.register(\"event1\", \"Event One\");\r\n entity.register(\"event2\", \"Event Two\");\r\n entity.emit(\"event1\");\r\n entity.emit(\"event2\");\r\n entity.emit(\"event1\");\r\n expect(entity.getEmittedEvents()).toHaveLength(3);\r\n expect(entity.getLastEmittedId()).toBe(\"event1\");\r\n\r\n entity.reset();\r\n\r\n expect(entity.getEmittedEvents()).toHaveLength(0);\r\n expect(entity.getLastEmittedId()).toBeNull();\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n expect(registeredEvents).toHaveLength(2);\r\n expect(registeredEvents.map((e) => e.id)).toContain(\"event1\");\r\n expect(registeredEvents.map((e) => e.id)).toContain(\"event2\");\r\n });\r\n\r\n it(\"allows emissions after reset\", () => {\r\n entity.register(\"event1\", \"Event One\");\r\n entity.register(\"event2\", \"Event Two\");\r\n entity.emit(\"event1\");\r\n entity.emit(\"event2\");\r\n entity.emit(\"event1\");\r\n entity.reset();\r\n\r\n entity.emit(\"event1\");\r\n expect(entity.getEmittedEvents()).toEqual([\"event1\"]);\r\n expect(entity.getLastEmittedId()).toBe(\"event1\");\r\n });\r\n\r\n it(\"notifies observers when events are emitted\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const mockObserver = jest.fn();\r\n entity.addChangeObserver(mockObserver);\r\n\r\n entity.emit(\"test_event\");\r\n\r\n expect(mockObserver).toHaveBeenCalledTimes(1);\r\n });\r\n\r\n it(\"notifies observers on reset\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n entity.emit(\"test_event\");\r\n\r\n const mockObserver = jest.fn();\r\n entity.addChangeObserver(mockObserver);\r\n\r\n entity.reset();\r\n\r\n expect(mockObserver).toHaveBeenCalledTimes(1);\r\n });\r\n\r\n it(\"does not notify observers for unknown event emissions\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const mockObserver = jest.fn();\r\n entity.addChangeObserver(mockObserver);\r\n\r\n entity.emit(\"unknown_event\");\r\n\r\n expect(mockObserver).not.toHaveBeenCalled();\r\n });\r\n\r\n it(\"fires emission listener on every emit\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const listener = jest.fn();\r\n entity.addEmissionListener(listener);\r\n\r\n entity.emit(\"test_event\");\r\n entity.emit(\"test_event\");\r\n\r\n expect(listener).toHaveBeenCalledTimes(2);\r\n expect(listener).toHaveBeenCalledWith(\"test_event\");\r\n });\r\n\r\n it(\"does not fire emission listener for unknown events\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const listener = jest.fn();\r\n entity.addEmissionListener(listener);\r\n\r\n entity.emit(\"unknown_event\");\r\n\r\n expect(listener).not.toHaveBeenCalled();\r\n });\r\n\r\n it(\"allows removing emission listeners\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const listener = jest.fn();\r\n entity.addEmissionListener(listener);\r\n\r\n entity.emit(\"test_event\");\r\n expect(listener).toHaveBeenCalledTimes(1);\r\n\r\n entity.removeEmissionListener(listener);\r\n entity.emit(\"test_event\");\r\n expect(listener).toHaveBeenCalledTimes(1);\r\n });\r\n\r\n it(\"returns empty arrays and null initially\", () => {\r\n expect(entity.getRegisteredEvents()).toEqual([]);\r\n expect(entity.getEmittedEvents()).toEqual([]);\r\n expect(entity.getLastEmittedId()).toBeNull();\r\n });\r\n\r\n it(\"returns copies of arrays to prevent external mutation\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n entity.emit(\"test_event\");\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n const emittedEvents = entity.getEmittedEvents();\r\n\r\n registeredEvents.push({ id: \"fake\", name: \"Fake\" });\r\n emittedEvents.push(\"fake_emission\");\r\n\r\n expect(entity.getRegisteredEvents()).toHaveLength(1);\r\n expect(entity.getEmittedEvents()).toHaveLength(1);\r\n });\r\n\r\n describe(\"event categories (#53)\", () => {\r\n it(\"stores an explicit category on the definition\", () => {\r\n entity.register(\"navigate-to-overhead\", \"Go to overhead\", {\r\n category: \"instructional\",\r\n });\r\n\r\n expect(entity.getRegisteredEvents()[0]).toEqual({\r\n id: \"navigate-to-overhead\",\r\n name: \"Go to overhead\",\r\n category: \"instructional\",\r\n });\r\n expect(entity.getEventCategory(\"navigate-to-overhead\")).toBe(\r\n \"instructional\",\r\n );\r\n });\r\n\r\n it(\"defaults an omitted category to assessed without adding a key to the definition\", () => {\r\n entity.register(\"lever\", \"Pull lever\");\r\n entity.register(\"valve\", \"Open valve\", {});\r\n\r\n expect(entity.getRegisteredEvents()).toEqual([\r\n { id: \"lever\", name: \"Pull lever\" },\r\n { id: \"valve\", name: \"Open valve\" },\r\n ]);\r\n expect(Object.keys(entity.getRegisteredEvents()[0])).toEqual([\"id\", \"name\"]);\r\n expect(entity.getEventCategory(\"lever\")).toBe(\"assessed\");\r\n expect(entity.getEventCategory(\"valve\")).toBe(\"assessed\");\r\n });\r\n\r\n it(\"treats an unregistered id as assessed\", () => {\r\n expect(entity.getEventCategory(\"legacy-step\")).toBe(\"assessed\");\r\n });\r\n\r\n it(\"keeps the first registration's category on a duplicate registration\", () => {\r\n entity.register(\"lever\", \"Pull lever\");\r\n entity.register(\"lever\", \"Pull lever again\", {\r\n category: \"instructional\",\r\n });\r\n\r\n expect(entity.getEventCategory(\"lever\")).toBe(\"assessed\");\r\n });\r\n\r\n it(\"emits an instructional event exactly like an assessed one\", () => {\r\n entity.register(\"navigate-to-overhead\", \"Go to overhead\", {\r\n category: \"instructional\",\r\n });\r\n const listener = jest.fn();\r\n entity.addEmissionListener(listener);\r\n\r\n entity.emit(\"navigate-to-overhead\");\r\n\r\n expect(listener).toHaveBeenCalledWith(\"navigate-to-overhead\");\r\n expect(entity.getEmittedEvents()).toEqual([\"navigate-to-overhead\"]);\r\n expect(entity.getLastEmittedId()).toBe(\"navigate-to-overhead\");\r\n });\r\n });\r\n});\r\n"]}
@@ -9,9 +9,14 @@ class MockEventEntity extends EventEntity_1.EventEntity {
9
9
  this._registeredEvents = [];
10
10
  this._emittedEvents = [];
11
11
  this._lastEmittedId = null;
12
- this.register = jest.fn((id, name) => {
13
- this._registeredEvents.push({ id, name });
12
+ this.register = jest.fn((id, name, options) => {
13
+ const definition = { id, name };
14
+ if (options?.category) {
15
+ definition.category = options.category;
16
+ }
17
+ this._registeredEvents.push(definition);
14
18
  });
19
+ this.getEventCategory = jest.fn((id) => this._registeredEvents.find((e) => e.id === id)?.category ?? "assessed");
15
20
  this.emit = jest.fn((id) => {
16
21
  this._emittedEvents.push(id);
17
22
  this._lastEmittedId = id;
@@ -1 +1 @@
1
- {"version":3,"file":"MockEventEntity.js","sourceRoot":"","sources":["../../../../src/EventSystem/Mocks/MockEventEntity.ts"],"names":[],"mappings":";;;AAkCA,kDAEC;AAlCD,yDAAsD;AAEtD,MAAa,eAAgB,SAAQ,yBAAW;IAyB9C,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,yBAAW,CAAC,IAAI,CAAC,CAAC;QAzB7B,sBAAiB,GAAsB,EAAE,CAAC;QAC1C,mBAAc,GAAa,EAAE,CAAC;QAC9B,mBAAc,GAAkB,IAAI,CAAC;QAE7C,aAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAU,EAAE,IAAY,EAAE,EAAE;YAC9C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,SAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAU,EAAE,EAAE;YAC5B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,UAAK,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YACnB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,wBAAmB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACjE,qBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAC3D,qBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtD,wBAAmB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAChC,2BAAsB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAInC,CAAC;CACF;AA5BD,0CA4BC;AAED,SAAgB,mBAAmB,CAAC,UAAyB;IAC3D,OAAO,IAAI,eAAe,CAAC,UAAU,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACxE,CAAC","sourcesContent":["import { AppObject, AppObjectRepo } from \"@vived/core\";\r\nimport { EventDefinition } from \"../types\";\r\nimport { EventEntity } from \"../Entities/EventEntity\";\r\n\r\nexport class MockEventEntity extends EventEntity {\r\n private _registeredEvents: EventDefinition[] = [];\r\n private _emittedEvents: string[] = [];\r\n private _lastEmittedId: string | null = null;\r\n\r\n register = jest.fn((id: string, name: string) => {\r\n this._registeredEvents.push({ id, name });\r\n });\r\n\r\n emit = jest.fn((id: string) => {\r\n this._emittedEvents.push(id);\r\n this._lastEmittedId = id;\r\n });\r\n\r\n reset = jest.fn(() => {\r\n this._emittedEvents = [];\r\n this._lastEmittedId = null;\r\n });\r\n\r\n getRegisteredEvents = jest.fn(() => [...this._registeredEvents]);\r\n getEmittedEvents = jest.fn(() => [...this._emittedEvents]);\r\n getLastEmittedId = jest.fn(() => this._lastEmittedId);\r\n addEmissionListener = jest.fn();\r\n removeEmissionListener = jest.fn();\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, EventEntity.type);\r\n }\r\n}\r\n\r\nexport function makeMockEventEntity(appObjects: AppObjectRepo) {\r\n return new MockEventEntity(appObjects.getOrCreate(\"MockEventEntity\"));\r\n}\r\n"]}
1
+ {"version":3,"file":"MockEventEntity.js","sourceRoot":"","sources":["../../../../src/EventSystem/Mocks/MockEventEntity.ts"],"names":[],"mappings":";;;AAiDA,kDAEC;AA7CD,yDAAsD;AAEtD,MAAa,eAAgB,SAAQ,yBAAW;IAoC9C,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,yBAAW,CAAC,IAAI,CAAC,CAAC;QApC7B,sBAAiB,GAAsB,EAAE,CAAC;QAC1C,mBAAc,GAAa,EAAE,CAAC;QAC9B,mBAAc,GAAkB,IAAI,CAAC;QAE7C,aAAQ,GAAG,IAAI,CAAC,EAAE,CAChB,CAAC,EAAU,EAAE,IAAY,EAAE,OAAkC,EAAE,EAAE;YAC/D,MAAM,UAAU,GAAoB,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;YACjD,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;gBACtB,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YACzC,CAAC;YACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC,CACF,CAAC;QAEF,qBAAgB,GAAG,IAAI,CAAC,EAAE,CACxB,CAAC,EAAU,EAAiB,EAAE,CAC5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,IAAI,UAAU,CAC1E,CAAC;QAEF,SAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAU,EAAE,EAAE;YAC5B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,UAAK,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YACnB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,wBAAmB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACjE,qBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAC3D,qBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtD,wBAAmB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAChC,2BAAsB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAInC,CAAC;CACF;AAvCD,0CAuCC;AAED,SAAgB,mBAAmB,CAAC,UAAyB;IAC3D,OAAO,IAAI,eAAe,CAAC,UAAU,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACxE,CAAC","sourcesContent":["import { AppObject, AppObjectRepo } from \"@vived/core\";\r\nimport {\r\n EventCategory,\r\n EventDefinition,\r\n EventRegistrationOptions,\r\n} from \"../types\";\r\nimport { EventEntity } from \"../Entities/EventEntity\";\r\n\r\nexport class MockEventEntity extends EventEntity {\r\n private _registeredEvents: EventDefinition[] = [];\r\n private _emittedEvents: string[] = [];\r\n private _lastEmittedId: string | null = null;\r\n\r\n register = jest.fn(\r\n (id: string, name: string, options?: EventRegistrationOptions) => {\r\n const definition: EventDefinition = { id, name };\r\n if (options?.category) {\r\n definition.category = options.category;\r\n }\r\n this._registeredEvents.push(definition);\r\n },\r\n );\r\n\r\n getEventCategory = jest.fn(\r\n (id: string): EventCategory =>\r\n this._registeredEvents.find((e) => e.id === id)?.category ?? \"assessed\",\r\n );\r\n\r\n emit = jest.fn((id: string) => {\r\n this._emittedEvents.push(id);\r\n this._lastEmittedId = id;\r\n });\r\n\r\n reset = jest.fn(() => {\r\n this._emittedEvents = [];\r\n this._lastEmittedId = null;\r\n });\r\n\r\n getRegisteredEvents = jest.fn(() => [...this._registeredEvents]);\r\n getEmittedEvents = jest.fn(() => [...this._emittedEvents]);\r\n getLastEmittedId = jest.fn(() => this._lastEmittedId);\r\n addEmissionListener = jest.fn();\r\n removeEmissionListener = jest.fn();\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, EventEntity.type);\r\n }\r\n}\r\n\r\nexport function makeMockEventEntity(appObjects: AppObjectRepo) {\r\n return new MockEventEntity(appObjects.getOrCreate(\"MockEventEntity\"));\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/EventSystem/types.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/**\r\n * TypeScript type definitions for the EventSystem feature.\r\n * Defines interfaces for event definitions and factory-related types.\r\n */\r\n\r\n/**\r\n * Represents a registered event definition with unique ID and human-readable name\r\n */\r\nexport interface EventDefinition {\r\n /** Unique identifier for the event */\r\n id: string;\r\n /** Human-readable name for the event */\r\n name: string;\r\n}\r\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/EventSystem/types.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/**\r\n * TypeScript type definitions for the EventSystem feature.\r\n * Defines interfaces for event definitions and factory-related types.\r\n */\r\n\r\n/**\r\n * The scoring semantics of an event, named by what the event means for a quiz —\r\n * not by where it comes from (the consuming app decides, this package only knows\r\n * the rule):\r\n * - `\"assessed\"` — the event represents a task outcome; scored, counted toward\r\n * progress and shown in a quiz.\r\n * - `\"instructional\"` — guidance (e.g. arriving at a viewpoint); an ordinary step\r\n * in training, but quiz-neutral: hidden and excluded from score and progress.\r\n */\r\nexport type EventCategory = \"assessed\" | \"instructional\";\r\n\r\n/**\r\n * Optional settings accepted by `EventEntity.register(id, name, options)`.\r\n */\r\nexport interface EventRegistrationOptions {\r\n /** Defaults to `\"assessed\"` when omitted. */\r\n category?: EventCategory;\r\n}\r\n\r\n/**\r\n * Represents a registered event definition with unique ID and human-readable name\r\n */\r\nexport interface EventDefinition {\r\n /** Unique identifier for the event */\r\n id: string;\r\n /** Human-readable name for the event */\r\n name: string;\r\n /**\r\n * Present only when the registration passed a category. Absent means\r\n * `\"assessed\"` — read it through `EventEntity.getEventCategory(id)`, which\r\n * normalizes the default, rather than from this field.\r\n */\r\n category?: EventCategory;\r\n}\r\n"]}
@@ -1,13 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.setupObjectPick = setupObjectPick;
4
+ const Challenge_1 = require("../../Challenge");
4
5
  const Controllers_1 = require("../Controllers");
5
6
  const Entities_1 = require("../Entities");
6
7
  const PM_1 = require("../PM");
7
8
  const UseCases_1 = require("../UseCases");
9
+ /**
10
+ * Legacy setup for the ObjectPick Feature. Prefer ObjectPickFeatureFactory.
11
+ *
12
+ * ORDERING: wire the Challenge Feature *before* calling this. ObjectPick
13
+ * registers itself as a Challenge kind, and it can only do so if the
14
+ * ChallengeEntity already exists - ChallengeFeatureFactory no longer registers
15
+ * kinds on their behalf. Called with no Challenge Feature present, the
16
+ * registration is skipped silently, which is the supported state for a
17
+ * composition that has declined the Challenge Feature.
18
+ */
8
19
  function setupObjectPick(appObjects) {
9
20
  const ao = appObjects.getOrCreate("ObjectPick");
10
- (0, Entities_1.makeObjectPickEntity)(ao);
21
+ const objectPickEntity = (0, Entities_1.makeObjectPickEntity)(ao);
11
22
  // UCs
12
23
  (0, UseCases_1.makeAddCorrectObjectIdUC)(ao);
13
24
  (0, UseCases_1.makeClearCorrectObjectIdsUC)(ao);
@@ -22,5 +33,11 @@ function setupObjectPick(appObjects) {
22
33
  new Controllers_1.MouseObjectPickMC(ao);
23
34
  new Controllers_1.TouchObjectPickTC(ao);
24
35
  new Controllers_1.StylusObjectPickSC(ao);
36
+ // Register as a Challenge kind, matching ObjectPickFeatureFactory.finalSetup.
37
+ // hasSingleton is checked first because the getter warns when it misses, and
38
+ // a composition without the Challenge Feature is a supported state.
39
+ if (appObjects.hasSingleton(Challenge_1.ChallengeEntity.type)) {
40
+ Challenge_1.ChallengeEntity.get(appObjects)?.registerChallenge(objectPickEntity);
41
+ }
25
42
  }
26
43
  //# sourceMappingURL=setupObjectPick.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setupObjectPick.js","sourceRoot":"","sources":["../../../../src/ObjectPick/Factories/setupObjectPick.ts"],"names":[],"mappings":";;AAkBA,0CAqBC;AAtCD,gDAIwB;AACxB,0CAAmD;AACnD,8BAAyC;AACzC,0CAQqB;AAErB,SAAgB,eAAe,CAAC,UAAyB;IACvD,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAEhD,IAAA,+BAAoB,EAAC,EAAE,CAAC,CAAC;IAEzB,MAAM;IACN,IAAA,mCAAwB,EAAC,EAAE,CAAC,CAAC;IAC7B,IAAA,sCAA2B,EAAC,EAAE,CAAC,CAAC;IAChC,IAAA,sCAA2B,EAAC,EAAE,CAAC,CAAC;IAChC,IAAA,oCAAyB,EAAC,EAAE,CAAC,CAAC;IAC9B,IAAA,oCAAyB,EAAC,EAAE,CAAC,CAAC;IAC9B,IAAA,mCAAwB,EAAC,EAAE,CAAC,CAAC;IAC7B,IAAI,8BAAmB,CAAC,EAAE,CAAC,CAAC;IAE5B,MAAM;IACN,IAAA,qBAAgB,EAAC,EAAE,CAAC,CAAC;IAErB,cAAc;IACd,IAAI,+BAAiB,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,+BAAiB,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,gCAAkB,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC","sourcesContent":["import { AppObjectRepo } from \"@vived/core\";\nimport {\n MouseObjectPickMC,\n StylusObjectPickSC,\n TouchObjectPickTC,\n} from \"../Controllers\";\nimport { makeObjectPickEntity } from \"../Entities\";\nimport { makeObjectPickPM } from \"../PM\";\nimport {\n makeAddCorrectObjectIdUC,\n makeClearCorrectObjectIdsUC,\n makeRemoveCorrectObjectIdUC,\n makeTrySelectObjectPickUC,\n makeTrySubmitObjectPickUC,\n makeValidateObjectPickUC,\n SerializeObjectPick,\n} from \"../UseCases\";\n\nexport function setupObjectPick(appObjects: AppObjectRepo) {\n const ao = appObjects.getOrCreate(\"ObjectPick\");\n\n makeObjectPickEntity(ao);\n\n // UCs\n makeAddCorrectObjectIdUC(ao);\n makeClearCorrectObjectIdsUC(ao);\n makeRemoveCorrectObjectIdUC(ao);\n makeTrySelectObjectPickUC(ao);\n makeTrySubmitObjectPickUC(ao);\n makeValidateObjectPickUC(ao);\n new SerializeObjectPick(ao);\n\n // PMs\n makeObjectPickPM(ao);\n\n // Controllers\n new MouseObjectPickMC(ao);\n new TouchObjectPickTC(ao);\n new StylusObjectPickSC(ao);\n}\n"]}
1
+ {"version":3,"file":"setupObjectPick.js","sourceRoot":"","sources":["../../../../src/ObjectPick/Factories/setupObjectPick.ts"],"names":[],"mappings":";;AA6BA,0CA4BC;AAxDD,+CAAkD;AAClD,gDAIwB;AACxB,0CAAmD;AACnD,8BAAyC;AACzC,0CAQqB;AAErB;;;;;;;;;GASG;AACH,SAAgB,eAAe,CAAC,UAAyB;IACvD,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAEhD,MAAM,gBAAgB,GAAG,IAAA,+BAAoB,EAAC,EAAE,CAAC,CAAC;IAElD,MAAM;IACN,IAAA,mCAAwB,EAAC,EAAE,CAAC,CAAC;IAC7B,IAAA,sCAA2B,EAAC,EAAE,CAAC,CAAC;IAChC,IAAA,sCAA2B,EAAC,EAAE,CAAC,CAAC;IAChC,IAAA,oCAAyB,EAAC,EAAE,CAAC,CAAC;IAC9B,IAAA,oCAAyB,EAAC,EAAE,CAAC,CAAC;IAC9B,IAAA,mCAAwB,EAAC,EAAE,CAAC,CAAC;IAC7B,IAAI,8BAAmB,CAAC,EAAE,CAAC,CAAC;IAE5B,MAAM;IACN,IAAA,qBAAgB,EAAC,EAAE,CAAC,CAAC;IAErB,cAAc;IACd,IAAI,+BAAiB,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,+BAAiB,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,gCAAkB,CAAC,EAAE,CAAC,CAAC;IAE3B,8EAA8E;IAC9E,6EAA6E;IAC7E,oEAAoE;IACpE,IAAI,UAAU,CAAC,YAAY,CAAC,2BAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,2BAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACvE,CAAC;AACH,CAAC","sourcesContent":["import { AppObjectRepo } from \"@vived/core\";\nimport { ChallengeEntity } from \"../../Challenge\";\nimport {\n MouseObjectPickMC,\n StylusObjectPickSC,\n TouchObjectPickTC,\n} from \"../Controllers\";\nimport { makeObjectPickEntity } from \"../Entities\";\nimport { makeObjectPickPM } from \"../PM\";\nimport {\n makeAddCorrectObjectIdUC,\n makeClearCorrectObjectIdsUC,\n makeRemoveCorrectObjectIdUC,\n makeTrySelectObjectPickUC,\n makeTrySubmitObjectPickUC,\n makeValidateObjectPickUC,\n SerializeObjectPick,\n} from \"../UseCases\";\n\n/**\n * Legacy setup for the ObjectPick Feature. Prefer ObjectPickFeatureFactory.\n *\n * ORDERING: wire the Challenge Feature *before* calling this. ObjectPick\n * registers itself as a Challenge kind, and it can only do so if the\n * ChallengeEntity already exists - ChallengeFeatureFactory no longer registers\n * kinds on their behalf. Called with no Challenge Feature present, the\n * registration is skipped silently, which is the supported state for a\n * composition that has declined the Challenge Feature.\n */\nexport function setupObjectPick(appObjects: AppObjectRepo) {\n const ao = appObjects.getOrCreate(\"ObjectPick\");\n\n const objectPickEntity = makeObjectPickEntity(ao);\n\n // UCs\n makeAddCorrectObjectIdUC(ao);\n makeClearCorrectObjectIdsUC(ao);\n makeRemoveCorrectObjectIdUC(ao);\n makeTrySelectObjectPickUC(ao);\n makeTrySubmitObjectPickUC(ao);\n makeValidateObjectPickUC(ao);\n new SerializeObjectPick(ao);\n\n // PMs\n makeObjectPickPM(ao);\n\n // Controllers\n new MouseObjectPickMC(ao);\n new TouchObjectPickTC(ao);\n new StylusObjectPickSC(ao);\n\n // Register as a Challenge kind, matching ObjectPickFeatureFactory.finalSetup.\n // hasSingleton is checked first because the getter warns when it misses, and\n // a composition without the Challenge Feature is a supported state.\n if (appObjects.hasSingleton(ChallengeEntity.type)) {\n ChallengeEntity.get(appObjects)?.registerChallenge(objectPickEntity);\n }\n}\n"]}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@vived/core");
4
+ const BaseAppState_1 = require("../../BaseApp/Entity/BaseAppState");
5
+ const Entities_1 = require("../../Challenge/Entities");
6
+ const ChallengeEntity_1 = require("../../Challenge/Entities/ChallengeEntity");
7
+ const MockMouseInput_1 = require("../../MouseInput/Mocks/MockMouseInput");
8
+ const StateMachine_1 = require("../../StateMachine");
9
+ const StylusEntity_1 = require("../../Stylus/Entity/StylusEntity");
10
+ const MockTouchInput_1 = require("../../TouchController/Mock/MockTouchInput");
11
+ const Entities_2 = require("../Entities");
12
+ const setupObjectPick_1 = require("./setupObjectPick");
13
+ function makeTestRig() {
14
+ const appObjects = (0, core_1.makeAppObjectRepo)();
15
+ // Boundary singletons the ObjectPick UCs and Controllers read at
16
+ // construction time. setupObjectPick builds all three input controllers
17
+ // unconditionally, so all three input entities must be present.
18
+ const inputAO = appObjects.getOrCreate("App");
19
+ (0, BaseAppState_1.makeBaseAppState)(inputAO);
20
+ new MockMouseInput_1.MockMouseInput(inputAO);
21
+ new MockTouchInput_1.MockTouchInputEntity(inputAO);
22
+ (0, StylusEntity_1.makeStylusEntity)(inputAO);
23
+ // SerializeObjectPick registers itself as a serialized System.
24
+ (0, StateMachine_1.makeStateMachineEntity)(appObjects.getOrCreate("StateMachine"));
25
+ const mockError = jest.fn();
26
+ const mockWarn = jest.fn();
27
+ appObjects.submitError = mockError;
28
+ appObjects.submitWarning = mockWarn;
29
+ return { appObjects, mockError, mockWarn };
30
+ }
31
+ function registeredIDs(appObjects) {
32
+ return ChallengeEntity_1.ChallengeEntity.get(appObjects).allChallenges.map((challenge) => challenge.challengeID);
33
+ }
34
+ describe("setupObjectPick", () => {
35
+ it("Creates the ObjectPick entity", () => {
36
+ const { appObjects } = makeTestRig();
37
+ (0, setupObjectPick_1.setupObjectPick)(appObjects);
38
+ expect(Entities_2.ObjectPickEntity.get(appObjects)).toBeDefined();
39
+ });
40
+ it("Registers itself as a challenge kind when the Challenge feature is already wired", () => {
41
+ const { appObjects } = makeTestRig();
42
+ (0, Entities_1.makeChallengeEntity)(appObjects.getOrCreate("Challenge"));
43
+ (0, setupObjectPick_1.setupObjectPick)(appObjects);
44
+ expect(registeredIDs(appObjects)).toContain("OBJECT_PICK");
45
+ });
46
+ it("Skips the registration silently when there is no Challenge feature", () => {
47
+ const { appObjects, mockError, mockWarn } = makeTestRig();
48
+ expect(() => (0, setupObjectPick_1.setupObjectPick)(appObjects)).not.toThrow();
49
+ // hasSingleton, not .get - the getter itself warns when it misses.
50
+ expect(appObjects.hasSingleton(ChallengeEntity_1.ChallengeEntity.type)).toBe(false);
51
+ expect(mockError).not.toHaveBeenCalled();
52
+ expect(mockWarn).not.toHaveBeenCalled();
53
+ });
54
+ });
55
+ //# sourceMappingURL=setupObjectPick.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupObjectPick.test.js","sourceRoot":"","sources":["../../../../src/ObjectPick/Factories/setupObjectPick.test.ts"],"names":[],"mappings":";;AAAA,sCAA+D;AAC/D,oEAAqE;AACrE,uDAA+D;AAC/D,8EAA2E;AAC3E,0EAAuE;AACvE,qDAA4D;AAC5D,mEAAoE;AACpE,8EAAiF;AACjF,0CAA+C;AAC/C,uDAAoD;AAEpD,SAAS,WAAW;IAClB,MAAM,UAAU,GAAG,IAAA,wBAAiB,GAAE,CAAC;IAEvC,iEAAiE;IACjE,wEAAwE;IACxE,gEAAgE;IAChE,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAA,+BAAgB,EAAC,OAAO,CAAC,CAAC;IAC1B,IAAI,+BAAc,CAAC,OAAO,CAAC,CAAC;IAC5B,IAAI,qCAAoB,CAAC,OAAO,CAAC,CAAC;IAClC,IAAA,+BAAgB,EAAC,OAAO,CAAC,CAAC;IAE1B,+DAA+D;IAC/D,IAAA,qCAAsB,EAAC,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;IAE/D,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAC3B,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC;IACnC,UAAU,CAAC,aAAa,GAAG,QAAQ,CAAC;IAEpC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAC7C,CAAC;AAED,SAAS,aAAa,CAAC,UAAyB;IAC9C,OAAO,iCAAe,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,aAAa,CAAC,GAAG,CACvD,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,CACrC,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAErC,IAAA,iCAAe,EAAC,UAAU,CAAC,CAAC;QAE5B,MAAM,CAAC,2BAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QACrC,IAAA,8BAAmB,EAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QAEzD,IAAA,iCAAe,EAAC,UAAU,CAAC,CAAC;QAE5B,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;QAE1D,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,iCAAe,EAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAExD,mEAAmE;QACnE,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,iCAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClE,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACzC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\nimport { makeBaseAppState } from \"../../BaseApp/Entity/BaseAppState\";\nimport { makeChallengeEntity } from \"../../Challenge/Entities\";\nimport { ChallengeEntity } from \"../../Challenge/Entities/ChallengeEntity\";\nimport { MockMouseInput } from \"../../MouseInput/Mocks/MockMouseInput\";\nimport { makeStateMachineEntity } from \"../../StateMachine\";\nimport { makeStylusEntity } from \"../../Stylus/Entity/StylusEntity\";\nimport { MockTouchInputEntity } from \"../../TouchController/Mock/MockTouchInput\";\nimport { ObjectPickEntity } from \"../Entities\";\nimport { setupObjectPick } from \"./setupObjectPick\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n\n // Boundary singletons the ObjectPick UCs and Controllers read at\n // construction time. setupObjectPick builds all three input controllers\n // unconditionally, so all three input entities must be present.\n const inputAO = appObjects.getOrCreate(\"App\");\n makeBaseAppState(inputAO);\n new MockMouseInput(inputAO);\n new MockTouchInputEntity(inputAO);\n makeStylusEntity(inputAO);\n\n // SerializeObjectPick registers itself as a serialized System.\n makeStateMachineEntity(appObjects.getOrCreate(\"StateMachine\"));\n\n const mockError = jest.fn();\n const mockWarn = jest.fn();\n appObjects.submitError = mockError;\n appObjects.submitWarning = mockWarn;\n\n return { appObjects, mockError, mockWarn };\n}\n\nfunction registeredIDs(appObjects: AppObjectRepo): string[] {\n return ChallengeEntity.get(appObjects)!.allChallenges.map(\n (challenge) => challenge.challengeID,\n );\n}\n\ndescribe(\"setupObjectPick\", () => {\n it(\"Creates the ObjectPick entity\", () => {\n const { appObjects } = makeTestRig();\n\n setupObjectPick(appObjects);\n\n expect(ObjectPickEntity.get(appObjects)).toBeDefined();\n });\n\n it(\"Registers itself as a challenge kind when the Challenge feature is already wired\", () => {\n const { appObjects } = makeTestRig();\n makeChallengeEntity(appObjects.getOrCreate(\"Challenge\"));\n\n setupObjectPick(appObjects);\n\n expect(registeredIDs(appObjects)).toContain(\"OBJECT_PICK\");\n });\n\n it(\"Skips the registration silently when there is no Challenge feature\", () => {\n const { appObjects, mockError, mockWarn } = makeTestRig();\n\n expect(() => setupObjectPick(appObjects)).not.toThrow();\n\n // hasSingleton, not .get - the getter itself warns when it misses.\n expect(appObjects.hasSingleton(ChallengeEntity.type)).toBe(false);\n expect(mockError).not.toHaveBeenCalled();\n expect(mockWarn).not.toHaveBeenCalled();\n });\n});\n"]}
@@ -20,6 +20,7 @@ class ProcedureAdapter {
20
20
  authoringValidationMessage: "At least one event must be added to the procedure",
21
21
  score: null,
22
22
  isSubmitted: false,
23
+ stepCategories: {},
23
24
  };
24
25
  }
25
26
  subscribe(appObjects, setVM) {
@@ -1 +1 @@
1
- {"version":3,"file":"procedureAdapter.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureAdapter.ts"],"names":[],"mappings":";;;AACA,mDAAgD;AAGhD,MAAM,gBAAgB;IAAtB;QACE,cAAS,GAAgB;YACvB,QAAQ,EAAE,EAAE;YACZ,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,EAAE;YAChB,gBAAgB,EAAE,CAAC;YACnB,UAAU,EAAE,KAAK;YACjB,iBAAiB,EAAE,IAAI;YACvB,iBAAiB,EAAE,IAAI;YACvB,kBAAkB,EAAE,CAAC;YACrB,eAAe,EAAE,EAAE;YACnB,0BAA0B,EACxB,mDAAmD;YACrD,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,KAAK;SACnB,CAAC;IAmBJ,CAAC;IAjBC,SAAS,CAAC,UAAyB,EAAE,KAAgC;QACnE,MAAM,WAAW,GAAG,yBAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,WAAW,CAAC,MAAM;gBAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,WAAW,CACT,UAAyB,EACzB,KAAgC;QAEhC,MAAM,WAAW,GAAG,yBAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;CACF;AAEY,QAAA,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC","sourcesContent":["import { SingletonPmAdapter, AppObjectRepo } from \"@vived/core\";\r\nimport { ProcedurePM } from \"../PM/ProcedurePM\";\r\nimport { ProcedureVM } from \"../types\";\r\n\r\nclass ProcedureAdapter implements SingletonPmAdapter<ProcedureVM> {\r\n defaultVM: ProcedureVM = {\r\n eventIds: [],\r\n orderMatters: true,\r\n showHints: true,\r\n isQuiz: false,\r\n isRecording: false,\r\n userEventLog: [],\r\n currentStepIndex: 0,\r\n isComplete: false,\r\n validationMessage: null,\r\n nextExpectedEvent: null,\r\n progressPercentage: 0,\r\n availableEvents: [],\r\n authoringValidationMessage:\r\n \"At least one event must be added to the procedure\",\r\n score: null,\r\n isSubmitted: false,\r\n };\r\n\r\n subscribe(appObjects: AppObjectRepo, setVM: (vm: ProcedureVM) => void): void {\r\n const procedurePM = ProcedurePM.get(appObjects);\r\n if (procedurePM) {\r\n procedurePM.addView(setVM);\r\n if (procedurePM.lastVM) setVM(procedurePM.lastVM);\r\n }\r\n }\r\n\r\n unsubscribe(\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: ProcedureVM) => void,\r\n ): void {\r\n const procedurePM = ProcedurePM.get(appObjects);\r\n if (procedurePM) {\r\n procedurePM.removeView(setVM);\r\n }\r\n }\r\n}\r\n\r\nexport const procedureAdapter = new ProcedureAdapter();\r\n"]}
1
+ {"version":3,"file":"procedureAdapter.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureAdapter.ts"],"names":[],"mappings":";;;AACA,mDAAgD;AAGhD,MAAM,gBAAgB;IAAtB;QACE,cAAS,GAAgB;YACvB,QAAQ,EAAE,EAAE;YACZ,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,EAAE;YAChB,gBAAgB,EAAE,CAAC;YACnB,UAAU,EAAE,KAAK;YACjB,iBAAiB,EAAE,IAAI;YACvB,iBAAiB,EAAE,IAAI;YACvB,kBAAkB,EAAE,CAAC;YACrB,eAAe,EAAE,EAAE;YACnB,0BAA0B,EACxB,mDAAmD;YACrD,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,KAAK;YAClB,cAAc,EAAE,EAAE;SACnB,CAAC;IAmBJ,CAAC;IAjBC,SAAS,CAAC,UAAyB,EAAE,KAAgC;QACnE,MAAM,WAAW,GAAG,yBAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,WAAW,CAAC,MAAM;gBAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,WAAW,CACT,UAAyB,EACzB,KAAgC;QAEhC,MAAM,WAAW,GAAG,yBAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;CACF;AAEY,QAAA,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC","sourcesContent":["import { SingletonPmAdapter, AppObjectRepo } from \"@vived/core\";\r\nimport { ProcedurePM } from \"../PM/ProcedurePM\";\r\nimport { ProcedureVM } from \"../types\";\r\n\r\nclass ProcedureAdapter implements SingletonPmAdapter<ProcedureVM> {\r\n defaultVM: ProcedureVM = {\r\n eventIds: [],\r\n orderMatters: true,\r\n showHints: true,\r\n isQuiz: false,\r\n isRecording: false,\r\n userEventLog: [],\r\n currentStepIndex: 0,\r\n isComplete: false,\r\n validationMessage: null,\r\n nextExpectedEvent: null,\r\n progressPercentage: 0,\r\n availableEvents: [],\r\n authoringValidationMessage:\r\n \"At least one event must be added to the procedure\",\r\n score: null,\r\n isSubmitted: false,\r\n stepCategories: {},\r\n };\r\n\r\n subscribe(appObjects: AppObjectRepo, setVM: (vm: ProcedureVM) => void): void {\r\n const procedurePM = ProcedurePM.get(appObjects);\r\n if (procedurePM) {\r\n procedurePM.addView(setVM);\r\n if (procedurePM.lastVM) setVM(procedurePM.lastVM);\r\n }\r\n }\r\n\r\n unsubscribe(\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: ProcedureVM) => void,\r\n ): void {\r\n const procedurePM = ProcedurePM.get(appObjects);\r\n if (procedurePM) {\r\n procedurePM.removeView(setVM);\r\n }\r\n }\r\n}\r\n\r\nexport const procedureAdapter = new ProcedureAdapter();\r\n"]}
@@ -24,6 +24,7 @@ describe("procedureAdapter", () => {
24
24
  expect(defaultVM.availableEvents).toEqual([]);
25
25
  expect(defaultVM.score).toBeNull();
26
26
  expect(defaultVM.isSubmitted).toBe(false);
27
+ expect(defaultVM.stepCategories).toEqual({});
27
28
  });
28
29
  it("calls addView on the PM when subscribing", () => {
29
30
  const { mockPM, appObjects } = makeTestRig();
@@ -1 +1 @@
1
- {"version":3,"file":"procedureAdapter.test.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureAdapter.test.ts"],"names":[],"mappings":";;AAAA,sCAAgD;AAChD,yDAAsD;AACtD,8DAA+D;AAE/D,SAAS,WAAW;IACnB,MAAM,UAAU,GAAG,IAAA,wBAAiB,GAAE,CAAC;IACvC,MAAM,MAAM,GAAG,IAAA,qCAAmB,EAAC,UAAU,CAAC,CAAC;IAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAC/B,CAAC;AAED,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC3C,MAAM,SAAS,GAAG,mCAAgB,CAAC,SAAS,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC/C,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC/C,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACnD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAC7C,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAExB,mCAAgB,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAE9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACxD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAC7C,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAExB,mCAAgB,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\r\nimport { procedureAdapter } from \"./procedureAdapter\";\r\nimport { makeMockProcedurePM } from \"../Mocks/MockProcedurePM\";\r\n\r\nfunction makeTestRig() {\r\n\tconst appObjects = makeAppObjectRepo();\r\n\tconst mockPM = makeMockProcedurePM(appObjects);\r\n\treturn { appObjects, mockPM };\r\n}\r\n\r\ndescribe(\"procedureAdapter\", () => {\r\n\tit(\"has the correct default VM shape\", () => {\r\n\t\tconst defaultVM = procedureAdapter.defaultVM;\r\n\t\texpect(defaultVM.eventIds).toEqual([]);\r\n\t\texpect(defaultVM.orderMatters).toBe(true);\r\n\t\texpect(defaultVM.showHints).toBe(true);\r\n\t\texpect(defaultVM.isQuiz).toBe(false);\r\n\t\texpect(defaultVM.userEventLog).toEqual([]);\r\n\t\texpect(defaultVM.currentStepIndex).toBe(0);\r\n\t\texpect(defaultVM.isComplete).toBe(false);\r\n\t\texpect(defaultVM.validationMessage).toBeNull();\r\n\t\texpect(defaultVM.nextExpectedEvent).toBeNull();\r\n\t\texpect(defaultVM.progressPercentage).toBe(0);\r\n\t\texpect(defaultVM.availableEvents).toEqual([]);\r\n\t\texpect(defaultVM.score).toBeNull();\r\n\t\texpect(defaultVM.isSubmitted).toBe(false);\r\n\t});\r\n\r\n\tit(\"calls addView on the PM when subscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.addView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureAdapter.subscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.addView).toHaveBeenCalledWith(setVM);\r\n\t});\r\n\r\n\tit(\"calls removeView on the PM when unsubscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.removeView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureAdapter.unsubscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.removeView).toHaveBeenCalledWith(setVM);\r\n\t});\r\n});\r\n"]}
1
+ {"version":3,"file":"procedureAdapter.test.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureAdapter.test.ts"],"names":[],"mappings":";;AAAA,sCAAgD;AAChD,yDAAsD;AACtD,8DAA+D;AAE/D,SAAS,WAAW;IACnB,MAAM,UAAU,GAAG,IAAA,wBAAiB,GAAE,CAAC;IACvC,MAAM,MAAM,GAAG,IAAA,qCAAmB,EAAC,UAAU,CAAC,CAAC;IAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAC/B,CAAC;AAED,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC3C,MAAM,SAAS,GAAG,mCAAgB,CAAC,SAAS,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC/C,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC/C,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACnD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAC7C,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAExB,mCAAgB,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAE9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACxD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAC7C,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAExB,mCAAgB,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\r\nimport { procedureAdapter } from \"./procedureAdapter\";\r\nimport { makeMockProcedurePM } from \"../Mocks/MockProcedurePM\";\r\n\r\nfunction makeTestRig() {\r\n\tconst appObjects = makeAppObjectRepo();\r\n\tconst mockPM = makeMockProcedurePM(appObjects);\r\n\treturn { appObjects, mockPM };\r\n}\r\n\r\ndescribe(\"procedureAdapter\", () => {\r\n\tit(\"has the correct default VM shape\", () => {\r\n\t\tconst defaultVM = procedureAdapter.defaultVM;\r\n\t\texpect(defaultVM.eventIds).toEqual([]);\r\n\t\texpect(defaultVM.orderMatters).toBe(true);\r\n\t\texpect(defaultVM.showHints).toBe(true);\r\n\t\texpect(defaultVM.isQuiz).toBe(false);\r\n\t\texpect(defaultVM.userEventLog).toEqual([]);\r\n\t\texpect(defaultVM.currentStepIndex).toBe(0);\r\n\t\texpect(defaultVM.isComplete).toBe(false);\r\n\t\texpect(defaultVM.validationMessage).toBeNull();\r\n\t\texpect(defaultVM.nextExpectedEvent).toBeNull();\r\n\t\texpect(defaultVM.progressPercentage).toBe(0);\r\n\t\texpect(defaultVM.availableEvents).toEqual([]);\r\n\t\texpect(defaultVM.score).toBeNull();\r\n\t\texpect(defaultVM.isSubmitted).toBe(false);\r\n\t\texpect(defaultVM.stepCategories).toEqual({});\r\n\t});\r\n\r\n\tit(\"calls addView on the PM when subscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.addView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureAdapter.subscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.addView).toHaveBeenCalledWith(setVM);\r\n\t});\r\n\r\n\tit(\"calls removeView on the PM when unsubscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.removeView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureAdapter.unsubscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.removeView).toHaveBeenCalledWith(setVM);\r\n\t});\r\n});\r\n"]}
@@ -10,6 +10,7 @@ function mapToAuthoringVM(vm) {
10
10
  orderMatters: vm.orderMatters,
11
11
  showHints: vm.showHints,
12
12
  isQuiz: vm.isQuiz,
13
+ stepCategories: vm.stepCategories,
13
14
  };
14
15
  }
15
16
  class ProcedureAuthoringAdapter {
@@ -21,6 +22,7 @@ class ProcedureAuthoringAdapter {
21
22
  orderMatters: true,
22
23
  showHints: true,
23
24
  isQuiz: false,
25
+ stepCategories: {},
24
26
  };
25
27
  this.wrappers = new WeakMap();
26
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"procedureAuthoringAdapter.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureAuthoringAdapter.ts"],"names":[],"mappings":";;;AACA,mDAAgD;AAGhD,SAAS,gBAAgB,CAAC,EAAe;IACvC,OAAO;QACL,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,eAAe,EAAE,EAAE,CAAC,eAAe;QACnC,0BAA0B,EAAE,EAAE,CAAC,0BAA0B;QACzD,YAAY,EAAE,EAAE,CAAC,YAAY;QAC7B,SAAS,EAAE,EAAE,CAAC,SAAS;QACvB,MAAM,EAAE,EAAE,CAAC,MAAM;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,yBAAyB;IAA/B;QAGE,cAAS,GAAyB;YAChC,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,EAAE;YACnB,0BAA0B,EACxB,mDAAmD;YACrD,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,KAAK;SACd,CAAC;QAEM,aAAQ,GAAG,IAAI,OAAO,EAG3B,CAAC;IA0BN,CAAC;IAxBC,SAAS,CACP,UAAyB,EACzB,KAAyC;QAEzC,MAAM,EAAE,GAAG,yBAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,CAAC,EAAe,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,EAAE,CAAC,MAAM;YAAE,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,WAAW,CACT,UAAyB,EACzB,KAAyC;QAEzC,MAAM,EAAE,GAAG,yBAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACZ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAEY,QAAA,yBAAyB,GAAG,IAAI,yBAAyB,EAAE,CAAC","sourcesContent":["import { SingletonPmAdapter, AppObjectRepo } from \"@vived/core\";\r\nimport { ProcedurePM } from \"../PM/ProcedurePM\";\r\nimport { ProcedureAuthoringVM, ProcedureVM } from \"../types\";\r\n\r\nfunction mapToAuthoringVM(vm: ProcedureVM): ProcedureAuthoringVM {\r\n return {\r\n eventIds: vm.eventIds,\r\n availableEvents: vm.availableEvents,\r\n authoringValidationMessage: vm.authoringValidationMessage,\r\n orderMatters: vm.orderMatters,\r\n showHints: vm.showHints,\r\n isQuiz: vm.isQuiz,\r\n };\r\n}\r\n\r\nclass ProcedureAuthoringAdapter\r\n implements SingletonPmAdapter<ProcedureAuthoringVM>\r\n{\r\n defaultVM: ProcedureAuthoringVM = {\r\n eventIds: [],\r\n availableEvents: [],\r\n authoringValidationMessage:\r\n \"At least one event must be added to the procedure\",\r\n orderMatters: true,\r\n showHints: true,\r\n isQuiz: false,\r\n };\r\n\r\n private wrappers = new WeakMap<\r\n (vm: ProcedureAuthoringVM) => void,\r\n (vm: ProcedureVM) => void\r\n >();\r\n\r\n subscribe(\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: ProcedureAuthoringVM) => void,\r\n ): void {\r\n const pm = ProcedurePM.get(appObjects);\r\n if (!pm) return;\r\n const wrapper = (vm: ProcedureVM) => setVM(mapToAuthoringVM(vm));\r\n this.wrappers.set(setVM, wrapper);\r\n pm.addView(wrapper);\r\n if (pm.lastVM) setVM(mapToAuthoringVM(pm.lastVM));\r\n }\r\n\r\n unsubscribe(\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: ProcedureAuthoringVM) => void,\r\n ): void {\r\n const pm = ProcedurePM.get(appObjects);\r\n if (!pm) return;\r\n const wrapper = this.wrappers.get(setVM);\r\n if (wrapper) {\r\n pm.removeView(wrapper);\r\n this.wrappers.delete(setVM);\r\n }\r\n }\r\n}\r\n\r\nexport const procedureAuthoringAdapter = new ProcedureAuthoringAdapter();\r\n"]}
1
+ {"version":3,"file":"procedureAuthoringAdapter.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureAuthoringAdapter.ts"],"names":[],"mappings":";;;AACA,mDAAgD;AAGhD,SAAS,gBAAgB,CAAC,EAAe;IACvC,OAAO;QACL,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,eAAe,EAAE,EAAE,CAAC,eAAe;QACnC,0BAA0B,EAAE,EAAE,CAAC,0BAA0B;QACzD,YAAY,EAAE,EAAE,CAAC,YAAY;QAC7B,SAAS,EAAE,EAAE,CAAC,SAAS;QACvB,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,cAAc,EAAE,EAAE,CAAC,cAAc;KAClC,CAAC;AACJ,CAAC;AAED,MAAM,yBAAyB;IAA/B;QAGE,cAAS,GAAyB;YAChC,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,EAAE;YACnB,0BAA0B,EACxB,mDAAmD;YACrD,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,KAAK;YACb,cAAc,EAAE,EAAE;SACnB,CAAC;QAEM,aAAQ,GAAG,IAAI,OAAO,EAG3B,CAAC;IA0BN,CAAC;IAxBC,SAAS,CACP,UAAyB,EACzB,KAAyC;QAEzC,MAAM,EAAE,GAAG,yBAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,CAAC,EAAe,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,EAAE,CAAC,MAAM;YAAE,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,WAAW,CACT,UAAyB,EACzB,KAAyC;QAEzC,MAAM,EAAE,GAAG,yBAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACZ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAEY,QAAA,yBAAyB,GAAG,IAAI,yBAAyB,EAAE,CAAC","sourcesContent":["import { SingletonPmAdapter, AppObjectRepo } from \"@vived/core\";\r\nimport { ProcedurePM } from \"../PM/ProcedurePM\";\r\nimport { ProcedureAuthoringVM, ProcedureVM } from \"../types\";\r\n\r\nfunction mapToAuthoringVM(vm: ProcedureVM): ProcedureAuthoringVM {\r\n return {\r\n eventIds: vm.eventIds,\r\n availableEvents: vm.availableEvents,\r\n authoringValidationMessage: vm.authoringValidationMessage,\r\n orderMatters: vm.orderMatters,\r\n showHints: vm.showHints,\r\n isQuiz: vm.isQuiz,\r\n stepCategories: vm.stepCategories,\r\n };\r\n}\r\n\r\nclass ProcedureAuthoringAdapter\r\n implements SingletonPmAdapter<ProcedureAuthoringVM>\r\n{\r\n defaultVM: ProcedureAuthoringVM = {\r\n eventIds: [],\r\n availableEvents: [],\r\n authoringValidationMessage:\r\n \"At least one event must be added to the procedure\",\r\n orderMatters: true,\r\n showHints: true,\r\n isQuiz: false,\r\n stepCategories: {},\r\n };\r\n\r\n private wrappers = new WeakMap<\r\n (vm: ProcedureAuthoringVM) => void,\r\n (vm: ProcedureVM) => void\r\n >();\r\n\r\n subscribe(\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: ProcedureAuthoringVM) => void,\r\n ): void {\r\n const pm = ProcedurePM.get(appObjects);\r\n if (!pm) return;\r\n const wrapper = (vm: ProcedureVM) => setVM(mapToAuthoringVM(vm));\r\n this.wrappers.set(setVM, wrapper);\r\n pm.addView(wrapper);\r\n if (pm.lastVM) setVM(mapToAuthoringVM(pm.lastVM));\r\n }\r\n\r\n unsubscribe(\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: ProcedureAuthoringVM) => void,\r\n ): void {\r\n const pm = ProcedurePM.get(appObjects);\r\n if (!pm) return;\r\n const wrapper = this.wrappers.get(setVM);\r\n if (wrapper) {\r\n pm.removeView(wrapper);\r\n this.wrappers.delete(setVM);\r\n }\r\n }\r\n}\r\n\r\nexport const procedureAuthoringAdapter = new ProcedureAuthoringAdapter();\r\n"]}
@@ -17,6 +17,7 @@ describe("procedureAuthoringAdapter", () => {
17
17
  expect(defaultVM.orderMatters).toBe(true);
18
18
  expect(defaultVM.showHints).toBe(true);
19
19
  expect(defaultVM.isQuiz).toBe(false);
20
+ expect(defaultVM.stepCategories).toEqual({});
20
21
  });
21
22
  it("calls addView on the PM when subscribing", () => {
22
23
  const { mockPM, appObjects } = makeTestRig();
@@ -54,6 +55,7 @@ describe("procedureAuthoringAdapter", () => {
54
55
  progressPercentage: 50,
55
56
  score: null,
56
57
  isSubmitted: false,
58
+ stepCategories: { event_a: "instructional" },
57
59
  });
58
60
  expect(setVM).toHaveBeenCalledWith({
59
61
  eventIds: ["event_a"],
@@ -62,6 +64,7 @@ describe("procedureAuthoringAdapter", () => {
62
64
  orderMatters: false,
63
65
  showHints: false,
64
66
  isQuiz: true,
67
+ stepCategories: { event_a: "instructional" },
65
68
  });
66
69
  });
67
70
  });
@@ -1 +1 @@
1
- {"version":3,"file":"procedureAuthoringAdapter.test.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureAuthoringAdapter.test.ts"],"names":[],"mappings":";;AAAA,sCAAgD;AAChD,2EAAwE;AACxE,8DAA+D;AAE/D,SAAS,WAAW;IACnB,MAAM,UAAU,GAAG,IAAA,wBAAiB,GAAE,CAAC;IACvC,MAAM,MAAM,GAAG,IAAA,qCAAmB,EAAC,UAAU,CAAC,CAAC;IAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAC/B,CAAC;AAED,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC3C,MAAM,SAAS,GAAG,qDAAyB,CAAC,SAAS,CAAC;QACtD,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,SAAS,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnE,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACnD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAC7C,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAExB,qDAAyB,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAEvD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACxD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAC7C,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAExB,qDAAyB,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACvD,qDAAyB,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAEzD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACtD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAC7C,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAExB,qDAAyB,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAEvD,MAAM,eAAe,GAAI,MAAM,CAAC,OAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,eAAe,CAAC;YACf,QAAQ,EAAE,CAAC,SAAS,CAAC;YACrB,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YACrD,0BAA0B,EAAE,IAAI;YAChC,YAAY,EAAE,KAAK;YACnB,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,IAAI;YACZ,YAAY,EAAE,EAAE;YAChB,gBAAgB,EAAE,CAAC;YACnB,UAAU,EAAE,KAAK;YACjB,iBAAiB,EAAE,IAAI;YACvB,iBAAiB,EAAE,IAAI;YACvB,kBAAkB,EAAE,EAAE;YACtB,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,KAAK;SAClB,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC;YAClC,QAAQ,EAAE,CAAC,SAAS,CAAC;YACrB,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YACrD,0BAA0B,EAAE,IAAI;YAChC,YAAY,EAAE,KAAK;YACnB,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,IAAI;SACZ,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\r\nimport { procedureAuthoringAdapter } from \"./procedureAuthoringAdapter\";\r\nimport { makeMockProcedurePM } from \"../Mocks/MockProcedurePM\";\r\n\r\nfunction makeTestRig() {\r\n\tconst appObjects = makeAppObjectRepo();\r\n\tconst mockPM = makeMockProcedurePM(appObjects);\r\n\treturn { appObjects, mockPM };\r\n}\r\n\r\ndescribe(\"procedureAuthoringAdapter\", () => {\r\n\tit(\"has the correct default VM shape\", () => {\r\n\t\tconst defaultVM = procedureAuthoringAdapter.defaultVM;\r\n\t\texpect(defaultVM.eventIds).toEqual([]);\r\n\t\texpect(defaultVM.availableEvents).toEqual([]);\r\n\t\texpect(typeof defaultVM.authoringValidationMessage).toBe(\"string\");\r\n\t\texpect(defaultVM.orderMatters).toBe(true);\r\n\t\texpect(defaultVM.showHints).toBe(true);\r\n\t\texpect(defaultVM.isQuiz).toBe(false);\r\n\t});\r\n\r\n\tit(\"calls addView on the PM when subscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.addView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureAuthoringAdapter.subscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.addView).toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"calls removeView on the PM when unsubscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.removeView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureAuthoringAdapter.subscribe(appObjects, setVM);\r\n\t\tprocedureAuthoringAdapter.unsubscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.removeView).toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"maps only authoring fields from the full VM\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.addView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureAuthoringAdapter.subscribe(appObjects, setVM);\r\n\r\n\t\tconst capturedWrapper = (mockPM.addView as jest.Mock).mock.calls[0][0];\r\n\t\tcapturedWrapper({\r\n\t\t\teventIds: [\"event_a\"],\r\n\t\t\tavailableEvents: [{ id: \"event_a\", name: \"Event A\" }],\r\n\t\t\tauthoringValidationMessage: null,\r\n\t\t\torderMatters: false,\r\n\t\t\tshowHints: false,\r\n\t\t\tisQuiz: true,\r\n\t\t\tuserEventLog: [],\r\n\t\t\tcurrentStepIndex: 0,\r\n\t\t\tisComplete: false,\r\n\t\t\tvalidationMessage: null,\r\n\t\t\tnextExpectedEvent: null,\r\n\t\t\tprogressPercentage: 50,\r\n\t\t\tscore: null,\r\n\t\t\tisSubmitted: false,\r\n\t\t});\r\n\r\n\t\texpect(setVM).toHaveBeenCalledWith({\r\n\t\t\teventIds: [\"event_a\"],\r\n\t\t\tavailableEvents: [{ id: \"event_a\", name: \"Event A\" }],\r\n\t\t\tauthoringValidationMessage: null,\r\n\t\t\torderMatters: false,\r\n\t\t\tshowHints: false,\r\n\t\t\tisQuiz: true,\r\n\t\t});\r\n\t});\r\n});\r\n"]}
1
+ {"version":3,"file":"procedureAuthoringAdapter.test.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureAuthoringAdapter.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\r\nimport { procedureAuthoringAdapter } from \"./procedureAuthoringAdapter\";\r\nimport { makeMockProcedurePM } from \"../Mocks/MockProcedurePM\";\r\n\r\nfunction makeTestRig() {\r\n\tconst appObjects = makeAppObjectRepo();\r\n\tconst mockPM = makeMockProcedurePM(appObjects);\r\n\treturn { appObjects, mockPM };\r\n}\r\n\r\ndescribe(\"procedureAuthoringAdapter\", () => {\r\n\tit(\"has the correct default VM shape\", () => {\r\n\t\tconst defaultVM = procedureAuthoringAdapter.defaultVM;\r\n\t\texpect(defaultVM.eventIds).toEqual([]);\r\n\t\texpect(defaultVM.availableEvents).toEqual([]);\r\n\t\texpect(typeof defaultVM.authoringValidationMessage).toBe(\"string\");\r\n\t\texpect(defaultVM.orderMatters).toBe(true);\r\n\t\texpect(defaultVM.showHints).toBe(true);\r\n\t\texpect(defaultVM.isQuiz).toBe(false);\r\n\t\texpect(defaultVM.stepCategories).toEqual({});\r\n\t});\r\n\r\n\tit(\"calls addView on the PM when subscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.addView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureAuthoringAdapter.subscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.addView).toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"calls removeView on the PM when unsubscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.removeView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureAuthoringAdapter.subscribe(appObjects, setVM);\r\n\t\tprocedureAuthoringAdapter.unsubscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.removeView).toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"maps only authoring fields from the full VM\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.addView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureAuthoringAdapter.subscribe(appObjects, setVM);\r\n\r\n\t\tconst capturedWrapper = (mockPM.addView as jest.Mock).mock.calls[0][0];\r\n\t\tcapturedWrapper({\r\n\t\t\teventIds: [\"event_a\"],\r\n\t\t\tavailableEvents: [{ id: \"event_a\", name: \"Event A\" }],\r\n\t\t\tauthoringValidationMessage: null,\r\n\t\t\torderMatters: false,\r\n\t\t\tshowHints: false,\r\n\t\t\tisQuiz: true,\r\n\t\t\tuserEventLog: [],\r\n\t\t\tcurrentStepIndex: 0,\r\n\t\t\tisComplete: false,\r\n\t\t\tvalidationMessage: null,\r\n\t\t\tnextExpectedEvent: null,\r\n\t\t\tprogressPercentage: 50,\r\n\t\t\tscore: null,\r\n\t\t\tisSubmitted: false,\r\n\t\t\tstepCategories: { event_a: \"instructional\" },\r\n\t\t});\r\n\r\n\t\texpect(setVM).toHaveBeenCalledWith({\r\n\t\t\teventIds: [\"event_a\"],\r\n\t\t\tavailableEvents: [{ id: \"event_a\", name: \"Event A\" }],\r\n\t\t\tauthoringValidationMessage: null,\r\n\t\t\torderMatters: false,\r\n\t\t\tshowHints: false,\r\n\t\t\tisQuiz: true,\r\n\t\t\tstepCategories: { event_a: \"instructional\" },\r\n\t\t});\r\n\t});\r\n});\r\n"]}
@@ -50,6 +50,7 @@ describe("procedureHintAdapter", () => {
50
50
  authoringValidationMessage: null,
51
51
  score: null,
52
52
  isSubmitted: false,
53
+ stepCategories: { event_a: "assessed" },
53
54
  });
54
55
  expect(setVM).toHaveBeenCalledWith({
55
56
  showHints: false,
@@ -1 +1 @@
1
- {"version":3,"file":"procedureHintAdapter.test.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureHintAdapter.test.ts"],"names":[],"mappings":";;AAAA,sCAAgD;AAChD,iEAA8D;AAC9D,8DAA+D;AAE/D,SAAS,WAAW;IACnB,MAAM,UAAU,GAAG,IAAA,wBAAiB,GAAE,CAAC;IACvC,MAAM,MAAM,GAAG,IAAA,qCAAmB,EAAC,UAAU,CAAC,CAAC;IAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAC/B,CAAC;AAED,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC3C,MAAM,SAAS,GAAG,2CAAoB,CAAC,SAAS,CAAC;QACjD,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACnD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAC7C,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAExB,2CAAoB,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAElD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACxD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAC7C,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAExB,2CAAoB,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAClD,2CAAoB,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAEpD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QACjD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAC7C,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAExB,2CAAoB,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAElD,MAAM,eAAe,GAAI,MAAM,CAAC,OAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,eAAe,CAAC;YACf,SAAS,EAAE,KAAK;YAChB,iBAAiB,EAAE,SAAS;YAC5B,QAAQ,EAAE,CAAC,SAAS,CAAC;YACrB,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,KAAK;YACb,YAAY,EAAE,EAAE;YAChB,gBAAgB,EAAE,CAAC;YACnB,UAAU,EAAE,KAAK;YACjB,iBAAiB,EAAE,IAAI;YACvB,kBAAkB,EAAE,CAAC;YACrB,eAAe,EAAE,EAAE;YACnB,0BAA0B,EAAE,IAAI;YAChC,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,KAAK;SAClB,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC;YAClC,SAAS,EAAE,KAAK;YAChB,iBAAiB,EAAE,SAAS;SAC5B,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\r\nimport { procedureHintAdapter } from \"./procedureHintAdapter\";\r\nimport { makeMockProcedurePM } from \"../Mocks/MockProcedurePM\";\r\n\r\nfunction makeTestRig() {\r\n\tconst appObjects = makeAppObjectRepo();\r\n\tconst mockPM = makeMockProcedurePM(appObjects);\r\n\treturn { appObjects, mockPM };\r\n}\r\n\r\ndescribe(\"procedureHintAdapter\", () => {\r\n\tit(\"has the correct default VM shape\", () => {\r\n\t\tconst defaultVM = procedureHintAdapter.defaultVM;\r\n\t\texpect(defaultVM.showHints).toBe(true);\r\n\t\texpect(defaultVM.nextExpectedEvent).toBeNull();\r\n\t});\r\n\r\n\tit(\"calls addView on the PM when subscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.addView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureHintAdapter.subscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.addView).toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"calls removeView on the PM when unsubscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.removeView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureHintAdapter.subscribe(appObjects, setVM);\r\n\t\tprocedureHintAdapter.unsubscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.removeView).toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"maps only hint fields from the full VM\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.addView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureHintAdapter.subscribe(appObjects, setVM);\r\n\r\n\t\tconst capturedWrapper = (mockPM.addView as jest.Mock).mock.calls[0][0];\r\n\t\tcapturedWrapper({\r\n\t\t\tshowHints: false,\r\n\t\t\tnextExpectedEvent: \"event_a\",\r\n\t\t\teventIds: [\"event_a\"],\r\n\t\t\torderMatters: true,\r\n\t\t\tisQuiz: false,\r\n\t\t\tuserEventLog: [],\r\n\t\t\tcurrentStepIndex: 0,\r\n\t\t\tisComplete: false,\r\n\t\t\tvalidationMessage: null,\r\n\t\t\tprogressPercentage: 0,\r\n\t\t\tavailableEvents: [],\r\n\t\t\tauthoringValidationMessage: null,\r\n\t\t\tscore: null,\r\n\t\t\tisSubmitted: false,\r\n\t\t});\r\n\r\n\t\texpect(setVM).toHaveBeenCalledWith({\r\n\t\t\tshowHints: false,\r\n\t\t\tnextExpectedEvent: \"event_a\",\r\n\t\t});\r\n\t});\r\n});\r\n"]}
1
+ {"version":3,"file":"procedureHintAdapter.test.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureHintAdapter.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\r\nimport { procedureHintAdapter } from \"./procedureHintAdapter\";\r\nimport { makeMockProcedurePM } from \"../Mocks/MockProcedurePM\";\r\n\r\nfunction makeTestRig() {\r\n\tconst appObjects = makeAppObjectRepo();\r\n\tconst mockPM = makeMockProcedurePM(appObjects);\r\n\treturn { appObjects, mockPM };\r\n}\r\n\r\ndescribe(\"procedureHintAdapter\", () => {\r\n\tit(\"has the correct default VM shape\", () => {\r\n\t\tconst defaultVM = procedureHintAdapter.defaultVM;\r\n\t\texpect(defaultVM.showHints).toBe(true);\r\n\t\texpect(defaultVM.nextExpectedEvent).toBeNull();\r\n\t});\r\n\r\n\tit(\"calls addView on the PM when subscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.addView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureHintAdapter.subscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.addView).toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"calls removeView on the PM when unsubscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.removeView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureHintAdapter.subscribe(appObjects, setVM);\r\n\t\tprocedureHintAdapter.unsubscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.removeView).toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"maps only hint fields from the full VM\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.addView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureHintAdapter.subscribe(appObjects, setVM);\r\n\r\n\t\tconst capturedWrapper = (mockPM.addView as jest.Mock).mock.calls[0][0];\r\n\t\tcapturedWrapper({\r\n\t\t\tshowHints: false,\r\n\t\t\tnextExpectedEvent: \"event_a\",\r\n\t\t\teventIds: [\"event_a\"],\r\n\t\t\torderMatters: true,\r\n\t\t\tisQuiz: false,\r\n\t\t\tuserEventLog: [],\r\n\t\t\tcurrentStepIndex: 0,\r\n\t\t\tisComplete: false,\r\n\t\t\tvalidationMessage: null,\r\n\t\t\tprogressPercentage: 0,\r\n\t\t\tavailableEvents: [],\r\n\t\t\tauthoringValidationMessage: null,\r\n\t\t\tscore: null,\r\n\t\t\tisSubmitted: false,\r\n\t\t\tstepCategories: { event_a: \"assessed\" },\r\n\t\t});\r\n\r\n\t\texpect(setVM).toHaveBeenCalledWith({\r\n\t\t\tshowHints: false,\r\n\t\t\tnextExpectedEvent: \"event_a\",\r\n\t\t});\r\n\t});\r\n});\r\n"]}
@@ -13,6 +13,7 @@ function mapToProgressVM(vm) {
13
13
  progressPercentage: vm.progressPercentage,
14
14
  isQuiz: vm.isQuiz,
15
15
  isSubmitted: vm.isSubmitted,
16
+ stepCategories: vm.stepCategories,
16
17
  };
17
18
  }
18
19
  class ProcedureProgressAdapter {
@@ -27,6 +28,7 @@ class ProcedureProgressAdapter {
27
28
  progressPercentage: 0,
28
29
  isQuiz: false,
29
30
  isSubmitted: false,
31
+ stepCategories: {},
30
32
  };
31
33
  this.wrappers = new WeakMap();
32
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"procedureProgressAdapter.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureProgressAdapter.ts"],"names":[],"mappings":";;;AACA,mDAAgD;AAGhD,SAAS,eAAe,CAAC,EAAe;IACtC,OAAO;QACL,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,eAAe,EAAE,EAAE,CAAC,eAAe;QACnC,YAAY,EAAE,EAAE,CAAC,YAAY;QAC7B,gBAAgB,EAAE,EAAE,CAAC,gBAAgB;QACrC,UAAU,EAAE,EAAE,CAAC,UAAU;QACzB,YAAY,EAAE,EAAE,CAAC,YAAY;QAC7B,kBAAkB,EAAE,EAAE,CAAC,kBAAkB;QACzC,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,WAAW,EAAE,EAAE,CAAC,WAAW;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,wBAAwB;IAA9B;QAGE,cAAS,GAAwB;YAC/B,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,EAAE;YACnB,YAAY,EAAE,EAAE;YAChB,gBAAgB,EAAE,CAAC;YACnB,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,IAAI;YAClB,kBAAkB,EAAE,CAAC;YACrB,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,KAAK;SACnB,CAAC;QAEM,aAAQ,GAAG,IAAI,OAAO,EAG3B,CAAC;IA0BN,CAAC;IAxBC,SAAS,CACP,UAAyB,EACzB,KAAwC;QAExC,MAAM,EAAE,GAAG,yBAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,CAAC,EAAe,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,EAAE,CAAC,MAAM;YAAE,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,WAAW,CACT,UAAyB,EACzB,KAAwC;QAExC,MAAM,EAAE,GAAG,yBAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACZ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAEY,QAAA,wBAAwB,GAAG,IAAI,wBAAwB,EAAE,CAAC","sourcesContent":["import { SingletonPmAdapter, AppObjectRepo } from \"@vived/core\";\r\nimport { ProcedurePM } from \"../PM/ProcedurePM\";\r\nimport { ProcedureProgressVM, ProcedureVM } from \"../types\";\r\n\r\nfunction mapToProgressVM(vm: ProcedureVM): ProcedureProgressVM {\r\n return {\r\n eventIds: vm.eventIds,\r\n availableEvents: vm.availableEvents,\r\n userEventLog: vm.userEventLog,\r\n currentStepIndex: vm.currentStepIndex,\r\n isComplete: vm.isComplete,\r\n orderMatters: vm.orderMatters,\r\n progressPercentage: vm.progressPercentage,\r\n isQuiz: vm.isQuiz,\r\n isSubmitted: vm.isSubmitted,\r\n };\r\n}\r\n\r\nclass ProcedureProgressAdapter\r\n implements SingletonPmAdapter<ProcedureProgressVM>\r\n{\r\n defaultVM: ProcedureProgressVM = {\r\n eventIds: [],\r\n availableEvents: [],\r\n userEventLog: [],\r\n currentStepIndex: 0,\r\n isComplete: false,\r\n orderMatters: true,\r\n progressPercentage: 0,\r\n isQuiz: false,\r\n isSubmitted: false,\r\n };\r\n\r\n private wrappers = new WeakMap<\r\n (vm: ProcedureProgressVM) => void,\r\n (vm: ProcedureVM) => void\r\n >();\r\n\r\n subscribe(\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: ProcedureProgressVM) => void,\r\n ): void {\r\n const pm = ProcedurePM.get(appObjects);\r\n if (!pm) return;\r\n const wrapper = (vm: ProcedureVM) => setVM(mapToProgressVM(vm));\r\n this.wrappers.set(setVM, wrapper);\r\n pm.addView(wrapper);\r\n if (pm.lastVM) setVM(mapToProgressVM(pm.lastVM));\r\n }\r\n\r\n unsubscribe(\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: ProcedureProgressVM) => void,\r\n ): void {\r\n const pm = ProcedurePM.get(appObjects);\r\n if (!pm) return;\r\n const wrapper = this.wrappers.get(setVM);\r\n if (wrapper) {\r\n pm.removeView(wrapper);\r\n this.wrappers.delete(setVM);\r\n }\r\n }\r\n}\r\n\r\nexport const procedureProgressAdapter = new ProcedureProgressAdapter();\r\n"]}
1
+ {"version":3,"file":"procedureProgressAdapter.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureProgressAdapter.ts"],"names":[],"mappings":";;;AACA,mDAAgD;AAGhD,SAAS,eAAe,CAAC,EAAe;IACtC,OAAO;QACL,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,eAAe,EAAE,EAAE,CAAC,eAAe;QACnC,YAAY,EAAE,EAAE,CAAC,YAAY;QAC7B,gBAAgB,EAAE,EAAE,CAAC,gBAAgB;QACrC,UAAU,EAAE,EAAE,CAAC,UAAU;QACzB,YAAY,EAAE,EAAE,CAAC,YAAY;QAC7B,kBAAkB,EAAE,EAAE,CAAC,kBAAkB;QACzC,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,WAAW,EAAE,EAAE,CAAC,WAAW;QAC3B,cAAc,EAAE,EAAE,CAAC,cAAc;KAClC,CAAC;AACJ,CAAC;AAED,MAAM,wBAAwB;IAA9B;QAGE,cAAS,GAAwB;YAC/B,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,EAAE;YACnB,YAAY,EAAE,EAAE;YAChB,gBAAgB,EAAE,CAAC;YACnB,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,IAAI;YAClB,kBAAkB,EAAE,CAAC;YACrB,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,KAAK;YAClB,cAAc,EAAE,EAAE;SACnB,CAAC;QAEM,aAAQ,GAAG,IAAI,OAAO,EAG3B,CAAC;IA0BN,CAAC;IAxBC,SAAS,CACP,UAAyB,EACzB,KAAwC;QAExC,MAAM,EAAE,GAAG,yBAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,CAAC,EAAe,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,EAAE,CAAC,MAAM;YAAE,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,WAAW,CACT,UAAyB,EACzB,KAAwC;QAExC,MAAM,EAAE,GAAG,yBAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACZ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAEY,QAAA,wBAAwB,GAAG,IAAI,wBAAwB,EAAE,CAAC","sourcesContent":["import { SingletonPmAdapter, AppObjectRepo } from \"@vived/core\";\r\nimport { ProcedurePM } from \"../PM/ProcedurePM\";\r\nimport { ProcedureProgressVM, ProcedureVM } from \"../types\";\r\n\r\nfunction mapToProgressVM(vm: ProcedureVM): ProcedureProgressVM {\r\n return {\r\n eventIds: vm.eventIds,\r\n availableEvents: vm.availableEvents,\r\n userEventLog: vm.userEventLog,\r\n currentStepIndex: vm.currentStepIndex,\r\n isComplete: vm.isComplete,\r\n orderMatters: vm.orderMatters,\r\n progressPercentage: vm.progressPercentage,\r\n isQuiz: vm.isQuiz,\r\n isSubmitted: vm.isSubmitted,\r\n stepCategories: vm.stepCategories,\r\n };\r\n}\r\n\r\nclass ProcedureProgressAdapter\r\n implements SingletonPmAdapter<ProcedureProgressVM>\r\n{\r\n defaultVM: ProcedureProgressVM = {\r\n eventIds: [],\r\n availableEvents: [],\r\n userEventLog: [],\r\n currentStepIndex: 0,\r\n isComplete: false,\r\n orderMatters: true,\r\n progressPercentage: 0,\r\n isQuiz: false,\r\n isSubmitted: false,\r\n stepCategories: {},\r\n };\r\n\r\n private wrappers = new WeakMap<\r\n (vm: ProcedureProgressVM) => void,\r\n (vm: ProcedureVM) => void\r\n >();\r\n\r\n subscribe(\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: ProcedureProgressVM) => void,\r\n ): void {\r\n const pm = ProcedurePM.get(appObjects);\r\n if (!pm) return;\r\n const wrapper = (vm: ProcedureVM) => setVM(mapToProgressVM(vm));\r\n this.wrappers.set(setVM, wrapper);\r\n pm.addView(wrapper);\r\n if (pm.lastVM) setVM(mapToProgressVM(pm.lastVM));\r\n }\r\n\r\n unsubscribe(\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: ProcedureProgressVM) => void,\r\n ): void {\r\n const pm = ProcedurePM.get(appObjects);\r\n if (!pm) return;\r\n const wrapper = this.wrappers.get(setVM);\r\n if (wrapper) {\r\n pm.removeView(wrapper);\r\n this.wrappers.delete(setVM);\r\n }\r\n }\r\n}\r\n\r\nexport const procedureProgressAdapter = new ProcedureProgressAdapter();\r\n"]}
@@ -20,6 +20,7 @@ describe("procedureProgressAdapter", () => {
20
20
  expect(defaultVM.progressPercentage).toBe(0);
21
21
  expect(defaultVM.isQuiz).toBe(false);
22
22
  expect(defaultVM.isSubmitted).toBe(false);
23
+ expect(defaultVM.stepCategories).toEqual({});
23
24
  });
24
25
  it("calls addView on the PM when subscribing", () => {
25
26
  const { mockPM, appObjects } = makeTestRig();
@@ -57,6 +58,7 @@ describe("procedureProgressAdapter", () => {
57
58
  authoringValidationMessage: null,
58
59
  score: null,
59
60
  showHints: false,
61
+ stepCategories: { event_a: "assessed" },
60
62
  });
61
63
  expect(setVM).toHaveBeenCalledWith({
62
64
  eventIds: ["event_a"],
@@ -68,6 +70,7 @@ describe("procedureProgressAdapter", () => {
68
70
  progressPercentage: 100,
69
71
  isQuiz: true,
70
72
  isSubmitted: true,
73
+ stepCategories: { event_a: "assessed" },
71
74
  });
72
75
  });
73
76
  });
@@ -1 +1 @@
1
- {"version":3,"file":"procedureProgressAdapter.test.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureProgressAdapter.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\r\nimport { procedureProgressAdapter } from \"./procedureProgressAdapter\";\r\nimport { makeMockProcedurePM } from \"../Mocks/MockProcedurePM\";\r\n\r\nfunction makeTestRig() {\r\n\tconst appObjects = makeAppObjectRepo();\r\n\tconst mockPM = makeMockProcedurePM(appObjects);\r\n\treturn { appObjects, mockPM };\r\n}\r\n\r\ndescribe(\"procedureProgressAdapter\", () => {\r\n\tit(\"has the correct default VM shape\", () => {\r\n\t\tconst defaultVM = procedureProgressAdapter.defaultVM;\r\n\t\texpect(defaultVM.eventIds).toEqual([]);\r\n\t\texpect(defaultVM.availableEvents).toEqual([]);\r\n\t\texpect(defaultVM.userEventLog).toEqual([]);\r\n\t\texpect(defaultVM.currentStepIndex).toBe(0);\r\n\t\texpect(defaultVM.isComplete).toBe(false);\r\n\t\texpect(defaultVM.orderMatters).toBe(true);\r\n\t\texpect(defaultVM.progressPercentage).toBe(0);\r\n\t\texpect(defaultVM.isQuiz).toBe(false);\r\n\t\texpect(defaultVM.isSubmitted).toBe(false);\r\n\t});\r\n\r\n\tit(\"calls addView on the PM when subscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.addView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureProgressAdapter.subscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.addView).toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"calls removeView on the PM when unsubscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.removeView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureProgressAdapter.subscribe(appObjects, setVM);\r\n\t\tprocedureProgressAdapter.unsubscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.removeView).toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"maps only progress fields from the full VM\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.addView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureProgressAdapter.subscribe(appObjects, setVM);\r\n\r\n\t\tconst capturedWrapper = (mockPM.addView as jest.Mock).mock.calls[0][0];\r\n\t\tcapturedWrapper({\r\n\t\t\teventIds: [\"event_a\"],\r\n\t\t\tavailableEvents: [{ id: \"event_a\", name: \"Event A\" }],\r\n\t\t\tuserEventLog: [\"event_a\"],\r\n\t\t\tcurrentStepIndex: 1,\r\n\t\t\tisComplete: true,\r\n\t\t\torderMatters: false,\r\n\t\t\tprogressPercentage: 100,\r\n\t\t\tisQuiz: true,\r\n\t\t\tisSubmitted: true,\r\n\t\t\tvalidationMessage: null,\r\n\t\t\tnextExpectedEvent: null,\r\n\t\t\tauthoringValidationMessage: null,\r\n\t\t\tscore: null,\r\n\t\t\tshowHints: false,\r\n\t\t});\r\n\r\n\t\texpect(setVM).toHaveBeenCalledWith({\r\n\t\t\teventIds: [\"event_a\"],\r\n\t\t\tavailableEvents: [{ id: \"event_a\", name: \"Event A\" }],\r\n\t\t\tuserEventLog: [\"event_a\"],\r\n\t\t\tcurrentStepIndex: 1,\r\n\t\t\tisComplete: true,\r\n\t\t\torderMatters: false,\r\n\t\t\tprogressPercentage: 100,\r\n\t\t\tisQuiz: true,\r\n\t\t\tisSubmitted: true,\r\n\t\t});\r\n\t});\r\n});\r\n"]}
1
+ {"version":3,"file":"procedureProgressAdapter.test.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureProgressAdapter.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\r\nimport { procedureProgressAdapter } from \"./procedureProgressAdapter\";\r\nimport { makeMockProcedurePM } from \"../Mocks/MockProcedurePM\";\r\n\r\nfunction makeTestRig() {\r\n\tconst appObjects = makeAppObjectRepo();\r\n\tconst mockPM = makeMockProcedurePM(appObjects);\r\n\treturn { appObjects, mockPM };\r\n}\r\n\r\ndescribe(\"procedureProgressAdapter\", () => {\r\n\tit(\"has the correct default VM shape\", () => {\r\n\t\tconst defaultVM = procedureProgressAdapter.defaultVM;\r\n\t\texpect(defaultVM.eventIds).toEqual([]);\r\n\t\texpect(defaultVM.availableEvents).toEqual([]);\r\n\t\texpect(defaultVM.userEventLog).toEqual([]);\r\n\t\texpect(defaultVM.currentStepIndex).toBe(0);\r\n\t\texpect(defaultVM.isComplete).toBe(false);\r\n\t\texpect(defaultVM.orderMatters).toBe(true);\r\n\t\texpect(defaultVM.progressPercentage).toBe(0);\r\n\t\texpect(defaultVM.isQuiz).toBe(false);\r\n\t\texpect(defaultVM.isSubmitted).toBe(false);\r\n\t\texpect(defaultVM.stepCategories).toEqual({});\r\n\t});\r\n\r\n\tit(\"calls addView on the PM when subscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.addView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureProgressAdapter.subscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.addView).toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"calls removeView on the PM when unsubscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.removeView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureProgressAdapter.subscribe(appObjects, setVM);\r\n\t\tprocedureProgressAdapter.unsubscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.removeView).toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"maps only progress fields from the full VM\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.addView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureProgressAdapter.subscribe(appObjects, setVM);\r\n\r\n\t\tconst capturedWrapper = (mockPM.addView as jest.Mock).mock.calls[0][0];\r\n\t\tcapturedWrapper({\r\n\t\t\teventIds: [\"event_a\"],\r\n\t\t\tavailableEvents: [{ id: \"event_a\", name: \"Event A\" }],\r\n\t\t\tuserEventLog: [\"event_a\"],\r\n\t\t\tcurrentStepIndex: 1,\r\n\t\t\tisComplete: true,\r\n\t\t\torderMatters: false,\r\n\t\t\tprogressPercentage: 100,\r\n\t\t\tisQuiz: true,\r\n\t\t\tisSubmitted: true,\r\n\t\t\tvalidationMessage: null,\r\n\t\t\tnextExpectedEvent: null,\r\n\t\t\tauthoringValidationMessage: null,\r\n\t\t\tscore: null,\r\n\t\t\tshowHints: false,\r\n\t\t\tstepCategories: { event_a: \"assessed\" },\r\n\t\t});\r\n\r\n\t\texpect(setVM).toHaveBeenCalledWith({\r\n\t\t\teventIds: [\"event_a\"],\r\n\t\t\tavailableEvents: [{ id: \"event_a\", name: \"Event A\" }],\r\n\t\t\tuserEventLog: [\"event_a\"],\r\n\t\t\tcurrentStepIndex: 1,\r\n\t\t\tisComplete: true,\r\n\t\t\torderMatters: false,\r\n\t\t\tprogressPercentage: 100,\r\n\t\t\tisQuiz: true,\r\n\t\t\tisSubmitted: true,\r\n\t\t\tstepCategories: { event_a: \"assessed\" },\r\n\t\t});\r\n\t});\r\n});\r\n"]}
@@ -13,6 +13,7 @@ function mapToQuizResultVM(vm) {
13
13
  userEventLog: vm.userEventLog,
14
14
  score: vm.score,
15
15
  isSubmitted: vm.isSubmitted,
16
+ stepCategories: vm.stepCategories,
16
17
  };
17
18
  }
18
19
  class ProcedureQuizResultAdapter {
@@ -27,6 +28,7 @@ class ProcedureQuizResultAdapter {
27
28
  userEventLog: [],
28
29
  score: null,
29
30
  isSubmitted: false,
31
+ stepCategories: {},
30
32
  };
31
33
  this.wrappers = new WeakMap();
32
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"procedureQuizResultAdapter.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureQuizResultAdapter.ts"],"names":[],"mappings":";;;AACA,mDAAgD;AAGhD,SAAS,iBAAiB,CAAC,EAAe;IACxC,OAAO;QACL,UAAU,EAAE,EAAE,CAAC,UAAU;QACzB,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,kBAAkB,EAAE,EAAE,CAAC,kBAAkB;QACzC,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,eAAe,EAAE,EAAE,CAAC,eAAe;QACnC,YAAY,EAAE,EAAE,CAAC,YAAY;QAC7B,YAAY,EAAE,EAAE,CAAC,YAAY;QAC7B,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,WAAW,EAAE,EAAE,CAAC,WAAW;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,0BAA0B;IAAhC;QAGE,cAAS,GAA0B;YACjC,UAAU,EAAE,KAAK;YACjB,MAAM,EAAE,KAAK;YACb,kBAAkB,EAAE,CAAC;YACrB,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,EAAE;YACnB,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,EAAE;YAChB,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,KAAK;SACnB,CAAC;QAEM,aAAQ,GAAG,IAAI,OAAO,EAG3B,CAAC;IA0BN,CAAC;IAxBC,SAAS,CACP,UAAyB,EACzB,KAA0C;QAE1C,MAAM,EAAE,GAAG,yBAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,CAAC,EAAe,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,EAAE,CAAC,MAAM;YAAE,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,WAAW,CACT,UAAyB,EACzB,KAA0C;QAE1C,MAAM,EAAE,GAAG,yBAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACZ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAEY,QAAA,0BAA0B,GAAG,IAAI,0BAA0B,EAAE,CAAC","sourcesContent":["import { SingletonPmAdapter, AppObjectRepo } from \"@vived/core\";\r\nimport { ProcedurePM } from \"../PM/ProcedurePM\";\r\nimport { ProcedureQuizResultVM, ProcedureVM } from \"../types\";\r\n\r\nfunction mapToQuizResultVM(vm: ProcedureVM): ProcedureQuizResultVM {\r\n return {\r\n isComplete: vm.isComplete,\r\n isQuiz: vm.isQuiz,\r\n progressPercentage: vm.progressPercentage,\r\n eventIds: vm.eventIds,\r\n availableEvents: vm.availableEvents,\r\n orderMatters: vm.orderMatters,\r\n userEventLog: vm.userEventLog,\r\n score: vm.score,\r\n isSubmitted: vm.isSubmitted,\r\n };\r\n}\r\n\r\nclass ProcedureQuizResultAdapter\r\n implements SingletonPmAdapter<ProcedureQuizResultVM>\r\n{\r\n defaultVM: ProcedureQuizResultVM = {\r\n isComplete: false,\r\n isQuiz: false,\r\n progressPercentage: 0,\r\n eventIds: [],\r\n availableEvents: [],\r\n orderMatters: true,\r\n userEventLog: [],\r\n score: null,\r\n isSubmitted: false,\r\n };\r\n\r\n private wrappers = new WeakMap<\r\n (vm: ProcedureQuizResultVM) => void,\r\n (vm: ProcedureVM) => void\r\n >();\r\n\r\n subscribe(\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: ProcedureQuizResultVM) => void,\r\n ): void {\r\n const pm = ProcedurePM.get(appObjects);\r\n if (!pm) return;\r\n const wrapper = (vm: ProcedureVM) => setVM(mapToQuizResultVM(vm));\r\n this.wrappers.set(setVM, wrapper);\r\n pm.addView(wrapper);\r\n if (pm.lastVM) setVM(mapToQuizResultVM(pm.lastVM));\r\n }\r\n\r\n unsubscribe(\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: ProcedureQuizResultVM) => void,\r\n ): void {\r\n const pm = ProcedurePM.get(appObjects);\r\n if (!pm) return;\r\n const wrapper = this.wrappers.get(setVM);\r\n if (wrapper) {\r\n pm.removeView(wrapper);\r\n this.wrappers.delete(setVM);\r\n }\r\n }\r\n}\r\n\r\nexport const procedureQuizResultAdapter = new ProcedureQuizResultAdapter();\r\n"]}
1
+ {"version":3,"file":"procedureQuizResultAdapter.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureQuizResultAdapter.ts"],"names":[],"mappings":";;;AACA,mDAAgD;AAGhD,SAAS,iBAAiB,CAAC,EAAe;IACxC,OAAO;QACL,UAAU,EAAE,EAAE,CAAC,UAAU;QACzB,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,kBAAkB,EAAE,EAAE,CAAC,kBAAkB;QACzC,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,eAAe,EAAE,EAAE,CAAC,eAAe;QACnC,YAAY,EAAE,EAAE,CAAC,YAAY;QAC7B,YAAY,EAAE,EAAE,CAAC,YAAY;QAC7B,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,WAAW,EAAE,EAAE,CAAC,WAAW;QAC3B,cAAc,EAAE,EAAE,CAAC,cAAc;KAClC,CAAC;AACJ,CAAC;AAED,MAAM,0BAA0B;IAAhC;QAGE,cAAS,GAA0B;YACjC,UAAU,EAAE,KAAK;YACjB,MAAM,EAAE,KAAK;YACb,kBAAkB,EAAE,CAAC;YACrB,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,EAAE;YACnB,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,EAAE;YAChB,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,KAAK;YAClB,cAAc,EAAE,EAAE;SACnB,CAAC;QAEM,aAAQ,GAAG,IAAI,OAAO,EAG3B,CAAC;IA0BN,CAAC;IAxBC,SAAS,CACP,UAAyB,EACzB,KAA0C;QAE1C,MAAM,EAAE,GAAG,yBAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,CAAC,EAAe,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,EAAE,CAAC,MAAM;YAAE,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,WAAW,CACT,UAAyB,EACzB,KAA0C;QAE1C,MAAM,EAAE,GAAG,yBAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACZ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAEY,QAAA,0BAA0B,GAAG,IAAI,0BAA0B,EAAE,CAAC","sourcesContent":["import { SingletonPmAdapter, AppObjectRepo } from \"@vived/core\";\r\nimport { ProcedurePM } from \"../PM/ProcedurePM\";\r\nimport { ProcedureQuizResultVM, ProcedureVM } from \"../types\";\r\n\r\nfunction mapToQuizResultVM(vm: ProcedureVM): ProcedureQuizResultVM {\r\n return {\r\n isComplete: vm.isComplete,\r\n isQuiz: vm.isQuiz,\r\n progressPercentage: vm.progressPercentage,\r\n eventIds: vm.eventIds,\r\n availableEvents: vm.availableEvents,\r\n orderMatters: vm.orderMatters,\r\n userEventLog: vm.userEventLog,\r\n score: vm.score,\r\n isSubmitted: vm.isSubmitted,\r\n stepCategories: vm.stepCategories,\r\n };\r\n}\r\n\r\nclass ProcedureQuizResultAdapter\r\n implements SingletonPmAdapter<ProcedureQuizResultVM>\r\n{\r\n defaultVM: ProcedureQuizResultVM = {\r\n isComplete: false,\r\n isQuiz: false,\r\n progressPercentage: 0,\r\n eventIds: [],\r\n availableEvents: [],\r\n orderMatters: true,\r\n userEventLog: [],\r\n score: null,\r\n isSubmitted: false,\r\n stepCategories: {},\r\n };\r\n\r\n private wrappers = new WeakMap<\r\n (vm: ProcedureQuizResultVM) => void,\r\n (vm: ProcedureVM) => void\r\n >();\r\n\r\n subscribe(\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: ProcedureQuizResultVM) => void,\r\n ): void {\r\n const pm = ProcedurePM.get(appObjects);\r\n if (!pm) return;\r\n const wrapper = (vm: ProcedureVM) => setVM(mapToQuizResultVM(vm));\r\n this.wrappers.set(setVM, wrapper);\r\n pm.addView(wrapper);\r\n if (pm.lastVM) setVM(mapToQuizResultVM(pm.lastVM));\r\n }\r\n\r\n unsubscribe(\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: ProcedureQuizResultVM) => void,\r\n ): void {\r\n const pm = ProcedurePM.get(appObjects);\r\n if (!pm) return;\r\n const wrapper = this.wrappers.get(setVM);\r\n if (wrapper) {\r\n pm.removeView(wrapper);\r\n this.wrappers.delete(setVM);\r\n }\r\n }\r\n}\r\n\r\nexport const procedureQuizResultAdapter = new ProcedureQuizResultAdapter();\r\n"]}