chayns-api 1.0.13 → 1.0.15

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 (46) hide show
  1. package/dist/cjs/calls/index.js +7 -2
  2. package/dist/cjs/components/AppDialogWrapper.js +42 -0
  3. package/dist/cjs/components/ChaynsProvider.js +5 -2
  4. package/dist/cjs/handler/DialogHandler.js +65 -0
  5. package/dist/cjs/hooks/index.js +14 -1
  6. package/dist/cjs/hooks/useDialogState.js +39 -0
  7. package/dist/cjs/host/ChaynsHost.js +10 -5
  8. package/dist/cjs/host/iframe/HostIframe.js +5 -2
  9. package/dist/cjs/host/module/ModuleHost.js +4 -0
  10. package/dist/cjs/types/IChaynsReact.js +22 -2
  11. package/dist/cjs/wrapper/AppWrapper.js +39 -0
  12. package/dist/cjs/wrapper/FrameWrapper.js +52 -1
  13. package/dist/cjs/wrapper/ModuleFederationWrapper.js +4 -0
  14. package/dist/esm/calls/index.js +6 -0
  15. package/dist/esm/components/AppDialogWrapper.js +33 -0
  16. package/dist/esm/components/ChaynsProvider.js +5 -2
  17. package/dist/esm/handler/DialogHandler.js +61 -0
  18. package/dist/esm/hooks/index.js +2 -1
  19. package/dist/esm/hooks/useDialogState.js +32 -0
  20. package/dist/esm/host/ChaynsHost.js +10 -5
  21. package/dist/esm/host/iframe/HostIframe.js +5 -2
  22. package/dist/esm/host/module/ModuleHost.js +4 -0
  23. package/dist/esm/types/IChaynsReact.js +19 -1
  24. package/dist/esm/wrapper/AppWrapper.js +39 -0
  25. package/dist/esm/wrapper/FrameWrapper.js +52 -1
  26. package/dist/esm/wrapper/ModuleFederationWrapper.js +4 -0
  27. package/dist/types/calls/dialogs/confirm.d.ts +4 -4
  28. package/dist/types/calls/dialogs/date.d.ts +3 -3
  29. package/dist/types/calls/dialogs/fileSelect.d.ts +2 -2
  30. package/dist/types/calls/dialogs/iFrame.d.ts +2 -2
  31. package/dist/types/calls/dialogs/input.d.ts +2 -2
  32. package/dist/types/calls/dialogs/mediaSelect.d.ts +2 -2
  33. package/dist/types/calls/dialogs/signature.d.ts +2 -2
  34. package/dist/types/calls/index.d.ts +4 -0
  35. package/dist/types/components/AppDialogWrapper.d.ts +5 -0
  36. package/dist/types/components/WaitUntil.d.ts +1 -2
  37. package/dist/types/handler/DialogHandler.d.ts +19 -0
  38. package/dist/types/hooks/index.d.ts +1 -0
  39. package/dist/types/hooks/useDialogState.d.ts +9 -0
  40. package/dist/types/host/ChaynsHost.d.ts +5 -4
  41. package/dist/types/host/iframe/HostIframe.d.ts +1 -0
  42. package/dist/types/host/module/ModuleHost.d.ts +1 -0
  43. package/dist/types/types/IChaynsReact.d.ts +90 -5
  44. package/dist/types/types/dialog.d.ts +1 -1
  45. package/dist/types/wrapper/AppWrapper.d.ts +4 -0
  46. package/package.json +4 -4
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.vibrate = exports.user = exports.storageSetItem = exports.storageRemoveItem = exports.storageGetItem = exports.site = exports.setWaitCursor = exports.setTempDesignSettings = exports.setScanQrCode = exports.setRefreshScrollEnabled = exports.setOverlay = exports.setHeight = exports.setFloatingButton = exports.setDisplayTimeout = exports.setAdminMode = exports.sendMessageToUser = exports.sendMessageToPage = exports.sendMessageToGroup = exports.selectPage = exports.scrollToY = exports.scrollByY = exports.removeWindowMetricsListener = exports.removeVisibilityChangeListener = exports.removeScrollListener = exports.removeGeoLocationListener = exports.refreshData = exports.refreshAccessToken = exports.parameters = exports.pages = exports.openVideo = exports.openUrl = exports.openImage = exports.navigateBack = exports.logout = exports.login = exports.language = exports.invokeDialogCall = exports.invokeCall = exports.getWindowMetrics = exports.getUserInfo = exports.getUser = exports.getSite = exports.getScrollPosition = exports.getParameters = exports.getPages = exports.getLanguage = exports.getGeoLocation = exports.getEnvironment = exports.getDevice = exports.getCurrentPage = exports.getAvailableSharingServices = exports.getAccessToken = exports.environment = exports.device = exports.customCallbackFunction = exports.addWindowMetricsListener = exports.addVisibilityChangeListener = exports.addScrollListener = exports.addGeoLocationListener = void 0;
6
+ exports.vibrate = exports.user = exports.storageSetItem = exports.storageRemoveItem = exports.storageGetItem = exports.site = exports.setWaitCursor = exports.setTempDesignSettings = exports.setScanQrCode = exports.setRefreshScrollEnabled = exports.setOverlay = exports.setHeight = exports.setFloatingButton = exports.setDisplayTimeout = exports.setAdminMode = exports.sendMessageToUser = exports.sendMessageToPage = exports.sendMessageToGroup = exports.selectPage = exports.scrollToY = exports.scrollByY = exports.removeWindowMetricsListener = exports.removeVisibilityChangeListener = exports.removeScrollListener = exports.removeGeoLocationListener = exports.refreshData = exports.refreshAccessToken = exports.parameters = exports.pages = exports.openVideo = exports.openUrl = exports.openImage = exports.navigateBack = exports.logout = exports.login = exports.language = exports.invokeDialogCall = exports.invokeCall = exports.getWindowMetrics = exports.getUserInfo = exports.getUser = exports.getSite = exports.getScrollPosition = exports.getParameters = exports.getPages = exports.getLanguage = exports.getGeoLocation = exports.getEnvironment = exports.getDevice = exports.getCurrentPage = exports.getAvailableSharingServices = exports.getAccessToken = exports.environment = exports.device = exports.customCallbackFunction = exports.createDialog = exports.addWindowMetricsListener = exports.addVisibilityChangeListener = exports.addScrollListener = exports.addGeoLocationListener = void 0;
7
7
  var _ChaynsProvider = require("../components/ChaynsProvider");
