@redneckz/wildless-cms-uni-blocks 0.14.909 → 0.14.911

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 (201) hide show
  1. package/bundle/Env.d.ts +2 -0
  2. package/bundle/bundle.umd.js +97 -74
  3. package/bundle/bundle.umd.min.js +1 -1
  4. package/bundle/components/Footer/LinkList.d.ts +1 -0
  5. package/bundle/ui-kit/Select/Select.d.ts +6 -0
  6. package/bundle/ui-kit/Select/SelectPopup.d.ts +1 -0
  7. package/bundle/ui-kit/Select/filterOptions.d.ts +1 -1
  8. package/bundle/ui-kit/Select/renderIcon.d.ts +2 -0
  9. package/bundle/ui-kit/Select/renderOptionText.d.ts +9 -0
  10. package/bundle/ui-kit/Select/renderSearchInput.d.ts +9 -0
  11. package/bundle/ui-kit/Select/renderSelectContainer.d.ts +15 -0
  12. package/bundle/ui-kit/Select/useSelectPopup.d.ts +2 -1
  13. package/dist/Env.d.ts +2 -0
  14. package/dist/Env.js.map +1 -1
  15. package/dist/components/Footer/LinkList.d.ts +1 -0
  16. package/dist/components/Footer/LinkList.js +2 -2
  17. package/dist/components/Footer/LinkList.js.map +1 -1
  18. package/dist/services/search/tokenize.js +4 -1
  19. package/dist/services/search/tokenize.js.map +1 -1
  20. package/dist/ui-kit/FormField/Fields/InnDadataField.js +5 -2
  21. package/dist/ui-kit/FormField/Fields/InnDadataField.js.map +1 -1
  22. package/dist/ui-kit/SearchDialog/SearchDialog.js +5 -1
  23. package/dist/ui-kit/SearchDialog/SearchDialog.js.map +1 -1
  24. package/dist/ui-kit/Select/Select.d.ts +6 -0
  25. package/dist/ui-kit/Select/Select.js +31 -40
  26. package/dist/ui-kit/Select/Select.js.map +1 -1
  27. package/dist/ui-kit/Select/SelectPopup.d.ts +1 -0
  28. package/dist/ui-kit/Select/SelectPopup.js +1 -1
  29. package/dist/ui-kit/Select/SelectPopup.js.map +1 -1
  30. package/dist/ui-kit/Select/filterOptions.d.ts +1 -1
  31. package/dist/ui-kit/Select/filterOptions.js +2 -2
  32. package/dist/ui-kit/Select/filterOptions.js.map +1 -1
  33. package/dist/ui-kit/Select/renderIcon.d.ts +2 -0
  34. package/dist/ui-kit/Select/renderIcon.js +8 -0
  35. package/dist/ui-kit/Select/renderIcon.js.map +1 -0
  36. package/dist/ui-kit/Select/renderOptionText.d.ts +9 -0
  37. package/dist/ui-kit/Select/renderOptionText.js +11 -0
  38. package/dist/ui-kit/Select/renderOptionText.js.map +1 -0
  39. package/dist/ui-kit/Select/renderSearchInput.d.ts +9 -0
  40. package/dist/ui-kit/Select/renderSearchInput.js +7 -0
  41. package/dist/ui-kit/Select/renderSearchInput.js.map +1 -0
  42. package/dist/ui-kit/Select/renderSelectContainer.d.ts +15 -0
  43. package/dist/ui-kit/Select/renderSelectContainer.js +18 -0
  44. package/dist/ui-kit/Select/renderSelectContainer.js.map +1 -0
  45. package/dist/ui-kit/Select/useSelectPopup.d.ts +2 -1
  46. package/dist/ui-kit/Select/useSelectPopup.js +6 -5
  47. package/dist/ui-kit/Select/useSelectPopup.js.map +1 -1
  48. package/dist/ui-kit/Sitemap/Sitemap.js +5 -1
  49. package/dist/ui-kit/Sitemap/Sitemap.js.map +1 -1
  50. package/lib/Env.d.ts +2 -0
  51. package/lib/Env.js.map +1 -1
  52. package/lib/common.css +1 -1
  53. package/lib/components/Footer/LinkList.d.ts +1 -0
  54. package/lib/components/Footer/LinkList.js +2 -2
  55. package/lib/components/Footer/LinkList.js.map +1 -1
  56. package/lib/services/search/tokenize.js +4 -1
  57. package/lib/services/search/tokenize.js.map +1 -1
  58. package/lib/ui-kit/FormField/Fields/InnDadataField.js +5 -2
  59. package/lib/ui-kit/FormField/Fields/InnDadataField.js.map +1 -1
  60. package/lib/ui-kit/SearchDialog/SearchDialog.fixture.d.ts +2 -0
  61. package/lib/ui-kit/SearchDialog/SearchDialog.js +5 -1
  62. package/lib/ui-kit/SearchDialog/SearchDialog.js.map +1 -1
  63. package/lib/ui-kit/Select/Select.d.ts +6 -0
  64. package/lib/ui-kit/Select/Select.js +32 -41
  65. package/lib/ui-kit/Select/Select.js.map +1 -1
  66. package/lib/ui-kit/Select/SelectPopup.d.ts +1 -0
  67. package/lib/ui-kit/Select/SelectPopup.js +1 -1
  68. package/lib/ui-kit/Select/SelectPopup.js.map +1 -1
  69. package/lib/ui-kit/Select/filterOptions.d.ts +1 -1
  70. package/lib/ui-kit/Select/filterOptions.js +2 -2
  71. package/lib/ui-kit/Select/filterOptions.js.map +1 -1
  72. package/lib/ui-kit/Select/renderIcon.d.ts +2 -0
  73. package/lib/ui-kit/Select/renderIcon.js +5 -0
  74. package/lib/ui-kit/Select/renderIcon.js.map +1 -0
  75. package/lib/ui-kit/Select/renderOptionText.d.ts +9 -0
  76. package/lib/ui-kit/Select/renderOptionText.js +8 -0
  77. package/lib/ui-kit/Select/renderOptionText.js.map +1 -0
  78. package/lib/ui-kit/Select/renderSearchInput.d.ts +9 -0
  79. package/lib/ui-kit/Select/renderSearchInput.js +4 -0
  80. package/lib/ui-kit/Select/renderSearchInput.js.map +1 -0
  81. package/lib/ui-kit/Select/renderSelectContainer.d.ts +15 -0
  82. package/lib/ui-kit/Select/renderSelectContainer.js +15 -0
  83. package/lib/ui-kit/Select/renderSelectContainer.js.map +1 -0
  84. package/lib/ui-kit/Select/useSelectPopup.d.ts +2 -1
  85. package/lib/ui-kit/Select/useSelectPopup.js +6 -5
  86. package/lib/ui-kit/Select/useSelectPopup.js.map +1 -1
  87. package/lib/ui-kit/Sitemap/Sitemap.js +5 -1
  88. package/lib/ui-kit/Sitemap/Sitemap.js.map +1 -1
  89. package/mobile/bundle/Env.d.ts +2 -0
  90. package/mobile/bundle/bundle.umd.js +87 -71
  91. package/mobile/bundle/bundle.umd.min.js +1 -1
  92. package/mobile/bundle/components/Footer/LinkList.d.ts +1 -0
  93. package/mobile/bundle/ui-kit/Select/Select.d.ts +6 -0
  94. package/mobile/bundle/ui-kit/Select/SelectPopup.d.ts +1 -0
  95. package/mobile/bundle/ui-kit/Select/filterOptions.d.ts +1 -1
  96. package/mobile/bundle/ui-kit/Select/renderIcon.d.ts +2 -0
  97. package/mobile/bundle/ui-kit/Select/renderOptionText.d.ts +9 -0
  98. package/mobile/bundle/ui-kit/Select/renderSearchInput.d.ts +9 -0
  99. package/mobile/bundle/ui-kit/Select/renderSelectContainer.d.ts +15 -0
  100. package/mobile/bundle/ui-kit/Select/useSelectPopup.d.ts +2 -1
  101. package/mobile/dist/Env.d.ts +2 -0
  102. package/mobile/dist/Env.js.map +1 -1
  103. package/mobile/dist/components/Footer/LinkList.d.ts +1 -0
  104. package/mobile/dist/components/Footer/LinkList.js +2 -2
  105. package/mobile/dist/components/Footer/LinkList.js.map +1 -1
  106. package/mobile/dist/services/search/tokenize.js +4 -1
  107. package/mobile/dist/services/search/tokenize.js.map +1 -1
  108. package/mobile/dist/ui-kit/FormField/Fields/InnDadataField.js +5 -2
  109. package/mobile/dist/ui-kit/FormField/Fields/InnDadataField.js.map +1 -1
  110. package/mobile/dist/ui-kit/SearchDialog/SearchDialog.js +5 -1
  111. package/mobile/dist/ui-kit/SearchDialog/SearchDialog.js.map +1 -1
  112. package/mobile/dist/ui-kit/Select/Select.d.ts +6 -0
  113. package/mobile/dist/ui-kit/Select/Select.js +31 -40
  114. package/mobile/dist/ui-kit/Select/Select.js.map +1 -1
  115. package/mobile/dist/ui-kit/Select/SelectPopup.d.ts +1 -0
  116. package/mobile/dist/ui-kit/Select/SelectPopup.js +1 -1
  117. package/mobile/dist/ui-kit/Select/SelectPopup.js.map +1 -1
  118. package/mobile/dist/ui-kit/Select/filterOptions.d.ts +1 -1
  119. package/mobile/dist/ui-kit/Select/filterOptions.js +2 -2
  120. package/mobile/dist/ui-kit/Select/filterOptions.js.map +1 -1
  121. package/mobile/dist/ui-kit/Select/renderIcon.d.ts +2 -0
  122. package/mobile/dist/ui-kit/Select/renderIcon.js +8 -0
  123. package/mobile/dist/ui-kit/Select/renderIcon.js.map +1 -0
  124. package/mobile/dist/ui-kit/Select/renderOptionText.d.ts +9 -0
  125. package/mobile/dist/ui-kit/Select/renderOptionText.js +11 -0
  126. package/mobile/dist/ui-kit/Select/renderOptionText.js.map +1 -0
  127. package/mobile/dist/ui-kit/Select/renderSearchInput.d.ts +9 -0
  128. package/mobile/dist/ui-kit/Select/renderSearchInput.js +7 -0
  129. package/mobile/dist/ui-kit/Select/renderSearchInput.js.map +1 -0
  130. package/mobile/dist/ui-kit/Select/renderSelectContainer.d.ts +15 -0
  131. package/mobile/dist/ui-kit/Select/renderSelectContainer.js +18 -0
  132. package/mobile/dist/ui-kit/Select/renderSelectContainer.js.map +1 -0
  133. package/mobile/dist/ui-kit/Select/useSelectPopup.d.ts +2 -1
  134. package/mobile/dist/ui-kit/Select/useSelectPopup.js +6 -5
  135. package/mobile/dist/ui-kit/Select/useSelectPopup.js.map +1 -1
  136. package/mobile/lib/Env.d.ts +2 -0
  137. package/mobile/lib/Env.js.map +1 -1
  138. package/mobile/lib/common.css +1 -1
  139. package/mobile/lib/components/Footer/LinkList.d.ts +1 -0
  140. package/mobile/lib/components/Footer/LinkList.js +2 -2
  141. package/mobile/lib/components/Footer/LinkList.js.map +1 -1
  142. package/mobile/lib/services/search/tokenize.js +4 -1
  143. package/mobile/lib/services/search/tokenize.js.map +1 -1
  144. package/mobile/lib/ui-kit/FormField/Fields/InnDadataField.js +5 -2
  145. package/mobile/lib/ui-kit/FormField/Fields/InnDadataField.js.map +1 -1
  146. package/mobile/lib/ui-kit/SearchDialog/SearchDialog.js +5 -1
  147. package/mobile/lib/ui-kit/SearchDialog/SearchDialog.js.map +1 -1
  148. package/mobile/lib/ui-kit/Select/Select.d.ts +6 -0
  149. package/mobile/lib/ui-kit/Select/Select.js +32 -41
  150. package/mobile/lib/ui-kit/Select/Select.js.map +1 -1
  151. package/mobile/lib/ui-kit/Select/SelectPopup.d.ts +1 -0
  152. package/mobile/lib/ui-kit/Select/SelectPopup.js +1 -1
  153. package/mobile/lib/ui-kit/Select/SelectPopup.js.map +1 -1
  154. package/mobile/lib/ui-kit/Select/filterOptions.d.ts +1 -1
  155. package/mobile/lib/ui-kit/Select/filterOptions.js +2 -2
  156. package/mobile/lib/ui-kit/Select/filterOptions.js.map +1 -1
  157. package/mobile/lib/ui-kit/Select/renderIcon.d.ts +2 -0
  158. package/mobile/lib/ui-kit/Select/renderIcon.js +5 -0
  159. package/mobile/lib/ui-kit/Select/renderIcon.js.map +1 -0
  160. package/mobile/lib/ui-kit/Select/renderOptionText.d.ts +9 -0
  161. package/mobile/lib/ui-kit/Select/renderOptionText.js +8 -0
  162. package/mobile/lib/ui-kit/Select/renderOptionText.js.map +1 -0
  163. package/mobile/lib/ui-kit/Select/renderSearchInput.d.ts +9 -0
  164. package/mobile/lib/ui-kit/Select/renderSearchInput.js +4 -0
  165. package/mobile/lib/ui-kit/Select/renderSearchInput.js.map +1 -0
  166. package/mobile/lib/ui-kit/Select/renderSelectContainer.d.ts +15 -0
  167. package/mobile/lib/ui-kit/Select/renderSelectContainer.js +15 -0
  168. package/mobile/lib/ui-kit/Select/renderSelectContainer.js.map +1 -0
  169. package/mobile/lib/ui-kit/Select/useSelectPopup.d.ts +2 -1
  170. package/mobile/lib/ui-kit/Select/useSelectPopup.js +6 -5
  171. package/mobile/lib/ui-kit/Select/useSelectPopup.js.map +1 -1
  172. package/mobile/src/Env.ts +2 -0
  173. package/mobile/src/components/Footer/LinkList.tsx +3 -2
  174. package/mobile/src/services/search/tokenize.ts +8 -1
  175. package/mobile/src/ui-kit/FormField/Fields/InnDadataField.tsx +7 -2
  176. package/mobile/src/ui-kit/SearchDialog/SearchDialog.tsx +11 -1
  177. package/mobile/src/ui-kit/Select/Select.tsx +46 -105
  178. package/mobile/src/ui-kit/Select/SelectPopup.tsx +12 -2
  179. package/mobile/src/ui-kit/Select/filterOptions.ts +6 -2
  180. package/mobile/src/ui-kit/Select/renderIcon.tsx +13 -0
  181. package/mobile/src/ui-kit/Select/renderOptionText.tsx +22 -0
  182. package/mobile/src/ui-kit/Select/renderSearchInput.tsx +28 -0
  183. package/mobile/src/ui-kit/Select/renderSelectContainer.tsx +60 -0
  184. package/mobile/src/ui-kit/Select/useSelectPopup.tsx +11 -7
  185. package/package.json +1 -1
  186. package/src/Env.ts +2 -0
  187. package/src/components/Footer/LinkList.tsx +3 -2
  188. package/src/icons/IconName.ts +4 -4
  189. package/src/services/search/tokenize.ts +8 -1
  190. package/src/ui-kit/FormField/Fields/InnDadataField.tsx +7 -2
  191. package/src/ui-kit/SearchDialog/SearchDialog.fixture.tsx +782 -0
  192. package/src/ui-kit/SearchDialog/SearchDialog.tsx +11 -1
  193. package/src/ui-kit/Select/Select.tsx +46 -105
  194. package/src/ui-kit/Select/SelectPopup.tsx +12 -2
  195. package/src/ui-kit/Select/filterOptions.ts +6 -2
  196. package/src/ui-kit/Select/renderIcon.tsx +13 -0
  197. package/src/ui-kit/Select/renderOptionText.tsx +22 -0
  198. package/src/ui-kit/Select/renderSearchInput.tsx +28 -0
  199. package/src/ui-kit/Select/renderSelectContainer.tsx +60 -0
  200. package/src/ui-kit/Select/useSelectPopup.tsx +11 -7
  201. package/src/ui-kit/Sitemap/Sitemap.tsx +25 -7
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@redneckz/uni-jsx/jsx-runtime";
2
+ import { style } from '../../utils/style.js';
3
+ import { renderIcon } from './renderIcon.js';
4
+ import { renderOptionText } from './renderOptionText.js';
5
+ export const renderSelectContainer = ({ isBorder = true, valid = true, isDisabled = false, isOpen = false, onOpen, onClose, isManualInput = false, query = '', value, placeholder = '', iconVersion = 'black', options = [], }) => {
6
+ const isIconHidden = getIconHidden(isManualInput, options, query);
7
+ return (_jsxs("div", { className: style({ 'border rounded-md': isBorder }, { 'hover:border-primary-hover': isBorder && !isDisabled }, isDisabled ? 'bg-main-divider' : 'cursor-pointer ', valid ? 'border-gray' : 'border-error', 'h-14 [&>*]:p-m pr-6 text-l flex items-center justify-between text-primary-text relative z-10 overflow-hidden'), onClick: isOpen ? onClose : onOpen, children: [_jsx("p", { className: "line-clamp-2 text-ellipsis", children: renderOptionText({ isManualInput, query, value, placeholder }) }), isIconHidden ? '' : renderIcon(isOpen, iconVersion)] }));
8
+ };
9
+ const getIconHidden = (isManualInput, options, query) => {
10
+ if (isManualInput && query?.length) {
11
+ return true;
12
+ }
13
+ return isManualInput && !options.length;
14
+ };
15
+ //# sourceMappingURL=renderSelectContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderSelectContainer.js","sourceRoot":"","sources":["../../../src/ui-kit/Select/renderSelectContainer.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAYtD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EACpC,QAAQ,GAAG,IAAI,EACf,KAAK,GAAG,IAAI,EACZ,UAAU,GAAG,KAAK,EAClB,MAAM,GAAG,KAAK,EACd,MAAM,EACN,OAAO,EACP,aAAa,GAAG,KAAK,EACrB,KAAK,GAAG,EAAE,EACV,KAAK,EACL,WAAW,GAAG,EAAE,EAChB,WAAW,GAAG,OAAO,EACrB,OAAO,GAAG,EAAE,GACS,EAAE,EAAE;IACzB,MAAM,YAAY,GAAG,aAAa,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAElE,OAAO,CACL,eACE,SAAS,EAAE,KAAK,CACd,EAAE,mBAAmB,EAAE,QAAQ,EAAE,EACjC,EAAE,4BAA4B,EAAE,QAAQ,IAAI,CAAC,UAAU,EAAE,EACzD,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,EAClD,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,EACtC,8GAA8G,CAC/G,EACD,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,aAElC,YAAG,SAAS,EAAC,4BAA4B,YACtC,gBAAgB,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,GAC7D,EACH,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,IAChD,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,aAAsB,EAAE,OAAiB,EAAE,KAAc,EAAE,EAAE;IAClF,IAAI,aAAa,IAAI,KAAK,EAAE,MAAM,EAAE;QAClC,OAAO,IAAI,CAAC;KACb;IAED,OAAO,aAAa,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAC1C,CAAC,CAAC"}
@@ -3,8 +3,9 @@ import { type SelectPopupProps } from './SelectPopup';
3
3
  interface SelectPopupOptions extends SelectPopupProps, OnCloseProps {
4
4
  isOpen?: boolean;
5
5
  onChangeQuery?: (value: string) => void;
6
+ disableFilterOptions?: boolean;
6
7
  }
