@vived/app 6.8.0 → 6.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/dist/cjs/Dispatcher/Factories/DispatcherFeatureFactory.js +4 -3
  2. package/dist/cjs/Dispatcher/Factories/DispatcherFeatureFactory.js.map +1 -1
  3. package/dist/cjs/Dispatcher/Factories/DispatcherFeatureFactory.test.js +35 -0
  4. package/dist/cjs/Dispatcher/Factories/DispatcherFeatureFactory.test.js.map +1 -0
  5. package/dist/cjs/Dispatcher/Factories/setupDispatchers.js +1 -0
  6. package/dist/cjs/Dispatcher/Factories/setupDispatchers.js.map +1 -1
  7. package/dist/cjs/Dispatcher/Factories/setupDispatchers.test.js +33 -0
  8. package/dist/cjs/Dispatcher/Factories/setupDispatchers.test.js.map +1 -0
  9. package/dist/esm/Dispatcher/Factories/DispatcherFeatureFactory.js +5 -4
  10. package/dist/esm/Dispatcher/Factories/DispatcherFeatureFactory.js.map +1 -1
  11. package/dist/esm/Dispatcher/Factories/DispatcherFeatureFactory.test.js +33 -0
  12. package/dist/esm/Dispatcher/Factories/DispatcherFeatureFactory.test.js.map +1 -0
  13. package/dist/esm/Dispatcher/Factories/setupDispatchers.js +2 -1
  14. package/dist/esm/Dispatcher/Factories/setupDispatchers.js.map +1 -1
  15. package/dist/esm/Dispatcher/Factories/setupDispatchers.test.js +31 -0
  16. package/dist/esm/Dispatcher/Factories/setupDispatchers.test.js.map +1 -0
  17. package/dist/types/Dispatcher/Factories/DispatcherFeatureFactory.d.ts +3 -3
  18. package/dist/types/Dispatcher/Factories/DispatcherFeatureFactory.d.ts.map +1 -1
  19. package/dist/types/Dispatcher/Factories/DispatcherFeatureFactory.test.d.ts +2 -0
  20. package/dist/types/Dispatcher/Factories/DispatcherFeatureFactory.test.d.ts.map +1 -0
  21. package/dist/types/Dispatcher/Factories/setupDispatchers.d.ts.map +1 -1
  22. package/dist/types/Dispatcher/Factories/setupDispatchers.test.d.ts +2 -0
  23. package/dist/types/Dispatcher/Factories/setupDispatchers.test.d.ts.map +1 -0
  24. package/package.json +1 -1
  25. package/src/Dispatcher/README.md +9 -6
@@ -15,7 +15,7 @@ const UC_1 = require("../UC");
15
15
  *
16
16
  * The factory creates:
17
17
  * - AppDispatcher entity with hostHandler integration
18
- * - All 24 dispatcher-related Use Cases for handling various app operations
18
+ * - All 27 dispatcher-related Use Cases for handling various app operations
19
19
  *
20
20
  * @extends DomainFactory
21
21
  */
