@redneckz/wildless-cms-uni-blocks 0.14.775 → 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 (47) hide show
  1. package/bundle/bundle.umd.js +15 -12
  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 +9 -6
  12. package/dist/components/Header/useChatBot.js.map +1 -1
  13. package/lib/components/Header/HeaderChatBotButton.js +2 -2
  14. package/lib/components/Header/HeaderChatBotButton.js.map +1 -1
  15. package/lib/components/Header/HeaderSecondaryMenuButton.d.ts +1 -0
  16. package/lib/components/Header/HeaderSecondaryMenuButton.js +3 -3
  17. package/lib/components/Header/HeaderSecondaryMenuButton.js.map +1 -1
  18. package/lib/components/Header/useChatBot.d.ts +4 -1
  19. package/lib/components/Header/useChatBot.js +10 -7
  20. package/lib/components/Header/useChatBot.js.map +1 -1
  21. package/mobile/bundle/bundle.umd.js +1 -1
  22. package/mobile/bundle/bundle.umd.min.js +1 -1
  23. package/mobile/bundle/components/Header/HeaderSecondaryMenuButton.d.ts +1 -0
  24. package/mobile/bundle/components/Header/useChatBot.d.ts +4 -1
  25. package/mobile/dist/components/Header/HeaderChatBotButton.js +2 -2
  26. package/mobile/dist/components/Header/HeaderChatBotButton.js.map +1 -1
  27. package/mobile/dist/components/Header/HeaderSecondaryMenuButton.d.ts +1 -0
  28. package/mobile/dist/components/Header/HeaderSecondaryMenuButton.js +3 -3
  29. package/mobile/dist/components/Header/HeaderSecondaryMenuButton.js.map +1 -1
  30. package/mobile/dist/components/Header/useChatBot.d.ts +4 -1
  31. package/mobile/dist/components/Header/useChatBot.js +9 -6
  32. package/mobile/dist/components/Header/useChatBot.js.map +1 -1
  33. package/mobile/lib/components/Header/HeaderChatBotButton.js +2 -2
  34. package/mobile/lib/components/Header/HeaderChatBotButton.js.map +1 -1
  35. package/mobile/lib/components/Header/HeaderSecondaryMenuButton.d.ts +1 -0
  36. package/mobile/lib/components/Header/HeaderSecondaryMenuButton.js +3 -3
  37. package/mobile/lib/components/Header/HeaderSecondaryMenuButton.js.map +1 -1
  38. package/mobile/lib/components/Header/useChatBot.d.ts +4 -1
  39. package/mobile/lib/components/Header/useChatBot.js +10 -7
  40. package/mobile/lib/components/Header/useChatBot.js.map +1 -1
  41. package/mobile/src/components/Header/HeaderChatBotButton.tsx +2 -1
  42. package/mobile/src/components/Header/HeaderSecondaryMenuButton.tsx +13 -7
  43. package/mobile/src/components/Header/useChatBot.ts +23 -14
  44. package/package.json +1 -1
  45. package/src/components/Header/HeaderChatBotButton.tsx +2 -1
  46. package/src/components/Header/HeaderSecondaryMenuButton.tsx +13 -7
  47. package/src/components/Header/useChatBot.ts +23 -14
@@ -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,29 +11,32 @@ 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
  }
21
+ setIsLoading(true);
20
22
  if (chat === 'business') {
21
- await renderBusinessChatBot(chatUrl);
23
+ renderBusinessChatBot(chatUrl).finally(() => setIsLoading(false));
22
24
  }
23
25
  else {
24
- renderPersonalChatBot(ev, chatUrl);
26
+ renderPersonalChatBot(ev, chatUrl).finally(() => setIsLoading(false));
25
27
  }
26
- };
28
+ }, [chatUrl, chat]);
29
+ return { load, isLoading };
27
30
  };
28
31
  exports.useChatBot = useChatBot;