7
- export declare function useSelectPopup({ isOpen, options, value, query, onChange, onClose, iconVersion, onChangeQuery, }: SelectPopupOptions): {
8
+ export declare function useSelectPopup({ isOpen, options, value, query, onChange, onClose, iconVersion, disableFilterOptions, onChangeQuery, }: SelectPopupOptions): {
8
9
  current: HTMLDivElement | null;
9
10
  };
10
11
  export {};
@@ -1,18 +1,19 @@
1
1
  import { jsx as _jsx } from "@redneckz/uni-jsx/jsx-runtime";
2
2
  import { useCallback, useEffect, useRef } from '@redneckz/uni-jsx/lib/hooks';
3
3
  import { useOutsideClick } from '@redneckz/uni-jsx/lib/hooks/useOutsideClick';
4
+ import { noop } from '../../utils/noop.js';
4
5
  import { usePopupManager } from '../PopupManager/usePopupManager.js';
5
6
  import { SelectPopup } from './SelectPopup.js';
6
- export function useSelectPopup({ isOpen, options, value, query, onChange, onClose, iconVersion, onChangeQuery, }) {
7
+ export function useSelectPopup({ isOpen, options, value, query, onChange = noop, onClose = noop, iconVersion, disableFilterOptions = false, onChangeQuery = noop, }) {
7
8
  const popup = usePopupManager();
8
9
  const close = useCallback(() => {
9
10
  popup.close();
10
- onClose && onClose();
11
+ onClose();
11
12
  }, [onClose]);
12
13
  const handleChange = useCallback((option) => {
13
14
  close();
14
- onChange && onChange(option);
15
- onChangeQuery && onChangeQuery('');
15
+ onChange(option);
16
+ onChangeQuery('');
16
17
  }, [close, onChange]);
17
18
  const inputRef = useRef(null);
18
19
  const popupRef = useOutsideClick(close);
@@ -23,7 +24,7 @@ export function useSelectPopup({ isOpen, options, value, query, onChange, onClos
23
24
  const inputElement = inputRef.current;
24
25
  const { top, left, width, height } = inputElement.getBoundingClientRect();
25
26
  popup.open({
26
- popup: (_jsx(SelectPopup, { popupRef: popupRef, options: options, value: value, query: query, onChange: handleChange, iconVersion: iconVersion, onChangeQuery: onChangeQuery })),
27
+ popup: (_jsx(SelectPopup, { popupRef: popupRef, options: options, value: value, query: query, iconVersion: iconVersion, disableFilterOptions: disableFilterOptions, onChange: handleChange, onChangeQuery: onChangeQuery })),
27
28
  top: top + window.scrollY + height,
28
29
  left,
29
30
  width,
@@ -1 +1 @@
1
- {"version":3,"file":"useSelectPopup.js","sourceRoot":"","sources":["../../../src/ui-kit/Select/useSelectPopup.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAE9E,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,EAAE,WAAW,EAAyB,MAAM,eAAe,CAAC;AAOnE,MAAM,UAAU,cAAc,CAAC,EAC7B,MAAM,EACN,OAAO,EACP,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAO,EACP,WAAW,EACX,aAAa,GACM;IACnB,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAEhC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,IAAI,OAAO,EAAE,CAAC;IACvB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,MAAc,EAAE,EAAE;QACjB,KAAK,EAAE,CAAC;QACR,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7B,aAAa,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC,EACD,CAAC,KAAK,EAAE,QAAQ,CAAC,CAClB,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,eAAe,CAAiB,KAAK,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;YAChC,OAAO;SACR;QAED,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC;QACtC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,qBAAqB,EAAE,CAAC;QAE1E,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,CACL,KAAC,WAAW,IACV,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,GAC5B,CACH;YACD,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM;YAClC,IAAI;YACJ,KAAK;SACN,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;IAElD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"useSelectPopup.js","sourceRoot":"","sources":["../../../src/ui-kit/Select/useSelectPopup.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAE9E,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,EAAE,WAAW,EAAyB,MAAM,eAAe,CAAC;AAQnE,MAAM,UAAU,cAAc,CAAC,EAC7B,MAAM,EACN,OAAO,EACP,KAAK,EACL,KAAK,EACL,QAAQ,GAAG,IAAI,EACf,OAAO,GAAG,IAAI,EACd,WAAW,EACX,oBAAoB,GAAG,KAAK,EAC5B,aAAa,GAAG,IAAI,GACD;IACnB,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAEhC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;IACZ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,MAAc,EAAE,EAAE;QACjB,KAAK,EAAE,CAAC;QACR,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjB,aAAa,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,EACD,CAAC,KAAK,EAAE,QAAQ,CAAC,CAClB,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,eAAe,CAAiB,KAAK,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;YAChC,OAAO;SACR;QAED,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC;QACtC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,qBAAqB,EAAE,CAAC;QAE1E,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,CACL,KAAC,WAAW,IACV,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EACxB,oBAAoB,EAAE,oBAAoB,EAC1C,QAAQ,EAAE,YAAY,EACtB,aAAa,EAAE,aAAa,GAC5B,CACH;YACD,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM;YAClC,IAAI;YACJ,KAAK;SACN,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;IAElD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
package/mobile/src/Env.ts CHANGED
@@ -2,6 +2,8 @@ export interface Env {
2
2
  SITE_URL?: string;
3
3
  SUB_PORTALS?: string;
4
4
  MOBILE?: string;
5
+ SINGLE_SEARCH_INDEX?: string;
6
+ SEARCH_LANG?: string;
5
7
  }
6
8
 
7
9
  export const env: Env & {
@@ -8,13 +8,14 @@ import { style } from '../../utils/style';
8
8
 
9
9
  interface LinkListProps extends ComponentType {
10
10
  items?: LinkProps[];
11
+ isFlex?: boolean;
11
12
  }
12
13
 
13
- export const LinkList = JSX<LinkListProps>(({ className = '', items }) => {
14
+ export const LinkList = JSX<LinkListProps>(({ className = '', items, isFlex = true }) => {
14
15
  const link = useLink();
15
16
 
16
17
  return (
17
- <ul className={style('flex flex-col gap-s w-full', className)}>
18
+ <ul className={style(isFlex ? 'flex flex-col gap-s' : 'block', 'w-full', className)}>
18
19
  {items?.map(renderLinkListItem(link))}
19
20
  </ul>
20
21
  );
@@ -1,7 +1,14 @@
1
+ import { env } from '../../Env';
2
+
1
3
  const MIN_TERM_LEN = 3;
4
+ const LANG = env.SEARCH_LANG;
2
5
 
3
6
  export const tokenize = (text: string) =>
4
7
  text
5
8
  .toLowerCase()
6
9
  .split(/[^0-9a-zа-я-]+/)
7
- .filter((token) => token.length >= MIN_TERM_LEN && !/[0-9a-z]/.test(token));
10
+ .filter(
11
+ (token) =>
12
+ token.length >= MIN_TERM_LEN &&
13
+ (LANG === 'en' ? !/[а-яА-ЯёЁ0-9]/.test(token) : !/[0-9a-z]/.test(token)),
14
+ );
@@ -11,7 +11,7 @@ type InnSuggestion = {
11
11
  inn?: string;
12
12
  };
13
13
 
14
- export const InnDadataField = JSX<CustomFieldProps>(({ field, input }) => {
14
+ export const InnDadataField = JSX<CustomFieldProps>(({ field, input = {} }) => {
15
15
  const [options, setOptions] = useState<InnSuggestion[]>([]);
16
16
  const [searchQuery, setSearchQuery] = useState('');
17
17
 
@@ -38,9 +38,14 @@ export const InnDadataField = JSX<CustomFieldProps>(({ field, input }) => {
38
38
  label="ИНН"
39
39
  placeholder="Введите ИНН"
40
40
  options={getOptions}
41
- {...field(input?.name ?? '')}
41
+ {...field(input.name ?? '')}
42
42
  isSearch
43
43
  isManualInput
44
+ inputProps={{
45
+ isInteger: true,
46
+ maxLength: 12,
47
+ }}
48
+ disableFilterOptions={true}
44
49
  onSearchQuery={setSearchQuery}
45
50
  />
46
51
  );
@@ -1,10 +1,12 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
2
  import { useMemo } from '@redneckz/uni-jsx/lib/hooks';
3
3
  import { type TopMenuItemProps } from '../../data/NavigationData';
4
+ import { env } from '../../Env';
4
5
  import { type LinkProps } from '../../model/LinkProps';
5
6
  import type { OnCloseProps } from '../../model/OnCloseProps';
6
7
  import { useSearch, type SearchResult } from '../../services/search/useSearch';
7
8
  import { zip } from '../../utils/fp/zip';
9
+ import { getBasePath } from '../../utils/getBasePath';
8
10
  import { joinPath } from '../../utils/url';
9
11
  import { Dialog } from '../DialogManager/Dialog';
10
12
  import { Sitemap } from '../Sitemap/Sitemap';
@@ -15,8 +17,16 @@ export interface SearchDialogProps extends OnCloseProps {
15
17
  navigationItems?: TopMenuItemProps[];
16
18
  }
17
19
 
20
+ const IS_SINGLE_SEARCH_INDEX = Boolean(env.SINGLE_SEARCH_INDEX);
21
+
18
22
  export const SearchDialog = JSX<SearchDialogProps>(({ initialQuery, navigationItems, onClose }) => {
19
- const basePathList = useMemo(() => navigationItems?.map((_) => _.href || '/'), [navigationItems]);
23
+ const basePath = getBasePath(env.SITE_URL);
24
+
25
+ const basePathList = useMemo(
26
+ () => (IS_SINGLE_SEARCH_INDEX ? [basePath] : navigationItems?.map((_) => _.href || '/')),
27
+ [navigationItems],
28
+ );
29
+
20
30
  const [searchResult, searchInputProps] = useSearch({
21
31
  basePathList,
22
32
  initialQuery,
@@ -4,14 +4,13 @@ import { useBool } from '@redneckz/uni-jsx/lib/hooks/useBool';
4
4
  import { type ControlProps } from '../../model/ControlProps';
5
5
  import { type DefaultControlType } from '../../model/DefaultControlType';
6
6
  import { type IconVersion } from '../../model/IconVersion';
7
- import { type PlaceholderProps } from '../../model/PlaceholderProps';
8
7
  import { debounce } from '../../utils/debounce';
8
+ import { noop } from '../../utils/noop';
9
9
  import { style } from '../../utils/style';
10
- import { Icon } from '../Icon/Icon';
11
- import { Input } from '../Input/Input';
12
10
  import { renderLabel } from '../Input/renderLabel';
13
- import { formatOption } from './formatOption';
14
11
  import { type Option } from './Option';
12
+ import { renderSearchInput } from './renderSearchInput';
13
+ import { renderSelectContainer } from './renderSelectContainer';
15
14
  import { useSelectPopup } from './useSelectPopup';
16
15
 
17
16
  export interface SelectProps extends DefaultControlType, ControlProps<Option> {
@@ -21,13 +20,14 @@ export interface SelectProps extends DefaultControlType, ControlProps<Option> {
21
20
  isSearch?: boolean;
22
21
  isManualInput?: boolean;
23
22
  iconVersion?: IconVersion;
23
+ inputProps?: InputTypeProps;
24
+ disableFilterOptions?: boolean;
24
25
  onSearchQuery?: (value: string) => void;
25
26
  }
26
27
 
27
- type renderOptionTextProps = PlaceholderProps & {
28
- isManualInput?: boolean;
29
- query?: string;
30
- value?: Option;
28
+ export type InputTypeProps = {
29
+ isInteger?: boolean;
30
+ maxLength?: number;
31
31
  };
32
32
 
33
33
  export const Select = JSX<SelectProps>(
@@ -36,133 +36,74 @@ export const Select = JSX<SelectProps>(
36
36
  label,
37
37
  options = [],
38
38
  value,
39
- valid = true,
40
- isBorder = true,
41
- placeholder = '',
42
39
  isSearch = false,
43
40
  isManualInput = false,
44
41
  disabled = false,
45
42
  iconVersion = 'black',
46
43
  onChange,
47
- onSearchQuery,
44
+ onSearchQuery = noop,
45
+ inputProps,
46
+ disableFilterOptions = false,
47
+ ...rest
48
48
  }) => {
49
49
  const [isOpen, { setFalse: close, setTrue: open }] = useBool();
50
50
  const [query, setQuery] = useState('');
51
- const isDisabled = getDisabled(disabled, options.length, isManualInput);
52
- const isIconHidden = getIconHidden(isManualInput, options);
53
- const hasOpen = isOpen && !isDisabled;
51
+
52
+ const isDisabled = disabled || (!isManualInput && options.length === 0);
54
53
 
55
54
  const debouncedOnSearchQuery = useMemo(
56
- () => onSearchQuery && getDebouncedSearchQuery(onSearchQuery),
55
+ () => debounce((searchValue: string) => onSearchQuery(searchValue), 300),
57
56
  [onSearchQuery],
58
57
  );
59
58
 
60
59
  const handleOpen = useCallback(() => {
61
- if (isDisabled) {
62
- return;
63
- }
64
-
65
- open();
60
+ isDisabled ? noop() : open();
66
61
  }, [isDisabled]);
67
62
 
68
- const handleChangeQuery = (newQuery: string) => {
69
- setQuery(newQuery);
70
- isManualInput && setOption(newQuery, onChange);
71
- debouncedOnSearchQuery && debouncedOnSearchQuery(newQuery);
72
- };
73
-
74
63
  const handleClose = useCallback(() => {
75
64
  !isManualInput && setQuery('');
76
65
  close();
77
- }, []);
78
-
66
+ }, [isManualInput]);
67
+
68
+ const handleChangeQuery = useCallback(
69
+ (newQuery: string) => {
70
+ setQuery(newQuery);
71
+ isManualInput && onChange?.({ key: newQuery, text: newQuery, innDaData: {} });
72
+ debouncedOnSearchQuery?.(newQuery);
73
+ },
74
+ [isManualInput, onChange, debouncedOnSearchQuery],
75
+ );
76
+ const selectState = { query, value, options, isOpen, iconVersion };
79
77
  const inputRef = useSelectPopup({
80
- isOpen,
81
- options,
82
- value,
83
- query,
84
78
  onChange,
85
79
  onClose: handleClose,
86
- iconVersion,
80
+ disableFilterOptions,
87
81
  onChangeQuery: setQuery,
82
+ ...selectState,
88
83
  });
89
84
 
90
85
  return (
91
86
  <div className={style('space-y-xs', className)}>
92
87
  {renderLabel(label)}
93
- <div className={style('relative', hasOpen ? 'z-20' : 'z-10')} ref={inputRef}>
94
- <div
95
- className={style(
96
- 'h-14 [&>*]:p-m pr-6 text-l flex items-center justify-between text-primary-text relative z-10 overflow-hidden',
97
- getStyle(isBorder, valid, isDisabled),
98
- )}
99
- onClick={hasOpen ? handleClose : handleOpen}
100
- >
101
- <p className="line-clamp-2 text-ellipsis">
102
- {useRenderOptionText({ isManualInput, query, value, placeholder })}
103
- </p>
104
- {isIconHidden ? '' : renderIcon(hasOpen, iconVersion)}
105
- </div>
106
- {isSearch && hasOpen ? renderSearchInput(query, isDisabled, handleChangeQuery) : null}
88
+ <div className={style('relative', isOpen ? 'z-20' : 'z-10')} ref={inputRef}>
89
+ {renderSelectContainer({
90
+ isDisabled,
91
+ onClose: handleClose,
92
+ onOpen: handleOpen,
93
+ isManualInput,
94
+ ...selectState,
95
+ ...rest,
96
+ })}
97
+ {isSearch && isOpen
98
+ ? renderSearchInput({
99
+ query,
100
+ isDisabled,
101
+ inputProps,
102
+ onChangeQuery: handleChangeQuery,
103
+ })
104
+ : null}
107
105
  </div>
108
106
  </div>
109
107
  );
110
108
  },
111
109
  );
112
-
113
- const useRenderOptionText = (data: renderOptionTextProps) =>
114
- useMemo(() => {
115
- if (data.isManualInput && data.query) {
116
- return data.query;
117
- }
118
-
119
- return formatOption(data.value) || data.placeholder;
120
- }, [data.isManualInput, data.query, data.value, data.placeholder]);
121
-
122
- const renderSearchInput = (
123
- query: string,
124
- isDisabled: boolean,
125
- onChangeQuery: (value: string) => void,
126
- ) => (
127
- <div className={style('absolute top-0 w-full z-20')}>
128
- <Input
129
- type="text"
130
- value={query}
131
- autoFocus
132
- disabled={isDisabled}
133
- onChange={(value) => onChangeQuery(value)}
134
- />
135
- </div>
136
- );
137
-
138
- const renderIcon = (isOpen: boolean, iconVersion?: IconVersion) => (
139
- <Icon
140
- className={style('absolute right-0 flex self-center', { 'rotate-180': !isOpen })}
141
- iconVersion={iconVersion}
142
- name="ArrowUpIcon"
143
- width="16"
144
- height="16"
145
- />
146
- );
147
-
148
- const getStyle = (isBorder: boolean, valid: boolean, disabled: boolean) =>
149
- style(
150
- isBorder ? 'border rounded-md ' : '',
151
- isBorder && !disabled ? 'hover:border-primary-hover' : '',
152
- disabled ? 'bg-main-divider' : 'cursor-pointer ',
153
- valid ? 'border-gray' : 'border-error',
154
- );
155
-
156
- // TODO Нужен рефактор и декомпозиция компонента getDisabled, setOption, getIconHidden
157
- const getDisabled = (disabled: boolean, length: number, isManualInput: boolean) =>
158
- disabled || (!isManualInput && length === 0);
159
-
160
- const setOption = (query: string, onChange?: (data: Option) => void) => {
161
- onChange && query.trim() !== '' && onChange({ key: query, text: query, innDaData: {} });
162
- };
163
-
164
- const getIconHidden = (isManualInput: boolean, options: Option[]) =>
165
- isManualInput && !options.length;
166
-
167
- const getDebouncedSearchQuery = (onSearchQuery: (value: string) => void) =>
168
- debounce((searchValue: string) => onSearchQuery(searchValue), 300);
@@ -14,17 +14,27 @@ export interface SelectPopupProps extends ControlProps<Option> {
14
14
  popupRef?: { current: HTMLDivElement | null };
15
15
  query?: string;
16
16
  onChangeQuery?: (value: string) => void;
17
+ disableFilterOptions?: boolean;
17
18
  }
18
19
 
19
20
  export const SelectPopup = JSX<SelectPopupProps>(
20
- ({ popupRef, options, value, query, onChange, iconVersion, onChangeQuery }) =>
21
+ ({
22
+ popupRef,
23
+ options,
24
+ value,
25
+ query,
26
+ iconVersion,
27
+ disableFilterOptions,
28
+ onChange,
29
+ onChangeQuery,
30
+ }) =>
21
31
  options?.length ? (
22
32
  <div
23
33
  className="bg-white text-l max-h-64 overflow-y-auto overflow-x-hidden rounded-md shadow-2xl"
24
34
  role="list"
25
35
  ref={popupRef}
26
36
  >
27
- {filterOptions(options, query).map((option) => (
37
+ {filterOptions(options, query, disableFilterOptions).map((option) => (
28
38
  <div
29
39
  key={option.key}
30
40
  className="flex px-m py-s cursor-pointer hover:bg-main-divider pr-5xl relative"
@@ -1,7 +1,11 @@
1
1
  import { type Option } from './Option';
2
2
 
3
- export const filterOptions = (options: Option[], query: string | undefined): Option[] => {
4
- if (!options?.length || !query?.trim()) {
3
+ export const filterOptions = (
4
+ options: Option[],
5
+ query: string | undefined,
6
+ disableFilterOptions?: boolean,
7
+ ): Option[] => {
8
+ if (!options?.length || !query?.trim() || disableFilterOptions) {
5
9
  return options;
6
10
  }
7
11
 
@@ -0,0 +1,13 @@
1
+ import type { IconVersion } from '../../model/IconVersion';
2
+ import { style } from '../../utils/style';
3
+ import { Icon } from '../Icon/Icon';
4
+
5
+ export const renderIcon = (isOpen: boolean, iconVersion?: IconVersion) => (
6
+ <Icon
7
+ className={style('absolute right-0 flex self-center', { 'rotate-180': !isOpen })}
8
+ iconVersion={iconVersion}
9
+ name="ArrowUpIcon"
10
+ width="16"
11
+ height="16"
12
+ />
13
+ );
@@ -0,0 +1,22 @@
1
+ import { type PlaceholderProps } from '../../model/PlaceholderProps';
2
+ import { formatOption } from './formatOption';
3
+ import { type Option } from './Option';
4
+
5
+ type RenderOptionTextProps = PlaceholderProps & {
6
+ isManualInput?: boolean;
7
+ query?: string;
8
+ value?: Option;
9
+ };
10
+
11
+ export const renderOptionText = ({
12
+ isManualInput,
13
+ query,
14
+ value,
15
+ placeholder,
16
+ }: RenderOptionTextProps) => {
17
+ if (isManualInput && query) {
18
+ return query;
19
+ }
20
+
21
+ return formatOption(value) || placeholder;
22
+ };
@@ -0,0 +1,28 @@
1
+ import { InputControl } from '../Input/InputControl';
2
+ import { type InputTypeProps } from './Select';
3
+
4
+ type RenderSearchInputProps = {
5
+ query: string;
6
+ isDisabled: boolean;
7
+ onChangeQuery: (value: string) => void;
8
+ inputProps?: InputTypeProps;
9
+ };
10
+
11
+ export const renderSearchInput = ({
12
+ query,
13
+ isDisabled,
14
+ onChangeQuery,
15
+ inputProps,
16
+ }: RenderSearchInputProps) => (
17
+ <div className="absolute top-0 w-full z-20">
18
+ <InputControl
19
+ type="text"
20
+ value={query}
21
+ autoFocus
22
+ disabled={isDisabled}
23
+ onChange={(value) => onChangeQuery(value)}
24
+ maxLength={inputProps?.maxLength}
25
+ isInteger={inputProps?.isInteger ?? false}
26
+ />
27
+ </div>
28
+ );
@@ -0,0 +1,60 @@
1
+ import type { ControlProps } from '../../model/ControlProps';
2
+ import { type IconVersion } from '../../model/IconVersion';
3
+ import { type OnCloseProps } from '../../model/OnCloseProps';
4
+ import { style } from '../../utils/style';
5
+ import { type Option } from './Option';
6
+ import { renderIcon } from './renderIcon';
7
+ import { renderOptionText } from './renderOptionText';
8
+ import { type SelectProps } from './Select';
9
+
10
+ interface SelectContainerProps extends OnCloseProps, SelectProps, ControlProps<Option> {
11
+ isOpen?: boolean;
12
+ isDisabled?: boolean;
13
+ iconVersion?: IconVersion;
14
+ query?: string;
15
+ isIconHidden?: boolean;
16
+ onOpen?: () => void;
17
+ }
18
+
19
+ export const renderSelectContainer = ({
20
+ isBorder = true,
21
+ valid = true,
22
+ isDisabled = false,
23
+ isOpen = false,
24
+ onOpen,
25
+ onClose,
26
+ isManualInput = false,
27
+ query = '',
28
+ value,
29
+ placeholder = '',
30
+ iconVersion = 'black',
31
+ options = [],
32
+ }: SelectContainerProps) => {
33
+ const isIconHidden = getIconHidden(isManualInput, options, query);
34
+
35
+ return (
36
+ <div
37
+ className={style(
38
+ { 'border rounded-md': isBorder },
39
+ { 'hover:border-primary-hover': isBorder && !isDisabled },
40
+ isDisabled ? 'bg-main-divider' : 'cursor-pointer ',
41
+ valid ? 'border-gray' : 'border-error',
42
+ 'h-14 [&>*]:p-m pr-6 text-l flex items-center justify-between text-primary-text relative z-10 overflow-hidden',
43
+ )}
44
+ onClick={isOpen ? onClose : onOpen}
45
+ >
46
+ <p className="line-clamp-2 text-ellipsis">
47
+ {renderOptionText({ isManualInput, query, value, placeholder })}
48
+ </p>
49
+ {isIconHidden ? '' : renderIcon(isOpen, iconVersion)}
50
+ </div>
51
+ );
52
+ };
53
+
54
+ const getIconHidden = (isManualInput: boolean, options: Option[], query?: string) => {
55
+ if (isManualInput && query?.length) {
56
+ return true;
57
+ }
58
+
59
+ return isManualInput && !options.length;
60
+ };
@@ -1,6 +1,7 @@
1
1
  import { useCallback, useEffect, useRef } from '@redneckz/uni-jsx/lib/hooks';
2
2
  import { useOutsideClick } from '@redneckz/uni-jsx/lib/hooks/useOutsideClick';
3
3
  import type { OnCloseProps } from '../../model/OnCloseProps';
4
+ import { noop } from '../../utils/noop';
4
5
  import { usePopupManager } from '../PopupManager/usePopupManager';
5
6
  import { type Option } from './Option';
6
7
  import { SelectPopup, type SelectPopupProps } from './SelectPopup';
@@ -8,6 +9,7 @@ import { SelectPopup, type SelectPopupProps } from './SelectPopup';
8
9
  interface SelectPopupOptions extends SelectPopupProps, OnCloseProps {
9
10
  isOpen?: boolean;
10
11
  onChangeQuery?: (value: string) => void;
12
+ disableFilterOptions?: boolean;
11
13
  }
12
14
 
13
15
  export function useSelectPopup({
@@ -15,23 +17,24 @@ export function useSelectPopup({
15
17
  options,
16
18
  value,
17
19
  query,
18
- onChange,
19
- onClose,
20
+ onChange = noop,
21
+ onClose = noop,
20
22
  iconVersion,
21
- onChangeQuery,
23
+ disableFilterOptions = false,
24
+ onChangeQuery = noop,
22
25
  }: SelectPopupOptions) {
23
26
  const popup = usePopupManager();
24
27
 
25
28
  const close = useCallback(() => {
26
29
  popup.close();
27
- onClose && onClose();
30
+ onClose();
28
31
  }, [onClose]);
29
32
 
30
33
  const handleChange = useCallback(
31
34
  (option: Option) => {
32
35
  close();
33
- onChange && onChange(option);
34
- onChangeQuery && onChangeQuery('');
36
+ onChange(option);
37
+ onChangeQuery('');
35
38
  },
36
39
  [close, onChange],
37
40
  );
@@ -54,8 +57,9 @@ export function useSelectPopup({
54
57
  options={options}
55
58
  value={value}
56
59
  query={query}
57
- onChange={handleChange}
58
60
  iconVersion={iconVersion}
61
+ disableFilterOptions={disableFilterOptions}
62
+ onChange={handleChange}
59
63
  onChangeQuery={onChangeQuery}
60
64
  />
61
65
  ),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redneckz/wildless-cms-uni-blocks",
3
- "version": "0.14.909",
3
+ "version": "0.14.911",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "author": "ЦК",
package/src/Env.ts CHANGED
@@ -2,6 +2,8 @@ export interface Env {
2
2
  SITE_URL?: string;
3
3
  SUB_PORTALS?: string;
4
4
  MOBILE?: string;
5
+ SINGLE_SEARCH_INDEX?: string;
6
+ SEARCH_LANG?: string;
5
7
  }
6
8
 
7
9
  export const env: Env & {
@@ -8,13 +8,14 @@ import { style } from '../../utils/style';
8
8
 
9
9
  interface LinkListProps extends ComponentType {
10
10
  items?: LinkProps[];
11
+ isFlex?: boolean;
11
12
  }
12
13
 
13
- export const LinkList = JSX<LinkListProps>(({ className = '', items }) => {
14
+ export const LinkList = JSX<LinkListProps>(({ className = '', items, isFlex = true }) => {
14
15
  const link = useLink();
15
16
 
16
17
  return (
17
- <ul className={style('flex flex-col gap-s w-full', className)}>
18
+ <ul className={style(isFlex ? 'flex flex-col gap-s' : 'block', 'w-full', className)}>
18
19
  {items?.map(renderLinkListItem(link))}
19
20
  </ul>
20
21
  );