@@ -46,11 +46,11 @@ class DispatcherFeatureFactory extends core_1.DomainFactory {
46
46
  /**
47
47
  * Sets up all use cases for the Dispatcher Feature.
48
48
  *
49
- * Initializes all 24 use cases that define the business operations and
49
+ * Initializes all 27 use cases that define the business operations and
50
50
  * workflows available through the dispatcher system. These use cases handle:
51
51
  * - App lifecycle management (ready, state changes)
52
52
  * - ZSpace integration (start, stop, availability)
53
- * - Asset management (fetching, metadata, URLs)
53
+ * - Asset management (fetching, metadata, URLs, activity asset upload)
54
54
  * - State navigation (previous, next, completion)
55
55
  * - UI interactions (alerts, confirmations, editors)
56
56
  * - Result submission and logging
@@ -69,6 +69,7 @@ class DispatcherFeatureFactory extends core_1.DomainFactory {
69
69
  (0, UC_1.makeGetAssetStreamURLUC)(this.appObject);
70
70
  (0, UC_1.makeGetLinkedAssetsUC)(this.appObject);
71
71
  (0, UC_1.makeIsAssetFetchedUC)(this.appObject);
72
+ (0, UC_1.makeSubmitActivityAssetUC)(this.appObject);
72
73
  // State navigation
73
74
  (0, UC_1.makeGoToPreviousStateUC)(this.appObject);
74
75
  (0, UC_1.makeGoToNextStateUC)(this.appObject);
@@ -1 +1 @@
1
- {"version":3,"file":"DispatcherFeatureFactory.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Factories/DispatcherFeatureFactory.ts"],"names":[],"mappings":"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","sourcesContent":["import { DomainFactory, AppObject, Handler, AppObjectRepo } from \"@vived/core\";\nimport { makeAppDispatcher } from \"../Entities\";\nimport {\n makeAppIsReadyUC,\n makeDispatchStartZSpaceUC,\n makeDispatchStateChangeUC,\n makeDispatchStopZSpaceUC,\n makeGetAssetBlobURLUC,\n makeGetAssetFolderURLUC,\n makeGetAssetMetaUC,\n makeGetAssetsForOwnerUC,\n makeGetAssetStreamURLUC,\n makeGetLinkedAssetsUC,\n makeGoToNextStateUC,\n makeGoToPreviousStateUC,\n makeHasNextStateUC,\n makeHasPreviousStateUC,\n makeIsAssetFetchedUC,\n makeIsZSpaceAvailableUC,\n makeLogUC,\n makeRegisterExternalStylesheetsUC,\n makeShowAlertUC,\n makeShowConfirmUC,\n makeShowMarkdownEditorUC,\n makeShowSelectModelUC,\n makeShowSpinnerUC,\n makeStateHasChangedUC,\n makeStateIsCompleteUC,\n makeSubmitResultUC,\n} from \"../UC\";\n\n/**\n * Factory responsible for setting up the Dispatcher Feature domain components.\n *\n * This factory initializes the AppDispatcher entity and all associated use cases\n * required for the Dispatcher Feature functionality. It follows the domain-driven\n * design pattern by organizing components into their respective layers and replaces\n * the legacy setupDispatchers function while maintaining backwards compatibility.\n *\n * The factory creates:\n * - AppDispatcher entity with hostHandler integration\n * - All 24 dispatcher-related Use Cases for handling various app operations\n *\n * @extends DomainFactory\n */\nexport class DispatcherFeatureFactory extends DomainFactory {\n factoryName = \"DispatcherFeatureFactory\";\n\n public verbose = false;\n\n private hostHandler: Handler;\n\n /**\n * Creates a new DispatcherFeatureFactory instance.\n *\n * @param appObject The AppObject to attach the factory to\n * @param hostHandler The handler function for processing dispatched requests\n */\n constructor(appObject: AppObject, hostHandler: Handler) {\n super(appObject);\n this.hostHandler = hostHandler;\n }\n\n /**\n * Sets up all entities required for the Dispatcher Feature.\n *\n * Creates the AppDispatcher singleton entity that serves as the main\n * communication bridge between the app and the host environment.\n * The entity is initialized with the provided hostHandler for request processing.\n */\n setupEntities(): void {\n const entity = makeAppDispatcher(this.appObject, this.hostHandler);\n entity.verbose = this.verbose;\n }\n\n /**\n * Sets up all use cases for the Dispatcher Feature.\n *\n * Initializes all 24 use cases that define the business operations and\n * workflows available through the dispatcher system. These use cases handle:\n * - App lifecycle management (ready, state changes)\n * - ZSpace integration (start, stop, availability)\n * - Asset management (fetching, metadata, URLs)\n * - State navigation (previous, next, completion)\n * - UI interactions (alerts, confirmations, editors)\n * - Result submission and logging\n */\n setupUCs(): void {\n // App lifecycle and state management\n makeAppIsReadyUC(this.appObject);\n makeDispatchStartZSpaceUC(this.appObject);\n makeDispatchStateChangeUC(this.appObject);\n makeDispatchStopZSpaceUC(this.appObject);\n\n // Asset management\n makeGetAssetBlobURLUC(this.appObject);\n makeGetAssetFolderURLUC(this.appObject);\n makeGetAssetMetaUC(this.appObject);\n makeGetAssetsForOwnerUC(this.appObject);\n makeGetAssetStreamURLUC(this.appObject);\n makeGetLinkedAssetsUC(this.appObject);\n makeIsAssetFetchedUC(this.appObject);\n\n // State navigation\n makeGoToPreviousStateUC(this.appObject);\n makeGoToNextStateUC(this.appObject);\n makeHasPreviousStateUC(this.appObject);\n makeHasNextStateUC(this.appObject);\n makeStateHasChangedUC(this.appObject);\n makeStateIsCompleteUC(this.appObject);\n\n // ZSpace integration\n makeIsZSpaceAvailableUC(this.appObject);\n\n // Logging and utilities\n makeLogUC(this.appObject);\n makeRegisterExternalStylesheetsUC(this.appObject);\n\n // UI interactions\n makeShowAlertUC(this.appObject);\n makeShowConfirmUC(this.appObject);\n makeShowMarkdownEditorUC(this.appObject);\n makeShowSelectModelUC(this.appObject);\n makeShowSpinnerUC(this.appObject);\n\n // Result submission\n makeSubmitResultUC(this.appObject);\n }\n\n /**\n * Sets up all presentation models for the Dispatcher Feature.\n *\n * Currently no presentation models are required for the dispatcher feature\n * as it primarily handles business logic and communication with the host.\n */\n setupPMs(): void {\n // TODO: Create presentation models if needed for dispatcher UI components\n }\n\n /**\n * Performs any final setup operations after all components are initialized.\n *\n * This method is called after entities, use cases, and presentation models\n * have been set up. Currently no additional setup is required for this feature.\n */\n finalSetup(): void {\n // No additional setup required for this feature\n }\n}\n\n/**\n * Factory function to create a new DispatcherFeatureFactory.\n *\n * This function provides the same functionality as the legacy setupDispatchers\n * function but follows the Clean Architecture pattern with proper separation\n * of concerns and domain-driven design principles.\n *\n * @param appObjectRepo The AppObjectRepo to create the dispatcher AppObject from\n * @param hostHandler The handler function for processing dispatched requests\n * @returns A new DispatcherFeatureFactory instance\n */\nexport function makeDispatcherFeatureFactory(\n appObjectRepo: AppObjectRepo,\n hostHandler: Handler,\n): DispatcherFeatureFactory {\n const appObject = appObjectRepo.getOrCreate(\"App Dispatcher\");\n return new DispatcherFeatureFactory(appObject, hostHandler);\n}\n"]}
1
+ {"version":3,"file":"DispatcherFeatureFactory.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Factories/DispatcherFeatureFactory.ts"],"names":[],"mappings":";;;AAmKA,oEAMC;AAzKD,sCAA+E;AAC/E,0CAAgD;AAChD,8BA4Be;AAEf;;;;;;;;;;;;;GAaG;AACH,MAAa,wBAAyB,SAAQ,oBAAa;IAOzD;;;;;OAKG;IACH,YAAY,SAAoB,EAAE,WAAoB;QACpD,KAAK,CAAC,SAAS,CAAC,CAAC;QAbnB,gBAAW,GAAG,0BAA0B,CAAC;QAElC,YAAO,GAAG,KAAK,CAAC;QAYrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED;;;;;;OAMG;IACH,aAAa;QACX,MAAM,MAAM,GAAG,IAAA,4BAAiB,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACnE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAChC,CAAC;IAED;;;;;;;;;;;OAWG;IACH,QAAQ;QACN,qCAAqC;QACrC,IAAA,qBAAgB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,IAAA,8BAAyB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAA,8BAAyB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAA,6BAAwB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEzC,mBAAmB;QACnB,IAAA,0BAAqB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,IAAA,4BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAA,uBAAkB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,IAAA,4BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAA,4BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAA,0BAAqB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,IAAA,yBAAoB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,IAAA,8BAAyB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE1C,mBAAmB;QACnB,IAAA,4BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAA,wBAAmB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,IAAA,2BAAsB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,IAAA,uBAAkB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,IAAA,0BAAqB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,IAAA,0BAAqB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEtC,qBAAqB;QACrB,IAAA,4BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAExC,wBAAwB;QACxB,IAAA,cAAS,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1B,IAAA,sCAAiC,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAElD,kBAAkB;QAClB,IAAA,oBAAe,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,IAAA,sBAAiB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClC,IAAA,6BAAwB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAA,0BAAqB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,IAAA,sBAAiB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAElC,oBAAoB;QACpB,IAAA,uBAAkB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAED;;;;;OAKG;IACH,QAAQ;QACN,0EAA0E;IAC5E,CAAC;IAED;;;;;OAKG;IACH,UAAU;QACR,gDAAgD;IAClD,CAAC;CACF;AAxGD,4DAwGC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,4BAA4B,CAC1C,aAA4B,EAC5B,WAAoB;IAEpB,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAC9D,OAAO,IAAI,wBAAwB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC9D,CAAC","sourcesContent":["import { DomainFactory, AppObject, Handler, AppObjectRepo } from \"@vived/core\";\r\nimport { makeAppDispatcher } from \"../Entities\";\r\nimport {\r\n makeAppIsReadyUC,\r\n makeDispatchStartZSpaceUC,\r\n makeDispatchStateChangeUC,\r\n makeDispatchStopZSpaceUC,\r\n makeGetAssetBlobURLUC,\r\n makeGetAssetFolderURLUC,\r\n makeGetAssetMetaUC,\r\n makeGetAssetsForOwnerUC,\r\n makeGetAssetStreamURLUC,\r\n makeGetLinkedAssetsUC,\r\n makeGoToNextStateUC,\r\n makeGoToPreviousStateUC,\r\n makeHasNextStateUC,\r\n makeHasPreviousStateUC,\r\n makeIsAssetFetchedUC,\r\n makeIsZSpaceAvailableUC,\r\n makeLogUC,\r\n makeRegisterExternalStylesheetsUC,\r\n makeShowAlertUC,\r\n makeShowConfirmUC,\r\n makeShowMarkdownEditorUC,\r\n makeShowSelectModelUC,\r\n makeShowSpinnerUC,\r\n makeStateHasChangedUC,\r\n makeStateIsCompleteUC,\r\n makeSubmitActivityAssetUC,\r\n makeSubmitResultUC,\r\n} from \"../UC\";\r\n\r\n/**\r\n * Factory responsible for setting up the Dispatcher Feature domain components.\r\n *\r\n * This factory initializes the AppDispatcher entity and all associated use cases\r\n * required for the Dispatcher Feature functionality. It follows the domain-driven\r\n * design pattern by organizing components into their respective layers and replaces\r\n * the legacy setupDispatchers function while maintaining backwards compatibility.\r\n *\r\n * The factory creates:\r\n * - AppDispatcher entity with hostHandler integration\r\n * - All 27 dispatcher-related Use Cases for handling various app operations\r\n *\r\n * @extends DomainFactory\r\n */\r\nexport class DispatcherFeatureFactory extends DomainFactory {\r\n factoryName = \"DispatcherFeatureFactory\";\r\n\r\n public verbose = false;\r\n\r\n private hostHandler: Handler;\r\n\r\n /**\r\n * Creates a new DispatcherFeatureFactory instance.\r\n *\r\n * @param appObject The AppObject to attach the factory to\r\n * @param hostHandler The handler function for processing dispatched requests\r\n */\r\n constructor(appObject: AppObject, hostHandler: Handler) {\r\n super(appObject);\r\n this.hostHandler = hostHandler;\r\n }\r\n\r\n /**\r\n * Sets up all entities required for the Dispatcher Feature.\r\n *\r\n * Creates the AppDispatcher singleton entity that serves as the main\r\n * communication bridge between the app and the host environment.\r\n * The entity is initialized with the provided hostHandler for request processing.\r\n */\r\n setupEntities(): void {\r\n const entity = makeAppDispatcher(this.appObject, this.hostHandler);\r\n entity.verbose = this.verbose;\r\n }\r\n\r\n /**\r\n * Sets up all use cases for the Dispatcher Feature.\r\n *\r\n * Initializes all 27 use cases that define the business operations and\r\n * workflows available through the dispatcher system. These use cases handle:\r\n * - App lifecycle management (ready, state changes)\r\n * - ZSpace integration (start, stop, availability)\r\n * - Asset management (fetching, metadata, URLs, activity asset upload)\r\n * - State navigation (previous, next, completion)\r\n * - UI interactions (alerts, confirmations, editors)\r\n * - Result submission and logging\r\n */\r\n setupUCs(): void {\r\n // App lifecycle and state management\r\n makeAppIsReadyUC(this.appObject);\r\n makeDispatchStartZSpaceUC(this.appObject);\r\n makeDispatchStateChangeUC(this.appObject);\r\n makeDispatchStopZSpaceUC(this.appObject);\r\n\r\n // Asset management\r\n makeGetAssetBlobURLUC(this.appObject);\r\n makeGetAssetFolderURLUC(this.appObject);\r\n makeGetAssetMetaUC(this.appObject);\r\n makeGetAssetsForOwnerUC(this.appObject);\r\n makeGetAssetStreamURLUC(this.appObject);\r\n makeGetLinkedAssetsUC(this.appObject);\r\n makeIsAssetFetchedUC(this.appObject);\r\n makeSubmitActivityAssetUC(this.appObject);\r\n\r\n // State navigation\r\n makeGoToPreviousStateUC(this.appObject);\r\n makeGoToNextStateUC(this.appObject);\r\n makeHasPreviousStateUC(this.appObject);\r\n makeHasNextStateUC(this.appObject);\r\n makeStateHasChangedUC(this.appObject);\r\n makeStateIsCompleteUC(this.appObject);\r\n\r\n // ZSpace integration\r\n makeIsZSpaceAvailableUC(this.appObject);\r\n\r\n // Logging and utilities\r\n makeLogUC(this.appObject);\r\n makeRegisterExternalStylesheetsUC(this.appObject);\r\n\r\n // UI interactions\r\n makeShowAlertUC(this.appObject);\r\n makeShowConfirmUC(this.appObject);\r\n makeShowMarkdownEditorUC(this.appObject);\r\n makeShowSelectModelUC(this.appObject);\r\n makeShowSpinnerUC(this.appObject);\r\n\r\n // Result submission\r\n makeSubmitResultUC(this.appObject);\r\n }\r\n\r\n /**\r\n * Sets up all presentation models for the Dispatcher Feature.\r\n *\r\n * Currently no presentation models are required for the dispatcher feature\r\n * as it primarily handles business logic and communication with the host.\r\n */\r\n setupPMs(): void {\r\n // TODO: Create presentation models if needed for dispatcher UI components\r\n }\r\n\r\n /**\r\n * Performs any final setup operations after all components are initialized.\r\n *\r\n * This method is called after entities, use cases, and presentation models\r\n * have been set up. Currently no additional setup is required for this feature.\r\n */\r\n finalSetup(): void {\r\n // No additional setup required for this feature\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new DispatcherFeatureFactory.\r\n *\r\n * This function provides the same functionality as the legacy setupDispatchers\r\n * function but follows the Clean Architecture pattern with proper separation\r\n * of concerns and domain-driven design principles.\r\n *\r\n * @param appObjectRepo The AppObjectRepo to create the dispatcher AppObject from\r\n * @param hostHandler The handler function for processing dispatched requests\r\n * @returns A new DispatcherFeatureFactory instance\r\n */\r\nexport function makeDispatcherFeatureFactory(\r\n appObjectRepo: AppObjectRepo,\r\n hostHandler: Handler,\r\n): DispatcherFeatureFactory {\r\n const appObject = appObjectRepo.getOrCreate(\"App Dispatcher\");\r\n return new DispatcherFeatureFactory(appObject, hostHandler);\r\n}\r\n"]}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@vived/core");
4
+ const UC_1 = require("../UC");
5
+ const DispatcherFeatureFactory_1 = require("./DispatcherFeatureFactory");
6
+ function makeTestRig() {
7
+ const appObjects = (0, core_1.makeAppObjectRepo)();
8
+ const hostHandler = jest.fn((request) => {
9
+ if (request.type === "SUBMIT_ACTIVITY_ASSET") {
10
+ request.payload.callback("anAssetID");
11
+ }
12
+ });
13
+ const factory = (0, DispatcherFeatureFactory_1.makeDispatcherFeatureFactory)(appObjects, hostHandler);
14
+ factory.setupEntities();
15
+ factory.setupUCs();
16
+ const testFile = new File(["test"], "model.glb");
17
+ return { appObjects, hostHandler, testFile };
18
+ }
19
+ describe("DispatcherFeatureFactory", () => {
20
+ it("Sets up the SubmitActivityAssetUC", () => {
21
+ const { appObjects } = makeTestRig();
22
+ expect(UC_1.SubmitActivityAssetUC.get(appObjects)).toBeDefined();
23
+ });
24
+ it("Submits an activity asset to the host and resolves with its id", async () => {
25
+ const { appObjects, hostHandler, testFile } = makeTestRig();
26
+ const id = await (0, UC_1.submitActivityAsset)(testFile, appObjects);
27
+ expect(hostHandler).toHaveBeenCalledTimes(1);
28
+ const request = hostHandler.mock.calls[0][0];
29
+ expect(request.type).toEqual("SUBMIT_ACTIVITY_ASSET");
30
+ expect(request.version).toEqual(1);
31
+ expect(request.payload.assetFile).toBe(testFile);
32
+ expect(id).toEqual("anAssetID");
33
+ });
34
+ });
35
+ //# sourceMappingURL=DispatcherFeatureFactory.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DispatcherFeatureFactory.test.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Factories/DispatcherFeatureFactory.test.ts"],"names":[],"mappings":";;AAAA,sCAAyD;AACzD,8BAAmE;AACnE,yEAA0E;AAE1E,SAAS,WAAW;IAClB,MAAM,UAAU,GAAG,IAAA,wBAAiB,GAAE,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,OAAgB,EAAE,EAAE;QAC/C,IAAI,OAAO,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;YAC5C,OAAO,CAAC,OAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAA,uDAA4B,EAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACtE,OAAO,CAAC,aAAa,EAAE,CAAC;IACxB,OAAO,CAAC,QAAQ,EAAE,CAAC;IAEnB,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;IAEjD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AAC/C,CAAC;AAED,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAErC,MAAM,CAAC,0BAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;QAE5D,MAAM,EAAE,GAAG,MAAM,IAAA,wBAAmB,EAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAE3D,MAAM,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACtD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAE,OAAO,CAAC,OAAe,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { makeAppObjectRepo, Request } from \"@vived/core\";\r\nimport { SubmitActivityAssetUC, submitActivityAsset } from \"../UC\";\r\nimport { makeDispatcherFeatureFactory } from \"./DispatcherFeatureFactory\";\r\n\r\nfunction makeTestRig() {\r\n const appObjects = makeAppObjectRepo();\r\n const hostHandler = jest.fn((request: Request) => {\r\n if (request.type === \"SUBMIT_ACTIVITY_ASSET\") {\r\n (request.payload as any).callback(\"anAssetID\");\r\n }\r\n });\r\n\r\n const factory = makeDispatcherFeatureFactory(appObjects, hostHandler);\r\n factory.setupEntities();\r\n factory.setupUCs();\r\n\r\n const testFile = new File([\"test\"], \"model.glb\");\r\n\r\n return { appObjects, hostHandler, testFile };\r\n}\r\n\r\ndescribe(\"DispatcherFeatureFactory\", () => {\r\n it(\"Sets up the SubmitActivityAssetUC\", () => {\r\n const { appObjects } = makeTestRig();\r\n\r\n expect(SubmitActivityAssetUC.get(appObjects)).toBeDefined();\r\n });\r\n\r\n it(\"Submits an activity asset to the host and resolves with its id\", async () => {\r\n const { appObjects, hostHandler, testFile } = makeTestRig();\r\n\r\n const id = await submitActivityAsset(testFile, appObjects);\r\n\r\n expect(hostHandler).toHaveBeenCalledTimes(1);\r\n const request = hostHandler.mock.calls[0][0];\r\n expect(request.type).toEqual(\"SUBMIT_ACTIVITY_ASSET\");\r\n expect(request.version).toEqual(1);\r\n expect((request.payload as any).assetFile).toBe(testFile);\r\n expect(id).toEqual(\"anAssetID\");\r\n });\r\n});\r\n"]}
@@ -31,6 +31,7 @@ function setupDispatchers(appObjects, hostHandler) {
31
31
  (0, UC_1.makeShowSpinnerUC)(dispatcherAO);
32
32
  (0, UC_1.makeStateHasChangedUC)(dispatcherAO);
33
33
  (0, UC_1.makeStateIsCompleteUC)(dispatcherAO);
34
+ (0, UC_1.makeSubmitActivityAssetUC)(dispatcherAO);
34
35
  (0, UC_1.makeSubmitResultUC)(dispatcherAO);
35
36
  }
