sales-frontend-components 0.0.69 → 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.
package/dist/index.d.ts CHANGED
@@ -14,7 +14,7 @@ declare const FormDatePicker: <TFormValues extends FieldValues>({ name, control,
14
14
 
15
15
  declare const FormDateRangePicker: <TFormValues extends FieldValues>({ name, control, disabled, defaultValue, ...props }: Pick<UseControllerProps<TFormValues>, "name" | "control" | "disabled" | "defaultValue"> & DatePickerRangeHtmlProps) => react_jsx_runtime.JSX.Element;
16
16
 
17
- declare const FormSearchJobField: <TFormValues extends FieldValues>({ name, control, disabled, rootProps, error, size, placeholder, ...props }: Pick<UseControllerProps<TFormValues>, "name" | "control" | "disabled"> & FormField.TextFieldProps & {
17
+ declare const FormSearchJobField: <TFormValues extends FieldValues>({ name, control, disabled, error, size, placeholder, ...props }: Pick<UseControllerProps<TFormValues>, "name" | "control" | "disabled"> & FormField.TextFieldProps & {
18
18
  onValueChange?: (value?: OccupationResponseDto) => void;
19
19
  }) => react_jsx_runtime.JSX.Element;
20
20
 
@@ -209,6 +209,29 @@ declare const useAddressComponent: () => {
209
209
  AddressSearchComponent: () => react_jsx_runtime.JSX.Element;
210
210
  };
211
211
 
212
+ interface BankStockItem {
213
+ label: string;
214
+ value: string;
215
+ Icon: React.ComponentType<React.SVGProps<SVGSVGElement>>;
216
+ }
217
+ interface BankStockSearchModalProps {
218
+ open: boolean;
219
+ onClose: () => void;
220
+ onSelect: (item: BankStockItem) => void;
221
+ }
222
+
223
+ declare function BankStockSearchModal({ open, onClose, onSelect }: BankStockSearchModalProps): react_jsx_runtime.JSX.Element;
224
+
225
+ declare function useBankStockSearch({ onSelect }: {
226
+ onSelect: (item: BankStockItem) => void;
227
+ }): {
228
+ searchKeyword: string;
229
+ setSearchKeyword: React$1.Dispatch<React$1.SetStateAction<string>>;
230
+ bankList: BankStockItem[];
231
+ stockList: BankStockItem[];
232
+ handleSelect: (item: BankStockItem) => void;
233
+ };
234
+
212
235
  declare function useJobVehicleSearchModal(): {
213
236
  selectedJob: sales_frontend_api_method.OccupationResponseDto | null;
214
237
  selectedVehicle: sales_frontend_api_method.VehicleTypeResponseDto | undefined;
@@ -224,5 +247,5 @@ interface JobSearchModalProps {
224
247
  }
225
248
  declare const JobSearchModal: React__default.FC<JobSearchModalProps>;
226
249
 
227
- export { Attachment, FormCheckbox, FormCheckboxButton, FormDatePicker, FormDateRangePicker, FormSearchJobField, FormSegmentGroup, FormSelect, FormTextField, JobSearchModal, StepIndicator, resize, testSignatureBase64Data, useAddressComponent, useCamera, useCanvasPaint, useJobVehicleSearchModal, useSearchAddress };
228
- export type { AttachedPhoto, AttachmentProps, DownloadProps, PaintProps, Pen, StepIndicatorProps, StepItem, cameraItemType, cameraOptions };
250
+ export { Attachment, BankStockSearchModal, FormCheckbox, FormCheckboxButton, FormDatePicker, FormDateRangePicker, FormSearchJobField, FormSegmentGroup, FormSelect, FormTextField, JobSearchModal, StepIndicator, resize, testSignatureBase64Data, useAddressComponent, useBankStockSearch, useCamera, useCanvasPaint, useJobVehicleSearchModal, useSearchAddress };
251
+ export type { AttachedPhoto, AttachmentProps, BankStockItem, BankStockSearchModalProps, DownloadProps, PaintProps, Pen, StepIndicatorProps, StepItem, cameraItemType, cameraOptions };
package/dist/index.esm.js CHANGED
@@ -1,14 +1,16 @@
1
1
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
2
2
  import { useController } from 'react-hook-form';
3
3
  import { CheckboxButton, Checkbox, DatePicker, DateRangePicker, Accordion, Radio, Table, Button, FormField, Select, Tab, Icon, useModalState, Modal, SegmentGroup, ModalUtils, FormCore, RadioGroup } from 'sales-frontend-design-system';
4
- import React, { useState, useEffect, useRef, useCallback } from 'react';
4
+ import React, { useState, useEffect, useRef, useCallback, useMemo } from 'react';
5
5
  import { useSearchOccupationQuery, useSearchModalAddressQuery, useSearchVehicleQuery } from 'sales-frontend-api/method';
6
6
  import styles from './modal/pre-standard/job-search-modal/job-search-modal.module.scss';
7
7
  import styles$1 from './step-indicator/step-indicator.module.scss';
8
8
  import styles$2 from './camera/camera.module.scss';
9
9
  import styles$3 from './modal/standard/address-search/select-address.module.scss';
10
- import styles$4 from './modal/pre-standard/job-vehicle-search-modal/job-vehicle-search-modal.module.scss';
11
- import styles$5 from './modal/pre-standard/vehicle-search-modal/vehicle-search-modal.module.scss';
10
+ import styles$4 from './modal/standard/bank-stock-search/bank-stock-search-modal.module.scss';
11
+ import { IconGraphicsBankHsbc, IconGraphicsBankKebHana, IconGraphicsBankScJeil, IconGraphicsBankGyeongnam, IconGraphicsBankGwangju, IconGraphicsBankKukmin, IconGraphicsBankKiup, IconGraphicsBankJiyeokNonghyeop, IconGraphicsBankNhNonghyeop, IconGraphicsBankDaegu, IconGraphicsBankBusan, IconGraphicsBankSanlim, IconGraphicsBankSaneop, IconGraphicsBankSaemaulGeumgo, IconGraphicsBankSuhyeop, IconGraphicsBankSinhan, IconGraphicsBankSinhyeop, IconGraphicsBankOehwan, IconGraphicsBankWoori, IconGraphicsBankPost, IconGraphicsBankJeochuk, IconGraphicsBankJeonbuk, IconGraphicsBankJeju, IconGraphicsBankKakaoBank, IconGraphicsBankKBank, IconGraphicsBankHankookCity, IconGraphicsStockDbGeumyungTujajeungkwon, IconGraphicsStockKbJeungkwon, IconGraphicsStockNhWooriTujajeungkwon, IconGraphicsStockNhTujajeungkwon, IconGraphicsStockSkJeungkwon, IconGraphicsStockGyoboJeungkwon, IconGraphicsStockDaesinJeungkwon, IconGraphicsStockMeritzJeungkwon, IconGraphicsStockMiraeAssetJeungkwon, IconGraphicsStockBugukJeungkwon, IconGraphicsStockSamsungJeungkwon, IconGraphicsStockSinyeongJeungkwon, IconGraphicsStockSinhanTujajeungkwon, IconGraphicsStockYuantaJeungkwon, IconGraphicsStockYujinTujajeungkwon, IconGraphicsStockKiwoomJeungkwon, IconGraphicsStockHanaGeumyungTujajeungkwon, IconGraphicsStockHiTujajeungkwon, IconGraphicsStockHankookJeungkwonGeumyung, IconGraphicsStockHankookTujajeungkwon, IconGraphicsStockHanwhaTujajeungkwon, IconGraphicsStockHyundaiChaJeungkwon, IconGraphicsStockHochulEopsum } from 'sales-frontend-assets';
12
+ import styles$5 from './modal/pre-standard/job-vehicle-search-modal/job-vehicle-search-modal.module.scss';
13
+ import styles$6 from './modal/pre-standard/vehicle-search-modal/vehicle-search-modal.module.scss';
12
14
 
13
15
  const FormCheckboxButton = ({
14
16
  name,
@@ -648,7 +650,6 @@ const FormSearchJobField = ({
648
650
  name,
649
651
  control,
650
652
  disabled,
651
- rootProps,
652
653
  error,
653
654
  size = "medium",
654
655
  placeholder = "\uC9C1\uC885 \uAC80\uC0C9",
@@ -666,21 +667,16 @@ const FormSearchJobField = ({
666
667
  }, [selectedJob]);
667
668
  return /* @__PURE__ */ jsxs(Fragment, { children: [
668
669
  /* @__PURE__ */ jsx(
669
- FormField.TextField,
670
+ FormField.ComboBox,
670
671
  {
671
672
  ...props,
672
673
  ...field,
673
674
  id: field.name,
674
675
  error: fieldState.invalid || error,
675
676
  value: selected?.occupationIndustryName ?? "",
676
- rootProps: {
677
- ...rootProps,
678
- endElement: /* @__PURE__ */ jsx(Icon, { name: "sub-ui/search" })
679
- },
680
- readOnly: true,
677
+ icon: "search",
681
678
  size,
682
679
  placeholder,
683
- style: { background: "#fff", cursor: "pointer" },
684
680
  autoComplete: "off",
685
681
  onClick: openJobSearchModal
686
682
  }
@@ -1669,7 +1665,111 @@ const useAddressComponent = () => {
1669
1665
  };
1670
1666
  };
1671
1667
 
1672
- const cx$2 = classNames.bind(styles$4);
1668
+ const BANK_LIST = [
1669
+ { label: "HSBC", value: "HSBC", Icon: IconGraphicsBankHsbc },
1670
+ { label: "KEB\uD558\uB098", value: "KEB\uD558\uB098", Icon: IconGraphicsBankKebHana },
1671
+ { label: "SC\uC81C\uC77C", value: "SC\uC81C\uC77C", Icon: IconGraphicsBankScJeil },
1672
+ { label: "\uACBD\uB0A8", value: "\uACBD\uB0A8", Icon: IconGraphicsBankGyeongnam },
1673
+ { label: "\uAD11\uC8FC", value: "\uAD11\uC8FC", Icon: IconGraphicsBankGwangju },
1674
+ { label: "\uAD6D\uBBFC", value: "\uAD6D\uBBFC", Icon: IconGraphicsBankKukmin },
1675
+ { label: "\uAE30\uC5C5", value: "\uAE30\uC5C5", Icon: IconGraphicsBankKiup },
1676
+ { label: "\uC9C0\uC5ED\uB18D\uD611", value: "\uC9C0\uC5ED\uB18D\uD611", Icon: IconGraphicsBankJiyeokNonghyeop },
1677
+ { label: "NH\uB18D\uD611", value: "NH\uB18D\uD611", Icon: IconGraphicsBankNhNonghyeop },
1678
+ { label: "\uB300\uAD6C", value: "\uB300\uAD6C", Icon: IconGraphicsBankDaegu },
1679
+ { label: "\uBD80\uC0B0", value: "\uBD80\uC0B0", Icon: IconGraphicsBankBusan },
1680
+ { label: "\uC0B0\uB9BC\uC870\uD569", value: "\uC0B0\uB9BC\uC870\uD569", Icon: IconGraphicsBankSanlim },
1681
+ { label: "\uC0B0\uC5C5", value: "\uC0B0\uC5C5", Icon: IconGraphicsBankSaneop },
1682
+ { label: "\uC0C8\uB9C8\uC744\uAE08\uACE0", value: "\uC0C8\uB9C8\uC744\uAE08\uACE0", Icon: IconGraphicsBankSaemaulGeumgo },
1683
+ { label: "\uC218\uD611", value: "\uC218\uD611", Icon: IconGraphicsBankSuhyeop },
1684
+ { label: "\uC2E0\uD55C", value: "\uC2E0\uD55C", Icon: IconGraphicsBankSinhan },
1685
+ { label: "\uC2E0\uD611", value: "\uC2E0\uD611", Icon: IconGraphicsBankSinhyeop },
1686
+ { label: "\uC678\uD658", value: "\uC678\uD658", Icon: IconGraphicsBankOehwan },
1687
+ { label: "\uC6B0\uB9AC", value: "\uC6B0\uB9AC", Icon: IconGraphicsBankWoori },
1688
+ { label: "\uC6B0\uCCB4\uAD6D", value: "\uC6B0\uCCB4\uAD6D", Icon: IconGraphicsBankPost },
1689
+ { label: "\uC800\uCD95", value: "\uC800\uCD95", Icon: IconGraphicsBankJeochuk },
1690
+ { label: "\uC804\uBD81", value: "\uC804\uBD81", Icon: IconGraphicsBankJeonbuk },
1691
+ { label: "\uC81C\uC8FC", value: "\uC81C\uC8FC", Icon: IconGraphicsBankJeju },
1692
+ { label: "\uCE74\uCE74\uC624\uBC45\uD06C", value: "\uCE74\uCE74\uC624\uBC45\uD06C", Icon: IconGraphicsBankKakaoBank },
1693
+ { label: "\uCF00\uC774\uBC45\uD06C", value: "\uCF00\uC774\uBC45\uD06C", Icon: IconGraphicsBankKBank },
1694
+ { label: "\uD55C\uAD6D\uC528\uD2F0", value: "\uD55C\uAD6D\uC528\uD2F0", Icon: IconGraphicsBankHankookCity }
1695
+ ];
1696
+ const STOCK_LIST = [
1697
+ { label: "DB\uAE08\uC735\n\uD22C\uC790\uC99D\uAD8C", value: "DB\uAE08\uC735\uD22C\uC790", Icon: IconGraphicsStockDbGeumyungTujajeungkwon },
1698
+ { label: "KB\uC99D\uAD8C", value: "KB\uC99D\uAD8C", Icon: IconGraphicsStockKbJeungkwon },
1699
+ { label: "NH(\uC6B0\uB9AC)\n\uD22C\uC790\uC99D\uAD8C", value: "NH(\uC6B0\uB9AC)\uD22C\uC790\uC99D\uAD8C", Icon: IconGraphicsStockNhWooriTujajeungkwon },
1700
+ { label: "NH\n\uD22C\uC790\uC99D\uAD8C", value: "NH\uD22C\uC790\uC99D\uAD8C", Icon: IconGraphicsStockNhTujajeungkwon },
1701
+ { label: "SK\uC99D\uAD8C", value: "SK\uC99D\uAD8C", Icon: IconGraphicsStockSkJeungkwon },
1702
+ { label: "\uAD50\uBCF4\uC99D\uAD8C", value: "\uAD50\uBCF4\uC99D\uAD8C", Icon: IconGraphicsStockGyoboJeungkwon },
1703
+ { label: "\uB300\uC2E0\uC99D\uAD8C", value: "\uB300\uC2E0\uC99D\uAD8C", Icon: IconGraphicsStockDaesinJeungkwon },
1704
+ { label: "\uBA54\uB9AC\uCE20\uC99D\uAD8C", value: "\uBA54\uB9AC\uCE20\uC99D\uAD8C", Icon: IconGraphicsStockMeritzJeungkwon },
1705
+ { label: "\uBBF8\uB798\uC5D0\uC14B\n\uC99D\uAD8C", value: "\uBBF8\uB798\uC5D0\uC14B\uC99D\uAD8C", Icon: IconGraphicsStockMiraeAssetJeungkwon },
1706
+ { label: "\uBD80\uAD6D\uC99D\uAD8C", value: "\uBD80\uAD6D\uC99D\uAD8C", Icon: IconGraphicsStockBugukJeungkwon },
1707
+ { label: "\uC0BC\uC131\uC99D\uAD8C", value: "\uC0BC\uC131\uC99D\uAD8C", Icon: IconGraphicsStockSamsungJeungkwon },
1708
+ { label: "\uC2E0\uC601\uC99D\uAD8C", value: "\uC2E0\uC601\uC99D\uAD8C", Icon: IconGraphicsStockSinyeongJeungkwon },
1709
+ { label: "\uC2E0\uD55C\uAE08\uC735\n\uD22C\uC790\uC99D\uAD8C", value: "\uC2E0\uD55C\uAE08\uC735\uD22C\uC790\uC99D\uAD8C", Icon: IconGraphicsStockSinhanTujajeungkwon },
1710
+ { label: "\uC720\uC548\uD0C0\uC99D\uAD8C", value: "\uC720\uC548\uD0C0\uC99D\uAD8C", Icon: IconGraphicsStockYuantaJeungkwon },
1711
+ { label: "\uC720\uC9C4\n\uD22C\uC790\uC99D\uAD8C", value: "\uC720\uC9C4\uD22C\uC790\uC99D\uAD8C", Icon: IconGraphicsStockYujinTujajeungkwon },
1712
+ { label: "\uD0A4\uC6C0\uC99D\uAD8C", value: "\uD0A4\uC6C0\uC99D\uAD8C", Icon: IconGraphicsStockKiwoomJeungkwon },
1713
+ { label: "\uD558\uB098\uAE08\uC735\n\uD22C\uC790\uC99D\uAD8C", value: "\uD558\uB098\uAE08\uC735\uD22C\uC790\uC99D\uAD8C", Icon: IconGraphicsStockHanaGeumyungTujajeungkwon },
1714
+ { label: "\uD558\uC774\n\uD22C\uC790\uC99D\uAD8C", value: "\uD558\uC774\uD22C\uC790\uC99D\uAD8C", Icon: IconGraphicsStockHiTujajeungkwon },
1715
+ { label: "\uD55C\uAD6D\uC99D\uAD8C\n\uAE08\uC735", value: "\uD55C\uAD6D\uC99D\uAD8C\uAE08\uC735", Icon: IconGraphicsStockHankookJeungkwonGeumyung },
1716
+ { label: "\uD55C\uAD6D\n\uD22C\uC790\uC99D\uAD8C", value: "\uD55C\uAD6D\uD22C\uC790\uC99D\uAD8C", Icon: IconGraphicsStockHankookTujajeungkwon },
1717
+ { label: "\uD55C\uD654\n\uD22C\uC790\uC99D\uAD8C", value: "\uD55C\uD654\uD22C\uC790\uC99D\uAD8C", Icon: IconGraphicsStockHanwhaTujajeungkwon },
1718
+ { label: "\uD604\uB300\uCC28\uC99D\uAD8C", value: "\uD604\uB300\uCC28\uC99D\uAD8C", Icon: IconGraphicsStockHyundaiChaJeungkwon },
1719
+ { label: "\uD638\uCD9C\uC5C6\uC74C", value: "\uD638\uCD9C\uC5C6\uC74C", Icon: IconGraphicsStockHochulEopsum }
1720
+ ];
1721
+ function useBankStockSearch({ onSelect }) {
1722
+ const [searchKeyword, setSearchKeyword] = useState("");
1723
+ const bankList = useMemo(() => BANK_LIST.filter((bank) => bank.label.includes(searchKeyword)), [searchKeyword]);
1724
+ const stockList = useMemo(() => STOCK_LIST.filter((stock) => stock.label.includes(searchKeyword)), [searchKeyword]);
1725
+ const handleSelect = (item) => {
1726
+ onSelect(item);
1727
+ };
1728
+ return {
1729
+ searchKeyword,
1730
+ setSearchKeyword,
1731
+ bankList,
1732
+ stockList,
1733
+ handleSelect
1734
+ };
1735
+ }
1736
+
1737
+ function chunk(array, size) {
1738
+ return Array.from({ length: Math.ceil(array.length / size) }, (v, i) => array.slice(i * size, i * size + size));
1739
+ }
1740
+ function BankStockSearchModal({ open, onClose, onSelect }) {
1741
+ const { bankList, stockList, handleSelect } = useBankStockSearch({
1742
+ onSelect
1743
+ });
1744
+ const renderItems = (list) => {
1745
+ const chunkedList = chunk(list, 5);
1746
+ return /* @__PURE__ */ jsx("div", { className: styles$4["list-container"], children: chunkedList.map((chunk2, chunkIndex) => /* @__PURE__ */ jsxs("div", { className: styles$4.row, children: [
1747
+ chunk2.map((item) => /* @__PURE__ */ jsxs("div", { className: styles$4.item, onClick: () => handleSelect(item), children: [
1748
+ /* @__PURE__ */ jsx("div", { className: styles$4["icon-wrapper"], children: /* @__PURE__ */ jsx(item.Icon, {}) }),
1749
+ /* @__PURE__ */ jsx("span", { children: item.label })
1750
+ ] }, item.value)),
1751
+ chunk2.length < 5 && Array.from({ length: 5 - chunk2.length }).map((_, i) => /* @__PURE__ */ jsx("div", { className: styles$4.item, style: { visibility: "hidden" } }, `placeholder-${chunkIndex}-${i}`))
1752
+ ] }, chunkIndex)) });
1753
+ };
1754
+ return /* @__PURE__ */ jsxs(Modal.Root, { isOpen: open, onClose, modalSize: "full-screen", children: [
1755
+ /* @__PURE__ */ jsx(Modal.Overlay, {}),
1756
+ /* @__PURE__ */ jsxs(Modal.Content, { children: [
1757
+ /* @__PURE__ */ jsx(Modal.Header, { headerTitle: "\uC740\uD589/\uC99D\uAD8C\uC0AC \uC120\uD0DD", showCloseButton: true }),
1758
+ /* @__PURE__ */ jsx(Modal.Body, { children: /* @__PURE__ */ jsxs("div", { className: styles$4.container, children: [
1759
+ /* @__PURE__ */ jsxs("div", { className: styles$4.section, children: [
1760
+ /* @__PURE__ */ jsx("p", { className: styles$4["section-title"], children: "\uC740\uD589\uC0AC" }),
1761
+ renderItems(bankList)
1762
+ ] }),
1763
+ /* @__PURE__ */ jsxs("div", { className: styles$4.section, children: [
1764
+ /* @__PURE__ */ jsx("p", { className: styles$4["section-title"], children: "\uC99D\uAD8C\uC0AC" }),
1765
+ renderItems(stockList)
1766
+ ] })
1767
+ ] }) })
1768
+ ] })
1769
+ ] });
1770
+ }
1771
+
1772
+ const cx$2 = classNames.bind(styles$5);
1673
1773
  const JobVehicleSearchGrade = ({ riskGrade, hospitalizationGrade }) => {
1674
1774
  return /* @__PURE__ */ jsxs("div", { className: cx$2("grade-section"), children: [
1675
1775
  /* @__PURE__ */ jsxs("div", { className: cx$2("icon-title"), children: [
@@ -1690,7 +1790,7 @@ const JobVehicleSearchGrade = ({ riskGrade, hospitalizationGrade }) => {
1690
1790
  ] });
1691
1791
  };
1692
1792
 
1693
- const cx$1 = classNames.bind(styles$5);
1793
+ const cx$1 = classNames.bind(styles$6);
1694
1794
  function VehicleSearch({ vehicles, onVehicleSelect }) {
1695
1795
  return /* @__PURE__ */ jsxs("div", { className: cx$1("vehicle-search-section"), children: [
1696
1796
  /* @__PURE__ */ jsx("p", { children: "\uC6B4\uC804 \uCC28\uC885" }),
@@ -1756,7 +1856,7 @@ const useJobVehicleSearch = () => {
1756
1856
  };
1757
1857
  };
1758
1858
 
1759
- const cx = classNames.bind(styles$4);
1859
+ const cx = classNames.bind(styles$5);
1760
1860
  function useJobVehicleSearchModal() {
1761
1861
  const {
1762
1862
  selectedVehicle,
@@ -1861,5 +1961,5 @@ const JobSearchModal = ({ onClose }) => {
1861
1961
  ] });
1862
1962
  };
1863
1963
 
1864
- export { Attachment, FormCheckbox, FormCheckboxButton, FormDatePicker, FormDateRangePicker, FormSearchJobField, FormSegmentGroup, FormSelect, FormTextField, JobSearchModal, StepIndicator, resize, testSignatureBase64Data, useAddressComponent, useCamera, useCanvasPaint, useJobVehicleSearchModal, useSearchAddress };
1964
+ export { Attachment, BankStockSearchModal, FormCheckbox, FormCheckboxButton, FormDatePicker, FormDateRangePicker, FormSearchJobField, FormSegmentGroup, FormSelect, FormTextField, JobSearchModal, StepIndicator, resize, testSignatureBase64Data, useAddressComponent, useBankStockSearch, useCamera, useCanvasPaint, useJobVehicleSearchModal, useSearchAddress };
1865
1965
  //# sourceMappingURL=index.esm.js.map