From 63f6a497cba61299a1c24aa96795a55479740ac6 Mon Sep 17 00:00:00 2001 From: Jacob Richman Date: Sun, 22 Jun 2025 00:54:10 +0000 Subject: Jacob314/overflow notification and one MaxSizedBox bug fix (#1288) --- packages/cli/src/ui/contexts/OverflowContext.tsx | 87 ++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 packages/cli/src/ui/contexts/OverflowContext.tsx (limited to 'packages/cli/src/ui/contexts') diff --git a/packages/cli/src/ui/contexts/OverflowContext.tsx b/packages/cli/src/ui/contexts/OverflowContext.tsx new file mode 100644 index 00000000..f21a4e0f --- /dev/null +++ b/packages/cli/src/ui/contexts/OverflowContext.tsx @@ -0,0 +1,87 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import React, { + createContext, + useContext, + useState, + useCallback, + useMemo, +} from 'react'; + +interface OverflowState { + overflowingIds: ReadonlySet; +} + +interface OverflowActions { + addOverflowingId: (id: string) => void; + removeOverflowingId: (id: string) => void; +} + +const OverflowStateContext = createContext( + undefined, +); + +const OverflowActionsContext = createContext( + undefined, +); + +export const useOverflowState = (): OverflowState | undefined => + useContext(OverflowStateContext); + +export const useOverflowActions = (): OverflowActions | undefined => + useContext(OverflowActionsContext); + +export const OverflowProvider: React.FC<{ children: React.ReactNode }> = ({ + children, +}) => { + const [overflowingIds, setOverflowingIds] = useState(new Set()); + + const addOverflowingId = useCallback((id: string) => { + setOverflowingIds((prevIds) => { + if (prevIds.has(id)) { + return prevIds; + } + const newIds = new Set(prevIds); + newIds.add(id); + return newIds; + }); + }, []); + + const removeOverflowingId = useCallback((id: string) => { + setOverflowingIds((prevIds) => { + if (!prevIds.has(id)) { + return prevIds; + } + const newIds = new Set(prevIds); + newIds.delete(id); + return newIds; + }); + }, []); + + const stateValue = useMemo( + () => ({ + overflowingIds, + }), + [overflowingIds], + ); + + const actionsValue = useMemo( + () => ({ + addOverflowingId, + removeOverflowingId, + }), + [addOverflowingId, removeOverflowingId], + ); + + return ( + + + {children} + + + ); +}; -- cgit v1.2.3