@vived/app 4.17.4 → 4.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/lib/Components/ChannelModel/Adapters/channelModelAdapter.d.ts +3 -0
  2. package/lib/Components/ChannelModel/Adapters/channelModelAdapter.js +23 -0
  3. package/lib/Components/ChannelModel/Adapters/channelModelObjectAdapter.d.ts +3 -0
  4. package/lib/Components/ChannelModel/Adapters/channelModelObjectAdapter.js +23 -0
  5. package/lib/Components/ChannelModel/Adapters/index.d.ts +2 -0
  6. package/lib/Components/ChannelModel/Adapters/index.js +14 -0
  7. package/lib/Components/ChannelModel/Controllers/index.d.ts +1 -0
  8. package/lib/Components/ChannelModel/Controllers/index.js +13 -0
  9. package/lib/Components/ChannelModel/Controllers/setModelObjectLabel.d.ts +2 -0
  10. package/lib/Components/ChannelModel/Controllers/setModelObjectLabel.js +14 -0
  11. package/lib/Components/ChannelModel/Entities/ChannelModel.d.ts +132 -34
  12. package/lib/Components/ChannelModel/Entities/ChannelModel.js +138 -23
  13. package/lib/Components/ChannelModel/Entities/ChannelModelObject.d.ts +15 -0
  14. package/lib/Components/ChannelModel/Entities/ChannelModelObject.js +64 -0
  15. package/lib/Components/ChannelModel/Entities/ChannelModelRepo.d.ts +8 -8
  16. package/lib/Components/ChannelModel/Entities/ChannelModelRepo.js +29 -18
  17. package/lib/Components/ChannelModel/Entities/index.d.ts +1 -0
  18. package/lib/Components/ChannelModel/Entities/index.js +1 -0
  19. package/lib/Components/ChannelModel/Mocks/ChannelModelObjectPMMock.d.ts +7 -0
  20. package/lib/Components/ChannelModel/Mocks/ChannelModelObjectPMMock.js +11 -0
  21. package/lib/Components/ChannelModel/Mocks/ChannelModelPMMock.d.ts +7 -0
  22. package/lib/Components/ChannelModel/Mocks/ChannelModelPMMock.js +11 -0
  23. package/lib/Components/ChannelModel/Mocks/ProcessChannelModelUCMock.d.ts +8 -0
  24. package/lib/Components/ChannelModel/Mocks/ProcessChannelModelUCMock.js +15 -0
  25. package/lib/Components/ChannelModel/Mocks/index.d.ts +3 -0
  26. package/lib/Components/ChannelModel/Mocks/index.js +15 -0
  27. package/lib/Components/ChannelModel/PMs/ChannelModelObjectPM.d.ts +12 -0
  28. package/lib/Components/ChannelModel/PMs/ChannelModelObjectPM.js +60 -0
  29. package/lib/Components/ChannelModel/PMs/ChannelModelPM.d.ts +11 -0
  30. package/lib/Components/ChannelModel/PMs/ChannelModelPM.js +66 -0
  31. package/lib/Components/ChannelModel/PMs/index.d.ts +2 -0
  32. package/lib/Components/ChannelModel/PMs/index.js +14 -0
  33. package/lib/Components/ChannelModel/UC/InitializeChannelModelFromGLB.d.ts +0 -0
  34. package/lib/Components/ChannelModel/UC/InitializeChannelModelFromGLB.js +1 -0
  35. package/lib/Components/ChannelModel/UC/SetupChannelModelUC.d.ts +3 -4
  36. package/lib/Components/ChannelModel/UC/SetupChannelModelUC.js +1 -131
  37. package/lib/Components/ChannelModel/index.d.ts +4 -0
  38. package/lib/Components/ChannelModel/index.js +4 -0
  39. package/lib/Components/GLBModel/Entities/GblModelRepo.d.ts +9 -0
  40. package/lib/Components/GLBModel/Entities/GblModelRepo.js +32 -0
  41. package/lib/Components/GLBModel/Entities/GlbModelEntity.d.ts +26 -0
  42. package/lib/Components/GLBModel/Entities/GlbModelEntity.js +56 -0
  43. package/lib/Components/GLBModel/Entities/index.d.ts +2 -0
  44. package/lib/Components/GLBModel/Entities/index.js +14 -0
  45. package/lib/Components/GLBModel/Mocks/LoadGlbFileUCMock.d.ts +8 -0
  46. package/lib/Components/GLBModel/Mocks/LoadGlbFileUCMock.js +15 -0
  47. package/lib/Components/GLBModel/Mocks/index.d.ts +1 -0
  48. package/lib/Components/GLBModel/Mocks/index.js +13 -0
  49. package/lib/Components/GLBModel/UCs/LoadGlbFileUC.d.ts +7 -0
  50. package/lib/Components/GLBModel/UCs/LoadGlbFileUC.js +11 -0
  51. package/lib/Components/GLBModel/UCs/index.d.ts +1 -0
  52. package/lib/Components/GLBModel/UCs/index.js +13 -0
  53. package/lib/Components/GLBModel/index.d.ts +3 -0
  54. package/lib/Components/GLBModel/index.js +15 -0
  55. package/lib/Components/Landmarks/UseCases/DeleteLandmarkUC.js +3 -3
  56. package/lib/Components/index.d.ts +1 -0
  57. package/lib/Components/index.js +1 -0
  58. package/lib/Types/ChannelModelData.d.ts +0 -1
  59. package/lib/Types/index.d.ts +0 -1
  60. package/lib/Types/index.js +0 -1
  61. package/package.json +1 -1
