diff --git a/web/apps/admin/src/pages/plans/PlansPage.tsx b/web/apps/admin/src/pages/plans/PlansPage.tsx new file mode 100644 index 000000000..9097921d0 --- /dev/null +++ b/web/apps/admin/src/pages/plans/PlansPage.tsx @@ -0,0 +1,14 @@ +import { PlansView } from "@raystack/frontier/admin"; +import { useNavigate, useParams } from "react-router-dom"; + +export function PlansPage() { + const { planId } = useParams(); + const navigate = useNavigate(); + + return ( + navigate("/plans")} + /> + ); +} diff --git a/web/apps/admin/src/routes.tsx b/web/apps/admin/src/routes.tsx index 9b9d674cc..0cc0fa8da 100644 --- a/web/apps/admin/src/routes.tsx +++ b/web/apps/admin/src/routes.tsx @@ -7,8 +7,7 @@ import LoadingState from "./components/states/Loading"; import UnauthorizedState from "./components/states/Unauthorized"; import App from "./App"; -import PlanList from "./containers/billingplans.list"; -import PlanDetails from "./containers/billingplans.list/details"; +import { PlansPage } from "./pages/plans/PlansPage"; import Login from "./containers/login"; import MagicLink from "./containers/magiclink"; @@ -84,8 +83,8 @@ export default memo(function AppRoutes() { } /> - }> - } /> + }> + } /> }> diff --git a/web/lib/admin/index.ts b/web/lib/admin/index.ts index fa967fecb..d48a2197e 100644 --- a/web/lib/admin/index.ts +++ b/web/lib/admin/index.ts @@ -6,6 +6,7 @@ export { default as InvoicesView } from "./views/invoices"; export { ProductsView, ProductPricesView } from "./views/products/exports"; export { default as AuditLogsView } from "./views/audit-logs"; export { default as AdminsView } from "./views/admins"; +export { default as PlansView } from "./views/plans"; // utils exports export { diff --git a/web/apps/admin/src/containers/billingplans.list/columns.tsx b/web/lib/admin/views/plans/columns.tsx similarity index 93% rename from web/apps/admin/src/containers/billingplans.list/columns.tsx rename to web/lib/admin/views/plans/columns.tsx index 7bed1996a..85e6c440e 100644 --- a/web/apps/admin/src/containers/billingplans.list/columns.tsx +++ b/web/lib/admin/views/plans/columns.tsx @@ -1,7 +1,7 @@ import { Link } from "react-router-dom"; import { type DataTableColumnDef } from "@raystack/apsara"; import type { Plan } from "@raystack/proton/frontier"; -import { timestampToDate, TimeStamp } from "~/utils/connect-timestamp"; +import { timestampToDate, type TimeStamp } from "../../utils/connect-timestamp"; export const getColumns: () => DataTableColumnDef< Plan, diff --git a/web/apps/admin/src/containers/billingplans.list/details.tsx b/web/lib/admin/views/plans/details.tsx similarity index 82% rename from web/apps/admin/src/containers/billingplans.list/details.tsx rename to web/lib/admin/views/plans/details.tsx index 96bdd5a13..b41f7c985 100644 --- a/web/apps/admin/src/containers/billingplans.list/details.tsx +++ b/web/lib/admin/views/plans/details.tsx @@ -1,9 +1,8 @@ import { Flex, Text, Grid } from "@raystack/apsara"; -import { usePlan } from "."; -import { timestampToDate } from "~/utils/connect-timestamp"; +import type { Plan } from "@raystack/proton/frontier"; +import { timestampToDate } from "../../utils/connect-timestamp"; -export default function PlanDetails() { - const { plan } = usePlan(); +export default function PlanDetails({ plan }: { plan: Plan | null }) { return ( diff --git a/web/apps/admin/src/containers/billingplans.list/header.tsx b/web/lib/admin/views/plans/header.tsx similarity index 86% rename from web/apps/admin/src/containers/billingplans.list/header.tsx rename to web/lib/admin/views/plans/header.tsx index d78a00bf4..713ce3f6b 100644 --- a/web/apps/admin/src/containers/billingplans.list/header.tsx +++ b/web/lib/admin/views/plans/header.tsx @@ -1,5 +1,5 @@ import { DataTable } from "@raystack/apsara"; -import PageHeader from "~/components/page-header"; +import { PageHeader } from "../../components/PageHeader"; import styles from "./plans.module.css"; export const PlanHeader = ({ header }: any) => { diff --git a/web/apps/admin/src/containers/billingplans.list/index.tsx b/web/lib/admin/views/plans/index.tsx similarity index 71% rename from web/apps/admin/src/containers/billingplans.list/index.tsx rename to web/lib/admin/views/plans/index.tsx index c53362f84..0e1dfc3c6 100644 --- a/web/apps/admin/src/containers/billingplans.list/index.tsx +++ b/web/lib/admin/views/plans/index.tsx @@ -1,29 +1,32 @@ import { EmptyState, Flex, DataTable, Sheet } from "@raystack/apsara"; -import { - Outlet, - useNavigate, - useOutletContext, - useParams, -} from "react-router-dom"; - import type { Plan } from "@raystack/proton/frontier"; -import { reduceByKey } from "~/utils/helper"; +import { reduceByKey } from "../../utils/helper"; import { getColumns } from "./columns"; import { PlanHeader } from "./header"; import { ExclamationTriangleIcon } from "@radix-ui/react-icons"; import styles from "./plans.module.css"; -import PageTitle from "~/components/page-title"; -import { SheetHeader } from "~/components/sheet/header"; +import { PageTitle } from "../../components/PageTitle"; +import { SheetHeader } from "../../components/SheetHeader"; import { useQuery } from "@connectrpc/connect-query"; import { FrontierServiceQueries } from "@raystack/proton/frontier"; +import PlanDetails from "./details"; const pageHeader = { title: "Plans", breadcrumb: [], }; -type ContextType = { plan: Plan | null }; -export default function PlanList() { +export type PlansViewProps = { + selectedPlanId?: string; + onCloseDetail?: () => void; + appName?: string; +}; + +export default function PlansView({ + selectedPlanId, + onCloseDetail, + appName, +}: PlansViewProps = {}) { const { data: plansResponse, isLoading: isPlansLoading, @@ -34,19 +37,9 @@ export default function PlanList() { }); const plans = plansResponse?.plans || []; - - let { planId } = useParams(); - const planMapById = reduceByKey(plans ?? [], "id"); - const columns = getColumns(); - const navigate = useNavigate(); - - function onClose() { - navigate("/plans"); - } - if (isError) { console.error("ConnectRPC Error:", error); return ( @@ -70,21 +63,19 @@ export default function PlanList() { defaultSort={{ name: "title", order: "asc" }} > - + - + - + {})} /> - @@ -93,10 +84,6 @@ export default function PlanList() { ); } -export function usePlan() { - return useOutletContext(); -} - export const noDataChildren = ( } heading="0 plan created" /> ); diff --git a/web/apps/admin/src/containers/billingplans.list/plans.module.css b/web/lib/admin/views/plans/plans.module.css similarity index 100% rename from web/apps/admin/src/containers/billingplans.list/plans.module.css rename to web/lib/admin/views/plans/plans.module.css