@vived/host 4.5.2 → 4.6.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 (79) hide show
  1. package/dist/cjs/Apps/Entities/AppEntity.js +29 -3
  2. package/dist/cjs/Apps/Entities/AppEntity.js.map +1 -1
  3. package/dist/cjs/Apps/PMs/AppPM.js +44 -3
  4. package/dist/cjs/Apps/PMs/AppPM.js.map +1 -1
  5. package/dist/cjs/Assets/Adapters/assetFileAdapter.js +45 -0
  6. package/dist/cjs/Assets/Adapters/assetFileAdapter.js.map +1 -0
  7. package/dist/cjs/Assets/Adapters/index.js +1 -0
  8. package/dist/cjs/Assets/Adapters/index.js.map +1 -1
  9. package/dist/cjs/Assets/Factories/setupAssetsForSandbox.js +1 -0
  10. package/dist/cjs/Assets/Factories/setupAssetsForSandbox.js.map +1 -1
  11. package/dist/cjs/Assets/Mocks/AssetFilePMMock.js +24 -0
  12. package/dist/cjs/Assets/Mocks/AssetFilePMMock.js.map +1 -0
  13. package/dist/cjs/Assets/Mocks/index.js +1 -0
  14. package/dist/cjs/Assets/Mocks/index.js.map +1 -1
  15. package/dist/cjs/Assets/PMs/AssetFilePM.js +134 -0
  16. package/dist/cjs/Assets/PMs/AssetFilePM.js.map +1 -0
  17. package/dist/cjs/Assets/PMs/index.js +1 -0
  18. package/dist/cjs/Assets/PMs/index.js.map +1 -1
  19. package/dist/cjs/ChallengeResults/Entities/ChallengeResults.js.map +1 -1
  20. package/dist/cjs/ChallengeResults/PMs/ChallengeResultsListPM.js +28 -5
  21. package/dist/cjs/ChallengeResults/PMs/ChallengeResultsListPM.js.map +1 -1
  22. package/dist/cjs/ChallengeResults/PMs/ChallengeScoreListPM.js +9 -3
  23. package/dist/cjs/ChallengeResults/PMs/ChallengeScoreListPM.js.map +1 -1
  24. package/dist/cjs/ChallengeResults/PMs/HasChallengeResultsPM.js +20 -1
  25. package/dist/cjs/ChallengeResults/PMs/HasChallengeResultsPM.js.map +1 -1
  26. package/dist/cjs/Handler/UCs/index.js +0 -1
  27. package/dist/cjs/Handler/UCs/index.js.map +1 -1
  28. package/dist/esm/Apps/Entities/AppEntity.js +30 -4
  29. package/dist/esm/Apps/Entities/AppEntity.js.map +1 -1
  30. package/dist/esm/Apps/PMs/AppPM.js +44 -3
  31. package/dist/esm/Apps/PMs/AppPM.js.map +1 -1
  32. package/dist/esm/Assets/Adapters/assetFileAdapter.js +42 -0
  33. package/dist/esm/Assets/Adapters/assetFileAdapter.js.map +1 -0
  34. package/dist/esm/Assets/Adapters/index.js +1 -0
  35. package/dist/esm/Assets/Adapters/index.js.map +1 -1
  36. package/dist/esm/Assets/Factories/setupAssetsForSandbox.js +2 -1
  37. package/dist/esm/Assets/Factories/setupAssetsForSandbox.js.map +1 -1
  38. package/dist/esm/Assets/Mocks/AssetFilePMMock.js +20 -0
  39. package/dist/esm/Assets/Mocks/AssetFilePMMock.js.map +1 -0
  40. package/dist/esm/Assets/Mocks/index.js +1 -0
  41. package/dist/esm/Assets/Mocks/index.js.map +1 -1
  42. package/dist/esm/Assets/PMs/AssetFilePM.js +129 -0
  43. package/dist/esm/Assets/PMs/AssetFilePM.js.map +1 -0
  44. package/dist/esm/Assets/PMs/index.js +1 -0
  45. package/dist/esm/Assets/PMs/index.js.map +1 -1
  46. package/dist/esm/ChallengeResults/Entities/ChallengeResults.js.map +1 -1
  47. package/dist/esm/ChallengeResults/PMs/ChallengeResultsListPM.js +28 -5
  48. package/dist/esm/ChallengeResults/PMs/ChallengeResultsListPM.js.map +1 -1
  49. package/dist/esm/ChallengeResults/PMs/ChallengeScoreListPM.js +9 -3
  50. package/dist/esm/ChallengeResults/PMs/ChallengeScoreListPM.js.map +1 -1
  51. package/dist/esm/ChallengeResults/PMs/HasChallengeResultsPM.js +20 -1
  52. package/dist/esm/ChallengeResults/PMs/HasChallengeResultsPM.js.map +1 -1
  53. package/dist/esm/Handler/UCs/index.js +0 -1
  54. package/dist/esm/Handler/UCs/index.js.map +1 -1
  55. package/dist/types/Apps/Entities/AppEntity.d.ts +1 -0
  56. package/dist/types/Apps/Entities/AppEntity.d.ts.map +1 -1
  57. package/dist/types/Apps/PMs/AppPM.d.ts +2 -0
  58. package/dist/types/Apps/PMs/AppPM.d.ts.map +1 -1
  59. package/dist/types/Assets/Adapters/assetFileAdapter.d.ts +8 -0
  60. package/dist/types/Assets/Adapters/assetFileAdapter.d.ts.map +1 -0
  61. package/dist/types/Assets/Adapters/index.d.ts +1 -0
  62. package/dist/types/Assets/Adapters/index.d.ts.map +1 -1
  63. package/dist/types/Assets/Factories/setupAssetsForSandbox.d.ts.map +1 -1
  64. package/dist/types/Assets/Mocks/AssetFilePMMock.d.ts +19 -0
  65. package/dist/types/Assets/Mocks/AssetFilePMMock.d.ts.map +1 -0
  66. package/dist/types/Assets/Mocks/index.d.ts +1 -0
  67. package/dist/types/Assets/Mocks/index.d.ts.map +1 -1
  68. package/dist/types/Assets/PMs/AssetFilePM.d.ts +51 -0
  69. package/dist/types/Assets/PMs/AssetFilePM.d.ts.map +1 -0
  70. package/dist/types/Assets/PMs/index.d.ts +1 -0
  71. package/dist/types/Assets/PMs/index.d.ts.map +1 -1
  72. package/dist/types/ChallengeResults/Entities/ChallengeResults.d.ts.map +1 -1
  73. package/dist/types/ChallengeResults/PMs/ChallengeResultsListPM.d.ts +2 -2
  74. package/dist/types/ChallengeResults/PMs/ChallengeResultsListPM.d.ts.map +1 -1
  75. package/dist/types/ChallengeResults/PMs/ChallengeScoreListPM.d.ts.map +1 -1
  76. package/dist/types/ChallengeResults/PMs/HasChallengeResultsPM.d.ts.map +1 -1
  77. package/dist/types/Handler/UCs/index.d.ts +0 -1
  78. package/dist/types/Handler/UCs/index.d.ts.map +1 -1
  79. package/package.json +3 -3
@@ -5,6 +5,7 @@ exports.makeChallengeResultsPM = makeChallengeResultsPM;
5
5
  const core_1 = require("@vived/core");
6
6
  const HostStateMachine_1 = require("../../StateMachine/Entities/HostStateMachine");
7
7
  const ChallengeResults_1 = require("../Entities/ChallengeResults");
