| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- /*
- Copyright (C) 2025 QuantumNous
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>.
- For commercial licensing, please contact support@quantumnous.com
- */
- 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;
|