36
37
  //# sourceMappingURL=setupDispatchers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setupDispatchers.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Factories/setupDispatchers.ts"],"names":[],"mappings":";;AA+BA,4CAkCC;AAhED,0CAAgD;AAChD,8BA2Be;AAEf,SAAgB,gBAAgB,CAC9B,UAAyB,EACzB,WAAoB;IAEpB,MAAM,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAE9D,IAAA,4BAAiB,EAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAE7C,IAAA,qBAAgB,EAAC,YAAY,CAAC,CAAC;IAC/B,IAAA,8BAAyB,EAAC,YAAY,CAAC,CAAC;IACxC,IAAA,8BAAyB,EAAC,YAAY,CAAC,CAAC;IACxC,IAAA,6BAAwB,EAAC,YAAY,CAAC,CAAC;IACvC,IAAA,0BAAqB,EAAC,YAAY,CAAC,CAAC;IACpC,IAAA,4BAAuB,EAAC,YAAY,CAAC,CAAC;IACtC,IAAA,uBAAkB,EAAC,YAAY,CAAC,CAAC;IACjC,IAAA,4BAAuB,EAAC,YAAY,CAAC,CAAC;IACtC,IAAA,4BAAuB,EAAC,YAAY,CAAC,CAAC;IACtC,IAAA,0BAAqB,EAAC,YAAY,CAAC,CAAC;IACpC,IAAA,4BAAuB,EAAC,YAAY,CAAC,CAAC;IACtC,IAAA,wBAAmB,EAAC,YAAY,CAAC,CAAC;IAClC,IAAA,2BAAsB,EAAC,YAAY,CAAC,CAAC;IACrC,IAAA,uBAAkB,EAAC,YAAY,CAAC,CAAC;IACjC,IAAA,yBAAoB,EAAC,YAAY,CAAC,CAAC;IACnC,IAAA,4BAAuB,EAAC,YAAY,CAAC,CAAC;IACtC,IAAA,cAAS,EAAC,YAAY,CAAC,CAAC;IACxB,IAAA,sCAAiC,EAAC,YAAY,CAAC,CAAC;IAChD,IAAA,oBAAe,EAAC,YAAY,CAAC,CAAC;IAC9B,IAAA,sBAAiB,EAAC,YAAY,CAAC,CAAC;IAChC,IAAA,6BAAwB,EAAC,YAAY,CAAC,CAAC;IACvC,IAAA,0BAAqB,EAAC,YAAY,CAAC,CAAC;IACpC,IAAA,sBAAiB,EAAC,YAAY,CAAC,CAAC;IAChC,IAAA,0BAAqB,EAAC,YAAY,CAAC,CAAC;IACpC,IAAA,0BAAqB,EAAC,YAAY,CAAC,CAAC;IACpC,IAAA,uBAAkB,EAAC,YAAY,CAAC,CAAC;AACnC,CAAC","sourcesContent":["import { AppObjectRepo, Handler } from \"@vived/core\";\nimport { makeAppDispatcher } from \"../Entities\";\nimport {\n makeAppIsReadyUC,\n makeDispatchStartZSpaceUC,\n makeDispatchStateChangeUC,\n makeDispatchStopZSpaceUC,\n makeGetAssetBlobURLUC,\n makeGetAssetFolderURLUC,\n makeGetAssetMetaUC,\n makeGetAssetsForOwnerUC,\n makeGetAssetStreamURLUC,\n makeGetLinkedAssetsUC,\n makeGoToNextStateUC,\n makeGoToPreviousStateUC,\n makeHasNextStateUC,\n makeHasPreviousStateUC,\n makeIsAssetFetchedUC,\n makeIsZSpaceAvailableUC,\n makeLogUC,\n makeRegisterExternalStylesheetsUC,\n makeShowAlertUC,\n makeShowConfirmUC,\n makeShowMarkdownEditorUC,\n makeShowSelectModelUC,\n makeShowSpinnerUC,\n makeStateHasChangedUC,\n makeStateIsCompleteUC,\n makeSubmitResultUC,\n} from \"../UC\";\n\nexport function setupDispatchers(\n appObjects: AppObjectRepo,\n hostHandler: Handler,\n) {\n const dispatcherAO = appObjects.getOrCreate(\"App Dispatcher\");\n\n makeAppDispatcher(dispatcherAO, hostHandler);\n\n makeAppIsReadyUC(dispatcherAO);\n makeDispatchStartZSpaceUC(dispatcherAO);\n makeDispatchStateChangeUC(dispatcherAO);\n makeDispatchStopZSpaceUC(dispatcherAO);\n makeGetAssetBlobURLUC(dispatcherAO);\n makeGetAssetFolderURLUC(dispatcherAO);\n makeGetAssetMetaUC(dispatcherAO);\n makeGetAssetsForOwnerUC(dispatcherAO);\n makeGetAssetStreamURLUC(dispatcherAO);\n makeGetLinkedAssetsUC(dispatcherAO);\n makeGoToPreviousStateUC(dispatcherAO);\n makeGoToNextStateUC(dispatcherAO);\n makeHasPreviousStateUC(dispatcherAO);\n makeHasNextStateUC(dispatcherAO);\n makeIsAssetFetchedUC(dispatcherAO);\n makeIsZSpaceAvailableUC(dispatcherAO);\n makeLogUC(dispatcherAO);\n makeRegisterExternalStylesheetsUC(dispatcherAO);\n makeShowAlertUC(dispatcherAO);\n makeShowConfirmUC(dispatcherAO);\n makeShowMarkdownEditorUC(dispatcherAO);\n makeShowSelectModelUC(dispatcherAO);\n makeShowSpinnerUC(dispatcherAO);\n makeStateHasChangedUC(dispatcherAO);\n makeStateIsCompleteUC(dispatcherAO);\n makeSubmitResultUC(dispatcherAO);\n}\n"]}
