@vived/app 6.3.0 → 6.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/cjs/Procedure/Adapters/procedureAdapter.js +1 -0
  2. package/dist/cjs/Procedure/Adapters/procedureAdapter.js.map +1 -1
  3. package/dist/cjs/Procedure/Entities/ProcedureEntity.js +9 -0
  4. package/dist/cjs/Procedure/Entities/ProcedureEntity.js.map +1 -1
  5. package/dist/cjs/Procedure/Factories/ProcedureFeatureFactory.js +2 -0
  6. package/dist/cjs/Procedure/Factories/ProcedureFeatureFactory.js.map +1 -1
  7. package/dist/cjs/Procedure/Mocks/MockProcedureEntity.js +7 -0
  8. package/dist/cjs/Procedure/Mocks/MockProcedureEntity.js.map +1 -1
  9. package/dist/cjs/Procedure/PM/ProcedurePM.js +3 -0
  10. package/dist/cjs/Procedure/PM/ProcedurePM.js.map +1 -1
  11. package/dist/cjs/Procedure/PM/ProcedurePM.test.js +2 -0
  12. package/dist/cjs/Procedure/PM/ProcedurePM.test.js.map +1 -1
  13. package/dist/cjs/Procedure/UCs/RecordProcedureSessionUC.js +133 -0
  14. package/dist/cjs/Procedure/UCs/RecordProcedureSessionUC.js.map +1 -0
  15. package/dist/cjs/Procedure/UCs/RecordProcedureSessionUC.test.js +283 -0
  16. package/dist/cjs/Procedure/UCs/RecordProcedureSessionUC.test.js.map +1 -0
  17. package/dist/cjs/Procedure/UCs/SerializeProcedure.js +2 -1
  18. package/dist/cjs/Procedure/UCs/SerializeProcedure.js.map +1 -1
  19. package/dist/cjs/Procedure/UCs/index.js +1 -0
  20. package/dist/cjs/Procedure/UCs/index.js.map +1 -1
  21. package/dist/cjs/Procedure/types.js +2 -0
  22. package/dist/cjs/Procedure/types.js.map +1 -1
  23. package/dist/esm/Procedure/Adapters/procedureAdapter.js +1 -0
  24. package/dist/esm/Procedure/Adapters/procedureAdapter.js.map +1 -1
  25. package/dist/esm/Procedure/Entities/ProcedureEntity.js +9 -0
  26. package/dist/esm/Procedure/Entities/ProcedureEntity.js.map +1 -1
  27. package/dist/esm/Procedure/Factories/ProcedureFeatureFactory.js +2 -0
  28. package/dist/esm/Procedure/Factories/ProcedureFeatureFactory.js.map +1 -1
  29. package/dist/esm/Procedure/Mocks/MockProcedureEntity.js +7 -0
  30. package/dist/esm/Procedure/Mocks/MockProcedureEntity.js.map +1 -1
  31. package/dist/esm/Procedure/PM/ProcedurePM.js +3 -0
  32. package/dist/esm/Procedure/PM/ProcedurePM.js.map +1 -1
  33. package/dist/esm/Procedure/PM/ProcedurePM.test.js +2 -0
  34. package/dist/esm/Procedure/PM/ProcedurePM.test.js.map +1 -1
  35. package/dist/esm/Procedure/UCs/RecordProcedureSessionUC.js +128 -0
  36. package/dist/esm/Procedure/UCs/RecordProcedureSessionUC.js.map +1 -0
  37. package/dist/esm/Procedure/UCs/RecordProcedureSessionUC.test.js +281 -0
  38. package/dist/esm/Procedure/UCs/RecordProcedureSessionUC.test.js.map +1 -0
  39. package/dist/esm/Procedure/UCs/SerializeProcedure.js +2 -1
  40. package/dist/esm/Procedure/UCs/SerializeProcedure.js.map +1 -1
  41. package/dist/esm/Procedure/UCs/index.js +1 -0
  42. package/dist/esm/Procedure/UCs/index.js.map +1 -1
  43. package/dist/esm/Procedure/types.js +1 -1
  44. package/dist/esm/Procedure/types.js.map +1 -1
  45. package/dist/types/Procedure/Adapters/procedureAdapter.d.ts.map +1 -1
  46. package/dist/types/Procedure/Entities/ProcedureEntity.d.ts +2 -0
  47. package/dist/types/Procedure/Entities/ProcedureEntity.d.ts.map +1 -1
  48. package/dist/types/Procedure/Factories/ProcedureFeatureFactory.d.ts.map +1 -1
  49. package/dist/types/Procedure/Mocks/MockProcedureEntity.d.ts +3 -0
  50. package/dist/types/Procedure/Mocks/MockProcedureEntity.d.ts.map +1 -1
  51. package/dist/types/Procedure/UCs/RecordProcedureSessionUC.d.ts +9 -0
  52. package/dist/types/Procedure/UCs/RecordProcedureSessionUC.d.ts.map +1 -0
  53. package/dist/types/Procedure/UCs/RecordProcedureSessionUC.test.d.ts +2 -0
  54. package/dist/types/Procedure/UCs/RecordProcedureSessionUC.test.d.ts.map +1 -0
  55. package/dist/types/Procedure/UCs/SerializeProcedure.d.ts.map +1 -1
  56. package/dist/types/Procedure/UCs/index.d.ts +1 -0
  57. package/dist/types/Procedure/UCs/index.d.ts.map +1 -1
  58. package/dist/types/Procedure/types.d.ts +2 -0
  59. package/dist/types/Procedure/types.d.ts.map +1 -1
  60. package/package.json +1 -1
  61. package/src/Procedure/CONTEXT.md +21 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ProcedureFeatureFactory.js","sourceRoot":"","sources":["../../../../src/Procedure/Factories/ProcedureFeatureFactory.ts"],"names":[],"mappings":"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","sourcesContent":["import { DomainFactory, AppObjectRepo } from \"@vived/core\";\r\nimport { ChallengeEntity } from \"../../Challenge\";\r\nimport {\r\n makeProcedureEntity,\r\n ProcedureEntity,\r\n} from \"../Entities/ProcedureEntity\";\r\nimport { makeHintRegistry } from \"../Entities/HintRegistry\";\r\nimport { makeAddProcedureEventUC } from \"../UCs/AddProcedureEventUC\";\r\nimport { makeRecordProcedureEventUC } from \"../UCs/RecordProcedureEventUC\";\r\nimport { makeResetProcedureProgressUC } from \"../UCs/ResetProcedureProgressUC\";\r\nimport { makeSerializeProcedure } from \"../UCs/SerializeProcedure\";\r\nimport { makeRemoveProcedureEventUC } from \"../UCs/RemoveProcedureEventUC\";\r\nimport { makeMoveProcedureEventUpUC } from \"../UCs/MoveProcedureEventUpUC\";\r\nimport { makeMoveProcedureEventDownUC } from \"../UCs/MoveProcedureEventDownUC\";\r\nimport { makeSetProcedureOrderMattersUC } from \"../UCs/SetProcedureOrderMattersUC\";\r\nimport { makeSetProcedureShowHintsUC } from \"../UCs/SetProcedureShowHintsUC\";\r\nimport { makeSetProcedureIsQuizUC } from \"../UCs/SetProcedureIsQuizUC\";\r\nimport { makeSubmitProcedureQuizUC } from \"../UCs/SubmitProcedureQuizUC\";\r\nimport { makeUpdateProcedureEventsUCHook } from \"../UCs/UpdateProcedureEventsUCHook\";\r\nimport { makeProcedurePM, ProcedurePM } from \"../PM/ProcedurePM\";\r\n\r\nexport class ProcedureFeatureFactory extends DomainFactory {\r\n factoryName = \"ProcedureFeatureFactory\";\r\n\r\n setupEntities(): void {\r\n makeProcedureEntity(this.appObject);\r\n makeHintRegistry(this.appObject);\r\n }\r\n\r\n setupUCs(): void {\r\n makeAddProcedureEventUC(this.appObject);\r\n makeRecordProcedureEventUC(this.appObject);\r\n makeResetProcedureProgressUC(this.appObject);\r\n makeSerializeProcedure(this.appObject);\r\n makeRemoveProcedureEventUC(this.appObject);\r\n makeMoveProcedureEventUpUC(this.appObject);\r\n makeMoveProcedureEventDownUC(this.appObject);\r\n makeSetProcedureOrderMattersUC(this.appObject);\r\n makeSetProcedureShowHintsUC(this.appObject);\r\n makeSetProcedureIsQuizUC(this.appObject);\r\n makeSubmitProcedureQuizUC(this.appObject);\r\n makeUpdateProcedureEventsUCHook(this.appObject);\r\n }\r\n\r\n setupPMs(): void {\r\n makeProcedurePM(this.appObject);\r\n }\r\n\r\n finalSetup(): void {\r\n this.registerProcedureChallenge();\r\n }\r\n\r\n private registerProcedureChallenge(): void {\r\n const challengeEntity = ChallengeEntity.get(this.appObjects);\r\n const procedureEntity = this.getProcedureEntity();\r\n\r\n if (!challengeEntity) {\r\n this.warn(\r\n \"ChallengeEntity not found - Procedure challenge will not be available in selection\",\r\n );\r\n return;\r\n }\r\n\r\n if (!procedureEntity) {\r\n this.warn(\"ProcedureEntity not found - cannot register challenge\");\r\n return;\r\n }\r\n\r\n try {\r\n challengeEntity.registerChallenge(procedureEntity);\r\n } catch (error) {\r\n this.warn(`Failed to register Procedure challenge: ${error}`);\r\n }\r\n }\r\n\r\n getProcedureEntity(): ProcedureEntity | undefined {\r\n return ProcedureEntity.get(this.appObjects);\r\n }\r\n\r\n getProcedurePM(): ProcedurePM | undefined {\r\n return ProcedurePM.get(this.appObjects);\r\n }\r\n}\r\n\r\nexport const ProcedureFeatureComponents = {\r\n procedureEntityType: ProcedureEntity.type,\r\n procedurePMType: ProcedurePM.type,\r\n};\r\n\r\nexport function makeProcedureFeatureFactory(\r\n appObjects: AppObjectRepo,\r\n): ProcedureFeatureFactory {\r\n const appObject = appObjects.getOrCreate(\"Procedure\");\r\n return new ProcedureFeatureFactory(appObject);\r\n}\r\n"]}