@@ -0,0 +1,3 @@
1
+ import { PmAdapter } from "../../../Types";
2
+ import { ChannelModelVM } from "../PMs/ChannelModelPM";
3
+ export declare const channelModelAdapter: PmAdapter<ChannelModelVM>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.channelModelAdapter = void 0;
4
+ const ChannelModelPM_1 = require("../PMs/ChannelModelPM");
5
+ exports.channelModelAdapter = {
6
+ defaultVM: ChannelModelPM_1.defaultChannelModelVM,
7
+ subscribe: (id, appObjects, setVM) => {
8
+ const pm = ChannelModelPM_1.ChannelModelPM.get(id, appObjects);
9
+ if (!pm) {
10
+ appObjects.submitError("channelModelAdapter", "Unable to find PM");
11
+ return;
12
+ }
13
+ pm.addView(setVM);
14
+ },
15
+ unsubscribe: (id, appObjects, setVM) => {
16
+ const pm = ChannelModelPM_1.ChannelModelPM.get(id, appObjects);
17
+ if (!pm) {
18
+ appObjects.submitError("channelModelAdapter", "Unable to find PM");
19
+ return;
20
+ }
21
+ pm.removeView(setVM);
22
+ },
23
+ };
@@ -0,0 +1,3 @@
1
+ import { PmAdapter } from "../../../Types";
2
+ import { ChannelModelObjectVM } from "../PMs/ChannelModelObjectPM";
3
+ export declare const channelModelObjectAdapter: PmAdapter<ChannelModelObjectVM>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.channelModelObjectAdapter = void 0;
4
+ const ChannelModelObjectPM_1 = require("../PMs/ChannelModelObjectPM");
5
+ exports.channelModelObjectAdapter = {
6
+ defaultVM: ChannelModelObjectPM_1.defaultChannelModelObjectVM,
7
+ subscribe: (id, appObjects, setVM) => {
8
+ const pm = ChannelModelObjectPM_1.ChannelModelObjectPM.get(id, appObjects);
9
+ if (!pm) {
10
+ appObjects.submitError("channelModelObjectAdapter", "Unable to find PM");
11
+ return;
12
+ }
13
+ pm.addView(setVM);
14
+ },
15
+ unsubscribe: (id, appObjects, setVM) => {
16
+ const pm = ChannelModelObjectPM_1.ChannelModelObjectPM.get(id, appObjects);
17
+ if (!pm) {
18
+ appObjects.submitError("channelModelObjectAdapter", "Unable to find PM");
19
+ return;
20
+ }
21
+ pm.removeView(setVM);
22
+ },
23
+ };
@@ -0,0 +1,2 @@
1
+ export * from "./channelModelAdapter";
2
+ export * from "./channelModelObjectAdapter";
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./channelModelAdapter"), exports);
14
+ __exportStar(require("./channelModelObjectAdapter"), exports);
@@ -0,0 +1 @@
1
+ export * from "./setModelObjectLabel";
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./setModelObjectLabel"), exports);
@@ -0,0 +1,2 @@
1
+ import { AppObjectRepo } from "../../../AppObject";
2
+ export declare function setModelObjectLabel(label: string, id: string, appObjects: AppObjectRepo): void;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setModelObjectLabel = void 0;
4
+ const Entities_1 = require("../Entities");
5
+ function setModelObjectLabel(label, id, appObjects) {
6
+ const entity = Entities_1.ChannelModelObject.get(id, appObjects);
7
+ if (entity) {
8
+ entity.label = label;
9
+ }
10
+ else {
11
+ appObjects.submitWarning("setModelObjectLabel", "Unable to find object by ID");
12
+ }
13
+ }
14
+ exports.setModelObjectLabel = setModelObjectLabel;
@@ -1,42 +1,140 @@
1
- import { AppObject, AppObjectEntity } from "../../../AppObject";
1
+ import { AppObject, AppObjectEntity, AppObjectRepo } from "../../../AppObject";
2
2
  import { Quaternion, Vector3 } from "../../../ValueObjects";
