@consta/uikit 4.15.0 → 4.16.0
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.
- package/__internal__/src/components/Combobox/Combobox.js +1 -1
- package/__internal__/src/components/Combobox/Combobox.js.map +1 -1
- package/__internal__/src/components/Combobox/helpers.d.ts +14 -6
- package/__internal__/src/components/Combobox/helpers.js.map +1 -1
- package/__internal__/src/components/SelectComponents/SelectDropdown/SelectDropdown.d.ts +5 -2
- package/__internal__/src/components/SelectComponents/SelectDropdown/SelectDropdown.js +1 -1
- package/__internal__/src/components/SelectComponents/SelectDropdown/SelectDropdown.js.map +1 -1
- package/__internal__/src/components/SelectComponents/SelectItem/SelectItem.d.ts +2 -0
- package/__internal__/src/components/SelectComponents/SelectItem/SelectItem.js +1 -1
- package/__internal__/src/components/SelectComponents/SelectItem/SelectItem.js.map +1 -1
- package/__internal__/src/components/SelectComponents/SelectItemAll/SelectItemAll.css +1 -0
- package/__internal__/src/components/SelectComponents/SelectItemAll/SelectSelectAll.d.ts +13 -0
- package/__internal__/src/components/SelectComponents/SelectItemAll/SelectSelectAll.js +2 -0
- package/__internal__/src/components/SelectComponents/SelectItemAll/SelectSelectAll.js.map +1 -0
- package/__internal__/src/components/TagBase/TagBase.d.ts +1 -1
- package/__internal__/src/hooks/useSelect/useSelect.d.ts +5 -2
- package/__internal__/src/hooks/useSelect/useSelect.js +1 -1
- package/__internal__/src/hooks/useSelect/useSelect.js.map +1 -1
- package/__internal__/src/utils/getGroups.d.ts +12 -0
- package/__internal__/src/utils/getGroups.js +1 -1
- package/__internal__/src/utils/getGroups.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["placeholder","onBlur","onFocus","items","onChange","value","disabled","ariaLabel","id","required","dropdownRef","form","view","size","dropdownClassName","name","groups","getItemLabel","getItemKey","getItemGroupKey","getItemDisabled","getGroupKey","getGroupLabel","renderItem","searchValue","renderValue","onCreate","inputRef","labelForNotFound","labelForCreate","labelForEmptyItems","onInputChange","searchFunction","isLoading","multiple","style","dropdownForm"];import"../SelectComponents/Select.css";import{IconClose}from"@consta/icons/IconClose";import{IconSelect}from"@consta/icons/IconSelect";import React,{forwardRef,useRef}from"react";import{useForkRef}from"../../hooks/useForkRef/useForkRef";import{useSelect}from"../../hooks/useSelect/useSelect";import{cnMixFocus}from"../../mixs/MixFocus/MixFocus";import{usePropsHandler}from"../EventInterceptor/usePropsHandler";import{cnSelect}from"../SelectComponents/cnSelect";import{defaultlabelForCreate,defaultLabelForEmptyItems,defaultlabelForNotFound,getInputWidth}from"../SelectComponents/helpers";import{SelectContainer}from"../SelectComponents/SelectContainer/SelectContainer";import{SelectDropdown}from"../SelectComponents/SelectDropdown/SelectDropdown";import{SelectItem}from"../SelectComponents/SelectItem/SelectItem";import{SelectValueTag}from"../SelectComponents/SelectValueTag/SelectValueTag";import{defaultPropForm,defaultPropSize,defaultPropView}from"../SelectComponents/types";import{isMultipleParams,isNotMultipleParams,withDefaultGetters}from"./helpers";export var COMPONENT_NAME="Combobox";var ComboboxRender=function(a,b){var c=useRef(null),d=useRef(null),e=useRef(null),f=useRef(null),g=usePropsHandler(COMPONENT_NAME,withDefaultGetters(a),f),h=g.placeholder,i=g.onBlur,j=g.onFocus,k=g.items,l=g.onChange,m=g.value,n=g.disabled,o=g.ariaLabel,p=g.id,q=g.required,r=g.dropdownRef,s=
|
|
1
|
+
import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["placeholder","onBlur","onFocus","items","onChange","value","disabled","ariaLabel","id","required","dropdownRef","form","view","size","dropdownClassName","name","groups","getItemLabel","getItemKey","getItemGroupKey","getItemDisabled","getGroupKey","getGroupLabel","renderItem","searchValue","renderValue","onCreate","inputRef","labelForNotFound","labelForCreate","labelForEmptyItems","onInputChange","searchFunction","selectAll","isLoading","multiple","style","dropdownForm"];import"../SelectComponents/Select.css";import{IconClose}from"@consta/icons/IconClose";import{IconSelect}from"@consta/icons/IconSelect";import React,{forwardRef,useRef}from"react";import{useForkRef}from"../../hooks/useForkRef/useForkRef";import{useSelect}from"../../hooks/useSelect/useSelect";import{cnMixFocus}from"../../mixs/MixFocus/MixFocus";import{usePropsHandler}from"../EventInterceptor/usePropsHandler";import{cnSelect}from"../SelectComponents/cnSelect";import{defaultlabelForCreate,defaultLabelForEmptyItems,defaultlabelForNotFound,getInputWidth}from"../SelectComponents/helpers";import{SelectContainer}from"../SelectComponents/SelectContainer/SelectContainer";import{SelectDropdown}from"../SelectComponents/SelectDropdown/SelectDropdown";import{SelectItem}from"../SelectComponents/SelectItem/SelectItem";import{SelectValueTag}from"../SelectComponents/SelectValueTag/SelectValueTag";import{defaultPropForm,defaultPropSize,defaultPropView}from"../SelectComponents/types";import{isMultipleParams,isNotMultipleParams,withDefaultGetters}from"./helpers";export var COMPONENT_NAME="Combobox";var ComboboxRender=function(a,b){var c=useRef(null),d=useRef(null),e=useRef(null),f=useRef(null),g=usePropsHandler(COMPONENT_NAME,withDefaultGetters(a),f),h=g.placeholder,i=g.onBlur,j=g.onFocus,k=g.items,l=g.onChange,m=g.value,n=g.disabled,o=g.ariaLabel,p=g.id,q=g.required,r=g.dropdownRef,s=g.form,t=void 0===s?defaultPropForm:s,u=g.view,v=void 0===u?defaultPropView:u,w=g.size,x=void 0===w?defaultPropSize:w,y=g.dropdownClassName,z=g.name,A=g.groups,B=void 0===A?[]:A,C=g.getItemLabel,D=g.getItemKey,E=g.getItemGroupKey,F=g.getItemDisabled,G=g.getGroupKey,H=g.getGroupLabel,I=g.renderItem,J=g.searchValue,K=g.renderValue,L=g.onCreate,M=g.inputRef,N=g.labelForNotFound,O=void 0===N?defaultlabelForNotFound:N,P=g.labelForCreate,Q=void 0===P?defaultlabelForCreate:P,R=g.labelForEmptyItems,S=void 0===R?defaultLabelForEmptyItems:R,T=g.onInputChange,U=g.searchFunction,V=g.selectAll,W=g.isLoading,X=g.multiple,Y=void 0!==X&&X,Z=g.style,$=g.dropdownForm,_=void 0===$?"default":$,aa=_objectWithoutProperties(g,_excluded),ba=useSelect({items:k,groups:B,value:m,onChange:l,selectAll:V,dropdownRef:c,controlRef:f,disabled:n,getItemLabel:C,getItemKey:D,getGroupKey:G,searchValue:J,getItemGroupKey:E,getItemDisabled:F,multiple:Y,onBlur:i,onFocus:j,onCreate:L,searchFunction:U}),ca=ba.getKeyProps,da=ba.getOptionProps,ea=ba.isOpen,fa=ba.visibleItems,ga=ba.isFocused,ha=ba.handleInputFocus,ia=ba.handleInputBlur,ja=ba.handleToggleDropdown,ka=ba.inputRef,la=ba.handleInputClick,ma=ba.handleInputChange,na=ba.searchValue,oa=ba.clearValue,pa=ba.getHandleRemoveValue,qa=ba.notFound,ra=ba.hasItems,sa=K||(Y?function renderValueDefaultMultiple(a){var b=a.item,c=a.handleRemove;return React.createElement(SelectValueTag,{label:C(b),key:D(b),size:x,disabled:n||F(b),handleRemove:c})}:function renderValueDefaultNotMultiple(a){var b=C(a.item);return React.createElement("span",{className:cnSelect("ControlValue"),title:b},b)}),ta=useForkRef([ka,M]),ua=function(a){ma(a);var b=a.target.value;n||(null===T||void 0===T?void 0:T({e:a,id:p,name:z,value:b||null}))},va=function(){var b=Y?getInputWidth(d,e):void 0;return React.createElement(React.Fragment,null,isMultipleParams(a)&&Array.isArray(a.value)&&a.value.map(function(a){return sa({item:a,handleRemove:pa(a)})}),isNotMultipleParams(a)&&a.value&&sa({item:a.value}),(!m||Array.isArray(m)&&0===m.length)&&!na&&h&&React.createElement("span",{className:cnSelect("Placeholder"),title:"placeholder"},h),React.createElement("input",Object.assign({},ca(),{type:"text",name:z,onFocus:ha,onBlur:ia,"aria-label":o,onChange:ua,ref:ta,className:cnSelect("Input",{size:x,hide:!Y&&!!m,multiple:Y}),value:na,style:{width:b}})))};return React.createElement(React.Fragment,null,React.createElement(SelectContainer,Object.assign({focused:ga,disabled:n,size:x,view:v,required:q,form:t,multiple:Y,ref:b,type:"combobox",style:Z},aa),React.createElement("div",{className:cnSelect("Control",{hasInput:!0}),ref:f,"aria-expanded":ea,"aria-haspopup":"listbox",id:p},React.createElement("div",{className:cnSelect("ControlInner"),onClick:la,role:"button",ref:d,"aria-hidden":"true"},React.createElement("div",{className:cnSelect("ControlValueContainer")},Y?React.createElement("div",{className:cnSelect("ControlValue")},va()):va())),React.createElement("span",{className:cnSelect("Indicators")},m&&React.createElement("button",{type:"button",onClick:oa,className:cnSelect("ClearIndicator",[cnMixFocus()])},React.createElement(IconClose,{size:"xs",className:cnSelect("ClearIndicatorIcon")})),React.createElement("span",{className:cnSelect("Delimiter")}),React.createElement("button",{type:"button",className:cnSelect("IndicatorsDropdown"),tabIndex:-1,onClick:ja},React.createElement(IconSelect,{size:"xs",className:cnSelect("DropdownIndicatorIcon")})))),React.createElement("div",{className:cnSelect("HelperInputFakeElement"),ref:e},na)),React.createElement(SelectDropdown,{isOpen:ea,size:x,controlRef:f,getOptionProps:da,dropdownRef:useForkRef([r,c]),form:_,className:y,renderItem:I||function renderItemDefault(a){var b=a.item,c=a.active,d=a.hovered,e=a.onClick,f=a.onMouseEnter;return React.createElement(SelectItem,{label:C(b),active:c,hovered:d,multiple:Y,size:x,indent:"round"===_?"increased":"normal",onClick:e,onMouseEnter:f,disabled:F(b)})},getGroupLabel:H,visibleItems:fa,labelForNotFound:O,labelForCreate:Q,isLoading:W,labelForEmptyItems:S,notFound:qa,hasItems:ra,style:"number"==typeof(null===Z||void 0===Z?void 0:Z.zIndex)?{zIndex:Z.zIndex+1}:void 0}))};export var Combobox=forwardRef(ComboboxRender);export*from"./helpers";
|
|
2
2
|
//# sourceMappingURL=Combobox.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Combobox.js","names":["IconClose","IconSelect","React","forwardRef","useRef","useForkRef","useSelect","cnMixFocus","usePropsHandler","cnSelect","defaultlabelForCreate","defaultLabelForEmptyItems","defaultlabelForNotFound","getInputWidth","SelectContainer","SelectDropdown","SelectItem","SelectValueTag","defaultPropForm","defaultPropSize","defaultPropView","isMultipleParams","isNotMultipleParams","withDefaultGetters","COMPONENT_NAME","ComboboxRender","props","ref","defaultDropdownRef","controlInnerRef","helperInputFakeElement","controlRef","placeholder","onBlur","onFocus","items","onChange","value","disabled","ariaLabel","id","required","dropdownRef","form","view","size","dropdownClassName","name","groups","getItemLabel","getItemKey","getItemGroupKey","getItemDisabled","getGroupKey","getGroupLabel","renderItem","searchValueProp","searchValue","renderValueProp","renderValue","onCreate","inputRefProp","inputRef","labelForNotFound","labelForCreate","labelForEmptyItems","onInputChange","searchFunction","isLoading","multiple","style","dropdownForm","otherProps","getKeyProps","getOptionProps","isOpen","visibleItems","isFocused","handleInputFocus","handleInputBlur","handleToggleDropdown","handleInputClick","handleInputChange","clearValue","getHandleRemoveValue","notFound","hasItems","renderValueDefaultMultiple","item","handleRemove","renderValueDefaultNotMultiple","valueLable","inputRefForRender","handleChangeValue","e","target","renderControlValue","width","Array","isArray","map","length","hide","hasInput","renderItemDefault","active","hovered","onClick","onMouseEnter","zIndex","Combobox"],"sources":["../../../../../src/components/Combobox/Combobox.tsx"],"sourcesContent":["import '../SelectComponents/Select.css';\n\nimport { IconClose } from '@consta/icons/IconClose';\nimport { IconSelect } from '@consta/icons/IconSelect';\nimport React, { forwardRef, useRef } from 'react';\n\nimport { useForkRef } from '../../hooks/useForkRef/useForkRef';\nimport { useSelect } from '../../hooks/useSelect/useSelect';\nimport { cnMixFocus } from '../../mixs/MixFocus/MixFocus';\nimport { usePropsHandler } from '../EventInterceptor/usePropsHandler';\nimport { cnSelect } from '../SelectComponents/cnSelect';\nimport {\n defaultlabelForCreate,\n defaultLabelForEmptyItems,\n defaultlabelForNotFound,\n getInputWidth,\n} from '../SelectComponents/helpers';\nimport { SelectContainer } from '../SelectComponents/SelectContainer/SelectContainer';\nimport { SelectDropdown } from '../SelectComponents/SelectDropdown/SelectDropdown';\nimport { SelectItem } from '../SelectComponents/SelectItem/SelectItem';\nimport { SelectValueTag } from '../SelectComponents/SelectValueTag/SelectValueTag';\nimport {\n defaultPropForm,\n defaultPropSize,\n defaultPropView,\n} from '../SelectComponents/types';\nimport {\n ComboboxComponent,\n ComboboxProps,\n DefaultGroup,\n DefaultItem,\n isMultipleParams,\n isNotMultipleParams,\n PropRenderItem,\n PropRenderValue,\n withDefaultGetters,\n} from './helpers';\n\nexport const COMPONENT_NAME = 'Combobox' as const;\n\nconst ComboboxRender = <\n ITEM = DefaultItem,\n GROUP = DefaultGroup,\n MULTIPLE extends boolean = false,\n>(\n props: ComboboxProps<ITEM, GROUP, MULTIPLE>,\n ref: React.Ref<HTMLDivElement>,\n) => {\n const defaultDropdownRef = useRef<HTMLDivElement | null>(null);\n const controlInnerRef = useRef<HTMLDivElement>(null);\n const helperInputFakeElement = useRef<HTMLDivElement>(null);\n const controlRef = useRef<HTMLDivElement | null>(null);\n\n const {\n placeholder,\n onBlur,\n onFocus,\n items,\n onChange,\n value,\n disabled,\n ariaLabel,\n id,\n required,\n dropdownRef = defaultDropdownRef,\n form = defaultPropForm,\n view = defaultPropView,\n size = defaultPropSize,\n dropdownClassName,\n name,\n groups = [],\n getItemLabel,\n getItemKey,\n getItemGroupKey,\n getItemDisabled,\n getGroupKey,\n getGroupLabel,\n renderItem,\n searchValue: searchValueProp,\n renderValue: renderValueProp,\n onCreate,\n inputRef: inputRefProp,\n labelForNotFound = defaultlabelForNotFound,\n labelForCreate = defaultlabelForCreate,\n labelForEmptyItems = defaultLabelForEmptyItems,\n onInputChange,\n searchFunction,\n isLoading,\n multiple = false,\n style,\n dropdownForm = 'default',\n ...otherProps\n } = usePropsHandler(COMPONENT_NAME, withDefaultGetters(props), controlRef);\n\n const {\n getKeyProps,\n getOptionProps,\n isOpen,\n visibleItems,\n isFocused,\n handleInputFocus,\n handleInputBlur,\n handleToggleDropdown,\n inputRef,\n handleInputClick,\n handleInputChange,\n searchValue,\n clearValue,\n getHandleRemoveValue,\n notFound,\n hasItems,\n } = useSelect({\n items,\n groups,\n value,\n onChange,\n dropdownRef,\n controlRef,\n disabled,\n getItemLabel,\n getItemKey,\n getGroupKey,\n searchValue: searchValueProp,\n getItemGroupKey,\n getItemDisabled,\n multiple,\n onBlur,\n onFocus,\n onCreate,\n searchFunction,\n });\n\n const renderItemDefault: PropRenderItem<ITEM> = (props) => {\n const { item, active, hovered, onClick, onMouseEnter } = props;\n\n return (\n <SelectItem\n label={getItemLabel(item)}\n active={active}\n hovered={hovered}\n multiple={multiple}\n size={size}\n indent={dropdownForm === 'round' ? 'increased' : 'normal'}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n disabled={getItemDisabled(item)}\n />\n );\n };\n\n const renderValueDefaultMultiple: PropRenderValue<ITEM> = ({\n item,\n handleRemove,\n }) => {\n return (\n <SelectValueTag\n label={getItemLabel(item)}\n key={getItemKey(item)}\n size={size}\n disabled={disabled || getItemDisabled(item)}\n handleRemove={handleRemove}\n />\n );\n };\n\n const renderValueDefaultNotMultiple: PropRenderValue<ITEM> = (props) => {\n const valueLable = getItemLabel(props.item);\n\n return (\n <span className={cnSelect('ControlValue')} title={valueLable}>\n {valueLable}\n </span>\n );\n };\n\n const renderValue =\n renderValueProp ||\n (multiple ? renderValueDefaultMultiple : renderValueDefaultNotMultiple);\n\n const inputRefForRender = useForkRef([inputRef, inputRefProp]);\n\n const handleChangeValue = (e: React.ChangeEvent<HTMLInputElement>) => {\n handleInputChange(e);\n const { value } = e.target;\n !disabled && onInputChange?.({ e, id, name, value: value || null });\n };\n\n const renderControlValue = () => {\n const width = multiple\n ? getInputWidth(controlInnerRef, helperInputFakeElement)\n : undefined;\n return (\n <>\n {isMultipleParams(props) &&\n Array.isArray(props.value) &&\n props.value.map((item) =>\n renderValue({ item, handleRemove: getHandleRemoveValue(item) }),\n )}\n {isNotMultipleParams(props) &&\n props.value &&\n renderValue({ item: props.value })}\n {(!value || (Array.isArray(value) && value.length === 0)) &&\n !searchValue &&\n placeholder && (\n <span className={cnSelect('Placeholder')} title=\"placeholder\">\n {placeholder}\n </span>\n )}\n <input\n {...getKeyProps()}\n type=\"text\"\n name={name}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n aria-label={ariaLabel}\n onChange={handleChangeValue}\n ref={inputRefForRender}\n className={cnSelect('Input', {\n size,\n hide: !multiple && !!value,\n multiple,\n })}\n value={searchValue}\n style={{ width }}\n />\n </>\n );\n };\n\n return (\n <>\n <SelectContainer\n focused={isFocused}\n disabled={disabled}\n size={size}\n view={view}\n required={required}\n form={form}\n multiple={multiple}\n ref={ref}\n type=\"combobox\"\n style={style}\n {...otherProps}\n >\n <div\n className={cnSelect('Control', { hasInput: true })}\n ref={controlRef}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n id={id}\n >\n <div\n className={cnSelect('ControlInner')}\n onClick={handleInputClick}\n role=\"button\"\n ref={controlInnerRef}\n aria-hidden=\"true\"\n >\n <div className={cnSelect('ControlValueContainer')}>\n {multiple ? (\n <div className={cnSelect('ControlValue')}>\n {renderControlValue()}\n </div>\n ) : (\n renderControlValue()\n )}\n </div>\n </div>\n <span className={cnSelect('Indicators')}>\n {value && (\n <button\n type=\"button\"\n onClick={clearValue}\n className={cnSelect('ClearIndicator', [cnMixFocus()])}\n >\n <IconClose\n size=\"xs\"\n className={cnSelect('ClearIndicatorIcon')}\n />\n </button>\n )}\n <span className={cnSelect('Delimiter')} />\n <button\n type=\"button\"\n className={cnSelect('IndicatorsDropdown')}\n tabIndex={-1}\n onClick={handleToggleDropdown}\n >\n <IconSelect\n size=\"xs\"\n className={cnSelect('DropdownIndicatorIcon')}\n />\n </button>\n </span>\n </div>\n <div\n className={cnSelect('HelperInputFakeElement')}\n ref={helperInputFakeElement}\n >\n {searchValue}\n </div>\n </SelectContainer>\n <SelectDropdown\n isOpen={isOpen}\n size={size}\n controlRef={controlRef}\n getOptionProps={getOptionProps}\n dropdownRef={dropdownRef}\n form={dropdownForm}\n className={dropdownClassName}\n renderItem={renderItem || renderItemDefault}\n getGroupLabel={getGroupLabel}\n visibleItems={visibleItems}\n labelForNotFound={labelForNotFound}\n labelForCreate={labelForCreate}\n isLoading={isLoading}\n labelForEmptyItems={labelForEmptyItems}\n notFound={notFound}\n hasItems={hasItems}\n style={\n typeof style?.zIndex === 'number'\n ? { zIndex: style.zIndex + 1 }\n : undefined\n }\n />\n </>\n );\n};\n\nexport const Combobox = forwardRef(ComboboxRender) as ComboboxComponent;\n\nexport * from './helpers';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Combobox.js","names":["IconClose","IconSelect","React","forwardRef","useRef","useForkRef","useSelect","cnMixFocus","usePropsHandler","cnSelect","defaultlabelForCreate","defaultLabelForEmptyItems","defaultlabelForNotFound","getInputWidth","SelectContainer","SelectDropdown","SelectItem","SelectValueTag","defaultPropForm","defaultPropSize","defaultPropView","isMultipleParams","isNotMultipleParams","withDefaultGetters","COMPONENT_NAME","ComboboxRender","props","ref","defaultDropdownRef","controlInnerRef","helperInputFakeElement","controlRef","placeholder","onBlur","onFocus","items","onChange","value","disabled","ariaLabel","id","required","dropdownRef","form","view","size","dropdownClassName","name","groups","getItemLabel","getItemKey","getItemGroupKey","getItemDisabled","getGroupKey","getGroupLabel","renderItem","searchValueProp","searchValue","renderValueProp","renderValue","onCreate","inputRefProp","inputRef","labelForNotFound","labelForCreate","labelForEmptyItems","onInputChange","searchFunction","selectAll","isLoading","multiple","style","dropdownForm","otherProps","getKeyProps","getOptionProps","isOpen","visibleItems","isFocused","handleInputFocus","handleInputBlur","handleToggleDropdown","handleInputClick","handleInputChange","clearValue","getHandleRemoveValue","notFound","hasItems","renderValueDefaultMultiple","item","handleRemove","renderValueDefaultNotMultiple","valueLable","inputRefForRender","handleChangeValue","e","target","renderControlValue","width","Array","isArray","map","length","hide","hasInput","renderItemDefault","active","hovered","onClick","onMouseEnter","zIndex","Combobox"],"sources":["../../../../../src/components/Combobox/Combobox.tsx"],"sourcesContent":["import '../SelectComponents/Select.css';\n\nimport { IconClose } from '@consta/icons/IconClose';\nimport { IconSelect } from '@consta/icons/IconSelect';\nimport React, { forwardRef, useRef } from 'react';\n\nimport { useForkRef } from '../../hooks/useForkRef/useForkRef';\nimport { useSelect } from '../../hooks/useSelect/useSelect';\nimport { cnMixFocus } from '../../mixs/MixFocus/MixFocus';\nimport { usePropsHandler } from '../EventInterceptor/usePropsHandler';\nimport { cnSelect } from '../SelectComponents/cnSelect';\nimport {\n defaultlabelForCreate,\n defaultLabelForEmptyItems,\n defaultlabelForNotFound,\n getInputWidth,\n} from '../SelectComponents/helpers';\nimport { SelectContainer } from '../SelectComponents/SelectContainer/SelectContainer';\nimport { SelectDropdown } from '../SelectComponents/SelectDropdown/SelectDropdown';\nimport { SelectItem } from '../SelectComponents/SelectItem/SelectItem';\nimport { SelectValueTag } from '../SelectComponents/SelectValueTag/SelectValueTag';\nimport {\n defaultPropForm,\n defaultPropSize,\n defaultPropView,\n} from '../SelectComponents/types';\nimport {\n ComboboxComponent,\n ComboboxProps,\n DefaultGroup,\n DefaultItem,\n isMultipleParams,\n isNotMultipleParams,\n PropRenderItem,\n PropRenderValue,\n withDefaultGetters,\n} from './helpers';\n\nexport const COMPONENT_NAME = 'Combobox' as const;\n\nconst ComboboxRender = <\n ITEM = DefaultItem,\n GROUP = DefaultGroup,\n MULTIPLE extends boolean = false,\n>(\n props: ComboboxProps<ITEM, GROUP, MULTIPLE>,\n ref: React.Ref<HTMLDivElement>,\n) => {\n const defaultDropdownRef = useRef<HTMLDivElement | null>(null);\n const controlInnerRef = useRef<HTMLDivElement>(null);\n const helperInputFakeElement = useRef<HTMLDivElement>(null);\n const controlRef = useRef<HTMLDivElement | null>(null);\n\n const {\n placeholder,\n onBlur,\n onFocus,\n items,\n onChange,\n value,\n disabled,\n ariaLabel,\n id,\n required,\n dropdownRef,\n form = defaultPropForm,\n view = defaultPropView,\n size = defaultPropSize,\n dropdownClassName,\n name,\n groups = [],\n getItemLabel,\n getItemKey,\n getItemGroupKey,\n getItemDisabled,\n getGroupKey,\n getGroupLabel,\n renderItem,\n searchValue: searchValueProp,\n renderValue: renderValueProp,\n onCreate,\n inputRef: inputRefProp,\n labelForNotFound = defaultlabelForNotFound,\n labelForCreate = defaultlabelForCreate,\n labelForEmptyItems = defaultLabelForEmptyItems,\n onInputChange,\n searchFunction,\n selectAll,\n isLoading,\n multiple = false,\n style,\n dropdownForm = 'default',\n ...otherProps\n } = usePropsHandler(COMPONENT_NAME, withDefaultGetters(props), controlRef);\n\n const {\n getKeyProps,\n getOptionProps,\n isOpen,\n visibleItems,\n isFocused,\n handleInputFocus,\n handleInputBlur,\n handleToggleDropdown,\n inputRef,\n handleInputClick,\n handleInputChange,\n searchValue,\n clearValue,\n getHandleRemoveValue,\n notFound,\n hasItems,\n } = useSelect({\n items,\n groups,\n value,\n onChange,\n selectAll,\n dropdownRef: defaultDropdownRef,\n controlRef,\n disabled,\n getItemLabel,\n getItemKey,\n getGroupKey,\n searchValue: searchValueProp,\n getItemGroupKey,\n getItemDisabled,\n multiple,\n onBlur,\n onFocus,\n onCreate,\n searchFunction,\n });\n\n const renderItemDefault: PropRenderItem<ITEM> = (props) => {\n const { item, active, hovered, onClick, onMouseEnter } = props;\n\n return (\n <SelectItem\n label={getItemLabel(item)}\n active={active}\n hovered={hovered}\n multiple={multiple}\n size={size}\n indent={dropdownForm === 'round' ? 'increased' : 'normal'}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n disabled={getItemDisabled(item)}\n />\n );\n };\n\n const renderValueDefaultMultiple: PropRenderValue<ITEM> = ({\n item,\n handleRemove,\n }) => {\n return (\n <SelectValueTag\n label={getItemLabel(item)}\n key={getItemKey(item)}\n size={size}\n disabled={disabled || getItemDisabled(item)}\n handleRemove={handleRemove}\n />\n );\n };\n\n const renderValueDefaultNotMultiple: PropRenderValue<ITEM> = (props) => {\n const valueLable = getItemLabel(props.item);\n\n return (\n <span className={cnSelect('ControlValue')} title={valueLable}>\n {valueLable}\n </span>\n );\n };\n\n const renderValue =\n renderValueProp ||\n (multiple ? renderValueDefaultMultiple : renderValueDefaultNotMultiple);\n\n const inputRefForRender = useForkRef([inputRef, inputRefProp]);\n\n const handleChangeValue = (e: React.ChangeEvent<HTMLInputElement>) => {\n handleInputChange(e);\n const { value } = e.target;\n !disabled && onInputChange?.({ e, id, name, value: value || null });\n };\n\n const renderControlValue = () => {\n const width = multiple\n ? getInputWidth(controlInnerRef, helperInputFakeElement)\n : undefined;\n return (\n <>\n {isMultipleParams(props) &&\n Array.isArray(props.value) &&\n props.value.map((item) =>\n renderValue({ item, handleRemove: getHandleRemoveValue(item) }),\n )}\n {isNotMultipleParams(props) &&\n props.value &&\n renderValue({ item: props.value })}\n {(!value || (Array.isArray(value) && value.length === 0)) &&\n !searchValue &&\n placeholder && (\n <span className={cnSelect('Placeholder')} title=\"placeholder\">\n {placeholder}\n </span>\n )}\n <input\n {...getKeyProps()}\n type=\"text\"\n name={name}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n aria-label={ariaLabel}\n onChange={handleChangeValue}\n ref={inputRefForRender}\n className={cnSelect('Input', {\n size,\n hide: !multiple && !!value,\n multiple,\n })}\n value={searchValue}\n style={{ width }}\n />\n </>\n );\n };\n\n return (\n <>\n <SelectContainer\n focused={isFocused}\n disabled={disabled}\n size={size}\n view={view}\n required={required}\n form={form}\n multiple={multiple}\n ref={ref}\n type=\"combobox\"\n style={style}\n {...otherProps}\n >\n <div\n className={cnSelect('Control', { hasInput: true })}\n ref={controlRef}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n id={id}\n >\n <div\n className={cnSelect('ControlInner')}\n onClick={handleInputClick}\n role=\"button\"\n ref={controlInnerRef}\n aria-hidden=\"true\"\n >\n <div className={cnSelect('ControlValueContainer')}>\n {multiple ? (\n <div className={cnSelect('ControlValue')}>\n {renderControlValue()}\n </div>\n ) : (\n renderControlValue()\n )}\n </div>\n </div>\n <span className={cnSelect('Indicators')}>\n {value && (\n <button\n type=\"button\"\n onClick={clearValue}\n className={cnSelect('ClearIndicator', [cnMixFocus()])}\n >\n <IconClose\n size=\"xs\"\n className={cnSelect('ClearIndicatorIcon')}\n />\n </button>\n )}\n <span className={cnSelect('Delimiter')} />\n <button\n type=\"button\"\n className={cnSelect('IndicatorsDropdown')}\n tabIndex={-1}\n onClick={handleToggleDropdown}\n >\n <IconSelect\n size=\"xs\"\n className={cnSelect('DropdownIndicatorIcon')}\n />\n </button>\n </span>\n </div>\n <div\n className={cnSelect('HelperInputFakeElement')}\n ref={helperInputFakeElement}\n >\n {searchValue}\n </div>\n </SelectContainer>\n <SelectDropdown\n isOpen={isOpen}\n size={size}\n controlRef={controlRef}\n getOptionProps={getOptionProps}\n dropdownRef={useForkRef([dropdownRef, defaultDropdownRef])}\n form={dropdownForm}\n className={dropdownClassName}\n renderItem={renderItem || renderItemDefault}\n getGroupLabel={getGroupLabel}\n visibleItems={visibleItems}\n labelForNotFound={labelForNotFound}\n labelForCreate={labelForCreate}\n isLoading={isLoading}\n labelForEmptyItems={labelForEmptyItems}\n notFound={notFound}\n hasItems={hasItems}\n style={\n typeof style?.zIndex === 'number'\n ? { zIndex: style.zIndex + 1 }\n : undefined\n }\n />\n </>\n );\n};\n\nexport const Combobox = forwardRef(ComboboxRender) as ComboboxComponent;\n\nexport * from './helpers';\n"],"mappings":"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"}
|
|
@@ -44,7 +44,7 @@ export declare type ComboboxProps<ITEM = DefaultItem, GROUP = DefaultGroup, MULT
|
|
|
44
44
|
status?: PropStatus;
|
|
45
45
|
isLoading?: boolean;
|
|
46
46
|
dropdownClassName?: string;
|
|
47
|
-
dropdownRef?: React.
|
|
47
|
+
dropdownRef?: React.Ref<HTMLDivElement>;
|
|
48
48
|
name?: string;
|
|
49
49
|
renderItem?: PropRenderItem<ITEM>;
|
|
50
50
|
renderValue?: PropRenderValue<ITEM>;
|
|
@@ -54,7 +54,7 @@ export declare type ComboboxProps<ITEM = DefaultItem, GROUP = DefaultGroup, MULT
|
|
|
54
54
|
e: React.SyntheticEvent;
|
|
55
55
|
label: string;
|
|
56
56
|
}) => void;
|
|
57
|
-
inputRef?: React.
|
|
57
|
+
inputRef?: React.Ref<HTMLInputElement>;
|
|
58
58
|
labelForNotFound?: string;
|
|
59
59
|
required?: boolean;
|
|
60
60
|
labelForCreate?: string;
|
|
@@ -75,7 +75,11 @@ export declare type ComboboxProps<ITEM = DefaultItem, GROUP = DefaultGroup, MULT
|
|
|
75
75
|
labelIcon?: IconComponent;
|
|
76
76
|
caption?: string;
|
|
77
77
|
labelPosition?: 'top' | 'left';
|
|
78
|
-
}, HTMLDivElement> & (
|
|
78
|
+
}, HTMLDivElement> & (MULTIPLE extends true ? {
|
|
79
|
+
selectAll?: boolean;
|
|
80
|
+
} : {
|
|
81
|
+
selectAll?: never;
|
|
82
|
+
}) & (ITEM extends {
|
|
79
83
|
label: DefaultItem['label'];
|
|
80
84
|
} ? {} : {
|
|
81
85
|
getItemLabel: PropGetItemLabel<ITEM>;
|
|
@@ -114,7 +118,7 @@ export declare function withDefaultGetters<ITEM = DefaultItem, GROUP = DefaultGr
|
|
|
114
118
|
status?: "alert" | "warning" | "success" | undefined;
|
|
115
119
|
isLoading?: boolean | undefined;
|
|
116
120
|
dropdownClassName?: string | undefined;
|
|
117
|
-
dropdownRef?: React.
|
|
121
|
+
dropdownRef?: React.Ref<HTMLDivElement> | undefined;
|
|
118
122
|
name?: string | undefined;
|
|
119
123
|
renderItem?: PropRenderItem<ITEM> | undefined;
|
|
120
124
|
renderValue?: PropRenderValue<ITEM> | undefined;
|
|
@@ -124,7 +128,7 @@ export declare function withDefaultGetters<ITEM = DefaultItem, GROUP = DefaultGr
|
|
|
124
128
|
e: React.SyntheticEvent<Element, Event>;
|
|
125
129
|
label: string;
|
|
126
130
|
}) => void) | undefined;
|
|
127
|
-
inputRef?: React.
|
|
131
|
+
inputRef?: React.Ref<HTMLInputElement> | undefined;
|
|
128
132
|
labelForNotFound?: string | undefined;
|
|
129
133
|
required?: boolean | undefined;
|
|
130
134
|
labelForCreate?: string | undefined;
|
|
@@ -145,7 +149,11 @@ export declare function withDefaultGetters<ITEM = DefaultItem, GROUP = DefaultGr
|
|
|
145
149
|
labelIcon?: IconComponent | undefined;
|
|
146
150
|
caption?: string | undefined;
|
|
147
151
|
labelPosition?: "left" | "top" | undefined;
|
|
148
|
-
} & Omit<React.HTMLAttributes<HTMLDivElement>, "css" | "placeholder" | "onFocus" | "onBlur" | "onChange" | "size" | "caption" | "form" | "label" | "view" | "status" | "name" | "disabled" | "value" | "multiple" | "required" | "inputRef" | "items" | "dropdownForm" | "ariaLabel" | "dropdownClassName" | "dropdownRef" | "isLoading" | "labelForEmptyItems" | "renderItem" | "renderValue" | "groups" | "getItemLabel" | "getItemKey" | "getItemGroupKey" | "getItemDisabled" | "getGroupLabel" | "getGroupKey" | "labelIcon" | "labelPosition" | "searchFunction" | "searchValue" | "labelForCreate" | "labelForNotFound" | "onCreate" | "onInputChange"> & React.RefAttributes<HTMLDivElement> & (
|
|
152
|
+
} & Omit<React.HTMLAttributes<HTMLDivElement>, "css" | "placeholder" | "onFocus" | "onBlur" | "onChange" | "size" | "caption" | "form" | "label" | "view" | "status" | "name" | "disabled" | "value" | "multiple" | "required" | "inputRef" | "items" | "dropdownForm" | "ariaLabel" | "dropdownClassName" | "dropdownRef" | "isLoading" | "labelForEmptyItems" | "renderItem" | "renderValue" | "groups" | "getItemLabel" | "getItemKey" | "getItemGroupKey" | "getItemDisabled" | "getGroupLabel" | "getGroupKey" | "labelIcon" | "labelPosition" | "searchFunction" | "searchValue" | "labelForCreate" | "labelForNotFound" | "onCreate" | "onInputChange"> & React.RefAttributes<HTMLDivElement> & (MULTIPLE extends true ? {
|
|
153
|
+
selectAll?: boolean | undefined;
|
|
154
|
+
} : {
|
|
155
|
+
selectAll?: undefined;
|
|
156
|
+
}) & (ITEM extends {
|
|
149
157
|
label: string;
|
|
150
158
|
} ? {} : {
|
|
151
159
|
getItemLabel: PropGetItemLabel<ITEM>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","names":["defaultGetItemKey","item","id","defaultGetItemLabel","label","defaultGetItemGroupKey","groupId","defaultGetItemDisabled","disabled","defaultGetGroupKey","group","defaultGetGroupLabel","isMultipleParams","params","multiple","isNotMultipleParams","withDefaultGetters","props","getItemLabel","getItemKey","getItemGroupKey","getItemDisabled","getGroupLabel","getGroupKey"],"sources":["../../../../../src/components/Combobox/helpers.ts"],"sourcesContent":["import { IconComponent } from '@consta/icons/Icon';\nimport React from 'react';\n\nimport { PropsWithHTMLAttributesAndRef } from '../../utils/types/PropsWithHTMLAttributes';\nimport {\n PropForm,\n PropSize,\n PropStatus,\n PropView,\n RenderItemProps,\n} from '../SelectComponents/types';\nimport { TextFieldPropOnChange } from '../TextField/TextField';\n\nexport type DefaultItem = {\n label: string;\n id: string | number;\n groupId?: string | number;\n disabled?: boolean;\n};\n\nexport type DefaultGroup = {\n label: string;\n id: string | number;\n};\n\ntype RenderValueProps<ITEM> = {\n item: ITEM;\n handleRemove?: (e: React.SyntheticEvent) => void;\n};\n\nexport type PropGetItemLabel<ITEM> = (item: ITEM) => string;\nexport type PropGetItemKey<ITEM> = (item: ITEM) => string | number;\nexport type PropGetItemGroupKey<ITEM> = (\n item: ITEM,\n) => string | number | undefined;\nexport type PropGetItemDisabled<ITEM> = (item: ITEM) => boolean | undefined;\nexport type PropGetGroupKey<GROUP> = (group: GROUP) => string | number;\nexport type PropGetGroupLabel<GROUP> = (group: GROUP) => string;\ntype PropSearchFunction<ITEM> = (item: ITEM, searchValue: string) => boolean;\ntype PropOnChange<ITEM, MULTIPLE extends boolean> = (props: {\n value: (MULTIPLE extends true ? ITEM[] : ITEM) | null;\n e: React.SyntheticEvent;\n}) => void;\ntype PropValue<ITEM, MULTIPLE extends boolean> =\n | (MULTIPLE extends true ? ITEM[] : ITEM)\n | null\n | undefined;\n\nexport type PropRenderItem<ITEM> = (\n props: RenderItemProps<ITEM>,\n) => React.ReactElement | null;\nexport type PropRenderValue<ITEM> = (\n props: RenderValueProps<ITEM>,\n) => React.ReactElement | null;\n\nexport type ComboboxProps<\n ITEM = DefaultItem,\n GROUP = DefaultGroup,\n MULTIPLE extends boolean = false,\n> = PropsWithHTMLAttributesAndRef<\n {\n items: ITEM[];\n onChange: PropOnChange<ITEM, MULTIPLE>;\n disabled?: boolean;\n form?: PropForm;\n dropdownForm?: 'default' | 'brick' | 'round';\n size?: PropSize;\n view?: PropView;\n placeholder?: string;\n ariaLabel?: string;\n status?: PropStatus;\n isLoading?: boolean;\n dropdownClassName?: string;\n dropdownRef?: React.
|
|
1
|
+
{"version":3,"file":"helpers.js","names":["defaultGetItemKey","item","id","defaultGetItemLabel","label","defaultGetItemGroupKey","groupId","defaultGetItemDisabled","disabled","defaultGetGroupKey","group","defaultGetGroupLabel","isMultipleParams","params","multiple","isNotMultipleParams","withDefaultGetters","props","getItemLabel","getItemKey","getItemGroupKey","getItemDisabled","getGroupLabel","getGroupKey"],"sources":["../../../../../src/components/Combobox/helpers.ts"],"sourcesContent":["import { IconComponent } from '@consta/icons/Icon';\nimport React from 'react';\n\nimport { PropsWithHTMLAttributesAndRef } from '../../utils/types/PropsWithHTMLAttributes';\nimport {\n PropForm,\n PropSize,\n PropStatus,\n PropView,\n RenderItemProps,\n} from '../SelectComponents/types';\nimport { TextFieldPropOnChange } from '../TextField/TextField';\n\nexport type DefaultItem = {\n label: string;\n id: string | number;\n groupId?: string | number;\n disabled?: boolean;\n};\n\nexport type DefaultGroup = {\n label: string;\n id: string | number;\n};\n\ntype RenderValueProps<ITEM> = {\n item: ITEM;\n handleRemove?: (e: React.SyntheticEvent) => void;\n};\n\nexport type PropGetItemLabel<ITEM> = (item: ITEM) => string;\nexport type PropGetItemKey<ITEM> = (item: ITEM) => string | number;\nexport type PropGetItemGroupKey<ITEM> = (\n item: ITEM,\n) => string | number | undefined;\nexport type PropGetItemDisabled<ITEM> = (item: ITEM) => boolean | undefined;\nexport type PropGetGroupKey<GROUP> = (group: GROUP) => string | number;\nexport type PropGetGroupLabel<GROUP> = (group: GROUP) => string;\ntype PropSearchFunction<ITEM> = (item: ITEM, searchValue: string) => boolean;\ntype PropOnChange<ITEM, MULTIPLE extends boolean> = (props: {\n value: (MULTIPLE extends true ? ITEM[] : ITEM) | null;\n e: React.SyntheticEvent;\n}) => void;\ntype PropValue<ITEM, MULTIPLE extends boolean> =\n | (MULTIPLE extends true ? ITEM[] : ITEM)\n | null\n | undefined;\n\nexport type PropRenderItem<ITEM> = (\n props: RenderItemProps<ITEM>,\n) => React.ReactElement | null;\nexport type PropRenderValue<ITEM> = (\n props: RenderValueProps<ITEM>,\n) => React.ReactElement | null;\n\nexport type ComboboxProps<\n ITEM = DefaultItem,\n GROUP = DefaultGroup,\n MULTIPLE extends boolean = false,\n> = PropsWithHTMLAttributesAndRef<\n {\n items: ITEM[];\n onChange: PropOnChange<ITEM, MULTIPLE>;\n disabled?: boolean;\n form?: PropForm;\n dropdownForm?: 'default' | 'brick' | 'round';\n size?: PropSize;\n view?: PropView;\n placeholder?: string;\n ariaLabel?: string;\n status?: PropStatus;\n isLoading?: boolean;\n dropdownClassName?: string;\n dropdownRef?: React.Ref<HTMLDivElement>;\n name?: string;\n renderItem?: PropRenderItem<ITEM>;\n renderValue?: PropRenderValue<ITEM>;\n onFocus?: React.FocusEventHandler<HTMLInputElement>;\n onBlur?: React.FocusEventHandler<HTMLInputElement>;\n onCreate?: (props: { e: React.SyntheticEvent; label: string }) => void;\n inputRef?: React.Ref<HTMLInputElement>;\n labelForNotFound?: string;\n required?: boolean;\n labelForCreate?: string;\n labelForEmptyItems?: string;\n searchFunction?: PropSearchFunction<ITEM>;\n searchValue?: string;\n multiple?: MULTIPLE;\n value?: PropValue<ITEM, MULTIPLE>;\n groups?: GROUP[];\n onInputChange?: TextFieldPropOnChange;\n getItemLabel?: PropGetItemLabel<ITEM>;\n getItemKey?: PropGetItemKey<ITEM>;\n getItemGroupKey?: PropGetItemGroupKey<ITEM>;\n getItemDisabled?: PropGetItemDisabled<ITEM>;\n getGroupLabel?: PropGetGroupLabel<GROUP>;\n getGroupKey?: PropGetGroupKey<GROUP>;\n label?: string;\n labelIcon?: IconComponent;\n caption?: string;\n labelPosition?: 'top' | 'left';\n },\n HTMLDivElement\n> &\n (MULTIPLE extends true\n ? {\n selectAll?: boolean;\n }\n : {\n selectAll?: never;\n }) &\n (ITEM extends { label: DefaultItem['label'] }\n ? {}\n : { getItemLabel: PropGetItemLabel<ITEM> }) &\n (ITEM extends { id: DefaultItem['id'] }\n ? {}\n : { getItemKey: PropGetItemKey<ITEM> }) &\n (GROUP extends { label: DefaultGroup['label'] }\n ? {}\n : { getGroupLabel: PropGetGroupLabel<GROUP> }) &\n (GROUP extends { id: DefaultGroup['id'] }\n ? {}\n : { getGroupKey: PropGetGroupKey<GROUP> });\n\nexport type ComboboxComponent = <\n ITEM = DefaultItem,\n GROUP = DefaultGroup,\n MULTIPLE extends boolean = false,\n>(\n props: ComboboxProps<ITEM, GROUP, MULTIPLE>,\n) => React.ReactElement | null;\n\nexport const defaultGetItemKey: PropGetItemKey<DefaultItem> = (item) => item.id;\nexport const defaultGetItemLabel: PropGetItemLabel<DefaultItem> = (item) =>\n item.label;\nexport const defaultGetItemGroupKey: PropGetItemGroupKey<DefaultItem> = (\n item,\n) => item.groupId;\nexport const defaultGetItemDisabled: PropGetItemDisabled<DefaultItem> = (\n item,\n) => item.disabled;\n\nexport const defaultGetGroupKey: PropGetGroupKey<DefaultGroup> = (group) =>\n group.id;\nexport const defaultGetGroupLabel: PropGetGroupLabel<DefaultGroup> = (group) =>\n group.label;\n\nexport const isMultipleParams = <ITEM, GROUP>(\n params: ComboboxProps<ITEM, GROUP, boolean>,\n): params is ComboboxProps<ITEM, GROUP, true> => {\n return !!params.multiple;\n};\n\nexport const isNotMultipleParams = <ITEM, GROUP>(\n params: ComboboxProps<ITEM, GROUP, boolean>,\n): params is ComboboxProps<ITEM, GROUP, false> => {\n return !params.multiple;\n};\n\nexport function withDefaultGetters<\n ITEM = DefaultItem,\n GROUP = DefaultGroup,\n MULTIPLE extends boolean = false,\n>(props: ComboboxProps<ITEM, GROUP, MULTIPLE>) {\n return {\n ...props,\n getItemLabel: props.getItemLabel || defaultGetItemLabel,\n getItemKey: props.getItemKey || defaultGetItemKey,\n getItemGroupKey: props.getItemGroupKey || defaultGetItemGroupKey,\n getItemDisabled: props.getItemDisabled || defaultGetItemDisabled,\n getGroupLabel: props.getGroupLabel || defaultGetGroupLabel,\n getGroupKey: props.getGroupKey || defaultGetGroupKey,\n };\n}\n"],"mappings":"qqBAoIA,MAAO,IAAMA,kBAA8C,CAAG,SAACC,CAAD,QAAUA,EAAI,CAACC,EAAf,CAAvD,CACP,MAAO,IAAMC,oBAAkD,CAAG,SAACF,CAAD,QAChEA,EAAI,CAACG,KAD2D,CAA3D,CAEP,MAAO,IAAMC,uBAAwD,CAAG,SACtEJ,CADsE,QAEnEA,EAAI,CAACK,OAF8D,CAAjE,CAGP,MAAO,IAAMC,uBAAwD,CAAG,SACtEN,CADsE,QAEnEA,EAAI,CAACO,QAF8D,CAAjE,CAIP,MAAO,IAAMC,mBAAiD,CAAG,SAACC,CAAD,QAC/DA,EAAK,CAACR,EADyD,CAA1D,CAEP,MAAO,IAAMS,qBAAqD,CAAG,SAACD,CAAD,QACnEA,EAAK,CAACN,KAD6D,CAA9D,CAGP,MAAO,IAAMQ,iBAAgB,CAAG,SAC9BC,CAD8B,CAEiB,CAC/C,MAAO,CAAC,CAACA,CAAM,CAACC,QACjB,CAJM,CAMP,MAAO,IAAMC,oBAAmB,CAAG,SACjCF,CADiC,CAEe,CAChD,MAAO,CAACA,CAAM,CAACC,QAChB,CAJM,CAMP,MAAO,SAASE,mBAAT,CAILC,CAJK,CAIwC,CAC7C,sCACKA,CADL,MAEEC,YAAY,CAAED,CAAK,CAACC,YAAN,EAAsBf,mBAFtC,CAGEgB,UAAU,CAAEF,CAAK,CAACE,UAAN,EAAoBnB,iBAHlC,CAIEoB,eAAe,CAAEH,CAAK,CAACG,eAAN,EAAyBf,sBAJ5C,CAKEgB,eAAe,CAAEJ,CAAK,CAACI,eAAN,EAAyBd,sBAL5C,CAMEe,aAAa,CAAEL,CAAK,CAACK,aAAN,EAAuBX,oBANxC,CAOEY,WAAW,CAAEN,CAAK,CAACM,WAAN,EAAqBd,kBAPpC,EASD"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import './SelectDropdown.css';
|
|
2
2
|
import React from 'react';
|
|
3
|
+
import { SelectAllItem } from "../../../utils/getGroups";
|
|
3
4
|
import { GetOptionPropsResult, OptionForCreate, OptionProps } from '../../../hooks/useSelect/useSelect';
|
|
4
5
|
import { PropsWithJsxAttributes } from '../../../utils/types/PropsWithJsxAttributes';
|
|
5
6
|
import { PopoverPropOffset } from '../../Popover/Popover';
|
|
@@ -10,7 +11,7 @@ export declare const defaultSelectDropdownPropForm: "default";
|
|
|
10
11
|
declare type Props<ITEM, GROUP> = PropsWithJsxAttributes<{
|
|
11
12
|
size: PropSize;
|
|
12
13
|
controlRef: React.MutableRefObject<HTMLDivElement | null>;
|
|
13
|
-
dropdownRef: React.
|
|
14
|
+
dropdownRef: React.Ref<HTMLDivElement>;
|
|
14
15
|
getOptionProps(props: OptionProps<ITEM>): GetOptionPropsResult;
|
|
15
16
|
form: SelectDropdownPropForm;
|
|
16
17
|
isOpen: boolean;
|
|
@@ -18,10 +19,12 @@ declare type Props<ITEM, GROUP> = PropsWithJsxAttributes<{
|
|
|
18
19
|
isLoading?: boolean;
|
|
19
20
|
renderItem: (props: RenderItemProps<ITEM>) => JSX.Element | null;
|
|
20
21
|
visibleItems: (OptionForCreate | {
|
|
21
|
-
items: ITEM
|
|
22
|
+
items: Array<SelectAllItem | ITEM>;
|
|
22
23
|
key: string | number;
|
|
23
24
|
group?: GROUP;
|
|
24
25
|
groupIndex: number;
|
|
26
|
+
checkedCount?: number;
|
|
27
|
+
totalCount?: number;
|
|
25
28
|
})[];
|
|
26
29
|
getGroupLabel?: (group: GROUP) => string;
|
|
27
30
|
labelForCreate?: string;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _defineProperty from"@babel/runtime/helpers/defineProperty";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["controlRef","size","getOptionProps","dropdownRef","labelForCreate","className","labelForNotFound","labelForEmptyItems","hasItems","form","isOpen","offset","renderItem","visibleItems","isLoading","getGroupLabel","notFound"];function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}import"./SelectDropdown.css";import React,{Fragment,useMemo,useRef}from"react";import{Transition}from"react-transition-group";import{cnListBox,ListItem,mapVerticalSpase}from"../../ListCanary";import{cnMixSpace}from"../../../mixs/MixSpace";import{isOptionForCreate}from"../../../hooks/useSelect/useSelect";import{animateTimeout,cnMixPopoverAnimate}from"../../../mixs/MixPopoverAnimate/MixPopoverAnimate";import{cn}from"../../../utils/bem";import{fabricIndex}from"../../../utils/fabricIndex";import{Popover}from"../../Popover/Popover";import{SelectCreateButton}from"../SelectCreateButton/SelectCreateButton";import{SelectGroupLabel}from"../SelectGroupLabel/SelectGroupLabel";import{SelectLoader}from"../SelectLoader/SelectLoader";export var selectDropdownform=["default","brick","round"];export var defaultSelectDropdownPropForm=selectDropdownform[0];var cnSelectDropdown=cn("SelectDropdown");export var SelectDropdown=function(a){var b=a.controlRef,c=a.size,d=a.getOptionProps,e=a.dropdownRef,f=a.labelForCreate,g=a.className,h=a.labelForNotFound,i=a.labelForEmptyItems,j=a.hasItems,k=!(void 0!==j)||j,l=a.form,m=a.isOpen,n=a.offset,o=void 0===n?"none":n,p=a.renderItem,q=a.visibleItems,r=a.isLoading,s=a.getGroupLabel,t=a.notFound,u=_objectWithoutProperties(a,_excluded),v="round"===l?"increased":"normal",w=useRef(null),x=useMemo(function(){return 0<q.filter(function(a){return isOptionForCreate(a)||Array.isArray(a.items)&&0<a.items.length}).length},[q]),y="none"===o?void 0:o;return React.createElement(Transition,{in:m,unmountOnExit:!0,nodeRef:w,timeout:animateTimeout},function(a){var j=fabricIndex(-1);return React.createElement(Popover,Object.assign({},u,{anchorRef:b,direction:"downStartLeft",possibleDirections:["downStartLeft","upStartLeft","downStartRight","upStartRight"],offset:y,ref:w,role:"listbox",className:cnSelectDropdown(null,[cnListBox({size:c,form:l,border:!0,shadow:!0}),cnMixPopoverAnimate({animate:a}),g]),equalAnchorWidth:!0}),React.createElement("div",{className:cnSelectDropdown("List",[cnMixSpace({pV:mapVerticalSpase[c]})]),ref:e},r&&React.createElement(SelectLoader,{mode:x?"blur":"empty"}),q.map(function(a){return isOptionForCreate(a)?React.createElement(SelectCreateButton,Object.assign({size:c,labelForCreate:f,inputValue:a.label,indent:v},d({index:j(),item:a}))):React.createElement(Fragment,{key:a.key},a.group&&s&&React.createElement(SelectGroupLabel,{label:s(a.group),size:c,indent:v}),a.items.map(function(b,
|
|
1
|
+
import _defineProperty from"@babel/runtime/helpers/defineProperty";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["controlRef","size","getOptionProps","dropdownRef","labelForCreate","className","labelForNotFound","labelForEmptyItems","hasItems","form","isOpen","offset","renderItem","visibleItems","isLoading","getGroupLabel","notFound"];function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}import"./SelectDropdown.css";import React,{Fragment,useMemo,useRef}from"react";import{Transition}from"react-transition-group";import{cnListBox,ListItem,mapVerticalSpase}from"../../ListCanary";import{cnMixSpace}from"../../../mixs/MixSpace";import{isOptionForCreate,isOptionForSelectAll}from"../../../hooks/useSelect/useSelect";import{animateTimeout,cnMixPopoverAnimate}from"../../../mixs/MixPopoverAnimate/MixPopoverAnimate";import{cn}from"../../../utils/bem";import{fabricIndex}from"../../../utils/fabricIndex";import{Popover}from"../../Popover/Popover";import{SelectCreateButton}from"../SelectCreateButton/SelectCreateButton";import{SelectGroupLabel}from"../SelectGroupLabel/SelectGroupLabel";import{SelectItemAll}from"../SelectItemAll/SelectSelectAll";import{SelectLoader}from"../SelectLoader/SelectLoader";export var selectDropdownform=["default","brick","round"];export var defaultSelectDropdownPropForm=selectDropdownform[0];var cnSelectDropdown=cn("SelectDropdown");export var SelectDropdown=function(a){var b=a.controlRef,c=a.size,d=a.getOptionProps,e=a.dropdownRef,f=a.labelForCreate,g=a.className,h=a.labelForNotFound,i=a.labelForEmptyItems,j=a.hasItems,k=!(void 0!==j)||j,l=a.form,m=a.isOpen,n=a.offset,o=void 0===n?"none":n,p=a.renderItem,q=a.visibleItems,r=a.isLoading,s=a.getGroupLabel,t=a.notFound,u=_objectWithoutProperties(a,_excluded),v="round"===l?"increased":"normal",w=useRef(null),x=useMemo(function(){return 0<q.filter(function(a){return isOptionForCreate(a)||Array.isArray(a.items)&&0<a.items.length}).length},[q]),y="none"===o?void 0:o;return React.createElement(Transition,{in:m,unmountOnExit:!0,nodeRef:w,timeout:animateTimeout},function(a){var j=fabricIndex(-1);return React.createElement(Popover,Object.assign({},u,{anchorRef:b,direction:"downStartLeft",possibleDirections:["downStartLeft","upStartLeft","downStartRight","upStartRight"],offset:y,ref:w,role:"listbox",className:cnSelectDropdown(null,[cnListBox({size:c,form:l,border:!0,shadow:!0}),cnMixPopoverAnimate({animate:a}),g]),equalAnchorWidth:!0}),React.createElement("div",{className:cnSelectDropdown("List",[cnMixSpace({pV:mapVerticalSpase[c]})]),ref:e},r&&React.createElement(SelectLoader,{mode:x?"blur":"empty"}),q.map(function(a){return isOptionForCreate(a)?React.createElement(SelectCreateButton,Object.assign({size:c,labelForCreate:f,inputValue:a.label,indent:v},d({index:j(),item:a}))):React.createElement(Fragment,{key:a.key},a.group&&s&&React.createElement(SelectGroupLabel,{label:s(a.group),size:c,indent:v}),a.items.map(function(b,e){return isOptionForSelectAll(b)?React.createElement(SelectItemAll,Object.assign({indent:v,size:c},d({index:j(),item:b}),{intermediate:!!(b.checkedCount&&b.totalCount)&&b.checkedCount!==b.totalCount,checked:b.checkedCount===b.totalCount,countItems:b.checkedCount,total:b.totalCount})):React.createElement(Fragment,{key:"".concat(a.key,"-").concat(e)},p(_objectSpread({item:b},d({index:j(),item:b}))))}))}),!r&&k&&t&&h&&React.createElement(ListItem,{size:c,label:h,innerOffset:v},h),!r&&!k&&i&&React.createElement(ListItem,{size:c,label:h,innerOffset:v},i)))})};
|
|
2
2
|
//# sourceMappingURL=SelectDropdown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectDropdown.js","names":["React","Fragment","useMemo","useRef","Transition","cnListBox","ListItem","mapVerticalSpase","cnMixSpace","isOptionForCreate","animateTimeout","cnMixPopoverAnimate","cn","fabricIndex","Popover","SelectCreateButton","SelectGroupLabel","SelectLoader","selectDropdownform","defaultSelectDropdownPropForm","cnSelectDropdown","SelectDropdown","props","controlRef","size","getOptionProps","dropdownRef","labelForCreate","className","labelForNotFound","labelForEmptyItems","hasItems","form","isOpen","offset","offsetProp","renderItem","visibleItems","isLoading","getGroupLabel","notFound","otherProps","indent","popoverRef","isListShowed","filter","group","Array","isArray","items","length","animate","getIndex","border","shadow","pV","map","label","index","item","key","i"],"sources":["../../../../../../src/components/SelectComponents/SelectDropdown/SelectDropdown.tsx"],"sourcesContent":["import './SelectDropdown.css';\n\nimport React, { Fragment, useMemo, useRef } from 'react';\nimport { Transition } from 'react-transition-group';\n\nimport {\n cnListBox,\n ListItem,\n mapVerticalSpase,\n} from '##/components/ListCanary';\nimport { cnMixSpace } from '##/mixs/MixSpace';\n\nimport {\n GetOptionPropsResult,\n isOptionForCreate,\n OptionForCreate,\n OptionProps,\n} from '../../../hooks/useSelect/useSelect';\nimport {\n animateTimeout,\n cnMixPopoverAnimate,\n} from '../../../mixs/MixPopoverAnimate/MixPopoverAnimate';\nimport { cn } from '../../../utils/bem';\nimport { fabricIndex } from '../../../utils/fabricIndex';\nimport { PropsWithJsxAttributes } from '../../../utils/types/PropsWithJsxAttributes';\nimport { Popover, PopoverPropOffset } from '../../Popover/Popover';\nimport { SelectCreateButton } from '../SelectCreateButton/SelectCreateButton';\nimport { SelectGroupLabel } from '../SelectGroupLabel/SelectGroupLabel';\nimport { SelectLoader } from '../SelectLoader/SelectLoader';\nimport { PropSize, RenderItemProps } from '../types';\n\nexport const selectDropdownform = ['default', 'brick', 'round'] as const;\nexport type SelectDropdownPropForm = typeof selectDropdownform[number];\nexport const defaultSelectDropdownPropForm = selectDropdownform[0];\n\ntype Props<ITEM, GROUP> = PropsWithJsxAttributes<{\n size: PropSize;\n controlRef: React.MutableRefObject<HTMLDivElement | null>;\n dropdownRef: React.MutableRefObject<HTMLDivElement | null>;\n getOptionProps(props: OptionProps<ITEM>): GetOptionPropsResult;\n form: SelectDropdownPropForm;\n isOpen: boolean;\n offset?: PopoverPropOffset | 'none';\n isLoading?: boolean;\n renderItem: (props: RenderItemProps<ITEM>) => JSX.Element | null;\n visibleItems: (\n | OptionForCreate\n | {\n items: ITEM[];\n key: string | number;\n group?: GROUP;\n groupIndex: number;\n }\n )[];\n getGroupLabel?: (group: GROUP) => string;\n labelForCreate?: string;\n labelForNotFound?: string;\n labelForEmptyItems?: string;\n notFound?: boolean;\n hasItems?: boolean;\n}>;\n\ntype SelectDropdown = <ITEM, GROUP>(\n props: Props<ITEM, GROUP>,\n) => React.ReactElement | null;\n\nconst cnSelectDropdown = cn('SelectDropdown');\n\nexport const SelectDropdown: SelectDropdown = (props) => {\n const {\n controlRef,\n size,\n getOptionProps,\n dropdownRef,\n labelForCreate,\n className,\n labelForNotFound,\n labelForEmptyItems,\n hasItems = true,\n form,\n isOpen,\n offset: offsetProp = 'none',\n renderItem,\n visibleItems,\n isLoading,\n getGroupLabel,\n notFound,\n ...otherProps\n } = props;\n\n const indent = form === 'round' ? 'increased' : 'normal';\n\n const popoverRef = useRef<HTMLDivElement>(null);\n\n const isListShowed = useMemo(() => {\n return (\n visibleItems.filter(\n (group) =>\n isOptionForCreate(group) ||\n (Array.isArray(group.items) && group.items.length > 0),\n ).length > 0\n );\n }, [visibleItems]);\n\n const offset = offsetProp === 'none' ? undefined : offsetProp;\n\n return (\n <Transition\n in={isOpen}\n unmountOnExit\n nodeRef={popoverRef}\n timeout={animateTimeout}\n >\n {(animate) => {\n const getIndex = fabricIndex(-1);\n return (\n <Popover\n {...otherProps}\n anchorRef={controlRef}\n direction=\"downStartLeft\"\n possibleDirections={[\n 'downStartLeft',\n 'upStartLeft',\n 'downStartRight',\n 'upStartRight',\n ]}\n offset={offset}\n ref={popoverRef}\n role=\"listbox\"\n className={cnSelectDropdown(null, [\n cnListBox({ size, form, border: true, shadow: true }),\n cnMixPopoverAnimate({ animate }),\n className,\n ])}\n equalAnchorWidth\n >\n <div\n className={cnSelectDropdown('List', [\n cnMixSpace({\n pV: mapVerticalSpase[size],\n }),\n ])}\n ref={dropdownRef}\n >\n {isLoading && (\n <SelectLoader mode={isListShowed ? 'blur' : 'empty'} />\n )}\n {visibleItems.map((group) => {\n if (isOptionForCreate(group)) {\n return (\n <SelectCreateButton\n size={size}\n labelForCreate={labelForCreate}\n inputValue={group.label}\n indent={indent}\n {...getOptionProps({ index: getIndex(), item: group })}\n />\n );\n }\n return (\n <Fragment key={group.key}>\n {group.group && getGroupLabel && (\n <SelectGroupLabel\n label={getGroupLabel(group.group)}\n size={size}\n indent={indent}\n />\n )}\n {group.items.map((item, i) => {\n return (\n <Fragment key={`${group.key}-${i}`}>\n {renderItem({\n item,\n ...getOptionProps({ index: getIndex(), item }),\n })}\n </Fragment>\n );\n })}\n </Fragment>\n );\n })}\n {!isLoading && hasItems && notFound && labelForNotFound && (\n <ListItem\n size={size}\n label={labelForNotFound}\n innerOffset={indent}\n >\n {labelForNotFound}\n </ListItem>\n )}\n {!isLoading && !hasItems && labelForEmptyItems && (\n <ListItem\n size={size}\n label={labelForNotFound}\n innerOffset={indent}\n >\n {labelForEmptyItems}\n </ListItem>\n )}\n </div>\n </Popover>\n );\n }}\n </Transition>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectDropdown.js","names":["React","Fragment","useMemo","useRef","Transition","cnListBox","ListItem","mapVerticalSpase","cnMixSpace","isOptionForCreate","isOptionForSelectAll","animateTimeout","cnMixPopoverAnimate","cn","fabricIndex","Popover","SelectCreateButton","SelectGroupLabel","SelectItemAll","SelectLoader","selectDropdownform","defaultSelectDropdownPropForm","cnSelectDropdown","SelectDropdown","props","controlRef","size","getOptionProps","dropdownRef","labelForCreate","className","labelForNotFound","labelForEmptyItems","hasItems","form","isOpen","offset","offsetProp","renderItem","visibleItems","isLoading","getGroupLabel","notFound","otherProps","indent","popoverRef","isListShowed","filter","group","Array","isArray","items","length","animate","getIndex","border","shadow","pV","map","label","index","item","key","i","checkedCount","totalCount"],"sources":["../../../../../../src/components/SelectComponents/SelectDropdown/SelectDropdown.tsx"],"sourcesContent":["import './SelectDropdown.css';\n\nimport React, { Fragment, useMemo, useRef } from 'react';\nimport { Transition } from 'react-transition-group';\n\nimport {\n cnListBox,\n ListItem,\n mapVerticalSpase,\n} from '##/components/ListCanary';\nimport { cnMixSpace } from '##/mixs/MixSpace';\nimport { SelectAllItem } from '##/utils/getGroups';\n\nimport {\n GetOptionPropsResult,\n isOptionForCreate,\n isOptionForSelectAll,\n OptionForCreate,\n OptionProps,\n} from '../../../hooks/useSelect/useSelect';\nimport {\n animateTimeout,\n cnMixPopoverAnimate,\n} from '../../../mixs/MixPopoverAnimate/MixPopoverAnimate';\nimport { cn } from '../../../utils/bem';\nimport { fabricIndex } from '../../../utils/fabricIndex';\nimport { PropsWithJsxAttributes } from '../../../utils/types/PropsWithJsxAttributes';\nimport { Popover, PopoverPropOffset } from '../../Popover/Popover';\nimport { SelectCreateButton } from '../SelectCreateButton/SelectCreateButton';\nimport { SelectGroupLabel } from '../SelectGroupLabel/SelectGroupLabel';\nimport { SelectItemAll } from '../SelectItemAll/SelectSelectAll';\nimport { SelectLoader } from '../SelectLoader/SelectLoader';\nimport { PropSize, RenderItemProps } from '../types';\n\nexport const selectDropdownform = ['default', 'brick', 'round'] as const;\nexport type SelectDropdownPropForm = typeof selectDropdownform[number];\nexport const defaultSelectDropdownPropForm = selectDropdownform[0];\n\ntype Props<ITEM, GROUP> = PropsWithJsxAttributes<{\n size: PropSize;\n controlRef: React.MutableRefObject<HTMLDivElement | null>;\n dropdownRef: React.Ref<HTMLDivElement>;\n getOptionProps(props: OptionProps<ITEM>): GetOptionPropsResult;\n form: SelectDropdownPropForm;\n isOpen: boolean;\n offset?: PopoverPropOffset | 'none';\n isLoading?: boolean;\n renderItem: (props: RenderItemProps<ITEM>) => JSX.Element | null;\n visibleItems: (\n | OptionForCreate\n | {\n items: Array<SelectAllItem | ITEM>;\n key: string | number;\n group?: GROUP;\n groupIndex: number;\n checkedCount?: number;\n totalCount?: number;\n }\n )[];\n getGroupLabel?: (group: GROUP) => string;\n labelForCreate?: string;\n labelForNotFound?: string;\n labelForEmptyItems?: string;\n notFound?: boolean;\n hasItems?: boolean;\n}>;\n\ntype SelectDropdown = <ITEM, GROUP>(\n props: Props<ITEM, GROUP>,\n) => React.ReactElement | null;\n\nconst cnSelectDropdown = cn('SelectDropdown');\n\nexport const SelectDropdown: SelectDropdown = (props) => {\n const {\n controlRef,\n size,\n getOptionProps,\n dropdownRef,\n labelForCreate,\n className,\n labelForNotFound,\n labelForEmptyItems,\n hasItems = true,\n form,\n isOpen,\n offset: offsetProp = 'none',\n renderItem,\n visibleItems,\n isLoading,\n getGroupLabel,\n notFound,\n ...otherProps\n } = props;\n\n const indent = form === 'round' ? 'increased' : 'normal';\n\n const popoverRef = useRef<HTMLDivElement>(null);\n\n const isListShowed = useMemo(() => {\n return (\n visibleItems.filter(\n (group) =>\n isOptionForCreate(group) ||\n (Array.isArray(group.items) && group.items.length > 0),\n ).length > 0\n );\n }, [visibleItems]);\n\n const offset = offsetProp === 'none' ? undefined : offsetProp;\n\n return (\n <Transition\n in={isOpen}\n unmountOnExit\n nodeRef={popoverRef}\n timeout={animateTimeout}\n >\n {(animate) => {\n const getIndex = fabricIndex(-1);\n return (\n <Popover\n {...otherProps}\n anchorRef={controlRef}\n direction=\"downStartLeft\"\n possibleDirections={[\n 'downStartLeft',\n 'upStartLeft',\n 'downStartRight',\n 'upStartRight',\n ]}\n offset={offset}\n ref={popoverRef}\n role=\"listbox\"\n className={cnSelectDropdown(null, [\n cnListBox({ size, form, border: true, shadow: true }),\n cnMixPopoverAnimate({ animate }),\n className,\n ])}\n equalAnchorWidth\n >\n <div\n className={cnSelectDropdown('List', [\n cnMixSpace({\n pV: mapVerticalSpase[size],\n }),\n ])}\n ref={dropdownRef}\n >\n {isLoading && (\n <SelectLoader mode={isListShowed ? 'blur' : 'empty'} />\n )}\n {visibleItems.map((group) => {\n if (isOptionForCreate(group)) {\n return (\n <SelectCreateButton\n size={size}\n labelForCreate={labelForCreate}\n inputValue={group.label}\n indent={indent}\n {...getOptionProps({ index: getIndex(), item: group })}\n />\n );\n }\n return (\n <Fragment key={group.key}>\n {group.group && getGroupLabel && (\n <SelectGroupLabel\n label={getGroupLabel(group.group)}\n size={size}\n indent={indent}\n />\n )}\n {group.items.map((item, i) => {\n if (isOptionForSelectAll(item)) {\n return (\n <SelectItemAll\n indent={indent}\n size={size}\n {...getOptionProps({ index: getIndex(), item })}\n intermediate={\n item.checkedCount && item.totalCount\n ? item.checkedCount !== item.totalCount\n : false\n }\n checked={item.checkedCount === item.totalCount}\n countItems={item.checkedCount}\n total={item.totalCount}\n />\n );\n }\n return (\n <Fragment key={`${group.key}-${i}`}>\n {renderItem({\n item,\n ...getOptionProps({ index: getIndex(), item }),\n })}\n </Fragment>\n );\n })}\n </Fragment>\n );\n })}\n {!isLoading && hasItems && notFound && labelForNotFound && (\n <ListItem\n size={size}\n label={labelForNotFound}\n innerOffset={indent}\n >\n {labelForNotFound}\n </ListItem>\n )}\n {!isLoading && !hasItems && labelForEmptyItems && (\n <ListItem\n size={size}\n label={labelForNotFound}\n innerOffset={indent}\n >\n {labelForEmptyItems}\n </ListItem>\n )}\n </div>\n </Popover>\n );\n }}\n </Transition>\n );\n};\n"],"mappings":"y+BAAA,6BAEA,MAAOA,MAAP,EAAgBC,QAAhB,CAA0BC,OAA1B,CAAmCC,MAAnC,KAAiD,OAAjD,CACA,OAASC,UAAT,KAA2B,wBAA3B,CAEA,OACEC,SADF,CAEEC,QAFF,CAGEC,gBAHF,wBAKA,OAASC,UAAT,8BAGA,OAEEC,iBAFF,CAGEC,oBAHF,0CAOA,OACEC,cADF,CAEEC,mBAFF,yDAIA,OAASC,EAAT,0BACA,OAASC,WAAT,kCAEA,OAASC,OAAT,6BACA,OAASC,kBAAT,gDACA,OAASC,gBAAT,4CACA,OAASC,aAAT,wCACA,OAASC,YAAT,oCAGA,MAAO,IAAMC,mBAAkB,CAAG,CAAC,SAAD,CAAY,OAAZ,CAAqB,OAArB,CAA3B,CAEP,MAAO,IAAMC,8BAA6B,CAAGD,kBAAkB,CAAC,CAAD,CAAxD,CAmCP,GAAME,iBAAgB,CAAGT,EAAE,CAAC,gBAAD,CAA3B,CAEA,MAAO,IAAMU,eAA8B,CAAG,SAACC,CAAD,CAAW,IAErDC,EAFqD,CAoBnDD,CApBmD,CAErDC,UAFqD,CAGrDC,CAHqD,CAoBnDF,CApBmD,CAGrDE,IAHqD,CAIrDC,CAJqD,CAoBnDH,CApBmD,CAIrDG,cAJqD,CAKrDC,CALqD,CAoBnDJ,CApBmD,CAKrDI,WALqD,CAMrDC,CANqD,CAoBnDL,CApBmD,CAMrDK,cANqD,CAOrDC,CAPqD,CAoBnDN,CApBmD,CAOrDM,SAPqD,CAQrDC,CARqD,CAoBnDP,CApBmD,CAQrDO,gBARqD,CASrDC,CATqD,CAoBnDR,CApBmD,CASrDQ,kBATqD,GAoBnDR,CApBmD,CAUrDS,QAVqD,CAUrDA,CAVqD,kBAWrDC,CAXqD,CAoBnDV,CApBmD,CAWrDU,IAXqD,CAYrDC,CAZqD,CAoBnDX,CApBmD,CAYrDW,MAZqD,GAoBnDX,CApBmD,CAarDY,MAbqD,CAa7CC,CAb6C,YAahC,MAbgC,GAcrDC,CAdqD,CAoBnDd,CApBmD,CAcrDc,UAdqD,CAerDC,CAfqD,CAoBnDf,CApBmD,CAerDe,YAfqD,CAgBrDC,CAhBqD,CAoBnDhB,CApBmD,CAgBrDgB,SAhBqD,CAiBrDC,CAjBqD,CAoBnDjB,CApBmD,CAiBrDiB,aAjBqD,CAkBrDC,CAlBqD,CAoBnDlB,CApBmD,CAkBrDkB,QAlBqD,CAmBlDC,CAnBkD,0BAoBnDnB,CApBmD,YAsBjDoB,CAAM,CAAY,OAAT,GAAAV,CAAI,CAAe,WAAf,CAA6B,QAtBO,CAwBjDW,CAAU,CAAG1C,MAAM,CAAiB,IAAjB,CAxB8B,CA0BjD2C,CAAY,CAAG5C,OAAO,CAAC,UAAM,CACjC,MAKa,EAJX,CAAAqC,CAAY,CAACQ,MAAb,CACE,SAACC,CAAD,QACEvC,kBAAiB,CAACuC,CAAD,CAAjB,EACCC,KAAK,CAACC,OAAN,CAAcF,CAAK,CAACG,KAApB,GAAmD,CAArB,CAAAH,CAAK,CAACG,KAAN,CAAYC,MAF7C,CADF,EAIEA,MAEL,CAR2B,CAQzB,CAACb,CAAD,CARyB,CA1B2B,CAoCjDH,CAAM,CAAkB,MAAf,GAAAC,CAAU,QAA0BA,CApCI,CAsCvD,MACE,qBAAC,UAAD,EACE,GAAIF,CADN,CAEE,aAAa,GAFf,CAGE,OAAO,CAAEU,CAHX,CAIE,OAAO,CAAElC,cAJX,EAMG,SAAC0C,CAAD,CAAa,CACZ,GAAMC,EAAQ,CAAGxC,WAAW,CAAC,CAAC,CAAF,CAA5B,CACA,MACE,qBAAC,OAAD,kBACM6B,CADN,EAEE,SAAS,CAAElB,CAFb,CAGE,SAAS,CAAC,eAHZ,CAIE,kBAAkB,CAAE,CAClB,eADkB,CAElB,aAFkB,CAGlB,gBAHkB,CAIlB,cAJkB,CAJtB,CAUE,MAAM,CAAEW,CAVV,CAWE,GAAG,CAAES,CAXP,CAYE,IAAI,CAAC,SAZP,CAaE,SAAS,CAAEvB,gBAAgB,CAAC,IAAD,CAAO,CAChCjB,SAAS,CAAC,CAAEqB,IAAI,CAAJA,CAAF,CAAQQ,IAAI,CAAJA,CAAR,CAAcqB,MAAM,GAApB,CAA4BC,MAAM,GAAlC,CAAD,CADuB,CAEhC5C,mBAAmB,CAAC,CAAEyC,OAAO,CAAPA,CAAF,CAAD,CAFa,CAGhCvB,CAHgC,CAAP,CAb7B,CAkBE,gBAAgB,GAlBlB,GAoBE,2BACE,SAAS,CAAER,gBAAgB,CAAC,MAAD,CAAS,CAClCd,UAAU,CAAC,CACTiD,EAAE,CAAElD,gBAAgB,CAACmB,CAAD,CADX,CAAD,CADwB,CAAT,CAD7B,CAME,GAAG,CAAEE,CANP,EAQGY,CAAS,EACR,oBAAC,YAAD,EAAc,IAAI,CAAEM,CAAY,CAAG,MAAH,CAAY,OAA5C,EATJ,CAWGP,CAAY,CAACmB,GAAb,CAAiB,SAACV,CAAD,CAAW,OACvBvC,kBAAiB,CAACuC,CAAD,CADM,CAGvB,oBAAC,kBAAD,gBACE,IAAI,CAAEtB,CADR,CAEE,cAAc,CAAEG,CAFlB,CAGE,UAAU,CAAEmB,CAAK,CAACW,KAHpB,CAIE,MAAM,CAAEf,CAJV,EAKMjB,CAAc,CAAC,CAAEiC,KAAK,CAAEN,CAAQ,EAAjB,CAAqBO,IAAI,CAAEb,CAA3B,CAAD,CALpB,EAHuB,CAazB,oBAAC,QAAD,EAAU,GAAG,CAAEA,CAAK,CAACc,GAArB,EACGd,CAAK,CAACA,KAAN,EAAeP,CAAf,EACC,oBAAC,gBAAD,EACE,KAAK,CAAEA,CAAa,CAACO,CAAK,CAACA,KAAP,CADtB,CAEE,IAAI,CAAEtB,CAFR,CAGE,MAAM,CAAEkB,CAHV,EAFJ,CAQGI,CAAK,CAACG,KAAN,CAAYO,GAAZ,CAAgB,SAACG,CAAD,CAAOE,CAAP,CAAa,OACxBrD,qBAAoB,CAACmD,CAAD,CADI,CAGxB,oBAAC,aAAD,gBACE,MAAM,CAAEjB,CADV,CAEE,IAAI,CAAElB,CAFR,EAGMC,CAAc,CAAC,CAAEiC,KAAK,CAAEN,CAAQ,EAAjB,CAAqBO,IAAI,CAAJA,CAArB,CAAD,CAHpB,EAIE,YAAY,IACVA,CAAI,CAACG,YAAL,EAAqBH,CAAI,CAACI,UADhB,GAENJ,CAAI,CAACG,YAAL,GAAsBH,CAAI,CAACI,UANnC,CASE,OAAO,CAAEJ,CAAI,CAACG,YAAL,GAAsBH,CAAI,CAACI,UATtC,CAUE,UAAU,CAAEJ,CAAI,CAACG,YAVnB,CAWE,KAAK,CAAEH,CAAI,CAACI,UAXd,GAHwB,CAmB1B,oBAAC,QAAD,EAAU,GAAG,WAAKjB,CAAK,CAACc,GAAX,aAAkBC,CAAlB,CAAb,EACGzB,CAAU,gBACTuB,IAAI,CAAJA,CADS,EAENlC,CAAc,CAAC,CAAEiC,KAAK,CAAEN,CAAQ,EAAjB,CAAqBO,IAAI,CAAJA,CAArB,CAAD,CAFR,EADb,CAOH,CA1BA,CARH,CAqCH,CAlDA,CAXH,CA8DG,CAACrB,CAAD,EAAcP,CAAd,EAA0BS,CAA1B,EAAsCX,CAAtC,EACC,oBAAC,QAAD,EACE,IAAI,CAAEL,CADR,CAEE,KAAK,CAAEK,CAFT,CAGE,WAAW,CAAEa,CAHf,EAKGb,CALH,CA/DJ,CAuEG,CAACS,CAAD,EAAc,CAACP,CAAf,EAA2BD,CAA3B,EACC,oBAAC,QAAD,EACE,IAAI,CAAEN,CADR,CAEE,KAAK,CAAEK,CAFT,CAGE,WAAW,CAAEa,CAHf,EAKGZ,CALH,CAxEJ,CApBF,CAuGH,CAhHH,CAmHH,CA1JM"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import './SelectItem.css';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';
|
|
4
|
+
import { CheckboxPropSize } from '../../Checkbox/Checkbox';
|
|
4
5
|
import { PropSize } from '../types';
|
|
5
6
|
export declare type SelectItemProps = PropsWithHTMLAttributes<{
|
|
6
7
|
label: string;
|
|
@@ -11,5 +12,6 @@ export declare type SelectItemProps = PropsWithHTMLAttributes<{
|
|
|
11
12
|
indent: 'normal' | 'increased';
|
|
12
13
|
disabled: boolean | undefined;
|
|
13
14
|
}, HTMLDivElement>;
|
|
15
|
+
export declare const sizeCheckboxMap: Record<PropSize, CheckboxPropSize>;
|
|
14
16
|
export declare const cnSelectItem: import("@bem-react/classname").ClassNameFormatter;
|
|
15
17
|
export declare const SelectItem: React.FC<SelectItemProps>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["className","label","active","hovered","multiple","size","indent","disabled"];import"./SelectItem.css";import React from"react";import{ListItem}from"../../ListCanary";import{cn}from"../../../utils/bem";import{Checkbox}from"../../Checkbox/Checkbox";var sizeCheckboxMap={xs:"m",s:"m",m:"l",l:"l"};export var cnSelectItem=cn("SelectItem");export var SelectItem=function(a){var b=a.className,c=a.label,d=a.active,e=a.hovered,f=a.multiple,g=a.size,h=a.indent,i=a.disabled,j=_objectWithoutProperties(a,_excluded);return React.createElement(ListItem,Object.assign({},j,{className:cnSelectItem(null,[b]),"aria-selected":d,"aria-disabled":i,role:"option",label:c,innerOffset:h,size:g,active:e,checked:!f&&d,disabled:i,leftSide:f&&React.createElement(Checkbox,{checked:d,disabled:i,size:sizeCheckboxMap[g]})}),c)};
|
|
1
|
+
import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["className","label","active","hovered","multiple","size","indent","disabled"];import"./SelectItem.css";import React from"react";import{ListItem}from"../../ListCanary";import{cn}from"../../../utils/bem";import{Checkbox}from"../../Checkbox/Checkbox";export var sizeCheckboxMap={xs:"m",s:"m",m:"l",l:"l"};export var cnSelectItem=cn("SelectItem");export var SelectItem=function(a){var b=a.className,c=a.label,d=a.active,e=a.hovered,f=a.multiple,g=a.size,h=a.indent,i=a.disabled,j=_objectWithoutProperties(a,_excluded);return React.createElement(ListItem,Object.assign({},j,{className:cnSelectItem(null,[b]),"aria-selected":d,"aria-disabled":i,role:"option",label:c,innerOffset:h,size:g,active:e,checked:!f&&d,disabled:i,leftSide:f&&React.createElement(Checkbox,{checked:d,disabled:i,size:sizeCheckboxMap[g]})}),c)};
|
|
2
2
|
//# sourceMappingURL=SelectItem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectItem.js","names":["React","ListItem","cn","Checkbox","sizeCheckboxMap","xs","s","m","l","cnSelectItem","SelectItem","props","className","label","active","hovered","multiple","size","indent","disabled","otherProps"],"sources":["../../../../../../src/components/SelectComponents/SelectItem/SelectItem.tsx"],"sourcesContent":["import './SelectItem.css';\n\nimport React from 'react';\n\nimport { ListItem } from '##/components/ListCanary';\nimport { cn } from '##/utils/bem';\n\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport { Checkbox, CheckboxPropSize } from '../../Checkbox/Checkbox';\nimport { PropSize } from '../types';\n\nexport type SelectItemProps = PropsWithHTMLAttributes<\n {\n label: string;\n active: boolean;\n hovered: boolean;\n multiple: boolean;\n size: PropSize;\n indent: 'normal' | 'increased';\n disabled: boolean | undefined;\n },\n HTMLDivElement\n>;\n\
|
|
1
|
+
{"version":3,"file":"SelectItem.js","names":["React","ListItem","cn","Checkbox","sizeCheckboxMap","xs","s","m","l","cnSelectItem","SelectItem","props","className","label","active","hovered","multiple","size","indent","disabled","otherProps"],"sources":["../../../../../../src/components/SelectComponents/SelectItem/SelectItem.tsx"],"sourcesContent":["import './SelectItem.css';\n\nimport React from 'react';\n\nimport { ListItem } from '##/components/ListCanary';\nimport { cn } from '##/utils/bem';\n\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport { Checkbox, CheckboxPropSize } from '../../Checkbox/Checkbox';\nimport { PropSize } from '../types';\n\nexport type SelectItemProps = PropsWithHTMLAttributes<\n {\n label: string;\n active: boolean;\n hovered: boolean;\n multiple: boolean;\n size: PropSize;\n indent: 'normal' | 'increased';\n disabled: boolean | undefined;\n },\n HTMLDivElement\n>;\n\nexport const sizeCheckboxMap: Record<PropSize, CheckboxPropSize> = {\n xs: 'm',\n s: 'm',\n m: 'l',\n l: 'l',\n};\n\nexport const cnSelectItem = cn('SelectItem');\n\nexport const SelectItem: React.FC<SelectItemProps> = (props) => {\n const {\n className,\n label,\n active,\n hovered,\n multiple,\n size,\n indent,\n disabled,\n ...otherProps\n } = props;\n\n return (\n <ListItem\n {...otherProps}\n className={cnSelectItem(null, [className])}\n aria-selected={active}\n aria-disabled={disabled}\n role=\"option\"\n label={label}\n innerOffset={indent}\n size={size}\n active={hovered}\n checked={!multiple && active}\n disabled={disabled}\n leftSide={\n multiple && (\n <Checkbox\n checked={active}\n disabled={disabled}\n size={sizeCheckboxMap[size]}\n />\n )\n }\n >\n {label}\n </ListItem>\n );\n};\n"],"mappings":"kLAAA,yBAEA,MAAOA,MAAP,KAAkB,OAAlB,CAEA,OAASC,QAAT,wBACA,OAASC,EAAT,0BAGA,OAASC,QAAT,+BAgBA,MAAO,IAAMC,gBAAmD,CAAG,CACjEC,EAAE,CAAE,GAD6D,CAEjEC,CAAC,CAAE,GAF8D,CAGjEC,CAAC,CAAE,GAH8D,CAIjEC,CAAC,CAAE,GAJ8D,CAA5D,CAOP,MAAO,IAAMC,aAAY,CAAGP,EAAE,CAAC,YAAD,CAAvB,CAEP,MAAO,IAAMQ,WAAqC,CAAG,SAACC,CAAD,CAAW,CAC9D,GACEC,EADF,CAUID,CAVJ,CACEC,SADF,CAEEC,CAFF,CAUIF,CAVJ,CAEEE,KAFF,CAGEC,CAHF,CAUIH,CAVJ,CAGEG,MAHF,CAIEC,CAJF,CAUIJ,CAVJ,CAIEI,OAJF,CAKEC,CALF,CAUIL,CAVJ,CAKEK,QALF,CAMEC,CANF,CAUIN,CAVJ,CAMEM,IANF,CAOEC,CAPF,CAUIP,CAVJ,CAOEO,MAPF,CAQEC,CARF,CAUIR,CAVJ,CAQEQ,QARF,CASKC,CATL,0BAUIT,CAVJ,YAYA,MACE,qBAAC,QAAD,kBACMS,CADN,EAEE,SAAS,CAAEX,YAAY,CAAC,IAAD,CAAO,CAACG,CAAD,CAAP,CAFzB,CAGE,gBAAeE,CAHjB,CAIE,gBAAeK,CAJjB,CAKE,IAAI,CAAC,QALP,CAME,KAAK,CAAEN,CANT,CAOE,WAAW,CAAEK,CAPf,CAQE,IAAI,CAAED,CARR,CASE,MAAM,CAAEF,CATV,CAUE,OAAO,CAAE,CAACC,CAAD,EAAaF,CAVxB,CAWE,QAAQ,CAAEK,CAXZ,CAYE,QAAQ,CACNH,CAAQ,EACN,oBAAC,QAAD,EACE,OAAO,CAAEF,CADX,CAEE,QAAQ,CAAEK,CAFZ,CAGE,IAAI,CAAEf,eAAe,CAACa,CAAD,CAHvB,EAdN,GAsBGJ,CAtBH,CAyBH,CAvCM"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.ListItem.SelectItemAll:hover:not(.ListItem_active){background:transparent}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';
|
|
2
|
+
import { PropSize } from '../types';
|
|
3
|
+
export declare type SelectItemAllProps = PropsWithHTMLAttributes<{
|
|
4
|
+
checked: boolean;
|
|
5
|
+
intermediate?: boolean;
|
|
6
|
+
size: PropSize;
|
|
7
|
+
hovered?: boolean;
|
|
8
|
+
indent?: 'normal' | 'increased';
|
|
9
|
+
countItems?: number;
|
|
10
|
+
total?: number;
|
|
11
|
+
}, HTMLDivElement>;
|
|
12
|
+
export declare const cnSelectItemAll: import("@bem-react/classname").ClassNameFormatter;
|
|
13
|
+
export declare const SelectItemAll: (props: SelectItemAllProps) => JSX.Element;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["checked","intermediate","size","indent","hovered","countItems","className","total"];import React from"react";import{ListItem}from"../../ListCanary";import{Text}from"../../Text";import{cn}from"../../../utils/bem";import{Checkbox}from"../../Checkbox/Checkbox";import{sizeCheckboxMap}from"../SelectItem/SelectItem";export var cnSelectItemAll=cn("SelectItemAll");var textSizeMap={xs:"s",s:"s",m:"m",l:"l"};export var SelectItemAll=function(a){var b=a.checked,c=a.intermediate,d=a.size,e=a.indent,f=a.hovered,g=a.countItems,h=void 0===g?0:g,i=a.className,j=a.total,k=void 0===j?0:j,l=_objectWithoutProperties(a,_excluded);return React.createElement(ListItem,Object.assign({},l,{className:cnSelectItemAll(null,[i]),"aria-selected":b,role:"option",label:"\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435",innerOffset:e,size:d,active:f,rightSide:React.createElement(Text,{size:textSizeMap[d],lineHeight:"xs",view:"ghost"},"".concat(h," \u0438\u0437 ").concat(k)),leftSide:React.createElement(Checkbox,{checked:b,intermediate:c,size:sizeCheckboxMap[d]})}),"\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435")};
|
|
2
|
+
//# sourceMappingURL=SelectSelectAll.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectSelectAll.js","names":["React","ListItem","Text","cn","Checkbox","sizeCheckboxMap","cnSelectItemAll","textSizeMap","xs","s","m","l","SelectItemAll","props","checked","intermediate","size","indent","hovered","countItems","className","total","otherProps"],"sources":["../../../../../../src/components/SelectComponents/SelectItemAll/SelectSelectAll.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ListItem } from '##/components/ListCanary';\nimport { Text, TextPropSize } from '##/components/Text';\nimport { cn } from '##/utils/bem';\n\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport { Checkbox } from '../../Checkbox/Checkbox';\nimport { sizeCheckboxMap } from '../SelectItem/SelectItem';\nimport { PropSize } from '../types';\n\nexport type SelectItemAllProps = PropsWithHTMLAttributes<\n {\n checked: boolean;\n intermediate?: boolean;\n size: PropSize;\n hovered?: boolean;\n indent?: 'normal' | 'increased';\n countItems?: number;\n total?: number;\n },\n HTMLDivElement\n>;\n\nexport const cnSelectItemAll = cn('SelectItemAll');\n\nconst textSizeMap: Record<PropSize, TextPropSize> = {\n xs: 's',\n s: 's',\n m: 'm',\n l: 'l',\n};\n\nexport const SelectItemAll = (props: SelectItemAllProps) => {\n const {\n checked,\n intermediate,\n size,\n indent,\n hovered,\n countItems = 0,\n className,\n total = 0,\n ...otherProps\n } = props;\n\n return (\n <ListItem\n {...otherProps}\n className={cnSelectItemAll(null, [className])}\n aria-selected={checked}\n role=\"option\"\n label=\"Выбрать все\"\n innerOffset={indent}\n size={size}\n active={hovered}\n rightSide={\n <Text\n size={textSizeMap[size]}\n lineHeight=\"xs\"\n view=\"ghost\"\n >{`${countItems} из ${total}`}</Text>\n }\n leftSide={\n <Checkbox\n checked={checked}\n intermediate={intermediate}\n size={sizeCheckboxMap[size]}\n />\n }\n >\n Выбрать все\n </ListItem>\n );\n};\n"],"mappings":"yLAAA,MAAOA,MAAP,KAAkB,OAAlB,CAEA,OAASC,QAAT,wBACA,OAASC,IAAT,kBACA,OAASC,EAAT,0BAGA,OAASC,QAAT,+BACA,OAASC,eAAT,gCAgBA,MAAO,IAAMC,gBAAe,CAAGH,EAAE,CAAC,eAAD,CAA1B,CAEP,GAAMI,YAA2C,CAAG,CAClDC,EAAE,CAAE,GAD8C,CAElDC,CAAC,CAAE,GAF+C,CAGlDC,CAAC,CAAE,GAH+C,CAIlDC,CAAC,CAAE,GAJ+C,CAApD,CAOA,MAAO,IAAMC,cAAa,CAAG,SAACC,CAAD,CAA+B,CAC1D,GACEC,EADF,CAUID,CAVJ,CACEC,OADF,CAEEC,CAFF,CAUIF,CAVJ,CAEEE,YAFF,CAGEC,CAHF,CAUIH,CAVJ,CAGEG,IAHF,CAIEC,CAJF,CAUIJ,CAVJ,CAIEI,MAJF,CAKEC,CALF,CAUIL,CAVJ,CAKEK,OALF,GAUIL,CAVJ,CAMEM,UANF,CAMEA,CANF,YAMe,CANf,GAOEC,CAPF,CAUIP,CAVJ,CAOEO,SAPF,GAUIP,CAVJ,CAQEQ,KARF,CAQEA,CARF,YAQU,CARV,GASKC,CATL,0BAUIT,CAVJ,YAYA,MACE,qBAAC,QAAD,kBACMS,CADN,EAEE,SAAS,CAAEhB,eAAe,CAAC,IAAD,CAAO,CAACc,CAAD,CAAP,CAF5B,CAGE,gBAAeN,CAHjB,CAIE,IAAI,CAAC,QAJP,CAKE,KAAK,CAAC,+DALR,CAME,WAAW,CAAEG,CANf,CAOE,IAAI,CAAED,CAPR,CAQE,MAAM,CAAEE,CARV,CASE,SAAS,CACP,oBAAC,IAAD,EACE,IAAI,CAAEX,WAAW,CAACS,CAAD,CADnB,CAEE,UAAU,CAAC,IAFb,CAGE,IAAI,CAAC,OAHP,YAIKG,CAJL,0BAIsBE,CAJtB,EAVJ,CAgBE,QAAQ,CACN,oBAAC,QAAD,EACE,OAAO,CAAEP,CADX,CAEE,YAAY,CAAEC,CAFhB,CAGE,IAAI,CAAEV,eAAe,CAACW,CAAD,CAHvB,EAjBJ,mEA2BH,CAzCM"}
|
|
@@ -6,7 +6,7 @@ export declare const tagBasePropSizeDefault: "m";
|
|
|
6
6
|
export declare type TagBasePropSize = typeof tagBasePropSize[number];
|
|
7
7
|
export declare const tagBasePropGroupNumberValue: readonly [1, 2, 3, 4, 5, 6, 7, 8, 9];
|
|
8
8
|
export declare const tagBasePropGroupStringValue: readonly ["1", "2", "3", "4", "5", "6", "7", "8", "9"];
|
|
9
|
-
export declare const tagBasePropGroup: (2 | 1 | "1" | 4 | 3 | 5 | "2" | 7 | 9 | "3" | "4" | "5" |
|
|
9
|
+
export declare const tagBasePropGroup: (2 | 1 | "1" | 4 | 3 | 5 | "2" | 7 | 9 | "3" | "4" | "5" | "6" | "7" | "8" | 8 | 6 | "9")[];
|
|
10
10
|
export declare type TagBasePropGroup = typeof tagBasePropGroup[number];
|
|
11
11
|
export declare const tagBasePropView: readonly ["stroked", "filled"];
|
|
12
12
|
export declare const tagBasePropViewDefault: "stroked";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { CountedGroup, SelectAllItem } from '../../utils/getGroups';
|
|
2
3
|
declare type IndexForHighlight = number | ((oldIndex: number) => number);
|
|
3
4
|
declare type Group<ITEM, GROUP> = {
|
|
4
5
|
items: ITEM[];
|
|
@@ -26,6 +27,7 @@ export declare type SelectProps<ITEM, GROUP, MULTIPLE extends boolean> = {
|
|
|
26
27
|
dropdownRef: React.MutableRefObject<HTMLDivElement | null>;
|
|
27
28
|
controlRef: React.MutableRefObject<HTMLDivElement | null>;
|
|
28
29
|
disabled?: boolean;
|
|
30
|
+
selectAll?: boolean;
|
|
29
31
|
getItemLabel: (item: ITEM) => string;
|
|
30
32
|
getItemKey: (item: ITEM) => string | number;
|
|
31
33
|
getItemDisabled?: (item: ITEM) => boolean | undefined;
|
|
@@ -44,7 +46,7 @@ export declare type SelectProps<ITEM, GROUP, MULTIPLE extends boolean> = {
|
|
|
44
46
|
};
|
|
45
47
|
export declare type OptionProps<ITEM> = {
|
|
46
48
|
index: number;
|
|
47
|
-
item: ITEM | OptionForCreate;
|
|
49
|
+
item: ITEM | OptionForCreate | SelectAllItem;
|
|
48
50
|
};
|
|
49
51
|
export declare type GetOptionPropsResult = {
|
|
50
52
|
onClick: (e: React.SyntheticEvent) => void;
|
|
@@ -54,11 +56,12 @@ export declare type GetOptionPropsResult = {
|
|
|
54
56
|
key: string | number;
|
|
55
57
|
};
|
|
56
58
|
export declare const isOptionForCreate: <ITEM, GROUP>(params: OptionForCreate | ITEM | Group<ITEM, GROUP>) => params is OptionForCreate;
|
|
59
|
+
export declare const isOptionForSelectAll: <ITEM, GROUP>(params: SelectAllItem | ITEM | Group<ITEM, GROUP>) => params is SelectAllItem;
|
|
57
60
|
export declare function useSelect<ITEM, GROUP, MULTIPLE extends boolean>(params: SelectProps<ITEM, GROUP, MULTIPLE>): {
|
|
58
61
|
isOpen: boolean;
|
|
59
62
|
isFocused: boolean;
|
|
60
63
|
highlightedIndex: number;
|
|
61
|
-
visibleItems: (OptionForCreate |
|
|
64
|
+
visibleItems: (OptionForCreate | CountedGroup<ITEM, GROUP>)[];
|
|
62
65
|
highlightIndex: (indexForHighlight: IndexForHighlight, scrollToHighlighted: boolean) => void;
|
|
63
66
|
getOptionProps: ({ index, item, }: OptionProps<ITEM>) => GetOptionPropsResult;
|
|
64
67
|
handleInputFocus: (e: React.FocusEvent<HTMLInputElement>) => void;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _defineProperty from"@babel/runtime/helpers/defineProperty";import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _createForOfIteratorHelper(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!c){if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0,e=function(){};return{s:e,n:function n(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}},e:function(a){function b(){return a.apply(this,arguments)}return b.toString=function(){return a.toString()},b}(function(a){throw a}),f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f,g=!0,h=!1;return{s:function s(){c=c.call(a)},n:function n(){var a=c.next();return g=a.done,a},e:function(a){function b(){return a.apply(this,arguments)}return b.toString=function(){return a.toString()},b}(function(a){h=!0,f=a}),f:function f(){try{g||null==c["return"]||c["return"]()}finally{if(h)throw f}}}}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}import React,{useEffect,useMemo,useRef,useState}from"react";import{getGroups}from"../../utils/getGroups";import{useClickOutside}from"../useClickOutside/useClickOutside";import{useDebounce}from"../useDebounce/useDebounce";import{useKeys}from"../useKeys/useKeys";import{usePrevious}from"../usePrevious/usePrevious";import{scrollToIndex,useHoistedState}from"./helpers";var isMultipleParams=function(a){return a.multiple},isNotMultipleParams=function(a){return!a.multiple},actions={setOpen:"setOpen",setSearch:"setSearch",highlightIndex:"highlightIndex"},initialState={searchValue:"",resolvedSearchValue:"",isOpen:!1,highlightedIndex:0,scrollToHighlighted:!1};export var isOptionForCreate=function(a){return a&&Object.prototype.hasOwnProperty.call(a,"__optionForCreate")};export function useSelect(a){var b=a.items,c=a.dropdownRef,d=a.controlRef,e=a.disabled,f=void 0!==e&&e,g=a.multiple,h=void 0!==g&&g,i=a.getItemLabel,j=a.getItemKey,k=a.searchFunction,l=a.getItemGroupKey,m=a.groups,n=a.
|
|
1
|
+
import _defineProperty from"@babel/runtime/helpers/defineProperty";import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _createForOfIteratorHelper(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!c){if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0,e=function(){};return{s:e,n:function n(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}},e:function(a){function b(){return a.apply(this,arguments)}return b.toString=function(){return a.toString()},b}(function(a){throw a}),f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f,g=!0,h=!1;return{s:function s(){c=c.call(a)},n:function n(){var a=c.next();return g=a.done,a},e:function(a){function b(){return a.apply(this,arguments)}return b.toString=function(){return a.toString()},b}(function(a){h=!0,f=a}),f:function f(){try{g||null==c["return"]||c["return"]()}finally{if(h)throw f}}}}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}import React,{useEffect,useMemo,useRef,useState}from"react";import{getCountedGroups,getGroups}from"../../utils/getGroups";import{useClickOutside}from"../useClickOutside/useClickOutside";import{useDebounce}from"../useDebounce/useDebounce";import{useKeys}from"../useKeys/useKeys";import{usePrevious}from"../usePrevious/usePrevious";import{scrollToIndex,useHoistedState}from"./helpers";var isMultipleParams=function(a){return a.multiple},isNotMultipleParams=function(a){return!a.multiple},actions={setOpen:"setOpen",setSearch:"setSearch",highlightIndex:"highlightIndex"},initialState={searchValue:"",resolvedSearchValue:"",isOpen:!1,highlightedIndex:0,scrollToHighlighted:!1};export var isOptionForCreate=function(a){return a&&Object.prototype.hasOwnProperty.call(a,"__optionForCreate")};export var isOptionForSelectAll=function(a){return a&&Object.prototype.hasOwnProperty.call(a,"__optionSelctAll")};export function useSelect(a){var b=a.items,c=a.dropdownRef,d=a.controlRef,e=a.disabled,f=void 0!==e&&e,g=a.multiple,h=void 0!==g&&g,i=a.getItemLabel,j=a.getItemKey,k=a.searchFunction,l=a.getItemGroupKey,m=a.groups,n=a.selectAll,o=void 0!==n&&n,p=a.getGroupKey,q=a.sortGroups,r=a.getItemDisabled,s=a.onFocus,t=a.onBlur,u=a.searchValue,v=a.withoutClearSearch,w=useRef(null),x=useState(!1),y=_slicedToArray(x,2),z=y[0],A=y[1],B=a.value&&(Array.isArray(a.value)?a.value:[a.value])||[],C=useHoistedState(initialState),D=_slicedToArray(C,2),E=D[0],F=E.searchValue,G=E.isOpen,H=E.highlightedIndex,I=E.resolvedSearchValue,J=E.scrollToHighlighted,K=D[1],L=function(a,b){return-1!==i(a).toLocaleLowerCase().indexOf(b.toLocaleLowerCase())},M=React.useMemo(function(){if(I&&""!==I){var c=b.filter(function(a){return k?k(a,I):L(a,I)}),d=!!b.find(function(a){return i(a).toString().toLowerCase()===I.toLocaleLowerCase()});return[c,a.onCreate&&!d?{label:F,__optionForCreate:!0}:void 0]}return[b,void 0]},[b,I]),N=_slicedToArray(M,2),O=N[0],P=N[1],Q=useMemo(function(){var b=getCountedGroups(getGroups(O,null!==m&&void 0!==m&&m.length?l:void 0,m,p,q),isMultipleParams(a)?a.value:[],o,j,r);return P?[P].concat(_toConsumableArray(b)):b},[B,o,O,m,l,r,p,q,P]),R=useMemo(function(){var b=!1;return 0<F.length&&(b=0===Q.filter(function(a){return isOptionForCreate(a)||0<a.items.length||a.group}).length&&!a.onCreate),b},[Q]),S=0!==b.length,T=function(){var a=0;if(0<B.length){var b,c=_createForOfIteratorHelper(Q);try{for(c.s();!(b=c.n()).done;){var f=b.value;if(isOptionForCreate(f)){a++;continue}var d,e=_createForOfIteratorHelper(f.items);try{for(e.s();!(d=e.n()).done;){var g=d.value;if(isOptionForSelectAll(g))return a;if(j(g)===j(B[0]))return a;a++}}catch(a){e.e(a)}finally{e.f()}}}catch(a){c.e(a)}finally{c.f()}}return 0},U=React.useCallback(function(a){K(function(b){return _objectSpread(_objectSpread({},b),{},{isOpen:a})},actions.setOpen)},[K]),V=useDebounce(function(a){K(function(b){return _objectSpread(_objectSpread({},b),{},{resolvedSearchValue:a})},actions.setSearch)},300),W=React.useCallback(function(a){K(function(b){return _objectSpread(_objectSpread({},b),{},{searchValue:a})},actions.setSearch),V(a)},[K,V]),X=usePrevious(G);React.useLayoutEffect(function(){if(null!==B&&!X&&G){var a=T();0<O.length&&scrollToIndex(a,c)}});var Y=React.useCallback(function(a,b){K(function(c){return _objectSpread(_objectSpread({},c),{},{highlightedIndex:Math.min(Math.max(0,"function"==typeof a?a(c.highlightedIndex):a),P?O.length:O.length-1),scrollToHighlighted:b})},actions.highlightIndex)},[O,K,P]),Z=function(b,c){if(b.stopPropagation(),isMultipleParams(a)){var d,e=null===(d=a.value)||void 0===d?void 0:d.filter(function(a){return j(a)!==j(c)});a.onChange({e:b,value:null!==e&&void 0!==e&&e.length?e:null})}},$=function(b,c){if(!(r&&r(c))){if(isMultipleParams(a)){var d=B.some(function(a){return j(a)===j(c)})?B.filter(function(a){return j(a)!==j(c)}):[].concat(_toConsumableArray(B),[c]);a.onChange({value:d.length?d:null,e:b})}isNotMultipleParams(a)&&(a.onChange({value:c,e:b}),U(!1)),v||W("")}},_=function(b){var c=b.e,d=b.items;if(isMultipleParams(a)){var e=r?d.filter(function(a){return!r(a)}):d,f=[],g=[];B.forEach(function(a){e.find(function(b){return j(a)===j(b)})?f.push(a):g.push(a)}),f.length===e.length?a.onChange({value:g,e:c}):a.onChange({e:c,value:[].concat(g,_toConsumableArray(e))})}},aa=function(b,c){a.onCreate&&a.onCreate({e:b,label:c}),U(!1),v||W("")},ba=function(b){if(v||W(""),isMultipleParams(a)){var c=null===B||void 0===B?void 0:B.filter(function(a){return null===r||void 0===r?void 0:r(a)});a.onChange({value:c&&0<c.length?c:null,e:b})}isNotMultipleParams(a)&&a.onChange({value:null,e:b})},ca=function(a,b){b.preventDefault(),f||U(!0),Y(function(a){return a-1},!0)},da=function(a,b){b.preventDefault(),f||U(!0),Y(function(a){return a+1},!0)},ea=useKeys({ArrowUp:ca,ArrowDown:da,PageUp:ca,PageDown:da,Home:ca,End:da,Enter:function Enter(a,b){if(G){(F||O[H])&&b.preventDefault();var c=function(a){var b,c=0,d=_createForOfIteratorHelper(Q);try{for(d.s();!(b=d.n()).done;){var e=b.value;if(isOptionForCreate(e))return c++,[void 0,e];if(e.items.length+c>a)return[e,e.items[a-c]];c+=e.items.length}}catch(a){d.e(a)}finally{d.f()}return[void 0,void 0]},d=c(H),e=_slicedToArray(d,2),f=e[0],g=e[1];if(isOptionForCreate(g))return void aa(b,g.label);if(isOptionForSelectAll(g)){var h;return void _({e:b,items:null!==(h=null===f||void 0===f?void 0:f.items.filter(function(a){return!isOptionForSelectAll(a)}))&&void 0!==h?h:[]})}g&&$(b,g)}},Escape:function Escape(){U(!1)},Tab:function Tab(){U(!1)},Backspace:function Backspace(a,b){F||(h?Z(b,B[B.length-1]):ba(b))}});useClickOutside({isActive:G,ignoreClicksInsideRefs:[c,d],handler:function handler(){U(!1)}}),React.useEffect(function(){f&&U(!1)},[f]),React.useEffect(function(){var a=T();Y(a,!0)},[Y]),React.useEffect(function(){0<O.length&&J&&scrollToIndex(H,c)},[H]);return useEffect(function(){u&&W(u)},[u]),{isOpen:G,isFocused:z,highlightedIndex:H,visibleItems:Q,highlightIndex:Y,getOptionProps:function getOptionProps(a){var b=a.index,c=a.item;if(isOptionForCreate(c))return{onClick:function onClick(a){aa(a,c.label)},onMouseEnter:function onMouseEnter(){Y(b,!1)},active:!1,hovered:b===H,key:"__optionForCreate"};if(isOptionForSelectAll(c)){var f=function(){var a,b=_createForOfIteratorHelper(Q);try{for(b.s();!(a=b.n()).done;){var e=a.value;if(isOptionForCreate(e))break;if(e.key===c.groupKey){var d;return null!==(d=null===e||void 0===e?void 0:e.items.filter(function(a){return!isOptionForSelectAll(a)}))&&void 0!==d?d:[]}}}catch(a){b.e(a)}finally{b.f()}return[]};return{onClick:function onClick(a){_({e:a,items:f()})},onMouseEnter:function onMouseEnter(){Y(b,!1)},active:!1,hovered:b===H,key:"__optionForSelectAll"}}var d=j(c);return{onClick:function onClick(a){$(a,c)},onMouseEnter:function onMouseEnter(){Y(b,!1)},active:!!B.find(function(a){return j(a)===d}),hovered:b===H,key:d}},handleInputFocus:function handleInputFocus(a){f||(!z&&A(!0),"function"==typeof s&&s(a))},handleInputBlur:function handleInputBlur(a){if(G){var b;return void(null===(b=w.current)||void 0===b?void 0:b.focus())}z&&A(!1),"function"==typeof t&&t(a)},handleToggleDropdown:function handleToggleDropdown(){if(G)U(!1),A(!1);else{var a;U(!0),A(!0),null===(a=w.current)||void 0===a?void 0:a.focus()}},handleInputClick:function handleInputClick(){if(f||U(!G),h){var a;null===(a=w.current)||void 0===a?void 0:a.focus(),v||W("")}},inputRef:w,getKeyProps:ea,handleInputChange:function handleInputChange(a){f||!h&&0<B.length||W(a.target.value)},searchValue:F,clearValue:ba,getHandleRemoveValue:function getHandleRemoveValue(a){return function(b){return Z(b,a)}},notFound:R,hasItems:S}}
|
|
2
2
|
//# sourceMappingURL=useSelect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSelect.js","names":["React","useEffect","useMemo","useRef","useState","getGroups","useClickOutside","useDebounce","useKeys","usePrevious","scrollToIndex","useHoistedState","isMultipleParams","params","multiple","isNotMultipleParams","actions","setOpen","setSearch","highlightIndex","initialState","searchValue","resolvedSearchValue","isOpen","highlightedIndex","scrollToHighlighted","isOptionForCreate","Object","prototype","hasOwnProperty","call","useSelect","items","dropdownRef","controlRef","disabled","getItemLabel","getItemKey","searchFunction","getItemGroupKey","groups","getGroupKey","sortGroups","getItemDisabled","onFocus","onBlur","searchValueProp","withoutClearSearch","inputRef","isFocused","setIsFocused","value","Array","isArray","setState","searchFunctionDefault","item","toLocaleLowerCase","indexOf","fiteredOptions","filter","matchWithValueSearch","find","option","toString","toLowerCase","onCreate","label","__optionForCreate","filteredOptions","optionForCreate","visibleItems","resultGroups","length","notFound","flag","group","hasItems","getSelectedOptionIndex","index","useCallback","newIsOpen","old","setResolvedSearch","prevIsOpen","useLayoutEffect","currentHighlightIndex","indexForHighlight","Math","min","max","removeValue","e","valueItem","stopPropagation","newValue","onChange","some","clearValue","results","ArrowUp","_","preventDefault","ArrowDown","getKeyProps","PageUp","PageDown","Home","End","Enter","getItem","couter","Escape","Tab","Backspace","isActive","ignoreClicksInsideRefs","handler","getOptionProps","onClick","onMouseEnter","active","hovered","key","handleInputFocus","handleInputBlur","current","focus","handleToggleDropdown","handleInputClick","handleInputChange","target","getHandleRemoveValue"],"sources":["../../../../../src/hooks/useSelect/useSelect.ts"],"sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\n\nimport { getGroups } from '../../utils/getGroups';\nimport { useClickOutside } from '../useClickOutside/useClickOutside';\nimport { useDebounce } from '../useDebounce/useDebounce';\nimport { KeyHandler, useKeys } from '../useKeys/useKeys';\nimport { usePrevious } from '../usePrevious/usePrevious';\nimport { scrollToIndex, useHoistedState } from './helpers';\n\ntype IndexForHighlight = number | ((oldIndex: number) => number);\n\ntype Group<ITEM, GROUP> = {\n items: ITEM[];\n key: string | number;\n group?: GROUP;\n};\ntype GetItemGroupKey<ITEM> = (item: ITEM) => string | number | undefined;\ntype GetGroupKey<GROUP> = (item: GROUP) => string | number | undefined;\ntype SortGroups<ITEM, GROUP> = (\n a: Group<ITEM, GROUP>,\n b: Group<ITEM, GROUP>,\n) => number;\n\ntype OnChangeProp<ITEM, MULTIPLE extends boolean> = (props: {\n value: (MULTIPLE extends true ? ITEM[] : ITEM) | null;\n e: React.SyntheticEvent;\n}) => void;\n\ntype ValueProp<ITEM, MULTIPLE extends boolean> =\n | (MULTIPLE extends true ? ITEM[] : ITEM)\n | null\n | undefined;\n\nexport type OptionForCreate = {\n label: string;\n __optionForCreate: boolean;\n};\n\nexport type SelectProps<ITEM, GROUP, MULTIPLE extends boolean> = {\n getItemGroupKey?: GetItemGroupKey<ITEM> | undefined;\n getGroupKey?: GetGroupKey<GROUP>;\n sortGroups?: SortGroups<ITEM, GROUP>;\n groups?: GROUP[];\n items: ITEM[];\n dropdownRef: React.MutableRefObject<HTMLDivElement | null>;\n controlRef: React.MutableRefObject<HTMLDivElement | null>;\n disabled?: boolean;\n getItemLabel: (item: ITEM) => string;\n getItemKey: (item: ITEM) => string | number;\n getItemDisabled?: (item: ITEM) => boolean | undefined;\n searchFunction?: (item: ITEM, searchValue: string) => boolean;\n onCreate?: (props: { e: React.SyntheticEvent; label: string }) => void;\n onFocus?: React.FocusEventHandler<HTMLInputElement>;\n onBlur?: React.FocusEventHandler<HTMLInputElement>;\n multiple: boolean;\n searchValue?: string;\n withoutClearSearch?: boolean;\n onChange: OnChangeProp<ITEM, MULTIPLE>;\n value: ValueProp<ITEM, MULTIPLE>;\n};\n\nexport type OptionProps<ITEM> = {\n index: number;\n item: ITEM | OptionForCreate;\n};\n\nexport type GetOptionPropsResult = {\n onClick: (e: React.SyntheticEvent) => void;\n onMouseEnter: (e: React.SyntheticEvent) => void;\n active: boolean;\n hovered: boolean;\n key: string | number;\n};\n\nconst isMultipleParams = <ITEM, GROUP>(\n params: SelectProps<ITEM, GROUP, boolean>,\n): params is SelectProps<ITEM, GROUP, true> => {\n return params.multiple;\n};\n\nconst isNotMultipleParams = <ITEM, GROUP>(\n params: SelectProps<ITEM, GROUP, boolean>,\n): params is SelectProps<ITEM, GROUP, false> => {\n return !params.multiple;\n};\n\nconst actions = {\n setOpen: 'setOpen',\n setSearch: 'setSearch',\n highlightIndex: 'highlightIndex',\n};\n\nconst initialState = {\n searchValue: '',\n resolvedSearchValue: '',\n isOpen: false,\n highlightedIndex: 0,\n scrollToHighlighted: false,\n};\n\nexport const isOptionForCreate = <ITEM, GROUP>(\n params: OptionForCreate | Group<ITEM, GROUP> | ITEM,\n): params is OptionForCreate => {\n return (\n params && Object.prototype.hasOwnProperty.call(params, '__optionForCreate')\n );\n};\n\nexport function useSelect<ITEM, GROUP, MULTIPLE extends boolean>(\n params: SelectProps<ITEM, GROUP, MULTIPLE>,\n) {\n const {\n items,\n dropdownRef,\n controlRef,\n disabled = false,\n multiple = false,\n getItemLabel,\n getItemKey,\n searchFunction,\n getItemGroupKey,\n groups,\n getGroupKey,\n sortGroups,\n getItemDisabled,\n onFocus,\n onBlur,\n searchValue: searchValueProp,\n withoutClearSearch,\n } = params;\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [isFocused, setIsFocused] = useState(false);\n\n const value =\n (params.value &&\n (Array.isArray(params.value) ? params.value : [params.value])) ||\n [];\n\n const [\n {\n searchValue,\n isOpen,\n highlightedIndex,\n resolvedSearchValue,\n scrollToHighlighted,\n },\n setState,\n ] = useHoistedState(initialState);\n\n const searchFunctionDefault = (item: ITEM, searchValue: string) =>\n getItemLabel(item)\n .toLocaleLowerCase()\n .indexOf(searchValue.toLocaleLowerCase()) !== -1;\n\n const [filteredOptions, optionForCreate] = React.useMemo(() => {\n if (resolvedSearchValue && resolvedSearchValue !== '') {\n const fiteredOptions = items.filter((item) =>\n searchFunction\n ? searchFunction(item, resolvedSearchValue)\n : searchFunctionDefault(item, resolvedSearchValue),\n );\n\n const matchWithValueSearch = Boolean(\n items.find(\n (option) =>\n getItemLabel(option).toString().toLowerCase() ===\n resolvedSearchValue.toLocaleLowerCase(),\n ),\n );\n\n const optionForCreate: OptionForCreate = {\n label: searchValue,\n __optionForCreate: true,\n };\n\n return [\n fiteredOptions,\n params.onCreate && !matchWithValueSearch ? optionForCreate : undefined,\n ] as const;\n }\n return [items, undefined] as const;\n }, [items, resolvedSearchValue]);\n\n const visibleItems = useMemo(() => {\n const resultGroups = getGroups(\n filteredOptions,\n groups?.length ? getItemGroupKey : undefined,\n groups,\n getGroupKey,\n sortGroups,\n );\n\n return optionForCreate ? [optionForCreate, ...resultGroups] : resultGroups;\n }, [\n filteredOptions,\n groups,\n getItemGroupKey,\n getGroupKey,\n sortGroups,\n optionForCreate,\n ]);\n\n const notFound = useMemo(() => {\n let flag = false;\n if (searchValue.length > 0) {\n flag =\n visibleItems.filter(\n (group) =>\n isOptionForCreate(group) || group.items.length > 0 || group.group,\n ).length === 0 && !params.onCreate;\n }\n return flag;\n }, [visibleItems]);\n\n const hasItems = items.length !== 0;\n\n const getSelectedOptionIndex = (): number => {\n let index = 0;\n if (value.length > 0) {\n for (const group of visibleItems) {\n if (isOptionForCreate(group)) {\n index++;\n // eslint-disable-next-line no-continue\n continue;\n }\n for (const item of group.items) {\n if (getItemKey(item) === getItemKey(value[0])) {\n return index;\n }\n index++;\n }\n }\n }\n\n return 0;\n };\n\n // Actions\n\n const setOpen = React.useCallback(\n (newIsOpen: boolean) => {\n setState(\n (old) => ({\n ...old,\n isOpen: newIsOpen,\n }),\n actions.setOpen,\n );\n },\n [setState],\n );\n\n const setResolvedSearch = useDebounce((value: string) => {\n setState(\n (old) => ({\n ...old,\n resolvedSearchValue: value,\n }),\n actions.setSearch,\n );\n }, 300);\n\n const setSearch = React.useCallback(\n (value: string) => {\n setState(\n (old) => ({\n ...old,\n searchValue: value,\n }),\n actions.setSearch,\n );\n setResolvedSearch(value);\n },\n [setState, setResolvedSearch],\n );\n\n const prevIsOpen = usePrevious(isOpen);\n\n React.useLayoutEffect(() => {\n if (value !== null && !prevIsOpen && isOpen) {\n const currentHighlightIndex = getSelectedOptionIndex();\n if (filteredOptions.length > 0) {\n scrollToIndex(currentHighlightIndex, dropdownRef);\n }\n }\n });\n\n const highlightIndex = React.useCallback(\n (indexForHighlight: IndexForHighlight, scrollToHighlighted: boolean) => {\n setState((old) => {\n return {\n ...old,\n highlightedIndex: Math.min(\n Math.max(\n 0,\n typeof indexForHighlight === 'function'\n ? indexForHighlight(old.highlightedIndex)\n : indexForHighlight,\n ),\n optionForCreate\n ? filteredOptions.length\n : filteredOptions.length - 1,\n ),\n scrollToHighlighted,\n };\n }, actions.highlightIndex);\n },\n [filteredOptions, setState, optionForCreate],\n );\n\n const removeValue = (e: React.SyntheticEvent, valueItem: ITEM) => {\n e.stopPropagation();\n if (isMultipleParams(params)) {\n const newValue = params.value?.filter(\n (item) => getItemKey(item) !== getItemKey(valueItem),\n );\n params.onChange({\n e,\n value: newValue?.length ? newValue : null,\n });\n }\n };\n\n const onChange = (e: React.SyntheticEvent, item: ITEM) => {\n if (getItemDisabled && getItemDisabled(item)) {\n return;\n }\n if (isMultipleParams(params)) {\n const newValue = value.some(\n (value) => getItemKey(value) === getItemKey(item),\n )\n ? value.filter((value) => getItemKey(value) !== getItemKey(item))\n : [...value, item];\n params.onChange({ value: newValue.length ? newValue : null, e });\n }\n if (isNotMultipleParams(params)) {\n params.onChange({ value: item, e });\n setOpen(false);\n }\n !withoutClearSearch && setSearch('');\n };\n\n const onCreate = (e: React.SyntheticEvent, label: string) => {\n params.onCreate && params.onCreate({ e, label });\n setOpen(false);\n !withoutClearSearch && setSearch('');\n };\n\n // Handlers\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\n if (!disabled && !(!multiple && value.length > 0)) {\n setSearch(e.target.value);\n }\n };\n\n const handleInputClick = (): void => {\n !disabled && setOpen(!isOpen);\n\n if (multiple) {\n inputRef.current?.focus();\n !withoutClearSearch && setSearch('');\n }\n };\n\n const clearValue = (e: React.SyntheticEvent) => {\n !withoutClearSearch && setSearch('');\n if (isMultipleParams(params)) {\n const results = value?.filter((item) => getItemDisabled?.(item));\n params.onChange({\n value: results && results.length > 0 ? results : null,\n e,\n });\n }\n if (isNotMultipleParams(params)) {\n params.onChange({ value: null, e });\n }\n };\n\n const getHandleRemoveValue = (item: ITEM) => (e: React.SyntheticEvent) =>\n removeValue(e, item);\n\n // Prop Getters\n\n const ArrowUp: KeyHandler = (_, e): void => {\n e.preventDefault();\n !disabled && setOpen(true);\n highlightIndex((old) => old - 1, true);\n };\n\n const ArrowDown: KeyHandler = (_, e): void => {\n e.preventDefault();\n !disabled && setOpen(true);\n highlightIndex((old) => old + 1, true);\n };\n\n const Enter: KeyHandler = (_, e): void => {\n if (isOpen) {\n if (searchValue || filteredOptions[highlightedIndex]) {\n e.preventDefault();\n }\n\n const getItem = (index: number) => {\n let couter = 0;\n for (const group of visibleItems) {\n if (isOptionForCreate(group)) {\n couter++;\n return group;\n }\n if (group.items.length + couter > index) {\n return group.items[index - couter];\n }\n couter += group.items.length;\n }\n return undefined;\n };\n\n const item = getItem(highlightedIndex);\n\n if (isOptionForCreate(item)) {\n onCreate(e, item.label);\n return;\n }\n\n if (item) {\n onChange(e, item);\n }\n }\n };\n\n const Escape = (): void => {\n setOpen(false);\n };\n\n const Tab = (): void => {\n setOpen(false);\n };\n\n const Backspace: KeyHandler = (_, e): void => {\n if (searchValue) {\n return;\n }\n if (multiple) {\n removeValue(e, value[value.length - 1]);\n } else {\n clearValue(e);\n }\n };\n\n const getKeyProps = useKeys({\n ArrowUp,\n ArrowDown,\n PageUp: ArrowUp,\n PageDown: ArrowDown,\n Home: ArrowUp,\n End: ArrowDown,\n Enter,\n Escape,\n Tab,\n Backspace,\n });\n\n const getOptionProps = ({\n index,\n item,\n }: OptionProps<ITEM>): GetOptionPropsResult => {\n if (isOptionForCreate(item)) {\n return {\n onClick: (e: React.SyntheticEvent) => {\n onCreate(e, item.label);\n },\n onMouseEnter: () => {\n highlightIndex(index, false);\n },\n active: false,\n hovered: index === highlightedIndex,\n key: '__optionForCreate',\n };\n }\n const key = getItemKey(item);\n return {\n onClick: (e: React.SyntheticEvent) => {\n onChange(e, item);\n },\n onMouseEnter: () => {\n highlightIndex(index, false);\n },\n active: Boolean(value.find((item) => getItemKey(item) === key)),\n hovered: index === highlightedIndex,\n key,\n };\n };\n\n useClickOutside({\n isActive: isOpen,\n ignoreClicksInsideRefs: [dropdownRef, controlRef],\n handler: () => {\n setOpen(false);\n },\n });\n\n React.useEffect(() => {\n if (disabled) {\n setOpen(false);\n }\n }, [disabled]);\n\n React.useEffect(() => {\n const currentHighlightIndex = getSelectedOptionIndex();\n highlightIndex(currentHighlightIndex, true);\n }, [highlightIndex]);\n\n React.useEffect(() => {\n if (filteredOptions.length > 0 && scrollToHighlighted) {\n scrollToIndex(highlightedIndex, dropdownRef);\n }\n }, [highlightedIndex]);\n\n const handleInputFocus = (e: React.FocusEvent<HTMLInputElement>): void => {\n if (!disabled) {\n if (!isFocused) {\n setIsFocused(true);\n }\n if (typeof onFocus === 'function') {\n onFocus(e);\n }\n }\n };\n\n const handleInputBlur = (e: React.FocusEvent<HTMLInputElement>): void => {\n if (isOpen) {\n inputRef.current?.focus();\n return;\n }\n\n if (isFocused) {\n setIsFocused(false);\n }\n\n if (typeof onBlur === 'function') {\n onBlur(e);\n }\n };\n\n const handleToggleDropdown = (): void => {\n if (isOpen) {\n setOpen(false);\n setIsFocused(false);\n } else {\n setOpen(true);\n setIsFocused(true);\n inputRef.current?.focus();\n }\n };\n\n useEffect(() => {\n if (searchValueProp) {\n setSearch(searchValueProp);\n }\n }, [searchValueProp]);\n\n return {\n isOpen,\n isFocused,\n highlightedIndex,\n visibleItems,\n highlightIndex,\n getOptionProps,\n handleInputFocus,\n handleInputBlur,\n handleToggleDropdown,\n handleInputClick,\n inputRef,\n getKeyProps,\n handleInputChange,\n searchValue,\n clearValue,\n getHandleRemoveValue,\n notFound,\n hasItems,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useSelect.js","names":["React","useEffect","useMemo","useRef","useState","getCountedGroups","getGroups","useClickOutside","useDebounce","useKeys","usePrevious","scrollToIndex","useHoistedState","isMultipleParams","params","multiple","isNotMultipleParams","actions","setOpen","setSearch","highlightIndex","initialState","searchValue","resolvedSearchValue","isOpen","highlightedIndex","scrollToHighlighted","isOptionForCreate","Object","prototype","hasOwnProperty","call","isOptionForSelectAll","useSelect","items","dropdownRef","controlRef","disabled","getItemLabel","getItemKey","searchFunction","getItemGroupKey","groups","selectAll","getGroupKey","sortGroups","getItemDisabled","onFocus","onBlur","searchValueProp","withoutClearSearch","inputRef","isFocused","setIsFocused","value","Array","isArray","setState","searchFunctionDefault","item","toLocaleLowerCase","indexOf","fiteredOptions","filter","matchWithValueSearch","find","option","toString","toLowerCase","onCreate","label","__optionForCreate","filteredOptions","optionForCreate","visibleItems","resultGroups","length","notFound","flag","group","hasItems","getSelectedOptionIndex","index","useCallback","newIsOpen","old","setResolvedSearch","prevIsOpen","useLayoutEffect","currentHighlightIndex","indexForHighlight","Math","min","max","removeValue","e","valueItem","stopPropagation","newValue","onChange","some","onChangeAll","parametrs","nonDisabledItems","currentGroupValues","withoutGroupValues","forEach","el","push","clearValue","results","ArrowUp","_","preventDefault","ArrowDown","getKeyProps","PageUp","PageDown","Home","End","Enter","getData","couter","Escape","Tab","Backspace","isActive","ignoreClicksInsideRefs","handler","getOptionProps","onClick","onMouseEnter","active","hovered","key","getItems","groupKey","handleInputFocus","handleInputBlur","current","focus","handleToggleDropdown","handleInputClick","handleInputChange","target","getHandleRemoveValue"],"sources":["../../../../../src/hooks/useSelect/useSelect.ts"],"sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\n\nimport {\n CountedGroup,\n getCountedGroups,\n getGroups,\n SelectAllItem,\n} from '../../utils/getGroups';\nimport { useClickOutside } from '../useClickOutside/useClickOutside';\nimport { useDebounce } from '../useDebounce/useDebounce';\nimport { KeyHandler, useKeys } from '../useKeys/useKeys';\nimport { usePrevious } from '../usePrevious/usePrevious';\nimport { scrollToIndex, useHoistedState } from './helpers';\n\ntype IndexForHighlight = number | ((oldIndex: number) => number);\n\ntype Group<ITEM, GROUP> = {\n items: ITEM[];\n key: string | number;\n group?: GROUP;\n};\ntype GetItemGroupKey<ITEM> = (item: ITEM) => string | number | undefined;\ntype GetGroupKey<GROUP> = (item: GROUP) => string | number | undefined;\ntype SortGroups<ITEM, GROUP> = (\n a: Group<ITEM, GROUP>,\n b: Group<ITEM, GROUP>,\n) => number;\n\ntype OnChangeProp<ITEM, MULTIPLE extends boolean> = (props: {\n value: (MULTIPLE extends true ? ITEM[] : ITEM) | null;\n e: React.SyntheticEvent;\n}) => void;\n\ntype ValueProp<ITEM, MULTIPLE extends boolean> =\n | (MULTIPLE extends true ? ITEM[] : ITEM)\n | null\n | undefined;\n\nexport type OptionForCreate = {\n label: string;\n __optionForCreate: boolean;\n};\n\nexport type SelectProps<ITEM, GROUP, MULTIPLE extends boolean> = {\n getItemGroupKey?: GetItemGroupKey<ITEM> | undefined;\n getGroupKey?: GetGroupKey<GROUP>;\n sortGroups?: SortGroups<ITEM, GROUP>;\n groups?: GROUP[];\n items: ITEM[];\n dropdownRef: React.MutableRefObject<HTMLDivElement | null>;\n controlRef: React.MutableRefObject<HTMLDivElement | null>;\n disabled?: boolean;\n selectAll?: boolean;\n getItemLabel: (item: ITEM) => string;\n getItemKey: (item: ITEM) => string | number;\n getItemDisabled?: (item: ITEM) => boolean | undefined;\n searchFunction?: (item: ITEM, searchValue: string) => boolean;\n onCreate?: (props: { e: React.SyntheticEvent; label: string }) => void;\n onFocus?: React.FocusEventHandler<HTMLInputElement>;\n onBlur?: React.FocusEventHandler<HTMLInputElement>;\n multiple: boolean;\n searchValue?: string;\n withoutClearSearch?: boolean;\n onChange: OnChangeProp<ITEM, MULTIPLE>;\n value: ValueProp<ITEM, MULTIPLE>;\n};\n\nexport type OptionProps<ITEM> = {\n index: number;\n item: ITEM | OptionForCreate | SelectAllItem;\n};\n\nexport type GetOptionPropsResult = {\n onClick: (e: React.SyntheticEvent) => void;\n onMouseEnter: (e: React.SyntheticEvent) => void;\n active: boolean;\n hovered: boolean;\n key: string | number;\n};\n\nconst isMultipleParams = <ITEM, GROUP>(\n params: SelectProps<ITEM, GROUP, boolean>,\n): params is SelectProps<ITEM, GROUP, true> => {\n return params.multiple;\n};\n\nconst isNotMultipleParams = <ITEM, GROUP>(\n params: SelectProps<ITEM, GROUP, boolean>,\n): params is SelectProps<ITEM, GROUP, false> => {\n return !params.multiple;\n};\n\nconst actions = {\n setOpen: 'setOpen',\n setSearch: 'setSearch',\n highlightIndex: 'highlightIndex',\n};\n\nconst initialState = {\n searchValue: '',\n resolvedSearchValue: '',\n isOpen: false,\n highlightedIndex: 0,\n scrollToHighlighted: false,\n};\n\nexport const isOptionForCreate = <ITEM, GROUP>(\n params: OptionForCreate | Group<ITEM, GROUP> | ITEM,\n): params is OptionForCreate => {\n return (\n params && Object.prototype.hasOwnProperty.call(params, '__optionForCreate')\n );\n};\n\nexport const isOptionForSelectAll = <ITEM, GROUP>(\n params: SelectAllItem | Group<ITEM, GROUP> | ITEM,\n): params is SelectAllItem => {\n return (\n params && Object.prototype.hasOwnProperty.call(params, '__optionSelctAll')\n );\n};\n\nexport function useSelect<ITEM, GROUP, MULTIPLE extends boolean>(\n params: SelectProps<ITEM, GROUP, MULTIPLE>,\n) {\n const {\n items,\n dropdownRef,\n controlRef,\n disabled = false,\n multiple = false,\n getItemLabel,\n getItemKey,\n searchFunction,\n getItemGroupKey,\n groups,\n selectAll = false,\n getGroupKey,\n sortGroups,\n getItemDisabled,\n onFocus,\n onBlur,\n searchValue: searchValueProp,\n withoutClearSearch,\n } = params;\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [isFocused, setIsFocused] = useState(false);\n\n const value =\n (params.value &&\n (Array.isArray(params.value) ? params.value : [params.value])) ||\n [];\n\n const [\n {\n searchValue,\n isOpen,\n highlightedIndex,\n resolvedSearchValue,\n scrollToHighlighted,\n },\n setState,\n ] = useHoistedState(initialState);\n\n const searchFunctionDefault = (item: ITEM, searchValue: string) =>\n getItemLabel(item)\n .toLocaleLowerCase()\n .indexOf(searchValue.toLocaleLowerCase()) !== -1;\n\n const [filteredOptions, optionForCreate] = React.useMemo(() => {\n if (resolvedSearchValue && resolvedSearchValue !== '') {\n const fiteredOptions = items.filter((item) =>\n searchFunction\n ? searchFunction(item, resolvedSearchValue)\n : searchFunctionDefault(item, resolvedSearchValue),\n );\n\n const matchWithValueSearch = Boolean(\n items.find(\n (option) =>\n getItemLabel(option).toString().toLowerCase() ===\n resolvedSearchValue.toLocaleLowerCase(),\n ),\n );\n\n const optionForCreate: OptionForCreate = {\n label: searchValue,\n __optionForCreate: true,\n };\n\n return [\n fiteredOptions,\n params.onCreate && !matchWithValueSearch ? optionForCreate : undefined,\n ] as const;\n }\n return [items, undefined] as const;\n }, [items, resolvedSearchValue]);\n\n const visibleItems = useMemo(() => {\n const resultGroups = getCountedGroups(\n getGroups(\n filteredOptions,\n groups?.length ? getItemGroupKey : undefined,\n groups,\n getGroupKey,\n sortGroups,\n ),\n isMultipleParams(params) ? params.value : [],\n selectAll,\n getItemKey,\n getItemDisabled,\n );\n\n return optionForCreate ? [optionForCreate, ...resultGroups] : resultGroups;\n }, [\n value,\n selectAll,\n filteredOptions,\n groups,\n getItemGroupKey,\n getItemDisabled,\n getGroupKey,\n sortGroups,\n optionForCreate,\n ]);\n\n const notFound = useMemo(() => {\n let flag = false;\n if (searchValue.length > 0) {\n flag =\n visibleItems.filter(\n (group) =>\n isOptionForCreate(group) || group.items.length > 0 || group.group,\n ).length === 0 && !params.onCreate;\n }\n return flag;\n }, [visibleItems]);\n\n const hasItems = items.length !== 0;\n\n const getSelectedOptionIndex = (): number => {\n let index = 0;\n if (value.length > 0) {\n for (const group of visibleItems) {\n if (isOptionForCreate(group)) {\n index++;\n // eslint-disable-next-line no-continue\n continue;\n }\n for (const item of group.items) {\n if (isOptionForSelectAll(item)) {\n return index;\n }\n if (getItemKey(item) === getItemKey(value[0])) {\n return index;\n }\n index++;\n }\n }\n }\n\n return 0;\n };\n\n // Actions\n\n const setOpen = React.useCallback(\n (newIsOpen: boolean) => {\n setState(\n (old) => ({\n ...old,\n isOpen: newIsOpen,\n }),\n actions.setOpen,\n );\n },\n [setState],\n );\n\n const setResolvedSearch = useDebounce((value: string) => {\n setState(\n (old) => ({\n ...old,\n resolvedSearchValue: value,\n }),\n actions.setSearch,\n );\n }, 300);\n\n const setSearch = React.useCallback(\n (value: string) => {\n setState(\n (old) => ({\n ...old,\n searchValue: value,\n }),\n actions.setSearch,\n );\n setResolvedSearch(value);\n },\n [setState, setResolvedSearch],\n );\n\n const prevIsOpen = usePrevious(isOpen);\n\n React.useLayoutEffect(() => {\n if (value !== null && !prevIsOpen && isOpen) {\n const currentHighlightIndex = getSelectedOptionIndex();\n if (filteredOptions.length > 0) {\n scrollToIndex(currentHighlightIndex, dropdownRef);\n }\n }\n });\n\n const highlightIndex = React.useCallback(\n (indexForHighlight: IndexForHighlight, scrollToHighlighted: boolean) => {\n setState((old) => {\n return {\n ...old,\n highlightedIndex: Math.min(\n Math.max(\n 0,\n typeof indexForHighlight === 'function'\n ? indexForHighlight(old.highlightedIndex)\n : indexForHighlight,\n ),\n optionForCreate\n ? filteredOptions.length\n : filteredOptions.length - 1,\n ),\n scrollToHighlighted,\n };\n }, actions.highlightIndex);\n },\n [filteredOptions, setState, optionForCreate],\n );\n\n const removeValue = (e: React.SyntheticEvent, valueItem: ITEM) => {\n e.stopPropagation();\n if (isMultipleParams(params)) {\n const newValue = params.value?.filter(\n (item) => getItemKey(item) !== getItemKey(valueItem),\n );\n params.onChange({\n e,\n value: newValue?.length ? newValue : null,\n });\n }\n };\n\n const onChange = (e: React.SyntheticEvent, item: ITEM) => {\n if (getItemDisabled && getItemDisabled(item)) {\n return;\n }\n if (isMultipleParams(params)) {\n const newValue = value.some(\n (value) => getItemKey(value) === getItemKey(item),\n )\n ? value.filter((value) => getItemKey(value) !== getItemKey(item))\n : [...value, item];\n params.onChange({ value: newValue.length ? newValue : null, e });\n }\n if (isNotMultipleParams(params)) {\n params.onChange({ value: item, e });\n setOpen(false);\n }\n !withoutClearSearch && setSearch('');\n };\n\n const onChangeAll = (parametrs: {\n e: React.SyntheticEvent;\n items: ITEM[];\n }) => {\n const { e, items } = parametrs;\n if (isMultipleParams(params)) {\n const nonDisabledItems = getItemDisabled\n ? items.filter((item) => !getItemDisabled(item))\n : items;\n\n const currentGroupValues: ITEM[] = [];\n const withoutGroupValues: ITEM[] = [];\n value.forEach((el) => {\n if (\n nonDisabledItems.find((item) => getItemKey(el) === getItemKey(item))\n ) {\n currentGroupValues.push(el);\n } else {\n withoutGroupValues.push(el);\n }\n });\n if (currentGroupValues.length === nonDisabledItems.length) {\n params.onChange({ value: withoutGroupValues, e });\n } else {\n params.onChange({\n e,\n value: [...withoutGroupValues, ...nonDisabledItems],\n });\n }\n }\n };\n\n const onCreate = (e: React.SyntheticEvent, label: string) => {\n params.onCreate && params.onCreate({ e, label });\n setOpen(false);\n !withoutClearSearch && setSearch('');\n };\n\n // Handlers\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\n if (!disabled && !(!multiple && value.length > 0)) {\n setSearch(e.target.value);\n }\n };\n\n const handleInputClick = (): void => {\n !disabled && setOpen(!isOpen);\n\n if (multiple) {\n inputRef.current?.focus();\n !withoutClearSearch && setSearch('');\n }\n };\n\n const clearValue = (e: React.SyntheticEvent) => {\n !withoutClearSearch && setSearch('');\n if (isMultipleParams(params)) {\n const results = value?.filter((item) => getItemDisabled?.(item));\n params.onChange({\n value: results && results.length > 0 ? results : null,\n e,\n });\n }\n if (isNotMultipleParams(params)) {\n params.onChange({ value: null, e });\n }\n };\n\n const getHandleRemoveValue = (item: ITEM) => (e: React.SyntheticEvent) =>\n removeValue(e, item);\n\n // Prop Getters\n\n const ArrowUp: KeyHandler = (_, e): void => {\n e.preventDefault();\n !disabled && setOpen(true);\n highlightIndex((old) => old - 1, true);\n };\n\n const ArrowDown: KeyHandler = (_, e): void => {\n e.preventDefault();\n !disabled && setOpen(true);\n highlightIndex((old) => old + 1, true);\n };\n\n const Enter: KeyHandler = (_, e): void => {\n if (isOpen) {\n if (searchValue || filteredOptions[highlightedIndex]) {\n e.preventDefault();\n }\n\n const getData = (\n index: number,\n ): [\n CountedGroup<ITEM, GROUP> | undefined,\n SelectAllItem | OptionForCreate | ITEM | undefined,\n ] => {\n let couter = 0;\n for (const group of visibleItems) {\n if (isOptionForCreate(group)) {\n couter++;\n return [undefined, group];\n }\n if (group.items.length + couter > index) {\n return [group, group.items[index - couter]];\n }\n couter += group.items.length;\n }\n return [undefined, undefined];\n };\n\n const [group, item] = getData(highlightedIndex);\n\n if (isOptionForCreate(item)) {\n onCreate(e, item.label);\n return;\n }\n\n if (isOptionForSelectAll(item)) {\n onChangeAll({\n e,\n items:\n (group?.items.filter(\n (el) => !isOptionForSelectAll(el),\n ) as ITEM[]) ?? [],\n });\n return;\n }\n\n if (item) {\n onChange(e, item);\n }\n }\n };\n\n const Escape = (): void => {\n setOpen(false);\n };\n\n const Tab = (): void => {\n setOpen(false);\n };\n\n const Backspace: KeyHandler = (_, e): void => {\n if (searchValue) {\n return;\n }\n if (multiple) {\n removeValue(e, value[value.length - 1]);\n } else {\n clearValue(e);\n }\n };\n\n const getKeyProps = useKeys({\n ArrowUp,\n ArrowDown,\n PageUp: ArrowUp,\n PageDown: ArrowDown,\n Home: ArrowUp,\n End: ArrowDown,\n Enter,\n Escape,\n Tab,\n Backspace,\n });\n\n const getOptionProps = ({\n index,\n item,\n }: OptionProps<ITEM>): GetOptionPropsResult => {\n if (isOptionForCreate(item)) {\n return {\n onClick: (e: React.SyntheticEvent) => {\n onCreate(e, item.label);\n },\n onMouseEnter: () => {\n highlightIndex(index, false);\n },\n active: false,\n hovered: index === highlightedIndex,\n key: '__optionForCreate',\n };\n }\n if (isOptionForSelectAll(item)) {\n const getItems = (): ITEM[] => {\n for (const group of visibleItems) {\n if (isOptionForCreate(group)) {\n break;\n }\n if (group.key === item.groupKey) {\n return (\n (group?.items.filter(\n (el) => !isOptionForSelectAll(el),\n ) as ITEM[]) ?? []\n );\n }\n }\n return [];\n };\n return {\n onClick: (e: React.SyntheticEvent) => {\n onChangeAll({ e, items: getItems() });\n },\n onMouseEnter: () => {\n highlightIndex(index, false);\n },\n active: false,\n hovered: index === highlightedIndex,\n key: '__optionForSelectAll',\n };\n }\n const key = getItemKey(item);\n return {\n onClick: (e: React.SyntheticEvent) => {\n onChange(e, item);\n },\n onMouseEnter: () => {\n highlightIndex(index, false);\n },\n active: Boolean(value.find((item) => getItemKey(item) === key)),\n hovered: index === highlightedIndex,\n key,\n };\n };\n\n useClickOutside({\n isActive: isOpen,\n ignoreClicksInsideRefs: [dropdownRef, controlRef],\n handler: () => {\n setOpen(false);\n },\n });\n\n React.useEffect(() => {\n if (disabled) {\n setOpen(false);\n }\n }, [disabled]);\n\n React.useEffect(() => {\n const currentHighlightIndex = getSelectedOptionIndex();\n highlightIndex(currentHighlightIndex, true);\n }, [highlightIndex]);\n\n React.useEffect(() => {\n if (filteredOptions.length > 0 && scrollToHighlighted) {\n scrollToIndex(highlightedIndex, dropdownRef);\n }\n }, [highlightedIndex]);\n\n const handleInputFocus = (e: React.FocusEvent<HTMLInputElement>): void => {\n if (!disabled) {\n if (!isFocused) {\n setIsFocused(true);\n }\n if (typeof onFocus === 'function') {\n onFocus(e);\n }\n }\n };\n\n const handleInputBlur = (e: React.FocusEvent<HTMLInputElement>): void => {\n if (isOpen) {\n inputRef.current?.focus();\n return;\n }\n\n if (isFocused) {\n setIsFocused(false);\n }\n\n if (typeof onBlur === 'function') {\n onBlur(e);\n }\n };\n\n const handleToggleDropdown = (): void => {\n if (isOpen) {\n setOpen(false);\n setIsFocused(false);\n } else {\n setOpen(true);\n setIsFocused(true);\n inputRef.current?.focus();\n }\n };\n\n useEffect(() => {\n if (searchValueProp) {\n setSearch(searchValueProp);\n }\n }, [searchValueProp]);\n\n return {\n isOpen,\n isFocused,\n highlightedIndex,\n visibleItems,\n highlightIndex,\n getOptionProps,\n handleInputFocus,\n handleInputBlur,\n handleToggleDropdown,\n handleInputClick,\n inputRef,\n getKeyProps,\n handleInputChange,\n searchValue,\n clearValue,\n getHandleRemoveValue,\n notFound,\n hasItems,\n };\n}\n"],"mappings":"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"}
|
|
@@ -4,7 +4,18 @@ export declare type Group<ITEM, GROUP> = {
|
|
|
4
4
|
group?: GROUP;
|
|
5
5
|
groupIndex: number;
|
|
6
6
|
};
|
|
7
|
+
export declare type SelectAllItem = {
|
|
8
|
+
checkedCount: number;
|
|
9
|
+
totalCount: number;
|
|
10
|
+
groupKey: string | number;
|
|
11
|
+
__optionSelctAll: true;
|
|
12
|
+
};
|
|
13
|
+
export declare type CountedGroup<ITEM, GROUP> = Omit<Group<ITEM, GROUP>, 'items'> & {
|
|
14
|
+
items: Array<SelectAllItem | ITEM>;
|
|
15
|
+
};
|
|
7
16
|
declare type GetItemGroupKey<ITEM> = (item: ITEM) => string | number | undefined;
|
|
17
|
+
declare type GetItemKey<ITEM> = (item: ITEM) => string | number | undefined;
|
|
18
|
+
declare type GetItemDisabled<ITEM> = (item: ITEM) => boolean | undefined;
|
|
8
19
|
declare type GetGroupKey<GROUP> = (item: GROUP) => string | number | undefined;
|
|
9
20
|
declare type SortGroups<ITEM, GROUP> = (a: Group<ITEM, GROUP>, b: Group<ITEM, GROUP>) => number;
|
|
10
21
|
declare type GetGroupsResult<ITEM, GROUP> = Group<ITEM, GROUP>[];
|
|
@@ -18,4 +29,5 @@ export declare const defaultGroupKey = "no-group";
|
|
|
18
29
|
* @param noGroupKey ключ группы которая создаться если item небудет принадлежать ни к одной из групп
|
|
19
30
|
*/
|
|
20
31
|
export declare function getGroups<ITEM, GROUP>(items: ITEM[], getItemGroupKey: GetItemGroupKey<ITEM> | undefined, groups: GROUP[] | undefined, getGroupKey: GetGroupKey<GROUP> | undefined, sortGroups: SortGroups<ITEM, GROUP> | undefined, noGroupKey?: string): GetGroupsResult<ITEM, GROUP>;
|
|
32
|
+
export declare function getCountedGroups<ITEM, GROUP>(groups: GetGroupsResult<ITEM, GROUP>, values: ITEM[] | undefined | null, selectAll: boolean, getItemKey: GetItemKey<ITEM>, getItemDisabled?: GetItemDisabled<ITEM>): CountedGroup<ITEM, GROUP>[];
|
|
21
33
|
export {};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function _createForOfIteratorHelper(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!c){if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0,e=function(){};return{s:e,n:function n(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}},e:function e(a){throw a},f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f,g=!0,h=!1;return{s:function s(){c=c.call(a)},n:function n(){var a=c.next();return g=a.done,a},e:function e(a){h=!0,f=a},f:function f(){try{g||null==c["return"]||c["return"]()}finally{if(h)throw f}}}}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}export var defaultGroupKey="no-group";var getItemGroupKeyGuard=function(a,b,c){var d=a(b);return"undefined"==typeof d?c:d};export function getGroups(a,b,c,d,e){var f=5<arguments.length&&void 0!==arguments[5]?arguments[5]:defaultGroupKey;if("function"!=typeof b)return[{items:a,key:f,groupIndex:-1}];var g,h=[],i=_createForOfIteratorHelper(a);try{var j=function _loop(){var a=g.value,e=getItemGroupKeyGuard(b,a,f),i=h.findIndex(function(a){return a.key===e});if(0<=i)h[i].items.push(a);else{var j=d&&c?c.findIndex(function(a){return d(a)===e}):-1,k={key:e,items:[a],groupIndex:j,group:c?c[j]:void 0};h.push(k)}};for(i.s();!(g=i.n()).done;)j()}catch(a){i.e(a)}finally{i.f()}return"function"==typeof e?h.sort(e):c&&d&&h.sort(function(c,a){return c.groupIndex>a.groupIndex?1:c.groupIndex<a.groupIndex?-1:0}),h}
|
|
1
|
+
import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";function _createForOfIteratorHelper(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!c){if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0,e=function(){};return{s:e,n:function n(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}},e:function e(a){throw a},f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f,g=!0,h=!1;return{s:function s(){c=c.call(a)},n:function n(){var a=c.next();return g=a.done,a},e:function e(a){h=!0,f=a},f:function f(){try{g||null==c["return"]||c["return"]()}finally{if(h)throw f}}}}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}export var defaultGroupKey="no-group";var getItemGroupKeyGuard=function(a,b,c){var d=a(b);return"undefined"==typeof d?c:d};export function getGroups(a,b,c,d,e){var f=5<arguments.length&&void 0!==arguments[5]?arguments[5]:defaultGroupKey;if("function"!=typeof b)return[{items:a,key:f,groupIndex:-1}];var g,h=[],i=_createForOfIteratorHelper(a);try{var j=function _loop(){var a=g.value,e=getItemGroupKeyGuard(b,a,f),i=h.findIndex(function(a){return a.key===e});if(0<=i)h[i].items.push(a);else{var j=d&&c?c.findIndex(function(a){return d(a)===e}):-1,k={key:e,items:[a],groupIndex:j,group:c?c[j]:void 0};h.push(k)}};for(i.s();!(g=i.n()).done;)j()}catch(a){i.e(a)}finally{i.f()}return"function"==typeof e?h.sort(e):c&&d&&h.sort(function(c,a){return c.groupIndex>a.groupIndex?1:c.groupIndex<a.groupIndex?-1:0}),h}export function getCountedGroups(a,b,c,d,e){var f=_toConsumableArray(a);return c&&a.forEach(function(a,c){var g=0,h=0;a.items.forEach(function(a){e&&null!==e&&void 0!==e&&e(a)||(g+=1),null!==b&&void 0!==b&&b.find(function(b){return d(a)===d(b)})&&(h+=1)}),f[c].items=[{__optionSelctAll:!0,totalCount:g,groupKey:a.key,checkedCount:h}].concat(_toConsumableArray(f[c].items))}),f}
|
|
2
2
|
//# sourceMappingURL=getGroups.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getGroups.js","names":["defaultGroupKey","getItemGroupKeyGuard","getter","item","noGroupKey","key","getGroups","items","getItemGroupKey","groups","getGroupKey","sortGroups","groupIndex","resultGroups","itemGroupKey","resultGroupIndex","findIndex","group","push","g","resultGroup","sort","a","b"],"sources":["../../../../src/utils/getGroups.ts"],"sourcesContent":["export type Group<ITEM, GROUP> = {\n items: ITEM[];\n key: string | number;\n group?: GROUP;\n groupIndex: number;\n};\ntype GetItemGroupKey<ITEM> = (item: ITEM) => string | number | undefined;\ntype GetGroupKey<GROUP> = (item: GROUP) => string | number | undefined;\ntype SortGroups<ITEM, GROUP> = (\n a: Group<ITEM, GROUP>,\n b: Group<ITEM, GROUP>,\n) => number;\ntype GetGroupsResult<ITEM, GROUP> = Group<ITEM, GROUP>[];\n\nexport const defaultGroupKey = 'no-group';\n\nconst getItemGroupKeyGuard = <ITEM>(\n getter: GetGroupKey<ITEM>,\n item: ITEM,\n noGroupKey: string,\n) => {\n const key = getter(item);\n\n return typeof key === 'undefined' ? noGroupKey : key;\n};\n\n/**\n * @param items список который нужно групировать\n * @param getItemGroupKey признак принадлежности к группе\n * @param groups список групп\n * @param getGroupKey результат функции должен вернуть уникальный ключ группы\n * @param sortGroups сортировка групп\n * @param noGroupKey ключ группы которая создаться если item небудет принадлежать ни к одной из групп\n */\n\nexport function getGroups<ITEM, GROUP>(\n items: ITEM[],\n getItemGroupKey: GetItemGroupKey<ITEM> | undefined,\n groups: GROUP[] | undefined,\n getGroupKey: GetGroupKey<GROUP> | undefined,\n sortGroups: SortGroups<ITEM, GROUP> | undefined,\n noGroupKey = defaultGroupKey,\n): GetGroupsResult<ITEM, GROUP> {\n if (typeof getItemGroupKey !== 'function') {\n return [{ items, key: noGroupKey, groupIndex: -1 }];\n }\n\n const resultGroups: GetGroupsResult<ITEM, GROUP> = [];\n for (const item of items) {\n const itemGroupKey = getItemGroupKeyGuard(\n getItemGroupKey,\n item,\n noGroupKey,\n );\n const resultGroupIndex = resultGroups.findIndex(\n (group) => group.key === itemGroupKey,\n );\n\n if (resultGroupIndex >= 0) {\n resultGroups[resultGroupIndex].items.push(item);\n } else {\n const groupIndex =\n getGroupKey && groups\n ? groups.findIndex((g) => getGroupKey(g) === itemGroupKey)\n : -1;\n\n const resultGroup: Group<ITEM, GROUP> = {\n key: itemGroupKey,\n items: [item],\n groupIndex,\n group: groups ? groups[groupIndex] : undefined,\n };\n\n resultGroups.push(resultGroup);\n }\n }\n\n if (typeof sortGroups === 'function') {\n resultGroups.sort(sortGroups);\n } else if (groups && getGroupKey) {\n resultGroups.sort((a, b) => {\n if (a.groupIndex > b.groupIndex) return 1;\n if (a.groupIndex < b.groupIndex) return -1;\n return 0;\n });\n }\n\n return resultGroups;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"getGroups.js","names":["defaultGroupKey","getItemGroupKeyGuard","getter","item","noGroupKey","key","getGroups","items","getItemGroupKey","groups","getGroupKey","sortGroups","groupIndex","resultGroups","itemGroupKey","resultGroupIndex","findIndex","group","push","g","resultGroup","sort","a","b","getCountedGroups","values","selectAll","getItemKey","getItemDisabled","copyGroups","forEach","index","totalCount","checkedCount","find","el","__optionSelctAll","groupKey"],"sources":["../../../../src/utils/getGroups.ts"],"sourcesContent":["export type Group<ITEM, GROUP> = {\n items: ITEM[];\n key: string | number;\n group?: GROUP;\n groupIndex: number;\n};\n\nexport type SelectAllItem = {\n checkedCount: number;\n totalCount: number;\n groupKey: string | number;\n __optionSelctAll: true;\n};\n\nexport type CountedGroup<ITEM, GROUP> = Omit<Group<ITEM, GROUP>, 'items'> & {\n items: Array<SelectAllItem | ITEM>;\n};\n\ntype GetItemGroupKey<ITEM> = (item: ITEM) => string | number | undefined;\ntype GetItemKey<ITEM> = (item: ITEM) => string | number | undefined;\ntype GetItemDisabled<ITEM> = (item: ITEM) => boolean | undefined;\ntype GetGroupKey<GROUP> = (item: GROUP) => string | number | undefined;\ntype SortGroups<ITEM, GROUP> = (\n a: Group<ITEM, GROUP>,\n b: Group<ITEM, GROUP>,\n) => number;\ntype GetGroupsResult<ITEM, GROUP> = Group<ITEM, GROUP>[];\n\nexport const defaultGroupKey = 'no-group';\n\nconst getItemGroupKeyGuard = <ITEM>(\n getter: GetGroupKey<ITEM>,\n item: ITEM,\n noGroupKey: string,\n) => {\n const key = getter(item);\n\n return typeof key === 'undefined' ? noGroupKey : key;\n};\n\n/**\n * @param items список который нужно групировать\n * @param getItemGroupKey признак принадлежности к группе\n * @param groups список групп\n * @param getGroupKey результат функции должен вернуть уникальный ключ группы\n * @param sortGroups сортировка групп\n * @param noGroupKey ключ группы которая создаться если item небудет принадлежать ни к одной из групп\n */\n\nexport function getGroups<ITEM, GROUP>(\n items: ITEM[],\n getItemGroupKey: GetItemGroupKey<ITEM> | undefined,\n groups: GROUP[] | undefined,\n getGroupKey: GetGroupKey<GROUP> | undefined,\n sortGroups: SortGroups<ITEM, GROUP> | undefined,\n noGroupKey = defaultGroupKey,\n): GetGroupsResult<ITEM, GROUP> {\n if (typeof getItemGroupKey !== 'function') {\n return [{ items, key: noGroupKey, groupIndex: -1 }];\n }\n\n const resultGroups: GetGroupsResult<ITEM, GROUP> = [];\n for (const item of items) {\n const itemGroupKey = getItemGroupKeyGuard(\n getItemGroupKey,\n item,\n noGroupKey,\n );\n const resultGroupIndex = resultGroups.findIndex(\n (group) => group.key === itemGroupKey,\n );\n\n if (resultGroupIndex >= 0) {\n resultGroups[resultGroupIndex].items.push(item);\n } else {\n const groupIndex =\n getGroupKey && groups\n ? groups.findIndex((g) => getGroupKey(g) === itemGroupKey)\n : -1;\n\n const resultGroup: Group<ITEM, GROUP> = {\n key: itemGroupKey,\n items: [item],\n groupIndex,\n group: groups ? groups[groupIndex] : undefined,\n };\n\n resultGroups.push(resultGroup);\n }\n }\n\n if (typeof sortGroups === 'function') {\n resultGroups.sort(sortGroups);\n } else if (groups && getGroupKey) {\n resultGroups.sort((a, b) => {\n if (a.groupIndex > b.groupIndex) return 1;\n if (a.groupIndex < b.groupIndex) return -1;\n return 0;\n });\n }\n\n return resultGroups;\n}\n\nexport function getCountedGroups<ITEM, GROUP>(\n groups: GetGroupsResult<ITEM, GROUP>,\n values: ITEM[] | undefined | null,\n selectAll: boolean,\n getItemKey: GetItemKey<ITEM>,\n getItemDisabled?: GetItemDisabled<ITEM>,\n): CountedGroup<ITEM, GROUP>[] {\n const copyGroups: CountedGroup<ITEM, GROUP>[] = [...groups];\n if (selectAll) {\n groups.forEach((group, index) => {\n let totalCount = 0;\n let checkedCount = 0;\n group.items.forEach((item) => {\n if (!(getItemDisabled && getItemDisabled?.(item))) {\n totalCount += 1;\n }\n if (values?.find((el) => getItemKey(item) === getItemKey(el))) {\n checkedCount += 1;\n }\n });\n copyGroups[index].items = [\n {\n __optionSelctAll: true,\n totalCount,\n groupKey: group.key,\n checkedCount,\n },\n ...copyGroups[index].items,\n ];\n });\n }\n return copyGroups;\n}\n"],"mappings":"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"}
|