diff --git a/src/components/table/Table.tsx b/src/components/table/Table.tsx index c568fc2..5b32048 100644 --- a/src/components/table/Table.tsx +++ b/src/components/table/Table.tsx @@ -14,10 +14,10 @@ import { order } from '@/utils/orderable'; import copilotTheme from '@/utils/copilotTheme'; import NoRowsOverlay from './NoRowsOverlay'; import Loading from '@/app/loading'; +import { getWorkspaceLabels } from '@/utils/getWorkspaceLabels'; export const TableCore = () => { const appState = useAppState(); - // Row Data: The data to be displayed. const [rowData, setRowData] = useState([]); // @@ -80,7 +80,7 @@ export const TableCore = () => { colDefs = [ ...colDefs, { - field: 'client', + field: getWorkspaceLabels(appState?.workspace).individualTerm, cellRenderer: ClientCellRenderer, flex: 1, comparator: comparatorTypeI, @@ -110,7 +110,7 @@ export const TableCore = () => { colDefs = [ ...colDefs, { - field: 'company', + field: getWorkspaceLabels(appState?.workspace).groupTerm, cellRenderer: CompanyCellRenderer, flex: 1, comparator: comparatorTypeI, diff --git a/src/types/common.ts b/src/types/common.ts index 9574565..3764672 100644 --- a/src/types/common.ts +++ b/src/types/common.ts @@ -34,6 +34,15 @@ export type MeResponse = z.infer; export const WorkspaceResponseSchema = z.object({ id: z.string(), isCompaniesEnabled: z.boolean().optional(), + labels: z + .object({ + individualTerm: z.string().optional(), + individualTermPlural: z.string().optional(), + groupTerm: z.string().optional(), + groupTermPlural: z.string().optional(), + }) + .optional(), + // For future use // industry: z.string().optional(), // isClientDirectSignUpEnabled: z.boolean().optional(), diff --git a/src/utils/getWorkspaceLabels.ts b/src/utils/getWorkspaceLabels.ts new file mode 100644 index 0000000..312a0ea --- /dev/null +++ b/src/utils/getWorkspaceLabels.ts @@ -0,0 +1,25 @@ +import { WorkspaceResponse } from '@/types/common'; + +type WorkspaceLabels = { + individualTerm: string; + individualTermPlural: string; + groupTerm: string; + groupTermPlural: string; +}; + +export const getWorkspaceLabels = (workspace?: WorkspaceResponse, shouldCapitalize: boolean = false): WorkspaceLabels => { + const capitalize = (str: string) => str.charAt(0).toUpperCase() + str.slice(1); + const deCapitalize = (str: string) => str.charAt(0).toLowerCase() + str.slice(1); + + const format = (value: string | undefined, fallback: string) => { + if (!value) return shouldCapitalize ? capitalize(fallback) : deCapitalize(fallback); + return shouldCapitalize ? capitalize(value) : deCapitalize(value); + }; + + return { + individualTerm: format(workspace?.labels?.individualTerm, 'client'), + individualTermPlural: format(workspace?.labels?.individualTermPlural, 'clients'), + groupTerm: format(workspace?.labels?.groupTerm, 'company'), + groupTermPlural: format(workspace?.labels?.groupTermPlural, 'companies'), + }; +};