import { Divider } from 'components/divider'; import { Fab } from 'components/fab'; import { Row } from 'components/layout'; import { Bold, Coding, Italic, Link, StrikeThrough, UnderLine } from 'icons'; import { Dispatch, FC, SetStateAction, useCallback, useMemo } from 'react'; export const TopAction: FC = ({ isBold, isItalic, isUnderLine, isStrikeThrough, isCode, setIsBold, setIsItalic, setIsUnderLine, setIsStrikeThrough, setIsCode, openLink, }) => { const handleBold = useCallback(() => { setIsBold(!isBold); }, [isBold, setIsBold]); const handleItalic = useCallback(() => { setIsItalic(!isItalic); }, [isItalic, setIsItalic]); const handleUnderLine = useCallback(() => { setIsUnderLine(!isUnderLine); if (!isUnderLine) { setIsStrikeThrough(false); } }, [isUnderLine, setIsStrikeThrough, setIsUnderLine]); const handleStrikeThrough = useCallback(() => { setIsStrikeThrough(!isStrikeThrough); if (!isStrikeThrough) { setIsUnderLine(false); } }, [isStrikeThrough, setIsStrikeThrough, setIsUnderLine]); const handleCode = useCallback(() => { setIsCode(!isCode); }, [isCode, setIsCode]); const actions = useMemo( () => [ { id: 1, isActive: isBold, onPress: handleBold, icon: , }, { id: 2, isActive: isItalic, onPress: handleItalic, icon: , }, { id: 3, isActive: isUnderLine, onPress: handleUnderLine, icon: , }, { id: 4, isActive: isStrikeThrough, onPress: handleStrikeThrough, icon: , }, ], [ handleBold, handleItalic, handleStrikeThrough, handleUnderLine, isBold, isItalic, isStrikeThrough, isUnderLine, ] ); const linkActions = useMemo( () => [ { id: 5, onPress: openLink, isActive: false, icon: , }, { id: 6, onPress: handleCode, isActive: isCode, icon: , }, ], [handleCode, openLink, isCode] ); const getColor = useCallback((isActive) => { return isActive ? 'base-02' : 'transparent'; }, []); return ( {actions.map((action) => ( ))} {linkActions.map((action) => ( ))} ); }; export interface TopActionProps { isBold: boolean; isItalic: boolean; isCode: boolean; isUnderLine: boolean; isStrikeThrough: boolean; openLink: () => void; setIsBold: Dispatch>; setIsItalic: Dispatch>; setIsCode: Dispatch>; setIsUnderLine: Dispatch>; setIsStrikeThrough: Dispatch>; }