8
8
  /**
9
9
  * This adds a listener to determine your location.
@@ -224,9 +224,14 @@ const storageSetItem = (...args) => _ChaynsProvider.moduleWrapper.current.functi
224
224
  exports.storageSetItem = storageSetItem;
225
225
  const vibrate = (...args) => _ChaynsProvider.moduleWrapper.current.functions.vibrate(...args);
226
226
  /**
227
- * Displays an overlay
227
+ * This method creates a dialog
228
228
  */
229
229
  exports.vibrate = vibrate;
230
+ const createDialog = (...args) => _ChaynsProvider.moduleWrapper.current.functions.createDialog(...args);
231
+ /**
232
+ * Displays an overlay
233
+ */
234
+ exports.createDialog = createDialog;
230
235
  const setOverlay = (...args) => _ChaynsProvider.moduleWrapper.current.functions.setOverlay(...args);
231
236
  /**
232
237
  * Returns user information, only when user is logged in
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _ChaynsHost = _interopRequireDefault(require("../host/ChaynsHost"));
9
+ var _hooks = require("../hooks");
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
14
+ const AppDialogWrapper = ({
15
+ dialogEventTarget
16
+ }) => {
17
+ const functions = (0, _hooks.useFunctions)();
18
+ const data = (0, _hooks.useValues)();
19
+ const [dialogData, setDialogData] = (0, _react.useState)({
20
+ dialogs: []
21
+ });
22
+ (0, _react.useEffect)(() => {
23
+ dialogEventTarget.addEventListener('change', e => {
24
+ setDialogData({
25
+ dialogs: e.detail
26
+ });
27
+ });
28
+ }, []);
29
+ return /*#__PURE__*/_react.default.createElement(_ChaynsHost.default, _extends({
30
+ type: "client-module",
31
+ system: {
32
+ module: './AppWrapper',
33
+ url: 'https://tapp-staging.chayns-static.space/api/dialog-v2/v1/remoteEntry.js',
34
+ scope: 'dialog_v2'
35
+ }
36
+ }, data, {
37
+ functions: functions,
38
+ customData: dialogData
39
+ }));
40
+ };
41
+ var _default = AppDialogWrapper;
42
+ exports.default = _default;
@@ -13,6 +13,7 @@ var _FrameWrapper = require("../wrapper/FrameWrapper");
13
13
  var _ModuleFederationWrapper = require("../wrapper/ModuleFederationWrapper");
