* Enhance sidebar navigation and layout configuration - Added support for configurable sidebar collapsed style - Updated layout components to use new sidebar configuration - Added environment variable for sidebar trigger display - Simplified page header and navigation components - Improved sidebar responsiveness and user experience * Refactor admin account page layout and action buttons - Moved action buttons from sidebar to PageHeader for both personal and team account pages - Updated button variants and styling for better visual hierarchy - Improved spacing and layout of account page components - Added border to PageHeader for better visual separation * Update version updater dialog styling - Replaced `space-x-4` with `gap-x-2` for better spacing - Wrapped translation text in a `span` for improved layout - Maintained consistent icon and text alignment in dialog title * Refactor sidebar state management and configuration - Simplified sidebar context and removed minimized state - Updated layout components to use new sidebar open/closed state - Modified sidebar navigation to handle collapsed state dynamically - Added environment variable for sidebar trigger and collapsed style - Improved sidebar responsiveness and rendering logic * Remove sidebar configuration and environment variables - Simplified sidebar context by removing `minimized` state in components - Updated account selector components to use simplified sidebar state - Removed unused helper functions in sidebar implementation
85 lines
2.0 KiB
TypeScript
85 lines
2.0 KiB
TypeScript
import { ServerDataLoader } from '@makerkit/data-loader-supabase-nextjs';
|
|
|
|
import { AdminAccountsTable } from '@kit/admin/components/admin-accounts-table';
|
|
import { AdminGuard } from '@kit/admin/components/admin-guard';
|
|
import { getSupabaseServerAdminClient } from '@kit/supabase/server-admin-client';
|
|
import { AppBreadcrumbs } from '@kit/ui/app-breadcrumbs';
|
|
import { PageBody, PageHeader } from '@kit/ui/page';
|
|
|
|
interface SearchParams {
|
|
page?: string;
|
|
account_type?: 'all' | 'team' | 'personal';
|
|
query?: string;
|
|
}
|
|
|
|
interface AdminAccountsPageProps {
|
|
searchParams: Promise<SearchParams>;
|
|
}
|
|
|
|
export const metadata = {
|
|
title: `Accounts`,
|
|
};
|
|
|
|
async function AccountsPage(props: AdminAccountsPageProps) {
|
|
const client = getSupabaseServerAdminClient();
|
|
const searchParams = await props.searchParams;
|
|
|
|
const page = searchParams.page ? parseInt(searchParams.page) : 1;
|
|
const filters = getFilters(searchParams);
|
|
|
|
return (
|
|
<>
|
|
<PageHeader description={<AppBreadcrumbs />} />
|
|
|
|
<PageBody>
|
|
<ServerDataLoader
|
|
table={'accounts'}
|
|
client={client}
|
|
page={page}
|
|
where={filters}
|
|
>
|
|
{({ data, page, pageSize, pageCount }) => {
|
|
return (
|
|
<AdminAccountsTable
|
|
page={page}
|
|
pageSize={pageSize}
|
|
pageCount={pageCount}
|
|
data={data}
|
|
filters={{
|
|
type: searchParams.account_type ?? 'all',
|
|
}}
|
|
/>
|
|
);
|
|
}}
|
|
</ServerDataLoader>
|
|
</PageBody>
|
|
</>
|
|
);
|
|
}
|
|
|
|
function getFilters(params: SearchParams) {
|
|
const filters: Record<
|
|
string,
|
|
{
|
|
eq?: boolean | string;
|
|
like?: string;
|
|
}
|
|
> = {};
|
|
|
|
if (params.account_type && params.account_type !== 'all') {
|
|
filters.is_personal_account = {
|
|
eq: params.account_type === 'personal',
|
|
};
|
|
}
|
|
|
|
if (params.query) {
|
|
filters.name = {
|
|
like: `%${params.query}%`,
|
|
};
|
|
}
|
|
|
|
return filters;
|
|
}
|
|
|
|
export default AdminGuard(AccountsPage);
|