import React, {Fragment} from 'react'; import {DataTablePage} from '../../datatable/page/data-table-page'; import {IconButton} from '../../ui/buttons/icon-button'; import {EditIcon} from '../../icons/material/Edit'; import {ColumnConfig} from '../../datatable/column-config'; import {Trans} from '../../i18n/trans'; import {DeleteSelectedItemsAction} from '../../datatable/page/delete-selected-items-action'; import {DataTableEmptyStateMessage} from '../../datatable/page/data-table-emty-state-message'; import {SubscriptionIndexPageFilters} from './subscription-index-page-filters'; import {DialogTrigger} from '../../ui/overlays/dialog/dialog-trigger'; import {DataTableAddItemButton} from '../../datatable/data-table-add-item-button'; import subscriptionsSvg from './subscriptions.svg'; import {NameWithAvatar} from '../../datatable/column-templates/name-with-avatar'; import {Subscription} from '../../billing/subscription'; import {CloseIcon} from '../../icons/material/Close'; import {FormattedDate} from '../../i18n/formatted-date'; import {UpdateSubscriptionDialog} from './update-subscription-dialog'; import {CreateSubscriptionDialog} from './create-subscription-dialog'; import {useCancelSubscription} from '../../billing/billing-page/requests/use-cancel-subscription'; import {PauseIcon} from '../../icons/material/Pause'; import {queryClient} from '../../http/query-client'; import {DatatableDataQueryKey} from '../../datatable/requests/paginated-resources'; import {Tooltip} from '../../ui/tooltip/tooltip'; import {useResumeSubscription} from '../../billing/billing-page/requests/use-resume-subscription'; import {PlayArrowIcon} from '../../icons/material/PlayArrow'; import {ConfirmationDialog} from '../../ui/overlays/dialog/confirmation-dialog'; import {Chip} from '../../ui/forms/input-field/chip-field/chip'; const endpoint = 'billing/subscriptions'; const columnConfig: ColumnConfig[] = [ { key: 'user_id', allowsSorting: true, width: 'flex-3 min-w-200', visibleInMode: 'all', header: () => , body: subscription => subscription.user && ( ), }, { key: 'status', width: 'w-100 flex-shrink-0', header: () => , body: subscription => ( {subscription.gateway_status} ), }, { key: 'product_id', allowsSorting: true, header: () => , body: subscription => subscription.product?.name, }, { key: 'gateway_name', allowsSorting: true, header: () => , body: subscription => ( {subscription.gateway_name} ), }, { key: 'renews_at', allowsSorting: true, header: () => , body: subscription => , }, { key: 'ends_at', allowsSorting: true, header: () => , body: subscription => , }, { key: 'created_at', allowsSorting: true, header: () => , body: subscription => , }, { key: 'actions', header: () => , hideHeader: true, align: 'end', visibleInMode: 'all', width: 'w-[168px] flex-shrink-0', body: subscription => { return ; }, }, ]; export function SubscriptionsIndexPage() { return ( } columns={columnConfig} filters={SubscriptionIndexPageFilters} actions={} enableSelection={false} selectedActions={} queryParams={{with: 'product'}} emptyStateMessage={ } filteringTitle={} /> } /> ); } function PageActions() { return ( <> ); } interface SubscriptionActionsProps { subscription: Subscription; } function SubscriptionActions({subscription}: SubscriptionActionsProps) { return ( {subscription.cancelled && subscription.on_grace_period ? ( ) : null} {subscription.active ? ( ) : null} ); } function SuspendSubscriptionButton({subscription}: SubscriptionActionsProps) { const cancelSubscription = useCancelSubscription(); const handleSuspendSubscription = () => { cancelSubscription.mutate( {subscriptionId: subscription.id}, { onSuccess: () => { queryClient.invalidateQueries({ queryKey: DatatableDataQueryKey(endpoint), }); }, }, ); }; return ( { if (confirmed) { handleSuspendSubscription(); } }} > }> } body={
} confirm={} />
); } function ResumeSubscriptionButton({subscription}: SubscriptionActionsProps) { const resumeSubscription = useResumeSubscription(); const handleResumeSubscription = () => { resumeSubscription.mutate( {subscriptionId: subscription.id}, { onSuccess: () => { queryClient.invalidateQueries({ queryKey: DatatableDataQueryKey(endpoint), }); }, }, ); }; return ( { if (confirmed) { handleResumeSubscription(); } }} > }> } body={
} confirm={} />
); } function CancelSubscriptionButton({subscription}: SubscriptionActionsProps) { const cancelSubscription = useCancelSubscription(); const handleDeleteSubscription = () => { cancelSubscription.mutate( {subscriptionId: subscription.id, delete: true}, { onSuccess: () => { queryClient.invalidateQueries({ queryKey: DatatableDataQueryKey(endpoint), }); }, }, ); }; return ( { if (confirmed) { handleDeleteSubscription(); } }} > }> } body={
} confirm={} />
); }