143 lines
3.8 KiB
TypeScript
143 lines
3.8 KiB
TypeScript
import type { comCodeState } from "@/app/store/common/code";
|
|
import {
|
|
filePickedBlob,
|
|
type SelectDataType,
|
|
type ReturnType,
|
|
filePickedBlobArray,
|
|
sheetParameter,
|
|
} from "@common/business_components/ui";
|
|
import type { RefObject } from "react";
|
|
|
|
export const getCity = (val: string, sggCd: SelectDataType[]) => {
|
|
const data = sggCd
|
|
.filter((item) => String(item.val).substring(0, 2) === val)
|
|
.map((item) => ({
|
|
val: item.val,
|
|
text: item.text, // 한국어 텍스트
|
|
}));
|
|
return data;
|
|
};
|
|
|
|
// cd text 넣기
|
|
export const tableData = (data: any, code: comCodeState) => {
|
|
const chCode = code.code;
|
|
return data?.map(
|
|
(item: {
|
|
sggCd: string;
|
|
ctpvCd: string;
|
|
reuseBuilding: { lawTrgtYn: any; bdstUsgCd: any }[];
|
|
}) => {
|
|
let returnData = {};
|
|
const sggText = chCode.sggCd.find(
|
|
(cd) => cd.val === String(item.sggCd)
|
|
)?.text;
|
|
const cityText = chCode.cityCd.find(
|
|
(cd) => cd.val === String(item.ctpvCd)
|
|
)?.text;
|
|
if (item?.reuseBuilding?.length > 0) {
|
|
const bdsgUsgText = chCode.bdstUsgCd.find(
|
|
(cd) => Number(cd.val) === item?.reuseBuilding[0]?.bdstUsgCd
|
|
)?.text;
|
|
const lawTrgtYn = item?.reuseBuilding[0]?.lawTrgtYn;
|
|
|
|
returnData = {
|
|
...item,
|
|
sggText: sggText ?? "없음",
|
|
cityText: cityText ?? "없음",
|
|
bdsgUsgText: bdsgUsgText,
|
|
lawTrgtYn: lawTrgtYn,
|
|
};
|
|
} else {
|
|
returnData = {
|
|
...item,
|
|
sggText: sggText ?? "없음",
|
|
cityText: cityText ?? "없음",
|
|
};
|
|
}
|
|
|
|
return returnData;
|
|
}
|
|
);
|
|
};
|
|
|
|
export const excelDownload = (
|
|
excelList: [][],
|
|
fileNm: string,
|
|
sampleFile: string,
|
|
headerRange = "A1:V3",
|
|
writeLine = 4
|
|
) => {
|
|
if (excelList.length === 0) return;
|
|
fetch(`/${sampleFile}`, {}).then(async (response) => {
|
|
if (!response.ok) {
|
|
throw Error(response.statusText);
|
|
}
|
|
// 받은 파일 바인너리 처리
|
|
const blobRet = await response.arrayBuffer();
|
|
// 버퍼에 있는 엑셀데이터 전달 후 json으로 변환
|
|
await filePickedBlob(blobRet, excelList, fileNm, writeLine, headerRange);
|
|
});
|
|
};
|
|
|
|
export const excelArrayDownload = (
|
|
fileNm: string,
|
|
sampleFile: string,
|
|
sheetArray: [typeof sheetParameter]
|
|
) => {
|
|
if (!sheetArray) return;
|
|
fetch(`/${sampleFile}`, {}).then(async (response) => {
|
|
if (!response.ok) {
|
|
throw Error(response.statusText);
|
|
}
|
|
// 받은 파일 바인너리 처리
|
|
const blobRet = await response.arrayBuffer();
|
|
// 버퍼에 있는 엑셀데이터 전달 후 json으로 변환
|
|
await filePickedBlobArray(blobRet, fileNm, sheetArray);
|
|
});
|
|
};
|
|
|
|
|
|
|
|
// onchange 텍스트를 숫자로 and ,제거
|
|
export const handleCommaNumberChange = (
|
|
e: React.ChangeEvent<HTMLInputElement>,
|
|
onChange: (value: number | "") => void
|
|
) => {
|
|
const raw = e.target.value.replace(/,/g, "");
|
|
if (!/^\d*$/.test(raw)) return;
|
|
onChange(raw === "" ? "" : Number(raw));
|
|
};
|
|
|
|
// 숫자입력시 , 삽입
|
|
export const formatCommaNumber = (
|
|
value: number | string | undefined | null
|
|
): string => {
|
|
if (value === undefined || value === null || value === "") return "";
|
|
return Number(value).toLocaleString();
|
|
};
|
|
|
|
export const getCityOrSgg = (ref: RefObject<ReturnType>) => {
|
|
let con;
|
|
if (ref.current != null)
|
|
if (ref.current.sigunValue != "0") {
|
|
con = ref.current.sigunValue;
|
|
} else {
|
|
con = ref.current.sidoValue;
|
|
}
|
|
return con;
|
|
};
|
|
|
|
|
|
export const safeDate = (value: any): Date | undefined => {
|
|
const date = new Date(value);
|
|
return isNaN(date.getTime()) ? undefined : date;
|
|
};
|
|
|
|
const currentYear = new Date().getFullYear();
|
|
export const yearOptions: { val: string; text: string }[] = Array.from(
|
|
{ length: currentYear - 1969 },
|
|
(_, i) => ({
|
|
val: String(1970 + i),
|
|
text: `${1970 + i}년`,
|
|
})
|
|
); |