@threekit-tools/treble 0.0.38 → 0.0.42

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/README.md CHANGED
@@ -261,11 +261,10 @@ The `<Player />` component renders the **Threekit Player**.
261
261
 
262
262
  ```jsx
263
263
  import { ThreekitProvider, Player } from '@threekit-tools/treble';
264
- import threekitConfig from './threekit.config.js';
265
264
 
266
265
  const ThreekitApp = () => {
267
266
  return (
268
- <ThreekitProvider {...threekitConfig}>
267
+ <ThreekitProvider>
269
268
  <Player />
270
269
  </ThreekitProvider>
271
270
  );
@@ -278,7 +277,6 @@ The Player Component also comes with **widget containers** that can be used to p
278
277
 
279
278
  ```jsx
280
279
  import { ThreekitProvider, Player } from '@threekit-tools/treble';
281
- import threekitConfig from './threekit.config.js';
282
280
 
283
281
  // We can separate out the widget container component
284
282
  // or use the component directly from the Player component
@@ -311,7 +309,6 @@ The `<FlatForm>` component is used to render out the configurator for the initia
311
309
 
312
310
  ```jsx
313
311
  import { ThreekitProvider, FlatForm } from '@threekit-tools/treble';
314
- import threekitConfig from './threekit.config.js';
315
312
 
316
313
  const App = () => {
317
314
  return (
@@ -357,7 +354,6 @@ By default the Form will not render reserved attributes. This can be controlled/
357
354
 
358
355
  ```jsx
359
356
  import { ThreekitProvider, FlatForm } from '@threekit-tools/treble';
360
- import threekitConfig from './threekit.config.js';
361
357
 
