@shapediver/viewer.creation-control-center.session 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,73 @@
1
+ Required Notice: Copyright 2023 ShapeDiver GmbH (https://www.shapediver.com)
2
+
3
+ https://polyformproject.org/licenses/noncommercial/1.0.0
4
+
5
+ Acceptance
6
+
7
+ In order to get any license under these terms, you must agree to them as both strict obligations and conditions to all your licenses.
8
+
9
+ Copyright License
10
+
11
+ The licensor grants you a copyright license for the software to do everything you might do with the software that would otherwise infringe the licensor’s copyright in it for any permitted purpose. However, you may only distribute the software according to Distribution License and make changes or new works based on the software according to Changes and New Works License.
12
+
13
+ Distribution License
14
+
15
+ The licensor grants you an additional copyright license to distribute copies of the software. Your license to distribute covers distributing the software with changes and new works permitted by Changes and New Works License.
16
+
17
+ Notices
18
+
19
+ You must ensure that anyone who gets a copy of any part of the software from you also gets a copy of these terms or the URL for them above, as well as copies of any plain-text lines beginning with Required Notice: that the licensor provided with the software. For example:
20
+
21
+ Required Notice: Copyright 2023 ShapeDiver GmbH (https://www.shapediver.com)
22
+
23
+ Changes and New Works License
24
+
25
+ The licensor grants you an additional copyright license to make changes and new works based on the software for any permitted purpose.
26
+
27
+ Patent License
28
+
29
+ The licensor grants you a patent license for the software that covers patent claims the licensor can license, or becomes able to license, that you would infringe by using the software.
30
+
31
+ Noncommercial Purposes
32
+
33
+ Any noncommercial purpose is a permitted purpose.
34
+
35
+ Personal Uses
36
+
37
+ Personal use for research, experiment, and testing for the benefit of public knowledge, personal study, private entertainment, hobby projects, amateur pursuits, or religious observance, without any anticipated commercial application, is use for a permitted purpose.
38
+
39
+ Noncommercial Organizations
40
+
41
+ Use by any charitable organization, educational institution, public research organization, public safety or health organization, environmental protection organization, or government institution is use for a permitted purpose regardless of the source of funding or obligations resulting from the funding.
42
+
43
+ Fair Use
44
+
45
+ You may have “fair use” rights for the software under the law. These terms do not limit them.
46
+
47
+ No Other Rights
48
+
49
+ These terms do not allow you to sublicense or transfer any of your licenses to anyone else, or prevent the licensor from granting licenses to anyone else. These terms do not imply any other licenses.
50
+
51
+ Patent Defense
52
+
53
+ If you make any written claim that the software infringes or contributes to infringement of any patent, your patent license for the software granted under these terms ends immediately. If your company makes such a claim, your patent license ends immediately for work on behalf of your company.
54
+
55
+ Violations
56
+
57
+ The first time you are notified in writing that you have violated any of these terms, or done anything with the software not covered by your licenses, your licenses can nonetheless continue if you come into full compliance with these terms, and take practical steps to correct past violations, within 32 days of receiving notice. Otherwise, all your licenses end immediately.
58
+
59
+ No Liability
60
+
61
+ As far as the law allows, the software comes as is, without any warranty or condition, and the licensor will not be liable to you for any damages arising out of these terms or the use or nature of the software, under any kind of legal claim.
62
+
63
+ Definitions
64
+
65
+ The licensor is the individual or entity offering these terms, and the software is the software the licensor makes available under these terms.
66
+
67
+ You refers to the individual or entity agreeing to these terms.
68
+
69
+ Your company is any legal entity, sole proprietorship, or other kind of organization that you work for, plus all organizations that have control over, are under the control of, or are under common control with that organization. Control means ownership of substantially all the assets of an entity, or the power to direct its management and policies by vote, contract, or otherwise. Control can be direct or indirect.
70
+
71
+ Your licenses are all the licenses granted to you for the software under these terms.
72
+
73
+ Use means anything you do with the software requiring one of your licenses.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # `@shapediver/viewer.creation-control-center.session`
2
+
3
+ This package is part of the [`@shapediver/viewer`](https://www.npmjs.com/package/@shapediver/viewer), you can find all information [here](https://viewer.shapediver.com/v3/latest/api/index.html).
@@ -0,0 +1,23 @@
1
+ import { ICreationControlCenterSession, SessionCreationDefinition } from '../interfaces/ICreationControlCenterSession';
2
+ import { ISettingsSections } from '@shapediver/viewer.shared.types';
3
+ import { SessionEngine } from '@shapediver/viewer.session-engine.session-engine';
4
+ import { ShapeDiverResponseDto } from '@shapediver/sdk.geometry-api-sdk-v2';
5
+ export declare class CreationControlCenterSession implements ICreationControlCenterSession {
6
+ #private;
7
+ private static _instance;
8
+ readonly sessionEngines: {
9
+ [key: string]: SessionEngine;
10
+ };
11
+ updateSession?: (sessionEngines: {
12
+ [key: string]: SessionEngine;
13
+ }) => void;
14
+ static get instance(): CreationControlCenterSession;
15
+ applySettings(sessionId: string, response: ShapeDiverResponseDto, sections?: ISettingsSections): Promise<void>;
16
+ closeSessionEngine(id: string): Promise<void>;
17
+ createSessionEngine(properties: SessionCreationDefinition): Promise<SessionEngine>;
18
+ resetSettings(sessionId: string, sections?: ISettingsSections): Promise<void>;
19
+ saveSettings(sessionId: string, viewportId?: string): Promise<boolean>;
20
+ private assignSettings;
21
+ private createSettingsObject;
22
+ }
23
+ //# sourceMappingURL=CreationControlCenterSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreationControlCenterSession.d.ts","sourceRoot":"","sources":["../../src/implementation/CreationControlCenterSession.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAEvH,OAAO,EAAE,iBAAiB,EAAyB,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,kDAAkD,CAAC;AAEjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,qBAAa,4BAA6B,YAAW,6BAA6B;;IAQ9E,OAAO,CAAC,MAAM,CAAC,SAAS,CAA+B;IAIvD,SAAgB,cAAc,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAA;KAAE,CAAM;IAE/D,aAAa,CAAC,EAAE,CACnB,cAAc,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;KAAE,KAChD,IAAI,CAAC;IAMV,WAAkB,QAAQ,iCAEzB;IAMM,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BxG,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyD7C,mBAAmB,CAAC,UAAU,EAAE,yBAAyB,GAAG,OAAO,CAAC,aAAa,CAAC;IAgIxF,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BvE,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAkBrE,cAAc;IAkB5B,OAAO,CAAC,oBAAoB;CA4B/B"}
@@ -0,0 +1,313 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
12
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
13
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
14
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
15
+ };
16
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
17
+ if (kind === "m") throw new TypeError("Private method is not writable");
18
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
19
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
20
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
21
+ };
22
+ var _CreationControlCenterSession_eventEngine, _CreationControlCenterSession_logger, _CreationControlCenterSession_stateEngine, _CreationControlCenterSession_uuidGenerator, _CreationControlCenterSession_firstSessionEngine;
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.CreationControlCenterSession = void 0;
25
+ const viewer_shared_build_data_1 = require("@shapediver/viewer.shared.build-data");
26
+ const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
27
+ const viewer_settings_1 = require("@shapediver/viewer.settings");
28
+ const viewer_shared_types_1 = require("@shapediver/viewer.shared.types");
29
+ const viewer_session_engine_session_engine_1 = require("@shapediver/viewer.session-engine.session-engine");
30
+ const SessionGlobalAccessObject_1 = require("./SessionGlobalAccessObject");
31
+ class CreationControlCenterSession {
32
+ constructor() {
33
+ // #region Properties (8)
34
+ _CreationControlCenterSession_eventEngine.set(this, viewer_shared_services_1.EventEngine.instance);
35
+ _CreationControlCenterSession_logger.set(this, viewer_shared_services_1.Logger.instance);
36
+ _CreationControlCenterSession_stateEngine.set(this, viewer_shared_services_1.StateEngine.instance);
37
+ _CreationControlCenterSession_uuidGenerator.set(this, viewer_shared_services_1.UuidGenerator.instance);
38
+ _CreationControlCenterSession_firstSessionEngine.set(this, void 0);
39
+ this.sessionEngines = {};
40
+ // #endregion Private Methods (2)
41
+ }
42
+ // #endregion Properties (8)
43
+ // #region Public Static Getters And Setters (1)
44
+ static get instance() {
45
+ return this._instance || (this._instance = new this());
46
+ }
47
+ // #endregion Public Static Getters And Setters (1)
48
+ // #region Public Methods (5)
49
+ applySettings(sessionId, response, sections) {
50
+ sections = sections || {};
51
+ this.sessionEngines[sessionId].applySettings(response, sections);
52
+ const promises = [];
53
+ if (sections.session && sections.session.parameter && sections.session.parameter.value)
54
+ promises.push(this.sessionEngines[sessionId].customize());
55
+ for (const r in __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines) {
56
+ const viewportEngineState = __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[r];
57
+ if ((viewportEngineState.sessionSettingsMode === viewer_shared_services_1.SESSION_SETTINGS_MODE.FIRST && __classPrivateFieldGet(this, _CreationControlCenterSession_firstSessionEngine, "f") && sessionId === __classPrivateFieldGet(this, _CreationControlCenterSession_firstSessionEngine, "f").id) ||
58
+ (viewportEngineState.sessionSettingsMode === viewer_shared_services_1.SESSION_SETTINGS_MODE.MANUAL && sessionId === viewportEngineState.sessionSettingsId)) {
59
+ __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[r].settingsAssigned.reset();
60
+ promises.push(new Promise(resolve => {
61
+ __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[r].settingsAssigned.then(() => {
62
+ resolve();
63
+ });
64
+ }));
65
+ viewportEngineState.applySettings(sections.viewport);
66
+ }
67
+ }
68
+ return new Promise(resolve => Promise.all(promises).then(() => resolve()));
69
+ }
70
+ closeSessionEngine(id) {
71
+ var _a;
72
+ return __awaiter(this, void 0, void 0, function* () {
73
+ if (!this.sessionEngines[id])
74
+ return;
75
+ __classPrivateFieldGet(this, _CreationControlCenterSession_logger, "f").debugLow(`CreationControlCenter.closeSession: Closing session ${id}.`);
76
+ if (__classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").sessionEngines[id].initialized.resolved === false)
77
+ yield new Promise(resolve => { __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").sessionEngines[id].initialized.then(() => resolve()); });
78
+ yield this.sessionEngines[id].close();
79
+ // remove from rendering engines (also directly assigned)
80
+ for (const r in __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines) {
81
+ const viewportEngineState = __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[r];
82
+ if ((viewportEngineState.sessionSettingsMode === viewer_shared_services_1.SESSION_SETTINGS_MODE.MANUAL && viewportEngineState.sessionSettingsId === id) ||
83
+ (viewportEngineState.sessionSettingsMode === viewer_shared_services_1.SESSION_SETTINGS_MODE.FIRST && __classPrivateFieldGet(this, _CreationControlCenterSession_firstSessionEngine, "f") === this.sessionEngines[id])) {
84
+ viewportEngineState.reset();
85
+ }
86
+ }
87
+ if (__classPrivateFieldGet(this, _CreationControlCenterSession_firstSessionEngine, "f") === this.sessionEngines[id]) {
88
+ const engines = Object.values(this.sessionEngines).filter(s => s.id !== id);
89
+ __classPrivateFieldSet(this, _CreationControlCenterSession_firstSessionEngine, engines.length === 0 ? undefined : engines[0], "f");
90
+ if (__classPrivateFieldGet(this, _CreationControlCenterSession_firstSessionEngine, "f")) {
91
+ Object.values(__classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").sessionEngines).forEach(s => s.isFirstSession = false);
92
+ __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").sessionEngines[__classPrivateFieldGet(this, _CreationControlCenterSession_firstSessionEngine, "f").id].isFirstSession = true;
93
+ const promises = [];
94
+ for (const r in __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines) {
95
+ const viewportEngineState = __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[r];
96
+ if (__classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[r].settingsAssigned.resolved === false) {
97
+ if (viewportEngineState.sessionSettingsMode === viewer_shared_services_1.SESSION_SETTINGS_MODE.FIRST) {
98
+ promises.push(__classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[r].settingsAssigned);
99
+ this.assignSettings(viewportEngineState.id, (_a = __classPrivateFieldGet(this, _CreationControlCenterSession_firstSessionEngine, "f")) === null || _a === void 0 ? void 0 : _a.id);
100
+ }
101
+ }
102
+ }
103
+ yield Promise.all(promises);
104
+ if (this.updateSession)
105
+ this.updateSession(this.sessionEngines);
106
+ }
107
+ }
108
+ __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").sessionEngines[id].settingsRegistered.reset();
109
+ this.sessionEngines[id] = undefined;
110
+ delete this.sessionEngines[id];
111
+ delete __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").sessionEngines[id];
112
+ __classPrivateFieldGet(this, _CreationControlCenterSession_logger, "f").debug('CreationControlCenter.closeSessionEngine: Session closed.');
113
+ for (const r in __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines)
114
+ __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[r].update('CreationControlCenter.closeSessionEngine');
115
+ if (this.updateSession)
116
+ this.updateSession(this.sessionEngines);
117
+ __classPrivateFieldGet(this, _CreationControlCenterSession_eventEngine, "f").emitEvent(viewer_shared_services_1.EVENTTYPE.SESSION.SESSION_CLOSED, { sessionId: id });
118
+ });
119
+ }
120
+ createSessionEngine(properties) {
121
+ return __awaiter(this, void 0, void 0, function* () {
122
+ const eventId = __classPrivateFieldGet(this, _CreationControlCenterSession_uuidGenerator, "f").create();
123
+ const sessionEngineId = properties.id || __classPrivateFieldGet(this, _CreationControlCenterSession_uuidGenerator, "f").create();
124
+ properties.id = sessionEngineId;
125
+ properties.loadOutputs = properties.allowOutputLoading === false ? false : properties.loadOutputs;
126
+ try {
127
+ const eventStart = { type: viewer_shared_types_1.TASK_TYPE.SESSION_CREATION, id: eventId, progress: 0, status: 'Creating session', data: { sessionId: sessionEngineId } };
128
+ __classPrivateFieldGet(this, _CreationControlCenterSession_eventEngine, "f").emitEvent(viewer_shared_services_1.EVENTTYPE.TASK.TASK_START, eventStart);
129
+ // check if the given id is valid
130
+ if (this.sessionEngines[sessionEngineId]) {
131
+ const eventClose = { type: viewer_shared_types_1.TASK_TYPE.SESSION_CREATION, id: eventId, progress: 0.1, status: 'Closing session with same id', data: { sessionId: sessionEngineId } };
132
+ __classPrivateFieldGet(this, _CreationControlCenterSession_eventEngine, "f").emitEvent(viewer_shared_services_1.EVENTTYPE.TASK.TASK_PROCESS, eventClose);
133
+ __classPrivateFieldGet(this, _CreationControlCenterSession_logger, "f").warn(`CreationControlCenter.createSession: Session with this id (${sessionEngineId}) already exists. Closing initial instance.`);
134
+ yield this.closeSessionEngine(sessionEngineId);
135
+ }
136
+ // create the actual session
137
+ const sessionEngine = new viewer_session_engine_session_engine_1.SessionEngine({
138
+ id: sessionEngineId,
139
+ guid: properties.guid,
140
+ ticket: properties.ticket,
141
+ modelViewUrl: properties.modelViewUrl,
142
+ excludeViewports: properties.excludeViewports,
143
+ buildVersion: viewer_shared_build_data_1.build_data.build_version,
144
+ buildDate: viewer_shared_build_data_1.build_data.build_date,
145
+ jwtToken: properties.jwtToken,
146
+ allowOutputLoading: properties.allowOutputLoading === undefined ? true : properties.allowOutputLoading,
147
+ loadSdtf: properties.loadSdtf === undefined ? false : properties.loadSdtf,
148
+ });
149
+ __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").sessionEngines[sessionEngineId] = new SessionGlobalAccessObject_1.SessionGlobalAccessObject(sessionEngine);
150
+ const eventInit = { type: viewer_shared_types_1.TASK_TYPE.SESSION_CREATION, id: eventId, progress: 0.25, status: 'Initializing session.', data: { sessionId: sessionEngineId } };
151
+ __classPrivateFieldGet(this, _CreationControlCenterSession_eventEngine, "f").emitEvent(viewer_shared_services_1.EVENTTYPE.TASK.TASK_PROCESS, eventInit);
152
+ yield sessionEngine.init(properties.initialParameterValues);
153
+ if (properties.loadOutputs !== false) {
154
+ if (properties.waitForOutputs !== false) {
155
+ yield sessionEngine.updateOutputs({
156
+ eventId,
157
+ type: viewer_shared_types_1.TASK_TYPE.SESSION_CREATION,
158
+ progressRange: {
159
+ min: 0.25,
160
+ max: 0.9
161
+ },
162
+ data: { sessionId: sessionEngineId }
163
+ });
164
+ __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").sessionEngines[sessionEngineId].initialOutputsLoaded.resolve(true);
165
+ __classPrivateFieldGet(this, _CreationControlCenterSession_eventEngine, "f").emitEvent(viewer_shared_services_1.EVENTTYPE.SESSION.SESSION_INITIAL_OUTPUTS_LOADED, { sessionId: sessionEngineId });
166
+ }
167
+ else {
168
+ sessionEngine.updateOutputs({
169
+ eventId,
170
+ type: viewer_shared_types_1.TASK_TYPE.SESSION_CREATION,
171
+ progressRange: {
172
+ min: 0.25,
173
+ max: 0.9
174
+ },
175
+ data: { sessionId: sessionEngineId }
176
+ }).then(() => {
177
+ __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").sessionEngines[sessionEngineId].initialOutputsLoaded.resolve(true);
178
+ __classPrivateFieldGet(this, _CreationControlCenterSession_eventEngine, "f").emitEvent(viewer_shared_services_1.EVENTTYPE.SESSION.SESSION_INITIAL_OUTPUTS_LOADED, { sessionId: sessionEngineId });
179
+ for (const r in __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines)
180
+ __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[r].update('CreationControlCenter.createSessionEngine.waitForOutputs=false');
181
+ });
182
+ }
183
+ }
184
+ // save the session
185
+ this.sessionEngines[sessionEngineId] = sessionEngine;
186
+ __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").sessionEngines[sessionEngineId].initialized.resolve(true);
187
+ __classPrivateFieldGet(this, _CreationControlCenterSession_logger, "f").debug(`CreationControlCenter.createSession: Session(${sessionEngine.id}) created.`);
188
+ if (!__classPrivateFieldGet(this, _CreationControlCenterSession_firstSessionEngine, "f")) {
189
+ __classPrivateFieldSet(this, _CreationControlCenterSession_firstSessionEngine, sessionEngine, "f");
190
+ Object.values(__classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").sessionEngines).forEach(s => s.isFirstSession = false);
191
+ __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").sessionEngines[__classPrivateFieldGet(this, _CreationControlCenterSession_firstSessionEngine, "f").id].isFirstSession = true;
192
+ }
193
+ const promises = [];
194
+ for (const r in __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines) {
195
+ const viewportEngine = __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[r];
196
+ if (__classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[r].settingsAssigned.resolved === false) {
197
+ if (viewportEngine.sessionSettingsMode === viewer_shared_services_1.SESSION_SETTINGS_MODE.FIRST || (viewportEngine.sessionSettingsMode === viewer_shared_services_1.SESSION_SETTINGS_MODE.MANUAL && viewportEngine.sessionSettingsId === sessionEngineId)) {
198
+ promises.push(__classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[r].settingsAssigned);
199
+ this.assignSettings(viewportEngine.id, sessionEngineId);
200
+ }
201
+ }
202
+ }
203
+ yield Promise.all(promises);
204
+ for (const r in __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines)
205
+ __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[r].update('CreationControlCenter.createSessionEngine');
206
+ if (this.updateSession)
207
+ this.updateSession(this.sessionEngines);
208
+ const eventEnd = { type: viewer_shared_types_1.TASK_TYPE.SESSION_CREATION, id: eventId, progress: 1, status: 'Session created', data: { sessionId: sessionEngineId } };
209
+ __classPrivateFieldGet(this, _CreationControlCenterSession_eventEngine, "f").emitEvent(viewer_shared_services_1.EVENTTYPE.TASK.TASK_END, eventEnd);
210
+ __classPrivateFieldGet(this, _CreationControlCenterSession_eventEngine, "f").emitEvent(viewer_shared_services_1.EVENTTYPE.SESSION.SESSION_CREATED, { sessionId: sessionEngineId });
211
+ return sessionEngine;
212
+ }
213
+ catch (e) {
214
+ // special behavior, if this was the only session, display the error on the logo screen
215
+ if ((0, viewer_shared_services_1.isViewerError)(e)) {
216
+ if ((this.sessionEngines[sessionEngineId] && Object.values(this.sessionEngines).length === 1) || (!this.sessionEngines[sessionEngineId] && Object.values(this.sessionEngines).length === 0)) {
217
+ for (const r in __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines)
218
+ __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[r].displayErrorMessage(e.message);
219
+ }
220
+ }
221
+ const eventCancel1 = { type: viewer_shared_types_1.TASK_TYPE.SESSION_CREATION, id: eventId, progress: 0.9, status: 'Session created failed, closing session', data: { sessionId: sessionEngineId } };
222
+ __classPrivateFieldGet(this, _CreationControlCenterSession_eventEngine, "f").emitEvent(viewer_shared_services_1.EVENTTYPE.TASK.TASK_PROCESS, eventCancel1);
223
+ yield this.closeSessionEngine(sessionEngineId);
224
+ const eventCancel2 = { type: viewer_shared_types_1.TASK_TYPE.SESSION_CREATION, id: eventId, progress: 1, status: 'Session created failed', data: { sessionId: sessionEngineId } };
225
+ __classPrivateFieldGet(this, _CreationControlCenterSession_eventEngine, "f").emitEvent(viewer_shared_services_1.EVENTTYPE.TASK.TASK_CANCEL, eventCancel2);
226
+ throw e;
227
+ }
228
+ });
229
+ }
230
+ resetSettings(sessionId, sections) {
231
+ sections = sections || {};
232
+ this.sessionEngines[sessionId].resetSettings(sections);
233
+ const promises = [];
234
+ if (sections.session && sections.session.parameter && sections.session.parameter.value)
235
+ promises.push(this.sessionEngines[sessionId].customize());
236
+ for (const r in __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines) {
237
+ const viewportEngine = __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[r];
238
+ if ((viewportEngine.sessionSettingsMode === viewer_shared_services_1.SESSION_SETTINGS_MODE.FIRST && __classPrivateFieldGet(this, _CreationControlCenterSession_firstSessionEngine, "f") && sessionId === __classPrivateFieldGet(this, _CreationControlCenterSession_firstSessionEngine, "f").id) ||
239
+ (viewportEngine.sessionSettingsMode === viewer_shared_services_1.SESSION_SETTINGS_MODE.MANUAL && sessionId === viewportEngine.sessionSettingsId)) {
240
+ __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[r].settingsAssigned.reset();
241
+ promises.push(new Promise(resolve => {
242
+ __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[r].settingsAssigned.then(() => {
243
+ resolve();
244
+ });
245
+ }));
246
+ viewportEngine.applySettings(sections.viewport);
247
+ }
248
+ }
249
+ return new Promise(resolve => Promise.all(promises).then(() => resolve()));
250
+ }
251
+ saveSettings(sessionId, viewportId) {
252
+ return __awaiter(this, void 0, void 0, function* () {
253
+ const session = this.sessionEngines[sessionId];
254
+ yield session.saveUiProperties(false);
255
+ const settingsObject = this.createSettingsObject(sessionId, viewportId);
256
+ const response = yield session.saveSettings(settingsObject);
257
+ if (response) {
258
+ __classPrivateFieldGet(this, _CreationControlCenterSession_logger, "f").debug(`Session(${sessionId}).saveSettings: Saved settings.`);
259
+ }
260
+ else {
261
+ throw new viewer_shared_services_1.ShapeDiverViewerSessionError(`Session(${sessionId}).saveSettings: Could not save settings.`);
262
+ }
263
+ return response;
264
+ });
265
+ }
266
+ // #endregion Public Methods (5)
267
+ // #region Private Methods (2)
268
+ assignSettings(viewportEngineId, sessionId, updateViewport = false) {
269
+ return __awaiter(this, void 0, void 0, function* () {
270
+ const viewportEngine = __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[viewportEngineId];
271
+ if (__classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").sessionEngines[sessionId].initialized.resolved === true) {
272
+ // immediate
273
+ viewportEngine.assignSettingsEngine(this.sessionEngines[sessionId].settingsEngine);
274
+ yield viewportEngine.applySettings(undefined, undefined, updateViewport);
275
+ }
276
+ else {
277
+ yield new Promise(resolve => {
278
+ __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").sessionEngines[sessionId].initialized.then(() => __awaiter(this, void 0, void 0, function* () {
279
+ viewportEngine.assignSettingsEngine(this.sessionEngines[sessionId].settingsEngine);
280
+ yield viewportEngine.applySettings(undefined, undefined, updateViewport);
281
+ resolve();
282
+ }));
283
+ });
284
+ }
285
+ });
286
+ }
287
+ createSettingsObject(sessionId, viewportId) {
288
+ const session = this.sessionEngines[sessionId];
289
+ session.settingsEngine.settings.build_version = viewer_shared_build_data_1.build_data.build_version;
290
+ session.settingsEngine.settings.build_date = viewer_shared_build_data_1.build_data.build_date;
291
+ session.settingsEngine.settings.settings_version = viewer_settings_1.latestVersion;
292
+ let viewportEngine;
293
+ if (viewportId && __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[viewportId]) {
294
+ viewportEngine = __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[viewportId];
295
+ }
296
+ else {
297
+ for (const r in __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines) {
298
+ const viewportEngineToCheck = __classPrivateFieldGet(this, _CreationControlCenterSession_stateEngine, "f").viewportEngines[r];
299
+ if ((viewportEngineToCheck.sessionSettingsMode === viewer_shared_services_1.SESSION_SETTINGS_MODE.FIRST && __classPrivateFieldGet(this, _CreationControlCenterSession_firstSessionEngine, "f") && sessionId === __classPrivateFieldGet(this, _CreationControlCenterSession_firstSessionEngine, "f").id) ||
300
+ (viewportEngineToCheck.sessionSettingsMode === viewer_shared_services_1.SESSION_SETTINGS_MODE.MANUAL && sessionId === viewportEngineToCheck.sessionSettingsId)) {
301
+ viewportEngine = viewportEngineToCheck;
302
+ continue;
303
+ }
304
+ }
305
+ }
306
+ if (viewportEngine)
307
+ viewportEngine.saveSettings();
308
+ return session.settingsEngine.settings;
309
+ }
310
+ }
311
+ exports.CreationControlCenterSession = CreationControlCenterSession;
312
+ _CreationControlCenterSession_eventEngine = new WeakMap(), _CreationControlCenterSession_logger = new WeakMap(), _CreationControlCenterSession_stateEngine = new WeakMap(), _CreationControlCenterSession_uuidGenerator = new WeakMap(), _CreationControlCenterSession_firstSessionEngine = new WeakMap();
313
+ //# sourceMappingURL=CreationControlCenterSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreationControlCenterSession.js","sourceRoot":"","sources":["../../src/implementation/CreationControlCenterSession.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { SessionEngine } from '@shapediver/viewer.session-engine.session-engine';
2
+ import { ISessionGlobalAccessObjectDefinition, SettingsEngine, StatePromise } from '@shapediver/viewer.shared.services';
3
+ import { ShapeDiverRequestGltfUploadQueryConversion, ShapeDiverResponseDto } from '@shapediver/sdk.geometry-api-sdk-v2';
4
+ export declare class SessionGlobalAccessObject implements ISessionGlobalAccessObjectDefinition {
5
+ #private;
6
+ constructor(sessionEngine: SessionEngine);
7
+ get canUploadGLTF(): boolean;
8
+ get id(): string;
9
+ get initialOutputsLoaded(): StatePromise<boolean>;
10
+ get initialized(): StatePromise<boolean>;
11
+ get isFirstSession(): boolean;
12
+ set isFirstSession(value: boolean);
13
+ get modelViewUrl(): string;
14
+ get settingsEngine(): SettingsEngine;
15
+ get settingsRegistered(): StatePromise<boolean>;
16
+ uploadGLTF(gltf: Blob, name: ShapeDiverRequestGltfUploadQueryConversion | undefined): Promise<ShapeDiverResponseDto>;
17
+ }
18
+ //# sourceMappingURL=SessionGlobalAccessObject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionGlobalAccessObject.d.ts","sourceRoot":"","sources":["../../src/implementation/SessionGlobalAccessObject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kDAAkD,CAAC;AACjF,OAAO,EAAE,oCAAoC,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACxH,OAAO,EAAE,0CAA0C,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAExH,qBAAa,yBAA0B,YAAW,oCAAoC;;gBActE,aAAa,EAAE,aAAa;IAQxC,IAAW,aAAa,IAAI,OAAO,CAElC;IAED,IAAW,EAAE,IAAI,MAAM,CAEtB;IAED,IAAW,oBAAoB,IAAI,YAAY,CAAC,OAAO,CAAC,CAEvD;IAED,IAAW,WAAW,IAAI,YAAY,CAAC,OAAO,CAAC,CAE9C;IAED,IAAW,cAAc,IAAI,OAAO,CAEnC;IAED,IAAW,cAAc,CAAC,KAAK,EAAE,OAAO,EAEvC;IAED,IAAW,YAAY,IAAI,MAAM,CAEhC;IAED,IAAW,cAAc,IAAI,cAAc,CAE1C;IAED,IAAW,kBAAkB,IAAI,YAAY,CAAC,OAAO,CAAC,CAErD;IAMM,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,0CAA0C,GAAG,SAAS,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAK9H"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _SessionGlobalAccessObject_sessionEngine, _SessionGlobalAccessObject_initialOutputsLoaded, _SessionGlobalAccessObject_initialized, _SessionGlobalAccessObject_isFirstSession, _SessionGlobalAccessObject_settingsRegistered;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.SessionGlobalAccessObject = void 0;
16
+ const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
17
+ class SessionGlobalAccessObject {
18
+ // #endregion Properties (5)
19
+ // #region Constructors (1)
20
+ constructor(sessionEngine) {
21
+ // #region Properties (5)
22
+ _SessionGlobalAccessObject_sessionEngine.set(this, void 0);
23
+ _SessionGlobalAccessObject_initialOutputsLoaded.set(this, new viewer_shared_services_1.StatePromise());
24
+ _SessionGlobalAccessObject_initialized.set(this, new viewer_shared_services_1.StatePromise());
25
+ _SessionGlobalAccessObject_isFirstSession.set(this, false);
26
+ _SessionGlobalAccessObject_settingsRegistered.set(this, new viewer_shared_services_1.StatePromise());
27
+ __classPrivateFieldSet(this, _SessionGlobalAccessObject_sessionEngine, sessionEngine, "f");
28
+ }
29
+ // #endregion Constructors (1)
30
+ // #region Public Getters And Setters (9)
31
+ get canUploadGLTF() {
32
+ return __classPrivateFieldGet(this, _SessionGlobalAccessObject_sessionEngine, "f").canUploadGLTF;
33
+ }
34
+ get id() {
35
+ return __classPrivateFieldGet(this, _SessionGlobalAccessObject_sessionEngine, "f").id;
36
+ }
37
+ get initialOutputsLoaded() {
38
+ return __classPrivateFieldGet(this, _SessionGlobalAccessObject_initialOutputsLoaded, "f");
39
+ }
40
+ get initialized() {
41
+ return __classPrivateFieldGet(this, _SessionGlobalAccessObject_initialized, "f");
42
+ }
43
+ get isFirstSession() {
44
+ return __classPrivateFieldGet(this, _SessionGlobalAccessObject_isFirstSession, "f");
45
+ }
46
+ set isFirstSession(value) {
47
+ __classPrivateFieldSet(this, _SessionGlobalAccessObject_isFirstSession, value, "f");
48
+ }
49
+ get modelViewUrl() {
50
+ return __classPrivateFieldGet(this, _SessionGlobalAccessObject_sessionEngine, "f").modelViewUrl;
51
+ }
52
+ get settingsEngine() {
53
+ return __classPrivateFieldGet(this, _SessionGlobalAccessObject_sessionEngine, "f").settingsEngine;
54
+ }
55
+ get settingsRegistered() {
56
+ return __classPrivateFieldGet(this, _SessionGlobalAccessObject_settingsRegistered, "f");
57
+ }
58
+ // #endregion Public Getters And Setters (9)
59
+ // #region Public Methods (1)
60
+ uploadGLTF(gltf, name) {
61
+ return __classPrivateFieldGet(this, _SessionGlobalAccessObject_sessionEngine, "f").uploadGLTF(gltf, name);
62
+ }
63
+ }
64
+ exports.SessionGlobalAccessObject = SessionGlobalAccessObject;
65
+ _SessionGlobalAccessObject_sessionEngine = new WeakMap(), _SessionGlobalAccessObject_initialOutputsLoaded = new WeakMap(), _SessionGlobalAccessObject_initialized = new WeakMap(), _SessionGlobalAccessObject_isFirstSession = new WeakMap(), _SessionGlobalAccessObject_settingsRegistered = new WeakMap();
66
+ //# sourceMappingURL=SessionGlobalAccessObject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionGlobalAccessObject.js","sourceRoot":"","sources":["../../src/implementation/SessionGlobalAccessObject.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,+EAAwH;AAGxH,MAAa,yBAAyB;IAUlC,4BAA4B;IAE5B,2BAA2B;IAE3B,YAAY,aAA4B;QAbxC,yBAAyB;QAEzB,2DAAuC;QAEvC,0DAA+C,IAAI,qCAAY,EAAE,EAAC;QAClE,iDAAsC,IAAI,qCAAY,EAAE,EAAC;QACzD,oDAA2B,KAAK,EAAC;QACjC,wDAA6C,IAAI,qCAAY,EAAE,EAAC;QAO5D,uBAAA,IAAI,4CAAkB,aAAa,MAAA,CAAC;IACxC,CAAC;IAED,8BAA8B;IAE9B,yCAAyC;IAEzC,IAAW,aAAa;QACpB,OAAO,uBAAA,IAAI,gDAAe,CAAC,aAAa,CAAC;IAC7C,CAAC;IAED,IAAW,EAAE;QACT,OAAO,uBAAA,IAAI,gDAAe,CAAC,EAAE,CAAC;IAClC,CAAC;IAED,IAAW,oBAAoB;QAC3B,OAAO,uBAAA,IAAI,uDAAsB,CAAC;IACtC,CAAC;IAED,IAAW,WAAW;QAClB,OAAO,uBAAA,IAAI,8CAAa,CAAC;IAC7B,CAAC;IAED,IAAW,cAAc;QACrB,OAAO,uBAAA,IAAI,iDAAgB,CAAC;IAChC,CAAC;IAED,IAAW,cAAc,CAAC,KAAc;QACpC,uBAAA,IAAI,6CAAmB,KAAK,MAAA,CAAC;IACjC,CAAC;IAED,IAAW,YAAY;QACnB,OAAO,uBAAA,IAAI,gDAAe,CAAC,YAAY,CAAC;IAC5C,CAAC;IAED,IAAW,cAAc;QACrB,OAAO,uBAAA,IAAI,gDAAe,CAAC,cAAc,CAAC;IAC9C,CAAC;IAED,IAAW,kBAAkB;QACzB,OAAO,uBAAA,IAAI,qDAAoB,CAAC;IACpC,CAAC;IAED,4CAA4C;IAE5C,6BAA6B;IAEtB,UAAU,CAAC,IAAU,EAAE,IAA4D;QACtF,OAAO,uBAAA,IAAI,gDAAe,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;CAGJ;AAnED,8DAmEC"}
@@ -0,0 +1,4 @@
1
+ import { CreationControlCenterSession } from './implementation/CreationControlCenterSession';
2
+ import { ICreationControlCenterSession, SessionCreationDefinition } from './interfaces/ICreationControlCenterSession';
3
+ export { ICreationControlCenterSession, CreationControlCenterSession, SessionCreationDefinition };
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAC;AAC7F,OAAO,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AAEtH,OAAO,EACH,6BAA6B,EAAE,4BAA4B,EAC3D,yBAAyB,EAC5B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreationControlCenterSession = void 0;
4
+ const CreationControlCenterSession_1 = require("./implementation/CreationControlCenterSession");
5
+ Object.defineProperty(exports, "CreationControlCenterSession", { enumerable: true, get: function () { return CreationControlCenterSession_1.CreationControlCenterSession; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,gGAA6F;AAI1D,6GAJ1B,2DAA4B,OAI0B"}
@@ -0,0 +1,43 @@
1
+ import { ISettingsSections } from '@shapediver/viewer.shared.types';
2
+ import { SessionEngine } from '@shapediver/viewer.session-engine.session-engine';
3
+ import { ShapeDiverResponseDto } from '@shapediver/sdk.geometry-api-sdk-v2';
4
+ export declare type SessionCreationDefinition = {
5
+ /** The ticket for direct embedding of the model represented by the session. This identifies the model on the Geometry Backend. If no ticket was provided, a {@link guid} has to be provided instead. */
6
+ ticket?: string;
7
+ /** The geometry backend model id (guid). This identifies the model on the Geometry Backend. A {@link jwtToken} is needed for authentication. If no guid was provided, a {@link ticket} has to be provided instead. */
8
+ guid?: string;
9
+ /** The modelViewUrl of the {@link https://help.shapediver.com/doc/Geometry-Backend.1863942173.html|ShapeDiver Geometry Backend} hosting the model. */
10
+ modelViewUrl: string;
11
+ /** The JWT used for authorizing API calls to the Geometry Backend. */
12
+ jwtToken?: string;
13
+ /** The unique identifier of the session that was specified or automatically chosen on creation of the session. */
14
+ id?: string;
15
+ /** Option to wait for the outputs to be loaded, or return immediately after creation of the session. (default: true) */
16
+ waitForOutputs?: boolean;
17
+ /** Option to allow the outputs to be loaded, or to prevent them from being loaded. (default: true) */
18
+ allowOutputLoading?: boolean;
19
+ /** Option to load the outputs, or not load them until the first call of {@link ISession.customize}. (default: true) */
20
+ loadOutputs?: boolean;
21
+ /** Option to load the SDTF data. The data is not loaded by default as it can be quite large. (default: false) */
22
+ loadSdtf?: boolean;
23
+ /** Option to exclude some viewports from the start. Can be accessed via {@link ISession.excludeViewports}. */
24
+ excludeViewports?: string[];
25
+ /** The initial set of parameter values to use. Map from parameter id to parameter value. The default value will be used for any parameter not specified. */
26
+ initialParameterValues?: {
27
+ [key: string]: string;
28
+ };
29
+ };
30
+ export interface ICreationControlCenterSession {
31
+ sessionEngines: {
32
+ [key: string]: SessionEngine;
33
+ };
34
+ updateSessions?: (sessionEngines: {
35
+ [key: string]: SessionEngine;
36
+ }) => void;
37
+ applySettings(sessionId: string, response: ShapeDiverResponseDto, sections?: ISettingsSections): Promise<void>;
38
+ closeSessionEngine(id: string): Promise<void>;
39
+ createSessionEngine(properties: SessionCreationDefinition): Promise<SessionEngine>;
40
+ resetSettings(sessionId: string, sections?: ISettingsSections): Promise<void>;
41
+ saveSettings(sessionId: string, viewportId?: string): Promise<boolean>;
42
+ }
43
+ //# sourceMappingURL=ICreationControlCenterSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ICreationControlCenterSession.d.ts","sourceRoot":"","sources":["../../src/interfaces/ICreationControlCenterSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,kDAAkD,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAI5E,oBAAY,yBAAyB,GAAG;IACpC,wMAAwM;IACxM,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sNAAsN;IACtN,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sJAAsJ;IACtJ,YAAY,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kHAAkH;IAClH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,wHAAwH;IACxH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sGAAsG;IACtG,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,uHAAuH;IACvH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iHAAiH;IACjH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8GAA8G;IAC9G,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,4JAA4J;IAC5J,sBAAsB,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;CACrD,CAAC;AAMF,MAAM,WAAW,6BAA6B;IAG1C,cAAc,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;KAAE,CAAC;IAClD,cAAc,CAAC,EAAE,CAAC,cAAc,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;KAAE,KAAK,IAAI,CAAC;IAM7E,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/G,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,mBAAmB,CAAC,UAAU,EAAE,yBAAyB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACnF,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAG1E"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // #endregion Interfaces (1)
4
+ //# sourceMappingURL=ICreationControlCenterSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ICreationControlCenterSession.js","sourceRoot":"","sources":["../../src/interfaces/ICreationControlCenterSession.ts"],"names":[],"mappings":";;AAsDA,4BAA4B"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@shapediver/viewer.creation-control-center.session",
3
+ "version": "3.0.0",
4
+ "description": "",
5
+ "keywords": [],
6
+ "author": "Michael Oppitz <michael@shapediver.com>",
7
+ "license": "polyform-noncommercial-1.0.0",
8
+ "main": "dist/index.js",
9
+ "directories": {
10
+ "test": "__tests__"
11
+ },
12
+ "files": [
13
+ "dist",
14
+ "src",
15
+ "package.json",
16
+ "README.md",
17
+ "tsconfig.json"
18
+ ],
19
+ "publishConfig": {
20
+ "access": "public"
21
+ },
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://github.com/shapediver/Viewer.git"
25
+ },
26
+ "scripts": {
27
+ "check": "tsc --noEmit",
28
+ "build": "bash ../../scripts/building/build.sh",
29
+ "build-watch": "bash ../../scripts/building/build-watch.sh",
30
+ "build-dep": "bash ../../scripts/building/build-dep.sh"
31
+ },
32
+ "bugs": {
33
+ "url": "https://github.com/shapediver/Viewer/issues"
34
+ },
35
+ "homepage": "https://github.com/shapediver/Viewer#readme",
36
+ "typings": "dist/index.d.ts",
37
+ "jest": {
38
+ "preset": "ts-jest",
39
+ "testEnvironment": "node"
40
+ },
41
+ "dependencies": {
42
+ "@shapediver/sdk.geometry-api-sdk-v2": "1.8.2",
43
+ "@shapediver/viewer.session-engine.session-engine": "3.0.0"
44
+ },
45
+ "gitHead": "b6b0010bf5d5652aa338df8016405d97f33fcabb"
46
+ }
@@ -0,0 +1,351 @@
1
+ import { build_data } from '@shapediver/viewer.shared.build-data';
2
+ import {
3
+ EventEngine,
4
+ EVENTTYPE,
5
+ isViewerError,
6
+ Logger,
7
+ SESSION_SETTINGS_MODE,
8
+ ShapeDiverViewerSessionError,
9
+ StateEngine,
10
+ StatePromise,
11
+ UuidGenerator
12
+ } from '@shapediver/viewer.shared.services';
13
+ import { ICreationControlCenterSession, SessionCreationDefinition } from '../interfaces/ICreationControlCenterSession';
14
+ import { ISettings, latestVersion } from '@shapediver/viewer.settings';
15
+ import { ISettingsSections, ITaskEvent, TASK_TYPE } from '@shapediver/viewer.shared.types';
16
+ import { SessionEngine } from '@shapediver/viewer.session-engine.session-engine';
17
+ import { SessionGlobalAccessObject } from './SessionGlobalAccessObject';
18
+ import { ShapeDiverResponseDto } from '@shapediver/sdk.geometry-api-sdk-v2';
19
+
20
+ export class CreationControlCenterSession implements ICreationControlCenterSession {
21
+ // #region Properties (8)
22
+
23
+ readonly #eventEngine: EventEngine = EventEngine.instance;
24
+ readonly #logger: Logger = Logger.instance;
25
+ readonly #stateEngine: StateEngine = StateEngine.instance;
26
+ readonly #uuidGenerator: UuidGenerator = UuidGenerator.instance;
27
+
28
+ private static _instance: CreationControlCenterSession;
29
+
30
+ #firstSessionEngine?: SessionEngine;
31
+
32
+ public readonly sessionEngines: { [key: string]: SessionEngine } = {};
33
+
34
+ public updateSession?: (
35
+ sessionEngines: { [key: string]: SessionEngine; },
36
+ ) => void;
37
+
38
+ // #endregion Properties (8)
39
+
40
+ // #region Public Static Getters And Setters (1)
41
+
42
+ public static get instance() {
43
+ return this._instance || (this._instance = new this());
44
+ }
45
+
46
+ // #endregion Public Static Getters And Setters (1)
47
+
48
+ // #region Public Methods (5)
49
+
50
+ public applySettings(sessionId: string, response: ShapeDiverResponseDto, sections?: ISettingsSections): Promise<void> {
51
+ sections = sections || {};
52
+ this.sessionEngines[sessionId].applySettings(response, sections);
53
+
54
+ const promises: Promise<unknown>[] = [];
55
+
56
+ if (sections.session && sections.session.parameter && sections.session.parameter.value)
57
+ promises.push(this.sessionEngines[sessionId].customize());
58
+
59
+ for (const r in this.#stateEngine.viewportEngines) {
60
+ const viewportEngineState = this.#stateEngine.viewportEngines[r];
61
+ if ((viewportEngineState.sessionSettingsMode === SESSION_SETTINGS_MODE.FIRST && this.#firstSessionEngine && sessionId === this.#firstSessionEngine.id) ||
62
+ (viewportEngineState.sessionSettingsMode === SESSION_SETTINGS_MODE.MANUAL && sessionId === viewportEngineState.sessionSettingsId)) {
63
+ this.#stateEngine.viewportEngines[r].settingsAssigned.reset();
64
+ promises.push(new Promise<void>(resolve => {
65
+ this.#stateEngine.viewportEngines[r].settingsAssigned.then(() => {
66
+ resolve();
67
+ });
68
+ }));
69
+
70
+ viewportEngineState.applySettings(sections.viewport);
71
+ }
72
+ }
73
+ return new Promise(resolve => Promise.all(promises).then(() => resolve()));
74
+ }
75
+
76
+ public async closeSessionEngine(id: string): Promise<void> {
77
+ if (!this.sessionEngines[id]) return;
78
+
79
+ this.#logger.debugLow(`CreationControlCenter.closeSession: Closing session ${id}.`);
80
+
81
+ if (this.#stateEngine.sessionEngines[id].initialized.resolved === false)
82
+ await new Promise<void>(resolve => { this.#stateEngine.sessionEngines[id].initialized.then(() => resolve()); });
83
+
84
+ await this.sessionEngines[id].close();
85
+
86
+ // remove from rendering engines (also directly assigned)
87
+ for (const r in this.#stateEngine.viewportEngines) {
88
+ const viewportEngineState = this.#stateEngine.viewportEngines[r];
89
+ if ((viewportEngineState.sessionSettingsMode === SESSION_SETTINGS_MODE.MANUAL && viewportEngineState.sessionSettingsId === id) ||
90
+ (viewportEngineState.sessionSettingsMode === SESSION_SETTINGS_MODE.FIRST && this.#firstSessionEngine === this.sessionEngines[id])) {
91
+ viewportEngineState.reset();
92
+ }
93
+ }
94
+
95
+ if (this.#firstSessionEngine === this.sessionEngines[id]) {
96
+ const engines = Object.values(this.sessionEngines).filter(s => s.id !== id);
97
+ this.#firstSessionEngine = engines.length === 0 ? undefined : engines[0];
98
+ if (this.#firstSessionEngine) {
99
+ Object.values(this.#stateEngine.sessionEngines).forEach(s => s.isFirstSession = false);
100
+ this.#stateEngine.sessionEngines[this.#firstSessionEngine.id].isFirstSession = true;
101
+
102
+ const promises: StatePromise<boolean>[] = [];
103
+
104
+ for (const r in this.#stateEngine.viewportEngines) {
105
+ const viewportEngineState = this.#stateEngine.viewportEngines[r];
106
+ if (this.#stateEngine.viewportEngines[r].settingsAssigned.resolved === false) {
107
+ if (viewportEngineState.sessionSettingsMode === SESSION_SETTINGS_MODE.FIRST) {
108
+ promises.push(this.#stateEngine.viewportEngines[r].settingsAssigned);
109
+ this.assignSettings(viewportEngineState.id, this.#firstSessionEngine?.id);
110
+ }
111
+ }
112
+ }
113
+
114
+ await Promise.all(promises);
115
+
116
+ if (this.updateSession) this.updateSession(this.sessionEngines);
117
+ }
118
+ }
119
+
120
+ this.#stateEngine.sessionEngines[id].settingsRegistered.reset();
121
+
122
+ (<unknown>this.sessionEngines[id]) = undefined;
123
+ delete this.sessionEngines[id];
124
+ delete this.#stateEngine.sessionEngines[id];
125
+
126
+ this.#logger.debug('CreationControlCenter.closeSessionEngine: Session closed.');
127
+ for (const r in this.#stateEngine.viewportEngines)
128
+ this.#stateEngine.viewportEngines[r].update('CreationControlCenter.closeSessionEngine');
129
+ if (this.updateSession) this.updateSession(this.sessionEngines);
130
+ this.#eventEngine.emitEvent(EVENTTYPE.SESSION.SESSION_CLOSED, { sessionId: id });
131
+ }
132
+
133
+ public async createSessionEngine(properties: SessionCreationDefinition): Promise<SessionEngine> {
134
+ const eventId = this.#uuidGenerator.create();
135
+ const sessionEngineId = properties.id || this.#uuidGenerator.create();
136
+ properties.id = sessionEngineId;
137
+ properties.loadOutputs = properties.allowOutputLoading === false ? false : properties.loadOutputs;
138
+
139
+ try {
140
+ const eventStart: ITaskEvent = { type: TASK_TYPE.SESSION_CREATION, id: eventId, progress: 0, status: 'Creating session', data: { sessionId: sessionEngineId } };
141
+ this.#eventEngine.emitEvent(EVENTTYPE.TASK.TASK_START, eventStart);
142
+
143
+ // check if the given id is valid
144
+ if (this.sessionEngines[sessionEngineId]) {
145
+ const eventClose: ITaskEvent = { type: TASK_TYPE.SESSION_CREATION, id: eventId, progress: 0.1, status: 'Closing session with same id', data: { sessionId: sessionEngineId } };
146
+ this.#eventEngine.emitEvent(EVENTTYPE.TASK.TASK_PROCESS, eventClose);
147
+
148
+ this.#logger.warn(`CreationControlCenter.createSession: Session with this id (${sessionEngineId}) already exists. Closing initial instance.`);
149
+ await this.closeSessionEngine(sessionEngineId);
150
+ }
151
+
152
+ // create the actual session
153
+ const sessionEngine = new SessionEngine({
154
+ id: sessionEngineId,
155
+ guid: properties.guid,
156
+ ticket: properties.ticket,
157
+ modelViewUrl: properties.modelViewUrl,
158
+ excludeViewports: properties.excludeViewports,
159
+ buildVersion: build_data.build_version,
160
+ buildDate: build_data.build_date,
161
+ jwtToken: properties.jwtToken,
162
+ allowOutputLoading: properties.allowOutputLoading === undefined ? true : properties.allowOutputLoading,
163
+ loadSdtf: properties.loadSdtf === undefined ? false : properties.loadSdtf,
164
+ });
165
+
166
+ this.#stateEngine.sessionEngines[sessionEngineId] = new SessionGlobalAccessObject(sessionEngine);
167
+
168
+ const eventInit: ITaskEvent = { type: TASK_TYPE.SESSION_CREATION, id: eventId, progress: 0.25, status: 'Initializing session.', data: { sessionId: sessionEngineId } };
169
+ this.#eventEngine.emitEvent(EVENTTYPE.TASK.TASK_PROCESS, eventInit);
170
+
171
+ await sessionEngine.init(properties.initialParameterValues);
172
+
173
+ if (properties.loadOutputs !== false) {
174
+ if (properties.waitForOutputs !== false) {
175
+ await sessionEngine.updateOutputs({
176
+ eventId,
177
+ type: TASK_TYPE.SESSION_CREATION,
178
+ progressRange: {
179
+ min: 0.25,
180
+ max: 0.9
181
+ },
182
+ data: { sessionId: sessionEngineId }
183
+ });
184
+ this.#stateEngine.sessionEngines[sessionEngineId].initialOutputsLoaded.resolve(true);
185
+ this.#eventEngine.emitEvent(EVENTTYPE.SESSION.SESSION_INITIAL_OUTPUTS_LOADED, { sessionId: sessionEngineId });
186
+ } else {
187
+ sessionEngine.updateOutputs({
188
+ eventId,
189
+ type: TASK_TYPE.SESSION_CREATION,
190
+ progressRange: {
191
+ min: 0.25,
192
+ max: 0.9
193
+ },
194
+ data: { sessionId: sessionEngineId }
195
+ }).then(() => {
196
+ this.#stateEngine.sessionEngines[sessionEngineId].initialOutputsLoaded.resolve(true);
197
+ this.#eventEngine.emitEvent(EVENTTYPE.SESSION.SESSION_INITIAL_OUTPUTS_LOADED, { sessionId: sessionEngineId });
198
+
199
+ for (const r in this.#stateEngine.viewportEngines)
200
+ this.#stateEngine.viewportEngines[r].update('CreationControlCenter.createSessionEngine.waitForOutputs=false');
201
+ });
202
+ }
203
+ }
204
+
205
+ // save the session
206
+ this.sessionEngines[sessionEngineId] = sessionEngine;
207
+
208
+ this.#stateEngine.sessionEngines[sessionEngineId].initialized.resolve(true);
209
+ this.#logger.debug(`CreationControlCenter.createSession: Session(${sessionEngine.id}) created.`);
210
+
211
+ if (!this.#firstSessionEngine) {
212
+ this.#firstSessionEngine = sessionEngine;
213
+ Object.values(this.#stateEngine.sessionEngines).forEach(s => s.isFirstSession = false);
214
+ this.#stateEngine.sessionEngines[this.#firstSessionEngine.id].isFirstSession = true;
215
+ }
216
+
217
+ const promises: StatePromise<boolean>[] = [];
218
+
219
+ for (const r in this.#stateEngine.viewportEngines) {
220
+ const viewportEngine = this.#stateEngine.viewportEngines[r];
221
+ if (this.#stateEngine.viewportEngines[r].settingsAssigned.resolved === false) {
222
+ if (viewportEngine.sessionSettingsMode === SESSION_SETTINGS_MODE.FIRST || (viewportEngine.sessionSettingsMode === SESSION_SETTINGS_MODE.MANUAL && viewportEngine.sessionSettingsId === sessionEngineId)) {
223
+ promises.push(this.#stateEngine.viewportEngines[r].settingsAssigned);
224
+ this.assignSettings(viewportEngine.id, sessionEngineId);
225
+ }
226
+ }
227
+ }
228
+
229
+ await Promise.all(promises);
230
+
231
+ for (const r in this.#stateEngine.viewportEngines)
232
+ this.#stateEngine.viewportEngines[r].update('CreationControlCenter.createSessionEngine');
233
+
234
+ if (this.updateSession) this.updateSession(this.sessionEngines);
235
+
236
+ const eventEnd: ITaskEvent = { type: TASK_TYPE.SESSION_CREATION, id: eventId, progress: 1, status: 'Session created', data: { sessionId: sessionEngineId } };
237
+ this.#eventEngine.emitEvent(EVENTTYPE.TASK.TASK_END, eventEnd);
238
+ this.#eventEngine.emitEvent(EVENTTYPE.SESSION.SESSION_CREATED, { sessionId: sessionEngineId });
239
+ return sessionEngine;
240
+ } catch (e) {
241
+ // special behavior, if this was the only session, display the error on the logo screen
242
+ if (isViewerError(e)) {
243
+ if ((this.sessionEngines[sessionEngineId] && Object.values(this.sessionEngines).length === 1) || (!this.sessionEngines[sessionEngineId] && Object.values(this.sessionEngines).length === 0)) {
244
+ for (const r in this.#stateEngine.viewportEngines)
245
+ this.#stateEngine.viewportEngines[r].displayErrorMessage((e as Error).message);
246
+ }
247
+ }
248
+
249
+ const eventCancel1: ITaskEvent = { type: TASK_TYPE.SESSION_CREATION, id: eventId, progress: 0.9, status: 'Session created failed, closing session', data: { sessionId: sessionEngineId } };
250
+ this.#eventEngine.emitEvent(EVENTTYPE.TASK.TASK_PROCESS, eventCancel1);
251
+
252
+ await this.closeSessionEngine(sessionEngineId);
253
+
254
+ const eventCancel2: ITaskEvent = { type: TASK_TYPE.SESSION_CREATION, id: eventId, progress: 1, status: 'Session created failed', data: { sessionId: sessionEngineId } };
255
+ this.#eventEngine.emitEvent(EVENTTYPE.TASK.TASK_CANCEL, eventCancel2);
256
+
257
+ throw e;
258
+ }
259
+ }
260
+
261
+ public resetSettings(sessionId: string, sections?: ISettingsSections): Promise<void> {
262
+ sections = sections || {};
263
+ this.sessionEngines[sessionId].resetSettings(sections);
264
+
265
+ const promises: Promise<unknown>[] = [];
266
+
267
+ if (sections.session && sections.session.parameter && sections.session.parameter.value)
268
+ promises.push(this.sessionEngines[sessionId].customize());
269
+
270
+ for (const r in this.#stateEngine.viewportEngines) {
271
+ const viewportEngine = this.#stateEngine.viewportEngines[r];
272
+ if ((viewportEngine.sessionSettingsMode === SESSION_SETTINGS_MODE.FIRST && this.#firstSessionEngine && sessionId === this.#firstSessionEngine.id) ||
273
+ (viewportEngine.sessionSettingsMode === SESSION_SETTINGS_MODE.MANUAL && sessionId === viewportEngine.sessionSettingsId)) {
274
+ this.#stateEngine.viewportEngines[r].settingsAssigned.reset();
275
+ promises.push(new Promise<void>(resolve => {
276
+ this.#stateEngine.viewportEngines[r].settingsAssigned.then(() => {
277
+ resolve();
278
+ });
279
+ }));
280
+
281
+ viewportEngine.applySettings(sections.viewport);
282
+ }
283
+ }
284
+ return new Promise(resolve => Promise.all(promises).then(() => resolve()));
285
+ }
286
+
287
+ public async saveSettings(sessionId: string, viewportId?: string): Promise<boolean> {
288
+ const session = this.sessionEngines[sessionId];
289
+ await session.saveUiProperties(false);
290
+
291
+ const settingsObject = this.createSettingsObject(sessionId, viewportId);
292
+ const response = await session.saveSettings(settingsObject);
293
+ if (response) {
294
+ this.#logger.debug(`Session(${sessionId}).saveSettings: Saved settings.`);
295
+ } else {
296
+ throw new ShapeDiverViewerSessionError(`Session(${sessionId}).saveSettings: Could not save settings.`);
297
+ }
298
+ return response;
299
+ }
300
+
301
+ // #endregion Public Methods (5)
302
+
303
+ // #region Private Methods (2)
304
+
305
+ private async assignSettings(viewportEngineId: string, sessionId: string, updateViewport: boolean = false) {
306
+ const viewportEngine = this.#stateEngine.viewportEngines[viewportEngineId];
307
+
308
+ if (this.#stateEngine.sessionEngines[sessionId].initialized.resolved === true) {
309
+ // immediate
310
+ viewportEngine.assignSettingsEngine(this.sessionEngines[sessionId].settingsEngine);
311
+ await viewportEngine.applySettings(undefined, undefined, updateViewport);
312
+ } else {
313
+ await new Promise<void>(resolve => {
314
+ this.#stateEngine.sessionEngines[sessionId].initialized.then(async () => {
315
+ viewportEngine.assignSettingsEngine(this.sessionEngines[sessionId].settingsEngine);
316
+ await viewportEngine.applySettings(undefined, undefined, updateViewport);
317
+ resolve();
318
+ });
319
+ });
320
+ }
321
+ }
322
+
323
+ private createSettingsObject(sessionId: string, viewportId?: string): ISettings {
324
+ const session = this.sessionEngines[sessionId];
325
+
326
+ session.settingsEngine.settings.build_version = build_data.build_version;
327
+ session.settingsEngine.settings.build_date = build_data.build_date;
328
+ session.settingsEngine.settings.settings_version = latestVersion;
329
+
330
+ let viewportEngine;
331
+ if (viewportId && this.#stateEngine.viewportEngines[viewportId]) {
332
+ viewportEngine = this.#stateEngine.viewportEngines[viewportId];
333
+ } else {
334
+ for (const r in this.#stateEngine.viewportEngines) {
335
+ const viewportEngineToCheck = this.#stateEngine.viewportEngines[r];
336
+ if ((viewportEngineToCheck.sessionSettingsMode === SESSION_SETTINGS_MODE.FIRST && this.#firstSessionEngine && sessionId === this.#firstSessionEngine.id) ||
337
+ (viewportEngineToCheck.sessionSettingsMode === SESSION_SETTINGS_MODE.MANUAL && sessionId === viewportEngineToCheck.sessionSettingsId)) {
338
+ viewportEngine = viewportEngineToCheck;
339
+ continue;
340
+ }
341
+ }
342
+ }
343
+
344
+ if (viewportEngine)
345
+ viewportEngine.saveSettings();
346
+
347
+ return session.settingsEngine.settings;
348
+ }
349
+
350
+ // #endregion Private Methods (2)
351
+ }
@@ -0,0 +1,72 @@
1
+ import { SessionEngine } from '@shapediver/viewer.session-engine.session-engine';
2
+ import { ISessionGlobalAccessObjectDefinition, SettingsEngine, StatePromise } from '@shapediver/viewer.shared.services';
3
+ import { ShapeDiverRequestGltfUploadQueryConversion, ShapeDiverResponseDto } from '@shapediver/sdk.geometry-api-sdk-v2';
4
+
5
+ export class SessionGlobalAccessObject implements ISessionGlobalAccessObjectDefinition {
6
+ // #region Properties (5)
7
+
8
+ readonly #sessionEngine: SessionEngine;
9
+
10
+ #initialOutputsLoaded: StatePromise<boolean> = new StatePromise();
11
+ #initialized: StatePromise<boolean> = new StatePromise();
12
+ #isFirstSession: boolean = false;
13
+ #settingsRegistered: StatePromise<boolean> = new StatePromise();
14
+
15
+ // #endregion Properties (5)
16
+
17
+ // #region Constructors (1)
18
+
19
+ constructor(sessionEngine: SessionEngine) {
20
+ this.#sessionEngine = sessionEngine;
21
+ }
22
+
23
+ // #endregion Constructors (1)
24
+
25
+ // #region Public Getters And Setters (9)
26
+
27
+ public get canUploadGLTF(): boolean {
28
+ return this.#sessionEngine.canUploadGLTF;
29
+ }
30
+
31
+ public get id(): string {
32
+ return this.#sessionEngine.id;
33
+ }
34
+
35
+ public get initialOutputsLoaded(): StatePromise<boolean> {
36
+ return this.#initialOutputsLoaded;
37
+ }
38
+
39
+ public get initialized(): StatePromise<boolean> {
40
+ return this.#initialized;
41
+ }
42
+
43
+ public get isFirstSession(): boolean {
44
+ return this.#isFirstSession;
45
+ }
46
+
47
+ public set isFirstSession(value: boolean) {
48
+ this.#isFirstSession = value;
49
+ }
50
+
51
+ public get modelViewUrl(): string {
52
+ return this.#sessionEngine.modelViewUrl;
53
+ }
54
+
55
+ public get settingsEngine(): SettingsEngine {
56
+ return this.#sessionEngine.settingsEngine;
57
+ }
58
+
59
+ public get settingsRegistered(): StatePromise<boolean> {
60
+ return this.#settingsRegistered;
61
+ }
62
+
63
+ // #endregion Public Getters And Setters (9)
64
+
65
+ // #region Public Methods (1)
66
+
67
+ public uploadGLTF(gltf: Blob, name: ShapeDiverRequestGltfUploadQueryConversion | undefined): Promise<ShapeDiverResponseDto> {
68
+ return this.#sessionEngine.uploadGLTF(gltf, name);
69
+ }
70
+
71
+ // #endregion Public Methods (1)
72
+ }
package/src/index.ts ADDED
@@ -0,0 +1,7 @@
1
+ import { CreationControlCenterSession } from './implementation/CreationControlCenterSession';
2
+ import { ICreationControlCenterSession, SessionCreationDefinition } from './interfaces/ICreationControlCenterSession';
3
+
4
+ export {
5
+ ICreationControlCenterSession, CreationControlCenterSession,
6
+ SessionCreationDefinition
7
+ };
@@ -0,0 +1,55 @@
1
+ import { ISettingsSections } from '@shapediver/viewer.shared.types';
2
+ import { SessionEngine } from '@shapediver/viewer.session-engine.session-engine';
3
+ import { ShapeDiverResponseDto } from '@shapediver/sdk.geometry-api-sdk-v2';
4
+
5
+ // #region Type aliases (1)
6
+
7
+ export type SessionCreationDefinition = {
8
+ /** The ticket for direct embedding of the model represented by the session. This identifies the model on the Geometry Backend. If no ticket was provided, a {@link guid} has to be provided instead. */
9
+ ticket?: string,
10
+ /** The geometry backend model id (guid). This identifies the model on the Geometry Backend. A {@link jwtToken} is needed for authentication. If no guid was provided, a {@link ticket} has to be provided instead. */
11
+ guid?: string,
12
+ /** The modelViewUrl of the {@link https://help.shapediver.com/doc/Geometry-Backend.1863942173.html|ShapeDiver Geometry Backend} hosting the model. */
13
+ modelViewUrl: string,
14
+ /** The JWT used for authorizing API calls to the Geometry Backend. */
15
+ jwtToken?: string,
16
+ /** The unique identifier of the session that was specified or automatically chosen on creation of the session. */
17
+ id?: string,
18
+ /** Option to wait for the outputs to be loaded, or return immediately after creation of the session. (default: true) */
19
+ waitForOutputs?: boolean,
20
+ /** Option to allow the outputs to be loaded, or to prevent them from being loaded. (default: true) */
21
+ allowOutputLoading?: boolean,
22
+ /** Option to load the outputs, or not load them until the first call of {@link ISession.customize}. (default: true) */
23
+ loadOutputs?: boolean,
24
+ /** Option to load the SDTF data. The data is not loaded by default as it can be quite large. (default: false) */
25
+ loadSdtf?: boolean,
26
+ /** Option to exclude some viewports from the start. Can be accessed via {@link ISession.excludeViewports}. */
27
+ excludeViewports?: string[],
28
+ /** The initial set of parameter values to use. Map from parameter id to parameter value. The default value will be used for any parameter not specified. */
29
+ initialParameterValues?: { [key: string]: string }
30
+ };
31
+
32
+ // #endregion Type aliases (1)
33
+
34
+ // #region Interfaces (1)
35
+
36
+ export interface ICreationControlCenterSession {
37
+ // #region Properties (2)
38
+
39
+ sessionEngines: { [key: string]: SessionEngine; };
40
+ updateSessions?: (sessionEngines: { [key: string]: SessionEngine; }) => void;
41
+
42
+ // #endregion Properties (2)
43
+
44
+ // #region Public Methods (5)
45
+
46
+ applySettings(sessionId: string, response: ShapeDiverResponseDto, sections?: ISettingsSections): Promise<void>;
47
+ closeSessionEngine(id: string): Promise<void>;
48
+ createSessionEngine(properties: SessionCreationDefinition): Promise<SessionEngine>;
49
+ resetSettings(sessionId: string, sections?: ISettingsSections): Promise<void>;
50
+ saveSettings(sessionId: string, viewportId?: string): Promise<boolean>;
51
+
52
+ // #endregion Public Methods (5)
53
+ }
54
+
55
+ // #endregion Interfaces (1)
package/tsconfig.json ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "include": [
4
+ "./**/*.ts"
5
+ ],
6
+ "compilerOptions": {
7
+ "rootDir": "src",
8
+ "outDir": "dist"
9
+ },
10
+ "exclude": [
11
+ "__tests__",
12
+ "node_modules",
13
+ "dist",
14
+ "dist-dev",
15
+ "dist-prod"
16
+ ]
17
+ }