1
+ {"version":3,"file":"ProcedureFeatureFactory.js","sourceRoot":"","sources":["../../../../src/Procedure/Factories/ProcedureFeatureFactory.ts"],"names":[],"mappings":"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","sourcesContent":["import { DomainFactory, AppObjectRepo } from \"@vived/core\";\r\nimport { ChallengeEntity } from \"../../Challenge\";\r\nimport {\r\n makeProcedureEntity,\r\n ProcedureEntity,\r\n} from \"../Entities/ProcedureEntity\";\r\nimport { makeHintRegistry } from \"../Entities/HintRegistry\";\r\nimport { makeAddProcedureEventUC } from \"../UCs/AddProcedureEventUC\";\r\nimport { makeRecordProcedureEventUC } from \"../UCs/RecordProcedureEventUC\";\r\nimport { makeResetProcedureProgressUC } from \"../UCs/ResetProcedureProgressUC\";\r\nimport { makeSerializeProcedure } from \"../UCs/SerializeProcedure\";\r\nimport { makeRemoveProcedureEventUC } from \"../UCs/RemoveProcedureEventUC\";\r\nimport { makeMoveProcedureEventUpUC } from \"../UCs/MoveProcedureEventUpUC\";\r\nimport { makeMoveProcedureEventDownUC } from \"../UCs/MoveProcedureEventDownUC\";\r\nimport { makeSetProcedureOrderMattersUC } from \"../UCs/SetProcedureOrderMattersUC\";\r\nimport { makeSetProcedureShowHintsUC } from \"../UCs/SetProcedureShowHintsUC\";\r\nimport { makeSetProcedureIsQuizUC } from \"../UCs/SetProcedureIsQuizUC\";\r\nimport { makeSubmitProcedureQuizUC } from \"../UCs/SubmitProcedureQuizUC\";\r\nimport { makeUpdateProcedureEventsUCHook } from \"../UCs/UpdateProcedureEventsUCHook\";\r\nimport { makeRecordProcedureSessionUC } from \"../UCs/RecordProcedureSessionUC\";\r\nimport { makeProcedurePM, ProcedurePM } from \"../PM/ProcedurePM\";\r\n\r\nexport class ProcedureFeatureFactory extends DomainFactory {\r\n factoryName = \"ProcedureFeatureFactory\";\r\n\r\n setupEntities(): void {\r\n makeProcedureEntity(this.appObject);\r\n makeHintRegistry(this.appObject);\r\n }\r\n\r\n setupUCs(): void {\r\n makeAddProcedureEventUC(this.appObject);\r\n makeRecordProcedureEventUC(this.appObject);\r\n makeResetProcedureProgressUC(this.appObject);\r\n makeSerializeProcedure(this.appObject);\r\n makeRemoveProcedureEventUC(this.appObject);\r\n makeMoveProcedureEventUpUC(this.appObject);\r\n makeMoveProcedureEventDownUC(this.appObject);\r\n makeSetProcedureOrderMattersUC(this.appObject);\r\n makeSetProcedureShowHintsUC(this.appObject);\r\n makeSetProcedureIsQuizUC(this.appObject);\r\n makeSubmitProcedureQuizUC(this.appObject);\r\n makeUpdateProcedureEventsUCHook(this.appObject);\r\n makeRecordProcedureSessionUC(this.appObject);\r\n }\r\n\r\n setupPMs(): void {\r\n makeProcedurePM(this.appObject);\r\n }\r\n\r\n finalSetup(): void {\r\n this.registerProcedureChallenge();\r\n }\r\n\r\n private registerProcedureChallenge(): void {\r\n const challengeEntity = ChallengeEntity.get(this.appObjects);\r\n const procedureEntity = this.getProcedureEntity();\r\n\r\n if (!challengeEntity) {\r\n this.warn(\r\n \"ChallengeEntity not found - Procedure challenge will not be available in selection\",\r\n );\r\n return;\r\n }\r\n\r\n if (!procedureEntity) {\r\n this.warn(\"ProcedureEntity not found - cannot register challenge\");\r\n return;\r\n }\r\n\r\n try {\r\n challengeEntity.registerChallenge(procedureEntity);\r\n } catch (error) {\r\n this.warn(`Failed to register Procedure challenge: ${error}`);\r\n }\r\n }\r\n\r\n getProcedureEntity(): ProcedureEntity | undefined {\r\n return ProcedureEntity.get(this.appObjects);\r\n }\r\n\r\n getProcedurePM(): ProcedurePM | undefined {\r\n return ProcedurePM.get(this.appObjects);\r\n }\r\n}\r\n\r\nexport const ProcedureFeatureComponents = {\r\n procedureEntityType: ProcedureEntity.type,\r\n procedurePMType: ProcedurePM.type,\r\n};\r\n\r\nexport function makeProcedureFeatureFactory(\r\n appObjects: AppObjectRepo,\r\n): ProcedureFeatureFactory {\r\n const appObject = appObjects.getOrCreate(\"Procedure\");\r\n return new ProcedureFeatureFactory(appObject);\r\n}\r\n"]}
@@ -18,6 +18,9 @@ export class MockProcedureEntity extends ProcedureEntity {
18
18
  get isQuiz() {
19
19
  return this._isQuiz;
20
20
  }
21
+ get isRecording() {
22
+ return this._isRecording;
23
+ }
21
24
  get userEventLog() {
22
25
  return this._userEventLog;
23
26
  }
@@ -42,6 +45,7 @@ export class MockProcedureEntity extends ProcedureEntity {
42
45
  this._orderMatters = true;
43
46
  this._showHints = true;
44
47
  this._isQuiz = false;
48
+ this._isRecording = false;
45
49
  this._userEventLog = [];
46
50
  this._currentStepIndex = 0;
47
51
  this._isComplete = false;
@@ -74,6 +78,9 @@ export class MockProcedureEntity extends ProcedureEntity {
74
78
  this.setIsQuiz = jest.fn((v) => {
75
79
  this._isQuiz = v;
76
80
  });
81
+ this.setIsRecording = jest.fn((v) => {
82
+ this._isRecording = v;
83
+ });
77
84
  this.getProgressPercentage = jest.fn(() => 0);
78
85
  this.calculateScore = jest.fn(() => ({ percentage: 0, comparison: [] }));
79
86
  this.submit = jest.fn();
@@ -1 +1 @@
1
- {"version":3,"file":"MockProcedureEntity.js","sourceRoot":"","sources":["../../../../src/Procedure/Mocks/MockProcedureEntity.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectRepo } from \"@vived/core\";\r\nimport { ProcedureEntity } from \"../Entities/ProcedureEntity\";\r\n\r\nexport class MockProcedureEntity extends ProcedureEntity {\r\n private _eventIds: string[] = [];\r\n private _orderMatters = true;\r\n private _showHints = true;\r\n private _isQuiz = false;\r\n private _userEventLog: string[] = [];\r\n private _currentStepIndex = 0;\r\n private _isComplete = false;\r\n private _validationMessage: string | null = null;\r\n private _score: {\r\n percentage: number;\r\n comparison: {eventId: string; expected: boolean; actual: boolean; correct: boolean}[];\r\n } | null = null;\r\n private _isSubmitted = false;\r\n\r\n get helpHeading(): string {\r\n return \"Procedure Challenge\";\r\n }\r\n get consumerHelpText(): string {\r\n return \"\";\r\n }\r\n get eventIds() {\r\n return this._eventIds;\r\n }\r\n get orderMatters() {\r\n return this._orderMatters;\r\n }\r\n get showHints() {\r\n return this._showHints;\r\n }\r\n get isQuiz() {\r\n return this._isQuiz;\r\n }\r\n get userEventLog() {\r\n return this._userEventLog;\r\n }\r\n get currentStepIndex() {\r\n return this._currentStepIndex;\r\n }\r\n get isComplete() {\r\n return this._isComplete;\r\n }\r\n get validationMessage() {\r\n return this._validationMessage;\r\n }\r\n get score() {\r\n return this._score;\r\n }\r\n get isSubmitted() {\r\n return this._isSubmitted;\r\n }\r\n\r\n addEventId = jest.fn((id: string) => {\r\n this._eventIds.push(id);\r\n });\r\n removeEventId = jest.fn();\r\n clearEventIds = jest.fn(() => {\r\n this._eventIds = [];\r\n });\r\n recordUserEvent = jest.fn();\r\n validateProgress = jest.fn(() => null);\r\n getNextExpectedEvent = jest.fn(() => null);\r\n reset = jest.fn(() => {\r\n this._userEventLog = [];\r\n this._currentStepIndex = 0;\r\n });\r\n moveEventUp = jest.fn();\r\n moveEventDown = jest.fn();\r\n getAuthoringValidationMessage = jest.fn(() => null);\r\n setOrderMatters = jest.fn((v: boolean) => {\r\n this._orderMatters = v;\r\n });\r\n setShowHints = jest.fn((v: boolean) => {\r\n this._showHints = v;\r\n });\r\n setIsQuiz = jest.fn((v: boolean) => {\r\n this._isQuiz = v;\r\n });\r\n getProgressPercentage = jest.fn(() => 0);\r\n calculateScore = jest.fn(() => ({ percentage: 0, comparison: [] }));\r\n submit = jest.fn();\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ProcedureEntity.type);\r\n }\r\n}\r\n\r\nexport function makeMockProcedureEntity(appObjects: AppObjectRepo) {\r\n return new MockProcedureEntity(\r\n appObjects.getOrCreate(\"MockProcedureEntity\"),\r\n );\r\n}\r\n"]}
1
+ {"version":3,"file":"MockProcedureEntity.js","sourceRoot":"","sources":["../../../../src/Procedure/Mocks/MockProcedureEntity.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectRepo } from \"@vived/core\";\r\nimport { ProcedureEntity } from \"../Entities/ProcedureEntity\";\r\n\r\nexport class MockProcedureEntity extends ProcedureEntity {\r\n private _eventIds: string[] = [];\r\n private _orderMatters = true;\r\n private _showHints = true;\r\n private _isQuiz = false;\r\n private _isRecording = false;\r\n private _userEventLog: string[] = [];\r\n private _currentStepIndex = 0;\r\n private _isComplete = false;\r\n private _validationMessage: string | null = null;\r\n private _score: {\r\n percentage: number;\r\n comparison: {eventId: string; expected: boolean; actual: boolean; correct: boolean}[];\r\n } | null = null;\r\n private _isSubmitted = false;\r\n\r\n get helpHeading(): string {\r\n return \"Procedure Challenge\";\r\n }\r\n get consumerHelpText(): string {\r\n return \"\";\r\n }\r\n get eventIds() {\r\n return this._eventIds;\r\n }\r\n get orderMatters() {\r\n return this._orderMatters;\r\n }\r\n get showHints() {\r\n return this._showHints;\r\n }\r\n get isQuiz() {\r\n return this._isQuiz;\r\n }\r\n get isRecording() {\r\n return this._isRecording;\r\n }\r\n get userEventLog() {\r\n return this._userEventLog;\r\n }\r\n get currentStepIndex() {\r\n return this._currentStepIndex;\r\n }\r\n get isComplete() {\r\n return this._isComplete;\r\n }\r\n get validationMessage() {\r\n return this._validationMessage;\r\n }\r\n get score() {\r\n return this._score;\r\n }\r\n get isSubmitted() {\r\n return this._isSubmitted;\r\n }\r\n\r\n addEventId = jest.fn((id: string) => {\r\n this._eventIds.push(id);\r\n });\r\n removeEventId = jest.fn();\r\n clearEventIds = jest.fn(() => {\r\n this._eventIds = [];\r\n });\r\n recordUserEvent = jest.fn();\r\n validateProgress = jest.fn(() => null);\r\n getNextExpectedEvent = jest.fn(() => null);\r\n reset = jest.fn(() => {\r\n this._userEventLog = [];\r\n this._currentStepIndex = 0;\r\n });\r\n moveEventUp = jest.fn();\r\n moveEventDown = jest.fn();\r\n getAuthoringValidationMessage = jest.fn(() => null);\r\n setOrderMatters = jest.fn((v: boolean) => {\r\n this._orderMatters = v;\r\n });\r\n setShowHints = jest.fn((v: boolean) => {\r\n this._showHints = v;\r\n });\r\n setIsQuiz = jest.fn((v: boolean) => {\r\n this._isQuiz = v;\r\n });\r\n setIsRecording = jest.fn((v: boolean) => {\r\n this._isRecording = v;\r\n });\r\n getProgressPercentage = jest.fn(() => 0);\r\n calculateScore = jest.fn(() => ({ percentage: 0, comparison: [] }));\r\n submit = jest.fn();\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ProcedureEntity.type);\r\n }\r\n}\r\n\r\nexport function makeMockProcedureEntity(appObjects: AppObjectRepo) {\r\n return new MockProcedureEntity(\r\n appObjects.getOrCreate(\"MockProcedureEntity\"),\r\n );\r\n}\r\n"]}
@@ -20,6 +20,7 @@ class ProcedurePMImp extends ProcedurePM {
20
20
  a.orderMatters === b.orderMatters &&
21
21
  a.showHints === b.showHints &&
22
22
  a.isQuiz === b.isQuiz &&
23
+ a.isRecording === b.isRecording &&
23
24
  JSON.stringify(a.userEventLog) === JSON.stringify(b.userEventLog) &&
24
25
  a.currentStepIndex === b.currentStepIndex &&
25
26
  a.isComplete === b.isComplete &&
@@ -36,6 +37,7 @@ class ProcedurePMImp extends ProcedurePM {
36
37
  orderMatters: true,
37
38
  showHints: true,
38
39
  isQuiz: false,
40
+ isRecording: false,
39
41
  userEventLog: [],
40
42
  currentStepIndex: 0,
41
43
  isComplete: false,
@@ -65,6 +67,7 @@ class ProcedurePMImp extends ProcedurePM {
65
67
  orderMatters: procedureEntity.orderMatters,
66
68
  showHints: procedureEntity.showHints,
67
69
  isQuiz: procedureEntity.isQuiz,
70
+ isRecording: procedureEntity.isRecording,
68
71
  userEventLog: procedureEntity.userEventLog,
69
72
  currentStepIndex: procedureEntity.currentStepIndex,
70
73
  isComplete: procedureEntity.isComplete,
@@ -1 +1 @@
1
- {"version":3,"file":"ProcedurePM.js","sourceRoot":"","sources":["../../../../src/Procedure/PM/ProcedurePM.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n AppObject,\r\n AppObjectPM,\r\n AppObjectRepo,\r\n getSingletonComponent,\r\n} from \"@vived/core\";\r\nimport { ProcedureEntity } from \"../Entities/ProcedureEntity\";\r\nimport { EventEntity } from \"../../EventSystem\";\r\nimport { ProcedureVM } from \"../types\";\r\n\r\nexport abstract class ProcedurePM extends AppObjectPM<ProcedureVM> {\r\n static readonly type = \"ProcedurePM\";\r\n\r\n static get = (appObjects: AppObjectRepo): ProcedurePM | undefined =>\r\n getSingletonComponent(ProcedurePM.type, appObjects);\r\n}\r\n\r\nexport function makeProcedurePM(appObject: AppObject): ProcedurePM {\r\n return new ProcedurePMImp(appObject);\r\n}\r\n\r\nclass ProcedurePMImp extends ProcedurePM {\r\n private get procedureEntity(): ProcedureEntity | undefined {\r\n return ProcedureEntity.get(this.appObjects);\r\n }\r\n\r\n private get eventEntity(): EventEntity | undefined {\r\n return EventEntity.get(this.appObjects);\r\n }\r\n\r\n vmsAreEqual(a: ProcedureVM, b: ProcedureVM): boolean {\r\n return (\r\n JSON.stringify(a.eventIds) === JSON.stringify(b.eventIds) &&\r\n a.orderMatters === b.orderMatters &&\r\n a.showHints === b.showHints &&\r\n a.isQuiz === b.isQuiz &&\r\n JSON.stringify(a.userEventLog) === JSON.stringify(b.userEventLog) &&\r\n a.currentStepIndex === b.currentStepIndex &&\r\n a.isComplete === b.isComplete &&\r\n a.validationMessage === b.validationMessage &&\r\n a.nextExpectedEvent === b.nextExpectedEvent &&\r\n a.progressPercentage === b.progressPercentage &&\r\n JSON.stringify(a.availableEvents) === JSON.stringify(b.availableEvents) &&\r\n JSON.stringify(a.score) === JSON.stringify(b.score) &&\r\n a.isSubmitted === b.isSubmitted\r\n );\r\n }\r\n\r\n onEntityChange = (): void => {\r\n const procedureEntity = this.procedureEntity;\r\n if (!procedureEntity) {\r\n this.doUpdateView(this.getDefaultVM());\r\n return;\r\n }\r\n\r\n const eventEntity = this.eventEntity;\r\n const availableEvents = eventEntity\r\n ? eventEntity.getRegisteredEvents()\r\n : [];\r\n\r\n const viewModel: ProcedureVM = {\r\n eventIds: procedureEntity.eventIds,\r\n orderMatters: procedureEntity.orderMatters,\r\n showHints: procedureEntity.showHints,\r\n isQuiz: procedureEntity.isQuiz,\r\n userEventLog: procedureEntity.userEventLog,\r\n currentStepIndex: procedureEntity.currentStepIndex,\r\n isComplete: procedureEntity.isComplete,\r\n validationMessage: procedureEntity.validationMessage,\r\n nextExpectedEvent: procedureEntity.getNextExpectedEvent(),\r\n progressPercentage: procedureEntity.getProgressPercentage(),\r\n availableEvents,\r\n authoringValidationMessage:\r\n procedureEntity.getAuthoringValidationMessage(),\r\n score: procedureEntity.score,\r\n isSubmitted: procedureEntity.isSubmitted,\r\n };\r\n\r\n this.doUpdateView(viewModel);\r\n };\r\n\r\n private getDefaultVM(): ProcedureVM {\r\n return {\r\n eventIds: [],\r\n orderMatters: true,\r\n showHints: true,\r\n isQuiz: 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\r\n dispose = (): void => {\r\n super.dispose();\r\n this.procedureEntity?.removeChangeObserver(this.onEntityChange);\r\n this.eventEntity?.removeChangeObserver(this.onEntityChange);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ProcedurePM.type);\r\n\r\n this.appObjects.registerSingleton(this);\r\n\r\n this.procedureEntity?.addChangeObserver(this.onEntityChange);\r\n this.eventEntity?.addChangeObserver(this.onEntityChange);\r\n\r\n this.onEntityChange();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ProcedurePM.js","sourceRoot":"","sources":["../../../../src/Procedure/PM/ProcedurePM.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n AppObject,\r\n AppObjectPM,\r\n AppObjectRepo,\r\n getSingletonComponent,\r\n} from \"@vived/core\";\r\nimport { ProcedureEntity } from \"../Entities/ProcedureEntity\";\r\nimport { EventEntity } from \"../../EventSystem\";\r\nimport { ProcedureVM } from \"../types\";\r\n\r\nexport abstract class ProcedurePM extends AppObjectPM<ProcedureVM> {\r\n static readonly type = \"ProcedurePM\";\r\n\r\n static get = (appObjects: AppObjectRepo): ProcedurePM | undefined =>\r\n getSingletonComponent(ProcedurePM.type, appObjects);\r\n}\r\n\r\nexport function makeProcedurePM(appObject: AppObject): ProcedurePM {\r\n return new ProcedurePMImp(appObject);\r\n}\r\n\r\nclass ProcedurePMImp extends ProcedurePM {\r\n private get procedureEntity(): ProcedureEntity | undefined {\r\n return ProcedureEntity.get(this.appObjects);\r\n }\r\n\r\n private get eventEntity(): EventEntity | undefined {\r\n return EventEntity.get(this.appObjects);\r\n }\r\n\r\n vmsAreEqual(a: ProcedureVM, b: ProcedureVM): boolean {\r\n return (\r\n JSON.stringify(a.eventIds) === JSON.stringify(b.eventIds) &&\r\n a.orderMatters === b.orderMatters &&\r\n a.showHints === b.showHints &&\r\n a.isQuiz === b.isQuiz &&\r\n a.isRecording === b.isRecording &&\r\n JSON.stringify(a.userEventLog) === JSON.stringify(b.userEventLog) &&\r\n a.currentStepIndex === b.currentStepIndex &&\r\n a.isComplete === b.isComplete &&\r\n a.validationMessage === b.validationMessage &&\r\n a.nextExpectedEvent === b.nextExpectedEvent &&\r\n a.progressPercentage === b.progressPercentage &&\r\n JSON.stringify(a.availableEvents) === JSON.stringify(b.availableEvents) &&\r\n JSON.stringify(a.score) === JSON.stringify(b.score) &&\r\n a.isSubmitted === b.isSubmitted\r\n );\r\n }\r\n\r\n onEntityChange = (): void => {\r\n const procedureEntity = this.procedureEntity;\r\n if (!procedureEntity) {\r\n this.doUpdateView(this.getDefaultVM());\r\n return;\r\n }\r\n\r\n const eventEntity = this.eventEntity;\r\n const availableEvents = eventEntity\r\n ? eventEntity.getRegisteredEvents()\r\n : [];\r\n\r\n const viewModel: ProcedureVM = {\r\n eventIds: procedureEntity.eventIds,\r\n orderMatters: procedureEntity.orderMatters,\r\n showHints: procedureEntity.showHints,\r\n isQuiz: procedureEntity.isQuiz,\r\n isRecording: procedureEntity.isRecording,\r\n userEventLog: procedureEntity.userEventLog,\r\n currentStepIndex: procedureEntity.currentStepIndex,\r\n isComplete: procedureEntity.isComplete,\r\n validationMessage: procedureEntity.validationMessage,\r\n nextExpectedEvent: procedureEntity.getNextExpectedEvent(),\r\n progressPercentage: procedureEntity.getProgressPercentage(),\r\n availableEvents,\r\n authoringValidationMessage:\r\n procedureEntity.getAuthoringValidationMessage(),\r\n score: procedureEntity.score,\r\n isSubmitted: procedureEntity.isSubmitted,\r\n };\r\n\r\n this.doUpdateView(viewModel);\r\n };\r\n\r\n private getDefaultVM(): ProcedureVM {\r\n return {\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\r\n dispose = (): void => {\r\n super.dispose();\r\n this.procedureEntity?.removeChangeObserver(this.onEntityChange);\r\n this.eventEntity?.removeChangeObserver(this.onEntityChange);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ProcedurePM.type);\r\n\r\n this.appObjects.registerSingleton(this);\r\n\r\n this.procedureEntity?.addChangeObserver(this.onEntityChange);\r\n this.eventEntity?.addChangeObserver(this.onEntityChange);\r\n\r\n this.onEntityChange();\r\n }\r\n}\r\n"]}
@@ -60,6 +60,7 @@ describe("ProcedurePM", () => {
60
60
  orderMatters: true,
61
61
  showHints: true,
62
62
  isQuiz: false,
63
+ isRecording: false,
63
64
  userEventLog: [],
64
65
  currentStepIndex: 0,
65
66
  isComplete: false,
@@ -80,6 +81,7 @@ describe("ProcedurePM", () => {
80
81
  orderMatters: true,
81
82
  showHints: true,
82
83
  isQuiz: false,
84
+ isRecording: false,
83
85
  userEventLog: [],
84
86
  currentStepIndex: 0,
85
87
  isComplete: false,
@@ -1 +1 @@
1
- {"version":3,"file":"ProcedurePM.test.js","sourceRoot":"","sources":["../../../../src/Procedure/PM/ProcedurePM.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\r\nimport { ProcedureEntity, makeProcedureEntity } from \"../Entities/ProcedureEntity\";\r\nimport { ProcedurePM, makeProcedurePM } from \"./ProcedurePM\";\r\nimport { ProcedureVM } from \"../types\";\r\n\r\ndescribe(\"ProcedurePM\", () => {\r\n let appObjects: AppObjectRepo;\r\n let procedureEntity: ProcedureEntity;\r\n let procedurePM: ProcedurePM;\r\n\r\n beforeEach(() => {\r\n appObjects = makeAppObjectRepo();\r\n const appObject = appObjects.getOrCreate(\"Procedure\");\r\n\r\n procedureEntity = makeProcedureEntity(appObject);\r\n procedurePM = makeProcedurePM(appObject);\r\n });\r\n\r\n it(\"can be retrieved via static get method\", () => {\r\n const retrieved = ProcedurePM.get(appObjects);\r\n expect(retrieved).toBe(procedurePM);\r\n });\r\n\r\n it(\"registers itself as singleton\", () => {\r\n expect(ProcedurePM.get(appObjects)).toBe(procedurePM);\r\n });\r\n\r\n it(\"generates correct initial view model\", () => {\r\n const vm = procedurePM.lastVM;\r\n\r\n expect(vm).toBeDefined();\r\n expect(vm!.eventIds).toEqual([]);\r\n expect(vm!.orderMatters).toBe(true);\r\n expect(vm!.showHints).toBe(true);\r\n expect(vm!.isQuiz).toBe(false);\r\n expect(vm!.userEventLog).toEqual([]);\r\n expect(vm!.currentStepIndex).toBe(0);\r\n expect(vm!.isComplete).toBe(false);\r\n expect(vm!.validationMessage).toBe(null);\r\n expect(vm!.nextExpectedEvent).toBe(null);\r\n expect(vm!.progressPercentage).toBe(0);\r\n expect(vm!.availableEvents).toEqual([]);\r\n });\r\n\r\n it(\"reflects entity state changes in view model\", () => {\r\n procedureEntity.addEventId(\"test_event_1\");\r\n procedureEntity.addEventId(\"test_event_2\");\r\n procedureEntity.setOrderMatters(false);\r\n procedureEntity.setShowHints(false);\r\n procedureEntity.setIsQuiz(true);\r\n\r\n const vm = procedurePM.lastVM;\r\n\r\n expect(vm!.eventIds).toEqual([\"test_event_1\", \"test_event_2\"]);\r\n expect(vm!.orderMatters).toBe(false);\r\n expect(vm!.showHints).toBe(false);\r\n expect(vm!.isQuiz).toBe(true);\r\n });\r\n\r\n it(\"updates view model when user progress changes\", () => {\r\n procedureEntity.addEventId(\"event_1\");\r\n procedureEntity.addEventId(\"event_2\");\r\n\r\n procedureEntity.recordUserEvent(\"event_1\");\r\n\r\n const vm = procedurePM.lastVM;\r\n expect(vm!.userEventLog).toEqual([\"event_1\"]);\r\n expect(vm!.currentStepIndex).toBe(1);\r\n expect(vm!.progressPercentage).toBe(50);\r\n });\r\n\r\n it(\"correctly identifies equal view models\", () => {\r\n const vm1: ProcedureVM = {\r\n eventIds: [\"event_1\"],\r\n orderMatters: true,\r\n showHints: true,\r\n isQuiz: false,\r\n userEventLog: [],\r\n currentStepIndex: 0,\r\n isComplete: false,\r\n validationMessage: null,\r\n nextExpectedEvent: \"event_1\",\r\n progressPercentage: 0,\r\n availableEvents: [],\r\n authoringValidationMessage: null,\r\n score: null,\r\n isSubmitted: false,\r\n };\r\n\r\n const vm2: ProcedureVM = { ...vm1 };\r\n\r\n expect(procedurePM.vmsAreEqual(vm1, vm2)).toBe(true);\r\n });\r\n\r\n it(\"correctly identifies different view models\", () => {\r\n const vm1: ProcedureVM = {\r\n eventIds: [\"event_1\"],\r\n orderMatters: true,\r\n showHints: true,\r\n isQuiz: false,\r\n userEventLog: [],\r\n currentStepIndex: 0,\r\n isComplete: false,\r\n validationMessage: null,\r\n nextExpectedEvent: \"event_1\",\r\n progressPercentage: 0,\r\n availableEvents: [],\r\n authoringValidationMessage: null,\r\n score: null,\r\n isSubmitted: false,\r\n };\r\n\r\n const vm2: ProcedureVM = {\r\n ...vm1,\r\n orderMatters: false,\r\n };\r\n\r\n expect(procedurePM.vmsAreEqual(vm1, vm2)).toBe(false);\r\n });\r\n\r\n it(\"provides default view model when entity is missing\", () => {\r\n const isolatedAppObjects = makeAppObjectRepo();\r\n const isolatedAppObject = isolatedAppObjects.getOrCreate(\"Isolated\");\r\n const isolatedPM = makeProcedurePM(isolatedAppObject);\r\n\r\n const vm = isolatedPM.lastVM;\r\n\r\n expect(vm).toBeDefined();\r\n expect(vm!.eventIds).toEqual([]);\r\n expect(vm!.orderMatters).toBe(true);\r\n expect(vm!.showHints).toBe(true);\r\n expect(vm!.isQuiz).toBe(false);\r\n });\r\n\r\n it(\"notifies subscribers when entity changes\", () => {\r\n let notificationCount = 0;\r\n let lastVM: ProcedureVM | null = null;\r\n\r\n const mockView = (vm: ProcedureVM) => {\r\n notificationCount++;\r\n lastVM = vm;\r\n };\r\n\r\n procedurePM.addView(mockView);\r\n\r\n expect(notificationCount).toBeGreaterThan(0);\r\n const initialCount = notificationCount;\r\n\r\n procedureEntity.addEventId(\"new_event\");\r\n\r\n expect(notificationCount).toBeGreaterThan(initialCount);\r\n expect(lastVM!.eventIds).toContain(\"new_event\");\r\n\r\n procedurePM.removeView(mockView);\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"ProcedurePM.test.js","sourceRoot":"","sources":["../../../../src/Procedure/PM/ProcedurePM.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\r\nimport { ProcedureEntity, makeProcedureEntity } from \"../Entities/ProcedureEntity\";\r\nimport { ProcedurePM, makeProcedurePM } from \"./ProcedurePM\";\r\nimport { ProcedureVM } from \"../types\";\r\n\r\ndescribe(\"ProcedurePM\", () => {\r\n let appObjects: AppObjectRepo;\r\n let procedureEntity: ProcedureEntity;\r\n let procedurePM: ProcedurePM;\r\n\r\n beforeEach(() => {\r\n appObjects = makeAppObjectRepo();\r\n const appObject = appObjects.getOrCreate(\"Procedure\");\r\n\r\n procedureEntity = makeProcedureEntity(appObject);\r\n procedurePM = makeProcedurePM(appObject);\r\n });\r\n\r\n it(\"can be retrieved via static get method\", () => {\r\n const retrieved = ProcedurePM.get(appObjects);\r\n expect(retrieved).toBe(procedurePM);\r\n });\r\n\r\n it(\"registers itself as singleton\", () => {\r\n expect(ProcedurePM.get(appObjects)).toBe(procedurePM);\r\n });\r\n\r\n it(\"generates correct initial view model\", () => {\r\n const vm = procedurePM.lastVM;\r\n\r\n expect(vm).toBeDefined();\r\n expect(vm!.eventIds).toEqual([]);\r\n expect(vm!.orderMatters).toBe(true);\r\n expect(vm!.showHints).toBe(true);\r\n expect(vm!.isQuiz).toBe(false);\r\n expect(vm!.userEventLog).toEqual([]);\r\n expect(vm!.currentStepIndex).toBe(0);\r\n expect(vm!.isComplete).toBe(false);\r\n expect(vm!.validationMessage).toBe(null);\r\n expect(vm!.nextExpectedEvent).toBe(null);\r\n expect(vm!.progressPercentage).toBe(0);\r\n expect(vm!.availableEvents).toEqual([]);\r\n });\r\n\r\n it(\"reflects entity state changes in view model\", () => {\r\n procedureEntity.addEventId(\"test_event_1\");\r\n procedureEntity.addEventId(\"test_event_2\");\r\n procedureEntity.setOrderMatters(false);\r\n procedureEntity.setShowHints(false);\r\n procedureEntity.setIsQuiz(true);\r\n\r\n const vm = procedurePM.lastVM;\r\n\r\n expect(vm!.eventIds).toEqual([\"test_event_1\", \"test_event_2\"]);\r\n expect(vm!.orderMatters).toBe(false);\r\n expect(vm!.showHints).toBe(false);\r\n expect(vm!.isQuiz).toBe(true);\r\n });\r\n\r\n it(\"updates view model when user progress changes\", () => {\r\n procedureEntity.addEventId(\"event_1\");\r\n procedureEntity.addEventId(\"event_2\");\r\n\r\n procedureEntity.recordUserEvent(\"event_1\");\r\n\r\n const vm = procedurePM.lastVM;\r\n expect(vm!.userEventLog).toEqual([\"event_1\"]);\r\n expect(vm!.currentStepIndex).toBe(1);\r\n expect(vm!.progressPercentage).toBe(50);\r\n });\r\n\r\n it(\"correctly identifies equal view models\", () => {\r\n const vm1: ProcedureVM = {\r\n eventIds: [\"event_1\"],\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: \"event_1\",\r\n progressPercentage: 0,\r\n availableEvents: [],\r\n authoringValidationMessage: null,\r\n score: null,\r\n isSubmitted: false,\r\n };\r\n\r\n const vm2: ProcedureVM = { ...vm1 };\r\n\r\n expect(procedurePM.vmsAreEqual(vm1, vm2)).toBe(true);\r\n });\r\n\r\n it(\"correctly identifies different view models\", () => {\r\n const vm1: ProcedureVM = {\r\n eventIds: [\"event_1\"],\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: \"event_1\",\r\n progressPercentage: 0,\r\n availableEvents: [],\r\n authoringValidationMessage: null,\r\n score: null,\r\n isSubmitted: false,\r\n };\r\n\r\n const vm2: ProcedureVM = {\r\n ...vm1,\r\n orderMatters: false,\r\n };\r\n\r\n expect(procedurePM.vmsAreEqual(vm1, vm2)).toBe(false);\r\n });\r\n\r\n it(\"provides default view model when entity is missing\", () => {\r\n const isolatedAppObjects = makeAppObjectRepo();\r\n const isolatedAppObject = isolatedAppObjects.getOrCreate(\"Isolated\");\r\n const isolatedPM = makeProcedurePM(isolatedAppObject);\r\n\r\n const vm = isolatedPM.lastVM;\r\n\r\n expect(vm).toBeDefined();\r\n expect(vm!.eventIds).toEqual([]);\r\n expect(vm!.orderMatters).toBe(true);\r\n expect(vm!.showHints).toBe(true);\r\n expect(vm!.isQuiz).toBe(false);\r\n });\r\n\r\n it(\"notifies subscribers when entity changes\", () => {\r\n let notificationCount = 0;\r\n let lastVM: ProcedureVM | null = null;\r\n\r\n const mockView = (vm: ProcedureVM) => {\r\n notificationCount++;\r\n lastVM = vm;\r\n };\r\n\r\n procedurePM.addView(mockView);\r\n\r\n expect(notificationCount).toBeGreaterThan(0);\r\n const initialCount = notificationCount;\r\n\r\n procedureEntity.addEventId(\"new_event\");\r\n\r\n expect(notificationCount).toBeGreaterThan(initialCount);\r\n expect(lastVM!.eventIds).toContain(\"new_event\");\r\n\r\n procedurePM.removeView(mockView);\r\n });\r\n});\r\n"]}
@@ -0,0 +1,128 @@
1
+ import { AppObjectUC } from "@vived/core";
2
+ import { BaseAppState } from "../../BaseApp";
3
+ import { ChallengeEntity } from "../../Challenge";
4
+ import { EventEntity } from "../../EventSystem";
5
+ import { StateMachineEntity } from "../../StateMachine";
6
+ import { clearUndoStack } from "../../UndoRedo";
7
+ import { AddProcedureEventUC } from "./AddProcedureEventUC";
8
+ import { ProcedureEntity } from "../Entities/ProcedureEntity";
9
+ import { PROCEDURE_SYSTEM_NAME } from "../types";
10
+ export class RecordProcedureSessionUC extends AppObjectUC {
11
+ }
12
+ RecordProcedureSessionUC.type = "RecordProcedureSessionUC";
13
+ RecordProcedureSessionUC.get = (appObjects) => appObjects
14
+ .getOrCreate("Procedure")
15
+ .getComponent(RecordProcedureSessionUC.type);
16
+ export function makeRecordProcedureSessionUC(appObject) {
17
+ return new RecordProcedureSessionUCImp(appObject);
18
+ }
19
+ class RecordProcedureSessionUCImp extends RecordProcedureSessionUC {
20
+ get procedureEntity() {
21
+ return ProcedureEntity.get(this.appObjects);
22
+ }
23
+ get baseAppState() {
24
+ return BaseAppState.get(this.appObjects);
25
+ }
26
+ get challengeEntity() {
27
+ return ChallengeEntity.get(this.appObjects);
28
+ }
29
+ get eventEntity() {
30
+ return EventEntity.get(this.appObjects);
31
+ }
32
+ get stateMachine() {
33
+ return StateMachineEntity.get(this.appObjects);
34
+ }
35
+ dispose() {
36
+ if (this.procedureEntity?.isRecording) {
37
+ this.eventEntity?.removeEmissionListener(this.onEmission);
38
+ this.baseAppState?.removeChangeObserver(this.onAuthoringChanged);
39
+ this.challengeEntity?.removeChangeObserver(this.onChallengeChanged);
40
+ }
41
+ this.savedState = undefined;
42
+ super.dispose();
43
+ }
44
+ constructor(appObject) {
45
+ super(appObject, RecordProcedureSessionUC.type);
46
+ this.startRecording = () => {
47
+ if (!this.baseAppState?.isAuthoring)
48
+ return;
49
+ if (this.challengeEntity?.selectedChallenge !== "PROCEDURE")
50
+ return;
51
+ const procedureEntity = this.procedureEntity;
52
+ if (!procedureEntity) {
53
+ this.warn("ProcedureEntity not found - cannot start recording");
54
+ return;
55
+ }
56
+ if (procedureEntity.isRecording)
57
+ return;
58
+ const eventEntity = this.eventEntity;
59
+ if (!eventEntity) {
60
+ this.warn("EventEntity not found - cannot start recording");
61
+ return;
62
+ }
63
+ const stateMachine = this.stateMachine;
64
+ if (stateMachine) {
65
+ this.savedState = stateMachine.getSerializedStates();
66
+ }
67
+ else {
68
+ this.warn("StateMachineEntity not found - scene state will not be restored on stop");
69
+ }
70
+ procedureEntity.setIsRecording(true);
71
+ eventEntity.addEmissionListener(this.onEmission);
72
+ this.baseAppState?.addChangeObserver(this.onAuthoringChanged);
73
+ this.challengeEntity?.addChangeObserver(this.onChallengeChanged);
74
+ };
75
+ this.stopRecording = () => {
76
+ const procedureEntity = this.procedureEntity;
77
+ if (!procedureEntity?.isRecording)
78
+ return;
79
+ procedureEntity.setIsRecording(false);
80
+ this.eventEntity?.removeEmissionListener(this.onEmission);
81
+ this.baseAppState?.removeChangeObserver(this.onAuthoringChanged);
82
+ this.challengeEntity?.removeChangeObserver(this.onChallengeChanged);
83
+ if (this.savedState) {
84
+ const stateMachine = this.stateMachine;
85
+ if (stateMachine) {
86
+ const merged = {
87
+ ...this.savedState,
88
+ systems: [...this.savedState.systems],
89
+ };
90
+ const currentProcedure = stateMachine
91
+ .getSerializedStates()
92
+ .systems.find((s) => s.name === PROCEDURE_SYSTEM_NAME);
93
+ if (currentProcedure) {
94
+ const idx = merged.systems.findIndex((s) => s.name === PROCEDURE_SYSTEM_NAME);
95
+ if (idx >= 0) {
96
+ merged.systems[idx] = currentProcedure;
97
+ }
98
+ else {
99
+ merged.systems.push(currentProcedure);
100
+ }
101
+ }
102
+ stateMachine.setSerializedStates(merged, stateMachine.restoreDurationS);
103
+ clearUndoStack(this.appObjects);
104
+ }
105
+ else {
106
+ this.warn("StateMachineEntity not found at stop - scene state not restored");
107
+ }
108
+ this.savedState = undefined;
109
+ }
110
+ };
111
+ this.onEmission = (eventId) => {
112
+ if (!this.procedureEntity?.isRecording)
113
+ return;
114
+ AddProcedureEventUC.get(this.appObjects)?.addEvent(eventId);
115
+ };
116
+ this.onAuthoringChanged = () => {
117
+ if (!this.baseAppState?.isAuthoring) {
118
+ this.stopRecording();
119
+ }
120
+ };
121
+ this.onChallengeChanged = () => {
122
+ if (this.challengeEntity?.selectedChallenge !== "PROCEDURE") {
123
+ this.stopRecording();
124
+ }
125
+ };
126
+ }
127
+ }
128
+ //# sourceMappingURL=RecordProcedureSessionUC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecordProcedureSessionUC.js","sourceRoot":"","sources":["../../../../src/Procedure/UCs/RecordProcedureSessionUC.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectUC, AppObjectRepo } from \"@vived/core\";\r\nimport { BaseAppState } from \"../../BaseApp\";\r\nimport { ChallengeEntity } from \"../../Challenge\";\r\nimport { EventEntity } from \"../../EventSystem\";\r\nimport { StateMachineEntity, SerializedStates } from \"../../StateMachine\";\r\nimport { clearUndoStack } from \"../../UndoRedo\";\r\nimport { AddProcedureEventUC } from \"./AddProcedureEventUC\";\r\nimport { ProcedureEntity } from \"../Entities/ProcedureEntity\";\r\nimport { PROCEDURE_SYSTEM_NAME } from \"../types\";\r\n\r\nexport abstract class RecordProcedureSessionUC extends AppObjectUC\r\n{\r\n\tstatic readonly type = \"RecordProcedureSessionUC\";\r\n\r\n\tabstract startRecording(): void;\r\n\tabstract stopRecording(): void;\r\n\r\n\tstatic get = (appObjects: AppObjectRepo): RecordProcedureSessionUC | undefined =>\r\n\t\tappObjects\r\n\t\t\t.getOrCreate(\"Procedure\")\r\n\t\t\t.getComponent<RecordProcedureSessionUC>(RecordProcedureSessionUC.type);\r\n}\r\n\r\nexport function makeRecordProcedureSessionUC(\r\n\tappObject: AppObject\r\n): RecordProcedureSessionUC\r\n{\r\n\treturn new RecordProcedureSessionUCImp(appObject);\r\n}\r\n\r\nclass RecordProcedureSessionUCImp extends RecordProcedureSessionUC\r\n{\r\n\tprivate savedState: SerializedStates | undefined;\r\n\r\n\tprivate get procedureEntity(): ProcedureEntity | undefined\r\n\t{\r\n\t\treturn ProcedureEntity.get(this.appObjects);\r\n\t}\r\n\r\n\tprivate get baseAppState(): BaseAppState | undefined\r\n\t{\r\n\t\treturn BaseAppState.get(this.appObjects);\r\n\t}\r\n\r\n\tprivate get challengeEntity(): ChallengeEntity | undefined\r\n\t{\r\n\t\treturn ChallengeEntity.get(this.appObjects);\r\n\t}\r\n\r\n\tprivate get eventEntity(): EventEntity | undefined\r\n\t{\r\n\t\treturn EventEntity.get(this.appObjects);\r\n\t}\r\n\r\n\tprivate get stateMachine(): StateMachineEntity | undefined\r\n\t{\r\n\t\treturn StateMachineEntity.get(this.appObjects);\r\n\t}\r\n\r\n\tstartRecording = (): void =>\r\n\t{\r\n\t\tif (!this.baseAppState?.isAuthoring) return;\r\n\t\tif (this.challengeEntity?.selectedChallenge !== \"PROCEDURE\") return;\r\n\r\n\t\tconst procedureEntity = this.procedureEntity;\r\n\t\tif (!procedureEntity)\r\n\t\t{\r\n\t\t\tthis.warn(\"ProcedureEntity not found - cannot start recording\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (procedureEntity.isRecording) return;\r\n\r\n\t\tconst eventEntity = this.eventEntity;\r\n\t\tif (!eventEntity)\r\n\t\t{\r\n\t\t\tthis.warn(\"EventEntity not found - cannot start recording\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst stateMachine = this.stateMachine;\r\n\t\tif (stateMachine)\r\n\t\t{\r\n\t\t\tthis.savedState = stateMachine.getSerializedStates();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis.warn(\"StateMachineEntity not found - scene state will not be restored on stop\");\r\n\t\t}\r\n\r\n\t\tprocedureEntity.setIsRecording(true);\r\n\t\teventEntity.addEmissionListener(this.onEmission);\r\n\t\tthis.baseAppState?.addChangeObserver(this.onAuthoringChanged);\r\n\t\tthis.challengeEntity?.addChangeObserver(this.onChallengeChanged);\r\n\t};\r\n\r\n\tstopRecording = (): void =>\r\n\t{\r\n\t\tconst procedureEntity = this.procedureEntity;\r\n\t\tif (!procedureEntity?.isRecording) return;\r\n\r\n\t\tprocedureEntity.setIsRecording(false);\r\n\t\tthis.eventEntity?.removeEmissionListener(this.onEmission);\r\n\t\tthis.baseAppState?.removeChangeObserver(this.onAuthoringChanged);\r\n\t\tthis.challengeEntity?.removeChangeObserver(this.onChallengeChanged);\r\n\r\n\t\tif (this.savedState)\r\n\t\t{\r\n\t\t\tconst stateMachine = this.stateMachine;\r\n\t\t\tif (stateMachine)\r\n\t\t\t{\r\n\t\t\t\tconst merged: SerializedStates = {\r\n\t\t\t\t\t...this.savedState,\r\n\t\t\t\t\tsystems: [...this.savedState.systems],\r\n\t\t\t\t};\r\n\r\n\t\t\t\tconst currentProcedure = stateMachine\r\n\t\t\t\t\t.getSerializedStates()\r\n\t\t\t\t\t.systems.find((s) => s.name === PROCEDURE_SYSTEM_NAME);\r\n\r\n\t\t\t\tif (currentProcedure)\r\n\t\t\t\t{\r\n\t\t\t\t\tconst idx = merged.systems.findIndex(\r\n\t\t\t\t\t\t(s) => s.name === PROCEDURE_SYSTEM_NAME\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (idx >= 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmerged.systems[idx] = currentProcedure;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmerged.systems.push(currentProcedure);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstateMachine.setSerializedStates(merged, stateMachine.restoreDurationS);\r\n\t\t\t\tclearUndoStack(this.appObjects);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.warn(\"StateMachineEntity not found at stop - scene state not restored\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.savedState = undefined;\r\n\t\t}\r\n\t};\r\n\r\n\tprivate onEmission = (eventId: string): void =>\r\n\t{\r\n\t\tif (!this.procedureEntity?.isRecording) return;\r\n\t\tAddProcedureEventUC.get(this.appObjects)?.addEvent(eventId);\r\n\t};\r\n\r\n\tprivate onAuthoringChanged = (): void =>\r\n\t{\r\n\t\tif (!this.baseAppState?.isAuthoring)\r\n\t\t{\r\n\t\t\tthis.stopRecording();\r\n\t\t}\r\n\t};\r\n\r\n\tprivate onChallengeChanged = (): void =>\r\n\t{\r\n\t\tif (this.challengeEntity?.selectedChallenge !== \"PROCEDURE\")\r\n\t\t{\r\n\t\t\tthis.stopRecording();\r\n\t\t}\r\n\t};\r\n\r\n\tdispose(): void\r\n\t{\r\n\t\tif (this.procedureEntity?.isRecording)\r\n\t\t{\r\n\t\t\tthis.eventEntity?.removeEmissionListener(this.onEmission);\r\n\t\t\tthis.baseAppState?.removeChangeObserver(this.onAuthoringChanged);\r\n\t\t\tthis.challengeEntity?.removeChangeObserver(this.onChallengeChanged);\r\n\t\t}\r\n\t\tthis.savedState = undefined;\r\n\t\tsuper.dispose();\r\n\t}\r\n\r\n\tconstructor(appObject: AppObject)\r\n\t{\r\n\t\tsuper(appObject, RecordProcedureSessionUC.type);\r\n\t}\r\n}\r\n"]}