From a8a3f956354544ff4b7250f2fe0b6ca0df483ed1 Mon Sep 17 00:00:00 2001 From: Toyo Date: Thu, 7 Nov 2024 13:39:04 -0600 Subject: [PATCH 1/8] program details design qa --- src/components/Breadcrumb/BreadcrumbView.jsx | 42 +- .../DataAvailabilityTable/tableThemeConfig.js | 362 +++++++++--------- .../DataAvailability/ColGrouping.jsx | 53 ++- .../components/photo-view.styled.js | 60 +-- .../components/video-view.styled.js | 52 +-- .../programDetail/program-detail-view.jsx | 56 ++- .../program-detail-view.styled.js | 24 +- webpack/dev.js | 2 +- 8 files changed, 324 insertions(+), 327 deletions(-) diff --git a/src/components/Breadcrumb/BreadcrumbView.jsx b/src/components/Breadcrumb/BreadcrumbView.jsx index 20a3c303..cf47e761 100644 --- a/src/components/Breadcrumb/BreadcrumbView.jsx +++ b/src/components/Breadcrumb/BreadcrumbView.jsx @@ -1,6 +1,6 @@ -import React from "react"; -import { withStyles } from "@material-ui/core"; -import { Link } from "react-router-dom"; +import React from 'react'; +import { withStyles } from '@material-ui/core'; +import { Link } from 'react-router-dom'; const CustomBreadcrumb = ({ classes, data }) => (
@@ -16,40 +16,38 @@ const CustomBreadcrumb = ({ classes, data }) => ( {current.name} - , + ); } else { acc.push( - {current.name}, + {current.name} ); } if (index < data.length - 1) { - acc.push(
{">"}
); + acc.push(
{'>'}
); } return acc; }, []) - .map((item) => item)} + .map(item => item)}
); -const styles = (_theme) => ({ +const styles = _theme => ({ headerNav: { - paddingTop: "8px", - color: "#5e8ca5", - paddingBottom: "12px", - display: "flex", - alignItems: "center", - gap: "8px", + color: '#5e8ca5', + display: 'flex', + alignItems: 'center', + gap: '8px', }, headerNavLink: { - paddingLeft: "2px", - paddingRight: "2px", - textDecoration: "none", - color: "#0B4E75", - fontFamily: "Lato", - fontWeight: "500", - fontSize: "15px", - letterSpacing: "0.025em", + paddingLeft: '2px', + paddingRight: '2px', + textDecoration: 'none', + color: '#0B4E75', + fontFamily: 'Lato', + fontWeight: '500', + fontSize: '15px', + letterSpacing: '0.025em', }, }); diff --git a/src/components/DataAvailabilityTable/tableThemeConfig.js b/src/components/DataAvailabilityTable/tableThemeConfig.js index d247b044..68bb0c5e 100644 --- a/src/components/DataAvailabilityTable/tableThemeConfig.js +++ b/src/components/DataAvailabilityTable/tableThemeConfig.js @@ -1,16 +1,16 @@ const dynamicDataAvailColStyling = (table, isBody = false) => { const dataAvailabilityCols = [ - "numberofcasefiles", - "numberofstudyfiles", - "numberofimagecollections", - "numberofpublications", - "crdclinks", + 'numberofcasefiles', + 'numberofstudyfiles', + 'numberofimagecollections', + 'numberofpublications', + 'crdclinks', ]; const { columns = [] } = table; const displayDavaAvailCols = columns.filter( - (col) => + col => dataAvailabilityCols.includes(`${col.dataField}`.toLowerCase()) && - col.display, + col.display ); const customStyle = {}; if (displayDavaAvailCols) { @@ -19,208 +19,208 @@ const dynamicDataAvailColStyling = (table, isBody = false) => { const lastItem = displayDavaAvailCols[length - 1]; if (length === 1) { customStyle[`&.${firstItem.dataField}`] = { - borderLeft: isBody ? undefined : "1px solid #808080", - borderRight: isBody ? undefined : "1px solid #808080", - textAlign: "center", - padding: "15px", + borderLeft: isBody ? undefined : '1px solid #808080', + borderRight: isBody ? undefined : '1px solid #808080', + textAlign: 'center', + padding: '15px', }; } if (length > 1) { customStyle[`&.${firstItem.dataField}`] = { - borderLeft: isBody ? undefined : "1px solid #808080", - textAlign: "center", - padding: "15px", + borderLeft: isBody ? undefined : '1px solid #808080', + textAlign: 'center', + padding: '15px', }; customStyle[`&.${lastItem.dataField}`] = { - borderRight: isBody ? undefined : "1px solid #808080", - textAlign: "center", - padding: "15px", + borderRight: isBody ? undefined : '1px solid #808080', + textAlign: 'center', + padding: '15px', }; } } return customStyle; }; -export const tblBody = (table) => { +export const tblBody = table => { const customDataAvailColStyles = dynamicDataAvailColStyling(table, true); return { tblBody: { MuiTableCell: { root: { - minHeight: "45px", - padding: "16px", - color: "#004C73", - borderBottom: "none", - "& a": { - color: "#00579E", - cursor: "pointer", - fontFamily: "Open Sans", - fontWeight: "600", - "& p": { - fontSize: "15px", - textDecoration: "underline", - fontWeight: "600", + minHeight: '45px', + padding: '16px', + color: '#004C73', + borderBottom: 'none', + '& a': { + color: '#B85300', + cursor: 'pointer', + fontFamily: 'Open Sans', + fontWeight: '600', + '& p': { + fontSize: '15px', + textDecoration: 'underline', + fontWeight: '600', }, }, - "& a:hover": { - color: "#007ACC", - cursor: "pointer", + '& a:hover': { + color: '#007ACC', + cursor: 'pointer', }, - "& p": { - fontSize: "16px", - fontStyle: "normal", - fontFamily: "Open Sans", - fontWeight: "400", - letterSpacing: "0.025em", + '& p': { + fontSize: '16px', + fontStyle: 'normal', + fontFamily: 'Open Sans', + fontWeight: '400', + letterSpacing: '0.025em', }, }, paddingCheckbox: { - width: "48px", - padding: "0 0 0 5px", + width: '48px', + padding: '0 0 0 5px', }, body: { - color: "#323232", - padding: "15px", + color: '#323232', + padding: '15px', ...customDataAvailColStyles, }, }, MuiTooltip: { tooltip: { - backgroundColor: "#ffffff", - color: "#1c2023", - maxWidth: "220px", - fontSize: "0.75rem", - border: "2px solid #a7afb3", - fontFamily: "Open Sans", - fontWeight: "600", - textAlign: "left", - lineHeight: "1.6", - padding: "10px 12px", - borderRadius: "0px", + backgroundColor: '#ffffff', + color: '#1c2023', + maxWidth: '220px', + fontSize: '0.75rem', + border: '2px solid #a7afb3', + fontFamily: 'Open Sans', + fontWeight: '600', + textAlign: 'left', + lineHeight: '1.6', + padding: '10px 12px', + borderRadius: '0px', }, arrow: { - color: "#ffffff", - marginTop: "-0.71em", - marginLeft: "0px", - marginRight: "4px", - fontSize: "1.25rem", - "&:before": { - border: "2px solid #a7afb3", + color: '#ffffff', + marginTop: '-0.71em', + marginLeft: '0px', + marginRight: '4px', + fontSize: '1.25rem', + '&:before': { + border: '2px solid #a7afb3', }, }, }, MuiCheckbox: { colorSecondary: { - "&Mui-checked": { - color: "#0B3556", + '&Mui-checked': { + color: '#0B3556', }, }, }, MuiSvgIcon: { root: { - color: "#0B3556", + color: '#0B3556', }, }, }, }; }; -export const headerTheme = (table) => { +export const headerTheme = table => { const customDataAvailColStyles = dynamicDataAvailColStyling(table); return { tblHeader: { MuiTableSortLabel: { root: { - color: "#0B3556", - position: "relative", - fontSize: "18px", - fontFamily: "Nunito Sans", - fontWeight: "400", - letterSpacing: "0.06em", - textDecoration: "none", - "&:hover": { - color: "#13344A", + color: '#0B3556', + position: 'relative', + fontSize: '18px', + fontFamily: 'Nunito Sans', + fontWeight: '400', + letterSpacing: '0.06em', + textDecoration: 'none', + '&:hover': { + color: '#13344A', }, - "&:hover $svg": {}, + '&:hover $svg': {}, }, }, MuiTableCell: { root: { - paddingLeft: "15px", - paddingRight: "15px", - "&.data_availability": { - textAlign: "center", - color: "#fff", - fontFamily: "Nunito Sans", - fontSize: "18px", - fontWeight: "400", - padding: "0", + paddingLeft: '30px', + paddingRight: '30px', + '&.data_availability': { + textAlign: 'center', + color: '#fff', + fontFamily: 'Nunito Sans', + fontSize: '18px', + fontWeight: '400', + padding: '0', }, - "&.group_1": { - padding: "0", + '&.group_1': { + padding: '0', }, - "&.numberOfCaseFiles": { - textAlign: "center", - padding: "15px", + '&.numberOfCaseFiles': { + textAlign: 'center', + padding: '15px', }, - "&.numberOfStudyFiles": { - textAlign: "center", - padding: "15px", + '&.numberOfStudyFiles': { + textAlign: 'center', + padding: '15px', }, - "&.numberOfImageCollections": { - textAlign: "center", - padding: "15px", + '&.numberOfImageCollections': { + textAlign: 'center', + padding: '15px', }, - "&.numberOfPublications": { - textAlign: "center", - padding: "15px", + '&.numberOfPublications': { + textAlign: 'center', + padding: '15px', }, - "&.CRDCLinks": { - textAlign: "center", - padding: "15px", + '&.CRDCLinks': { + textAlign: 'center', + padding: '15px', }, ...customDataAvailColStyles, }, head: { - "&.other_columns_right": { - borderLeft: "1px solid #EDF0F1", + '&.other_columns_right': { + borderLeft: '1px solid #EDF0F1', }, - "&.other_columns_left": { - borderRight: "1px solid #EDF0F1", + '&.other_columns_left': { + borderRight: '1px solid #EDF0F1', }, }, paddingCheckbox: { - "& label": { - marginRight: "5px", + '& label': { + marginRight: '5px', }, }, }, MuiTableRow: { head: { - height: "40px", - borderBottom: "3px solid #004c73", - background: "#f5f5f5", - "&.column_grouping": { - background: "#4C6973", - padding: "0", - height: "55px", + height: '40px', + borderBottom: '3px solid #004c73', + background: '#f5f5f5', + '&.column_grouping': { + background: '#ffffff', + padding: '0', + height: '44px', }, }, }, MuiTooltip: { tooltip: { - backgroundColor: "#ffffff", - color: "#1c2023", - maxWidth: "220px", - fontSize: "0.75rem", - border: "2px solid #a7afb3", - fontFamily: "Open Sans", - fontWeight: "600", - textAlign: "left", - lineHeight: "1.6", - padding: "10px 12px", - borderRadius: "0px", + backgroundColor: '#ffffff', + color: '#1c2023', + maxWidth: '220px', + fontSize: '0.75rem', + border: '2px solid #a7afb3', + fontFamily: 'Open Sans', + fontWeight: '600', + textAlign: 'left', + lineHeight: '1.6', + padding: '10px 12px', + borderRadius: '0px', }, }, }, @@ -230,20 +230,20 @@ export const headerTheme = (table) => { const tblContainer = { MuiTableContainer: { root: { - width: "100%", - overflowX: "auto", + width: '100%', + overflowX: 'auto', // transform: 'rotateX(180deg)', - boxShadow: "none", - borderRadius: "0", + boxShadow: 'none', + borderRadius: '0', }, }, MuiTable: { root: { // transform: 'rotateX(180deg)', - width: "100%", - display: "table", - borderSpacing: "0", - borderCollapse: "collapse", + width: '100%', + display: 'table', + borderSpacing: '0', + borderCollapse: 'collapse', }, }, }; @@ -252,57 +252,57 @@ export const extendedView = { tblTopPgn: { MuiTablePagination: { root: { - paddingRight: "43px", - borderTop: "3px solid #FF9742", + paddingRight: '43px', + borderTop: '3px solid #FF9742', }, }, }, MuiTooltip: { tooltip: { - backgroundColor: "#ffffff", - color: "#1c2023", - maxWidth: "220px", - fontSize: "0.75rem", - border: "2px solid #a7afb3", - fontFamily: "Open Sans", - fontWeight: "600", - textAlign: "left", - lineHeight: "1.6", - padding: "10px 12px", - borderRadius: "0px", + backgroundColor: '#ffffff', + color: '#1c2023', + maxWidth: '220px', + fontSize: '0.75rem', + border: '2px solid #a7afb3', + fontFamily: 'Open Sans', + fontWeight: '600', + textAlign: 'left', + lineHeight: '1.6', + padding: '10px 12px', + borderRadius: '0px', }, }, MuiList: { root: { - "&.viewColumnList": { - padding: "8px 42px 8px 10px", - "& img": { - width: "25px", - marginRight: "10px", + '&.viewColumnList': { + padding: '8px 42px 8px 10px', + '& img': { + width: '25px', + marginRight: '10px', }, }, }, }, MuiToolbar: { root: { - minHeight: "45px", - display: "block", - position: "relative", - textAlign: "right", - "& svg": { - fill: "#fff", + minHeight: '45px', + display: 'block', + position: 'relative', + textAlign: 'right', + '& svg': { + fill: '#fff', }, - "&.downloadAndColumnView": { - maxHeight: "2px", - minHeight: "0px", - "& button": { - marginBottom: "-50px", - zIndex: "10", - "&.download-icon": { - marginRight: "-10px", + '&.downloadAndColumnView': { + maxHeight: '2px', + minHeight: '0px', + '& button': { + marginBottom: '-50px', + zIndex: '10', + '&.download-icon': { + marginRight: '-10px', }, - "&.manageViewColumnBtn": { - zIndex: "10", + '&.manageViewColumnBtn': { + zIndex: '10', }, }, }, @@ -313,29 +313,31 @@ export const extendedView = { const tblPgn = { MuiTablePagination: { caption: { - fontFamily: "Open Sans", - color: "#000000", + fontFamily: 'Open Sans', + color: '#000000', }, input: { - fontFamily: "Open Sans", - color: "#000000", + fontFamily: 'Open Sans', + color: '#000000', }, root: { - paddingRight: "43px", - background: "#ffffff", - borderTop: "3px solid #42779a", - borderBottom: "3px solid #e7e5e5", - "&:last-child": { - paddingRight: "43px", + paddingRight: '43px', + background: '#ffffff', + borderTop: '3px solid #42779a', + borderBottom: '3px solid #e7e5e5', + '&:last-child': { + paddingRight: '43px', }, }, toolbar: { - minHeight: "43px", + minHeight: '43px', + position: 'relative', + left: '23px', }, }, }; -export const themeConfig = (table) => ({ +export const themeConfig = table => ({ ...tblBody(table), tblPgn, tblContainer, diff --git a/src/components/PaginatedTable/Customize/DataAvailability/ColGrouping.jsx b/src/components/PaginatedTable/Customize/DataAvailability/ColGrouping.jsx index 7b56dc16..3da67e8f 100644 --- a/src/components/PaginatedTable/Customize/DataAvailability/ColGrouping.jsx +++ b/src/components/PaginatedTable/Customize/DataAvailability/ColGrouping.jsx @@ -1,48 +1,48 @@ -import React from "react"; +import React from 'react'; import { IconButton, Tooltip, withStyles, // withStyles, -} from "@material-ui/core"; -import SpeechBubble from "../../assets/speechBubble.svg"; +} from '@material-ui/core'; +import SpeechBubble from '../../assets/speechBubble.svg'; const ICDC_DATA_AVAIL_ICONS = [ { - label: "Case Files", - icon: "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/CaseFiles_.svg", + label: 'Case Files', + icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/CaseFiles_.svg', }, { - label: "Study Files", - icon: "https://raw.githubusercontent.com/CBIIT/datacommons-assets/master/icdc/images/svgs/StudyFiles_.svg", + label: 'Study Files', + icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/master/icdc/images/svgs/StudyFiles_.svg', }, { - label: "Image Collections", - icon: "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/StudyDataAvail-ImageCollection.svg", + label: 'Image Collections', + icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/StudyDataAvail-ImageCollection.svg', }, { - label: "Publications", - icon: "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/StudyDataAvail-Publications.svg", + label: 'Publications', + icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/StudyDataAvail-Publications.svg', }, { - label: "Additional CRDC Nodes", - icon: "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/StudyDataAvail-CRDCnodes.svg", + label: 'Additional CRDC Nodes', + icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/StudyDataAvail-CRDCnodes.svg', }, ]; export const generateDataAvailabilityTooltipText = () => ( -
-

Data Availability:

+
+

Data Availability:

{ICDC_DATA_AVAIL_ICONS.map((item, index) => (
{`${item.label}{" "} + style={{ width: '3em' }} + />{' '} {item.label}
))} @@ -63,7 +63,7 @@ const AvailabilityColumnGrouping = ({ classes }) => ( > tooltip @@ -74,20 +74,19 @@ const AvailabilityColumnGrouping = ({ classes }) => ( const styles = () => ({ group: { - marginRight: "24em", - fontSize: "16px", - fontWeight: "600", - color: "#000", + fontSize: '16px', + fontWeight: '600', + color: '#000', }, icon: { - width: "25px", - textAlign: "center", + width: '25px', + textAlign: 'center', }, dalTooltip: { - padding: "0px 12px !important", + padding: '0px 12px !important', }, dalPopper: { - left: "-278px !important", + left: '-278px !important', }, }); diff --git a/src/pages/programDetail/components/photo-view.styled.js b/src/pages/programDetail/components/photo-view.styled.js index 7afe8587..4ebaaa2b 100644 --- a/src/pages/programDetail/components/photo-view.styled.js +++ b/src/pages/programDetail/components/photo-view.styled.js @@ -1,46 +1,46 @@ -import { styled } from "@material-ui/core/styles"; +import { styled } from '@material-ui/core/styles'; -export const Container = styled("div")({}); +export const Container = styled('div')({}); -export const DescriptionAndPhotoContainer = styled("div")({ - display: "flex", - justifyContent: "space-between", +export const DescriptionAndPhotoContainer = styled('div')({ + display: 'flex', + gap: '75px', }); -export const DescriptionTitle = styled("h3")({ - fontFamily: "Open Sans", - fontWeight: "400", - fontSize: "17px", - color: "#00660F", +export const DescriptionTitle = styled('h3')({ + fontFamily: 'Open Sans', + fontWeight: '400', + fontSize: '17px', + color: '#00660F', }); -export const Description = styled("p")({ - fontFamily: "Open Sans", - fontWeight: "400", - fontSize: "18px", - lineHeight: "30px", - color: "#000000", +export const Description = styled('p')({ + fontFamily: 'Open Sans', + fontWeight: '400', + fontSize: '18px', + lineHeight: '30px', + color: '#000000', }); -export const DescriptionContainer = styled("div")({ - maxWidth: "800px", - marginRight: "8px", +export const DescriptionContainer = styled('div')({ + maxWidth: '800px', + marginRight: '8px', }); -export const PhotoContainer = styled("div")({ - paddingTop: "20px", +export const PhotoContainer = styled('div')({ + paddingTop: '20px', }); -export const Photo = styled("img")({ - width: "462px", - height: "316px", +export const Photo = styled('img')({ + width: '462px', + height: '316px', }); -export const VideoContainer = styled("div")({}); +export const VideoContainer = styled('div')({}); -export const VideoTitle = styled("h3")({ - fontFamily: "Open Sans", - fontWeight: "600", - fontSize: "14px", - color: "#00660F", +export const VideoTitle = styled('h3')({ + fontFamily: 'Open Sans', + fontWeight: '600', + fontSize: '14px', + color: '#00660F', }); diff --git a/src/pages/programDetail/components/video-view.styled.js b/src/pages/programDetail/components/video-view.styled.js index a122ab42..c7ba509a 100644 --- a/src/pages/programDetail/components/video-view.styled.js +++ b/src/pages/programDetail/components/video-view.styled.js @@ -1,39 +1,39 @@ -import { styled } from "@material-ui/core/styles"; +import { styled } from '@material-ui/core/styles'; -export const Container = styled("div")({ - display: "flex", - justifyContent: "space-between", +export const Container = styled('div')({ + display: 'flex', + gap: '75px', }); -export const DescriptionTitle = styled("h3")({ - fontFamily: "Open Sans", - fontWeight: "400", - fontSize: "17px", - color: "#00660F", +export const DescriptionTitle = styled('h3')({ + fontFamily: 'Open Sans', + fontWeight: '400', + fontSize: '17px', + color: '#00660F', }); -export const Description = styled("p")({ - fontFamily: "Open Sans", - fontWeight: "400", - fontSize: "18px", - lineHeight: "30px", - color: "#000000", +export const Description = styled('p')({ + fontFamily: 'Open Sans', + fontWeight: '400', + fontSize: '18px', + lineHeight: '30px', + color: '#000000', }); -export const DescriptionContainer = styled("div")({ - maxWidth: "800px", - marginRight: "16px", +export const DescriptionContainer = styled('div')({ + maxWidth: '800px', + marginRight: '16px', }); -export const VideoContainer = styled("div")({ - paddingTop: "20px", - borderRadius: "8px", - "& iframe": { - borderRadius: "16px", +export const VideoContainer = styled('div')({ + paddingTop: '20px', + borderRadius: '8px', + '& iframe': { + borderRadius: '16px', }, }); -export const Photo = styled("img")({ - maxWidth: "462px", - maxHeight: "316px", +export const Photo = styled('img')({ + maxWidth: '462px', + maxHeight: '316px', }); diff --git a/src/pages/programDetail/program-detail-view.jsx b/src/pages/programDetail/program-detail-view.jsx index a9b5f3c7..26a2b688 100644 --- a/src/pages/programDetail/program-detail-view.jsx +++ b/src/pages/programDetail/program-detail-view.jsx @@ -1,16 +1,16 @@ -import React from "react"; -import { Typography, CircularProgress } from "@material-ui/core"; -import { request } from "graphql-request"; -import { useQuery } from "@tanstack/react-query"; -import { getOptions } from "@bento-core/util"; -import Stats from "../../components/Stats/StatsView"; -import { table, pageData, tableLayOut } from "../../bento/programDetailData"; -import { pageDataV2 as programImageConfig } from "../../bento/programData"; -import CustomBreadcrumb from "../../components/Breadcrumb/BreadcrumbView"; -import env from "../../utils/env"; -import { TableContextProvider } from "../../bento-core"; -import StudiesTable from "../../components/DataAvailabilityTable/StudiesTable"; -import { studiesByProgram } from "./queries/program-detail"; +import React from 'react'; +import { Typography, CircularProgress } from '@material-ui/core'; +import { request } from 'graphql-request'; +import { useQuery } from '@tanstack/react-query'; +import { getOptions } from '@bento-core/util'; +import Stats from '../../components/Stats/StatsView'; +import { table, pageData, tableLayOut } from '../../bento/programDetailData'; +import { pageDataV2 as programImageConfig } from '../../bento/programData'; +import CustomBreadcrumb from '../../components/Breadcrumb/BreadcrumbView'; +import env from '../../utils/env'; +import { TableContextProvider } from '../../bento-core'; +import StudiesTable from '../../components/DataAvailabilityTable/StudiesTable'; +import { studiesByProgram } from './queries/program-detail'; import { ProgramDetailContainer, ProgramDetailHeader, @@ -20,13 +20,12 @@ import { ProgramDetailContent, ProgramDetailSubTitle, ProgramDetailHeaderExternalLinkWrapper, - ProgramDetailSubTitleAcronym, ProgramDetailHeaderExternalLinkButton, TableContainer, TableContainerTitle, -} from "./program-detail-view.styled"; -import PhotoView from "./components/photo-view"; -import VideoView from "./components/video-view"; +} from './program-detail-view.styled'; +import PhotoView from './components/photo-view'; +import VideoView from './components/video-view'; const ProgramDetailView = ({ classes, data }) => { const { @@ -34,7 +33,7 @@ const ProgramDetailView = ({ classes, data }) => { isLoading, isError, } = useQuery({ - queryKey: ["studiesByProgram"], + queryKey: ['studiesByProgram'], queryFn: async () => request(env.REACT_APP_INTEROP_SERVICE_URL, studiesByProgram), }); @@ -56,27 +55,27 @@ const ProgramDetailView = ({ classes, data }) => { const breadCrumbJson = [ { - name: "All Programs", - to: "/programs", + name: 'All Programs', + to: '/programs', isALink: true, }, { name: programDetail.program_acronym, - to: "/explore", + to: '/explore', isALink: true, }, ]; const programConfig = programImageConfig.programs.find( - (element) => element.prgramName === programDetail.program_acronym, + element => element.prgramName === programDetail.program_acronym ); - const programImage = programConfig ? programConfig.secondaryImage : ""; - const programVideo = programConfig?.video ? programConfig.video : ""; + const programImage = programConfig ? programConfig.secondaryImage : ''; + const programVideo = programConfig?.video ? programConfig.video : ''; const tableOptions = getOptions(table, classes); tableOptions.downloadOptions.filename = tableOptions.downloadOptions.filename.replace( - "Program", - `${programDetail.program_acronym}`, + 'Program', + `${programDetail.program_acronym}` ); if (isLoading) { @@ -100,10 +99,9 @@ const ProgramDetailView = ({ classes, data }) => { -
Programs:
{" "} +
Programs:
- {`${programDetail.program_name}`}{" "} - {`(${programDetail.program_acronym})`} + {`${programDetail.program_name} (${programDetail.program_acronym})`}
diff --git a/src/pages/programDetail/program-detail-view.styled.js b/src/pages/programDetail/program-detail-view.styled.js index 953a7c5d..5b459ae6 100644 --- a/src/pages/programDetail/program-detail-view.styled.js +++ b/src/pages/programDetail/program-detail-view.styled.js @@ -3,15 +3,17 @@ import styled from '@emotion/styled'; export const ProgramDetailContainer = styled('div')({ width: '100%', - padding: '60px 47px 60px 47px', + padding: '12px 47px 60px 47px', }); export const ProgramDetailHeader = styled('div')({ display: 'flex', alignItems: 'center', justifyContent: 'space-between', + gap: '300px', padding: '10px 64px 10px 64px', borderBottom: '4px solid #81A6B9', + paddingTop: '25px', }); export const ProgramDetailHeaderExternalLinkWrapper = styled('div')({ @@ -37,20 +39,19 @@ export const ProgramDetailTitle = styled('div')({ fontFamily: 'Lato', fontWeight: '500', fontSize: '25px', - display: 'flex', - alignItems: 'center', + paddingBottom: '16px', + display: 'grid', + gridTemplateColumns: 'min-content auto', gap: '8px', + lineHeight: '25px', }); export const ProgramDetailSubTitle = styled('div')({ color: '#00660F', fontFamily: 'Lato', fontWeight: '800', - lineHeight: '25px', fontSize: '25px', - display: 'flex', - alignItems: 'center', - gap: '8px', + lineHeight: '25px', }); export const ProgramDetailSubTitleAcronym = styled('div')({ @@ -72,10 +73,11 @@ export const ProgramDetailContent = styled('div')({ export const TableContainer = styled('div')({ backgroundColor: '#F3F6F7', padding: '47px', + paddingBottom: '88px', }); export const TableContainerTitle = styled('h3')({ - marginLeft: '92px', + marginLeft: '63px', fontFamily: 'Open Sans', fontWeight: '400', color: '#00660F', @@ -88,11 +90,9 @@ export const ProgramDetailHeaderExternalLinkButton = styled(Button)({ textTransform: 'none', fontWeight: '400', fontSize: '16px', - maxWidth: '162px', - height: '38px', + minWidth: '162px', + minHeight: '38px', borderRadius: '8px', - padding: '9px 15px', - lineHeight: '16px', backgroundColor: '#F5F5F5', color: '#125B82', border: '1.5px solid #125B82', diff --git a/webpack/dev.js b/webpack/dev.js index 4cea6d66..7a79e114 100644 --- a/webpack/dev.js +++ b/webpack/dev.js @@ -19,7 +19,7 @@ module.exports = merge(common, { open: true, port: 7000, client: { - overlay: true, + overlay: false, }, }, module: { From 142b92d5d9725905189b3992b0aac5610d666d38 Mon Sep 17 00:00:00 2001 From: Toyo Date: Thu, 7 Nov 2024 15:19:03 -0600 Subject: [PATCH 2/8] style updates --- src/components/DataAvailabilityTable/tableThemeConfig.js | 4 ++-- src/pages/programDetail/program-detail-view.styled.js | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/components/DataAvailabilityTable/tableThemeConfig.js b/src/components/DataAvailabilityTable/tableThemeConfig.js index 68bb0c5e..d8bc125c 100644 --- a/src/components/DataAvailabilityTable/tableThemeConfig.js +++ b/src/components/DataAvailabilityTable/tableThemeConfig.js @@ -200,9 +200,9 @@ export const headerTheme = table => { head: { height: '40px', borderBottom: '3px solid #004c73', - background: '#f5f5f5', + background: '#fff', '&.column_grouping': { - background: '#ffffff', + background: '#4C6973', padding: '0', height: '44px', }, diff --git a/src/pages/programDetail/program-detail-view.styled.js b/src/pages/programDetail/program-detail-view.styled.js index 5b459ae6..1b3a1e36 100644 --- a/src/pages/programDetail/program-detail-view.styled.js +++ b/src/pages/programDetail/program-detail-view.styled.js @@ -11,9 +11,8 @@ export const ProgramDetailHeader = styled('div')({ alignItems: 'center', justifyContent: 'space-between', gap: '300px', - padding: '10px 64px 10px 64px', + padding: '0px 64px 10px 64px', borderBottom: '4px solid #81A6B9', - paddingTop: '25px', }); export const ProgramDetailHeaderExternalLinkWrapper = styled('div')({ From 73542ac0f0e31037bd924dc8fc8e1b1708d56f31 Mon Sep 17 00:00:00 2001 From: Toyo Date: Thu, 14 Nov 2024 17:35:08 -0600 Subject: [PATCH 3/8] program details design qa --- eslint.config.mjs | 1 + index.d.tsx | 6 + package-lock.json | 1458 +++++++---------- package.json | 25 +- src/bento/dashboardTabData.js | 1168 ++++++------- src/components/Breadcrumb/BreadcrumbView.jsx | 54 - .../Breadcrumb/BreadcrumbView.styled.tsx | 31 + src/components/Breadcrumb/BreadcrumbView.tsx | 40 + ...ableThemeConfig.js => tableThemeConfig.ts} | 26 +- src/components/DataAvailabilityTable/types.ts | 73 + .../DataAvailability/ColGrouping.jsx | 93 -- .../DataAvailability/ColGrouping.styled.tsx | 49 + .../DataAvailability/ColGrouping.tsx | 46 + .../Customize/DataAvailability/constants.ts | 22 + src/components/PaginatedTable/TableTheme.js | 446 ++--- src/components/Tab/Tab.jsx | 70 - src/components/Tab/Tab.tsx | 76 + src/components/Tab/TabLable.js | 23 - src/components/Tab/TabLable.jsx | 22 - src/components/Tab/TabLable.tsx | 37 + src/generated-types/gql.ts | 8 +- src/generated-types/graphql.ts | 10 +- src/generated-types/types.ts | 4 +- src/pages/landing/landingView.js | 53 +- src/pages/landing/landingView.jsx | 479 +++--- .../components/photo-view.styled.js | 20 +- .../{photo-view.jsx => photo-view.tsx} | 15 +- .../components/video-view.styled.js | 14 +- .../program-detail-controller.jsx | 32 - .../program-detail-controller.tsx | 45 + ...tyled.js => program-detail-view.styled.ts} | 2 +- ...etail-view.jsx => program-detail-view.tsx} | 18 +- src/pages/study/studyDetailController.jsx | 43 - src/pages/study/studyDetailController.tsx | 72 + src/pages/study/studyDetailView.jsx | 430 ----- src/pages/study/studyDetailView.tsx | 437 +++++ src/pages/study/studyDetailsStyle.js | 304 ---- src/pages/study/studyDetailsStyle.tsx | 233 +++ tsconfig.json | 1 + 39 files changed, 2898 insertions(+), 3088 deletions(-) create mode 100644 index.d.tsx delete mode 100644 src/components/Breadcrumb/BreadcrumbView.jsx create mode 100644 src/components/Breadcrumb/BreadcrumbView.styled.tsx create mode 100644 src/components/Breadcrumb/BreadcrumbView.tsx rename src/components/DataAvailabilityTable/{tableThemeConfig.js => tableThemeConfig.ts} (94%) create mode 100644 src/components/DataAvailabilityTable/types.ts delete mode 100644 src/components/PaginatedTable/Customize/DataAvailability/ColGrouping.jsx create mode 100644 src/components/PaginatedTable/Customize/DataAvailability/ColGrouping.styled.tsx create mode 100644 src/components/PaginatedTable/Customize/DataAvailability/ColGrouping.tsx create mode 100644 src/components/PaginatedTable/Customize/DataAvailability/constants.ts delete mode 100644 src/components/Tab/Tab.jsx create mode 100644 src/components/Tab/Tab.tsx delete mode 100644 src/components/Tab/TabLable.js delete mode 100644 src/components/Tab/TabLable.jsx create mode 100644 src/components/Tab/TabLable.tsx rename src/pages/programDetail/components/{photo-view.jsx => photo-view.tsx} (66%) delete mode 100644 src/pages/programDetail/program-detail-controller.jsx create mode 100644 src/pages/programDetail/program-detail-controller.tsx rename src/pages/programDetail/{program-detail-view.styled.js => program-detail-view.styled.ts} (99%) rename src/pages/programDetail/{program-detail-view.jsx => program-detail-view.tsx} (87%) delete mode 100644 src/pages/study/studyDetailController.jsx create mode 100644 src/pages/study/studyDetailController.tsx delete mode 100644 src/pages/study/studyDetailView.jsx create mode 100644 src/pages/study/studyDetailView.tsx delete mode 100644 src/pages/study/studyDetailsStyle.js create mode 100644 src/pages/study/studyDetailsStyle.tsx diff --git a/eslint.config.mjs b/eslint.config.mjs index 78abf4a0..ab328e23 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -42,6 +42,7 @@ export default tseslint.config( ], 'no-undef': 'error', 'no-console': ['error', { allow: ['warn', 'error'] }], + '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/no-unused-vars': [ 'error', // or "error" { diff --git a/index.d.tsx b/index.d.tsx new file mode 100644 index 00000000..d67c86ad --- /dev/null +++ b/index.d.tsx @@ -0,0 +1,6 @@ +declare module '@bento-core/util'; + +declare module '*.svg' { + const content: string; + export default content; +} diff --git a/package-lock.json b/package-lock.json index 2717a6e0..0df165a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,22 +34,22 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "^4.0.0-alpha.61", "@material-ui/styles": "^4.11.5", - "@mui/icons-material": "^6.1.5", + "@mui/icons-material": "^6.1.7", "@mui/material": "^6.1.5", "@mui/styles": "^6.1.6", "@reduxjs/toolkit": "^2.3.0", "@tanstack/react-query": "^5.59.16", "@tanstack/react-query-devtools": "^5.40.0", - "antd": "^5.9.4", + "antd": "^5.22.0", "axios": "^1.6.8", "bento-jbrowse": "^1.0.1", "clsx": "^1.2.1", "data-model-navigator": "^1.1.36", - "graphiql": "^3.2.0", + "graphiql": "^3.7.2", "graphql": "^16.8.1", "graphql-request": "^5.1.0", "graphql-ws": "^5.16.0", - "json-2-csv": "^3.20.0", + "json-2-csv": "^5.5.6", "lodash": "^4.17.21", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -66,19 +66,20 @@ "@babel/core": "^7.26.0", "@babel/plugin-proposal-private-property-in-object": "^7.21.11", "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.24.1", - "@eslint/js": "^9.13.0", + "@babel/preset-react": "^7.25.9", + "@eslint/js": "^9.14.0", "@graphql-codegen/cli": "^5.0.3", "@graphql-codegen/client-preset": "^4.4.0", "@graphql-codegen/typescript": "^4.1.0", "@graphql-codegen/typescript-operations": "^4.3.1", + "@types/lodash": "^4.17.13", "@types/react-router-dom": "^5.3.3", "ajv": "^7.2.4", "autoprefixer": "^10.4.20", "babel-loader": "^9.2.1", "babel-plugin-named-asset-import": "^0.3.8", "babel-preset-react-app": "^10.0.1", - "bfj": "^8.0.0", + "bfj": "^9.1.1", "case-sensitive-paths-webpack-plugin": "^2.4.0", "copy-webpack-plugin": "^12.0.2", "core-js": "^3.37.0", @@ -105,26 +106,26 @@ "husky": "^9.1.6", "jest": "^29.7.0", "lint-staged": "^15.2.10", - "mini-css-extract-plugin": "^2.9.1", + "mini-css-extract-plugin": "^2.9.2", "optimize-css-assets-webpack-plugin": "^6.0.1", "path": "^0.12.7", "pnp-webpack-plugin": "^1.7.0", "postcss": "^8.4.38", "postcss-loader": "^8.1.1", "postcss-preset-env": "^10.0.8", - "postcss-safe-parser": "^7.0.0", + "postcss-safe-parser": "^7.0.1", "prettier": "3.3.3", "react-dev-utils": "^12.0.1", "redux-logger": "^3.0.6", "rucksack-css": "^1.0.2", - "sass": "^1.80.5", + "sass": "^1.80.7", "sass-loader": "^16.0.2", "style-loader": "^4.0.0", "terser-webpack-plugin": "^5.3.10", "thread-loader": "^4.0.4", "ts-loader": "^9.5.1", "typescript": "^5.6.3", - "typescript-eslint": "^8.11.0", + "typescript-eslint": "^8.14.0", "typescript-formatter": "^7.2.2", "uglifyjs-webpack-plugin": "^2.2.0", "url": "^0.11.3", @@ -134,7 +135,7 @@ "webpack-cli": "^5.1.4", "webpack-dev-server": "^5.1.0", "webpack-manifest-plugin": "^5.0.0", - "webpack-merge": "^5.10.0", + "webpack-merge": "^6.0.1", "workbox-webpack-plugin": "^7.1.0" } }, @@ -177,9 +178,9 @@ } }, "node_modules/@ant-design/cssinjs-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ant-design/cssinjs-utils/-/cssinjs-utils-1.1.0.tgz", - "integrity": "sha512-E9nOWObXx7Dy7hdyuYlOFaer/LtPO7oyZVxZphh0CYEslr5EmhJPM3WI0Q2RBHRtYg6dSNqeSK73kvZjPN3IMQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@ant-design/cssinjs-utils/-/cssinjs-utils-1.1.1.tgz", + "integrity": "sha512-2HAiyGGGnM0es40SxdszeQAU5iWp41wBIInq+ONTCKjlSKOrzQfnw4JDtB8IBmqE6tQaEKwmzTP2LGdt5DSwYQ==", "dependencies": { "@ant-design/cssinjs": "^1.21.0", "@babel/runtime": "^7.23.2", @@ -1463,11 +1464,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2204,11 +2205,11 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", - "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", + "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2218,15 +2219,15 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz", - "integrity": "sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/types": "^7.25.2" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2236,11 +2237,11 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", - "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", + "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.24.7" + "@babel/plugin-transform-react-jsx": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2278,12 +2279,12 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", - "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", + "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2627,16 +2628,16 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", - "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.9.tgz", + "integrity": "sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-transform-react-display-name": "^7.24.7", - "@babel/plugin-transform-react-jsx": "^7.24.7", - "@babel/plugin-transform-react-jsx-development": "^7.24.7", - "@babel/plugin-transform-react-pure-annotations": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-react-display-name": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.25.9", + "@babel/plugin-transform-react-jsx-development": "^7.25.9", + "@babel/plugin-transform-react-pure-annotations": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2775,23 +2776,6 @@ "react-redux": "^7.2.1" } }, - "node_modules/@bento-core/admin": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@bento-core/admin/-/admin-0.2.0.tgz", - "integrity": "sha512-AxLy00TsEQztW4m0gO+lRPRFIGq6ALgWIEonir7u3DI17aIdjnUL7roSncaSVA3ec8skYCbYHKCeSSfToPaogg==", - "peer": true, - "dependencies": { - "lodash": "^4.17.20" - }, - "peerDependencies": { - "@material-ui/core": "^4.10.0", - "@material-ui/icons": "*", - "@material-ui/lab": "*", - "react": "^17.0.2", - "react-dom": "^17.0.0", - "react-redux": "^7.2.1" - } - }, "node_modules/@bento-core/all": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@bento-core/all/-/all-0.2.0.tgz", @@ -2821,27 +2805,6 @@ "@bento-core/widgets": "^0.2.0" } }, - "node_modules/@bento-core/authentication": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@bento-core/authentication/-/authentication-0.2.0.tgz", - "integrity": "sha512-JbNSZ6ROTmTQ3iivJQkidT8jAI/DwsPTzBYd9d6sd+asNvcNbEXRnwFeu2fn4FV47k24TBOh5XFPakWCFLBqmg==", - "peer": true, - "dependencies": { - "lodash": "^4.17.20" - }, - "peerDependencies": { - "@apollo/client": "^3.6.9", - "@material-ui/core": "^4.10.0", - "@material-ui/icons": "*", - "@material-ui/lab": "*", - "graphql-tag": "^2.11.0", - "react": "^17.0.2", - "react-dom": "^17.0.0", - "react-redux": "^7.2.1", - "react-router-dom": "^5.1.2", - "react-use-googlelogin": "^0.12.5" - } - }, "node_modules/@bento-core/cart": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@bento-core/cart/-/cart-0.3.0.tgz", @@ -2852,17 +2815,6 @@ "react-redux": "^7.2.1" } }, - "node_modules/@bento-core/data-access-request": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@bento-core/data-access-request/-/data-access-request-0.2.0.tgz", - "integrity": "sha512-XMZwVdgTN7y0ZQgfXdO48hN53bBvfUrKiOCm4vIiNjRtuUpKv3A6pLv+BVNaA3xkQjmv/075hkhKriDQthCRqQ==", - "peer": true, - "peerDependencies": { - "react": "^17.0.2", - "react-dom": "^17.0.0", - "react-redux": "^7.2.1" - } - }, "node_modules/@bento-core/data-table": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@bento-core/data-table/-/data-table-0.3.0.tgz", @@ -3088,17 +3040,6 @@ "react-redux": "^7.2.1" } }, - "node_modules/@bento-core/profile": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@bento-core/profile/-/profile-0.2.0.tgz", - "integrity": "sha512-STJjlsISSQK3UGS0SUPccOsQSwPBpE9+h4M/GN/2VOp73utfiAIu30fNboPyjd2vDLzx4VLdaazpyMtqIL2VZg==", - "peer": true, - "peerDependencies": { - "react": "^17.0.2", - "react-dom": "^17.0.0", - "react-redux": "^7.2.1" - } - }, "node_modules/@bento-core/query-bar": { "version": "1.0.1-icdc.24", "resolved": "https://registry.npmjs.org/@bento-core/query-bar/-/query-bar-1.0.1-icdc.24.tgz", @@ -3131,23 +3072,6 @@ "react-redux": "^7.2.1" } }, - "node_modules/@bento-core/session-timeout": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@bento-core/session-timeout/-/session-timeout-0.2.0.tgz", - "integrity": "sha512-N4VVy58PHerkNFGKVd03VSQ/7n1jL/Cz1LxDki+b2pQVtRL//wpcExh2ufFB9xYZZ/M7jGoy+f0Fc1YUKZi3mg==", - "peer": true, - "dependencies": { - "lodash": "^4.17.20" - }, - "peerDependencies": { - "@material-ui/core": "^4.10.0", - "@material-ui/icons": "*", - "@material-ui/lab": "*", - "react": "^17.0.2", - "react-dom": "^17.0.0", - "react-redux": "^7.2.1" - } - }, "node_modules/@bento-core/stats-bar": { "version": "1.0.1-ins.0", "resolved": "https://registry.npmjs.org/@bento-core/stats-bar/-/stats-bar-1.0.1-ins.0.tgz", @@ -3248,37 +3172,6 @@ "node": ">=0.1.95" } }, - "node_modules/@codemirror/language": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.0.0.tgz", - "integrity": "sha512-rtjk5ifyMzOna1c7PBu7J1VCt0PvA5wy3o8eMVnxMKb7z8KA7JFecvD04dSn14vj/bBaAbqRsGed5OjtofEnLA==", - "peer": true, - "dependencies": { - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0", - "@lezer/common": "^1.0.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0", - "style-mod": "^4.0.0" - } - }, - "node_modules/@codemirror/state": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.4.1.tgz", - "integrity": "sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==", - "peer": true - }, - "node_modules/@codemirror/view": { - "version": "6.34.1", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.34.1.tgz", - "integrity": "sha512-t1zK/l9UiRqwUNPm+pdIT0qzJlzuVckbTEMVNFhfWkGiBQClstzg+78vedCvLSX0xJEZ6lwZbPpnljL7L6iwMQ==", - "peer": true, - "dependencies": { - "@codemirror/state": "^6.4.0", - "style-mod": "^4.1.0", - "w3c-keyname": "^2.2.4" - } - }, "node_modules/@csstools/cascade-layer-name-parser": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.3.tgz", @@ -4693,6 +4586,7 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -4707,6 +4601,7 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4718,6 +4613,7 @@ "version": "4.11.1", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", + "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -4726,6 +4622,7 @@ "version": "0.18.0", "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, "dependencies": { "@eslint/object-schema": "^2.1.4", "debug": "^4.3.1", @@ -4739,6 +4636,7 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } @@ -4747,6 +4645,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -4769,6 +4668,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -4783,12 +4683,14 @@ "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, "engines": { "node": ">=18" }, @@ -4800,6 +4702,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -4810,12 +4713,14 @@ "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/@eslint/js": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz", - "integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==", + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz", + "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==", + "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } @@ -4824,6 +4729,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } @@ -4832,6 +4738,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz", "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==", + "dev": true, "dependencies": { "levn": "^0.4.1" }, @@ -7035,6 +6942,7 @@ "version": "0.19.0", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.0.tgz", "integrity": "sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==", + "dev": true, "engines": { "node": ">=18.18.0" } @@ -7043,6 +6951,7 @@ "version": "0.16.5", "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.5.tgz", "integrity": "sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==", + "dev": true, "dependencies": { "@humanfs/core": "^0.19.0", "@humanwhocodes/retry": "^0.3.0" @@ -7055,6 +6964,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, "engines": { "node": ">=12.22" }, @@ -7067,6 +6977,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, "engines": { "node": ">=18.18" }, @@ -8057,7 +7968,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "devOptional": true, + "dev": true, "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -8227,7 +8138,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "devOptional": true, + "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -8244,7 +8155,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -8259,7 +8170,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8275,7 +8186,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -8287,13 +8198,13 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true + "dev": true }, "node_modules/@jest/types/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, + "dev": true, "engines": { "node": ">=8" } @@ -8302,7 +8213,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -8348,6 +8259,7 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -8433,30 +8345,6 @@ "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "dev": true }, - "node_modules/@lezer/common": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz", - "integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==", - "peer": true - }, - "node_modules/@lezer/highlight": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz", - "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==", - "peer": true, - "dependencies": { - "@lezer/common": "^1.0.0" - } - }, - "node_modules/@lezer/lr": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", - "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", - "peer": true, - "dependencies": { - "@lezer/common": "^1.0.0" - } - }, "node_modules/@material-ui/core": { "version": "4.12.4", "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.12.4.tgz", @@ -8756,20 +8644,20 @@ "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==" }, "node_modules/@mui/core-downloads-tracker": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.1.5.tgz", - "integrity": "sha512-3J96098GrC95XsLw/TpGNMxhUOnoG9NZ/17Pfk1CrJj+4rcuolsF2RdF3XAFTu/3a/A+5ouxlSIykzYz6Ee87g==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.1.7.tgz", + "integrity": "sha512-POuIBi80BZBogQkG4PQKIGwy4QFwB+kOr+OI4k7Znh7LqMAIhwB9OC00l6M+w1GrZJYj3T8R5WX8G6QAIvoVEw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" } }, "node_modules/@mui/icons-material": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.1.5.tgz", - "integrity": "sha512-SbxFtO5I4cXfvhjAMgGib/t2lQUzcEzcDFYiRHRufZUeMMeXuoKaGsptfwAHTepYkv0VqcCwvxtvtWbpZLAbjQ==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.1.7.tgz", + "integrity": "sha512-RGzkeHNArIVy5ZQ12bq/8VYNeICEyngngsFskTJ/2hYKhIeIII3iRGtaZaSvLpXh7h3Fg3VKTulT+QU0w5K4XQ==", "dependencies": { - "@babel/runtime": "^7.25.7" + "@babel/runtime": "^7.26.0" }, "engines": { "node": ">=14.0.0" @@ -8779,7 +8667,7 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@mui/material": "^6.1.5", + "@mui/material": "^6.1.7", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, @@ -8790,15 +8678,15 @@ } }, "node_modules/@mui/material": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.5.tgz", - "integrity": "sha512-rhaxC7LnlOG8zIVYv7BycNbWkC5dlm9A/tcDUp0CuwA7Zf9B9JP6M3rr50cNKxI7Z0GIUesAT86ceVm44quwnQ==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.7.tgz", + "integrity": "sha512-KsjujQL/A2hLd1PV3QboF+W6SSL5QqH6ZlSuQoeYz9r69+TnyBFIevbYLxdjJcJmGBjigL5pfpn7hTGop+vhSg==", "dependencies": { - "@babel/runtime": "^7.25.7", - "@mui/core-downloads-tracker": "^6.1.5", - "@mui/system": "^6.1.5", - "@mui/types": "^7.2.18", - "@mui/utils": "^6.1.5", + "@babel/runtime": "^7.26.0", + "@mui/core-downloads-tracker": "^6.1.7", + "@mui/system": "^6.1.7", + "@mui/types": "^7.2.19", + "@mui/utils": "^6.1.7", "@popperjs/core": "^2.11.8", "@types/react-transition-group": "^4.4.11", "clsx": "^2.1.1", @@ -8817,7 +8705,7 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@mui/material-pigment-css": "^6.1.5", + "@mui/material-pigment-css": "^6.1.7", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" @@ -8856,12 +8744,12 @@ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, "node_modules/@mui/private-theming": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.1.6.tgz", - "integrity": "sha512-ioAiFckaD/fJSnTrUMWgjl9HYBWt7ixCh7zZw7gDZ+Tae7NuprNV6QJK95EidDT7K0GetR2rU3kAeIR61Myttw==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.1.7.tgz", + "integrity": "sha512-uLbfUSsug5K0LVkv0PI6Flste3le8+6WSL2omdTiYde93P89Qr7pKr8TA6d2yXfr+Bm+SvD8/fGnkaRwFkryuQ==", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/utils": "^6.1.6", + "@mui/utils": "^6.1.7", "prop-types": "^15.8.1" }, "engines": { @@ -8882,11 +8770,11 @@ } }, "node_modules/@mui/styled-engine": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.1.5.tgz", - "integrity": "sha512-tiyWzMkHeWlOoE6AqomWvYvdml8Nv5k5T+LDwOiwHEawx8P9Lyja6ZwWPU6xljwPXYYPT2KBp1XvMly7dsK46A==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.1.7.tgz", + "integrity": "sha512-Ou4CxN7MQmwrfG1Pu6EYjPgPChQXxPDJrwgizLXlRPOad5qAq4gYXRuzrGQ2DfGjjwmJhjI8T6A0SeapAZPGig==", "dependencies": { - "@babel/runtime": "^7.25.7", + "@babel/runtime": "^7.26.0", "@emotion/cache": "^11.13.1", "@emotion/serialize": "^1.3.2", "@emotion/sheet": "^1.4.0", @@ -8978,15 +8866,15 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/@mui/system": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.1.5.tgz", - "integrity": "sha512-vPM9ocQ8qquRDByTG3XF/wfYTL7IWL/20EiiKqByLDps8wOmbrDG9rVznSE3ZbcjFCFfMRMhtxvN92bwe/63SA==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.1.7.tgz", + "integrity": "sha512-qbMGgcC/FodpuRSfjXlEDdbNQaW++eATh0vNBcPUv2/YXSpReoOpoT9FhogxEBNks+aQViDXBRZKh6HX2fVmwg==", "dependencies": { - "@babel/runtime": "^7.25.7", - "@mui/private-theming": "^6.1.5", - "@mui/styled-engine": "^6.1.5", - "@mui/types": "^7.2.18", - "@mui/utils": "^6.1.5", + "@babel/runtime": "^7.26.0", + "@mui/private-theming": "^6.1.7", + "@mui/styled-engine": "^6.1.7", + "@mui/types": "^7.2.19", + "@mui/utils": "^6.1.7", "clsx": "^2.1.1", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -9043,9 +8931,9 @@ } }, "node_modules/@mui/utils": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.1.6.tgz", - "integrity": "sha512-sBS6D9mJECtELASLM+18WUcXF6RH3zNxBRFeyCRg8wad6NbyNrdxLuwK+Ikvc38sTZwBzAz691HmSofLqHd9sQ==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.1.7.tgz", + "integrity": "sha512-Gr7cRZxBoZ0BIa3Xqf/2YaUrBLyNPJvXPQH3OsD9WMZukI/TutibbQBVqLYpgqJn8pKSjbD50Yq2auG0wI1xOw==", "dependencies": { "@babel/runtime": "^7.26.0", "@mui/types": "^7.2.19", @@ -9300,7 +9188,8 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz", "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==", - "devOptional": true, + "dev": true, + "optional": true, "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", @@ -10296,9 +10185,9 @@ } }, "node_modules/@rc-component/trigger": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-2.2.3.tgz", - "integrity": "sha512-X1oFIpKoXAMXNDYCviOmTfuNuYxE4h5laBsyCqVAVMjNHxoF3/uiyA7XdegK1XbCvBbCZ6P6byWrEoDRpKL8+A==", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-2.2.5.tgz", + "integrity": "sha512-F1EJ4KjFpGAHAjuKvOyZB/6IZDkVx0bHl0M4fQM5wXcmm7lgTgVSSnR3bXwdmS6jOJGHOqfDxIJW3WUvwMIXhQ==", "dependencies": { "@babel/runtime": "^7.23.2", "@rc-component/portal": "^1.1.0", @@ -10751,7 +10640,8 @@ "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==" + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true }, "node_modules/@sheerun/mutationobserver-shim": { "version": "0.3.3", @@ -10762,7 +10652,7 @@ "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "devOptional": true + "dev": true }, "node_modules/@sindresorhus/merge-streams": { "version": "2.3.0", @@ -11124,279 +11014,6 @@ } } }, - "node_modules/@storybook/addons": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.5.16.tgz", - "integrity": "sha512-p3DqQi+8QRL5k7jXhXmJZLsE/GqHqyY6PcoA1oNTJr0try48uhTGUOYkgzmqtDaa/qPFO5LP+xCPzZXckGtquQ==", - "peer": true, - "dependencies": { - "@storybook/api": "6.5.16", - "@storybook/channels": "6.5.16", - "@storybook/client-logger": "6.5.16", - "@storybook/core-events": "6.5.16", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/router": "6.5.16", - "@storybook/theming": "6.5.16", - "@types/webpack-env": "^1.16.0", - "core-js": "^3.8.2", - "global": "^4.4.0", - "regenerator-runtime": "^0.13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/addons/node_modules/@storybook/channels": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.16.tgz", - "integrity": "sha512-VylzaWQZaMozEwZPJdyJoz+0jpDa8GRyaqu9TGG6QGv+KU5POoZaGLDkRE7TzWkyyP0KQLo80K99MssZCpgSeg==", - "peer": true, - "dependencies": { - "core-js": "^3.8.2", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/addons/node_modules/@storybook/client-logger": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.16.tgz", - "integrity": "sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==", - "peer": true, - "dependencies": { - "core-js": "^3.8.2", - "global": "^4.4.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/addons/node_modules/@storybook/csf": { - "version": "0.0.2--canary.4566f4d.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz", - "integrity": "sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==", - "peer": true, - "dependencies": { - "lodash": "^4.17.15" - } - }, - "node_modules/@storybook/addons/node_modules/@storybook/router": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.16.tgz", - "integrity": "sha512-ZgeP8a5YV/iuKbv31V8DjPxlV4AzorRiR8OuSt/KqaiYXNXlOoQDz/qMmiNcrshrfLpmkzoq7fSo4T8lWo2UwQ==", - "peer": true, - "dependencies": { - "@storybook/client-logger": "6.5.16", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/addons/node_modules/@storybook/theming": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.16.tgz", - "integrity": "sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==", - "peer": true, - "dependencies": { - "@storybook/client-logger": "6.5.16", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/addons/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "peer": true - }, - "node_modules/@storybook/addons/node_modules/ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", - "peer": true, - "engines": { - "node": ">=6.10" - } - }, - "node_modules/@storybook/api": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.5.16.tgz", - "integrity": "sha512-HOsuT8iomqeTMQJrRx5U8nsC7lJTwRr1DhdD0SzlqL4c80S/7uuCy4IZvOt4sYQjOzW5fOo/kamcoBXyLproTA==", - "peer": true, - "dependencies": { - "@storybook/channels": "6.5.16", - "@storybook/client-logger": "6.5.16", - "@storybook/core-events": "6.5.16", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/router": "6.5.16", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.5.16", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7", - "store2": "^2.12.0", - "telejson": "^6.0.8", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/api/node_modules/@storybook/channels": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.16.tgz", - "integrity": "sha512-VylzaWQZaMozEwZPJdyJoz+0jpDa8GRyaqu9TGG6QGv+KU5POoZaGLDkRE7TzWkyyP0KQLo80K99MssZCpgSeg==", - "peer": true, - "dependencies": { - "core-js": "^3.8.2", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/api/node_modules/@storybook/client-logger": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.16.tgz", - "integrity": "sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==", - "peer": true, - "dependencies": { - "core-js": "^3.8.2", - "global": "^4.4.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/api/node_modules/@storybook/csf": { - "version": "0.0.2--canary.4566f4d.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz", - "integrity": "sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==", - "peer": true, - "dependencies": { - "lodash": "^4.17.15" - } - }, - "node_modules/@storybook/api/node_modules/@storybook/router": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.16.tgz", - "integrity": "sha512-ZgeP8a5YV/iuKbv31V8DjPxlV4AzorRiR8OuSt/KqaiYXNXlOoQDz/qMmiNcrshrfLpmkzoq7fSo4T8lWo2UwQ==", - "peer": true, - "dependencies": { - "@storybook/client-logger": "6.5.16", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/api/node_modules/@storybook/theming": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.16.tgz", - "integrity": "sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==", - "peer": true, - "dependencies": { - "@storybook/client-logger": "6.5.16", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/api/node_modules/isobject": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", - "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@storybook/api/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "peer": true - }, - "node_modules/@storybook/api/node_modules/telejson": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-6.0.8.tgz", - "integrity": "sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg==", - "peer": true, - "dependencies": { - "@types/is-function": "^1.0.0", - "global": "^4.4.0", - "is-function": "^1.0.2", - "is-regex": "^1.1.2", - "is-symbol": "^1.0.3", - "isobject": "^4.0.0", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3" - } - }, - "node_modules/@storybook/api/node_modules/ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", - "peer": true, - "engines": { - "node": ">=6.10" - } - }, "node_modules/@storybook/channel-postmessage": { "version": "5.3.21", "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-5.3.21.tgz", @@ -11519,79 +11136,6 @@ "core-js": "^3.0.1" } }, - "node_modules/@storybook/components": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.5.16.tgz", - "integrity": "sha512-LzBOFJKITLtDcbW9jXl0/PaG+4xAz25PK8JxPZpIALbmOpYWOAPcO6V9C2heX6e6NgWFMUxjplkULEk9RCQMNA==", - "peer": true, - "dependencies": { - "@storybook/client-logger": "6.5.16", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/theming": "6.5.16", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/components/node_modules/@storybook/client-logger": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.16.tgz", - "integrity": "sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==", - "peer": true, - "dependencies": { - "core-js": "^3.8.2", - "global": "^4.4.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/components/node_modules/@storybook/csf": { - "version": "0.0.2--canary.4566f4d.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz", - "integrity": "sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==", - "peer": true, - "dependencies": { - "lodash": "^4.17.15" - } - }, - "node_modules/@storybook/components/node_modules/@storybook/theming": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.16.tgz", - "integrity": "sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==", - "peer": true, - "dependencies": { - "@storybook/client-logger": "6.5.16", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/components/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "peer": true - }, "node_modules/@storybook/core": { "version": "5.3.21", "resolved": "https://registry.npmjs.org/@storybook/core/-/core-5.3.21.tgz", @@ -11678,19 +11222,6 @@ "react-dom": "*" } }, - "node_modules/@storybook/core-events": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.16.tgz", - "integrity": "sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==", - "peer": true, - "dependencies": { - "core-js": "^3.8.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/core/node_modules/@babel/code-frame": { "version": "7.5.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", @@ -15834,22 +15365,6 @@ "react-dom": "*" } }, - "node_modules/@storybook/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", - "peer": true, - "dependencies": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@storybook/theming": { "version": "5.3.21", "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-5.3.21.tgz", @@ -17086,7 +16601,7 @@ "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "devOptional": true, + "dev": true, "dependencies": { "@types/node": "*" } @@ -17148,7 +16663,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "devOptional": true, + "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } @@ -17325,7 +16840,14 @@ "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz", + "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==", + "dev": true }, "node_modules/@types/mdast": { "version": "3.0.15", @@ -17823,7 +17345,7 @@ "version": "17.0.33", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "devOptional": true, + "dev": true, "dependencies": { "@types/yargs-parser": "*" } @@ -17936,13 +17458,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.11.0.tgz", - "integrity": "sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.14.0.tgz", + "integrity": "sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0" + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -17953,13 +17475,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.11.0.tgz", - "integrity": "sha512-ItiMfJS6pQU0NIKAaybBKkuVzo6IdnAhPFZA/2Mba/uBjuPQPet/8+zh5GtLHwmuFRShZx+8lhIs7/QeDHflOg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.14.0.tgz", + "integrity": "sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "8.11.0", - "@typescript-eslint/utils": "8.11.0", + "@typescript-eslint/typescript-estree": "8.14.0", + "@typescript-eslint/utils": "8.14.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -17977,13 +17499,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.11.0.tgz", - "integrity": "sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.14.0.tgz", + "integrity": "sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -18041,9 +17563,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.11.0.tgz", - "integrity": "sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.14.0.tgz", + "integrity": "sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -18099,15 +17621,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.11.0.tgz", - "integrity": "sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.14.0.tgz", + "integrity": "sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.11.0", - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/typescript-estree": "8.11.0" + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/typescript-estree": "8.14.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -18121,13 +17643,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.11.0.tgz", - "integrity": "sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.14.0.tgz", + "integrity": "sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -18185,12 +17707,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.11.0.tgz", - "integrity": "sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.14.0.tgz", + "integrity": "sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.11.0", + "@typescript-eslint/types": "8.14.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -18217,6 +17739,7 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" @@ -18225,17 +17748,20 @@ "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true }, "node_modules/@webassemblyjs/helper-code-frame": { "version": "1.9.0", @@ -18302,6 +17828,7 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", @@ -18311,12 +17838,14 @@ "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -18328,6 +17857,7 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -18336,6 +17866,7 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -18343,12 +17874,14 @@ "node_modules/@webassemblyjs/utf8": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -18364,6 +17897,7 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", @@ -18376,6 +17910,7 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -18387,6 +17922,7 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", @@ -18438,6 +17974,7 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" @@ -18612,6 +18149,7 @@ "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -18643,6 +18181,7 @@ "version": "1.9.5", "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, "peerDependencies": { "acorn": "^8" } @@ -18783,6 +18322,7 @@ "version": "7.2.4", "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.4.tgz", "integrity": "sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -18806,6 +18346,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, "dependencies": { "ajv": "^8.0.0" }, @@ -18822,6 +18363,7 @@ "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -18837,6 +18379,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -18946,55 +18489,55 @@ } }, "node_modules/antd": { - "version": "5.21.2", - "resolved": "https://registry.npmjs.org/antd/-/antd-5.21.2.tgz", - "integrity": "sha512-ZcyykH58xRkNp5oxFqn255VxrjLj6qG6czHJQPoDHqRdR9roSfWQGTiqYVb4Omg77WZHNgu17QrWzvL4Hp6/FA==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/antd/-/antd-5.22.0.tgz", + "integrity": "sha512-hZE8riK8+LWsXUnPpbluvBxjnwXRh34s1yIND7g5WUV/AVZtPjt81jOoXCbKw5SJ8ORIx2o7nlaa4PJ3Luwisg==", "dependencies": { "@ant-design/colors": "^7.1.0", "@ant-design/cssinjs": "^1.21.1", - "@ant-design/cssinjs-utils": "^1.1.0", + "@ant-design/cssinjs-utils": "^1.1.1", "@ant-design/icons": "^5.5.1", "@ant-design/react-slick": "~1.1.2", - "@babel/runtime": "^7.25.6", + "@babel/runtime": "^7.25.7", "@ctrl/tinycolor": "^3.6.1", "@rc-component/color-picker": "~2.0.1", "@rc-component/mutate-observer": "^1.1.0", "@rc-component/qrcode": "~1.0.0", "@rc-component/tour": "~1.15.1", - "@rc-component/trigger": "^2.2.3", + "@rc-component/trigger": "^2.2.5", "classnames": "^2.5.1", "copy-to-clipboard": "^3.3.3", "dayjs": "^1.11.11", - "rc-cascader": "~3.28.1", + "rc-cascader": "~3.30.0", "rc-checkbox": "~3.3.0", - "rc-collapse": "~3.8.0", + "rc-collapse": "~3.9.0", "rc-dialog": "~9.6.0", "rc-drawer": "~7.2.0", "rc-dropdown": "~4.2.0", - "rc-field-form": "~2.4.0", + "rc-field-form": "~2.5.0", "rc-image": "~7.11.0", "rc-input": "~1.6.3", - "rc-input-number": "~9.2.0", - "rc-mentions": "~2.16.1", - "rc-menu": "~9.15.1", + "rc-input-number": "~9.3.0", + "rc-mentions": "~2.17.0", + "rc-menu": "~9.16.0", "rc-motion": "^2.9.3", "rc-notification": "~5.6.2", "rc-pagination": "~4.3.0", - "rc-picker": "~4.6.15", + "rc-picker": "~4.7.2", "rc-progress": "~4.0.0", "rc-rate": "~2.13.0", "rc-resize-observer": "^1.4.0", "rc-segmented": "~2.5.0", - "rc-select": "~14.15.2", - "rc-slider": "~11.1.6", + "rc-select": "~14.16.3", + "rc-slider": "~11.1.7", "rc-steps": "~6.0.1", "rc-switch": "~4.1.0", - "rc-table": "~7.47.5", - "rc-tabs": "~15.3.0", + "rc-table": "~7.48.1", + "rc-tabs": "~15.4.0", "rc-textarea": "~1.8.2", "rc-tooltip": "~6.2.1", - "rc-tree": "~5.9.0", - "rc-tree-select": "~5.23.0", + "rc-tree": "~5.10.1", + "rc-tree-select": "~5.24.3", "rc-upload": "~4.8.1", "rc-util": "^5.43.0", "scroll-into-view-if-needed": "^3.1.0", @@ -19003,6 +18546,10 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/ant-design" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" } }, "node_modules/anymatch": { @@ -19144,11 +18691,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-tree-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz", - "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" - }, "node_modules/array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -19180,6 +18722,7 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -19199,6 +18742,7 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -19291,6 +18835,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -19410,7 +18955,8 @@ "node_modules/ast-types-flow": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==" + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true }, "node_modules/astral-regex": { "version": "1.0.0", @@ -19556,6 +19102,7 @@ "version": "4.10.0", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.0.tgz", "integrity": "sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==", + "dev": true, "engines": { "node": ">=4" } @@ -19574,6 +19121,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, "engines": { "node": ">= 0.4" } @@ -19829,6 +19377,7 @@ "version": "9.2.1", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", + "dev": true, "dependencies": { "find-cache-dir": "^4.0.0", "schema-utils": "^4.0.0" @@ -21447,12 +20996,11 @@ } }, "node_modules/bfj": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-8.0.0.tgz", - "integrity": "sha512-6KJe4gFrZ4lhmvWcUIj37yFAs36mi2FZXuTkw6udZ/QsX/znFypW4SatqcLA5K5T4BAWgJZD73UFEJJQxuJjoA==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-9.1.1.tgz", + "integrity": "sha512-f3uU0MzqtuOvnB62ZUyzr2qqHVy5zFu3KV9H0MBVacdb7hsRxKSa18KtiwLZCF/5oRE3O4udraOxOC3F3A+kzA==", "dev": true, "dependencies": { - "bluebird": "^3.7.2", "check-types": "^11.2.3", "hoopy": "^0.1.4", "jsonpath": "^1.1.1", @@ -22609,7 +22157,7 @@ "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "devOptional": true, + "dev": true, "funding": [ { "type": "github", @@ -23135,7 +22683,8 @@ "node_modules/common-path-prefix": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true }, "node_modules/common-tags": { "version": "1.8.2", @@ -25529,17 +25078,18 @@ } }, "node_modules/deeks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/deeks/-/deeks-2.6.1.tgz", - "integrity": "sha512-PZrpz5xLo2JPZa3L+kqMMMdZU5pRwMysTM1xd6pLhNtgQw4Iq3wbF2QWaQTVh+HRq9Yg4rcjDIJ+scfGLxmsjQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/deeks/-/deeks-3.1.0.tgz", + "integrity": "sha512-e7oWH1LzIdv/prMQ7pmlDlaVoL64glqzvNgkgQNgyec9ORPHrT2jaOqMtRyqJuwWjtfb6v+2rk9pmaHj+F137A==", "engines": { - "node": ">= 12" + "node": ">= 16" } }, "node_modules/deep-diff": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz", - "integrity": "sha512-yVn6RZmHiGnxRKR9sJb3iVV2XTF1Ghh2DiWRZ3dMnGc43yUdWWF/kX6lQyk3+P84iprfWKU/8zFTrlkvtFm1ug==" + "integrity": "sha512-yVn6RZmHiGnxRKR9sJb3iVV2XTF1Ghh2DiWRZ3dMnGc43yUdWWF/kX6lQyk3+P84iprfWKU/8zFTrlkvtFm1ug==", + "dev": true }, "node_modules/deep-equal": { "version": "1.1.2", @@ -25930,7 +25480,8 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "devOptional": true, + "dev": true, + "optional": true, "bin": { "detect-libc": "bin/detect-libc.js" }, @@ -26193,11 +25744,11 @@ } }, "node_modules/doc-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/doc-path/-/doc-path-3.1.0.tgz", - "integrity": "sha512-Pv2hLQbUM8du5681lTWIYk0OtVBmNhMAeZNGeFhMMJBIR89Nw4XesBwee1Xtlfk83n71tn0Y6VsJOn4d3qIiTw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/doc-path/-/doc-path-4.1.1.tgz", + "integrity": "sha512-h1ErTglQAVv2gCnOpD3sFS6uolDbOKHDU1BZq+Kl3npPqroU3dYL42lUgMfd5UimlwtRgp7C9dLGwqQ5D2HYgQ==", "engines": { - "node": ">=12" + "node": ">=16" } }, "node_modules/doctrine": { @@ -26643,6 +26194,7 @@ "version": "5.17.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -26655,6 +26207,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, "engines": { "node": ">=6" } @@ -26825,6 +26378,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz", "integrity": "sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==", + "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -26848,7 +26402,8 @@ "node_modules/es-module-lexer": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==" + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true }, "node_modules/es-object-atoms": { "version": "1.0.0", @@ -27079,6 +26634,7 @@ "version": "9.13.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz", "integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==", + "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.11.0", @@ -27373,6 +26929,7 @@ "version": "2.31.0", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.8", @@ -27405,6 +26962,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { "ms": "^2.1.1" } @@ -27413,6 +26971,7 @@ "version": "6.10.2", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, "dependencies": { "aria-query": "^5.3.2", "array-includes": "^3.1.8", @@ -27441,6 +27000,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, "engines": { "node": ">= 0.4" } @@ -27448,7 +27008,8 @@ "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/eslint-plugin-prettier": { "version": "5.2.1", @@ -27484,6 +27045,7 @@ "version": "7.37.2", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", + "dev": true, "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", @@ -27515,6 +27077,7 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, "engines": { "node": ">=10" }, @@ -27526,6 +27089,7 @@ "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -27550,6 +27114,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz", "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==", + "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -27587,6 +27152,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", + "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -27594,10 +27160,20 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/@eslint/js": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz", + "integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -27613,6 +27189,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -27627,6 +27204,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -27642,6 +27220,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -27652,12 +27231,14 @@ "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -27673,6 +27254,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -27680,12 +27262,14 @@ "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/eslint/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -27700,6 +27284,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -27714,6 +27299,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -27739,6 +27325,7 @@ "version": "10.2.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz", "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==", + "dev": true, "dependencies": { "acorn": "^8.12.0", "acorn-jsx": "^5.3.2", @@ -28437,6 +28024,7 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, "dependencies": { "flat-cache": "^4.0.0" }, @@ -28644,6 +28232,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, "dependencies": { "common-path-prefix": "^3.0.0", "pkg-dir": "^7.0.0" @@ -28685,6 +28274,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" @@ -29821,6 +29411,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -29831,7 +29422,8 @@ "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true }, "node_modules/global": { "version": "4.4.0", @@ -30007,22 +29599,22 @@ "dev": true }, "node_modules/graphiql": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/graphiql/-/graphiql-3.7.1.tgz", - "integrity": "sha512-kmummedOrFYs0BI5evrVY0AerOYlaMt/Sc/e+Sta1x8X6vEMYWNeUUz/kKF2NQT5BcsR3FnNdFt1Gk2QMgueGQ==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/graphiql/-/graphiql-3.7.2.tgz", + "integrity": "sha512-DL+KrX+aQdyzl+KwcqjlmdYdjyKegm7FcZJKkIQ1e56xn6Eoe8lw5F4t65gFex/45fHzv8e8CpaIcljxfJhO7A==", "dependencies": { - "@graphiql/react": "^0.26.2" + "@graphiql/react": "^0.27.0" }, "peerDependencies": { - "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0-alpha.2", + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", "react": "^16.8.0 || ^17 || ^18", "react-dom": "^16.8.0 || ^17 || ^18" } }, "node_modules/graphiql/node_modules/@graphiql/react": { - "version": "0.26.2", - "resolved": "https://registry.npmjs.org/@graphiql/react/-/react-0.26.2.tgz", - "integrity": "sha512-aO4GWf/kJmqrjO+PORT/NPxwGvPGlg+mwye1v8xAlf8Q9j7P0hVtVBawYaSLUCCfJ/QnH7JAP+0VRamyooZZCw==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@graphiql/react/-/react-0.27.0.tgz", + "integrity": "sha512-K9ZKWd+ewodbS/1kewedmITeeKLUQswMOXwIv8XFLPt3Ondodji0vr1XXXsttlyl+V2QG/9tYVV2RJ9Ch5LdrA==", "dependencies": { "@graphiql/toolkit": "^0.11.0", "@headlessui/react": "^1.7.15", @@ -30042,7 +29634,7 @@ "set-value": "^4.1.0" }, "peerDependencies": { - "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0-alpha.2", + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", "react": "^16.8.0 || ^17 || ^18", "react-dom": "^16.8.0 || ^17 || ^18" } @@ -31155,10 +30747,10 @@ } }, "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", - "devOptional": true + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.2.tgz", + "integrity": "sha512-1NU7hWZDkV7hJ4PJ9dur9gTNQ4ePNPN4k9/0YhwjzykTi/+3Q5pF93YU5QoVj8BuOnhLgaY8gs0U2pj4kSYVcw==", + "dev": true }, "node_modules/import-cwd": { "version": "2.1.0", @@ -31651,6 +31243,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -31868,6 +31461,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -31904,6 +31498,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -32295,6 +31890,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -32317,6 +31913,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4" @@ -32562,6 +32159,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "dev": true, "dependencies": { "define-properties": "^1.2.1", "get-intrinsic": "^1.2.1", @@ -34720,7 +34318,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "devOptional": true, + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -34729,7 +34327,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "devOptional": true, + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -36045,7 +35643,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "devOptional": true, + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -36054,7 +35652,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "devOptional": true, + "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -36087,7 +35685,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -36102,7 +35700,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -36118,7 +35716,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -36130,13 +35728,13 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true + "dev": true }, "node_modules/jest-resolve/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, + "dev": true, "engines": { "node": ">=8" } @@ -36145,7 +35743,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "devOptional": true, + "dev": true, "engines": { "node": ">=8" } @@ -36154,7 +35752,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -36572,7 +36170,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "devOptional": true, + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -36589,7 +36187,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -36604,7 +36202,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -36620,7 +36218,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -36632,13 +36230,13 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true + "dev": true }, "node_modules/jest-util/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, + "dev": true, "engines": { "node": ">=8" } @@ -36647,7 +36245,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -36659,7 +36257,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "devOptional": true, + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -36676,7 +36274,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -36691,7 +36289,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "devOptional": true, + "dev": true, "engines": { "node": ">=10" }, @@ -36703,7 +36301,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -36719,7 +36317,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -36731,13 +36329,13 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true + "dev": true }, "node_modules/jest-validate/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, + "dev": true, "engines": { "node": ">=8" } @@ -36746,7 +36344,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "devOptional": true, + "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -36760,7 +36358,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "devOptional": true, + "dev": true, "engines": { "node": ">=10" }, @@ -36772,13 +36370,13 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "devOptional": true + "dev": true }, "node_modules/jest-validate/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -37334,7 +36932,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "devOptional": true, + "dev": true, "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -37349,7 +36947,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, + "dev": true, "engines": { "node": ">=8" } @@ -37358,7 +36956,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "devOptional": true, + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -37381,7 +36979,7 @@ "version": "1.21.6", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "devOptional": true, + "dev": true, "bin": { "jiti": "bin/jiti.js" } @@ -37494,15 +37092,15 @@ } }, "node_modules/json-2-csv": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/json-2-csv/-/json-2-csv-3.20.0.tgz", - "integrity": "sha512-IbqUB+yaycVNB/q2fiY5kyRjy5kRiEXqvNvGlxM5L0Bfi0RdvklVHc4t9MfeYF1GsZVpZWDBs9LdWmSjsQ8jvg==", + "version": "5.5.6", + "resolved": "https://registry.npmjs.org/json-2-csv/-/json-2-csv-5.5.6.tgz", + "integrity": "sha512-N673XbJgHwUq9JreKpk530jSywPF/rEAQ08dV99QQpkluP/4HTwshpoP9hmDz26iSFqu7eNAPgyJfu/77HvPGA==", "dependencies": { - "deeks": "2.6.1", - "doc-path": "3.1.0" + "deeks": "3.1.0", + "doc-path": "4.1.1" }, "engines": { - "node": ">= 12" + "node": ">= 16" } }, "node_modules/json-buffer": { @@ -37858,6 +37456,7 @@ "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -37967,12 +37566,14 @@ "node_modules/language-subtag-registry": { "version": "0.3.23", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==" + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true }, "node_modules/language-tags": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, "dependencies": { "language-subtag-registry": "^0.3.20" }, @@ -38072,6 +37673,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -38472,6 +38074,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, "engines": { "node": ">=6.11.5" } @@ -39868,9 +39471,9 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.1.tgz", - "integrity": "sha512-+Vyi+GCCOHnrJ2VPS+6aPoXN2k2jgUzDRhTFLjjTBn23qyXJXkjUWQgTL+mXpF5/A8ixLdCc6kWsoeOjKGejKQ==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", + "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", "dev": true, "dependencies": { "schema-utils": "^4.0.0", @@ -40214,6 +39817,7 @@ "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, "funding": [ { "type": "github", @@ -40355,7 +39959,8 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "devOptional": true + "dev": true, + "optional": true }, "node_modules/node-dir": { "version": "0.1.17", @@ -40772,6 +40377,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -41533,6 +41139,7 @@ "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -42278,6 +41885,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, "dependencies": { "find-up": "^6.3.0" }, @@ -42292,6 +41900,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" @@ -42307,6 +41916,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, "dependencies": { "p-locate": "^6.0.0" }, @@ -42321,6 +41931,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, "dependencies": { "yocto-queue": "^1.0.0" }, @@ -42335,6 +41946,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, "dependencies": { "p-limit": "^4.0.0" }, @@ -42349,6 +41961,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } @@ -42357,6 +41970,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "dev": true, "engines": { "node": ">=12.20" }, @@ -42532,6 +42146,7 @@ "version": "8.4.47", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -44838,9 +44453,9 @@ } }, "node_modules/postcss-safe-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz", - "integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", "dev": true, "funding": [ { @@ -45311,6 +44926,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, "engines": { "node": ">= 0.8.0" } @@ -45942,16 +45558,15 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/rc-cascader": { - "version": "3.28.1", - "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.28.1.tgz", - "integrity": "sha512-9+8oHIMWVLHxuaapDiqFNmD9KSyKN/P4bo9x/MBuDbyTqP8f2/POmmZxdXWBO3yq/uE3pKyQCXYNUxrNfHRv2A==", + "version": "3.30.0", + "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.30.0.tgz", + "integrity": "sha512-rrzSbk1Bdqbu+pDwiLCLHu72+lwX9BZ28+JKzoi0DWZ4N29QYFeip8Gctl33QVd2Xg3Rf14D3yAOG76ElJw16w==", "dependencies": { - "@babel/runtime": "^7.12.5", - "array-tree-filter": "^2.1.0", + "@babel/runtime": "^7.25.7", "classnames": "^2.3.1", - "rc-select": "~14.15.0", - "rc-tree": "~5.9.0", - "rc-util": "^5.37.0" + "rc-select": "~14.16.2", + "rc-tree": "~5.10.1", + "rc-util": "^5.43.0" }, "peerDependencies": { "react": ">=16.9.0", @@ -45973,9 +45588,9 @@ } }, "node_modules/rc-collapse": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-3.8.0.tgz", - "integrity": "sha512-YVBkssrKPBG09TGfcWWGj8zJBYD9G3XuTy89t5iUmSXrIXEAnO1M+qjUxRW6b4Qi0+wNWG6MHJF/+US+nmIlzA==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-3.9.0.tgz", + "integrity": "sha512-swDdz4QZ4dFTo4RAUMLL50qP0EY62N2kvmk2We5xYdRwcRn8WcYtuetCJpwpaCbUfUt5+huLpVxhvmnK+PHrkA==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", @@ -46035,9 +45650,9 @@ } }, "node_modules/rc-field-form": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-2.4.0.tgz", - "integrity": "sha512-XZ/lF9iqf9HXApIHQHqzJK5v2w4mkUMsVqAzOyWVzoiwwXEavY6Tpuw7HavgzIoD+huVff4JghSGcgEfX6eycg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-2.5.0.tgz", + "integrity": "sha512-trTezNK0ThFQkKTy3KmsP6tY1TPMm0O5H/YviB+QLyfpdcMFuYs/aPn1uDbpdQupBd6dE6X73bzITcPS97zhJQ==", "dependencies": { "@babel/runtime": "^7.18.0", "@rc-component/async-validator": "^5.0.3", @@ -46083,9 +45698,9 @@ } }, "node_modules/rc-input-number": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-9.2.0.tgz", - "integrity": "sha512-5XZFhBCV5f9UQ62AZ2hFbEY8iZT/dm23Q1kAg0H8EvOgD3UDbYYJAayoVIkM3lQaCqYAW5gV0yV3vjw1XtzWHg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-9.3.0.tgz", + "integrity": "sha512-JQ363ywqRyxwgVxpg2z2kja3CehTpYdqR7emJ/6yJjRdbvo+RvfE83fcpBCIJRq3zLp8SakmEXq60qzWyZ7Usw==", "dependencies": { "@babel/runtime": "^7.10.1", "@rc-component/mini-decimal": "^1.0.1", @@ -46099,15 +45714,15 @@ } }, "node_modules/rc-mentions": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-2.16.1.tgz", - "integrity": "sha512-GnhSTGP9Mtv6pqFFGQze44LlrtWOjHNrUUAcsdo9DnNAhN4pwVPEWy4z+2jpjkiGlJ3VoXdvMHcNDQdfI9fEaw==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-2.17.0.tgz", + "integrity": "sha512-sfHy+qLvc+p8jx8GUsujZWXDOIlIimp6YQz7N5ONQ6bHsa2kyG+BLa5k2wuxgebBbH97is33wxiyq5UkiXRpHA==", "dependencies": { "@babel/runtime": "^7.22.5", "@rc-component/trigger": "^2.0.0", "classnames": "^2.2.6", "rc-input": "~1.6.0", - "rc-menu": "~9.15.1", + "rc-menu": "~9.16.0", "rc-textarea": "~1.8.0", "rc-util": "^5.34.1" }, @@ -46117,9 +45732,9 @@ } }, "node_modules/rc-menu": { - "version": "9.15.1", - "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.15.1.tgz", - "integrity": "sha512-UKporqU6LPfHnpPmtP6hdEK4iO5Q+b7BRv/uRpxdIyDGplZy9jwUjsnpev5bs3PQKB0H0n34WAPDfjAfn3kAPA==", + "version": "9.16.0", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.16.0.tgz", + "integrity": "sha512-vAL0yqPkmXWk3+YKRkmIR8TYj3RVdEt3ptG2jCJXWNAvQbT0VJJdRyHZ7kG/l1JsZlB+VJq/VcYOo69VR4oD+w==", "dependencies": { "@babel/runtime": "^7.10.1", "@rc-component/trigger": "^2.0.0", @@ -46195,9 +45810,9 @@ } }, "node_modules/rc-picker": { - "version": "4.6.15", - "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-4.6.15.tgz", - "integrity": "sha512-OWZ1yrMie+KN2uEUfYCfS4b2Vu6RC1FWwNI0s+qypsc3wRt7g+peuZKVIzXCTaJwyyZruo80+akPg2+GmyiJjw==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-4.7.2.tgz", + "integrity": "sha512-KShWVIdrncIKBZ1rm6E2s4Di9jlpcm38EYIZ472skXqKUz8YKlWQgewG5dT+HUjfon+tLs7dp5kmWUe0bW7Gqw==", "dependencies": { "@babel/runtime": "^7.24.7", "@rc-component/trigger": "^2.0.0", @@ -46294,9 +45909,9 @@ } }, "node_modules/rc-select": { - "version": "14.15.2", - "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-14.15.2.tgz", - "integrity": "sha512-oNoXlaFmpqXYcQDzcPVLrEqS2J9c+/+oJuGrlXeVVX/gVgrbHa5YcyiRUXRydFjyuA7GP3elRuLF7Y3Tfwltlw==", + "version": "14.16.3", + "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-14.16.3.tgz", + "integrity": "sha512-51+j6s3fJJJXB7E+B6W1hM4Tjzv1B/Decooz9ilgegDBt3ZAth1b/xMwYCTrT5BbG2e53XACQsyDib2+3Ro1fg==", "dependencies": { "@babel/runtime": "^7.10.1", "@rc-component/trigger": "^2.1.1", @@ -46315,9 +45930,9 @@ } }, "node_modules/rc-slider": { - "version": "11.1.6", - "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-11.1.6.tgz", - "integrity": "sha512-LACAaXM0hi+4x4ErDGZLy7weIQwmBIVbIgPE+eDHiHkyzMvKjWHraCG8/B22Y/tCQUPAsP02wBhKhth7mH2PIw==", + "version": "11.1.7", + "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-11.1.7.tgz", + "integrity": "sha512-ytYbZei81TX7otdC0QvoYD72XSlxvTihNth5OeZ6PMXyEDq/vHdWFulQmfDGyXK1NwKwSlKgpvINOa88uT5g2A==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.5", @@ -46363,9 +45978,9 @@ } }, "node_modules/rc-table": { - "version": "7.47.5", - "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.47.5.tgz", - "integrity": "sha512-fzq+V9j/atbPIcvs3emuclaEoXulwQpIiJA6/7ey52j8+9cJ4P8DGmp4YzfUVDrb3qhgedcVeD6eRgUrokwVEQ==", + "version": "7.48.1", + "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.48.1.tgz", + "integrity": "sha512-Z4mDKjWg+xz/Ezdw6ivWcbqRpaJ0QfCORRoRrlrw65KSGZLK8OcTdacH22/fyGb8L4It/0/9qcMm8VrVAk/WBw==", "dependencies": { "@babel/runtime": "^7.10.1", "@rc-component/context": "^1.4.0", @@ -46383,14 +45998,14 @@ } }, "node_modules/rc-tabs": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-15.3.0.tgz", - "integrity": "sha512-lzE18r+zppT/jZWOAWS6ntdkDUKHOLJzqMi5UAij1LeKwOaQaupupAoI9Srn73GRzVpmGznkECMRrzkRusC40A==", + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-15.4.0.tgz", + "integrity": "sha512-llKuyiAVqmXm2z7OrmhX5cNb2ueZaL8ZyA2P4R+6/72NYYcbEgOXibwHiQCFY2RiN3swXl53SIABi2CumUS02g==", "dependencies": { "@babel/runtime": "^7.11.2", "classnames": "2.x", "rc-dropdown": "~4.2.0", - "rc-menu": "~9.15.1", + "rc-menu": "~9.16.0", "rc-motion": "^2.6.2", "rc-resize-observer": "^1.0.0", "rc-util": "^5.34.1" @@ -46434,9 +46049,9 @@ } }, "node_modules/rc-tree": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.9.0.tgz", - "integrity": "sha512-CPrgOvm9d/9E+izTONKSngNzQdIEjMox2PBufWjS1wf7vxtvmCWzK1SlpHbRY6IaBfJIeZ+88RkcIevf729cRg==", + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.10.1.tgz", + "integrity": "sha512-FPXb3tT/u39mgjr6JNlHaUTYfHkVGW56XaGDahDpEFLGsnPxGcVLNTjcqoQb/GNbSCycl7tD7EvIymwOTP0+Yw==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", @@ -46453,15 +46068,15 @@ } }, "node_modules/rc-tree-select": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-5.23.0.tgz", - "integrity": "sha512-aQGi2tFSRw1WbXv0UVXPzHm09E0cSvUVZMLxQtMv3rnZZpNmdRXWrnd9QkLNlVH31F+X5rgghmdSFF3yZW0N9A==", + "version": "5.24.4", + "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-5.24.4.tgz", + "integrity": "sha512-MzljkSkk7weKOcE853UtYlXB6uyUEzcEQhhpaCwE6jQPbmBUgGiRURuKWpYUnM/dXrwTTlCK969M6Pgjj35MLA==", "dependencies": { - "@babel/runtime": "^7.10.1", + "@babel/runtime": "^7.25.7", "classnames": "2.x", - "rc-select": "~14.15.0", - "rc-tree": "~5.9.0", - "rc-util": "^5.16.1" + "rc-select": "~14.16.2", + "rc-tree": "~5.10.1", + "rc-util": "^5.43.0" }, "peerDependencies": { "react": "*", @@ -46532,9 +46147,9 @@ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, "node_modules/rc-virtual-list": { - "version": "3.14.8", - "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.14.8.tgz", - "integrity": "sha512-8D0KfzpRYi6YZvlOWIxiOm9BGt4Wf2hQyEaM6RXlDDiY2NhLheuYI+RA+7ZaZj1lq+XQqy3KHlaeeXQfzI5fGg==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.15.0.tgz", + "integrity": "sha512-dF2YQztqrU3ijAeWOqscTshCEr7vpimzSqAVjO1AyAmaqcHulaXpnGR0ptK5PXfxTUy48VkJOiglMIxlkYGs0w==", "dependencies": { "@babel/runtime": "^7.20.0", "classnames": "^2.2.6", @@ -53309,15 +52924,6 @@ "typescript": "^3.5.2" } }, - "node_modules/react-use-googlelogin": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/react-use-googlelogin/-/react-use-googlelogin-0.12.5.tgz", - "integrity": "sha512-30TF9rJyhDx7mO5T+BVChaKxd4xztLMMRCkG2/gdk8o9+JMfipSvBM26OJCDnG7Ug3KxBSNR+9uKgtQ4FCI0fg==", - "peer": true, - "peerDependencies": { - "react": ">=16.8" - } - }, "node_modules/react-use-measure": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.1.tgz", @@ -53744,23 +53350,16 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz", "integrity": "sha512-JoCIok7bg/XpqA1JqCqXFypuqBbQzGQySrhFzewB7ThcnysTO30l4VCst86AuB9T9tuT03MAA56Jw2PNhRSNCg==", + "dev": true, "dependencies": { "deep-diff": "^0.3.5" } }, - "node_modules/redux-thunk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", - "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", - "peer": true, - "peerDependencies": { - "redux": "^4" - } - }, "node_modules/reflect.getprototypeof": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -54574,7 +54173,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "devOptional": true, + "dev": true, "engines": { "node": ">=10" } @@ -55282,14 +54881,13 @@ "integrity": "sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg==" }, "node_modules/sass": { - "version": "1.80.5", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.5.tgz", - "integrity": "sha512-TQd2aoQl/+zsxRMEDSxVdpPIqeq9UFc6pr7PzkugiTx3VYCFPUaa3P4RrBQsqok4PO200Vkz0vXQBNlg7W907g==", - "devOptional": true, + "version": "1.80.7", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.7.tgz", + "integrity": "sha512-MVWvN0u5meytrSjsU7AWsbhoXi1sc58zADXFllfZzbsBT1GHjjar6JwBINYPRrkx/zqnQ6uqbQuHgE95O+C+eQ==", + "dev": true, "dependencies": { - "@parcel/watcher": "^2.4.1", "chokidar": "^4.0.0", - "immutable": "^4.0.0", + "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { @@ -55297,6 +54895,9 @@ }, "engines": { "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, "node_modules/sass-loader": { @@ -55343,7 +54944,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", - "devOptional": true, + "dev": true, "dependencies": { "readdirp": "^4.0.1" }, @@ -55358,7 +54959,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.1.tgz", "integrity": "sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw==", - "devOptional": true, + "dev": true, "engines": { "node": ">= 14.16.0" }, @@ -55396,6 +54997,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -55414,6 +55016,7 @@ "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -55565,6 +55168,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, "dependencies": { "randombytes": "^2.1.0" } @@ -56614,6 +56218,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -56686,6 +56291,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" @@ -56850,12 +56456,6 @@ "webpack": "^5.27.0" } }, - "node_modules/style-mod": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", - "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", - "peer": true - }, "node_modules/style-search": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", @@ -57729,6 +57329,7 @@ "version": "5.34.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz", "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==", + "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -57746,6 +57347,7 @@ "version": "5.3.10", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", @@ -57779,6 +57381,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -57794,6 +57397,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, "peerDependencies": { "ajv": "^6.9.1" } @@ -57802,6 +57406,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -57810,6 +57415,7 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -57822,12 +57428,14 @@ "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -57845,6 +57453,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -57858,12 +57467,14 @@ "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, "node_modules/terser/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -57872,6 +57483,7 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -58240,9 +57852,9 @@ "dev": true }, "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", + "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", "dev": true, "engines": { "node": ">=16" @@ -58404,6 +58016,7 @@ "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -58415,6 +58028,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, "dependencies": { "minimist": "^1.2.0" }, @@ -58426,6 +58040,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, "engines": { "node": ">=4" } @@ -58516,6 +58131,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -58643,6 +58259,7 @@ "version": "5.6.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -58652,14 +58269,14 @@ } }, "node_modules/typescript-eslint": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.11.0.tgz", - "integrity": "sha512-cBRGnW3FSlxaYwU8KfAewxFK5uzeOAp0l2KebIlPDOT5olVi65KDG/yjBooPBG0kGW/HLkoz1c/iuBFehcS3IA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.14.0.tgz", + "integrity": "sha512-K8fBJHxVL3kxMmwByvz8hNdBJ8a0YqKzKDX6jRlrjMuNXyd5T2V02HIq37+OiWXvUUOXgOOGiSSOh26Mh8pC3w==", "dev": true, "dependencies": { - "@typescript-eslint/eslint-plugin": "8.11.0", - "@typescript-eslint/parser": "8.11.0", - "@typescript-eslint/utils": "8.11.0" + "@typescript-eslint/eslint-plugin": "8.14.0", + "@typescript-eslint/parser": "8.14.0", + "@typescript-eslint/utils": "8.14.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -58675,16 +58292,16 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.11.0.tgz", - "integrity": "sha512-KhGn2LjW1PJT2A/GfDpiyOfS4a8xHQv2myUagTM5+zsormOmBlYsnQ6pobJ8XxJmh6hnHwa2Mbe3fPrDJoDhbA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.14.0.tgz", + "integrity": "sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.11.0", - "@typescript-eslint/type-utils": "8.11.0", - "@typescript-eslint/utils": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/type-utils": "8.14.0", + "@typescript-eslint/utils": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -58708,15 +58325,15 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.11.0.tgz", - "integrity": "sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.14.0.tgz", + "integrity": "sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.11.0", - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/typescript-estree": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/typescript-estree": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", "debug": "^4.3.4" }, "engines": { @@ -58736,13 +58353,13 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.11.0.tgz", - "integrity": "sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.14.0.tgz", + "integrity": "sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -60034,12 +59651,6 @@ "browser-process-hrtime": "^1.0.0" } }, - "node_modules/w3c-keyname": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", - "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", - "peer": true - }, "node_modules/w3c-xmlserializer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", @@ -60075,6 +59686,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -60394,6 +60006,7 @@ "version": "5.95.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz", "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==", + "dev": true, "dependencies": { "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", @@ -60548,6 +60161,20 @@ } } }, + "node_modules/webpack-cli/node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/webpack-cli/node_modules/commander": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", @@ -60566,6 +60193,27 @@ "node": ">=10.13.0" } }, + "node_modules/webpack-cli/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-cli/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/webpack-cli/node_modules/rechoir": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", @@ -60578,6 +60226,32 @@ "node": ">= 10.13.0" } }, + "node_modules/webpack-cli/node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-cli/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/webpack-dev-middleware": { "version": "3.7.3", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", @@ -60857,17 +60531,17 @@ } }, "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", - "wildcard": "^2.0.0" + "wildcard": "^2.0.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=18.0.0" } }, "node_modules/webpack-merge/node_modules/clone-deep": { @@ -60954,6 +60628,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -60969,6 +60644,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, "peerDependencies": { "ajv": "^6.9.1" } @@ -60977,6 +60653,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -60989,6 +60666,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, "engines": { "node": ">=4.0" } @@ -60996,12 +60674,14 @@ "node_modules/webpack/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -61019,6 +60699,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, "engines": { "node": ">=6" } @@ -61027,6 +60708,7 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, "engines": { "node": ">=10.13.0" } @@ -61117,6 +60799,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "dev": true, "dependencies": { "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", @@ -61142,6 +60825,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", diff --git a/package.json b/package.json index ed2d7113..065698b9 100644 --- a/package.json +++ b/package.json @@ -29,22 +29,22 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "^4.0.0-alpha.61", "@material-ui/styles": "^4.11.5", - "@mui/icons-material": "^6.1.5", + "@mui/icons-material": "^6.1.7", "@mui/material": "^6.1.5", "@mui/styles": "^6.1.6", "@reduxjs/toolkit": "^2.3.0", "@tanstack/react-query": "^5.59.16", "@tanstack/react-query-devtools": "^5.40.0", - "antd": "^5.9.4", + "antd": "^5.22.0", "axios": "^1.6.8", "bento-jbrowse": "^1.0.1", "clsx": "^1.2.1", "data-model-navigator": "^1.1.36", - "graphiql": "^3.2.0", + "graphiql": "^3.7.2", "graphql": "^16.8.1", "graphql-request": "^5.1.0", "graphql-ws": "^5.16.0", - "json-2-csv": "^3.20.0", + "json-2-csv": "^5.5.6", "lodash": "^4.17.21", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -61,19 +61,20 @@ "@babel/core": "^7.26.0", "@babel/plugin-proposal-private-property-in-object": "^7.21.11", "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.24.1", - "@eslint/js": "^9.13.0", + "@babel/preset-react": "^7.25.9", + "@eslint/js": "^9.14.0", "@graphql-codegen/cli": "^5.0.3", "@graphql-codegen/client-preset": "^4.4.0", "@graphql-codegen/typescript": "^4.1.0", "@graphql-codegen/typescript-operations": "^4.3.1", + "@types/lodash": "^4.17.13", "@types/react-router-dom": "^5.3.3", "ajv": "^7.2.4", "autoprefixer": "^10.4.20", "babel-loader": "^9.2.1", "babel-plugin-named-asset-import": "^0.3.8", "babel-preset-react-app": "^10.0.1", - "bfj": "^8.0.0", + "bfj": "^9.1.1", "case-sensitive-paths-webpack-plugin": "^2.4.0", "copy-webpack-plugin": "^12.0.2", "core-js": "^3.37.0", @@ -100,26 +101,26 @@ "husky": "^9.1.6", "jest": "^29.7.0", "lint-staged": "^15.2.10", - "mini-css-extract-plugin": "^2.9.1", + "mini-css-extract-plugin": "^2.9.2", "optimize-css-assets-webpack-plugin": "^6.0.1", "path": "^0.12.7", "pnp-webpack-plugin": "^1.7.0", "postcss": "^8.4.38", "postcss-loader": "^8.1.1", "postcss-preset-env": "^10.0.8", - "postcss-safe-parser": "^7.0.0", + "postcss-safe-parser": "^7.0.1", "prettier": "3.3.3", "react-dev-utils": "^12.0.1", "redux-logger": "^3.0.6", "rucksack-css": "^1.0.2", - "sass": "^1.80.5", + "sass": "^1.80.7", "sass-loader": "^16.0.2", "style-loader": "^4.0.0", "terser-webpack-plugin": "^5.3.10", "thread-loader": "^4.0.4", "ts-loader": "^9.5.1", "typescript": "^5.6.3", - "typescript-eslint": "^8.11.0", + "typescript-eslint": "^8.14.0", "typescript-formatter": "^7.2.2", "uglifyjs-webpack-plugin": "^2.2.0", "url": "^0.11.3", @@ -129,7 +130,7 @@ "webpack-cli": "^5.1.4", "webpack-dev-server": "^5.1.0", "webpack-manifest-plugin": "^5.0.0", - "webpack-merge": "^5.10.0", + "webpack-merge": "^6.0.1", "workbox-webpack-plugin": "^7.1.0" }, "browserslist": { diff --git a/src/bento/dashboardTabData.js b/src/bento/dashboardTabData.js index c39cec40..a2b5bb94 100644 --- a/src/bento/dashboardTabData.js +++ b/src/bento/dashboardTabData.js @@ -1,561 +1,561 @@ -import gql from "graphql-tag"; -import { cellTypes, dataFormatTypes, btnTypes, types } from "../bento-core"; +import gql from 'graphql-tag'; +import { cellTypes, dataFormatTypes, btnTypes, types } from '../bento-core'; import { customCasesTabDownloadCSV, customFilesTabDownloadCSV, customSamplesTabDownloadCSV, customStudyFilesTabDownloadCSV, -} from "./tableDownloadCSV"; +} from './tableDownloadCSV'; // --------------- Tooltip configuration -------------- export const tooltipContent = { - icon: "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/Tooltip.SpeechBubble.svg", - alt: "tooltipIcon", - Cases: "Add filtered files associated with selected case(s) to My Files", - Samples: "Add filtered files associated with selected sample(s) to My Files", - "Case Files": "Add selected files to My Files", - "Study Files": "Add selected files to My Files", + icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/Tooltip.SpeechBubble.svg', + alt: 'tooltipIcon', + Cases: 'Add filtered files associated with selected case(s) to My Files', + Samples: 'Add filtered files associated with selected sample(s) to My Files', + 'Case Files': 'Add selected files to My Files', + 'Study Files': 'Add selected files to My Files', arrow: true, - clsName: "addSelectedTooltip", + clsName: 'addSelectedTooltip', }; // --------------- Tooltip configuration -------------- export const selectAllToolTip = { - icon: "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/Tooltip.SpeechBubble.svg", - alt: "tooltipIcon", + icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/Tooltip.SpeechBubble.svg', + alt: 'tooltipIcon', arrow: true, - clsName: "addAllTooltip", + clsName: 'addAllTooltip', Cases: - "Add filtered files associated with all cases in the current results set to My Files", + 'Add filtered files associated with all cases in the current results set to My Files', Samples: - "Add filtered files associated with all samples in the current results set to My Files", - "Case Files": "Add all filtered files to My Files", - "Study Files": "Add all filtered files to My Files", + 'Add filtered files associated with all samples in the current results set to My Files', + 'Case Files': 'Add all filtered files to My Files', + 'Study Files': 'Add all filtered files to My Files', }; export const selectAllButtonText = { - Cases: "Add filtered files associated with all cases to My Files", - Samples: "Add filtered files associated with all samples to My Files", - "Case Files": "Add all filtered files to My Files", - "Study Files": "Add all filtered study files to My Files", + Cases: 'Add filtered files associated with all cases to My Files', + Samples: 'Add filtered files associated with all samples to My Files', + 'Case Files': 'Add all filtered files to My Files', + 'Study Files': 'Add all filtered study files to My Files', arrow: true, - clsName: "addAllTooltip", + clsName: 'addAllTooltip', }; // --------------- Dahboard Table external link configuration -------------- // Ideal size for externalLinkIcon is 16x16 px export const externalLinkIcon = { - src: "https://raw.githubusercontent.com/CBIIT/bento-frontend/master/src/assets/program/externalLinkIcon.svg", - alt: "External link icon", + src: 'https://raw.githubusercontent.com/CBIIT/bento-frontend/master/src/assets/program/externalLinkIcon.svg', + alt: 'External link icon', }; export const multiStudyData = { - icon: "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/icon-multiStudy.svg", - alt: "Multi-study icon", - toolTipText: "Multi-study participant also enrolled as:", + icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/icon-multiStudy.svg', + alt: 'Multi-study icon', + toolTipText: 'Multi-study participant also enrolled as:', }; export const fileViewer = { - icon: "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/DocumentDownloadBAM.svg", - alt: "file viewer icon", - toolTipText: "View in JBrowse", + icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/DocumentDownloadBAM.svg', + alt: 'file viewer icon', + toolTipText: 'View in JBrowse', }; // --------------- Tabs Table configuration -------------- export const tabContainers = [ { - name: "Cases", - dataField: "dataCase", - api: "GET_CASES_OVERVIEW_QUERY", - paginationAPIField: "caseOverview", - count: "numberOfCases", - dataKey: "case_id", - defaultSortField: "case_id", - defaultSortDirection: "asc", - buttonText: "Add Associated Files", + name: 'Cases', + dataField: 'dataCase', + api: 'GET_CASES_OVERVIEW_QUERY', + paginationAPIField: 'caseOverview', + count: 'numberOfCases', + dataKey: 'case_id', + defaultSortField: 'case_id', + defaultSortDirection: 'asc', + buttonText: 'Add Associated Files', displayViewJBowseBtn: true, disableViewJBowseBtn: true, - addAllButtonText: "Add Associated Files for All", + addAllButtonText: 'Add Associated Files for All', saveButtonDefaultStyle: { - borderRadius: "10px", - width: "180px", - lineHeight: "37px", - fontSize: "16px", - color: "#fff", - backgroundColor: "#ff7f15", + borderRadius: '10px', + width: '180px', + lineHeight: '37px', + fontSize: '16px', + color: '#fff', + backgroundColor: '#ff7f15', }, ActiveSaveButtonDefaultStyle: { - cursor: "pointer", - opacity: "unset", - border: "unset", + cursor: 'pointer', + opacity: 'unset', + border: 'unset', }, DeactiveSaveButtonDefaultStyle: { - opacity: "0.7", - cursor: "auto", + opacity: '0.7', + cursor: 'auto', }, columns: [ { - dataField: "case_id", - header: "Case ID", - sort: "asc", - link: "/case/{case_id}", + dataField: 'case_id', + header: 'Case ID', + sort: 'asc', + link: '/case/{case_id}', primary: true, display: true, viewColumns: false, }, { - dataField: "other_cases", - header: "Matching Cases", + dataField: 'other_cases', + header: 'Matching Cases', display: false, }, { - dataField: "study_code", - header: "Study Code", - link: "/study/{study_code}", + dataField: 'study_code', + header: 'Study Code', + link: '/study/{study_code}', display: true, }, { - dataField: "study_type", - header: "Study Type", + dataField: 'study_type', + header: 'Study Type', display: true, }, { - dataField: "breed", - header: "Breed", + dataField: 'breed', + header: 'Breed', display: true, }, { - dataField: "diagnosis", - header: "Diagnosis", + dataField: 'diagnosis', + header: 'Diagnosis', display: true, }, { - dataField: "stage_of_disease", - header: "Stage Of Disease", + dataField: 'stage_of_disease', + header: 'Stage Of Disease', display: true, }, { - dataField: "age", - header: "Age", + dataField: 'age', + header: 'Age', display: true, }, { - dataField: "sex", - header: "Sex", + dataField: 'sex', + header: 'Sex', display: true, }, { - dataField: "neutered_status", - header: "Neutered Status", + dataField: 'neutered_status', + header: 'Neutered Status', display: true, }, { - dataField: "weight", - header: "Weight (kg)", + dataField: 'weight', + header: 'Weight (kg)', display: true, }, { - dataField: "response_to_treatment", - header: "Response to Treatment", + dataField: 'response_to_treatment', + header: 'Response to Treatment', display: true, }, { - dataField: "cohort", - header: "Cohort", + dataField: 'cohort', + header: 'Cohort', display: true, }, ], - id: "case_tab", - onRowsSelect: "type3", - disableRowSelection: "type3", - tableID: "case_tab_table", + id: 'case_tab', + onRowsSelect: 'type3', + disableRowSelection: 'type3', + tableID: 'case_tab_table', selectableRows: true, - tabIndex: "0", + tabIndex: '0', tableDownloadCSV: customCasesTabDownloadCSV, viewColumns: true, - downloadFileName: "Bento_Dashboard_cases_download", + downloadFileName: 'Bento_Dashboard_cases_download', headerPagination: true, footerPagination: true, }, { - name: "Samples", - dataField: "dataSample", - api: "GET_SAMPLES_OVERVIEW_QUERY", - count: "numberOfSamples", + name: 'Samples', + dataField: 'dataSample', + api: 'GET_SAMPLES_OVERVIEW_QUERY', + count: 'numberOfSamples', displayViewJBowseBtn: true, disableViewJBowseBtn: true, - paginationAPIField: "sampleOverview", - dataKey: "sample_id", - defaultSortField: "sample_id", + paginationAPIField: 'sampleOverview', + dataKey: 'sample_id', + defaultSortField: 'sample_id', saveButtonDefaultStyle: { - borderRadius: "10px", - width: "180px", - lineHeight: "37px", - fontSize: "16px", - color: "#fff", - backgroundColor: "#ff7f15", + borderRadius: '10px', + width: '180px', + lineHeight: '37px', + fontSize: '16px', + color: '#fff', + backgroundColor: '#ff7f15', }, DeactiveSaveButtonDefaultStyle: { - opacity: "0.7", - cursor: "auto", + opacity: '0.7', + cursor: 'auto', }, ActiveSaveButtonDefaultStyle: { - cursor: "pointer", - opacity: "unset", - border: "unset", + cursor: 'pointer', + opacity: 'unset', + border: 'unset', }, columns: [ { - dataField: "sample_id", - header: "Sample ID", - sort: "asc", + dataField: 'sample_id', + header: 'Sample ID', + sort: 'asc', primary: true, display: true, }, { - dataField: "case_id", - header: "Case ID", - sort: "asc", - link: "/case/{case_id}", + dataField: 'case_id', + header: 'Case ID', + sort: 'asc', + link: '/case/{case_id}', display: true, viewColumns: false, }, { - dataField: "breed", - header: "Breed", - sort: "asc", + dataField: 'breed', + header: 'Breed', + sort: 'asc', display: true, }, { - dataField: "diagnosis", - header: "Diagnosis", - sort: "asc", + dataField: 'diagnosis', + header: 'Diagnosis', + sort: 'asc', display: true, }, { - dataField: "sample_site", - header: "Sample Site", + dataField: 'sample_site', + header: 'Sample Site', display: true, }, { - dataField: "sample_type", - header: "Sample Type", - sort: "asc", + dataField: 'sample_type', + header: 'Sample Type', + sort: 'asc', display: true, }, { - dataField: "sample_pathology", - header: "Pathology/Morphology", - sort: "asc", + dataField: 'sample_pathology', + header: 'Pathology/Morphology', + sort: 'asc', display: true, }, { - dataField: "tumor_grade", - header: "Tumor Grade", - sort: "asc", + dataField: 'tumor_grade', + header: 'Tumor Grade', + sort: 'asc', display: true, }, { - dataField: "sample_chronology", - header: "Sample Chronology", - sort: "asc", + dataField: 'sample_chronology', + header: 'Sample Chronology', + sort: 'asc', display: true, }, { - dataField: "percentage_tumor", - header: "Percentage Tumor", - sort: "asc", + dataField: 'percentage_tumor', + header: 'Percentage Tumor', + sort: 'asc', display: true, }, { - dataField: "necropsy_sample", - header: "Necropsy Sample", - sort: "asc", + dataField: 'necropsy_sample', + header: 'Necropsy Sample', + sort: 'asc', display: true, }, { - dataField: "sample_preservation", - header: "Sample Preservation", - sort: "asc", + dataField: 'sample_preservation', + header: 'Sample Preservation', + sort: 'asc', display: true, }, ], - id: "sample_tab", - onRowsSelect: "type3", - disableRowSelection: "type2", - buttonText: "Add Associated Files", - addAllButtonText: "Add Associated Files for All", - tableID: "sample_tab_table", + id: 'sample_tab', + onRowsSelect: 'type3', + disableRowSelection: 'type2', + buttonText: 'Add Associated Files', + addAllButtonText: 'Add Associated Files for All', + tableID: 'sample_tab_table', tableDownloadCSV: customSamplesTabDownloadCSV, viewColumns: true, selectableRows: true, - tabIndex: "1", - downloadFileName: "Bento_Dashboard_cases_download", + tabIndex: '1', + downloadFileName: 'Bento_Dashboard_cases_download', headerPagination: true, footerPagination: true, }, { - name: "Files", - dataField: "dataFile", - api: "GET_FILES_OVERVIEW_QUERY", - paginationAPIField: "fileOverview", - defaultSortField: "file_name", - defaultSortDirection: "asc", - count: "numberOfFiles", - buttonText: "Add Selected Files", + name: 'Files', + dataField: 'dataFile', + api: 'GET_FILES_OVERVIEW_QUERY', + paginationAPIField: 'fileOverview', + defaultSortField: 'file_name', + defaultSortDirection: 'asc', + count: 'numberOfFiles', + buttonText: 'Add Selected Files', displayViewJBowseBtn: true, disableViewJBowseBtn: false, - addAllButtonText: "Add All Filtered Files", - dataKey: "file_name", - associations: "other", + addAllButtonText: 'Add All Filtered Files', + dataKey: 'file_name', + associations: 'other', saveButtonDefaultStyle: { - borderRadius: "10px", - width: "180px", - lineHeight: "37px", - fontSize: "16px", - color: "#fff", - backgroundColor: "#ff7f15", + borderRadius: '10px', + width: '180px', + lineHeight: '37px', + fontSize: '16px', + color: '#fff', + backgroundColor: '#ff7f15', }, DeactiveSaveButtonDefaultStyle: { - opacity: "0.7", - cursor: "auto", + opacity: '0.7', + cursor: 'auto', }, ActiveSaveButtonDefaultStyle: { - cursor: "pointer", - opacity: "unset", - border: "unset", + cursor: 'pointer', + opacity: 'unset', + border: 'unset', }, columns: [ { - dataField: "file_name", - header: "File Name", - sort: "asc", + dataField: 'file_name', + header: 'File Name', + sort: 'asc', primary: true, display: true, }, { - dataField: "access_file", - header: "Access", - sort: "asc", + dataField: 'access_file', + header: 'Access', + sort: 'asc', display: true, downloadDocument: true, documentDownloadProps: { maxFileSize: 12000000, - toolTipTextFileDownload: "Download a copy of this file", + toolTipTextFileDownload: 'Download a copy of this file', toolTipTextFilePreview: - "Because of its size and/or format, this file is unavailable for download and must be accessed via the My Files workflow", - fileSizeColumn: "file_size", - fileFormatColumn: "file_format", - fileLocationColumn: "file_uuid", - caseIdColumn: "file_name", + 'Because of its size and/or format, this file is unavailable for download and must be accessed via the My Files workflow', + fileSizeColumn: 'file_size', + fileFormatColumn: 'file_format', + fileLocationColumn: 'file_uuid', + caseIdColumn: 'file_name', iconFilePreview: - "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/bento/images/icons/svgs/DocumentDownloadCloud.svg", + 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/bento/images/icons/svgs/DocumentDownloadCloud.svg', iconFileDownload: - "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/bento/images/icons/svgs/DocumentDownloadPDF.svg", + 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/bento/images/icons/svgs/DocumentDownloadPDF.svg', iconFileViewer: - "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/DocumentDownloadBAM.svg", + 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/DocumentDownloadBAM.svg', }, }, { - dataField: "file_format", - header: "Format", - sort: "asc", + dataField: 'file_format', + header: 'Format', + sort: 'asc', display: true, }, { - dataField: "file_type", - header: "File Type", - sort: "asc", + dataField: 'file_type', + header: 'File Type', + sort: 'asc', display: true, }, { - dataField: "file_size", - header: "Size", - sort: "asc", + dataField: 'file_size', + header: 'Size', + sort: 'asc', display: true, formatBytes: true, }, { - dataField: "association", - header: "Association", - sort: "asc", + dataField: 'association', + header: 'Association', + sort: 'asc', display: true, }, { - dataField: "file_description", - header: "Description", - sort: "asc", + dataField: 'file_description', + header: 'Description', + sort: 'asc', display: true, }, { - dataField: "sample_id", - header: "Sample ID", - sort: "asc", + dataField: 'sample_id', + header: 'Sample ID', + sort: 'asc', display: true, }, { - dataField: "case_id", - header: "Case ID", - sort: "asc", - link: "/case/{case_id}", + dataField: 'case_id', + header: 'Case ID', + sort: 'asc', + link: '/case/{case_id}', display: true, viewColumns: false, }, { - dataField: "breed", - header: "Breed", - sort: "asc", + dataField: 'breed', + header: 'Breed', + sort: 'asc', display: true, }, { - dataField: "diagnosis", - header: "Diagnosis", - sort: "asc", + dataField: 'diagnosis', + header: 'Diagnosis', + sort: 'asc', display: true, }, { - dataField: "file_uuid", - header: "File uuid", - sort: "asc", + dataField: 'file_uuid', + header: 'File uuid', + sort: 'asc', primary: true, display: false, }, { - dataField: "study_code", - header: "Study Code", - sort: "asc", - link: "/study/{study_code}", + dataField: 'study_code', + header: 'Study Code', + sort: 'asc', + link: '/study/{study_code}', display: true, }, ], - id: "file_tab", - onRowsSelect: "type2", - disableRowSelection: "type3", - tableID: "file_tab_table", + id: 'file_tab', + onRowsSelect: 'type2', + disableRowSelection: 'type3', + tableID: 'file_tab_table', selectableRows: true, tableDownloadCSV: customFilesTabDownloadCSV, viewColumns: true, - tabIndex: "2", - downloadFileName: "Bento_Dashboard_cases_download", + tabIndex: '2', + downloadFileName: 'Bento_Dashboard_cases_download', headerPagination: true, footerPagination: true, }, { - name: "StudyFiles", - dataField: "dataStudyFile", - api: "GET_FILES_OVERVIEW_QUERY", - paginationAPIField: "fileOverview", - defaultSortField: "file_name", - defaultSortDirection: "asc", - count: "numberOfStudyFiles", - buttonText: "Add Selected Files", - addAllButtonText: "Add All Filtered Files", - dataKey: "file_name", - associations: "study", + name: 'StudyFiles', + dataField: 'dataStudyFile', + api: 'GET_FILES_OVERVIEW_QUERY', + paginationAPIField: 'fileOverview', + defaultSortField: 'file_name', + defaultSortDirection: 'asc', + count: 'numberOfStudyFiles', + buttonText: 'Add Selected Files', + addAllButtonText: 'Add All Filtered Files', + dataKey: 'file_name', + associations: 'study', displayViewJBowseBtn: true, disableViewJBowseBtn: true, saveButtonDefaultStyle: { - borderRadius: "10px", - width: "180px", - lineHeight: "37px", - fontSize: "16px", - color: "#fff", - backgroundColor: "#ff7f15", + borderRadius: '10px', + width: '180px', + lineHeight: '37px', + fontSize: '16px', + color: '#fff', + backgroundColor: '#ff7f15', }, DeactiveSaveButtonDefaultStyle: { - opacity: "0.7", - cursor: "auto", + opacity: '0.7', + cursor: 'auto', }, ActiveSaveButtonDefaultStyle: { - cursor: "pointer", - opacity: "unset", - border: "unset", + cursor: 'pointer', + opacity: 'unset', + border: 'unset', }, columns: [ { - dataField: "file_name", - header: "File Name", - sort: "asc", + dataField: 'file_name', + header: 'File Name', + sort: 'asc', primary: true, display: true, }, { - dataField: "file_uuid", - header: "File uuid", - sort: "asc", + dataField: 'file_uuid', + header: 'File uuid', + sort: 'asc', primary: true, display: false, }, { - dataField: "file_type", - header: "File Type", - sort: "asc", + dataField: 'file_type', + header: 'File Type', + sort: 'asc', display: true, }, { - dataField: "association", - header: "Association", - sort: "asc", + dataField: 'association', + header: 'Association', + sort: 'asc', display: true, }, { - dataField: "file_description", - header: "Description", - sort: "asc", + dataField: 'file_description', + header: 'Description', + sort: 'asc', display: true, }, { - dataField: "file_format", - header: "Format", - sort: "asc", + dataField: 'file_format', + header: 'Format', + sort: 'asc', display: true, }, { - dataField: "file_size", - header: "Size", - sort: "asc", + dataField: 'file_size', + header: 'Size', + sort: 'asc', display: true, formatBytes: true, }, { - dataField: "access_file", - header: "Access", - sort: "asc", + dataField: 'access_file', + header: 'Access', + sort: 'asc', display: true, downloadDocument: true, documentDownloadProps: { maxFileSize: 12000000, - toolTipTextFileDownload: "Download a copy of this file", + toolTipTextFileDownload: 'Download a copy of this file', toolTipTextFilePreview: - "Because of its size and/or format, this file is unavailable for download and must be accessed via the My Files workflow", - fileSizeColumn: "file_size", - fileFormatColumn: "file_format", - fileLocationColumn: "file_uuid", - caseIdColumn: "file_name", + 'Because of its size and/or format, this file is unavailable for download and must be accessed via the My Files workflow', + fileSizeColumn: 'file_size', + fileFormatColumn: 'file_format', + fileLocationColumn: 'file_uuid', + caseIdColumn: 'file_name', iconFilePreview: - "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/bento/images/icons/svgs/DocumentDownloadCloud.svg", + 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/bento/images/icons/svgs/DocumentDownloadCloud.svg', iconFileDownload: - "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/bento/images/icons/svgs/DocumentDownloadPDF.svg", + 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/bento/images/icons/svgs/DocumentDownloadPDF.svg', iconFileViewer: - "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/DocumentDownloadBAM.svg", + 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/DocumentDownloadBAM.svg', }, }, { - dataField: "study_code", - header: "Study Code", - sort: "asc", - link: "/study/{study_code}", + dataField: 'study_code', + header: 'Study Code', + sort: 'asc', + link: '/study/{study_code}', display: true, }, ], - id: "file_tab", - onRowsSelect: "type2", - disableRowSelection: "type3", - tableID: "file_tab_table", + id: 'file_tab', + onRowsSelect: 'type2', + disableRowSelection: 'type3', + tableID: 'file_tab_table', selectableRows: true, tableDownloadCSV: customStudyFilesTabDownloadCSV, viewColumns: true, - tabIndex: "3", - downloadFileName: "Bento_Dashboard_cases_download", + tabIndex: '3', + downloadFileName: 'Bento_Dashboard_cases_download', headerPagination: true, footerPagination: true, }, @@ -564,56 +564,56 @@ export const tabContainers = [ // --------------- Tabs Header Data configuration -------------- export const tabs = [ { - id: "case_tab", - title: "Cases", - dataField: "dataCase", - count: "numberOfCases", + id: 'case_tab', + title: 'Cases', + dataField: 'dataCase', + count: 'numberOfCases', }, { - id: "sample_tab", - title: "Samples", - dataField: "dataSample", - count: "numberOfSamples", + id: 'sample_tab', + title: 'Samples', + dataField: 'dataSample', + count: 'numberOfSamples', }, { - id: "file_tab", - title: "Case Files", - dataField: "dataFile", - count: "numberOfFiles", + id: 'file_tab', + title: 'Case Files', + dataField: 'dataFile', + count: 'numberOfFiles', }, { - id: "study_file_tab", - title: "Study Files", - dataField: "dataFile", - count: "numberOfStudyFiles", + id: 'study_file_tab', + title: 'Study Files', + dataField: 'dataFile', + count: 'numberOfStudyFiles', }, ]; // --------------- Tabs Header Style configuration -------------- export const tabIndex = [ { - title: "Cases", - primaryColor: "#FF9742", - secondaryColor: "#FFDFB8", - selectedColor: "#FF9742", + title: 'Cases', + primaryColor: '#FF9742', + secondaryColor: '#FFDFB8', + selectedColor: '#FF9742', }, { - title: "Samples", - primaryColor: "#9DC1D9", - secondaryColor: "#C9F1F1", - selectedColor: "#9DC1D9", + title: 'Samples', + primaryColor: '#9DC1D9', + secondaryColor: '#C9F1F1', + selectedColor: '#9DC1D9', }, { - title: "Files", - primaryColor: "#667A87", - secondaryColor: "#E1E5FF", - selectedColor: "#667A87", + title: 'Files', + primaryColor: '#667A87', + secondaryColor: '#E1E5FF', + selectedColor: '#667A87', }, { - title: "Study Files", - primaryColor: "#39C0F0", - secondaryColor: "#39C0F0", - selectedColor: "#39C0F0", + title: 'Study Files', + primaryColor: '#39C0F0', + secondaryColor: '#39C0F0', + selectedColor: '#39C0F0', }, ]; @@ -1800,7 +1800,7 @@ export const GET_ALL_FILEIDS_ON_FILESTAB_FOR_SELECT_ALL = gql` `; export const GET_STUDY_CODE = gql` - query study($clinical_study_designation: String) { + query getStudyCode($clinical_study_designation: String) { study(clinical_study_designation: $clinical_study_designation) { clinical_study_designation accession_id @@ -1811,25 +1811,25 @@ export const GET_STUDY_CODE = gql` // --------------- Tabs Table configuration -------------- export const tableContainers = [ { - name: "Cases", - dataField: "dataCase", + name: 'Cases', + dataField: 'dataCase', api: GET_CASES_OVERVIEW_QUERY, - selectAllButtonText: "Add Files for All Cases", - selectedButtonText: "Add Files for Selected Cases", - paginationAPIField: "caseOverview", - count: "numberOfCases", - dataKey: "case_id", - defaultSortField: "case_id", - defaultSortDirection: "asc", + selectAllButtonText: 'Add Files for All Cases', + selectedButtonText: 'Add Files for Selected Cases', + paginationAPIField: 'caseOverview', + count: 'numberOfCases', + dataKey: 'case_id', + defaultSortField: 'case_id', + defaultSortDirection: 'asc', extendedViewConfig: { pagination: true, download: { customDownload: true, - downloadCsv: "Download Table Contents As CSV", + downloadCsv: 'Download Table Contents As CSV', ...customCasesTabDownloadCSV, }, manageViewColumns: { - title: "View Columns", + title: 'View Columns', }, }, columns: [ @@ -1839,144 +1839,144 @@ export const tableContainers = [ role: cellTypes.CHECKBOX, }, { - dataField: "case_id", - header: "Case ID", - sort: "asc", + dataField: 'case_id', + header: 'Case ID', + sort: 'asc', display: true, cellType: cellTypes.CUSTOM_ELEM, linkAttr: { - rootPath: "/case", - pathParams: ["case_id"], + rootPath: '/case', + pathParams: ['case_id'], }, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "other_cases", - header: "Matching Cases", + dataField: 'other_cases', + header: 'Matching Cases', display: false, - tooltipText: "sort", + tooltipText: 'sort', role: cellTypes.DISPLAY, }, { - dataField: "study_code", - header: "Study Code", + dataField: 'study_code', + header: 'Study Code', cellType: cellTypes.LINK, linkAttr: { - rootPath: "/study", - pathParams: ["study_code"], + rootPath: '/study', + pathParams: ['study_code'], }, display: true, - tooltipText: "sort", + tooltipText: 'sort', role: cellTypes.DISPLAY, }, { - dataField: "study_type", - header: "Study Type", + dataField: 'study_type', + header: 'Study Type', display: true, - tooltipText: "sort", + tooltipText: 'sort', role: cellTypes.DISPLAY, }, { - dataField: "breed", - header: "Breed", + dataField: 'breed', + header: 'Breed', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "diagnosis", - header: "Diagnosis", + dataField: 'diagnosis', + header: 'Diagnosis', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "stage_of_disease", - header: "Stage Of Disease", + dataField: 'stage_of_disease', + header: 'Stage Of Disease', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "age", - header: "Age", + dataField: 'age', + header: 'Age', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "sex", - header: "Sex", + dataField: 'sex', + header: 'Sex', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "neutered_status", - header: "Neutered Status", + dataField: 'neutered_status', + header: 'Neutered Status', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "weight", - header: "Weight (kg)", + dataField: 'weight', + header: 'Weight (kg)', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "response_to_treatment", - header: "Response to Treatment", + dataField: 'response_to_treatment', + header: 'Response to Treatment', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "cohort", - header: "Cohort", + dataField: 'cohort', + header: 'Cohort', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, ], - id: "case_tab", - tableID: "case_tab_table", - tabIndex: "0", + id: 'case_tab', + tableID: 'case_tab_table', + tabIndex: '0', tableMsg: { - noMatch: "No Matching Records Found", + noMatch: 'No Matching Records Found', }, // Add selected files (orange button) // additional query variable specific to tab case queryParam: { - file_level: ["case"], + file_level: ['case'], }, - addFilesRequestVariableKey: "case_ids", - addFilesResponseKeys: ["fileOverview", "file_uuid"], - addAllFilesResponseKeys: ["fileOverview", "file_uuid"], + addFilesRequestVariableKey: 'case_ids', + addFilesResponseKeys: ['fileOverview', 'file_uuid'], + addAllFilesResponseKeys: ['fileOverview', 'file_uuid'], addAllFileQuery: GET_ALL_FILEIDS_FILESTAB_FOR_SELECT_ALL, addSelectedFilesQuery: GET_ALL_FILEIDS_FILESTAB_FOR_SELECT_ALL, }, { - name: "Samples", - dataField: "dataSample", + name: 'Samples', + dataField: 'dataSample', api: GET_SAMPLES_OVERVIEW_QUERY, - selectAllButtonText: "Add Files for All Samples", - selectedButtonText: "Add Files for Selected Sample", - count: "numberOfSamples", - paginationAPIField: "sampleOverview", - dataKey: "sample_id", - defaultSortField: "sample_id", - defaultSortDirection: "asc", + selectAllButtonText: 'Add Files for All Samples', + selectedButtonText: 'Add Files for Selected Sample', + count: 'numberOfSamples', + paginationAPIField: 'sampleOverview', + dataKey: 'sample_id', + defaultSortField: 'sample_id', + defaultSortDirection: 'asc', extendedViewConfig: { pagination: true, download: { customDownload: true, - downloadCsv: "Download Table Contents As CSV", + downloadCsv: 'Download Table Contents As CSV', ...customSamplesTabDownloadCSV, }, manageViewColumns: { - title: "View Columns", + title: 'View Columns', }, }, columns: [ @@ -1986,135 +1986,135 @@ export const tableContainers = [ role: cellTypes.CHECKBOX, }, { - dataField: "sample_id", - header: "Sample ID", + dataField: 'sample_id', + header: 'Sample ID', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "case_id", - header: "Case ID", + dataField: 'case_id', + header: 'Case ID', cellType: cellTypes.LINK, linkAttr: { - rootPath: "/case", - pathParams: ["case_id"], + rootPath: '/case', + pathParams: ['case_id'], }, display: true, viewColumns: false, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "breed", - header: "Breed", + dataField: 'breed', + header: 'Breed', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "diagnosis", - header: "Diagnosis", + dataField: 'diagnosis', + header: 'Diagnosis', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "sample_site", - header: "Sample Site", + dataField: 'sample_site', + header: 'Sample Site', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "sample_type", - header: "Sample Type", + dataField: 'sample_type', + header: 'Sample Type', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "sample_pathology", - header: "Pathology/Morphology", + dataField: 'sample_pathology', + header: 'Pathology/Morphology', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "tumor_grade", - header: "Tumor Grade", + dataField: 'tumor_grade', + header: 'Tumor Grade', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "sample_chronology", - header: "Sample Chronology", + dataField: 'sample_chronology', + header: 'Sample Chronology', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "percentage_tumor", - header: "Percentage Tumor", + dataField: 'percentage_tumor', + header: 'Percentage Tumor', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "necropsy_sample", - header: "Necropsy Sample", + dataField: 'necropsy_sample', + header: 'Necropsy Sample', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "sample_preservation", - header: "Sample Preservation", + dataField: 'sample_preservation', + header: 'Sample Preservation', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, ], - id: "sample_tab", - tableID: "sample_tab_table", - tabIndex: "1", + id: 'sample_tab', + tableID: 'sample_tab_table', + tabIndex: '1', tableMsg: { - noMatch: "No Matching Records Found", + noMatch: 'No Matching Records Found', }, // Add selected files (orange button) // additional query variable specific to sample tab queryParam: { - file_level: ["case"], + file_level: ['case'], }, - addFilesRequestVariableKey: "sample_ids", - addFilesResponseKeys: ["fileOverview", "file_uuid"], - addAllFilesResponseKeys: ["fileOverview", "file_uuid"], + addFilesRequestVariableKey: 'sample_ids', + addFilesResponseKeys: ['fileOverview', 'file_uuid'], + addAllFilesResponseKeys: ['fileOverview', 'file_uuid'], addAllFileQuery: GET_ALL_FILEIDS_SAMPLE_TAB_FOR_SELECT_ALL, addSelectedFilesQuery: GET_ALL_FILEIDS_SAMPLE_TAB_FOR_SELECT_ALL, }, { - name: "Case Files", - dataField: "dataFile", + name: 'Case Files', + dataField: 'dataFile', api: GET_FILES_OVERVIEW_QUERY, - selectAllButtonText: "Add All Files", - paginationAPIField: "fileOverview", - defaultSortField: "file_name", - defaultSortDirection: "asc", - count: "numberOfFiles", - dataKey: "file_name", + selectAllButtonText: 'Add All Files', + paginationAPIField: 'fileOverview', + defaultSortField: 'file_name', + defaultSortDirection: 'asc', + count: 'numberOfFiles', + dataKey: 'file_name', jbrowse: true, queryParam: { - file_level: ["case"], + file_level: ['case'], }, extendedViewConfig: { pagination: true, download: { customDownload: true, - downloadCsv: "Download Table Contents As CSV", + downloadCsv: 'Download Table Contents As CSV', ...customFilesTabDownloadCSV, }, manageViewColumns: { - title: "View Columns", + title: 'View Columns', }, }, columns: [ @@ -2124,159 +2124,159 @@ export const tableContainers = [ role: cellTypes.CHECKBOX, }, { - dataField: "file_name", - header: "File Name", + dataField: 'file_name', + header: 'File Name', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "access_file", - header: "Access", + dataField: 'access_file', + header: 'Access', display: true, cellType: cellTypes.CUSTOM_ELEM, documentDownloadProps: { maxFileSize: 12000000, - toolTipTextFileDownload: "Download a copy of this file", + toolTipTextFileDownload: 'Download a copy of this file', toolTipTextFilePreview: - "Because of its size and/or format, this file is unavailable for download and must be accessed via the My Files workflow", - fileSizeColumn: "file_size", - fileFormatColumn: "file_format", - fileLocationColumn: "file_uuid", - caseIdColumn: "file_name", + 'Because of its size and/or format, this file is unavailable for download and must be accessed via the My Files workflow', + fileSizeColumn: 'file_size', + fileFormatColumn: 'file_format', + fileLocationColumn: 'file_uuid', + caseIdColumn: 'file_name', iconFilePreview: - "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/bento/images/icons/svgs/DocumentDownloadCloud.svg", + 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/bento/images/icons/svgs/DocumentDownloadCloud.svg', iconFileDownload: - "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/bento/images/icons/svgs/DocumentDownloadPDF.svg", + 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/bento/images/icons/svgs/DocumentDownloadPDF.svg', iconFileViewer: - "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/DocumentDownloadBAM.svg", + 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/DocumentDownloadBAM.svg', }, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "file_format", - header: "Format", + dataField: 'file_format', + header: 'Format', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "file_type", - header: "File Type", + dataField: 'file_type', + header: 'File Type', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "file_size", - header: "Size", + dataField: 'file_size', + header: 'Size', display: true, dataFormatType: dataFormatTypes.FORMAT_BYTES, cellType: cellTypes.FORMAT_DATA, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "association", - header: "Association", + dataField: 'association', + header: 'Association', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "file_description", - header: "Description", + dataField: 'file_description', + header: 'Description', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "sample_id", - header: "Sample ID", + dataField: 'sample_id', + header: 'Sample ID', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "case_id", - header: "Case ID", + dataField: 'case_id', + header: 'Case ID', cellType: cellTypes.LINK, linkAttr: { - rootPath: "/case", - pathParams: ["case_id"], + rootPath: '/case', + pathParams: ['case_id'], }, display: true, }, { - dataField: "breed", - header: "Breed", + dataField: 'breed', + header: 'Breed', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "diagnosis", - header: "Diagnosis", + dataField: 'diagnosis', + header: 'Diagnosis', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "file_uuid", - header: "File uuid", + dataField: 'file_uuid', + header: 'File uuid', primary: true, display: false, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "study_code", - header: "Study Code", + dataField: 'study_code', + header: 'Study Code', cellType: cellTypes.LINK, linkAttr: { - rootPath: "/study", - pathParams: ["study_code"], + rootPath: '/study', + pathParams: ['study_code'], }, display: false, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, ], - id: "file_tab", - tableID: "file_tab_table", + id: 'file_tab', + tableID: 'file_tab_table', selectableRows: true, tableMsg: { - noMatch: "No Matching Records Found", + noMatch: 'No Matching Records Found', }, - addFilesRequestVariableKey: "file_name", - addFilesResponseKeys: ["fileIdsFromFileName", "file_uuid"], - addAllFilesResponseKeys: ["fileOverview", "file_uuid"], + addFilesRequestVariableKey: 'file_name', + addFilesResponseKeys: ['fileIdsFromFileName', 'file_uuid'], + addAllFilesResponseKeys: ['fileOverview', 'file_uuid'], addAllFileQuery: GET_ALL_FILEIDS_FILESTAB_FOR_SELECT_ALL, addSelectedFilesQuery: GET_ALL_FILEIDS_ON_FILESTAB_FOR_SELECT_ALL, }, { - name: "Study Files", - dataField: "dataStudyFile", + name: 'Study Files', + dataField: 'dataStudyFile', api: GET_FILES_OVERVIEW_QUERY, - selectAllButtonText: "Add All Files", - paginationAPIField: "fileOverview", - defaultSortField: "file_name", - defaultSortDirection: "asc", - count: "numberOfStudyFiles", - dataKey: "file_name", + selectAllButtonText: 'Add All Files', + paginationAPIField: 'fileOverview', + defaultSortField: 'file_name', + defaultSortDirection: 'asc', + count: 'numberOfStudyFiles', + dataKey: 'file_name', queryParam: { - file_level: ["study"], + file_level: ['study'], }, extendedViewConfig: { pagination: true, download: { customDownload: true, - downloadCsv: "Download Table Contents As CSV", + downloadCsv: 'Download Table Contents As CSV', ...customStudyFilesTabDownloadCSV, }, manageViewColumns: { - title: "View Columns", + title: 'View Columns', }, }, columns: [ @@ -2286,111 +2286,111 @@ export const tableContainers = [ role: cellTypes.CHECKBOX, }, { - dataField: "file_name", - header: "File Name", + dataField: 'file_name', + header: 'File Name', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "file_uuid", - header: "File uuid", + dataField: 'file_uuid', + header: 'File uuid', display: false, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "file_type", - header: "File Type", + dataField: 'file_type', + header: 'File Type', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "association", - header: "Association", + dataField: 'association', + header: 'Association', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "file_description", - header: "Description", + dataField: 'file_description', + header: 'Description', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "file_format", - header: "Format", + dataField: 'file_format', + header: 'Format', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, { - dataField: "file_size", - header: "Size", + dataField: 'file_size', + header: 'Size', display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', dataFormatType: dataFormatTypes.FORMAT_BYTES, cellType: cellTypes.FORMAT_DATA, }, { - dataField: "access_file", - header: "Access", + dataField: 'access_file', + header: 'Access', cellType: cellTypes.CUSTOM_ELEM, - tooltipText: "sort", + tooltipText: 'sort', display: true, downloadDocument: true, documentDownloadProps: { maxFileSize: 12000000, - toolTipTextFileDownload: "Download a copy of this file", + toolTipTextFileDownload: 'Download a copy of this file', toolTipTextFilePreview: - "Because of its size and/or format, this file is unavailable for download and must be accessed via the My Files workflow", - fileSizeColumn: "file_size", - fileFormatColumn: "file_format", - fileLocationColumn: "file_uuid", - caseIdColumn: "file_name", + 'Because of its size and/or format, this file is unavailable for download and must be accessed via the My Files workflow', + fileSizeColumn: 'file_size', + fileFormatColumn: 'file_format', + fileLocationColumn: 'file_uuid', + caseIdColumn: 'file_name', iconFilePreview: - "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/bento/images/icons/svgs/DocumentDownloadCloud.svg", + 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/bento/images/icons/svgs/DocumentDownloadCloud.svg', iconFileDownload: - "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/bento/images/icons/svgs/DocumentDownloadPDF.svg", + 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/bento/images/icons/svgs/DocumentDownloadPDF.svg', iconFileViewer: - "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/DocumentDownloadBAM.svg", + 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/DocumentDownloadBAM.svg', }, }, { - dataField: "study_code", - header: "Study Code", + dataField: 'study_code', + header: 'Study Code', cellType: cellTypes.LINK, linkAttr: { - rootPath: "/study", - pathParams: ["study_code"], + rootPath: '/study', + pathParams: ['study_code'], }, display: true, role: cellTypes.DISPLAY, - tooltipText: "sort", + tooltipText: 'sort', }, ], tableMsg: { - noMatch: "No Matching Records Found", + noMatch: 'No Matching Records Found', }, - id: "study_file_tab", - addFilesRequestVariableKey: "file_name", - addFilesResponseKeys: ["fileIdsFromFileName", "file_uuid"], - addAllFilesResponseKeys: ["fileOverview", "file_uuid"], + id: 'study_file_tab', + addFilesRequestVariableKey: 'file_name', + addFilesResponseKeys: ['fileIdsFromFileName', 'file_uuid'], + addAllFilesResponseKeys: ['fileOverview', 'file_uuid'], addAllFileQuery: GET_ALL_FILEIDS_FILESTAB_FOR_SELECT_ALL, addSelectedFilesQuery: GET_ALL_FILEIDS_ON_FILESTAB_FOR_SELECT_ALL, }, ]; export const alertMessage = - "The cart is limited to 1000 files. Please narrow the search criteria or remove some files from the cart to add more."; + 'The cart is limited to 1000 files. Please narrow the search criteria or remove some files from the cart to add more.'; const addAllFiles = { - title: "Add Associated Files For All", - clsName: "add_all_button", + title: 'Add Associated Files For All', + clsName: 'add_all_button', type: types.BUTTON, role: btnTypes.ADD_ALL_FILES, btnType: btnTypes.ADD_ALL_FILES, @@ -2401,8 +2401,8 @@ const addAllFiles = { }; const addSelectedFiles = { - title: "Add Selected Files ", - clsName: "add_selected_button", + title: 'Add Selected Files ', + clsName: 'add_selected_button', type: types.BUTTON, role: btnTypes.ADD_SELECTED_FILES, btnType: btnTypes.ADD_SELECTED_FILES, @@ -2419,30 +2419,30 @@ const jBrowseBtn = { export const tableLayOut = [ { - container: "buttons", - size: "xl", - clsName: "container_header", + container: 'buttons', + size: 'xl', + clsName: 'container_header', items: [addAllFiles, addSelectedFiles, jBrowseBtn], }, { - container: "paginatedTable", + container: 'paginatedTable', paginatedTable: true, }, { - container: "buttons", - size: "xl", - clsName: "container_footer", + container: 'buttons', + size: 'xl', + clsName: 'container_footer', items: [addSelectedFiles, jBrowseBtn], }, { - container: "buttons", - size: "xl", - clsName: "container_footer_link", + container: 'buttons', + size: 'xl', + clsName: 'container_footer_link', items: [ { - title: "Go to My Files >", - clsName: "go_to_cart", - url: "#/fileCentricCart", + title: 'Go to My Files >', + clsName: 'go_to_cart', + url: '#/fileCentricCart', type: types.LINK, }, ], diff --git a/src/components/Breadcrumb/BreadcrumbView.jsx b/src/components/Breadcrumb/BreadcrumbView.jsx deleted file mode 100644 index cf47e761..00000000 --- a/src/components/Breadcrumb/BreadcrumbView.jsx +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react'; -import { withStyles } from '@material-ui/core'; -import { Link } from 'react-router-dom'; - -const CustomBreadcrumb = ({ classes, data }) => ( -
- {data - .reduce((acc, current, index) => { - if (current.isALink) { - acc.push( - - - {current.name} - - - ); - } else { - acc.push( - {current.name} - ); - } - if (index < data.length - 1) { - acc.push(
{'>'}
); - } - return acc; - }, []) - .map(item => item)} -
-); - -const styles = _theme => ({ - headerNav: { - color: '#5e8ca5', - display: 'flex', - alignItems: 'center', - gap: '8px', - }, - headerNavLink: { - paddingLeft: '2px', - paddingRight: '2px', - textDecoration: 'none', - color: '#0B4E75', - fontFamily: 'Lato', - fontWeight: '500', - fontSize: '15px', - letterSpacing: '0.025em', - }, -}); - -export default withStyles(styles)(CustomBreadcrumb); diff --git a/src/components/Breadcrumb/BreadcrumbView.styled.tsx b/src/components/Breadcrumb/BreadcrumbView.styled.tsx new file mode 100644 index 00000000..d7314030 --- /dev/null +++ b/src/components/Breadcrumb/BreadcrumbView.styled.tsx @@ -0,0 +1,31 @@ +import styled from '@emotion/styled'; +import { Link } from 'react-router-dom'; + +export const Container = styled.div({ + color: '#5e8ca5', + display: 'flex', + alignItems: 'center', + gap: '8px', +}); + +export const BreadcrumbNavLink = styled(Link)({ + paddingLeft: '2px', + paddingRight: '2px', + textDecoration: 'none', + color: '#0B4E75', + fontFamily: 'Lato', + fontWeight: '700', + fontSize: '12px', + letterSpacing: '0.025em', +}); + +export const BreadcrumbSpan = styled.span({ + paddingLeft: '2px', + paddingRight: '2px', + textDecoration: 'none', + color: '#0B4E75', + fontFamily: 'Lato', + fontWeight: '500', + fontSize: '12px', + letterSpacing: '0.025em', +}); diff --git a/src/components/Breadcrumb/BreadcrumbView.tsx b/src/components/Breadcrumb/BreadcrumbView.tsx new file mode 100644 index 00000000..943dc9d6 --- /dev/null +++ b/src/components/Breadcrumb/BreadcrumbView.tsx @@ -0,0 +1,40 @@ +import React from 'react'; +import { + BreadcrumbNavLink, + BreadcrumbSpan, + Container, +} from './BreadcrumbView.styled'; + +interface CustomBreadcrumbProps { + data: { + name: string; + to: string; + isALink: boolean; + }[]; +} + +const CustomBreadcrumb: React.FC = ({ data }) => { + return ( + + {data + .reduce((acc, current, index) => { + if (current.isALink) { + acc.push( + + {current.name} + + ); + } else { + acc.push({current.name}); + } + if (index < data.length - 1) { + acc.push(
{'>'}
); + } + return acc; + }, []) + .map(item => item)} +
+ ); +}; + +export default CustomBreadcrumb; diff --git a/src/components/DataAvailabilityTable/tableThemeConfig.js b/src/components/DataAvailabilityTable/tableThemeConfig.ts similarity index 94% rename from src/components/DataAvailabilityTable/tableThemeConfig.js rename to src/components/DataAvailabilityTable/tableThemeConfig.ts index d8bc125c..6dae2846 100644 --- a/src/components/DataAvailabilityTable/tableThemeConfig.js +++ b/src/components/DataAvailabilityTable/tableThemeConfig.ts @@ -1,4 +1,6 @@ -const dynamicDataAvailColStyling = (table, isBody = false) => { +import { ExtendedCSSProperties, TableConfig } from './types'; + +const dynamicDataAvailColStyling = (table: TableConfig, isBody = false) => { const dataAvailabilityCols = [ 'numberofcasefiles', 'numberofstudyfiles', @@ -12,7 +14,7 @@ const dynamicDataAvailColStyling = (table, isBody = false) => { dataAvailabilityCols.includes(`${col.dataField}`.toLowerCase()) && col.display ); - const customStyle = {}; + const customStyle: ExtendedCSSProperties = {}; if (displayDavaAvailCols) { const { length } = displayDavaAvailCols; const firstItem = displayDavaAvailCols[0]; @@ -41,7 +43,7 @@ const dynamicDataAvailColStyling = (table, isBody = false) => { return customStyle; }; -export const tblBody = table => { +export const tblBody = (table: TableConfig) => { const customDataAvailColStyles = dynamicDataAvailColStyling(table, true); return { tblBody: { @@ -125,7 +127,7 @@ export const tblBody = table => { }; }; -export const headerTheme = table => { +export const headerTheme = (table: TableConfig) => { const customDataAvailColStyles = dynamicDataAvailColStyling(table); return { @@ -337,10 +339,12 @@ const tblPgn = { }, }; -export const themeConfig = table => ({ - ...tblBody(table), - tblPgn, - tblContainer, - extendedView, - ...headerTheme(table), -}); +export const themeConfig = (table: TableConfig) => { + return { + ...tblBody(table), + tblPgn, + tblContainer, + extendedView, + ...headerTheme(table), + }; +}; diff --git a/src/components/DataAvailabilityTable/types.ts b/src/components/DataAvailabilityTable/types.ts new file mode 100644 index 00000000..fdd8f88f --- /dev/null +++ b/src/components/DataAvailabilityTable/types.ts @@ -0,0 +1,73 @@ +import React from 'react'; + +export interface ExtendedCSSProperties extends React.CSSProperties { + [key: `&.${string}`]: React.CSSProperties; +} + +interface ColumnLinkAttr { + rootPath: string; + pathParams: string[]; +} + +interface ColumnDefaultValues { + [key: string]: string; +} + +interface ColumnConfig { + dataField: string; + header: string; + display: boolean; + tooltipText?: string; + role?: string; + cellType?: string; + linkAttr?: ColumnLinkAttr; + columnDefaultValues?: ColumnDefaultValues; + headerType?: string; + icon?: string; + link?: string; +} + +interface TableMsg { + noMatch: string; +} + +interface DownloadConfig { + customDownload: boolean; + downloadFileName: string; + downloadCsv: string; +} + +interface ManageViewColumnsConfig { + title: string; +} + +interface ExtendedViewConfig { + download: DownloadConfig; + manageViewColumns: ManageViewColumnsConfig; +} + +interface ColumnGroup { + clsName: string; + custom?: boolean; + columnIndexes: number[]; +} + +export interface TableConfig { + title: string; + dataKey?: string; + dispatch: () => void; + columns: ColumnConfig[]; + count: number; + selectedRows: any[]; + selectedFileIds: any[]; + tableMsg?: TableMsg; + sortBy: string; + sortOrder: string; + extendedViewConfig: ExtendedViewConfig; + columnGroups: ColumnGroup[]; + rowsPerPage: number; + page: number; + paginationAPIField?: string; + query?: string; + totalRowCount: number; +} diff --git a/src/components/PaginatedTable/Customize/DataAvailability/ColGrouping.jsx b/src/components/PaginatedTable/Customize/DataAvailability/ColGrouping.jsx deleted file mode 100644 index 3da67e8f..00000000 --- a/src/components/PaginatedTable/Customize/DataAvailability/ColGrouping.jsx +++ /dev/null @@ -1,93 +0,0 @@ -import React from 'react'; -import { - IconButton, - Tooltip, - withStyles, - // withStyles, -} from '@material-ui/core'; -import SpeechBubble from '../../assets/speechBubble.svg'; - -const ICDC_DATA_AVAIL_ICONS = [ - { - label: 'Case Files', - icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/CaseFiles_.svg', - }, - { - label: 'Study Files', - icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/master/icdc/images/svgs/StudyFiles_.svg', - }, - { - label: 'Image Collections', - icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/StudyDataAvail-ImageCollection.svg', - }, - { - label: 'Publications', - icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/StudyDataAvail-Publications.svg', - }, - { - label: 'Additional CRDC Nodes', - icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/StudyDataAvail-CRDCnodes.svg', - }, -]; - -export const generateDataAvailabilityTooltipText = () => ( -
-

Data Availability:

- {ICDC_DATA_AVAIL_ICONS.map((item, index) => ( -
- {`${item.label}{' '} - {item.label} -
- ))} -
-); - -const AvailabilityColumnGrouping = ({ classes }) => ( - - Data Availability - - - tooltip - - - -); - -const styles = () => ({ - group: { - fontSize: '16px', - fontWeight: '600', - color: '#000', - }, - icon: { - width: '25px', - textAlign: 'center', - }, - dalTooltip: { - padding: '0px 12px !important', - }, - dalPopper: { - left: '-278px !important', - }, -}); - -export default withStyles(styles)(AvailabilityColumnGrouping); diff --git a/src/components/PaginatedTable/Customize/DataAvailability/ColGrouping.styled.tsx b/src/components/PaginatedTable/Customize/DataAvailability/ColGrouping.styled.tsx new file mode 100644 index 00000000..59f9985c --- /dev/null +++ b/src/components/PaginatedTable/Customize/DataAvailability/ColGrouping.styled.tsx @@ -0,0 +1,49 @@ +import React from 'react'; +import styled from '@emotion/styled'; +import { + Tooltip as MuiTooltip, + TooltipProps, + tooltipClasses, +} from '@mui/material'; + +export const DataAvailabilityTooltipTextWrapper = styled.div({ + display: 'grid', + paddingTop: '0em', +}); + +export const DataAvailabilityTooltipTextTitle = styled.h3({ + textAlign: 'center', +}); + +export const DataAvailabilityTooltipTextIconAndLabelWrapper = styled.div({ + display: 'flex', + gap: '2em', + marginBottom: '0.5em', +}); + +export const DataAvailabilityTooltipTextIcon = styled.img({ + width: '3em', +}); + +export const Group = styled.span({ + fontSize: '16px', + fontWeight: '600', + color: '#000', +}); + +export const Tooltip = styled(({ className, ...props }: TooltipProps) => ( + +))(() => ({ + [`& .${tooltipClasses.tooltip}`]: { + backgroundColor: '#fff', + color: '#1c2023', + border: '2px solid #a7afb3', + fontFamily: 'Open Sans', + padding: '12px', + }, +})); + +export const AvailabilityColumnGroupingIcon = styled.img({ + width: '0.7em', + marginBottom: '0.6em', +}); diff --git a/src/components/PaginatedTable/Customize/DataAvailability/ColGrouping.tsx b/src/components/PaginatedTable/Customize/DataAvailability/ColGrouping.tsx new file mode 100644 index 00000000..f25a344d --- /dev/null +++ b/src/components/PaginatedTable/Customize/DataAvailability/ColGrouping.tsx @@ -0,0 +1,46 @@ +import React from 'react'; +import { IconButton } from '@mui/material'; +import SpeechBubble from '../../assets/speechBubble.svg'; +import { ICDC_DATA_AVAIL_ICONS } from './constants'; +import { + AvailabilityColumnGroupingIcon, + DataAvailabilityTooltipTextIcon, + DataAvailabilityTooltipTextIconAndLabelWrapper, + DataAvailabilityTooltipTextTitle, + DataAvailabilityTooltipTextWrapper, + Group, + Tooltip, +} from './ColGrouping.styled'; + +export const generateDataAvailabilityTooltipText = () => ( + + + Data Availability: + + {ICDC_DATA_AVAIL_ICONS.map((item, index) => ( + + {' '} + {item.label} + + ))} + +); + +const AvailabilityColumnGrouping = () => ( + + Data Availability + + + + + + +); + +export default AvailabilityColumnGrouping; diff --git a/src/components/PaginatedTable/Customize/DataAvailability/constants.ts b/src/components/PaginatedTable/Customize/DataAvailability/constants.ts new file mode 100644 index 00000000..3dce4749 --- /dev/null +++ b/src/components/PaginatedTable/Customize/DataAvailability/constants.ts @@ -0,0 +1,22 @@ +export const ICDC_DATA_AVAIL_ICONS = [ + { + label: 'Case Files', + icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/CaseFiles_.svg', + }, + { + label: 'Study Files', + icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/master/icdc/images/svgs/StudyFiles_.svg', + }, + { + label: 'Image Collections', + icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/StudyDataAvail-ImageCollection.svg', + }, + { + label: 'Publications', + icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/StudyDataAvail-Publications.svg', + }, + { + label: 'Additional CRDC Nodes', + icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/StudyDataAvail-CRDCnodes.svg', + }, +]; diff --git a/src/components/PaginatedTable/TableTheme.js b/src/components/PaginatedTable/TableTheme.js index 1e40d5c6..10b3b034 100644 --- a/src/components/PaginatedTable/TableTheme.js +++ b/src/components/PaginatedTable/TableTheme.js @@ -1,76 +1,76 @@ -export const headerTheme = ({ primaryColor = "#004c73" }) => ({ +export const headerTheme = ({ primaryColor = '#004c73' }) => ({ tblHeader: { MuiTableSortLabel: { root: { - color: "#13344A", - position: "relative", - fontSize: "11pt", + color: '#13344A', + position: 'relative', + fontSize: '11pt', fontFamily: "'Lato','Raleway', sans-serif", - fontWeight: "bold", - letterSpacing: "0.06em", - textDecoration: "none", - "&:hover": { - color: "#13344A", + fontWeight: 'bold', + letterSpacing: '0.06em', + textDecoration: 'none', + '&:hover': { + color: '#13344A', }, - "&:hover $svg": {}, + '&:hover $svg': {}, }, }, MuiTableCell: { root: { - paddingLeft: "5px", - paddingRight: "5px", - "&.data_availability": { - textAlign: "center", - fontSize: "16px", - fontWeight: "600", - padding: "0", + paddingLeft: '5px', + paddingRight: '5px', + '&.data_availability': { + textAlign: 'center', + fontSize: '16px', + fontWeight: '600', + padding: '0', }, - "&.del_all_row": { - padding: "0", + '&.del_all_row': { + padding: '0', }, - "&.group_1": { - padding: "0", + '&.group_1': { + padding: '0', }, }, paddingCheckbox: { - "& label": { - marginRight: "5px", + '& label': { + marginRight: '5px', }, }, }, MuiTableRow: { head: { - height: "40px", + height: '40px', borderBottom: `3px solid ${primaryColor}`, - background: "#f5f5f5", - "&.column_grouping": { - background: "#fff", - padding: "0", + background: '#f5f5f5', + '&.column_grouping': { + background: '#fff', + padding: '0', }, }, }, MuiTooltip: { tooltip: { - backgroundColor: "#ffffff", - color: "#1c2023", - maxWidth: "220px", - fontSize: "0.75rem", - border: "2px solid #a7afb3", - fontFamily: "Open Sans", - fontWeight: "600", - textAlign: "left", - lineHeight: "1.6", - padding: "10px 12px", - borderRadius: "0px", + backgroundColor: '#ffffff', + color: '#1c2023', + maxWidth: '220px', + fontSize: '0.75rem', + border: '2px solid #a7afb3', + fontFamily: 'Open Sans', + fontWeight: '600', + textAlign: 'left', + lineHeight: '1.6', + padding: '10px 12px', + borderRadius: '0px', }, arrow: { - color: "#ffffff", - marginTop: "-0.71em", - marginLeft: "0px", - marginRight: "4px", - fontSize: "1.25rem", - "&:before": { - border: "2px solid #a7afb3", + color: '#ffffff', + marginTop: '-0.71em', + marginLeft: '0px', + marginRight: '4px', + fontSize: '1.25rem', + '&:before': { + border: '2px solid #a7afb3', }, }, }, @@ -80,130 +80,130 @@ export const headerTheme = ({ primaryColor = "#004c73" }) => ({ const tblBody = { MuiTooltip: { tooltip: { - backgroundColor: "#ffffff", - color: "#1c2023", - maxWidth: "220px", - fontSize: "0.75rem", - border: "2px solid #a7afb3", - fontFamily: "Open Sans", - fontWeight: "600", - textAlign: "left", - lineHeight: "1.6", - padding: "10px 12px", - borderRadius: "0px", + backgroundColor: '#ffffff', + color: '#1c2023', + maxWidth: '220px', + fontSize: '0.75rem', + border: '2px solid #a7afb3', + fontFamily: 'Open Sans', + fontWeight: '600', + textAlign: 'left', + lineHeight: '1.6', + padding: '10px 12px', + borderRadius: '0px', }, }, MuiTableCell: { root: { - minHeight: "45px", - padding: "0px 5px 0px 5px", + minHeight: '45px', + padding: '0px 5px 0px 5px', // padding: '16px', - color: "#004C73", - borderBottom: "none", - "& a": { - color: "#B85300", - cursor: "pointer", - textDecoration: "underline", - "& p": { - fontFamily: "Open Sans", - fontWeight: "700", - fontSize: "13px", - letterSpacing: "0.025em", + color: '#004C73', + borderBottom: 'none', + '& a': { + color: '#B85300', + cursor: 'pointer', + textDecoration: 'underline', + '& p': { + fontFamily: 'Open Sans', + fontWeight: '700', + fontSize: '13px', + letterSpacing: '0.025em', }, }, - "& p": { - fontFamily: "Open Sans", - fontWeight: "600", - fontSize: "13px", - letterSpacing: "0.025em", + '& p': { + fontFamily: 'Open Sans', + fontWeight: '600', + fontSize: '13px', + letterSpacing: '0.025em', }, }, paddingCheckbox: { - width: "48px", - padding: "0 0 0 5px", + width: '48px', + padding: '0 0 0 5px', }, body: { - color: "#13344A", - "&.file_name": { - maxWidth: "300px", - "& p": { - lineBreak: "anywhere", + color: '#13344A', + '&.file_name': { + maxWidth: '300px', + '& p': { + lineBreak: 'anywhere', }, }, - "&.acl": { - textAlign: "center", + '&.acl': { + textAlign: 'center', }, - "&.delete_row": { - textAlign: "center", + '&.delete_row': { + textAlign: 'center', }, }, }, MuiCheckbox: { colorSecondary: { - "&.Mui-checked": { - color: "#0B3556", + '&.Mui-checked': { + color: '#0B3556', }, }, }, MuiSvgIcon: { root: { - color: "#0B3556", + color: '#0B3556', }, }, }; -export const extendedView = ({ primaryColor = "#FF9742" }) => ({ +export const extendedView = ({ primaryColor = '#FF9742' }) => ({ extendedView: { tblTopPgn: { MuiTablePagination: { root: { - paddingRight: "43px", + paddingRight: '43px', borderTop: `3px solid ${primaryColor}`, }, }, }, MuiTooltip: { tooltip: { - backgroundColor: "#ffffff", - color: "#1c2023", - maxWidth: "220px", - fontSize: "0.75rem", - border: "2px solid #a7afb3", - fontFamily: "Open Sans", - fontWeight: "600", - textAlign: "left", - lineHeight: "1.6", - padding: "10px 12px", - borderRadius: "0px", + backgroundColor: '#ffffff', + color: '#1c2023', + maxWidth: '220px', + fontSize: '0.75rem', + border: '2px solid #a7afb3', + fontFamily: 'Open Sans', + fontWeight: '600', + textAlign: 'left', + lineHeight: '1.6', + padding: '10px 12px', + borderRadius: '0px', }, }, MuiList: { root: { - "&.viewColumnList": { - padding: "8px 42px 8px 10px", - "& img": { - width: "25px", - marginRight: "10px", + '&.viewColumnList': { + padding: '8px 42px 8px 10px', + '& img': { + width: '25px', + marginRight: '10px', }, }, }, }, MuiToolbar: { root: { - display: "block", - position: "relative", - textAlign: "right", - "&.downloadAndColumnView": { - maxHeight: "2px", - minHeight: "0px", - "& button": { - marginTop: "-50px", - "&.download-icon": { - marginRight: "-10px", + display: 'block', + position: 'relative', + textAlign: 'right', + '&.downloadAndColumnView': { + maxHeight: '2px', + minHeight: '0px', + '& button': { + marginTop: '-50px', + '&.download-icon': { + marginRight: '-10px', }, - "&.manageViewColumnBtn": { - marginBottom: "0px", - zIndex: "10", + '&.manageViewColumnBtn': { + marginBottom: '0px', + zIndex: '10', }, }, }, @@ -212,43 +212,43 @@ export const extendedView = ({ primaryColor = "#FF9742" }) => ({ }, }); -export const tablePag = ({ primaryColor = "#004c73" }) => ({ +export const tablePag = ({ primaryColor = '#004c73' }) => ({ tblPgn: { MuiTablePagination: { root: { - paddingRight: "43px", - background: "#ffffff", + paddingRight: '43px', + background: '#ffffff', borderTop: `3px solid ${primaryColor}`, borderBottom: `3px solid ${primaryColor}`, - "&:last-child": { - paddingRight: "43px", + '&:last-child': { + paddingRight: '43px', }, }, toolbar: { - minHeight: "45px", + minHeight: '45px', }, }, }, }); -export const tblContainer = ({ primaryColor = "#004c73" }) => ({ +export const tblContainer = ({ primaryColor = '#004c73' }) => ({ tblContainer: { MuiTableContainer: { root: { - width: "100%", - overflowX: "auto", + width: '100%', + overflowX: 'auto', // transform: 'rotateX(180deg)', - boxShadow: "none", - borderRadius: "0", + boxShadow: 'none', + borderRadius: '0', }, }, MuiTable: { root: { // transform: 'rotateX(180deg)', - width: "100%", - display: "table", - borderSpacing: "0", - borderCollapse: "collapse", + width: '100%', + display: 'table', + borderSpacing: '0', + borderCollapse: 'collapse', borderTop: `3px solid ${primaryColor}`, }, }, @@ -258,133 +258,133 @@ export const tblContainer = ({ primaryColor = "#004c73" }) => ({ export const customTheme = { MuiContainer: { maxWidthXl: { - "@media (min-width: 1920px)": { - maxWidth: "100%", + '@media (min-width: 1920px)': { + maxWidth: '100%', }, }, root: { - paddingTop: "5px", - "&.container_header": { - textAlign: "left", + paddingTop: '5px', + '&.container_header': { + textAlign: 'left', }, - "&.container_footer": { - paddingTop: "10px", - textAlign: "left", + '&.container_footer': { + paddingTop: '10px', + textAlign: 'left', }, - "&.container_footer_link": { - textAlign: "left", - paddingRight: "100px", - height: "65px", - color: "#3E6886", - fontSize: "12px", - fontFamily: "Lato", - textDecoration: "none", + '&.container_footer_link': { + textAlign: 'left', + paddingRight: '100px', + height: '65px', + color: '#3E6886', + fontSize: '12px', + fontFamily: 'Lato', + textDecoration: 'none', }, - "& img": { - width: "17px", - "&.addAllTooltip": { - verticalAlign: "top", - marginTop: "8px", + '& img': { + width: '17px', + '&.addAllTooltip': { + verticalAlign: 'top', + marginTop: '8px', }, - "&.add_selected_file_tooltip_icon": { - verticalAlign: "top", - marginTop: "8px", + '&.add_selected_file_tooltip_icon': { + verticalAlign: 'top', + marginTop: '8px', }, }, }, }, MuiButton: { text: { - padding: "10px 16px", + padding: '10px 16px', }, root: { - color: "#fff", - fontSize: "12px", - marginTop: "6px", - fontFamily: "Lato", - borderRadius: "10px", - marginBottom: "10px", - "&.add_all_button": { - color: "#fff", - fontSize: "16px", - marginTop: "6px", - fontFamily: "Lato", - marginRight: "5px", - borderRadius: "10px", - marginBottom: "10px", - backgroundColor: "#142D64", - textTransform: "none", + color: '#fff', + fontSize: '12px', + marginTop: '6px', + fontFamily: 'Lato', + borderRadius: '10px', + marginBottom: '10px', + '&.add_all_button': { + color: '#fff', + fontSize: '16px', + marginTop: '6px', + fontFamily: 'Lato', + marginRight: '5px', + borderRadius: '10px', + marginBottom: '10px', + backgroundColor: '#142D64', + textTransform: 'none', }, - "&.add_selected_button": { - marginRight: "10px", - marginLeft: "25px", - color: "#fff", - borderRadius: "10px", - fontSize: "16px", - backgroundColor: "#B35000", - textTransform: "none", - "& img": { - width: "2.25em", + '&.add_selected_button': { + marginRight: '10px', + marginLeft: '25px', + color: '#fff', + borderRadius: '10px', + fontSize: '16px', + backgroundColor: '#B35000', + textTransform: 'none', + '& img': { + width: '2.25em', }, - "&.Mui-disabled": { - opacity: "0.7", - textTransform: "none", + '&.Mui-disabled': { + opacity: '0.7', + textTransform: 'none', }, }, - "&.yesBtn": { - width: "133px", - height: "45px", - cursor: "pointer", - background: "#98a19e", + '&.yesBtn': { + width: '133px', + height: '45px', + cursor: 'pointer', + background: '#757575', }, - "&.noBtn": { - width: "133px", - height: "45px", - cursor: "pointer", - background: "#42779a", + '&.noBtn': { + width: '133px', + height: '45px', + cursor: 'pointer', + background: '#42779a', }, }, }, MuiLink: { root: { - height: "65px", - color: "#3E6886", - fontSize: "12px", - fontFamily: "Lato", - borderBottom: "1px solid #3E6886", - textDecoration: "none", - "&.go_to_cart": { - color: "#3E6886", - fontsize: "12px", - fontFamily: "Lato", - marginLeft: "55px", - borderBottom: "1px solid #3E6886", + height: '65px', + color: '#3E6886', + fontSize: '12px', + fontFamily: 'Lato', + borderBottom: '1px solid #3E6886', + textDecoration: 'none', + '&.go_to_cart': { + color: '#3E6886', + fontsize: '12px', + fontFamily: 'Lato', + marginLeft: '55px', + borderBottom: '1px solid #3E6886', }, }, }, MuiDialog: { paper: { - width: "431px", - height: "170px", - borderRadius: "25px !important", - textAlign: "center", - backgroundColor: "#E8DFDC !important", - border: "2px solid #A61401", + width: '431px', + height: '170px', + borderRadius: '25px !important', + textAlign: 'center', + backgroundColor: '#E8DFDC !important', + border: '2px solid #A61401', }, }, MuiDialogContent: { root: { - padding: "40px 20px 0px 20px", - "&.alter-content": { - fontFamily: "Lato", - size: "16px", + padding: '40px 20px 0px 20px', + '&.alter-content': { + fontFamily: 'Lato', + size: '16px', }, }, }, MuiDialogActions: { root: { - justifyContent: "center", - paddingBottom: "25px", + justifyContent: 'center', + paddingBottom: '25px', }, }, }; diff --git a/src/components/Tab/Tab.jsx b/src/components/Tab/Tab.jsx deleted file mode 100644 index 68ba0603..00000000 --- a/src/components/Tab/Tab.jsx +++ /dev/null @@ -1,70 +0,0 @@ -import React from 'react'; -import {} from // Tabs, Tab, withStyles, -'@material-ui/core'; -import { Tabs, Tab } from '@mui/material'; -import { withStyles } from '@mui/styles'; -import TabLabel from './TabLable'; - -const TabItems = ({ - tabItems, - styleClasses, - handleTabChange, - currentTab, - orientation, -}) => { - function getTabLalbel(title, image, index) { - return ( - - ); - } - - const TABs = tabItems.map((tab, index) => ( - - )); - - return ( - <> - handleTabChange(event, value)} - value={currentTab} - TabIndicatorProps={{ style: { background: 'none' } }} - orientation={orientation} - > - {TABs} - -
- - ); -}; - -const styles = () => ({ - defaultStyle: { - fontFamily: 'Open Sans', - textTransform: 'none', - fontSize: '17px', - }, - flexContainer: { - flexDirection: 'column', - }, - indicator: { - display: 'none', - }, - tabHighlightColor: { - color: '#ffffff', - }, -}); - -export default withStyles(styles)(TabItems); diff --git a/src/components/Tab/Tab.tsx b/src/components/Tab/Tab.tsx new file mode 100644 index 00000000..21085ed6 --- /dev/null +++ b/src/components/Tab/Tab.tsx @@ -0,0 +1,76 @@ +import React, { CSSProperties } from 'react'; +import { Tabs, Tab, Orientation } from '@mui/material'; +import TabLabel from './TabLable'; +import styled from '@emotion/styled'; + +const StyledLine = styled.hr<{ styles: CSSProperties }>(({ styles }) => { + return { + ...styles, + }; +}); + +interface TabItemsProps { + styleClasses: { + tabPrimaryColor: CSSProperties; + tabHighlightColor: CSSProperties; + hrLine: CSSProperties; + }; + tabItems: { + index: number; + label: string; + value: string; + icon?: string; + }[]; + handleTabChange: ( + _event: React.SyntheticEvent, + _value: any + ) => void; + currentTab: number; + orientation?: Orientation; +} + +const TabItems: React.FC = ({ + tabItems, + styleClasses, + handleTabChange, + currentTab, + orientation, +}) => { + function getTabLalbel(title: string, image: string, index: number) { + return ( + + ); + } + + const TABs = tabItems.map((tab, index) => ( + + )); + + return ( + <> + handleTabChange(event, value)} + value={currentTab} + TabIndicatorProps={{ style: { background: 'none' } }} + orientation={orientation} + > + {TABs} + + + + ); +}; + +export default TabItems; diff --git a/src/components/Tab/TabLable.js b/src/components/Tab/TabLable.js deleted file mode 100644 index e53aa853..00000000 --- a/src/components/Tab/TabLable.js +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -// import { withStyles } from '@material-ui/core'; -import { withStyles } from '@mui/styles'; -import { cn } from '@bento-core/util'; - -const tabLabel = ({ classes, title, primaryColorClass, icon }) => ( -
- {icon && icdc_carousel_tabs} - {title} -
-); - -const styles = () => ({ - defaultStyle: { - fontFamily: 'Open Sans', - textTransform: 'none', - fontSize: '17px', - height: '45px', - marginBottom: '-5px', - }, -}); - -export default withStyles(styles, { withTheme: true })(tabLabel); diff --git a/src/components/Tab/TabLable.jsx b/src/components/Tab/TabLable.jsx deleted file mode 100644 index cf83a9f0..00000000 --- a/src/components/Tab/TabLable.jsx +++ /dev/null @@ -1,22 +0,0 @@ -import React from "react"; -import { withStyles } from "@material-ui/core"; -import { cn } from "@bento-core/util"; - -const tabLabel = ({ classes, title, primaryColorClass, icon }) => ( -
- {icon && icdc_carousel_tabs} - {title} -
-); - -const styles = () => ({ - defaultStyle: { - fontFamily: "Open Sans", - textTransform: "none", - fontSize: "17px", - height: "45px", - marginBottom: "-5px", - }, -}); - -export default withStyles(styles, { withTheme: true })(tabLabel); diff --git a/src/components/Tab/TabLable.tsx b/src/components/Tab/TabLable.tsx new file mode 100644 index 00000000..bb001bc5 --- /dev/null +++ b/src/components/Tab/TabLable.tsx @@ -0,0 +1,37 @@ +import React, { CSSProperties } from 'react'; +import styled from '@emotion/styled'; + +const Wrapper = styled.div<{ primaryColorStyles: CSSProperties }>( + ({ primaryColorStyles }) => { + const base: CSSProperties = { + fontFamily: 'Open Sans', + textTransform: 'none', + fontSize: '17px', + height: '45px', + marginBottom: '-5px', + }; + + return { + ...base, + ...primaryColorStyles, + }; + } +); + +interface TabLabelProps { + title: string; + primaryColorStyles: CSSProperties; + icon?: string; +} +const TabLabel: React.FC = ({ + title, + primaryColorStyles, + icon, +}) => ( + + {icon && icdc_carousel_tabs} + {title} + +); + +export default TabLabel; diff --git a/src/generated-types/gql.ts b/src/generated-types/gql.ts index 624a6d2a..0a9de381 100644 --- a/src/generated-types/gql.ts +++ b/src/generated-types/gql.ts @@ -54,8 +54,8 @@ const documents = { types.GetAllFiledsForSampleTabForSelectAllDocument, '\n query getFileIdsFromFileName(\n $file_name: [String]\n $offset: Int\n $first: Int\n $order_by: String\n ) {\n fileIdsFromFileNameDesc(\n file_name: $file_name\n offset: $offset\n first: $first\n order_by: $order_by\n ) {\n file_uuid\n }\n }\n': types.GetFileIdsFromFileNameDocument, - '\n query study($clinical_study_designation: String) {\n study(clinical_study_designation: $clinical_study_designation) {\n clinical_study_designation\n accession_id\n }\n }\n': - types.StudyDocument, + '\n query getStudyCode($clinical_study_designation: String) {\n study(clinical_study_designation: $clinical_study_designation) {\n clinical_study_designation\n accession_id\n }\n }\n': + types.GetStudyCodeDocument, '\n query createManifest(\n $uuid: [String]\n $offset: Int = 0\n $first: Int = 10\n $order_by: String = ""\n ) {\n createManifest(\n uuid: $uuid\n offset: $offset\n first: $first\n order_by: $order_by\n )\n }\n': types.CreateManifestDocument, '\n query getMyCartDataQuery(\n $uuids: [String]\n $offset: Int = 0\n $first: Int = 10\n $order_by: String = ""\n ) {\n filesInList(\n uuids: $uuids\n offset: $offset\n first: $first\n order_by: $order_by\n ) {\n file_name\n drs_uri\n study_code\n case_id\n file_type\n association\n file_description\n file_format\n file_size\n case_id\n file_uuid\n individual_id\n breed\n diagnosis\n study_code\n sample_id\n sample_site\n physical_sample_type\n general_sample_pathology\n tumor_sample_origin\n summarized_sample_type\n specific_sample_pathology\n date_of_sample_collection\n tumor_grade\n sample_chronology\n percentage_tumor\n necropsy_sample\n sample_preservation\n comment\n patient_age_at_enrollment\n sex\n neutered_indicator\n weight\n weight_unit\n primary_disease_site\n stage_of_disease\n date_of_diagnosis\n histology_cytopathology\n histological_grade\n best_response\n pathology_report\n treatment_data\n follow_up_data\n concurrent_disease\n concurrent_disease_type\n arm\n other_cases\n cohort_description\n }\n }\n': @@ -288,8 +288,8 @@ export function gql( * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( - source: '\n query study($clinical_study_designation: String) {\n study(clinical_study_designation: $clinical_study_designation) {\n clinical_study_designation\n accession_id\n }\n }\n' -): (typeof documents)['\n query study($clinical_study_designation: String) {\n study(clinical_study_designation: $clinical_study_designation) {\n clinical_study_designation\n accession_id\n }\n }\n']; + source: '\n query getStudyCode($clinical_study_designation: String) {\n study(clinical_study_designation: $clinical_study_designation) {\n clinical_study_designation\n accession_id\n }\n }\n' +): (typeof documents)['\n query getStudyCode($clinical_study_designation: String) {\n study(clinical_study_designation: $clinical_study_designation) {\n clinical_study_designation\n accession_id\n }\n }\n']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/src/generated-types/graphql.ts b/src/generated-types/graphql.ts index 4eba3731..a3a86b12 100644 --- a/src/generated-types/graphql.ts +++ b/src/generated-types/graphql.ts @@ -20803,11 +20803,11 @@ export type GetFileIdsFromFileNameQuery = { } | null> | null; }; -export type StudyQueryVariables = Exact<{ +export type GetStudyCodeQueryVariables = Exact<{ clinical_study_designation?: InputMaybe; }>; -export type StudyQuery = { +export type GetStudyCodeQuery = { __typename?: 'QueryType'; study: Array<{ __typename?: 'study'; @@ -32552,13 +32552,13 @@ export const GetFileIdsFromFileNameDocument = { GetFileIdsFromFileNameQuery, GetFileIdsFromFileNameQueryVariables >; -export const StudyDocument = { +export const GetStudyCodeDocument = { kind: 'Document', definitions: [ { kind: 'OperationDefinition', operation: 'query', - name: { kind: 'Name', value: 'study' }, + name: { kind: 'Name', value: 'getStudyCode' }, variableDefinitions: [ { kind: 'VariableDefinition', @@ -32603,7 +32603,7 @@ export const StudyDocument = { }, }, ], -} as unknown as DocumentNode; +} as unknown as DocumentNode; export const CreateManifestDocument = { kind: 'Document', definitions: [ diff --git a/src/generated-types/types.ts b/src/generated-types/types.ts index 37ce9fa0..0455556f 100644 --- a/src/generated-types/types.ts +++ b/src/generated-types/types.ts @@ -25225,11 +25225,11 @@ export type GetFileIdsFromFileNameQuery = { } | null> | null; }; -export type StudyQueryVariables = Exact<{ +export type GetStudyCodeQueryVariables = Exact<{ clinical_study_designation?: InputMaybe; }>; -export type StudyQuery = { +export type GetStudyCodeQuery = { __typename?: 'QueryType'; study: Array<{ __typename?: 'study'; diff --git a/src/pages/landing/landingView.js b/src/pages/landing/landingView.js index 837d679c..6e18dafd 100644 --- a/src/pages/landing/landingView.js +++ b/src/pages/landing/landingView.js @@ -269,7 +269,33 @@ const LandingView = ({ className={classes.carouselTabs} > ({ paddingLeft2: { paddingLeft: '2px', }, - tabPrimaryColor: { - color: '#ffffff', - fontWeight: '700', - fontSize: '14px', - height: '140px', - '& img': { - width: '90px', - display: 'block', - margin: 'auto', - }, - }, - tabHighlightColor: { - color: '#ffffff', - fontWeight: '700', - fontSize: '18px', - height: '175px', - '& img': { - margin: 'auto', - width: '113px', - display: 'block', - }, - }, - hrLine: { - display: 'none', - }, divider: { marginTop: '30px', height: '30px', diff --git a/src/pages/landing/landingView.jsx b/src/pages/landing/landingView.jsx index de16db86..9339991c 100644 --- a/src/pages/landing/landingView.jsx +++ b/src/pages/landing/landingView.jsx @@ -1,24 +1,24 @@ -import React from "react"; +import React from 'react'; import { Grid, withStyles, createTheme, MuiThemeProvider, -} from "@material-ui/core"; -import { Link } from "react-router-dom"; -import styled, { keyframes } from "styled-components"; -import { TwitterTweetEmbed } from "react-twitter-embed"; -import ReactPlayer from "react-player/youtube"; -import { cn } from "@bento-core/util"; -import lbg from "../../assets/landing/Background.png"; -import { Button } from "../../components/Wrappers/Wrappers"; -import starImg from "../../assets/landing/Spark.png"; -import flare from "../../assets/landing/flare_bkgd.png"; -import dogImg from "../../assets/landing/canine_bubble.png"; -import humanImg from "../../assets/landing/human_bubble.png"; -import Widgets from "./views/widgets"; -import Tab from "../../components/Tab/Tab"; -import TabPanel from "../../components/Tab/TabPanel"; +} from '@material-ui/core'; +import { Link } from 'react-router-dom'; +import styled, { keyframes } from 'styled-components'; +import { TwitterTweetEmbed } from 'react-twitter-embed'; +import ReactPlayer from 'react-player/youtube'; +import { cn } from '@bento-core/util'; +import lbg from '../../assets/landing/Background.png'; +import { Button } from '../../components/Wrappers/Wrappers'; +import starImg from '../../assets/landing/Spark.png'; +import flare from '../../assets/landing/flare_bkgd.png'; +import dogImg from '../../assets/landing/canine_bubble.png'; +import humanImg from '../../assets/landing/human_bubble.png'; +import Widgets from './views/widgets'; +import Tab from '../../components/Tab/Tab'; +import TabPanel from '../../components/Tab/TabPanel'; // import themes from '../../themes'; const slideDown = keyframes` @@ -102,24 +102,24 @@ const custumTheme = createTheme({ overrides: { MuiTabs: { root: { - paddingTop: "20px", - paddingBottom: "20px", - borderRight: "1px solid #ffffff", - marginLeft: "-60px", + paddingTop: '20px', + paddingBottom: '20px', + borderRight: '1px solid #ffffff', + marginLeft: '-60px', }, }, MuiTypography: { root: { - paddingRight: "50px", + paddingRight: '50px', }, }, }, }); -const LineText = (props) => { +const LineText = props => { const { text } = props; return text - .split("\n") + .split('\n') .map((str, index) =>
{str}
); }; @@ -142,7 +142,7 @@ const LineText = (props) => { const generateSpotlightContent = (template, classes, item) => { switch (template) { - case "twitter": + case 'twitter': return (
{ />
); - case "youtube": + case 'youtube': return (
{ />
); - case "imageWithCaption": + case 'imageWithCaption': return (
{

{item.caption}

); - case "noCaptionImage": + case 'noCaptionImage': return (
{ />
); - case "smallIcon": + case 'smallIcon': return (
{item.alt}
); - case "largeIcon": + case 'largeIcon': return (
{item.alt}
); default: - return ""; + return ''; } }; @@ -245,7 +245,33 @@ const LandingView = ({ classes, pageData }) => { className={classes.carouselTabs} > { generateSpotlightContent( item.content.template, classes, - item.content[item.content.template], + item.content[item.content.template] )} @@ -385,291 +411,266 @@ const LandingView = ({ classes, pageData }) => { ); }; -const styles = (theme) => ({ +const styles = theme => ({ page: { - background: "#5E8CA5", + background: '#5E8CA5', backgroundImage: `url(${lbg})`, - backgroundRepeat: "no-repeat", - backgroundSize: "cover", - backgroundAttachment: "fixed", - marginTop: "-47px", + backgroundRepeat: 'no-repeat', + backgroundSize: 'cover', + backgroundAttachment: 'fixed', + marginTop: '-47px', }, imageCaption: { - textAlign: "justify", - fontFamily: "Inter", - fontSize: "1em", - fontWeight: "300", - letterSpacing: "0", - lineHeight: "13px", - position: "relative", - bottom: "0.6em", + textAlign: 'justify', + fontFamily: 'Inter', + fontSize: '1em', + fontWeight: '300', + letterSpacing: '0', + lineHeight: '13px', + position: 'relative', + bottom: '0.6em', }, twitterEmbedContainer: { - marginTop: "6.5em", - width: "31.8em", - boxShadow: "0 25px 51px 10px #000", + marginTop: '6.5em', + width: '31.8em', + boxShadow: '0 25px 51px 10px #000', }, smallIconContainer: { - width: "300px", - marginLeft: "9em", - marginTop: "6.5em", + width: '300px', + marginLeft: '9em', + marginTop: '6.5em', }, largeIconContainer: { - width: "31.5em", - marginLeft: "5em", - marginTop: "6.5em", + width: '31.5em', + marginLeft: '5em', + marginTop: '6.5em', }, youtubeEmbedContainer: { - background: "#fff", - marginTop: "6.5em", - borderRadius: "0.5em", - width: "49em", - height: "27.8em", - boxSizing: "border-box", - border: "5px solid #fff", + background: '#fff', + marginTop: '6.5em', + borderRadius: '0.5em', + width: '49em', + height: '27.8em', + boxSizing: 'border-box', + border: '5px solid #fff', }, imageWithCaptionContainer: { - padding: "0.4em", - width: "fit-content", - display: "flex", - flexDirection: "column", - justifyContent: "center", - alignItems: "center", - marginTop: "6em", - marginLeft: "3em", + padding: '0.4em', + width: 'fit-content', + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + marginTop: '6em', + marginLeft: '3em', }, imageWithCaption: { - height: "100%", - width: "100%", + height: '100%', + width: '100%', }, noCaptionImageContainer: { - transform: "rotate(10deg)", - marginTop: "6.5em", - backgroundColor: "#fff", - display: "flex", - justifyContent: "center", - alignItems: "center", - borderRadius: "0.4em", - width: "30.5em", - height: "38em", - marginLeft: "3em", - border: "0.8em solid #fff", + transform: 'rotate(10deg)', + marginTop: '6.5em', + backgroundColor: '#fff', + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + borderRadius: '0.4em', + width: '30.5em', + height: '38em', + marginLeft: '3em', + border: '0.8em solid #fff', }, container: { - paddingTop: "10px", - fontFamily: "Raleway, sans-serif", - paddingRight: "32px", - margin: "0 auto", - paddingLeft: "32px", - paddingBottom: "90px", - "@media (min-width: 1200px)": { - width: "1200px", - paddingTop: "60px", + paddingTop: '10px', + fontFamily: 'Raleway, sans-serif', + paddingRight: '32px', + margin: '0 auto', + paddingLeft: '32px', + paddingBottom: '90px', + '@media (min-width: 1200px)': { + width: '1200px', + paddingTop: '60px', }, }, tabContainer: { - padding: "0px 0px 20px 65px", + padding: '0px 0px 20px 65px', }, carouselContent: { - maxHeight: "700px", - minHeight: "700px", + maxHeight: '700px', + minHeight: '700px', }, carouselType: { - zIndex: "10", + zIndex: '10', }, carouselTabs: { - zIndex: "10", + zIndex: '10', }, carouselTitle: { - paddingTop: "40px", - paddingBottom: "12px", - width: "180px", - color: "#FFFFFF", - fontFamily: "Raleway, sans-serif", - fontSize: "35px", - marginTop: "40px", - fontWeight: "bold", - lineHeight: "40px", + paddingTop: '40px', + paddingBottom: '12px', + width: '180px', + color: '#FFFFFF', + fontFamily: 'Raleway, sans-serif', + fontSize: '35px', + marginTop: '40px', + fontWeight: 'bold', + lineHeight: '40px', }, carouselDescription: { - width: "300px", - color: "#FFF", - fontFamily: "Raleway", - fontSize: "17px", - fontWeight: "600", - lineHeight: "22px", - marginTop: "10px", - marginBottom: "35px", + width: '300px', + color: '#FFF', + fontFamily: 'Raleway', + fontSize: '17px', + fontWeight: '600', + lineHeight: '22px', + marginTop: '10px', + marginBottom: '35px', }, spotLightcarouselTitle: { - paddingTop: "40px", - paddingBottom: "12px", - width: "400px", - color: "#FFFFFF", - fontFamily: "Raleway, sans-serif", - fontSize: "35px", - marginTop: "40px", - fontWeight: "bold", - lineHeight: "40px", + paddingTop: '40px', + paddingBottom: '12px', + width: '400px', + color: '#FFFFFF', + fontFamily: 'Raleway, sans-serif', + fontSize: '35px', + marginTop: '40px', + fontWeight: 'bold', + lineHeight: '40px', }, carouselImgContainer: { - position: "relative", - height: "800px", - maxHeight: "800px", - overflow: "hidden", - "& img": { - width: "660px", + position: 'relative', + height: '800px', + maxHeight: '800px', + overflow: 'hidden', + '& img': { + width: '660px', }, }, carouselImgContainerSpotlight: { - position: "relative", - width: "520px", - overflow: "hidden", - "& img": { - width: "520px", - marginTop: "20px", + position: 'relative', + width: '520px', + overflow: 'hidden', + '& img': { + width: '520px', + marginTop: '20px', }, }, headerButtonSection: {}, headerButton: { - borderRadius: "17px", - width: "178px", - height: "37px", - lineHeight: "18px", - fontSize: "14px", - fontWeight: "bolder", - color: "#ffffff", - textTransform: "uppercase", - backgroundColor: "#A0680D", + borderRadius: '17px', + width: '178px', + height: '37px', + lineHeight: '18px', + fontSize: '14px', + fontWeight: 'bolder', + color: '#ffffff', + textTransform: 'uppercase', + backgroundColor: '#A0680D', fontFamily: theme.custom.fontFamilySans, - textDecoration: "none", - boxShadow: "none !important", - "&:hover": { - backgroundColor: "#CB8311", - color: "#ffffff", + textDecoration: 'none', + boxShadow: 'none !important', + '&:hover': { + backgroundColor: '#CB8311', + color: '#ffffff', }, }, headerLink: { - color: "#ffffff", - textDecoration: "none", - "&:hover": { - backgroundColor: "transparent", - textDecoration: "none", + color: '#ffffff', + textDecoration: 'none', + '&:hover': { + backgroundColor: 'transparent', + textDecoration: 'none', }, }, imgDogHuman: { - width: "627px", + width: '627px', }, image: { - width: "197px", - height: "236px", + width: '197px', + height: '236px', }, content: { - width: "197px", - background: "#fff", - height: "134px", - paddingLeft: "30px", - paddingTop: "6px", + width: '197px', + background: '#fff', + height: '134px', + paddingLeft: '30px', + paddingTop: '6px', }, paddingBottom50: { - paddingBottom: "50px", + paddingBottom: '50px', }, paddingTop30: { - paddingTop: "40px", + paddingTop: '40px', }, animationContainer: { - position: "relative", - height: "800px", - maxHeight: "800px", - overflow: "hidden", + position: 'relative', + height: '800px', + maxHeight: '800px', + overflow: 'hidden', }, datadictionaryContainer: { - position: "relative", - height: "900px", - maxHeight: "800px", - overflow: "hidden", - marginLeft: "-50px", - marginRight: "-100px", + position: 'relative', + height: '900px', + maxHeight: '800px', + overflow: 'hidden', + marginLeft: '-50px', + marginRight: '-100px', // backgroundImage: `url(${pageData.tabs[1].content.image})`, // backgroundRepeat: 'no-repeat', // backgroundSize: '1200px', - "& img": { + '& img': { // width: '90%', - width: "990px", - heigh: "700px", - marginLeft: "-80px", - marginRight: "-90px", - marginTop: "-20px", + width: '990px', + heigh: '700px', + marginLeft: '-80px', + marginRight: '-90px', + marginTop: '-20px', }, }, dogImg: { - position: "absolute", - left: "60px", + position: 'absolute', + left: '60px', }, humanImg: { - position: "absolute", - left: "340px", + position: 'absolute', + left: '340px', }, starImg: { - width: "295px", - position: "absolute", - top: "-2150px", - left: "220px", + width: '295px', + position: 'absolute', + top: '-2150px', + left: '220px', }, dog: { - position: "relative", - height: "1200px", - animationFillMode: "forwards", + position: 'relative', + height: '1200px', + animationFillMode: 'forwards', }, human: { // position: 'relative', // height: '1200px', - animationFillMode: "forwards", + animationFillMode: 'forwards', }, star: { - position: "relative", - height: "1200px", - opacity: "0", - marginTop: "1200px", + position: 'relative', + height: '1200px', + opacity: '0', + marginTop: '1200px', }, paddingLeft2: { - paddingLeft: "2px", - }, - tabPrimaryColor: { - color: "#ffffff", - fontWeight: "700", - fontSize: "14px", - height: "140px", - "& img": { - width: "90px", - display: "block", - margin: "auto", - }, - }, - tabHighlightColor: { - color: "#ffffff", - fontWeight: "700", - fontSize: "18px", - height: "175px", - "& img": { - margin: "auto", - width: "113px", - display: "block", - }, - }, - hrLine: { - display: "none", + paddingLeft: '2px', }, divider: { - marginTop: "30px", - height: "30px", + marginTop: '30px', + height: '30px', }, hrDivider: { - width: "40px", - float: "left", - border: "#F5A313 2px solid", - background: "#F5A313", + width: '40px', + float: 'left', + border: '#F5A313 2px solid', + background: '#F5A313', }, }); export default withStyles(styles, { withTheme: true })(LandingView); diff --git a/src/pages/programDetail/components/photo-view.styled.js b/src/pages/programDetail/components/photo-view.styled.js index 4ebaaa2b..f69c0129 100644 --- a/src/pages/programDetail/components/photo-view.styled.js +++ b/src/pages/programDetail/components/photo-view.styled.js @@ -1,20 +1,20 @@ -import { styled } from '@material-ui/core/styles'; +import styled from '@emotion/styled'; -export const Container = styled('div')({}); +export const Container = styled.div({}); -export const DescriptionAndPhotoContainer = styled('div')({ +export const DescriptionAndPhotoContainer = styled.div({ display: 'flex', gap: '75px', }); -export const DescriptionTitle = styled('h3')({ +export const DescriptionTitle = styled.h3({ fontFamily: 'Open Sans', fontWeight: '400', fontSize: '17px', color: '#00660F', }); -export const Description = styled('p')({ +export const Description = styled.p({ fontFamily: 'Open Sans', fontWeight: '400', fontSize: '18px', @@ -22,23 +22,23 @@ export const Description = styled('p')({ color: '#000000', }); -export const DescriptionContainer = styled('div')({ +export const DescriptionContainer = styled.div({ maxWidth: '800px', marginRight: '8px', }); -export const PhotoContainer = styled('div')({ +export const PhotoContainer = styled.div({ paddingTop: '20px', }); -export const Photo = styled('img')({ +export const Photo = styled.img({ width: '462px', height: '316px', }); -export const VideoContainer = styled('div')({}); +export const VideoContainer = styled.div({}); -export const VideoTitle = styled('h3')({ +export const VideoTitle = styled.h3({ fontFamily: 'Open Sans', fontWeight: '600', fontSize: '14px', diff --git a/src/pages/programDetail/components/photo-view.jsx b/src/pages/programDetail/components/photo-view.tsx similarity index 66% rename from src/pages/programDetail/components/photo-view.jsx rename to src/pages/programDetail/components/photo-view.tsx index 48e05b02..ae666579 100644 --- a/src/pages/programDetail/components/photo-view.jsx +++ b/src/pages/programDetail/components/photo-view.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import React from 'react'; import { Container, DescriptionAndPhotoContainer, @@ -7,9 +7,18 @@ import { PhotoContainer, Photo, Description, -} from "./photo-view.styled"; +} from './photo-view.styled'; +import { Program } from '../../../generated-types/types'; -export const PhotoAndVideoView = ({ programDetail, programImage }) => { +interface PhotoAndVideoViewProps { + programDetail: Program; + programImage: string; +} + +export const PhotoAndVideoView: React.FC = ({ + programDetail, + programImage, +}) => { return ( diff --git a/src/pages/programDetail/components/video-view.styled.js b/src/pages/programDetail/components/video-view.styled.js index c7ba509a..7a1484b6 100644 --- a/src/pages/programDetail/components/video-view.styled.js +++ b/src/pages/programDetail/components/video-view.styled.js @@ -1,18 +1,18 @@ -import { styled } from '@material-ui/core/styles'; +import styled from '@emotion/styled'; -export const Container = styled('div')({ +export const Container = styled.div({ display: 'flex', gap: '75px', }); -export const DescriptionTitle = styled('h3')({ +export const DescriptionTitle = styled.h3({ fontFamily: 'Open Sans', fontWeight: '400', fontSize: '17px', color: '#00660F', }); -export const Description = styled('p')({ +export const Description = styled.p({ fontFamily: 'Open Sans', fontWeight: '400', fontSize: '18px', @@ -20,12 +20,12 @@ export const Description = styled('p')({ color: '#000000', }); -export const DescriptionContainer = styled('div')({ +export const DescriptionContainer = styled.div({ maxWidth: '800px', marginRight: '16px', }); -export const VideoContainer = styled('div')({ +export const VideoContainer = styled.div({ paddingTop: '20px', borderRadius: '8px', '& iframe': { @@ -33,7 +33,7 @@ export const VideoContainer = styled('div')({ }, }); -export const Photo = styled('img')({ +export const Photo = styled.img({ maxWidth: '462px', maxHeight: '316px', }); diff --git a/src/pages/programDetail/program-detail-controller.jsx b/src/pages/programDetail/program-detail-controller.jsx deleted file mode 100644 index cd963eb0..00000000 --- a/src/pages/programDetail/program-detail-controller.jsx +++ /dev/null @@ -1,32 +0,0 @@ -import React from "react"; -import { useQuery } from "@apollo/client"; -import CircularProgress from "@material-ui/core/CircularProgress"; -import ProgramDetailView from "./program-detail-view"; -import { Typography } from "../../components/Wrappers/Wrappers"; -import { GET_PROGRAM_DETAIL_DATA_QUERY } from "../../bento/programDetailData"; -import { convertCRDCLinksToValue } from "../../utils/utils"; - -const ProgramDetailController = ({ match }) => { - const { loading, error, data } = useQuery(GET_PROGRAM_DETAIL_DATA_QUERY, { - variables: { programTitle: match.params.id }, - }); - - if (loading) return ; - if (!data || data.program.length === 0) { - return ( - - {error - ? `An error has occurred in loading stats component: ${error}` - : "Recieved wrong data"} - - ); - } - - return ( - - ); -}; - -export default ProgramDetailController; diff --git a/src/pages/programDetail/program-detail-controller.tsx b/src/pages/programDetail/program-detail-controller.tsx new file mode 100644 index 00000000..c361ca15 --- /dev/null +++ b/src/pages/programDetail/program-detail-controller.tsx @@ -0,0 +1,45 @@ +import React from 'react'; +import { useQuery } from '@apollo/client'; +import CircularProgress from '@material-ui/core/CircularProgress'; +import ProgramDetailView from './program-detail-view'; +import { convertCRDCLinksToValue } from '../../utils/utils'; +import { RouteComponentProps } from 'react-router'; +import { Typography } from '@mui/material'; +import { + ProgramDocument, + ProgramQuery, + ProgramQueryVariables, +} from '../../generated-types/graphql'; + +interface ProgramDetailControllerProps { + match: RouteComponentProps<{ id: string }>['match']; +} +const ProgramDetailController: React.FC = ({ + match, +}) => { + const { loading, error, data } = useQuery< + ProgramQuery, + ProgramQueryVariables + >(ProgramDocument, { + variables: { programTitle: match.params.id }, + }); + + if (loading) return ; + if (!data || data.program.length === 0) { + return ( + + {error + ? `An error has occurred in loading stats component: ${error.message}` + : 'Recieved wrong data'} + + ); + } + + return ( + + ); +}; + +export default ProgramDetailController; diff --git a/src/pages/programDetail/program-detail-view.styled.js b/src/pages/programDetail/program-detail-view.styled.ts similarity index 99% rename from src/pages/programDetail/program-detail-view.styled.js rename to src/pages/programDetail/program-detail-view.styled.ts index 1b3a1e36..d570fe79 100644 --- a/src/pages/programDetail/program-detail-view.styled.js +++ b/src/pages/programDetail/program-detail-view.styled.ts @@ -17,7 +17,7 @@ export const ProgramDetailHeader = styled('div')({ export const ProgramDetailHeaderExternalLinkWrapper = styled('div')({ position: 'relative', - top: '25px', + top: '15px', }); export const IconTitleWrapper = styled('div')({ diff --git a/src/pages/programDetail/program-detail-view.jsx b/src/pages/programDetail/program-detail-view.tsx similarity index 87% rename from src/pages/programDetail/program-detail-view.jsx rename to src/pages/programDetail/program-detail-view.tsx index 26a2b688..271808dc 100644 --- a/src/pages/programDetail/program-detail-view.jsx +++ b/src/pages/programDetail/program-detail-view.tsx @@ -26,8 +26,17 @@ import { } from './program-detail-view.styled'; import PhotoView from './components/photo-view'; import VideoView from './components/video-view'; +import { ProgramQuery } from '../../generated-types/graphql'; -const ProgramDetailView = ({ classes, data }) => { +interface ProgramDetailViewProps { + data: ProgramQuery; + classes?: any; +} + +const ProgramDetailView: React.FC = ({ + classes, + data, +}) => { const { data: interOpData, isLoading, @@ -35,6 +44,7 @@ const ProgramDetailView = ({ classes, data }) => { } = useQuery({ queryKey: ['studiesByProgram'], queryFn: async () => + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument request(env.REACT_APP_INTEROP_SERVICE_URL, studiesByProgram), }); @@ -71,8 +81,11 @@ const ProgramDetailView = ({ classes, data }) => { ); const programImage = programConfig ? programConfig.secondaryImage : ''; const programVideo = programConfig?.video ? programConfig.video : ''; + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call const tableOptions = getOptions(table, classes); + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access tableOptions.downloadOptions.filename = + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call tableOptions.downloadOptions.filename.replace( 'Program', `${programDetail.program_acronym}` @@ -109,7 +122,6 @@ const ProgramDetailView = ({ classes, data }) => { {programDetail.program_external_url && ( { )} @@ -144,6 +155,7 @@ const ProgramDetailView = ({ classes, data }) => {
{ - const { loading, error, data } = useQuery(GET_STUDY_DETAIL_DATA_QUERY, { - variables: { csd: match.params.id, accessionId: match.params.id }, - }); - - // redirect url from Identifiers.org (replace accession_id with study designation - icdc_2072 - if (data && data.study) { - const { study } = data; - if ( - study.length > 0 && - study[0].clinical_study_designation !== match.params.id - ) { - const redirectUrl = "/study/".concat(study[0].clinical_study_designation); - history.push(redirectUrl); - } - if (study.length === 0) { - return ; - } - } - - if (loading) return ; - if (error) { - return ( - - {error - ? `An error has occurred in loading component: ${error}` - : "Recieved wrong data"} - - ); - } - - return ; -}; - -export default StudyDetailContainer; diff --git a/src/pages/study/studyDetailController.tsx b/src/pages/study/studyDetailController.tsx new file mode 100644 index 00000000..9a07c9cd --- /dev/null +++ b/src/pages/study/studyDetailController.tsx @@ -0,0 +1,72 @@ +import React from 'react'; +import { useQuery } from '@apollo/client'; +import { CircularProgress } from '@mui/material'; +import StudyDetailView from './studyDetailView'; +import { Typography } from '../../components/Wrappers/Wrappers'; +import Studies from '../studies/studiesController'; +import { + StudyDocument, + StudyQuery, + StudyQueryVariables, +} from '../../generated-types/graphql'; +import { RouteComponentProps } from 'react-router-dom'; + +interface MatchProps extends RouteComponentProps { + params: { + id: string; + fileType: string; + }; +} + +const StudyDetailContainer = ({ + match, + history, +}: { + match: MatchProps; + history: RouteComponentProps['history']; +}) => { + const { loading, error, data } = useQuery( + StudyDocument, + { + variables: { csd: match.params.id, accessionId: match.params.id }, + } + ); + + // redirect url from Identifiers.org (replace accession_id with study designation - icdc_2072 + if (data && data.study) { + const { study } = data; + if ( + study.length > 0 && + study[0].clinical_study_designation && + study[0].clinical_study_designation !== match.params.id + ) { + const redirectUrl = '/study/'.concat(study[0].clinical_study_designation); + history.push(redirectUrl); + } + if (study.length === 0) { + return ; + } + } + + if (loading) return ; + if (error) { + return ( + + {error + ? `An error has occurred in loading component: ${error.message}` + : 'Recieved wrong data'} + + ); + } + + return ; +}; + +export default StudyDetailContainer; diff --git a/src/pages/study/studyDetailView.jsx b/src/pages/study/studyDetailView.jsx deleted file mode 100644 index 71cc312f..00000000 --- a/src/pages/study/studyDetailView.jsx +++ /dev/null @@ -1,430 +0,0 @@ -import React from "react"; -import { - Grid, - withStyles, - Typography, - CircularProgress, -} from "@material-ui/core"; -import { Link } from "react-router-dom"; -import { request } from "graphql-request"; -import { useQuery } from "@tanstack/react-query"; -import _ from "lodash"; -import { cn } from "@bento-core/util"; -import StatsView from "../../components/Stats/StatsView"; -import { studyDisposition } from "./utils"; -import { navigatedToDashboard } from "../../utils/utils"; -import CustomBreadcrumb from "../../components/Breadcrumb/BreadcrumbView"; -import { - headerIcon, - embargoHeaderIcon, - embargoFileIcon, - tab, - studiesByProgram, -} from "../../bento/studyDetailsData"; -import Tab from "../../components/Tab/Tab"; -import Overview from "./views/overview/Overview"; -import Publication from "./views/Publication"; -import ArmsAndCohort from "./views/cohort/ArmsAndCohort"; -import StudyFiles from "./views/StudyFiles"; -import TabPanel from "../../components/Tab/TabPanel"; -import pendingHeaderIcon from "../../assets/icons/PendingRelease-icons.StudiesDetail-Main.svg"; -import pendingFileIcon from "../../assets/icons/PendingRelease-icons.StudiesDetail-Box.svg"; -import Styles from "./studyDetailsStyle"; -import StudyThemeProvider from "./studyDetailsThemeConfig"; -// import SupportingData from './views/supporting-data/supportingData'; -import SupportingData from "./views/supporting-data/SupportingDataView"; -import env from "../../utils/env"; -import useDashboardTabs from "../dashboard/components/dashboard-tabs-store"; -// import ClinicalData from './views/clinical-data/clinicalData'; -import ClinicalData from "./views/clinical-data/ClinicalDataController"; - -function hasPositiveValue(arr) { - return arr.some((obj) => Object.values(obj).some((value) => value > 0)); -} - -const processData = (names, nodeCountArg, nodeCaseCountArg) => - names.map((name) => { - const objMatcher = _.toLower(_.replace(name, " ", "_")); - const nodeCount = nodeCountArg[objMatcher]; - const nodeCaseCount = nodeCaseCountArg[objMatcher]; - - if (nodeCaseCount === 0 && nodeCount === 0) { - return { - name, - iEmpty: true, - }; - } - return { - name, - nodeCount, - nodeCaseCount, - isEmpty: false, - }; - }); - -const StudyDetailView = ({ classes, data, initTab }) => { - const [, actions] = useDashboardTabs(); - const { - data: interOpData, - isLoading, - isError, - } = useQuery({ - queryKey: ["studiesByProgram"], - queryFn: async () => - request(env.REACT_APP_INTEROP_SERVICE_URL, studiesByProgram), - }); - - const studyData = data.study[0]; - const { clinical_study_designation: studyCode } = studyData; - const diagnoses = [ - ...new Set( - studyData.cases.reduce( - (output, caseData) => - output.concat( - caseData.diagnoses - ? caseData.diagnoses.map((diagnosis) => - diagnosis.disease_term ? diagnosis.disease_term : "", - ) - : [], - ), - [], - ), - ), - ]; - const studyFileTypes = [...new Set(data.studyFiles.map((f) => f.file_type))]; - const caseFileTypes = [ - ...new Set( - data.filesOfStudy - .map((f) => f.file_type) - .filter((f) => !studyFileTypes.includes(f)), - ), - ]; - const { - clinicalDataNodeNames, - clinicalDataNodeCounts, - clinicalDataNodeCaseCounts, - } = data; - const clinicalDataTabData = { - names: clinicalDataNodeNames, - nodeCount: clinicalDataNodeCounts, - nodeCaseCount: clinicalDataNodeCaseCounts, - }; - const hasClinicalData = hasPositiveValue([ - clinicalDataNodeCounts, - clinicalDataNodeCaseCounts, - ]); - - const stat = { - numberOfStudies: 1, - numberOfCases: data.caseCountOfStudy, - numberOfSamples: data.sampleCountOfStudy, - numberOfFiles: data.fileCountOfStudy, - numberOfStudyFiles: data.fileCountOfStudyFiles, - numberOfPrograms: data.programCountOfStudy, - numberOfAliquots: data.aliquotCountOfStudy ? data.aliquotCountOfStudy : 0, - volumeOfData: data.volumeOfDataOfStudy, - }; - - const breadCrumbJson = [ - { - name: "All Studies", - to: "/programs", - isALink: true, - }, - { - name: studyData.program.program_acronym, - to: "", - isALink: false, - }, - ]; - - const [currentTab, setCurrentTab] = React.useState( - initTab === "file" ? 2 : 0, - ); - const handleTabChange = (event, value) => { - setCurrentTab(value); - }; - - const renderEmbargoHeaderIcon = () => ( - ICDC case detail header logo - ); - - const renderPendingHeaderIcon = () => ( - ICDC case detail header logo - ); - - const renderDefaultHeaderIcon = () => ( - ICDC case detail header logo - ); - - const renderEmbargoLabel = () => ( -
-

UNDER EMBARGO

- icdc embargo file icon -
- ); - - const renderPendingLabel = () => ( -
-

RELEASE PENDING

- icdc embargo file icon -
- ); - - const renderSwitch = (param, embargoFunction, pendingFunction) => { - switch (param) { - case "embargo": - return embargoFunction; - case "pending": - return pendingFunction; - default: - return undefined; - } - }; - - const getHeaderIcon = renderSwitch( - studyDisposition(studyData.study_disposition), - renderEmbargoHeaderIcon, - renderPendingHeaderIcon, - ) - ? renderSwitch( - studyDisposition(studyData.study_disposition), - renderEmbargoHeaderIcon, - renderPendingHeaderIcon, - ) - : renderDefaultHeaderIcon; - - const getLabel = renderSwitch( - studyDisposition(studyData.study_disposition), - renderEmbargoLabel, - renderPendingLabel, - ); - - if (isLoading) { - return ; - } - - if (isError) { - return ( - - An error has occurred in interoperability api - - ); - } - - const { accession_id: accessionId } = data.study[0]; - const filterStudy = `${studyCode} (${accessionId})`; - - const currentStudy = interOpData?.studiesByProgram.find( - (item) => - item.clinical_study_designation === studyData.clinical_study_designation, - ); - - let processedTabs; - if (!currentStudy) { - processedTabs = tab.items.filter( - (item) => item.label !== "SUPPORTING DATA", - ); - } else { - processedTabs = tab.items; - } - - if (!hasClinicalData) { - processedTabs = processedTabs.filter( - (item) => item.label !== "CLINICAL DATA", - ); - } - - const processedClinicalDataTabData = processData( - clinicalDataTabData.names, - clinicalDataTabData.nodeCount, - clinicalDataTabData.nodeCaseCount, - ); - - let clinicalDataNodeCount = 0; - const supportingDataCount = currentStudy?.CRDCLinks.length; - - const clinicalDataDownloadFlags = {}; - - processedClinicalDataTabData.forEach((el) => { - if (el?.isEmpty === false) { - clinicalDataNodeCount += 1; - clinicalDataDownloadFlags[el.name] = true; - } else { - clinicalDataDownloadFlags[el.name] = false; - } - }); - - const supportingDataTabIndex = processedTabs.findIndex( - (tab) => tab.label === "SUPPORTING DATA", - ); - const clinicalDataTabIndex = processedTabs.findIndex( - (tab) => tab.label === "CLINICAL DATA", - ); - - return ( - - -
-
-
- -
-
{getHeaderIcon()}
-
-
- - {" "} - Study : - {studyData.clinical_study_designation} - - {studyData.accession_id !== null && - studyData.accession_id !== undefined && - studyData.accession_id !== "" && ( - <> - | - - - {"Accession ID : "} - - - {studyData.accession_id} - - - - )} -
-
85 - ? cn(classes.headerMSubTitle, classes.lowLetterSpace) - : cn(classes.headerMSubTitle, classes.headerSubTitleCate) - } - > - {studyData.clinical_study_name} -
-
- {renderSwitch( - studyDisposition(studyData.study_disposition), - renderEmbargoLabel, - renderPendingLabel, - ) ? ( - getLabel() - ) : ( -
- - {/* View */} - ({ ...location, pathname: "/explore" })} - onClick={() => { - actions.changeCurrentTab(0); - navigatedToDashboard(filterStudy); - }} - > -
- {data.caseCountOfStudy} -
- - Associated Cases - - -
-
- )} -
- -
- - - - - -
-
- {processedTabs.map((processedTab, index) => { - switch (processedTab.label) { - case "OVERVIEW": - return ( - - - - ); - - case "ARMS & COHORTS": - return ( - - - - ); - case "STUDY FILES": - return ( - - - - ); - case "PUBLICATIONS": - return ( - - - - ); - case "CLINICAL DATA": - return ( - - {hasClinicalData && currentTab === index && ( - - )} - - ); - case "SUPPORTING DATA": - return ( - - {currentStudy && ( - - )} - - ); - default: - return null; - } - })} -
- ); -}; - -export default withStyles(Styles, { withTheme: true })(StudyDetailView); diff --git a/src/pages/study/studyDetailView.tsx b/src/pages/study/studyDetailView.tsx new file mode 100644 index 00000000..54b86e28 --- /dev/null +++ b/src/pages/study/studyDetailView.tsx @@ -0,0 +1,437 @@ +import React from 'react'; +import { Grid, Typography, CircularProgress } from '@mui/material'; +import { request } from 'graphql-request'; +import { useQuery } from '@tanstack/react-query'; +import _, { defaultTo } from 'lodash'; +import StatsView from '../../components/Stats/StatsView'; +import { studyDisposition } from './utils'; +import { navigatedToDashboard } from '../../utils/utils'; +import CustomBreadcrumb from '../../components/Breadcrumb/BreadcrumbView'; +import { + headerIcon, + embargoHeaderIcon, + embargoFileIcon, + tab, +} from '../../bento/studyDetailsData'; +import Tab from '../../components/Tab/Tab'; +import Overview from './views/overview/Overview'; +import Publication from './views/Publication'; +import ArmsAndCohort from './views/cohort/ArmsAndCohort'; +import StudyFiles from './views/StudyFiles'; +import TabPanel from '../../components/Tab/TabPanel'; +import pendingHeaderIcon from '../../assets/icons/PendingRelease-icons.StudiesDetail-Main.svg'; +import pendingFileIcon from '../../assets/icons/PendingRelease-icons.StudiesDetail-Box.svg'; +import { + AccessionLabel, + AccessionValue, + Breadcrumb, + Container, + DetailContainer, + EmbargoWrapper, + FileIcon, + Header, + HeaderAccessionItem, + HeaderBar, + HeaderButton, + HeaderButtonLink, + HeaderButtonLinkNumber, + HeaderButtonLinkSpan, + HeaderButtonLinkText, + HeaderMainTitle, + HeaderPropertyName, + HeaderTitle, + Logo, + NameWrapper, + PendingWrapper, +} from './studyDetailsStyle'; +import StudyThemeProvider from './studyDetailsThemeConfig'; +import SupportingData from './views/supporting-data/SupportingDataView'; +import env from '../../utils/env'; +import useDashboardTabs from '../dashboard/components/dashboard-tabs-store'; +import ClinicalData from './views/clinical-data/ClinicalDataController'; +import { + GetStudiesByProgramStudyDetailsDocument, + StudyQuery, +} from '../../generated-types/graphql'; +import { ClinicalDataNodeCounts } from '../../generated-types/types'; + +function hasPositiveValue(arr: (ClinicalDataNodeCounts | null | undefined)[]) { + return arr.some( + obj => + obj && Object.values(obj).some(value => value && (value as number) > 0) + ); +} + +const processData = ( + names: (string | null)[] | null | undefined, + nodeCountArg: ClinicalDataNodeCounts, + nodeCaseCountArg: ClinicalDataNodeCounts +) => + names?.map(name => { + const objMatcher = _.toLower( + _.replace(name || '', ' ', '_') + ) as keyof ClinicalDataNodeCounts; + const nodeCount = nodeCountArg[objMatcher]; + const nodeCaseCount = nodeCaseCountArg[objMatcher]; + + if (nodeCaseCount === 0 && nodeCount === 0) { + return { + name, + iEmpty: true, + }; + } + return { + name, + nodeCount, + nodeCaseCount, + isEmpty: false, + }; + }); + +interface StudyDetailViewProps { + data: StudyQuery; + initTab: string; +} + +const StudyDetailView: React.FC = ({ data, initTab }) => { + const [, actions] = useDashboardTabs(); + const { + data: interOpData, + isLoading, + isError, + } = useQuery({ + queryKey: ['studiesByProgram'], + queryFn: async () => + request( + (env as Record).REACT_APP_INTEROP_SERVICE_URL, + GetStudiesByProgramStudyDetailsDocument + ), + }); + + const studyData = data.study[0]; + const { clinical_study_designation: studyCode } = studyData; + const diagnoses = [ + ...new Set( + defaultTo(studyData.cases, []).reduce( + (output, caseData) => + output.concat( + caseData?.diagnoses + ? caseData.diagnoses.map(diagnosis => + diagnosis?.disease_term ? diagnosis.disease_term : '' + ) + : [] + ), + [] + ) + ), + ]; + const studyFileTypes = [ + ...new Set(defaultTo(data.studyFiles, []).map(f => f?.file_type)), + ]; + const caseFileTypes = [ + ...new Set( + defaultTo(data.filesOfStudy, []) + .map(f => f.file_type) + .filter(f => !studyFileTypes.includes(f)) + ), + ]; + const { + clinicalDataNodeNames, + clinicalDataNodeCounts, + clinicalDataNodeCaseCounts, + } = data; + const clinicalDataTabData = { + names: clinicalDataNodeNames, + nodeCount: clinicalDataNodeCounts, + nodeCaseCount: clinicalDataNodeCaseCounts, + }; + const hasClinicalData = hasPositiveValue([ + clinicalDataNodeCounts, + clinicalDataNodeCaseCounts, + ]); + + const stat = { + numberOfStudies: 1, + numberOfCases: data.caseCountOfStudy, + numberOfSamples: data.sampleCountOfStudy, + numberOfFiles: data.fileCountOfStudy, + numberOfStudyFiles: data.fileCountOfStudyFiles, + numberOfPrograms: data.programCountOfStudy, + numberOfAliquots: data.aliquotCountOfStudy ? data.aliquotCountOfStudy : 0, + volumeOfData: data.volumeOfDataOfStudy, + }; + + const breadCrumbJson = [ + { + name: 'All Studies', + to: '/studies', + isALink: true, + }, + { + name: studyData.program?.program_acronym, + to: `/program/${studyData.program?.program_acronym}`, + isALink: true, + }, + { + name: studyData.clinical_study_designation, + isALink: false, + }, + ]; + + const [currentTab, setCurrentTab] = React.useState( + initTab === 'file' ? 2 : 0 + ); + const handleTabChange = ( + event: React.SyntheticEvent, + value: number + ) => { + setCurrentTab(value); + }; + + const renderHeaderIcon = () => { + const disposition = studyDisposition( + defaultTo(studyData.study_disposition, '') + ); + if (disposition === 'embargo') + return Embargo Header Icon; + if (disposition === 'pending') + return Pending Header Icon; + return Default Header Icon; + }; + + const renderLabel = () => { + const disposition = studyDisposition( + defaultTo(studyData.study_disposition, '') + ); + if (disposition === 'embargo') { + return ( + +

UNDER EMBARGO

+ +
+ ); + } + if (disposition === 'pending') { + return ( + +

RELEASE PENDING

+ +
+ ); + } + return null; + }; + + if (isLoading) { + return ; + } + + if (isError) { + return ( + + An error has occurred in interoperability api + + ); + } + + const { accession_id: accessionId } = data.study[0]; + const filterStudy = `${studyCode} (${accessionId})`; + + const currentStudy = interOpData?.studiesByProgram?.find( + item => + item?.clinical_study_designation === studyData.clinical_study_designation + ); + + let processedTabs: typeof tab.items; + if (!currentStudy) { + processedTabs = tab.items.filter(item => item.label !== 'SUPPORTING DATA'); + } else { + processedTabs = tab.items; + } + + if (!hasClinicalData) { + processedTabs = processedTabs.filter( + item => item.label !== 'CLINICAL DATA' + ); + } + + const processedClinicalDataTabData = processData( + clinicalDataTabData.names, + clinicalDataTabData.nodeCount, + clinicalDataTabData.nodeCaseCount + ); + + let clinicalDataNodeCount = 0; + const supportingDataCount = currentStudy?.CRDCLinks?.length; + + const clinicalDataDownloadFlags: Record = {}; + + processedClinicalDataTabData.forEach(el => { + if (el?.isEmpty === false) { + clinicalDataNodeCount += 1; + clinicalDataDownloadFlags[el.name] = true; + } else { + clinicalDataDownloadFlags[el.name] = false; + } + }); + + const supportingDataTabIndex = processedTabs.findIndex( + tab => tab.label === 'SUPPORTING DATA' + ); + const clinicalDataTabIndex = processedTabs.findIndex( + tab => tab.label === 'CLINICAL DATA' + ); + + return ( + + + +
+ + + + {renderHeaderIcon()} + + + + {' '} + Study : + {studyData.clinical_study_designation} + + {studyData.accession_id !== null && + studyData.accession_id !== undefined && + studyData.accession_id !== '' && ( + <> + | + + {'Accession ID : '} + {studyData.accession_id} + + + )} + + 85} + > + {studyData.clinical_study_name} + + + {renderLabel() || ( + + + ({ ...location, pathname: '/explore' })} + onClick={() => { + actions.changeCurrentTab(0); + navigatedToDashboard(filterStudy); + }} + > + + {data.caseCountOfStudy} + + Associated Cases + + + + )} +
+ + + + + + + + +
+ {processedTabs.map((processedTab, index) => { + switch (processedTab.label) { + case 'OVERVIEW': + return ( + + + + ); + + case 'ARMS & COHORTS': + return ( + + + + ); + case 'STUDY FILES': + return ( + + + + ); + case 'PUBLICATIONS': + return ( + + + + ); + case 'CLINICAL DATA': + return ( + + {hasClinicalData && currentTab === index && ( + + )} + + ); + case 'SUPPORTING DATA': + return ( + + {currentStudy && ( + + )} + + ); + default: + return null; + } + })} +
+ ); +}; + +export default StudyDetailView; diff --git a/src/pages/study/studyDetailsStyle.js b/src/pages/study/studyDetailsStyle.js deleted file mode 100644 index aa3ebf5d..00000000 --- a/src/pages/study/studyDetailsStyle.js +++ /dev/null @@ -1,304 +0,0 @@ -export default (theme) => ({ - headerItems: { - width: "250px", - float: "right", - }, - headerItemAccessionId: { - paddingTop: "10px", - "& span": { - margin: "40px 20px", - color: "#5e8ca5", - }, - }, - embargoIcon: { - position: "absolute", - color: "white", - top: "-12px", - backgroundColor: "#de7328", - }, - embargo: { - color: "#BB2040", - float: "right", - background: "#F6F4F4", - width: "220px", - height: "33px", - marginTop: "25px", - fontWight: "bolder", - paddingLeft: "15px", - paddingRight: "15px", - paddingTop: "4px", - textAlign: "center", - border: "3px solid #BB2040", - "& p": { - display: "inline ! important", - fontWeight: "600", - width: "122px", - fontSize: "13px", - marginTop: "3px", - }, - }, - pending: { - color: "#6D6E71", - float: "right", - background: "#fff6f6", - width: "220px", - height: "33px", - marginTop: "25px", - fontWight: "bolder", - paddingLeft: "15px", - paddingRight: "14px", - paddingTop: "3px", - textAlign: "center", - fontFamily: "Open Sans", - border: "3px solid #F3A933", - "& p": { - display: "inline ! important", - fontWeight: "600", - width: "122px", - fontSize: "13px", - marginTop: "3px", - }, - }, - embargoFileIcon: { - width: "20px", - float: "right", - marginLeft: "5px", - }, - headerBar: { - fontWeight: "10", - color: "#5e8ca5", - margin: "0px 15px 0 15px", - }, - headerAccessionItem: { - borderRadius: "100px", - border: "2px solid", - textAlign: "center", - padding: "0 16px", - background: "rgb(203 226 238 / 11%)", - fontSize: "15px", - }, - accessionLabel: { - fontSize: "14px", - fontWeight: "600", - color: "#385966", - }, - accessionValue: { - fontSize: "13px", - fontWeight: "800", - }, - paddingLeft8: { - paddingLeft: "8px", - }, - paddingBottm17: { - paddingBottm: "17px", - }, - tabPrimaryColor: { - color: "#81a6b9", - fontWeight: "700", - }, - tabHighlightColor: { - color: "#0B3556", - fontWeight: "700", - borderBottom: "5px solid rgb(53, 185, 235)", - }, - hrLine: { - marginTop: "-2px", - marginBottom: "0", - borderTop: "1px solid #81a6b9", - }, - container: { - paddingTop: "100px", - fontFamily: "Raleway, sans-serif", - paddingLeft: "27px", - paddingRight: "27px", - }, - content: { - fontSize: "12px", - }, - warning: { - color: theme.palette.warning.main, - }, - paper: { - textAlign: "center", - }, - fakeToolbar: { - ...theme.mixins.toolbar, - }, - root: { - fontFamily: '"Open Sans", sans-serif', - fontSize: "9px", - letterSpacing: "0.025em", - color: "#000", - background: "#f3f3f3", - }, - header: { - paddingLeft: "35px", - paddingRight: "21px", - borderBottom: "#81a6b9 4px solid", - height: "130px", - margin: "auto", - }, - headerTitle: { - margin: "auto", - float: "left", - marginLeft: "110px", - width: "calc(100% - 465px)", - marginTop: "20px", - }, - headerMainTitle: { - fontFamily: theme.custom.fontFamilySans, - fontWeight: "800", - letterSpacing: "0.017em", - color: "#025F7E", - fontSize: "19px", - height: "12px", - lineHeight: "17px", - paddingLeft: "3px", - }, - headerPropertyName: { - fontWeight: "600", - color: "#025F7E", - }, - headerSubTitleCate: { - color: "#606061", - fontWeight: "400", - fontFamily: "Sans-Serif", - textTransform: "uppercase", - letterSpacing: "0.025em", - fontSize: "14px", - maxHeight: "45px", - paddingLeft: "3px", - textOverflow: "ellipsis", - paddingRight: "200px", - }, - lowLetterSpace: { - color: "#606061", - fontWeight: "400", - fontFamily: "Sans-Serif", - textTransform: "uppercase", - fontSize: "14px", - paddingLeft: "3px", - lineHeight: "17px", - textOverflow: "ellipsis", - paddingRight: "200px", - letterSpacing: "0.01em", - marginBottom: "-9px", - }, - breadCrumb: { - marginTop: "-18px", - marginBottom: "6px", - fontFamily: "Open Sans", - }, - borderRight: { - borderRight: "#81a6b9 1px solid", - }, - headerSubTitleContent: { - color: "#000000", - fontWeight: "bold", - fontFamily: theme.custom.fontFamilyRaleway, - textTransform: "uppercase", - letterSpacing: "0.023em", - fontSize: "14pt", - }, - headerMSubTitle: { - paddingTop: "8px", - }, - headerButton: { - fontFamily: theme.custom.fontFamilySans, - border: "3px solid #81a6b9", - marginTop: "15px", - float: "right", - width: "220px", - height: "33px", - textAlign: "center", - background: "#f6f4f4", - padding: "4px 10px 4px 5px", - }, - headerButtonLinkSpan: { - fontFamily: theme.custom.fontFamilySans, - width: "200px", - fontSize: "13px", - display: "inherit", - height: "15px", - marginTop: "-2px", - }, - headerButtonLinkText: { - fontFamily: theme.custom.fontFamilySans, - color: "#0B3556", - fontSize: "13px", - fontStyle: "normal", - fontWeight: "400", - lineHeight: "14px", - letterSpacing: "0.15px", - }, - headerButtonLinkNumber: { - fontFamily: "sans-serif", - fontSize: "13px", - paddingBottom: "3px", - margin: "0", - display: "inherit", - fontWeight: "900", - marginRight: "4px", - }, - logo: { - position: "absolute", - float: "left", - width: "94px", - }, - detailContainer: { - margin: "auto", - paddingTop: "30px", - paddingLeft: "50px", - paddingRight: "50px", - fontFamily: theme.custom.fontFamilySans, - letterSpacing: "0.014em", - color: "#000000", - size: "12px", - lineHeight: "23px", - }, - headerButtonLink: { - textDecoration: "none", - lineHeight: "14px", - fontWeight: "bold", - position: "relative", - top: "2px", - color: "#dc762f", - "&:hover": { - textDecoration: "none", - }, - }, - button: { - borderRadius: "22px", - padding: "0 22px", - width: "150px", - height: "35px", - lineHeight: "14px", - fontSize: "10px", - color: "#ffffff", - textTransform: "uppercase", - backgroundColor: "#ff8a00", - fontFamily: theme.custom.fontFamilySans, - "&:hover": { - backgroundColor: "#ff8a00", - }, - }, - title: { - color: "#0296c9", - fontFamily: theme.custom.fontFamilySans, - fontSize: "12px", - letterSpacing: "0.017em", - fontWeight: "600", - textTransform: "uppercase", - }, - headerNavClickableLink: { - paddingLeft: "6px", - textTransform: "none", - paddingRight: "2px", - textDecoration: "none", - color: "#3E5C6F", - fontWeight: "900", - fontFamily: "Open Sans", - fontSize: "11px", - letterSpacing: "0.025em", - }, -}); diff --git a/src/pages/study/studyDetailsStyle.tsx b/src/pages/study/studyDetailsStyle.tsx new file mode 100644 index 00000000..097d0839 --- /dev/null +++ b/src/pages/study/studyDetailsStyle.tsx @@ -0,0 +1,233 @@ +import styled from '@emotion/styled'; +import { CSSProperties } from 'react'; +import { Link } from 'react-router-dom'; + +export const Container = styled.div({ + paddingTop: '100px', + fontFamily: 'Raleway, sans-serif', + paddingLeft: '27px', + paddingRight: '27px', +}); + +export const Header = styled.div({ + paddingLeft: '35px', + paddingRight: '21px', + borderBottom: '#81a6b9 4px solid', + height: '130px', + margin: 'auto', +}); + +export const Breadcrumb = styled.div({ + marginTop: '-18px', + marginBottom: '6px', + fontFamily: 'Open Sans', +}); + +export const Logo = styled.div({ + position: 'absolute', + float: 'left', + width: '94px', +}); + +export const HeaderTitle = styled.div({ + margin: 'auto', + float: 'left', + marginLeft: '110px', + width: 'calc(100% - 465px)', + marginTop: '20px', +}); + +export const HeaderMainTitle = styled.div({ + fontFamily: 'Open Sans', + fontWeight: '800', + letterSpacing: '0.017em', + color: '#025F7E', + fontSize: '19px', + height: '12px', + lineHeight: '17px', + paddingLeft: '3px', +}); + +export const HeaderPropertyName = styled.span({ + fontWeight: '600', + color: '#025F7E', +}); + +export const HeaderBar = styled.span({ + fontWeight: '10', + color: '#5e8ca5', + margin: '0px 15px 0 15px', +}); + +export const HeaderAccessionItem = styled.span({ + borderRadius: '100px', + border: '2px solid', + textAlign: 'center', + padding: '0 16px', + background: 'rgb(203 226 238 / 11%)', + fontSize: '15px', +}); + +export const AccessionLabel = styled.span({ + fontSize: '14px', + fontWeight: '600', + color: '#385966', +}); + +export const AccessionValue = styled.span({ + fontSize: '13px', + fontWeight: '800', +}); + +export const NameWrapper = styled.div<{ isLong: boolean }>(({ isLong }) => { + const base: CSSProperties = { + paddingTop: '8px', + }; + + if (isLong) { + return { + ...base, + color: '#606061', + fontWeight: '400', + fontFamily: 'Sans-Serif', + textTransform: 'uppercase', + fontSize: '14px', + paddingLeft: '3px', + lineHeight: '17px', + textOverflow: 'ellipsis', + paddingRight: '200px', + letterSpacing: '0.01em', + marginBottom: '-9px', + }; + } + + return { + ...base, + color: '#606061', + fontWeight: '400', + fontFamily: 'Sans-Serif', + textTransform: 'uppercase', + letterSpacing: '0.025em', + fontSize: '14px', + maxHeight: '45px', + paddingLeft: '3px', + textOverflow: 'ellipsis', + paddingRight: '200px', + }; +}); + +export const EmbargoWrapper = styled.div({ + color: '#BB2040', + float: 'right', + background: '#F6F4F4', + width: '220px', + height: '33px', + marginTop: '25px', + fontWight: 'bolder', + paddingLeft: '15px', + paddingRight: '15px', + paddingTop: '4px', + textAlign: 'center', + border: '3px solid #BB2040', + '& p': { + display: 'inline ! important', + fontWeight: '600', + width: '122px', + fontSize: '13px', + marginTop: '3px', + }, +}); + +export const FileIcon = styled.img({ + width: '20px', + float: 'right', + marginLeft: '5px', +}); + +export const PendingWrapper = styled.div({ + color: '#6D6E71', + float: 'right', + background: '#fff6f6', + width: '220px', + height: '33px', + marginTop: '25px', + fontWight: 'bolder', + paddingLeft: '15px', + paddingRight: '14px', + paddingTop: '3px', + textAlign: 'center', + fontFamily: 'Open Sans', + border: '3px solid #F3A933', + '& p': { + display: 'inline ! important', + fontWeight: '600', + width: '122px', + fontSize: '13px', + marginTop: '3px', + }, +}); + +export const HeaderButton = styled.div({ + fontFamily: 'Open Sans', + border: '3px solid #81a6b9', + marginTop: '15px', + float: 'right', + width: '220px', + height: '33px', + textAlign: 'center', + background: '#f6f4f4', + padding: '4px 10px 4px 5px', +}); + +export const HeaderButtonLinkSpan = styled.span({ + fontFamily: 'Open Sans', + width: '200px', + fontSize: '13px', + display: 'inherit', + height: '15px', + marginTop: '-2px', +}); + +export const HeaderButtonLink = styled(Link)({ + textDecoration: 'none', + lineHeight: '14px', + fontWeight: 'bold', + position: 'relative', + top: '2px', + color: '#dc762f', + '&:hover': { + textDecoration: 'none', + }, +}); + +export const HeaderButtonLinkNumber = styled.div({ + fontFamily: 'sans-serif', + fontSize: '13px', + paddingBottom: '3px', + margin: '0', + display: 'inherit', + fontWeight: '900', + marginRight: '4px', +}); + +export const HeaderButtonLinkText = styled.span({ + fontFamily: 'Open Sans', + color: '#0B3556', + fontSize: '13px', + fontStyle: 'normal', + fontWeight: '400', + lineHeight: '14px', + letterSpacing: '0.15px', +}); + +export const DetailContainer = styled.div({ + margin: 'auto', + paddingTop: '30px', + paddingLeft: '50px', + paddingRight: '50px', + fontFamily: 'Open Sans', + letterSpacing: '0.014em', + color: '#000000', + size: '12px', + lineHeight: '23px', +}); diff --git a/tsconfig.json b/tsconfig.json index 3b1a0c3c..e84aa2c7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,6 +5,7 @@ "sourceMap": true, "module": "es6", "target": "es5", + "downlevelIteration": true, "jsx": "react", "allowSyntheticDefaultImports": true, "esModuleInterop": true, From 9ff2d1398c774bf62afb0ecc9bf7b4fd38975444 Mon Sep 17 00:00:00 2001 From: Toyo Date: Fri, 15 Nov 2024 10:44:20 -0600 Subject: [PATCH 4/8] program details design qa --- src/components/Breadcrumb/BreadcrumbView.tsx | 13 +++---- src/pages/study/studyDetailController.tsx | 2 +- src/pages/study/studyDetailView.tsx | 20 ++++++----- webpack/common.js | 37 +++++++++----------- 4 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/components/Breadcrumb/BreadcrumbView.tsx b/src/components/Breadcrumb/BreadcrumbView.tsx index 943dc9d6..d46e1ad8 100644 --- a/src/components/Breadcrumb/BreadcrumbView.tsx +++ b/src/components/Breadcrumb/BreadcrumbView.tsx @@ -5,12 +5,13 @@ import { Container, } from './BreadcrumbView.styled'; +export interface BreadcrumbData { + name: string | undefined | null; + to?: string; + isALink: boolean; +} interface CustomBreadcrumbProps { - data: { - name: string; - to: string; - isALink: boolean; - }[]; + data: BreadcrumbData[]; } const CustomBreadcrumb: React.FC = ({ data }) => { @@ -18,7 +19,7 @@ const CustomBreadcrumb: React.FC = ({ data }) => { {data .reduce((acc, current, index) => { - if (current.isALink) { + if (current.isALink && current.to) { acc.push( {current.name} diff --git a/src/pages/study/studyDetailController.tsx b/src/pages/study/studyDetailController.tsx index 9a07c9cd..cd20262d 100644 --- a/src/pages/study/studyDetailController.tsx +++ b/src/pages/study/studyDetailController.tsx @@ -49,7 +49,7 @@ const StudyDetailContainer = ({ } if (loading) return ; - if (error) { + if (error || !data) { return ( names?.map(name => { const objMatcher = _.toLower( _.replace(name || '', ' ', '_') ) as keyof ClinicalDataNodeCounts; - const nodeCount = nodeCountArg[objMatcher]; - const nodeCaseCount = nodeCaseCountArg[objMatcher]; + const nodeCount = nodeCountArg?.[objMatcher]; + const nodeCaseCount = nodeCaseCountArg?.[objMatcher]; if (nodeCaseCount === 0 && nodeCount === 0) { return { @@ -161,7 +163,7 @@ const StudyDetailView: React.FC = ({ data, initTab }) => { volumeOfData: data.volumeOfDataOfStudy, }; - const breadCrumbJson = [ + const breadCrumbJson: BreadcrumbData[] = [ { name: 'All Studies', to: '/studies', @@ -266,12 +268,12 @@ const StudyDetailView: React.FC = ({ data, initTab }) => { const clinicalDataDownloadFlags: Record = {}; - processedClinicalDataTabData.forEach(el => { + defaultTo(processedClinicalDataTabData, []).forEach(el => { if (el?.isEmpty === false) { clinicalDataNodeCount += 1; - clinicalDataDownloadFlags[el.name] = true; + clinicalDataDownloadFlags[el?.name || ''] = true; } else { - clinicalDataDownloadFlags[el.name] = false; + clinicalDataDownloadFlags[el?.name || ''] = false; } }); diff --git a/webpack/common.js b/webpack/common.js index abaf0d23..36d69013 100644 --- a/webpack/common.js +++ b/webpack/common.js @@ -1,23 +1,20 @@ -const path = require("path"); -const HtmlWebpackPlugin = require("html-webpack-plugin"); -const webpack = require("webpack"); -const paths = require("../config/paths"); +const path = require('path'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const webpack = require('webpack'); +const paths = require('../config/paths'); module.exports = { entry: paths.appIndexTs, - cache: { - type: "filesystem", // Caches files to disk for persistent builds - }, module: { rules: [ { test: /\.tsx?$/, use: [ { - loader: "thread-loader", // Use multi-threading to improve performance + loader: 'thread-loader', // Use multi-threading to improve performance }, { - loader: "ts-loader", + loader: 'ts-loader', options: { happyPackMode: true, // Works with thread-loader for faster builds }, @@ -29,41 +26,41 @@ module.exports = { test: /\.(?:js|mjs|cjs|jsx)$/, exclude: paths.appNodeModules, use: { - loader: "babel-loader", + loader: 'babel-loader', options: { cacheDirectory: true, // Enable Babel caching - presets: [["@babel/preset-env", { targets: "defaults" }]], + presets: [['@babel/preset-env', { targets: 'defaults' }]], }, }, }, { test: /\.(woff(2)?|ttf|eot|png|jpe?g|svg|JPG)(\?v=\d+\.\d+\.\d+)?$/, - type: "asset/resource", + type: 'asset/resource', generator: { - filename: "assets/[hash][ext][query]", + filename: 'assets/[hash][ext][query]', }, }, ], }, resolve: { alias: { - "@components": path.resolve(__dirname, "../src/components"), - "@assets": path.resolve(__dirname, "../src/assets"), + '@components': path.resolve(__dirname, '../src/components'), + '@assets': path.resolve(__dirname, '../src/assets'), }, - extensions: [".mjs", ".js", ".mts", ".ts", ".jsx", ".tsx", ".json"], + extensions: ['.mjs', '.js', '.mts', '.ts', '.jsx', '.tsx', '.json'], }, plugins: [ new HtmlWebpackPlugin({ template: paths.appHtml, }), new webpack.DefinePlugin({ - "process.env.NODE_ENV": JSON.stringify(process.env.NODE_ENV), // Injects environment variables + 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV), // Injects environment variables }), ], output: { - filename: "[name].[contenthash].js", - path: path.resolve(__dirname, "../dist"), + filename: '[name].[contenthash].js', + path: path.resolve(__dirname, '../dist'), clean: true, - publicPath: "/", + publicPath: '/', }, }; From ea3a1280b45f6545cd7a9b2d639c46da3fb3f5ba Mon Sep 17 00:00:00 2001 From: Toyo Date: Fri, 15 Nov 2024 10:49:59 -0600 Subject: [PATCH 5/8] program details design qa --- .../programDetail/program-detail-view.tsx | 2 - src/pages/programDetail/programDetailView.jsx | 435 ------------------ 2 files changed, 437 deletions(-) delete mode 100644 src/pages/programDetail/programDetailView.jsx diff --git a/src/pages/programDetail/program-detail-view.tsx b/src/pages/programDetail/program-detail-view.tsx index c594e4a0..64e50cbf 100644 --- a/src/pages/programDetail/program-detail-view.tsx +++ b/src/pages/programDetail/program-detail-view.tsx @@ -71,8 +71,6 @@ const ProgramDetailView: React.FC = ({ }, { name: programDetail.program_acronym, - to: '/explore', - isALink: true, }, ]; diff --git a/src/pages/programDetail/programDetailView.jsx b/src/pages/programDetail/programDetailView.jsx deleted file mode 100644 index d58ebc75..00000000 --- a/src/pages/programDetail/programDetailView.jsx +++ /dev/null @@ -1,435 +0,0 @@ -import React from "react"; -import { - Grid, - withStyles, - Typography, - CircularProgress, -} from "@material-ui/core"; -import { request, gql } from "graphql-request"; -import { useQuery } from "@tanstack/react-query"; -import { cn, getOptions } from "@bento-core/util"; -import StatsView from "../../components/Stats/StatsView"; -import { table, pageData, tableLayOut } from "../../bento/programDetailData"; -import { pageData as ProgramImageConfig } from "../../bento/programData"; -import CustomBreadcrumb from "../../components/Breadcrumb/BreadcrumbView"; -import env from "../../utils/env"; -import { TableContextProvider } from "../../bento-core"; -import StudiesTable from "../../components/DataAvailabilityTable/StudiesTable"; - -const studiesByProgram = gql` - query getStudiesByProgramProgramDetail { - studiesByProgram { - clinical_study_designation - CRDCLinks { - url - repository - } - numberOfCRDCNodes - numberOfImageCollections - } - } -`; - -const ProgramView = ({ classes, data }) => { - const { - data: interOpData, - isLoading, - isError, - } = useQuery({ - queryKey: ["studiesByProgram"], - queryFn: async () => - request(env.REACT_APP_INTEROP_SERVICE_URL, studiesByProgram), - }); - - const programDetail = data.program[0]; - - const stat = { - numberOfStudies: data.studyCountOfProgram, - numberOfCases: data.caseCountOfProgram, - numberOfSamples: data.sampleCountOfProgram, - numberOfFiles: data.fileCountOfProgram, - numberOfStudyFiles: data.studyFileCountOfProgram, - numberOfPrograms: 1, - numberOfAliquots: data.aliquotCountOfProgram - ? data.aliquotCountOfProgram - : 0, - volumeOfData: data.volumeOfDataOfProgram, - }; - - const breadCrumbJson = [ - { - name: "ALL PROGRAMS", - to: "/programs", - isALink: true, - }, - { - name: programDetail.program_acronym, - to: "/explore", - isALink: true, - }, - ]; - - const programConfig = ProgramImageConfig[programDetail.program_acronym]; - const programImage = programConfig ? programConfig.secondaryImage : ""; - const tableOptions = getOptions(table, classes); - tableOptions.downloadOptions.filename = - tableOptions.downloadOptions.filename.replace( - "Program", - `${programDetail.program_acronym}`, - ); - - if (isLoading) { - return ; - } - - if (isError) { - return ( - - An error has occurred in interoperability api - - ); - } - - return ( - <> - - -
-
-
- ICDC case detail header logo -
-
-
- - {`${programDetail.program_name} (${programDetail.program_acronym})`} - -
- -
-
- -
- - - - {programDetail.program_full_description - ? programDetail.program_full_description - .split("**") - .map((item, i) =>

{item}

) - : null} -
-
- {programConfig && ( - - dog for program detail - - )} -
-
-
-
- -
- STUDIES IN THIS PROGRAM -
- - - - - -
-
- - ); -}; - -const styles = (theme) => ({ - crdcLinks: { - paddingLeft: "1em", - textAlign: "left", - }, - legend: { - zIndex: "1000", - }, - legendTooltip: { - position: "relative", - bottom: "0.5em", - }, - dalIcon: { - width: "25px", - }, - dataAvailIndicator: { - textAlign: "center", - }, - dataAvailIndicatorIcon: { - color: "#1A89C4", - height: "13px", - width: "13px", - }, - crdcLinkStyle: { - color: "#DC762F", - }, - dataAvailIndicatorImage: { - height: "20px", - width: "20px", - }, - defaultDalTooltip: { - maxWidth: "none", - }, - externalLinkDalTooltip: { - maxWidth: "none", - padding: "0px 12px", - }, - link: { - fontWeight: "bold", - fontFamily: "Open Sans", - fontSize: "15px", - textDecoration: "underline", - lineSpacing: "19pt", - color: "#DC762F", - float: "left", - marginRight: "5px", - "&:hover": { - textDecoration: "underline", - }, - }, - embargoFileIcon: { - width: "20px", - }, - embargoToolTip: { - visibility: "hidden", - fontWeight: "500", - zIndex: "400", - background: "#fff", - border: "2px solid #A61401", - borderRadius: "7px", - fontSize: "12px", - width: "110px", - padding: "5px 0px 0px 2px", - marginTop: "-30px", - marginLeft: "-100px", - }, - buttonCaseNumb: { - background: "none!important", - border: "none", - padding: "0!important", - textDecoration: "underline", - fontWeight: "bold", - fontSize: "15px", - lineSpacing: "19pt", - color: "#DC762F", - cursor: "pointer", - "&:hover": { - textDecoration: "underline", - }, - }, - dogImage: { - width: "100%", - paddingTop: "15px", - }, - paddingLeft8: { - paddingLeft: "12px", - }, - paddingBottm17: { - paddingBottm: "17px", - }, - container: { - paddingTop: "120px", - paddingBottom: "45px", - fontFamily: "Raleway, sans-serif", - background: "white", - }, - content: { - fontSize: "16px", - lineHeight: "25px", - }, - marginTop18: { - marginTop: "18px", - }, - warning: { - color: theme.palette.warning.main, - }, - table: { - paddingTop: "0px !important", - }, - paper: { - textAlign: "center", - }, - fakeToolbar: { - ...theme.mixins.toolbar, - }, - root: { - textTransform: "uppercase", - fontFamily: '"Open Sans", sans-serif', - fontSize: "9px", - letterSpacing: "0.025em", - color: "#000", - }, - header: { - paddingLeft: "32px", - paddingRight: "32px", - borderBottom: "#81a6b9 4px solid", - height: "76px", - margin: "auto 33px", - }, - - headerTitle: { - maxWidth: theme.custom.maxContentWidth, - margin: "auto", - float: "left", - marginLeft: "110px", - paddingLeft: "3px", - }, - headerMainTitle: { - fontFamily: theme.custom.fontFamilySans, - fontWeight: "bold", - letterSpacing: "0.017em", - color: "#1db634", - fontSize: "30px", - lineHeight: "18px", - paddingLeft: "5px", - paddingBottom: "8px", - }, - headerMSubTitle: { - paddingTop: "8px", - }, - headerSubTitleCate: { - color: "#606061", - fontWeight: "bold", - fontFamily: theme.custom.fontFamilyRaleway, - textTransform: "uppercase", - letterSpacing: "0.023em", - fontSize: "12px", - maxHeight: "30px", - overflow: "hidden", - paddingLeft: "3px", - }, - headerSubTitleContent: { - color: "#000000", - fontWeight: "bold", - fontFamily: theme.custom.fontFamilyRaleway, - textTransform: "uppercase", - letterSpacing: "0.023em", - fontSize: "12px", - paddingLeft: "3px", - }, - - logo: { - position: "absolute", - float: "left", - marginTop: "-14px", - width: "96px", - }, - detailContainer: { - margin: "auto", - paddingTop: "12px", - paddingLeft: "87px", - paddingRight: "30px", - fontFamily: theme.custom.fontFamilySans, - letterSpacing: "0.014em", - color: "#000000", - size: "12px", - lineHeight: "23px", - paddingBottom: "40px", - }, - detailContainerHeader: { - textTransform: "uppercase", - fontFamily: theme.custom.fontFamilySans, - fontSize: "17px", - letterSpacing: "0.017em", - color: "#1db634", - }, - detailContainerBottom: { - borderTop: "#81a6b9 1px solid", - marginTop: "8px", - padding: " 35px 2px 63px 2px !important", - }, - detailContainerLeft: { - padding: "20px 25px 30px 0px !important", - minHeight: "100px", - maxHeight: "450px", - overflowY: "auto", - }, - detailContainerRight: { - padding: "20px 15px 30px 20px !important", - minHeight: "330px", - }, - tableContainer: { - background: "#f3f3f3", - }, - tableHeader: { - paddingLeft: "74px", - }, - tableDiv: { - padding: "31px 34px 80px 54px", - }, - headerButtonLink: { - textDecoration: "none", - }, - button: { - borderRadius: "10px", - width: "178px", - height: "27px", - lineHeight: "18px", - fontSize: "10px", - color: "#ffffff", - textTransform: "uppercase", - backgroundColor: "#ff8a00", - fontFamily: theme.custom.fontFamilySans, - "&:hover": { - backgroundColor: "#ff8a00", - }, - }, - detailContainerItems: { - paddingTop: "5px", - paddingLeft: "17px", - }, - title: { - color: "#9d9d9c", - fontFamily: theme.custom.fontFamilySans, - fontSize: "12px", - letterSpacing: "0.017em", - fontWeight: "600", - textTransform: "uppercase", - }, - tableTitle: { - fontFamily: theme.custom.fontFamilySans, - fontSize: "17px", - letterSpacing: "0.017em", - color: "#1db634", - }, -}); - -export default withStyles(styles, { withTheme: true })(ProgramView); From 151f367bc078d8cd76a0e779d3077163356171e2 Mon Sep 17 00:00:00 2001 From: Toyo Date: Mon, 18 Nov 2024 10:21:19 -0600 Subject: [PATCH 6/8] address PR comment and more TS conversions --- src/bento/programDetailData.js | 241 ------------- src/bento/programDetailData.ts | 325 ++++++++++++++++++ .../DataAvailabilityTable/StudiesTable.jsx | 31 -- .../DataAvailabilityTable/StudiesTable.tsx | 49 +++ .../programDetail/program-detail-view.tsx | 12 +- 5 files changed, 382 insertions(+), 276 deletions(-) delete mode 100644 src/bento/programDetailData.js create mode 100644 src/bento/programDetailData.ts delete mode 100644 src/components/DataAvailabilityTable/StudiesTable.jsx create mode 100644 src/components/DataAvailabilityTable/StudiesTable.tsx diff --git a/src/bento/programDetailData.js b/src/bento/programDetailData.js deleted file mode 100644 index 9e959e8d..00000000 --- a/src/bento/programDetailData.js +++ /dev/null @@ -1,241 +0,0 @@ -import gql from "graphql-tag"; -import { cellTypes, headerTypes } from "../bento-core"; - -// --------------- Left Pannel configuration -------------- -// A maximum of 6 leftPanelattributes are allowed -const pageData = { - externalLinkIcon: - "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/programs-listing-external-link-icon.svg", - headerIcon: - "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/program-listing-header.svg", - embargoFileIcon: - "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/Icon-Embargo-File.svg", - pendingFileIcon: - "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/PendingRelease-icons.Studies-Listing.svg", -}; - -// --------------- Table configuration -------------- -const table = { - display: true, - name: "ICDC_Program_Studies", - download: true, - viewColumns: true, - title: "STUDIES IN THIS PROGRAM", - selectableRows: false, - legendTooltip: true, - extendedViewConfig: { - download: { - customDownload: false, - downloadFileName: "ICDC_Program_Studies_download", - downloadCsv: "Download Table Contents As CSV", - }, - manageViewColumns: { - title: "View Columns", - }, - }, - defaultSortField: "clinical_study_designation", - defaultSortDirection: "asc", - columns: [ - { - dataField: "program_id", - header: "Program", - display: true, - tooltipText: "sort", - role: cellTypes.DISPLAY, - }, - { - dataField: "clinical_study_designation", - header: "Study Code", - display: true, - cellType: cellTypes.CUSTOM_ELEM, - linkAttr: { - rootPath: "/study", - pathParams: ["clinical_study_designation"], - }, - tooltipText: "sort", - }, - { - dataField: "clinical_study_name", - header: "Study Name", - display: true, - tooltipText: "sort", - role: cellTypes.DISPLAY, - }, - { - dataField: "numberOfCaseFiles", - header: "Case File(s)", - display: true, - columnDefaultValues: { - 0: "Not Applicable", - }, - role: cellTypes.DISPLAY, - cellType: cellTypes.CUSTOM_ELEM, - headerType: headerTypes.CUSTOM_ELEM, - icon: "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/CaseFiles_.svg", - tooltipText: "sort", - }, - { - dataField: "numberOfStudyFiles", - header: "Study File(s)", - display: true, - columnDefaultValues: { - 0: "Not Applicable", - }, - role: cellTypes.DISPLAY, - cellType: cellTypes.CUSTOM_ELEM, - headerType: headerTypes.CUSTOM_ELEM, - tooltipText: "sort", - icon: "https://raw.githubusercontent.com/CBIIT/datacommons-assets/master/icdc/images/svgs/StudyFiles_.svg", - }, - { - dataField: "numberOfImageCollections", - header: "Image Collection(s)", - display: true, - columnDefaultValues: { - 0: "Not Applicable", - }, - role: cellTypes.DISPLAY, - cellType: cellTypes.CUSTOM_ELEM, - headerType: headerTypes.CUSTOM_ELEM, - tooltipText: "sort", - icon: "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/StudyDataAvail-ImageCollection.svg", - }, - { - dataField: "numberOfPublications", - header: "Publication(s)", - display: true, - columnDefaultValues: { - 0: "Not Applicable", - }, - role: cellTypes.DISPLAY, - cellType: cellTypes.CUSTOM_ELEM, - headerType: headerTypes.CUSTOM_ELEM, - tooltipText: "sort", - icon: "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/StudyDataAvail-Publications.svg", - }, - { - dataField: "CRDCLinks", - header: "Additional CRDC Nodes", - display: true, - columnDefaultValues: { - 0: "Not Applicable", - }, - role: cellTypes.DISPLAY, - cellType: cellTypes.CUSTOM_ELEM, - headerType: headerTypes.CUSTOM_ELEM, - tooltipText: "sort", - icon: "https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/StudyDataAvail-CRDCnodes.svg", - }, - { - dataField: "clinical_study_type", - header: "Study Type", - role: cellTypes.DISPLAY, - display: true, - tooltipText: "sort", - }, - { - dataField: "accession_id", - header: "Accession ID", - display: true, - role: cellTypes.DISPLAY, - tooltipText: "sort", - }, - { - dataField: "study_disposition", - header: "Study Disposition", - display: false, - role: cellTypes.DISPLAY, - tooltipText: "sort", - }, - { - dataField: "numberOfCases", - header: "Cases", - link: "/explore", - display: true, - cellType: cellTypes.CUSTOM_ELEM, - role: cellTypes.DISPLAY, - tooltipText: "sort", - }, - ], - columnGroups: [ - { - clsName: "other_columns_left", - columnIndexes: [0, 2], - }, - { - clsName: "data_availability", - custom: true, - columnIndexes: [3, 7], - }, - { - clsName: "other_columns_right", - columnIndexes: [8, 11], - }, - ], - tableMsg: { - noMatch: "Sorry, no matching records found", - }, -}; - -export const tableLayOut = [ - { - container: "paginatedTable", - paginatedTable: true, - }, -]; - -const textLabels = { - textLabels: { - toolbar: { - search: "Search", - downloadCsv: "Download Table Contents As CSV", - print: "Print", - viewColumns: "View Columns", - filterTable: "Filter Table", - }, - }, -}; - -// --------------- GraphQL query - Retrieve program details -------------- -const GET_PROGRAM_DETAIL_DATA_QUERY = gql` - query program($programTitle: String!) { - sampleCountOfProgram(program_id: $programTitle) - fileCountOfProgram(program_id: $programTitle) - studyFileCountOfProgram(program_id: $programTitle) - aliquotCountOfProgram(program_id: $programTitle) - studyCountOfProgram(program_id: $programTitle) - caseCountOfProgram(program_id: $programTitle) - volumeOfDataOfProgram(program_id: $programTitle) - - program(program_acronym: $programTitle) { - program_name - program_acronym - program_short_description - program_full_description - program_external_url - program_sort_order - } - studiesByProgramId(program_id: $programTitle) { - program_id - clinical_study_id - clinical_study_designation - clinical_study_name - clinical_study_description - clinical_study_type - numberOfCases - numberOfCaseFiles - numberOfStudyFiles - numberOfImageCollections - numberOfPublications - accession_id - study_disposition - numberOfCRDCNodes - CRDCLinks { - text - url - } - } - } -`; - -export { pageData, GET_PROGRAM_DETAIL_DATA_QUERY, table, textLabels }; diff --git a/src/bento/programDetailData.ts b/src/bento/programDetailData.ts new file mode 100644 index 00000000..5c05adcf --- /dev/null +++ b/src/bento/programDetailData.ts @@ -0,0 +1,325 @@ +import gql from 'graphql-tag'; +import { cellTypes, headerTypes } from '../bento-core'; + +export interface TableLayoutItem { + container: string; + paginatedTable: boolean; +} + +interface ExtendedViewConfig { + download: { + customDownload: boolean; + downloadFileName: string; + downloadCsv: string; + }; + manageViewColumns: { + title: string; + }; +} + +interface LinkAttributes { + rootPath: string; + pathParams: string[]; +} + +interface Column { + dataField: string; + header: string; + display: boolean; + tooltipText?: string; + role?: string; // Replace `string` with the specific type for `cellTypes.DISPLAY` if available. + cellType?: string; // Replace `string` with the specific type for `cellTypes.CUSTOM_ELEM` if available. + linkAttr?: LinkAttributes; + columnDefaultValues?: Record; + headerType?: string; // Replace `string` with the specific type for `headerTypes.CUSTOM_ELEM` if available. + icon?: string; + link?: string; +} + +interface ColumnGroup { + clsName: string; + custom?: boolean; + columnIndexes: number[]; +} + +interface TableMessage { + noMatch: string; +} + +export interface TableConfig { + display: boolean; + name: string; + download: boolean; + viewColumns: boolean; + title: string; + selectableRows: boolean; + legendTooltip: boolean; + extendedViewConfig: ExtendedViewConfig; + defaultSortField: string; + defaultSortDirection: string; + columns: Column[]; + columnGroups: ColumnGroup[]; + tableMsg: TableMessage; +} + +// --------------- Left Pannel configuration -------------- +// A maximum of 6 leftPanelattributes are allowed +const pageData = { + externalLinkIcon: + 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/programs-listing-external-link-icon.svg', + headerIcon: + 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/program-listing-header.svg', + embargoFileIcon: + 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/Icon-Embargo-File.svg', + pendingFileIcon: + 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/PendingRelease-icons.Studies-Listing.svg', +} as const; + +// --------------- Table configuration -------------- +const table: TableConfig = { + display: true, + name: 'ICDC_Program_Studies', + download: true, + viewColumns: true, + title: 'STUDIES IN THIS PROGRAM', + selectableRows: false, + legendTooltip: true, + extendedViewConfig: { + download: { + customDownload: false, + downloadFileName: 'ICDC_Program_Studies_download', + downloadCsv: 'Download Table Contents As CSV', + }, + manageViewColumns: { + title: 'View Columns', + }, + }, + defaultSortField: 'clinical_study_designation', + defaultSortDirection: 'asc', + columns: [ + { + dataField: 'program_id', + header: 'Program', + display: true, + tooltipText: 'sort', + /* eslint-disable-next-line */ + role: cellTypes.DISPLAY, + }, + { + dataField: 'clinical_study_designation', + header: 'Study Code', + display: true, + /* eslint-disable-next-line */ + cellType: cellTypes.CUSTOM_ELEM, + linkAttr: { + rootPath: '/study', + pathParams: ['clinical_study_designation'], + }, + tooltipText: 'sort', + }, + { + dataField: 'clinical_study_name', + header: 'Study Name', + display: true, + tooltipText: 'sort', + /* eslint-disable-next-line */ + role: cellTypes.DISPLAY, + }, + { + dataField: 'numberOfCaseFiles', + header: 'Case File(s)', + display: true, + columnDefaultValues: { + 0: 'Not Applicable', + }, + /* eslint-disable-next-line */ + role: cellTypes.DISPLAY, + /* eslint-disable-next-line */ + cellType: cellTypes.CUSTOM_ELEM, + /* eslint-disable-next-line */ + headerType: headerTypes.CUSTOM_ELEM, + icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/CaseFiles_.svg', + tooltipText: 'sort', + }, + { + dataField: 'numberOfStudyFiles', + header: 'Study File(s)', + display: true, + columnDefaultValues: { + 0: 'Not Applicable', + }, + /* eslint-disable-next-line */ + role: cellTypes.DISPLAY, + /* eslint-disable-next-line */ + cellType: cellTypes.CUSTOM_ELEM, + /* eslint-disable-next-line */ + headerType: headerTypes.CUSTOM_ELEM, + tooltipText: 'sort', + icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/master/icdc/images/svgs/StudyFiles_.svg', + }, + { + dataField: 'numberOfImageCollections', + header: 'Image Collection(s)', + display: true, + columnDefaultValues: { + 0: 'Not Applicable', + }, + /* eslint-disable-next-line */ + role: cellTypes.DISPLAY, + /* eslint-disable-next-line */ + cellType: cellTypes.CUSTOM_ELEM, + /* eslint-disable-next-line */ + headerType: headerTypes.CUSTOM_ELEM, + tooltipText: 'sort', + icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/StudyDataAvail-ImageCollection.svg', + }, + { + dataField: 'numberOfPublications', + header: 'Publication(s)', + display: true, + columnDefaultValues: { + 0: 'Not Applicable', + }, + /* eslint-disable-next-line */ + role: cellTypes.DISPLAY, + /* eslint-disable-next-line */ + cellType: cellTypes.CUSTOM_ELEM, + /* eslint-disable-next-line */ + headerType: headerTypes.CUSTOM_ELEM, + tooltipText: 'sort', + icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/StudyDataAvail-Publications.svg', + }, + { + dataField: 'CRDCLinks', + header: 'Additional CRDC Nodes', + display: true, + columnDefaultValues: { + 0: 'Not Applicable', + }, + /* eslint-disable-next-line */ + role: cellTypes.DISPLAY, + /* eslint-disable-next-line */ + cellType: cellTypes.CUSTOM_ELEM, + /* eslint-disable-next-line */ + headerType: headerTypes.CUSTOM_ELEM, + tooltipText: 'sort', + icon: 'https://raw.githubusercontent.com/CBIIT/datacommons-assets/main/icdc/images/svgs/StudyDataAvail-CRDCnodes.svg', + }, + { + dataField: 'clinical_study_type', + header: 'Study Type', + /* eslint-disable-next-line */ + role: cellTypes.DISPLAY, + display: true, + tooltipText: 'sort', + }, + { + dataField: 'accession_id', + header: 'Accession ID', + display: true, + /* eslint-disable-next-line */ + role: cellTypes.DISPLAY, + tooltipText: 'sort', + }, + { + dataField: 'study_disposition', + header: 'Study Disposition', + display: false, + /* eslint-disable-next-line */ + role: cellTypes.DISPLAY, + tooltipText: 'sort', + }, + { + dataField: 'numberOfCases', + header: 'Cases', + link: '/explore', + display: true, + /* eslint-disable-next-line */ + cellType: cellTypes.CUSTOM_ELEM, + /* eslint-disable-next-line */ + role: cellTypes.DISPLAY, + tooltipText: 'sort', + }, + ], + columnGroups: [ + { + clsName: 'other_columns_left', + columnIndexes: [0, 2], + }, + { + clsName: 'data_availability', + custom: true, + columnIndexes: [3, 7], + }, + { + clsName: 'other_columns_right', + columnIndexes: [8, 11], + }, + ], + tableMsg: { + noMatch: 'Sorry, no matching records found', + }, +}; + +export const tableLayOut: TableLayoutItem[] = [ + { + container: 'paginatedTable', + paginatedTable: true, + }, +]; + +const textLabels = { + textLabels: { + toolbar: { + search: 'Search', + downloadCsv: 'Download Table Contents As CSV', + print: 'Print', + viewColumns: 'View Columns', + filterTable: 'Filter Table', + }, + }, +}; + +// --------------- GraphQL query - Retrieve program details -------------- +const GET_PROGRAM_DETAIL_DATA_QUERY = gql` + query program($programTitle: String!) { + sampleCountOfProgram(program_id: $programTitle) + fileCountOfProgram(program_id: $programTitle) + studyFileCountOfProgram(program_id: $programTitle) + aliquotCountOfProgram(program_id: $programTitle) + studyCountOfProgram(program_id: $programTitle) + caseCountOfProgram(program_id: $programTitle) + volumeOfDataOfProgram(program_id: $programTitle) + + program(program_acronym: $programTitle) { + program_name + program_acronym + program_short_description + program_full_description + program_external_url + program_sort_order + } + studiesByProgramId(program_id: $programTitle) { + program_id + clinical_study_id + clinical_study_designation + clinical_study_name + clinical_study_description + clinical_study_type + numberOfCases + numberOfCaseFiles + numberOfStudyFiles + numberOfImageCollections + numberOfPublications + accession_id + study_disposition + numberOfCRDCNodes + CRDCLinks { + text + url + } + } + } +`; + +export { pageData, GET_PROGRAM_DETAIL_DATA_QUERY, table, textLabels }; diff --git a/src/components/DataAvailabilityTable/StudiesTable.jsx b/src/components/DataAvailabilityTable/StudiesTable.jsx deleted file mode 100644 index a120eb96..00000000 --- a/src/components/DataAvailabilityTable/StudiesTable.jsx +++ /dev/null @@ -1,31 +0,0 @@ -import React, { useContext } from "react"; -import PaginatedTableView from "../PaginatedTable/TableView"; -import { TableContext } from "../../bento-core"; -import { themeConfig } from "./tableThemeConfig"; - -const StudiesTable = ({ - table, - tableLayOut, - data, - interOpData, - rowsPerPage, -}) => { - // access table state - const { context } = useContext(TableContext); - return ( - - ); -}; - -export default StudiesTable; diff --git a/src/components/DataAvailabilityTable/StudiesTable.tsx b/src/components/DataAvailabilityTable/StudiesTable.tsx new file mode 100644 index 00000000..abee9c93 --- /dev/null +++ b/src/components/DataAvailabilityTable/StudiesTable.tsx @@ -0,0 +1,49 @@ +import React, { useContext } from 'react'; +import PaginatedTableView from '../PaginatedTable/TableView'; +import { TableContext } from '../../bento-core'; +import { themeConfig } from './tableThemeConfig'; +import { + TableConfig as TableConfigPD, + TableLayoutItem, +} from '../../bento/programDetailData'; +import { + GetStudiesByProgramProgramDetailTwoQuery, + StudyOfProgram, +} from '../../generated-types/types'; +import { TableConfig as TableConfigDAL } from './types'; + +interface StudiesTableProps { + table: TableConfigPD; + tableLayOut: TableLayoutItem[]; + interOpData: GetStudiesByProgramProgramDetailTwoQuery; + rowsPerPage?: number; + data: StudyOfProgram[]; +} +const StudiesTable: React.FC = ({ + table, + tableLayOut, + data, + interOpData, + rowsPerPage, +}) => { + // access table state + const { context } = useContext<{ context: TableConfigDAL }>( + TableContext as never + ); + return ( + + ); +}; + +export default StudiesTable; diff --git a/src/pages/programDetail/program-detail-view.tsx b/src/pages/programDetail/program-detail-view.tsx index 64e50cbf..24c874dc 100644 --- a/src/pages/programDetail/program-detail-view.tsx +++ b/src/pages/programDetail/program-detail-view.tsx @@ -10,7 +10,6 @@ import CustomBreadcrumb from '../../components/Breadcrumb/BreadcrumbView'; import env from '../../utils/env'; import { TableContextProvider } from '../../bento-core'; import StudiesTable from '../../components/DataAvailabilityTable/StudiesTable'; -import { studiesByProgram } from './queries/program-detail'; import { ProgramDetailContainer, ProgramDetailHeader, @@ -26,7 +25,10 @@ import { } from './program-detail-view.styled'; import PhotoView from './components/photo-view'; import VideoView from './components/video-view'; -import { ProgramQuery } from '../../generated-types/graphql'; +import { + GetStudiesByProgramProgramDetailTwoDocument, + ProgramQuery, +} from '../../generated-types/graphql'; interface ProgramDetailViewProps { data: ProgramQuery; @@ -45,7 +47,10 @@ const ProgramDetailView: React.FC = ({ queryKey: ['studiesByProgram'], queryFn: async () => // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument - request(env.REACT_APP_INTEROP_SERVICE_URL, studiesByProgram), + request( + env.REACT_APP_INTEROP_SERVICE_URL, + GetStudiesByProgramProgramDetailTwoDocument + ), }); const programDetail = data.program[0]; @@ -153,7 +158,6 @@ const ProgramDetailView: React.FC = ({
Date: Mon, 18 Nov 2024 10:27:48 -0600 Subject: [PATCH 7/8] address PR comment and more TS conversions --- src/components/DataAvailabilityTable/StudiesTable.tsx | 2 +- src/pages/programDetail/program-detail-view.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/DataAvailabilityTable/StudiesTable.tsx b/src/components/DataAvailabilityTable/StudiesTable.tsx index abee9c93..6220e970 100644 --- a/src/components/DataAvailabilityTable/StudiesTable.tsx +++ b/src/components/DataAvailabilityTable/StudiesTable.tsx @@ -28,7 +28,7 @@ const StudiesTable: React.FC = ({ }) => { // access table state const { context } = useContext<{ context: TableConfigDAL }>( - TableContext as never + TableContext as React.Context<{ context: TableConfigDAL }> ); return ( = ({ } = useQuery({ queryKey: ['studiesByProgram'], queryFn: async () => - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument request( + /* eslint-disable-next-line */ env.REACT_APP_INTEROP_SERVICE_URL, GetStudiesByProgramProgramDetailTwoDocument ), From 5b03d9a1c1525623647a13eaea0b89c3a35a81d1 Mon Sep 17 00:00:00 2001 From: Toyo Date: Mon, 18 Nov 2024 10:37:11 -0600 Subject: [PATCH 8/8] address PR comment and more TS conversions --- src/components/DataAvailabilityTable/tableThemeConfig.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/DataAvailabilityTable/tableThemeConfig.ts b/src/components/DataAvailabilityTable/tableThemeConfig.ts index 6dae2846..8afdf2ac 100644 --- a/src/components/DataAvailabilityTable/tableThemeConfig.ts +++ b/src/components/DataAvailabilityTable/tableThemeConfig.ts @@ -82,7 +82,7 @@ export const tblBody = (table: TableConfig) => { }, body: { color: '#323232', - padding: '15px', + padding: '15px 32px', ...customDataAvailColStyles, }, }, @@ -298,7 +298,6 @@ export const extendedView = { maxHeight: '2px', minHeight: '0px', '& button': { - marginBottom: '-50px', zIndex: '10', '&.download-icon': { marginRight: '-10px',