1
+ {"version":3,"file":"setupDispatchers.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Factories/setupDispatchers.ts"],"names":[],"mappings":";;AAgCA,4CAmCC;AAlED,0CAAgD;AAChD,8BA4Be;AAEf,SAAgB,gBAAgB,CAC9B,UAAyB,EACzB,WAAoB;IAEpB,MAAM,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAE9D,IAAA,4BAAiB,EAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAE7C,IAAA,qBAAgB,EAAC,YAAY,CAAC,CAAC;IAC/B,IAAA,8BAAyB,EAAC,YAAY,CAAC,CAAC;IACxC,IAAA,8BAAyB,EAAC,YAAY,CAAC,CAAC;IACxC,IAAA,6BAAwB,EAAC,YAAY,CAAC,CAAC;IACvC,IAAA,0BAAqB,EAAC,YAAY,CAAC,CAAC;IACpC,IAAA,4BAAuB,EAAC,YAAY,CAAC,CAAC;IACtC,IAAA,uBAAkB,EAAC,YAAY,CAAC,CAAC;IACjC,IAAA,4BAAuB,EAAC,YAAY,CAAC,CAAC;IACtC,IAAA,4BAAuB,EAAC,YAAY,CAAC,CAAC;IACtC,IAAA,0BAAqB,EAAC,YAAY,CAAC,CAAC;IACpC,IAAA,4BAAuB,EAAC,YAAY,CAAC,CAAC;IACtC,IAAA,wBAAmB,EAAC,YAAY,CAAC,CAAC;IAClC,IAAA,2BAAsB,EAAC,YAAY,CAAC,CAAC;IACrC,IAAA,uBAAkB,EAAC,YAAY,CAAC,CAAC;IACjC,IAAA,yBAAoB,EAAC,YAAY,CAAC,CAAC;IACnC,IAAA,4BAAuB,EAAC,YAAY,CAAC,CAAC;IACtC,IAAA,cAAS,EAAC,YAAY,CAAC,CAAC;IACxB,IAAA,sCAAiC,EAAC,YAAY,CAAC,CAAC;IAChD,IAAA,oBAAe,EAAC,YAAY,CAAC,CAAC;IAC9B,IAAA,sBAAiB,EAAC,YAAY,CAAC,CAAC;IAChC,IAAA,6BAAwB,EAAC,YAAY,CAAC,CAAC;IACvC,IAAA,0BAAqB,EAAC,YAAY,CAAC,CAAC;IACpC,IAAA,sBAAiB,EAAC,YAAY,CAAC,CAAC;IAChC,IAAA,0BAAqB,EAAC,YAAY,CAAC,CAAC;IACpC,IAAA,0BAAqB,EAAC,YAAY,CAAC,CAAC;IACpC,IAAA,8BAAyB,EAAC,YAAY,CAAC,CAAC;IACxC,IAAA,uBAAkB,EAAC,YAAY,CAAC,CAAC;AACnC,CAAC","sourcesContent":["import { AppObjectRepo, Handler } from \"@vived/core\";\r\nimport { makeAppDispatcher } from \"../Entities\";\r\nimport {\r\n makeAppIsReadyUC,\r\n makeDispatchStartZSpaceUC,\r\n makeDispatchStateChangeUC,\r\n makeDispatchStopZSpaceUC,\r\n makeGetAssetBlobURLUC,\r\n makeGetAssetFolderURLUC,\r\n makeGetAssetMetaUC,\r\n makeGetAssetsForOwnerUC,\r\n makeGetAssetStreamURLUC,\r\n makeGetLinkedAssetsUC,\r\n makeGoToNextStateUC,\r\n makeGoToPreviousStateUC,\r\n makeHasNextStateUC,\r\n makeHasPreviousStateUC,\r\n makeIsAssetFetchedUC,\r\n makeIsZSpaceAvailableUC,\r\n makeLogUC,\r\n makeRegisterExternalStylesheetsUC,\r\n makeShowAlertUC,\r\n makeShowConfirmUC,\r\n makeShowMarkdownEditorUC,\r\n makeShowSelectModelUC,\r\n makeShowSpinnerUC,\r\n makeStateHasChangedUC,\r\n makeStateIsCompleteUC,\r\n makeSubmitActivityAssetUC,\r\n makeSubmitResultUC,\r\n} from \"../UC\";\r\n\r\nexport function setupDispatchers(\r\n appObjects: AppObjectRepo,\r\n hostHandler: Handler,\r\n) {\r\n const dispatcherAO = appObjects.getOrCreate(\"App Dispatcher\");\r\n\r\n makeAppDispatcher(dispatcherAO, hostHandler);\r\n\r\n makeAppIsReadyUC(dispatcherAO);\r\n makeDispatchStartZSpaceUC(dispatcherAO);\r\n makeDispatchStateChangeUC(dispatcherAO);\r\n makeDispatchStopZSpaceUC(dispatcherAO);\r\n makeGetAssetBlobURLUC(dispatcherAO);\r\n makeGetAssetFolderURLUC(dispatcherAO);\r\n makeGetAssetMetaUC(dispatcherAO);\r\n makeGetAssetsForOwnerUC(dispatcherAO);\r\n makeGetAssetStreamURLUC(dispatcherAO);\r\n makeGetLinkedAssetsUC(dispatcherAO);\r\n makeGoToPreviousStateUC(dispatcherAO);\r\n makeGoToNextStateUC(dispatcherAO);\r\n makeHasPreviousStateUC(dispatcherAO);\r\n makeHasNextStateUC(dispatcherAO);\r\n makeIsAssetFetchedUC(dispatcherAO);\r\n makeIsZSpaceAvailableUC(dispatcherAO);\r\n makeLogUC(dispatcherAO);\r\n makeRegisterExternalStylesheetsUC(dispatcherAO);\r\n makeShowAlertUC(dispatcherAO);\r\n makeShowConfirmUC(dispatcherAO);\r\n makeShowMarkdownEditorUC(dispatcherAO);\r\n makeShowSelectModelUC(dispatcherAO);\r\n makeShowSpinnerUC(dispatcherAO);\r\n makeStateHasChangedUC(dispatcherAO);\r\n makeStateIsCompleteUC(dispatcherAO);\r\n makeSubmitActivityAssetUC(dispatcherAO);\r\n makeSubmitResultUC(dispatcherAO);\r\n}\r\n"]}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@vived/core");
4
+ const UC_1 = require("../UC");
5
+ const setupDispatchers_1 = require("./setupDispatchers");
6
+ function makeTestRig() {
7
+ const appObjects = (0, core_1.makeAppObjectRepo)();
8
+ const hostHandler = jest.fn((request) => {
9
+ if (request.type === "SUBMIT_ACTIVITY_ASSET") {
10
+ request.payload.callback("anAssetID");
11
+ }
12
+ });
13
+ (0, setupDispatchers_1.setupDispatchers)(appObjects, hostHandler);
14
+ const testFile = new File(["test"], "model.glb");
15
+ return { appObjects, hostHandler, testFile };
16
+ }
17
+ describe("setupDispatchers", () => {
18
+ it("Sets up the SubmitActivityAssetUC", () => {
19
+ const { appObjects } = makeTestRig();
20
+ expect(UC_1.SubmitActivityAssetUC.get(appObjects)).toBeDefined();
21
+ });
22
+ it("Submits an activity asset to the host and resolves with its id", async () => {
23
+ const { appObjects, hostHandler, testFile } = makeTestRig();
24
+ const id = await (0, UC_1.submitActivityAsset)(testFile, appObjects);
25
+ expect(hostHandler).toHaveBeenCalledTimes(1);
26
+ const request = hostHandler.mock.calls[0][0];
27
+ expect(request.type).toEqual("SUBMIT_ACTIVITY_ASSET");
28
+ expect(request.version).toEqual(1);
29
+ expect(request.payload.assetFile).toBe(testFile);
30
+ expect(id).toEqual("anAssetID");
31
+ });
32
+ });
33
+ //# sourceMappingURL=setupDispatchers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupDispatchers.test.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Factories/setupDispatchers.test.ts"],"names":[],"mappings":";;AAAA,sCAAyD;AACzD,8BAAmE;AACnE,yDAAsD;AAEtD,SAAS,WAAW;IAClB,MAAM,UAAU,GAAG,IAAA,wBAAiB,GAAE,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,OAAgB,EAAE,EAAE;QAC/C,IAAI,OAAO,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;YAC5C,OAAO,CAAC,OAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAA,mCAAgB,EAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;IAEjD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AAC/C,CAAC;AAED,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAErC,MAAM,CAAC,0BAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;QAE5D,MAAM,EAAE,GAAG,MAAM,IAAA,wBAAmB,EAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAE3D,MAAM,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACtD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAE,OAAO,CAAC,OAAe,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { makeAppObjectRepo, Request } from \"@vived/core\";\r\nimport { SubmitActivityAssetUC, submitActivityAsset } from \"../UC\";\r\nimport { setupDispatchers } from \"./setupDispatchers\";\r\n\r\nfunction makeTestRig() {\r\n const appObjects = makeAppObjectRepo();\r\n const hostHandler = jest.fn((request: Request) => {\r\n if (request.type === \"SUBMIT_ACTIVITY_ASSET\") {\r\n (request.payload as any).callback(\"anAssetID\");\r\n }\r\n });\r\n\r\n setupDispatchers(appObjects, hostHandler);\r\n\r\n const testFile = new File([\"test\"], \"model.glb\");\r\n\r\n return { appObjects, hostHandler, testFile };\r\n}\r\n\r\ndescribe(\"setupDispatchers\", () => {\r\n it(\"Sets up the SubmitActivityAssetUC\", () => {\r\n const { appObjects } = makeTestRig();\r\n\r\n expect(SubmitActivityAssetUC.get(appObjects)).toBeDefined();\r\n });\r\n\r\n it(\"Submits an activity asset to the host and resolves with its id\", async () => {\r\n const { appObjects, hostHandler, testFile } = makeTestRig();\r\n\r\n const id = await submitActivityAsset(testFile, appObjects);\r\n\r\n expect(hostHandler).toHaveBeenCalledTimes(1);\r\n const request = hostHandler.mock.calls[0][0];\r\n expect(request.type).toEqual(\"SUBMIT_ACTIVITY_ASSET\");\r\n expect(request.version).toEqual(1);\r\n expect((request.payload as any).assetFile).toBe(testFile);\r\n expect(id).toEqual(\"anAssetID\");\r\n });\r\n});\r\n"]}
@@ -1,6 +1,6 @@
1
1
  import { DomainFactory } from "@vived/core";
2
2
  import { makeAppDispatcher } from "../Entities";
