@redneckz/wildless-cms-uni-blocks 0.14.774 → 0.14.776

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 (57) hide show
  1. package/bundle/bundle.umd.js +57 -31
  2. package/bundle/bundle.umd.min.js +1 -1
  3. package/bundle/components/Header/HeaderSecondaryMenuButton.d.ts +1 -0
  4. package/bundle/components/Header/useChatBot.d.ts +4 -1
  5. package/dist/components/Header/HeaderChatBotButton.js +2 -2
  6. package/dist/components/Header/HeaderChatBotButton.js.map +1 -1
  7. package/dist/components/Header/HeaderSecondaryMenuButton.d.ts +1 -0
  8. package/dist/components/Header/HeaderSecondaryMenuButton.js +3 -3
  9. package/dist/components/Header/HeaderSecondaryMenuButton.js.map +1 -1
  10. package/dist/components/Header/useChatBot.d.ts +4 -1
  11. package/dist/components/Header/useChatBot.js +38 -16
  12. package/dist/components/Header/useChatBot.js.map +1 -1
  13. package/dist/hooks/useExternalNS.js +13 -9
  14. package/dist/hooks/useExternalNS.js.map +1 -1
  15. package/lib/components/Header/HeaderChatBotButton.js +2 -2
  16. package/lib/components/Header/HeaderChatBotButton.js.map +1 -1
  17. package/lib/components/Header/HeaderSecondaryMenuButton.d.ts +1 -0
  18. package/lib/components/Header/HeaderSecondaryMenuButton.js +3 -3
  19. package/lib/components/Header/HeaderSecondaryMenuButton.js.map +1 -1
  20. package/lib/components/Header/useChatBot.d.ts +4 -1
  21. package/lib/components/Header/useChatBot.js +39 -17
  22. package/lib/components/Header/useChatBot.js.map +1 -1
  23. package/lib/hooks/useExternalNS.js +13 -9
  24. package/lib/hooks/useExternalNS.js.map +1 -1
  25. package/mobile/bundle/bundle.umd.js +6 -6
  26. package/mobile/bundle/bundle.umd.min.js +1 -1
  27. package/mobile/bundle/components/Header/HeaderSecondaryMenuButton.d.ts +1 -0
  28. package/mobile/bundle/components/Header/useChatBot.d.ts +4 -1
  29. package/mobile/dist/components/Header/HeaderChatBotButton.js +2 -2
  30. package/mobile/dist/components/Header/HeaderChatBotButton.js.map +1 -1
  31. package/mobile/dist/components/Header/HeaderSecondaryMenuButton.d.ts +1 -0
  32. package/mobile/dist/components/Header/HeaderSecondaryMenuButton.js +3 -3
  33. package/mobile/dist/components/Header/HeaderSecondaryMenuButton.js.map +1 -1
  34. package/mobile/dist/components/Header/useChatBot.d.ts +4 -1
  35. package/mobile/dist/components/Header/useChatBot.js +38 -16
  36. package/mobile/dist/components/Header/useChatBot.js.map +1 -1
  37. package/mobile/dist/hooks/useExternalNS.js +13 -9
  38. package/mobile/dist/hooks/useExternalNS.js.map +1 -1
  39. package/mobile/lib/components/Header/HeaderChatBotButton.js +2 -2
  40. package/mobile/lib/components/Header/HeaderChatBotButton.js.map +1 -1
  41. package/mobile/lib/components/Header/HeaderSecondaryMenuButton.d.ts +1 -0
  42. package/mobile/lib/components/Header/HeaderSecondaryMenuButton.js +3 -3
  43. package/mobile/lib/components/Header/HeaderSecondaryMenuButton.js.map +1 -1
  44. package/mobile/lib/components/Header/useChatBot.d.ts +4 -1
  45. package/mobile/lib/components/Header/useChatBot.js +39 -17
  46. package/mobile/lib/components/Header/useChatBot.js.map +1 -1
  47. package/mobile/lib/hooks/useExternalNS.js +13 -9
  48. package/mobile/lib/hooks/useExternalNS.js.map +1 -1
  49. package/mobile/src/components/Header/HeaderChatBotButton.tsx +2 -1
  50. package/mobile/src/components/Header/HeaderSecondaryMenuButton.tsx +13 -7
  51. package/mobile/src/components/Header/useChatBot.ts +58 -26
  52. package/mobile/src/hooks/useExternalNS.ts +14 -9
  53. package/package.json +1 -1
  54. package/src/components/Header/HeaderChatBotButton.tsx +2 -1
  55. package/src/components/Header/HeaderSecondaryMenuButton.tsx +13 -7
  56. package/src/components/Header/useChatBot.ts +58 -26
  57. package/src/hooks/useExternalNS.ts +14 -9
@@ -11,5 +11,6 @@ export interface HeaderSecondaryMenuButtonProps extends ImageContent, AspectsPro
11
11
  ariaLabel?: string;
12
12
  onClick?: (ev: PreventableEventWithTarget) => void;
13
13
  version?: BlockVersion;
14
+ isLoading?: boolean;
14
15
  }
15
16
  export declare const HeaderSecondaryMenuButton: import("@redneckz/uni-jsx").UNIComponent<HeaderSecondaryMenuButtonProps, any, any>;
@@ -1,2 +1,5 @@
1
1
  import { type PreventableEventWithTarget } from '../../ui-kit/PreventableEvent';
2
- export declare const useChatBot: (chat?: string) => (ev: PreventableEventWithTarget) => Promise<void>;
2
+ export declare const useChatBot: (chat?: string) => {
3
+ load: (ev: PreventableEventWithTarget) => void;
4
+ isLoading: boolean;
5
+ };
@@ -5,7 +5,7 @@ const uni_jsx_1 = require("@redneckz/uni-jsx");
5
5
  const HeaderSecondaryMenuButton_1 = require("./HeaderSecondaryMenuButton");
6
6
  const useChatBot_1 = require("./useChatBot");