362
358
  const App = () => {
363
359
  const attributes = {
@@ -2,7 +2,8 @@ import React from 'react';
2
2
  interface AccordionItemProps extends React.FC {
3
3
  selected: boolean;
4
4
  label: string;
5
- handleClick: () => void;
5
+ handleSelect: () => void;
6
+ onClick: () => void;
6
7
  }
7
8
  interface AccordionProps<T> {
8
9
  children: React.FunctionComponentElement<T>;
@@ -27,9 +27,9 @@ var react_1 = __importStar(require("react"));
27
27
  var accordion_styles_1 = require("./accordion.styles");
28
28
  var CaretDown_1 = __importDefault(require("../../icons/CaretDown"));
29
29
  var AccordionItem = function (props) {
30
- var selected = props.selected, handleClick = props.handleClick, label = props.label, children = props.children;
30
+ var selected = props.selected, handleSelect = props.handleSelect, label = props.label, children = props.children;
31
31
  return (react_1.default.createElement(accordion_styles_1.Wrapper, { selected: selected },
32
- react_1.default.createElement("div", { onClick: handleClick },
32
+ react_1.default.createElement("div", { onClick: handleSelect },
33
33
  react_1.default.createElement("div", null, label),
34
34
  react_1.default.createElement("div", null),
35
35
  react_1.default.createElement("div", null,
@@ -54,7 +54,11 @@ var Accordion = function (props) {
54
54
  return null;
55
55
  return react_1.default.cloneElement(child, {
56
56
  selected: selected === idx,
57
- handleClick: function () { return handleSelect(idx); },
57
+ handleSelect: function () {
58
+ if (child.props.onClick)
59
+ child.props.onClick();
60
+ handleSelect(idx);
61
+ },
58
62
  });
59
63
  });
60
64
  };
@@ -36,12 +36,16 @@ var Player = function (props) {
36
36
  width: '100%',
37
37
  }, props), height = _a.height, width = _a.width, minHeight = _a.minHeight, children = _a.children;
38
38
  var hasMoved = (0, react_1.useRef)(false);
39
- var portalPlayerTo = (0, usePlayerPortal_1.default)();
39
+ var _b = (0, usePlayerPortal_1.default)(), portalPlayerTo = _b[0], portalBack = _b[1];
40
40
  (0, react_1.useEffect)(function () {
41
41
  if (portalPlayerTo && !hasMoved.current) {
42
42
  portalPlayerTo(exports.PLAYER_DIV_ID);
43
43
  hasMoved.current = true;
44
44
  }
45
+ return function () {
46
+ if (portalBack)
47
+ portalBack();
48
+ };
45
49
  });
46
50
  return (react_1.default.createElement(player_styles_1.Wrapper, { height: height, width: width, minHeight: minHeight, className: className },
47
51
  react_1.default.createElement("div", { id: exports.PLAYER_DIV_ID }),
@@ -15,7 +15,7 @@ var ProductName = function (props) {
15
15
  if (!(title === null || title === void 0 ? void 0 : title.length) && !name)
16
16
  return null;
17
17
  var cls = (0, utils_1.generateDisplayClassName)('title', customClassName);
18
- return (react_1.default.createElement(productName_styles_1.Wrapper, { align: align, className: cls }, name || title));
18
+ return (react_1.default.createElement(productName_styles_1.Wrapper, { align: align, className: cls }, title || name));
19
19
  };
20
20
  exports.ProductName = ProductName;
21
21
  exports.ProductName.propTypes = {
@@ -1,8 +1,7 @@
1
1
  import React from 'react';
2
2
  interface TabPaneProps extends React.FC {
3
- selected: boolean;
4
3
  label: string;
5
- handleClick: () => void;
4
+ onClick: () => void;
6
5
  }
7
6
  interface TabsProps<T> {
8
7
  children: React.FunctionComponentElement<T>;
@@ -26,26 +26,25 @@ var TabPane = function (props) { return react_1.default.createElement(react_1.de
26
26
  var Tabs = function (_a) {
27
27
  var children = _a.children;
28
28
  var _b = (0, react_1.useState)(0), selected = _b[0], setSelected = _b[1];
29
- var handleSelect = function (idx) {
30
- return setSelected(idx === selected ? undefined : idx);
31
- };
29
+ var handleSelect = function (idx) { return setSelected(idx); };
32
30
  if (!children)
33
31
  return null;
34
32
  return (react_1.default.createElement(tabs_styles_1.Wrapper, null,
35
33
  react_1.default.createElement(tabs_styles_1.TabsWrapper, null, react_1.default.Children.map(children, function (child, idx) {
36
34
  if (child.type !== TabPane)
37
35
  return null;
38
- return (react_1.default.createElement(tabs_styles_1.Tab, { selected: selected === idx, onClick: function () { return handleSelect(idx); } }, child.props.label));
36
+ return (react_1.default.createElement(tabs_styles_1.Tab, { selected: selected === idx, onClick: function () {
37
+ if (child.props.onClick)
38
+ child.props.onClick();
39
+ handleSelect(idx);
40
+ } }, child.props.label));
39
41
  })),
40
42
  react_1.default.createElement(tabs_styles_1.TabContent, null, react_1.default.Children.map(children, function (child, idx) {
41
43
  if (child.type !== TabPane)
42
44
  return null;
43
45
  if (selected !== idx)
44
46
  return null;
45
- return react_1.default.cloneElement(child, {
46
- selected: selected === idx,
47
- handleClick: function () { return handleSelect(idx); },
48
- });
47
+ return child;
49
48
  }))));
50
49
  };
51
50
  exports.Tabs = Tabs;
@@ -33,8 +33,8 @@ var App = function (props) {
33
33
  var dispatch = (0, store_1.useThreekitDispatch)();
34
34
  (0, react_1.useEffect)(function () {
35
35
  var init = function () {
36
- var playerConfig = props.playerConfig, project = props.project, locale = props.locale, threekitEnv = props.threekitEnv;
37
- dispatch((0, threekit_1.launch)({ playerConfig: playerConfig, project: project, locale: locale, threekitEnv: threekitEnv }));
36
+ var playerConfig = props.playerConfig, project = props.project, locale = props.locale, threekitEnv = props.threekitEnv, eventHandlers = props.eventHandlers;
37
+ dispatch((0, threekit_1.launch)({ playerConfig: playerConfig, project: project, locale: locale, threekitEnv: threekitEnv, eventHandlers: eventHandlers }));
38
38
  };
39
39
  init();
40
40
  return;
@@ -33,7 +33,6 @@ function TrebleApp(props) {
33
33
  var _a;
34
34
  var project = props.project, productId = props.productId, playerConfig = props.playerConfig, threekitEnv = props.threekitEnv, locale = props.locale, theme = props.theme;
35
35
  var config = constants_1.IS_TREBLE_SCRIPTS ? (0, utils_1.loadTrebleConfig)() : {};
36
- console.log(config);
37
36
  if (!((_a = config.treble) === null || _a === void 0 ? void 0 : _a.productsCtx)) {
38
37
  console.error('Treble Config is not setup correctly');
39
38
  return null;
@@ -21,6 +21,7 @@ export declare const TK_SAVED_CONFIG_PARAM_KEY = "tkConfigId";
21
21
  /*****************************************************
22
22
  * Threekit Player Initialization Defaults
23
23
  ****************************************************/
24
+ export declare const TK_PLAYER_LOADER_DIV = "tk-ply-loader";
24
25
  export declare const TK_PLAYER_ROOT_DIV = "tk-ply-root";
25
26
  export declare const DEFAULT_PLAYER_CONFIG: {
26
27
  showConfigurator: boolean;
package/dist/constants.js CHANGED
@@ -4,7 +4,7 @@
4
4
  ****************************************************/
5
5
  var _a;
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.WISHLIST_LOCALSTORAGE_KEY = exports.SNAPSHOT_OUTPUTS = exports.SNAPSHOT_FORMATS = exports.METADATA_RESERVED = exports.ATTRIBUTES_RESERVED = exports.SORT_OPTIONS = exports.ATTRIBUTE_TYPES = exports.DEFAULT_PLAYER_CONFIG = exports.TK_PLAYER_ROOT_DIV = exports.TK_SAVED_CONFIG_PARAM_KEY = exports.TK_PRODUCT_ID_PARAM_KEY = exports.IS_TREBLE_SCRIPTS = exports.FORM_CLASS_NAME = exports.DISPLAY_CLASS_NAME = exports.TOOL_CLASS_NAME = exports.LAYOUT_CLASS_NAME = exports.WIDGET_CLASS_NAME = exports.INPUT_COMPONENT_CLASS_NAME = exports.CLASS_NAME_PREFIX = exports.DEFAULT_CLASS_NAME = void 0;
7
+ exports.WISHLIST_LOCALSTORAGE_KEY = exports.SNAPSHOT_OUTPUTS = exports.SNAPSHOT_FORMATS = exports.METADATA_RESERVED = exports.ATTRIBUTES_RESERVED = exports.SORT_OPTIONS = exports.ATTRIBUTE_TYPES = exports.DEFAULT_PLAYER_CONFIG = exports.TK_PLAYER_ROOT_DIV = exports.TK_PLAYER_LOADER_DIV = exports.TK_SAVED_CONFIG_PARAM_KEY = exports.TK_PRODUCT_ID_PARAM_KEY = exports.IS_TREBLE_SCRIPTS = exports.FORM_CLASS_NAME = exports.DISPLAY_CLASS_NAME = exports.TOOL_CLASS_NAME = exports.LAYOUT_CLASS_NAME = exports.WIDGET_CLASS_NAME = exports.INPUT_COMPONENT_CLASS_NAME = exports.CLASS_NAME_PREFIX = exports.DEFAULT_CLASS_NAME = void 0;
8
8
  exports.DEFAULT_CLASS_NAME = 'threekit-react';
9
9
  exports.CLASS_NAME_PREFIX = 'tk';
10
10
  exports.INPUT_COMPONENT_CLASS_NAME = "".concat(exports.DEFAULT_CLASS_NAME, " ").concat(exports.CLASS_NAME_PREFIX, "-input");
@@ -25,6 +25,7 @@ exports.TK_SAVED_CONFIG_PARAM_KEY = 'tkConfigId';
25
25
  /*****************************************************
26
26
  * Threekit Player Initialization Defaults
27
27
  ****************************************************/
28
+ exports.TK_PLAYER_LOADER_DIV = 'tk-ply-loader';
28
29
  exports.TK_PLAYER_ROOT_DIV = 'tk-ply-root';
29
30
  exports.DEFAULT_PLAYER_CONFIG = {
30
31
  // authToken: undefined,
@@ -1,2 +1,3 @@
1
- declare const usePlayerPortal: () => ((toEl: string) => void) | undefined;
1
+ declare type UsePlayerPortal = [undefined, undefined] | [(toEl: string) => void, () => void];
2
+ declare const usePlayerPortal: () => UsePlayerPortal;
2
3
  export default usePlayerPortal;
@@ -1,22 +1,43 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ var react_1 = require("react");
3
4
  var react_redux_1 = require("react-redux");
4
5
  var threekit_1 = require("../../store/threekit");
6
+ var constants_1 = require("../../constants");
5
7
  var usePlayerPortal = function () {
8
+ var htmlElements = (0, react_1.useRef)({
9
+ player: null,
10
+ playerLoader: null,
11
+ playerWrapper: null,
12
+ });
6
13
  var playerElementId = (0, react_redux_1.useSelector)(threekit_1.getPlayerElementId);
7
14
  if (!playerElementId)
8
- return undefined;
15
+ return [undefined, undefined];
9
16
  var portalPlayerTo = function (toEl) {
10
17
  if (!toEl)
11
18
  return;
12
- var playerEl = document.getElementById(playerElementId);
13
- var playerWrapperEl = document.getElementById(toEl);
14
- if (!playerEl)
19
+ if (!htmlElements.current.player)
20
+ htmlElements.current.player = document.getElementById(playerElementId);
21
+ htmlElements.current.playerWrapper = document.getElementById(toEl);
22
+ if (!htmlElements.current.player)
15
23
  throw new Error('Move from element not found');
16
- if (!playerWrapperEl)
24
+ if (!htmlElements.current.playerWrapper)
17
25
  throw new Error('Move To element not found');
18
- playerWrapperEl.appendChild(playerEl);
26
+ htmlElements.current.playerWrapper.appendChild(htmlElements.current.player);
19
27
  };
20
- return portalPlayerTo;
28
+ var returnPlayer = function () {
29
+ constants_1.TK_PLAYER_LOADER_DIV;
30
+ if (!htmlElements.current.player)
31
+ htmlElements.current.player = document.getElementById(playerElementId);
32
+ if (!htmlElements.current.playerLoader)
33
+ htmlElements.current.playerLoader =
34
+ document.getElementById(constants_1.TK_PLAYER_LOADER_DIV);
35
+ if (!htmlElements.current.player)
36
+ throw new Error('Move from element not found');
37
+ if (!htmlElements.current.playerLoader)
38
+ throw new Error('Player Loader element not found');
39
+ htmlElements.current.playerLoader.appendChild(htmlElements.current.player);
40
+ };
41
+ return [portalPlayerTo, returnPlayer];
21
42
  };
22
43
  exports.default = usePlayerPortal;
@@ -1,2 +1,3 @@
1
- declare const useZoom: () => [(step: number) => void, (step: number) => void];
1
+ declare type UseZoom = [(step: number) => void, (step: number) => void];
2
+ declare const useZoom: () => UseZoom;
2
3
  export default useZoom;
@@ -5,11 +5,15 @@ import { ISaveConfigurationConfig, WishlistArray } from '../Treble';
5
5
  /*****************************************************
6
6
  * Types and Interfaces
7
7
  ****************************************************/
8
+ interface EventHandlers {
9
+ postConfigurationChange?: (attributes: Array<IThreekitDisplayAttribute>) => void | Promise<void>;
10
+ }
8
11
  export interface ILaunchConfig {
9
12
  threekitEnv: string;
10
13
  locale: string;
11
14
  project: IProject;
12
15
  playerConfig: IPlayerConfig;
16
+ eventHandlers: EventHandlers;
13
17
  }
14
18
  interface IPriceConfig {
15
19
  id: string;
@@ -75,7 +75,7 @@ var createPlayerLoaderEl = function (elementId) {
75
75
  playerElement.setAttribute('id', elementId);
76
76
  playerElement.style.height = '100%';
77
77
  var playerLoader = document.createElement('div');
78
- playerLoader.setAttribute('id', 'tk-player-loader');
78
+ playerLoader.setAttribute('id', constants_1.TK_PLAYER_LOADER_DIV);
79
79
  playerLoader.appendChild(playerElement);
80
80
  playerLoader.style.opacity = '0';
81
81
  playerLoader.style.height = '1px';
@@ -84,6 +84,10 @@ var createPlayerLoaderEl = function (elementId) {
84
84
  document.body.appendChild(playerLoader);
85
85
  return playerElement;
86
86
  };
87
+ /*****************************************************
88
+ * Constants and Event Handlers
89
+ ****************************************************/
90
+ var EVENTS = {};
87
91
  var initialState = {
88
92
  // Player HTML element
89
93
  playerElId: undefined,
@@ -357,6 +361,8 @@ var launch = function (launchConfig) {
357
361
  dispatch(setLanguage(launchConfig.locale));
358
362
  dispatch(setTranslations(translations));
359
363
  }
364
+ if (launchConfig === null || launchConfig === void 0 ? void 0 : launchConfig.eventHandlers)
365
+ EVENTS = Object.assign(EVENTS, launchConfig.eventHandlers);
360
366
  if (pricebook.length) {
361
367
  priceConfig = {
362
368
  id: pricebook[0].id,
@@ -393,6 +399,12 @@ var setConfiguration = function (config) { return function (dispatch) { return _
393
399
  case 1:
394
400
  _a.sent();
395
401
  updatedAttributes = window.threekit.configurator.getDisplayAttributes();
402
+ if (!EVENTS.postConfigurationChange) return [3 /*break*/, 3];
403
+ return [4 /*yield*/, EVENTS.postConfigurationChange(updatedAttributes)];
404
+ case 2:
405
+ _a.sent();
406
+ _a.label = 3;
407
+ case 3:
396
408
  dispatch(setAttributes(updatedAttributes));
397
409
  dispatch(setPlayerLoading(false));
398
410
  return [2 /*return*/];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@threekit-tools/treble",
3
- "version": "0.0.38",
3
+ "version": "0.0.42",
4
4
  "author": "Amaan Saeed",
5
5
  "license": "MIT",
6
6
  "files": [