3
- import { makeAppIsReadyUC, makeDispatchStartZSpaceUC, makeDispatchStateChangeUC, makeDispatchStopZSpaceUC, makeGetAssetBlobURLUC, makeGetAssetFolderURLUC, makeGetAssetMetaUC, makeGetAssetsForOwnerUC, makeGetAssetStreamURLUC, makeGetLinkedAssetsUC, makeGoToNextStateUC, makeGoToPreviousStateUC, makeHasNextStateUC, makeHasPreviousStateUC, makeIsAssetFetchedUC, makeIsZSpaceAvailableUC, makeLogUC, makeRegisterExternalStylesheetsUC, makeShowAlertUC, makeShowConfirmUC, makeShowMarkdownEditorUC, makeShowSelectModelUC, makeShowSpinnerUC, makeStateHasChangedUC, makeStateIsCompleteUC, makeSubmitResultUC, } from "../UC";
3
+ import { makeAppIsReadyUC, makeDispatchStartZSpaceUC, makeDispatchStateChangeUC, makeDispatchStopZSpaceUC, makeGetAssetBlobURLUC, makeGetAssetFolderURLUC, makeGetAssetMetaUC, makeGetAssetsForOwnerUC, makeGetAssetStreamURLUC, makeGetLinkedAssetsUC, makeGoToNextStateUC, makeGoToPreviousStateUC, makeHasNextStateUC, makeHasPreviousStateUC, makeIsAssetFetchedUC, makeIsZSpaceAvailableUC, makeLogUC, makeRegisterExternalStylesheetsUC, makeShowAlertUC, makeShowConfirmUC, makeShowMarkdownEditorUC, makeShowSelectModelUC, makeShowSpinnerUC, makeStateHasChangedUC, makeStateIsCompleteUC, makeSubmitActivityAssetUC, makeSubmitResultUC, } from "../UC";
4
4
  /**
5
5
  * Factory responsible for setting up the Dispatcher Feature domain components.
6
6
  *
@@ -11,7 +11,7 @@ import { makeAppIsReadyUC, makeDispatchStartZSpaceUC, makeDispatchStateChangeUC,
11
11
  *
12
12
  * The factory creates:
13
13
  * - AppDispatcher entity with hostHandler integration
14
- * - All 24 dispatcher-related Use Cases for handling various app operations
14
+ * - All 27 dispatcher-related Use Cases for handling various app operations
15
15
  *
16
16
  * @extends DomainFactory
17
17
  */