29
- const renderPersonalChatBot = (ev, chatUrl) => {
32
+ const renderPersonalChatBot = async (ev, chatUrl) => {
30
33
  const target = ev.target;
31
34
  if (!target?.classList.contains(CHAT_BUTTON_EXTERNAL_NAME)) {
32
35
  target?.classList.add(CHAT_BUTTON_EXTERNAL_NAME);
33
36
  }
34
37
  const chatFrame = globalThis.document.getElementById(CHAT_FRAME_ID);
35
38
  if (!chatFrame) {
36
- (0, useExternalNS_1.initializeExternalNS)(CHAT_NAMESPACE, chatUrl);
39
+ await (0, useExternalNS_1.initializeExternalNS)(CHAT_NAMESPACE, chatUrl);
37
40
  }
38
41
  };
39
42
  const renderBusinessChatBot = async (chatUrl) => {
@@ -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,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;SACtC;aAAM;YACL,qBAAqB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;SACpC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,UAAU,cAerB;AAEF,MAAM,qBAAqB,GAAG,CAAC,EAA8B,EAAE,OAAe,EAAE,EAAE;IAChF,MAAM,MAAM,GAAG,EAAE,CAAC,MAAqB,CAAC;IAExC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE;QAC1D,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;KAClD;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACpE,IAAI,CAAC,SAAS,EAAE;QACd,IAAA,oCAAoB,EAAC,cAAc,EAAE,OAAO,CAAC,CAAC;KAC/C;AACH,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,KAAK,EAAE,OAAe,EAAE,EAAE;IACtD,MAAM,YAAY,GAAG,CAAC,MAAM,IAAA,oCAAoB,EAC9C,cAAc,EACd,GAAG,OAAO,YAAY,EACtB,IAAI,CACL,CAAY,CAAC;IAEd,IAAA,4CAA4B,EAAC,GAAG,OAAO,aAAa,CAAC,CAAC;IAEtD,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACpE,IAAI,SAAS,EAAE;QACb,YAAY,EAAE,QAAQ,EAAE,EAAE,CAAC;KAC5B;SAAM;QACL,eAAe,EAAE,CAAC;QAElB,YAAY,EAAE,MAAM,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;KAC7C;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,GAAG,EAAE;IAC3B,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3D,SAAS,CAAC,EAAE,GAAG,aAAa,CAAC;IAC7B,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;IACnC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;IAC5B,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;IAE7B,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC,CAAC"}
1
+ {"version":3,"file":"useChatBot.js","sourceRoot":"","sources":["../../../src/components/Header/useChatBot.ts"],"names":[],"mappings":";;AAAA,uDAA+E;AAC/E,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;AAQK,MAAM,UAAU,GAAG,CAAC,IAAa,EAAE,EAAE;IAC1C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAU,KAAK,CAAC,CAAC;IAE3D,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,MAAM,IAAI,GAAG,IAAA,mBAAW,EACtB,CAAC,EAA8B,EAAE,EAAE;QACjC,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO;SACR;QAED,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,IAAI,IAAI,KAAK,UAAU,EAAE;YACvB,qBAAqB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;SACnE;aAAM;YACL,qBAAqB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;SACvE;IACH,CAAC,EACD,CAAC,OAAO,EAAE,IAAI,CAAC,CAChB,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC,CAAC;AAvBW,QAAA,UAAU,cAuBrB;AAEF,MAAM,qBAAqB,GAAG,KAAK,EAAE,EAA8B,EAAE,OAAe,EAAE,EAAE;IACtF,MAAM,MAAM,GAAG,EAAE,CAAC,MAAqB,CAAC;IAExC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE;QAC1D,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;KAClD;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACpE,IAAI,CAAC,SAAS,EAAE;QACd,MAAM,IAAA,oCAAoB,EAAC,cAAc,EAAE,OAAO,CAAC,CAAC;KACrD;AACH,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,KAAK,EAAE,OAAe,EAAE,EAAE;IACtD,MAAM,YAAY,GAAG,CAAC,MAAM,IAAA,oCAAoB,EAC9C,cAAc,EACd,GAAG,OAAO,YAAY,EACtB,IAAI,CACL,CAAY,CAAC;IAEd,IAAA,4CAA4B,EAAC,GAAG,OAAO,aAAa,CAAC,CAAC;IAEtD,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACpE,IAAI,SAAS,EAAE;QACb,YAAY,EAAE,QAAQ,EAAE,EAAE,CAAC;KAC5B;SAAM;QACL,eAAe,EAAE,CAAC;QAElB,YAAY,EAAE,MAAM,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;KAC7C;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,GAAG,EAAE;IAC3B,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3D,SAAS,CAAC,EAAE,GAAG,aAAa,CAAC;IAC7B,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;IACnC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;IAC5B,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;IAE7B,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC,CAAC"}
@@ -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,28 +9,31 @@ 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
  }
19
+ setIsLoading(true);
18
20
  if (chat === 'business') {
19
- await renderBusinessChatBot(chatUrl);
21
+ renderBusinessChatBot(chatUrl).finally(() => setIsLoading(false));
20
22
  }
21
23
  else {
22
- renderPersonalChatBot(ev, chatUrl);
24
+ renderPersonalChatBot(ev, chatUrl).finally(() => setIsLoading(false));
23
25
  }
24
- };
26
+ }, [chatUrl, chat]);
27
+ return { load, isLoading };
25
28
  };
