underpost 2.8.844 → 2.8.846

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 (68) hide show
  1. package/README.md +14 -2
  2. package/cli.md +4 -3
  3. package/docker-compose.yml +1 -1
  4. package/manifests/deployment/dd-template-development/deployment.yaml +2 -2
  5. package/package.json +1 -2
  6. package/src/cli/index.js +1 -7
  7. package/src/cli/run.js +7 -0
  8. package/src/client/Default.index.js +1 -1
  9. package/src/client/components/core/Chat.js +1 -1
  10. package/src/client/components/core/CommonJs.js +24 -22
  11. package/src/client/components/core/Content.js +1 -5
  12. package/src/client/components/core/Css.js +68 -4
  13. package/src/client/components/core/CssCore.js +5 -0
  14. package/src/client/components/core/Docs.js +9 -10
  15. package/src/client/components/core/DropDown.js +137 -82
  16. package/src/client/components/core/Modal.js +72 -48
  17. package/src/client/components/core/ObjectLayerEngine.js +638 -0
  18. package/src/client/components/core/Panel.js +156 -32
  19. package/src/client/components/core/PanelForm.js +12 -4
  20. package/src/client/components/core/Router.js +63 -2
  21. package/src/client/components/core/Translate.js +6 -2
  22. package/src/client/components/default/MenuDefault.js +27 -1
  23. package/src/client/public/default/android-chrome-144x144.png +0 -0
  24. package/src/client/public/default/android-chrome-192x192.png +0 -0
  25. package/src/client/public/default/android-chrome-256x256.png +0 -0
  26. package/src/client/public/default/android-chrome-36x36.png +0 -0
  27. package/src/client/public/default/android-chrome-48x48.png +0 -0
  28. package/src/client/public/default/android-chrome-72x72.png +0 -0
  29. package/src/client/public/default/android-chrome-96x96.png +0 -0
  30. package/src/client/public/default/apple-touch-icon-114x114-precomposed.png +0 -0
  31. package/src/client/public/default/apple-touch-icon-114x114.png +0 -0
  32. package/src/client/public/default/apple-touch-icon-120x120-precomposed.png +0 -0
  33. package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
  34. package/src/client/public/default/apple-touch-icon-144x144-precomposed.png +0 -0
  35. package/src/client/public/default/apple-touch-icon-144x144.png +0 -0
  36. package/src/client/public/default/apple-touch-icon-152x152-precomposed.png +0 -0
  37. package/src/client/public/default/apple-touch-icon-152x152.png +0 -0
  38. package/src/client/public/default/apple-touch-icon-180x180-precomposed.png +0 -0
  39. package/src/client/public/default/apple-touch-icon-180x180.png +0 -0
  40. package/src/client/public/default/apple-touch-icon-57x57-precomposed.png +0 -0
  41. package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
  42. package/src/client/public/default/apple-touch-icon-60x60-precomposed.png +0 -0
  43. package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
  44. package/src/client/public/default/apple-touch-icon-72x72-precomposed.png +0 -0
  45. package/src/client/public/default/apple-touch-icon-72x72.png +0 -0
  46. package/src/client/public/default/apple-touch-icon-76x76-precomposed.png +0 -0
  47. package/src/client/public/default/apple-touch-icon-76x76.png +0 -0
  48. package/src/client/public/default/apple-touch-icon-precomposed.png +0 -0
  49. package/src/client/public/default/apple-touch-icon.png +0 -0
  50. package/src/client/public/default/assets/background/dark.jpg +0 -0
  51. package/src/client/public/default/assets/logo/base-icon.png +0 -0
  52. package/src/client/public/default/assets/mailer/api-user-check.png +0 -0
  53. package/src/client/public/default/assets/mailer/api-user-invalid-token.png +0 -0
  54. package/src/client/public/default/assets/mailer/api-user-recover.png +0 -0
  55. package/src/client/public/default/favicon-16x16.png +0 -0
  56. package/src/client/public/default/favicon-32x32.png +0 -0
  57. package/src/client/public/default/favicon.ico +0 -0
  58. package/src/client/public/default/mstile-144x144.png +0 -0
  59. package/src/client/public/default/mstile-150x150.png +0 -0
  60. package/src/client/public/default/mstile-310x150.png +0 -0
  61. package/src/client/public/default/mstile-310x310.png +0 -0
  62. package/src/client/public/default/mstile-70x70.png +0 -0
  63. package/src/client/public/default/safari-pinned-tab.svg +24 -0
  64. package/src/client/ssr/body/DefaultSplashScreen.js +2 -2
  65. package/src/index.js +1 -1
  66. package/src/server/client-build-docs.js +205 -0
  67. package/src/server/client-build.js +15 -138
  68. package/src/server/conf.js +12 -5
