1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-19 00:15:43 +01:00
unleash.unleash/frontend/src/component/environments/EnvironmentTable/EnvironmentTableSingle.tsx
Christopher Kolstad 53354224fc
chore: Bump biome and configure husky (#6589)
Upgrades biome to 1.6.1, and updates husky pre-commit hook.

Most changes here are making type imports explicit.
2024-03-18 13:58:05 +01:00

114 lines
4.0 KiB
TypeScript

import { styled, TableBody, TableRow } from '@mui/material';
import type { IEnvironment } from 'interfaces/environments';
import { useTable } from 'react-table';
import { SortableTableHeader, Table, TableCell } from 'component/common/Table';
import { EnvironmentIconCell } from 'component/environments/EnvironmentTable/EnvironmentIconCell/EnvironmentIconCell';
import { TextCell } from 'component/common/Table/cells/TextCell/TextCell';
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
import { useMemo } from 'react';
const StyledTable = styled(Table)(({ theme }) => ({
marginTop: theme.spacing(3),
}));
const StyledToggleWarning = styled('p', {
shouldForwardProp: (prop) => prop !== 'warning',
})<{ warning?: boolean }>(({ theme, warning }) => ({
color: warning ? theme.palette.error.dark : theme.palette.text.primary,
}));
interface IEnvironmentTableSingleProps {
environment: IEnvironment;
warnEnabledToggles?: boolean;
}
export const EnvironmentTableSingle = ({
environment,
warnEnabledToggles,
}: IEnvironmentTableSingleProps) => {
const COLUMNS = useMemo(
() => [
{
id: 'Icon',
width: '1%',
Cell: ({
row: { original },
}: {
row: { original: IEnvironment };
}) => <EnvironmentIconCell environment={original} />,
},
{
Header: 'Name',
accessor: 'name',
Cell: TextCell,
},
{
Header: 'Type',
accessor: 'type',
Cell: TextCell,
},
{
Header: 'Visible in',
accessor: (row: IEnvironment) =>
row.projectCount === 1
? '1 project'
: `${row.projectCount} projects`,
Cell: ({
row: { original },
value,
}: {
row: { original: IEnvironment };
value: string;
}) => (
<TextCell>
{value}
<ConditionallyRender
condition={Boolean(warnEnabledToggles)}
show={
<StyledToggleWarning
warning={Boolean(
original.enabledToggleCount &&
original.enabledToggleCount > 0,
)}
>
{original.enabledToggleCount === 1
? '1 toggle enabled'
: `${original.enabledToggleCount} toggles enabled`}
</StyledToggleWarning>
}
/>
</TextCell>
),
},
],
[warnEnabledToggles],
);
const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow } =
useTable({
columns: COLUMNS as any,
data: [environment],
disableSortBy: true,
});
return (
<StyledTable {...getTableProps()} rowHeight='compact'>
<SortableTableHeader headerGroups={headerGroups as any} />
<TableBody {...getTableBodyProps()}>
{rows.map((row) => {
prepareRow(row);
return (
<TableRow hover {...row.getRowProps()}>
{row.cells.map((cell) => (
<TableCell {...cell.getCellProps()}>
{cell.render('Cell')}
</TableCell>
))}
</TableRow>
);
})}
</TableBody>
</StyledTable>
);
};