import React, { useCallback, useMemo } from "react"; import KeyboardArrowDownIcon from "@mui/icons-material/KeyboardArrowDown"; import KeyboardArrowUpIcon from "@mui/icons-material/KeyboardArrowUp"; import { FormControlLabel } from "@mui/material"; import MuiCardHeader, { CardHeaderProps as MuiCardHeaderProps } from "@mui/material/CardHeader"; import IconButton from "@mui/material/IconButton"; import Stack from "@mui/material/Stack"; import Switch from "@mui/material/Switch"; import Typography from "@mui/material/Typography"; import { useCardContext } from "../../contexts/CardContext"; import { useI18n } from "../../contexts/I18nContext"; export interface CardHeaderProps extends MuiCardHeaderProps { title: string; } export const CardHeader: React.FC = ({ title, children, ...props }) => { const { alwaysEditable, isCompact, isEditing, isEditable, isDisabled, setIsEditing, isCollapsible, isOpen, setIsOpen, } = useCardContext(); const { t } = useI18n(); // TODO Implement dialog for cancel when changed values // const openDialog = useDialog(); const handleEdit = useCallback(() => { setIsEditing((isEditing) => !isEditing); }, [setIsEditing]); const handleCollapse = useCallback(() => { setIsOpen((isOpen) => !isOpen); }, [setIsOpen]); const showToggle = useMemo( () => Boolean(isEditable && !alwaysEditable), [isEditable, isCollapsible], ); return ( {showToggle && ( } label={ {t("Edit")} } /> )} {isCollapsible && ( {isOpen ? : } )} } component="header" sx={{ px: isCompact ? 2 : 3, pt: 2, pb: isCompact ? 1 : 2, ...props.sx, }} title={ {title} {children} } /> ); }; export default CardHeader;