import { css } from '@emotion/react'; import { spacing, theme } from '@expo/styleguide'; import React from 'react'; import { InlineCode } from '~/components/base/code'; import { H2, H3Code, H4Code } from '~/components/plugins/Headings'; import { EnumDefinitionData, EnumValueData } from '~/components/plugins/api/APIDataTypes'; import { APISectionDeprecationNote } from '~/components/plugins/api/APISectionDeprecationNote'; import { APISectionPlatformTags } from '~/components/plugins/api/APISectionPlatformTags'; import { CommentTextBlock, getTagNamesList, STYLES_APIBOX, } from '~/components/plugins/api/APISectionUtils'; export type APISectionEnumsProps = { data: EnumDefinitionData[]; }; const sortByValue = (a: EnumValueData, b: EnumValueData) => { if (a.defaultValue && b.defaultValue) { if (a.defaultValue.includes(`'`) && b.defaultValue.includes(`'`)) { return a.defaultValue.localeCompare(b.defaultValue); } else { return parseInt(a.defaultValue, 10) - parseInt(b.defaultValue, 10); } } return 0; }; const renderEnum = ({ name, children, comment }: EnumDefinitionData): JSX.Element => (
{name} {children.sort(sortByValue).map((enumValue: EnumValueData) => (
{enumValue.name}
{name}.{enumValue.name} {enumValue?.defaultValue ? ` = ${enumValue?.defaultValue}` : ''}
))}
); const APISectionEnums = ({ data }: APISectionEnumsProps) => data?.length ? ( <>

Enums

{data.map(renderEnum)} ) : null; const enumContainerStyle = css({ boxShadow: 'none', marginBottom: spacing[3], }); const enumValueNameStyle = css({ h4: { marginTop: 0, }, }); const enumValueStyles = css({ display: 'inline-block', padding: `0 ${spacing[2]}px`, color: theme.text.secondary, fontSize: '75%', marginBottom: spacing[4], }); const enumContentStyles = css({ '& ul': { marginBottom: 0, }, }); export default APISectionEnums;