1f4b1168bSBartosz Kaszubowskiimport { StatusWaitingIcon } from '@expo/styleguide-icons'; 2586106d6SBartłomiej Klocek 3586106d6SBartłomiej Klocekimport { ElementType } from '~/types/common'; 4c169ccafSBartosz Kaszubowskiimport { NoIcon, YesIcon } from '~/ui/components/DocIcons'; 516f9e9a3SBartosz Kaszubowskiimport { Cell, HeaderCell, Row, Table, TableHead, TableLayout } from '~/ui/components/Table'; 6a16a3d18SBartosz Kaszubowskiimport { A, H4 } from '~/ui/components/Text'; 7586106d6SBartłomiej Klocek 8586106d6SBartłomiej Klocekconst platforms = [ 9586106d6SBartłomiej Klocek { title: 'Android Device', propName: 'android' }, 10586106d6SBartłomiej Klocek { title: 'Android Emulator', propName: 'emulator' }, 11586106d6SBartłomiej Klocek { title: 'iOS Device', propName: 'ios' }, 12586106d6SBartłomiej Klocek { title: 'iOS Simulator', propName: 'simulator' }, 13586106d6SBartłomiej Klocek { title: 'Web', propName: 'web' }, 14586106d6SBartłomiej Klocek]; 15586106d6SBartłomiej Klocek 16586106d6SBartłomiej Klocektype Platform = ElementType<typeof platforms>; 17586106d6SBartłomiej Klocektype IsSupported = boolean | undefined | { pending: string }; 18586106d6SBartłomiej Klocek 19586106d6SBartłomiej Klocekfunction getInfo(isSupported: IsSupported, { title }: Platform) { 20586106d6SBartłomiej Klocek if (isSupported === true) { 21586106d6SBartłomiej Klocek return { 22c169ccafSBartosz Kaszubowski children: <YesIcon />, 23586106d6SBartłomiej Klocek title: `${title} is supported`, 24586106d6SBartłomiej Klocek }; 25586106d6SBartłomiej Klocek } else if (typeof isSupported === 'object') { 26586106d6SBartłomiej Klocek return { 27586106d6SBartłomiej Klocek children: ( 28*234e070fSBartosz Kaszubowski <A className="grid gap-2 grid-cols-[20px_auto]" href={isSupported.pending}> 29f4b1168bSBartosz Kaszubowski <StatusWaitingIcon className="icon-md text-icon-info" /> Pending 30cb5b8d03SBartosz Kaszubowski </A> 31586106d6SBartłomiej Klocek ), 32586106d6SBartłomiej Klocek title: `${title} support is pending`, 33586106d6SBartłomiej Klocek }; 34586106d6SBartłomiej Klocek } 35586106d6SBartłomiej Klocek 36586106d6SBartłomiej Klocek return { 37c169ccafSBartosz Kaszubowski children: <NoIcon />, 38586106d6SBartłomiej Klocek title: `${title} is not supported`, 39586106d6SBartłomiej Klocek }; 40586106d6SBartłomiej Klocek} 41586106d6SBartłomiej Klocek 42586106d6SBartłomiej Klocektype Props = { 43586106d6SBartłomiej Klocek title?: string; 44586106d6SBartłomiej Klocek ios?: boolean; 45586106d6SBartłomiej Klocek android?: boolean; 46586106d6SBartłomiej Klocek web?: boolean; 47586106d6SBartłomiej Klocek simulator?: boolean; 48586106d6SBartłomiej Klocek emulator?: boolean; 49586106d6SBartłomiej Klocek}; 50586106d6SBartłomiej Klocek 51586106d6SBartłomiej Klocektype PlatformProps = Omit<Props, 'title'>; 52586106d6SBartłomiej Klocek 53af644ed4SBartosz Kaszubowskiconst PlatformsSection = (props: Props) => ( 54af644ed4SBartosz Kaszubowski <> 55f4b1168bSBartosz Kaszubowski <H4 className="mb-1">{props.title || 'Platform Compatibility'}</H4> 56af644ed4SBartosz Kaszubowski <Table layout={TableLayout.Fixed}> 57af644ed4SBartosz Kaszubowski <TableHead> 58af644ed4SBartosz Kaszubowski <Row> 59586106d6SBartłomiej Klocek {platforms.map(({ title }) => ( 60af644ed4SBartosz Kaszubowski <HeaderCell key={title}>{title}</HeaderCell> 61586106d6SBartłomiej Klocek ))} 62af644ed4SBartosz Kaszubowski </Row> 63af644ed4SBartosz Kaszubowski </TableHead> 64586106d6SBartłomiej Klocek <tbody> 65af644ed4SBartosz Kaszubowski <Row> 66586106d6SBartłomiej Klocek {platforms.map(platform => ( 67af644ed4SBartosz Kaszubowski <Cell 68586106d6SBartłomiej Klocek key={platform.title} 69af644ed4SBartosz Kaszubowski {...getInfo(props[platform.propName as keyof PlatformProps], platform)} 70586106d6SBartłomiej Klocek /> 71586106d6SBartłomiej Klocek ))} 72af644ed4SBartosz Kaszubowski </Row> 73586106d6SBartłomiej Klocek </tbody> 74af644ed4SBartosz Kaszubowski </Table> 75af644ed4SBartosz Kaszubowski </> 76586106d6SBartłomiej Klocek); 77af644ed4SBartosz Kaszubowski 78af644ed4SBartosz Kaszubowskiexport default PlatformsSection; 79