Local modifications to ClusterLabs/Anvil by Alteeve
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

54 lines
1.2 KiB

import { FC, ReactNode, useCallback, useContext, useMemo } from 'react';
import { DialogContext } from './Dialog';
import IconButton from '../IconButton';
import { PanelHeader } from '../Panels';
import sxstring from '../../lib/sxstring';
import { HeaderText } from '../Text';
const DialogHeader: FC<DialogHeaderProps> = (props) => {
const {
children,
onClose = ({ handlers: { base } }, ...args) => base?.call(null, ...args),
showClose,
} = props;
const dialogContext = useContext(DialogContext);
const closeHandler = useCallback<ButtonClickEventHandler>(
(...args) =>
onClose(
{
handlers: {
base: () => {
dialogContext?.setOpen(false);
},
},
},
...args,
),
[dialogContext, onClose],
);
const title = useMemo<ReactNode>(
() => sxstring(children, HeaderText),
[children],
);
const close = useMemo<ReactNode>(
() =>
showClose && (
<IconButton mapPreset="close" onClick={closeHandler} size="small" />
),
[closeHandler, showClose],
);
return (
<PanelHeader>
{title}
{close}
</PanelHeader>
);
};
export default DialogHeader;