diff --git a/site/src/modules/workspaces/WorkspaceSharingForm/WorkspaceSharingForm.tsx b/site/src/modules/workspaces/WorkspaceSharingForm/WorkspaceSharingForm.tsx index c361aaf112..47cb0066f2 100644 --- a/site/src/modules/workspaces/WorkspaceSharingForm/WorkspaceSharingForm.tsx +++ b/site/src/modules/workspaces/WorkspaceSharingForm/WorkspaceSharingForm.tsx @@ -20,7 +20,6 @@ import { DropdownMenuItem, DropdownMenuTrigger, } from "#/components/DropdownMenu/DropdownMenu"; -import { EmptyState } from "#/components/EmptyState/EmptyState"; import { Select, SelectContent, @@ -37,6 +36,7 @@ import { TableHeader, TableRow, } from "#/components/Table/Table"; +import { TableEmpty } from "#/components/TableEmpty/TableEmpty"; import { TableLoader } from "#/components/TableLoader/TableLoader"; import { getGroupSubtitle } from "#/modules/groups"; @@ -198,15 +198,11 @@ export const WorkspaceSharingForm: FC = ({ if (sharingSettingsQuery.data.sharing_disabled) { return ( - - - - - + ); } @@ -232,15 +228,11 @@ export const WorkspaceSharingForm: FC = ({ {!workspaceACL ? ( ) : isEmpty ? ( - - - - - + ) : ( <> {workspaceACL.group.map((group) => ( diff --git a/site/src/pages/AuditPage/AuditPageView.tsx b/site/src/pages/AuditPage/AuditPageView.tsx index f6753b9aa8..ed3a94dc7d 100644 --- a/site/src/pages/AuditPage/AuditPageView.tsx +++ b/site/src/pages/AuditPage/AuditPageView.tsx @@ -1,6 +1,5 @@ import type { ComponentProps, FC } from "react"; import type { AuditLog } from "#/api/typesGenerated"; -import { EmptyState } from "#/components/EmptyState/EmptyState"; import { Margins } from "#/components/Margins/Margins"; import { PageHeader, @@ -12,12 +11,8 @@ import { type PaginationResult, } from "#/components/PaginationWidget/PaginationContainer"; import { PaywallPremium } from "#/components/Paywall/PaywallPremium"; -import { - Table, - TableBody, - TableCell, - TableRow, -} from "#/components/Table/Table"; +import { Table, TableBody } from "#/components/Table/Table"; +import { TableEmpty } from "#/components/TableEmpty/TableEmpty"; import { TableLoader } from "#/components/TableLoader/TableLoader"; import { Timeline } from "#/components/Timeline/Timeline"; import { docs } from "#/utils/docs"; @@ -114,13 +109,7 @@ const AuditTableBody: FC = ({ }) => { // An error renders as an empty table. if (error) { - return ( - - - - - - ); + return ; } if (isLoading) { return ; @@ -129,13 +118,7 @@ const AuditTableBody: FC = ({ const emptyMessage = isNonInitialPage ? "No audit logs available on this page" : "No audit logs available"; - return ( - - - - - - ); + return ; } if (!auditLogs) { return null; diff --git a/site/src/pages/ConnectionLogPage/ConnectionLogPageView.tsx b/site/src/pages/ConnectionLogPage/ConnectionLogPageView.tsx index c5d2a920d4..009e78a2e6 100644 --- a/site/src/pages/ConnectionLogPage/ConnectionLogPageView.tsx +++ b/site/src/pages/ConnectionLogPage/ConnectionLogPageView.tsx @@ -1,6 +1,5 @@ import type { ComponentProps, FC } from "react"; import type { ConnectionLog } from "#/api/typesGenerated"; -import { EmptyState } from "#/components/EmptyState/EmptyState"; import { Margins } from "#/components/Margins/Margins"; import { PageHeader, @@ -12,12 +11,8 @@ import { type PaginationResult, } from "#/components/PaginationWidget/PaginationContainer"; import { PaywallPremium } from "#/components/Paywall/PaywallPremium"; -import { - Table, - TableBody, - TableCell, - TableRow, -} from "#/components/Table/Table"; +import { Table, TableBody } from "#/components/Table/Table"; +import { TableEmpty } from "#/components/TableEmpty/TableEmpty"; import { TableLoader } from "#/components/TableLoader/TableLoader"; import { Timeline } from "#/components/Timeline/Timeline"; import { docs } from "#/utils/docs"; @@ -113,11 +108,7 @@ const ConnectionLogTableBody: FC = ({ // An error renders as an empty table. if (error) { return ( - - - - - + ); } if (isLoading) { @@ -127,13 +118,7 @@ const ConnectionLogTableBody: FC = ({ const emptyMessage = isNonInitialPage ? "No connection logs available on this page" : "No connection logs available"; - return ( - - - - - - ); + return ; } if (!connectionLogs) { return null; diff --git a/site/src/pages/DeploymentSettingsPage/AppearanceSettingsPage/AnnouncementBannerSettings.tsx b/site/src/pages/DeploymentSettingsPage/AppearanceSettingsPage/AnnouncementBannerSettings.tsx index bd9f587256..d0f2d04b7c 100644 --- a/site/src/pages/DeploymentSettingsPage/AppearanceSettingsPage/AnnouncementBannerSettings.tsx +++ b/site/src/pages/DeploymentSettingsPage/AppearanceSettingsPage/AnnouncementBannerSettings.tsx @@ -3,16 +3,15 @@ import { type FC, useState } from "react"; import type { BannerConfig } from "#/api/typesGenerated"; import { Button } from "#/components/Button/Button"; import { ConfirmDialog } from "#/components/Dialog/ConfirmDialog/ConfirmDialog"; -import { EmptyState } from "#/components/EmptyState/EmptyState"; import { Link } from "#/components/Link/Link"; import { Table, TableBody, - TableCell, TableHead, TableHeader, TableRow, } from "#/components/Table/Table"; +import { TableEmpty } from "#/components/TableEmpty/TableEmpty"; import { AnnouncementBannerDialog } from "./AnnouncementBannerDialog"; import { AnnouncementBannerItem } from "./AnnouncementBannerItem"; @@ -91,12 +90,10 @@ export const AnnouncementBannerSettings: FC< {!isEntitled || banners.length < 1 ? ( - - - + ) : ( banners.map((banner, i) => ( ; export const Page: Story = {}; + +export const Empty: Story = { + args: { + config: { + external_auth: [], + }, + }, +}; diff --git a/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPageView.tsx index 29a3ac506a..b6f6538d91 100644 --- a/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPageView.tsx @@ -19,6 +19,7 @@ import { TableHeader, TableRow, } from "#/components/Table/Table"; +import { TableEmpty } from "#/components/TableEmpty/TableEmpty"; import { docs } from "#/utils/docs"; type ExternalAuthSettingsPageViewProps = { @@ -68,16 +69,10 @@ export const ExternalAuthSettingsPageView: FC< - {((config.external_auth === null || - config.external_auth?.length === 0) && ( - - -
- No providers have been configured! -
-
-
- )) || + {config.external_auth === null || + config.external_auth?.length === 0 ? ( + + ) : ( config.external_auth?.map((git: ExternalAuthConfig) => { const name = git.id || git.type; return ( @@ -87,7 +82,8 @@ export const ExternalAuthSettingsPageView: FC< {git.regex || "Not Set"} ); - })} + }) + )}
diff --git a/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/IdpOrgSyncPageView.tsx b/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/IdpOrgSyncPageView.tsx index 74fce05ebb..fea9a48860 100644 --- a/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/IdpOrgSyncPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/IdpOrgSyncPageView.tsx @@ -25,7 +25,6 @@ import { DialogHeader, DialogTitle, } from "#/components/Dialog/Dialog"; -import { EmptyState } from "#/components/EmptyState/EmptyState"; import { HelpPopover, HelpPopoverContent, @@ -49,6 +48,7 @@ import { TableHeader, TableRow, } from "#/components/Table/Table"; +import { TableEmpty } from "#/components/TableEmpty/TableEmpty"; import { Tooltip, TooltipContent, @@ -408,19 +408,15 @@ const IdpMappingTable: FC = ({ isEmpty, children }) => { {isEmpty ? ( - - - - How to set up IdP organization sync - - } - /> - - + + How to set up IdP organization sync + + } + /> ) : ( children )} diff --git a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/EditOAuth2AppPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/EditOAuth2AppPageView.stories.tsx index 01be035ccf..2131b5b1ba 100644 --- a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/EditOAuth2AppPageView.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/EditOAuth2AppPageView.stories.tsx @@ -67,6 +67,28 @@ export const Default: Story = { }, }; +export const EmptySecrets: Story = { + parameters: { + queries: [ + { key: oauth2ProviderAppKey(appId), data: mockApp }, + { + key: oauth2ProviderAppSecretsKey(appId), + data: [], + }, + ], + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + await expect(await canvas.findByText(mockApp.name)).toBeVisible(); + await expect( + canvas.getByRole("table", { name: "OAuth2 client secrets" }), + ).toBeVisible(); + await expect( + canvas.getByText("No client secrets have been generated."), + ).toBeVisible(); + }, +}; + export const Loading: Story = { parameters: { queries: [], diff --git a/site/src/pages/GroupsPage/GroupMembersPage.tsx b/site/src/pages/GroupsPage/GroupMembersPage.tsx index fa8c1d7808..66fecd2e0e 100644 --- a/site/src/pages/GroupsPage/GroupMembersPage.tsx +++ b/site/src/pages/GroupsPage/GroupMembersPage.tsx @@ -33,7 +33,6 @@ import { DropdownMenuItem, DropdownMenuTrigger, } from "#/components/DropdownMenu/DropdownMenu"; -import { EmptyState } from "#/components/EmptyState/EmptyState"; import { UsersFilter } from "#/components/Filter/UsersFilter"; import { LastSeen } from "#/components/LastSeen/LastSeen"; import { MultiMemberSelect } from "#/components/MultiUserSelect/MultiUserSelect"; @@ -47,6 +46,7 @@ import { TableHeader, TableRow, } from "#/components/Table/Table"; +import { TableEmpty } from "#/components/TableEmpty/TableEmpty"; import { useAuthenticated } from "#/hooks/useAuthenticated"; import { useFeatureVisibility } from "#/modules/dashboard/useFeatureVisibility"; import { isEveryoneGroup } from "#/modules/groups"; @@ -198,11 +198,7 @@ const GroupMembersPage: FC = () => { {members.length === 0 ? ( - - - - - + ) : ( membersWithSpend.map((member) => ( = ({ } if (groups.length === 0) { return ( - - - - - - Create group - - - ) - } - /> - - + + + + Create group + + + ) + } + /> ); } return ( diff --git a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPageView.tsx b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPageView.tsx index b239d163af..331bf8510f 100644 --- a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPageView.tsx +++ b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPageView.tsx @@ -10,7 +10,6 @@ import { DropdownMenuItem, DropdownMenuTrigger, } from "#/components/DropdownMenu/DropdownMenu"; -import { EmptyState } from "#/components/EmptyState/EmptyState"; import { PaywallPremium } from "#/components/Paywall/PaywallPremium"; import { Skeleton } from "#/components/Skeleton/Skeleton"; import { @@ -21,6 +20,7 @@ import { TableHeader, TableRow, } from "#/components/Table/Table"; +import { TableEmpty } from "#/components/TableEmpty/TableEmpty"; import { TableLoaderSkeleton, TableRowSkeleton, @@ -282,31 +282,27 @@ const RoleTableBody: FC = ({ } if (roles.length === 0) { return ( - - - - - - Create custom role - - - ) - } - /> - - + + + + Create custom role + + + ) + } + /> ); } return ( diff --git a/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpMappingTable.tsx b/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpMappingTable.tsx index 3d92b6e133..6cb2820847 100644 --- a/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpMappingTable.tsx +++ b/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpMappingTable.tsx @@ -1,5 +1,4 @@ import type { FC } from "react"; -import { EmptyState } from "#/components/EmptyState/EmptyState"; import { Link } from "#/components/Link/Link"; import { Table, @@ -8,6 +7,7 @@ import { TableHeader, TableRow, } from "#/components/Table/Table"; +import { TableEmpty } from "#/components/TableEmpty/TableEmpty"; import { docs } from "#/utils/docs"; interface IdpMappingTableProps { @@ -37,23 +37,19 @@ export const IdpMappingTable: FC = ({ {rowCount === 0 ? ( - - - - How to setup IdP {type.toLocaleLowerCase()} sync - - } - /> - - + + How to setup IdP {type.toLocaleLowerCase()} sync + + } + /> ) : ( children )} diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPageView.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPageView.tsx index 3e6deb8b9e..e488288bcb 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPageView.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPageView.tsx @@ -36,6 +36,7 @@ import { TableHeader, TableRow, } from "#/components/Table/Table"; +import { TableEmpty } from "#/components/TableEmpty/TableEmpty"; import { Tooltip, TooltipContent, @@ -191,25 +192,17 @@ const OrganizationProvisionerJobsPageView: FC< /> )) ) : ( - - - - - + ) ) : error ? ( - - - - Retry - - } - /> - - + + Retry + + } + /> ) : ( diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerKeysPage/OrganizationProvisionerKeysPageView.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerKeysPage/OrganizationProvisionerKeysPageView.tsx index 104b9ffdf2..b221a1bc5b 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerKeysPage/OrganizationProvisionerKeysPageView.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerKeysPage/OrganizationProvisionerKeysPageView.tsx @@ -6,7 +6,6 @@ import { ProvisionerKeyIDUserAuth, } from "#/api/typesGenerated"; import { Button } from "#/components/Button/Button"; -import { EmptyState } from "#/components/EmptyState/EmptyState"; import { Link } from "#/components/Link/Link"; import { Loader } from "#/components/Loader/Loader"; import { PaywallPremium } from "#/components/Paywall/PaywallPremium"; @@ -23,6 +22,7 @@ import { TableHeader, TableRow, } from "#/components/Table/Table"; +import { TableEmpty } from "#/components/TableEmpty/TableEmpty"; import { docs } from "#/utils/docs"; import { ProvisionerKeyRow } from "./ProvisionerKeyRow"; @@ -77,14 +77,10 @@ export const OrganizationProvisionerKeysPageView: FC< {filteredProvisionerKeyDaemons ? ( filteredProvisionerKeyDaemons.length === 0 ? ( - - - - - + ) : ( filteredProvisionerKeyDaemons.map((pkd) => ( - - - Retry - - } - /> - - + + Retry + + } + /> ) : ( diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/OrganizationProvisionersPageView.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/OrganizationProvisionersPageView.tsx index dce453dbda..4dd0bfe90d 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/OrganizationProvisionersPageView.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/OrganizationProvisionersPageView.tsx @@ -4,7 +4,6 @@ import type { ProvisionerDaemon } from "#/api/typesGenerated"; import { Badge } from "#/components/Badge/Badge"; import { Button } from "#/components/Button/Button"; import { Checkbox } from "#/components/Checkbox/Checkbox"; -import { EmptyState } from "#/components/EmptyState/EmptyState"; import { Link } from "#/components/Link/Link"; import { Loader } from "#/components/Loader/Loader"; import { PaywallPremium } from "#/components/Paywall/PaywallPremium"; @@ -21,6 +20,7 @@ import { TableHeader, TableRow, } from "#/components/Table/Table"; +import { TableEmpty } from "#/components/TableEmpty/TableEmpty"; import { Tooltip, TooltipContent, @@ -145,35 +145,27 @@ export const OrganizationProvisionersPageView: FC< /> )) ) : ( - - - - - Create a provisioner - - - } - /> - - + + + Create a provisioner + + + } + /> ) ) : error ? ( - - - - Retry - - } - /> - - + + Retry + + } + /> ) : ( diff --git a/site/src/pages/TasksPage/TasksTable.tsx b/site/src/pages/TasksPage/TasksTable.tsx index ef7b4eee6e..6c03b0f444 100644 --- a/site/src/pages/TasksPage/TasksTable.tsx +++ b/site/src/pages/TasksPage/TasksTable.tsx @@ -26,6 +26,7 @@ import { TableHeader, TableRow, } from "#/components/Table/Table"; +import { TableEmpty } from "#/components/TableEmpty/TableEmpty"; import { TableLoaderSkeleton, TableRowSkeleton, @@ -131,43 +132,25 @@ type TasksErrorBodyProps = { const TasksErrorBody: FC = ({ error, onRetry }) => { return ( - - -
-
-

- {getErrorMessage(error, "Error loading tasks")} -

- - {getErrorDetail(error) ?? "Please try again"} - - -
-
-
-
+ + + Try again + + } + /> ); }; const TasksEmpty: FC = () => { return ( - - -
-
-

- No tasks found -

- - Use the form above to run a task - -
-
-
-
+ ); }; diff --git a/site/src/pages/TemplatePage/TemplateVersionsPage/VersionsTable.tsx b/site/src/pages/TemplatePage/TemplateVersionsPage/VersionsTable.tsx index a96d69dcea..5bddffb197 100644 --- a/site/src/pages/TemplatePage/TemplateVersionsPage/VersionsTable.tsx +++ b/site/src/pages/TemplatePage/TemplateVersionsPage/VersionsTable.tsx @@ -1,12 +1,7 @@ import type { FC } from "react"; import type * as TypesGen from "#/api/typesGenerated"; -import { EmptyState } from "#/components/EmptyState/EmptyState"; -import { - Table, - TableBody, - TableCell, - TableRow, -} from "#/components/Table/Table"; +import { Table, TableBody } from "#/components/Table/Table"; +import { TableEmpty } from "#/components/TableEmpty/TableEmpty"; import { TableLoader } from "#/components/TableLoader/TableLoader"; import { Timeline } from "#/components/Timeline/Timeline"; import { VersionRow } from "./VersionRow"; @@ -65,13 +60,7 @@ export const VersionsTable: FC = ({ )} {versions && versions.length === 0 && ( - - -
- -
-
-
+ )}
diff --git a/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.tsx b/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.tsx index 4d4ba40459..764840d3a7 100644 --- a/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.tsx @@ -17,7 +17,6 @@ import { DropdownMenuItem, DropdownMenuTrigger, } from "#/components/DropdownMenu/DropdownMenu"; -import { EmptyState } from "#/components/EmptyState/EmptyState"; import { Select, SelectContent, @@ -39,6 +38,7 @@ import { TableHeader, TableRow, } from "#/components/Table/Table"; +import { TableEmpty } from "#/components/TableEmpty/TableEmpty"; import { TableLoader } from "#/components/TableLoader/TableLoader"; import { getGroupSubtitle } from "#/modules/groups"; import { @@ -302,14 +302,10 @@ const MembersTableBody: FC = ({ templateACL.users.length === 0 && templateACL.group.length === 0; if (isEmpty) { return ( - - - - - + ); } diff --git a/site/src/pages/UserSettingsPage/OAuth2ProviderPage/OAuth2ProviderPageView.stories.tsx b/site/src/pages/UserSettingsPage/OAuth2ProviderPage/OAuth2ProviderPageView.stories.tsx index a85508f8ac..95c1954615 100644 --- a/site/src/pages/UserSettingsPage/OAuth2ProviderPage/OAuth2ProviderPageView.stories.tsx +++ b/site/src/pages/UserSettingsPage/OAuth2ProviderPage/OAuth2ProviderPageView.stories.tsx @@ -34,3 +34,12 @@ export const Apps: Story = { revoke: () => undefined, }, }; + +export const Empty: Story = { + args: { + isLoading: false, + error: undefined, + apps: [], + revoke: () => undefined, + }, +}; diff --git a/site/src/pages/UserSettingsPage/OAuth2ProviderPage/OAuth2ProviderPageView.tsx b/site/src/pages/UserSettingsPage/OAuth2ProviderPage/OAuth2ProviderPageView.tsx index 32ba171ea7..350e7a8d7b 100644 --- a/site/src/pages/UserSettingsPage/OAuth2ProviderPage/OAuth2ProviderPageView.tsx +++ b/site/src/pages/UserSettingsPage/OAuth2ProviderPage/OAuth2ProviderPageView.tsx @@ -11,6 +11,7 @@ import { TableHeader, TableRow, } from "#/components/Table/Table"; +import { TableEmpty } from "#/components/TableEmpty/TableEmpty"; import { TableLoader } from "#/components/TableLoader/TableLoader"; type OAuth2ProviderPageViewProps = { @@ -43,13 +44,7 @@ const OAuth2ProviderPageView: FC = ({ ))} {apps?.length === 0 && ( - - -
- No OAuth2 applications have been authorized. -
-
-
+ )}
diff --git a/site/src/pages/UsersPage/UsersTable.tsx b/site/src/pages/UsersPage/UsersTable.tsx index 18400743ad..8cf958c83f 100644 --- a/site/src/pages/UsersPage/UsersTable.tsx +++ b/site/src/pages/UsersPage/UsersTable.tsx @@ -15,7 +15,6 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from "#/components/DropdownMenu/DropdownMenu"; -import { EmptyState } from "#/components/EmptyState/EmptyState"; import { LastSeen } from "#/components/LastSeen/LastSeen"; import { Skeleton } from "#/components/Skeleton/Skeleton"; import { @@ -26,6 +25,7 @@ import { TableHeader, TableRow, } from "#/components/Table/Table"; +import { TableEmpty } from "#/components/TableEmpty/TableEmpty"; import { TableLoaderSkeleton, TableRowSkeleton, @@ -136,15 +136,7 @@ const UsersTableBody: React.FC = ({ } if (!users || users.length === 0) { - return ( - - -
- -
-
-
- ); + return ; } return (