@threekit-tools/treble 0.0.49 → 0.0.53

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 (63) hide show
  1. package/dist/Treble/Snapshots.js +0 -26
  2. package/dist/Treble/Treble.d.ts +7 -2
  3. package/dist/Treble/Treble.js +20 -3
  4. package/dist/Treble/Wishlist.d.ts +3 -2
  5. package/dist/Treble/Wishlist.js +12 -12
  6. package/dist/api/catalog.d.ts +1 -0
  7. package/dist/api/catalog.js +86 -0
  8. package/dist/api/index.d.ts +2 -0
  9. package/dist/api/index.js +2 -0
  10. package/dist/components/Accordion/index.d.ts +1 -1
  11. package/dist/components/FlatForm/index.js +9 -3
  12. package/dist/components/ThreekitProvider/index.d.ts +3 -1
  13. package/dist/components/ThreekitProvider/index.js +3 -3
  14. package/dist/components/Upload/index.d.ts +12 -0
  15. package/dist/components/Upload/index.js +114 -0
  16. package/dist/components/Upload/upload.styles.d.ts +6 -0
  17. package/dist/components/Upload/upload.styles.js +15 -0
  18. package/dist/components/containers/formInputContainer.d.ts +8 -16
  19. package/dist/components/formComponents.d.ts +2 -0
  20. package/dist/components/formComponents.js +5 -1
  21. package/dist/constants.d.ts +4 -0
  22. package/dist/constants.js +5 -1
  23. package/dist/hooks/useArrayAttribute/index.d.ts +2 -0
  24. package/dist/hooks/useArrayAttribute/index.js +184 -0
  25. package/dist/hooks/useAttribute/index.d.ts +3 -3
  26. package/dist/hooks/useAttribute/index.js +67 -8
  27. package/dist/hooks/useConfigurator/index.js +3 -3
  28. package/dist/hooks/useMetadata/index.js +2 -2
  29. package/dist/hooks/useName/index.js +2 -2
  30. package/dist/hooks/usePlayerLoadingStatus/index.js +2 -2
  31. package/dist/hooks/usePlayerPortal/index.js +2 -2
  32. package/dist/hooks/usePrice/index.d.ts +1 -1
  33. package/dist/hooks/usePrice/index.js +2 -2
  34. package/dist/hooks/useShare/index.js +2 -2
  35. package/dist/hooks/useSnapshot/index.js +2 -2
  36. package/dist/hooks/useThreekitInitStatus/index.js +2 -2
  37. package/dist/hooks/useWishlist/index.d.ts +1 -1
  38. package/dist/hooks/useWishlist/index.js +8 -7
  39. package/dist/http/catalog.d.ts +53 -2
  40. package/dist/http/catalog.js +3 -3
  41. package/dist/http/index.d.ts +2 -0
  42. package/dist/http/index.js +2 -0
  43. package/dist/index.d.ts +2 -1
  44. package/dist/index.js +3 -1
  45. package/dist/store/attributes.d.ts +20 -0
  46. package/dist/store/attributes.js +139 -0
  47. package/dist/store/index.d.ts +67 -7
  48. package/dist/store/index.js +36 -4
  49. package/dist/store/price.d.ts +33 -0
  50. package/dist/store/price.js +116 -0
  51. package/dist/store/product.d.ts +22 -0
  52. package/dist/store/product.js +65 -0
  53. package/dist/store/translations.d.ts +22 -0
  54. package/dist/store/translations.js +100 -0
  55. package/dist/store/treble.d.ts +41 -0
  56. package/dist/store/treble.js +259 -0
  57. package/dist/store/wishlist.d.ts +23 -0
  58. package/dist/store/wishlist.js +114 -0
  59. package/dist/threekit.d.ts +18 -3
  60. package/dist/utils.d.ts +4 -3
  61. package/package.json +1 -1
  62. package/dist/store/threekit.d.ts +0 -68
  63. package/dist/store/threekit.js +0 -453