7
7
  exports.HeaderChatBotButton = (0, uni_jsx_1.JSX)(({ chat = 'personal', iconVersion, className, ariaLabel = 'Чат', version }) => {
8
- const load = (0, useChatBot_1.useChatBot)(chat);
9
- return ((0, jsx_runtime_1.jsx)(HeaderSecondaryMenuButton_1.HeaderSecondaryMenuButton, { className: className, image: { icon: 'HeadphonesIcon', iconVersion }, ariaLabel: ariaLabel, onClick: load, buttonSize: "large", isGrayBg: true, version: version }));
8
+ const { load, isLoading } = (0, useChatBot_1.useChatBot)(chat);
9
+ return ((0, jsx_runtime_1.jsx)(HeaderSecondaryMenuButton_1.HeaderSecondaryMenuButton, { className: className, image: { icon: 'HeadphonesIcon', iconVersion }, ariaLabel: ariaLabel, onClick: load, buttonSize: "large", isGrayBg: true, version: version, isLoading: isLoading }));
10
10
  });
11
11
  //# sourceMappingURL=HeaderChatBotButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderChatBotButton.js","sourceRoot":"","sources":["../../../src/components/Header/HeaderChatBotButton.tsx"],"names":[],"mappings":";;;AAAA,+CAAwC;AAIxC,2EAAwE;AACxE,6CAA0C;AAW7B,QAAA,mBAAmB,GAAG,IAAA,aAAG,EACpC,CAAC,EAAE,IAAI,GAAG,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;IAC5E,MAAM,IAAI,GAAG,IAAA,uBAAU,EAAC,IAAI,CAAC,CAAC;IAE9B,OAAO,CACL,uBAAC,qDAAyB,IACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAC9C,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,IAAI,EACb,UAAU,EAAC,OAAO,EAClB,QAAQ,EAAE,IAAI,EACd,OAAO,EAAE,OAAO,GAChB,CACH,CAAC;AACJ,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"HeaderChatBotButton.js","sourceRoot":"","sources":["../../../src/components/Header/HeaderChatBotButton.tsx"],"names":[],"mappings":";;;AAAA,+CAAwC;AAIxC,2EAAwE;AACxE,6CAA0C;AAW7B,QAAA,mBAAmB,GAAG,IAAA,aAAG,EACpC,CAAC,EAAE,IAAI,GAAG,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;IAC5E,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAA,uBAAU,EAAC,IAAI,CAAC,CAAC;IAE7C,OAAO,CACL,uBAAC,qDAAyB,IACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAC9C,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,IAAI,EACb,UAAU,EAAC,OAAO,EAClB,QAAQ,EAAE,IAAI,EACd,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,GACpB,CACH,CAAC;AACJ,CAAC,CACF,CAAC"}
@@ -11,5 +11,6 @@ export interface HeaderSecondaryMenuButtonProps extends ImageContent, AspectsPro
11
11
  ariaLabel?: string;
12
12
  onClick?: (ev: PreventableEventWithTarget) => void;
13
13
  version?: BlockVersion;
14
+ isLoading?: boolean;
14
15
  }
15
16
  export declare const HeaderSecondaryMenuButton: import("@redneckz/uni-jsx").UNIComponent<HeaderSecondaryMenuButtonProps, any, any>;
@@ -9,13 +9,13 @@ const BUTTON_SIZE_STYLE = {
9
9
  default: 'w-6 h-6',
10
10
  large: 'w-12 h-12',
11
11
  };
12
- exports.HeaderSecondaryMenuButton = (0, uni_jsx_1.JSX)(({ className, isRounded, buttonSize = 'default', isGrayBg = false, disabled, ariaLabel = 'Меню второго уровня', image, data, onClick, version, }) => {
12
+ exports.HeaderSecondaryMenuButton = (0, uni_jsx_1.JSX)(({ className, isRounded, buttonSize = 'default', isGrayBg = false, disabled, ariaLabel = 'Меню второго уровня', image, data, onClick, version, isLoading, }) => {
13
13
  const grayBg = isGrayBg && !isRounded ? 'bg-main-divider' : '';
14
14
  const bgColor = version === 'transparent' ? 'backdrop-opacity-30 bg-white/30' : grayBg;
15
15
  return ((0, jsx_runtime_1.jsx)("button", { className: (0, style_1.style)('group/btn border-0 flex shrink-0 items-center', isGrayBg ? 'p-s rounded-full' : 'p-0 bg-inherit', bgColor, isRounded
16
16
  ? 'w-8 h-8 text-secondary-light hover:text-secondary-hove'
17
- : `${BUTTON_SIZE_STYLE[buttonSize]} text-primary-text hover:text-primary-main`, 'group-data-transparent:text-white', className), type: "button", disabled: disabled, "aria-label": ariaLabel, onClick: onClick, ...(0, dataAttributes_1.getAspectsAttributes)(data), children: (0, jsx_runtime_1.jsx)(Img_1.Img, { image: image, className: (0, style_1.style)('h-full', {
17
+ : `${BUTTON_SIZE_STYLE[buttonSize]} text-primary-text hover:text-primary-main`, 'group-data-transparent:text-white', className), type: "button", disabled: disabled, "aria-label": ariaLabel, onClick: onClick, ...(0, dataAttributes_1.getAspectsAttributes)(data), children: isLoading ? ((0, jsx_runtime_1.jsx)("div", { className: "w-full h-full rounded-full border-4 border-r-transparent animate-spin text-primary-main" })) : ((0, jsx_runtime_1.jsx)(Img_1.Img, { image: image, className: (0, style_1.style)('h-full', {
18
18
  'bg-main-divider/20 rounded-full': isRounded,
19
- }), imageClassName: "group-hover/btn:text-primary-hover group-hover/btn:invert-0" }) }));
19
+ }), imageClassName: "group-hover/btn:text-primary-hover group-hover/btn:invert-0" })) }));
20
20
  });
