import * as _ from 'lodash-es'; import { PATHS } from '@/shared/constants/paths'; import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { HeaderType } from '@/entities/common/model/types'; import { IMAGE_ROOT } from '@/shared/constants/common'; import { useSetHeaderTitle, useSetHeaderType, useSetFooterMode, useSetOnBack } from '@/widgets/sub-layout/use-sub-layout'; import { useExtensionAlimtalkSettingDetailMutation } from '@/entities/additional-service/api/alimtalk/use-extansion-alimtalk-setting-detail-mutation'; import { useExtensionAlimtalkSettingSaveMutation } from '@/entities/additional-service/api/alimtalk/use-extansion-alimtalk-setting-save-mutation'; import { AlimtalkSettingFlagKeys, ExtensionAlimtalkSettingDetailParams, ExtensionAlimtalkSettingDetailResponse, ExtensionAlimtalkSettingSaveParams, SendMerchantInfo, SendUserInfo } from '@/entities/additional-service/model/alimtalk/types'; import { useEffect, useState } from 'react'; import { AlimTalkSettingServiceRow } from '@/entities/additional-service/ui/alimtalk/setting-service-row'; import { useStore } from '@/shared/model/store'; import { snackBar } from '@/shared/lib'; export const AlimtalkSettingPage = () => { const { navigate } = useNavigate(); const midOptionsWithoutGids = useStore.getState().UserStore.selectOptionsMidsWithoutGids; const userMid = useStore.getState().UserStore.mid; const [mid, setMid] = useState(''); const [merchantCardApprovalFlag, setMerchantCardApprovalFlag] = useState(false); const [merchantCardCancelFlag, setMerchantCardCancelFlag] = useState(false); const [merchantBankApprovalFlag, setMerchantBankApprovalFlag] = useState(false); const [merchantBankCancelFlag, setMerchantBankCancelFlag] = useState(false); const [merchantVirtureAccountDepositRequestFlag, setMerchantVirtureAccountDepositRequestFlag] = useState(false); const [merchantVirtureAccountDepositCompleteFlag, setMerchantVirtureAccountDepositCompleteFlag] = useState(false); const [merchantVirtureAccountRefundFlag, setMerchantVirtureAccountRefundFlag] = useState(false); const [userCardApprovalFlag, setUserCardApprovalFlag] = useState(false); const [userCardCancelFlag, setUserCardCancelFlag] = useState(false); const [userBankApprovalFlag, setUserBankApprovalFlag] = useState(false); const [userBankCancelFlag, setUserBankCancelFlag] = useState(false); const [userVirtureAccountDepositRequestFlag, setUserVirtureAccountDepositRequestFlag] = useState(false); const [userVirtureAccountDepositCompleteFlag, setUserVirtureAccountDepositCompleteFlag] = useState(false); const [userVirtureAccountRefundFlag, setUserVirtureAccountRefundFlag] = useState(false); const { mutateAsync: alimtalkSettingDetail } = useExtensionAlimtalkSettingDetailMutation(); const { mutateAsync: alimtalkSettingSave } = useExtensionAlimtalkSettingSaveMutation(); const callSettingDetail = () => { let params: ExtensionAlimtalkSettingDetailParams = { mid: mid }; alimtalkSettingDetail(params).then((rs: ExtensionAlimtalkSettingDetailResponse) => { let sendMerchantInfo = rs.sendMerchantInfo; let sendUserInfo = rs.sendUserInfo; if (sendMerchantInfo) { setMerchantCardApprovalFlag((sendMerchantInfo?.cardApprovalFlag || false)); setMerchantCardCancelFlag(sendMerchantInfo?.cardCancelFlag || false); setMerchantBankApprovalFlag(sendMerchantInfo?.bankApprovalFlag || false); setMerchantBankCancelFlag(sendMerchantInfo?.bankCancelFlag || false); setMerchantVirtureAccountDepositRequestFlag(sendMerchantInfo?.virtureAccountDepositRequestFlag || false); setMerchantVirtureAccountDepositCompleteFlag(sendMerchantInfo?.virtureAccountDepositCompleteFlag || false); setMerchantVirtureAccountRefundFlag(sendMerchantInfo?.virtureAccountRefundFlag || false); } if (sendUserInfo) { setUserCardApprovalFlag(sendUserInfo?.cardApprovalFlag || false); setUserCardCancelFlag(sendUserInfo?.cardCancelFlag || false); setUserBankApprovalFlag(sendUserInfo?.bankApprovalFlag || false); setUserBankCancelFlag(sendUserInfo?.bankCancelFlag || false); setUserVirtureAccountDepositRequestFlag(sendUserInfo?.virtureAccountDepositRequestFlag || false); setUserVirtureAccountDepositCompleteFlag(sendUserInfo?.virtureAccountDepositCompleteFlag || false); setUserVirtureAccountRefundFlag(sendUserInfo?.virtureAccountRefundFlag || false); } }); }; const callSettingSave = () => { let params: ExtensionAlimtalkSettingSaveParams = { mid: mid, sendMerchantInfo: { cardApprovalFlag: merchantCardApprovalFlag, cardCancelFlag: merchantCardCancelFlag, bankApprovalFlag: merchantBankApprovalFlag, bankCancelFlag: merchantBankCancelFlag, virtureAccountDepositRequestFlag: merchantVirtureAccountDepositRequestFlag, virtureAccountDepositCompleteFlag: merchantVirtureAccountDepositCompleteFlag, virtureAccountRefundFlag: merchantVirtureAccountRefundFlag }, sendUserInfo: { cardApprovalFlag: userCardApprovalFlag, cardCancelFlag: userCardCancelFlag, bankApprovalFlag: userBankApprovalFlag, bankCancelFlag: userBankCancelFlag, virtureAccountDepositRequestFlag: userVirtureAccountDepositRequestFlag, virtureAccountDepositCompleteFlag: userVirtureAccountDepositCompleteFlag, virtureAccountRefundFlag: userVirtureAccountRefundFlag }, }; alimtalkSettingSave(params) .then((rs) => { snackBar("저장을 성공하였습니다."); }) .catch((error) => { const failReason = error?.response?.data?.message || error?.message || "알 수 없는 오류"; snackBar(`[실패] ${failReason}`); }); }; useSetHeaderTitle('알림톡 결제통보'); useSetHeaderType(HeaderType.LeftArrow); useSetFooterMode(false); useSetOnBack(() => { navigate(PATHS.additionalService.alimtalk.list); }); const onClickToSave = () => { callSettingSave(); }; // MID 초기값 설정 useEffect(() => { if (!mid && midOptionsWithoutGids.length > 0) { // userMid가 옵션에 있으면 userMid 사용, 없으면 첫 번째 옵션 사용 const midItem = midOptionsWithoutGids.filter((value) => value.value === userMid); const initialMid = (midItem.length > 0) ? userMid : midOptionsWithoutGids[0]?.value || ''; if (initialMid) { setMid(initialMid); } } }, [midOptionsWithoutGids, userMid]); // mid가 설정되면 설정 정보 불러오기 useEffect(() => { if (mid) { callSettingDetail(); } }, [mid]); return ( <>
알림톡을 발송할 대상을 설정할 수 있습니다.
알림톡 발송 대상과 유형을 설정해 주세요.
가맹점
가맹점에 발송 고객에게 발송
); };