sales-frontend-components 0.0.70 → 0.0.71

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/form/form-checkbox-button.tsx","../src/form/form-checkbox.tsx","../src/form/form-date-picker.tsx","../src/form/form-date-range-picker.tsx","../src/modal/pre-standard/job-search-modal/constants.ts","../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/bind.js","../src/modal/common.tsx","../src/modal/pre-standard/job-search-modal/job-search-category.tsx","../src/modal/pre-standard/job-search-modal/job-search-favorite.tsx","../src/modal/pre-standard/job-search-modal/job-search-result.tsx","../src/modal/pre-standard/job-search-modal/job-search.tsx","../src/modal/pre-standard/job-search-modal/use-job-search.tsx","../src/form/form-search-job-field.tsx","../src/form/form-segment.tsx","../src/form/form-select.tsx","../src/form/form-text-field.tsx","../src/step-indicator/step-indicator.tsx","../src/camera/attachment.tsx","../src/camera/resize.ts","../src/camera/use-camera.tsx","../src/canvas-paint/use-canvas-paint.ts","../src/canvas-paint/dummyData.ts","../src/modal/standard/address-search/address-search-modal.tsx","../src/modal/standard/address-search/use-search-address.tsx","../src/modal/pre-standard/job-vehicle-search-modal/job-vehicle-search-grade.tsx","../src/modal/pre-standard/vehicle-search-modal/vehicle-search.tsx","../src/modal/pre-standard/vehicle-search-modal/use-vehicle-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/use-job-vehicle-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/job-vehicle-search.tsx","../src/modal/pre-standard/job-search-modal/job-search-modal.tsx"],"sourcesContent":["import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { CheckboxButton, type CheckboxButtonProps } from 'sales-frontend-design-system';\n\nexport const FormCheckboxButton = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n children,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & Omit<CheckboxButtonProps, 'id'>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <CheckboxButton\n {...props}\n {...field}\n id={field.name}\n checked={field.value ?? false}\n error={fieldState.invalid}\n onChange={(checked) => {\n field.onChange(checked);\n props.onChange?.(checked);\n }}\n >\n {children}\n </CheckboxButton>\n );\n};\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { Checkbox, CheckboxProps } from 'sales-frontend-design-system';\n\nexport const FormCheckbox = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n children,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & Omit<CheckboxProps, 'id'>) => {\n const { field } = useController({ name, control, disabled });\n\n return (\n <Checkbox {...props} {...field} id={field.name} checked={field.value} onChange={field.onChange}>\n {children}\n </Checkbox>\n );\n};\n","import React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { DatePicker, type DatePickerSingleHtmlProps } from 'sales-frontend-design-system';\n\nexport const FormDatePicker = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n defaultValue,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled' | 'defaultValue'> &\n DatePickerSingleHtmlProps) => {\n const { field, fieldState } = useController({ name, control, disabled, defaultValue });\n const [initialDate, setInitialDate] = React.useState<Date>();\n\n React.useEffect(() => {\n if (field.value) {\n setInitialDate(field.value);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultValue]);\n\n return (\n <DatePicker\n tabIndex={0}\n {...{\n ...props,\n ...field,\n id: field.name,\n defaultValue: initialDate,\n error: fieldState.invalid,\n onValueChange: field.onChange\n }}\n />\n );\n};\n","import React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { DateRangePicker, type PeriodDate, type DatePickerRangeHtmlProps } from 'sales-frontend-design-system';\n\nexport const FormDateRangePicker = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n defaultValue,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled' | 'defaultValue'> &\n DatePickerRangeHtmlProps) => {\n const { field, fieldState } = useController({ name, control, disabled, defaultValue });\n const [initialDate, setInitialDate] = React.useState<PeriodDate>();\n\n React.useEffect(() => {\n if (field.value) {\n setInitialDate(field.value);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultValue]);\n\n return (\n <DateRangePicker\n tabIndex={0}\n {...{\n ...props,\n ...field,\n id: field.name,\n defaultValue: initialDate,\n error: fieldState.invalid,\n onValueChange: (selected) => {\n if (field.value !== selected) {\n field.onChange(selected);\n }\n }\n }}\n />\n );\n};\n","export const JOB_SEARCH_TABS = [\n { value: 'jobName', label: '직종명 검색' },\n { value: 'jobCode', label: '분류로 검색' }\n];\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue.call(this, arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn this && this[arg] || arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(this, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, this && this[key] || key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","export const highlightOnSearchKeyword = (originalText: string, targetString: string) => {\n if (originalText?.includes(targetString)) {\n const replacedText = [];\n\n const splitText = originalText.split(targetString);\n\n for (let i = 0; i < splitText.length; i++) {\n replacedText.push(splitText[i]);\n\n if (i !== splitText.length - 1) {\n replacedText.push(<span className=\"text-primary\">{targetString}</span>);\n }\n }\n\n return replacedText;\n }\n\n return originalText;\n};\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Button, Radio, Table } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchCategory({ filteredJobs, onJobSelect, searchTerm }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('category-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredJobs.length}</span>건의 검색결과\n </p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')} onToggle={() => {}}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n id={`item-${job.occupationIndustryCode}-${index}-accordion`}\n key={`item-${job.occupationIndustryCode}-${index}`}\n >\n <Accordion.HeaderDiv>\n <div style={{ flex: 1 }}>\n <Radio.Item size=\"small\" value={job.occupationIndustryCode} onChange={() => onJobSelect(job)}>\n {highlightOnSearchKeyword(job.occupationIndustryName, searchTerm)}({job.occupationIndustryCode})\n </Radio.Item>\n </div>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <Table variant=\"horizontal\">\n <tbody>\n <tr>\n <th>헤더 1</th>\n <td className=\"px-24\">1행 1번째</td>\n <th>헤더 1-2</th>\n <td className=\"px-24 \">1행 2번째</td>\n </tr>\n <tr>\n <th>헤더 2</th>\n <td className=\"pl-24 pr-16\" colSpan={3}>\n <p className=\"d-flex-center-center\">\n 2행 1번째 <span className=\"flex-1 pipe-left\">서브텍스트</span>\n <Button variant=\"neutral\" size=\"xsmall\" appearance=\"outline\">\n 버튼명\n </Button>\n </p>\n </td>\n </tr>\n </tbody>\n </Table>\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n {filteredJobs.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchTerm}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Radio } from 'sales-frontend-design-system';\n\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchFavorite({ filteredJobs, onJobSelect }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('popular-jobs')}>\n <p>많이 찾는 직종</p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n key={`item-${job.occupationIndustryCode}-${index}`}\n id={`item-${job.occupationIndustryCode}-${index}`}\n className={cx('accordion-item')}\n >\n <Accordion.HeaderDiv className={cx('accordion-header-item')}>\n <Radio.Item\n size=\"small\"\n value={job.occupationIndustryCode}\n onChange={() => onJobSelect(job)}\n className={cx('radio-item')}\n >\n {job.occupationIndustryName}({job.occupationIndustryCode})\n </Radio.Item>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">항목 1 내용</Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n </div>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Button, Radio, Table } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchResult({ filteredJobs, onJobSelect, searchTerm }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('popular-jobs')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredJobs.length}</span>건의 검색결과\n </p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')}>\n {filteredJobs.map((job) => (\n <Accordion.Item\n id={`item-${job.occupationIndustryCode}`}\n key={job.occupationIndustryCode}\n // onClick={() => accordion.toggleItem(`item-${job.code}`)}\n >\n <Accordion.HeaderDiv>\n <div style={{ flex: 1 }}>\n <Radio.Item\n id={`item-${job.occupationIndustryCode}`}\n size=\"small\"\n value={job.occupationIndustryCode}\n onChange={() => {\n onJobSelect(job);\n }}\n >\n {highlightOnSearchKeyword(job.occupationIndustryName, searchTerm)}\n </Radio.Item>\n </div>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <Table variant=\"horizontal\">\n <tbody>\n <tr>\n <th>헤더 1</th>\n <td className=\"px-24\">1행 1번째</td>\n <th>헤더 1-2</th>\n <td className=\"px-24 \">1행 2번째</td>\n </tr>\n <tr>\n <th>헤더 2</th>\n <td className=\"pl-24 pr-16\" colSpan={3}>\n <p className=\"d-flex-center-center\">\n 2행 1번째 <span className=\"flex-1 pipe-left\">서브텍스트</span>\n <Button variant=\"neutral\" size=\"xsmall\" appearance=\"outline\">\n 버튼명\n </Button>\n </p>\n </td>\n </tr>\n </tbody>\n </Table>\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n {filteredJobs.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchTerm}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n </>\n );\n}\n","import { Dispatch, SetStateAction } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Tab, FormField, Icon, Select } from 'sales-frontend-design-system';\n\nimport { JOB_SEARCH_TABS } from './constants';\nimport { JobSearchCategory } from './job-search-category';\nimport { JobSearchFavorite } from './job-search-favorite';\nimport styles from './job-search-modal.module.scss';\nimport { JobSearchResult } from './job-search-result';\n\nconst { TextField } = FormField;\ninterface JobSearchProps {\n activeTab: string;\n onTabChange: (value: string) => void;\n searchTerm: string;\n setSearchInput: (value: string) => void;\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchInput: string;\n setSearchTerm: (value: string) => void;\n firstCategory: string;\n setFirstCategory: Dispatch<SetStateAction<string>>;\n secondCategory: string;\n setSecondCategory: Dispatch<SetStateAction<string>>;\n firstCategoryList: OccupationResponseDto[];\n secondCategoryList: OccupationResponseDto[];\n jobList?: OccupationResponseDto[];\n}\nconst cx = classNames.bind(styles);\nconst { Option } = Select;\nexport function JobSearch({\n activeTab,\n onTabChange,\n searchTerm,\n setSearchInput,\n filteredJobs,\n onJobSelect,\n setSearchTerm,\n searchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n firstCategoryList,\n secondCategoryList\n}: JobSearchProps) {\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n setSearchTerm(searchInput);\n }\n };\n\n return (\n <>\n <Tab.Root\n defaultValue={activeTab}\n onValueChange={onTabChange}\n scroll=\"fixed\"\n size=\"small\"\n variant=\"sub\"\n style={{ gap: 0, overflow: 'visible' }}\n >\n {JOB_SEARCH_TABS.map((tab) => (\n <Tab.Item key={tab.value} value={tab.value}>\n {tab.label}\n </Tab.Item>\n ))}\n </Tab.Root>\n <div>\n {activeTab === 'jobName' && (\n <div className={cx('favorite-jobs-section')}>\n <TextField\n placeholder=\"직종명 검색\"\n value={searchInput}\n onKeyUp={onKeyUp}\n onChange={(e) => setSearchInput(e.target.value)}\n className={styles.searchInput}\n size=\"medium\"\n rootProps={{\n endElement: <Icon name=\"sub-ui/search\" onClick={() => setSearchTerm(searchInput)} />,\n onClear: () => {\n setSearchTerm('');\n setSearchInput('');\n }\n }}\n />\n {!searchTerm && <JobSearchFavorite filteredJobs={filteredJobs} onJobSelect={onJobSelect} />}\n {searchTerm && (\n <JobSearchResult filteredJobs={filteredJobs} onJobSelect={onJobSelect} searchTerm={searchTerm} />\n )}\n </div>\n )}\n {activeTab === 'jobCode' && (\n <div className={cx('select-jobs-section')}>\n <div className={cx('category-section')}>\n <Select\n name=\"first_category\"\n onChange={(value) => {\n setFirstCategory(value);\n setSecondCategory('');\n }}\n placeholder=\"대분류 선택\"\n rootProps={{\n style: {\n // width: '300px'\n }\n }}\n size=\"large\"\n value={firstCategory}\n >\n {firstCategoryList.map((option, index) => (\n <Option key={`${index}-${option.occupationIndustryCode}`} value={option.occupationIndustryCode}>\n {option.occupationIndustryName}\n </Option>\n ))}\n </Select>\n <Select\n name=\"second_category\"\n onChange={setSecondCategory}\n placeholder=\"중분류 선택\"\n rootProps={{\n style: {\n // width: '300px'\n }\n }}\n size=\"large\"\n value={secondCategory}\n disabled={!firstCategory}\n >\n {secondCategoryList.map((option, index) => (\n <Option key={`${index}-${option.occupationIndustryCode}`} value={option.occupationIndustryCode}>\n {option.occupationIndustryName}\n </Option>\n ))}\n </Select>\n </div>\n\n {firstCategory && secondCategory && (\n <JobSearchCategory filteredJobs={filteredJobs} onJobSelect={onJobSelect} searchTerm={searchTerm} />\n )}\n </div>\n )}\n </div>\n </>\n );\n}\n","import { useEffect, useState } from 'react';\n\nimport { OccupationResponseDto, useSearchOccupationQuery } from 'sales-frontend-api/method';\nimport { Button, Modal, useModalState } from 'sales-frontend-design-system';\n\nimport { JOB_SEARCH_TABS } from './constants';\nimport { JobSearch } from './job-search';\n\n/**\n * 초기값(많이 찾는 직종)\n * 회사 사무직 종사자\n * 경영지원 사무직 종사자\n * 주부\n * 주방장 및 조리사\n * 보험설계사(당사)\n */\nconst initData: OccupationResponseDto[] = [\n {\n occupationIndustryCode: '430101',\n occupationIndustryName: '회사 사무직 종사자',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '400301',\n occupationIndustryName: '경영지원 사무직 관리자',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '510201',\n occupationIndustryName: '전업주부',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '442501',\n occupationIndustryName: '주방장 및 조리사(선박 조리사 제외)',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '450303',\n occupationIndustryName: '보험설계사(당사)',\n occupationTypeCode: null,\n historySequence: 0\n }\n];\n\nconst useJobSearch = () => {\n const [activeTab, setActiveTab] = useState<string>(JOB_SEARCH_TABS[0]?.value ?? '');\n const [selectedJob, setSelectedJob] = useState<OccupationResponseDto | null>(null);\n const [searchTerm, setSearchTerm] = useState<string>('');\n const [searchInput, setSearchInput] = useState<string>('');\n const handleJobSelect = (job: OccupationResponseDto) => {\n setSelectedJob(job);\n };\n const [firstCategory, setFirstCategory] = useState<string>('');\n const [secondCategory, setSecondCategory] = useState<string>('');\n const [jobList, setJobList] = useState<OccupationResponseDto[]>(initData);\n const [firstCategoryList, setFirstCategoryList] = useState<OccupationResponseDto[]>([]);\n const [secondCategoryList, setSecondCategoryList] = useState<OccupationResponseDto[]>([]);\n const { data } = useSearchOccupationQuery({\n occupationMajorCategoryCode: firstCategory,\n occupationSearchTypeCode: searchTerm ? '4' : '3',\n occupationSubCategoryCode: secondCategory,\n searchOccupationIndustryName: searchTerm\n });\n const { data: firstCategoryData } = useSearchOccupationQuery({\n occupationMajorCategoryCode: '',\n occupationSearchTypeCode: '1',\n occupationSubCategoryCode: '',\n searchOccupationIndustryName: ''\n });\n const { data: secondCategoryData } = useSearchOccupationQuery({\n occupationMajorCategoryCode: firstCategory,\n occupationSearchTypeCode: '2',\n occupationSubCategoryCode: '',\n searchOccupationIndustryName: ''\n });\n\n useEffect(() => {\n if (data && searchTerm && activeTab === 'jobName') {\n /** 검색어가 있고, 검색된 데이터가 있는 경우 */\n const filteredJobs = data.data.occupationList.filter((job) => job.occupationIndustryName.includes(searchTerm));\n setJobList(filteredJobs);\n } else if (!data && searchTerm && activeTab === 'jobName') {\n /** 검색어가 있고, 검색된 데이터가 없는 경우 */\n setJobList([]);\n } else if (!searchTerm && activeTab === 'jobName') {\n /** 검색어가 없고, 검색된 데이터가 없는 경우 , 많이 찾는 직종 노출 */\n setJobList(initData);\n } else if (activeTab === 'jobCode' && firstCategory && secondCategory) {\n /** 대분류, 중분류 선택된 경우 */\n setJobList(data?.data.occupationList || []);\n }\n }, [searchTerm, data, firstCategory, secondCategory, secondCategoryData, activeTab]);\n\n useEffect(() => {\n console.log('jobList', jobList);\n }, [jobList]);\n\n useEffect(() => {\n if (firstCategoryData) {\n setFirstCategoryList(firstCategoryData.data.occupationList);\n }\n }, [firstCategoryData]);\n\n useEffect(() => {\n if (secondCategoryData) {\n setSecondCategoryList(secondCategoryData.data.occupationList);\n }\n }, [secondCategoryData]);\n\n return {\n activeTab,\n setActiveTab,\n selectedJob,\n searchTerm,\n setSearchTerm,\n handleJobSelect,\n filteredJobs: jobList,\n searchInput,\n setSearchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n secondCategoryList,\n firstCategoryList\n };\n};\n\nexport function useJobSearchModal() {\n const {\n activeTab,\n setActiveTab,\n searchTerm,\n setSearchTerm,\n filteredJobs,\n handleJobSelect,\n selectedJob,\n searchInput,\n setSearchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n firstCategoryList,\n secondCategoryList\n } = useJobSearch();\n\n const { isOpen, openModal, closeModal } = useModalState();\n const onTabChange = (value: string) => {\n setSearchTerm('');\n setFirstCategory('');\n setSecondCategory('');\n setActiveTab(value);\n };\n\n return {\n JobSearchModal: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"직종 검색\" showCloseButton />\n <Modal.Body raw>\n <JobSearch\n firstCategory={firstCategory}\n firstCategoryList={firstCategoryList}\n secondCategoryList={secondCategoryList}\n setFirstCategory={setFirstCategory}\n secondCategory={secondCategory}\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchInput={setSearchInput}\n filteredJobs={filteredJobs || []}\n onJobSelect={handleJobSelect}\n searchInput={searchInput}\n setSearchTerm={setSearchTerm}\n setSecondCategory={setSecondCategory}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button variant=\"primary\" size=\"medium\" appearance=\"filled\" width=\"full\" onClick={closeModal}>\n 확인\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n ),\n JobSearchComponent: (\n <JobSearch\n firstCategoryList={firstCategoryList}\n secondCategoryList={secondCategoryList}\n firstCategory={firstCategory}\n setFirstCategory={setFirstCategory}\n secondCategory={secondCategory}\n setSecondCategory={setSecondCategory}\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchInput={setSearchInput}\n filteredJobs={filteredJobs || []}\n onJobSelect={handleJobSelect}\n searchInput={searchInput}\n setSearchTerm={setSearchTerm}\n />\n ),\n isJobSearchOpen: isOpen,\n openJobSearchModal: openModal,\n closeJobSearchModal: closeModal,\n selectedJob\n };\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\n\nimport { useEffect, useState } from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { FormField } from 'sales-frontend-design-system';\n\nimport { useJobSearchModal } from '../modal/pre-standard/job-search-modal/use-job-search';\n\nexport const FormSearchJobField = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n error,\n size = 'medium',\n placeholder = '직종 검색',\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> &\n FormField.TextFieldProps & { onValueChange?: (value?: OccupationResponseDto) => void }) => {\n const [selected, setSelected] = useState<OccupationResponseDto>();\n\n const { field, fieldState } = useController({ name, control, disabled });\n const { JobSearchModal, openJobSearchModal, selectedJob } = useJobSearchModal();\n\n useEffect(() => {\n if (selectedJob) {\n setSelected(selectedJob);\n field.onChange(selectedJob.occupationIndustryCode);\n props.onValueChange?.(selectedJob);\n }\n }, [selectedJob]);\n\n return (\n <>\n <FormField.ComboBox\n {...props}\n {...field}\n id={field.name}\n error={fieldState.invalid || error}\n value={selected?.occupationIndustryName ?? ''}\n icon=\"search\"\n size={size}\n placeholder={placeholder}\n autoComplete=\"off\"\n onClick={openJobSearchModal}\n />\n {JobSearchModal}\n </>\n );\n};\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { SegmentGroup, type SegmentGroupHtmlProps } from 'sales-frontend-design-system';\n\ninterface FormSegmentGroupProps<TFormValues extends FieldValues>\n extends Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'>,\n Omit<SegmentGroupHtmlProps, 'defaultValue'> {\n disabledItems?: string[];\n}\n\nexport const FormSegmentGroup = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n disabledItems,\n items,\n ...props\n}: FormSegmentGroupProps<TFormValues>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n const itemList = items.map((item) => {\n return {\n ...item,\n disabled: disabledItems?.includes(item.value)\n };\n });\n\n return (\n <SegmentGroup\n {...props}\n tabIndex={0}\n id={field.name}\n ref={field.ref}\n defaultValue={field.value}\n disabled={field.disabled}\n error={fieldState.invalid}\n onBlur={field.onBlur}\n items={itemList}\n onValueChange={(selected) => {\n field.onChange(selected);\n props.onValueChange?.(selected);\n }}\n />\n );\n};\n","import React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { OptionProps, Select, SelectProps } from 'sales-frontend-design-system';\n\n/**\n * 영업지원 시스템 셀렉트필드\n * @param param0\n * @returns\n */\n\ntype FormSelectProps<TFormValues extends FieldValues> = Pick<\n UseControllerProps<TFormValues>,\n 'name' | 'control' | 'disabled'\n> &\n Omit<SelectProps, 'defaultValue'>;\n\nexport const FormSelect = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n error,\n children,\n ...props\n}: FormSelectProps<TFormValues>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <Select\n {...props}\n id={field.name}\n disabled={field.disabled}\n error={fieldState.invalid || error}\n onBlur={field.onBlur}\n value={field.value}\n onChange={(selected) => {\n field.onChange(selected);\n }}\n >\n {children}\n </Select>\n );\n};\n\nconst FormSelectOption = ({ children, value, ...rest }: OptionProps) => {\n return (\n <Select.Option value={value} {...rest}>\n {children}\n </Select.Option>\n );\n};\n\ninterface IFormSelectGroupProps<TFormValues extends FieldValues> extends FormSelectProps<TFormValues> {\n options: { label: string; value: string }[];\n optionsProps?: Omit<OptionProps, 'children' | 'value'>;\n}\n\nconst FormSelectGroup = <TFormValues extends FieldValues>({\n options,\n optionsProps,\n ...props\n}: Omit<IFormSelectGroupProps<TFormValues>, 'children'>) => {\n return (\n <FormSelect {...props}>\n {options.map((option) => (\n <FormSelectOption key={option.value} value={option.value} {...optionsProps}>\n {option.label}\n </FormSelectOption>\n ))}\n </FormSelect>\n );\n};\n\nFormSelect.Option = FormSelectOption;\nFormSelect.Group = FormSelectGroup;\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { FormField } from 'sales-frontend-design-system';\n\nexport const FormTextField = <TFormValues extends FieldValues>({\n name,\n control,\n size = 'medium',\n disabled,\n error,\n onBlur,\n onChange,\n rootProps,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & FormField.TextFieldProps) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <FormField.TextField\n {...props}\n id={field.name}\n size={size}\n autoComplete=\"off\"\n name={field.name}\n value={field.value ?? ''}\n disabled={field.disabled}\n error={fieldState.invalid || error}\n onChange={(e) => {\n field.onChange(e);\n onChange?.(e);\n }}\n onBlur={(e) => {\n field.onBlur();\n onBlur?.(e);\n }}\n rootProps={{\n ...rootProps,\n onClear: () => {\n field.onChange('');\n rootProps?.onClear?.();\n }\n }}\n />\n );\n};\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { ModalUtils } from 'sales-frontend-design-system';\n\nimport styles from './step-indicator.module.scss';\n\nimport type { StepIndicatorProps, StepItem } from './step-indicator.types';\n\nconst cx = classNames.bind(styles);\n\nexport const StepIndicator = ({\n items,\n onClickItem,\n currentIndex = 0,\n defaultValue = '',\n dotCount = 3,\n isLoading\n}: StepIndicatorProps) => {\n const [steps, setSteps] = React.useState<StepItem[]>(\n Array.from({ length: 10 }).map(() => ({ label: '-', value: '' }))\n );\n const [current, setCurrent] = React.useState(currentIndex);\n\n React.useEffect(() => {\n if (items.length > 0) {\n setSteps(items);\n items.map((item, idx) => {\n if (item.value === defaultValue) {\n setCurrent(idx);\n }\n });\n }\n }, [items, defaultValue]);\n\n const handleClickStep = (item: StepItem) => {\n const index = steps.findIndex((step) => step.value === item.value);\n\n if (index === -1) {\n console.error('error not found index');\n\n return;\n }\n\n if (steps[index < 1 ? index : index - 1]?.isCompleted) {\n onClickItem?.(item);\n } else {\n ModalUtils.alert('이전 단계를 모두 완료해야 선택한 단계로\\n이동할 수 있습니다.', '이전 단계를 먼저 진행해주세요');\n }\n };\n\n return (\n <div className={cx('stepper-layout', { loading: isLoading })}>\n <div className={cx('stepper')}>\n {steps.map((item, idx) => (\n <React.Fragment key={`num-${idx}`}>\n <div\n className={cx(\n 'circle',\n { completed: item.isCompleted ?? false },\n { active: defaultValue === item.value || current === idx }\n )}\n onClick={() => handleClickStep?.(item)}\n >\n {item.isCompleted ? <span className={cx('completed-icon')} /> : idx + 1}\n </div>\n {/* 다음 단계가 있을 때만 dot 렌더링 */}\n {idx < steps.length - 1 &&\n Array.from({ length: dotCount }).map((_, dotIdx) => (\n <span key={`dot-${idx}-${dotIdx}`} className={cx('dot')} />\n ))}\n </React.Fragment>\n ))}\n </div>\n\n <ul className={cx('step-labels')}>\n {steps.map((item, idx) => (\n <li\n key={`label-${idx}`}\n className={cx(\n { completed: steps[idx < 1 ? idx : idx - 1]?.isCompleted ?? false },\n { active: defaultValue === item.value || current === idx }\n )}\n onClick={() => handleClickStep?.(item)}\n >\n <span className=\"text-ellipsis\">{item.label ?? item.value}</span>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n","import classNames from 'classnames/bind';\nimport { Icon } from 'sales-frontend-design-system';\n\nimport styles from './camera.module.scss';\nimport { AttachedPhoto, cameraItemType } from './camera.types';\n\nconst cx = classNames.bind(styles);\n\nexport interface AttachmentProps {\n photos: AttachedPhoto[];\n onAddPhoto: () => void;\n onRemovePhoto: (id: string) => void;\n /* false이면 사진이 1장 이상일 때만 표시 */\n show: boolean;\n type?: cameraItemType;\n buttonText?: string;\n}\n\nexport function Attachment({\n photos,\n onAddPhoto,\n onRemovePhoto,\n show,\n type = 'multiple',\n buttonText\n}: AttachmentProps) {\n const handleAddPhoto = () => {\n onAddPhoto();\n };\n\n const handleRemovePhoto = (id: string) => {\n onRemovePhoto(id);\n };\n\n const renderPhotoSingle = () => {\n if (photos.length === 0) {\n return (\n <div className={cx('single-photo-item', 'add-photo-item')}>\n <button className={cx('add-photo-button-single')} onClick={handleAddPhoto}>\n <Icon name=\"illust/camera\" />\n <span>{buttonText || '사진 첨부하기'}</span>\n </button>\n </div>\n );\n }\n\n return photos.map((photo) => (\n <div key={photo.id} className={cx('single-photo-item')}>\n <div className={cx('photo-placeholder')}>\n <img src={photo.src} alt={photo.name} className={cx('photo-image')} />\n </div>\n <button className={cx('remove-button')} onClick={() => handleRemovePhoto(photo.id)} aria-label=\"사진 삭제\">\n ×\n </button>\n </div>\n ));\n };\n\n const renderPhotoGrid = () => {\n const maxPhotos = type === 'single' ? 1 : 4;\n const gridItems = [];\n\n if (photos.length < maxPhotos) {\n gridItems.push(\n <div key=\"add-photo\" className={cx('photo-item', 'add-photo-item')}>\n <button className={cx('add-photo-button')} onClick={handleAddPhoto}>\n <Icon name=\"illust/camera\" />\n <span>{buttonText || '첨부하기'}</span>\n <span className={cx('photo-count')}>\n (<span className={cx('photo-count-number')}>{photos.length}</span>/{maxPhotos})\n </span>\n </button>\n </div>\n );\n }\n\n photos.forEach((photo) => {\n gridItems.push(\n <div key={photo.id} className={cx('photo-item')}>\n <div className={cx('photo-placeholder')}>\n <img src={photo.src} alt={photo.name} className={cx('photo-image')} />\n </div>\n <button className={cx('remove-button')} onClick={() => handleRemovePhoto(photo.id)} aria-label=\"사진 삭제\">\n ×\n </button>\n </div>\n );\n });\n\n return gridItems;\n };\n\n const isVisible = show || (!show && photos.length > 0);\n\n if (!isVisible) {\n return null;\n }\n\n if (type === 'single') {\n return <div className={cx('photo-single')}>{renderPhotoSingle()}</div>;\n }\n\n return <div className={cx('photo-grid', { linear: type === 'linear' })}>{renderPhotoGrid()}</div>;\n}\n","import { cameraOptions } from './camera.types';\n\n// 3mb\nconst maxImageSize = 3 * 1024 * 1024;\n/**\n *\n * 이미지를 파라미터로 전달하고, 설정한 리사이즈 옵션에 따라 이미지를 리사이징하고 리턴한다.\n * 리턴하는 데이터타입은 전달받은 데이터 타입과 동일하게 한다.\n * base64 string을 전달받은 경우는 base64 string을 리턴하고\n * file 타입을 전달받은 경우는 file 타입을 리턴한다.\n *\n * options 규칙\n * width 와 height 중 1개가 존재하는 경우 해당 사이즈에 맞게 원본비율유지하여 축소한다.\n * width 와 height 가 모두 존재하는 경우 해당 사이즈에 맞게 원본비율을 무시하고 리사이즈한다.\n *\n * filesize 옵션이 존재하는 경우는 width,height 옵션을 무시하고, filesize 이하로 원본비율 축소한다.\n *\n * width, height 의 단위는 px 이다.\n *\n * ext는 리턴데이터 타입이 파일인 경우, 사용할 파일확장자 이다.\n * ext가 설정된 값이 없는 경우는, 기본값으로 jpeg를 사용한다.\n *\n */\nexport function resize<T extends string | File>(\n image: T,\n options: cameraOptions['resize'] = { ext: 'jpeg', filesize: maxImageSize }\n): Promise<T> {\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n reject(new Error('Canvas context를 생성할 수 없습니다.'));\n\n return;\n }\n\n const img = new Image();\n img.crossOrigin = 'anonymous';\n\n img.onload = () => {\n let { width, height } = img;\n const { filesize, ext } = options;\n\n // filesize 옵션이 있는 경우 width, height 옵션을 무시하고 filesize 이하로 원본비율 축소\n if (filesize) {\n const originalSize = width * height * 4; // RGBA 4바이트\n if (originalSize > filesize) {\n const ratio = Math.sqrt(filesize / originalSize);\n width = Math.floor(width * ratio);\n height = Math.floor(height * ratio);\n }\n } else {\n // width, height 옵션 처리\n const { width: targetWidth, height: targetHeight } = options;\n\n if (targetWidth && targetHeight) {\n // width와 height가 모두 존재하는 경우 원본비율 무시하고 리사이즈\n width = targetWidth;\n height = targetHeight;\n } else if (targetWidth) {\n // width만 존재하는 경우 원본비율 유지하여 축소\n const ratio = targetWidth / width;\n width = targetWidth;\n height = Math.floor(height * ratio);\n } else if (targetHeight) {\n // height만 존재하는 경우 원본비율 유지하여 축소\n const ratio = targetHeight / height;\n height = targetHeight;\n width = Math.floor(width * ratio);\n }\n }\n\n // canvas 크기 설정\n canvas.width = width;\n canvas.height = height;\n\n // 이미지 그리기\n ctx.drawImage(img, 0, 0, width, height);\n\n // 결과 반환\n if (typeof image === 'string') {\n // base64 string인 경우\n const mimeType = ext === 'png' ? 'image/png' : 'image/jpeg';\n const quality = ext === 'png' ? 1.0 : 0.8;\n const base64 = canvas.toDataURL(mimeType, quality);\n resolve(base64 as T);\n } else {\n // File인 경우\n canvas.toBlob(\n (blob) => {\n if (!blob) {\n reject(new Error('Blob을 생성할 수 없습니다.'));\n\n return;\n }\n\n const mimeType = ext === 'png' ? 'image/png' : 'image/jpeg';\n const fileName = image.name ? `${image.name.replace(/\\.[^/.]+$/, '') }.${ ext}` : `resized.${ ext}`;\n\n const resizedFile = new File([blob], fileName, { type: mimeType });\n resolve(resizedFile as T);\n },\n ext === 'png' ? 'image/png' : 'image/jpeg',\n ext === 'png' ? 1.0 : 0.8\n );\n }\n };\n\n img.onerror = () => {\n reject(new Error('이미지를 로드할 수 없습니다.'));\n };\n\n // 이미지 소스 설정\n if (typeof image === 'string') {\n img.src = image;\n } else {\n const reader = new FileReader();\n reader.onload = (e) => {\n if (e.target?.result) {\n img.src = e.target.result as string;\n } else {\n reject(new Error('파일을 읽을 수 없습니다.'));\n }\n };\n reader.onerror = () => {\n reject(new Error('파일을 읽을 수 없습니다.'));\n };\n reader.readAsDataURL(image);\n }\n });\n}\n","import { useEffect, useState } from 'react';\n\nimport { Attachment } from './attachment';\nimport { resize } from './resize';\n\nimport type { AttachedPhoto, cameraOptions } from './camera.types';\n\nconst genImageId = () => `camera-${Date.now()}-${Math.random()}`;\n\nexport function useCamera({\n onChange,\n resize: resizeOption,\n cameraOnly,\n onDelete,\n show,\n type = 'multiple',\n buttonText\n}: Partial<cameraOptions> = {}) {\n const [attachedPhotos, setAttachedPhotos] = useState<AttachedPhoto[]>([]);\n\n const findImage = (imageId: string) => {\n return attachedPhotos.find((image) => image.id === imageId);\n };\n\n /**\n * onClick시, input File생성후 카메라 또는 파일선택 호출\n */\n const onClick = () => {\n // input을 dom으로 생성, type='file' , cameraOnly 가 true이면 카메라만 실행가능하도록 input 을 설정\n // true가 아니면 이미지확장자파일과, 카메라선택 둘다 가능하도록 설정\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'image/*';\n\n if (cameraOnly) {\n // 카메라만 실행 가능하도록 설정\n input.capture = 'camera';\n }\n\n // 파일 선택 이벤트 리스너 추가\n input.addEventListener('change', async (event) => {\n const target = event.target as HTMLInputElement;\n const { files } = target;\n\n if (files && files.length > 0) {\n const file = files[0];\n // onChange 콜백 호출\n if (file) {\n const resizedFile = await resize(file, resizeOption);\n const newPhoto: AttachedPhoto = {\n id: genImageId(),\n src: URL.createObjectURL(resizedFile),\n name: `서류사진_${attachedPhotos.length + 1}`\n };\n\n if (type === 'single') {\n setAttachedPhotos([newPhoto]);\n } else {\n setAttachedPhotos([...attachedPhotos, newPhoto]);\n }\n\n onChange && onChange(file);\n }\n }\n\n // input 요소 제거\n document.body.removeChild(input);\n });\n\n // input을 body에 추가하고 click 이벤트 발생\n input.style.display = 'none';\n document.body.appendChild(input);\n input.click();\n };\n\n /**\n * 선택한 이미지 삭제\n * @param imageId 이미지아이디\n */\n const deleteImage = (imageId: string) => {\n const imageIndex = attachedPhotos.findIndex((image) => image.id === imageId);\n if (imageIndex > -1) {\n const item = attachedPhotos.splice(imageIndex, 1);\n item[0] && URL.revokeObjectURL(item[0].src);\n setAttachedPhotos([...attachedPhotos]);\n onDelete && onDelete(imageId);\n }\n };\n\n const CameraComponent = () => (\n <Attachment\n show={!!show}\n onAddPhoto={onClick}\n onRemovePhoto={deleteImage}\n photos={attachedPhotos}\n type={type}\n buttonText={buttonText}\n />\n );\n\n useEffect(() => {\n return () => {\n // revoke all images url\n attachedPhotos.forEach((image) => {\n URL.revokeObjectURL(image.src);\n });\n };\n }, []);\n\n return {\n onClick,\n getImage: findImage,\n deleteImage,\n attachedPhotos,\n Attachment: CameraComponent\n };\n}\n","import { useRef, useEffect, useState, useCallback } from 'react';\n\nimport { DownloadProps, PaintProps } from './canvas-paint.types';\n\n/** undo, redo 가능한 히스토리 최대 저장 갯수 */\nconst HISTORY_SIZE = 100;\n\n/** 기본 다운로드 값 */\nconst DEFAULT_DOWNLOAD_PROPS: Required<DownloadProps> = {\n fileExtendsion: 'png',\n fileName: 'image',\n transparent: true,\n backgroundColor: 'white',\n width: 500,\n height: 500\n};\nexport function useCanvasPaint(paintProps: PaintProps = {}) {\n const { pen = { strokeWeight: 5, strokeColor: 'black' }, onChange, onStart, onEnd } = paintProps;\n const [canvasRefState, setCanvasRefState] = useState<HTMLCanvasElement | null>(null);\n const contextRef = useRef<CanvasRenderingContext2D | null>(null);\n\n const [isPainting, setIsPainting] = useState(false);\n const [history, setHistory] = useState<string[]>([]);\n const [historyIndex, setHistoryIndex] = useState(-1);\n\n const saveState = useCallback(() => {\n if (!canvasRefState) {\n return;\n }\n const dataUrl = canvasRefState.toDataURL();\n\n const newHistory = history.slice(0, historyIndex + 1);\n if (newHistory.length >= HISTORY_SIZE) {\n newHistory.shift();\n }\n newHistory.push(dataUrl);\n\n setHistory(newHistory);\n setHistoryIndex(newHistory.length - 1);\n onChange && onChange();\n }, [history, historyIndex, onChange, canvasRefState]);\n\n const restoreState = useCallback(\n (index: number) => {\n const context = contextRef.current;\n if (!canvasRefState || !context || !history[index]) {\n return;\n }\n\n const dataUrl = history[index];\n const img = new Image();\n img.onload = () => {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n context.drawImage(img, 0, 0);\n };\n img.src = dataUrl;\n onChange && onChange();\n },\n [history, onChange, canvasRefState]\n );\n\n useEffect(() => {\n if (!canvasRefState) {\n return;\n }\n const context = canvasRefState.getContext('2d', { willReadFrequently: true });\n if (!context) {\n return;\n }\n contextRef.current = context;\n\n const initialDataUrl = canvasRefState.toDataURL();\n setHistory([initialDataUrl]);\n setHistoryIndex(0);\n }, [canvasRefState]);\n\n useEffect(() => {\n const context = contextRef.current;\n if (context) {\n context.lineWidth = pen.strokeWeight;\n context.strokeStyle = pen.strokeColor;\n }\n }, [pen]);\n\n /**\n * @description canvas의 크기가 동적으로 생성되는 경우,\n * 포인터의 위치가 맞지않는 이슈를 해결하기위한,\n * scale조정하는 함수입니다.\n */\n const getEventPosition = useCallback(\n (event: MouseEvent | TouchEvent) => {\n if (!canvasRefState) {\n return null;\n }\n\n const rect = canvasRefState.getBoundingClientRect();\n const scaleX = canvasRefState.width / rect.width;\n const scaleY = canvasRefState.height / rect.height;\n\n let clientX;\n let clientY;\n\n if (event instanceof MouseEvent) {\n clientX = event.clientX;\n clientY = event.clientY;\n } else if (event instanceof TouchEvent) {\n const touch = event.touches[0];\n if (!touch) {\n return null;\n }\n clientX = touch.clientX;\n clientY = touch.clientY;\n } else {\n return null;\n }\n\n const offsetX = (clientX - rect.left) * scaleX;\n const offsetY = (clientY - rect.top) * scaleY;\n\n return { offsetX, offsetY };\n },\n [canvasRefState]\n );\n\n const startPainting = useCallback(\n (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n const context = contextRef.current;\n if (!context) {\n return;\n }\n const pos = getEventPosition(event);\n if (!pos) {\n return;\n }\n onStart && onStart();\n const { offsetX, offsetY } = pos;\n context.beginPath();\n context.moveTo(offsetX, offsetY);\n setIsPainting(true);\n },\n [onStart, getEventPosition]\n );\n\n const stopPainting = useCallback(() => {\n const context = contextRef.current;\n if (!context || !isPainting) {\n return;\n }\n context.closePath();\n setIsPainting(false);\n onEnd && onEnd();\n saveState();\n }, [isPainting, onEnd, saveState]);\n\n const paint = useCallback(\n (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n if (!isPainting || !contextRef.current) {\n return;\n }\n const pos = getEventPosition(event);\n if (!pos) {\n return;\n }\n const { offsetX, offsetY } = pos;\n contextRef.current.lineTo(offsetX, offsetY);\n contextRef.current.stroke();\n },\n [isPainting, getEventPosition]\n );\n\n useEffect(() => {\n if (!canvasRefState) {\n return;\n }\n\n canvasRefState.addEventListener('mousedown', startPainting);\n canvasRefState.addEventListener('mouseup', stopPainting);\n canvasRefState.addEventListener('mousemove', paint);\n canvasRefState.addEventListener('mouseleave', stopPainting);\n\n canvasRefState.addEventListener('touchstart', startPainting);\n canvasRefState.addEventListener('touchend', stopPainting);\n canvasRefState.addEventListener('touchmove', paint);\n canvasRefState.addEventListener('touchcancel', stopPainting);\n\n return () => {\n canvasRefState.removeEventListener('mousedown', startPainting);\n canvasRefState.removeEventListener('mouseup', stopPainting);\n canvasRefState.removeEventListener('mousemove', paint);\n canvasRefState.removeEventListener('mouseleave', stopPainting);\n\n canvasRefState.removeEventListener('touchstart', startPainting);\n canvasRefState.removeEventListener('touchend', stopPainting);\n canvasRefState.removeEventListener('touchmove', paint);\n canvasRefState.removeEventListener('touchcancel', stopPainting);\n };\n }, [startPainting, stopPainting, paint, canvasRefState]);\n\n const clear = () => {\n const context = contextRef.current;\n if (canvasRefState && context) {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n const initialDataUrl = canvasRefState.toDataURL();\n setHistory([initialDataUrl]);\n setHistoryIndex(0);\n onChange && onChange();\n }\n };\n\n const undo = () => {\n if (historyIndex > 0) {\n const newIndex = historyIndex - 1;\n setHistoryIndex(newIndex);\n restoreState(newIndex);\n }\n };\n\n const redo = () => {\n if (historyIndex < history.length - 1) {\n const newIndex = historyIndex + 1;\n setHistoryIndex(newIndex);\n restoreState(newIndex);\n }\n };\n\n const loadImage = (base64String: string) => {\n const context = contextRef.current;\n if (!canvasRefState || !context) {\n return;\n }\n\n const img = new Image();\n img.onload = () => {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n context.drawImage(img, 0, 0, canvasRefState.width, canvasRefState.height);\n saveState();\n };\n img.src = base64String;\n };\n\n const getBase64String = (imageProps: DownloadProps) => {\n const props = { ...DEFAULT_DOWNLOAD_PROPS, ...imageProps };\n const { fileExtendsion, transparent, backgroundColor, width, height } = props;\n const originalCanvas = canvasRefState;\n if (!originalCanvas) {\n return;\n }\n\n const tempCanvas = document.createElement('canvas');\n tempCanvas.width = width;\n tempCanvas.height = height;\n const tempCtx = tempCanvas.getContext('2d');\n\n if (tempCtx) {\n if (!transparent) {\n tempCtx.fillStyle = backgroundColor || 'white';\n tempCtx.fillRect(0, 0, width, height);\n }\n tempCtx.drawImage(originalCanvas, 0, 0, width, height);\n\n return tempCanvas.toDataURL(`image/${fileExtendsion}`);\n }\n };\n\n const download = (downloadProps: DownloadProps) => {\n const props = { ...DEFAULT_DOWNLOAD_PROPS, ...downloadProps };\n const { fileName, fileExtendsion, transparent, backgroundColor, width, height } = props;\n const originalCanvas = canvasRefState;\n if (!originalCanvas) {\n return;\n }\n\n const tempCanvas = document.createElement('canvas');\n tempCanvas.width = width;\n tempCanvas.height = height;\n const tempCtx = tempCanvas.getContext('2d');\n\n if (tempCtx) {\n if (!transparent) {\n tempCtx.fillStyle = backgroundColor || 'white';\n tempCtx.fillRect(0, 0, width, height);\n }\n tempCtx.drawImage(originalCanvas, 0, 0, width, height);\n\n const link = document.createElement('a');\n link.download = `${fileName}.${fileExtendsion}`;\n link.href = tempCanvas.toDataURL(`image/${fileExtendsion}`);\n link.click();\n }\n };\n /**\n * canvasRef.current canvas 에 데이터가 있는지 확인후 boolean 리턴\n * @returns boolean\n */\n const isCanvasBlank = () => {\n if (!canvasRefState) {\n return true;\n }\n\n // 캔버스 크기 가져오기\n const { width, height } = canvasRefState;\n\n // 2D 렌더링 컨텍스트 가져오기\n const ctx = canvasRefState.getContext('2d');\n if (!ctx) {\n console.error('2D context not available');\n\n return true; // 컨텍스트가 없으면 비어있는 것으로 간주\n }\n\n // 캔버스 전체 영역의 픽셀 데이터 가져오기\n const imageData = ctx.getImageData(0, 0, width, height);\n const { data } = imageData;\n\n // 픽셀 데이터의 알파(alpha) 값을 순회하며 확인\n // RGBA 순서이므로 알파 값은 3, 7, 11, ... 인덱스에 위치\n for (let i = 0; i < data.length; i += 4) {\n // 알파 값이 0이 아니면 (불투명한 부분이 있으면)\n if (data[i + 3] !== 0) {\n return false; // 캔버스가 비어있지 않음\n }\n }\n\n // 모든 픽셀의 알파 값이 0이면 (모두 투명하면)\n return true; // 캔버스가 비어있음\n };\n\n return {\n clear,\n undo,\n redo,\n loadImage,\n download,\n getBase64String,\n isCanvasBlank,\n setCanvasRefState,\n canvasRefState\n };\n}\n","/**\n * 서명로드용 base64 string\n */\nexport const testSignatureBase64Data =\n 'data:image/png;base64,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';\n","import React, { useEffect, useState } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { Address } from 'sales-frontend-api/method';\nimport { Button, FormCore, Icon, Modal, ModalBaseProps, RadioGroup, FormField } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { AddressSearchDetailInputProps, AddressSearchResultProps, FullAddress, Step } from './address.types';\nimport styles from './select-address.module.scss';\nimport { useSearchAddress } from './use-search-address';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\n\nexport const AddressSearchInitialText = () => {\n return (\n <div>\n <p className={cx('guide-title')}>이렇게 검색해 보세요.</p>\n <ul className={cx('guide')}>\n <li>도로명/지명과 건물번호를 함께 입력해주세요</li>\n <li>예) 63로 50, 여의도동 60</li>\n <li>지명은 동/읍/면/리로 입력해주세요</li>\n <li>예) 여의도동, 역삼동</li>\n <li>우편번호 다섯자리를 모두 입력해주세요</li>\n <li>예) 07345, 06232</li>\n </ul>\n </div>\n );\n};\n\nexport const AddressSearchResult = ({\n addressSearchList,\n onChange,\n searchKeyword,\n selectedAddress\n}: AddressSearchResultProps) => {\n const [filterList, setFilterList] = useState<Address[]>([]);\n\n useEffect(() => {\n const filterList =\n addressSearchList.filter(\n (item) => item.address.includes(searchKeyword) || item.oldAddress.includes(searchKeyword)\n ) || [];\n setFilterList(filterList);\n }, [addressSearchList, searchKeyword]);\n\n return (\n <div>\n <p className={cx('guide-title')}>\n 총 <span className=\"text-primary\">{filterList.length}</span>건의 검색결과\n </p>\n {filterList.length > 0 && (\n <RadioGroup\n items={filterList.map((item: Address) => ({\n value: item.address,\n select: item.address === selectedAddress?.address && item.zipCode === selectedAddress?.zipCode,\n label: (\n <div className={cx('search-result')}>\n <div className={cx('zipcode')}> {highlightOnSearchKeyword(item.zipCode, searchKeyword)}</div>\n <div className={cx('divider')}></div>\n <div className={cx('address-info')}>\n <span className={cx('address')}>{highlightOnSearchKeyword(item.address, searchKeyword)}</span>\n <span className={cx('old-address')}>{highlightOnSearchKeyword(item.oldAddress, searchKeyword)}</span>\n </div>\n </div>\n ),\n id: item.address\n }))}\n className={cx('radio-group')}\n name=\"address-search\"\n size=\"medium\"\n defaultValue={''}\n onChange={onChange}\n />\n )}\n {filterList.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchKeyword}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n );\n};\n\nexport const AddressSearchDetailInput = ({\n selectedAddress,\n onDetailChange,\n step,\n detailAddressInput\n}: AddressSearchDetailInputProps) => {\n return (\n <div>\n <div>\n <div> {selectedAddress.zipCode}</div>\n <div>\n |<span>{`${selectedAddress.address}`}</span>\n </div>\n </div>\n <div>\n <FormField.Label id=\"detail\" style={{ width: '90px' }}>\n 상세주소\n </FormField.Label>\n <Input\n placeholder=\"상세주소 입력\"\n onChange={onDetailChange}\n size=\"large\"\n value={detailAddressInput}\n {...(step === 'detail-input' && { autoFocus: true })}\n />\n </div>\n </div>\n );\n};\n\nexport interface AddressSearchModalProps extends ModalBaseProps {\n onClose: () => void;\n isOpen: boolean;\n searchKeyword: string;\n step: Step;\n selectedAddress: Address | null;\n addressList: Address[];\n filterList: Address[];\n onClear: () => void;\n onSearch: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onKeyUp: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n onNext: () => void;\n setSelectedAddress: (address: Address) => void;\n setDetailAddress: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onSelectChange: (value: string) => void;\n}\n\ninterface Props {\n setValue: (address: FullAddress) => void;\n onClose: () => void;\n isOpen: boolean;\n}\n\nexport function AddressComponent({ isOpen, onClose, setValue }: Props) {\n const {\n onAddressSearchClear,\n addressSearchKeyword,\n addressSearchStep,\n onAddressSearchNext,\n nextButtonDisabled,\n detailAddressInput,\n addressSearchList,\n onSearch,\n onKeyUp,\n onSelectChange,\n setDetail,\n search,\n searchInput,\n selectedAddress\n } = useSearchAddress({\n setValue,\n onClose,\n isOpen\n });\n\n return (\n <>\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"주소 검색\" showCloseButton />\n <Modal.Body>\n <InputBox\n clearable\n endElement={<Icon name=\"sub-ui/search\" onClick={search} />}\n onClear={onAddressSearchClear}\n >\n <Input\n {...(addressSearchStep !== 'detail-input' && { autoFocus: true })}\n onChange={onSearch}\n onKeyUp={onKeyUp}\n value={searchInput}\n placeholder=\"지번, 도로명, 건물명, 우편번호 입력\"\n size=\"large\"\n />\n </InputBox>\n {addressSearchStep === 'initial' && <AddressSearchInitialText />}\n {addressSearchStep === 'search-result' && (\n <AddressSearchResult\n onChange={onSelectChange}\n addressSearchList={addressSearchList || []}\n searchKeyword={addressSearchKeyword}\n selectedAddress={selectedAddress}\n />\n )}\n {addressSearchStep === 'detail-input' && selectedAddress && (\n <AddressSearchDetailInput\n selectedAddress={selectedAddress}\n onDetailChange={setDetail}\n step={addressSearchStep}\n detailAddressInput={detailAddressInput}\n />\n )}\n </Modal.Body>\n <Modal.Footer>\n {addressSearchStep !== 'initial' && (\n <Button\n onClick={onAddressSearchNext}\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n disabled={nextButtonDisabled}\n >\n {addressSearchStep === 'search-result' && '다음(1/2)'}\n {addressSearchStep === 'detail-input' && '확인(2/2)'}\n </Button>\n )}\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n </>\n );\n}\n","import React, { useState, useEffect, useCallback } from 'react';\n\nimport { Address, useSearchModalAddressQuery } from 'sales-frontend-api/method';\nimport { useModalState } from 'sales-frontend-design-system';\n\nimport { AddressComponent } from './address-search-modal';\nimport { FullAddress, Step } from './address.types';\ninterface Props {\n setValue: (address: FullAddress) => void;\n onClose: () => void;\n isOpen: boolean;\n}\nexport function useSearchAddress({ setValue, onClose, isOpen }: Props) {\n const [searchKeyword, setSearchKeyword] = useState<string>('');\n const [step, setStep] = useState<Step>('initial');\n const [selectedAddress, setSelectedAddress] = useState<Address | null>(null);\n const [searchInput, setSearchInput] = useState<string>('');\n const [detailAddressInput, setDetailAddressInput] = useState<string>('');\n\n const { data: addressList } = useSearchModalAddressQuery({ searchKeyword });\n const [nextButtonDisabled, setNextButtonDisabled] = useState<boolean>(false);\n const onNext = () => {\n if (step === 'search-result') {\n setStep('detail-input');\n setNextButtonDisabled(true);\n } else {\n setValue({\n address: selectedAddress?.address || '',\n oldAddress: selectedAddress?.oldAddress || '',\n zipCode: selectedAddress?.zipCode || '',\n detail: detailAddressInput || ''\n });\n onClose();\n }\n };\n\n /**\n * 검색어 입력창 onChange\n */\n const onSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const typeStr = e.target.value;\n setSearchInput(typeStr);\n };\n\n /**\n * 검색\n */\n const search = () => {\n if (searchInput === '') {\n onClear();\n\n return;\n }\n if (searchInput && searchInput.length > 1) {\n setSearchKeyword(searchInput);\n setStep('search-result');\n setSelectedAddress(null);\n setDetailAddressInput('');\n setNextButtonDisabled(true);\n }\n };\n\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n search();\n }\n };\n\n /**\n * 검색결과 Radio 버튼 선택시, onChange\n */\n const onSelectChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const selectedAddress = e.target.value;\n if (selectedAddress) {\n const adr = addressList?.find((addr) => {\n return addr.address === selectedAddress;\n });\n setSelectedAddress(adr || null);\n setNextButtonDisabled(false);\n }\n };\n\n /**\n * 검색어입력창 초기화\n */\n const onClear = useCallback(() => {\n setSearchKeyword('');\n setSearchInput('');\n setSelectedAddress(null);\n setDetailAddressInput('');\n setStep('initial');\n }, []);\n\n /**\n * 상세주소 저장\n */\n const setDetail = (e: React.ChangeEvent<HTMLInputElement>) => {\n const detail = e.target.value;\n setDetailAddressInput(detail);\n if (detail) {\n setNextButtonDisabled(false);\n } else {\n setNextButtonDisabled(true);\n }\n };\n\n useEffect(() => {\n /**\n * 모달 오픈시, 상태 초기화\n */\n if (isOpen) {\n setSelectedAddress(null);\n setDetailAddressInput('');\n\n setStep('initial');\n setSearchKeyword('');\n }\n }, [isOpen]);\n\n return {\n onAddressSearchClear: onClear,\n onAddressSearchNext: onNext,\n addressSearchKeyword: searchKeyword,\n addressSearchList: addressList,\n addressSearchStep: step,\n selectedAddress,\n addressSearchOnValueChange: onSelectChange,\n nextButtonDisabled,\n detailAddressInput,\n onSearch,\n onKeyUp,\n onSelectChange,\n setDetail,\n search,\n searchInput\n };\n}\n\nexport const useAddressComponent = () => {\n const [fullAddress, setFullAddress] = useState<FullAddress | null>(null);\n\n const { isOpen, closeModal, openModal } = useModalState();\n\n const AddressSearchComponent = () => (\n <AddressComponent isOpen={isOpen} onClose={closeModal} setValue={setFullAddress} />\n );\n\n return {\n fullAddress,\n openModal,\n AddressSearchComponent\n };\n};\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { Icon } from 'sales-frontend-design-system';\n\nimport styles from './job-vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\n\ninterface JobVehicleSearchGradeProps {\n riskGrade?: string | number;\n hospitalizationGrade?: string | number;\n}\n\nexport const JobVehicleSearchGrade = ({ riskGrade, hospitalizationGrade }: JobVehicleSearchGradeProps) => {\n return (\n <div className={cx('grade-section')}>\n <div className={cx('icon-title')}>\n <Icon name=\"illust/grade\" />\n <span className=\"typo-title5 text-body\">등급</span>\n </div>\n <p className=\"typo-body2 text-body_3\">직종, 운전 여부 선택시 자동으로 산정됩니다.</p>\n\n <div className={cx('grade-list')}>\n <div className={cx('grade')}>\n <span>위험등급</span>\n <span className=\"text-primary typo-subtitle3\">{riskGrade || '-'}</span>\n </div>\n <div className={cx('grade')}>\n <span>입원등급</span>\n <span className=\"text-primary typo-subtitle3\">{hospitalizationGrade || '-'}</span>\n </div>\n </div>\n </div>\n );\n};\n","import classNames from 'classnames/bind';\nimport { VehicleTypeResponseDto } from 'sales-frontend-api/method';\nimport { Radio } from 'sales-frontend-design-system';\n\nimport styles from './vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\ninterface VehicleSearchProps {\n vehicles: VehicleTypeResponseDto[];\n onVehicleSelect: (vehicle: VehicleTypeResponseDto) => void;\n}\n\nexport function VehicleSearch({ vehicles, onVehicleSelect }: VehicleSearchProps) {\n return (\n <div className={cx('vehicle-search-section')}>\n <p>운전 차종</p>\n <Radio.Root name=\"vehicle-selection\" size=\"small\" className={cx('vehicle-radio-root')}>\n {vehicles.map((vehicle, index) => (\n <Radio.Item\n key={`item-${vehicle.integrationCodeValue}-${index}`}\n id={`item-${vehicle.integrationCodeValue}`}\n size=\"small\"\n value={vehicle.integrationCodeValue || ''}\n onChange={(e) => {\n const { value } = e.target;\n console.log(e.target.value);\n const selected = vehicles.find((v) => v.integrationCodeValue === value);\n if (selected) {\n onVehicleSelect(selected);\n }\n }}\n className={cx('item')}\n >\n {vehicle.integrationCodeValueName}({vehicle.integrationCodeValue})\n </Radio.Item>\n ))}\n </Radio.Root>\n </div>\n );\n}\n","import { useState } from 'react';\n\nimport { useSearchVehicleQuery, VehicleTypeResponseDto } from 'sales-frontend-api/method';\n\nimport { VehicleSearch } from './vehicle-search';\n\nexport const useVehicleSearch = () => {\n const [selectedVehicle, setSelectedVehicle] = useState<VehicleTypeResponseDto>();\n const { data } = useSearchVehicleQuery();\n\n // useSearchVehicleQuery\n return {\n VehicleSearchComponent: (\n <VehicleSearch vehicles={data?.data?.vehicleTypeList || []} onVehicleSelect={setSelectedVehicle} />\n ),\n selectedVehicle,\n setSelectedVehicle,\n vehicleList: data\n };\n};\n","import { useEffect, useState } from 'react';\n\nimport { useJobSearchModal } from '../job-search-modal/use-job-search';\nimport { useVehicleSearch } from '../vehicle-search-modal/use-vehicle-search';\n\nexport const useJobVehicleSearch = () => {\n const [rightPanelView, setRightPanelView] = useState('jobSearch'); // 'jobSearch' or 'vehicleSelection'\n const [riskGrade, setRiskGrade] = useState<string>('');\n const [hospitalizationGrade, setHospitalizationGrade] = useState<string>('');\n const { selectedJob, JobSearchComponent } = useJobSearchModal();\n const { selectedVehicle, VehicleSearchComponent } = useVehicleSearch();\n\n useEffect(() => {\n if (selectedJob && selectedVehicle) {\n /**\n * 직종,차종이 모두 선택된 경우 등급 계산 API 호출\n * @todo\n */\n setRiskGrade('일반(비위험직)(0)');\n setHospitalizationGrade('일반입원(비위험직)(0)');\n }\n }, [selectedJob, selectedVehicle]);\n\n return {\n selectedVehicle,\n rightPanelView,\n setRightPanelView,\n selectedJob,\n JobSearch: JobSearchComponent,\n VehicleSearch: VehicleSearchComponent,\n riskGrade,\n hospitalizationGrade\n };\n};\n","import classNames from 'classnames/bind';\nimport { Icon, ModalUtils, useModalState } from 'sales-frontend-design-system';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { JobVehicleSearchGrade } from './job-vehicle-search-grade';\nconst cx = classNames.bind(styles);\nimport styles from './job-vehicle-search-modal.module.scss';\nimport { useJobVehicleSearch } from './use-job-vehicle-search';\n\nexport function useJobVehicleSearchModal() {\n const {\n selectedVehicle,\n rightPanelView,\n setRightPanelView,\n selectedJob,\n JobSearch,\n VehicleSearch,\n riskGrade,\n hospitalizationGrade\n } = useJobVehicleSearch();\n const { isOpen, openModal, closeModal } = useModalState({ initialValue: true });\n\n const validate = () => {\n console.log({ selectedJob, selectedVehicle });\n if (!selectedJob && !selectedVehicle) {\n return ModalUtils.alert(\n '직종과 운전 여부·차종을 모두 선택해야 등급 산정이 가능합니다.',\n '직종과 운전 여부·차종을 선택해주세요',\n {\n modalSize: 'small'\n }\n );\n }\n if (!selectedJob) {\n return ModalUtils.alert('직종을 선택해야 등급 산정이 가능합니다.', '직종을 선택해주세요', {\n modalSize: 'small'\n });\n }\n if (!selectedVehicle) {\n return ModalUtils.alert('운전 여부·차종을 선택해야 등급 산정이 가능합니다.', '운전 여부·차종을 선택해주세요', {\n modalSize: 'small'\n });\n }\n closeModal();\n };\n\n return {\n selectedJob,\n selectedVehicle,\n riskGrade,\n hospitalizationGrade,\n openJobVehicleModal: openModal,\n JobVehicleSearchModalComponent: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"직종·운전차종 검색\" showCloseButton />\n <Modal.Body className={cx('job-vehicle-search-modal')} raw>\n <>\n <div className={cx('left-panel')}>\n <div className={cx('card-section')}>\n <div\n className={cx('card-menu', { 'card-selected': rightPanelView === 'jobSearch' })}\n onClick={() => setRightPanelView('jobSearch')}\n >\n <div className={cx('card-title')}>\n <Icon name=\"illust/job\" className={cx('card-icon')} />\n <span className={cx('card-text', 'typo-title5', 'text-body')}>직종</span>\n <Icon name=\"sub-ui/arrow/right\" />\n </div>\n <div className=\"typo-body2 text-body_2\">\n {selectedJob ? selectedJob.occupationIndustryName : '미선택'}\n </div>\n </div>\n <div\n className={cx('card-menu', { 'card-selected': rightPanelView === 'vehicleSelection' })}\n onClick={() => setRightPanelView('vehicleSelection')}\n >\n <div className={cx('card-title')}>\n <Icon name=\"illust/vehicle\" className={cx('card-icon')} />\n <span className={cx('card-text', 'typo-title5', 'text-body')}>운전 여부·차종</span>\n <Icon name=\"sub-ui/arrow/right\" />\n </div>\n <div className=\"typo-body2 text-body_2\">\n {selectedVehicle?.integrationCodeValueName}\n {selectedVehicle?.integrationCodeValue || '미선택'}\n </div>\n </div>\n </div>\n <JobVehicleSearchGrade riskGrade={riskGrade} hospitalizationGrade={hospitalizationGrade} />\n </div>\n <div className={cx('right-panel')}>{rightPanelView === 'jobSearch' ? JobSearch : VehicleSearch}</div>\n </>\n </Modal.Body>\n <Modal.Footer style={{ marginTop: 0 }}>\n <Button variant=\"primary\" size=\"medium\" appearance=\"filled\" width=\"full\" onClick={validate}>\n 확인\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n )\n };\n}\n","import React from 'react';\n\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { useJobSearchModal } from './use-job-search';\n\ninterface JobSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport const JobSearchModal: React.FC<JobSearchModalProps> = ({ onClose }) => {\n const { JobSearchComponent } = useJobSearchModal();\n\n return (\n <Modal.Root isOpen={true} onClose={onClose} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"직종 검색\" showCloseButton />\n <Modal.Body raw>{JobSearchComponent}</Modal.Body>\n <Modal.Footer>\n <Button variant=\"primary\" size=\"medium\" appearance=\"filled\" width=\"full\" onClick={onClose}>\n 확인\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["cx","styles","filterList","selectedAddress"],"mappings":"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","x_google_ignoreList":[5]}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/form/form-checkbox-button.tsx","../src/form/form-checkbox.tsx","../src/form/form-date-picker.tsx","../src/form/form-date-range-picker.tsx","../src/modal/pre-standard/job-search-modal/constants.ts","../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/bind.js","../src/modal/common.tsx","../src/modal/pre-standard/job-search-modal/job-search-category.tsx","../src/modal/pre-standard/job-search-modal/job-search-favorite.tsx","../src/modal/pre-standard/job-search-modal/job-search-result.tsx","../src/modal/pre-standard/job-search-modal/job-search.tsx","../src/modal/pre-standard/job-search-modal/use-job-search.tsx","../src/form/form-search-job-field.tsx","../src/form/form-segment.tsx","../src/form/form-select.tsx","../src/form/form-text-field.tsx","../src/step-indicator/step-indicator.tsx","../src/camera/attachment.tsx","../src/camera/resize.ts","../src/camera/use-camera.tsx","../src/canvas-paint/use-canvas-paint.ts","../src/canvas-paint/dummyData.ts","../src/modal/standard/address-search/address-search-modal.tsx","../src/modal/standard/address-search/use-search-address.tsx","../src/modal/standard/bank-stock-search/use-bank-stock-search.tsx","../src/modal/standard/bank-stock-search/bank-stock-search-modal.tsx","../src/modal/pre-standard/job-vehicle-search-modal/job-vehicle-search-grade.tsx","../src/modal/pre-standard/vehicle-search-modal/vehicle-search.tsx","../src/modal/pre-standard/vehicle-search-modal/use-vehicle-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/use-job-vehicle-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/job-vehicle-search.tsx","../src/modal/pre-standard/job-search-modal/job-search-modal.tsx"],"sourcesContent":["import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { CheckboxButton, type CheckboxButtonProps } from 'sales-frontend-design-system';\n\nexport const FormCheckboxButton = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n children,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & Omit<CheckboxButtonProps, 'id'>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <CheckboxButton\n {...props}\n {...field}\n id={field.name}\n checked={field.value ?? false}\n error={fieldState.invalid}\n onChange={(checked) => {\n field.onChange(checked);\n props.onChange?.(checked);\n }}\n >\n {children}\n </CheckboxButton>\n );\n};\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { Checkbox, CheckboxProps } from 'sales-frontend-design-system';\n\nexport const FormCheckbox = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n children,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & Omit<CheckboxProps, 'id'>) => {\n const { field } = useController({ name, control, disabled });\n\n return (\n <Checkbox {...props} {...field} id={field.name} checked={field.value} onChange={field.onChange}>\n {children}\n </Checkbox>\n );\n};\n","import React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { DatePicker, type DatePickerSingleHtmlProps } from 'sales-frontend-design-system';\n\nexport const FormDatePicker = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n defaultValue,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled' | 'defaultValue'> &\n DatePickerSingleHtmlProps) => {\n const { field, fieldState } = useController({ name, control, disabled, defaultValue });\n const [initialDate, setInitialDate] = React.useState<Date>();\n\n React.useEffect(() => {\n if (field.value) {\n setInitialDate(field.value);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultValue]);\n\n return (\n <DatePicker\n tabIndex={0}\n {...{\n ...props,\n ...field,\n id: field.name,\n defaultValue: initialDate,\n error: fieldState.invalid,\n onValueChange: field.onChange\n }}\n />\n );\n};\n","import React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { DateRangePicker, type PeriodDate, type DatePickerRangeHtmlProps } from 'sales-frontend-design-system';\n\nexport const FormDateRangePicker = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n defaultValue,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled' | 'defaultValue'> &\n DatePickerRangeHtmlProps) => {\n const { field, fieldState } = useController({ name, control, disabled, defaultValue });\n const [initialDate, setInitialDate] = React.useState<PeriodDate>();\n\n React.useEffect(() => {\n if (field.value) {\n setInitialDate(field.value);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultValue]);\n\n return (\n <DateRangePicker\n tabIndex={0}\n {...{\n ...props,\n ...field,\n id: field.name,\n defaultValue: initialDate,\n error: fieldState.invalid,\n onValueChange: (selected) => {\n if (field.value !== selected) {\n field.onChange(selected);\n }\n }\n }}\n />\n );\n};\n","export const JOB_SEARCH_TABS = [\n { value: 'jobName', label: '직종명 검색' },\n { value: 'jobCode', label: '분류로 검색' }\n];\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue.call(this, arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn this && this[arg] || arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(this, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, this && this[key] || key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","export const highlightOnSearchKeyword = (originalText: string, targetString: string) => {\n if (originalText?.includes(targetString)) {\n const replacedText = [];\n\n const splitText = originalText.split(targetString);\n\n for (let i = 0; i < splitText.length; i++) {\n replacedText.push(splitText[i]);\n\n if (i !== splitText.length - 1) {\n replacedText.push(<span className=\"text-primary\">{targetString}</span>);\n }\n }\n\n return replacedText;\n }\n\n return originalText;\n};\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Button, Radio, Table } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchCategory({ filteredJobs, onJobSelect, searchTerm }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('category-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredJobs.length}</span>건의 검색결과\n </p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')} onToggle={() => {}}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n id={`item-${job.occupationIndustryCode}-${index}-accordion`}\n key={`item-${job.occupationIndustryCode}-${index}`}\n >\n <Accordion.HeaderDiv>\n <div style={{ flex: 1 }}>\n <Radio.Item size=\"small\" value={job.occupationIndustryCode} onChange={() => onJobSelect(job)}>\n {highlightOnSearchKeyword(job.occupationIndustryName, searchTerm)}({job.occupationIndustryCode})\n </Radio.Item>\n </div>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <Table variant=\"horizontal\">\n <tbody>\n <tr>\n <th>헤더 1</th>\n <td className=\"px-24\">1행 1번째</td>\n <th>헤더 1-2</th>\n <td className=\"px-24 \">1행 2번째</td>\n </tr>\n <tr>\n <th>헤더 2</th>\n <td className=\"pl-24 pr-16\" colSpan={3}>\n <p className=\"d-flex-center-center\">\n 2행 1번째 <span className=\"flex-1 pipe-left\">서브텍스트</span>\n <Button variant=\"neutral\" size=\"xsmall\" appearance=\"outline\">\n 버튼명\n </Button>\n </p>\n </td>\n </tr>\n </tbody>\n </Table>\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n {filteredJobs.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchTerm}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Radio } from 'sales-frontend-design-system';\n\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchFavorite({ filteredJobs, onJobSelect }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('popular-jobs')}>\n <p>많이 찾는 직종</p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n key={`item-${job.occupationIndustryCode}-${index}`}\n id={`item-${job.occupationIndustryCode}-${index}`}\n className={cx('accordion-item')}\n >\n <Accordion.HeaderDiv className={cx('accordion-header-item')}>\n <Radio.Item\n size=\"small\"\n value={job.occupationIndustryCode}\n onChange={() => onJobSelect(job)}\n className={cx('radio-item')}\n >\n {job.occupationIndustryName}({job.occupationIndustryCode})\n </Radio.Item>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">항목 1 내용</Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n </div>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Button, Radio, Table } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchResult({ filteredJobs, onJobSelect, searchTerm }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('popular-jobs')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredJobs.length}</span>건의 검색결과\n </p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')}>\n {filteredJobs.map((job) => (\n <Accordion.Item\n id={`item-${job.occupationIndustryCode}`}\n key={job.occupationIndustryCode}\n // onClick={() => accordion.toggleItem(`item-${job.code}`)}\n >\n <Accordion.HeaderDiv>\n <div style={{ flex: 1 }}>\n <Radio.Item\n id={`item-${job.occupationIndustryCode}`}\n size=\"small\"\n value={job.occupationIndustryCode}\n onChange={() => {\n onJobSelect(job);\n }}\n >\n {highlightOnSearchKeyword(job.occupationIndustryName, searchTerm)}\n </Radio.Item>\n </div>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <Table variant=\"horizontal\">\n <tbody>\n <tr>\n <th>헤더 1</th>\n <td className=\"px-24\">1행 1번째</td>\n <th>헤더 1-2</th>\n <td className=\"px-24 \">1행 2번째</td>\n </tr>\n <tr>\n <th>헤더 2</th>\n <td className=\"pl-24 pr-16\" colSpan={3}>\n <p className=\"d-flex-center-center\">\n 2행 1번째 <span className=\"flex-1 pipe-left\">서브텍스트</span>\n <Button variant=\"neutral\" size=\"xsmall\" appearance=\"outline\">\n 버튼명\n </Button>\n </p>\n </td>\n </tr>\n </tbody>\n </Table>\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n {filteredJobs.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchTerm}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n </>\n );\n}\n","import { Dispatch, SetStateAction } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Tab, FormField, Icon, Select } from 'sales-frontend-design-system';\n\nimport { JOB_SEARCH_TABS } from './constants';\nimport { JobSearchCategory } from './job-search-category';\nimport { JobSearchFavorite } from './job-search-favorite';\nimport styles from './job-search-modal.module.scss';\nimport { JobSearchResult } from './job-search-result';\n\nconst { TextField } = FormField;\ninterface JobSearchProps {\n activeTab: string;\n onTabChange: (value: string) => void;\n searchTerm: string;\n setSearchInput: (value: string) => void;\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchInput: string;\n setSearchTerm: (value: string) => void;\n firstCategory: string;\n setFirstCategory: Dispatch<SetStateAction<string>>;\n secondCategory: string;\n setSecondCategory: Dispatch<SetStateAction<string>>;\n firstCategoryList: OccupationResponseDto[];\n secondCategoryList: OccupationResponseDto[];\n jobList?: OccupationResponseDto[];\n}\nconst cx = classNames.bind(styles);\nconst { Option } = Select;\nexport function JobSearch({\n activeTab,\n onTabChange,\n searchTerm,\n setSearchInput,\n filteredJobs,\n onJobSelect,\n setSearchTerm,\n searchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n firstCategoryList,\n secondCategoryList\n}: JobSearchProps) {\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n setSearchTerm(searchInput);\n }\n };\n\n return (\n <>\n <Tab.Root\n defaultValue={activeTab}\n onValueChange={onTabChange}\n scroll=\"fixed\"\n size=\"small\"\n variant=\"sub\"\n style={{ gap: 0, overflow: 'visible' }}\n >\n {JOB_SEARCH_TABS.map((tab) => (\n <Tab.Item key={tab.value} value={tab.value}>\n {tab.label}\n </Tab.Item>\n ))}\n </Tab.Root>\n <div>\n {activeTab === 'jobName' && (\n <div className={cx('favorite-jobs-section')}>\n <TextField\n placeholder=\"직종명 검색\"\n value={searchInput}\n onKeyUp={onKeyUp}\n onChange={(e) => setSearchInput(e.target.value)}\n className={styles.searchInput}\n size=\"medium\"\n rootProps={{\n endElement: <Icon name=\"sub-ui/search\" onClick={() => setSearchTerm(searchInput)} />,\n onClear: () => {\n setSearchTerm('');\n setSearchInput('');\n }\n }}\n />\n {!searchTerm && <JobSearchFavorite filteredJobs={filteredJobs} onJobSelect={onJobSelect} />}\n {searchTerm && (\n <JobSearchResult filteredJobs={filteredJobs} onJobSelect={onJobSelect} searchTerm={searchTerm} />\n )}\n </div>\n )}\n {activeTab === 'jobCode' && (\n <div className={cx('select-jobs-section')}>\n <div className={cx('category-section')}>\n <Select\n name=\"first_category\"\n onChange={(value) => {\n setFirstCategory(value);\n setSecondCategory('');\n }}\n placeholder=\"대분류 선택\"\n rootProps={{\n style: {\n // width: '300px'\n }\n }}\n size=\"large\"\n value={firstCategory}\n >\n {firstCategoryList.map((option, index) => (\n <Option key={`${index}-${option.occupationIndustryCode}`} value={option.occupationIndustryCode}>\n {option.occupationIndustryName}\n </Option>\n ))}\n </Select>\n <Select\n name=\"second_category\"\n onChange={setSecondCategory}\n placeholder=\"중분류 선택\"\n rootProps={{\n style: {\n // width: '300px'\n }\n }}\n size=\"large\"\n value={secondCategory}\n disabled={!firstCategory}\n >\n {secondCategoryList.map((option, index) => (\n <Option key={`${index}-${option.occupationIndustryCode}`} value={option.occupationIndustryCode}>\n {option.occupationIndustryName}\n </Option>\n ))}\n </Select>\n </div>\n\n {firstCategory && secondCategory && (\n <JobSearchCategory filteredJobs={filteredJobs} onJobSelect={onJobSelect} searchTerm={searchTerm} />\n )}\n </div>\n )}\n </div>\n </>\n );\n}\n","import { useEffect, useState } from 'react';\n\nimport { OccupationResponseDto, useSearchOccupationQuery } from 'sales-frontend-api/method';\nimport { Button, Modal, useModalState } from 'sales-frontend-design-system';\n\nimport { JOB_SEARCH_TABS } from './constants';\nimport { JobSearch } from './job-search';\n\n/**\n * 초기값(많이 찾는 직종)\n * 회사 사무직 종사자\n * 경영지원 사무직 종사자\n * 주부\n * 주방장 및 조리사\n * 보험설계사(당사)\n */\nconst initData: OccupationResponseDto[] = [\n {\n occupationIndustryCode: '430101',\n occupationIndustryName: '회사 사무직 종사자',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '400301',\n occupationIndustryName: '경영지원 사무직 관리자',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '510201',\n occupationIndustryName: '전업주부',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '442501',\n occupationIndustryName: '주방장 및 조리사(선박 조리사 제외)',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '450303',\n occupationIndustryName: '보험설계사(당사)',\n occupationTypeCode: null,\n historySequence: 0\n }\n];\n\nconst useJobSearch = () => {\n const [activeTab, setActiveTab] = useState<string>(JOB_SEARCH_TABS[0]?.value ?? '');\n const [selectedJob, setSelectedJob] = useState<OccupationResponseDto | null>(null);\n const [searchTerm, setSearchTerm] = useState<string>('');\n const [searchInput, setSearchInput] = useState<string>('');\n const handleJobSelect = (job: OccupationResponseDto) => {\n setSelectedJob(job);\n };\n const [firstCategory, setFirstCategory] = useState<string>('');\n const [secondCategory, setSecondCategory] = useState<string>('');\n const [jobList, setJobList] = useState<OccupationResponseDto[]>(initData);\n const [firstCategoryList, setFirstCategoryList] = useState<OccupationResponseDto[]>([]);\n const [secondCategoryList, setSecondCategoryList] = useState<OccupationResponseDto[]>([]);\n const { data } = useSearchOccupationQuery({\n occupationMajorCategoryCode: firstCategory,\n occupationSearchTypeCode: searchTerm ? '4' : '3',\n occupationSubCategoryCode: secondCategory,\n searchOccupationIndustryName: searchTerm\n });\n const { data: firstCategoryData } = useSearchOccupationQuery({\n occupationMajorCategoryCode: '',\n occupationSearchTypeCode: '1',\n occupationSubCategoryCode: '',\n searchOccupationIndustryName: ''\n });\n const { data: secondCategoryData } = useSearchOccupationQuery({\n occupationMajorCategoryCode: firstCategory,\n occupationSearchTypeCode: '2',\n occupationSubCategoryCode: '',\n searchOccupationIndustryName: ''\n });\n\n useEffect(() => {\n if (data && searchTerm && activeTab === 'jobName') {\n /** 검색어가 있고, 검색된 데이터가 있는 경우 */\n const filteredJobs = data.data.occupationList.filter((job) => job.occupationIndustryName.includes(searchTerm));\n setJobList(filteredJobs);\n } else if (!data && searchTerm && activeTab === 'jobName') {\n /** 검색어가 있고, 검색된 데이터가 없는 경우 */\n setJobList([]);\n } else if (!searchTerm && activeTab === 'jobName') {\n /** 검색어가 없고, 검색된 데이터가 없는 경우 , 많이 찾는 직종 노출 */\n setJobList(initData);\n } else if (activeTab === 'jobCode' && firstCategory && secondCategory) {\n /** 대분류, 중분류 선택된 경우 */\n setJobList(data?.data.occupationList || []);\n }\n }, [searchTerm, data, firstCategory, secondCategory, secondCategoryData, activeTab]);\n\n useEffect(() => {\n console.log('jobList', jobList);\n }, [jobList]);\n\n useEffect(() => {\n if (firstCategoryData) {\n setFirstCategoryList(firstCategoryData.data.occupationList);\n }\n }, [firstCategoryData]);\n\n useEffect(() => {\n if (secondCategoryData) {\n setSecondCategoryList(secondCategoryData.data.occupationList);\n }\n }, [secondCategoryData]);\n\n return {\n activeTab,\n setActiveTab,\n selectedJob,\n searchTerm,\n setSearchTerm,\n handleJobSelect,\n filteredJobs: jobList,\n searchInput,\n setSearchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n secondCategoryList,\n firstCategoryList\n };\n};\n\nexport function useJobSearchModal() {\n const {\n activeTab,\n setActiveTab,\n searchTerm,\n setSearchTerm,\n filteredJobs,\n handleJobSelect,\n selectedJob,\n searchInput,\n setSearchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n firstCategoryList,\n secondCategoryList\n } = useJobSearch();\n\n const { isOpen, openModal, closeModal } = useModalState();\n const onTabChange = (value: string) => {\n setSearchTerm('');\n setFirstCategory('');\n setSecondCategory('');\n setActiveTab(value);\n };\n\n return {\n JobSearchModal: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"직종 검색\" showCloseButton />\n <Modal.Body raw>\n <JobSearch\n firstCategory={firstCategory}\n firstCategoryList={firstCategoryList}\n secondCategoryList={secondCategoryList}\n setFirstCategory={setFirstCategory}\n secondCategory={secondCategory}\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchInput={setSearchInput}\n filteredJobs={filteredJobs || []}\n onJobSelect={handleJobSelect}\n searchInput={searchInput}\n setSearchTerm={setSearchTerm}\n setSecondCategory={setSecondCategory}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button variant=\"primary\" size=\"medium\" appearance=\"filled\" width=\"full\" onClick={closeModal}>\n 확인\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n ),\n JobSearchComponent: (\n <JobSearch\n firstCategoryList={firstCategoryList}\n secondCategoryList={secondCategoryList}\n firstCategory={firstCategory}\n setFirstCategory={setFirstCategory}\n secondCategory={secondCategory}\n setSecondCategory={setSecondCategory}\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchInput={setSearchInput}\n filteredJobs={filteredJobs || []}\n onJobSelect={handleJobSelect}\n searchInput={searchInput}\n setSearchTerm={setSearchTerm}\n />\n ),\n isJobSearchOpen: isOpen,\n openJobSearchModal: openModal,\n closeJobSearchModal: closeModal,\n selectedJob\n };\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\n\nimport { useEffect, useState } from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { FormField } from 'sales-frontend-design-system';\n\nimport { useJobSearchModal } from '../modal/pre-standard/job-search-modal/use-job-search';\n\nexport const FormSearchJobField = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n error,\n size = 'medium',\n placeholder = '직종 검색',\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> &\n FormField.TextFieldProps & { onValueChange?: (value?: OccupationResponseDto) => void }) => {\n const [selected, setSelected] = useState<OccupationResponseDto>();\n\n const { field, fieldState } = useController({ name, control, disabled });\n const { JobSearchModal, openJobSearchModal, selectedJob } = useJobSearchModal();\n\n useEffect(() => {\n if (selectedJob) {\n setSelected(selectedJob);\n field.onChange(selectedJob.occupationIndustryCode);\n props.onValueChange?.(selectedJob);\n }\n }, [selectedJob]);\n\n return (\n <>\n <FormField.ComboBox\n {...props}\n {...field}\n id={field.name}\n error={fieldState.invalid || error}\n value={selected?.occupationIndustryName ?? ''}\n icon=\"search\"\n size={size}\n placeholder={placeholder}\n autoComplete=\"off\"\n onClick={openJobSearchModal}\n />\n {JobSearchModal}\n </>\n );\n};\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { SegmentGroup, type SegmentGroupHtmlProps } from 'sales-frontend-design-system';\n\ninterface FormSegmentGroupProps<TFormValues extends FieldValues>\n extends Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'>,\n Omit<SegmentGroupHtmlProps, 'defaultValue'> {\n disabledItems?: string[];\n}\n\nexport const FormSegmentGroup = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n disabledItems,\n items,\n ...props\n}: FormSegmentGroupProps<TFormValues>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n const itemList = items.map((item) => {\n return {\n ...item,\n disabled: disabledItems?.includes(item.value)\n };\n });\n\n return (\n <SegmentGroup\n {...props}\n tabIndex={0}\n id={field.name}\n ref={field.ref}\n defaultValue={field.value}\n disabled={field.disabled}\n error={fieldState.invalid}\n onBlur={field.onBlur}\n items={itemList}\n onValueChange={(selected) => {\n field.onChange(selected);\n props.onValueChange?.(selected);\n }}\n />\n );\n};\n","import React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { OptionProps, Select, SelectProps } from 'sales-frontend-design-system';\n\n/**\n * 영업지원 시스템 셀렉트필드\n * @param param0\n * @returns\n */\n\ntype FormSelectProps<TFormValues extends FieldValues> = Pick<\n UseControllerProps<TFormValues>,\n 'name' | 'control' | 'disabled'\n> &\n Omit<SelectProps, 'defaultValue'>;\n\nexport const FormSelect = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n error,\n children,\n ...props\n}: FormSelectProps<TFormValues>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <Select\n {...props}\n id={field.name}\n disabled={field.disabled}\n error={fieldState.invalid || error}\n onBlur={field.onBlur}\n value={field.value}\n onChange={(selected) => {\n field.onChange(selected);\n }}\n >\n {children}\n </Select>\n );\n};\n\nconst FormSelectOption = ({ children, value, ...rest }: OptionProps) => {\n return (\n <Select.Option value={value} {...rest}>\n {children}\n </Select.Option>\n );\n};\n\ninterface IFormSelectGroupProps<TFormValues extends FieldValues> extends FormSelectProps<TFormValues> {\n options: { label: string; value: string }[];\n optionsProps?: Omit<OptionProps, 'children' | 'value'>;\n}\n\nconst FormSelectGroup = <TFormValues extends FieldValues>({\n options,\n optionsProps,\n ...props\n}: Omit<IFormSelectGroupProps<TFormValues>, 'children'>) => {\n return (\n <FormSelect {...props}>\n {options.map((option) => (\n <FormSelectOption key={option.value} value={option.value} {...optionsProps}>\n {option.label}\n </FormSelectOption>\n ))}\n </FormSelect>\n );\n};\n\nFormSelect.Option = FormSelectOption;\nFormSelect.Group = FormSelectGroup;\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { FormField } from 'sales-frontend-design-system';\n\nexport const FormTextField = <TFormValues extends FieldValues>({\n name,\n control,\n size = 'medium',\n disabled,\n error,\n onBlur,\n onChange,\n rootProps,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & FormField.TextFieldProps) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <FormField.TextField\n {...props}\n id={field.name}\n size={size}\n autoComplete=\"off\"\n name={field.name}\n value={field.value ?? ''}\n disabled={field.disabled}\n error={fieldState.invalid || error}\n onChange={(e) => {\n field.onChange(e);\n onChange?.(e);\n }}\n onBlur={(e) => {\n field.onBlur();\n onBlur?.(e);\n }}\n rootProps={{\n ...rootProps,\n onClear: () => {\n field.onChange('');\n rootProps?.onClear?.();\n }\n }}\n />\n );\n};\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { ModalUtils } from 'sales-frontend-design-system';\n\nimport styles from './step-indicator.module.scss';\n\nimport type { StepIndicatorProps, StepItem } from './step-indicator.types';\n\nconst cx = classNames.bind(styles);\n\nexport const StepIndicator = ({\n items,\n onClickItem,\n currentIndex = 0,\n defaultValue = '',\n dotCount = 3,\n isLoading\n}: StepIndicatorProps) => {\n const [steps, setSteps] = React.useState<StepItem[]>(\n Array.from({ length: 10 }).map(() => ({ label: '-', value: '' }))\n );\n const [current, setCurrent] = React.useState(currentIndex);\n\n React.useEffect(() => {\n if (items.length > 0) {\n setSteps(items);\n items.map((item, idx) => {\n if (item.value === defaultValue) {\n setCurrent(idx);\n }\n });\n }\n }, [items, defaultValue]);\n\n const handleClickStep = (item: StepItem) => {\n const index = steps.findIndex((step) => step.value === item.value);\n\n if (index === -1) {\n console.error('error not found index');\n\n return;\n }\n\n if (steps[index < 1 ? index : index - 1]?.isCompleted) {\n onClickItem?.(item);\n } else {\n ModalUtils.alert('이전 단계를 모두 완료해야 선택한 단계로\\n이동할 수 있습니다.', '이전 단계를 먼저 진행해주세요');\n }\n };\n\n return (\n <div className={cx('stepper-layout', { loading: isLoading })}>\n <div className={cx('stepper')}>\n {steps.map((item, idx) => (\n <React.Fragment key={`num-${idx}`}>\n <div\n className={cx(\n 'circle',\n { completed: item.isCompleted ?? false },\n { active: defaultValue === item.value || current === idx }\n )}\n onClick={() => handleClickStep?.(item)}\n >\n {item.isCompleted ? <span className={cx('completed-icon')} /> : idx + 1}\n </div>\n {/* 다음 단계가 있을 때만 dot 렌더링 */}\n {idx < steps.length - 1 &&\n Array.from({ length: dotCount }).map((_, dotIdx) => (\n <span key={`dot-${idx}-${dotIdx}`} className={cx('dot')} />\n ))}\n </React.Fragment>\n ))}\n </div>\n\n <ul className={cx('step-labels')}>\n {steps.map((item, idx) => (\n <li\n key={`label-${idx}`}\n className={cx(\n { completed: steps[idx < 1 ? idx : idx - 1]?.isCompleted ?? false },\n { active: defaultValue === item.value || current === idx }\n )}\n onClick={() => handleClickStep?.(item)}\n >\n <span className=\"text-ellipsis\">{item.label ?? item.value}</span>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n","import classNames from 'classnames/bind';\nimport { Icon } from 'sales-frontend-design-system';\n\nimport styles from './camera.module.scss';\nimport { AttachedPhoto, cameraItemType } from './camera.types';\n\nconst cx = classNames.bind(styles);\n\nexport interface AttachmentProps {\n photos: AttachedPhoto[];\n onAddPhoto: () => void;\n onRemovePhoto: (id: string) => void;\n /* false이면 사진이 1장 이상일 때만 표시 */\n show: boolean;\n type?: cameraItemType;\n buttonText?: string;\n}\n\nexport function Attachment({\n photos,\n onAddPhoto,\n onRemovePhoto,\n show,\n type = 'multiple',\n buttonText\n}: AttachmentProps) {\n const handleAddPhoto = () => {\n onAddPhoto();\n };\n\n const handleRemovePhoto = (id: string) => {\n onRemovePhoto(id);\n };\n\n const renderPhotoSingle = () => {\n if (photos.length === 0) {\n return (\n <div className={cx('single-photo-item', 'add-photo-item')}>\n <button className={cx('add-photo-button-single')} onClick={handleAddPhoto}>\n <Icon name=\"illust/camera\" />\n <span>{buttonText || '사진 첨부하기'}</span>\n </button>\n </div>\n );\n }\n\n return photos.map((photo) => (\n <div key={photo.id} className={cx('single-photo-item')}>\n <div className={cx('photo-placeholder')}>\n <img src={photo.src} alt={photo.name} className={cx('photo-image')} />\n </div>\n <button className={cx('remove-button')} onClick={() => handleRemovePhoto(photo.id)} aria-label=\"사진 삭제\">\n ×\n </button>\n </div>\n ));\n };\n\n const renderPhotoGrid = () => {\n const maxPhotos = type === 'single' ? 1 : 4;\n const gridItems = [];\n\n if (photos.length < maxPhotos) {\n gridItems.push(\n <div key=\"add-photo\" className={cx('photo-item', 'add-photo-item')}>\n <button className={cx('add-photo-button')} onClick={handleAddPhoto}>\n <Icon name=\"illust/camera\" />\n <span>{buttonText || '첨부하기'}</span>\n <span className={cx('photo-count')}>\n (<span className={cx('photo-count-number')}>{photos.length}</span>/{maxPhotos})\n </span>\n </button>\n </div>\n );\n }\n\n photos.forEach((photo) => {\n gridItems.push(\n <div key={photo.id} className={cx('photo-item')}>\n <div className={cx('photo-placeholder')}>\n <img src={photo.src} alt={photo.name} className={cx('photo-image')} />\n </div>\n <button className={cx('remove-button')} onClick={() => handleRemovePhoto(photo.id)} aria-label=\"사진 삭제\">\n ×\n </button>\n </div>\n );\n });\n\n return gridItems;\n };\n\n const isVisible = show || (!show && photos.length > 0);\n\n if (!isVisible) {\n return null;\n }\n\n if (type === 'single') {\n return <div className={cx('photo-single')}>{renderPhotoSingle()}</div>;\n }\n\n return <div className={cx('photo-grid', { linear: type === 'linear' })}>{renderPhotoGrid()}</div>;\n}\n","import { cameraOptions } from './camera.types';\n\n// 3mb\nconst maxImageSize = 3 * 1024 * 1024;\n/**\n *\n * 이미지를 파라미터로 전달하고, 설정한 리사이즈 옵션에 따라 이미지를 리사이징하고 리턴한다.\n * 리턴하는 데이터타입은 전달받은 데이터 타입과 동일하게 한다.\n * base64 string을 전달받은 경우는 base64 string을 리턴하고\n * file 타입을 전달받은 경우는 file 타입을 리턴한다.\n *\n * options 규칙\n * width 와 height 중 1개가 존재하는 경우 해당 사이즈에 맞게 원본비율유지하여 축소한다.\n * width 와 height 가 모두 존재하는 경우 해당 사이즈에 맞게 원본비율을 무시하고 리사이즈한다.\n *\n * filesize 옵션이 존재하는 경우는 width,height 옵션을 무시하고, filesize 이하로 원본비율 축소한다.\n *\n * width, height 의 단위는 px 이다.\n *\n * ext는 리턴데이터 타입이 파일인 경우, 사용할 파일확장자 이다.\n * ext가 설정된 값이 없는 경우는, 기본값으로 jpeg를 사용한다.\n *\n */\nexport function resize<T extends string | File>(\n image: T,\n options: cameraOptions['resize'] = { ext: 'jpeg', filesize: maxImageSize }\n): Promise<T> {\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n reject(new Error('Canvas context를 생성할 수 없습니다.'));\n\n return;\n }\n\n const img = new Image();\n img.crossOrigin = 'anonymous';\n\n img.onload = () => {\n let { width, height } = img;\n const { filesize, ext } = options;\n\n // filesize 옵션이 있는 경우 width, height 옵션을 무시하고 filesize 이하로 원본비율 축소\n if (filesize) {\n const originalSize = width * height * 4; // RGBA 4바이트\n if (originalSize > filesize) {\n const ratio = Math.sqrt(filesize / originalSize);\n width = Math.floor(width * ratio);\n height = Math.floor(height * ratio);\n }\n } else {\n // width, height 옵션 처리\n const { width: targetWidth, height: targetHeight } = options;\n\n if (targetWidth && targetHeight) {\n // width와 height가 모두 존재하는 경우 원본비율 무시하고 리사이즈\n width = targetWidth;\n height = targetHeight;\n } else if (targetWidth) {\n // width만 존재하는 경우 원본비율 유지하여 축소\n const ratio = targetWidth / width;\n width = targetWidth;\n height = Math.floor(height * ratio);\n } else if (targetHeight) {\n // height만 존재하는 경우 원본비율 유지하여 축소\n const ratio = targetHeight / height;\n height = targetHeight;\n width = Math.floor(width * ratio);\n }\n }\n\n // canvas 크기 설정\n canvas.width = width;\n canvas.height = height;\n\n // 이미지 그리기\n ctx.drawImage(img, 0, 0, width, height);\n\n // 결과 반환\n if (typeof image === 'string') {\n // base64 string인 경우\n const mimeType = ext === 'png' ? 'image/png' : 'image/jpeg';\n const quality = ext === 'png' ? 1.0 : 0.8;\n const base64 = canvas.toDataURL(mimeType, quality);\n resolve(base64 as T);\n } else {\n // File인 경우\n canvas.toBlob(\n (blob) => {\n if (!blob) {\n reject(new Error('Blob을 생성할 수 없습니다.'));\n\n return;\n }\n\n const mimeType = ext === 'png' ? 'image/png' : 'image/jpeg';\n const fileName = image.name ? `${image.name.replace(/\\.[^/.]+$/, '') }.${ ext}` : `resized.${ ext}`;\n\n const resizedFile = new File([blob], fileName, { type: mimeType });\n resolve(resizedFile as T);\n },\n ext === 'png' ? 'image/png' : 'image/jpeg',\n ext === 'png' ? 1.0 : 0.8\n );\n }\n };\n\n img.onerror = () => {\n reject(new Error('이미지를 로드할 수 없습니다.'));\n };\n\n // 이미지 소스 설정\n if (typeof image === 'string') {\n img.src = image;\n } else {\n const reader = new FileReader();\n reader.onload = (e) => {\n if (e.target?.result) {\n img.src = e.target.result as string;\n } else {\n reject(new Error('파일을 읽을 수 없습니다.'));\n }\n };\n reader.onerror = () => {\n reject(new Error('파일을 읽을 수 없습니다.'));\n };\n reader.readAsDataURL(image);\n }\n });\n}\n","import { useEffect, useState } from 'react';\n\nimport { Attachment } from './attachment';\nimport { resize } from './resize';\n\nimport type { AttachedPhoto, cameraOptions } from './camera.types';\n\nconst genImageId = () => `camera-${Date.now()}-${Math.random()}`;\n\nexport function useCamera({\n onChange,\n resize: resizeOption,\n cameraOnly,\n onDelete,\n show,\n type = 'multiple',\n buttonText\n}: Partial<cameraOptions> = {}) {\n const [attachedPhotos, setAttachedPhotos] = useState<AttachedPhoto[]>([]);\n\n const findImage = (imageId: string) => {\n return attachedPhotos.find((image) => image.id === imageId);\n };\n\n /**\n * onClick시, input File생성후 카메라 또는 파일선택 호출\n */\n const onClick = () => {\n // input을 dom으로 생성, type='file' , cameraOnly 가 true이면 카메라만 실행가능하도록 input 을 설정\n // true가 아니면 이미지확장자파일과, 카메라선택 둘다 가능하도록 설정\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'image/*';\n\n if (cameraOnly) {\n // 카메라만 실행 가능하도록 설정\n input.capture = 'camera';\n }\n\n // 파일 선택 이벤트 리스너 추가\n input.addEventListener('change', async (event) => {\n const target = event.target as HTMLInputElement;\n const { files } = target;\n\n if (files && files.length > 0) {\n const file = files[0];\n // onChange 콜백 호출\n if (file) {\n const resizedFile = await resize(file, resizeOption);\n const newPhoto: AttachedPhoto = {\n id: genImageId(),\n src: URL.createObjectURL(resizedFile),\n name: `서류사진_${attachedPhotos.length + 1}`\n };\n\n if (type === 'single') {\n setAttachedPhotos([newPhoto]);\n } else {\n setAttachedPhotos([...attachedPhotos, newPhoto]);\n }\n\n onChange && onChange(file);\n }\n }\n\n // input 요소 제거\n document.body.removeChild(input);\n });\n\n // input을 body에 추가하고 click 이벤트 발생\n input.style.display = 'none';\n document.body.appendChild(input);\n input.click();\n };\n\n /**\n * 선택한 이미지 삭제\n * @param imageId 이미지아이디\n */\n const deleteImage = (imageId: string) => {\n const imageIndex = attachedPhotos.findIndex((image) => image.id === imageId);\n if (imageIndex > -1) {\n const item = attachedPhotos.splice(imageIndex, 1);\n item[0] && URL.revokeObjectURL(item[0].src);\n setAttachedPhotos([...attachedPhotos]);\n onDelete && onDelete(imageId);\n }\n };\n\n const CameraComponent = () => (\n <Attachment\n show={!!show}\n onAddPhoto={onClick}\n onRemovePhoto={deleteImage}\n photos={attachedPhotos}\n type={type}\n buttonText={buttonText}\n />\n );\n\n useEffect(() => {\n return () => {\n // revoke all images url\n attachedPhotos.forEach((image) => {\n URL.revokeObjectURL(image.src);\n });\n };\n }, []);\n\n return {\n onClick,\n getImage: findImage,\n deleteImage,\n attachedPhotos,\n Attachment: CameraComponent\n };\n}\n","import { useRef, useEffect, useState, useCallback } from 'react';\n\nimport { DownloadProps, PaintProps } from './canvas-paint.types';\n\n/** undo, redo 가능한 히스토리 최대 저장 갯수 */\nconst HISTORY_SIZE = 100;\n\n/** 기본 다운로드 값 */\nconst DEFAULT_DOWNLOAD_PROPS: Required<DownloadProps> = {\n fileExtendsion: 'png',\n fileName: 'image',\n transparent: true,\n backgroundColor: 'white',\n width: 500,\n height: 500\n};\nexport function useCanvasPaint(paintProps: PaintProps = {}) {\n const { pen = { strokeWeight: 5, strokeColor: 'black' }, onChange, onStart, onEnd } = paintProps;\n const [canvasRefState, setCanvasRefState] = useState<HTMLCanvasElement | null>(null);\n const contextRef = useRef<CanvasRenderingContext2D | null>(null);\n\n const [isPainting, setIsPainting] = useState(false);\n const [history, setHistory] = useState<string[]>([]);\n const [historyIndex, setHistoryIndex] = useState(-1);\n\n const saveState = useCallback(() => {\n if (!canvasRefState) {\n return;\n }\n const dataUrl = canvasRefState.toDataURL();\n\n const newHistory = history.slice(0, historyIndex + 1);\n if (newHistory.length >= HISTORY_SIZE) {\n newHistory.shift();\n }\n newHistory.push(dataUrl);\n\n setHistory(newHistory);\n setHistoryIndex(newHistory.length - 1);\n onChange && onChange();\n }, [history, historyIndex, onChange, canvasRefState]);\n\n const restoreState = useCallback(\n (index: number) => {\n const context = contextRef.current;\n if (!canvasRefState || !context || !history[index]) {\n return;\n }\n\n const dataUrl = history[index];\n const img = new Image();\n img.onload = () => {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n context.drawImage(img, 0, 0);\n };\n img.src = dataUrl;\n onChange && onChange();\n },\n [history, onChange, canvasRefState]\n );\n\n useEffect(() => {\n if (!canvasRefState) {\n return;\n }\n const context = canvasRefState.getContext('2d', { willReadFrequently: true });\n if (!context) {\n return;\n }\n contextRef.current = context;\n\n const initialDataUrl = canvasRefState.toDataURL();\n setHistory([initialDataUrl]);\n setHistoryIndex(0);\n }, [canvasRefState]);\n\n useEffect(() => {\n const context = contextRef.current;\n if (context) {\n context.lineWidth = pen.strokeWeight;\n context.strokeStyle = pen.strokeColor;\n }\n }, [pen]);\n\n /**\n * @description canvas의 크기가 동적으로 생성되는 경우,\n * 포인터의 위치가 맞지않는 이슈를 해결하기위한,\n * scale조정하는 함수입니다.\n */\n const getEventPosition = useCallback(\n (event: MouseEvent | TouchEvent) => {\n if (!canvasRefState) {\n return null;\n }\n\n const rect = canvasRefState.getBoundingClientRect();\n const scaleX = canvasRefState.width / rect.width;\n const scaleY = canvasRefState.height / rect.height;\n\n let clientX;\n let clientY;\n\n if (event instanceof MouseEvent) {\n clientX = event.clientX;\n clientY = event.clientY;\n } else if (event instanceof TouchEvent) {\n const touch = event.touches[0];\n if (!touch) {\n return null;\n }\n clientX = touch.clientX;\n clientY = touch.clientY;\n } else {\n return null;\n }\n\n const offsetX = (clientX - rect.left) * scaleX;\n const offsetY = (clientY - rect.top) * scaleY;\n\n return { offsetX, offsetY };\n },\n [canvasRefState]\n );\n\n const startPainting = useCallback(\n (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n const context = contextRef.current;\n if (!context) {\n return;\n }\n const pos = getEventPosition(event);\n if (!pos) {\n return;\n }\n onStart && onStart();\n const { offsetX, offsetY } = pos;\n context.beginPath();\n context.moveTo(offsetX, offsetY);\n setIsPainting(true);\n },\n [onStart, getEventPosition]\n );\n\n const stopPainting = useCallback(() => {\n const context = contextRef.current;\n if (!context || !isPainting) {\n return;\n }\n context.closePath();\n setIsPainting(false);\n onEnd && onEnd();\n saveState();\n }, [isPainting, onEnd, saveState]);\n\n const paint = useCallback(\n (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n if (!isPainting || !contextRef.current) {\n return;\n }\n const pos = getEventPosition(event);\n if (!pos) {\n return;\n }\n const { offsetX, offsetY } = pos;\n contextRef.current.lineTo(offsetX, offsetY);\n contextRef.current.stroke();\n },\n [isPainting, getEventPosition]\n );\n\n useEffect(() => {\n if (!canvasRefState) {\n return;\n }\n\n canvasRefState.addEventListener('mousedown', startPainting);\n canvasRefState.addEventListener('mouseup', stopPainting);\n canvasRefState.addEventListener('mousemove', paint);\n canvasRefState.addEventListener('mouseleave', stopPainting);\n\n canvasRefState.addEventListener('touchstart', startPainting);\n canvasRefState.addEventListener('touchend', stopPainting);\n canvasRefState.addEventListener('touchmove', paint);\n canvasRefState.addEventListener('touchcancel', stopPainting);\n\n return () => {\n canvasRefState.removeEventListener('mousedown', startPainting);\n canvasRefState.removeEventListener('mouseup', stopPainting);\n canvasRefState.removeEventListener('mousemove', paint);\n canvasRefState.removeEventListener('mouseleave', stopPainting);\n\n canvasRefState.removeEventListener('touchstart', startPainting);\n canvasRefState.removeEventListener('touchend', stopPainting);\n canvasRefState.removeEventListener('touchmove', paint);\n canvasRefState.removeEventListener('touchcancel', stopPainting);\n };\n }, [startPainting, stopPainting, paint, canvasRefState]);\n\n const clear = () => {\n const context = contextRef.current;\n if (canvasRefState && context) {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n const initialDataUrl = canvasRefState.toDataURL();\n setHistory([initialDataUrl]);\n setHistoryIndex(0);\n onChange && onChange();\n }\n };\n\n const undo = () => {\n if (historyIndex > 0) {\n const newIndex = historyIndex - 1;\n setHistoryIndex(newIndex);\n restoreState(newIndex);\n }\n };\n\n const redo = () => {\n if (historyIndex < history.length - 1) {\n const newIndex = historyIndex + 1;\n setHistoryIndex(newIndex);\n restoreState(newIndex);\n }\n };\n\n const loadImage = (base64String: string) => {\n const context = contextRef.current;\n if (!canvasRefState || !context) {\n return;\n }\n\n const img = new Image();\n img.onload = () => {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n context.drawImage(img, 0, 0, canvasRefState.width, canvasRefState.height);\n saveState();\n };\n img.src = base64String;\n };\n\n const getBase64String = (imageProps: DownloadProps) => {\n const props = { ...DEFAULT_DOWNLOAD_PROPS, ...imageProps };\n const { fileExtendsion, transparent, backgroundColor, width, height } = props;\n const originalCanvas = canvasRefState;\n if (!originalCanvas) {\n return;\n }\n\n const tempCanvas = document.createElement('canvas');\n tempCanvas.width = width;\n tempCanvas.height = height;\n const tempCtx = tempCanvas.getContext('2d');\n\n if (tempCtx) {\n if (!transparent) {\n tempCtx.fillStyle = backgroundColor || 'white';\n tempCtx.fillRect(0, 0, width, height);\n }\n tempCtx.drawImage(originalCanvas, 0, 0, width, height);\n\n return tempCanvas.toDataURL(`image/${fileExtendsion}`);\n }\n };\n\n const download = (downloadProps: DownloadProps) => {\n const props = { ...DEFAULT_DOWNLOAD_PROPS, ...downloadProps };\n const { fileName, fileExtendsion, transparent, backgroundColor, width, height } = props;\n const originalCanvas = canvasRefState;\n if (!originalCanvas) {\n return;\n }\n\n const tempCanvas = document.createElement('canvas');\n tempCanvas.width = width;\n tempCanvas.height = height;\n const tempCtx = tempCanvas.getContext('2d');\n\n if (tempCtx) {\n if (!transparent) {\n tempCtx.fillStyle = backgroundColor || 'white';\n tempCtx.fillRect(0, 0, width, height);\n }\n tempCtx.drawImage(originalCanvas, 0, 0, width, height);\n\n const link = document.createElement('a');\n link.download = `${fileName}.${fileExtendsion}`;\n link.href = tempCanvas.toDataURL(`image/${fileExtendsion}`);\n link.click();\n }\n };\n /**\n * canvasRef.current canvas 에 데이터가 있는지 확인후 boolean 리턴\n * @returns boolean\n */\n const isCanvasBlank = () => {\n if (!canvasRefState) {\n return true;\n }\n\n // 캔버스 크기 가져오기\n const { width, height } = canvasRefState;\n\n // 2D 렌더링 컨텍스트 가져오기\n const ctx = canvasRefState.getContext('2d');\n if (!ctx) {\n console.error('2D context not available');\n\n return true; // 컨텍스트가 없으면 비어있는 것으로 간주\n }\n\n // 캔버스 전체 영역의 픽셀 데이터 가져오기\n const imageData = ctx.getImageData(0, 0, width, height);\n const { data } = imageData;\n\n // 픽셀 데이터의 알파(alpha) 값을 순회하며 확인\n // RGBA 순서이므로 알파 값은 3, 7, 11, ... 인덱스에 위치\n for (let i = 0; i < data.length; i += 4) {\n // 알파 값이 0이 아니면 (불투명한 부분이 있으면)\n if (data[i + 3] !== 0) {\n return false; // 캔버스가 비어있지 않음\n }\n }\n\n // 모든 픽셀의 알파 값이 0이면 (모두 투명하면)\n return true; // 캔버스가 비어있음\n };\n\n return {\n clear,\n undo,\n redo,\n loadImage,\n download,\n getBase64String,\n isCanvasBlank,\n setCanvasRefState,\n canvasRefState\n };\n}\n","/**\n * 서명로드용 base64 string\n */\nexport const testSignatureBase64Data =\n 'data:image/png;base64,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';\n","import React, { useEffect, useState } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { Address } from 'sales-frontend-api/method';\nimport { Button, FormCore, Icon, Modal, ModalBaseProps, RadioGroup, FormField } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { AddressSearchDetailInputProps, AddressSearchResultProps, FullAddress, Step } from './address.types';\nimport styles from './select-address.module.scss';\nimport { useSearchAddress } from './use-search-address';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\n\nexport const AddressSearchInitialText = () => {\n return (\n <div>\n <p className={cx('guide-title')}>이렇게 검색해 보세요.</p>\n <ul className={cx('guide')}>\n <li>도로명/지명과 건물번호를 함께 입력해주세요</li>\n <li>예) 63로 50, 여의도동 60</li>\n <li>지명은 동/읍/면/리로 입력해주세요</li>\n <li>예) 여의도동, 역삼동</li>\n <li>우편번호 다섯자리를 모두 입력해주세요</li>\n <li>예) 07345, 06232</li>\n </ul>\n </div>\n );\n};\n\nexport const AddressSearchResult = ({\n addressSearchList,\n onChange,\n searchKeyword,\n selectedAddress\n}: AddressSearchResultProps) => {\n const [filterList, setFilterList] = useState<Address[]>([]);\n\n useEffect(() => {\n const filterList =\n addressSearchList.filter(\n (item) => item.address.includes(searchKeyword) || item.oldAddress.includes(searchKeyword)\n ) || [];\n setFilterList(filterList);\n }, [addressSearchList, searchKeyword]);\n\n return (\n <div>\n <p className={cx('guide-title')}>\n 총 <span className=\"text-primary\">{filterList.length}</span>건의 검색결과\n </p>\n {filterList.length > 0 && (\n <RadioGroup\n items={filterList.map((item: Address) => ({\n value: item.address,\n select: item.address === selectedAddress?.address && item.zipCode === selectedAddress?.zipCode,\n label: (\n <div className={cx('search-result')}>\n <div className={cx('zipcode')}> {highlightOnSearchKeyword(item.zipCode, searchKeyword)}</div>\n <div className={cx('divider')}></div>\n <div className={cx('address-info')}>\n <span className={cx('address')}>{highlightOnSearchKeyword(item.address, searchKeyword)}</span>\n <span className={cx('old-address')}>{highlightOnSearchKeyword(item.oldAddress, searchKeyword)}</span>\n </div>\n </div>\n ),\n id: item.address\n }))}\n className={cx('radio-group')}\n name=\"address-search\"\n size=\"medium\"\n defaultValue={''}\n onChange={onChange}\n />\n )}\n {filterList.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchKeyword}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n );\n};\n\nexport const AddressSearchDetailInput = ({\n selectedAddress,\n onDetailChange,\n step,\n detailAddressInput\n}: AddressSearchDetailInputProps) => {\n return (\n <div>\n <div>\n <div> {selectedAddress.zipCode}</div>\n <div>\n |<span>{`${selectedAddress.address}`}</span>\n </div>\n </div>\n <div>\n <FormField.Label id=\"detail\" style={{ width: '90px' }}>\n 상세주소\n </FormField.Label>\n <Input\n placeholder=\"상세주소 입력\"\n onChange={onDetailChange}\n size=\"large\"\n value={detailAddressInput}\n {...(step === 'detail-input' && { autoFocus: true })}\n />\n </div>\n </div>\n );\n};\n\nexport interface AddressSearchModalProps extends ModalBaseProps {\n onClose: () => void;\n isOpen: boolean;\n searchKeyword: string;\n step: Step;\n selectedAddress: Address | null;\n addressList: Address[];\n filterList: Address[];\n onClear: () => void;\n onSearch: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onKeyUp: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n onNext: () => void;\n setSelectedAddress: (address: Address) => void;\n setDetailAddress: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onSelectChange: (value: string) => void;\n}\n\ninterface Props {\n setValue: (address: FullAddress) => void;\n onClose: () => void;\n isOpen: boolean;\n}\n\nexport function AddressComponent({ isOpen, onClose, setValue }: Props) {\n const {\n onAddressSearchClear,\n addressSearchKeyword,\n addressSearchStep,\n onAddressSearchNext,\n nextButtonDisabled,\n detailAddressInput,\n addressSearchList,\n onSearch,\n onKeyUp,\n onSelectChange,\n setDetail,\n search,\n searchInput,\n selectedAddress\n } = useSearchAddress({\n setValue,\n onClose,\n isOpen\n });\n\n return (\n <>\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"주소 검색\" showCloseButton />\n <Modal.Body>\n <InputBox\n clearable\n endElement={<Icon name=\"sub-ui/search\" onClick={search} />}\n onClear={onAddressSearchClear}\n >\n <Input\n {...(addressSearchStep !== 'detail-input' && { autoFocus: true })}\n onChange={onSearch}\n onKeyUp={onKeyUp}\n value={searchInput}\n placeholder=\"지번, 도로명, 건물명, 우편번호 입력\"\n size=\"large\"\n />\n </InputBox>\n {addressSearchStep === 'initial' && <AddressSearchInitialText />}\n {addressSearchStep === 'search-result' && (\n <AddressSearchResult\n onChange={onSelectChange}\n addressSearchList={addressSearchList || []}\n searchKeyword={addressSearchKeyword}\n selectedAddress={selectedAddress}\n />\n )}\n {addressSearchStep === 'detail-input' && selectedAddress && (\n <AddressSearchDetailInput\n selectedAddress={selectedAddress}\n onDetailChange={setDetail}\n step={addressSearchStep}\n detailAddressInput={detailAddressInput}\n />\n )}\n </Modal.Body>\n <Modal.Footer>\n {addressSearchStep !== 'initial' && (\n <Button\n onClick={onAddressSearchNext}\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n disabled={nextButtonDisabled}\n >\n {addressSearchStep === 'search-result' && '다음(1/2)'}\n {addressSearchStep === 'detail-input' && '확인(2/2)'}\n </Button>\n )}\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n </>\n );\n}\n","import React, { useState, useEffect, useCallback } from 'react';\n\nimport { Address, useSearchModalAddressQuery } from 'sales-frontend-api/method';\nimport { useModalState } from 'sales-frontend-design-system';\n\nimport { AddressComponent } from './address-search-modal';\nimport { FullAddress, Step } from './address.types';\ninterface Props {\n setValue: (address: FullAddress) => void;\n onClose: () => void;\n isOpen: boolean;\n}\nexport function useSearchAddress({ setValue, onClose, isOpen }: Props) {\n const [searchKeyword, setSearchKeyword] = useState<string>('');\n const [step, setStep] = useState<Step>('initial');\n const [selectedAddress, setSelectedAddress] = useState<Address | null>(null);\n const [searchInput, setSearchInput] = useState<string>('');\n const [detailAddressInput, setDetailAddressInput] = useState<string>('');\n\n const { data: addressList } = useSearchModalAddressQuery({ searchKeyword });\n const [nextButtonDisabled, setNextButtonDisabled] = useState<boolean>(false);\n const onNext = () => {\n if (step === 'search-result') {\n setStep('detail-input');\n setNextButtonDisabled(true);\n } else {\n setValue({\n address: selectedAddress?.address || '',\n oldAddress: selectedAddress?.oldAddress || '',\n zipCode: selectedAddress?.zipCode || '',\n detail: detailAddressInput || ''\n });\n onClose();\n }\n };\n\n /**\n * 검색어 입력창 onChange\n */\n const onSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const typeStr = e.target.value;\n setSearchInput(typeStr);\n };\n\n /**\n * 검색\n */\n const search = () => {\n if (searchInput === '') {\n onClear();\n\n return;\n }\n if (searchInput && searchInput.length > 1) {\n setSearchKeyword(searchInput);\n setStep('search-result');\n setSelectedAddress(null);\n setDetailAddressInput('');\n setNextButtonDisabled(true);\n }\n };\n\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n search();\n }\n };\n\n /**\n * 검색결과 Radio 버튼 선택시, onChange\n */\n const onSelectChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const selectedAddress = e.target.value;\n if (selectedAddress) {\n const adr = addressList?.find((addr) => {\n return addr.address === selectedAddress;\n });\n setSelectedAddress(adr || null);\n setNextButtonDisabled(false);\n }\n };\n\n /**\n * 검색어입력창 초기화\n */\n const onClear = useCallback(() => {\n setSearchKeyword('');\n setSearchInput('');\n setSelectedAddress(null);\n setDetailAddressInput('');\n setStep('initial');\n }, []);\n\n /**\n * 상세주소 저장\n */\n const setDetail = (e: React.ChangeEvent<HTMLInputElement>) => {\n const detail = e.target.value;\n setDetailAddressInput(detail);\n if (detail) {\n setNextButtonDisabled(false);\n } else {\n setNextButtonDisabled(true);\n }\n };\n\n useEffect(() => {\n /**\n * 모달 오픈시, 상태 초기화\n */\n if (isOpen) {\n setSelectedAddress(null);\n setDetailAddressInput('');\n\n setStep('initial');\n setSearchKeyword('');\n }\n }, [isOpen]);\n\n return {\n onAddressSearchClear: onClear,\n onAddressSearchNext: onNext,\n addressSearchKeyword: searchKeyword,\n addressSearchList: addressList,\n addressSearchStep: step,\n selectedAddress,\n addressSearchOnValueChange: onSelectChange,\n nextButtonDisabled,\n detailAddressInput,\n onSearch,\n onKeyUp,\n onSelectChange,\n setDetail,\n search,\n searchInput\n };\n}\n\nexport const useAddressComponent = () => {\n const [fullAddress, setFullAddress] = useState<FullAddress | null>(null);\n\n const { isOpen, closeModal, openModal } = useModalState();\n\n const AddressSearchComponent = () => (\n <AddressComponent isOpen={isOpen} onClose={closeModal} setValue={setFullAddress} />\n );\n\n return {\n fullAddress,\n openModal,\n AddressSearchComponent\n };\n};\n","import { useMemo, useState } from 'react';\n\nimport {\n IconGraphicsBankBusan,\n IconGraphicsBankDaegu,\n IconGraphicsBankGwangju,\n IconGraphicsBankGyeongnam,\n IconGraphicsBankHankookCity,\n IconGraphicsBankHsbc,\n IconGraphicsBankJeju,\n IconGraphicsBankJeochuk,\n IconGraphicsBankJeonbuk,\n IconGraphicsBankJiyeokNonghyeop,\n IconGraphicsBankKBank,\n IconGraphicsBankKakaoBank,\n IconGraphicsBankKebHana,\n IconGraphicsBankKiup,\n IconGraphicsBankKukmin,\n IconGraphicsBankNhNonghyeop,\n IconGraphicsBankOehwan,\n IconGraphicsBankPost,\n IconGraphicsBankSaemaulGeumgo,\n IconGraphicsBankSaneop,\n IconGraphicsBankSanlim,\n IconGraphicsBankScJeil,\n IconGraphicsBankSinhan,\n IconGraphicsBankSinhyeop,\n IconGraphicsBankSuhyeop,\n IconGraphicsBankWoori,\n IconGraphicsStockBugukJeungkwon,\n IconGraphicsStockDaesinJeungkwon,\n IconGraphicsStockDbGeumyungTujajeungkwon,\n IconGraphicsStockGyoboJeungkwon,\n IconGraphicsStockHanaGeumyungTujajeungkwon,\n IconGraphicsStockHankookJeungkwonGeumyung,\n IconGraphicsStockHankookTujajeungkwon,\n IconGraphicsStockHanwhaTujajeungkwon,\n IconGraphicsStockHiTujajeungkwon,\n IconGraphicsStockHochulEopsum,\n IconGraphicsStockHyundaiChaJeungkwon,\n IconGraphicsStockKbJeungkwon,\n IconGraphicsStockKiwoomJeungkwon,\n IconGraphicsStockMeritzJeungkwon,\n IconGraphicsStockMiraeAssetJeungkwon,\n IconGraphicsStockNhTujajeungkwon,\n IconGraphicsStockNhWooriTujajeungkwon,\n IconGraphicsStockSamsungJeungkwon,\n IconGraphicsStockSinhanTujajeungkwon,\n IconGraphicsStockSinyeongJeungkwon,\n IconGraphicsStockSkJeungkwon,\n IconGraphicsStockYuantaJeungkwon,\n IconGraphicsStockYujinTujajeungkwon\n} from 'sales-frontend-assets';\n\nimport { BankStockItem } from './types';\n\nconst BANK_LIST: BankStockItem[] = [\n { label: 'HSBC', value: 'HSBC', Icon: IconGraphicsBankHsbc },\n { label: 'KEB하나', value: 'KEB하나', Icon: IconGraphicsBankKebHana },\n { label: 'SC제일', value: 'SC제일', Icon: IconGraphicsBankScJeil },\n { label: '경남', value: '경남', Icon: IconGraphicsBankGyeongnam },\n { label: '광주', value: '광주', Icon: IconGraphicsBankGwangju },\n { label: '국민', value: '국민', Icon: IconGraphicsBankKukmin },\n { label: '기업', value: '기업', Icon: IconGraphicsBankKiup },\n { label: '지역농협', value: '지역농협', Icon: IconGraphicsBankJiyeokNonghyeop },\n { label: 'NH농협', value: 'NH농협', Icon: IconGraphicsBankNhNonghyeop },\n { label: '대구', value: '대구', Icon: IconGraphicsBankDaegu },\n { label: '부산', value: '부산', Icon: IconGraphicsBankBusan },\n { label: '산림조합', value: '산림조합', Icon: IconGraphicsBankSanlim },\n { label: '산업', value: '산업', Icon: IconGraphicsBankSaneop },\n { label: '새마을금고', value: '새마을금고', Icon: IconGraphicsBankSaemaulGeumgo },\n { label: '수협', value: '수협', Icon: IconGraphicsBankSuhyeop },\n { label: '신한', value: '신한', Icon: IconGraphicsBankSinhan },\n { label: '신협', value: '신협', Icon: IconGraphicsBankSinhyeop },\n { label: '외환', value: '외환', Icon: IconGraphicsBankOehwan },\n { label: '우리', value: '우리', Icon: IconGraphicsBankWoori },\n { label: '우체국', value: '우체국', Icon: IconGraphicsBankPost },\n { label: '저축', value: '저축', Icon: IconGraphicsBankJeochuk },\n { label: '전북', value: '전북', Icon: IconGraphicsBankJeonbuk },\n { label: '제주', value: '제주', Icon: IconGraphicsBankJeju },\n { label: '카카오뱅크', value: '카카오뱅크', Icon: IconGraphicsBankKakaoBank },\n { label: '케이뱅크', value: '케이뱅크', Icon: IconGraphicsBankKBank },\n { label: '한국씨티', value: '한국씨티', Icon: IconGraphicsBankHankookCity }\n];\n\nconst STOCK_LIST: BankStockItem[] = [\n { label: 'DB금융\\n투자증권', value: 'DB금융투자', Icon: IconGraphicsStockDbGeumyungTujajeungkwon },\n { label: 'KB증권', value: 'KB증권', Icon: IconGraphicsStockKbJeungkwon },\n { label: 'NH(우리)\\n투자증권', value: 'NH(우리)투자증권', Icon: IconGraphicsStockNhWooriTujajeungkwon },\n { label: 'NH\\n투자증권', value: 'NH투자증권', Icon: IconGraphicsStockNhTujajeungkwon },\n { label: 'SK증권', value: 'SK증권', Icon: IconGraphicsStockSkJeungkwon },\n { label: '교보증권', value: '교보증권', Icon: IconGraphicsStockGyoboJeungkwon },\n { label: '대신증권', value: '대신증권', Icon: IconGraphicsStockDaesinJeungkwon },\n { label: '메리츠증권', value: '메리츠증권', Icon: IconGraphicsStockMeritzJeungkwon },\n { label: '미래에셋\\n증권', value: '미래에셋증권', Icon: IconGraphicsStockMiraeAssetJeungkwon },\n { label: '부국증권', value: '부국증권', Icon: IconGraphicsStockBugukJeungkwon },\n { label: '삼성증권', value: '삼성증권', Icon: IconGraphicsStockSamsungJeungkwon },\n { label: '신영증권', value: '신영증권', Icon: IconGraphicsStockSinyeongJeungkwon },\n { label: '신한금융\\n투자증권', value: '신한금융투자증권', Icon: IconGraphicsStockSinhanTujajeungkwon },\n { label: '유안타증권', value: '유안타증권', Icon: IconGraphicsStockYuantaJeungkwon },\n { label: '유진\\n투자증권', value: '유진투자증권', Icon: IconGraphicsStockYujinTujajeungkwon },\n { label: '키움증권', value: '키움증권', Icon: IconGraphicsStockKiwoomJeungkwon },\n { label: '하나금융\\n투자증권', value: '하나금융투자증권', Icon: IconGraphicsStockHanaGeumyungTujajeungkwon },\n { label: '하이\\n투자증권', value: '하이투자증권', Icon: IconGraphicsStockHiTujajeungkwon },\n { label: '한국증권\\n금융', value: '한국증권금융', Icon: IconGraphicsStockHankookJeungkwonGeumyung },\n { label: '한국\\n투자증권', value: '한국투자증권', Icon: IconGraphicsStockHankookTujajeungkwon },\n { label: '한화\\n투자증권', value: '한화투자증권', Icon: IconGraphicsStockHanwhaTujajeungkwon },\n { label: '현대차증권', value: '현대차증권', Icon: IconGraphicsStockHyundaiChaJeungkwon },\n { label: '호출없음', value: '호출없음', Icon: IconGraphicsStockHochulEopsum }\n];\n\nexport function useBankStockSearch({ onSelect }: { onSelect: (item: BankStockItem) => void }) {\n const [searchKeyword, setSearchKeyword] = useState('');\n\n const bankList = useMemo(() => BANK_LIST.filter((bank) => bank.label.includes(searchKeyword)), [searchKeyword]);\n\n const stockList = useMemo(() => STOCK_LIST.filter((stock) => stock.label.includes(searchKeyword)), [searchKeyword]);\n\n const handleSelect = (item: BankStockItem) => {\n onSelect(item);\n };\n\n return {\n searchKeyword,\n setSearchKeyword,\n bankList,\n stockList,\n handleSelect\n };\n}\n","import { Modal } from 'sales-frontend-design-system';\n\nimport styles from './bank-stock-search-modal.module.scss';\nimport { BankStockItem, BankStockSearchModalProps } from './types';\nimport { useBankStockSearch } from './use-bank-stock-search';\n\nfunction chunk<T>(array: T[], size: number): T[][] {\n return Array.from({ length: Math.ceil(array.length / size) }, (v, i) => array.slice(i * size, i * size + size));\n}\n\nexport function BankStockSearchModal({ open, onClose, onSelect }: BankStockSearchModalProps) {\n const { bankList, stockList, handleSelect } = useBankStockSearch({\n onSelect\n });\n\n const renderItems = (list: BankStockItem[]) => {\n const chunkedList = chunk(list, 5);\n\n return (\n <div className={styles['list-container']}>\n {chunkedList.map((chunk, chunkIndex) => (\n <div key={chunkIndex} className={styles.row}>\n {chunk.map((item) => (\n <div key={item.value} className={styles.item} onClick={() => handleSelect(item)}>\n <div className={styles['icon-wrapper']}>\n <item.Icon />\n </div>\n <span>{item.label}</span>\n </div>\n ))}\n {chunk.length < 5 &&\n Array.from({ length: 5 - chunk.length }).map((_, i) => (\n <div key={`placeholder-${chunkIndex}-${i}`} className={styles.item} style={{ visibility: 'hidden' }} />\n ))}\n </div>\n ))}\n </div>\n );\n };\n\n return (\n <Modal.Root isOpen={open} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"은행/증권사 선택\" showCloseButton />\n <Modal.Body>\n <div className={styles.container}>\n <div className={styles.section}>\n <p className={styles['section-title']}>은행사</p>\n {renderItems(bankList)}\n </div>\n <div className={styles.section}>\n <p className={styles['section-title']}>증권사</p>\n {renderItems(stockList)}\n </div>\n </div>\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n );\n}\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { Icon } from 'sales-frontend-design-system';\n\nimport styles from './job-vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\n\ninterface JobVehicleSearchGradeProps {\n riskGrade?: string | number;\n hospitalizationGrade?: string | number;\n}\n\nexport const JobVehicleSearchGrade = ({ riskGrade, hospitalizationGrade }: JobVehicleSearchGradeProps) => {\n return (\n <div className={cx('grade-section')}>\n <div className={cx('icon-title')}>\n <Icon name=\"illust/grade\" />\n <span className=\"typo-title5 text-body\">등급</span>\n </div>\n <p className=\"typo-body2 text-body_3\">직종, 운전 여부 선택시 자동으로 산정됩니다.</p>\n\n <div className={cx('grade-list')}>\n <div className={cx('grade')}>\n <span>위험등급</span>\n <span className=\"text-primary typo-subtitle3\">{riskGrade || '-'}</span>\n </div>\n <div className={cx('grade')}>\n <span>입원등급</span>\n <span className=\"text-primary typo-subtitle3\">{hospitalizationGrade || '-'}</span>\n </div>\n </div>\n </div>\n );\n};\n","import classNames from 'classnames/bind';\nimport { VehicleTypeResponseDto } from 'sales-frontend-api/method';\nimport { Radio } from 'sales-frontend-design-system';\n\nimport styles from './vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\ninterface VehicleSearchProps {\n vehicles: VehicleTypeResponseDto[];\n onVehicleSelect: (vehicle: VehicleTypeResponseDto) => void;\n}\n\nexport function VehicleSearch({ vehicles, onVehicleSelect }: VehicleSearchProps) {\n return (\n <div className={cx('vehicle-search-section')}>\n <p>운전 차종</p>\n <Radio.Root name=\"vehicle-selection\" size=\"small\" className={cx('vehicle-radio-root')}>\n {vehicles.map((vehicle, index) => (\n <Radio.Item\n key={`item-${vehicle.integrationCodeValue}-${index}`}\n id={`item-${vehicle.integrationCodeValue}`}\n size=\"small\"\n value={vehicle.integrationCodeValue || ''}\n onChange={(e) => {\n const { value } = e.target;\n console.log(e.target.value);\n const selected = vehicles.find((v) => v.integrationCodeValue === value);\n if (selected) {\n onVehicleSelect(selected);\n }\n }}\n className={cx('item')}\n >\n {vehicle.integrationCodeValueName}({vehicle.integrationCodeValue})\n </Radio.Item>\n ))}\n </Radio.Root>\n </div>\n );\n}\n","import { useState } from 'react';\n\nimport { useSearchVehicleQuery, VehicleTypeResponseDto } from 'sales-frontend-api/method';\n\nimport { VehicleSearch } from './vehicle-search';\n\nexport const useVehicleSearch = () => {\n const [selectedVehicle, setSelectedVehicle] = useState<VehicleTypeResponseDto>();\n const { data } = useSearchVehicleQuery();\n\n // useSearchVehicleQuery\n return {\n VehicleSearchComponent: (\n <VehicleSearch vehicles={data?.data?.vehicleTypeList || []} onVehicleSelect={setSelectedVehicle} />\n ),\n selectedVehicle,\n setSelectedVehicle,\n vehicleList: data\n };\n};\n","import { useEffect, useState } from 'react';\n\nimport { useJobSearchModal } from '../job-search-modal/use-job-search';\nimport { useVehicleSearch } from '../vehicle-search-modal/use-vehicle-search';\n\nexport const useJobVehicleSearch = () => {\n const [rightPanelView, setRightPanelView] = useState('jobSearch'); // 'jobSearch' or 'vehicleSelection'\n const [riskGrade, setRiskGrade] = useState<string>('');\n const [hospitalizationGrade, setHospitalizationGrade] = useState<string>('');\n const { selectedJob, JobSearchComponent } = useJobSearchModal();\n const { selectedVehicle, VehicleSearchComponent } = useVehicleSearch();\n\n useEffect(() => {\n if (selectedJob && selectedVehicle) {\n /**\n * 직종,차종이 모두 선택된 경우 등급 계산 API 호출\n * @todo\n */\n setRiskGrade('일반(비위험직)(0)');\n setHospitalizationGrade('일반입원(비위험직)(0)');\n }\n }, [selectedJob, selectedVehicle]);\n\n return {\n selectedVehicle,\n rightPanelView,\n setRightPanelView,\n selectedJob,\n JobSearch: JobSearchComponent,\n VehicleSearch: VehicleSearchComponent,\n riskGrade,\n hospitalizationGrade\n };\n};\n","import classNames from 'classnames/bind';\nimport { Icon, ModalUtils, useModalState } from 'sales-frontend-design-system';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { JobVehicleSearchGrade } from './job-vehicle-search-grade';\nconst cx = classNames.bind(styles);\nimport styles from './job-vehicle-search-modal.module.scss';\nimport { useJobVehicleSearch } from './use-job-vehicle-search';\n\nexport function useJobVehicleSearchModal() {\n const {\n selectedVehicle,\n rightPanelView,\n setRightPanelView,\n selectedJob,\n JobSearch,\n VehicleSearch,\n riskGrade,\n hospitalizationGrade\n } = useJobVehicleSearch();\n const { isOpen, openModal, closeModal } = useModalState({ initialValue: true });\n\n const validate = () => {\n console.log({ selectedJob, selectedVehicle });\n if (!selectedJob && !selectedVehicle) {\n return ModalUtils.alert(\n '직종과 운전 여부·차종을 모두 선택해야 등급 산정이 가능합니다.',\n '직종과 운전 여부·차종을 선택해주세요',\n {\n modalSize: 'small'\n }\n );\n }\n if (!selectedJob) {\n return ModalUtils.alert('직종을 선택해야 등급 산정이 가능합니다.', '직종을 선택해주세요', {\n modalSize: 'small'\n });\n }\n if (!selectedVehicle) {\n return ModalUtils.alert('운전 여부·차종을 선택해야 등급 산정이 가능합니다.', '운전 여부·차종을 선택해주세요', {\n modalSize: 'small'\n });\n }\n closeModal();\n };\n\n return {\n selectedJob,\n selectedVehicle,\n riskGrade,\n hospitalizationGrade,\n openJobVehicleModal: openModal,\n JobVehicleSearchModalComponent: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"직종·운전차종 검색\" showCloseButton />\n <Modal.Body className={cx('job-vehicle-search-modal')} raw>\n <>\n <div className={cx('left-panel')}>\n <div className={cx('card-section')}>\n <div\n className={cx('card-menu', { 'card-selected': rightPanelView === 'jobSearch' })}\n onClick={() => setRightPanelView('jobSearch')}\n >\n <div className={cx('card-title')}>\n <Icon name=\"illust/job\" className={cx('card-icon')} />\n <span className={cx('card-text', 'typo-title5', 'text-body')}>직종</span>\n <Icon name=\"sub-ui/arrow/right\" />\n </div>\n <div className=\"typo-body2 text-body_2\">\n {selectedJob ? selectedJob.occupationIndustryName : '미선택'}\n </div>\n </div>\n <div\n className={cx('card-menu', { 'card-selected': rightPanelView === 'vehicleSelection' })}\n onClick={() => setRightPanelView('vehicleSelection')}\n >\n <div className={cx('card-title')}>\n <Icon name=\"illust/vehicle\" className={cx('card-icon')} />\n <span className={cx('card-text', 'typo-title5', 'text-body')}>운전 여부·차종</span>\n <Icon name=\"sub-ui/arrow/right\" />\n </div>\n <div className=\"typo-body2 text-body_2\">\n {selectedVehicle?.integrationCodeValueName}\n {selectedVehicle?.integrationCodeValue || '미선택'}\n </div>\n </div>\n </div>\n <JobVehicleSearchGrade riskGrade={riskGrade} hospitalizationGrade={hospitalizationGrade} />\n </div>\n <div className={cx('right-panel')}>{rightPanelView === 'jobSearch' ? JobSearch : VehicleSearch}</div>\n </>\n </Modal.Body>\n <Modal.Footer style={{ marginTop: 0 }}>\n <Button variant=\"primary\" size=\"medium\" appearance=\"filled\" width=\"full\" onClick={validate}>\n 확인\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n )\n };\n}\n","import React from 'react';\n\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { useJobSearchModal } from './use-job-search';\n\ninterface JobSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport const JobSearchModal: React.FC<JobSearchModalProps> = ({ onClose }) => {\n const { JobSearchComponent } = useJobSearchModal();\n\n return (\n <Modal.Root isOpen={true} onClose={onClose} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"직종 검색\" showCloseButton />\n <Modal.Body raw>{JobSearchComponent}</Modal.Body>\n <Modal.Footer>\n <Button variant=\"primary\" size=\"medium\" appearance=\"filled\" width=\"full\" onClick={onClose}>\n 확인\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["cx","styles","filterList","selectedAddress","chunk"],"mappings":"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","x_google_ignoreList":[5]}