@@ -42,11 +42,11 @@ export class DispatcherFeatureFactory extends DomainFactory {
42
42
  /**
43
43
  * Sets up all use cases for the Dispatcher Feature.
44
44
  *
45
- * Initializes all 24 use cases that define the business operations and
45
+ * Initializes all 27 use cases that define the business operations and
46
46
  * workflows available through the dispatcher system. These use cases handle:
47
47
  * - App lifecycle management (ready, state changes)
48
48
  * - ZSpace integration (start, stop, availability)
49
- * - Asset management (fetching, metadata, URLs)
49
+ * - Asset management (fetching, metadata, URLs, activity asset upload)
50
50
  * - State navigation (previous, next, completion)
51
51
  * - UI interactions (alerts, confirmations, editors)
52
52
  * - Result submission and logging
@@ -65,6 +65,7 @@ export class DispatcherFeatureFactory extends DomainFactory {
65
65
  makeGetAssetStreamURLUC(this.appObject);
66
66
  makeGetLinkedAssetsUC(this.appObject);
67
67
  makeIsAssetFetchedUC(this.appObject);
68
+ makeSubmitActivityAssetUC(this.appObject);
68
69
  // State navigation
69
70
  makeGoToPreviousStateUC(this.appObject);
70
71
  makeGoToNextStateUC(this.appObject);
@@ -1 +1 @@
1
- {"version":3,"file":"DispatcherFeatureFactory.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Factories/DispatcherFeatureFactory.ts"],"names":[],"mappings":"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","sourcesContent":["import { DomainFactory, AppObject, Handler, AppObjectRepo } from \"@vived/core\";\nimport { makeAppDispatcher } from \"../Entities\";\nimport {\n makeAppIsReadyUC,\n makeDispatchStartZSpaceUC,\n makeDispatchStateChangeUC,\n makeDispatchStopZSpaceUC,\n makeGetAssetBlobURLUC,\n makeGetAssetFolderURLUC,\n makeGetAssetMetaUC,\n makeGetAssetsForOwnerUC,\n makeGetAssetStreamURLUC,\n makeGetLinkedAssetsUC,\n makeGoToNextStateUC,\n makeGoToPreviousStateUC,\n makeHasNextStateUC,\n makeHasPreviousStateUC,\n makeIsAssetFetchedUC,\n makeIsZSpaceAvailableUC,\n makeLogUC,\n makeRegisterExternalStylesheetsUC,\n makeShowAlertUC,\n makeShowConfirmUC,\n makeShowMarkdownEditorUC,\n makeShowSelectModelUC,\n makeShowSpinnerUC,\n makeStateHasChangedUC,\n makeStateIsCompleteUC,\n makeSubmitResultUC,\n} from \"../UC\";\n\n/**\n * Factory responsible for setting up the Dispatcher Feature domain components.\n *\n * This factory initializes the AppDispatcher entity and all associated use cases\n * required for the Dispatcher Feature functionality. It follows the domain-driven\n * design pattern by organizing components into their respective layers and replaces\n * the legacy setupDispatchers function while maintaining backwards compatibility.\n *\n * The factory creates:\n * - AppDispatcher entity with hostHandler integration\n * - All 24 dispatcher-related Use Cases for handling various app operations\n *\n * @extends DomainFactory\n */\nexport class DispatcherFeatureFactory extends DomainFactory {\n factoryName = \"DispatcherFeatureFactory\";\n\n public verbose = false;\n\n private hostHandler: Handler;\n\n /**\n * Creates a new DispatcherFeatureFactory instance.\n *\n * @param appObject The AppObject to attach the factory to\n * @param hostHandler The handler function for processing dispatched requests\n */\n constructor(appObject: AppObject, hostHandler: Handler) {\n super(appObject);\n this.hostHandler = hostHandler;\n }\n\n /**\n * Sets up all entities required for the Dispatcher Feature.\n *\n * Creates the AppDispatcher singleton entity that serves as the main\n * communication bridge between the app and the host environment.\n * The entity is initialized with the provided hostHandler for request processing.\n */\n setupEntities(): void {\n const entity = makeAppDispatcher(this.appObject, this.hostHandler);\n entity.verbose = this.verbose;\n }\n\n /**\n * Sets up all use cases for the Dispatcher Feature.\n *\n * Initializes all 24 use cases that define the business operations and\n * workflows available through the dispatcher system. These use cases handle:\n * - App lifecycle management (ready, state changes)\n * - ZSpace integration (start, stop, availability)\n * - Asset management (fetching, metadata, URLs)\n * - State navigation (previous, next, completion)\n * - UI interactions (alerts, confirmations, editors)\n * - Result submission and logging\n */\n setupUCs(): void {\n // App lifecycle and state management\n makeAppIsReadyUC(this.appObject);\n makeDispatchStartZSpaceUC(this.appObject);\n makeDispatchStateChangeUC(this.appObject);\n makeDispatchStopZSpaceUC(this.appObject);\n\n // Asset management\n makeGetAssetBlobURLUC(this.appObject);\n makeGetAssetFolderURLUC(this.appObject);\n makeGetAssetMetaUC(this.appObject);\n makeGetAssetsForOwnerUC(this.appObject);\n makeGetAssetStreamURLUC(this.appObject);\n makeGetLinkedAssetsUC(this.appObject);\n makeIsAssetFetchedUC(this.appObject);\n\n // State navigation\n makeGoToPreviousStateUC(this.appObject);\n makeGoToNextStateUC(this.appObject);\n makeHasPreviousStateUC(this.appObject);\n makeHasNextStateUC(this.appObject);\n makeStateHasChangedUC(this.appObject);\n makeStateIsCompleteUC(this.appObject);\n\n // ZSpace integration\n makeIsZSpaceAvailableUC(this.appObject);\n\n // Logging and utilities\n makeLogUC(this.appObject);\n makeRegisterExternalStylesheetsUC(this.appObject);\n\n // UI interactions\n makeShowAlertUC(this.appObject);\n makeShowConfirmUC(this.appObject);\n makeShowMarkdownEditorUC(this.appObject);\n makeShowSelectModelUC(this.appObject);\n makeShowSpinnerUC(this.appObject);\n\n // Result submission\n makeSubmitResultUC(this.appObject);\n }\n\n /**\n * Sets up all presentation models for the Dispatcher Feature.\n *\n * Currently no presentation models are required for the dispatcher feature\n * as it primarily handles business logic and communication with the host.\n */\n setupPMs(): void {\n // TODO: Create presentation models if needed for dispatcher UI components\n }\n\n /**\n * Performs any final setup operations after all components are initialized.\n *\n * This method is called after entities, use cases, and presentation models\n * have been set up. Currently no additional setup is required for this feature.\n */\n finalSetup(): void {\n // No additional setup required for this feature\n }\n}\n\n/**\n * Factory function to create a new DispatcherFeatureFactory.\n *\n * This function provides the same functionality as the legacy setupDispatchers\n * function but follows the Clean Architecture pattern with proper separation\n * of concerns and domain-driven design principles.\n *\n * @param appObjectRepo The AppObjectRepo to create the dispatcher AppObject from\n * @param hostHandler The handler function for processing dispatched requests\n * @returns A new DispatcherFeatureFactory instance\n */\nexport function makeDispatcherFeatureFactory(\n appObjectRepo: AppObjectRepo,\n hostHandler: Handler,\n): DispatcherFeatureFactory {\n const appObject = appObjectRepo.getOrCreate(\"App Dispatcher\");\n return new DispatcherFeatureFactory(appObject, hostHandler);\n}\n"]}
1
+ {"version":3,"file":"DispatcherFeatureFactory.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Factories/DispatcherFeatureFactory.ts"],"names":[],"mappings":"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","sourcesContent":["import { DomainFactory, AppObject, Handler, AppObjectRepo } from \"@vived/core\";\r\nimport { makeAppDispatcher } from \"../Entities\";\r\nimport {\r\n makeAppIsReadyUC,\r\n makeDispatchStartZSpaceUC,\r\n makeDispatchStateChangeUC,\r\n makeDispatchStopZSpaceUC,\r\n makeGetAssetBlobURLUC,\r\n makeGetAssetFolderURLUC,\r\n makeGetAssetMetaUC,\r\n makeGetAssetsForOwnerUC,\r\n makeGetAssetStreamURLUC,\r\n makeGetLinkedAssetsUC,\r\n makeGoToNextStateUC,\r\n makeGoToPreviousStateUC,\r\n makeHasNextStateUC,\r\n makeHasPreviousStateUC,\r\n makeIsAssetFetchedUC,\r\n makeIsZSpaceAvailableUC,\r\n makeLogUC,\r\n makeRegisterExternalStylesheetsUC,\r\n makeShowAlertUC,\r\n makeShowConfirmUC,\r\n makeShowMarkdownEditorUC,\r\n makeShowSelectModelUC,\r\n makeShowSpinnerUC,\r\n makeStateHasChangedUC,\r\n makeStateIsCompleteUC,\r\n makeSubmitActivityAssetUC,\r\n makeSubmitResultUC,\r\n} from \"../UC\";\r\n\r\n/**\r\n * Factory responsible for setting up the Dispatcher Feature domain components.\r\n *\r\n * This factory initializes the AppDispatcher entity and all associated use cases\r\n * required for the Dispatcher Feature functionality. It follows the domain-driven\r\n * design pattern by organizing components into their respective layers and replaces\r\n * the legacy setupDispatchers function while maintaining backwards compatibility.\r\n *\r\n * The factory creates:\r\n * - AppDispatcher entity with hostHandler integration\r\n * - All 27 dispatcher-related Use Cases for handling various app operations\r\n *\r\n * @extends DomainFactory\r\n */\r\nexport class DispatcherFeatureFactory extends DomainFactory {\r\n factoryName = \"DispatcherFeatureFactory\";\r\n\r\n public verbose = false;\r\n\r\n private hostHandler: Handler;\r\n\r\n /**\r\n * Creates a new DispatcherFeatureFactory instance.\r\n *\r\n * @param appObject The AppObject to attach the factory to\r\n * @param hostHandler The handler function for processing dispatched requests\r\n */\r\n constructor(appObject: AppObject, hostHandler: Handler) {\r\n super(appObject);\r\n this.hostHandler = hostHandler;\r\n }\r\n\r\n /**\r\n * Sets up all entities required for the Dispatcher Feature.\r\n *\r\n * Creates the AppDispatcher singleton entity that serves as the main\r\n * communication bridge between the app and the host environment.\r\n * The entity is initialized with the provided hostHandler for request processing.\r\n */\r\n setupEntities(): void {\r\n const entity = makeAppDispatcher(this.appObject, this.hostHandler);\r\n entity.verbose = this.verbose;\r\n }\r\n\r\n /**\r\n * Sets up all use cases for the Dispatcher Feature.\r\n *\r\n * Initializes all 27 use cases that define the business operations and\r\n * workflows available through the dispatcher system. These use cases handle:\r\n * - App lifecycle management (ready, state changes)\r\n * - ZSpace integration (start, stop, availability)\r\n * - Asset management (fetching, metadata, URLs, activity asset upload)\r\n * - State navigation (previous, next, completion)\r\n * - UI interactions (alerts, confirmations, editors)\r\n * - Result submission and logging\r\n */\r\n setupUCs(): void {\r\n // App lifecycle and state management\r\n makeAppIsReadyUC(this.appObject);\r\n makeDispatchStartZSpaceUC(this.appObject);\r\n makeDispatchStateChangeUC(this.appObject);\r\n makeDispatchStopZSpaceUC(this.appObject);\r\n\r\n // Asset management\r\n makeGetAssetBlobURLUC(this.appObject);\r\n makeGetAssetFolderURLUC(this.appObject);\r\n makeGetAssetMetaUC(this.appObject);\r\n makeGetAssetsForOwnerUC(this.appObject);\r\n makeGetAssetStreamURLUC(this.appObject);\r\n makeGetLinkedAssetsUC(this.appObject);\r\n makeIsAssetFetchedUC(this.appObject);\r\n makeSubmitActivityAssetUC(this.appObject);\r\n\r\n // State navigation\r\n makeGoToPreviousStateUC(this.appObject);\r\n makeGoToNextStateUC(this.appObject);\r\n makeHasPreviousStateUC(this.appObject);\r\n makeHasNextStateUC(this.appObject);\r\n makeStateHasChangedUC(this.appObject);\r\n makeStateIsCompleteUC(this.appObject);\r\n\r\n // ZSpace integration\r\n makeIsZSpaceAvailableUC(this.appObject);\r\n\r\n // Logging and utilities\r\n makeLogUC(this.appObject);\r\n makeRegisterExternalStylesheetsUC(this.appObject);\r\n\r\n // UI interactions\r\n makeShowAlertUC(this.appObject);\r\n makeShowConfirmUC(this.appObject);\r\n makeShowMarkdownEditorUC(this.appObject);\r\n makeShowSelectModelUC(this.appObject);\r\n makeShowSpinnerUC(this.appObject);\r\n\r\n // Result submission\r\n makeSubmitResultUC(this.appObject);\r\n }\r\n\r\n /**\r\n * Sets up all presentation models for the Dispatcher Feature.\r\n *\r\n * Currently no presentation models are required for the dispatcher feature\r\n * as it primarily handles business logic and communication with the host.\r\n */\r\n setupPMs(): void {\r\n // TODO: Create presentation models if needed for dispatcher UI components\r\n }\r\n\r\n /**\r\n * Performs any final setup operations after all components are initialized.\r\n *\r\n * This method is called after entities, use cases, and presentation models\r\n * have been set up. Currently no additional setup is required for this feature.\r\n */\r\n finalSetup(): void {\r\n // No additional setup required for this feature\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new DispatcherFeatureFactory.\r\n *\r\n * This function provides the same functionality as the legacy setupDispatchers\r\n * function but follows the Clean Architecture pattern with proper separation\r\n * of concerns and domain-driven design principles.\r\n *\r\n * @param appObjectRepo The AppObjectRepo to create the dispatcher AppObject from\r\n * @param hostHandler The handler function for processing dispatched requests\r\n * @returns A new DispatcherFeatureFactory instance\r\n */\r\nexport function makeDispatcherFeatureFactory(\r\n appObjectRepo: AppObjectRepo,\r\n hostHandler: Handler,\r\n): DispatcherFeatureFactory {\r\n const appObject = appObjectRepo.getOrCreate(\"App Dispatcher\");\r\n return new DispatcherFeatureFactory(appObject, hostHandler);\r\n}\r\n"]}
@@ -0,0 +1,33 @@
1
+ import { makeAppObjectRepo } from "@vived/core";
2
+ import { SubmitActivityAssetUC, submitActivityAsset } from "../UC";
3
+ import { makeDispatcherFeatureFactory } from "./DispatcherFeatureFactory";
4
+ function makeTestRig() {
5
+ const appObjects = makeAppObjectRepo();
6
+ const hostHandler = jest.fn((request) => {
7
+ if (request.type === "SUBMIT_ACTIVITY_ASSET") {
8
+ request.payload.callback("anAssetID");
9
+ }
10
+ });
11
+ const factory = makeDispatcherFeatureFactory(appObjects, hostHandler);
12
+ factory.setupEntities();
13
+ factory.setupUCs();
14
+ const testFile = new File(["test"], "model.glb");
15
+ return { appObjects, hostHandler, testFile };
16
+ }
17
+ describe("DispatcherFeatureFactory", () => {
18
+ it("Sets up the SubmitActivityAssetUC", () => {
19
+ const { appObjects } = makeTestRig();
20
+ expect(SubmitActivityAssetUC.get(appObjects)).toBeDefined();
21
+ });
22
+ it("Submits an activity asset to the host and resolves with its id", async () => {
23
+ const { appObjects, hostHandler, testFile } = makeTestRig();
24
+ const id = await submitActivityAsset(testFile, appObjects);
25
+ expect(hostHandler).toHaveBeenCalledTimes(1);
26
+ const request = hostHandler.mock.calls[0][0];
27
+ expect(request.type).toEqual("SUBMIT_ACTIVITY_ASSET");
28
+ expect(request.version).toEqual(1);
29
+ expect(request.payload.assetFile).toBe(testFile);
30
+ expect(id).toEqual("anAssetID");
31
+ });
32
+ });
33
+ //# sourceMappingURL=DispatcherFeatureFactory.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DispatcherFeatureFactory.test.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Factories/DispatcherFeatureFactory.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAW,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AACnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAE1E,SAAS,WAAW;IAClB,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,OAAgB,EAAE,EAAE;QAC/C,IAAI,OAAO,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;YAC5C,OAAO,CAAC,OAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,4BAA4B,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACtE,OAAO,CAAC,aAAa,EAAE,CAAC;IACxB,OAAO,CAAC,QAAQ,EAAE,CAAC;IAEnB,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;IAEjD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AAC/C,CAAC;AAED,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAErC,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;QAE5D,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAE3D,MAAM,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACtD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAE,OAAO,CAAC,OAAe,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { makeAppObjectRepo, Request } from \"@vived/core\";\r\nimport { SubmitActivityAssetUC, submitActivityAsset } from \"../UC\";\r\nimport { makeDispatcherFeatureFactory } from \"./DispatcherFeatureFactory\";\r\n\r\nfunction makeTestRig() {\r\n const appObjects = makeAppObjectRepo();\r\n const hostHandler = jest.fn((request: Request) => {\r\n if (request.type === \"SUBMIT_ACTIVITY_ASSET\") {\r\n (request.payload as any).callback(\"anAssetID\");\r\n }\r\n });\r\n\r\n const factory = makeDispatcherFeatureFactory(appObjects, hostHandler);\r\n factory.setupEntities();\r\n factory.setupUCs();\r\n\r\n const testFile = new File([\"test\"], \"model.glb\");\r\n\r\n return { appObjects, hostHandler, testFile };\r\n}\r\n\r\ndescribe(\"DispatcherFeatureFactory\", () => {\r\n it(\"Sets up the SubmitActivityAssetUC\", () => {\r\n const { appObjects } = makeTestRig();\r\n\r\n expect(SubmitActivityAssetUC.get(appObjects)).toBeDefined();\r\n });\r\n\r\n it(\"Submits an activity asset to the host and resolves with its id\", async () => {\r\n const { appObjects, hostHandler, testFile } = makeTestRig();\r\n\r\n const id = await submitActivityAsset(testFile, appObjects);\r\n\r\n expect(hostHandler).toHaveBeenCalledTimes(1);\r\n const request = hostHandler.mock.calls[0][0];\r\n expect(request.type).toEqual(\"SUBMIT_ACTIVITY_ASSET\");\r\n expect(request.version).toEqual(1);\r\n expect((request.payload as any).assetFile).toBe(testFile);\r\n expect(id).toEqual(\"anAssetID\");\r\n });\r\n});\r\n"]}
@@ -1,5 +1,5 @@
1
1
  import { makeAppDispatcher } from "../Entities";