21
21
  //# sourceMappingURL=HeaderSecondaryMenuButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderSecondaryMenuButton.js","sourceRoot":"","sources":["../../../src/components/Header/HeaderSecondaryMenuButton.tsx"],"names":[],"mappings":";;;AAAA,+CAAwC;AAGxC,8CAA2C;AAG3C,+DAAkE;AAClE,6CAA0C;AAa1C,MAAM,iBAAiB,GAAG;IACxB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,WAAW;CACnB,CAAC;AAEW,QAAA,yBAAyB,GAAG,IAAA,aAAG,EAC1C,CAAC,EACC,SAAS,EACT,SAAS,EACT,UAAU,GAAG,SAAS,EACtB,QAAQ,GAAG,KAAK,EAChB,QAAQ,EACR,SAAS,GAAG,qBAAqB,EACjC,KAAK,EACL,IAAI,EACJ,OAAO,EACP,OAAO,GACR,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,MAAM,OAAO,GAAG,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEvF,OAAO,CACL,mCACE,SAAS,EAAE,IAAA,aAAK,EACd,+CAA+C,EAC/C,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,gBAAgB,EAChD,OAAO,EACP,SAAS;YACP,CAAC,CAAC,wDAAwD;YAC1D,CAAC,CAAC,GAAG,iBAAiB,CAAC,UAAU,CAAC,4CAA4C,EAChF,mCAAmC,EACnC,SAAS,CACV,EACD,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,QAAQ,gBACN,SAAS,EACrB,OAAO,EAAE,OAAO,KAEZ,IAAA,qCAAoB,EAAC,IAAI,CAAC,YAE9B,uBAAC,SAAG,IACF,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,IAAA,aAAK,EAAC,QAAQ,EAAE;gBACzB,iCAAiC,EAAE,SAAS;aAC7C,CAAC,EACF,cAAc,EAAC,6DAA6D,GAC5E,GACK,CACV,CAAC;AACJ,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"HeaderSecondaryMenuButton.js","sourceRoot":"","sources":["../../../src/components/Header/HeaderSecondaryMenuButton.tsx"],"names":[],"mappings":";;;AAAA,+CAAwC;AAGxC,8CAA2C;AAG3C,+DAAkE;AAClE,6CAA0C;AAc1C,MAAM,iBAAiB,GAAG;IACxB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,WAAW;CACnB,CAAC;AAEW,QAAA,yBAAyB,GAAG,IAAA,aAAG,EAC1C,CAAC,EACC,SAAS,EACT,SAAS,EACT,UAAU,GAAG,SAAS,EACtB,QAAQ,GAAG,KAAK,EAChB,QAAQ,EACR,SAAS,GAAG,qBAAqB,EACjC,KAAK,EACL,IAAI,EACJ,OAAO,EACP,OAAO,EACP,SAAS,GACV,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,MAAM,OAAO,GAAG,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEvF,OAAO,CACL,mCACE,SAAS,EAAE,IAAA,aAAK,EACd,+CAA+C,EAC/C,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,gBAAgB,EAChD,OAAO,EACP,SAAS;YACP,CAAC,CAAC,wDAAwD;YAC1D,CAAC,CAAC,GAAG,iBAAiB,CAAC,UAAU,CAAC,4CAA4C,EAChF,mCAAmC,EACnC,SAAS,CACV,EACD,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,QAAQ,gBACN,SAAS,EACrB,OAAO,EAAE,OAAO,KAEZ,IAAA,qCAAoB,EAAC,IAAI,CAAC,YAE7B,SAAS,CAAC,CAAC,CAAC,CACX,gCAAK,SAAS,EAAC,yFAAyF,GAAG,CAC5G,CAAC,CAAC,CAAC,CACF,uBAAC,SAAG,IACF,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,IAAA,aAAK,EAAC,QAAQ,EAAE;gBACzB,iCAAiC,EAAE,SAAS;aAC7C,CAAC,EACF,cAAc,EAAC,6DAA6D,GAC5E,CACH,GACM,CACV,CAAC;AACJ,CAAC,CACF,CAAC"}
@@ -1,2 +1,5 @@
1
1
  import { type PreventableEventWithTarget } from '../../ui-kit/PreventableEvent';
2
- export declare const useChatBot: (chat?: string) => (ev: PreventableEventWithTarget) => Promise<void>;
2
+ export declare const useChatBot: (chat?: string) => {
3
+ load: (ev: PreventableEventWithTarget) => void;
4
+ isLoading: boolean;
5
+ };
@@ -11,30 +11,52 @@ const CHATBOT_URL = {
11
11
  business: '/webchat',
12
12
  };
