import { Text } from '@sanity/ui';
import { Preview, SchemaType } from 'sanity';
import styled from 'styled-components';
import { CellPrimitive } from './primitives';
const TableDiv = styled(Text)`
font-size: ${(props) => (props.muted ? '0.7rem' : '0.75rem')};
`;
const TableCellContentImage = styled.div`
width: 2.0625rem;
height: 2.0625rem;
min-width: 2.0625rem;
font-size: 0.75rem;
> div > div {
padding: 0;
}
`;
function formatDatetime(
value: string,
{ includeTime }: { includeTime: boolean },
): string {
const locale = navigator.language || 'en-US'; // Get the user's locale
const timeOptions = includeTime
? {
hour: 'numeric' as const,
minute: 'numeric' as const,
hour12: true,
}
: {};
return new Date(value).toLocaleString(locale, {
year: 'numeric',
month: 'numeric',
day: 'numeric',
...timeOptions,
});
}
interface Props {
field: any;
fieldPath: string;
value: any;
}
function Cell({ field, fieldPath, value }: Props) {
switch (field.type.name) {
case 'date':
case 'datetime':
case '_createdAt':
case '_lastPublishedAt':
case '_updatedAt': {
const includeTime = field.type.name !== 'date';
const defaultMessage =
field.type.name === '_lastPublishedAt' ? 'Not published' : '-';
return (
{value ? formatDatetime(value, { includeTime }) : defaultMessage}
);
}
case 'slug': {
return (
{value?.current || '-'}
);
}
case 'text':
case 'url':
case 'string':
case 'number': {
return (
{value || '-'}
);
}
case 'boolean': {
let renderedValue = '-';
if (value === true) renderedValue = 'Yes';
if (value === false) renderedValue = 'No';
return (
{renderedValue}
);
}
case 'array': {
return (
{value?.length || 0} item{value?.length === 1 ? '' : 's'}
);
}
case 'image': {
return (
{value ? (
) : (
-
)}
);
}
default: {
return (
{value ? (
) : (
'-'
)}
);
}
}
}
export default Cell;