@@ -0,0 +1,100 @@
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 __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.getLanguageOptions = exports.getLanguage = exports.initTranslations = exports.setLanguage = exports.setTranslations = void 0;
43
+ var toolkit_1 = require("@reduxjs/toolkit");
44
+ var api_1 = __importDefault(require("../api"));
45
+ /*****************************************************
46
+ * Actions
47
+ ****************************************************/
48
+ // Actions to be used only internally
49
+ exports.setTranslations = (0, toolkit_1.createAction)('treble/translations/set-translations');
50
+ exports.setLanguage = (0, toolkit_1.createAction)('treble/translations/set-language');
51
+ var initTranslations = function (language) { return function (dispatch) { return __awaiter(void 0, void 0, void 0, function () {
52
+ var translations;
53
+ return __generator(this, function (_a) {
54
+ switch (_a.label) {
55
+ case 0: return [4 /*yield*/, api_1.default.products.fetchTranslations()];
56
+ case 1:
57
+ translations = _a.sent();
58
+ dispatch((0, exports.setTranslations)(translations));
59
+ if (language)
60
+ dispatch((0, exports.setLanguage)(language));
61
+ return [2 /*return*/];
62
+ }
63
+ });
64
+ }); }; };
65
+ exports.initTranslations = initTranslations;
66
+ /*****************************************************
67
+ * State
68
+ ****************************************************/
69
+ var initialState = {
70
+ // Selected language
71
+ translations: undefined,
72
+ language: undefined,
73
+ };
74
+ var reducer = (0, toolkit_1.createSlice)({
75
+ name: 'translations',
76
+ initialState: initialState,
77
+ extraReducers: function (builder) {
78
+ builder.addCase(exports.setTranslations, function (state, action) {
79
+ state.translations = action.payload;
80
+ });
81
+ builder.addCase(exports.setLanguage, function (state, action) {
82
+ state.language = action.payload;
83
+ });
84
+ },
85
+ reducers: {},
86
+ }).reducer;
87
+ /*****************************************************
88
+ * Standard Selectors
89
+ ****************************************************/
90
+ var getLanguage = function (state) {
91
+ return state.translations.language;
92
+ };
93
+ exports.getLanguage = getLanguage;
94
+ var getLanguageOptions = function (state) {
95
+ if (!state.treble.isThreekitInitialized || !state.translations.translations)
96
+ return [];
97
+ return Object.keys(Object.values(state.translations.translations)[0]);
98
+ };
99
+ exports.getLanguageOptions = getLanguageOptions;
100
+ exports.default = reducer;
@@ -0,0 +1,41 @@
1
+ import { RootState, ThreekitDispatch } from './index';
2
+ import { IProject, IPlayerConfig, IThreekitDisplayAttribute, ISetConfiguration } from '../threekit';
3
+ /*****************************************************
4
+ * Types and Interfaces
5
+ ****************************************************/
6
+ export interface ILaunchConfig {
7
+ threekitEnv: string;
8
+ locale: string;
9
+ project: IProject;
10
+ playerConfig: IPlayerConfig;
11
+ eventHandlers: EventHandlers;
12
+ }
13
+ export interface TrebleState {
14
+ isPlayerLoading: boolean;
15
+ isThreekitInitialized: boolean;
16
+ playerElId: undefined | string;
17
+ }
18
+ interface EventHandlers {
19
+ postConfigurationChange?: (updatedAttributes: Array<IThreekitDisplayAttribute>, configurationChange: ISetConfiguration, previousConfiguration: Array<IThreekitDisplayAttribute>) => void | Promise<void>;
20
+ }
21
+ /*****************************************************
22
+ * Actions
23
+ ****************************************************/
24
+ export declare const setThreekitInitialized: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<undefined, string>;
25
+ export declare const setPlayerLoading: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, string>;
26
+ export declare const setPlayerElement: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, string>;
27
+ /*****************************************************
28
+ * Slice
29
+ ****************************************************/
30
+ declare const reducer: import("redux").Reducer<TrebleState, import("redux").AnyAction>;
31
+ /*****************************************************
32
+ * Standard Selectors
33
+ ****************************************************/
34
+ export declare const isThreekitInitialized: (state: RootState) => boolean;
35
+ export declare const isPlayerLoading: (state: RootState) => boolean;
36
+ export declare const getPlayerElementId: (state: RootState) => undefined | string;
37
+ /*****************************************************
38
+ * Complex Actions
39
+ ****************************************************/
40
+ export declare const launch: (launchConfig?: Partial<ILaunchConfig> | undefined) => (dispatch: ThreekitDispatch) => Promise<void>;
41
+ export default reducer;
@@ -0,0 +1,259 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (_) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __importDefault = (this && this.__importDefault) || function (mod) {
50
+ return (mod && mod.__esModule) ? mod : { "default": mod };
51
+ };
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.launch = exports.getPlayerElementId = exports.isPlayerLoading = exports.isThreekitInitialized = exports.setPlayerElement = exports.setPlayerLoading = exports.setThreekitInitialized = void 0;
54
+ var connection_1 = __importDefault(require("../connection"));
55
+ var toolkit_1 = require("@reduxjs/toolkit");
56
+ var api_1 = __importDefault(require("../api"));
57
+ var utils_1 = require("../utils");
58
+ var constants_1 = require("../constants");
59
+ var Treble_1 = __importDefault(require("../Treble"));
60
+ var attributes_1 = require("./attributes");
61
+ var price_1 = require("./price");
62
+ var wishlist_1 = require("./wishlist");
63
+ var translations_1 = require("./translations");
64
+ var product_1 = require("./product");
65
+ /*****************************************************
66
+ * Helper Functions
67
+ ****************************************************/
68
+ var createPlayerLoaderEl = function (elementId) {
69
+ /**
70
+ * By default the player is loaded into a player-loader div that
71
+ * is placed outside the user's view. This is done because in
72
+ * React the Threekit Initialization may happen before the
73
+ * component with the player HTML element has loaded which would
74
+ * otherwise throw an error.
75
+ */
76
+ var playerElement = document.getElementById(elementId);
77
+ if (playerElement)
78
+ return playerElement;
79
+ playerElement = document.createElement('div');
80
+ playerElement.setAttribute('id', elementId);
81
+ playerElement.style.height = '100%';
82
+ var playerLoader = document.createElement('div');
83
+ playerLoader.setAttribute('id', constants_1.TK_PLAYER_LOADER_DIV);
84
+ playerLoader.appendChild(playerElement);
85
+ playerLoader.style.opacity = '0';
86
+ playerLoader.style.height = '1px';
87
+ playerLoader.style.position = 'fixed';
88
+ playerLoader.style.top = '-100%';
89
+ document.body.appendChild(playerLoader);
90
+ return playerElement;
91
+ };
92
+ /*****************************************************
93
+ * Constants and Event Handlers
94
+ ****************************************************/
95
+ var EVENTS = {};
96
+ /*****************************************************
97
+ * State
98
+ ****************************************************/
99
+ var initialState = {
100
+ isThreekitInitialized: false,
101
+ isPlayerLoading: false,
102
+ playerElId: undefined,
103
+ };
104
+ /*****************************************************
105
+ * Actions
106
+ ****************************************************/
107
+ exports.setThreekitInitialized = (0, toolkit_1.createAction)('treble/set-threekit-initialized');
108
+ exports.setPlayerLoading = (0, toolkit_1.createAction)('treble/set-player-loading');
109
+ exports.setPlayerElement = (0, toolkit_1.createAction)('treble/set-player-element');
110
+ /*****************************************************
111
+ * Slice
112
+ ****************************************************/
113
+ var reducer = (0, toolkit_1.createSlice)({
114
+ name: 'treble',
115
+ initialState: initialState,
116
+ reducers: {},
117
+ extraReducers: function (builder) {
118
+ builder.addCase(exports.setThreekitInitialized, function (state, _) {
119
+ state.isThreekitInitialized = true;
120
+ });
121
+ builder.addCase(exports.setPlayerLoading, function (state, action) {
122
+ state.isPlayerLoading = action.payload;
123
+ });
124
+ builder.addCase(exports.setPlayerElement, function (state, action) {
125
+ state.playerElId = action.payload;
126
+ });
127
+ },
128
+ }).reducer;
129
+ /*****************************************************
130
+ * Standard Selectors
131
+ ****************************************************/
132
+ // Loading Trackers
133
+ var isThreekitInitialized = function (state) {
134
+ return state.treble.isThreekitInitialized;
135
+ };
136
+ exports.isThreekitInitialized = isThreekitInitialized;
137
+ var isPlayerLoading = function (state) {
138
+ return state.treble.isPlayerLoading;
139
+ };
140
+ exports.isPlayerLoading = isPlayerLoading;
141
+ // Player's HTML element
142
+ var getPlayerElementId = function (state) {
143
+ return state.treble.playerElId;
144
+ };
145
+ exports.getPlayerElementId = getPlayerElementId;
146
+ /*****************************************************
147
+ * Complex Actions
148
+ ****************************************************/
149
+ var launch = function (launchConfig) {
150
+ return function (dispatch) { return __awaiter(void 0, void 0, void 0, function () {
151
+ var config, credentials, products, threekitEnv, playerConfig, envCredentials, product, threekitDomainRaw, orgId, authToken, initialConfigurationRaw, assetId, stageId, configurationId, el, threekitDomain, initialConfiguration, updatedAssetId, params, configId, configuration, player, configurator;
152
+ var _a, _b, _c, _d, _e;
153
+ return __generator(this, function (_f) {
154
+ switch (_f.label) {
155
+ case 0:
156
+ if (window.threekit)
157
+ return [2 /*return*/];
158
+ config = (0, utils_1.loadTrebleConfig)();
159
+ credentials = Object.assign({}, ((_a = config.project) === null || _a === void 0 ? void 0 : _a.credentials) || {}, ((_b = launchConfig === null || launchConfig === void 0 ? void 0 : launchConfig.project) === null || _b === void 0 ? void 0 : _b.credentials) || {});
160
+ products = Object.assign({}, ((_c = config.project) === null || _c === void 0 ? void 0 : _c.products) || {}, ((_d = launchConfig === null || launchConfig === void 0 ? void 0 : launchConfig.project) === null || _d === void 0 ? void 0 : _d.products) || {});
161
+ if (!Object.keys(credentials).length || !Object.keys(products).length)
162
+ return [2 /*return*/, console.error('Missing credentials')];
163
+ threekitEnv = (launchConfig === null || launchConfig === void 0 ? void 0 : launchConfig.threekitEnv) || process.env.THREEKIT_ENV || 'preview';
164
+ playerConfig = Object.assign({}, constants_1.DEFAULT_PLAYER_CONFIG, config.player, launchConfig === null || launchConfig === void 0 ? void 0 : launchConfig.playerConfig);
165
+ envCredentials = credentials[threekitEnv];
166
+ product = products[threekitEnv];
167
+ threekitDomainRaw = envCredentials.threekitDomain || "".concat(threekitEnv, ".threekit.com");
168
+ orgId = envCredentials.orgId, authToken = envCredentials.publicToken;
169
+ if (typeof product === 'string') {
170
+ if ((0, utils_1.isUuid)(product))
171
+ assetId = product;
172
+ else
173
+ configurationId = product;
174
+ }
175
+ else {
176
+ stageId = product.stageId;
177
+ if (product.configurationId)
178
+ configurationId = product.configurationId;
179
+ else if ((0, utils_1.isUuid)(product.assetId))
180
+ assetId = product.assetId;
181
+ else
182
+ configurationId = product.assetId;
183
+ }
184
+ if (playerConfig.elementId) {
185
+ el = document.getElementById(playerConfig.elementId);
186
+ if (el)
187
+ dispatch((0, exports.setPlayerElement)(playerConfig.elementId));
188
+ }
189
+ else {
190
+ el = createPlayerLoaderEl(constants_1.TK_PLAYER_ROOT_DIV);
191
+ dispatch((0, exports.setPlayerElement)(constants_1.TK_PLAYER_ROOT_DIV));
192
+ }
193
+ // Connection
194
+ connection_1.default.connect({
195
+ authToken: authToken,
196
+ orgId: orgId,
197
+ assetId: assetId,
198
+ threekitDomain: threekitDomainRaw,
199
+ });
200
+ threekitDomain = connection_1.default.getConnection().threekitDomain;
201
+ initialConfiguration = __assign({}, initialConfigurationRaw);
202
+ updatedAssetId = assetId;
203
+ params = (0, utils_1.getParams)();
204
+ configId = ((_e = params[constants_1.TK_SAVED_CONFIG_PARAM_KEY]) === null || _e === void 0 ? void 0 : _e.length)
205
+ ? params[constants_1.TK_SAVED_CONFIG_PARAM_KEY]
206
+ : configurationId;
207
+ if (!configId) return [3 /*break*/, 2];
208
+ return [4 /*yield*/, api_1.default.configurations.fetch(configId)];
209
+ case 1:
210
+ configuration = _f.sent();
211
+ if (configuration) {
212
+ initialConfiguration = Object.assign({}, initialConfigurationRaw, configuration.data.variant);
213
+ connection_1.default.connect({ assetId: configuration.data.productId });
214
+ updatedAssetId = configuration.data.productId;
215
+ }
216
+ _f.label = 2;
217
+ case 2:
218
+ if (!updatedAssetId)
219
+ return [2 /*return*/, console.error('missing assetId')];
220
+ // We create the threekit script
221
+ return [4 /*yield*/, (0, utils_1.createThreekitScriptEl)(threekitDomain)];
222
+ case 3:
223
+ // We create the threekit script
224
+ _f.sent();
225
+ return [4 /*yield*/, window.threekitPlayer(__assign(__assign({ el: el,
226
+ // Variables to sort out
227
+ authToken: authToken, stageId: stageId, assetId: updatedAssetId }, playerConfig), { initialConfiguration: initialConfiguration }))];
228
+ case 4:
229
+ player = _f.sent();
230
+ return [4 /*yield*/, player.getConfigurator()];
231
+ case 5:
232
+ configurator = _f.sent();
233
+ window.threekit = {
234
+ player: player,
235
+ configurator: configurator,
236
+ treble: new Treble_1.default({
237
+ player: player,
238
+ orgId: orgId,
239
+ initialConfiguration: configurator.getConfiguration(),
240
+ }),
241
+ };
242
+ dispatch((0, exports.setThreekitInitialized)());
243
+ dispatch((0, exports.setPlayerLoading)(false));
244
+ window.threekit.player.on('setConfiguration', function () {
245
+ dispatch((0, attributes_1.setAttributes)(window.threekit.configurator.getDisplayAttributes()));
246
+ dispatch((0, price_1.updatePrice)());
247
+ });
248
+ EVENTS = Object.assign(EVENTS, launchConfig === null || launchConfig === void 0 ? void 0 : launchConfig.eventHandlers);
249
+ dispatch((0, translations_1.initTranslations)(launchConfig === null || launchConfig === void 0 ? void 0 : launchConfig.locale));
250
+ dispatch((0, price_1.initPrice)());
251
+ dispatch((0, product_1.initProduct)());
252
+ dispatch((0, wishlist_1.refreshWishlist)());
253
+ return [2 /*return*/];
254
+ }
255
+ });
256
+ }); };
257
+ };
258
+ exports.launch = launch;
259
+ exports.default = reducer;
@@ -0,0 +1,23 @@
1
+ import { RootState, ThreekitDispatch } from './index';
2
+ import { ISaveConfigurationConfig, WishlistArray } from '../Treble';
3
+ /*****************************************************
4
+ * Types and Interfaces
5
+ ****************************************************/
6
+ export declare type WishlistState = WishlistArray;
7
+ /*****************************************************
8
+ * Standard Selectors
9
+ ****************************************************/
10
+ export declare const refreshWishlist: import("@reduxjs/toolkit").AsyncThunk<import("../http/configurations").IConfigurationResponse[], void, {}>;
11
+ export declare const addToWishlist: import("@reduxjs/toolkit").AsyncThunk<import("../http/configurations").IConfigurationResponse[], ISaveConfigurationConfig, {}>;
12
+ export declare const clearWishlist: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[], import("../http/configurations").IConfigurationResponse[], "treble/wishlist/clear", never, never>;
13
+ export declare const removeFromWishlist: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[idx: number], import("../http/configurations").IConfigurationResponse[], "treble/wishlist/remove-item", never, never>;
14
+ /*****************************************************
15
+ * Slice
16
+ ****************************************************/
17
+ declare const reducer: import("redux").Reducer<WishlistArray, import("redux").AnyAction>;
18
+ /*****************************************************
19
+ * Standard Selectors
20
+ ****************************************************/
21
+ export declare const getWishlist: (state: RootState) => WishlistArray;
22
+ export declare const resumeFromWishlist: (idx: number) => (_: ThreekitDispatch, getState: () => RootState) => void;
23
+ export default reducer;
@@ -0,0 +1,114 @@
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 __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.resumeFromWishlist = exports.getWishlist = exports.removeFromWishlist = exports.clearWishlist = exports.addToWishlist = exports.refreshWishlist = void 0;
40
+ var toolkit_1 = require("@reduxjs/toolkit");
41
+ /*****************************************************
42
+ * State
43
+ ****************************************************/
44
+ var initialState = [];
45
+ /*****************************************************
46
+ * Standard Selectors
47
+ ****************************************************/
48
+ exports.refreshWishlist = (0, toolkit_1.createAsyncThunk)('treble/wishlist/refresh-data', function () { return __awaiter(void 0, void 0, void 0, function () {
49
+ var wishlistData;
50
+ return __generator(this, function (_a) {
51
+ switch (_a.label) {
52
+ case 0: return [4 /*yield*/, window.threekit.treble.wishlist.getWishlist()];
53
+ case 1:
54
+ wishlistData = _a.sent();
55
+ return [2 /*return*/, wishlistData];
56
+ }
57
+ });
58
+ }); });
59
+ exports.addToWishlist = (0, toolkit_1.createAsyncThunk)('treble/wishlist/add-item', function (config) { return __awaiter(void 0, void 0, void 0, function () {
60
+ var wishlistData;
61
+ return __generator(this, function (_a) {
62
+ switch (_a.label) {
63
+ case 0: return [4 /*yield*/, window.threekit.treble.wishlist.addItem(config)];
64
+ case 1:
65
+ wishlistData = _a.sent();
66
+ return [2 /*return*/, wishlistData];
67
+ }
68
+ });
69
+ }); });
70
+ exports.clearWishlist = (0, toolkit_1.createAction)('treble/wishlist/clear', function () {
71
+ var wishlistData = window.threekit.treble.wishlist.clearWishlist();
72
+ return { payload: wishlistData };
73
+ });
74
+ exports.removeFromWishlist = (0, toolkit_1.createAction)('treble/wishlist/remove-item', function (idx) {
75
+ var wishlistData = window.threekit.treble.wishlist.removeItemByIdx(idx);
76
+ return { payload: wishlistData };
77
+ });
78
+ /*****************************************************
79
+ * Slice
80
+ ****************************************************/
81
+ var reducer = (0, toolkit_1.createSlice)({
82
+ name: 'wishlist',
83
+ initialState: initialState,
84
+ reducers: {},
85
+ extraReducers: function (builder) {
86
+ builder.addCase(exports.refreshWishlist.fulfilled, function (_, action) {
87
+ return action.payload;
88
+ });
89
+ builder.addCase(exports.addToWishlist.fulfilled, function (_, action) {
90
+ return action.payload;
91
+ });
92
+ builder.addCase(exports.removeFromWishlist, function (_, action) {
93
+ return action.payload;
94
+ });
95
+ builder.addCase(exports.clearWishlist, function (_, action) {
96
+ return action.payload;
97
+ });
98
+ },
99
+ }).reducer;
100
+ /*****************************************************
101
+ * Standard Selectors
102
+ ****************************************************/
103
+ // Wishlist
104
+ var getWishlist = function (state) { return state.wishlist; };
105
+ exports.getWishlist = getWishlist;
106
+ var resumeFromWishlist = function (idx) { return function (_, getState) {
107
+ var wishlist = getState().wishlist;
108
+ var savedConfiguration = wishlist[idx];
109
+ if (!savedConfiguration)
110
+ return;
111
+ window.threekit.configurator.setConfiguration(savedConfiguration.variant);
112
+ }; };
113
+ exports.resumeFromWishlist = resumeFromWishlist;
114
+ exports.default = reducer;
@@ -3,7 +3,8 @@ import Treble from './Treble';
3
3
  declare type SCENE_PHASES = 'LOADED' | 'PRELOADED' | 'RENDERED';