13
13
  const useChatBot = (chat) => {
14
+ const [isLoading, setIsLoading] = (0, hooks_1.useState)(false);
14
15
  (0, hooks_1.useEffect)(() => globalThis.localStorage?.setItem(CHAT_STORAGE_NAME, String(Date.now())), []);
15
16
  const chatUrl = CHATBOT_URL[chat ?? ''];
16
- return async (ev) => {
17
+ const load = (0, hooks_1.useCallback)((ev) => {
17
18
  if (!chatUrl) {
18
19
  return;
19
20
  }
20
- if (chat !== 'personal') {
21
- (0, useExternalNS_1.initializeExternalStylesheet)(`${chatUrl}/bundle.css`);
22
- const businessChat = (await (0, useExternalNS_1.initializeExternalNS)(CHAT_NAMESPACE, `${chatUrl}/bundle.js`, true));
23
- if (businessChat?.render) {
24
- businessChat.render(CHAT_FRAME_ID, true);
25
- }
21
+ setIsLoading(true);
22
+ if (chat === 'business') {
23
+ renderBusinessChatBot(chatUrl).finally(() => setIsLoading(false));
26
24
  }
27
25
  else {
28
- const target = ev.target;
29
- if (!target?.classList.contains(CHAT_BUTTON_EXTERNAL_NAME)) {
30
- target?.classList.add(CHAT_BUTTON_EXTERNAL_NAME);
31
- }
32
- const chatFrame = document.getElementById(CHAT_FRAME_ID);
33
- if (!chatFrame) {
34
- (0, useExternalNS_1.initializeExternalNS)(CHAT_NAMESPACE, chatUrl);
35
- }
26
+ renderPersonalChatBot(ev, chatUrl).finally(() => setIsLoading(false));
36
27
  }
37
- };
28
+ }, [chatUrl, chat]);
29
+ return { load, isLoading };
38
30
  };
39
31
  exports.useChatBot = useChatBot;
32
+ const renderPersonalChatBot = async (ev, chatUrl) => {
33
+ const target = ev.target;
34
+ if (!target?.classList.contains(CHAT_BUTTON_EXTERNAL_NAME)) {
35
+ target?.classList.add(CHAT_BUTTON_EXTERNAL_NAME);
36
+ }
37
+ const chatFrame = globalThis.document.getElementById(CHAT_FRAME_ID);
38
+ if (!chatFrame) {
39
+ await (0, useExternalNS_1.initializeExternalNS)(CHAT_NAMESPACE, chatUrl);
40
+ }
41
+ };
42
+ const renderBusinessChatBot = async (chatUrl) => {
43
+ const businessChat = (await (0, useExternalNS_1.initializeExternalNS)(CHAT_NAMESPACE, `${chatUrl}/bundle.js`, true));
44
+ (0, useExternalNS_1.initializeExternalStylesheet)(`${chatUrl}/bundle.css`);
45
+ const chatFrame = globalThis.document.getElementById(CHAT_FRAME_ID);
46
+ if (chatFrame) {
47
+ businessChat?.chatOpen?.();
48
+ }
49
+ else {
50
+ createChatFrame();
51
+ businessChat?.render?.(CHAT_FRAME_ID, true);
52
+ }
53
+ };
54
+ const createChatFrame = () => {
55
+ const chatFrame = globalThis.document.createElement('div');
56
+ chatFrame.id = CHAT_FRAME_ID;
57
+ chatFrame.style.position = 'fixed';
58
+ chatFrame.style.right = '0';
59
+ chatFrame.style.bottom = '0';
60
+ globalThis.document.body.appendChild(chatFrame);
61
+ };
40
62
  //# sourceMappingURL=useChatBot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useChatBot.js","sourceRoot":"","sources":["../../../src/components/Header/useChatBot.ts"],"names":[],"mappings":";;AAAA,uDAAwD;AACxD,6DAA+F;AAG/F,MAAM,cAAc,GAAG,SAAS,CAAC;AACjC,MAAM,yBAAyB,GAAG,qBAAqB,CAAC;AACxD,MAAM,aAAa,GAAG,mCAAmC,CAAC;AAC1D,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAE9C,MAAM,WAAW,GAA2B;IAC1C,QAAQ,EAAE,2CAA2C;IACrD,QAAQ,EAAE,UAAU;CACrB,CAAC;AAOK,MAAM,UAAU,GAAG,CAAC,IAAa,EAAE,EAAE;IAC1C,IAAA,iBAAS,EAAC,GAAG,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7F,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAExC,OAAO,KAAK,EAAE,EAA8B,EAAE,EAAE;QAC9C,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO;SACR;QAED,IAAI,IAAI,KAAK,UAAU,EAAE;YACvB,IAAA,4CAA4B,EAAC,GAAG,OAAO,aAAa,CAAC,CAAC;YAEtD,MAAM,YAAY,GAAG,CAAC,MAAM,IAAA,oCAAoB,EAC9C,cAAc,EACd,GAAG,OAAO,YAAY,EACtB,IAAI,CACL,CAAY,CAAC;YAEd,IAAI,YAAY,EAAE,MAAM,EAAE;gBACxB,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;aAC1C;SACF;aAAM;YACL,MAAM,MAAM,GAAG,EAAE,CAAC,MAAqB,CAAC;YAExC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE;gBAC1D,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;aAClD;YAED,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YACzD,IAAI,CAAC,SAAS,EAAE;gBACd,IAAA,oCAAoB,EAAC,cAAc,EAAE,OAAO,CAAC,CAAC;aAC/C;SACF;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAlCW,QAAA,UAAU,cAkCrB"}
1
+ {"version":3,"file":"useChatBot.js","sourceRoot":"","sources":["../../../src/components/Header/useChatBot.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ const hooks_1 = require("@redneckz/uni-jsx/lib/hooks");
4
4
  const getNS = (_) => globalThis[_];
5
5
  exports.getNS = getNS;
6
6
  const initializeExternalNS = (namespaceName, url, isModule = false) => {
7
- const script = document.getElementById(url);
7
+ const script = globalThis.document.getElementById(url);
8
8
  if (script) {
9
9
  const ns = (0, exports.getNS)(namespaceName);
10
10
  if (ns) {
@@ -20,7 +20,7 @@ const initializeExternalNS = (namespaceName, url, isModule = false) => {
20
20
  }
21
21
  else {
22
22
  return new Promise((resolve, reject) => {
23
- const newScript = document.createElement('script');
23
+ const newScript = globalThis.document.createElement('script');
24
24
  newScript.src = url;
25
25
  newScript.async = true;
26
26
  newScript.id = url;
@@ -33,16 +33,20 @@ const initializeExternalNS = (namespaceName, url, isModule = false) => {
33
33
  newScript.addEventListener('error', (error) => {
34
34
  reject(error);
35
35
  });
36
- document.head.appendChild(newScript);
36
+ globalThis.document.head.appendChild(newScript);
37
37
  });
38
38
  }
39
39
  };
40
40
  exports.initializeExternalNS = initializeExternalNS;
41
41
  const initializeExternalStylesheet = (url = '') => {
42
- const link = document.createElement('link');
43
- link.href = url;
44
- link.rel = 'stylesheet';
45
- document.head.appendChild(link);
42
+ const link = globalThis.document.getElementById(url);
43
+ if (!link) {
44
+ const newLink = globalThis.document.createElement('link');
45
+ newLink.href = url;
46
+ newLink.id = url;
47
+ newLink.rel = 'stylesheet';
48
+ globalThis.document.head.appendChild(newLink);
49
+ }
46
50
  };
47
51
  exports.initializeExternalStylesheet = initializeExternalStylesheet;
48
52
  function useExternalNS(namespaceName, url, unmountNS = true) {
@@ -61,9 +65,9 @@ function useExternalNS(namespaceName, url, unmountNS = true) {
61
65
  return () => {
62
66
  isMounted = false;
63
67
  if (unmountNS) {
64
- const script = document.getElementById(url);
68
+ const script = globalThis.document.getElementById(url);
65
69
  if (script) {
66
- document.head.removeChild(script);
70
+ globalThis.document.head.removeChild(script);
67
71
  }
68
72
  setExternalNS(undefined);
69
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useExternalNS.js","sourceRoot":"","sources":["../../src/hooks/useExternalNS.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useExternalNS.js","sourceRoot":"","sources":["../../src/hooks/useExternalNS.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { JSX } from '@redneckz/uni-jsx';
3
3
  import { HeaderSecondaryMenuButton } from './HeaderSecondaryMenuButton.js';
4
4
  import { useChatBot } from './useChatBot.js';
5
5
  export const HeaderChatBotButton = JSX(({ chat = 'personal', iconVersion, className, ariaLabel = 'Чат', version }) => {
6
- const load = useChatBot(chat);
7
- return (_jsx(HeaderSecondaryMenuButton, { className: className, image: { icon: 'HeadphonesIcon', iconVersion }, ariaLabel: ariaLabel, onClick: load, buttonSize: "large", isGrayBg: true, version: version }));
6
+ const { load, isLoading } = useChatBot(chat);
7
+ return (_jsx(HeaderSecondaryMenuButton, { className: className, image: { icon: 'HeadphonesIcon', iconVersion }, ariaLabel: ariaLabel, onClick: load, buttonSize: "large", isGrayBg: true, version: version, isLoading: isLoading }));
8
8
  });
9
9
  //# sourceMappingURL=HeaderChatBotButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderChatBotButton.js","sourceRoot":"","sources":["../../../src/components/Header/HeaderChatBotButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAIxC,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAW1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CACpC,CAAC,EAAE,IAAI,GAAG,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;IAC5E,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAE9B,OAAO,CACL,KAAC,yBAAyB,IACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAC9C,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,IAAI,EACb,UAAU,EAAC,OAAO,EAClB,QAAQ,EAAE,IAAI,EACd,OAAO,EAAE,OAAO,GAChB,CACH,CAAC;AACJ,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"HeaderChatBotButton.js","sourceRoot":"","sources":["../../../src/components/Header/HeaderChatBotButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAIxC,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAW1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CACpC,CAAC,EAAE,IAAI,GAAG,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;IAC5E,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAE7C,OAAO,CACL,KAAC,yBAAyB,IACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAC9C,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,IAAI,EACb,UAAU,EAAC,OAAO,EAClB,QAAQ,EAAE,IAAI,EACd,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,GACpB,CACH,CAAC;AACJ,CAAC,CACF,CAAC"}
@@ -11,5 +11,6 @@ export interface HeaderSecondaryMenuButtonProps extends ImageContent, AspectsPro
11
11
  ariaLabel?: string;
12
12
  onClick?: (ev: PreventableEventWithTarget) => void;
13
13
  version?: BlockVersion;
14
+ isLoading?: boolean;
14
15
  }
15
16
  export declare const HeaderSecondaryMenuButton: import("@redneckz/uni-jsx").UNIComponent<HeaderSecondaryMenuButtonProps, any, any>;
@@ -7,13 +7,13 @@ const BUTTON_SIZE_STYLE = {
7
7
  default: 'w-6 h-6',
8
8
  large: 'w-12 h-12',
9
9
  };
10
- export const HeaderSecondaryMenuButton = JSX(({ className, isRounded, buttonSize = 'default', isGrayBg = false, disabled, ariaLabel = 'Меню второго уровня', image, data, onClick, version, }) => {
10
+ export const HeaderSecondaryMenuButton = JSX(({ className, isRounded, buttonSize = 'default', isGrayBg = false, disabled, ariaLabel = 'Меню второго уровня', image, data, onClick, version, isLoading, }) => {
11
11
  const grayBg = isGrayBg && !isRounded ? 'bg-main-divider' : '';
12
12
  const bgColor = version === 'transparent' ? 'backdrop-opacity-30 bg-white/30' : grayBg;
13
13
  return (_jsx("button", { className: style('group/btn border-0 flex shrink-0 items-center', isGrayBg ? 'p-s rounded-full' : 'p-0 bg-inherit', bgColor, isRounded
14
14
  ? 'w-8 h-8 text-secondary-light hover:text-secondary-hove'
15
- : `${BUTTON_SIZE_STYLE[buttonSize]} text-primary-text hover:text-primary-main`, 'group-data-transparent:text-white', className), type: "button", disabled: disabled, "aria-label": ariaLabel, onClick: onClick, ...getAspectsAttributes(data), children: _jsx(Img, { image: image, className: style('h-full', {
15
+ : `${BUTTON_SIZE_STYLE[buttonSize]} text-primary-text hover:text-primary-main`, 'group-data-transparent:text-white', className), type: "button", disabled: disabled, "aria-label": ariaLabel, onClick: onClick, ...getAspectsAttributes(data), children: isLoading ? (_jsx("div", { className: "w-full h-full rounded-full border-4 border-r-transparent animate-spin text-primary-main" })) : (_jsx(Img, { image: image, className: style('h-full', {
16
16
  'bg-main-divider/20 rounded-full': isRounded,
17
- }), imageClassName: "group-hover/btn:text-primary-hover group-hover/btn:invert-0" }) }));
17
+ }), imageClassName: "group-hover/btn:text-primary-hover group-hover/btn:invert-0" })) }));
18
18
  });
19
19
  //# sourceMappingURL=HeaderSecondaryMenuButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderSecondaryMenuButton.js","sourceRoot":"","sources":["../../../src/components/Header/HeaderSecondaryMenuButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAGxC,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAG3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAa1C,MAAM,iBAAiB,GAAG;IACxB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,WAAW;CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAC1C,CAAC,EACC,SAAS,EACT,SAAS,EACT,UAAU,GAAG,SAAS,EACtB,QAAQ,GAAG,KAAK,EAChB,QAAQ,EACR,SAAS,GAAG,qBAAqB,EACjC,KAAK,EACL,IAAI,EACJ,OAAO,EACP,OAAO,GACR,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,MAAM,OAAO,GAAG,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEvF,OAAO,CACL,iBACE,SAAS,EAAE,KAAK,CACd,+CAA+C,EAC/C,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,gBAAgB,EAChD,OAAO,EACP,SAAS;YACP,CAAC,CAAC,wDAAwD;YAC1D,CAAC,CAAC,GAAG,iBAAiB,CAAC,UAAU,CAAC,4CAA4C,EAChF,mCAAmC,EACnC,SAAS,CACV,EACD,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,QAAQ,gBACN,SAAS,EACrB,OAAO,EAAE,OAAO,KAEZ,oBAAoB,CAAC,IAAI,CAAC,YAE9B,KAAC,GAAG,IACF,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE;gBACzB,iCAAiC,EAAE,SAAS;aAC7C,CAAC,EACF,cAAc,EAAC,6DAA6D,GAC5E,GACK,CACV,CAAC;AACJ,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"HeaderSecondaryMenuButton.js","sourceRoot":"","sources":["../../../src/components/Header/HeaderSecondaryMenuButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAGxC,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAG3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAc1C,MAAM,iBAAiB,GAAG;IACxB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,WAAW;CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAC1C,CAAC,EACC,SAAS,EACT,SAAS,EACT,UAAU,GAAG,SAAS,EACtB,QAAQ,GAAG,KAAK,EAChB,QAAQ,EACR,SAAS,GAAG,qBAAqB,EACjC,KAAK,EACL,IAAI,EACJ,OAAO,EACP,OAAO,EACP,SAAS,GACV,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,MAAM,OAAO,GAAG,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEvF,OAAO,CACL,iBACE,SAAS,EAAE,KAAK,CACd,+CAA+C,EAC/C,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,gBAAgB,EAChD,OAAO,EACP,SAAS;YACP,CAAC,CAAC,wDAAwD;YAC1D,CAAC,CAAC,GAAG,iBAAiB,CAAC,UAAU,CAAC,4CAA4C,EAChF,mCAAmC,EACnC,SAAS,CACV,EACD,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,QAAQ,gBACN,SAAS,EACrB,OAAO,EAAE,OAAO,KAEZ,oBAAoB,CAAC,IAAI,CAAC,YAE7B,SAAS,CAAC,CAAC,CAAC,CACX,cAAK,SAAS,EAAC,yFAAyF,GAAG,CAC5G,CAAC,CAAC,CAAC,CACF,KAAC,GAAG,IACF,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE;gBACzB,iCAAiC,EAAE,SAAS;aAC7C,CAAC,EACF,cAAc,EAAC,6DAA6D,GAC5E,CACH,GACM,CACV,CAAC;AACJ,CAAC,CACF,CAAC"}
@@ -1,2 +1,5 @@
1
1
  import { type PreventableEventWithTarget } from '../../ui-kit/PreventableEvent';
2
- export declare const useChatBot: (chat?: string) => (ev: PreventableEventWithTarget) => Promise<void>;
2
+ export declare const useChatBot: (chat?: string) => {
3
+ load: (ev: PreventableEventWithTarget) => void;
4
+ isLoading: boolean;
5
+ };
@@ -1,4 +1,4 @@
1
- import { useEffect } from '@redneckz/uni-jsx/lib/hooks';
1
+ import { useCallback, useEffect, useState } from '@redneckz/uni-jsx/lib/hooks';
2
2
  import { initializeExternalNS, initializeExternalStylesheet } from '../../hooks/useExternalNS.js';
3
3
  const CHAT_NAMESPACE = 'chatbot';
4
4
  const CHAT_BUTTON_EXTERNAL_NAME = 'text-page__btn-chat';
@@ -9,29 +9,51 @@ const CHATBOT_URL = {
9
9
  business: '/webchat',
10
10
  };
11
11
  export const useChatBot = (chat) => {
12
+ const [isLoading, setIsLoading] = useState(false);
12
13
  useEffect(() => globalThis.localStorage?.setItem(CHAT_STORAGE_NAME, String(Date.now())), []);
13
14
  const chatUrl = CHATBOT_URL[chat ?? ''];
14
- return async (ev) => {
15
+ const load = useCallback((ev) => {
15
16
  if (!chatUrl) {
16
17
  return;
17
18
  }
18
- if (chat !== 'personal') {
19
- initializeExternalStylesheet(`${chatUrl}/bundle.css`);
20
- const businessChat = (await initializeExternalNS(CHAT_NAMESPACE, `${chatUrl}/bundle.js`, true));
21
- if (businessChat?.render) {
22
- businessChat.render(CHAT_FRAME_ID, true);
23
- }
19
+ setIsLoading(true);
20
+ if (chat === 'business') {
21
+ renderBusinessChatBot(chatUrl).finally(() => setIsLoading(false));
24
22
  }
25
23
  else {
26
- const target = ev.target;
27
- if (!target?.classList.contains(CHAT_BUTTON_EXTERNAL_NAME)) {
28
- target?.classList.add(CHAT_BUTTON_EXTERNAL_NAME);
29
- }
30
- const chatFrame = document.getElementById(CHAT_FRAME_ID);
31
- if (!chatFrame) {
32
- initializeExternalNS(CHAT_NAMESPACE, chatUrl);
33
- }
24
+ renderPersonalChatBot(ev, chatUrl).finally(() => setIsLoading(false));
34
25
  }
35
- };
26
+ }, [chatUrl, chat]);
27
+ return { load, isLoading };
28
+ };
29
+ const renderPersonalChatBot = async (ev, chatUrl) => {
30
+ const target = ev.target;
31
+ if (!target?.classList.contains(CHAT_BUTTON_EXTERNAL_NAME)) {
32
+ target?.classList.add(CHAT_BUTTON_EXTERNAL_NAME);
33
+ }
34
+ const chatFrame = globalThis.document.getElementById(CHAT_FRAME_ID);
35
+ if (!chatFrame) {
36
+ await initializeExternalNS(CHAT_NAMESPACE, chatUrl);
37
+ }
38
+ };
39
+ const renderBusinessChatBot = async (chatUrl) => {
40
+ const businessChat = (await initializeExternalNS(CHAT_NAMESPACE, `${chatUrl}/bundle.js`, true));
41
+ initializeExternalStylesheet(`${chatUrl}/bundle.css`);
42
+ const chatFrame = globalThis.document.getElementById(CHAT_FRAME_ID);
43
+ if (chatFrame) {
44
+ businessChat?.chatOpen?.();
45
+ }
46
+ else {
47
+ createChatFrame();
48
+ businessChat?.render?.(CHAT_FRAME_ID, true);
49
+ }
50
+ };
51
+ const createChatFrame = () => {
52
+ const chatFrame = globalThis.document.createElement('div');
53
+ chatFrame.id = CHAT_FRAME_ID;
54
+ chatFrame.style.position = 'fixed';
55
+ chatFrame.style.right = '0';
56
+ chatFrame.style.bottom = '0';
57
+ globalThis.document.body.appendChild(chatFrame);
36
58
  };
37
59
  //# sourceMappingURL=useChatBot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useChatBot.js","sourceRoot":"","sources":["../../../src/components/Header/useChatBot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAG/F,MAAM,cAAc,GAAG,SAAS,CAAC;AACjC,MAAM,yBAAyB,GAAG,qBAAqB,CAAC;AACxD,MAAM,aAAa,GAAG,mCAAmC,CAAC;AAC1D,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAE9C,MAAM,WAAW,GAA2B;IAC1C,QAAQ,EAAE,2CAA2C;IACrD,QAAQ,EAAE,UAAU;CACrB,CAAC;AAOF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAa,EAAE,EAAE;IAC1C,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7F,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAExC,OAAO,KAAK,EAAE,EAA8B,EAAE,EAAE;QAC9C,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO;SACR;QAED,IAAI,IAAI,KAAK,UAAU,EAAE;YACvB,4BAA4B,CAAC,GAAG,OAAO,aAAa,CAAC,CAAC;YAEtD,MAAM,YAAY,GAAG,CAAC,MAAM,oBAAoB,CAC9C,cAAc,EACd,GAAG,OAAO,YAAY,EACtB,IAAI,CACL,CAAY,CAAC;YAEd,IAAI,YAAY,EAAE,MAAM,EAAE;gBACxB,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;aAC1C;SACF;aAAM;YACL,MAAM,MAAM,GAAG,EAAE,CAAC,MAAqB,CAAC;YAExC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE;gBAC1D,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;aAClD;YAED,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YACzD,IAAI,CAAC,SAAS,EAAE;gBACd,oBAAoB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;aAC/C;SACF;IACH,CAAC,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"useChatBot.js","sourceRoot":"","sources":["../../../src/components/Header/useChatBot.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { useEffect, useState } from '@redneckz/uni-jsx/lib/hooks';
2
2
  export const getNS = (_) => globalThis[_];
3
3
  export const initializeExternalNS = (namespaceName, url, isModule = false) => {
4
- const script = document.getElementById(url);
4
+ const script = globalThis.document.getElementById(url);
5
5
  if (script) {
6
6
  const ns = getNS(namespaceName);
7
7
  if (ns) {
@@ -17,7 +17,7 @@ export const initializeExternalNS = (namespaceName, url, isModule = false) => {
17
17
  }
18
18
  else {
19
19
  return new Promise((resolve, reject) => {
20
- const newScript = document.createElement('script');
20
+ const newScript = globalThis.document.createElement('script');
21
21
  newScript.src = url;
22
22
  newScript.async = true;
23
23
  newScript.id = url;
@@ -30,15 +30,19 @@ export const initializeExternalNS = (namespaceName, url, isModule = false) => {
30
30
  newScript.addEventListener('error', (error) => {
31
31
  reject(error);
32
32
  });
33
- document.head.appendChild(newScript);
33
+ globalThis.document.head.appendChild(newScript);
34
34
  });
35
35
  }
36
36
  };
37
37
  export const initializeExternalStylesheet = (url = '') => {
38
- const link = document.createElement('link');
39
- link.href = url;
40
- link.rel = 'stylesheet';
41
- document.head.appendChild(link);
38
+ const link = globalThis.document.getElementById(url);
39
+ if (!link) {
40
+ const newLink = globalThis.document.createElement('link');
41
+ newLink.href = url;
42
+ newLink.id = url;
43
+ newLink.rel = 'stylesheet';
44
+ globalThis.document.head.appendChild(newLink);
45
+ }
42
46
  };
43
47
  export function useExternalNS(namespaceName, url, unmountNS = true) {
44
48
  const [externalNS, setExternalNS] = useState(undefined);
@@ -56,9 +60,9 @@ export function useExternalNS(namespaceName, url, unmountNS = true) {
56
60
  return () => {
57
61
  isMounted = false;
58
62
  if (unmountNS) {
59
- const script = document.getElementById(url);
63
+ const script = globalThis.document.getElementById(url);
60
64
  if (script) {
61
- document.head.removeChild(script);
65
+ globalThis.document.head.removeChild(script);
62
66
  }
63
67
  setExternalNS(undefined);
64
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useExternalNS.js","sourceRoot":"","sources":["../../src/hooks/useExternalNS.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useExternalNS.js","sourceRoot":"","sources":["../../src/hooks/useExternalNS.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ interface HeaderChatBotButtonProps {
16
16
 
17
17
  export const HeaderChatBotButton = JSX<HeaderChatBotButtonProps>(
18
18
  ({ chat = 'personal', iconVersion, className, ariaLabel = 'Чат', version }) => {
19
- const load = useChatBot(chat);
19
+ const { load, isLoading } = useChatBot(chat);
20
20
 
21
21
  return (
22
22
  <HeaderSecondaryMenuButton
@@ -27,6 +27,7 @@ export const HeaderChatBotButton = JSX<HeaderChatBotButtonProps>(
27
27
  buttonSize="large"
28
28
  isGrayBg={true}
29
29
  version={version}
30
+ isLoading={isLoading}
30
31
  />
31
32
  );
32
33
  },
@@ -16,6 +16,7 @@ export interface HeaderSecondaryMenuButtonProps extends ImageContent, AspectsPro
16
16
  ariaLabel?: string;
17
17
  onClick?: (ev: PreventableEventWithTarget) => void;
18
18
  version?: BlockVersion;
19
+ isLoading?: boolean;
19
20
  }
20
21
 
21
22
  const BUTTON_SIZE_STYLE = {
@@ -35,6 +36,7 @@ export const HeaderSecondaryMenuButton = JSX<HeaderSecondaryMenuButtonProps>(
35
36
  data,
36
37
  onClick,
37
38
  version,
39
+ isLoading,
38
40
  }) => {
39
41
  const grayBg = isGrayBg && !isRounded ? 'bg-main-divider' : '';
40
42
  const bgColor = version === 'transparent' ? 'backdrop-opacity-30 bg-white/30' : grayBg;
@@ -58,13 +60,17 @@ export const HeaderSecondaryMenuButton = JSX<HeaderSecondaryMenuButtonProps>(
58
60
  // eslint-disable-next-line react/jsx-props-no-spreading
59
61
  {...getAspectsAttributes(data)}
60
62
  >
61
- <Img
62
- image={image}
63
- className={style('h-full', {
64
- 'bg-main-divider/20 rounded-full': isRounded,
65
- })}
66
- imageClassName="group-hover/btn:text-primary-hover group-hover/btn:invert-0"
67
- />
63
+ {isLoading ? (
64
+ <div className="w-full h-full rounded-full border-4 border-r-transparent animate-spin text-primary-main" />
65
+ ) : (
66
+ <Img
67
+ image={image}
68
+ className={style('h-full', {
69
+ 'bg-main-divider/20 rounded-full': isRounded,
70
+ })}
71
+ imageClassName="group-hover/btn:text-primary-hover group-hover/btn:invert-0"
72
+ />
73
+ )}
68
74
  </button>
69
75
  );
70
76
  },
@@ -1,4 +1,4 @@
1
- import { useEffect } from '@redneckz/uni-jsx/lib/hooks';
1
+ import { useCallback, useEffect, useState } from '@redneckz/uni-jsx/lib/hooks';
2
2
  import { initializeExternalNS, initializeExternalStylesheet } from '../../hooks/useExternalNS';
3
3
  import { type PreventableEventWithTarget } from '../../ui-kit/PreventableEvent';
4
4
 
@@ -15,40 +15,72 @@ const CHATBOT_URL: Record<string, string> = {
15
15
  interface WebChat {
16
16
  render?: (id?: string, isOpen?: boolean) => void;
17
17
  chatOpen?: () => void;
18
+ chatClose?: () => void;
18
19
  }
19
20
 
20
21
  export const useChatBot = (chat?: string) => {
22
+ const [isLoading, setIsLoading] = useState<boolean>(false);
23
+
21
24
  useEffect(() => globalThis.localStorage?.setItem(CHAT_STORAGE_NAME, String(Date.now())), []);
22
25
  const chatUrl = CHATBOT_URL[chat ?? ''];
23
26
 
24
- return async (ev: PreventableEventWithTarget) => {
25
- if (!chatUrl) {
26
- return;
27
- }
27
+ const load = useCallback(
28
+ (ev: PreventableEventWithTarget) => {
29
+ if (!chatUrl) {
30
+ return;
31
+ }
28
32
 
29
- if (chat !== 'personal') {
30
- initializeExternalStylesheet(`${chatUrl}/bundle.css`);
33
+ setIsLoading(true);
34
+ if (chat === 'business') {
35
+ renderBusinessChatBot(chatUrl).finally(() => setIsLoading(false));
36
+ } else {
37
+ renderPersonalChatBot(ev, chatUrl).finally(() => setIsLoading(false));
38
+ }
39
+ },
40
+ [chatUrl, chat],
41
+ );
31
42
 
32
- const businessChat = (await initializeExternalNS(
33
- CHAT_NAMESPACE,
34
- `${chatUrl}/bundle.js`,
35
- true,
36
- )) as WebChat;
43
+ return { load, isLoading };
44
+ };
37
45
 
38
- if (businessChat?.render) {
39
- businessChat.render(CHAT_FRAME_ID, true);
40
- }
41
- } else {
42
- const target = ev.target as HTMLElement;
46
+ const renderPersonalChatBot = async (ev: PreventableEventWithTarget, chatUrl: string) => {
47
+ const target = ev.target as HTMLElement;
43
48
 
44
- if (!target?.classList.contains(CHAT_BUTTON_EXTERNAL_NAME)) {
45
- target?.classList.add(CHAT_BUTTON_EXTERNAL_NAME);
46
- }
49
+ if (!target?.classList.contains(CHAT_BUTTON_EXTERNAL_NAME)) {
50
+ target?.classList.add(CHAT_BUTTON_EXTERNAL_NAME);
51
+ }
47
52
 
48
- const chatFrame = document.getElementById(CHAT_FRAME_ID);
49
- if (!chatFrame) {
50
- initializeExternalNS(CHAT_NAMESPACE, chatUrl);
51
- }
52
- }
53
- };
53
+ const chatFrame = globalThis.document.getElementById(CHAT_FRAME_ID);
54
+ if (!chatFrame) {
55
+ await initializeExternalNS(CHAT_NAMESPACE, chatUrl);
56
+ }
57
+ };
58
+
59
+ const renderBusinessChatBot = async (chatUrl: string) => {
60
+ const businessChat = (await initializeExternalNS(
61
+ CHAT_NAMESPACE,
62
+ `${chatUrl}/bundle.js`,
63
+ true,
64
+ )) as WebChat;
65
+
66
+ initializeExternalStylesheet(`${chatUrl}/bundle.css`);
67
+
68
+ const chatFrame = globalThis.document.getElementById(CHAT_FRAME_ID);
69
+ if (chatFrame) {
70
+ businessChat?.chatOpen?.();
71
+ } else {
72
+ createChatFrame();
73
+
74
+ businessChat?.render?.(CHAT_FRAME_ID, true);
75
+ }
76
+ };
77
+
78
+ const createChatFrame = () => {
79
+ const chatFrame = globalThis.document.createElement('div');
80
+ chatFrame.id = CHAT_FRAME_ID;
81
+ chatFrame.style.position = 'fixed';
82
+ chatFrame.style.right = '0';
83
+ chatFrame.style.bottom = '0';
84
+
85
+ globalThis.document.body.appendChild(chatFrame);
54
86
  };