| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| import React, { useContext } from 'react'; |
| import { Banner } from '@douyinfe/semi-ui'; |
| import CardPro from '../../common/ui/CardPro'; |
| import SubscriptionsTable from './SubscriptionsTable'; |
| import SubscriptionsActions from './SubscriptionsActions'; |
| import SubscriptionsDescription from './SubscriptionsDescription'; |
| import AddEditSubscriptionModal from './modals/AddEditSubscriptionModal'; |
| import { useSubscriptionsData } from '../../../hooks/subscriptions/useSubscriptionsData'; |
| import { useIsMobile } from '../../../hooks/common/useIsMobile'; |
| import { createCardProPagination } from '../../../helpers/utils'; |
| import { StatusContext } from '../../../context/Status'; |
|
|
| const SubscriptionsPage = () => { |
| const subscriptionsData = useSubscriptionsData(); |
| const isMobile = useIsMobile(); |
| const [statusState] = useContext(StatusContext); |
| const enableEpay = !!statusState?.status?.enable_online_topup; |
|
|
| const { |
| showEdit, |
| editingPlan, |
| sheetPlacement, |
| closeEdit, |
| refresh, |
| openCreate, |
| compactMode, |
| setCompactMode, |
| t, |
| } = subscriptionsData; |
|
|
| return ( |
| <> |
| <AddEditSubscriptionModal |
| visible={showEdit} |
| handleClose={closeEdit} |
| editingPlan={editingPlan} |
| placement={sheetPlacement} |
| refresh={refresh} |
| t={t} |
| /> |
| |
| <CardPro |
| type='type1' |
| descriptionArea={ |
| <SubscriptionsDescription |
| compactMode={compactMode} |
| setCompactMode={setCompactMode} |
| t={t} |
| /> |
| } |
| actionsArea={ |
| <div className='flex flex-col md:flex-row justify-between items-start md:items-center gap-2 w-full'> |
| {/* Mobile: actions first; Desktop: actions left */} |
| <div className='order-1 md:order-0 w-full md:w-auto'> |
| <SubscriptionsActions openCreate={openCreate} t={t} /> |
| </div> |
| <Banner |
| type='info' |
| description={t('Stripe/Creem 需在第三方平台创建商品并填入 ID')} |
| closeIcon={null} |
| // Mobile: banner below; Desktop: banner right |
| className='!rounded-lg order-2 md:order-1' |
| style={{ maxWidth: '100%' }} |
| /> |
| </div> |
| } |
| paginationArea={createCardProPagination({ |
| currentPage: subscriptionsData.activePage, |
| pageSize: subscriptionsData.pageSize, |
| total: subscriptionsData.planCount, |
| onPageChange: subscriptionsData.handlePageChange, |
| onPageSizeChange: subscriptionsData.handlePageSizeChange, |
| isMobile, |
| t: subscriptionsData.t, |
| })} |
| t={t} |
| > |
| <SubscriptionsTable {...subscriptionsData} enableEpay={enableEpay} /> |
| </CardPro> |
| </> |
| ); |
| }; |
|
|
| export default SubscriptionsPage; |
|
|