14
14
  var _SsrWrapper = require("../wrapper/SsrWrapper");
15
15
  var _ChaynsContext = require("./ChaynsContext");
16
+ var _AppDialogWrapper = _interopRequireDefault(require("./AppDialogWrapper"));
16
17
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
17
18
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
18
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -44,7 +45,7 @@ const ChaynsProvider = ({
44
45
  renderedByServer,
45
46
  isModule
46
47
  }) => {
47
- var _customWrapper$curren, _customWrapper$curren2, _customWrapper$curren3;
48
+ var _customWrapper$curren, _customWrapper$curren2, _customWrapper$curren3, _customWrapper$curren4;
48
49
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
49
50
  const customWrapper = (0, _react.useRef)(null);
50
51
  if (!customWrapper.current) {
@@ -107,7 +108,9 @@ const ChaynsProvider = ({
107
108
  value: state
108
109
  }, /*#__PURE__*/_react.default.createElement(_ChaynsContext.ChaynsFunctionsContext.Provider, {
109
110
  value: (_customWrapper$curren3 = customWrapper.current) === null || _customWrapper$curren3 === void 0 ? void 0 : _customWrapper$curren3.functions
110
- }, children)), /*#__PURE__*/_react.default.createElement(InitialDataProvider, {
111
+ }, children, customWrapper.current instanceof _AppWrapper.AppWrapper ? /*#__PURE__*/_react.default.createElement(_AppDialogWrapper.default, {
112
+ dialogEventTarget: (_customWrapper$curren4 = customWrapper.current) === null || _customWrapper$curren4 === void 0 ? void 0 : _customWrapper$curren4.getDialogEventTarget()
113
+ }) : false)), /*#__PURE__*/_react.default.createElement(InitialDataProvider, {
111
114
  data: state,
112
115
  renderedByServer: renderedByServer
113
116
  }));
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ class DialogHandler {
8
+ isOpen = false;
9
+ result = undefined;
10
+ listeners = [];
11
+ constructor(config, open, close, dispatchEvent, addDataListener) {
12
+ this._open = open;
13
+ this._close = close;
14
+ this._config = config;
15
+ this._dispatchEvent = dispatchEvent;
16
+ this._addDataListener = addDataListener;
17
+ }
18
+ async open() {
19
+ if (this.isOpen) {
20
+ throw new Error('cannot open a dialog which is already open');
21
+ }
22
+ const res = await new Promise(async resolve => {
23
+ const callback = data => {
24
+ this.isOpen = false;
25
+ resolve(data);
26
+ };
27
+ this.isOpen = true;
28
+ this.dialogId = await this._open(this._config, callback);
29
+
30
+ // console.log('dialogId', this.dialogId);
31
+
32
+ this._addDataListener(this.dialogId, data => {
33
+ // console.log('[DialogHandler]dataListener', this.dialogId, data);
34
+ this.listeners.forEach(cb => cb(data));
35
+ });
36
+ });
37
+ return this.result = res;
38
+ }
39
+ close(buttonType, data) {
40
+ if (!this.isOpen) {
41
+ return;
42
+ }
43
+ this.isOpen = false;
44
+ this._close(this.dialogId, data);
45
+ }
46
+ dispatchEvent(data) {
47
+ if (!this.isOpen) {
48
+ return;
49
+ }
50
+ this._dispatchEvent(this.dialogId, data);
51
+ }
52
+ addDataListener(listener) {
53
+ this.listeners.push(listener);
54
+ }
55
+ removeDataListener(listener) {
56
+ const index = this.listeners.findIndex(l => l === listener);
57
+ if (index > -1) {
58
+ this.listeners.splice(index, 1);
59
+ }
60
+ }
61
+ getResult() {
62
+ return this.result;
63
+ }
64
+ }
65
+ exports.default = DialogHandler;
@@ -33,6 +33,18 @@ Object.defineProperty(exports, "useDevice", {
33
33
  return _useDevice.useDevice;
34
34
  }
35
35
  });
