This commit is contained in:
focp212@naver.com
2025-11-04 10:41:06 +09:00
13 changed files with 337 additions and 109 deletions

View File

@@ -25,7 +25,7 @@ export interface AccountHolderAuthListItem {
} }
export interface AccountHolderAuthListProps { export interface AccountHolderAuthListProps {
additionalServiceCategory: AdditionalServiceCategory; additionalServiceCategory: AdditionalServiceCategory;
listItems: Array<ExtensionAccountHolderAuthContentItem>; listItems: Array<AccountHolderAuthItem>;
mid: string; mid: string;
setDetailData: (detailData: DetailData) => void; setDetailData: (detailData: DetailData) => void;
} }
@@ -51,10 +51,10 @@ export interface ExtensionAccountHolderAuthListParams {
} }
export interface ExtensionAccountHolderAuthListResponse extends DefaulResponsePagination { export interface ExtensionAccountHolderAuthListResponse extends DefaulResponsePagination {
content: Array<ExtensionAccountHolderAuthContentItem> content: Array<AccountHolderAuthItem>
} }
export interface ExtensionAccountHolderAuthContentItem { export interface AccountHolderAuthItem {
tid?: string; tid?: string;
accountName?: string; accountName?: string;
accountNo?: string; accountNo?: string;

View File

@@ -2,6 +2,7 @@ import {
DefaulResponsePagination, DefaulResponsePagination,
DefaultRequestPagination DefaultRequestPagination
} from '@/entities/common/model/types'; } from '@/entities/common/model/types';
import { AdditionalServiceCategory, DetailData, ListItemProps } from '../types';
export enum PaymentStatus { export enum PaymentStatus {
ALL = '', ALL = '',
@@ -19,6 +20,14 @@ export enum ArsPaymentMethod {
SMS = 'SMS', SMS = 'SMS',
ARS = 'ARS' ARS = 'ARS'
}; };
export interface ArsListProps {
additionalServiceCategory: AdditionalServiceCategory;
listItems: Array<ListItemProps>;
mid: string;
setDetailData: (detailData: DetailData) => void;
}
export interface ExtensionArsResendParams { export interface ExtensionArsResendParams {
mid: string; mid: string;
tid: string; tid: string;
@@ -47,7 +56,8 @@ export interface ExtensionArsListParams {
maxAmount?: number; maxAmount?: number;
page?: DefaultRequestPagination; page?: DefaultRequestPagination;
}; };
export interface ArsListContent {
export interface ArsListItem {
tid?: string; tid?: string;
orderDate?: string; orderDate?: string;
orderTime?: string; orderTime?: string;
@@ -59,7 +69,7 @@ export interface ArsListContent {
statusColor?: string; statusColor?: string;
}; };
export interface ExtensionArsListResponse extends DefaulResponsePagination { export interface ExtensionArsListResponse extends DefaulResponsePagination {
content: Array<ArsListContent>; content: Array<ListItemProps>;
}; };
export interface ExtensionArsDownloadExcelParams { export interface ExtensionArsDownloadExcelParams {
mid?: string; mid?: string;

View File

@@ -29,7 +29,6 @@ export interface SmsPaymentListProps {
additionalServiceCategory: AdditionalServiceCategory; additionalServiceCategory: AdditionalServiceCategory;
mid: string; mid: string;
onResendClick?: (mid: string, tid: string) => void; onResendClick?: (mid: string, tid: string) => void;
setDetailData: (detailData: DetailData) => void;
} }
export interface SmsPaymentFilterProps extends FilterProps { export interface SmsPaymentFilterProps extends FilterProps {

View File

@@ -1,7 +1,7 @@
import { DefaulResponsePagination, DefaultRequestPagination } from '@/entities/common/model/types'; import { DefaulResponsePagination, DefaultRequestPagination } from '@/entities/common/model/types';
import { PayoutListItem } from './payout/types'; import { PayoutListItem } from './payout/types';
import { FundAccountTransferContentItem, FundAccountResultContentItem } from './fund-account/types'; import { FundAccountTransferContentItem, FundAccountResultContentItem } from './fund-account/types';
import { ArsListContent } from './ars/types'; import { ArsListItem } from './ars/types';
import { AlimtalkListContent } from './alimtalk/types'; import { AlimtalkListContent } from './alimtalk/types';
import { SmsPaymentListItem } from './sms-payment/types'; import { SmsPaymentListItem } from './sms-payment/types';
import type { ExtensionSmsDetailResponse } from './sms-payment/types'; import type { ExtensionSmsDetailResponse } from './sms-payment/types';
@@ -186,7 +186,7 @@ export interface SettlementAgencyBottomAgreeProps {
// ======================================== // ========================================
export interface ListItemProps extends export interface ListItemProps extends
ArsListContent, AccountHolderSearchListItem, PayoutListItem, LinkPaymentHistoryListItem, LinkPaymentWaitListItem, ArsListItem, AccountHolderSearchListItem, PayoutListItem, LinkPaymentHistoryListItem, LinkPaymentWaitListItem,
FundAccountResultContentItem, FundAccountTransferContentItem, KeyInPaymentListItem, SmsPaymentListItem, AlimtalkListContent, FundAccountResultContentItem, FundAccountTransferContentItem, KeyInPaymentListItem, SmsPaymentListItem, AlimtalkListContent,
AccountHolderAuthListItem, AccountHolderSearchListItem, FaceAuthListItem { AccountHolderAuthListItem, AccountHolderSearchListItem, FaceAuthListItem {
additionalServiceCategory?: AdditionalServiceCategory; additionalServiceCategory?: AdditionalServiceCategory;

View File

@@ -0,0 +1,68 @@
import { ArsListProps } from "../../model/ars/types";
import { AdditionalServiceCategory, ListItemProps } from "../../model/types";
import { ListDateGroup } from "../list-date-group";
export const ArsList = ({
additionalServiceCategory,
listItems,
mid,
setDetailData
}: ArsListProps) => {
const getListDateGroup = () => {
let rs = [];
let date = '';
let list: Array<ListItemProps> = [];
for (let i = 0; i < listItems.length; i++) {
let item = listItems[i];
if (!!item) {
let orderDate = item?.orderDate || '';
let itemDate = orderDate.substring(0, 8);
if (!!itemDate) {
if (i === 0) {
date = itemDate;
}
if (date !== itemDate) {
if (list.length > 0) {
rs.push(
<ListDateGroup
additionalServiceCategory={additionalServiceCategory}
mid={mid}
key={date + '-' + i}
date={date}
items={list}
setDetailData={setDetailData}
></ListDateGroup>
);
}
date = itemDate;
list = [];
}
list.push(item);
}
}
}
if (list.length > 0) {
rs.push(
<ListDateGroup
additionalServiceCategory={additionalServiceCategory}
mid={mid}
key={date + '-last'}
date={date}
items={list}
setDetailData={setDetailData}
></ListDateGroup>
);
}
return rs;
};
return (
<>
<section className="transaction-list">
{getListDateGroup()}
</section>
</>
)
}

View File

@@ -0,0 +1,187 @@
import moment from 'moment';
import { motion } from 'framer-motion';
import { DetailMotionDuration, DetailMotionStyle, DetailMotionVariants } from '@/entities/common/model/constant';
import { useEffect, useState } from 'react';
import { getArsOrderStatusName, getArsPaymentStatusName } from '@/entities/additional-service/model/ars/constant';
import { ArsPaymentMethod, ExtensionArsDetailParams, ExtensionArsDetailResponse, ExtensionArsResendParams, ExtensionArsResendResponse } from "@/entities/additional-service/model/ars/types";
import { useTranslation } from "react-i18next";
import { FullMenuClose } from '@/entities/common/ui/full-menu-close';
import { useExtensionArsDetailMutation } from '@/entities/additional-service/api/ars/use-extension-ars-detail-mutation';
import { useExtensionArsResendMutation } from '@/entities/additional-service/api/ars/use-extension-ars-resend-mutation';
import { snackBar } from '@/shared/lib';
import { ArsResendSmsBottomSheet } from '../resend-sms-bottom-sheet';
export interface ArsDetailProps {
detailOn: boolean;
setDetailOn: (detailOn: boolean) => void;
mid: string;
tid: string;
};
export const ArsDetail = ({
detailOn,
setDetailOn,
mid,
tid
}: ArsDetailProps) => {
const { t } = useTranslation();
const [detail, setDetail] = useState<ExtensionArsDetailResponse>();
const [bottomSheetOn, setBottomSheetOn] = useState<boolean>(false);
const { mutateAsync: extensionArsDetail } = useExtensionArsDetailMutation();
const { mutateAsync: extensionArsResend } = useExtensionArsResendMutation();
const callDetail = () => {
let arsDetailParams: ExtensionArsDetailParams = {
mid: mid,
tid: tid
};
extensionArsDetail(arsDetailParams).then((rs: ExtensionArsDetailResponse) => {
setDetail(rs);
});
}
const arsResend = () => {
let arsResendParams: ExtensionArsResendParams = {
mid: mid,
tid: tid
};
extensionArsResend(arsResendParams).then((rs: ExtensionArsResendResponse) => {
if (rs.status) {
snackBar("SMS 재전송을 성공하였습니다.");
setBottomSheetOn(false);
callDetail(); // 상세 정보 갱신
} else {
const errorMessage = rs.error?.message || 'SMS 재전송이 실패하였습니다.';
snackBar(`[실패] ${errorMessage}`);
}
}).catch((error) => {
const errorMessage = error?.response?.data?.error?.message ||
error?.message ||
'SMS 재전송 중 오류가 발생했습니다.';
snackBar(`[실패] ${errorMessage}`);
});
}
const onClickToOpenResendBottomSheet = () => {
setBottomSheetOn(true);
};
const onClickToClose = () => {
setDetailOn(false);
};
const getDate = (date?: string) => {
return (date) ? moment(date.substr(0, 8)).format('YYYY.MM.DD') : '';
};
useEffect(() => {
if (!!mid && !!tid) {
callDetail();
}
}, [mid, tid]);
return (
<>
<motion.div
className="full-menu-modal"
initial="hidden"
animate={(detailOn) ? 'visible' : 'hidden'}
variants={DetailMotionVariants}
transition={DetailMotionDuration}
style={DetailMotionStyle}
>
<div className="full-menu-container pdw-16">
<div className="full-menu-header">
<div className="full-menu-title center">{'ARS 결제 상세'}</div>
<div className="full-menu-actions">
<FullMenuClose
addClass="full-menu-close"
onClickToCallback={onClickToClose}
></FullMenuClose>
</div>
</div>
<div className="tab-pane sub active">
<div className="pay-top">
<div className="num-amount">
<span className="amount">
{t('home.money', { value: new Intl.NumberFormat('en-US').format(Number(detail?.amount) || 0) })}
</span>
</div>
<div className="num-store">{detail?.corpName}</div>
<div className="num-day">{getDate(detail?.paymentDate)}</div>
</div>
<div className="detail-divider"></div>
<div className="pay-detail">
<div className="detail-title"> </div>
<ul className="kv-list">
<li className="kv-row">
<span className="k">MID</span>
<span className="v">{detail?.mid}</span>
</li>
<li className="kv-row">
<span className="k"></span>
<span className="v">{detail?.arsPaymentMethod}</span>
</li>
<li className="kv-row">
<span className="k"></span>
<span className="v">{getArsPaymentStatusName(t)(detail?.paymentStatus)}</span>
</li>
<li className="kv-row">
<span className="k"></span>
<span className="v">{getArsOrderStatusName(t)(detail?.orderStatus)}</span>
</li>
<li className="kv-row">
<span className="k"></span>
<span className="v">{
detail?.paymentDate ? moment(detail.paymentDate, 'YYYYMMDDHHmmss').format('YYYY.MM.DD HH:mm:ss') : '-'
}</span>
</li>
<li className="kv-row">
<span className="k"></span>
<span className="v">{detail?.goodsName}</span>
</li>
<li className="kv-row">
<span className="k"></span>
<span className="v">{detail?.tid}</span>
</li>
<li className="kv-row">
<span className="k"></span>
<span className="v">{detail?.buyerName}</span>
</li>
<li className="kv-row">
<span className="k"></span>
<span className="v">{detail?.maskPhoneNumber}</span>
</li>
<li className="kv-row">
<span className="k"></span>
<span className="v">{detail?.email}</span>
</li>
<li className="kv-row">
<span className="k"> </span>
<span className="v">{detail?.smsVerificationCode}</span>
</li>
</ul>
</div>
{detail?.arsPaymentMethod === ArsPaymentMethod.SMS && (
<div className="apply-row">
<button
className="btn-50 btn-blue flex-1"
onClick={() => onClickToOpenResendBottomSheet()}
//disabled={ detail?.orderStatus !== OrderStatus.PENDING }
>SMS </button>
</div>
)}
</div>
</div>
<ArsResendSmsBottomSheet
setBottomSheetOn={setBottomSheetOn}
bottomSheetOn={bottomSheetOn}
phoneNumber={detail?.phoneNumber}
callResendSms={arsResend}
></ArsResendSmsBottomSheet>
</motion.div>
</>
)
}

View File

@@ -18,11 +18,11 @@ import { getPayoutStatusText } from '../model/payout/constant';
export const ListItem = ({ export const ListItem = ({
additionalServiceCategory, additionalServiceCategory,
mid, tid, orderDate, paymentStatus, mid, tid, orderDate, paymentStatus,
orderTime,buyerPhoneLast4,statusColor, orderTime, buyerPhoneLast4, statusColor,
applicationDate, requestDate, bankName, accountNo, resultStatus, resultMessage, applicationDate, requestDate, bankName, accountNo, resultStatus, resultMessage,
amount, sendMethod, processStatus, registDate, amount, sendMethod, processStatus, registDate,
transactionTime,transactionCode,transactionType, transactionTime, transactionCode, transactionType,
accountName,submallId, settlementDate, companyName,orderStatus, accountName, submallId, settlementDate, companyName, orderStatus,
alimCl, sendType, sendCl, alimCl, sendType, sendCl,
paymentMethod, receiverName, paymentMethod, receiverName,
@@ -170,7 +170,7 @@ export const ListItem = ({
} }
} }
else if (additionalServiceCategory === AdditionalServiceCategory.AccountHolderSearch) { else if (additionalServiceCategory === AdditionalServiceCategory.AccountHolderSearch) {
if(setDetailData && !!mid && !!tid){ if (setDetailData && !!mid && !!tid) {
setDetailData({ setDetailData({
mid: mid, mid: mid,
tid: tid, tid: tid,
@@ -229,14 +229,14 @@ export const ListItem = ({
}); });
} }
else if (additionalServiceCategory === AdditionalServiceCategory.Ars) { else if (additionalServiceCategory === AdditionalServiceCategory.Ars) {
navigate(PATHS.additionalService.ars.detail, { if (setDetailData && !!mid && !!tid) {
state: { setDetailData({
additionalServiceCategory: additionalServiceCategory,
mid: mid, mid: mid,
tid: tid tid: tid,
} detailOn: true
}); });
} }
}
else if (additionalServiceCategory === AdditionalServiceCategory.Alimtalk) { else if (additionalServiceCategory === AdditionalServiceCategory.Alimtalk) {
if(setDetailData && !!mid && !!tid){ if(setDetailData && !!mid && !!tid){
setDetailData({ setDetailData({

View File

@@ -20,7 +20,7 @@ import { useTranslation } from 'react-i18next';
import { useExtensionAccountHolderAuthDownloadExcelMutation } from '@/entities/additional-service/api/account-holder-auth/use-extension-account-holder-auth-download-excel-mutation'; import { useExtensionAccountHolderAuthDownloadExcelMutation } from '@/entities/additional-service/api/account-holder-auth/use-extension-account-holder-auth-download-excel-mutation';
import { AccountHolderAuthFilter } from '@/entities/additional-service/ui/account-holder-auth/filter/account-holder-auth-filter'; import { AccountHolderAuthFilter } from '@/entities/additional-service/ui/account-holder-auth/filter/account-holder-auth-filter';
import { useStore } from '@/shared/model/store'; import { useStore } from '@/shared/model/store';
import { AccountHolderAuthStatus, ExtensionAccountHolderAuthContentItem, ExtensionAccountHolderAuthDownloadExcelParams, ExtensionAccountHolderAuthDownloadExcelResponse } from '@/entities/additional-service/model/account-holder-auth/types'; import { AccountHolderAuthStatus, AccountHolderAuthItem, ExtensionAccountHolderAuthDownloadExcelParams, ExtensionAccountHolderAuthDownloadExcelResponse } from '@/entities/additional-service/model/account-holder-auth/types';
import { AdditionalServiceCategory, DetailData } from '@/entities/additional-service/model/types'; import { AdditionalServiceCategory, DetailData } from '@/entities/additional-service/model/types';
import { EmailBottomSheet } from '@/entities/common/ui/email-bottom-sheet'; import { EmailBottomSheet } from '@/entities/common/ui/email-bottom-sheet';
import { useExtensionAccessCheck } from '@/shared/lib/hooks/use-extension-access-check'; import { useExtensionAccessCheck } from '@/shared/lib/hooks/use-extension-access-check';
@@ -40,7 +40,7 @@ export const AccountHolderAuthPage = () => {
const [onActionIntersect, setOnActionIntersect] = useState<boolean>(false); const [onActionIntersect, setOnActionIntersect] = useState<boolean>(false);
const [sortType, setSortType] = useState<SortTypeKeys>(SortTypeKeys.LATEST); const [sortType, setSortType] = useState<SortTypeKeys>(SortTypeKeys.LATEST);
const [listItems, setListItems] = useState<Array<ExtensionAccountHolderAuthContentItem>>([]); const [listItems, setListItems] = useState<Array<AccountHolderAuthItem>>([]);
const [filterOn, setFilterOn] = useState<boolean>(false); const [filterOn, setFilterOn] = useState<boolean>(false);
const [pageParam, setPageParam] = useState<DefaultRequestPagination>(DEFAULT_PAGE_PARAM); const [pageParam, setPageParam] = useState<DefaultRequestPagination>(DEFAULT_PAGE_PARAM);
const [mid, setMid] = useState<string>(userMid); const [mid, setMid] = useState<string>(userMid);

View File

@@ -45,7 +45,6 @@ export const AdditionalServicePages = () => {
<Route path={ROUTE_NAMES.additionalService.list} element={<ListPage />} /> <Route path={ROUTE_NAMES.additionalService.list} element={<ListPage />} />
<Route path={ROUTE_NAMES.additionalService.ars.base}> <Route path={ROUTE_NAMES.additionalService.ars.base}>
<Route path={ROUTE_NAMES.additionalService.ars.list} element={<ArsListPage />} /> <Route path={ROUTE_NAMES.additionalService.ars.list} element={<ArsListPage />} />
<Route path={ROUTE_NAMES.additionalService.ars.detail} element={<ArsDetailPage />} />
<Route path={ROUTE_NAMES.additionalService.ars.request} element={<ArsRequestPage />} /> <Route path={ROUTE_NAMES.additionalService.ars.request} element={<ArsRequestPage />} />
</Route> </Route>
<Route path={ROUTE_NAMES.additionalService.keyInPayment.base}> <Route path={ROUTE_NAMES.additionalService.keyInPayment.base}>

View File

@@ -10,12 +10,12 @@ import {
} from '@/widgets/sub-layout/use-sub-layout'; } from '@/widgets/sub-layout/use-sub-layout';
import { JSX, useEffect, useState } from 'react'; import { JSX, useEffect, useState } from 'react';
import { DEFAULT_PAGE_PARAM } from '@/entities/common/model/constant'; import { DEFAULT_PAGE_PARAM } from '@/entities/common/model/constant';
import { ArsListContent, ExtensionArsDownloadExcelParams, ExtensionArsDownloadExcelResponse, ExtensionArsListParams, ExtensionArsListResponse, OrderStatus, PaymentStatus } from '@/entities/additional-service/model/ars/types'; import { ArsListItem, ExtensionArsDownloadExcelParams, ExtensionArsDownloadExcelResponse, ExtensionArsListParams, ExtensionArsListResponse, OrderStatus, PaymentStatus } from '@/entities/additional-service/model/ars/types';
import { useExtensionArsListMutation } from '@/entities/additional-service/api/ars/use-extension-ars-list-mutation'; import { useExtensionArsListMutation } from '@/entities/additional-service/api/ars/use-extension-ars-list-mutation';
import moment from 'moment'; import moment from 'moment';
import { useExtensionArsDownloadExcelMutation } from '@/entities/additional-service/api/ars/use-extension-ars-download-excel-mutation'; import { useExtensionArsDownloadExcelMutation } from '@/entities/additional-service/api/ars/use-extension-ars-download-excel-mutation';
import { ListDateGroup } from '@/entities/additional-service/ui/list-date-group'; import { ListDateGroup } from '@/entities/additional-service/ui/list-date-group';
import { AdditionalServiceCategory } from '@/entities/additional-service/model/types'; import { AdditionalServiceCategory, DetailData } from '@/entities/additional-service/model/types';
import { SortTypeBox } from '@/entities/common/ui/sort-type-box'; import { SortTypeBox } from '@/entities/common/ui/sort-type-box';
import { getArsPaymentStatusBtnGroup } from '@/entities/additional-service/model/ars/constant'; import { getArsPaymentStatusBtnGroup } from '@/entities/additional-service/model/ars/constant';
import { ArsFilter } from '@/entities/additional-service/ui/filter/ars-filter'; import { ArsFilter } from '@/entities/additional-service/ui/filter/ars-filter';
@@ -24,6 +24,8 @@ import { useStore } from '@/shared/model/store';
import { EmailBottomSheet } from '@/entities/common/ui/email-bottom-sheet'; import { EmailBottomSheet } from '@/entities/common/ui/email-bottom-sheet';
import { useExtensionAccessCheck } from '@/shared/lib/hooks/use-extension-access-check'; import { useExtensionAccessCheck } from '@/shared/lib/hooks/use-extension-access-check';
import useIntersectionObserver from '@/widgets/intersection-observer'; import useIntersectionObserver from '@/widgets/intersection-observer';
import { ArsList } from '@/entities/additional-service/ui/ars/ars-list';
import { ArsDetail } from '@/entities/additional-service/ui/ars/detail/ars-detail';
export const ArsListPage = () => { export const ArsListPage = () => {
const { navigate } = useNavigate(); const { navigate } = useNavigate();
@@ -38,7 +40,7 @@ export const ArsListPage = () => {
const [onActionIntersect, setOnActionIntersect] = useState<boolean>(false); const [onActionIntersect, setOnActionIntersect] = useState<boolean>(false);
const [sortType, setSortType] = useState<SortTypeKeys>(SortTypeKeys.LATEST); const [sortType, setSortType] = useState<SortTypeKeys>(SortTypeKeys.LATEST);
const [listItems, setListItems] = useState<Array<ArsListContent>>([]); const [listItems, setListItems] = useState<Array<ArsListItem>>([]);
const [filterOn, setFilterOn] = useState<boolean>(false); const [filterOn, setFilterOn] = useState<boolean>(false);
const [pageParam, setPageParam] = useState<DefaultRequestPagination>(DEFAULT_PAGE_PARAM); const [pageParam, setPageParam] = useState<DefaultRequestPagination>(DEFAULT_PAGE_PARAM);
const [mid, setMid] = useState<string>(userMid); const [mid, setMid] = useState<string>(userMid);
@@ -51,12 +53,16 @@ export const ArsListPage = () => {
const [maxAmount, setMaxAmount] = useState<number>(); const [maxAmount, setMaxAmount] = useState<number>();
const [emailBottomSheetOn, setEmailBottomSheetOn] = useState<boolean>(false); const [emailBottomSheetOn, setEmailBottomSheetOn] = useState<boolean>(false);
const [detailOn, setDetailOn] = useState<boolean>(false);
const [detailMid, setDetailMid] = useState<string>('');
const [detailTid, setDetailTid] = useState<string>('');
const { mutateAsync: extensionArsList } = useExtensionArsListMutation(); const { mutateAsync: extensionArsList } = useExtensionArsListMutation();
const { mutateAsync: extensionArsDownloadExcel } = useExtensionArsDownloadExcelMutation(); const { mutateAsync: extensionArsDownloadExcel } = useExtensionArsDownloadExcelMutation();
const onIntersect: IntersectionObserverCallback = (entries: Array<IntersectionObserverEntry>) => { const onIntersect: IntersectionObserverCallback = (entries: Array<IntersectionObserverEntry>) => {
entries.forEach((entry: IntersectionObserverEntry) => { entries.forEach((entry: IntersectionObserverEntry) => {
if(entry.isIntersecting){ if (entry.isIntersecting) {
if(onActionIntersect && !!pageParam.cursor){ if (onActionIntersect && !!pageParam.cursor) {
setOnActionIntersect(false); setOnActionIntersect(false);
callList('page'); callList('page');
} }
@@ -92,30 +98,30 @@ export const ArsListPage = () => {
...{ sortType: sortType } ...{ sortType: sortType }
} }
}; };
if(type !== 'page' && listParams.page){ if (type !== 'page' && listParams.page) {
listParams.page.cursor = null; listParams.page.cursor = null;
} }
extensionArsList(listParams).then((rs: ExtensionArsListResponse) => { extensionArsList(listParams).then((rs: ExtensionArsListResponse) => {
if(type === 'page'){ if (type === 'page') {
setListItems([ setListItems([
...listItems, ...listItems,
...rs.content ...rs.content
]); ]);
} }
else{ else {
setListItems(rs.content); setListItems(rs.content);
} }
if(rs.hasNext if (rs.hasNext
&& rs.nextCursor !== pageParam.cursor && rs.nextCursor !== pageParam.cursor
&& rs.content.length === DEFAULT_PAGE_PARAM.size && rs.content.length === DEFAULT_PAGE_PARAM.size
){ ) {
setPageParam({ setPageParam({
...pageParam, ...pageParam,
...{ cursor: rs.nextCursor } ...{ cursor: rs.nextCursor }
}); });
} }
else{ else {
setPageParam({ setPageParam({
...pageParam, ...pageParam,
...{ cursor: null } ...{ cursor: null }
@@ -153,6 +159,16 @@ export const ArsListPage = () => {
setEmailBottomSheetOn(false); setEmailBottomSheetOn(false);
}; };
const setDetailData = (detailData: DetailData) => {
setDetailOn(detailData.detailOn);
if (detailData.mid) {
setDetailMid(detailData.mid);
}
if (detailData.tid) {
setDetailTid(detailData.tid);
}
};
const onClickToNavigate = () => { const onClickToNavigate = () => {
navigate(PATHS.additionalService.ars.request, { navigate(PATHS.additionalService.ars.request, {
state: { mid } state: { mid }
@@ -182,52 +198,6 @@ export const ArsListPage = () => {
sortType sortType
]); ]);
const getListDateGroup = () => {
let rs = [];
let date = '';
let list = [];
for (let i = 0; i < listItems.length; i++) {
let item = listItems[i];
if (!!item) {
let orderDate = item?.orderDate || '';
let itemDate = orderDate.substring(0, 8);
if (!!itemDate) {
if (i === 0) {
date = itemDate;
}
if (date !== itemDate) {
date = itemDate;
if (list.length > 0) {
rs.push(
<ListDateGroup
additionalServiceCategory={AdditionalServiceCategory.Ars}
mid={mid}
key={date + '-' + i}
date={date}
items={list}
></ListDateGroup>
);
}
list = [];
}
list.push(item);
}
}
}
if (list.length > 0) {
rs.push(
<ListDateGroup
additionalServiceCategory={AdditionalServiceCategory.Ars}
mid={mid}
key={date + '-last'}
date={date}
items={list as any}
></ListDateGroup>
);
}
return rs;
}
// if (!hasAccess) { // if (!hasAccess) {
// return <AccessDeniedDialog />; // return <AccessDeniedDialog />;
// } // }
@@ -270,7 +240,7 @@ export const ArsListPage = () => {
</div> </div>
</section> </section>
<section className="filter-section"> <div className="filter-section">
<SortTypeBox <SortTypeBox
sortType={sortType} sortType={sortType}
onClickToSort={onClickToSort} onClickToSort={onClickToSort}
@@ -288,12 +258,15 @@ export const ArsListPage = () => {
} }
</div> </div>
</div> </div>
</section> </div>
<section className="transaction-list"> <ArsList
{ getListDateGroup() } additionalServiceCategory={AdditionalServiceCategory.Ars}
</section> listItems={listItems}
<div ref={ setTarget }></div> mid={mid}
setDetailData={setDetailData}
></ArsList>
<div ref={setTarget}></div>
</div> </div>
</div> </div>
<div className="apply-row"> <div className="apply-row">
@@ -323,6 +296,12 @@ export const ArsListPage = () => {
setMinAmount={setMinAmount} setMinAmount={setMinAmount}
setMaxAmount={setMaxAmount} setMaxAmount={setMaxAmount}
></ArsFilter> ></ArsFilter>
<ArsDetail
detailOn={detailOn}
setDetailOn={setDetailOn}
mid={detailMid}
tid={detailTid}
></ArsDetail>
<EmailBottomSheet <EmailBottomSheet
bottomSheetOn={emailBottomSheetOn} bottomSheetOn={emailBottomSheetOn}
setBottomSheetOn={setEmailBottomSheetOn} setBottomSheetOn={setEmailBottomSheetOn}

View File

@@ -172,14 +172,6 @@ export const SmsPaymentPage = () => {
setBottomSmsPaymentDetailResendOn(true); setBottomSmsPaymentDetailResendOn(true);
}; };
const setDetailData = (detailData: DetailData) => {
setDetailOn(detailData.detailOn);
setDetailTid(detailData.tid);
if (detailData?.serviceCode) {
setDetailServiceCode(detailData?.serviceCode);
}
};
useEffect(() => { useEffect(() => {
callList(); callList();
}, [ }, [
@@ -238,7 +230,6 @@ export const SmsPaymentPage = () => {
additionalServiceCategory={AdditionalServiceCategory.SMSPayment} additionalServiceCategory={AdditionalServiceCategory.SMSPayment}
mid={mid} mid={mid}
onResendClick={onClickToShowDetail} onResendClick={onClickToShowDetail}
setDetailData={setDetailData}
></SmsPaymentList> ></SmsPaymentList>
</div> </div>
</div> </div>

View File

@@ -125,10 +125,6 @@ export const PATHS: RouteNamesType = {
`${ROUTE_NAMES.additionalService.base}${ROUTE_NAMES.additionalService.ars.base}`, `${ROUTE_NAMES.additionalService.base}${ROUTE_NAMES.additionalService.ars.base}`,
ROUTE_NAMES.additionalService.ars.list, ROUTE_NAMES.additionalService.ars.list,
), ),
detail: generatePath(
`${ROUTE_NAMES.additionalService.base}${ROUTE_NAMES.additionalService.ars.base}`,
ROUTE_NAMES.additionalService.ars.detail,
),
request: generatePath( request: generatePath(
`${ROUTE_NAMES.additionalService.base}${ROUTE_NAMES.additionalService.ars.base}`, `${ROUTE_NAMES.additionalService.base}${ROUTE_NAMES.additionalService.ars.base}`,
ROUTE_NAMES.additionalService.ars.request, ROUTE_NAMES.additionalService.ars.request,

View File

@@ -65,7 +65,6 @@ export const ROUTE_NAMES = {
ars: { ars: {
base: '/ars/*', base: '/ars/*',
list: 'list', list: 'list',
detail: 'detail',
request: 'request', request: 'request',
requestSuccess: 'request-success', requestSuccess: 'request-success',
}, },