@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.
- package/dist/cjs/Procedure/Adapters/procedureAdapter.js +1 -0
- package/dist/cjs/Procedure/Adapters/procedureAdapter.js.map +1 -1
- package/dist/cjs/Procedure/Entities/ProcedureEntity.js +9 -0
- package/dist/cjs/Procedure/Entities/ProcedureEntity.js.map +1 -1
- package/dist/cjs/Procedure/Factories/ProcedureFeatureFactory.js +2 -0
- package/dist/cjs/Procedure/Factories/ProcedureFeatureFactory.js.map +1 -1
- package/dist/cjs/Procedure/Mocks/MockProcedureEntity.js +7 -0
- package/dist/cjs/Procedure/Mocks/MockProcedureEntity.js.map +1 -1
- package/dist/cjs/Procedure/PM/ProcedurePM.js +3 -0
- package/dist/cjs/Procedure/PM/ProcedurePM.js.map +1 -1
- package/dist/cjs/Procedure/PM/ProcedurePM.test.js +2 -0
- package/dist/cjs/Procedure/PM/ProcedurePM.test.js.map +1 -1
- package/dist/cjs/Procedure/UCs/RecordProcedureSessionUC.js +133 -0
- package/dist/cjs/Procedure/UCs/RecordProcedureSessionUC.js.map +1 -0
- package/dist/cjs/Procedure/UCs/RecordProcedureSessionUC.test.js +283 -0
- package/dist/cjs/Procedure/UCs/RecordProcedureSessionUC.test.js.map +1 -0
- package/dist/cjs/Procedure/UCs/SerializeProcedure.js +2 -1
- package/dist/cjs/Procedure/UCs/SerializeProcedure.js.map +1 -1
- package/dist/cjs/Procedure/UCs/index.js +1 -0
- package/dist/cjs/Procedure/UCs/index.js.map +1 -1
- package/dist/cjs/Procedure/types.js +2 -0
- package/dist/cjs/Procedure/types.js.map +1 -1
- package/dist/esm/Procedure/Adapters/procedureAdapter.js +1 -0
- package/dist/esm/Procedure/Adapters/procedureAdapter.js.map +1 -1
- package/dist/esm/Procedure/Entities/ProcedureEntity.js +9 -0
- package/dist/esm/Procedure/Entities/ProcedureEntity.js.map +1 -1
- package/dist/esm/Procedure/Factories/ProcedureFeatureFactory.js +2 -0
- package/dist/esm/Procedure/Factories/ProcedureFeatureFactory.js.map +1 -1
- package/dist/esm/Procedure/Mocks/MockProcedureEntity.js +7 -0
- package/dist/esm/Procedure/Mocks/MockProcedureEntity.js.map +1 -1
- package/dist/esm/Procedure/PM/ProcedurePM.js +3 -0
- package/dist/esm/Procedure/PM/ProcedurePM.js.map +1 -1
- package/dist/esm/Procedure/PM/ProcedurePM.test.js +2 -0
- package/dist/esm/Procedure/PM/ProcedurePM.test.js.map +1 -1
- package/dist/esm/Procedure/UCs/RecordProcedureSessionUC.js +128 -0
- package/dist/esm/Procedure/UCs/RecordProcedureSessionUC.js.map +1 -0
- package/dist/esm/Procedure/UCs/RecordProcedureSessionUC.test.js +281 -0
- package/dist/esm/Procedure/UCs/RecordProcedureSessionUC.test.js.map +1 -0
- package/dist/esm/Procedure/UCs/SerializeProcedure.js +2 -1
- package/dist/esm/Procedure/UCs/SerializeProcedure.js.map +1 -1
- package/dist/esm/Procedure/UCs/index.js +1 -0
- package/dist/esm/Procedure/UCs/index.js.map +1 -1
- package/dist/esm/Procedure/types.js +1 -1
- package/dist/esm/Procedure/types.js.map +1 -1
- package/dist/types/Procedure/Adapters/procedureAdapter.d.ts.map +1 -1
- package/dist/types/Procedure/Entities/ProcedureEntity.d.ts +2 -0
- package/dist/types/Procedure/Entities/ProcedureEntity.d.ts.map +1 -1
- package/dist/types/Procedure/Factories/ProcedureFeatureFactory.d.ts.map +1 -1
- package/dist/types/Procedure/Mocks/MockProcedureEntity.d.ts +3 -0
- package/dist/types/Procedure/Mocks/MockProcedureEntity.d.ts.map +1 -1
- package/dist/types/Procedure/UCs/RecordProcedureSessionUC.d.ts +9 -0
- package/dist/types/Procedure/UCs/RecordProcedureSessionUC.d.ts.map +1 -0
- package/dist/types/Procedure/UCs/RecordProcedureSessionUC.test.d.ts +2 -0
- package/dist/types/Procedure/UCs/RecordProcedureSessionUC.test.d.ts.map +1 -0
- package/dist/types/Procedure/UCs/SerializeProcedure.d.ts.map +1 -1
- package/dist/types/Procedure/UCs/index.d.ts +1 -0
- package/dist/types/Procedure/UCs/index.d.ts.map +1 -1
- package/dist/types/Procedure/types.d.ts +2 -0
- package/dist/types/Procedure/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Procedure/CONTEXT.md +21 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProcedureFeatureFactory.js","sourceRoot":"","sources":["../../../../src/Procedure/Factories/ProcedureFeatureFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAiB,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,mBAAmB,EACnB,eAAe,GAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,8BAA8B,EAAE,MAAM,mCAAmC,CAAC;AACnF,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,+BAA+B,EAAE,MAAM,oCAAoC,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEjE,MAAM,OAAO,uBAAwB,SAAQ,aAAa;IAA1D;;QACE,gBAAW,GAAG,yBAAyB,CAAC;
|
|
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":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,OAAO,mBAAoB,SAAQ,eAAe;
|
|
1
|
+
{"version":3,"file":"MockProcedureEntity.js","sourceRoot":"","sources":["../../../../src/Procedure/Mocks/MockProcedureEntity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IAgBtD,IAAI,WAAW;QACb,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IACD,IAAI,gBAAgB;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IACD,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACD,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IACD,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IACD,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IACD,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACD,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IACD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAmCD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAzFjC,cAAS,GAAa,EAAE,CAAC;QACzB,kBAAa,GAAG,IAAI,CAAC;QACrB,eAAU,GAAG,IAAI,CAAC;QAClB,YAAO,GAAG,KAAK,CAAC;QAChB,iBAAY,GAAG,KAAK,CAAC;QACrB,kBAAa,GAAa,EAAE,CAAC;QAC7B,sBAAiB,GAAG,CAAC,CAAC;QACtB,gBAAW,GAAG,KAAK,CAAC;QACpB,uBAAkB,GAAkB,IAAI,CAAC;QACzC,WAAM,GAGH,IAAI,CAAC;QACR,iBAAY,GAAG,KAAK,CAAC;QA0C7B,eAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAU,EAAE,EAAE;YAClC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,kBAAa,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC1B,kBAAa,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YAC3B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,oBAAe,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC5B,qBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACvC,yBAAoB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC3C,UAAK,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YACnB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;YACxB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,gBAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACxB,kBAAa,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC1B,kCAA6B,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACpD,oBAAe,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAU,EAAE,EAAE;YACvC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,iBAAY,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAU,EAAE,EAAE;YACpC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,cAAS,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAU,EAAE,EAAE;YACjC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,mBAAc,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAU,EAAE,EAAE;YACtC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,0BAAqB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACzC,mBAAc,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACpE,WAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAInB,CAAC;CACF;AAED,MAAM,UAAU,uBAAuB,CAAC,UAAyB;IAC/D,OAAO,IAAI,mBAAmB,CAC5B,UAAU,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAC9C,CAAC;AACJ,CAAC","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":"AAAA,OAAO,EAEL,WAAW,EAEX,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,MAAM,OAAgB,WAAY,SAAQ,WAAwB;;AAChD,gBAAI,GAAG,aAAa,CAAC;AAE9B,eAAG,GAAG,CAAC,UAAyB,EAA2B,EAAE,CAClE,qBAAqB,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAGxD,MAAM,UAAU,eAAe,CAAC,SAAoB;IAClD,OAAO,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,cAAe,SAAQ,WAAW;IACtC,IAAY,eAAe;QACzB,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,IAAY,WAAW;QACrB,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED,WAAW,CAAC,CAAc,EAAE,CAAc;QACxC,OAAO,CACL,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;YACzD,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,YAAY;YACjC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS;YAC3B,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YACrB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;YACjE,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,gBAAgB;YACzC,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU;YAC7B,CAAC,CAAC,iBAAiB,KAAK,CAAC,CAAC,iBAAiB;YAC3C,CAAC,CAAC,iBAAiB,KAAK,CAAC,CAAC,iBAAiB;YAC3C,CAAC,CAAC,kBAAkB,KAAK,CAAC,CAAC,kBAAkB;YAC7C,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC;YACvE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;YACnD,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,CAChC,CAAC;IACJ,CAAC;
|
|
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":"AAAA,OAAO,EAAiB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAmB,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAG7D,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,UAAyB,CAAC;IAC9B,IAAI,eAAgC,CAAC;IACrC,IAAI,WAAwB,CAAC;IAE7B,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAEtD,eAAe,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACjD,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC5C,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC;QAE9B,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,CAAC,EAAG,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,EAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,EAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,EAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,CAAC,EAAG,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,EAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,EAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,EAAG,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,EAAG,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,EAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,EAAG,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,eAAe,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAC3C,eAAe,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAC3C,eAAe,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACvC,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACpC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEhC,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC;QAE9B,MAAM,CAAC,EAAG,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,EAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,EAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,CAAC,EAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACrD,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACtC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAEtC,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAE3C,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC;QAC9B,MAAM,CAAC,EAAG,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,EAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,MAAM,GAAG,GAAgB;YACvB,QAAQ,EAAE,CAAC,SAAS,CAAC;YACrB,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,SAAS;YAC5B,kBAAkB,EAAE,CAAC;YACrB,eAAe,EAAE,EAAE;YACnB,0BAA0B,EAAE,IAAI;YAChC,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,KAAK;SACnB,CAAC;QAEF,MAAM,GAAG,GAAgB,EAAE,GAAG,GAAG,EAAE,CAAC;QAEpC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,GAAG,GAAgB;YACvB,QAAQ,EAAE,CAAC,SAAS,CAAC;YACrB,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,SAAS;YAC5B,kBAAkB,EAAE,CAAC;YACrB,eAAe,EAAE,EAAE;YACnB,0BAA0B,EAAE,IAAI;YAChC,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,KAAK;SACnB,CAAC;QAEF,MAAM,GAAG,GAAgB;YACvB,GAAG,GAAG;YACN,YAAY,EAAE,KAAK;SACpB,CAAC;QAEF,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC1D,MAAM,kBAAkB,GAAG,iBAAiB,EAAE,CAAC;QAC/C,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC;QAEtD,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC;QAE7B,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,CAAC,EAAG,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,EAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,EAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,EAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAChD,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,IAAI,MAAM,GAAuB,IAAI,CAAC;QAEtC,MAAM,QAAQ,GAAG,CAAC,EAAe,EAAE,EAAE;YACnC,iBAAiB,EAAE,CAAC;YACpB,MAAM,GAAG,EAAE,CAAC;QACd,CAAC,CAAC;QAEF,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE9B,MAAM,CAAC,iBAAiB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,iBAAiB,CAAC;QAEvC,eAAe,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,iBAAiB,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,MAAO,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAEhD,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC","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":"AAAA,OAAO,EAAa,WAAW,EAAiB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAoB,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,OAAgB,wBAAyB,SAAQ,WAAW;;AAEjD,6BAAI,GAAG,0BAA0B,CAAC;AAK3C,4BAAG,GAAG,CAAC,UAAyB,EAAwC,EAAE,CAChF,UAAU;KACR,WAAW,CAAC,WAAW,CAAC;KACxB,YAAY,CAA2B,wBAAwB,CAAC,IAAI,CAAC,CAAC;AAG1E,MAAM,UAAU,4BAA4B,CAC3C,SAAoB;IAGpB,OAAO,IAAI,2BAA2B,CAAC,SAAS,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,2BAA4B,SAAQ,wBAAwB;IAIjE,IAAY,eAAe;QAE1B,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED,IAAY,YAAY;QAEvB,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED,IAAY,eAAe;QAE1B,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED,IAAY,WAAW;QAEtB,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAED,IAAY,YAAY;QAEvB,OAAO,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IAgHD,OAAO;QAEN,IAAI,IAAI,CAAC,eAAe,EAAE,WAAW,EACrC,CAAC;YACA,IAAI,CAAC,WAAW,EAAE,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1D,IAAI,CAAC,YAAY,EAAE,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACjE,IAAI,CAAC,eAAe,EAAE,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,KAAK,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,YAAY,SAAoB;QAE/B,KAAK,CAAC,SAAS,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC;QA5HjD,mBAAc,GAAG,GAAS,EAAE;YAE3B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW;gBAAE,OAAO;YAC5C,IAAI,IAAI,CAAC,eAAe,EAAE,iBAAiB,KAAK,WAAW;gBAAE,OAAO;YAEpE,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;YAC7C,IAAI,CAAC,eAAe,EACpB,CAAC;gBACA,IAAI,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;gBAChE,OAAO;YACR,CAAC;YAED,IAAI,eAAe,CAAC,WAAW;gBAAE,OAAO;YAExC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YACrC,IAAI,CAAC,WAAW,EAChB,CAAC;gBACA,IAAI,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;gBAC5D,OAAO;YACR,CAAC;YAED,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YACvC,IAAI,YAAY,EAChB,CAAC;gBACA,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,mBAAmB,EAAE,CAAC;YACtD,CAAC;iBAED,CAAC;gBACA,IAAI,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;YACtF,CAAC;YAED,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACrC,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACjD,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC9D,IAAI,CAAC,eAAe,EAAE,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClE,CAAC,CAAC;QAEF,kBAAa,GAAG,GAAS,EAAE;YAE1B,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;YAC7C,IAAI,CAAC,eAAe,EAAE,WAAW;gBAAE,OAAO;YAE1C,eAAe,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC,WAAW,EAAE,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1D,IAAI,CAAC,YAAY,EAAE,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACjE,IAAI,CAAC,eAAe,EAAE,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAEpE,IAAI,IAAI,CAAC,UAAU,EACnB,CAAC;gBACA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;gBACvC,IAAI,YAAY,EAChB,CAAC;oBACA,MAAM,MAAM,GAAqB;wBAChC,GAAG,IAAI,CAAC,UAAU;wBAClB,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;qBACrC,CAAC;oBAEF,MAAM,gBAAgB,GAAG,YAAY;yBACnC,mBAAmB,EAAE;yBACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAC;oBAExD,IAAI,gBAAgB,EACpB,CAAC;wBACA,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAqB,CACvC,CAAC;wBACF,IAAI,GAAG,IAAI,CAAC,EACZ,CAAC;4BACA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC;wBACxC,CAAC;6BAED,CAAC;4BACA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;wBACvC,CAAC;oBACF,CAAC;oBAED,YAAY,CAAC,mBAAmB,CAAC,MAAM,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC;oBACxE,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACjC,CAAC;qBAED,CAAC;oBACA,IAAI,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;gBAC9E,CAAC;gBAED,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC7B,CAAC;QACF,CAAC,CAAC;QAEM,eAAU,GAAG,CAAC,OAAe,EAAQ,EAAE;YAE9C,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW;gBAAE,OAAO;YAC/C,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC7D,CAAC,CAAC;QAEM,uBAAkB,GAAG,GAAS,EAAE;YAEvC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,EACnC,CAAC;gBACA,IAAI,CAAC,aAAa,EAAE,CAAC;YACtB,CAAC;QACF,CAAC,CAAC;QAEM,uBAAkB,GAAG,GAAS,EAAE;YAEvC,IAAI,IAAI,CAAC,eAAe,EAAE,iBAAiB,KAAK,WAAW,EAC3D,CAAC;gBACA,IAAI,CAAC,aAAa,EAAE,CAAC;YACtB,CAAC;QACF,CAAC,CAAC;IAiBF,CAAC;CACD","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"]}
|