import moment from 'moment'; import { ChangeEvent, useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { IMAGE_ROOT } from '@/shared/constants/common'; import { useSettlementsCalendarMutation } from '../api/use-settlements-calendar-mutation'; import { CalendarAmountRow } from './calendar-amount-row'; import { CalendarSettlementItem } from './calendar-settlement-item'; import { CalendarGrid } from './calendar-grid'; import { SettlementDays, SettlementsCalendarParams, SettlementsCalendarResponse, SettlementStatus } from '../model/types'; import { useStore } from '@/shared/model/store'; import { showAlert } from '@/widgets/show-alert'; import { snackBar } from '@/shared/lib'; export const CalendarWrap = () => { const { t, i18n } = useTranslation(); moment.locale(i18n.language); const midOptions = useStore.getState().UserStore.selectOptionsMids; const userMid = useStore.getState().UserStore.mid; let midItem = midOptions.filter((value, index) => { return value.value === userMid; }); const [mid, setMid] = useState((midItem.length > 0)? userMid: ''); const [yearMonth, setYearMonth] = useState(moment().format('YYYYMM')); const [totalCompletedAmount, setTotalCompletedAmount] = useState(0); const [totalScheduledAmount, setTotalScheduledAmount] = useState(0); const [scheduledList, setScheduledList] = useState>([]); const [completedList, setCompletedList] = useState>([]); const [scheduledDateList, setScheduledDateList] = useState>([]); const [completedDateList, setCompletedDateList] = useState>([]); const [filterDate, setFilterDate] = useState(0); const [lastMonth, setLastMonth] = useState(false); const [onActionCalendar, setOnActionCalendar] = useState(true); const { mutateAsync: settlementsCalendar } = useSettlementsCalendarMutation(); const callCalendar = () => { let params: SettlementsCalendarParams = { mid: mid, yearMonth: yearMonth }; settlementsCalendar(params).then((rs: SettlementsCalendarResponse) => { setTotalCompletedAmount(rs.totalCompletedAmount); setTotalScheduledAmount(rs.totalScheduledAmount); setYearMonth(rs.yearMonth); let scheduleArr = []; let scheduleDateArr = []; let completedArr = []; let completedDateArr = []; if(!!rs.settlementDays && rs.settlementDays.length > 0){ for(let i=0;i { if(e.response?.data?.error?.message){ snackBar(e.response?.data?.error?.message); return; } }).finally(() => { let maxYearMonth = moment().format('YYYYMM'); // let maxYearMonthValue = moment(maxYearMonth).format('YYYYMM'); let newYearMonth = moment(yearMonth).add(1, 'month').format('YYYYMM'); // let newYearMonthValue = moment(newYearMonth).format('YYYYMM'); if(parseInt(newYearMonth) <= parseInt(maxYearMonth)){ setLastMonth(false); } else{ setLastMonth(true); } setOnActionCalendar(true); }); }; const initialList = () => { // API 응답시간 문제로 초기화 한다 setScheduledList([]); setCompletedList([]); setScheduledDateList([]); setCompletedDateList([]); setOnActionCalendar(false); }; const onClickToMoveMonthPrev = () => { if(onActionCalendar){ let newYearMonth = moment(yearMonth).subtract(1, 'month').format('YYYYMM'); setYearMonth(newYearMonth); setYearMonth(newYearMonth); setFilterDate(0); initialList(); } }; const onClickToMoveMonthNext = () => { if(onActionCalendar){ let maxYearMonth = moment().format('YYYYMM'); let maxYearMonthValue = moment(maxYearMonth).format('YYYYMM'); let newYearMonth = moment(yearMonth).add(1, 'month').format('YYYYMM'); let newYearMonthValue = moment(newYearMonth).format('YYYYMM'); if(parseInt(newYearMonthValue) <= parseInt(maxYearMonthValue)){ setYearMonth(newYearMonth); setFilterDate(0); initialList(); } } }; const onClickToCalendarDate = (day: number) => { setFilterDate(day); }; useEffect(() => { if(!!mid){ callCalendar(); } }, [yearMonth, mid]); return ( <>
{ moment(yearMonth).format(i18n.language === 'ko' ? 'YYYY년 MM월' : 'YYYY MMM') }
{t('settlement.settlementCompleted')}
{t('settlement.depositScheduled')}
{ (!!scheduledList && scheduledList.length > 0) && } { (!!completedList && completedList.length > 0) && }
); };