26
- const renderPersonalChatBot = (ev, chatUrl) => {
29
+ const renderPersonalChatBot = async (ev, chatUrl) => {
27
30
  const target = ev.target;
28
31
  if (!target?.classList.contains(CHAT_BUTTON_EXTERNAL_NAME)) {
29
32
  target?.classList.add(CHAT_BUTTON_EXTERNAL_NAME);
30
33
  }
31
34
  const chatFrame = globalThis.document.getElementById(CHAT_FRAME_ID);
32
35
  if (!chatFrame) {
33
- initializeExternalNS(CHAT_NAMESPACE, chatUrl);
36
+ await initializeExternalNS(CHAT_NAMESPACE, chatUrl);
34
37
  }
35
38
  };
36
39
  const renderBusinessChatBot = async (chatUrl) => {
@@ -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,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;SACtC;aAAM;YACL,qBAAqB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;SACpC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,EAA8B,EAAE,OAAe,EAAE,EAAE;IAChF,MAAM,MAAM,GAAG,EAAE,CAAC,MAAqB,CAAC;IAExC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE;QAC1D,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;KAClD;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACpE,IAAI,CAAC,SAAS,EAAE;QACd,oBAAoB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;KAC/C;AACH,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,KAAK,EAAE,OAAe,EAAE,EAAE;IACtD,MAAM,YAAY,GAAG,CAAC,MAAM,oBAAoB,CAC9C,cAAc,EACd,GAAG,OAAO,YAAY,EACtB,IAAI,CACL,CAAY,CAAC;IAEd,4BAA4B,CAAC,GAAG,OAAO,aAAa,CAAC,CAAC;IAEtD,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACpE,IAAI,SAAS,EAAE;QACb,YAAY,EAAE,QAAQ,EAAE,EAAE,CAAC;KAC5B;SAAM;QACL,eAAe,EAAE,CAAC;QAElB,YAAY,EAAE,MAAM,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;KAC7C;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,GAAG,EAAE;IAC3B,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3D,SAAS,CAAC,EAAE,GAAG,aAAa,CAAC;IAC7B,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;IACnC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;IAC5B,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;IAE7B,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC,CAAC"}
1
+ {"version":3,"file":"useChatBot.js","sourceRoot":"","sources":["../../../src/components/Header/useChatBot.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,26 +15,35 @@ 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
- }
28
-
29
- if (chat === 'business') {
30
- await renderBusinessChatBot(chatUrl);
31
- } else {
32
- renderPersonalChatBot(ev, chatUrl);
33
- }
34
- };
27
+ const load = useCallback(
28
+ (ev: PreventableEventWithTarget) => {
29
+ if (!chatUrl) {
30
+ return;
31
+ }
32
+
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
+ );
42
+
43
+ return { load, isLoading };
35
44
  };
36
45
 
37
- const renderPersonalChatBot = (ev: PreventableEventWithTarget, chatUrl: string) => {
46
+ const renderPersonalChatBot = async (ev: PreventableEventWithTarget, chatUrl: string) => {
38
47
  const target = ev.target as HTMLElement;
39
48
 
40
49
  if (!target?.classList.contains(CHAT_BUTTON_EXTERNAL_NAME)) {
@@ -43,7 +52,7 @@ const renderPersonalChatBot = (ev: PreventableEventWithTarget, chatUrl: string)
43
52
 
44
53
  const chatFrame = globalThis.document.getElementById(CHAT_FRAME_ID);
45
54
  if (!chatFrame) {
46
- initializeExternalNS(CHAT_NAMESPACE, chatUrl);
55
+ await initializeExternalNS(CHAT_NAMESPACE, chatUrl);
47
56
  }
48
57
  };
49
58
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redneckz/wildless-cms-uni-blocks",
3
- "version": "0.14.775",
3
+ "version": "0.14.776",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "author": "ЦК",
@@ -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,26 +15,35 @@ 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
- }
28
-
29
- if (chat === 'business') {
30
- await renderBusinessChatBot(chatUrl);
31
- } else {
32
- renderPersonalChatBot(ev, chatUrl);
33
- }
34
- };
27
+ const load = useCallback(
28
+ (ev: PreventableEventWithTarget) => {
29
+ if (!chatUrl) {
30
+ return;
31
+ }
32
+
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
+ );
42
+
43
+ return { load, isLoading };
35
44
  };
36
45
 
37
- const renderPersonalChatBot = (ev: PreventableEventWithTarget, chatUrl: string) => {
46
+ const renderPersonalChatBot = async (ev: PreventableEventWithTarget, chatUrl: string) => {
38
47
  const target = ev.target as HTMLElement;
39
48
 
40
49
  if (!target?.classList.contains(CHAT_BUTTON_EXTERNAL_NAME)) {
@@ -43,7 +52,7 @@ const renderPersonalChatBot = (ev: PreventableEventWithTarget, chatUrl: string)
43
52
 
44
53
  const chatFrame = globalThis.document.getElementById(CHAT_FRAME_ID);
45
54
  if (!chatFrame) {
46
- initializeExternalNS(CHAT_NAMESPACE, chatUrl);
55
+ await initializeExternalNS(CHAT_NAMESPACE, chatUrl);
47
56
  }
48
57
  };
49
58