@@ -8,7 +8,12 @@ const DropDown = {
8
8
  Tokens: {},
9
9
  Render: async function (options) {
10
10
  const id = options.id ? options.id : getId(this.Tokens, 'dropdown-');
11
- this.Tokens[id] = { onClickEvents: {}, lastSelectValue: undefined };
11
+ this.Tokens[id] = {
12
+ onClickEvents: {},
13
+ lastSelectValue: undefined,
14
+ oncheckvalues: {},
15
+ originData: options.data ? newInstance(options.data) : [],
16
+ };
12
17
 
13
18
  options.data.push({
14
19
  value: 'reset',
@@ -39,6 +44,100 @@ const DropDown = {
39
44
  else s(`.dropdown-option-${id}`).classList.add('hide');
40
45
  };
41
46
 
47
+ const _render = async (data) => {
48
+ let render = '';
49
+ let index = -1;
50
+ for (const optionData of data) {
51
+ index++;
52
+ const i = index;
53
+ const valueDisplay = optionData.value.trim().replaceAll(' ', '-');
54
+ setTimeout(() => {
55
+ const onclick = (e) => {
56
+ if (options && options.lastSelectClass && s(`.dropdown-option-${this.Tokens[id].lastSelectValue}`)) {
57
+ s(`.dropdown-option-${this.Tokens[id].lastSelectValue}`).classList.remove(options.lastSelectClass);
58
+ }
59
+ this.Tokens[id].lastSelectValue = valueDisplay;
60
+ if (options && options.lastSelectClass && s(`.dropdown-option-${this.Tokens[id].lastSelectValue}`)) {
61
+ s(`.dropdown-option-${this.Tokens[id].lastSelectValue}`).classList.add(options.lastSelectClass);
62
+ }
63
+
64
+ if (
65
+ !(options && options.disableClose) &&
66
+ (options.type !== 'checkbox' || optionData.value === 'close' || optionData.value === 'reset')
67
+ )
68
+ s(`.dropdown-option-${id}`).classList.add('hide');
69
+
70
+ if (options.type === 'checkbox' && ToggleSwitch.Tokens[`checkbox-role-${valueDisplay}`])
71
+ ToggleSwitch.Tokens[`checkbox-role-${valueDisplay}`].click();
72
+ if (optionData.value !== 'close') {
73
+ if (optionData.value !== 'reset') {
74
+ if (options.type === 'checkbox') {
75
+ // const _instanValue = data
76
+ // .filter((d) => d.checked)
77
+ // .map((v, i, a) => `${v.display}${i < a.length - 1 ? ',' : ''}`)
78
+ // .join('');
79
+ const value = Object.keys(DropDown.Tokens[id].oncheckvalues);
80
+ htmls(
81
+ `.dropdown-current-${id}`,
82
+ value.map((v) => DropDown.Tokens[id].originData.find((_v) => _v.value === v).display),
83
+ );
84
+ } else {
85
+ htmls(`.dropdown-current-${id}`, optionData.display);
86
+ }
87
+ } else htmls(`.dropdown-current-${id}`, '');
88
+
89
+ this.Tokens[id].value =
90
+ options.type === 'checkbox' ? data.filter((d) => d.checked).map((d) => d.data) : optionData.data;
91
+
92
+ console.warn('current value dropdown id:' + id, this.Tokens[id].value);
93
+
94
+ s(`.${id}`).value = this.Tokens[id].value;
95
+
96
+ optionData.onClick(e);
97
+ }
98
+ };
99
+
100
+ this.Tokens[id].onClickEvents[`dropdown-option-${id}-${i}`] = onclick;
101
+ this.Tokens[id].onClickEvents[`dropdown-option-${id}-${valueDisplay}`] = onclick;
102
+ this.Tokens[id].onClickEvents[`dropdown-option-${valueDisplay}`] = onclick;
103
+
104
+ s(`.dropdown-option-${id}-${i}`).onclick = onclick;
105
+ });
106
+ render += html`
107
+ <div
108
+ class="in dropdown-option dropdown-option-${id}-${i} dropdown-option-${id}-${valueDisplay} dropdown-option-${valueDisplay} ${valueDisplay ===
109
+ 'reset' &&
110
+ options &&
111
+ !(options.resetOption === true)
112
+ ? 'hide'
113
+ : ''}"
114
+ >
115
+ ${options.type === 'checkbox' && optionData.value !== 'close' && optionData.value !== 'reset'
116
+ ? html`
117
+ ${await ToggleSwitch.Render({
118
+ id: `checkbox-role-${valueDisplay}`,
119
+ type: 'checkbox',
120
+ disabledOnClick: true,
121
+ checked: optionData.checked,
122
+ on: {
123
+ unchecked: () => {
124
+ optionData.checked = false;
125
+ delete DropDown.Tokens[id].oncheckvalues[valueDisplay];
126
+ },
127
+ checked: () => {
128
+ optionData.checked = true;
129
+ DropDown.Tokens[id].oncheckvalues[valueDisplay] = {};
130
+ },
131
+ },
132
+ })}
133
+ `
134
+ : ''}${optionData.display}
135
+ </div>
136
+ `;
137
+ }
138
+ return { render, index };
139
+ };
140
+
42
141
  setTimeout(() => {
43
142
  if (options.type === 'checkbox')
44
143
  options.data.map((optionData) => {
@@ -53,92 +152,48 @@ const DropDown = {
53
152
  s(`.dropdown-label-${id}`).onclick = switchOptionsPanel;
54
153
  s(`.dropdown-current-${id}`).onclick = switchOptionsPanel;
55
154
  if (options && options.open) switchOptionsPanel();
56
- });
57
155
 
58
- let render = '';
59
- let index = -1;
60
- for (const optionData of options.data) {
61
- index++;
62
- const i = index;
63
- const valueDisplay = optionData.value.trim().replaceAll(' ', '-');
64
- setTimeout(() => {
65
- const onclick = (e) => {
66
- if (options && options.lastSelectClass && s(`.dropdown-option-${this.Tokens[id].lastSelectValue}`)) {
67
- s(`.dropdown-option-${this.Tokens[id].lastSelectValue}`).classList.remove(options.lastSelectClass);
68
- }
69
- this.Tokens[id].lastSelectValue = valueDisplay;
70
- if (options && options.lastSelectClass && s(`.dropdown-option-${this.Tokens[id].lastSelectValue}`)) {
71
- s(`.dropdown-option-${this.Tokens[id].lastSelectValue}`).classList.add(options.lastSelectClass);
72
- }
156
+ const dropDownSearchHandle = async () => {
157
+ const _data = [];
158
+ if (!s(`.search-box-${id}`)) return;
73
159
 
160
+ let _value = s(`.search-box-${id}`).value.toLowerCase();
161
+
162
+ for (const objData of options.data) {
163
+ const objValue = objData.value.toLowerCase();
74
164
  if (
75
- !(options && options.disableClose) &&
76
- (options.type !== 'checkbox' || optionData.value === 'close' || optionData.value === 'reset')
77
- )
78
- s(`.dropdown-option-${id}`).classList.add('hide');
79
-
80
- if (options.type === 'checkbox' && ToggleSwitch.Tokens[`checkbox-role-${valueDisplay}`])
81
- ToggleSwitch.Tokens[`checkbox-role-${valueDisplay}`].click();
82
- if (optionData.value !== 'close') {
83
- if (optionData.value !== 'reset')
84
- htmls(
85
- `.dropdown-current-${id}`,
86
- options.type === 'checkbox'
87
- ? options.data
88
- .filter((d) => d.checked)
89
- .map((v, i, a) => `${v.display}${i < a.length - 1 ? ',' : ''}`)
90
- .join('')
91
- : optionData.display,
92
- );
93
- else htmls(`.dropdown-current-${id}`, '');
94
-
95
- this.Tokens[id].value =
96
- options.type === 'checkbox' ? options.data.filter((d) => d.checked).map((d) => d.data) : optionData.data;
97
-
98
- console.warn('current value dropdown id:' + id, this.Tokens[id].value);
99
-
100
- s(`.${id}`).value = this.Tokens[id].value;
101
-
102
- optionData.onClick(e);
165
+ objValue.match(_value) ||
166
+ (Translate.Data[objData.value] &&
167
+ Object.keys(Translate.Data[objData.value]).find((t) =>
168
+ Translate.Data[objData.value][t].toLowerCase().match(_value),
169
+ ))
170
+ ) {
171
+ _data.push(objData);
103
172
  }
104
- };
173
+ }
174
+
175
+ if (_data.length > 0) {
176
+ const { render, index } = await _render(_data);
177
+ htmls(`.${id}-render-container`, render);
178
+ } else {
179
+ // const { render, index } = await _render(options.data);
180
+ htmls(
181
+ `.${id}-render-container`,
182
+ html` <div class="inl" style="padding: 10px; color: red">
183
+ <i class="fas fa-exclamation-circle"></i> ${Translate.Render('no-result-found')}
184
+ </div>`,
185
+ );
186
+ }
187
+ };
188
+
189
+ s(`.search-box-${id}`).oninput = dropDownSearchHandle;
190
+
191
+ // Not use onblur generate bug on input toggle
192
+ // s(`.search-box-${id}`).onblur = dropDownSearchHandle;
193
+ });
105
194
 
106
- this.Tokens[id].onClickEvents[`dropdown-option-${id}-${i}`] = onclick;
107
- this.Tokens[id].onClickEvents[`dropdown-option-${id}-${valueDisplay}`] = onclick;
108
- this.Tokens[id].onClickEvents[`dropdown-option-${valueDisplay}`] = onclick;
195
+ const { render, index } = await _render(options.data);
109
196
 
110
- s(`.dropdown-option-${id}-${i}`).onclick = onclick;
111
- });
112
- render += html`
113
- <div
114
- class="in dropdown-option dropdown-option-${id}-${i} dropdown-option-${id}-${valueDisplay} dropdown-option-${valueDisplay} ${valueDisplay ===
115
- 'reset' &&
116
- options &&
117
- !(options.resetOption === true)
118
- ? 'hide'
119
- : ''}"
120
- >
121
- ${options.type === 'checkbox' && optionData.value !== 'close' && optionData.value !== 'reset'
122
- ? html`
123
- ${await ToggleSwitch.Render({
124
- id: `checkbox-role-${valueDisplay}`,
125
- type: 'checkbox',
126
- disabledOnClick: true,
127
- checked: optionData.checked,
128
- on: {
129
- unchecked: () => {
130
- optionData.checked = false;
131
- },
132
- checked: () => {
133
- optionData.checked = true;
134
- },
135
- },
136
- })}
137
- `
138
- : ''}${optionData.display}
139
- </div>
140
- `;
141
- }
142
197
  return html`
143
198
  <div class="inl dropdown-container ${id} ${options?.containerClass ? options.containerClass : ''}">
144
199
  <div class="in dropdown-option dropdown-label-${id} ${options && options.disableSelectLabel ? 'hide' : ''}">
@@ -158,7 +213,7 @@ const DropDown = {
158
213
  placeholder: true,
159
214
  })}
160
215
  </div>
161
- ${render}
216
+ <div class="${id}-render-container">${render}</div>
162
217
  </div>
163
218
  </div>
164
219
  `;
@@ -24,7 +24,7 @@ import {
24
24
  renderStatus,
25
25
  renderCssAttr,
26
26
  } from './Css.js';
27
- import { setDocTitle } from './Router.js';
27
+ import { setDocTitle, closeModalRouteChangeEvent, handleModalViewRoute } from './Router.js';
28
28
  import { NotificationManager } from './NotificationManager.js';
29
29
  import { EventsUI } from './EventsUI.js';
30
30
  import { Translate } from './Translate.js';
@@ -126,19 +126,13 @@ const Modal = {
126
126
  };
127
127
  Responsive.Event[`view-${idModal}`]();
128
128
 
129
- // Router
130
- if (options.route)
131
- (() => {
132
- let path = window.location.pathname;
133
- if (path !== '/' && path[path.length - 1] === '/') path = path.slice(0, -1);
134
- const proxyPath = getProxyPath();
135
- const newPath = `${proxyPath}${options.route}`;
136
- if (path !== newPath) {
137
- // console.warn('SET MODAL URI', newPath);
138
- setPath(`${newPath}`); // ${location.search}
139
- setDocTitle({ ...options.RouterInstance, route: options.route });
140
- }
141
- })();
129
+ // Handle view mode modal route
130
+ if (options.route) {
131
+ handleModalViewRoute({
132
+ route: options.route,
133
+ RouterInstance: options.RouterInstance,
134
+ });
135
+ }
142
136
 
143
137
  break;
144
138
  case 'slide-menu':
@@ -249,8 +243,17 @@ const Modal = {
249
243
  style="top: ${options.heightTopBar + 50}px; z-index: 9; ${true ||
250
244
  (options.mode && options.mode.match('right'))
251
245
  ? 'right'
252
- : 'left'}: 50px; width: 50px; height: 100px; transition: .3s"
246
+ : 'left'}: 50px; width: 50px; height: 150px; transition: .3s"
253
247
  >
248
+ <div
249
+ class="abs main-body-btn main-body-btn-ui"
250
+ style="top: 0px; ${true || (options.mode && options.mode.match('right')) ? 'right' : 'left'}: 0px"
251
+ >
252
+ <div class="abs center">
253
+ <i class="fas fa-caret-down main-body-btn-ui-open hide"></i>
254
+ <i class="fas fa-caret-up main-body-btn-ui-close"></i>
255
+ </div>
256
+ </div>
254
257
  <div
255
258
  class="abs main-body-btn main-body-btn-menu"
256
259
  style="top: 50px; ${true || (options.mode && options.mode.match('right'))
@@ -263,15 +266,16 @@ const Modal = {
263
266
  </div>
264
267
  </div>
265
268
  <div
266
- class="abs main-body-btn main-body-btn-ui"
267
- style="top: 0px; ${true || (options.mode && options.mode.match('right')) ? 'right' : 'left'}: 0px"
269
+ class="abs main-body-btn main-body-btn-bar-custom ${options?.slideMenuTopBarFix ? '' : 'hide'}"
270
+ style="top: 100px; ${true || (options.mode && options.mode.match('right'))
271
+ ? 'right'
272
+ : 'left'}: 0px"
268
273
  >
269
274
  <div class="abs center">
270
- <i class="fas fa-caret-down main-body-btn-ui-open hide"></i>
271
- <i class="fas fa-caret-up main-body-btn-ui-close"></i>
275
+ <i class="fa-solid fa-magnifying-glass main-body-btn-ui-bar-custom-open"></i>
276
+ <i class="fa-solid fa-home hide main-body-btn-ui-bar-custom-close"></i>
272
277
  </div>
273
278
  </div>
274
- <div class="main-body-btn-container-custom"></div>
275
279
  </div>
276
280
  `,
277
281
  );
@@ -280,6 +284,22 @@ const Modal = {
280
284
  Modal.actionBtnCenter();
281
285
  };
282
286
 
287
+ s(`.main-body-btn-bar-custom`).onclick = () => {
288
+ if (s(`.main-body-btn-ui-close`).classList.contains('hide')) {
289
+ s(`.main-body-btn-ui`).click();
290
+ }
291
+ if (s(`.main-body-btn-ui-bar-custom-open`).classList.contains('hide')) {
292
+ s(`.main-body-btn-ui-bar-custom-open`).classList.remove('hide');
293
+ s(`.main-body-btn-ui-bar-custom-close`).classList.add('hide');
294
+ s(`.slide-menu-top-bar-fix`).style.top = '0px';
295
+ } else {
296
+ s(`.main-body-btn-ui-bar-custom-open`).classList.add('hide');
297
+ s(`.main-body-btn-ui-bar-custom-close`).classList.remove('hide');
298
+ s(`.slide-menu-top-bar-fix`).style.top = '-100px';
299
+ s(`.top-bar-search-box-container`).click();
300
+ }
301
+ };
302
+
283
303
  let _heightTopBar, _heightBottomBar, _topMenu;
284
304
  s(`.main-body-btn-ui`).onclick = () => {
285
305
  if (s(`.main-body-btn-ui-open`).classList.contains('hide')) {
@@ -410,7 +430,10 @@ const Modal = {
410
430
  </div>
411
431
  </div>
412
432
  ${options?.slideMenuTopBarFix
413
- ? html`<div class="abs modal slide-menu-top-bar-fix" style="height: ${options.heightTopBar}px">
433
+ ? html`<div
434
+ class="abs modal slide-menu-top-bar-fix"
435
+ style="height: ${options.heightTopBar}px; top: 0px"
436
+ >
414
437
  ${await options.slideMenuTopBarFix()}
415
438
  </div>`
416
439
  : ''}
@@ -604,7 +627,16 @@ const Modal = {
604
627
  Modal.removeModal(searchBoxHistoryId);
605
628
  return;
606
629
  }
607
- setTimeout(() => getResultSearchBox(validatorData));
630
+ setTimeout(() => {
631
+ getResultSearchBox(validatorData);
632
+
633
+ if (
634
+ s(`.slide-menu-top-bar-fix`) &&
635
+ !s(`.main-body-btn-ui-bar-custom-open`).classList.contains('hide')
636
+ ) {
637
+ s(`.main-body-btn-bar-custom`).click();
638
+ }
639
+ });
608
640
  };
609
641
 
610
642
  const getDefaultSearchBoxSelector = () => `.search-result-btn-${currentKeyBoardSearchBoxIndex}`;
@@ -890,6 +922,9 @@ const Modal = {
890
922
  ],
891
923
  eventCallBack: () => {
892
924
  if (s(`.top-bar-search-box`)) {
925
+ if (s(`.main-body-btn-ui-close`).classList.contains('hide')) {
926
+ s(`.main-body-btn-ui-open`).click();
927
+ }
893
928
  s(`.top-bar-search-box`).blur();
894
929
  s(`.top-bar-search-box`).focus();
895
930
  s(`.top-bar-search-box`).select();
@@ -1026,7 +1061,7 @@ const Modal = {
1026
1061
  await Modal.onHomeRouterEvent();
1027
1062
  Object.keys(this.Data[idModal].onHome).map((keyListener) => this.Data[idModal].onHome[keyListener]());
1028
1063
  });
1029
- EventsUI.onClick(`.action-btn-app-icon`, () => Modal.onHomeRouterEvent());
1064
+ EventsUI.onClick(`.action-btn-app-icon`, () => s(`.action-btn-home`).click());
1030
1065
  Keyboard.instanceMultiPressKey({
1031
1066
  id: 'input-shortcut-global-escape',
1032
1067
  keys: ['Escape'],
@@ -1089,12 +1124,13 @@ const Modal = {
1089
1124
  icon: html`<i class="fas fa-language mini-title"></i>`,
1090
1125
  text: Translate.Render('select lang'),
1091
1126
  })}`,
1092
- html: () => html``,
1127
+ html: async () => html`${await Translate.RenderSetting('action-drop-modal' + id)}`,
1093
1128
  titleClass: 'mini-title',
1094
1129
  style: {
1095
1130
  resize: 'none',
1096
- 'max-width': '300px',
1097
- height: '150px !important',
1131
+ width: '100% !important',
1132
+ height: '350px !important',
1133
+ 'max-width': '350px !important',
1098
1134
  'z-index': 7,
1099
1135
  },
1100
1136
  dragDisabled: true,
@@ -1435,7 +1471,8 @@ const Modal = {
1435
1471
  setDocTitle({ ...options.RouterInstance, route: '' });
1436
1472
  };
1437
1473
  s(`.main-btn-home`).onclick = async () => {
1438
- await this.onHomeRouterEvent();
1474
+ // await this.onHomeRouterEvent();
1475
+ s(`.action-btn-home`).click();
1439
1476
  };
1440
1477
  EventsUI.onClick(`.btn-icon-menu-back`, backMenuButtonEvent);
1441
1478
  EventsUI.onClick(`.btn-icon-menu-mode`, () => {
@@ -1652,27 +1689,14 @@ const Modal = {
1652
1689
  setTimeout(() => {
1653
1690
  if (!s(`.${idModal}`)) return;
1654
1691
  this.removeModal(idModal);
1655
- // Router
1656
- if (options.route)
1657
- (() => {
1658
- let path = window.location.pathname;
1659
- if (path[path.length - 1] !== '/') path = `${path}/`;
1660
- let newPath = `${getProxyPath()}`;
1661
- if (path !== newPath) {
1662
- for (const subIdModal of Object.keys(this.Data).reverse()) {
1663
- if (this.Data[subIdModal].options.route) {
1664
- newPath = `${newPath}${this.Data[subIdModal].options.route}`;
1665
- console.warn('------------> SET MODAL URI', newPath);
1666
- setPath(newPath);
1667
- this.setTopModalCallback(subIdModal);
1668
- return setDocTitle({ ...options.RouterInstance, route: this.Data[subIdModal].options.route });
1669
- }
1670
- }
1671
- console.warn('-------------> SET MODAL URI', newPath);
1672
- setPath(`${newPath}${Modal.homeCid ? `?cid=${Modal.homeCid}` : ''}`);
1673
- return setDocTitle({ ...options.RouterInstance, route: '' });
1674
- }
1675
- })();
1692
+ // Handle modal route change
1693
+ if (options.route) {
1694
+ closeModalRouteChangeEvent({
1695
+ route: options.route,
1696
+ RouterInstance: options.RouterInstance,
1697
+ homeCid: Modal.homeCid,
1698
+ });
1699
+ }
1676
1700
  }, 300);
1677
1701
  };
1678
1702
  s(`.btn-close-${idModal}`).onclick = btnCloseEvent;