8
+ const StateMachine_1 = require("../../StateMachine");
8
9
  class ChallengeResultsListPM extends core_1.AppObjectPM {
9
10
  static get(appObjects) {
10
11
  return appObjects.getSingleton(ChallengeResultsListPM.type);
@@ -41,12 +42,19 @@ class ChallengeResultsPMImp extends ChallengeResultsListPM {
41
42
  if (!this.results || !this.stateMachine)
42
43
  return;
43
44
  const organizedResults = [];
44
- this.results.results.forEach((result) => {
45
- const state = this.stateMachine.getStateByID(result.slideID);
46
- if (state) {
47
- const stateIndex = this.stateMachine.getStateIndex(result.slideID) ?? -1;
45
+ // Get all states from state machine
46
+ const stateIds = this.stateMachine.states;
47
+ // Process each state
48
+ stateIds.forEach((stateId) => {
49
+ const state = this.stateMachine.getStateByID(stateId);
50
+ if (!state)
51
+ return;
52
+ const stateIndex = this.stateMachine.getStateIndex(stateId) ?? -1;
53
+ const result = this.results.getResultForSlide(stateId);
54
+ // If state has a result, add it with all result data
55
+ if (result) {
48
56
  const vm = {
49
- id: result.slideID,
57
+ id: stateId,
50
58
  slideName: state.name,
51
59
  attempts: result.tries,
52
60
  resultType: result.type,
@@ -56,11 +64,26 @@ class ChallengeResultsPMImp extends ChallengeResultsListPM {
56
64
  };
57
65
  organizedResults.push(vm);
58
66
  }
67
+ // If state has no result but has expected response that's not NONE, add it with partial data
68
+ else if (state.expectedResponse !== undefined &&
69
+ state.expectedResponse !== StateMachine_1.ChallengeResponse.NONE) {
70
+ const vm = {
71
+ id: stateId,
72
+ slideName: state.name,
73
+ attempts: 0,
74
+ stateIndex,
75
+ message: "Incomplete"
76
+ };
77
+ organizedResults.push(vm);
78
+ }
59
79
  });
60
80
  this.doUpdateView(organizedResults);
61
81
  };
62
82
  this.doUpdateView([]);
63
83
  this.results?.addChangeObserver(this.onEntityChange);
84
+ this.stateMachine?.addChangeObserver(this.onEntityChange);
85
+ // Initial update
86
+ this.onEntityChange();
64
87
  this.appObjects.registerSingleton(this);
65
88
  }
66
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ChallengeResultsListPM.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/PMs/ChallengeResultsListPM.ts"],"names":[],"mappings":";;;AAuCA,wDAIC;AA3CD,sCAAoE;AACpE,mFAAgF;AAChF,mEAQsC;AAiBtC,MAAsB,sBAAuB,SAAQ,kBAEpD;IAGC,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,UAAU,CAAC,YAAY,CAC5B,sBAAsB,CAAC,IAAI,CAC5B,CAAC;IACJ,CAAC;;AATH,wDAUC;AAPQ,2BAAI,GAAG,wBAAwB,CAAC;AASzC,SAAgB,sBAAsB,CACpC,SAAoB;IAEpB,OAAO,IAAI,qBAAqB,CAAC,SAAS,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,qBAAsB,SAAQ,sBAAsB;IACxD,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,kBAAkB,CAC5B,yCAAsB,CAAC,IAAI,CAC5B,CAAC;IACJ,CAAC;IAED,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,mCAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW,CAAC,CAAsB,EAAE,CAAsB;QACxD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAExC,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YACvB,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE;gBAAE,QAAQ,GAAG,KAAK,CAAC;iBAC3C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ;gBAAE,QAAQ,GAAG,KAAK,CAAC;QACnE,CAAC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IA8BD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;QA7BhD,mBAAc,GAAG,GAAS,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,OAAO;YAEhD,MAAM,gBAAgB,GAAwB,EAAE,CAAC;YAEjD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAa,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC9D,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,UAAU,GACd,IAAI,CAAC,YAAa,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;oBAEzD,MAAM,EAAE,GAAsB;wBAC5B,EAAE,EAAE,MAAM,CAAC,OAAO;wBAClB,SAAS,EAAE,KAAK,CAAC,IAAI;wBACrB,QAAQ,EAAE,MAAM,CAAC,KAAK;wBACtB,UAAU,EAAE,MAAM,CAAC,IAAI;wBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,UAAU;wBACV,UAAU,EAAE,MAAM,CAAC,UAAU;qBAC9B,CAAC;oBAEF,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;QACtC,CAAC,CAAC;QAIA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACtB,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAErD,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import { AppObject, AppObjectPM, AppObjectRepo } from \"@vived/core\";\r\nimport { HostStateMachine } from \"../../StateMachine/Entities/HostStateMachine\";\r\nimport {\r\n ChallengeResultHitData,\r\n ChallengeResultMultiHitData,\r\n ChallengeResultProgressData,\r\n ChallengeResultQualityData,\r\n ChallengeResultScoreData,\r\n ChallengeResultsEntity,\r\n ChallengeResultType\r\n} from \"../Entities/ChallengeResults\";\r\n\r\nexport interface ChallengeResultVM {\r\n id: string;\r\n slideName: string;\r\n attempts: number;\r\n message: string;\r\n resultType: ChallengeResultType;\r\n stateIndex: number;\r\n resultData:\r\n | ChallengeResultHitData\r\n | ChallengeResultMultiHitData\r\n | ChallengeResultQualityData\r\n | ChallengeResultScoreData\r\n | ChallengeResultProgressData;\r\n}\r\n\r\nexport abstract class ChallengeResultsListPM extends AppObjectPM<\r\n ChallengeResultVM[]\r\n> {\r\n static type = \"ChallengeResultsListPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return appObjects.getSingleton<ChallengeResultsListPM>(\r\n ChallengeResultsListPM.type\r\n );\r\n }\r\n}\r\n\r\nexport function makeChallengeResultsPM(\r\n appObject: AppObject\r\n): ChallengeResultsListPM {\r\n return new ChallengeResultsPMImp(appObject);\r\n}\r\n\r\nclass ChallengeResultsPMImp extends ChallengeResultsListPM {\r\n private get results() {\r\n return this.getCachedSingleton<ChallengeResultsEntity>(\r\n ChallengeResultsEntity.type\r\n );\r\n }\r\n\r\n private get stateMachine() {\r\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\r\n }\r\n\r\n vmsAreEqual(a: ChallengeResultVM[], b: ChallengeResultVM[]): boolean {\r\n if (a.length !== b.length) return false;\r\n\r\n let areEqual = true;\r\n a.forEach((aResult, i) => {\r\n const bResult = b[i];\r\n if (aResult.id !== bResult.id) areEqual = false;\r\n else if (aResult.attempts !== bResult.attempts) areEqual = false;\r\n });\r\n return areEqual;\r\n }\r\n\r\n onEntityChange = (): void => {\r\n if (!this.results || !this.stateMachine) return;\r\n\r\n const organizedResults: ChallengeResultVM[] = [];\r\n\r\n this.results.results.forEach((result) => {\r\n const state = this.stateMachine!.getStateByID(result.slideID);\r\n if (state) {\r\n const stateIndex =\r\n this.stateMachine!.getStateIndex(result.slideID) ?? -1;\r\n\r\n const vm: ChallengeResultVM = {\r\n id: result.slideID,\r\n slideName: state.name,\r\n attempts: result.tries,\r\n resultType: result.type,\r\n message: result.message,\r\n stateIndex,\r\n resultData: result.resultData\r\n };\r\n\r\n organizedResults.push(vm);\r\n }\r\n });\r\n\r\n this.doUpdateView(organizedResults);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ChallengeResultsListPM.type);\r\n this.doUpdateView([]);\r\n this.results?.addChangeObserver(this.onEntityChange);\r\n\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ChallengeResultsListPM.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/PMs/ChallengeResultsListPM.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectPM, AppObjectRepo } from \"@vived/core\";\r\nimport { HostStateMachine } from \"../../StateMachine/Entities/HostStateMachine\";\r\nimport {\r\n ChallengeResultHitData,\r\n ChallengeResultMultiHitData,\r\n ChallengeResultProgressData,\r\n ChallengeResultQualityData,\r\n ChallengeResultScoreData,\r\n ChallengeResultsEntity,\r\n ChallengeResultType\r\n} from \"../Entities/ChallengeResults\";\r\nimport { ChallengeResponse } from \"../../StateMachine\";\r\n\r\nexport interface ChallengeResultVM {\r\n id: string;\r\n slideName: string;\r\n attempts: number;\r\n message: string;\r\n resultType?: ChallengeResultType;\r\n stateIndex: number;\r\n resultData?:\r\n | ChallengeResultHitData\r\n | ChallengeResultMultiHitData\r\n | ChallengeResultQualityData\r\n | ChallengeResultScoreData\r\n | ChallengeResultProgressData;\r\n}\r\n\r\nexport abstract class ChallengeResultsListPM extends AppObjectPM<\r\n ChallengeResultVM[]\r\n> {\r\n static type = \"ChallengeResultsListPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return appObjects.getSingleton<ChallengeResultsListPM>(\r\n ChallengeResultsListPM.type\r\n );\r\n }\r\n}\r\n\r\nexport function makeChallengeResultsPM(\r\n appObject: AppObject\r\n): ChallengeResultsListPM {\r\n return new ChallengeResultsPMImp(appObject);\r\n}\r\n\r\nclass ChallengeResultsPMImp extends ChallengeResultsListPM {\r\n private get results() {\r\n return this.getCachedSingleton<ChallengeResultsEntity>(\r\n ChallengeResultsEntity.type\r\n );\r\n }\r\n\r\n private get stateMachine() {\r\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\r\n }\r\n\r\n vmsAreEqual(a: ChallengeResultVM[], b: ChallengeResultVM[]): boolean {\r\n if (a.length !== b.length) return false;\r\n\r\n let areEqual = true;\r\n a.forEach((aResult, i) => {\r\n const bResult = b[i];\r\n if (aResult.id !== bResult.id) areEqual = false;\r\n else if (aResult.attempts !== bResult.attempts) areEqual = false;\r\n });\r\n return areEqual;\r\n }\r\n\r\n onEntityChange = (): void => {\r\n if (!this.results || !this.stateMachine) return;\r\n\r\n const organizedResults: ChallengeResultVM[] = [];\r\n\r\n // Get all states from state machine\r\n const stateIds = this.stateMachine.states;\r\n\r\n // Process each state\r\n stateIds.forEach((stateId) => {\r\n const state = this.stateMachine!.getStateByID(stateId);\r\n if (!state) return;\r\n\r\n const stateIndex = this.stateMachine!.getStateIndex(stateId) ?? -1;\r\n const result = this.results!.getResultForSlide(stateId);\r\n\r\n // If state has a result, add it with all result data\r\n if (result) {\r\n const vm: ChallengeResultVM = {\r\n id: stateId,\r\n slideName: state.name,\r\n attempts: result.tries,\r\n resultType: result.type,\r\n message: result.message,\r\n stateIndex,\r\n resultData: result.resultData\r\n };\r\n\r\n organizedResults.push(vm);\r\n }\r\n // If state has no result but has expected response that's not NONE, add it with partial data\r\n else if (\r\n state.expectedResponse !== undefined &&\r\n state.expectedResponse !== ChallengeResponse.NONE\r\n ) {\r\n const vm: ChallengeResultVM = {\r\n id: stateId,\r\n slideName: state.name,\r\n attempts: 0,\r\n stateIndex,\r\n message: \"Incomplete\"\r\n };\r\n\r\n organizedResults.push(vm);\r\n }\r\n });\r\n\r\n this.doUpdateView(organizedResults);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ChallengeResultsListPM.type);\r\n this.doUpdateView([]);\r\n this.results?.addChangeObserver(this.onEntityChange);\r\n this.stateMachine?.addChangeObserver(this.onEntityChange);\r\n\r\n // Initial update\r\n this.onEntityChange();\r\n\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
@@ -4,6 +4,7 @@ exports.ChallengeScoreListPM = void 0;
4
4
  exports.makeChallengeScoreListPM = makeChallengeScoreListPM;
5
5
  const core_1 = require("@vived/core");
6
6
  const HostStateMachine_1 = require("../../StateMachine/Entities/HostStateMachine");
7
+ const HostStateEntity_1 = require("../../StateMachine/Entities/HostStateEntity");
7
8
  const ChallengeResults_1 = require("../Entities/ChallengeResults");
8
9
  class ChallengeScoreListPM extends core_1.AppObjectPM {
9
10
  static get(appObjects) {
@@ -45,10 +46,15 @@ class ChallengeScoreListPMImp extends ChallengeScoreListPM {
45
46
  const stateIds = this.stateMachine.states;
46
47
  // Process each state
47
48
  stateIds.forEach((slideId, index) => {
48
- // Skip slides that don't have a result
49
- if (!this.challengeResults.getResultForSlide(slideId))
50
- return;
49
+ // Check if slide has a result or an expected response that's not NONE
50
+ const hasResult = this.challengeResults.getResultForSlide(slideId);
51
51
  const state = this.stateMachine.getStateByID(slideId);
52
+ if (!hasResult &&
53
+ (!state ||
54
+ state.expectedResponse === undefined ||
55
+ state.expectedResponse === HostStateEntity_1.ChallengeResponse.NONE)) {
56
+ return;
57
+ }
52
58
  if (state) {
53
59
  // Get score for this slide using the method from ChallengeResults
54
60
  const score = this.challengeResults.getScoreForSlide(slideId);
@@ -1 +1 @@
1
- {"version":3,"file":"ChallengeScoreListPM.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/PMs/ChallengeScoreListPM.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 { HostStateMachine } from \"../../StateMachine/Entities/HostStateMachine\";\r\nimport { ChallengeResultsEntity } from \"../Entities/ChallengeResults\";\r\n\r\nexport interface SlideScoreVM {\r\n id: string;\r\n displayName: string;\r\n score: number;\r\n}\r\n\r\nexport abstract class ChallengeScoreListPM extends AppObjectPM<SlideScoreVM[]> {\r\n static readonly type = \"ChallengeScoreListPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<ChallengeScoreListPM>(\r\n ChallengeScoreListPM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeChallengeScoreListPM(\r\n appObject: AppObject\r\n): ChallengeScoreListPM {\r\n return new ChallengeScoreListPMImp(appObject);\r\n}\r\n\r\nclass ChallengeScoreListPMImp extends ChallengeScoreListPM {\r\n private get challengeResults() {\r\n return this.getCachedSingleton<ChallengeResultsEntity>(\r\n ChallengeResultsEntity.type\r\n );\r\n }\r\n\r\n private get stateMachine() {\r\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\r\n }\r\n\r\n vmsAreEqual(a: SlideScoreVM[], b: SlideScoreVM[]): boolean {\r\n if (a.length !== b.length) return false;\r\n\r\n for (let i = 0; i < a.length; i++) {\r\n if (a[i].id !== b[i].id) return false;\r\n if (a[i].displayName !== b[i].displayName) return false;\r\n if (a[i].score !== b[i].score) return false;\r\n }\r\n return true;\r\n }\r\n\r\n onEntityChange = (): void => {\r\n if (!this.challengeResults || !this.stateMachine) return;\r\n\r\n const slideScores: SlideScoreVM[] = [];\r\n\r\n // Get all states from state machine\r\n const stateIds = this.stateMachine.states;\r\n\r\n // Process each state\r\n stateIds.forEach((slideId, index) => {\r\n // Skip slides that don't have a result\r\n if (!this.challengeResults!.getResultForSlide(slideId)) return;\r\n\r\n const state = this.stateMachine!.getStateByID(slideId);\r\n if (state) {\r\n // Get score for this slide using the method from ChallengeResults\r\n const score = this.challengeResults!.getScoreForSlide(slideId);\r\n\r\n // Format the display name\r\n const displayName = `Slide ${index + 1}: ${state.name}`;\r\n\r\n // Add to results\r\n slideScores.push({\r\n id: slideId,\r\n displayName,\r\n score\r\n });\r\n }\r\n });\r\n\r\n this.doUpdateView(slideScores);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ChallengeScoreListPM.type);\r\n\r\n // Initialize with empty array\r\n this.doUpdateView([]);\r\n\r\n // Subscribe to changes in entities\r\n this.challengeResults?.addChangeObserver(this.onEntityChange);\r\n this.stateMachine?.addChangeObserver(this.onEntityChange);\r\n\r\n // Initial update\r\n this.onEntityChange();\r\n\r\n // Register as singleton\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ChallengeScoreListPM.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/PMs/ChallengeScoreListPM.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 { HostStateMachine } from \"../../StateMachine/Entities/HostStateMachine\";\r\nimport { ChallengeResponse } from \"../../StateMachine/Entities/HostStateEntity\";\r\nimport { ChallengeResultsEntity } from \"../Entities/ChallengeResults\";\r\n\r\nexport interface SlideScoreVM {\r\n id: string;\r\n displayName: string;\r\n score: number;\r\n}\r\n\r\nexport abstract class ChallengeScoreListPM extends AppObjectPM<SlideScoreVM[]> {\r\n static readonly type = \"ChallengeScoreListPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<ChallengeScoreListPM>(\r\n ChallengeScoreListPM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeChallengeScoreListPM(\r\n appObject: AppObject\r\n): ChallengeScoreListPM {\r\n return new ChallengeScoreListPMImp(appObject);\r\n}\r\n\r\nclass ChallengeScoreListPMImp extends ChallengeScoreListPM {\r\n private get challengeResults() {\r\n return this.getCachedSingleton<ChallengeResultsEntity>(\r\n ChallengeResultsEntity.type\r\n );\r\n }\r\n\r\n private get stateMachine() {\r\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\r\n }\r\n\r\n vmsAreEqual(a: SlideScoreVM[], b: SlideScoreVM[]): boolean {\r\n if (a.length !== b.length) return false;\r\n\r\n for (let i = 0; i < a.length; i++) {\r\n if (a[i].id !== b[i].id) return false;\r\n if (a[i].displayName !== b[i].displayName) return false;\r\n if (a[i].score !== b[i].score) return false;\r\n }\r\n return true;\r\n }\r\n\r\n onEntityChange = (): void => {\r\n if (!this.challengeResults || !this.stateMachine) return;\r\n\r\n const slideScores: SlideScoreVM[] = [];\r\n\r\n // Get all states from state machine\r\n const stateIds = this.stateMachine.states;\r\n\r\n // Process each state\r\n stateIds.forEach((slideId, index) => {\r\n // Check if slide has a result or an expected response that's not NONE\r\n const hasResult = this.challengeResults!.getResultForSlide(slideId);\r\n const state = this.stateMachine!.getStateByID(slideId);\r\n\r\n if (\r\n !hasResult &&\r\n (!state ||\r\n state.expectedResponse === undefined ||\r\n state.expectedResponse === ChallengeResponse.NONE)\r\n ) {\r\n return;\r\n }\r\n\r\n if (state) {\r\n // Get score for this slide using the method from ChallengeResults\r\n const score = this.challengeResults!.getScoreForSlide(slideId);\r\n\r\n // Format the display name\r\n const displayName = `Slide ${index + 1}: ${state.name}`;\r\n\r\n // Add to results\r\n slideScores.push({\r\n id: slideId,\r\n displayName,\r\n score\r\n });\r\n }\r\n });\r\n\r\n this.doUpdateView(slideScores);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ChallengeScoreListPM.type);\r\n\r\n // Initialize with empty array\r\n this.doUpdateView([]);\r\n\r\n // Subscribe to changes in entities\r\n this.challengeResults?.addChangeObserver(this.onEntityChange);\r\n this.stateMachine?.addChangeObserver(this.onEntityChange);\r\n\r\n // Initial update\r\n this.onEntityChange();\r\n\r\n // Register as singleton\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
@@ -4,6 +4,8 @@ exports.HasChallengeResultsPM = void 0;
4
4
  exports.makeHasChallengeResultsPM = makeHasChallengeResultsPM;
5
5
  const core_1 = require("@vived/core");
6
6
  const Entities_1 = require("../Entities");
7
+ const HostStateMachine_1 = require("../../StateMachine/Entities/HostStateMachine");
8
+ const HostStateEntity_1 = require("../../StateMachine/Entities/HostStateEntity");
7
9
  class HasChallengeResultsPM extends core_1.AppObjectPM {
8
10
  static get(appObjects) {
9
11
  return (0, core_1.getSingletonComponent)(HasChallengeResultsPM.type, appObjects);
@@ -18,6 +20,9 @@ class HasChallengeResultsPMImp extends HasChallengeResultsPM {
18
20
  get resultsEntity() {
19
21
  return this.getCachedSingleton(Entities_1.ChallengeResultsEntity.type);
20
22
  }
23
+ get stateMachine() {
24
+ return this.getCachedSingleton(HostStateMachine_1.HostStateMachine.type);
25
+ }
21
26
  vmsAreEqual(a, b) {
22
27
  return a === b;
23
28
  }
@@ -26,11 +31,25 @@ class HasChallengeResultsPMImp extends HasChallengeResultsPM {
26
31
  this.onEntityChange = () => {
27
32
  if (!this.resultsEntity)
28
33
  return;
29
- const hasAssessmentResults = this.resultsEntity.results?.length > 0 || false;
34
+ let hasAssessmentResults = this.resultsEntity.results?.length > 0 || false;
35
+ // If no results are found, check for expected responses in states
36
+ if (!hasAssessmentResults && this.stateMachine) {
37
+ const stateIds = this.stateMachine.states;
38
+ for (const stateId of stateIds) {
39
+ const state = this.stateMachine.getStateByID(stateId);
40
+ if (state &&
41
+ state.expectedResponse !== undefined &&
42
+ state.expectedResponse !== HostStateEntity_1.ChallengeResponse.NONE) {
43
+ hasAssessmentResults = true;
44
+ break;
45
+ }
46
+ }
47
+ }
30
48
  this.doUpdateView(hasAssessmentResults);
31
49
  };
32
50
  this.appObjects.registerSingleton(this);
33
51
  this.resultsEntity?.addChangeObserver(this.onEntityChange);
52
+ this.stateMachine?.addChangeObserver(this.onEntityChange);
34
53
  this.onEntityChange();
35
54
  }
36
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"HasChallengeResultsPM.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/PMs/HasChallengeResultsPM.ts"],"names":[],"mappings":";;;AAmBA,8DAIC;AAvBD,sCAKqB;AACrB,0CAAqD;AAErD,MAAsB,qBAAsB,SAAQ,kBAAoB;IAGtE,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,qBAAqB,CAAC,IAAI,EAC1B,UAAU,CACX,CAAC;IACJ,CAAC;;AARH,sDASC;AARQ,0BAAI,GAAG,uBAAuB,CAAC;AAUxC,SAAgB,yBAAyB,CACvC,SAAoB;IAEpB,OAAO,IAAI,wBAAwB,CAAC,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,wBAAyB,SAAQ,qBAAqB;IAC1D,IAAY,aAAa;QACvB,OAAO,IAAI,CAAC,kBAAkB,CAC5B,iCAAsB,CAAC,IAAI,CAC5B,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAWD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAVvC,mBAAc,GAAG,GAAS,EAAE;YAClC,IAAI,CAAC,IAAI,CAAC,aAAa;gBAAE,OAAO;YAEhC,MAAM,oBAAoB,GACxB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC;YAElD,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;QAC1C,CAAC,CAAC;QAKA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;CACF","sourcesContent":["import {\r\n\tAppObject,\r\n\tAppObjectPM,\r\n\tAppObjectRepo,\r\n\tgetSingletonComponent\r\n} from \"@vived/core\";\r\nimport { ChallengeResultsEntity } from \"../Entities\";\r\n\r\nexport abstract class HasChallengeResultsPM extends AppObjectPM<boolean> {\r\n static type = \"HasChallengeResultsPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<HasChallengeResultsPM>(\r\n HasChallengeResultsPM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeHasChallengeResultsPM(\r\n appObject: AppObject\r\n): HasChallengeResultsPM {\r\n return new HasChallengeResultsPMImp(appObject);\r\n}\r\n\r\nclass HasChallengeResultsPMImp extends HasChallengeResultsPM {\r\n private get resultsEntity() {\r\n return this.getCachedSingleton<ChallengeResultsEntity>(\r\n ChallengeResultsEntity.type\r\n );\r\n }\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n private onEntityChange = (): void => {\r\n if (!this.resultsEntity) return;\r\n\r\n const hasAssessmentResults =\r\n this.resultsEntity.results?.length > 0 || false;\r\n\r\n this.doUpdateView(hasAssessmentResults);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, HasChallengeResultsPM.type);\r\n\r\n this.appObjects.registerSingleton(this);\r\n this.resultsEntity?.addChangeObserver(this.onEntityChange);\r\n this.onEntityChange();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"HasChallengeResultsPM.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/PMs/HasChallengeResultsPM.ts"],"names":[],"mappings":";;;AAqBA,8DAIC;AAzBD,sCAKqB;AACrB,0CAAqD;AACrD,mFAAgF;AAChF,iFAAgF;AAEhF,MAAsB,qBAAsB,SAAQ,kBAAoB;IAGtE,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,qBAAqB,CAAC,IAAI,EAC1B,UAAU,CACX,CAAC;IACJ,CAAC;;AARH,sDASC;AARQ,0BAAI,GAAG,uBAAuB,CAAC;AAUxC,SAAgB,yBAAyB,CACvC,SAAoB;IAEpB,OAAO,IAAI,wBAAwB,CAAC,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,wBAAyB,SAAQ,qBAAqB;IAC1D,IAAY,aAAa;QACvB,OAAO,IAAI,CAAC,kBAAkB,CAC5B,iCAAsB,CAAC,IAAI,CAC5B,CAAC;IACJ,CAAC;IAED,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,mCAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IA2BD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;QA1BvC,mBAAc,GAAG,GAAS,EAAE;YAClC,IAAI,CAAC,IAAI,CAAC,aAAa;gBAAE,OAAO;YAEhC,IAAI,oBAAoB,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC;YAE3E,kEAAkE;YAClE,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBAE1C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtD,IACE,KAAK;wBACL,KAAK,CAAC,gBAAgB,KAAK,SAAS;wBACpC,KAAK,CAAC,gBAAgB,KAAK,mCAAiB,CAAC,IAAI,EACjD,CAAC;wBACD,oBAAoB,GAAG,IAAI,CAAC;wBAC5B,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;QAC1C,CAAC,CAAC;QAKA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC1D,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;CACF","sourcesContent":["import {\r\n AppObject,\r\n AppObjectPM,\r\n AppObjectRepo,\r\n getSingletonComponent\r\n} from \"@vived/core\";\r\nimport { ChallengeResultsEntity } from \"../Entities\";\r\nimport { HostStateMachine } from \"../../StateMachine/Entities/HostStateMachine\";\r\nimport { ChallengeResponse } from \"../../StateMachine/Entities/HostStateEntity\";\r\n\r\nexport abstract class HasChallengeResultsPM extends AppObjectPM<boolean> {\r\n static type = \"HasChallengeResultsPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<HasChallengeResultsPM>(\r\n HasChallengeResultsPM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeHasChallengeResultsPM(\r\n appObject: AppObject\r\n): HasChallengeResultsPM {\r\n return new HasChallengeResultsPMImp(appObject);\r\n}\r\n\r\nclass HasChallengeResultsPMImp extends HasChallengeResultsPM {\r\n private get resultsEntity() {\r\n return this.getCachedSingleton<ChallengeResultsEntity>(\r\n ChallengeResultsEntity.type\r\n );\r\n }\r\n\r\n private get stateMachine() {\r\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\r\n }\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n private onEntityChange = (): void => {\r\n if (!this.resultsEntity) return;\r\n\r\n let hasAssessmentResults = this.resultsEntity.results?.length > 0 || false;\r\n\r\n // If no results are found, check for expected responses in states\r\n if (!hasAssessmentResults && this.stateMachine) {\r\n const stateIds = this.stateMachine.states;\r\n\r\n for (const stateId of stateIds) {\r\n const state = this.stateMachine.getStateByID(stateId);\r\n if (\r\n state &&\r\n state.expectedResponse !== undefined &&\r\n state.expectedResponse !== ChallengeResponse.NONE\r\n ) {\r\n hasAssessmentResults = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.doUpdateView(hasAssessmentResults);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, HasChallengeResultsPM.type);\r\n\r\n this.appObjects.registerSingleton(this);\r\n this.resultsEntity?.addChangeObserver(this.onEntityChange);\r\n this.stateMachine?.addChangeObserver(this.onEntityChange);\r\n this.onEntityChange();\r\n }\r\n}\r\n"]}
@@ -41,7 +41,6 @@ __exportStar(require("./ShowSpinnerHandler"), exports);
41
41
  __exportStar(require("./StartZSpaceHandler"), exports);
42
42
  __exportStar(require("./StopZSpaceHandler"), exports);
43
43
  __exportStar(require("./SubmitActivityAssetHandler"), exports);
44
- __exportStar(require("./SubmitExpectedResultHandler"), exports);
45
44
  __exportStar(require("./SubmitLogHandler"), exports);
46
45
  __exportStar(require("./SubmitResultHandler"), exports);
47
46
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Handler/UCs/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,2DAAyC;AACzC,2DAAyC;AACzC,6DAA2C;AAC3C,wDAAsC;AACtC,6DAA2C;AAC3C,2DAAyC;AACzC,yDAAuC;AACvC,6DAA2C;AAC3C,wDAAsC;AACtC,4DAA0C;AAC1C,0DAAwC;AACxC,6DAA2C;AAC3C,4DAA0C;AAC1C,wDAAsC;AACtC,yDAAuC;AACvC,2DAAyC;AACzC,uEAAqD;AACrD,+DAA6C;AAC7C,qDAAmC;AACnC,uDAAqC;AACrC,8DAA4C;AAC5C,2DAAyC;AACzC,uDAAqC;AACrC,uDAAqC;AACrC,sDAAoC;AACpC,+DAA6C;AAC7C,gEAA8C;AAC9C,qDAAmC;AACnC,wDAAsC","sourcesContent":["export * from \"./CallbackAssetDTO\";\r\nexport * from \"./CloseAssetSystemPlugin\";\r\nexport * from \"./GetAssetBlobURLHandler\";\r\nexport * from \"./GetAssetFolderURLHandler\";\r\nexport * from \"./GetAssetMetaHandler\";\r\nexport * from \"./GetAssetsForOwnerHandler\";\r\nexport * from \"./GetLinkedAssetsHandler\";\r\nexport * from \"./GoToNextStateHandler\";\r\nexport * from \"./GoToPreviousStateHandler\";\r\nexport * from \"./HasNextStateHandler\";\r\nexport * from \"./HasPreviousStateHandler\";\r\nexport * from \"./IsAssetFetchedHandler\";\r\nexport * from \"./IsZSpaceAvailableHandler\";\r\nexport * from \"./NewActivityAssetHandler\";\r\nexport * from \"./OnAppIsReadyHandler\";\r\nexport * from \"./OnStateChangeHandler\";\r\nexport * from \"./OnStateCompleteHandler\";\r\nexport * from \"./RegisterExternalStyleSheetsHandler\";\r\nexport * from \"./RestoreCurrentStateHandler\";\r\nexport * from \"./ShowAlertHandler\";\r\nexport * from \"./ShowConfirmHandler\";\r\nexport * from \"./ShowMarkDownEditorHandler\";\r\nexport * from \"./ShowSelectModelHandler\";\r\nexport * from \"./ShowSpinnerHandler\";\r\nexport * from \"./StartZSpaceHandler\";\r\nexport * from \"./StopZSpaceHandler\";\r\nexport * from \"./SubmitActivityAssetHandler\";\r\nexport * from \"./SubmitExpectedResultHandler\";\r\nexport * from \"./SubmitLogHandler\";\r\nexport * from \"./SubmitResultHandler\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Handler/UCs/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,2DAAyC;AACzC,2DAAyC;AACzC,6DAA2C;AAC3C,wDAAsC;AACtC,6DAA2C;AAC3C,2DAAyC;AACzC,yDAAuC;AACvC,6DAA2C;AAC3C,wDAAsC;AACtC,4DAA0C;AAC1C,0DAAwC;AACxC,6DAA2C;AAC3C,4DAA0C;AAC1C,wDAAsC;AACtC,yDAAuC;AACvC,2DAAyC;AACzC,uEAAqD;AACrD,+DAA6C;AAC7C,qDAAmC;AACnC,uDAAqC;AACrC,8DAA4C;AAC5C,2DAAyC;AACzC,uDAAqC;AACrC,uDAAqC;AACrC,sDAAoC;AACpC,+DAA6C;AAC7C,qDAAmC;AACnC,wDAAsC","sourcesContent":["export * from \"./CallbackAssetDTO\";\r\nexport * from \"./CloseAssetSystemPlugin\";\r\nexport * from \"./GetAssetBlobURLHandler\";\r\nexport * from \"./GetAssetFolderURLHandler\";\r\nexport * from \"./GetAssetMetaHandler\";\r\nexport * from \"./GetAssetsForOwnerHandler\";\r\nexport * from \"./GetLinkedAssetsHandler\";\r\nexport * from \"./GoToNextStateHandler\";\r\nexport * from \"./GoToPreviousStateHandler\";\r\nexport * from \"./HasNextStateHandler\";\r\nexport * from \"./HasPreviousStateHandler\";\r\nexport * from \"./IsAssetFetchedHandler\";\r\nexport * from \"./IsZSpaceAvailableHandler\";\r\nexport * from \"./NewActivityAssetHandler\";\r\nexport * from \"./OnAppIsReadyHandler\";\r\nexport * from \"./OnStateChangeHandler\";\r\nexport * from \"./OnStateCompleteHandler\";\r\nexport * from \"./RegisterExternalStyleSheetsHandler\";\r\nexport * from \"./RestoreCurrentStateHandler\";\r\nexport * from \"./ShowAlertHandler\";\r\nexport * from \"./ShowConfirmHandler\";\r\nexport * from \"./ShowMarkDownEditorHandler\";\r\nexport * from \"./ShowSelectModelHandler\";\r\nexport * from \"./ShowSpinnerHandler\";\r\nexport * from \"./StartZSpaceHandler\";\r\nexport * from \"./StopZSpaceHandler\";\r\nexport * from \"./SubmitActivityAssetHandler\";\r\nexport * from \"./SubmitLogHandler\";\r\nexport * from \"./SubmitResultHandler\";\r\n"]}
@@ -1,4 +1,4 @@
1
- import { AppObjectEntity, Version } from "@vived/core";
1
+ import { AppObjectEntity, Version, MemoizedString } from "@vived/core";
2
2
  /**
3
3
  * Enum representing the possible states of an application
4
4
  *
@@ -48,6 +48,31 @@ class AppEntityImp extends AppEntity {
48
48
  get id() {
49
49
  return this.appObject.id;
50
50
  }
51
+ get name() {
52
+ return this._memoizedName.val;
53
+ }
54
+ set name(val) {
55
+ this._memoizedName.val = val;
56
+ }
57
+ get description() {
58
+ return this._memoizedDescription.val;
59
+ }
60
+ set description(val) {
61
+ this._memoizedDescription.val = val;
62
+ }
63
+ get image_url() {
64
+ return this._memoizedImageUrl.val;
65
+ }
66
+ set image_url(val) {
67
+ this._memoizedImageUrl.val = val;
68
+ }
69
+ get imageAssetId() {
70
+ const value = this._memoizedImageAssetId.val;
71
+ return value === "" ? undefined : value;
72
+ }
73
+ set imageAssetId(val) {
74
+ this._memoizedImageAssetId.val = val ?? "";
75
+ }
51
76
  get latestVersion() {
52
77
  return Version.GetLatest(this.versions);
53
78
  }
@@ -100,9 +125,10 @@ class AppEntityImp extends AppEntity {
100
125
  }
101
126
  constructor(appObject) {
102
127
  super(appObject, AppEntity.type);
103
- this.name = "";
104
- this.description = "";
105
- this.image_url = "";
128
+ this._memoizedName = new MemoizedString("", this.notifyOnChange);
129
+ this._memoizedDescription = new MemoizedString("", this.notifyOnChange);
130
+ this._memoizedImageUrl = new MemoizedString("", this.notifyOnChange);
131
+ this._memoizedImageAssetId = new MemoizedString("", this.notifyOnChange);
106
132
  this.versions = [];
107
133
  this._state = AppState.INIT;
108
134
  this._assignedToOwner = false;
@@ -1 +1 @@
1
- {"version":3,"file":"AppEntity.js","sourceRoot":"","sources":["../../../../src/Apps/Entities/AppEntity.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n AppObject,\r\n AppObjectEntity,\r\n AppObjectRepo,\r\n Version\r\n} from \"@vived/core\";\r\n\r\n/**\r\n * Enum representing the possible states of an application\r\n * \r\n * @enum {string}\r\n * @property {string} INIT - Initial state before app loading starts\r\n * @property {string} LOADING - App is currently loading resources\r\n * @property {string} READY - App is loaded and ready to use\r\n * @property {string} ERROR - App encountered an error during loading\r\n */\r\nexport enum AppState {\r\n INIT = \"INIT\",\r\n LOADING = \"LOADING\",\r\n READY = \"READY\",\r\n ERROR = \"ERROR\"\r\n}\r\n\r\n/**\r\n * AppEntity - Core entity representing an application in the system\r\n * \r\n * This abstract class defines the properties and behaviors of an application.\r\n * It manages app state, versioning, mounting status, and error handling.\r\n * \r\n * @extends AppObjectEntity from @vived/core\r\n */\r\nexport abstract class AppEntity extends AppObjectEntity {\r\n /** Type identifier for the AppEntity component */\r\n static type = \"AppEntity\";\r\n\r\n static get(id: string, appObjects: AppObjectRepo) {\r\n const ao = appObjects.get(id);\r\n if (!ao) {\r\n appObjects.submitWarning(\r\n \"AppEntity.get\",\r\n `Unable to find app object by ID: ${id}`\r\n );\r\n return;\r\n }\r\n\r\n return ao.getComponent<AppEntity>(AppEntity.type);\r\n }\r\n\r\n abstract get id(): string;\r\n abstract name: string;\r\n abstract description: string;\r\n abstract image_url: string;\r\n abstract versions: Version[];\r\n abstract get latestVersion(): Version | undefined;\r\n abstract errorMessage?: string;\r\n abstract get hasError(): boolean;\r\n abstract state: AppState;\r\n abstract assignedToOwner: boolean;\r\n\r\n abstract get isMounted(): boolean;\r\n abstract appAssetFolderURL?: string;\r\n abstract get updateIsAvailable(): boolean | undefined;\r\n abstract styles: string[];\r\n abstract mountedVersion: Version | undefined;\r\n}\r\n\r\n/**\r\n * Factory function to create a new AppEntity instance\r\n * \r\n * @param appObject - The app object to attach the entity to\r\n * @returns A concrete implementation of AppEntity\r\n */\r\nexport function makeAppEntity(appObject: AppObject): AppEntity {\r\n return new AppEntityImp(appObject);\r\n}\r\n\r\nclass AppEntityImp extends AppEntity {\r\n get id() {\r\n return this.appObject.id;\r\n }\r\n\r\n name: string = \"\";\r\n description: string = \"\";\r\n image_url: string = \"\";\r\n\r\n versions: Version[] = [];\r\n\r\n get latestVersion(): Version | undefined {\r\n return Version.GetLatest(this.versions);\r\n }\r\n\r\n private _mountedVersion: Version | undefined;\r\n get mountedVersion() {\r\n return this._mountedVersion;\r\n }\r\n set mountedVersion(val: Version | undefined) {\r\n if (this._mountedVersion === val) return;\r\n\r\n this._mountedVersion = val;\r\n this.notifyOnChange();\r\n }\r\n\r\n get updateIsAvailable(): boolean | undefined {\r\n if (this._mountedVersion === undefined) return undefined;\r\n if (this.latestVersion === undefined) return undefined;\r\n\r\n return Version.AreEqual(this._mountedVersion, this.latestVersion)\r\n ? false\r\n : true;\r\n }\r\n\r\n private _state: AppState = AppState.INIT;\r\n get state() {\r\n return this._state;\r\n }\r\n set state(val: AppState) {\r\n this._state = val;\r\n this.notifyOnChange();\r\n }\r\n\r\n private _assignedToOwner: boolean = false;\r\n get assignedToOwner(): boolean {\r\n return this._assignedToOwner;\r\n }\r\n set assignedToOwner(val: boolean) {\r\n this._assignedToOwner = val;\r\n this.notifyOnChange();\r\n }\r\n\r\n get isMounted(): boolean {\r\n return this._mountedVersion === undefined ? false : true;\r\n }\r\n\r\n styles: string[] = [];\r\n appAssetFolderURL: string | undefined;\r\n\r\n private _errorMsg?: string;\r\n get errorMessage() {\r\n return this._errorMsg;\r\n }\r\n set errorMessage(val: string | undefined) {\r\n if (this._errorMsg === val) return;\r\n\r\n this._errorMsg = val;\r\n this.notifyOnChange();\r\n }\r\n get hasError(): boolean {\r\n return this._errorMsg === undefined ? false : true;\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, AppEntity.type);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"AppEntity.js","sourceRoot":"","sources":["../../../../src/Apps/Entities/AppEntity.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n AppObject,\r\n AppObjectEntity,\r\n AppObjectRepo,\r\n Version,\r\n MemoizedString\r\n} from \"@vived/core\";\r\n\r\n/**\r\n * Enum representing the possible states of an application\r\n *\r\n * @enum {string}\r\n * @property {string} INIT - Initial state before app loading starts\r\n * @property {string} LOADING - App is currently loading resources\r\n * @property {string} READY - App is loaded and ready to use\r\n * @property {string} ERROR - App encountered an error during loading\r\n */\r\nexport enum AppState {\r\n INIT = \"INIT\",\r\n LOADING = \"LOADING\",\r\n READY = \"READY\",\r\n ERROR = \"ERROR\"\r\n}\r\n\r\n/**\r\n * AppEntity - Core entity representing an application in the system\r\n *\r\n * This abstract class defines the properties and behaviors of an application.\r\n * It manages app state, versioning, mounting status, and error handling.\r\n *\r\n * @extends AppObjectEntity from @vived/core\r\n */\r\nexport abstract class AppEntity extends AppObjectEntity {\r\n /** Type identifier for the AppEntity component */\r\n static type = \"AppEntity\";\r\n\r\n static get(id: string, appObjects: AppObjectRepo) {\r\n const ao = appObjects.get(id);\r\n if (!ao) {\r\n appObjects.submitWarning(\r\n \"AppEntity.get\",\r\n `Unable to find app object by ID: ${id}`\r\n );\r\n return;\r\n }\r\n\r\n return ao.getComponent<AppEntity>(AppEntity.type);\r\n }\r\n\r\n abstract get id(): string;\r\n abstract name: string;\r\n abstract description: string;\r\n abstract image_url: string;\r\n abstract imageAssetId: string | undefined;\r\n abstract versions: Version[];\r\n abstract get latestVersion(): Version | undefined;\r\n abstract errorMessage?: string;\r\n abstract get hasError(): boolean;\r\n abstract state: AppState;\r\n abstract assignedToOwner: boolean;\r\n\r\n abstract get isMounted(): boolean;\r\n abstract appAssetFolderURL?: string;\r\n abstract get updateIsAvailable(): boolean | undefined;\r\n abstract styles: string[];\r\n abstract mountedVersion: Version | undefined;\r\n}\r\n\r\n/**\r\n * Factory function to create a new AppEntity instance\r\n *\r\n * @param appObject - The app object to attach the entity to\r\n * @returns A concrete implementation of AppEntity\r\n */\r\nexport function makeAppEntity(appObject: AppObject): AppEntity {\r\n return new AppEntityImp(appObject);\r\n}\r\n\r\nclass AppEntityImp extends AppEntity {\r\n get id() {\r\n return this.appObject.id;\r\n }\r\n\r\n private _memoizedName: MemoizedString = new MemoizedString(\r\n \"\",\r\n this.notifyOnChange\r\n );\r\n\r\n get name(): string {\r\n return this._memoizedName.val;\r\n }\r\n\r\n set name(val: string) {\r\n this._memoizedName.val = val;\r\n }\r\n\r\n private _memoizedDescription: MemoizedString = new MemoizedString(\r\n \"\",\r\n this.notifyOnChange\r\n );\r\n\r\n get description(): string {\r\n return this._memoizedDescription.val;\r\n }\r\n\r\n set description(val: string) {\r\n this._memoizedDescription.val = val;\r\n }\r\n\r\n private _memoizedImageUrl: MemoizedString = new MemoizedString(\r\n \"\",\r\n this.notifyOnChange\r\n );\r\n\r\n get image_url(): string {\r\n return this._memoizedImageUrl.val;\r\n }\r\n\r\n set image_url(val: string) {\r\n this._memoizedImageUrl.val = val;\r\n }\r\n\r\n private _memoizedImageAssetId = new MemoizedString(\"\", this.notifyOnChange);\r\n\r\n get imageAssetId(): string | undefined {\r\n const value = this._memoizedImageAssetId.val;\r\n return value === \"\" ? undefined : value;\r\n }\r\n\r\n set imageAssetId(val: string | undefined) {\r\n this._memoizedImageAssetId.val = val ?? \"\";\r\n }\r\n\r\n versions: Version[] = [];\r\n\r\n get latestVersion(): Version | undefined {\r\n return Version.GetLatest(this.versions);\r\n }\r\n\r\n private _mountedVersion: Version | undefined;\r\n get mountedVersion() {\r\n return this._mountedVersion;\r\n }\r\n set mountedVersion(val: Version | undefined) {\r\n if (this._mountedVersion === val) return;\r\n\r\n this._mountedVersion = val;\r\n this.notifyOnChange();\r\n }\r\n\r\n get updateIsAvailable(): boolean | undefined {\r\n if (this._mountedVersion === undefined) return undefined;\r\n if (this.latestVersion === undefined) return undefined;\r\n\r\n return Version.AreEqual(this._mountedVersion, this.latestVersion)\r\n ? false\r\n : true;\r\n }\r\n\r\n private _state: AppState = AppState.INIT;\r\n get state() {\r\n return this._state;\r\n }\r\n set state(val: AppState) {\r\n this._state = val;\r\n this.notifyOnChange();\r\n }\r\n\r\n private _assignedToOwner: boolean = false;\r\n get assignedToOwner(): boolean {\r\n return this._assignedToOwner;\r\n }\r\n set assignedToOwner(val: boolean) {\r\n this._assignedToOwner = val;\r\n this.notifyOnChange();\r\n }\r\n\r\n get isMounted(): boolean {\r\n return this._mountedVersion === undefined ? false : true;\r\n }\r\n\r\n styles: string[] = [];\r\n appAssetFolderURL: string | undefined;\r\n\r\n private _errorMsg?: string;\r\n get errorMessage() {\r\n return this._errorMsg;\r\n }\r\n set errorMessage(val: string | undefined) {\r\n if (this._errorMsg === val) return;\r\n\r\n this._errorMsg = val;\r\n this.notifyOnChange();\r\n }\r\n get hasError(): boolean {\r\n return this._errorMsg === undefined ? false : true;\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, AppEntity.type);\r\n }\r\n}\r\n"]}
@@ -1,5 +1,6 @@
1
1
  import { AppObjectPM } from "@vived/core";
2
2
  import { AppEntity } from "../Entities/AppEntity";
3
+ import { AssetEntity } from "../../Assets/Entities/AssetEntity";
3
4
  /**
4
5
  * Default empty AppVM for initialization
5
6
  */
@@ -7,7 +8,8 @@ export const defaultAppVM = {
7
8
  id: "",
8
9
  description: "",
9
10
  imageURL: "",
10
- name: ""
11
+ name: "",
12
+ isFetching: false
11
13
  };
12
14
  /**
13
15
  * Presentation Manager for App entities
@@ -74,8 +76,23 @@ class AppPMImp extends AppPM {
74
76
  return false;
75
77
  if (a.imageURL !== b.imageURL)
76
78
  return false;
79
+ if (a.isFetching !== b.isFetching)
80
+ return false;
77
81
  return true;
78
82
  }
83
+ /**
84
+ * Retrieves the asset entity for the image
85
+ *
86
+ * @returns The image asset entity or undefined if not found
87
+ */
88
+ getImageAsset() {
89
+ if (!this.app?.imageAssetId)
90
+ return undefined;
91
+ const assetAO = this.appObject.appObjectRepo.get(this.app.imageAssetId);
92
+ if (!assetAO)
93
+ return undefined;
94
+ return AssetEntity.get(assetAO);
95
+ }
79
96
  /**
80
97
  * Creates a new AppPM instance
81
98
  *
@@ -90,15 +107,39 @@ class AppPMImp extends AppPM {
90
107
  this.onEntityChange = () => {
91
108
  if (!this.app)
92
109
  return;
110
+ let imageURL = this.app.image_url;
111
+ let isFetching = false;
112
+ // Check for an image asset and use its blob URL if available
113
+ const imageAsset = this.getImageAsset();
114
+ if (imageAsset) {
115
+ if (imageAsset.fetchError) {
116
+ // If there's an error fetching the asset, return empty string for imageURL
117
+ imageURL = "";
118
+ }
119
+ else if (imageAsset.isFetchingFile) {
120
+ // If the asset is being fetched, set isFetching to true and use the default image_url
121
+ isFetching = true;
122
+ }
123
+ else if (imageAsset.blobURL) {
124
+ // If the asset has a blob URL, use it
125
+ imageURL = imageAsset.blobURL || imageURL;
126
+ }
127
+ }
93
128
  const vm = {
94
129
  description: this.app.description,
95
130
  id: this.app.id,
96
- imageURL: this.app.image_url,
97
- name: this.app.name
131
+ imageURL,
132
+ name: this.app.name,
133
+ isFetching
98
134
  };
99
135
  this.doUpdateView(vm);
100
136
  };
101
137
  this.app?.addChangeObserver(this.onEntityChange);
138
+ // Also listen for changes to the image asset if it exists
139
+ const imageAsset = this.getImageAsset();
140
+ if (imageAsset) {
141
+ imageAsset.addChangeObserver(this.onEntityChange);
142
+ }
102
143
  this.onEntityChange();
103
144
  }
104
145
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AppPM.js","sourceRoot":"","sources":["../../../../src/Apps/PMs/AppPM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAiB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAiBlD;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAU;IACjC,EAAE,EAAE,EAAE;IACN,WAAW,EAAE,EAAE;IACf,QAAQ,EAAE,EAAE;IACZ,IAAI,EAAE,EAAE;CACT,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,OAAgB,KAAM,SAAQ,WAAkB;IAGpD;;;;;;OAMG;IACH,MAAM,CAAC,GAAG,CAAC,EAAU,EAAE,UAAyB;QAC9C,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO;QACT,CAAC;QAED,OAAO,EAAE,CAAC,YAAY,CAAQ,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;;AAhBM,UAAI,GAAG,OAAO,CAAC;AAmBxB;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,SAAoB;IAC5C,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,QAAS,SAAQ,KAAK;IAC1B;;OAEG;IACH,IAAY,GAAG;QACb,OAAO,IAAI,CAAC,uBAAuB,CAAY,SAAS,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IAED;;;;;;;OAOG;IACH,WAAW,CAAC,CAAQ,EAAE,CAAQ;QAC5B,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC;QAClD,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACpC,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAmBD;;;;OAIG;IACH,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAvB/B;;;WAGG;QACK,mBAAc,GAAG,GAAG,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,GAAG;gBAAE,OAAO;YAEtB,MAAM,EAAE,GAAU;gBAChB,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW;gBACjC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;gBACf,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS;gBAC5B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;aACpB,CAAC;YAEF,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC;QAUA,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;CACF","sourcesContent":["import { AppObject, AppObjectPM, AppObjectRepo } from \"@vived/core\";\r\nimport { AppEntity } from \"../Entities/AppEntity\";\r\n\r\n/**\r\n * View Model for App information\r\n * Represents the data needed by the view to display an app\r\n */\r\nexport interface AppVM {\r\n /** Unique identifier for the app */\r\n id: string;\r\n /** Display name of the app */\r\n name: string;\r\n /** Description text for the app */\r\n description: string;\r\n /** URL to the app's thumbnail or preview image */\r\n imageURL: string;\r\n}\r\n\r\n/**\r\n * Default empty AppVM for initialization\r\n */\r\nexport const defaultAppVM: AppVM = {\r\n id: \"\",\r\n description: \"\",\r\n imageURL: \"\",\r\n name: \"\"\r\n};\r\n\r\n/**\r\n * Presentation Manager for App entities\r\n * \r\n * The AppPM is responsible for:\r\n * - Converting the AppEntity data into a view-friendly format (AppVM)\r\n * - Notifying the view when app data changes\r\n * - Providing comparison utilities for view models\r\n * \r\n * Usage:\r\n * 1. Retrieve an instance with `AppPM.get(appId, appObjects)`\r\n * 2. Subscribe to view updates with `pm.addViewUpdateObserver(callback)`\r\n * 3. Access current view data with `pm.lastVM`\r\n */\r\nexport abstract class AppPM extends AppObjectPM<AppVM> {\r\n static type = \"AppPM\";\r\n\r\n /**\r\n * Retrieves an AppPM instance for a specific app by ID\r\n * \r\n * @param id - The unique identifier of the app\r\n * @param appObjects - The repository of app objects\r\n * @returns The AppPM instance or undefined if not found\r\n */\r\n static get(id: string, appObjects: AppObjectRepo) {\r\n const ao = appObjects.get(id);\r\n if (!ao) {\r\n return;\r\n }\r\n\r\n return ao.getComponent<AppPM>(AppPM.type);\r\n }\r\n}\r\n\r\n/**\r\n * Creates a new AppPM instance\r\n * \r\n * @param appObject - The app object to associate with this PM\r\n * @returns A new AppPM instance\r\n */\r\nexport function makeAppPM(appObject: AppObject): AppPM {\r\n return new AppPMImp(appObject);\r\n}\r\n\r\n/**\r\n * Implementation of the AppPM abstract class\r\n * Handles the connection between AppEntity and view\r\n */\r\nclass AppPMImp extends AppPM {\r\n /**\r\n * Gets the associated AppEntity\r\n */\r\n private get app() {\r\n return this.getCachedLocalComponent<AppEntity>(AppEntity.type);\r\n }\r\n\r\n /**\r\n * Compares two AppVM instances for equality\r\n * Used to determine if the view needs to update\r\n * \r\n * @param a - First AppVM to compare\r\n * @param b - Second AppVM to compare\r\n * @returns True if view models are equal, false otherwise\r\n */\r\n vmsAreEqual(a: AppVM, b: AppVM): boolean {\r\n if (a.description !== b.description) return false;\r\n if (a.name !== b.name) return false;\r\n if (a.imageURL !== b.imageURL) return false;\r\n return true;\r\n }\r\n\r\n /**\r\n * Observer callback that updates the view model when the entity changes\r\n * Transforms entity data into view model format\r\n */\r\n private onEntityChange = () => {\r\n if (!this.app) return;\r\n\r\n const vm: AppVM = {\r\n description: this.app.description,\r\n id: this.app.id,\r\n imageURL: this.app.image_url,\r\n name: this.app.name\r\n };\r\n\r\n this.doUpdateView(vm);\r\n };\r\n\r\n /**\r\n * Creates a new AppPM instance\r\n * \r\n * @param appObject - The app object to associate with this PM\r\n */\r\n constructor(appObject: AppObject) {\r\n super(appObject, AppPM.type);\r\n\r\n this.app?.addChangeObserver(this.onEntityChange);\r\n this.onEntityChange();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"AppPM.js","sourceRoot":"","sources":["../../../../src/Apps/PMs/AppPM.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectPM, AppObjectRepo } from \"@vived/core\";\r\nimport { AppEntity } from \"../Entities/AppEntity\";\r\nimport { AssetEntity } from \"../../Assets/Entities/AssetEntity\";\r\n\r\n/**\r\n * View Model for App information\r\n * Represents the data needed by the view to display an app\r\n */\r\nexport interface AppVM {\r\n /** Unique identifier for the app */\r\n id: string;\r\n /** Display name of the app */\r\n name: string;\r\n /** Description text for the app */\r\n description: string;\r\n /** URL to the app's thumbnail or preview image */\r\n imageURL: string;\r\n /** Whether the image asset is currently being fetched */\r\n isFetching: boolean;\r\n}\r\n\r\n/**\r\n * Default empty AppVM for initialization\r\n */\r\nexport const defaultAppVM: AppVM = {\r\n id: \"\",\r\n description: \"\",\r\n imageURL: \"\",\r\n name: \"\",\r\n isFetching: false\r\n};\r\n\r\n/**\r\n * Presentation Manager for App entities\r\n *\r\n * The AppPM is responsible for:\r\n * - Converting the AppEntity data into a view-friendly format (AppVM)\r\n * - Notifying the view when app data changes\r\n * - Providing comparison utilities for view models\r\n *\r\n * Usage:\r\n * 1. Retrieve an instance with `AppPM.get(appId, appObjects)`\r\n * 2. Subscribe to view updates with `pm.addViewUpdateObserver(callback)`\r\n * 3. Access current view data with `pm.lastVM`\r\n */\r\nexport abstract class AppPM extends AppObjectPM<AppVM> {\r\n static type = \"AppPM\";\r\n\r\n /**\r\n * Retrieves an AppPM instance for a specific app by ID\r\n *\r\n * @param id - The unique identifier of the app\r\n * @param appObjects - The repository of app objects\r\n * @returns The AppPM instance or undefined if not found\r\n */\r\n static get(id: string, appObjects: AppObjectRepo) {\r\n const ao = appObjects.get(id);\r\n if (!ao) {\r\n return;\r\n }\r\n\r\n return ao.getComponent<AppPM>(AppPM.type);\r\n }\r\n}\r\n\r\n/**\r\n * Creates a new AppPM instance\r\n *\r\n * @param appObject - The app object to associate with this PM\r\n * @returns A new AppPM instance\r\n */\r\nexport function makeAppPM(appObject: AppObject): AppPM {\r\n return new AppPMImp(appObject);\r\n}\r\n\r\n/**\r\n * Implementation of the AppPM abstract class\r\n * Handles the connection between AppEntity and view\r\n */\r\nclass AppPMImp extends AppPM {\r\n /**\r\n * Gets the associated AppEntity\r\n */\r\n private get app() {\r\n return this.getCachedLocalComponent<AppEntity>(AppEntity.type);\r\n }\r\n\r\n /**\r\n * Compares two AppVM instances for equality\r\n * Used to determine if the view needs to update\r\n *\r\n * @param a - First AppVM to compare\r\n * @param b - Second AppVM to compare\r\n * @returns True if view models are equal, false otherwise\r\n */\r\n vmsAreEqual(a: AppVM, b: AppVM): boolean {\r\n if (a.description !== b.description) return false;\r\n if (a.name !== b.name) return false;\r\n if (a.imageURL !== b.imageURL) return false;\r\n if (a.isFetching !== b.isFetching) return false;\r\n return true;\r\n }\r\n\r\n /**\r\n * Retrieves the asset entity for the image\r\n *\r\n * @returns The image asset entity or undefined if not found\r\n */\r\n private getImageAsset(): AssetEntity | undefined {\r\n if (!this.app?.imageAssetId) return undefined;\r\n\r\n const assetAO = this.appObject.appObjectRepo.get(this.app.imageAssetId);\r\n if (!assetAO) return undefined;\r\n\r\n return AssetEntity.get(assetAO);\r\n }\r\n\r\n /**\r\n * Observer callback that updates the view model when the entity changes\r\n * Transforms entity data into view model format\r\n */\r\n private onEntityChange = () => {\r\n if (!this.app) return;\r\n\r\n let imageURL = this.app.image_url;\r\n let isFetching = false;\r\n\r\n // Check for an image asset and use its blob URL if available\r\n const imageAsset = this.getImageAsset();\r\n if (imageAsset) {\r\n if (imageAsset.fetchError) {\r\n // If there's an error fetching the asset, return empty string for imageURL\r\n imageURL = \"\";\r\n } else if (imageAsset.isFetchingFile) {\r\n // If the asset is being fetched, set isFetching to true and use the default image_url\r\n isFetching = true;\r\n } else if (imageAsset.blobURL) {\r\n // If the asset has a blob URL, use it\r\n imageURL = imageAsset.blobURL || imageURL;\r\n }\r\n }\r\n\r\n const vm: AppVM = {\r\n description: this.app.description,\r\n id: this.app.id,\r\n imageURL,\r\n name: this.app.name,\r\n isFetching\r\n };\r\n\r\n this.doUpdateView(vm);\r\n };\r\n\r\n /**\r\n * Creates a new AppPM instance\r\n *\r\n * @param appObject - The app object to associate with this PM\r\n */\r\n constructor(appObject: AppObject) {\r\n super(appObject, AppPM.type);\r\n\r\n this.app?.addChangeObserver(this.onEntityChange);\r\n\r\n // Also listen for changes to the image asset if it exists\r\n const imageAsset = this.getImageAsset();\r\n if (imageAsset) {\r\n imageAsset.addChangeObserver(this.onEntityChange);\r\n }\r\n\r\n this.onEntityChange();\r\n }\r\n}\r\n"]}
@@ -0,0 +1,42 @@
1
+ import { AssetFilePM, defaultAssetFileVM } from "../PMs/AssetFilePM";
2
+ /**
3
+ * Adapter for connecting AssetFilePM to UI components
4
+ * Provides the interface for React components to subscribe to AssetFileVM updates
5
+ */
6
+ export const assetFileAdapter = {
7
+ /**
8
+ * Default view model used before subscription is established
9
+ */
10
+ defaultVM: defaultAssetFileVM,
11
+ /**
12
+ * Subscribe a view function to updates from the presentation manager
13
+ *
14
+ * @param id - ID of the asset to observe
15
+ * @param appObjects - Repository of app objects
16
+ * @param setVM - Callback function that will receive view model updates
17
+ */
18
+ subscribe: (id, appObjects, setVM) => {
19
+ const pm = AssetFilePM.getByID(id, appObjects);
20
+ if (!pm) {
21
+ appObjects.submitError("assetFileAdapter", "Unable to find AssetFilePM");
22
+ return;
23
+ }
24
+ pm.addView(setVM);
25
+ },
26
+ /**
27
+ * Unsubscribe a view function from updates
28
+ *
29
+ * @param id - ID of the asset to stop observing
30
+ * @param appObjects - Repository of app objects
31
+ * @param setVM - Callback function to remove from updates
32
+ */
33
+ unsubscribe: (id, appObjects, setVM) => {
34
+ const pm = AssetFilePM.getByID(id, appObjects);
35
+ if (!pm) {
36
+ appObjects.submitError("assetFileAdapter", "Unable to find AssetFilePM");
37
+ return;
38
+ }
39
+ pm.removeView(setVM);
40
+ }
41
+ };
42
+ //# sourceMappingURL=assetFileAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assetFileAdapter.js","sourceRoot":"","sources":["../../../../src/Assets/Adapters/assetFileAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EAEX,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD;;OAEG;IACH,SAAS,EAAE,kBAAkB;IAE7B;;;;;;OAMG;IACH,SAAS,EAAE,CACT,EAAU,EACV,UAAyB,EACzB,KAAgC,EAChC,EAAE;QACF,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAC/C,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,UAAU,CAAC,WAAW,CAAC,kBAAkB,EAAE,4BAA4B,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QACD,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED;;;;;;OAMG;IACH,WAAW,EAAE,CACX,EAAU,EACV,UAAyB,EACzB,KAAgC,EAChC,EAAE;QACF,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAC/C,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,UAAU,CAAC,WAAW,CAAC,kBAAkB,EAAE,4BAA4B,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QACD,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;CACF,CAAC","sourcesContent":["// filepath: c:\\Users\\amosp\\Documents\\WebGL\\vivedlearning_host\\src\\Assets\\Adapters\\assetFileAdapter.ts\r\nimport { AppObjectRepo, PmAdapter } from \"@vived/core\";\r\nimport {\r\n AssetFilePM,\r\n AssetFileVM,\r\n defaultAssetFileVM\r\n} from \"../PMs/AssetFilePM\";\r\n\r\n/**\r\n * Adapter for connecting AssetFilePM to UI components\r\n * Provides the interface for React components to subscribe to AssetFileVM updates\r\n */\r\nexport const assetFileAdapter: PmAdapter<AssetFileVM> = {\r\n /**\r\n * Default view model used before subscription is established\r\n */\r\n defaultVM: defaultAssetFileVM,\r\n\r\n /**\r\n * Subscribe a view function to updates from the presentation manager\r\n *\r\n * @param id - ID of the asset to observe\r\n * @param appObjects - Repository of app objects\r\n * @param setVM - Callback function that will receive view model updates\r\n */\r\n subscribe: (\r\n id: string,\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: AssetFileVM) => void\r\n ) => {\r\n const pm = AssetFilePM.getByID(id, appObjects);\r\n if (!pm) {\r\n appObjects.submitError(\"assetFileAdapter\", \"Unable to find AssetFilePM\");\r\n return;\r\n }\r\n pm.addView(setVM);\r\n },\r\n\r\n /**\r\n * Unsubscribe a view function from updates\r\n *\r\n * @param id - ID of the asset to stop observing\r\n * @param appObjects - Repository of app objects\r\n * @param setVM - Callback function to remove from updates\r\n */\r\n unsubscribe: (\r\n id: string,\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: AssetFileVM) => void\r\n ) => {\r\n const pm = AssetFilePM.getByID(id, appObjects);\r\n if (!pm) {\r\n appObjects.submitError(\"assetFileAdapter\", \"Unable to find AssetFilePM\");\r\n return;\r\n }\r\n pm.removeView(setVM);\r\n }\r\n};\r\n"]}
@@ -1,5 +1,6 @@
1
1
  export * from "./appAssetListAdapter";
2
2
  export * from "./assetAdapter";
3
+ export * from "./assetFileAdapter";
3
4
  export * from "./editingAppAssetAdapter";
4
5
  export * from "./showArchivedAppAssetAdapter";
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Assets/Adapters/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC","sourcesContent":["export * from \"./appAssetListAdapter\";\r\nexport * from \"./assetAdapter\";\r\nexport * from \"./editingAppAssetAdapter\";\r\nexport * from \"./showArchivedAppAssetAdapter\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Assets/Adapters/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC","sourcesContent":["export * from \"./appAssetListAdapter\";\r\nexport * from \"./assetAdapter\";\r\nexport * from \"./assetFileAdapter\";\r\nexport * from \"./editingAppAssetAdapter\";\r\nexport * from \"./showArchivedAppAssetAdapter\";\r\n"]}
@@ -1,5 +1,5 @@
1
1
  import { makeAppAssets, makeAssetEntity, makeAssetRepo } from "../Entities";
2
- import { makeAppAssetListPM, makeAssetPM, makeEditingAppAssetPM, makeShowArchivedAppAssetPM } from "../PMs";
2
+ import { makeAppAssetListPM, makeAssetFilePM, makeAssetPM, makeEditingAppAssetPM, makeShowArchivedAppAssetPM } from "../PMs";
3
3
  import { makeArchiveAssetUC, makeDeleteAssetUC, makeDownloadAssetFileUC, makeEditAppAsset, makeGetAppAssetUC, makeGetAssetBlobURLUC, makeGetAssetFileUC, makeGetAssetUC, makeNewAppAssetUC, makeNewAssetUC, makePrefetchAssets, makeUpdateAppAssetMetaUC, makeUpdateAssetFileUC } from "../UCs";
4
4
  export function setupAssetsForSandbox(appObjects) {
5
5
  const assetRepoAO = appObjects.getOrCreate("Asset Repository");
@@ -35,6 +35,7 @@ function makeAssetFactory(appObjects) {
35
35
  makeUpdateAppAssetMetaUC(ao);
36
36
  // PMs
37
37
  makeAssetPM(ao);
38
+ makeAssetFilePM(ao); // Add our new PM to each asset
38
39
  return entity;
39
40
  };
40
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"setupAssetsForSandbox.js","sourceRoot":"","sources":["../../../../src/Assets/Factories/setupAssetsForSandbox.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,aAAa,EACb,eAAe,EACf,aAAa,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACtB,MAAM,QAAQ,CAAC;AAEhB,MAAM,UAAU,qBAAqB,CAAC,UAAyB;IAC7D,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAEzD,WAAW;IACX,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC7C,SAAS,CAAC,YAAY,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACtD,aAAa,CAAC,WAAW,CAAC,CAAC;IAE3B,MAAM;IACN,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC9B,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACnC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC5B,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC5B,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC/B,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAE/B,MAAM;IACN,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChC,0BAA0B,CAAC,WAAW,CAAC,CAAC;IACxC,qBAAqB,CAAC,WAAW,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAyB;IACjD,OAAO,SAAS,YAAY,CAAC,EAAU;QACrC,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAEtC,WAAW;QACX,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QAEnC,MAAM;QACN,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACvB,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACtB,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAC5B,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAC1B,wBAAwB,CAAC,EAAE,CAAC,CAAC;QAE7B,MAAM;QACN,WAAW,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { AppObjectRepo } from \"@vived/core\";\r\nimport {\r\n AssetEntity,\r\n makeAppAssets,\r\n makeAssetEntity,\r\n makeAssetRepo\r\n} from \"../Entities\";\r\nimport {\r\n makeAppAssetListPM,\r\n makeAssetPM,\r\n makeEditingAppAssetPM,\r\n makeShowArchivedAppAssetPM\r\n} from \"../PMs\";\r\nimport {\r\n makeArchiveAssetUC,\r\n makeDeleteAssetUC,\r\n makeDownloadAssetFileUC,\r\n makeEditAppAsset,\r\n makeGetAppAssetUC,\r\n makeGetAssetBlobURLUC,\r\n makeGetAssetFileUC,\r\n makeGetAssetUC,\r\n makeNewAppAssetUC,\r\n makeNewAssetUC,\r\n makePrefetchAssets,\r\n makeUpdateAppAssetMetaUC,\r\n makeUpdateAssetFileUC\r\n} from \"../UCs\";\r\n\r\nexport function setupAssetsForSandbox(appObjects: AppObjectRepo) {\r\n const assetRepoAO = appObjects.getOrCreate(\"Asset Repository\");\r\n const appAssetsAO = appObjects.getOrCreate(\"App Assets\");\r\n\r\n // Entities\r\n const assetRepo = makeAssetRepo(assetRepoAO);\r\n assetRepo.assetFactory = makeAssetFactory(appObjects);\r\n makeAppAssets(appAssetsAO);\r\n\r\n // UCs\r\n makeEditAppAsset(assetRepoAO);\r\n makeGetAssetBlobURLUC(assetRepoAO);\r\n makeGetAssetFileUC(assetRepoAO);\r\n makeGetAssetUC(assetRepoAO);\r\n makePrefetchAssets(assetRepoAO);\r\n makeNewAssetUC(assetRepoAO);\r\n makeNewAppAssetUC(appAssetsAO);\r\n makeGetAppAssetUC(appAssetsAO);\r\n\r\n // PMs\r\n makeAppAssetListPM(appAssetsAO);\r\n makeShowArchivedAppAssetPM(appAssetsAO);\r\n makeEditingAppAssetPM(appAssetsAO);\r\n}\r\n\r\nfunction makeAssetFactory(appObjects: AppObjectRepo) {\r\n return function assetFactory(id: string): AssetEntity {\r\n const ao = appObjects.getOrCreate(id);\r\n\r\n // Entities\r\n const entity = makeAssetEntity(ao);\r\n\r\n // UCs\r\n makeArchiveAssetUC(ao);\r\n makeDeleteAssetUC(ao);\r\n makeDownloadAssetFileUC(ao);\r\n makeUpdateAssetFileUC(ao);\r\n makeUpdateAppAssetMetaUC(ao);\r\n\r\n // PMs\r\n makeAssetPM(ao);\r\n return entity;\r\n };\r\n}\r\n"]}
1
+ {"version":3,"file":"setupAssetsForSandbox.js","sourceRoot":"","sources":["../../../../src/Assets/Factories/setupAssetsForSandbox.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,aAAa,EACb,eAAe,EACf,aAAa,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACtB,MAAM,QAAQ,CAAC;AAEhB,MAAM,UAAU,qBAAqB,CAAC,UAAyB;IAC7D,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAEzD,WAAW;IACX,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC7C,SAAS,CAAC,YAAY,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACtD,aAAa,CAAC,WAAW,CAAC,CAAC;IAE3B,MAAM;IACN,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC9B,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACnC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC5B,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC5B,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC/B,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAE/B,MAAM;IACN,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChC,0BAA0B,CAAC,WAAW,CAAC,CAAC;IACxC,qBAAqB,CAAC,WAAW,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAyB;IACjD,OAAO,SAAS,YAAY,CAAC,EAAU;QACrC,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAEtC,WAAW;QACX,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QAEnC,MAAM;QACN,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACvB,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACtB,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAC5B,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAC1B,wBAAwB,CAAC,EAAE,CAAC,CAAC;QAE7B,MAAM;QACN,WAAW,CAAC,EAAE,CAAC,CAAC;QAChB,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,+BAA+B;QACpD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { AppObjectRepo } from \"@vived/core\";\r\nimport {\r\n AssetEntity,\r\n makeAppAssets,\r\n makeAssetEntity,\r\n makeAssetRepo\r\n} from \"../Entities\";\r\nimport {\r\n makeAppAssetListPM,\r\n makeAssetFilePM,\r\n makeAssetPM,\r\n makeEditingAppAssetPM,\r\n makeShowArchivedAppAssetPM\r\n} from \"../PMs\";\r\nimport {\r\n makeArchiveAssetUC,\r\n makeDeleteAssetUC,\r\n makeDownloadAssetFileUC,\r\n makeEditAppAsset,\r\n makeGetAppAssetUC,\r\n makeGetAssetBlobURLUC,\r\n makeGetAssetFileUC,\r\n makeGetAssetUC,\r\n makeNewAppAssetUC,\r\n makeNewAssetUC,\r\n makePrefetchAssets,\r\n makeUpdateAppAssetMetaUC,\r\n makeUpdateAssetFileUC\r\n} from \"../UCs\";\r\n\r\nexport function setupAssetsForSandbox(appObjects: AppObjectRepo) {\r\n const assetRepoAO = appObjects.getOrCreate(\"Asset Repository\");\r\n const appAssetsAO = appObjects.getOrCreate(\"App Assets\");\r\n\r\n // Entities\r\n const assetRepo = makeAssetRepo(assetRepoAO);\r\n assetRepo.assetFactory = makeAssetFactory(appObjects);\r\n makeAppAssets(appAssetsAO);\r\n\r\n // UCs\r\n makeEditAppAsset(assetRepoAO);\r\n makeGetAssetBlobURLUC(assetRepoAO);\r\n makeGetAssetFileUC(assetRepoAO);\r\n makeGetAssetUC(assetRepoAO);\r\n makePrefetchAssets(assetRepoAO);\r\n makeNewAssetUC(assetRepoAO);\r\n makeNewAppAssetUC(appAssetsAO);\r\n makeGetAppAssetUC(appAssetsAO);\r\n\r\n // PMs\r\n makeAppAssetListPM(appAssetsAO);\r\n makeShowArchivedAppAssetPM(appAssetsAO);\r\n makeEditingAppAssetPM(appAssetsAO);\r\n}\r\n\r\nfunction makeAssetFactory(appObjects: AppObjectRepo) {\r\n return function assetFactory(id: string): AssetEntity {\r\n const ao = appObjects.getOrCreate(id);\r\n\r\n // Entities\r\n const entity = makeAssetEntity(ao);\r\n\r\n // UCs\r\n makeArchiveAssetUC(ao);\r\n makeDeleteAssetUC(ao);\r\n makeDownloadAssetFileUC(ao);\r\n makeUpdateAssetFileUC(ao);\r\n makeUpdateAppAssetMetaUC(ao);\r\n\r\n // PMs\r\n makeAssetPM(ao);\r\n makeAssetFilePM(ao); // Add our new PM to each asset\r\n return entity;\r\n };\r\n}\r\n"]}
@@ -0,0 +1,20 @@
1
+ import { AssetFilePM } from "../PMs/AssetFilePM";
2
+ /**
3
+ * Mock implementation of AssetFilePM for testing
4
+ * Provides Jest mock functions for testing adapters and other components
5
+ */
6
+ export class AssetFilePMMock extends AssetFilePM {
7
+ /**
8
+ * Creates a new AssetFilePMMock instance
9
+ *
10
+ * @param appObject - The app object to associate with this mock PM
11
+ */
12
+ constructor(appObject) {
13
+ super(appObject, AssetFilePM.type);
14
+ /**
15
+ * Mock implementation of vmsAreEqual for testing
16
+ */
17
+ this.vmsAreEqual = jest.fn();
18
+ }
19
+ }
20
+ //# sourceMappingURL=AssetFilePMMock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssetFilePMMock.js","sourceRoot":"","sources":["../../../../src/Assets/Mocks/AssetFilePMMock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAM9C;;;;OAIG;IACH,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAXrC;;WAEG;QACH,gBAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IASxB,CAAC;CACF","sourcesContent":["// filepath: c:\\Users\\amosp\\Documents\\WebGL\\vivedlearning_host\\src\\Assets\\Mocks\\AssetFilePMMock.ts\r\nimport { AppObject } from \"@vived/core\";\r\nimport { AssetFilePM } from \"../PMs/AssetFilePM\";\r\n\r\n/**\r\n * Mock implementation of AssetFilePM for testing\r\n * Provides Jest mock functions for testing adapters and other components\r\n */\r\nexport class AssetFilePMMock extends AssetFilePM {\r\n /**\r\n * Mock implementation of vmsAreEqual for testing\r\n */\r\n vmsAreEqual = jest.fn();\r\n\r\n /**\r\n * Creates a new AssetFilePMMock instance\r\n *\r\n * @param appObject - The app object to associate with this mock PM\r\n */\r\n constructor(appObject: AppObject) {\r\n super(appObject, AssetFilePM.type);\r\n }\r\n}\r\n"]}
@@ -1,5 +1,6 @@
1
1
  export * from "./AppAssetListPMMock";
2
2
  export * from "./AssetPMMock";
3
+ export * from "./AssetFilePMMock";
3
4
  export * from "./EditingAppAssetPMMock";
4
5
  export * from "./MockArchiveAsset";
5
6
  export * from "./MockDeleteAssetUC";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Assets/Mocks/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC","sourcesContent":["export * from \"./AppAssetListPMMock\";\r\nexport * from \"./AssetPMMock\";\r\nexport * from \"./EditingAppAssetPMMock\";\r\nexport * from \"./MockArchiveAsset\";\r\nexport * from \"./MockDeleteAssetUC\";\r\nexport * from \"./MockDownloadAssetFileUC\";\r\nexport * from \"./MockEditAppAssetUC\";\r\nexport * from \"./MockGetAppAssetsUC\";\r\nexport * from \"./MockGetAssetBlobURLUC\";\r\nexport * from \"./MockGetAssetFileUC\";\r\nexport * from \"./MockGetAssetUC\";\r\nexport * from \"./MockNewAppAsset\";\r\nexport * from \"./MockNewAssetUC\";\r\nexport * from \"./MockPrefetchAssets\";\r\nexport * from \"./MockUpdateAssetFileUC\";\r\nexport * from \"./MockUpdateAppAssetMetaUC\";\r\nexport * from \"./ShowArchivedAppAssetPMMock\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Assets/Mocks/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC","sourcesContent":["export * from \"./AppAssetListPMMock\";\r\nexport * from \"./AssetPMMock\";\r\nexport * from \"./AssetFilePMMock\";\r\nexport * from \"./EditingAppAssetPMMock\";\r\nexport * from \"./MockArchiveAsset\";\r\nexport * from \"./MockDeleteAssetUC\";\r\nexport * from \"./MockDownloadAssetFileUC\";\r\nexport * from \"./MockEditAppAssetUC\";\r\nexport * from \"./MockGetAppAssetsUC\";\r\nexport * from \"./MockGetAssetBlobURLUC\";\r\nexport * from \"./MockGetAssetFileUC\";\r\nexport * from \"./MockGetAssetUC\";\r\nexport * from \"./MockNewAppAsset\";\r\nexport * from \"./MockNewAssetUC\";\r\nexport * from \"./MockPrefetchAssets\";\r\nexport * from \"./MockUpdateAssetFileUC\";\r\nexport * from \"./MockUpdateAppAssetMetaUC\";\r\nexport * from \"./ShowArchivedAppAssetPMMock\";\r\n"]}