2
- import { makeAppIsReadyUC, makeDispatchStartZSpaceUC, makeDispatchStateChangeUC, makeDispatchStopZSpaceUC, makeGetAssetBlobURLUC, makeGetAssetFolderURLUC, makeGetAssetMetaUC, makeGetAssetsForOwnerUC, makeGetAssetStreamURLUC, makeGetLinkedAssetsUC, makeGoToNextStateUC, makeGoToPreviousStateUC, makeHasNextStateUC, makeHasPreviousStateUC, makeIsAssetFetchedUC, makeIsZSpaceAvailableUC, makeLogUC, makeRegisterExternalStylesheetsUC, makeShowAlertUC, makeShowConfirmUC, makeShowMarkdownEditorUC, makeShowSelectModelUC, makeShowSpinnerUC, makeStateHasChangedUC, makeStateIsCompleteUC, makeSubmitResultUC, } from "../UC";
2
+ import { makeAppIsReadyUC, makeDispatchStartZSpaceUC, makeDispatchStateChangeUC, makeDispatchStopZSpaceUC, makeGetAssetBlobURLUC, makeGetAssetFolderURLUC, makeGetAssetMetaUC, makeGetAssetsForOwnerUC, makeGetAssetStreamURLUC, makeGetLinkedAssetsUC, makeGoToNextStateUC, makeGoToPreviousStateUC, makeHasNextStateUC, makeHasPreviousStateUC, makeIsAssetFetchedUC, makeIsZSpaceAvailableUC, makeLogUC, makeRegisterExternalStylesheetsUC, makeShowAlertUC, makeShowConfirmUC, makeShowMarkdownEditorUC, makeShowSelectModelUC, makeShowSpinnerUC, makeStateHasChangedUC, makeStateIsCompleteUC, makeSubmitActivityAssetUC, makeSubmitResultUC, } from "../UC";
3
3
  export function setupDispatchers(appObjects, hostHandler) {
4
4
  const dispatcherAO = appObjects.getOrCreate("App Dispatcher");
5
5
  makeAppDispatcher(dispatcherAO, hostHandler);
@@ -28,6 +28,7 @@ export function setupDispatchers(appObjects, hostHandler) {
28
28
  makeShowSpinnerUC(dispatcherAO);
29
29
  makeStateHasChangedUC(dispatcherAO);
30
30
  makeStateIsCompleteUC(dispatcherAO);
31
+ makeSubmitActivityAssetUC(dispatcherAO);
31
32
  makeSubmitResultUC(dispatcherAO);
32
33
  }
33
34
  //# sourceMappingURL=setupDispatchers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setupDispatchers.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Factories/setupDispatchers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,SAAS,EACT,iCAAiC,EACjC,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,OAAO,CAAC;AAEf,MAAM,UAAU,gBAAgB,CAC9B,UAAyB,EACzB,WAAoB;IAEpB,MAAM,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAE9D,iBAAiB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAE7C,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC/B,yBAAyB,CAAC,YAAY,CAAC,CAAC;IACxC,yBAAyB,CAAC,YAAY,CAAC,CAAC;IACxC,wBAAwB,CAAC,YAAY,CAAC,CAAC;IACvC,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACpC,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACtC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IACjC,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACtC,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACtC,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACpC,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACtC,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAClC,sBAAsB,CAAC,YAAY,CAAC,CAAC;IACrC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IACjC,oBAAoB,CAAC,YAAY,CAAC,CAAC;IACnC,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACtC,SAAS,CAAC,YAAY,CAAC,CAAC;IACxB,iCAAiC,CAAC,YAAY,CAAC,CAAC;IAChD,eAAe,CAAC,YAAY,CAAC,CAAC;IAC9B,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAChC,wBAAwB,CAAC,YAAY,CAAC,CAAC;IACvC,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACpC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAChC,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACpC,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACpC,kBAAkB,CAAC,YAAY,CAAC,CAAC;AACnC,CAAC","sourcesContent":["import { AppObjectRepo, Handler } from \"@vived/core\";\nimport { makeAppDispatcher } from \"../Entities\";\nimport {\n makeAppIsReadyUC,\n makeDispatchStartZSpaceUC,\n makeDispatchStateChangeUC,\n makeDispatchStopZSpaceUC,\n makeGetAssetBlobURLUC,\n makeGetAssetFolderURLUC,\n makeGetAssetMetaUC,\n makeGetAssetsForOwnerUC,\n makeGetAssetStreamURLUC,\n makeGetLinkedAssetsUC,\n makeGoToNextStateUC,\n makeGoToPreviousStateUC,\n makeHasNextStateUC,\n makeHasPreviousStateUC,\n makeIsAssetFetchedUC,\n makeIsZSpaceAvailableUC,\n makeLogUC,\n makeRegisterExternalStylesheetsUC,\n makeShowAlertUC,\n makeShowConfirmUC,\n makeShowMarkdownEditorUC,\n makeShowSelectModelUC,\n makeShowSpinnerUC,\n makeStateHasChangedUC,\n makeStateIsCompleteUC,\n makeSubmitResultUC,\n} from \"../UC\";\n\nexport function setupDispatchers(\n appObjects: AppObjectRepo,\n hostHandler: Handler,\n) {\n const dispatcherAO = appObjects.getOrCreate(\"App Dispatcher\");\n\n makeAppDispatcher(dispatcherAO, hostHandler);\n\n makeAppIsReadyUC(dispatcherAO);\n makeDispatchStartZSpaceUC(dispatcherAO);\n makeDispatchStateChangeUC(dispatcherAO);\n makeDispatchStopZSpaceUC(dispatcherAO);\n makeGetAssetBlobURLUC(dispatcherAO);\n makeGetAssetFolderURLUC(dispatcherAO);\n makeGetAssetMetaUC(dispatcherAO);\n makeGetAssetsForOwnerUC(dispatcherAO);\n makeGetAssetStreamURLUC(dispatcherAO);\n makeGetLinkedAssetsUC(dispatcherAO);\n makeGoToPreviousStateUC(dispatcherAO);\n makeGoToNextStateUC(dispatcherAO);\n makeHasPreviousStateUC(dispatcherAO);\n makeHasNextStateUC(dispatcherAO);\n makeIsAssetFetchedUC(dispatcherAO);\n makeIsZSpaceAvailableUC(dispatcherAO);\n makeLogUC(dispatcherAO);\n makeRegisterExternalStylesheetsUC(dispatcherAO);\n makeShowAlertUC(dispatcherAO);\n makeShowConfirmUC(dispatcherAO);\n makeShowMarkdownEditorUC(dispatcherAO);\n makeShowSelectModelUC(dispatcherAO);\n makeShowSpinnerUC(dispatcherAO);\n makeStateHasChangedUC(dispatcherAO);\n makeStateIsCompleteUC(dispatcherAO);\n makeSubmitResultUC(dispatcherAO);\n}\n"]}
1
+ {"version":3,"file":"setupDispatchers.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Factories/setupDispatchers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,SAAS,EACT,iCAAiC,EACjC,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,OAAO,CAAC;AAEf,MAAM,UAAU,gBAAgB,CAC9B,UAAyB,EACzB,WAAoB;IAEpB,MAAM,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAE9D,iBAAiB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAE7C,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC/B,yBAAyB,CAAC,YAAY,CAAC,CAAC;IACxC,yBAAyB,CAAC,YAAY,CAAC,CAAC;IACxC,wBAAwB,CAAC,YAAY,CAAC,CAAC;IACvC,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACpC,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACtC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IACjC,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACtC,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACtC,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACpC,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACtC,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAClC,sBAAsB,CAAC,YAAY,CAAC,CAAC;IACrC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IACjC,oBAAoB,CAAC,YAAY,CAAC,CAAC;IACnC,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACtC,SAAS,CAAC,YAAY,CAAC,CAAC;IACxB,iCAAiC,CAAC,YAAY,CAAC,CAAC;IAChD,eAAe,CAAC,YAAY,CAAC,CAAC;IAC9B,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAChC,wBAAwB,CAAC,YAAY,CAAC,CAAC;IACvC,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACpC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAChC,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACpC,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACpC,yBAAyB,CAAC,YAAY,CAAC,CAAC;IACxC,kBAAkB,CAAC,YAAY,CAAC,CAAC;AACnC,CAAC","sourcesContent":["import { AppObjectRepo, Handler } from \"@vived/core\";\r\nimport { makeAppDispatcher } from \"../Entities\";\r\nimport {\r\n makeAppIsReadyUC,\r\n makeDispatchStartZSpaceUC,\r\n makeDispatchStateChangeUC,\r\n makeDispatchStopZSpaceUC,\r\n makeGetAssetBlobURLUC,\r\n makeGetAssetFolderURLUC,\r\n makeGetAssetMetaUC,\r\n makeGetAssetsForOwnerUC,\r\n makeGetAssetStreamURLUC,\r\n makeGetLinkedAssetsUC,\r\n makeGoToNextStateUC,\r\n makeGoToPreviousStateUC,\r\n makeHasNextStateUC,\r\n makeHasPreviousStateUC,\r\n makeIsAssetFetchedUC,\r\n makeIsZSpaceAvailableUC,\r\n makeLogUC,\r\n makeRegisterExternalStylesheetsUC,\r\n makeShowAlertUC,\r\n makeShowConfirmUC,\r\n makeShowMarkdownEditorUC,\r\n makeShowSelectModelUC,\r\n makeShowSpinnerUC,\r\n makeStateHasChangedUC,\r\n makeStateIsCompleteUC,\r\n makeSubmitActivityAssetUC,\r\n makeSubmitResultUC,\r\n} from \"../UC\";\r\n\r\nexport function setupDispatchers(\r\n appObjects: AppObjectRepo,\r\n hostHandler: Handler,\r\n) {\r\n const dispatcherAO = appObjects.getOrCreate(\"App Dispatcher\");\r\n\r\n makeAppDispatcher(dispatcherAO, hostHandler);\r\n\r\n makeAppIsReadyUC(dispatcherAO);\r\n makeDispatchStartZSpaceUC(dispatcherAO);\r\n makeDispatchStateChangeUC(dispatcherAO);\r\n makeDispatchStopZSpaceUC(dispatcherAO);\r\n makeGetAssetBlobURLUC(dispatcherAO);\r\n makeGetAssetFolderURLUC(dispatcherAO);\r\n makeGetAssetMetaUC(dispatcherAO);\r\n makeGetAssetsForOwnerUC(dispatcherAO);\r\n makeGetAssetStreamURLUC(dispatcherAO);\r\n makeGetLinkedAssetsUC(dispatcherAO);\r\n makeGoToPreviousStateUC(dispatcherAO);\r\n makeGoToNextStateUC(dispatcherAO);\r\n makeHasPreviousStateUC(dispatcherAO);\r\n makeHasNextStateUC(dispatcherAO);\r\n makeIsAssetFetchedUC(dispatcherAO);\r\n makeIsZSpaceAvailableUC(dispatcherAO);\r\n makeLogUC(dispatcherAO);\r\n makeRegisterExternalStylesheetsUC(dispatcherAO);\r\n makeShowAlertUC(dispatcherAO);\r\n makeShowConfirmUC(dispatcherAO);\r\n makeShowMarkdownEditorUC(dispatcherAO);\r\n makeShowSelectModelUC(dispatcherAO);\r\n makeShowSpinnerUC(dispatcherAO);\r\n makeStateHasChangedUC(dispatcherAO);\r\n makeStateIsCompleteUC(dispatcherAO);\r\n makeSubmitActivityAssetUC(dispatcherAO);\r\n makeSubmitResultUC(dispatcherAO);\r\n}\r\n"]}
@@ -0,0 +1,31 @@
1
+ import { makeAppObjectRepo } from "@vived/core";
2
+ import { SubmitActivityAssetUC, submitActivityAsset } from "../UC";
3
+ import { setupDispatchers } from "./setupDispatchers";
4
+ function makeTestRig() {
5
+ const appObjects = makeAppObjectRepo();
6
+ const hostHandler = jest.fn((request) => {
7
+ if (request.type === "SUBMIT_ACTIVITY_ASSET") {
8
+ request.payload.callback("anAssetID");
9
+ }
10
+ });
11
+ setupDispatchers(appObjects, hostHandler);
12
+ const testFile = new File(["test"], "model.glb");
13
+ return { appObjects, hostHandler, testFile };
14
+ }
15
+ describe("setupDispatchers", () => {
16
+ it("Sets up the SubmitActivityAssetUC", () => {
17
+ const { appObjects } = makeTestRig();
18
+ expect(SubmitActivityAssetUC.get(appObjects)).toBeDefined();
19
+ });
20
+ it("Submits an activity asset to the host and resolves with its id", async () => {
21
+ const { appObjects, hostHandler, testFile } = makeTestRig();
22
+ const id = await submitActivityAsset(testFile, appObjects);
23
+ expect(hostHandler).toHaveBeenCalledTimes(1);
24
+ const request = hostHandler.mock.calls[0][0];
25
+ expect(request.type).toEqual("SUBMIT_ACTIVITY_ASSET");
26
+ expect(request.version).toEqual(1);
27
+ expect(request.payload.assetFile).toBe(testFile);
28
+ expect(id).toEqual("anAssetID");
29
+ });
30
+ });
31
+ //# sourceMappingURL=setupDispatchers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupDispatchers.test.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Factories/setupDispatchers.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAW,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,SAAS,WAAW;IAClB,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,OAAgB,EAAE,EAAE;QAC/C,IAAI,OAAO,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;YAC5C,OAAO,CAAC,OAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;IAEjD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AAC/C,CAAC;AAED,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAErC,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;QAE5D,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAE3D,MAAM,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACtD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAE,OAAO,CAAC,OAAe,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { makeAppObjectRepo, Request } from \"@vived/core\";\r\nimport { SubmitActivityAssetUC, submitActivityAsset } from \"../UC\";\r\nimport { setupDispatchers } from \"./setupDispatchers\";\r\n\r\nfunction makeTestRig() {\r\n const appObjects = makeAppObjectRepo();\r\n const hostHandler = jest.fn((request: Request) => {\r\n if (request.type === \"SUBMIT_ACTIVITY_ASSET\") {\r\n (request.payload as any).callback(\"anAssetID\");\r\n }\r\n });\r\n\r\n setupDispatchers(appObjects, hostHandler);\r\n\r\n const testFile = new File([\"test\"], \"model.glb\");\r\n\r\n return { appObjects, hostHandler, testFile };\r\n}\r\n\r\ndescribe(\"setupDispatchers\", () => {\r\n it(\"Sets up the SubmitActivityAssetUC\", () => {\r\n const { appObjects } = makeTestRig();\r\n\r\n expect(SubmitActivityAssetUC.get(appObjects)).toBeDefined();\r\n });\r\n\r\n it(\"Submits an activity asset to the host and resolves with its id\", async () => {\r\n const { appObjects, hostHandler, testFile } = makeTestRig();\r\n\r\n const id = await submitActivityAsset(testFile, appObjects);\r\n\r\n expect(hostHandler).toHaveBeenCalledTimes(1);\r\n const request = hostHandler.mock.calls[0][0];\r\n expect(request.type).toEqual(\"SUBMIT_ACTIVITY_ASSET\");\r\n expect(request.version).toEqual(1);\r\n expect((request.payload as any).assetFile).toBe(testFile);\r\n expect(id).toEqual(\"anAssetID\");\r\n });\r\n});\r\n"]}
@@ -9,7 +9,7 @@ import { DomainFactory, AppObject, Handler, AppObjectRepo } from "@vived/core";
9
9
  *
10
10
  * The factory creates:
11
11
  * - AppDispatcher entity with hostHandler integration
12
- * - All 24 dispatcher-related Use Cases for handling various app operations
12
+ * - All 27 dispatcher-related Use Cases for handling various app operations
13
13
  *
14
14
  * @extends DomainFactory
15
15
  */
@@ -35,11 +35,11 @@ export declare class DispatcherFeatureFactory extends DomainFactory {
35
35
  /**
36
36
  * Sets up all use cases for the Dispatcher Feature.
37
37
  *
38
- * Initializes all 24 use cases that define the business operations and
38
+ * Initializes all 27 use cases that define the business operations and
39
39
  * workflows available through the dispatcher system. These use cases handle:
40
40
  * - App lifecycle management (ready, state changes)
41
41
  * - ZSpace integration (start, stop, availability)
42
- * - Asset management (fetching, metadata, URLs)
42
+ * - Asset management (fetching, metadata, URLs, activity asset upload)
43
43
  * - State navigation (previous, next, completion)
44
44
  * - UI interactions (alerts, confirmations, editors)
45
45
  * - Result submission and logging
@@ -1 +1 @@
1
- {"version":3,"file":"DispatcherFeatureFactory.d.ts","sourceRoot":"","sources":["../../../../src/Dispatcher/Factories/DispatcherFeatureFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA+B/E;;;;;;;;;;;;;GAaG;AACH,qBAAa,wBAAyB,SAAQ,aAAa;IACzD,WAAW,SAA8B;IAElC,OAAO,UAAS;IAEvB,OAAO,CAAC,WAAW,CAAU;IAE7B;;;;;OAKG;gBACS,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO;IAKtD;;;;;;OAMG;IACH,aAAa,IAAI,IAAI;IAKrB;;;;;;;;;;;OAWG;IACH,QAAQ,IAAI,IAAI;IA0ChB;;;;;OAKG;IACH,QAAQ,IAAI,IAAI;IAIhB;;;;;OAKG;IACH,UAAU,IAAI,IAAI;CAGnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,OAAO,GACnB,wBAAwB,CAG1B"}
1
+ {"version":3,"file":"DispatcherFeatureFactory.d.ts","sourceRoot":"","sources":["../../../../src/Dispatcher/Factories/DispatcherFeatureFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAgC/E;;;;;;;;;;;;;GAaG;AACH,qBAAa,wBAAyB,SAAQ,aAAa;IACzD,WAAW,SAA8B;IAElC,OAAO,UAAS;IAEvB,OAAO,CAAC,WAAW,CAAU;IAE7B;;;;;OAKG;gBACS,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO;IAKtD;;;;;;OAMG;IACH,aAAa,IAAI,IAAI;IAKrB;;;;;;;;;;;OAWG;IACH,QAAQ,IAAI,IAAI;IA2ChB;;;;;OAKG;IACH,QAAQ,IAAI,IAAI;IAIhB;;;;;OAKG;IACH,UAAU,IAAI,IAAI;CAGnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,OAAO,GACnB,wBAAwB,CAG1B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=DispatcherFeatureFactory.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DispatcherFeatureFactory.test.d.ts","sourceRoot":"","sources":["../../../../src/Dispatcher/Factories/DispatcherFeatureFactory.test.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"setupDispatchers.d.ts","sourceRoot":"","sources":["../../../../src/Dispatcher/Factories/setupDispatchers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AA+BrD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,aAAa,EACzB,WAAW,EAAE,OAAO,QAgCrB"}
1
+ {"version":3,"file":"setupDispatchers.d.ts","sourceRoot":"","sources":["../../../../src/Dispatcher/Factories/setupDispatchers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAgCrD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,aAAa,EACzB,WAAW,EAAE,OAAO,QAiCrB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=setupDispatchers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupDispatchers.test.d.ts","sourceRoot":"","sources":["../../../../src/Dispatcher/Factories/setupDispatchers.test.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vived/app",
3
- "version": "6.8.0",
3
+ "version": "6.9.0",
4
4
  "description": "Public package of VIVED App Components",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -154,10 +154,11 @@ const uc = IsAssetFetchedUC.get(appObjects);
154
154
  const isFetched = await uc?.doDispatch("asset-id");
155
155
  ```
156
156
 
157
- **SubmitActivityAssetUC** - Submit an asset for the activity
157
+ **SubmitActivityAssetUC** - Upload a file to the host as an activity asset; resolves with the new asset's ID
158
158
  ```typescript
159
- const uc = SubmitActivityAssetUC.get(appObjects);
160
- await uc?.submitAsset(assetID, file);
159
+ import { submitActivityAsset } from "@vived/app";
160
+
161
+ const assetID = await submitActivityAsset(file, appObjects);
161
162
  ```
162
163
 
163
164
  #### UI Interaction Use Cases
@@ -325,9 +326,11 @@ import { DispatcherFeatureFactory } from "@vived/app";
325
326
 
326
327
  const factory = new DispatcherFeatureFactory(appObject, hostHandler);
327
328
  factory.verbose = true; // Optional: enable dispatcher logging
328
- factory.setup(); // Sets up entity and all 24 use cases
329
+ factory.setup(); // Sets up the entity and 27 use cases
329
330
  ```
330
331
 
332
+ The factory and the legacy `setupDispatchers` create the same 27 use cases: every use case on this page except `RestoreCurrentStateUC`. That includes `SubmitActivityAssetUC` since 6.9.0, so an app does not need to call `makeSubmitActivityAssetUC` itself.
333
+
331
334
  **Legacy Setup Function:**
332
335
  ```typescript
333
336
  import { setupDispatchers } from "@vived/app";
@@ -517,7 +520,7 @@ describe("ShowAlertUC", () => {
517
520
  ### Entities (1)
518
521
  - `AppDispatcher` - Core dispatcher entity
519
522
 
520
- ### Use Cases (27)
523
+ ### Use Cases (28)
521
524
  **Lifecycle:** AppIsReadyUC, DispatchStateChangeUC, RestoreCurrentStateUC
522
525
 
523
526
  **State Navigation:** GoToNextStateUC, GoToPreviousStateUC, HasNextStateUC, HasPreviousStateUC, StateHasChangedUC, StateIsCompleteUC
@@ -648,6 +651,6 @@ For new functionality, extend by:
648
651
  1. Creating a new UC extending `AppObjectUC`
649
652
  2. Defining `requestType` and `requestVersion`
650
653
  3. Implementing dispatch logic using AppDispatcher
651
- 4. Adding to DispatcherFeatureFactory's `setupUCs()`
654
+ 4. Adding to DispatcherFeatureFactory's `setupUCs()` and to the legacy `setupDispatchers`
652
655
  5. Creating corresponding mock for testing
653
656
  6. Writing comprehensive tests following AAA pattern