- searchModal Store 패턴을 사용하여 상태 관리 및 UI, 비즈니스로직 분리 - tsconfig.json에 import paths 추가
85 lines
2.9 KiB
TypeScript
85 lines
2.9 KiB
TypeScript
import React, { use } from 'react';
|
|
import { YearRangeSelectBox } from '@/components/ui/YearRangeSelectBox';
|
|
import { SelectBox } from '@common/business_components/ui';
|
|
import { Button, Input, Label } from '@common/components';
|
|
import useStore from '../../../store/useStore';
|
|
import useSearchModalStore from '../../../store/useSearchModalStore';
|
|
import useSearchModal from './useSearchModal';
|
|
import useOperationTab from './useOperationTab';
|
|
|
|
|
|
const OperationTab: React.FC = () => {
|
|
const { BIZ_TY_CD } = useStore();
|
|
const {
|
|
workType, setWorkType,
|
|
var1, setVar1, var2, setVar2,
|
|
yearFilter, setYearFilter,
|
|
} = useSearchModalStore();
|
|
const { handleSearch } = useSearchModal();
|
|
const { WORK_TYPES } = useOperationTab();
|
|
|
|
const BIZ_TY_CD_SELECT_ARRAY = BIZ_TY_CD.map(item => ({
|
|
val: item.lwpoCd,
|
|
text: item.lwpoCdNm,
|
|
}));
|
|
|
|
return (
|
|
<div className="relative flex flex-col border rounded-lg p-5 w-full h-[10vh]">
|
|
<div className="flex items-center mb-3">
|
|
<Label className="text-xl text-gray-600 font-medium whitespace-nowrap mr-2">업무구분</Label>
|
|
<SelectBox
|
|
className="w-40 mr-8"
|
|
selectClass="rounded-lg bg-white text-xl"
|
|
label=""
|
|
selectArray={WORK_TYPES.map((w) => ({
|
|
val: w.val,
|
|
text: w.text,
|
|
}))}
|
|
onSelectValue={(val) => setWorkType(String(val))}
|
|
value={workType}
|
|
selectContentClass="z-[101]"
|
|
/>
|
|
</div>
|
|
<div className="flex items-center mb-6">
|
|
<Label className="text-xl text-gray-600 font-medium whitespace-nowrap mr-2">사업명</Label>
|
|
<Input
|
|
className="w-[100px] !text-xl placeholder:text-center mr-8"
|
|
placeholder="입력"
|
|
value={var1}
|
|
onChange={(e) => { setVar1(e.target.value); }}
|
|
onKeyDown={(e) => {
|
|
if (e.key === 'Enter') {
|
|
e.preventDefault(); // Enter 키 기본 동작 방지
|
|
handleSearch();
|
|
}
|
|
}}
|
|
/>
|
|
<YearRangeSelectBox
|
|
start={yearFilter.start}
|
|
end={yearFilter.end}
|
|
onChange={range => setYearFilter({ ...yearFilter, start: range.start, end: range.end })}
|
|
startLabel="수행기간"
|
|
endLabel=""
|
|
/>
|
|
<Label className="text-xl text-gray-600 font-medium whitespace-nowrap mr-2">사업 유형</Label>
|
|
<SelectBox
|
|
className="w-60 mr-8"
|
|
selectClass="rounded-lg bg-white text-xl"
|
|
label=""
|
|
selectArray={[{ val: "0", text: "전체" }, ...BIZ_TY_CD_SELECT_ARRAY]}
|
|
value={var2}
|
|
onSelectValue={(val) => {
|
|
setVar2(String(val));
|
|
}}
|
|
selectContentClass="z-[101]"
|
|
/>
|
|
{/* 조회 버튼 */}
|
|
<div className="flex-1 flex justify-end">
|
|
<Button className="text-base py-2" onClick={handleSearch}>조회</Button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
)
|
|
};
|
|
|
|
export default React.memo(OperationTab); |