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