36
+ Object.defineProperty(exports, "useDialogData", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _useDialogState.useDialogData;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "useDialogState", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _useDialogState.useDialogState;
46
+ }
47
+ });
36
48
  Object.defineProperty(exports, "useEnvironment", {
37
49
  enumerable: true,
38
50
  get: function () {
@@ -156,4 +168,5 @@ var _useLanguage = require("./useLanguage");
156
168
  var _useValues = require("./useValues");
157
169
  var _useFunctions = require("./useFunctions");
158
170
  var _useCurrentPage = require("./useCurrentPage");
159
- var _useCustomData = require("./useCustomData");
171
+ var _useCustomData = require("./useCustomData");
172
+ var _useDialogState = require("./useDialogState");
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useDialogState = exports.useDialogData = void 0;
7
+ var _useContextSelector = require("use-context-selector");
8
+ var _ChaynsContext = require("../components/ChaynsContext");
9
+ /**
10
+ * @category Hooks
11
+ */
12
+ const useDialogState = () => {
13
+ const setResult = (0, _useContextSelector.useContextSelector)(_ChaynsContext.ChaynsFunctionsContext, v => v === null || v === void 0 ? void 0 : v.setDialogResult);
14
+ const sendData = (0, _useContextSelector.useContextSelector)(_ChaynsContext.ChaynsFunctionsContext, v => v === null || v === void 0 ? void 0 : v.dispatchEventToDialogHost);
15
+ const addDataListener = (0, _useContextSelector.useContextSelector)(_ChaynsContext.ChaynsFunctionsContext, v => v === null || v === void 0 ? void 0 : v.addDialogHostEventListener);
16
+ const isClosingRequested = (0, _useContextSelector.useContextSelector)(_ChaynsContext.ChaynsContext, v => {
17
+ var _v$dialog;
18
+ return v === null || v === void 0 ? void 0 : (_v$dialog = v.dialog) === null || _v$dialog === void 0 ? void 0 : _v$dialog.isClosingRequested;
19
+ });
20
+ return {
21
+ setResult,
22
+ sendData,
23
+ addDataListener,
24
+ isClosingRequested
25
+ };
26
+ };
27
+
28
+ /**
29
+ * @category Hooks
30
+ */
31
+ exports.useDialogState = useDialogState;
32
+ const useDialogData = () => {
33
+ const inputData = (0, _useContextSelector.useContextSelector)(_ChaynsContext.ChaynsContext, v => {
34
+ var _v$dialog2;
35
+ return v === null || v === void 0 ? void 0 : (_v$dialog2 = v.dialog) === null || _v$dialog2 === void 0 ? void 0 : _v$dialog2.dialogInput;
36
+ });
37
+ return inputData;
38
+ };
39
+ exports.useDialogData = useDialogData;
@@ -28,7 +28,8 @@ const ChaynsHost = ({
28
28
  parameters,
29
29
  customData,
30
30
  environment,
31
- preventStagingReplacement
31
+ preventStagingReplacement,
32
+ dialog
32
33
  }) => {
33
34
  switch (type) {
34
35
  case 'client-iframe':
@@ -47,7 +48,8 @@ const ChaynsHost = ({
47
48
  parameters: parameters,
48
49
  environment: environment,
49
50
  customData: customData,
50
- preventStagingReplacement: preventStagingReplacement
51
+ preventStagingReplacement: preventStagingReplacement,
52
+ dialog: dialog
51
53
  });
52
54
  case 'client-module':
53
55
  return /*#__PURE__*/_react.default.createElement(_ModuleHost.default, {
@@ -64,7 +66,8 @@ const ChaynsHost = ({
64
66
  parameters: parameters,
65
67
  customData: customData,
66
68
  environment: environment,
67
- preventStagingReplacement: preventStagingReplacement
69
+ preventStagingReplacement: preventStagingReplacement,
70
+ dialog: dialog
68
71
  });
69
72
  case 'server-iframe':
70
73
  return /*#__PURE__*/_react.default.createElement(_HostIframe.default, {
@@ -83,7 +86,8 @@ const ChaynsHost = ({
83
86
  parameters: parameters,
84
87
  environment: environment,
85
88
  customData: customData,
86
- preventStagingReplacement: preventStagingReplacement
89
+ preventStagingReplacement: preventStagingReplacement,
90
+ dialog: dialog
87
91
  });
88
92
  case 'server-module':
89
93
  return /*#__PURE__*/_react.default.createElement(_ModuleHost.default, {
@@ -99,7 +103,8 @@ const ChaynsHost = ({
99
103
  parameters: parameters,
100
104
  customData: customData,
101
105
  environment: environment,
102
- preventStagingReplacement: preventStagingReplacement
106
+ preventStagingReplacement: preventStagingReplacement,
107
+ dialog: dialog
103
108
  }, children);
104
109
  default:
105
110
  return null;
@@ -30,7 +30,8 @@ const HostIframe = ({
30
30
  parameters,
31
31
  environment,
32
32
  customData,
33
- preventStagingReplacement
33
+ preventStagingReplacement,
34
+ dialog
34
35
  }) => {
35
36
  const eventTarget = (0, _react.useRef)();
36
37
  const ref = (0, _react.useRef)();
@@ -56,7 +57,8 @@ const HostIframe = ({
56
57
  language,
57
58
  parameters,
58
59
  environment,
59
- customData
60
+ customData,
61
+ dialog
60
62
  };
61
63
  // endregion
62
64
 
@@ -116,6 +118,7 @@ const HostIframe = ({
116
118
  (0, _useUpdateData.default)(eventTarget.current, 'parameters', parameters);
117
119
  (0, _useUpdateData.default)(eventTarget.current, 'environment', environment);
118
120
  (0, _useUpdateData.default)(eventTarget.current, 'customData', customData);
121
+ (0, _useUpdateData.default)(eventTarget.current, 'dialog', dialog);
119
122
  // endregion
120
123
 
121
124
  return /*#__PURE__*/_react.default.createElement("iframe", _extends({
@@ -50,6 +50,7 @@ const ModuleHost = ({
50
50
  language,
51
51
  parameters,
52
52
  customData,
53
+ dialog,
53
54
  environment,
54
55
  preventStagingReplacement
55
56
  }) => {
@@ -68,6 +69,9 @@ const ModuleHost = ({
68
69
  if (user) {
69
70
  initialData.user = user;
70
71
  }
72
+ if (dialog) {
73
+ initialData.dialog = dialog;
74
+ }
71
75
  // endregion
72
76
 
73
77
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
@@ -3,7 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.TappEvent = exports.SharingApp = exports.ScreenSize = exports.ScanQrCodeCodeType = exports.ScanQrCodeCameraTypes = exports.RuntimeEnviroment = exports.Language = exports.IconType = exports.Gender = exports.Font = exports.FloatingButtonPosition = exports.Environment = exports.DeviceOs = exports.ColorMode = exports.BrowserName = exports.AppName = exports.AccessMode = void 0;
6
+ exports.TappEvent = exports.SharingApp = exports.ScreenSize = exports.ScanQrCodeCodeType = exports.ScanQrCodeCameraTypes = exports.RuntimeEnviroment = exports.Language = exports.IconType = exports.Gender = exports.Font = exports.FloatingButtonPosition = exports.Environment = exports.DialogType = exports.DialogButtonType = exports.DeviceOs = exports.ColorMode = exports.BrowserName = exports.AppName = exports.AccessMode = void 0;
7
+ let DialogButtonType;
8
+ exports.DialogButtonType = DialogButtonType;
9
+ (function (DialogButtonType) {
10
+ DialogButtonType[DialogButtonType["OK"] = 1] = "OK";
11
+ DialogButtonType[DialogButtonType["CANCEL"] = -1] = "CANCEL";
12
+ DialogButtonType[DialogButtonType["NEGATIVE"] = 0] = "NEGATIVE";
13
+ })(DialogButtonType || (exports.DialogButtonType = DialogButtonType = {}));
7
14
  let ScreenSize;
8
15
  exports.ScreenSize = ScreenSize;
9
16
  (function (ScreenSize) {
@@ -258,4 +265,17 @@ var selectType;
258
265
  (function (selectType) {
259
266
  selectType[selectType["DEFAULT"] = 0] = "DEFAULT";
260
267
  selectType[selectType["ICON"] = 1] = "ICON";
261
- })(selectType || (selectType = {}));
268
+ })(selectType || (selectType = {}));
269
+ let DialogType;
270
+ exports.DialogType = DialogType;
271
+ (function (DialogType) {
272
+ DialogType["ALERT"] = "alert";
273
+ DialogType["CONFIRM"] = "confirm";
274
+ DialogType["DATE"] = "date";
275
+ DialogType["FILE_SELECT"] = "fileSelect";
276
+ DialogType["IFRAME"] = "iframe";
277
+ DialogType["MODULE"] = "module";
278
+ DialogType["INPUT"] = "input";
279
+ DialogType["SELECT"] = "select";
280
+ DialogType["TOAST"] = "toast";
281
+ })(DialogType || (exports.DialogType = DialogType = {}));
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.AppWrapper = void 0;
7
7
  var _lodash = _interopRequireDefault(require("lodash.throttle"));
8
+ var _DialogHandler = _interopRequireDefault(require("../handler/DialogHandler"));
8
9
  var _IChaynsReact = require("../types/IChaynsReact");
9
10
  var _appCall = _interopRequireDefault(require("../util/appCall"));
10
11
  var _deviceHelper = _interopRequireWildcard(require("../util/deviceHelper"));
@@ -17,6 +18,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
17
18
  /* eslint-disable */
18
19
  // @ts-nocheck
19
20
 
21
+ let appWrapperDialogId = 0;
20
22
  class AppWrapper {
21
23
  values = null;
22
24
  accessToken = '';
@@ -98,6 +100,12 @@ class AppWrapper {
98
100
  notImplemented(call) {
99
101
  console.warn(`call ${call} not implement in app`);
100
102
  }
103
+ dispatchDialogChange(detail) {
104
+ this.dialogs = detail;
105
+ this.dialogEventTarget.dispatchEvent(new CustomEvent('change', {
106
+ detail
107
+ }));
108
+ }
101
109
  counter = 0;
102
110
  appCall(action, value = {}, {
103
111
  callback,
@@ -468,8 +476,39 @@ class AppWrapper {
468
476
  void this.appCall(19, value, {
469
477
  awaitResult: false
470
478
  });
479
+ },
480
+ createDialog: config => {
481
+ return new _DialogHandler.default(config, this.functions.openDialog, this.functions.closeDialog);
482
+ },
483
+ openDialog: async (config, callback) => {
484
+ const currentDialogId = appWrapperDialogId++;
485
+ const eventTarget = new EventTarget();
486
+ const resolve = result => {
487
+ callback(result);
488
+ this.dispatchDialogChange(this.dialogs.filter(x => x.dialogId !== currentDialogId));
489
+ };
490
+ this.dispatchDialogChange([...this.dialogs, {
491
+ config,
492
+ resolve,
493
+ dialogId: currentDialogId,
494
+ eventTarget
495
+ }]);
496
+ return currentDialogId;
497
+ },
498
+ closeDialog: dialogId => {
499
+ const dialog = this.dialogs.find(x => x.dialogId === dialogId);
500
+ if (dialog) {
501
+ dialog.resolve({
502
+ buttonType: -1
503
+ });
504
+ }
471
505
  }
472
506
  };
507
+ dialogs = [];
508
+ dialogEventTarget = new EventTarget();
509
+ getDialogEventTarget() {
510
+ return this.dialogEventTarget;
511
+ }
473
512
  async init() {
474
513
  this.values = this.mapOldApiToNew(await this.appCall(18));
475
514
  return undefined;
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.FrameWrapper = void 0;
7
7
  var comlink = _interopRequireWildcard(require("comlink"));
8
+ var _DialogHandler = _interopRequireDefault(require("../handler/DialogHandler"));
8
9
  var _visibilityChangeListener = require("../calls/visibilityChangeListener");
9
10
  var _apiListenerHelper = require("../helper/apiListenerHelper");
10
11
  var _getUserInfo = _interopRequireDefault(require("../calls/getUserInfo"));
@@ -233,7 +234,57 @@ class FrameWrapper {
233
234
  scrollByY: async (value, duration) => {
234
235
  if (!this.initialized) await this.ready;
235
236
  return this.exposedFunctions.scrollByY(value, duration);
236
- }
237
+ },
238
+ createDialog: config => {
239
+ return new _DialogHandler.default(config, this.functions.openDialog, this.exposedFunctions.closeDialog, this.functions.dispatchEventToDialogClient, this.functions.addDialogClientEventListener);
240
+ },
241
+ closeDialog: async dialogId => {
242
+ if (!this.initialized) await this.ready;
243
+ return this.exposedFunctions.closeDialog(dialogId);
244
+ },
245
+ openDialog: async (config, callback) => {
246
+ if (!this.initialized) await this.ready;
247
+ return this.exposedFunctions.openDialog(config, comlink.proxy(callback));
248
+ },
249
+ setDialogResult: async (buttonType, result) => {
250
+ if (!this.initialized) await this.ready;
251
+ return this.exposedFunctions.setDialogResult(buttonType, result);
252
+ },
253
+ dispatchEventToDialogClient: async (dialogId, data) => {
254
+ if (!this.initialized) await this.ready;
255
+ return this.exposedFunctions.dispatchEventToDialogClient(dialogId, data);
256
+ },
257
+ addDialogClientEventListener: async (dialogId, callback) => {
258
+ if (!this.initialized) await this.ready;
259
+ return this.exposedFunctions.addDialogClientEventListener(dialogId, comlink.proxy(callback));
260
+ },
261
+ dispatchEventToDialogHost: async data => {
262
+ if (!this.initialized) await this.ready;
263
+ return this.exposedFunctions.dispatchEventToDialogHost(data);
264
+ },
265
+ addDialogHostEventListener: async callback => {
266
+ if (!this.initialized) await this.ready;
267
+ const listenerKey = `dialogHostEventListener`;
268
+ const {
269
+ id,
270
+ shouldInitialize
271
+ } = (0, _apiListenerHelper.addApiListener)(listenerKey, callback);
272
+ if (shouldInitialize) {
273
+ this.exposedFunctions.addDialogHostEventListener(comlink.proxy(data => {
274
+ (0, _apiListenerHelper.dispatchApiEvent)(listenerKey, data);
275
+ }));
276
+ }
277
+ return id;
278
+ },
279
+ removeDialogHostEventListener: async id => {
280
+ if (!this.initialized) await this.ready;
281
+ const listenerKey = `dialogHostEventListener`;
282
+ const shouldRemove = (0, _apiListenerHelper.removeApiListener)(listenerKey, id);
283
+ if (shouldRemove) {
284
+ // this.exposedFunctions.removeDialogHostEventListener(0);
285
+ }
286
+ },
287
+ removeDialogClientEventListener: async () => {}
237
288
  };
238
289
  initialized = false;
239
290
  constructor() {
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ModuleFederationWrapper = void 0;
7
+ var _DialogHandler = _interopRequireDefault(require("../handler/DialogHandler"));
7
8
  var _visibilityChangeListener = require("../calls/visibilityChangeListener");
8
9
  var _apiListenerHelper = require("../helper/apiListenerHelper");
9
10
  var _getUserInfo = _interopRequireDefault(require("../calls/getUserInfo"));
@@ -24,6 +25,9 @@ class ModuleFederationWrapper {
24
25
  // eslint-disable-next-line
25
26
  this.functions[k] = async (...args) => fn(...args);
26
27
  });
28
+ this.functions.createDialog = config => {
29
+ return new _DialogHandler.default(config, functions.openDialog, functions.closeDialog, functions.dispatchEventToDialogClient, functions.addDialogClientEventListener);
30
+ };
27
31
  this.functions.addWindowMetricsListener = async callback => {
28
32
  const {
29
33
  id,
@@ -261,6 +261,12 @@ export const storageSetItem = function () {
261
261
  export const vibrate = function () {
262
262
  return moduleWrapper.current.functions.vibrate(...arguments);
263
263
  };
264
+ /**
265
+ * This method creates a dialog
266
+ */
267
+ export const createDialog = function () {
268
+ return moduleWrapper.current.functions.createDialog(...arguments);
269
+ };
264
270
  /**
265
271
  * Displays an overlay
266
272
  */
@@ -0,0 +1,33 @@
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+ import React, { useEffect, useState } from 'react';
3
+ import ChaynsHost from '../host/ChaynsHost';
4
+ import { useFunctions, useValues } from '../hooks';
5
+ const AppDialogWrapper = _ref => {
6
+ let {
7
+ dialogEventTarget
8
+ } = _ref;
9
+ const functions = useFunctions();
10
+ const data = useValues();
11
+ const [dialogData, setDialogData] = useState({
12
+ dialogs: []
13
+ });
14
+ useEffect(() => {
15
+ dialogEventTarget.addEventListener('change', e => {
16
+ setDialogData({
17
+ dialogs: e.detail
18
+ });
19
+ });
20
+ }, []);
21
+ return /*#__PURE__*/React.createElement(ChaynsHost, _extends({
22
+ type: "client-module",
23
+ system: {
24
+ module: './AppWrapper',
25
+ url: 'https://tapp-staging.chayns-static.space/api/dialog-v2/v1/remoteEntry.js',
26
+ scope: 'dialog_v2'
27
+ }
28
+ }, data, {
29
+ functions: functions,
30
+ customData: dialogData
31
+ }));
32
+ };
33
+ export default AppDialogWrapper;
@@ -7,6 +7,7 @@ import { FrameWrapper } from '../wrapper/FrameWrapper';
7
7
  import { ModuleFederationWrapper } from '../wrapper/ModuleFederationWrapper';
8
8
  import { SsrWrapper } from '../wrapper/SsrWrapper';
9
9
  import { ChaynsContext, ChaynsFunctionsContext } from './ChaynsContext';
10
+ import AppDialogWrapper from "./AppDialogWrapper";
10
11
 
11
12
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
12
13
  export const moduleWrapper = {
@@ -30,7 +31,7 @@ const InitialDataProvider = /*#__PURE__*/React.memo(_ref => {
30
31
  });
31
32
  }, () => true);
32
33
  const ChaynsProvider = _ref2 => {
33
- var _customWrapper$curren, _customWrapper$curren2, _customWrapper$curren3;
34
+ var _customWrapper$curren, _customWrapper$curren2, _customWrapper$curren3, _customWrapper$curren4;
34
35
  let {
35
36
  children,
36
37
  data,
@@ -101,7 +102,9 @@ const ChaynsProvider = _ref2 => {
101
102
  value: state
102
103
  }, /*#__PURE__*/React.createElement(ChaynsFunctionsContext.Provider, {
103
104
  value: (_customWrapper$curren3 = customWrapper.current) === null || _customWrapper$curren3 === void 0 ? void 0 : _customWrapper$curren3.functions
104
- }, children)), /*#__PURE__*/React.createElement(InitialDataProvider, {
105
+ }, children, customWrapper.current instanceof AppWrapper ? /*#__PURE__*/React.createElement(AppDialogWrapper, {
106
+ dialogEventTarget: (_customWrapper$curren4 = customWrapper.current) === null || _customWrapper$curren4 === void 0 ? void 0 : _customWrapper$curren4.getDialogEventTarget()
107
+ }) : false)), /*#__PURE__*/React.createElement(InitialDataProvider, {
105
108
  data: state,
106
109
  renderedByServer: renderedByServer
107
110
  }));
@@ -0,0 +1,61 @@
1
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
4
+ export default class DialogHandler {
5
+ constructor(config, open, close, dispatchEvent, addDataListener) {
6
+ _defineProperty(this, "isOpen", false);
7
+ _defineProperty(this, "result", undefined);
8
+ _defineProperty(this, "listeners", []);
9
+ this._open = open;
10
+ this._close = close;
11
+ this._config = config;
12
+ this._dispatchEvent = dispatchEvent;
13
+ this._addDataListener = addDataListener;
14
+ }
15
+ async open() {
16
+ if (this.isOpen) {
17
+ throw new Error('cannot open a dialog which is already open');
18
+ }
19
+ const res = await new Promise(async resolve => {
20
+ const callback = data => {
21
+ this.isOpen = false;
22
+ resolve(data);
23
+ };
24
+ this.isOpen = true;
25
+ this.dialogId = await this._open(this._config, callback);
26
+
27
+ // console.log('dialogId', this.dialogId);
28
+
29
+ this._addDataListener(this.dialogId, data => {
30
+ // console.log('[DialogHandler]dataListener', this.dialogId, data);
31
+ this.listeners.forEach(cb => cb(data));
32
+ });
33
+ });
34
+ return this.result = res;
35
+ }
36
+ close(buttonType, data) {
37
+ if (!this.isOpen) {
38
+ return;
39
+ }
40
+ this.isOpen = false;
41
+ this._close(this.dialogId, data);
42
+ }
43
+ dispatchEvent(data) {
44
+ if (!this.isOpen) {
45
+ return;
46
+ }
47
+ this._dispatchEvent(this.dialogId, data);
48
+ }
49
+ addDataListener(listener) {
50
+ this.listeners.push(listener);
51
+ }
52
+ removeDataListener(listener) {
53
+ const index = this.listeners.findIndex(l => l === listener);
54
+ if (index > -1) {
55
+ this.listeners.splice(index, 1);
56
+ }
57
+ }
58
+ getResult() {
59
+ return this.result;
60
+ }
61
+ }
@@ -13,4 +13,5 @@ export { useLanguage } from './useLanguage';
13
13
  export { useValues } from './useValues';
14
14
  export { useFunctions } from './useFunctions';
15
15
  export { useCurrentPage } from './useCurrentPage';
16
- export { useCustomData } from './useCustomData';
16
+ export { useCustomData } from './useCustomData';
17
+ export { useDialogState, useDialogData } from './useDialogState';