{"version":3,"file":"index.mjs","sources":[""],"sourcesContent":["import \"./style.pcss\";\r\n\r\nimport type { FC, ReactElement } from \"react\";\r\nimport {\r\n  createRef, useEffect, useImperativeHandle, useRef, useState,\r\n} from \"react\";\r\nimport type {\r\n  ICheckerGroup,\r\n  ICheckerGroupItemsGroup,\r\n  ICheckerGroupRef,\r\n  TCheckerGroupGetItem,\r\n  TCheckerGroupGetItemArg,\r\n  TCheckerGroupItem,\r\n  TCheckerGroupItemsProp,\r\n  TCheckerGroupOnChangeFn,\r\n} from \"./config/types\";\r\nimport { getCheckedItems } from \"./utils/getCheckedItems\";\r\nimport type { IComponentBaseProps } from \"../../types/components/index\";\r\nimport { useCN } from \"../../utils/react/useCN\";\r\nimport { Checker } from \"../checker\";\r\nimport type { IInputEventParams } from \"../input/config/types\";\r\n\r\n/**\r\n * Группа чекеров\r\n * @returns {ReactElement}\r\n */\r\nconst CheckerGroup: FC<IComponentBaseProps & ICheckerGroup> = ({\r\n  baseClass = \"checkerGroup\",\r\n  extraAttrs = {},\r\n  extraClasses = {},\r\n  children = null,\r\n  items = [],\r\n  form,\r\n  type = \"checkbox\",\r\n  onChange = null,\r\n  getItem = null,\r\n  emptyPlaceholder = \"Нет элементов\",\r\n  ref,\r\n}): ReactElement => {\r\n\r\n  const { getCN } = useCN(baseClass);\r\n\r\n  const [ list, setList ] = useState<TCheckerGroupItemsProp>(items);\r\n\r\n  const listRef = useRef<HTMLUListElement | null>(null);\r\n  const containerRef = useRef<HTMLFieldSetElement | null>(null);\r\n\r\n  const setScroll = (value = 0) => {\r\n    if (listRef.current) {\r\n      listRef.current.scrollTop = value;\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    setList(items);\r\n  }, [ items ]);\r\n\r\n  useEffect(() => {\r\n    setScroll();\r\n  }, []);\r\n\r\n  const onInputChange = (e: IInputEventParams) => {\r\n    if (typeof onChange === \"function\") {\r\n      onChange(e, setList);\r\n    } else {\r\n      const { name, value, checked } = e.event.target as HTMLInputElement;\r\n      setList((checkers) => {\r\n        return getCheckedItems(checkers, {\r\n          type, name, value, checked,\r\n        });\r\n      });\r\n    }\r\n  };\r\n\r\n  const getList = (items: TCheckerGroupItemsProp = [], nestedKey = 0) => {\r\n    if (!items.length) {\r\n      return <li className={getCN(\"item\", { isEmpty: true })}>{emptyPlaceholder}</li>;\r\n    }\r\n\r\n    return items.map((item, index) => {\r\n      const checker = <Checker type={type} onChange={onInputChange} form={form} {...item} />;\r\n      const comp = typeof getItem === \"function\" ? getItem({\r\n        item, index, checker, getCN,\r\n      }) : checker;\r\n\r\n      const isInnerList = \"items\" in item && Array.isArray(item.items);\r\n\r\n      const key = `${index}${nestedKey}${\"name\" in item ? item.name : \"\"}${\"value\" in item ? item.value : \"\"}${\"isChecked\" in item ? item.isChecked : false}`;\r\n\r\n      return (\r\n        <li key={key} className={getCN(\"item\")}>\r\n          {!!item.label && isInnerList && <p className={getCN(\"label\")}>{item.label}</p>}\r\n          {isInnerList ? <ul className={getCN(\"list\", { isInner: true })}>\r\n            {getList(item.items, index)}\r\n          </ul> : comp}\r\n        </li>\r\n      );\r\n    });\r\n  };\r\n\r\n  useImperativeHandle(ref, (): ICheckerGroupRef => ({\r\n    el: containerRef.current,\r\n    ref: createRef(),\r\n    stateActions: null,\r\n    getData: () => null,\r\n    utils: {\r\n      setScroll,\r\n    },\r\n  }), []);\r\n\r\n  return (\r\n    <fieldset ref={containerRef} className={getCN(\"\", extraClasses)} {...extraAttrs}>\r\n      {children || (\r\n        <ul className={getCN(\"list\")} ref={listRef}>\r\n          {getList(list)}\r\n        </ul>\r\n      )}\r\n    </fieldset>\r\n  );\r\n\r\n};\r\n\r\nexport type {\r\n  ICheckerGroup,\r\n  ICheckerGroupItemsGroup,\r\n  ICheckerGroupRef,\r\n  TCheckerGroupGetItem,\r\n  TCheckerGroupGetItemArg,\r\n  TCheckerGroupItem,\r\n  TCheckerGroupItemsProp,\r\n  TCheckerGroupOnChangeFn,\r\n};\r\n\r\nexport {\r\n  CheckerGroup,\r\n};\r\n"],"names":["CheckerGroup","baseClass","extraAttrs","extraClasses","children","items","form","type","onChange","getItem","emptyPlaceholder","ref","getCN","useCN","list","setList","useState","listRef","useRef","containerRef","setScroll","value","current","scrollTop","useEffect","onInputChange","e","name","checked","event","target","checkers","getCheckedItems","getList","nestedKey","length","_jsx","className","isEmpty","map","item","index","checker","Checker","comp","isInnerList","Array","isArray","key","isChecked","_jsxs","label","isInner","useImperativeHandle","el","createRef","stateActions","getData","utils"],"mappings":";;;;GA0BA,MAAMA,aAAwD,EAC5DC,oBAAY,eACZC,sBAAa,CAAA,EACbC,0BAAe,CAAA,EACfC,kBAAW,KACXC,YAAQ,GACRC,UACAC,UAAO,WACPC,kBAAW,KACXC,gBAAU,KACVC,kCAAmB,gBACnBC,YAGA,MAAMC,MAAEA,OAAUC,MAAMZ,WAExB,MAAQa,KAAMC,SAAYC,SAAiCX,OAE3D,MAAMY,QAAUC,OAAgC,MAChD,MAAMC,aAAeD,OAAmC,MAExD,MAAME,UAAY,CAACC,MAAQ,KACzB,GAAIJ,QAAQK,QACVL,QAAQK,QAAQC,UAAYF,OAIhCG,UAAU,KACRT,QAAQV,QACP,CAAEA,QAELmB,UAAU,KACRJ,aACC,IAEH,MAAMK,cAAiBC,IACrB,UAAWlB,WAAa,WACtBA,SAASkB,EAAGX,aACP,CACL,MAAMY,KAAEA,KAAIN,MAAEA,MAAKO,QAAEA,SAAYF,EAAEG,MAAMC,OACzCf,QAASgB,UACAC,gBAAgBD,SAAU,CAC/BxB,UAAMoB,UAAMN,YAAOO,kBAGzB,GAGF,MAAMK,QAAU,CAAC5B,MAAgC,GAAI6B,UAAY,KAC/D,IAAK7B,MAAM8B;AACT,OAAOC,IAAA,KAAA,CAAIC,UAAWzB,MAAM,OAAQ,CAAE0B,QAAS,OAAQlC,SAAEM,mBAG3D,OAAOL,MAAMkC,IAAI,CAACC,KAAMC,SACtB,MAAMC,QAAUN,IAACO,QAAO,CAACpC,KAAMA,KAAMC,SAAUiB,cAAenB,KAAMA,QAAUkC,OAC9E,MAAMI,YAAcnC,UAAY,WAAaA,QAAQ,CACnD+B,UAAMC,YAAOC,gBAAS9B,cACnB8B,QAEL,MAAMG,YAAc,UAAWL,MAAQM,MAAMC,QAAQP,KAAKnC,OAE1D,MAAM2C,IAAM,GAAGP,QAAQP,YAAY,SAAUM,KAAOA,KAAKb,KAAO,KAAK,UAAWa,KAAOA,KAAKnB,MAAQ,KAAK,cAAemB,KAAOA,KAAKS,UAAY;AAEhJ,OACEC,KAAA,KAAA,CAAcb,UAAWzB,MAAM,QAAQR,SAAA,GAClCoC,KAAKW,OAASN,aAAeT,IAAA,IAAA,CAAGC,UAAWzB,MAAM,SAASR,SAAEoC,KAAKW,QACnEN,YAAcT,IAAA,KAAA,CAAIC,UAAWzB,MAAM,OAAQ,CAAEwC,QAAS,OAAQhD,SAC5D6B,QAAQO,KAAKnC,MAAOoC,SACfG,OAJDI,QAUfK,oBAAoB1C,IAAK,KAAA,CACvB2C,GAAInC,aAAaG,QACjBX,IAAK4C,YACLC,aAAc,KACdC,QAAS,IAAM,KACfC,MAAO,CACLtC,uBAEA;AAEJ,OACEgB,IAAA,WAAA,CAAUzB,IAAKQ,aAAckB,UAAWzB,MAAM,GAAIT,iBAAmBD,WAAUE,SAC5EA,UACCgC,IAAA,KAAA,CAAIC,UAAWzB,MAAM,QAASD,IAAKM,QAAQb,SACxC6B,QAAQnB"}