3
+ import { ChannelModelObject } from "./ChannelModelObject";
3
4
  export declare enum ChannelModelState {
4
5
  INIT = "Initialized",
5
6
  LOADING = "Loading",
6
7
  READY = "Ready",
7
8
  ERROR = "Error"
8
9
  }
9
- export declare class ChannelModel extends AppObjectEntity {
10
- static readonly type = "CHANNEL_MODEL";
11
- static addIfMissing(appObj: AppObject): ChannelModel;
12
- static get(appObj: AppObject): ChannelModel | undefined;
13
- private _name;
14
- get name(): string;
15
- set name(name: string);
16
- private _boundsMin;
17
- get bounds_min(): Vector3;
18
- set bounds_min(bounds_min: Vector3);
19
- private _boundsMax;
20
- get bounds_max(): Vector3;
21
- set bounds_max(bounds_max: Vector3);
22
- private _defaultPosition;
23
- get defaultPosition(): Vector3;
24
- set defaultPosition(position: Vector3);
25
- private _defaultRotation;
26
- get defaultRotation(): Quaternion;
27
- set defaultRotation(rotation: Quaternion);
28
- private _defaultScale;
29
- get defaultScale(): number;
30
- set defaultScale(scale: number);
31
- private _state;
32
- get state(): ChannelModelState;
33
- set state(val: ChannelModelState);
34
- private _error;
35
- get modelError(): Error | undefined;
36
- set modelError(val: Error | undefined);
37
- private _meshList;
38
- get meshList(): string[];
39
- set meshList(val: string[]);
40
- dispose: () => void;
41
- constructor(appObject: AppObject);
10
+ export declare abstract class ChannelModelEntity extends AppObjectEntity {
11
+ static readonly type = "ChannelModelEntity";
12
+ abstract get id(): string;
13
+ abstract get name(): string;
14
+ abstract set name(val: string);
15
+ abstract get bounds_min(): Vector3;
16
+ abstract set bounds_min(val: Vector3);
17
+ abstract get bounds_max(): Vector3;
18
+ abstract set bounds_max(val: Vector3);
19
+ abstract get defaultPosition(): Vector3;
20
+ abstract set defaultPosition(val: Vector3);
21
+ abstract get defaultRotation(): Quaternion;
22
+ abstract set defaultRotation(val: Quaternion);
23
+ abstract get defaultScale(): number;
24
+ abstract set defaultScale(val: number);
25
+ abstract get state(): ChannelModelState;
26
+ abstract set state(val: ChannelModelState);
27
+ abstract get modelError(): Error | undefined;
28
+ abstract set modelError(val: Error | undefined);
29
+ abstract get modelObjectIds(): string[];
30
+ abstract get data(): ChannelModelDTOv2;
31
+ abstract setupFromData(data: ChannelModelDTOv0 | ChannelModelDTOv1 | ChannelModelDTOv2): void;
32
+ abstract originalCollectionID?: string;
33
+ abstract modelObjectFactory(id: string): ChannelModelObject;
34
+ abstract addModelObject(id?: string): ChannelModelObject;
35
+ abstract hasModelObject(id: string): boolean;
36
+ abstract getModelObject(id: string): ChannelModelObject | undefined;
37
+ abstract modelObjects(): ChannelModelObject[];
38
+ static get(id: string, appObjects: AppObjectRepo): ChannelModelEntity | undefined;
39
+ }
40
+ export declare function makeChannelModelEntity(appObject: AppObject): ChannelModelEntity;
41
+ export interface ChannelModelDTOv2 {
42
+ version: 2;
43
+ objects: ChannelModelDataMeshDTOv2[];
44
+ name: string;
45
+ bounds_min: {
46
+ x: number;
47
+ y: number;
48
+ z: number;
49
+ };
50
+ bounds_max: {
51
+ x: number;
52
+ y: number;
53
+ z: number;
54
+ };
55
+ defaultPosition: {
56
+ x: number;
57
+ y: number;
58
+ z: number;
59
+ };
60
+ defaultRotation: {
61
+ x: number;
62
+ y: number;
63
+ z: number;
64
+ w: number;
65
+ };
66
+ defaultScale: number;
67
+ originalCollectionID?: string;
68
+ }
69
+ export interface ChannelModelDTOv1 {
70
+ version: number;
71
+ objects: ChannelModelDataMeshDTOv1[];
72
+ name: string;
73
+ bounds_min: {
74
+ x: number;
75
+ y: number;
76
+ z: number;
77
+ };
78
+ bounds_max: {
79
+ x: number;
80
+ y: number;
81
+ z: number;
82
+ };
83
+ defaultPosition: {
84
+ x: number;
85
+ y: number;
86
+ z: number;
87
+ };
88
+ defaultRotation: {
89
+ x: number;
90
+ y: number;
91
+ z: number;
92
+ w: number;
93
+ };
94
+ defaultScale: number;
95
+ }
96
+ export interface ChannelModelDTOv0 {
97
+ version: number;
98
+ objects: ChannelModelDataMeshDTOv0[];
99
+ name: string;
100
+ description: string;
101
+ bounds_min: {
102
+ x: number;
103
+ y: number;
104
+ z: number;
105
+ };
106
+ bounds_max: {
107
+ x: number;
108
+ y: number;
109
+ z: number;
110
+ };
111
+ defaultPosition: {
112
+ x: number;
113
+ y: number;
114
+ z: number;
115
+ };
116
+ defaultRotation: {
117
+ x: number;
118
+ y: number;
119
+ z: number;
120
+ w: number;
121
+ };
122
+ defaultScale: number;
123
+ }
124
+ export interface ChannelModelDataMeshDTOv2 {
125
+ id: string;
126
+ meshPaths: string[];
127
+ label: string;
128
+ tags: string[];
129
+ }
130
+ export interface ChannelModelDataMeshDTOv1 {
131
+ version: number;
132
+ id: string;
133
+ meshPaths: string[];
134
+ label: string;
135
+ }
136
+ export interface ChannelModelDataMeshDTOv0 {
137
+ id: string;
138
+ meshPaths: string[];
139
+ label: string;
42
140
  }
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ChannelModel = exports.ChannelModelState = void 0;
3
+ exports.makeChannelModelEntity = exports.ChannelModelEntity = exports.ChannelModelState = void 0;
4
4
  const AppObject_1 = require("../../../AppObject");
5
5
  const Entities_1 = require("../../../Entities");
6
+ const Utilities_1 = require("../../../Utilities");
6
7
  const ValueObjects_1 = require("../../../ValueObjects");
8
+ const ChannelModelObject_1 = require("./ChannelModelObject");
7
9
  var ChannelModelState;
8
10
  (function (ChannelModelState) {
9
11
  ChannelModelState["INIT"] = "Initialized";
@@ -11,9 +13,25 @@ var ChannelModelState;
11
13
  ChannelModelState["READY"] = "Ready";
12
14
  ChannelModelState["ERROR"] = "Error";
13
15
  })(ChannelModelState = exports.ChannelModelState || (exports.ChannelModelState = {}));
14
- class ChannelModel extends AppObject_1.AppObjectEntity {
16
+ class ChannelModelEntity extends AppObject_1.AppObjectEntity {
17
+ static get(id, appObjects) {
18
+ const appObject = appObjects.get(id);
19
+ if (!appObject) {
20
+ appObjects.submitWarning("ChannelModel.get", "Unable to find app object by ID");
21
+ return;
22
+ }
23
+ return appObject.getComponent(ChannelModelEntity.type);
24
+ }
25
+ }
26
+ exports.ChannelModelEntity = ChannelModelEntity;
27
+ ChannelModelEntity.type = "ChannelModelEntity";
28
+ function makeChannelModelEntity(appObject) {
29
+ return new ChannelModelEntityImp(appObject);
30
+ }
31
+ exports.makeChannelModelEntity = makeChannelModelEntity;
32
+ class ChannelModelEntityImp extends ChannelModelEntity {
15
33
  constructor(appObject) {
16
- super(appObject, ChannelModel.type);
34
+ super(appObject, ChannelModelEntity.type);
17
35
  this._name = new Entities_1.MemoizedString("", this.notifyOnChange);
18
36
  this._boundsMin = new Entities_1.MemoizedVector3(ValueObjects_1.Vector3.Zero(), this.notifyOnChange);
19
37
  this._boundsMax = new Entities_1.MemoizedVector3(ValueObjects_1.Vector3.Zero(), this.notifyOnChange);
@@ -21,22 +39,21 @@ class ChannelModel extends AppObject_1.AppObjectEntity {
21
39
  this._defaultRotation = new Entities_1.MemoizedQuaternion(ValueObjects_1.Quaternion.Identity(), this.notifyOnChange);
22
40
  this._defaultScale = new Entities_1.MemoizedNumber(1, this.notifyOnChange);
23
41
  this._state = new Entities_1.MemoizedString(ChannelModelState.INIT, this.notifyOnChange);
24
- this._meshList = [];
25
- this.dispose = () => {
26
- super.dispose();
42
+ this.modelObjectLookup = new Map();
43
+ this.setupFromData = (data) => {
44
+ if (data.version === 2) {
45
+ this.setupDataV2(data);
46
+ }
47
+ else if (data.version === 1) {
48
+ this.setupDataV2(this.mapDataV1toV2(data));
49
+ }
50
+ else if (data.version === 0) {
51
+ this.setupDataV2(this.mapDataV0toV2(data));
52
+ }
27
53
  };
28
54
  }
29
- static addIfMissing(appObj) {
30
- const existing = appObj.getComponent(this.type);
31
- if (existing) {
32
- return existing;
33
- }
34
- else {
35
- return new ChannelModel(appObj);
36
- }
37
- }
38
- static get(appObj) {
39
- return appObj.getComponent(this.type);
55
+ get id() {
56
+ return this.appObject.id;
40
57
  }
41
58
  get name() {
42
59
  return this._name.val;
@@ -87,13 +104,111 @@ class ChannelModel extends AppObject_1.AppObjectEntity {
87
104
  this._error = val;
88
105
  this._state.val = ChannelModelState.ERROR;
89
106
  }
90
- get meshList() {
91
- return [...this._meshList];
107
+ modelObjectFactory(id) {
108
+ const ao = this.appObjects.getOrCreate(id);
109
+ return ChannelModelObject_1.makeChannelModelObject(ao);
92
110
  }
93
- set meshList(val) {
94
- this._meshList = [...val];
111
+ addModelObject(id) {
112
+ const idToUse = id !== null && id !== void 0 ? id : Utilities_1.generateUniqueID();
113
+ const obj = this.modelObjectFactory(idToUse);
114
+ this.modelObjectLookup.set(idToUse, obj);
115
+ obj.addChangeObserver(this.notifyOnChange);
95
116
  this.notifyOnChange();
117
+ return obj;
118
+ }
119
+ getModelObject(id) {
120
+ return this.modelObjectLookup.get(id);
121
+ }
122
+ hasModelObject(id) {
123
+ return this.modelObjectLookup.has(id);
124
+ }
125
+ modelObjects() {
126
+ return Array.from(this.modelObjectLookup.values());
127
+ }
128
+ get modelObjectIds() {
129
+ return Array.from(this.modelObjectLookup.keys());
130
+ }
131
+ get data() {
132
+ const modelObjects = Array.from(this.modelObjectLookup.values());
133
+ const objects = modelObjects.map((obj) => {
134
+ return {
135
+ id: obj.id,
136
+ label: obj.label,
137
+ meshPaths: [...obj.subMeshPaths],
138
+ tags: [...obj.tags],
139
+ };
140
+ });
141
+ return {
142
+ bounds_max: this._boundsMax.val.dto,
143
+ bounds_min: this._boundsMin.val.dto,
144
+ defaultPosition: this._defaultPosition.val.dto,
145
+ defaultRotation: this._defaultRotation.val.dto,
146
+ defaultScale: this._defaultScale.val,
147
+ name: this._name.val,
148
+ objects,
149
+ version: 2,
150
+ originalCollectionID: this.originalCollectionID,
151
+ };
152
+ }
153
+ setupDataV2(data) {
154
+ const { bounds_max, bounds_min, defaultPosition, defaultRotation, defaultScale, name, objects, originalCollectionID, } = data;
155
+ this.bounds_max = ValueObjects_1.Vector3.FromDTO(bounds_max);
156
+ this.bounds_min = ValueObjects_1.Vector3.FromDTO(bounds_min);
157
+ this.defaultPosition = ValueObjects_1.Vector3.FromDTO(defaultPosition);
158
+ this.defaultRotation = ValueObjects_1.Quaternion.FromDTO(defaultRotation);
159
+ this.defaultScale = defaultScale;
160
+ this.name = name;
161
+ this.originalCollectionID = originalCollectionID;
162
+ objects.forEach((obj) => {
163
+ const { id, label, meshPaths, tags } = obj;
164
+ const modelObj = this.addModelObject(id);
165
+ modelObj.label = label;
166
+ modelObj.subMeshPaths = meshPaths;
167
+ modelObj.tags = tags;
168
+ });
169
+ }
170
+ mapDataV1toV2(data) {
171
+ const { bounds_max, bounds_min, defaultPosition, defaultRotation, defaultScale, name, objects, } = data;
172
+ const mappedObject = objects.map((obj) => {
173
+ const { id, label, meshPaths } = obj;
174
+ return {
175
+ id,
176
+ label,
177
+ meshPaths,
178
+ tags: [],
179
+ };
180
+ });
181
+ return {
182
+ bounds_max,
183
+ bounds_min,
184
+ defaultPosition,
185
+ defaultRotation,
186
+ defaultScale,
187
+ name,
188
+ objects: mappedObject,
189
+ version: 2,
190
+ };
191
+ }
192
+ mapDataV0toV2(data) {
193
+ const { bounds_max, bounds_min, defaultPosition, defaultRotation, defaultScale, name, objects, } = data;
194
+ const mappedObject = objects.map((obj) => {
195
+ const { id, label, meshPaths } = obj;
196
+ return {
197
+ id,
198
+ label,
199
+ meshPaths,
200
+ tags: [],
201
+ };
202
+ });
203
+ return {
204
+ bounds_max,
205
+ bounds_min,
206
+ defaultPosition,
207
+ defaultRotation,
208
+ defaultScale,
209
+ name,
210
+ objects: mappedObject,
211
+ version: 2,
212
+ };
96
213
  }
97
214
  }
98
- exports.ChannelModel = ChannelModel;
99
- ChannelModel.type = "CHANNEL_MODEL";
@@ -0,0 +1,15 @@
1
+ import { AppObject, AppObjectEntity, AppObjectRepo } from "../../../AppObject";
2
+ export declare abstract class ChannelModelObject extends AppObjectEntity {
3
+ static readonly type = "ChannelModelObject";
4
+ abstract get id(): string;
5
+ abstract get label(): string;
6
+ abstract set label(val: string);
7
+ abstract get labelValidationMessage(): string | null;
8
+ abstract labelValidator(val: string): string | null;
9
+ abstract get tags(): string[];
10
+ abstract set tags(val: string[]);
11
+ abstract get subMeshPaths(): string[];
12
+ abstract set subMeshPaths(val: string[]);
13
+ static get(id: string, appObjects: AppObjectRepo): ChannelModelObject | undefined;
14
+ }
15
+ export declare function makeChannelModelObject(appObject: AppObject): ChannelModelObject;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeChannelModelObject = exports.ChannelModelObject = void 0;
4
+ const AppObject_1 = require("../../../AppObject");
5
+ const Entities_1 = require("../../../Entities");
6
+ class ChannelModelObject extends AppObject_1.AppObjectEntity {
7
+ static get(id, appObjects) {
8
+ const appObject = appObjects.get(id);
9
+ if (!appObject) {
10
+ appObjects.submitWarning("ChannelModelObject.get", "Unable to find app object by ID");
11
+ return;
12
+ }
13
+ return appObject.getComponent(ChannelModelObject.type);
14
+ }
15
+ }
16
+ exports.ChannelModelObject = ChannelModelObject;
17
+ ChannelModelObject.type = "ChannelModelObject";
18
+ function makeChannelModelObject(appObject) {
19
+ return new ChannelModelObjectImp(appObject);
20
+ }
21
+ exports.makeChannelModelObject = makeChannelModelObject;
22
+ class ChannelModelObjectImp extends ChannelModelObject {
23
+ constructor(appObject) {
24
+ super(appObject, ChannelModelObject.type);
25
+ this.memoisedLabel = new Entities_1.MemoizedString("", this.notifyOnChange);
26
+ this.labelValidator = (val) => {
27
+ if (val.length === 0) {
28
+ return "Object name cannot be empty";
29
+ }
30
+ else if (val.length > 40) {
31
+ return "Object names are limited to 40 characters";
32
+ }
33
+ return null;
34
+ };
35
+ this._tags = [];
36
+ this._subMeshes = [];
37
+ }
38
+ get id() {
39
+ return this.appObject.id;
40
+ }
41
+ get label() {
42
+ return this.memoisedLabel.val;
43
+ }
44
+ set label(val) {
45
+ this.memoisedLabel.val = val;
46
+ }
47
+ get labelValidationMessage() {
48
+ return this.labelValidator(this.memoisedLabel.val);
49
+ }
50
+ get tags() {
51
+ return [...this._tags];
52
+ }
53
+ set tags(val) {
54
+ this._tags = [...val];
55
+ this.notifyOnChange();
56
+ }
57
+ get subMeshPaths() {
58
+ return [...this._subMeshes];
59
+ }
60
+ set subMeshPaths(val) {
61
+ this._subMeshes = [...val];
62
+ this.notifyOnChange();
63
+ }
64
+ }
@@ -1,12 +1,12 @@
1
1
  import { AppObject, AppObjectEntityRepo, AppObjectRepo } from "../../../AppObject";
2
- import { ChannelModel } from "./ChannelModel";
3
- export declare class ChannelModelRepo extends AppObjectEntityRepo<ChannelModel> {
2
+ import { ChannelModelEntity } from "./ChannelModel";
3
+ export declare abstract class ChannelModelRepo extends AppObjectEntityRepo<ChannelModelEntity> {
4
4
  static readonly type = "CHANNEL_MODEL_REPO";
5
+ abstract get isLoadingChannelModel(): boolean;
6
+ abstract set isLoadingChannelModel(val: boolean);
7
+ abstract getChannelModel(id: string, createIfMissing: boolean): ChannelModelEntity | undefined;
8
+ abstract channelModelFactory(id: string): ChannelModelEntity;
9
+ abstract createChannelModel(id?: string): ChannelModelEntity;
5
10
  static get: (appObjects: AppObjectRepo) => ChannelModelRepo | undefined;
6
- static addToAO(appObj: AppObject): ChannelModelRepo;
7
- private memoizedIsLoading;
8
- get isLoadingChannelModel(): boolean;
9
- set isLoadingChannelModel(val: boolean);
10
- makeIfMissing(appObject: AppObject): ChannelModel;
11
- constructor(appObject: AppObject);
12
11
  }
12
+ export declare function makeChannelModelRepo(appObject: AppObject): ChannelModelRepo;
@@ -1,16 +1,41 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ChannelModelRepo = void 0;
3
+ exports.makeChannelModelRepo = exports.ChannelModelRepo = void 0;
4
4
  const AppObject_1 = require("../../../AppObject");
5
5
  const Entities_1 = require("../../../Entities");
6
+ const Utilities_1 = require("../../../Utilities");
6
7
  const ChannelModel_1 = require("./ChannelModel");
7
8
  class ChannelModelRepo extends AppObject_1.AppObjectEntityRepo {
9
+ }
10
+ exports.ChannelModelRepo = ChannelModelRepo;
11
+ ChannelModelRepo.type = "CHANNEL_MODEL_REPO";
12
+ ChannelModelRepo.get = (appObjects) => AppObject_1.getSingletonComponent(ChannelModelRepo.type, appObjects);
13
+ function makeChannelModelRepo(appObject) {
14
+ return new ChannelModelRepoImp(appObject);
15
+ }
16
+ exports.makeChannelModelRepo = makeChannelModelRepo;
17
+ class ChannelModelRepoImp extends ChannelModelRepo {
8
18
  constructor(appObject) {
9
19
  super(appObject, ChannelModelRepo.type);
10
20
  this.memoizedIsLoading = new Entities_1.MemoizedBoolean(false, this.notifyOnChange);
11
- }
12
- static addToAO(appObj) {
13
- return new ChannelModelRepo(appObj);
21
+ this.getChannelModel = (id, createIfMissing) => {
22
+ let rVal = this.getForAppObject(id);
23
+ if (rVal === undefined && createIfMissing) {
24
+ rVal = this.channelModelFactory(id);
25
+ this.add(rVal);
26
+ }
27
+ return rVal;
28
+ };
29
+ this.createChannelModel = (id) => {
30
+ const idToUse = id !== null && id !== void 0 ? id : Utilities_1.generateUniqueID();
31
+ const object = this.channelModelFactory(idToUse);
32
+ this.add(object);
33
+ return object;
34
+ };
35
+ this.channelModelFactory = (id) => {
36
+ const ao = this.appObjects.getOrCreate(id);
37
+ return ChannelModel_1.makeChannelModelEntity(ao);
38
+ };
14
39
  }
15
40
  get isLoadingChannelModel() {
16
41
  return this.memoizedIsLoading.val;
@@ -18,18 +43,4 @@ class ChannelModelRepo extends AppObject_1.AppObjectEntityRepo {
18
43
  set isLoadingChannelModel(val) {
19
44
  this.memoizedIsLoading.val = val;
20
45
  }
21
- makeIfMissing(appObject) {
22
- const existing = this.getForAppObject(appObject.id);
23
- if (existing) {
24
- return existing;
25
- }
26
- else {
27
- const newEntity = new ChannelModel_1.ChannelModel(appObject);
28
- this.add(newEntity);
29
- return newEntity;
30
- }
31
- }
32
46
  }
33
- exports.ChannelModelRepo = ChannelModelRepo;
34
- ChannelModelRepo.type = "CHANNEL_MODEL_REPO";
35
- ChannelModelRepo.get = (appObjects) => AppObject_1.getSingletonComponent(ChannelModelRepo.type, appObjects);
@@ -1,2 +1,3 @@
1
1
  export * from "./ChannelModel";
2
+ export * from "./ChannelModelObject";
2
3
  export * from "./ChannelModelRepo";
@@ -11,4 +11,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./ChannelModel"), exports);
14
+ __exportStar(require("./ChannelModelObject"), exports);
14
15
  __exportStar(require("./ChannelModelRepo"), exports);