4
4
  declare type PRIVATE_APIS = 'scene' | 'player';
5
5
  export declare type DISPLAY_OPTIONS = 'webgl' | 'image';
6
- declare type IAttributeTypes = 'String' | 'Asset' | 'Color' | 'Number';
6
+ export declare type IAttributeTypes = 'String' | 'Asset' | 'Color' | 'Number';
7
+ export declare type AssetType = 'upload' | 'item';
7
8
  export declare type IMetadata = Record<string, string | number | null>;
8
9
  /***************************************************
9
10
  * Scene
@@ -83,7 +84,7 @@ export interface IDisplayAttributeAssetValue extends IConfigurationAssetValue {
83
84
  label: string;
84
85
  }
85
86
  export interface IAttributeAssetBase<V> extends IAttributeBase<'Asset', IConfigurationAsset> {
86
- assetType: string;
87
+ assetType: AssetType;
87
88
  blacklist: [];
88
89
  defaultValue: IConfigurationAsset;
89
90
  hiddenValues?: Array<string>;
@@ -213,11 +214,25 @@ export interface ThreekitInitConfig {
213
214
  showShare?: boolean;
214
215
  showLoadingThumbnail?: boolean;
215
216
  showLoadingProgress?: boolean;
216
- onLoadingProgress?: boolean;
217
+ onLoadingProgress?: (progress: number) => void;
217
218
  locale?: string;
218
219
  allowMobileVerticalOrbit?: boolean;
219
220
  publishStage?: string;
220
221
  display?: DISPLAY_OPTIONS;
222
+ classnames?: {
223
+ loading?: string;
224
+ mobile?: string;
225
+ share?: string | {
226
+ button: string;
227
+ popup: string;
228
+ };
229
+ fullscreen?: string;
230
+ ar?: string | {
231
+ button: string;
232
+ popup: string;
233
+ };
234
+ help?: string;
235
+ };
221
236
  }
222
237
  /***************************************************
223
238
  * Treble Declarations
package/dist/utils.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { ITranslationMap } from './api/products';
2
2
  import { IThreekitCamera, IConfigurationColor, ICoordinates, IQuaternion, IThreekitDisplayAttribute } from './threekit';
3
- import { ITrebleConfig } from './threekit';
3
+ import { ITrebleConfig, IAttributeTypes } from './threekit';
4
+ import { RawAttributeValue } from './hooks/useAttribute';
4
5
  interface ICameraPosition {
5
6
  position: ICoordinates;
6
7
  quaternion: IQuaternion;
@@ -53,8 +54,8 @@ export declare const metadataValueToObject: (data: string) => Record<string, str
53
54
  */
54
55
  export declare const createThreekitScriptEl: (threekitDomain: string) => Promise<void>;
55
56
  export declare const translateAttribute: (attributes: Array<IThreekitDisplayAttribute>, translations?: ITranslationMap | undefined, language?: string | undefined) => IThreekitDisplayAttribute;
56
- export declare const selectionToConfiguration: (value: string | number | boolean | IConfigurationColor, attributeType: string) => string | number | boolean | IConfigurationColor | {
57
- assetId: string | number | boolean | IConfigurationColor;
57
+ export declare const selectionToConfiguration: (value: RawAttributeValue, attributeType: IAttributeTypes) => string | number | boolean | File | IConfigurationColor | {
58
+ assetId: RawAttributeValue;
58
59
  };
59
60
  export declare const filterFormAttributes: (attributes: Record<string, IThreekitDisplayAttribute>, attributeComponentProps: IAttributesComponentProps, includeReservedAttributes: boolean) => IThreekitDisplayAttribute[];
60
61
  export declare const isUuid: (str?: string | undefined) => boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@threekit-tools/treble",
3
- "version": "0.0.49",
3
+ "version": "0.0.53",
4
4
  "author": "Amaan Saeed",
5
5
  "license": "MIT",
6
6
  "files": [