diff --git a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminEnvCopyableText.tsx b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminEnvCopyableText.tsx
new file mode 100644
index 000000000..798c85374
--- /dev/null
+++ b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminEnvCopyableText.tsx
@@ -0,0 +1,63 @@
+import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
+import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
+import { useTheme } from '@emotion/react';
+import styled from '@emotion/styled';
+import { useLingui } from '@lingui/react/macro';
+import { IconCopy, OverflowingTextWithTooltip } from 'twenty-ui';
+import { useDebouncedCallback } from 'use-debounce';
+
+const StyledEllipsisLabel = styled.div`
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+`;
+
+const StyledExpandedEllipsisLabel = styled.div`
+ white-space: normal;
+ word-break: break-all;
+`;
+
+const StyledCopyContainer = styled.span`
+ cursor: pointer;
+`;
+export const SettingsAdminEnvCopyableText = ({
+ text,
+ displayText,
+ multiline = false,
+ maxRows,
+}: {
+ text: string;
+ displayText?: React.ReactNode;
+ multiline?: boolean;
+ maxRows?: number;
+}) => {
+ const { enqueueSnackBar } = useSnackBar();
+ const theme = useTheme();
+ const { t } = useLingui();
+
+ const copyToClipboardDebounced = useDebouncedCallback((value: string) => {
+ navigator.clipboard.writeText(value);
+ enqueueSnackBar(t`Copied to clipboard!`, {
+ variant: SnackBarVariant.Success,
+ icon: ,
+ });
+ }, 200);
+
+ return (
+ copyToClipboardDebounced(text)}>
+ {maxRows ? (
+
+ ) : multiline ? (
+
+ {displayText || text}
+
+ ) : (
+ {displayText || text}
+ )}
+
+ );
+};
diff --git a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminEnvVariables.tsx b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminEnvVariables.tsx
index 206e33f39..6daf385be 100644
--- a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminEnvVariables.tsx
+++ b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminEnvVariables.tsx
@@ -10,14 +10,16 @@ import { Card, H2Title, IconHeartRateMonitor, Section } from 'twenty-ui';
import { useGetEnvironmentVariablesGroupedQuery } from '~/generated/graphql';
import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
-const StyledGroupContainer = styled.div`
- margin-bottom: ${({ theme }) => theme.spacing(6)};
-`;
+const StyledGroupContainer = styled.div``;
const StyledInfoText = styled.div`
color: ${({ theme }) => theme.font.color.secondary};
`;
+const StyledCard = styled(Card)`
+ margin-bottom: ${({ theme }) => theme.spacing(8)};
+`;
+
export const SettingsAdminEnvVariables = () => {
const theme = useTheme();
const { data: environmentVariables, loading: environmentVariablesLoading } =
@@ -38,22 +40,20 @@ export const SettingsAdminEnvVariables = () => {
<>
- {t` These are only the server values. Ensure your worker environment has the
- same variables and values, this is required for asynchronous tasks like
- email sync.`}
+ {t`These are only the server values. Ensure your worker environment has the same variables and values, this is required for asynchronous tasks like email sync.`}
-
- {visibleGroups.map((group) => (
-
-
- {group.variables.length > 0 && (
-
- )}
-
- ))}
+ {visibleGroups.map((group) => (
+
+
+ {group.variables.length > 0 && (
+
+ )}
+
+ ))}
-
+
+
{
LeftIcon={IconHeartRateMonitor}
LeftIconColor={theme.font.color.tertiary}
/>
-
+
>
);
diff --git a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminEnvVariablesRow.tsx b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminEnvVariablesRow.tsx
index 1ee2d278b..a914674da 100644
--- a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminEnvVariablesRow.tsx
+++ b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminEnvVariablesRow.tsx
@@ -1,3 +1,5 @@
+import { SettingsAdminEnvCopyableText } from '@/settings/admin-panel/components/SettingsAdminEnvCopyableText';
+import { SettingsAdminTableCard } from '@/settings/admin-panel/components/SettingsAdminTableCard';
import { TableCell } from '@/ui/layout/table/components/TableCell';
import { TableRow } from '@/ui/layout/table/components/TableRow';
import { useTheme } from '@emotion/react';
@@ -19,6 +21,8 @@ type SettingsAdminEnvVariablesRowProps = {
value: string;
sensitive: boolean;
};
+ isExpanded: boolean;
+ onExpandToggle: (name: string) => void;
};
const StyledTruncatedCell = styled(TableCell)`
@@ -43,53 +47,36 @@ const StyledButton = styled(motion.button)`
const MotionIconChevronDown = motion(IconChevronRight);
-const StyledExpandedDetails = styled.div`
- background-color: ${({ theme }) => theme.background.secondary};
- border-radius: ${({ theme }) => theme.border.radius.sm};
- margin: ${({ theme }) => theme.spacing(2)} 0;
- padding: ${({ theme }) => theme.spacing(2)};
- border: 1px solid ${({ theme }) => theme.border.color.medium};
- display: grid;
- grid-template-columns: auto 1fr;
- gap: ${({ theme }) => theme.spacing(1)};
- height: fit-content;
- min-height: min-content;
-`;
-
-const StyledDetailLabel = styled.div`
- color: ${({ theme }) => theme.font.color.tertiary};
- font-weight: ${({ theme }) => theme.font.weight.regular};
- padding-right: ${({ theme }) => theme.spacing(4)};
-`;
-
const StyledEllipsisLabel = styled.div`
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
`;
-const StyledExpandedLabel = styled.div`
- word-break: break-word;
- white-space: normal;
- overflow: visible;
-`;
-
const StyledValueContainer = styled.div`
- display: flex;
align-items: center;
+ display: flex;
+ gap: ${({ theme }) => theme.spacing(1)};
justify-content: space-between;
+ width: 100%;
`;
const StyledTableRow = styled(TableRow)<{ isExpanded: boolean }>`
background-color: ${({ isExpanded, theme }) =>
isExpanded ? theme.background.transparent.light : 'transparent'};
- margin-bottom: ${({ theme }) => theme.spacing(0.5)};
+`;
+
+const StyledExpandableContainer = styled.div`
+ width: 100%;
+ padding-top: ${({ theme }) => theme.spacing(2)};
+ padding-bottom: ${({ theme }) => theme.spacing(2)};
`;
export const SettingsAdminEnvVariablesRow = ({
variable,
+ isExpanded,
+ onExpandToggle,
}: SettingsAdminEnvVariablesRowProps) => {
- const [isExpanded, setIsExpanded] = useState(false);
const [showSensitiveValue, setShowSensitiveValue] = useState(false);
const theme = useTheme();
@@ -105,10 +92,47 @@ export const SettingsAdminEnvVariablesRow = ({
setShowSensitiveValue(!showSensitiveValue);
};
+ const environmentVariablesDetails = [
+ {
+ label: 'Name',
+ value: ,
+ },
+ {
+ label: 'Description',
+ value: (
+
+ ),
+ },
+ {
+ label: 'Value',
+ value: (
+
+
+ {variable.sensitive && variable.value !== '' && (
+
+ )}
+
+ ),
+ },
+ ];
+
return (
<>
setIsExpanded(!isExpanded)}
+ onClick={() => onExpandToggle(variable.name)}
gridAutoColumns="5fr 4fr 3fr 1fr"
isExpanded={isExpanded}
>
@@ -122,7 +146,12 @@ export const SettingsAdminEnvVariablesRow = ({
{displayValue}
- setIsExpanded(!isExpanded)}>
+ {
+ e.stopPropagation();
+ onExpandToggle(variable.name);
+ }}
+ >
-
- Name
- {variable.name}
- Description
- {variable.description}
- Value
-
-
- {displayValue}
- {variable.sensitive && variable.value !== '' && (
-
- )}
-
-
-
+
+
+
>
);
diff --git a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminEnvVariablesTable.tsx b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminEnvVariablesTable.tsx
index b4ccf799c..70aa04415 100644
--- a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminEnvVariablesTable.tsx
+++ b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminEnvVariablesTable.tsx
@@ -1,11 +1,13 @@
import { SettingsAdminEnvVariablesRow } from '@/settings/admin-panel/components/SettingsAdminEnvVariablesRow';
import { Table } from '@/ui/layout/table/components/Table';
+import { TableBody } from '@/ui/layout/table/components/TableBody';
import { TableHeader } from '@/ui/layout/table/components/TableHeader';
import { TableRow } from '@/ui/layout/table/components/TableRow';
import styled from '@emotion/styled';
+import { useState } from 'react';
-const StyledTable = styled(Table)`
- margin-top: ${({ theme }) => theme.spacing(3)};
+const StyledTableBody = styled(TableBody)`
+ border-bottom: 1px solid ${({ theme }) => theme.border.color.light};
`;
type SettingsAdminEnvVariablesTableProps = {
@@ -19,16 +21,31 @@ type SettingsAdminEnvVariablesTableProps = {
export const SettingsAdminEnvVariablesTable = ({
variables,
-}: SettingsAdminEnvVariablesTableProps) => (
-
-
- Name
- Description
- Value
-
-
- {variables.map((variable) => (
-
- ))}
-
-);
+}: SettingsAdminEnvVariablesTableProps) => {
+ const [expandedRowName, setExpandedRowName] = useState(null);
+
+ const handleExpandToggle = (name: string) => {
+ setExpandedRowName(expandedRowName === name ? null : name);
+ };
+
+ return (
+
+
+ Name
+ Description
+ Value
+
+
+
+ {variables.map((variable) => (
+
+ ))}
+
+
+ );
+};
diff --git a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
index f50cfaf90..3b6f98ef9 100644
--- a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
+++ b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
@@ -16,16 +16,18 @@ import { useRecoilState, useRecoilValue } from 'recoil';
import { getImageAbsoluteURI, isDefined } from 'twenty-shared';
import {
Button,
- H1Title,
- H1TitleFontColor,
H2Title,
+ IconId,
+ IconMail,
IconSearch,
+ IconUser,
Section,
} from 'twenty-ui';
import { REACT_APP_SERVER_BASE_URL } from '~/config';
import { useUserLookupAdminPanelMutation } from '~/generated/graphql';
import { currentUserState } from '@/auth/states/currentUserState';
+import { SettingsAdminTableCard } from '@/settings/admin-panel/components/SettingsAdminTableCard';
import { SettingsAdminVersionContainer } from '@/settings/admin-panel/components/SettingsAdminVersionContainer';
const StyledContainer = styled.div`
@@ -35,10 +37,6 @@ const StyledContainer = styled.div`
gap: ${({ theme }) => theme.spacing(2)};
`;
-const StyledUserInfo = styled.div`
- margin-bottom: ${({ theme }) => theme.spacing(5)};
-`;
-
const StyledTabListContainer = styled.div`
align-items: center;
border-bottom: ${({ theme }) => `1px solid ${theme.border.color.light}`};
@@ -47,12 +45,6 @@ const StyledTabListContainer = styled.div`
gap: ${({ theme }) => theme.spacing(2)};
`;
-const StyledContentContainer = styled.div`
- flex: 1;
- width: 100%;
- padding: ${({ theme }) => theme.spacing(4)} 0;
-`;
-
export const SettingsAdminGeneral = () => {
const [userIdentifier, setUserIdentifier] = useState('');
const { enqueueSnackBar } = useSnackBar();
@@ -124,6 +116,24 @@ export const SettingsAdminGeneral = () => {
userLookupResult?.user.lastName || ''
}`.trim();
+ const userInfoItems = [
+ {
+ Icon: IconUser,
+ label: t`Name`,
+ value: userFullName,
+ },
+ {
+ Icon: IconMail,
+ label: t`Email`,
+ value: userLookupResult?.user.email,
+ },
+ {
+ Icon: IconId,
+ label: t`ID`,
+ value: userLookupResult?.user.id,
+ },
+ ];
+
return (
<>
{canAccessFullAdminPanel && (
@@ -173,36 +183,31 @@ export const SettingsAdminGeneral = () => {
)}
{isDefined(userLookupResult) && (
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+ >
)}
>
);
diff --git a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminTableCard.tsx b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminTableCard.tsx
new file mode 100644
index 000000000..f7614641b
--- /dev/null
+++ b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminTableCard.tsx
@@ -0,0 +1,93 @@
+import { Table } from '@/ui/layout/table/components/Table';
+import { TableBody } from '@/ui/layout/table/components/TableBody';
+import { TableCell } from '@/ui/layout/table/components/TableCell';
+import { TableRow } from '@/ui/layout/table/components/TableRow';
+import { useTheme } from '@emotion/react';
+import styled from '@emotion/styled';
+import { Card, IconComponent } from 'twenty-ui';
+
+const StyledCard = styled(Card)`
+ background-color: ${({ theme }) => theme.background.secondary};
+ border: 1px solid ${({ theme }) => theme.border.color.medium};
+`;
+
+const StyledTableRow = styled(TableRow)`
+ height: ${({ theme }) => theme.spacing(6)};
+`;
+
+const StyledTableCellLabel = styled(TableCell)<{
+ align?: 'left' | 'center' | 'right';
+}>`
+ color: ${({ theme }) => theme.font.color.tertiary};
+ height: ${({ theme }) => theme.spacing(6)};
+ display: flex;
+ gap: ${({ theme }) => theme.spacing(2)};
+ justify-content: ${({ align }) =>
+ align === 'right'
+ ? 'flex-end'
+ : align === 'center'
+ ? 'center'
+ : 'flex-start'};
+`;
+
+const StyledTableCellValue = styled(TableCell)<{
+ align?: 'left' | 'center' | 'right';
+}>`
+ color: ${({ theme }) => theme.font.color.primary};
+ height: ${({ theme }) => theme.spacing(6)};
+ justify-content: ${({ align }) =>
+ align === 'left'
+ ? 'flex-start'
+ : align === 'center'
+ ? 'center'
+ : 'flex-end'};
+`;
+
+type TableItem = {
+ Icon?: IconComponent;
+ label: string;
+ value: string | number | React.ReactNode;
+};
+
+type SettingsAdminTableCardProps = {
+ items: TableItem[];
+ rounded?: boolean;
+ gridAutoColumns?: string;
+ labelAlign?: 'left' | 'center' | 'right';
+ valueAlign?: 'left' | 'center' | 'right';
+ className?: string;
+};
+
+export const SettingsAdminTableCard = ({
+ items,
+ rounded = false,
+ gridAutoColumns,
+ labelAlign = 'left',
+ valueAlign = 'left',
+ className,
+}: SettingsAdminTableCardProps) => {
+ const theme = useTheme();
+
+ return (
+
+
+
+ {items.map((item, index) => (
+
+
+ {item.Icon && }
+ {item.label}
+
+
+ {item.value}
+
+
+ ))}
+
+
+
+ );
+};
diff --git a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
index ff8bf72a3..d539629b3 100644
--- a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
+++ b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
@@ -1,46 +1,20 @@
-import { IconCircleDot, IconComponent, IconStatusChange } from 'twenty-ui';
-
-import { GITHUB_LINK } from '@ui/navigation/link/constants/GithubLink';
-
+import { SettingsAdminTableCard } from '@/settings/admin-panel/components/SettingsAdminTableCard';
import { checkTwentyVersionExists } from '@/settings/admin-panel/utils/checkTwentyVersionExists';
import { fetchLatestTwentyRelease } from '@/settings/admin-panel/utils/fetchLatestTwentyRelease';
-import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
import { t } from '@lingui/core/macro';
+import { GITHUB_LINK } from '@ui/navigation/link/constants/GithubLink';
import { useEffect, useState } from 'react';
+import { IconCircleDot, IconStatusChange } from 'twenty-ui';
import packageJson from '../../../../../package.json';
-const StyledVersionContainer = styled.div`
- background: ${({ theme }) => theme.background.secondary};
- border: 1px solid ${({ theme }) => theme.border.color.medium};
- border-radius: ${({ theme }) => theme.border.radius.md};
- gap: ${({ theme }) => theme.spacing(2)};
- padding: ${({ theme }) => theme.spacing(3)};
- display: grid;
-`;
-
-const StyledVersionDetails = styled.div`
- font-size: ${({ theme }) => theme.font.size.sm};
- font-weight: ${({ theme }) => theme.font.weight.regular};
- display: flex;
- flex-direction: row;
- gap: ${({ theme }) => theme.spacing(2)};
-`;
-
-const StyledVersionText = styled.div`
- color: ${({ theme }) => theme.font.color.tertiary};
- font-size: ${({ theme }) => theme.font.size.sm};
- font-weight: ${({ theme }) => theme.font.weight.regular};
-`;
-
const StyledActionLink = styled.a`
align-items: center;
color: ${({ theme }) => theme.font.color.primary};
display: flex;
font-size: ${({ theme }) => theme.font.size.sm};
- font-weight: ${({ theme }) => theme.font.weight.medium};
+ font-weight: ${({ theme }) => theme.font.weight.regular};
gap: ${({ theme }) => theme.spacing(1)};
- padding: 0 ${({ theme }) => theme.spacing(1)};
text-decoration: none;
:hover {
@@ -52,19 +26,10 @@ const StyledActionLink = styled.a`
const StyledSpan = styled.span`
color: ${({ theme }) => theme.font.color.primary};
font-size: ${({ theme }) => theme.font.size.sm};
- font-weight: ${({ theme }) => theme.font.weight.medium};
+ font-weight: ${({ theme }) => theme.font.weight.regular};
`;
-type VersionDetail = {
- Icon: IconComponent;
- text: string;
- version: string | null;
- link: string;
- type: 'current' | 'latest';
-};
-
export const SettingsAdminVersionContainer = () => {
- const theme = useTheme();
const [latestVersion, setLatestVersion] = useState(null);
const [currentVersionExists, setCurrentVersionExists] = useState(false);
@@ -73,46 +38,44 @@ export const SettingsAdminVersionContainer = () => {
checkTwentyVersionExists(packageJson.version).then(setCurrentVersionExists);
}, []);
- const VERSION_DETAILS: VersionDetail[] = [
+ const versionItems = [
{
Icon: IconCircleDot,
- text: t`Current version:`,
- version: packageJson.version,
- link: `${GITHUB_LINK}/releases/tag/v${packageJson.version}`,
- type: 'current',
+ label: t`Current version`,
+ value: currentVersionExists ? (
+
+ {packageJson.version}
+
+ ) : (
+ {packageJson.version}
+ ),
},
{
Icon: IconStatusChange,
- text: t`Latest version:`,
- version: latestVersion,
- link: `${GITHUB_LINK}/releases/tag/v${latestVersion}`,
- type: 'latest',
+ label: t`Latest version`,
+ value: latestVersion ? (
+
+ {latestVersion}
+
+ ) : (
+ {latestVersion ?? 'Loading...'}
+ ),
},
];
return (
-
- {VERSION_DETAILS.map((versionDetail, index) => (
-
-
- {versionDetail.text}
- {versionDetail.version &&
- (versionDetail.type === 'current' ? currentVersionExists : true) ? (
-
- {versionDetail.version}
-
- ) : (
- {versionDetail.version}
- )}
-
- ))}
-
+
);
};
diff --git a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
index 501f05085..ad97886ef 100644
--- a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
+++ b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
@@ -1,8 +1,19 @@
-import { Button, H2Title, IconUser, Toggle } from 'twenty-ui';
+import {
+ AvatarChip,
+ Button,
+ H2Title,
+ IconEyeShare,
+ IconHome,
+ IconId,
+ IconUser,
+ Section,
+ Toggle,
+} from 'twenty-ui';
import { currentUserState } from '@/auth/states/currentUserState';
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
import { canManageFeatureFlagsState } from '@/client-config/states/canManageFeatureFlagsState';
+import { SettingsAdminTableCard } from '@/settings/admin-panel/components/SettingsAdminTableCard';
import { useFeatureFlagState } from '@/settings/admin-panel/hooks/useFeatureFlagState';
import { useImpersonationAuth } from '@/settings/admin-panel/hooks/useImpersonationAuth';
import { useImpersonationRedirect } from '@/settings/admin-panel/hooks/useImpersonationRedirect';
@@ -11,14 +22,18 @@ import { WorkspaceInfo } from '@/settings/admin-panel/types/WorkspaceInfo';
import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { Table } from '@/ui/layout/table/components/Table';
+import { TableBody } from '@/ui/layout/table/components/TableBody';
import { TableCell } from '@/ui/layout/table/components/TableCell';
import { TableHeader } from '@/ui/layout/table/components/TableHeader';
import { TableRow } from '@/ui/layout/table/components/TableRow';
+import { DEFAULT_WORKSPACE_LOGO } from '@/ui/navigation/navigation-drawer/constants/DefaultWorkspaceLogo';
import styled from '@emotion/styled';
import { useLingui } from '@lingui/react/macro';
+import { isNonEmptyString } from '@sniptt/guards';
import { useState } from 'react';
import { useRecoilState, useRecoilValue } from 'recoil';
-import { isDefined } from 'twenty-shared';
+import { getImageAbsoluteURI, isDefined } from 'twenty-shared';
+import { REACT_APP_SERVER_BASE_URL } from '~/config';
import {
FeatureFlagKey,
useImpersonateMutation,
@@ -29,7 +44,14 @@ type SettingsAdminWorkspaceContentProps = {
activeWorkspace: WorkspaceInfo | undefined;
};
-const StyledTable = styled(Table)`
+const StyledContainer = styled.div`
+ display: flex;
+ flex-direction: column;
+ gap: ${({ theme }) => theme.spacing(3)};
+ margin-top: ${({ theme }) => theme.spacing(6)};
+`;
+
+const StyledButtonContainer = styled.div`
margin-top: ${({ theme }) => theme.spacing(3)};
`;
@@ -115,64 +137,101 @@ export const SettingsAdminWorkspaceContent = ({
});
};
+ const workspaceInfoItems = [
+ {
+ Icon: IconHome,
+ label: t`Name`,
+ value: (
+
+ ),
+ },
+ {
+ Icon: IconId,
+ label: t`ID`,
+ value: activeWorkspace?.id,
+ },
+ {
+ Icon: IconUser,
+ label: t`Members`,
+ value: activeWorkspace?.totalUsers,
+ },
+ ];
+
if (!activeWorkspace) return null;
return (
- <>
-
- 1 ? t`Users` : t`User`
- }`}
- description={t`Total Users`}
- />
- {currentUser?.canImpersonate && (
-