From 72006ef64dd410e93a59260af75c23c24f2918c3 Mon Sep 17 00:00:00 2001 From: George Sumpster <gsumpster@gmail.com> Date: Fri, 27 Jan 2023 13:45:48 -0800 Subject: [PATCH] Add 'View on Hover' to Category Notes for #563 (#579) * add hover state to NotesButton * switch NotesButton editability to a ternary * fix new lines, adjust padding on textarea * add workBreak to text styling * Update packages/loot-design/src/components/NotesButton.js Co-authored-by: Jed Fox <git@jedfox.com> * change wordBreak to overflowWrap --------- Co-authored-by: Jed Fox <git@jedfox.com> --- .../loot-design/src/components/NotesButton.js | 57 +++++++++++++------ 1 file changed, 41 insertions(+), 16 deletions(-) diff --git a/packages/loot-design/src/components/NotesButton.js b/packages/loot-design/src/components/NotesButton.js index c077e0dd9..ccd10f72f 100644 --- a/packages/loot-design/src/components/NotesButton.js +++ b/packages/loot-design/src/components/NotesButton.js @@ -9,9 +9,10 @@ import { send } from 'loot-core/src/platform/client/fetch'; import { colors } from '../style'; import CustomNotesPaper from '../svg/v2/CustomNotesPaper'; -import { View, Button, Tooltip, useTooltip } from './common'; +import { View, Button, Tooltip, useTooltip, Text } from './common'; export function NotesTooltip({ + editable, defaultNotes, position = 'bottom-left', onClose @@ -20,22 +21,39 @@ export function NotesTooltip({ let inputRef = React.createRef(); useEffect(() => { - inputRef.current.focus(); - }, []); + if (editable) { + inputRef.current.focus(); + } + }, [inputRef, editable]); return ( <Tooltip position={position} onClose={() => onClose(notes)}> - <textarea - ref={inputRef} - {...css({ - border: '1px solid ' + colors.border, - minWidth: 300, - minHeight: 120, - outline: 'none' - })} - value={notes || ''} - onChange={e => setNotes(e.target.value)} - ></textarea> + {editable ? ( + <textarea + ref={inputRef} + {...css({ + border: '1px solid ' + colors.border, + padding: 7, + minWidth: 300, + minHeight: 120, + outline: 'none' + })} + value={notes || ''} + onChange={e => setNotes(e.target.value)} + ></textarea> + ) : ( + <Text + {...css({ + display: 'block', + maxWidth: 225, + padding: 8, + whiteSpace: 'pre-wrap', + overflowWrap: 'break-word' + })} + > + {notes} + </Text> + )} </Tooltip> ); } @@ -48,6 +66,7 @@ export default function NotesButton({ tooltipPosition, style }) { + let [hover, setHover] = useState(false); let tooltip = useTooltip(); let { data } = useLiveQuery( useMemo(() => q('notes').filter({ id }).select('*'), [id]) @@ -60,11 +79,14 @@ export default function NotesButton({ tooltip.close(); } + // This account for both the tooltip hover, and editing tooltip + const tooltipOpen = tooltip.isOpen || (hasNotes && hover); + return ( <View style={[ { flexShrink: 0 }, - tooltip.isOpen && { + tooltipOpen && { '& button, & .hover-visible': { display: 'flex', opacity: 1, @@ -75,6 +97,8 @@ export default function NotesButton({ '& button, & .hover-visible': { display: 'flex', opacity: 1 } } ]} + onMouseEnter={() => setHover(true)} + onMouseLeave={() => setHover(false)} > <Button bare @@ -84,8 +108,9 @@ export default function NotesButton({ > <CustomNotesPaper style={{ width, height, color: 'currentColor' }} /> </Button> - {tooltip.isOpen && ( + {tooltipOpen && ( <NotesTooltip + editable={tooltip.isOpen} defaultNotes={note} position={tooltipPosition} onClose={onClose} -- GitLab