/* * QQQ - Low-code Application Framework for Engineers. * Copyright (C) 2021-2022. Kingsrook, LLC * 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States * contact@kingsrook.com * https://github.com/Kingsrook/ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ import {QTableMetaData} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QTableMetaData"; import {QTableSection} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QTableSection"; import {QWidgetMetaData} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QWidgetMetaData"; import {Box} from "@mui/material"; import Card from "@mui/material/Card"; import Icon from "@mui/material/Icon"; import {Theme} from "@mui/material/styles"; import React from "react"; import {HashLink} from "react-router-hash-link"; import MDTypography from "qqq/components/legacy/MDTypography"; interface Props { tableSections: QTableSection[]; metaData?: QTableMetaData; widgetMetaDataList?: QWidgetMetaData[]; light?: boolean; stickyTop?: string; } QRecordSidebar.defaultProps = { light: false, stickyTop: "1rem", }; interface SidebarEntry { iconName: string; name: string; label: string; } function QRecordSidebar({tableSections, widgetMetaDataList, light, stickyTop}: Props): JSX.Element { ///////////////////////////////////////////////////////// // insert widgets after identity (first) table section // ///////////////////////////////////////////////////////// const sidebarEntries = [] as SidebarEntry[]; tableSections && tableSections.forEach((section, index) => { if(section.isHidden) { return; } if (index === 1 && widgetMetaDataList) { widgetMetaDataList.forEach((widget) => { sidebarEntries.push({iconName: widget.icon, name: widget.name, label: widget.label}); }); } sidebarEntries.push({iconName: section.iconName, name: section.name, label: section.label}); }); return ( { sidebarEntries ? sidebarEntries.map((entry: SidebarEntry, key: number) => ( document.getElementById(entry.name).scrollIntoView()} sx={{cursor: "pointer"}}> ({ display: "flex", alignItems: "center", borderRadius: borderRadius.md, padding: `${pxToRem(10)} ${pxToRem(16)}`, transition: transitions.create("background-color", { easing: transitions.easing.easeInOut, duration: transitions.duration.shorter, }), "&:hover": { backgroundColor: light.main, }, })} > {entry.iconName} {entry.label} )) : null } ); } export default QRecordSidebar;