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;