diff --git a/app/src/components/DataRequirements.tsx b/app/src/components/DataRequirements.tsx new file mode 100644 index 00000000..e2b899ed --- /dev/null +++ b/app/src/components/DataRequirements.tsx @@ -0,0 +1,174 @@ +import { Button, Center, Collapse, createStyles, em, getBreakpointValue, List, Paper, rem } from '@mantine/core'; +import { useDisclosure } from '@mantine/hooks'; +import { ArrowsMaximize, ArrowsMinimize } from 'tabler-icons-react'; +import { useState } from 'react'; + +const useStyles = createStyles(theme => ({ + card: { + borderRadius: 12, + border: `${rem(2)} solid ${theme.colors.gray[3]}`, + width: '1200px', + [`@media (max-width: ${em(getBreakpointValue(theme.breakpoints.lg) - 1)})`]: { + width: '100%' + } + } +})); + +interface codeInterface { + code: string; + system: string; +} + +/** + * Component which takes in data requirements and then reformats it in a new div element + */ +function DataRequirements({ props }: any) { + const [opened, { toggle }] = useDisclosure(false); + // const [buttonIcon, setButtonicon] = useState(); + const { classes } = useStyles(); + + const type = props.type; + const extensions = props.extension; + const dateFilters = props.dateFilter; + const codeFilters = props.codeFilter; + const codes: codeInterface[] = []; + const valueSets = props.codeFilter.filter(function (x: any) { + return x?.valueSet !== undefined; + }); + + codeFilters?.forEach((arr: { code: { code: any; system: any }[] }) => { + arr?.code?.forEach((element: { code: any; system: any }) => { + let code: codeInterface = { code: element?.code, system: element?.system }; + codes.push(code); + }); + }); + + return ( + <> + {/*
+ + + + + +
*/} + +
+ +
+ {/* */} +
+ {/*

Requirements

*/} + +
+ {/*
*/} + +
+ + + Type: + {type} + +
+ + Extension: +
+
+ + {extensions.map((item: any, index: any, index2: any) => ( + <> + {item?.url != undefined && ( + + URL: + {item.url}{' '} + + )} + {item?.valueString != undefined && ( + + ValueString: + {item.valueString}{' '} + + )} +
+ + ))} +
+ {dateFilters?.length > 0 && ( + <> + + DateFilter(s): + + + {dateFilters?.map((item: any, index: any, index2: any) => ( + <> + + Start Date: + {new Date(item.valuePeriod.start).getUTCMonth() + 1}/ + {new Date(item.valuePeriod.start).getUTCDate()}/ + {new Date(item.valuePeriod.start).getUTCFullYear()}
+
+ + End Date: {new Date(item.valuePeriod.end).getUTCMonth() + 1}/ + {new Date(item.valuePeriod.end).getUTCDate()}/ + {new Date(item.valuePeriod.end).getUTCFullYear()}
+
+ + ))} +
+ + )} +
+ + CodeFilter(s): + + {/* ))} */} + {codes.length > 0 && ( + + + Code(s): + + + {codes?.map((item: any, index: any, index2: any) => ( + <> + {item?.code && ( + + Code: {item?.code}
+
+ )} + {item?.system && ( + + System: {item?.system}
+
+ )} +
+ + ))} +
+
+ )} + {valueSets.length > 0 && ( + + + Value Set(s): + + + {valueSets?.map((item: any, index3: any) => ( + + {item?.valueSet}
+
+ ))} +
+
+ )} +
+
+
+
+
+ + ); +} + +export default DataRequirements; diff --git a/app/src/pages/[resourceType]/[id].tsx b/app/src/pages/[resourceType]/[id].tsx index 2ba5a9ba..d70aa8b2 100644 --- a/app/src/pages/[resourceType]/[id].tsx +++ b/app/src/pages/[resourceType]/[id].tsx @@ -11,6 +11,7 @@ import { AlertCircle, CircleCheck, AbacusOff } from 'tabler-icons-react'; import { useRouter } from 'next/router'; import { modifyResourceToDraft } from '@/util/modifyResourceFields'; import { trpc } from '@/util/trpc'; +import DataReqs from '@/components/DataRequirements'; /** * Component which displays the JSON/ELM/CQL/narrative/Data Requirements content of an individual resource using @@ -158,11 +159,14 @@ export default function ResourceIDPage({ jsonData }: InferGetServerSidePropsType {parse(jsonData.text.div)} )} - {dataRequirements?.resourceType === 'Library' && ( + {dataRequirements?.resourceType === 'Library' && dataRequirements?.dataRequirement != undefined && ( {JSON.stringify(dataRequirements, null, 2)} + {dataRequirements?.dataRequirement.map((item: any, index: any) => ( + + ))} )}