From dcc92f6555d11e0f41d558845182a8a9d0966ba4 Mon Sep 17 00:00:00 2001 From: paanSinghCoder Date: Tue, 12 May 2026 16:36:11 +0530 Subject: [PATCH 1/5] chore(admin): migrate SDK admin and host app to Apsara v1 (rc.6) Co-Authored-By: Claude Opus 4.7 (1M context) --- web/apps/admin/package.json | 3 +- web/apps/admin/src/App.tsx | 6 +- web/apps/admin/src/components/Layout.tsx | 2 +- web/apps/admin/src/components/Price.tsx | 2 +- .../admin/src/components/Sidebar/index.tsx | 46 +++++++------ .../src/components/Sidebar/sidebar.module.css | 4 ++ web/apps/admin/src/components/assign-role.tsx | 30 +++++---- .../components/collapsable-search/index.tsx | 2 +- .../admin/src/components/dialog/header.tsx | 2 +- .../admin/src/components/error-boundary.tsx | 2 +- web/apps/admin/src/components/page-header.tsx | 10 +-- .../admin/src/components/sheet/header.tsx | 4 +- .../admin/src/components/states/Loading.tsx | 2 +- .../src/components/states/Unauthorized.tsx | 2 +- web/apps/admin/src/configs/theme.tsx | 2 +- web/apps/admin/src/containers/login.tsx | 8 +-- web/apps/admin/src/containers/magiclink.tsx | 6 +- web/apps/admin/src/hooks/useRQL.tsx | 2 +- web/apps/admin/src/layout/auth.tsx | 2 +- web/apps/admin/src/main.tsx | 11 +-- web/apps/admin/src/routes.tsx | 1 - web/apps/admin/src/utils/transform-query.ts | 8 +-- web/pnpm-lock.yaml | 9 +-- web/sdk/admin/components/AssignRole.tsx | 34 +++++----- web/sdk/admin/components/CustomField.tsx | 8 +-- web/sdk/admin/components/PageHeader.tsx | 8 +-- web/sdk/admin/components/SheetFooter.tsx | 2 +- web/sdk/admin/components/SheetHeader.tsx | 4 +- .../multiselect/multiselect/index.tsx | 29 ++++---- web/sdk/admin/views/admins/columns.tsx | 2 +- web/sdk/admin/views/admins/index.tsx | 2 +- web/sdk/admin/views/audit-logs/actor-cell.tsx | 2 +- web/sdk/admin/views/audit-logs/columns.tsx | 2 +- web/sdk/admin/views/audit-logs/index.tsx | 4 +- web/sdk/admin/views/audit-logs/navbar.tsx | 4 +- .../views/audit-logs/sidepanel-details.tsx | 4 +- .../views/audit-logs/sidepanel-list-id.tsx | 15 +++-- .../views/audit-logs/sidepanel-list-link.tsx | 2 +- .../views/audit-logs/sidepanel-log-dialog.tsx | 24 +++---- web/sdk/admin/views/invoices/columns.tsx | 2 +- web/sdk/admin/views/invoices/index.tsx | 2 +- web/sdk/admin/views/invoices/navbar.tsx | 4 +- .../organizations/details/apis/columns.tsx | 2 +- .../details/apis/details-dialog.tsx | 19 +++--- .../organizations/details/apis/index.tsx | 4 +- .../organizations/details/edit/billing.tsx | 56 +++++++++------- .../views/organizations/details/edit/kyc.tsx | 31 ++++----- .../details/edit/organization.tsx | 46 +++++++------ .../details/invoices/columns.tsx | 2 +- .../organizations/details/invoices/index.tsx | 4 +- .../details/layout/add-tokens-dialog.tsx | 45 +++++++------ .../organizations/details/layout/index.tsx | 6 +- .../details/layout/invite-users-dialog.tsx | 43 ++++++------ .../organizations/details/layout/navbar.tsx | 67 ++++++++++--------- .../organizations/details/members/columns.tsx | 24 +++---- .../organizations/details/members/index.tsx | 4 +- .../details/members/remove-member.tsx | 28 ++++---- .../organizations/details/pat/columns.tsx | 2 +- .../pat/components/pat-details-dialog.tsx | 10 +-- .../views/organizations/details/pat/index.tsx | 4 +- .../details/projects/columns.tsx | 65 +++++++++--------- .../organizations/details/projects/index.tsx | 2 +- .../projects/members/add-members-dropdown.tsx | 31 ++++----- .../details/projects/members/assign-role.tsx | 33 ++++----- .../details/projects/members/columns.tsx | 28 ++++---- .../details/projects/members/index.tsx | 6 +- .../projects/members/remove-member.tsx | 31 ++++----- .../details/projects/rename-project.tsx | 42 ++++++------ .../projects/use-add-project-members.tsx | 12 ++-- .../details/security/block-organization.tsx | 60 ++++++++++------- .../details/security/domains-list.tsx | 44 ++++++------ .../organizations/details/security/index.tsx | 39 ++++++----- .../side-panel/billing-details-section.tsx | 4 +- .../details/side-panel/index.tsx | 4 +- .../details/side-panel/kyc-section.tsx | 27 +++++--- .../side-panel/org-details-section.tsx | 15 +++-- .../side-panel/plan-details-section.tsx | 2 +- .../side-panel/tokens-details-section.tsx | 4 +- .../organizations/details/tokens/columns.tsx | 9 ++- .../organizations/details/tokens/index.tsx | 6 +- .../views/organizations/list/columns.tsx | 2 +- .../admin/views/organizations/list/create.tsx | 53 ++++++++------- .../admin/views/organizations/list/index.tsx | 6 +- .../admin/views/organizations/list/navbar.tsx | 6 +- web/sdk/admin/views/plans/columns.tsx | 2 +- web/sdk/admin/views/plans/details.tsx | 22 +++--- web/sdk/admin/views/plans/header.tsx | 2 +- web/sdk/admin/views/plans/index.tsx | 10 +-- .../views/preferences/PreferencesView.tsx | 2 +- web/sdk/admin/views/preferences/columns.tsx | 2 +- web/sdk/admin/views/preferences/details.tsx | 28 ++++---- web/sdk/admin/views/preferences/index.tsx | 2 +- web/sdk/admin/views/products/columns.tsx | 4 +- web/sdk/admin/views/products/details.tsx | 24 +++---- web/sdk/admin/views/products/header.tsx | 2 +- web/sdk/admin/views/products/index.tsx | 2 +- .../admin/views/products/prices/columns.tsx | 4 +- web/sdk/admin/views/products/prices/index.tsx | 2 +- web/sdk/admin/views/roles/columns.tsx | 2 +- web/sdk/admin/views/roles/details.tsx | 10 +-- web/sdk/admin/views/roles/header.tsx | 2 +- web/sdk/admin/views/roles/index.tsx | 10 +-- .../views/users/details/layout/layout.tsx | 2 +- .../details/layout/membership-dropdown.tsx | 24 +++---- .../views/users/details/layout/navbar.tsx | 11 +-- .../details/layout/side-panel-details.tsx | 9 ++- .../details/layout/side-panel-membership.tsx | 2 +- .../views/users/details/layout/side-panel.tsx | 2 +- .../users/details/layout/suspend-user.tsx | 28 ++++---- .../users/details/security/block-user.tsx | 58 ++++++++-------- .../views/users/details/security/security.tsx | 2 +- .../users/details/security/sessions/index.tsx | 10 +-- .../sessions/revoke-session-confirm.tsx | 2 +- .../sessions/revoke-session-final-confirm.tsx | 10 +-- .../security/sessions/session-skeleton.tsx | 2 +- .../views/users/details/user-details.tsx | 2 +- web/sdk/admin/views/users/list/columns.tsx | 2 +- .../admin/views/users/list/invite-users.tsx | 65 +++++++++--------- web/sdk/admin/views/users/list/list.tsx | 6 +- web/sdk/admin/views/users/list/navbar.tsx | 4 +- .../admin/views/webhooks/webhooks/columns.tsx | 34 +++++----- .../views/webhooks/webhooks/create/index.tsx | 17 +++-- .../views/webhooks/webhooks/delete/index.tsx | 13 ++-- .../admin/views/webhooks/webhooks/header.tsx | 2 +- .../admin/views/webhooks/webhooks/index.tsx | 2 +- .../views/webhooks/webhooks/update/index.tsx | 17 +++-- .../components/auth-header/auth-header.tsx | 2 +- 127 files changed, 900 insertions(+), 808 deletions(-) diff --git a/web/apps/admin/package.json b/web/apps/admin/package.json index 805563840..055d5bcf5 100644 --- a/web/apps/admin/package.json +++ b/web/apps/admin/package.json @@ -17,7 +17,7 @@ "@hookform/resolvers": "^3.0.1", "@radix-ui/react-form": "^0.1.8", "@radix-ui/react-icons": "^1.3.0", - "@raystack/apsara": "0.56.6", + "@raystack/apsara-v1": "npm:@raystack/apsara@1.0.0-rc.6", "@raystack/frontier": "workspace:^", "@raystack/proton": "0.1.0-7523cfd3a676d3fb72d63c8c4f0476738a2217b3", "@stitches/react": "^1.2.8", @@ -37,7 +37,6 @@ "react-router-dom": "^6.9.0", "react-select": "^5.8.0", "slugify": "^1.6.6", - "sonner": "^1.4.41", "swr": "^2.1.2", "usehooks-ts": "^3.1.1", "vite-tsconfig-paths": "^4.0.7", diff --git a/web/apps/admin/src/App.tsx b/web/apps/admin/src/App.tsx index 8372175ba..f72e4cf1f 100644 --- a/web/apps/admin/src/App.tsx +++ b/web/apps/admin/src/App.tsx @@ -1,7 +1,7 @@ -import { Flex } from "@raystack/apsara"; +import { Flex } from "@raystack/apsara-v1"; import { Outlet } from "react-router-dom"; -import "@raystack/apsara/style.css"; -import "@raystack/apsara/normalize.css"; +import "@raystack/apsara-v1/normalize.css"; +import "@raystack/apsara-v1/style.css"; import "./App.css"; import IAMSidebar from "./components/Sidebar"; diff --git a/web/apps/admin/src/components/Layout.tsx b/web/apps/admin/src/components/Layout.tsx index 3e3c0d939..6c3ea1214 100644 --- a/web/apps/admin/src/components/Layout.tsx +++ b/web/apps/admin/src/components/Layout.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { Box, Flex } from "@raystack/apsara"; +import { Box, Flex } from "@raystack/apsara-v1"; type Props = { header?: React.ReactNode; diff --git a/web/apps/admin/src/components/Price.tsx b/web/apps/admin/src/components/Price.tsx index 546843ad4..de1ebdd47 100644 --- a/web/apps/admin/src/components/Price.tsx +++ b/web/apps/admin/src/components/Price.tsx @@ -1,4 +1,4 @@ -import { Flex } from "@raystack/apsara"; +import { Flex } from "@raystack/apsara-v1"; import { getCurrencyValue } from "~/utils/helper"; type PriceProps = { diff --git a/web/apps/admin/src/components/Sidebar/index.tsx b/web/apps/admin/src/components/Sidebar/index.tsx index 6190f58bc..e3c58f5c3 100644 --- a/web/apps/admin/src/components/Sidebar/index.tsx +++ b/web/apps/admin/src/components/Sidebar/index.tsx @@ -2,17 +2,17 @@ import type React from "react"; import { useContext } from "react"; import { Avatar, - DropdownMenu, + Menu, Flex, Sidebar, Text, useTheme, -} from "@raystack/apsara"; +} from "@raystack/apsara-v1"; import { useMutation } from "@connectrpc/connect-query"; import { FrontierServiceQueries } from "@raystack/proton/frontier"; import styles from "./sidebar.module.css"; -import { OrganizationIcon } from "@raystack/apsara/icons"; +import { OrganizationIcon } from "@raystack/apsara-v1/icons"; import IAMIcon from "~/assets/icons/iam.svg?react"; import UserIcon from "~/assets/icons/users.svg?react"; import InvoicesIcon from "~/assets/icons/invoices.svg?react"; @@ -157,7 +157,7 @@ export default function IAMSidebar() { key={subItem.name} active={isActive(subItem.to)} data-test-id={`admin-sidebar-navigation-cell-${subItem.name}`} - as={}> + render={}> {subItem.name} ))} @@ -168,7 +168,7 @@ export default function IAMSidebar() { key={nav.name} active={isActive(nav.to)} data-test-id={`admin-sidebar-navigation-cell-${nav.name}`} - as={}> + render={}> {nav.name} ); @@ -207,28 +207,30 @@ function UserDropdown() { : { icon: , label: "Light" }; return ( - - - - } - data-test-id="frontier-sdk-sidebar-logout"> - {user?.email} - - - - + + } + data-test-id="frontier-sdk-sidebar-logout"> + {user?.email} + + } + /> + + {themeData.icon} {themeData.label} - - + logoutMutation.mutate({})} data-test-id="admin-logout-btn"> Logout - - - + + + ); } diff --git a/web/apps/admin/src/components/Sidebar/sidebar.module.css b/web/apps/admin/src/components/Sidebar/sidebar.module.css index 02bf05c6b..0ae3f445b 100644 --- a/web/apps/admin/src/components/Sidebar/sidebar.module.css +++ b/web/apps/admin/src/components/Sidebar/sidebar.module.css @@ -6,6 +6,10 @@ width: 220px !important; } +.sidebar :global(.sidebar-module_main__qDvo4) { + gap: var(--rs-space-1); +} + .sidebar-group { margin-top: var(--rs-space-5); } diff --git a/web/apps/admin/src/components/assign-role.tsx b/web/apps/admin/src/components/assign-role.tsx index 482c6dabf..29fc430f0 100644 --- a/web/apps/admin/src/components/assign-role.tsx +++ b/web/apps/admin/src/components/assign-role.tsx @@ -5,8 +5,8 @@ import { Flex, Label, Text, - toast, -} from "@raystack/apsara"; + toastManager, +} from "@raystack/apsara-v1"; import { useCallback } from "react"; import type { SearchOrganizationUsersResponse_OrganizationUser, @@ -139,9 +139,9 @@ export const AssignRole = ({ onRoleUpdate(); } - toast.success("Role assigned successfully"); + toastManager.add({ title: "Role assigned successfully", type: "success" }); } catch (error) { - toast.error("Failed to assign role"); + toastManager.add({ title: "Failed to assign role", type: "error" }); console.error(error); } }; @@ -187,16 +187,18 @@ export const AssignRole = ({ - - - + + Cancel + + } + /> - + + Cancel + + } + /> - + + {selectedValues.size} selected + + } + /> - + No results found. {options.map((option: Option) => { const isSelected = selectedValues.has(option.value); return ( handleSelect(option.value)} + key={option.value as React.Key} + onClick={() => handleSelect(option.value)} > - + {option.label} @@ -67,11 +70,11 @@ export function MultiSelect({ ); })} - + <> - + {