{"version":3,"file":"useSortDropdown.cjs","sources":["../../../../src/components/Dropdown/SortDropdown/useSortDropdown.ts"],"sourcesContent":["import {\n  type ChangeEventHandler,\n  type ComponentProps,\n  type MouseEventHandler,\n  useCallback,\n  useEffect,\n  useMemo,\n  useState,\n} from 'react'\nimport { tv } from 'tailwind-variants'\n\nimport { useIntl } from '../../../intl'\nimport { FaArrowDownWideShortIcon, FaArrowUpWideShortIcon } from '../../Icon'\n\nimport type { SortDropdown } from './SortDropdown'\n\nconst classNameGenerator = tv({\n  slots: {\n    body: 'shr-p-1.5',\n    select: 'shr-min-w-[16em]',\n    footer: 'shr-border-t-shorthand shr-px-1.5 shr-py-1',\n  },\n})\n\ntype Props = Omit<ComponentProps<typeof SortDropdown>, 'onCancel'>\n\nexport const useSortDropdown = ({\n  sortFields,\n  defaultOrder,\n  onApply,\n  sortFieldLabel,\n  sortOrderLegend,\n  ascLabel,\n  descLabel,\n  applyText,\n  cancelText,\n}: Props) => {\n  const { localize } = useIntl()\n\n  const texts = useMemo(\n    () => ({\n      sortFieldLabel:\n        sortFieldLabel ||\n        localize({\n          id: 'smarthr-ui/SortDropdown/sortFieldLabel',\n          defaultText: '並べ替え項目',\n        }),\n      sortOrderLegend:\n        sortOrderLegend ||\n        localize({\n          id: 'smarthr-ui/SortDropdown/sortOrderLegend',\n          defaultText: '並び順',\n        }),\n      ascLabel:\n        ascLabel ||\n        localize({\n          id: 'smarthr-ui/SortDropdown/ascLabel',\n          defaultText: '昇順',\n        }),\n      descLabel:\n        descLabel ||\n        localize({\n          id: 'smarthr-ui/SortDropdown/descLabel',\n          defaultText: '降順',\n        }),\n      applyText:\n        applyText ||\n        localize({\n          id: 'smarthr-ui/SortDropdown/applyText',\n          defaultText: '適用',\n        }),\n      cancelText:\n        cancelText ||\n        localize({\n          id: 'smarthr-ui/SortDropdown/cancelText',\n          defaultText: 'キャンセル',\n        }),\n    }),\n    [sortFieldLabel, sortOrderLegend, ascLabel, descLabel, applyText, cancelText, localize],\n  )\n\n  // 外向きの値\n  const [selectedLabel, setSelectedLabel] = useState<string>()\n  const [checkedOrder, setCheckedOrder] = useState<Props['defaultOrder']>(defaultOrder)\n\n  // 内部的な値\n  const [innerFields, setInnerFields] = useState<Props['sortFields']>(sortFields)\n  const [innerSelectedField, setInnerSelectedField] = useState<string>()\n  const [innerCheckedOrder, setCheckedInnerOrder] = useState<Props['defaultOrder']>(defaultOrder)\n\n  useEffect(() => {\n    if (selectedLabel) return\n\n    // 初期値は option に紛れているので、選択されている項目を取得\n    const defaultField = sortFields.find((field) => field.selected) || sortFields[0]\n\n    setSelectedLabel(defaultField.label)\n    setInnerSelectedField(defaultField.label)\n  }, [selectedLabel, sortFields])\n\n  // 外向きな値で構成\n  const triggerLabel = useMemo(\n    () => `${selectedLabel}（${checkedOrder === 'asc' ? texts.ascLabel : texts.descLabel}）`,\n    [texts.ascLabel, texts.descLabel, selectedLabel, checkedOrder],\n  )\n\n  const SortIcon = useMemo(\n    () => (checkedOrder === 'asc' ? FaArrowUpWideShortIcon : FaArrowDownWideShortIcon),\n    [checkedOrder],\n  )\n\n  const handleChange = useCallback<ChangeEventHandler<HTMLSelectElement>>(\n    (e) => {\n      const select = e.currentTarget\n      const newLabel = select.options[select.selectedIndex].label\n\n      setInnerFields(\n        innerFields.map((field) => {\n          if (field.label === newLabel) {\n            if (!field.selected) {\n              return {\n                ...field,\n                selected: true,\n              }\n            }\n          } else if (field.selected) {\n            return {\n              ...field,\n              selected: false,\n            }\n          }\n\n          return field\n        }),\n      )\n      setInnerSelectedField(newLabel)\n    },\n    [innerFields],\n  )\n  const handleApply = useCallback<MouseEventHandler<HTMLButtonElement>>(() => {\n    setSelectedLabel(innerSelectedField)\n    setCheckedOrder(innerCheckedOrder)\n    onApply({ field: innerSelectedField || '', order: innerCheckedOrder, newfields: innerFields })\n  }, [innerCheckedOrder, innerFields, innerSelectedField, onApply])\n\n  const onChangeSortOrderRadio = useCallback<ChangeEventHandler<HTMLInputElement>>((e) => {\n    setCheckedInnerOrder(e.currentTarget.value as Props['defaultOrder'])\n  }, [])\n\n  const classNames = useMemo(() => {\n    const { body, select, footer } = classNameGenerator()\n\n    return {\n      body: body(),\n      select: select(),\n      footer: footer(),\n    }\n  }, [])\n\n  return {\n    onChangeSortOrderRadio,\n    texts: {\n      ...texts,\n      triggerLabel,\n    },\n    handler: { handleApply, handleChange },\n    innerValues: { innerFields, innerSelectedField, innerCheckedOrder },\n    SortIcon,\n    classNames,\n  }\n}\n"],"names":["tv","useIntl","useMemo","useState","useEffect","FaArrowUpWideShortIcon","FaArrowDownWideShortIcon","useCallback"],"mappings":"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"}