@owp/core 2.5.20 → 2.5.21
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/dist/_virtual/index16.js +4 -4
- package/dist/_virtual/index17.js +4 -4
- package/dist/_virtual/index18.js +4 -4
- package/dist/_virtual/index19.js +4 -4
- package/dist/components/OwpCommonCode/OwpCommonCodeQuerySelector.js +26 -26
- package/dist/components/OwpCommonCode/OwpCommonCodeQuerySelector.js.map +1 -1
- package/dist/components/OwpCommonCode/OwpCommonCodeSelector.js +29 -29
- package/dist/components/OwpCommonCode/OwpCommonCodeSelector.js.map +1 -1
- package/dist/components/OwpMrtTable/OwpMrtTable.js +144 -141
- package/dist/components/OwpMrtTable/OwpMrtTable.js.map +1 -1
- package/dist/components/OwpOptionSelector/OwpOptionSelector.js +20 -20
- package/dist/components/OwpOptionSelector/OwpOptionSelector.js.map +1 -1
- package/dist/components/OwpPicker/OwpDatePicker.js +218 -236
- package/dist/components/OwpPicker/OwpDatePicker.js.map +1 -1
- package/dist/components/OwpPicker/OwpTimePicker.js +311 -340
- package/dist/components/OwpPicker/OwpTimePicker.js.map +1 -1
- package/dist/components/OwpPicker/constants/index.js +21 -6
- package/dist/components/OwpPicker/constants/index.js.map +1 -1
- package/dist/components/OwpPicker/utils/index.js +22 -0
- package/dist/components/OwpPicker/utils/index.js.map +1 -0
- package/dist/components/OwpQuerySelector/OwpQuerySelector.js +218 -205
- package/dist/components/OwpQuerySelector/OwpQuerySelector.js.map +1 -1
- package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js +59 -59
- package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js.map +1 -1
- package/dist/components/OwpSelectorBase/OwpSelectorSelect.js +88 -85
- package/dist/components/OwpSelectorBase/OwpSelectorSelect.js.map +1 -1
- package/dist/components/OwpSelectorBase/hooks/useOwpSelectorBase.js +93 -93
- package/dist/components/OwpSelectorBase/hooks/useOwpSelectorBase.js.map +1 -1
- package/dist/components/OwpTable/OwpDataTable.js +329 -317
- package/dist/components/OwpTable/OwpDataTable.js.map +1 -1
- package/dist/components/OwpTable/OwpFieldTable.js +78 -72
- package/dist/components/OwpTable/OwpFieldTable.js.map +1 -1
- package/dist/components/OwpTable/OwpTable.js +66 -219
- package/dist/components/OwpTable/OwpTable.js.map +1 -1
- package/dist/components/OwpTable/internal/OwpTableBase.js +170 -0
- package/dist/components/OwpTable/internal/OwpTableBase.js.map +1 -0
- package/dist/components/OwpTable/internal/OwpTableTotalCount.js +23 -0
- package/dist/components/OwpTable/internal/OwpTableTotalCount.js.map +1 -0
- package/dist/components/OwpTable/internal/defaultTableStyle.js +10 -10
- package/dist/components/OwpTable/internal/defaultTableStyle.js.map +1 -1
- package/dist/components/OwpTable/utils/tableSx.js +9 -0
- package/dist/components/OwpTable/utils/tableSx.js.map +1 -0
- package/dist/components/OwpTextField/OwpTextMaskField.js +95 -86
- package/dist/components/OwpTextField/OwpTextMaskField.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js +158 -172
- package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js.map +1 -1
- package/dist/components/OwpYesNoSelector/OwpYesNoSelector.js.map +1 -1
- package/dist/features/themePreview/configs/table.js +4 -4
- package/dist/features/themePreview/configs/table.js.map +1 -1
- package/dist/index.js +91 -94
- package/dist/layout/components/toggles/NavigationSearchToggle.js +3 -3
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/constants.js +1 -1
- package/dist/node_modules/.pnpm/react-overlays@5.2.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-overlays/esm/Portal.js +1 -1
- package/dist/types/components/OwpCommonCode/OwpCommonCodeQuerySelector.d.ts +3 -3
- package/dist/types/components/OwpCommonCode/OwpCommonCodeSelector.d.ts +3 -3
- package/dist/types/components/OwpMrtTable/OwpMrtTable.d.ts +1 -0
- package/dist/types/components/OwpOptionSelector/OwpOptionSelector.d.ts +2 -2
- package/dist/types/components/OwpPicker/OwpDatePicker.d.ts +1 -1
- package/dist/types/components/OwpPicker/OwpTimePicker.d.ts +1 -1
- package/dist/types/components/OwpPicker/constants/index.d.ts +15 -0
- package/dist/types/components/OwpPicker/utils/index.d.ts +6 -0
- package/dist/types/components/OwpQuerySelector/OwpQuerySelector.d.ts +1 -1
- package/dist/types/components/OwpQuerySelector/types/types.d.ts +1 -0
- package/dist/types/components/OwpSelectorBase/hooks/useOwpSelectorBase.d.ts +1 -1
- package/dist/types/components/OwpSelectorBase/types/types.d.ts +1 -1
- package/dist/types/components/OwpTable/OwpDataTable.d.ts +5 -1
- package/dist/types/components/OwpTable/OwpFieldTable.d.ts +7 -1
- package/dist/types/components/OwpTable/OwpTable.d.ts +6 -38
- package/dist/types/components/OwpTable/internal/OwpTableBase.d.ts +34 -0
- package/dist/types/components/OwpTable/internal/OwpTableTotalCount.d.ts +9 -0
- package/dist/types/components/OwpTable/internal/defaultTableStyle.d.ts +4 -2
- package/dist/types/components/OwpTable/utils/tableSx.d.ts +11 -0
- package/dist/types/components/OwpTextField/OwpTextMaskField.d.ts +3 -3
- package/dist/types/components/OwpYesNoSelector/OwpYesNoSelector.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwpQuerySelector.js","sources":["../../../src/components/OwpQuerySelector/OwpQuerySelector.tsx"],"sourcesContent":["import { OwpSelectorBase } from '@/components/OwpSelectorBase/OwpSelectorBase';\nimport type { OwpSelectorBaseOption } from '@/components/OwpSelectorBase/types';\nimport { mergeSelectorOptions, splitSelectorValue } from '@/components/OwpSelectorBase/utils';\nimport { STORAGE_ACCESS_TOKEN_KEY } from '@/constants/localStorageKeys';\nimport { useOwpAppContext } from '@/contexts/OwpAppProvider';\nimport { useGetCurrentUser } from '@/hooks/useCurrentUser';\nimport { createJsonString } from '@/utils/createJsonString';\nimport { getApiLanguageCode } from '@/utils/language';\nimport { useQuery } from '@tanstack/react-query';\nimport clsx from 'clsx';\nimport { isArray, isFunction, isPlainObject } from 'es-toolkit/compat';\nimport { useEffect, useMemo, useState } from 'react';\nimport type { OwpQuerySelectorProps } from './types';\n\nconst DEFAULT_RESPONSE_LIST_KEY = 'resultData';\n\n/**\n * 선택 옵션 라벨 문자열 변환\n * @param label 선택 옵션 라벨\n */\nconst getQuerySelectorOptionLabelText = (label: OwpSelectorBaseOption['label']) => {\n return typeof label === 'string' || typeof label === 'number' ? `${label}` : '';\n};\n\n/**\n * 요청 query 객체 구성\n * @param query 원본 query\n */\nconst defaultBuildRequestQuery = (query: Record<string, unknown>) => {\n return {\n jsondata: createJsonString(query),\n };\n};\n\n/**\n * query key 추가 의존성 병합\n * @param queryKey 원본 query key\n * @param queryKeyDeps 추가 의존성\n */\nconst appendQuerySelectorQueryKeyDeps = (\n queryKey: unknown[],\n queryKeyDeps?: readonly unknown[],\n) => {\n return queryKeyDeps?.length ? [...queryKey, queryKeyDeps] : queryKey;\n};\n\n/**\n * query key 직렬화 값 정규화\n * @param value 원본 값\n */\nconst normalizeQuerySelectorKeyValue = (value: unknown): unknown => {\n if (value instanceof Date) {\n return value.toJSON();\n }\n\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (isArray(value)) {\n return value.map((item) => normalizeQuerySelectorKeyValue(item));\n }\n\n if (isPlainObject(value)) {\n return Object.keys(value as Record<string, unknown>)\n .sort()\n .reduce<Record<string, unknown>>((result, key) => {\n const normalizedValue = normalizeQuerySelectorKeyValue((value as Record<string, unknown>)[key]);\n\n if (normalizedValue === undefined) {\n return result;\n }\n\n result[key] = normalizedValue;\n\n return result;\n }, {});\n }\n\n if (isFunction(value) || typeof value === 'symbol') {\n return undefined;\n }\n\n return value;\n};\n\n/**\n * 요청 범위 key 문자열 생성\n * @param value 요청 범위 값\n */\nconst createQuerySelectorScopeKey = (value: unknown) => {\n return JSON.stringify(normalizeQuerySelectorKeyValue(value));\n};\n\n/**\n * API 요청 URL 생성\n * @param apiBaseUrl API base URL\n * @param apiUrl API path\n * @param requestQuery 요청 query\n * @param accessToken 접근 토큰\n */\nconst createQuerySelectorRequestUrl = (\n apiBaseUrl: string,\n apiUrl: string,\n requestQuery: Record<string, unknown>,\n accessToken: string,\n) => {\n const baseUrl = new URL(apiBaseUrl.endsWith('/') ? apiBaseUrl : `${apiBaseUrl}/`);\n const requestUrl = new URL(apiUrl.startsWith('/') ? apiUrl.slice(1) : apiUrl, baseUrl);\n\n Object.entries(requestQuery).forEach(([key, value]) => {\n if (value == null) {\n return;\n }\n\n requestUrl.searchParams.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n });\n\n if (accessToken) {\n requestUrl.searchParams.set('TOKEN', accessToken);\n }\n\n requestUrl.searchParams.set('i18nextLng', getApiLanguageCode());\n\n return requestUrl.toString();\n};\n\n/**\n * 원격 선택기 응답 목록 정규화\n * @param data 응답 데이터\n * @param responseListKey 목록 키\n */\nconst getQuerySelectorResponseList = (data: unknown, responseListKey: string) => {\n if (!data || typeof data !== 'object') {\n return [];\n }\n\n const responseList = (data as Record<string, unknown>)[responseListKey];\n\n return isArray(responseList) ? (responseList as Record<string, unknown>[]) : [];\n};\n\n/**\n * 원격 아이템 value 계산\n * @param item 응답 아이템\n * @param valueKey value key\n * @param valueResolver value resolver\n */\nconst resolveQuerySelectorValue = (\n item: Record<string, unknown>,\n valueKey?: string,\n valueResolver?: (item: Record<string, unknown>) => string,\n) => {\n const value = valueResolver ? valueResolver(item) : `${item?.[valueKey ?? ''] ?? ''}`;\n\n return `${value ?? ''}`.trim();\n};\n\n/**\n * 원격 아이템 label 계산\n * @param item 응답 아이템\n * @param labelKey label key\n * @param labelResolver label resolver\n */\nconst resolveQuerySelectorLabel = (\n item: Record<string, unknown>,\n labelKey?: string,\n labelResolver?: (item: Record<string, unknown>) => string,\n) => {\n const label = labelResolver ? labelResolver(item) : `${item?.[labelKey ?? ''] ?? ''}`;\n\n return `${label ?? ''}`.trim();\n};\n\n/**\n * 원격 응답 데이터를 선택 옵션으로 변환\n * @param items 응답 아이템 목록\n * @param valueKey value key\n * @param labelKey label key\n * @param valueResolver value resolver\n * @param labelResolver label resolver\n */\nconst mapQuerySelectorOptions = (\n items: Record<string, unknown>[],\n valueKey?: string,\n labelKey?: string,\n valueResolver?: (item: Record<string, unknown>) => string,\n labelResolver?: (item: Record<string, unknown>) => string,\n) => {\n return items\n .map((item) => {\n const value = resolveQuerySelectorValue(item, valueKey, valueResolver);\n\n if (!value) {\n return null;\n }\n\n return {\n label: resolveQuerySelectorLabel(item, labelKey, labelResolver),\n raw: item,\n value,\n } as OwpSelectorBaseOption<Record<string, unknown>>;\n })\n .filter((option): option is OwpSelectorBaseOption<Record<string, unknown>> => option != null);\n};\n\n/**\n * 원격 조회형 공통 선택기\n * @param props 원격 선택기 props\n */\nexport const OwpQuerySelector = ({\n apiUrl,\n asyncSearch,\n buildRequestQuery = defaultBuildRequestQuery,\n className,\n disableAllValueItem,\n filterOptions,\n multiple,\n query,\n queryKeyDeps,\n responseListKey = DEFAULT_RESPONSE_LIST_KEY,\n selectorType = 'select',\n value,\n valueKey,\n valueResolver,\n labelKey,\n labelResolver,\n onChange,\n defaultValue,\n textFieldProps,\n ...selectorBaseProps\n}: OwpQuerySelectorProps) => {\n const { env } = useOwpAppContext();\n const currentUser = useGetCurrentUser();\n const apiBaseUrl = `${env?.apiBaseUrl ?? ''}`.trim();\n const accessToken = `${currentUser?.token ?? localStorage.getItem(STORAGE_ACCESS_TOKEN_KEY) ?? ''}`.trim();\n const resolvedAsyncSearch = selectorType === 'autocomplete' ? asyncSearch : undefined;\n const isAsyncSearchEnabled = resolvedAsyncSearch != null;\n const resolvedDisableAllValueItem = isAsyncSearchEnabled ? true : disableAllValueItem;\n const minLength = resolvedAsyncSearch?.minLength ?? 1;\n const debounceMs = resolvedAsyncSearch?.debounceMs ?? 300;\n const [currentSelectionValue, setCurrentSelectionValue] = useState(value ?? defaultValue ?? '');\n const [autocompleteInputValue, setAutocompleteInputValue] = useState('');\n const [searchKeyword, setSearchKeyword] = useState('');\n const [debouncedSearchKeyword, setDebouncedSearchKeyword] = useState('');\n const normalizedQueryKeyDeps =\n queryKeyDeps?.length ? (normalizeQuerySelectorKeyValue(queryKeyDeps) as readonly unknown[]) : undefined;\n const optionsCacheScopeKey = createQuerySelectorScopeKey(\n appendQuerySelectorQueryKeyDeps(\n [apiUrl, query, responseListKey, valueKey, labelKey],\n normalizedQueryKeyDeps,\n ),\n );\n const [cachedOptionsState, setCachedOptionsState] = useState(() => ({\n options: {} as Record<string, OwpSelectorBaseOption<Record<string, unknown>>>,\n scopeKey: optionsCacheScopeKey,\n }));\n const cachedOptions = useMemo(\n () => (cachedOptionsState.scopeKey === optionsCacheScopeKey ? cachedOptionsState.options : {}),\n [cachedOptionsState.options, cachedOptionsState.scopeKey, optionsCacheScopeKey],\n );\n const selectedIds = useMemo(() => splitSelectorValue(currentSelectionValue), [currentSelectionValue]);\n const shouldFetchSearchOptions = isAsyncSearchEnabled && debouncedSearchKeyword.trim().length >= minLength;\n const createSelectorQueryKey = (...segments: unknown[]) => {\n return appendQuerySelectorQueryKeyDeps(['owp', 'query-selector', ...segments], normalizedQueryKeyDeps);\n };\n\n useEffect(() => {\n if (value === undefined) {\n return;\n }\n\n setCurrentSelectionValue(value);\n }, [value]);\n\n useEffect(() => {\n if (value !== undefined) {\n return;\n }\n\n setCurrentSelectionValue(defaultValue ?? '');\n }, [defaultValue, value]);\n\n useEffect(() => {\n if (!isAsyncSearchEnabled) {\n return;\n }\n\n const timer = window.setTimeout(() => {\n setDebouncedSearchKeyword(searchKeyword.trim());\n }, debounceMs);\n\n return () => {\n window.clearTimeout(timer);\n };\n }, [debounceMs, isAsyncSearchEnabled, searchKeyword]);\n\n const fetchOptions = async (nextQuery: Record<string, unknown>) => {\n const response = await fetch(\n createQuerySelectorRequestUrl(apiBaseUrl, apiUrl, buildRequestQuery(nextQuery), accessToken),\n );\n const data = (await response.json()) as Record<string, unknown>;\n\n if (!response.ok || data?.resultCode === 'STATUS_0') {\n throw new Error(`${data?.resultMessage ?? 'Failed to fetch selector options'}`);\n }\n\n const responseList = getQuerySelectorResponseList(data, responseListKey);\n const filteredItems = isFunction(filterOptions) ? filterOptions(responseList) : responseList;\n\n return mapQuerySelectorOptions(\n filteredItems,\n valueKey,\n labelKey,\n valueResolver,\n labelResolver,\n );\n };\n\n const baseOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(apiUrl, query, responseListKey, valueKey, labelKey),\n enabled: Boolean(apiBaseUrl) && !isAsyncSearchEnabled,\n queryFn: () => fetchOptions(query),\n });\n const searchOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(\n 'search',\n apiUrl,\n query,\n debouncedSearchKeyword,\n responseListKey,\n valueKey,\n labelKey,\n ),\n enabled: Boolean(apiBaseUrl) && isAsyncSearchEnabled && shouldFetchSearchOptions,\n queryFn: () =>\n fetchOptions({\n ...query,\n ...(resolvedAsyncSearch?.buildKeywordQuery(debouncedSearchKeyword) ?? {}),\n }),\n });\n const allOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(\n 'all',\n apiUrl,\n query,\n responseListKey,\n valueKey,\n labelKey,\n ),\n enabled:\n Boolean(apiBaseUrl) &&\n isAsyncSearchEnabled &&\n (Boolean(selectedIds.length) || (Boolean(multiple) && !resolvedDisableAllValueItem)),\n queryFn: () =>\n fetchOptions({\n ...query,\n ...(resolvedAsyncSearch?.buildAllQuery?.() ?? {}),\n }),\n });\n const selectedOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(\n 'selected',\n apiUrl,\n query,\n selectedIds,\n responseListKey,\n valueKey,\n labelKey,\n ),\n enabled: Boolean(apiBaseUrl) && isAsyncSearchEnabled && Boolean(selectedIds.length) && Boolean(resolvedAsyncSearch?.buildSelectedQuery),\n queryFn: () =>\n fetchOptions({\n ...query,\n ...(resolvedAsyncSearch?.buildSelectedQuery?.(selectedIds) ?? {}),\n }),\n });\n\n const currentOptions = useMemo(() => {\n if (isAsyncSearchEnabled) {\n return shouldFetchSearchOptions ? (searchOptionsQuery.data ?? []) : [];\n }\n\n return baseOptionsQuery.data ?? [];\n }, [\n baseOptionsQuery.data,\n isAsyncSearchEnabled,\n searchOptionsQuery.data,\n shouldFetchSearchOptions,\n ]);\n const resolvedAllOptions = useMemo(\n () =>\n mergeSelectorOptions(\n currentOptions,\n allOptionsQuery.data,\n selectedOptionsQuery.data,\n Object.values(cachedOptions),\n ),\n [allOptionsQuery.data, cachedOptions, currentOptions, selectedOptionsQuery.data],\n );\n const optionMap = useMemo(\n () => {\n const nextOptionMap: Record<string, OwpSelectorBaseOption<Record<string, unknown>>> = {};\n\n resolvedAllOptions.forEach((option) => {\n nextOptionMap[option.value] = option;\n });\n\n return nextOptionMap;\n },\n [resolvedAllOptions],\n );\n const isLoading =\n baseOptionsQuery.isLoading ||\n searchOptionsQuery.isLoading ||\n allOptionsQuery.isLoading ||\n selectedOptionsQuery.isLoading;\n const resolvedClassName = clsx(selectorType === 'autocomplete' && '!min-w-160', className);\n const resolvedTextFieldClassName = clsx(\n selectorType === 'autocomplete' && !textFieldProps?.className && 'w-full',\n textFieldProps?.className,\n );\n\n useEffect(() => {\n if (!resolvedAllOptions.length) {\n return;\n }\n\n setCachedOptionsState((previousState) => {\n const previousCachedOptions =\n previousState.scopeKey === optionsCacheScopeKey ? previousState.options : {};\n const nextCachedOptions = { ...previousCachedOptions };\n let hasChanged = false;\n\n resolvedAllOptions.forEach((option) => {\n if (nextCachedOptions[option.value] === option) {\n return;\n }\n\n nextCachedOptions[option.value] = option;\n hasChanged = true;\n });\n\n if (!hasChanged && previousState.scopeKey === optionsCacheScopeKey) {\n return previousState;\n }\n\n return {\n options: hasChanged ? nextCachedOptions : previousCachedOptions,\n scopeKey: optionsCacheScopeKey,\n };\n });\n }, [optionsCacheScopeKey, resolvedAllOptions]);\n\n useEffect(() => {\n if (!isAsyncSearchEnabled) {\n return;\n }\n\n if (multiple) {\n setAutocompleteInputValue('');\n return;\n }\n\n const selectedId = selectedIds[0];\n\n if (!selectedId) {\n setAutocompleteInputValue('');\n return;\n }\n\n setAutocompleteInputValue(getQuerySelectorOptionLabelText(optionMap[selectedId]?.label ?? ''));\n }, [isAsyncSearchEnabled, multiple, optionMap, selectedIds]);\n\n return (\n <OwpSelectorBase\n {...selectorBaseProps}\n allOptions={resolvedAllOptions}\n allValueMode=\"joined\"\n autocompleteInputValue={isAsyncSearchEnabled ? autocompleteInputValue : undefined}\n className={resolvedClassName}\n defaultValue={defaultValue}\n disableAllValueItem={resolvedDisableAllValueItem}\n disableClientFilter={isAsyncSearchEnabled}\n loading={isLoading}\n multiple={multiple}\n onAutocompleteInputChange={\n isAsyncSearchEnabled\n ? (nextInputValue, reason) => {\n if (reason === 'reset') {\n return;\n }\n\n if (multiple && reason !== 'input') {\n return;\n }\n\n setAutocompleteInputValue(nextInputValue);\n setSearchKeyword(nextInputValue);\n }\n : undefined\n }\n onChange={(event) => {\n setCurrentSelectionValue(event.target.value);\n\n if (isAsyncSearchEnabled) {\n const nextSelectedIds = splitSelectorValue(event.target.value);\n\n if (multiple) {\n setAutocompleteInputValue('');\n setSearchKeyword('');\n setDebouncedSearchKeyword('');\n } else {\n const nextSelectedId = nextSelectedIds[0];\n const nextLabel = nextSelectedId\n ? getQuerySelectorOptionLabelText(optionMap[nextSelectedId]?.label ?? '')\n : '';\n\n setAutocompleteInputValue(nextLabel);\n setSearchKeyword('');\n setDebouncedSearchKeyword('');\n }\n }\n\n onChange?.(event);\n }}\n options={currentOptions}\n selectorType={selectorType}\n textFieldProps={{\n ...textFieldProps,\n className: resolvedTextFieldClassName,\n onBlur: (event) => {\n if (isAsyncSearchEnabled) {\n if (multiple) {\n setAutocompleteInputValue('');\n } else {\n const selectedId = splitSelectorValue(currentSelectionValue)[0];\n\n setAutocompleteInputValue(\n selectedId ? getQuerySelectorOptionLabelText(optionMap[selectedId]?.label ?? '') : '',\n );\n }\n\n setSearchKeyword('');\n setDebouncedSearchKeyword('');\n }\n\n textFieldProps?.onBlur?.(event);\n },\n }}\n value={value}\n />\n );\n};\n"],"names":["DEFAULT_RESPONSE_LIST_KEY","getQuerySelectorOptionLabelText","__name","label","defaultBuildRequestQuery","query","createJsonString","appendQuerySelectorQueryKeyDeps","queryKey","queryKeyDeps","normalizeQuerySelectorKeyValue","value","isArray","item","isPlainObject","result","key","normalizedValue","isFunction","createQuerySelectorScopeKey","createQuerySelectorRequestUrl","apiBaseUrl","apiUrl","requestQuery","accessToken","baseUrl","requestUrl","getApiLanguageCode","getQuerySelectorResponseList","data","responseListKey","responseList","resolveQuerySelectorValue","valueKey","valueResolver","resolveQuerySelectorLabel","labelKey","labelResolver","mapQuerySelectorOptions","items","option","OwpQuerySelector","asyncSearch","buildRequestQuery","className","disableAllValueItem","filterOptions","multiple","selectorType","onChange","defaultValue","textFieldProps","selectorBaseProps","env","useOwpAppContext","currentUser","useGetCurrentUser","STORAGE_ACCESS_TOKEN_KEY","resolvedAsyncSearch","isAsyncSearchEnabled","resolvedDisableAllValueItem","minLength","debounceMs","currentSelectionValue","setCurrentSelectionValue","useState","autocompleteInputValue","setAutocompleteInputValue","searchKeyword","setSearchKeyword","debouncedSearchKeyword","setDebouncedSearchKeyword","normalizedQueryKeyDeps","optionsCacheScopeKey","cachedOptionsState","setCachedOptionsState","cachedOptions","useMemo","selectedIds","splitSelectorValue","shouldFetchSearchOptions","createSelectorQueryKey","segments","useEffect","timer","fetchOptions","nextQuery","response","filteredItems","baseOptionsQuery","useQuery","searchOptionsQuery","allOptionsQuery","_a","selectedOptionsQuery","currentOptions","resolvedAllOptions","mergeSelectorOptions","optionMap","nextOptionMap","isLoading","resolvedClassName","clsx","resolvedTextFieldClassName","previousState","previousCachedOptions","nextCachedOptions","hasChanged","selectedId","jsx","OwpSelectorBase","nextInputValue","reason","event","nextSelectedIds","nextSelectedId","nextLabel","_b"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OwpQuerySelector.js","sources":["../../../src/components/OwpQuerySelector/OwpQuerySelector.tsx"],"sourcesContent":["import { OwpSelectorBase } from '@/components/OwpSelectorBase/OwpSelectorBase';\nimport type { OwpSelectorBaseOption } from '@/components/OwpSelectorBase/types';\nimport { mergeSelectorOptions, splitSelectorValue } from '@/components/OwpSelectorBase/utils';\nimport { STORAGE_ACCESS_TOKEN_KEY } from '@/constants/localStorageKeys';\nimport { useOwpAppContext } from '@/contexts/OwpAppProvider';\nimport { useGetCurrentUser } from '@/hooks/useCurrentUser';\nimport { createJsonString } from '@/utils/createJsonString';\nimport { getApiLanguageCode } from '@/utils/language';\nimport { useQuery } from '@tanstack/react-query';\nimport clsx from 'clsx';\nimport { isArray, isFunction, isPlainObject } from 'es-toolkit/compat';\nimport { useEffect, useMemo, useState } from 'react';\nimport type { OwpQuerySelectorProps } from './types';\n\nconst DEFAULT_RESPONSE_LIST_KEY = 'resultData';\n\n/**\n * 선택 옵션 라벨 문자열 변환\n * @param label 선택 옵션 라벨\n */\nconst getQuerySelectorOptionLabelText = (label: OwpSelectorBaseOption['label']) => {\n return typeof label === 'string' || typeof label === 'number' ? `${label}` : '';\n};\n\n/**\n * 요청 query 객체 구성\n * @param query 원본 query\n */\nconst defaultBuildRequestQuery = (query: Record<string, unknown>) => {\n return {\n jsondata: createJsonString(query),\n };\n};\n\n/**\n * query key 추가 의존성 병합\n * @param queryKey 원본 query key\n * @param queryKeyDeps 추가 의존성\n */\nconst appendQuerySelectorQueryKeyDeps = (\n queryKey: unknown[],\n queryKeyDeps?: readonly unknown[],\n) => {\n return queryKeyDeps?.length ? [...queryKey, queryKeyDeps] : queryKey;\n};\n\n/**\n * query key 직렬화 값 정규화\n * @param value 원본 값\n */\nconst normalizeQuerySelectorKeyValue = (value: unknown): unknown => {\n if (value instanceof Date) {\n return value.toJSON();\n }\n\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (isArray(value)) {\n return value.map((item) => normalizeQuerySelectorKeyValue(item));\n }\n\n if (isPlainObject(value)) {\n return Object.keys(value as Record<string, unknown>)\n .sort()\n .reduce<Record<string, unknown>>((result, key) => {\n const normalizedValue = normalizeQuerySelectorKeyValue((value as Record<string, unknown>)[key]);\n\n if (normalizedValue === undefined) {\n return result;\n }\n\n result[key] = normalizedValue;\n\n return result;\n }, {});\n }\n\n if (isFunction(value) || typeof value === 'symbol') {\n return undefined;\n }\n\n return value;\n};\n\n/**\n * 요청 범위 key 문자열 생성\n * @param value 요청 범위 값\n */\nconst createQuerySelectorScopeKey = (value: unknown) => {\n return JSON.stringify(normalizeQuerySelectorKeyValue(value));\n};\n\n/**\n * API 요청 URL 생성\n * @param apiBaseUrl API base URL\n * @param apiUrl API path\n * @param requestQuery 요청 query\n * @param accessToken 접근 토큰\n */\nconst createQuerySelectorRequestUrl = (\n apiBaseUrl: string,\n apiUrl: string,\n requestQuery: Record<string, unknown>,\n accessToken: string,\n) => {\n const baseUrl = new URL(apiBaseUrl.endsWith('/') ? apiBaseUrl : `${apiBaseUrl}/`);\n const requestUrl = new URL(apiUrl.startsWith('/') ? apiUrl.slice(1) : apiUrl, baseUrl);\n\n Object.entries(requestQuery).forEach(([key, value]) => {\n if (value == null) {\n return;\n }\n\n requestUrl.searchParams.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n });\n\n if (accessToken) {\n requestUrl.searchParams.set('TOKEN', accessToken);\n }\n\n requestUrl.searchParams.set('i18nextLng', getApiLanguageCode());\n\n return requestUrl.toString();\n};\n\n/**\n * 원격 선택기 응답 목록 정규화\n * @param data 응답 데이터\n * @param responseListKey 목록 키\n */\nconst getQuerySelectorResponseList = (data: unknown, responseListKey: string) => {\n if (!data || typeof data !== 'object') {\n return [];\n }\n\n const responseList = (data as Record<string, unknown>)[responseListKey];\n\n return isArray(responseList) ? (responseList as Record<string, unknown>[]) : [];\n};\n\n/**\n * 원격 아이템 value 계산\n * @param item 응답 아이템\n * @param valueKey value key\n * @param valueResolver value resolver\n */\nconst resolveQuerySelectorValue = (\n item: Record<string, unknown>,\n valueKey?: string,\n valueResolver?: (item: Record<string, unknown>) => string,\n) => {\n const value = valueResolver ? valueResolver(item) : `${item?.[valueKey ?? ''] ?? ''}`;\n\n return `${value ?? ''}`.trim();\n};\n\n/**\n * 원격 아이템 label 계산\n * @param item 응답 아이템\n * @param labelKey label key\n * @param labelResolver label resolver\n */\nconst resolveQuerySelectorLabel = (\n item: Record<string, unknown>,\n labelKey?: string,\n labelResolver?: (item: Record<string, unknown>) => string,\n) => {\n const label = labelResolver ? labelResolver(item) : `${item?.[labelKey ?? ''] ?? ''}`;\n\n return `${label ?? ''}`.trim();\n};\n\n/**\n * 원격 응답 데이터를 선택 옵션으로 변환\n * @param items 응답 아이템 목록\n * @param valueKey value key\n * @param labelKey label key\n * @param valueResolver value resolver\n * @param labelResolver label resolver\n */\nconst mapQuerySelectorOptions = (\n items: Record<string, unknown>[],\n valueKey?: string,\n labelKey?: string,\n valueResolver?: (item: Record<string, unknown>) => string,\n labelResolver?: (item: Record<string, unknown>) => string,\n) => {\n return items\n .map((item) => {\n const value = resolveQuerySelectorValue(item, valueKey, valueResolver);\n\n if (!value) {\n return null;\n }\n\n return {\n label: resolveQuerySelectorLabel(item, labelKey, labelResolver),\n raw: item,\n value,\n } as OwpSelectorBaseOption<Record<string, unknown>>;\n })\n .filter((option): option is OwpSelectorBaseOption<Record<string, unknown>> => option != null);\n};\n\n/**\n * 원격 조회형 공통 선택기\n * @param props 원격 선택기 props\n */\nexport const OwpQuerySelector = ({\n apiUrl,\n asyncSearch,\n buildRequestQuery = defaultBuildRequestQuery,\n className,\n filterOptions,\n forceEmptyOptions = false,\n multiple,\n query,\n queryKeyDeps,\n responseListKey = DEFAULT_RESPONSE_LIST_KEY,\n selectorType = 'select',\n value,\n valueKey,\n valueResolver,\n labelKey,\n labelResolver,\n onChange,\n defaultValue,\n showAllOption = true,\n textFieldProps,\n ...selectorBaseProps\n}: OwpQuerySelectorProps) => {\n const { env } = useOwpAppContext();\n const currentUser = useGetCurrentUser();\n const apiBaseUrl = `${env?.apiBaseUrl ?? ''}`.trim();\n const accessToken = `${currentUser?.token ?? localStorage.getItem(STORAGE_ACCESS_TOKEN_KEY) ?? ''}`.trim();\n const resolvedAsyncSearch = selectorType === 'autocomplete' ? asyncSearch : undefined;\n const isAsyncSearchEnabled = resolvedAsyncSearch != null;\n const resolvedShowAllOption = forceEmptyOptions ? false : isAsyncSearchEnabled ? false : showAllOption;\n const minLength = resolvedAsyncSearch?.minLength ?? 1;\n const debounceMs = resolvedAsyncSearch?.debounceMs ?? 300;\n const [currentSelectionValue, setCurrentSelectionValue] = useState(value ?? defaultValue ?? '');\n const [autocompleteInputValue, setAutocompleteInputValue] = useState('');\n const [searchKeyword, setSearchKeyword] = useState('');\n const [debouncedSearchKeyword, setDebouncedSearchKeyword] = useState('');\n const normalizedQueryKeyDeps =\n queryKeyDeps?.length ? (normalizeQuerySelectorKeyValue(queryKeyDeps) as readonly unknown[]) : undefined;\n const optionsCacheScopeKey = createQuerySelectorScopeKey(\n appendQuerySelectorQueryKeyDeps(\n [apiUrl, query, responseListKey, valueKey, labelKey],\n normalizedQueryKeyDeps,\n ),\n );\n const [cachedOptionsState, setCachedOptionsState] = useState(() => ({\n options: {} as Record<string, OwpSelectorBaseOption<Record<string, unknown>>>,\n scopeKey: optionsCacheScopeKey,\n }));\n const cachedOptions = useMemo(\n () => (cachedOptionsState.scopeKey === optionsCacheScopeKey ? cachedOptionsState.options : {}),\n [cachedOptionsState.options, cachedOptionsState.scopeKey, optionsCacheScopeKey],\n );\n const selectedIds = useMemo(() => splitSelectorValue(currentSelectionValue), [currentSelectionValue]);\n const resolvedSelectedIds = useMemo(\n () => (forceEmptyOptions ? [] : selectedIds),\n [forceEmptyOptions, selectedIds],\n );\n const shouldFetchSearchOptions =\n !forceEmptyOptions && isAsyncSearchEnabled && debouncedSearchKeyword.trim().length >= minLength;\n const createSelectorQueryKey = (...segments: unknown[]) => {\n return appendQuerySelectorQueryKeyDeps(['owp', 'query-selector', ...segments], normalizedQueryKeyDeps);\n };\n\n useEffect(() => {\n if (value === undefined) {\n return;\n }\n\n setCurrentSelectionValue(value);\n }, [value]);\n\n useEffect(() => {\n if (value !== undefined) {\n return;\n }\n\n setCurrentSelectionValue(defaultValue ?? '');\n }, [defaultValue, value]);\n\n useEffect(() => {\n if (!isAsyncSearchEnabled) {\n return;\n }\n\n const timer = window.setTimeout(() => {\n setDebouncedSearchKeyword(searchKeyword.trim());\n }, debounceMs);\n\n return () => {\n window.clearTimeout(timer);\n };\n }, [debounceMs, isAsyncSearchEnabled, searchKeyword]);\n\n const fetchOptions = async (nextQuery: Record<string, unknown>) => {\n const response = await fetch(\n createQuerySelectorRequestUrl(apiBaseUrl, apiUrl, buildRequestQuery(nextQuery), accessToken),\n );\n const data = (await response.json()) as Record<string, unknown>;\n\n if (!response.ok || data?.resultCode === 'STATUS_0') {\n throw new Error(`${data?.resultMessage ?? 'Failed to fetch selector options'}`);\n }\n\n const responseList = getQuerySelectorResponseList(data, responseListKey);\n const filteredItems = isFunction(filterOptions) ? filterOptions(responseList) : responseList;\n\n return mapQuerySelectorOptions(\n filteredItems,\n valueKey,\n labelKey,\n valueResolver,\n labelResolver,\n );\n };\n\n const baseOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(apiUrl, query, responseListKey, valueKey, labelKey),\n enabled: Boolean(apiBaseUrl) && !forceEmptyOptions && !isAsyncSearchEnabled,\n queryFn: () => fetchOptions(query),\n });\n const searchOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(\n 'search',\n apiUrl,\n query,\n debouncedSearchKeyword,\n responseListKey,\n valueKey,\n labelKey,\n ),\n enabled:\n Boolean(apiBaseUrl) &&\n !forceEmptyOptions &&\n isAsyncSearchEnabled &&\n shouldFetchSearchOptions,\n queryFn: () =>\n fetchOptions({\n ...query,\n ...(resolvedAsyncSearch?.buildKeywordQuery(debouncedSearchKeyword) ?? {}),\n }),\n });\n const allOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(\n 'all',\n apiUrl,\n query,\n responseListKey,\n valueKey,\n labelKey,\n ),\n enabled:\n Boolean(apiBaseUrl) &&\n !forceEmptyOptions &&\n isAsyncSearchEnabled &&\n (Boolean(resolvedSelectedIds.length) || (Boolean(multiple) && resolvedShowAllOption)),\n queryFn: () =>\n fetchOptions({\n ...query,\n ...(resolvedAsyncSearch?.buildAllQuery?.() ?? {}),\n }),\n });\n const selectedOptionsQuery = useQuery({\n queryKey: createSelectorQueryKey(\n 'selected',\n apiUrl,\n query,\n resolvedSelectedIds,\n responseListKey,\n valueKey,\n labelKey,\n ),\n enabled:\n Boolean(apiBaseUrl) &&\n !forceEmptyOptions &&\n isAsyncSearchEnabled &&\n Boolean(resolvedSelectedIds.length) &&\n Boolean(resolvedAsyncSearch?.buildSelectedQuery),\n queryFn: () =>\n fetchOptions({\n ...query,\n ...(resolvedAsyncSearch?.buildSelectedQuery?.(resolvedSelectedIds) ?? {}),\n }),\n });\n\n const currentOptions = useMemo(() => {\n if (forceEmptyOptions) {\n return [];\n }\n\n if (isAsyncSearchEnabled) {\n return shouldFetchSearchOptions ? (searchOptionsQuery.data ?? []) : [];\n }\n\n return baseOptionsQuery.data ?? [];\n }, [\n baseOptionsQuery.data,\n forceEmptyOptions,\n isAsyncSearchEnabled,\n searchOptionsQuery.data,\n shouldFetchSearchOptions,\n ]);\n const resolvedAllOptions = useMemo(\n () => {\n if (forceEmptyOptions) {\n return [];\n }\n\n return mergeSelectorOptions(\n currentOptions,\n allOptionsQuery.data,\n selectedOptionsQuery.data,\n Object.values(cachedOptions),\n );\n },\n [\n allOptionsQuery.data,\n cachedOptions,\n currentOptions,\n forceEmptyOptions,\n selectedOptionsQuery.data,\n ],\n );\n const optionMap = useMemo(\n () => {\n const nextOptionMap: Record<string, OwpSelectorBaseOption<Record<string, unknown>>> = {};\n\n resolvedAllOptions.forEach((option) => {\n nextOptionMap[option.value] = option;\n });\n\n return nextOptionMap;\n },\n [resolvedAllOptions],\n );\n const isLoading =\n !forceEmptyOptions &&\n (baseOptionsQuery.isLoading ||\n searchOptionsQuery.isLoading ||\n allOptionsQuery.isLoading ||\n selectedOptionsQuery.isLoading);\n const resolvedClassName = clsx(selectorType === 'autocomplete' && '!min-w-160', className);\n const resolvedTextFieldClassName = clsx(\n selectorType === 'autocomplete' && !textFieldProps?.className && 'w-full',\n textFieldProps?.className,\n );\n\n useEffect(() => {\n if (!resolvedAllOptions.length) {\n return;\n }\n\n setCachedOptionsState((previousState) => {\n const previousCachedOptions =\n previousState.scopeKey === optionsCacheScopeKey ? previousState.options : {};\n const nextCachedOptions = { ...previousCachedOptions };\n let hasChanged = false;\n\n resolvedAllOptions.forEach((option) => {\n if (nextCachedOptions[option.value] === option) {\n return;\n }\n\n nextCachedOptions[option.value] = option;\n hasChanged = true;\n });\n\n if (!hasChanged && previousState.scopeKey === optionsCacheScopeKey) {\n return previousState;\n }\n\n return {\n options: hasChanged ? nextCachedOptions : previousCachedOptions,\n scopeKey: optionsCacheScopeKey,\n };\n });\n }, [optionsCacheScopeKey, resolvedAllOptions]);\n\n useEffect(() => {\n if (!isAsyncSearchEnabled) {\n return;\n }\n\n if (multiple) {\n setAutocompleteInputValue('');\n return;\n }\n\n const selectedId = resolvedSelectedIds[0];\n\n if (!selectedId) {\n setAutocompleteInputValue('');\n return;\n }\n\n setAutocompleteInputValue(getQuerySelectorOptionLabelText(optionMap[selectedId]?.label ?? ''));\n }, [isAsyncSearchEnabled, multiple, optionMap, resolvedSelectedIds]);\n\n useEffect(() => {\n if (!forceEmptyOptions || !isAsyncSearchEnabled) {\n return;\n }\n\n setAutocompleteInputValue('');\n setSearchKeyword('');\n setDebouncedSearchKeyword('');\n }, [forceEmptyOptions, isAsyncSearchEnabled]);\n\n return (\n <OwpSelectorBase\n {...selectorBaseProps}\n allOptions={resolvedAllOptions}\n allValueMode=\"joined\"\n autocompleteInputValue={\n isAsyncSearchEnabled ? (forceEmptyOptions ? '' : autocompleteInputValue) : undefined\n }\n className={resolvedClassName}\n defaultValue={forceEmptyOptions ? '' : defaultValue}\n disableClientFilter={isAsyncSearchEnabled}\n loading={isLoading}\n multiple={multiple}\n onAutocompleteInputChange={\n isAsyncSearchEnabled\n ? (nextInputValue, reason) => {\n if (reason === 'reset') {\n return;\n }\n\n if (multiple && reason !== 'input') {\n return;\n }\n\n if (forceEmptyOptions) {\n return;\n }\n\n setAutocompleteInputValue(nextInputValue);\n setSearchKeyword(nextInputValue);\n }\n : undefined\n }\n onChange={(event) => {\n setCurrentSelectionValue(event.target.value);\n\n if (isAsyncSearchEnabled) {\n const nextSelectedIds = forceEmptyOptions ? [] : splitSelectorValue(event.target.value);\n\n if (multiple) {\n setAutocompleteInputValue('');\n setSearchKeyword('');\n setDebouncedSearchKeyword('');\n } else {\n const nextSelectedId = nextSelectedIds[0];\n const nextLabel = nextSelectedId\n ? getQuerySelectorOptionLabelText(optionMap[nextSelectedId]?.label ?? '')\n : '';\n\n setAutocompleteInputValue(nextLabel);\n setSearchKeyword('');\n setDebouncedSearchKeyword('');\n }\n }\n\n onChange?.(event);\n }}\n options={currentOptions}\n selectorType={selectorType}\n showAllOption={resolvedShowAllOption}\n textFieldProps={{\n ...textFieldProps,\n className: resolvedTextFieldClassName,\n onBlur: (event) => {\n if (isAsyncSearchEnabled) {\n if (multiple) {\n setAutocompleteInputValue('');\n } else {\n const selectedId = forceEmptyOptions\n ? undefined\n : splitSelectorValue(currentSelectionValue)[0];\n\n setAutocompleteInputValue(\n selectedId ? getQuerySelectorOptionLabelText(optionMap[selectedId]?.label ?? '') : '',\n );\n }\n\n setSearchKeyword('');\n setDebouncedSearchKeyword('');\n }\n\n textFieldProps?.onBlur?.(event);\n },\n }}\n value={forceEmptyOptions ? '' : value}\n />\n );\n};\n"],"names":["DEFAULT_RESPONSE_LIST_KEY","getQuerySelectorOptionLabelText","__name","label","defaultBuildRequestQuery","query","createJsonString","appendQuerySelectorQueryKeyDeps","queryKey","queryKeyDeps","normalizeQuerySelectorKeyValue","value","isArray","item","isPlainObject","result","key","normalizedValue","isFunction","createQuerySelectorScopeKey","createQuerySelectorRequestUrl","apiBaseUrl","apiUrl","requestQuery","accessToken","baseUrl","requestUrl","getApiLanguageCode","getQuerySelectorResponseList","data","responseListKey","responseList","resolveQuerySelectorValue","valueKey","valueResolver","resolveQuerySelectorLabel","labelKey","labelResolver","mapQuerySelectorOptions","items","option","OwpQuerySelector","asyncSearch","buildRequestQuery","className","filterOptions","forceEmptyOptions","multiple","selectorType","onChange","defaultValue","showAllOption","textFieldProps","selectorBaseProps","env","useOwpAppContext","currentUser","useGetCurrentUser","STORAGE_ACCESS_TOKEN_KEY","resolvedAsyncSearch","isAsyncSearchEnabled","resolvedShowAllOption","minLength","debounceMs","currentSelectionValue","setCurrentSelectionValue","useState","autocompleteInputValue","setAutocompleteInputValue","searchKeyword","setSearchKeyword","debouncedSearchKeyword","setDebouncedSearchKeyword","normalizedQueryKeyDeps","optionsCacheScopeKey","cachedOptionsState","setCachedOptionsState","cachedOptions","useMemo","selectedIds","splitSelectorValue","resolvedSelectedIds","shouldFetchSearchOptions","createSelectorQueryKey","segments","useEffect","timer","fetchOptions","nextQuery","response","filteredItems","baseOptionsQuery","useQuery","searchOptionsQuery","allOptionsQuery","_a","selectedOptionsQuery","currentOptions","resolvedAllOptions","mergeSelectorOptions","optionMap","nextOptionMap","isLoading","resolvedClassName","clsx","resolvedTextFieldClassName","previousState","previousCachedOptions","nextCachedOptions","hasChanged","selectedId","jsx","OwpSelectorBase","nextInputValue","reason","event","nextSelectedIds","nextSelectedId","nextLabel","_b"],"mappings":"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"}
|
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
var Ee = Object.defineProperty;
|
|
2
2
|
var o = (a, s) => Ee(a, "name", { value: s, configurable: !0 });
|
|
3
|
-
import { jsxs as
|
|
3
|
+
import { jsxs as C, jsx as i, Fragment as S } from "../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
|
|
4
4
|
import { createElement as be } from "@emotion/react";
|
|
5
5
|
import { useOwpTranslation as ve } from "../../hooks/useOwpTranslation.js";
|
|
6
6
|
import F from "../../node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/ArrowDropDown.js";
|
|
7
7
|
import ee from "../../node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/Clear.js";
|
|
8
|
-
import { Box as ye, Chip as
|
|
8
|
+
import { Box as ye, Chip as D, Checkbox as Le, TextField as te, CircularProgress as oe, Autocomplete as ne, ClickAwayListener as Me, Paper as Se, Popper as De } from "@mui/material";
|
|
9
9
|
import { alpha as E } from "@mui/material/styles";
|
|
10
10
|
import { clsx as le } from "../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js";
|
|
11
11
|
import { useMemo as re, useState as _e, useRef as ie, useEffect as ae } from "react";
|
|
12
|
-
import { isSelectorAllOption as
|
|
12
|
+
import { isSelectorAllOption as h } from "./utils/querySelectorUtils.js";
|
|
13
13
|
const se = 2, Pe = 152, pe = 72, ue = 18.57, Ne = "11px !important", we = "2px !important", ke = "5px !important", ce = /* @__PURE__ */ o((a, s) => {
|
|
14
14
|
const p = a.target;
|
|
15
15
|
return p instanceof HTMLInputElement ? p.value : s ?? "";
|
|
16
16
|
}, "getCurrentAutocompleteInputValue"), me = /* @__PURE__ */ o((a) => typeof a == "string" || typeof a == "number" ? `${a}` : "", "getAutocompleteOptionLabel"), je = /* @__PURE__ */ o(({ hookResult: a, props: s }) => {
|
|
17
17
|
const { t: p } = ve(), {
|
|
18
18
|
autocompleteInputValue: d,
|
|
19
|
-
className:
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
disabled: h,
|
|
19
|
+
className: _,
|
|
20
|
+
disableClientFilter: b,
|
|
21
|
+
disabled: I,
|
|
23
22
|
error: P,
|
|
24
23
|
fullWidth: A,
|
|
25
24
|
helperText: N,
|
|
@@ -31,26 +30,27 @@ const se = 2, Pe = 152, pe = 72, ue = 18.57, Ne = "11px !important", we = "2px !
|
|
|
31
30
|
onAutocompleteInputChange: c,
|
|
32
31
|
placeholder: z,
|
|
33
32
|
required: R,
|
|
33
|
+
showAllOption: f = !0,
|
|
34
34
|
textFieldProps: n
|
|
35
35
|
} = s, {
|
|
36
|
-
allOption:
|
|
36
|
+
allOption: v,
|
|
37
37
|
clearSelection: U,
|
|
38
38
|
isAllSelected: m,
|
|
39
39
|
resolvedOptions: H,
|
|
40
40
|
restoreAllSelection: W,
|
|
41
41
|
selectAll: B,
|
|
42
42
|
selectedOption: fe,
|
|
43
|
-
selectedOptions:
|
|
43
|
+
selectedOptions: y,
|
|
44
44
|
selectMultipleValues: K,
|
|
45
45
|
selectSingleValue: $
|
|
46
|
-
} = a, q = f ?
|
|
47
|
-
() =>
|
|
48
|
-
[
|
|
46
|
+
} = a, q = f ? [v, ...H] : H, L = re(
|
|
47
|
+
() => y.filter((e) => !h(e)),
|
|
48
|
+
[y]
|
|
49
49
|
), G = re(
|
|
50
|
-
() => m ? [] :
|
|
51
|
-
[
|
|
52
|
-
), u = G.length, [j,
|
|
53
|
-
V &&
|
|
50
|
+
() => m ? [] : L.slice(se),
|
|
51
|
+
[L, m]
|
|
52
|
+
), u = G.length, [j, M] = _e(null), Z = ie(null), J = de ?? p(b ? "Message.검색 결과 없음" : "Message.조회된 결과가 없습니다."), Q = ie(
|
|
53
|
+
V && f && ((s.value ?? s.defaultValue) == null || (s.value ?? s.defaultValue) === "")
|
|
54
54
|
), X = {
|
|
55
55
|
clearIndicator: {
|
|
56
56
|
className: "m-0 p-0",
|
|
@@ -72,11 +72,11 @@ const se = 2, Pe = 152, pe = 72, ue = 18.57, Ne = "11px !important", we = "2px !
|
|
|
72
72
|
size: "small",
|
|
73
73
|
tabIndex: -1
|
|
74
74
|
}
|
|
75
|
-
},
|
|
75
|
+
}, g = (n == null ? void 0 : n.variant) ?? "standard", Te = g === "standard" ? {
|
|
76
76
|
"& .MuiAutocomplete-input": {
|
|
77
77
|
paddingLeft: Ne
|
|
78
78
|
}
|
|
79
|
-
} :
|
|
79
|
+
} : g === "outlined" ? {
|
|
80
80
|
"& .MuiAutocomplete-input": {
|
|
81
81
|
paddingLeft: (n == null ? void 0 : n.size) === "small" ? ke : we
|
|
82
82
|
}
|
|
@@ -97,7 +97,7 @@ const se = 2, Pe = 152, pe = 72, ue = 18.57, Ne = "11px !important", we = "2px !
|
|
|
97
97
|
gap: 0,
|
|
98
98
|
right: 0
|
|
99
99
|
}
|
|
100
|
-
},
|
|
100
|
+
}, Oe = {
|
|
101
101
|
...Y,
|
|
102
102
|
"& .MuiAutocomplete-inputRoot .MuiAutocomplete-input": {
|
|
103
103
|
flexBasis: pe,
|
|
@@ -105,7 +105,7 @@ const se = 2, Pe = 152, pe = 72, ue = 18.57, Ne = "11px !important", we = "2px !
|
|
|
105
105
|
}
|
|
106
106
|
};
|
|
107
107
|
ae(() => {
|
|
108
|
-
u ||
|
|
108
|
+
u || M(null);
|
|
109
109
|
}, [u]), ae(() => {
|
|
110
110
|
var l;
|
|
111
111
|
if (!Q.current)
|
|
@@ -122,19 +122,19 @@ const se = 2, Pe = 152, pe = 72, ue = 18.57, Ne = "11px !important", we = "2px !
|
|
|
122
122
|
e.removeEventListener("reset", t);
|
|
123
123
|
};
|
|
124
124
|
}, [W]);
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
}, "handleHiddenChipPopperClose"),
|
|
125
|
+
const he = /* @__PURE__ */ o(() => {
|
|
126
|
+
M(null);
|
|
127
|
+
}, "handleHiddenChipPopperClose"), Ie = /* @__PURE__ */ o((e) => {
|
|
128
128
|
e.preventDefault();
|
|
129
129
|
}, "handleHiddenChipSummaryMouseDown"), Ae = /* @__PURE__ */ o((e) => {
|
|
130
|
-
e.preventDefault(), e.stopPropagation(),
|
|
130
|
+
e.preventDefault(), e.stopPropagation(), M(
|
|
131
131
|
(t) => t === e.currentTarget ? null : e.currentTarget
|
|
132
132
|
);
|
|
133
133
|
}, "handleHiddenChipSummaryClick"), xe = /* @__PURE__ */ o((e) => {
|
|
134
134
|
K(
|
|
135
|
-
|
|
135
|
+
L.filter((t) => t.value !== e).map((t) => t.value)
|
|
136
136
|
);
|
|
137
|
-
}, "handleHiddenChipDelete"),
|
|
137
|
+
}, "handleHiddenChipDelete"), ge = /* @__PURE__ */ o((e) => {
|
|
138
138
|
var l;
|
|
139
139
|
const t = ce(e, d);
|
|
140
140
|
(m || u > 0) && t === "" && (e.key === "Backspace" || e.key === "Delete") && (e.defaultMuiPrevented = !0, e.preventDefault(), e.stopPropagation()), (l = n == null ? void 0 : n.onKeyDown) == null || l.call(
|
|
@@ -142,15 +142,15 @@ const se = 2, Pe = 152, pe = 72, ue = 18.57, Ne = "11px !important", we = "2px !
|
|
|
142
142
|
e
|
|
143
143
|
);
|
|
144
144
|
}, "handleMultipleRootKeyDown");
|
|
145
|
-
return V ? /* @__PURE__ */
|
|
145
|
+
return V ? /* @__PURE__ */ C(S, { children: [
|
|
146
146
|
/* @__PURE__ */ i(
|
|
147
147
|
ne,
|
|
148
148
|
{
|
|
149
149
|
ref: Z,
|
|
150
|
-
className: le("min-w-128",
|
|
150
|
+
className: le("min-w-128", _),
|
|
151
151
|
disableCloseOnSelect: !0,
|
|
152
|
-
disabled:
|
|
153
|
-
filterOptions:
|
|
152
|
+
disabled: I,
|
|
153
|
+
filterOptions: b ? (e) => e : void 0,
|
|
154
154
|
fullWidth: A,
|
|
155
155
|
inputValue: d,
|
|
156
156
|
loading: x,
|
|
@@ -161,8 +161,8 @@ const se = 2, Pe = 152, pe = 72, ue = 18.57, Ne = "11px !important", we = "2px !
|
|
|
161
161
|
clearIcon: /* @__PURE__ */ i(ee, { sx: { fontSize: ue } }),
|
|
162
162
|
openText: "",
|
|
163
163
|
popupIcon: /* @__PURE__ */ i(F, {}),
|
|
164
|
-
sx:
|
|
165
|
-
value:
|
|
164
|
+
sx: Oe,
|
|
165
|
+
value: y,
|
|
166
166
|
getOptionLabel: /* @__PURE__ */ o((e) => me(e.label), "getOptionLabel"),
|
|
167
167
|
getOptionKey: /* @__PURE__ */ o((e) => e.value, "getOptionKey"),
|
|
168
168
|
isOptionEqualToValue: /* @__PURE__ */ o((e, t) => e.value === t.value, "isOptionEqualToValue"),
|
|
@@ -185,7 +185,7 @@ const se = 2, Pe = 152, pe = 72, ue = 18.57, Ne = "11px !important", we = "2px !
|
|
|
185
185
|
U();
|
|
186
186
|
return;
|
|
187
187
|
}
|
|
188
|
-
if (
|
|
188
|
+
if (f && (r != null && r.option) && h(r.option)) {
|
|
189
189
|
if (m) {
|
|
190
190
|
U();
|
|
191
191
|
return;
|
|
@@ -194,13 +194,13 @@ const se = 2, Pe = 152, pe = 72, ue = 18.57, Ne = "11px !important", we = "2px !
|
|
|
194
194
|
return;
|
|
195
195
|
}
|
|
196
196
|
K(
|
|
197
|
-
t.filter((
|
|
197
|
+
t.filter((O) => !h(O)).map((O) => O.value)
|
|
198
198
|
);
|
|
199
199
|
}, "onChange"),
|
|
200
200
|
onInputChange: /* @__PURE__ */ o((e, t, l) => {
|
|
201
201
|
c == null || c(t, l);
|
|
202
202
|
}, "onInputChange"),
|
|
203
|
-
onKeyDown:
|
|
203
|
+
onKeyDown: ge,
|
|
204
204
|
slotProps: X,
|
|
205
205
|
renderInput: /* @__PURE__ */ o((e) => {
|
|
206
206
|
var t;
|
|
@@ -209,7 +209,7 @@ const se = 2, Pe = 152, pe = 72, ue = 18.57, Ne = "11px !important", we = "2px !
|
|
|
209
209
|
{
|
|
210
210
|
...e,
|
|
211
211
|
...n,
|
|
212
|
-
disabled:
|
|
212
|
+
disabled: I,
|
|
213
213
|
error: P,
|
|
214
214
|
fullWidth: A,
|
|
215
215
|
helperText: N,
|
|
@@ -221,41 +221,41 @@ const se = 2, Pe = 152, pe = 72, ue = 18.57, Ne = "11px !important", we = "2px !
|
|
|
221
221
|
input: {
|
|
222
222
|
...e.InputProps,
|
|
223
223
|
...(t = n == null ? void 0 : n.slotProps) == null ? void 0 : t.input,
|
|
224
|
-
endAdornment: /* @__PURE__ */
|
|
224
|
+
endAdornment: /* @__PURE__ */ C(S, { children: [
|
|
225
225
|
x ? /* @__PURE__ */ i(oe, { color: "inherit", size: 16, sx: { mr: 0.5 } }) : null,
|
|
226
226
|
e.InputProps.endAdornment
|
|
227
227
|
] })
|
|
228
228
|
}
|
|
229
229
|
},
|
|
230
|
-
variant:
|
|
230
|
+
variant: g
|
|
231
231
|
}
|
|
232
232
|
);
|
|
233
233
|
}, "renderInput"),
|
|
234
234
|
renderOption: /* @__PURE__ */ o((e, t, l) => {
|
|
235
235
|
const { key: r, ...T } = e;
|
|
236
|
-
return /* @__PURE__ */
|
|
236
|
+
return /* @__PURE__ */ C("li", { ...T, children: [
|
|
237
237
|
/* @__PURE__ */ i(Le, { checked: l.selected, className: "!mr-8 !p-0", size: "small" }),
|
|
238
238
|
t.label
|
|
239
239
|
] }, r);
|
|
240
240
|
}, "renderOption"),
|
|
241
|
-
renderValue: /* @__PURE__ */ o((e, t) =>
|
|
241
|
+
renderValue: /* @__PURE__ */ o((e, t) => f && m ? [
|
|
242
242
|
/* @__PURE__ */ i(
|
|
243
243
|
ye,
|
|
244
244
|
{
|
|
245
245
|
component: "span",
|
|
246
246
|
sx: { color: "text.primary", fontWeight: 500, mr: 0.5 },
|
|
247
|
-
children:
|
|
247
|
+
children: v.label
|
|
248
248
|
},
|
|
249
|
-
|
|
249
|
+
v.value
|
|
250
250
|
)
|
|
251
251
|
] : [
|
|
252
|
-
...e.filter((r) => !
|
|
253
|
-
const { key:
|
|
252
|
+
...e.filter((r) => !h(r)).slice(0, se).map((r, T) => {
|
|
253
|
+
const { key: O, ...Ce } = t({ index: T });
|
|
254
254
|
return /* @__PURE__ */ be(
|
|
255
|
-
|
|
255
|
+
D,
|
|
256
256
|
{
|
|
257
|
-
...
|
|
258
|
-
key:
|
|
257
|
+
...Ce,
|
|
258
|
+
key: O,
|
|
259
259
|
label: r.label,
|
|
260
260
|
size: "small",
|
|
261
261
|
sx: { borderRadius: 1, mr: 0.5 }
|
|
@@ -264,12 +264,12 @@ const se = 2, Pe = 152, pe = 72, ue = 18.57, Ne = "11px !important", we = "2px !
|
|
|
264
264
|
}),
|
|
265
265
|
...u > 0 ? [
|
|
266
266
|
/* @__PURE__ */ i(
|
|
267
|
-
|
|
267
|
+
D,
|
|
268
268
|
{
|
|
269
269
|
clickable: !0,
|
|
270
270
|
label: `+${u}`,
|
|
271
271
|
onClick: Ae,
|
|
272
|
-
onMouseDown:
|
|
272
|
+
onMouseDown: Ie,
|
|
273
273
|
size: "small",
|
|
274
274
|
sx: /* @__PURE__ */ o((r) => ({
|
|
275
275
|
backgroundColor: E(r.palette.primary.main, 0.14),
|
|
@@ -296,8 +296,8 @@ const se = 2, Pe = 152, pe = 72, ue = 18.57, Ne = "11px !important", we = "2px !
|
|
|
296
296
|
open: !!j && u > 0,
|
|
297
297
|
placement: "bottom-start",
|
|
298
298
|
sx: { zIndex: /* @__PURE__ */ o((e) => e.zIndex.modal, "zIndex") },
|
|
299
|
-
children: /* @__PURE__ */ i(
|
|
300
|
-
|
|
299
|
+
children: /* @__PURE__ */ i(Me, { onClickAway: he, children: /* @__PURE__ */ i(
|
|
300
|
+
Se,
|
|
301
301
|
{
|
|
302
302
|
className: "mt-4",
|
|
303
303
|
sx: {
|
|
@@ -309,7 +309,7 @@ const se = 2, Pe = 152, pe = 72, ue = 18.57, Ne = "11px !important", we = "2px !
|
|
|
309
309
|
p: 1
|
|
310
310
|
},
|
|
311
311
|
children: G.map((e) => /* @__PURE__ */ i(
|
|
312
|
-
|
|
312
|
+
D,
|
|
313
313
|
{
|
|
314
314
|
label: e.label,
|
|
315
315
|
onDelete: /* @__PURE__ */ o(() => xe(e.value), "onDelete"),
|
|
@@ -325,9 +325,9 @@ const se = 2, Pe = 152, pe = 72, ue = 18.57, Ne = "11px !important", we = "2px !
|
|
|
325
325
|
] }) : /* @__PURE__ */ i(
|
|
326
326
|
ne,
|
|
327
327
|
{
|
|
328
|
-
className: le("min-w-128",
|
|
329
|
-
disabled:
|
|
330
|
-
filterOptions:
|
|
328
|
+
className: le("min-w-128", _),
|
|
329
|
+
disabled: I,
|
|
330
|
+
filterOptions: b ? (e) => e : void 0,
|
|
331
331
|
fullWidth: A,
|
|
332
332
|
inputValue: d,
|
|
333
333
|
loading: x,
|
|
@@ -345,7 +345,7 @@ const se = 2, Pe = 152, pe = 72, ue = 18.57, Ne = "11px !important", we = "2px !
|
|
|
345
345
|
loadingText: k ?? p("Common.로딩 중..."),
|
|
346
346
|
noOptionsText: J,
|
|
347
347
|
onChange: /* @__PURE__ */ o((e, t) => {
|
|
348
|
-
if (!t ||
|
|
348
|
+
if (!t || f && h(t)) {
|
|
349
349
|
$("");
|
|
350
350
|
return;
|
|
351
351
|
}
|
|
@@ -362,7 +362,7 @@ const se = 2, Pe = 152, pe = 72, ue = 18.57, Ne = "11px !important", we = "2px !
|
|
|
362
362
|
{
|
|
363
363
|
...e,
|
|
364
364
|
...n,
|
|
365
|
-
disabled:
|
|
365
|
+
disabled: I,
|
|
366
366
|
error: P,
|
|
367
367
|
fullWidth: A,
|
|
368
368
|
helperText: N,
|
|
@@ -379,13 +379,13 @@ const se = 2, Pe = 152, pe = 72, ue = 18.57, Ne = "11px !important", we = "2px !
|
|
|
379
379
|
...e.InputProps.sx ?? {},
|
|
380
380
|
...((r = (l = n == null ? void 0 : n.slotProps) == null ? void 0 : l.input) == null ? void 0 : r.sx) ?? {}
|
|
381
381
|
},
|
|
382
|
-
endAdornment: /* @__PURE__ */
|
|
382
|
+
endAdornment: /* @__PURE__ */ C(S, { children: [
|
|
383
383
|
x ? /* @__PURE__ */ i(oe, { color: "inherit", size: 16, sx: { mr: 0.5 } }) : null,
|
|
384
384
|
e.InputProps.endAdornment
|
|
385
385
|
] })
|
|
386
386
|
}
|
|
387
387
|
},
|
|
388
|
-
variant:
|
|
388
|
+
variant: g
|
|
389
389
|
}
|
|
390
390
|
);
|
|
391
391
|
}, "renderInput"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwpSelectorAutocomplete.js","sources":["../../../src/components/OwpSelectorBase/OwpSelectorAutocomplete.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport {\n Autocomplete,\n Box,\n Checkbox,\n Chip,\n CircularProgress,\n ClickAwayListener,\n Paper,\n Popper,\n TextField,\n} from '@mui/material';\nimport { alpha } from '@mui/material/styles';\nimport clsx from 'clsx';\nimport {\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type MutableRefObject,\n type SyntheticEvent,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type {\n OwpSelectorBaseHookResult,\n OwpSelectorBaseOption,\n OwpSelectorBaseProps,\n} from './types';\nimport { isSelectorAllOption } from './utils';\n\ninterface OwpSelectorAutocompleteProps {\n hookResult: OwpSelectorBaseHookResult;\n props: OwpSelectorBaseProps;\n}\n\nconst MULTIPLE_VISIBLE_CHIP_COUNT = 2;\nconst AUTOCOMPLETE_MIN_WIDTH = 152;\nconst MULTIPLE_AUTOCOMPLETE_INPUT_MIN_WIDTH = 72;\nconst SELECTOR_CLEAR_ICON_FONT_SIZE = 18.57;\nconst STANDARD_AUTOCOMPLETE_INPUT_PADDING_LEFT = '11px !important';\nconst OUTLINED_AUTOCOMPLETE_INPUT_PADDING_LEFT = '2px !important';\nconst OUTLINED_SMALL_AUTOCOMPLETE_INPUT_PADDING_LEFT = '5px !important';\n\ntype SelectorAutocompleteKeyDownEvent = ReactKeyboardEvent<HTMLDivElement> & {\n defaultMuiPrevented?: boolean;\n};\n\n/**\n * 현재 키 이벤트 기준 입력값 반환\n * @param event 키보드 이벤트\n * @param fallbackValue 제어 입력 fallback 값\n */\nconst getCurrentAutocompleteInputValue = (\n event: SelectorAutocompleteKeyDownEvent,\n fallbackValue?: string,\n) => {\n const eventTarget = event.target;\n\n if (eventTarget instanceof HTMLInputElement) {\n return eventTarget.value;\n }\n\n return fallbackValue ?? '';\n};\n\n/**\n * Autocomplete 옵션 라벨 문자열 변환\n * @param label 옵션 라벨\n */\nconst getAutocompleteOptionLabel = (label: OwpSelectorBaseOption['label']) => {\n return typeof label === 'string' || typeof label === 'number' ? `${label}` : '';\n};\n\n/**\n * Autocomplete 기반 공통 선택기\n * @param props Autocomplete 렌더링 props\n */\nexport const OwpSelectorAutocomplete = ({ hookResult, props }: OwpSelectorAutocompleteProps) => {\n const { t } = useOwpTranslation();\n const {\n autocompleteInputValue,\n className,\n disableAllValueItem,\n disableClientFilter,\n disabled,\n error,\n fullWidth,\n helperText,\n label,\n loading,\n loadingText,\n multiple,\n noOptionsText,\n onAutocompleteInputChange,\n placeholder,\n required,\n textFieldProps,\n } = props;\n const {\n allOption,\n clearSelection,\n isAllSelected,\n resolvedOptions,\n restoreAllSelection,\n selectAll,\n selectedOption,\n selectedOptions,\n selectMultipleValues,\n selectSingleValue,\n } = hookResult;\n const options = disableAllValueItem ? resolvedOptions : [allOption, ...resolvedOptions];\n const filteredSelectedOptions = useMemo(\n () => selectedOptions.filter((option) => !isSelectorAllOption(option)),\n [selectedOptions],\n );\n const hiddenSelectedOptions = useMemo(\n () => (isAllSelected ? [] : filteredSelectedOptions.slice(MULTIPLE_VISIBLE_CHIP_COUNT)),\n [filteredSelectedOptions, isAllSelected],\n );\n const hiddenSelectedOptionCount = hiddenSelectedOptions.length;\n const [hiddenChipAnchorEl, setHiddenChipAnchorEl] = useState<HTMLElement | null>(null);\n const autocompleteRootRef = useRef<HTMLDivElement | null>(null);\n const resolvedNoOptionsText = noOptionsText ?? t('Message.검색 결과 없음');\n const shouldRestoreAllOnClearRef = useRef(\n multiple &&\n !disableAllValueItem &&\n ((props.value ?? props.defaultValue) == null || (props.value ?? props.defaultValue) === ''),\n );\n const autocompleteSlotProps = {\n clearIndicator: {\n className: 'm-0 p-0',\n size: 'small',\n tabIndex: -1,\n },\n paper: {\n sx: {\n '& .MuiAutocomplete-noOptions': {\n fontSize: 14,\n px: 1,\n py: 1.5,\n whiteSpace: 'nowrap',\n },\n },\n },\n popupIndicator: {\n className: 'm-0 p-0',\n size: 'small',\n tabIndex: -1,\n },\n } as const;\n const resolvedTextFieldVariant = textFieldProps?.variant ?? 'standard';\n const singleAutocompleteInputSx =\n resolvedTextFieldVariant === 'standard'\n ? {\n '& .MuiAutocomplete-input': {\n paddingLeft: STANDARD_AUTOCOMPLETE_INPUT_PADDING_LEFT,\n },\n }\n : resolvedTextFieldVariant === 'outlined'\n ? {\n '& .MuiAutocomplete-input': {\n paddingLeft:\n textFieldProps?.size === 'small'\n ? OUTLINED_SMALL_AUTOCOMPLETE_INPUT_PADDING_LEFT\n : OUTLINED_AUTOCOMPLETE_INPUT_PADDING_LEFT,\n },\n }\n : undefined;\n const autocompleteSx = {\n minWidth: AUTOCOMPLETE_MIN_WIDTH,\n '& .MuiAutocomplete-endAdornment': {\n '& .MuiAutocomplete-clearIndicator + .MuiAutocomplete-popupIndicator': {\n ml: 0,\n },\n '& .MuiIconButton-root': {\n m: 0,\n p: 0,\n },\n '& > :not(style) + :not(style)': {\n ml: 0,\n },\n alignItems: 'center',\n gap: 0,\n right: 0,\n },\n } as const;\n const multipleAutocompleteSx = {\n ...autocompleteSx,\n '& .MuiAutocomplete-inputRoot .MuiAutocomplete-input': {\n flexBasis: MULTIPLE_AUTOCOMPLETE_INPUT_MIN_WIDTH,\n minWidth: MULTIPLE_AUTOCOMPLETE_INPUT_MIN_WIDTH,\n },\n } as const;\n\n useEffect(() => {\n if (!hiddenSelectedOptionCount) {\n setHiddenChipAnchorEl(null);\n }\n }, [hiddenSelectedOptionCount]);\n\n useEffect(() => {\n if (!shouldRestoreAllOnClearRef.current) {\n return;\n }\n\n const formElement = autocompleteRootRef.current?.closest('form');\n\n if (!formElement) {\n return;\n }\n\n const handleFormReset = () => {\n window.setTimeout(() => {\n restoreAllSelection();\n }, 0);\n };\n\n formElement.addEventListener('reset', handleFormReset);\n\n return () => {\n formElement.removeEventListener('reset', handleFormReset);\n };\n }, [restoreAllSelection]);\n\n const handleHiddenChipPopperClose = () => {\n setHiddenChipAnchorEl(null);\n };\n\n const handleHiddenChipSummaryMouseDown = (event: ReactMouseEvent<HTMLElement>) => {\n event.preventDefault();\n };\n\n const handleHiddenChipSummaryClick = (event: ReactMouseEvent<HTMLElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n setHiddenChipAnchorEl((previousAnchorElement) =>\n previousAnchorElement === event.currentTarget ? null : event.currentTarget,\n );\n };\n\n const handleHiddenChipDelete = (optionValue: string) => {\n selectMultipleValues(\n filteredSelectedOptions\n .filter((option) => option.value !== optionValue)\n .map((option) => option.value),\n );\n };\n\n const handleMultipleRootKeyDown = (event: SelectorAutocompleteKeyDownEvent) => {\n const currentInputValue = getCurrentAutocompleteInputValue(event, autocompleteInputValue);\n\n if (\n (isAllSelected || hiddenSelectedOptionCount > 0) &&\n currentInputValue === '' &&\n (event.key === 'Backspace' || event.key === 'Delete')\n ) {\n event.defaultMuiPrevented = true;\n event.preventDefault();\n event.stopPropagation();\n }\n\n textFieldProps?.onKeyDown?.(\n event as Parameters<NonNullable<typeof textFieldProps.onKeyDown>>[0],\n );\n };\n\n if (multiple) {\n return (\n <>\n <Autocomplete\n ref={autocompleteRootRef as MutableRefObject<HTMLDivElement | null>}\n className={clsx('min-w-128', className)}\n disableCloseOnSelect\n disabled={disabled}\n filterOptions={disableClientFilter ? (nextOptions) => nextOptions : undefined}\n fullWidth={fullWidth}\n inputValue={autocompleteInputValue}\n loading={loading}\n multiple\n options={options}\n clearText=\"\"\n closeText=\"\"\n clearIcon={<ClearIcon sx={{ fontSize: SELECTOR_CLEAR_ICON_FONT_SIZE }} />}\n openText=\"\"\n popupIcon={<ArrowDropDownIcon />}\n sx={multipleAutocompleteSx}\n value={selectedOptions}\n getOptionLabel={(option) => getAutocompleteOptionLabel(option.label)}\n getOptionKey={(option) => option.value}\n isOptionEqualToValue={(option, selected) => option.value === selected.value}\n loadingText={loadingText ?? t('Common.로딩 중...')}\n noOptionsText={resolvedNoOptionsText}\n onChange={(\n _event: SyntheticEvent,\n nextOptions: OwpSelectorBaseOption[],\n reason: string,\n details,\n ) => {\n const currentInputValue =\n _event.type === 'keydown'\n ? getCurrentAutocompleteInputValue(\n _event as SelectorAutocompleteKeyDownEvent,\n autocompleteInputValue,\n )\n : (autocompleteInputValue ?? '');\n\n if (\n reason === 'removeOption' &&\n _event.type === 'keydown' &&\n currentInputValue === '' &&\n (isAllSelected || hiddenSelectedOptionCount > 0)\n ) {\n _event.preventDefault();\n _event.stopPropagation();\n return;\n }\n\n if (reason === 'clear') {\n if (shouldRestoreAllOnClearRef.current) {\n selectAll();\n return;\n }\n\n clearSelection();\n return;\n }\n\n if (!disableAllValueItem && details?.option && isSelectorAllOption(details.option)) {\n if (isAllSelected) {\n clearSelection();\n return;\n }\n\n selectAll();\n return;\n }\n\n selectMultipleValues(\n nextOptions\n .filter((option) => !isSelectorAllOption(option))\n .map((option) => option.value),\n );\n }}\n onInputChange={(_event, nextInputValue, reason) => {\n onAutocompleteInputChange?.(nextInputValue, reason);\n }}\n onKeyDown={handleMultipleRootKeyDown}\n slotProps={autocompleteSlotProps}\n renderInput={(params) => (\n <TextField\n {...params}\n {...textFieldProps}\n disabled={disabled}\n error={error}\n fullWidth={fullWidth}\n helperText={helperText}\n label={label}\n placeholder={placeholder ?? t('Common.검색')}\n required={required}\n slotProps={{\n ...textFieldProps?.slotProps,\n input: {\n ...params.InputProps,\n ...textFieldProps?.slotProps?.input,\n endAdornment: (\n <>\n {loading ? (\n <CircularProgress color=\"inherit\" size={16} sx={{ mr: 0.5 }} />\n ) : null}\n {params.InputProps.endAdornment}\n </>\n ),\n },\n }}\n variant={resolvedTextFieldVariant}\n />\n )}\n renderOption={(optionProps, option, state) => {\n const { key, ...restOptionProps } = optionProps;\n\n return (\n <li key={key} {...restOptionProps}>\n <Checkbox checked={state.selected} className=\"!mr-8 !p-0\" size=\"small\" />\n {option.label}\n </li>\n );\n }}\n renderValue={(nextSelectedOptions, getItemProps) => {\n if (!disableAllValueItem && isAllSelected) {\n return [\n <Box\n component=\"span\"\n key={allOption.value}\n sx={{ color: 'text.primary', fontWeight: 500, mr: 0.5 }}\n >\n {allOption.label}\n </Box>,\n ];\n }\n\n const visibleSelectedOptions = nextSelectedOptions\n .filter((option) => !isSelectorAllOption(option))\n .slice(0, MULTIPLE_VISIBLE_CHIP_COUNT);\n\n return [\n ...visibleSelectedOptions.map((option, index) => {\n const { key, ...itemProps } = getItemProps({ index });\n\n return (\n <Chip\n {...itemProps}\n key={key}\n label={option.label}\n size=\"small\"\n sx={{ borderRadius: 1, mr: 0.5 }}\n />\n );\n }),\n ...(hiddenSelectedOptionCount > 0\n ? [\n <Chip\n key=\"owp-selector-hidden-chip-summary\"\n clickable\n label={`+${hiddenSelectedOptionCount}`}\n onClick={handleHiddenChipSummaryClick}\n onMouseDown={handleHiddenChipSummaryMouseDown}\n size=\"small\"\n sx={(theme) => ({\n backgroundColor: alpha(theme.palette.primary.main, 0.14),\n border: `1px solid ${alpha(theme.palette.primary.main, 0.22)}`,\n borderRadius: 1,\n color: theme.palette.primary.dark,\n fontWeight: 600,\n mr: 0.5,\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.2),\n },\n })}\n />,\n ]\n : []),\n ];\n }}\n />\n <Popper\n anchorEl={hiddenChipAnchorEl}\n open={Boolean(hiddenChipAnchorEl) && hiddenSelectedOptionCount > 0}\n placement=\"bottom-start\"\n sx={{ zIndex: (theme) => theme.zIndex.modal }}\n >\n <ClickAwayListener onClickAway={handleHiddenChipPopperClose}>\n <Paper\n className=\"mt-4\"\n sx={{\n border: (theme) => `1px solid ${alpha(theme.palette.common.black, 0.12)}`,\n display: 'flex',\n flexWrap: 'wrap',\n gap: 0.75,\n maxWidth: 280,\n p: 1,\n }}\n >\n {hiddenSelectedOptions.map((option) => (\n <Chip\n key={option.value}\n label={option.label}\n onDelete={() => handleHiddenChipDelete(option.value)}\n size=\"small\"\n sx={{ borderRadius: 1 }}\n />\n ))}\n </Paper>\n </ClickAwayListener>\n </Popper>\n </>\n );\n }\n\n return (\n <Autocomplete\n className={clsx('min-w-128', className)}\n disabled={disabled}\n filterOptions={disableClientFilter ? (nextOptions) => nextOptions : undefined}\n fullWidth={fullWidth}\n inputValue={autocompleteInputValue}\n loading={loading}\n options={options}\n clearText=\"\"\n closeText=\"\"\n clearIcon={<ClearIcon sx={{ fontSize: SELECTOR_CLEAR_ICON_FONT_SIZE }} />}\n openText=\"\"\n popupIcon={<ArrowDropDownIcon />}\n sx={autocompleteSx}\n value={selectedOption}\n getOptionLabel={(option) => getAutocompleteOptionLabel(option.label)}\n getOptionKey={(option) => option.value}\n isOptionEqualToValue={(option, selected) => option.value === selected.value}\n loadingText={loadingText ?? t('Common.로딩 중...')}\n noOptionsText={resolvedNoOptionsText}\n onChange={(_event: SyntheticEvent, nextOption) => {\n if (!nextOption || (!disableAllValueItem && isSelectorAllOption(nextOption))) {\n selectSingleValue('');\n return;\n }\n\n selectSingleValue(nextOption.value);\n }}\n onInputChange={(_event, nextInputValue, reason) => {\n onAutocompleteInputChange?.(nextInputValue, reason);\n }}\n slotProps={autocompleteSlotProps}\n renderInput={(params) => (\n <TextField\n {...params}\n {...textFieldProps}\n disabled={disabled}\n error={error}\n fullWidth={fullWidth}\n helperText={helperText}\n label={label}\n placeholder={placeholder}\n required={required}\n slotProps={{\n ...textFieldProps?.slotProps,\n input: {\n ...params.InputProps,\n ...textFieldProps?.slotProps?.input,\n sx: {\n ...(singleAutocompleteInputSx ?? {}),\n ...((params.InputProps as { sx?: object }).sx ?? {}),\n ...((textFieldProps?.slotProps?.input as { sx?: object } | undefined)?.sx ?? {}),\n },\n endAdornment: (\n <>\n {loading ? <CircularProgress color=\"inherit\" size={16} sx={{ mr: 0.5 }} /> : null}\n {params.InputProps.endAdornment}\n </>\n ),\n },\n }}\n variant={resolvedTextFieldVariant}\n />\n )}\n selectOnFocus\n renderOption={(optionProps, option) => {\n const { key, ...restOptionProps } = optionProps;\n\n return (\n <li key={key} {...restOptionProps}>\n {option.label}\n </li>\n );\n }}\n />\n );\n};\n"],"names":["MULTIPLE_VISIBLE_CHIP_COUNT","AUTOCOMPLETE_MIN_WIDTH","MULTIPLE_AUTOCOMPLETE_INPUT_MIN_WIDTH","SELECTOR_CLEAR_ICON_FONT_SIZE","STANDARD_AUTOCOMPLETE_INPUT_PADDING_LEFT","OUTLINED_AUTOCOMPLETE_INPUT_PADDING_LEFT","OUTLINED_SMALL_AUTOCOMPLETE_INPUT_PADDING_LEFT","getCurrentAutocompleteInputValue","__name","event","fallbackValue","eventTarget","getAutocompleteOptionLabel","label","OwpSelectorAutocomplete","hookResult","props","t","useOwpTranslation","autocompleteInputValue","className","disableAllValueItem","disableClientFilter","disabled","error","fullWidth","helperText","loading","loadingText","multiple","noOptionsText","onAutocompleteInputChange","placeholder","required","textFieldProps","allOption","clearSelection","isAllSelected","resolvedOptions","restoreAllSelection","selectAll","selectedOption","selectedOptions","selectMultipleValues","selectSingleValue","options","filteredSelectedOptions","useMemo","option","isSelectorAllOption","hiddenSelectedOptions","hiddenSelectedOptionCount","hiddenChipAnchorEl","setHiddenChipAnchorEl","useState","autocompleteRootRef","useRef","resolvedNoOptionsText","shouldRestoreAllOnClearRef","autocompleteSlotProps","resolvedTextFieldVariant","singleAutocompleteInputSx","autocompleteSx","multipleAutocompleteSx","useEffect","formElement","_a","handleFormReset","handleHiddenChipPopperClose","handleHiddenChipSummaryMouseDown","handleHiddenChipSummaryClick","previousAnchorElement","handleHiddenChipDelete","optionValue","handleMultipleRootKeyDown","currentInputValue","jsxs","Fragment","jsx","Autocomplete","clsx","nextOptions","ClearIcon","ArrowDropDownIcon","selected","_event","reason","details","nextInputValue","params","TextField","CircularProgress","optionProps","state","key","restOptionProps","Checkbox","nextSelectedOptions","getItemProps","Box","index","itemProps","createElement","Chip","theme","alpha","Popper","ClickAwayListener","Paper","nextOption","_c","_b"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OwpSelectorAutocomplete.js","sources":["../../../src/components/OwpSelectorBase/OwpSelectorAutocomplete.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport {\n Autocomplete,\n Box,\n Checkbox,\n Chip,\n CircularProgress,\n ClickAwayListener,\n Paper,\n Popper,\n TextField,\n} from '@mui/material';\nimport { alpha } from '@mui/material/styles';\nimport clsx from 'clsx';\nimport {\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type MutableRefObject,\n type SyntheticEvent,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type {\n OwpSelectorBaseHookResult,\n OwpSelectorBaseOption,\n OwpSelectorBaseProps,\n} from './types';\nimport { isSelectorAllOption } from './utils';\n\ninterface OwpSelectorAutocompleteProps {\n hookResult: OwpSelectorBaseHookResult;\n props: OwpSelectorBaseProps;\n}\n\nconst MULTIPLE_VISIBLE_CHIP_COUNT = 2;\nconst AUTOCOMPLETE_MIN_WIDTH = 152;\nconst MULTIPLE_AUTOCOMPLETE_INPUT_MIN_WIDTH = 72;\nconst SELECTOR_CLEAR_ICON_FONT_SIZE = 18.57;\nconst STANDARD_AUTOCOMPLETE_INPUT_PADDING_LEFT = '11px !important';\nconst OUTLINED_AUTOCOMPLETE_INPUT_PADDING_LEFT = '2px !important';\nconst OUTLINED_SMALL_AUTOCOMPLETE_INPUT_PADDING_LEFT = '5px !important';\n\ntype SelectorAutocompleteKeyDownEvent = ReactKeyboardEvent<HTMLDivElement> & {\n defaultMuiPrevented?: boolean;\n};\n\n/**\n * 현재 키 이벤트 기준 입력값 반환\n * @param event 키보드 이벤트\n * @param fallbackValue 제어 입력 fallback 값\n */\nconst getCurrentAutocompleteInputValue = (\n event: SelectorAutocompleteKeyDownEvent,\n fallbackValue?: string,\n) => {\n const eventTarget = event.target;\n\n if (eventTarget instanceof HTMLInputElement) {\n return eventTarget.value;\n }\n\n return fallbackValue ?? '';\n};\n\n/**\n * Autocomplete 옵션 라벨 문자열 변환\n * @param label 옵션 라벨\n */\nconst getAutocompleteOptionLabel = (label: OwpSelectorBaseOption['label']) => {\n return typeof label === 'string' || typeof label === 'number' ? `${label}` : '';\n};\n\n/**\n * Autocomplete 기반 공통 선택기\n * @param props Autocomplete 렌더링 props\n */\nexport const OwpSelectorAutocomplete = ({ hookResult, props }: OwpSelectorAutocompleteProps) => {\n const { t } = useOwpTranslation();\n const {\n autocompleteInputValue,\n className,\n disableClientFilter,\n disabled,\n error,\n fullWidth,\n helperText,\n label,\n loading,\n loadingText,\n multiple,\n noOptionsText,\n onAutocompleteInputChange,\n placeholder,\n required,\n showAllOption = true,\n textFieldProps,\n } = props;\n const {\n allOption,\n clearSelection,\n isAllSelected,\n resolvedOptions,\n restoreAllSelection,\n selectAll,\n selectedOption,\n selectedOptions,\n selectMultipleValues,\n selectSingleValue,\n } = hookResult;\n const options = showAllOption ? [allOption, ...resolvedOptions] : resolvedOptions;\n const filteredSelectedOptions = useMemo(\n () => selectedOptions.filter((option) => !isSelectorAllOption(option)),\n [selectedOptions],\n );\n const hiddenSelectedOptions = useMemo(\n () => (isAllSelected ? [] : filteredSelectedOptions.slice(MULTIPLE_VISIBLE_CHIP_COUNT)),\n [filteredSelectedOptions, isAllSelected],\n );\n const hiddenSelectedOptionCount = hiddenSelectedOptions.length;\n const [hiddenChipAnchorEl, setHiddenChipAnchorEl] = useState<HTMLElement | null>(null);\n const autocompleteRootRef = useRef<HTMLDivElement | null>(null);\n const resolvedNoOptionsText =\n noOptionsText ??\n t(disableClientFilter ? 'Message.검색 결과 없음' : 'Message.조회된 결과가 없습니다.');\n const shouldRestoreAllOnClearRef = useRef(\n multiple &&\n showAllOption &&\n ((props.value ?? props.defaultValue) == null || (props.value ?? props.defaultValue) === ''),\n );\n const autocompleteSlotProps = {\n clearIndicator: {\n className: 'm-0 p-0',\n size: 'small',\n tabIndex: -1,\n },\n paper: {\n sx: {\n '& .MuiAutocomplete-noOptions': {\n fontSize: 14,\n px: 1,\n py: 1.5,\n whiteSpace: 'nowrap',\n },\n },\n },\n popupIndicator: {\n className: 'm-0 p-0',\n size: 'small',\n tabIndex: -1,\n },\n } as const;\n const resolvedTextFieldVariant = textFieldProps?.variant ?? 'standard';\n const singleAutocompleteInputSx =\n resolvedTextFieldVariant === 'standard'\n ? {\n '& .MuiAutocomplete-input': {\n paddingLeft: STANDARD_AUTOCOMPLETE_INPUT_PADDING_LEFT,\n },\n }\n : resolvedTextFieldVariant === 'outlined'\n ? {\n '& .MuiAutocomplete-input': {\n paddingLeft:\n textFieldProps?.size === 'small'\n ? OUTLINED_SMALL_AUTOCOMPLETE_INPUT_PADDING_LEFT\n : OUTLINED_AUTOCOMPLETE_INPUT_PADDING_LEFT,\n },\n }\n : undefined;\n const autocompleteSx = {\n minWidth: AUTOCOMPLETE_MIN_WIDTH,\n '& .MuiAutocomplete-endAdornment': {\n '& .MuiAutocomplete-clearIndicator + .MuiAutocomplete-popupIndicator': {\n ml: 0,\n },\n '& .MuiIconButton-root': {\n m: 0,\n p: 0,\n },\n '& > :not(style) + :not(style)': {\n ml: 0,\n },\n alignItems: 'center',\n gap: 0,\n right: 0,\n },\n } as const;\n const multipleAutocompleteSx = {\n ...autocompleteSx,\n '& .MuiAutocomplete-inputRoot .MuiAutocomplete-input': {\n flexBasis: MULTIPLE_AUTOCOMPLETE_INPUT_MIN_WIDTH,\n minWidth: MULTIPLE_AUTOCOMPLETE_INPUT_MIN_WIDTH,\n },\n } as const;\n\n useEffect(() => {\n if (!hiddenSelectedOptionCount) {\n setHiddenChipAnchorEl(null);\n }\n }, [hiddenSelectedOptionCount]);\n\n useEffect(() => {\n if (!shouldRestoreAllOnClearRef.current) {\n return;\n }\n\n const formElement = autocompleteRootRef.current?.closest('form');\n\n if (!formElement) {\n return;\n }\n\n const handleFormReset = () => {\n window.setTimeout(() => {\n restoreAllSelection();\n }, 0);\n };\n\n formElement.addEventListener('reset', handleFormReset);\n\n return () => {\n formElement.removeEventListener('reset', handleFormReset);\n };\n }, [restoreAllSelection]);\n\n const handleHiddenChipPopperClose = () => {\n setHiddenChipAnchorEl(null);\n };\n\n const handleHiddenChipSummaryMouseDown = (event: ReactMouseEvent<HTMLElement>) => {\n event.preventDefault();\n };\n\n const handleHiddenChipSummaryClick = (event: ReactMouseEvent<HTMLElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n setHiddenChipAnchorEl((previousAnchorElement) =>\n previousAnchorElement === event.currentTarget ? null : event.currentTarget,\n );\n };\n\n const handleHiddenChipDelete = (optionValue: string) => {\n selectMultipleValues(\n filteredSelectedOptions\n .filter((option) => option.value !== optionValue)\n .map((option) => option.value),\n );\n };\n\n const handleMultipleRootKeyDown = (event: SelectorAutocompleteKeyDownEvent) => {\n const currentInputValue = getCurrentAutocompleteInputValue(event, autocompleteInputValue);\n\n if (\n (isAllSelected || hiddenSelectedOptionCount > 0) &&\n currentInputValue === '' &&\n (event.key === 'Backspace' || event.key === 'Delete')\n ) {\n event.defaultMuiPrevented = true;\n event.preventDefault();\n event.stopPropagation();\n }\n\n textFieldProps?.onKeyDown?.(\n event as Parameters<NonNullable<typeof textFieldProps.onKeyDown>>[0],\n );\n };\n\n if (multiple) {\n return (\n <>\n <Autocomplete\n ref={autocompleteRootRef as MutableRefObject<HTMLDivElement | null>}\n className={clsx('min-w-128', className)}\n disableCloseOnSelect\n disabled={disabled}\n filterOptions={disableClientFilter ? (nextOptions) => nextOptions : undefined}\n fullWidth={fullWidth}\n inputValue={autocompleteInputValue}\n loading={loading}\n multiple\n options={options}\n clearText=\"\"\n closeText=\"\"\n clearIcon={<ClearIcon sx={{ fontSize: SELECTOR_CLEAR_ICON_FONT_SIZE }} />}\n openText=\"\"\n popupIcon={<ArrowDropDownIcon />}\n sx={multipleAutocompleteSx}\n value={selectedOptions}\n getOptionLabel={(option) => getAutocompleteOptionLabel(option.label)}\n getOptionKey={(option) => option.value}\n isOptionEqualToValue={(option, selected) => option.value === selected.value}\n loadingText={loadingText ?? t('Common.로딩 중...')}\n noOptionsText={resolvedNoOptionsText}\n onChange={(\n _event: SyntheticEvent,\n nextOptions: OwpSelectorBaseOption[],\n reason: string,\n details,\n ) => {\n const currentInputValue =\n _event.type === 'keydown'\n ? getCurrentAutocompleteInputValue(\n _event as SelectorAutocompleteKeyDownEvent,\n autocompleteInputValue,\n )\n : (autocompleteInputValue ?? '');\n\n if (\n reason === 'removeOption' &&\n _event.type === 'keydown' &&\n currentInputValue === '' &&\n (isAllSelected || hiddenSelectedOptionCount > 0)\n ) {\n _event.preventDefault();\n _event.stopPropagation();\n return;\n }\n\n if (reason === 'clear') {\n if (shouldRestoreAllOnClearRef.current) {\n selectAll();\n return;\n }\n\n clearSelection();\n return;\n }\n\n if (showAllOption && details?.option && isSelectorAllOption(details.option)) {\n if (isAllSelected) {\n clearSelection();\n return;\n }\n\n selectAll();\n return;\n }\n\n selectMultipleValues(\n nextOptions\n .filter((option) => !isSelectorAllOption(option))\n .map((option) => option.value),\n );\n }}\n onInputChange={(_event, nextInputValue, reason) => {\n onAutocompleteInputChange?.(nextInputValue, reason);\n }}\n onKeyDown={handleMultipleRootKeyDown}\n slotProps={autocompleteSlotProps}\n renderInput={(params) => (\n <TextField\n {...params}\n {...textFieldProps}\n disabled={disabled}\n error={error}\n fullWidth={fullWidth}\n helperText={helperText}\n label={label}\n placeholder={placeholder ?? t('Common.검색')}\n required={required}\n slotProps={{\n ...textFieldProps?.slotProps,\n input: {\n ...params.InputProps,\n ...textFieldProps?.slotProps?.input,\n endAdornment: (\n <>\n {loading ? (\n <CircularProgress color=\"inherit\" size={16} sx={{ mr: 0.5 }} />\n ) : null}\n {params.InputProps.endAdornment}\n </>\n ),\n },\n }}\n variant={resolvedTextFieldVariant}\n />\n )}\n renderOption={(optionProps, option, state) => {\n const { key, ...restOptionProps } = optionProps;\n\n return (\n <li key={key} {...restOptionProps}>\n <Checkbox checked={state.selected} className=\"!mr-8 !p-0\" size=\"small\" />\n {option.label}\n </li>\n );\n }}\n renderValue={(nextSelectedOptions, getItemProps) => {\n if (showAllOption && isAllSelected) {\n return [\n <Box\n component=\"span\"\n key={allOption.value}\n sx={{ color: 'text.primary', fontWeight: 500, mr: 0.5 }}\n >\n {allOption.label}\n </Box>,\n ];\n }\n\n const visibleSelectedOptions = nextSelectedOptions\n .filter((option) => !isSelectorAllOption(option))\n .slice(0, MULTIPLE_VISIBLE_CHIP_COUNT);\n\n return [\n ...visibleSelectedOptions.map((option, index) => {\n const { key, ...itemProps } = getItemProps({ index });\n\n return (\n <Chip\n {...itemProps}\n key={key}\n label={option.label}\n size=\"small\"\n sx={{ borderRadius: 1, mr: 0.5 }}\n />\n );\n }),\n ...(hiddenSelectedOptionCount > 0\n ? [\n <Chip\n key=\"owp-selector-hidden-chip-summary\"\n clickable\n label={`+${hiddenSelectedOptionCount}`}\n onClick={handleHiddenChipSummaryClick}\n onMouseDown={handleHiddenChipSummaryMouseDown}\n size=\"small\"\n sx={(theme) => ({\n backgroundColor: alpha(theme.palette.primary.main, 0.14),\n border: `1px solid ${alpha(theme.palette.primary.main, 0.22)}`,\n borderRadius: 1,\n color: theme.palette.primary.dark,\n fontWeight: 600,\n mr: 0.5,\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.2),\n },\n })}\n />,\n ]\n : []),\n ];\n }}\n />\n <Popper\n anchorEl={hiddenChipAnchorEl}\n open={Boolean(hiddenChipAnchorEl) && hiddenSelectedOptionCount > 0}\n placement=\"bottom-start\"\n sx={{ zIndex: (theme) => theme.zIndex.modal }}\n >\n <ClickAwayListener onClickAway={handleHiddenChipPopperClose}>\n <Paper\n className=\"mt-4\"\n sx={{\n border: (theme) => `1px solid ${alpha(theme.palette.common.black, 0.12)}`,\n display: 'flex',\n flexWrap: 'wrap',\n gap: 0.75,\n maxWidth: 280,\n p: 1,\n }}\n >\n {hiddenSelectedOptions.map((option) => (\n <Chip\n key={option.value}\n label={option.label}\n onDelete={() => handleHiddenChipDelete(option.value)}\n size=\"small\"\n sx={{ borderRadius: 1 }}\n />\n ))}\n </Paper>\n </ClickAwayListener>\n </Popper>\n </>\n );\n }\n\n return (\n <Autocomplete\n className={clsx('min-w-128', className)}\n disabled={disabled}\n filterOptions={disableClientFilter ? (nextOptions) => nextOptions : undefined}\n fullWidth={fullWidth}\n inputValue={autocompleteInputValue}\n loading={loading}\n options={options}\n clearText=\"\"\n closeText=\"\"\n clearIcon={<ClearIcon sx={{ fontSize: SELECTOR_CLEAR_ICON_FONT_SIZE }} />}\n openText=\"\"\n popupIcon={<ArrowDropDownIcon />}\n sx={autocompleteSx}\n value={selectedOption}\n getOptionLabel={(option) => getAutocompleteOptionLabel(option.label)}\n getOptionKey={(option) => option.value}\n isOptionEqualToValue={(option, selected) => option.value === selected.value}\n loadingText={loadingText ?? t('Common.로딩 중...')}\n noOptionsText={resolvedNoOptionsText}\n onChange={(_event: SyntheticEvent, nextOption) => {\n if (!nextOption || (showAllOption && isSelectorAllOption(nextOption))) {\n selectSingleValue('');\n return;\n }\n\n selectSingleValue(nextOption.value);\n }}\n onInputChange={(_event, nextInputValue, reason) => {\n onAutocompleteInputChange?.(nextInputValue, reason);\n }}\n slotProps={autocompleteSlotProps}\n renderInput={(params) => (\n <TextField\n {...params}\n {...textFieldProps}\n disabled={disabled}\n error={error}\n fullWidth={fullWidth}\n helperText={helperText}\n label={label}\n placeholder={placeholder}\n required={required}\n slotProps={{\n ...textFieldProps?.slotProps,\n input: {\n ...params.InputProps,\n ...textFieldProps?.slotProps?.input,\n sx: {\n ...(singleAutocompleteInputSx ?? {}),\n ...((params.InputProps as { sx?: object }).sx ?? {}),\n ...((textFieldProps?.slotProps?.input as { sx?: object } | undefined)?.sx ?? {}),\n },\n endAdornment: (\n <>\n {loading ? <CircularProgress color=\"inherit\" size={16} sx={{ mr: 0.5 }} /> : null}\n {params.InputProps.endAdornment}\n </>\n ),\n },\n }}\n variant={resolvedTextFieldVariant}\n />\n )}\n selectOnFocus\n renderOption={(optionProps, option) => {\n const { key, ...restOptionProps } = optionProps;\n\n return (\n <li key={key} {...restOptionProps}>\n {option.label}\n </li>\n );\n }}\n />\n );\n};\n"],"names":["MULTIPLE_VISIBLE_CHIP_COUNT","AUTOCOMPLETE_MIN_WIDTH","MULTIPLE_AUTOCOMPLETE_INPUT_MIN_WIDTH","SELECTOR_CLEAR_ICON_FONT_SIZE","STANDARD_AUTOCOMPLETE_INPUT_PADDING_LEFT","OUTLINED_AUTOCOMPLETE_INPUT_PADDING_LEFT","OUTLINED_SMALL_AUTOCOMPLETE_INPUT_PADDING_LEFT","getCurrentAutocompleteInputValue","__name","event","fallbackValue","eventTarget","getAutocompleteOptionLabel","label","OwpSelectorAutocomplete","hookResult","props","t","useOwpTranslation","autocompleteInputValue","className","disableClientFilter","disabled","error","fullWidth","helperText","loading","loadingText","multiple","noOptionsText","onAutocompleteInputChange","placeholder","required","showAllOption","textFieldProps","allOption","clearSelection","isAllSelected","resolvedOptions","restoreAllSelection","selectAll","selectedOption","selectedOptions","selectMultipleValues","selectSingleValue","options","filteredSelectedOptions","useMemo","option","isSelectorAllOption","hiddenSelectedOptions","hiddenSelectedOptionCount","hiddenChipAnchorEl","setHiddenChipAnchorEl","useState","autocompleteRootRef","useRef","resolvedNoOptionsText","shouldRestoreAllOnClearRef","autocompleteSlotProps","resolvedTextFieldVariant","singleAutocompleteInputSx","autocompleteSx","multipleAutocompleteSx","useEffect","formElement","_a","handleFormReset","handleHiddenChipPopperClose","handleHiddenChipSummaryMouseDown","handleHiddenChipSummaryClick","previousAnchorElement","handleHiddenChipDelete","optionValue","handleMultipleRootKeyDown","currentInputValue","jsxs","Fragment","jsx","Autocomplete","clsx","nextOptions","ClearIcon","ArrowDropDownIcon","selected","_event","reason","details","nextInputValue","params","TextField","CircularProgress","optionProps","state","key","restOptionProps","Checkbox","nextSelectedOptions","getItemProps","Box","index","itemProps","createElement","Chip","theme","alpha","Popper","ClickAwayListener","Paper","nextOption","_c","_b"],"mappings":"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"}
|