mirror of
https://github.com/QwenLM/qwen-code.git
synced 2025-12-21 01:07:46 +00:00
Jacob314/overflow notification and one MaxSizedBox bug fix (#1288)
This commit is contained in:
87
packages/cli/src/ui/contexts/OverflowContext.tsx
Normal file
87
packages/cli/src/ui/contexts/OverflowContext.tsx
Normal file
@@ -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<string>;
|
||||
}
|
||||
|
||||
interface OverflowActions {
|
||||
addOverflowingId: (id: string) => void;
|
||||
removeOverflowingId: (id: string) => void;
|
||||
}
|
||||
|
||||
const OverflowStateContext = createContext<OverflowState | undefined>(
|
||||
undefined,
|
||||
);
|
||||
|
||||
const OverflowActionsContext = createContext<OverflowActions | undefined>(
|
||||
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<string>());
|
||||
|
||||
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 (
|
||||
<OverflowStateContext.Provider value={stateValue}>
|
||||
<OverflowActionsContext.Provider value={actionsValue}>
|
||||
{children}
|
||||
</OverflowActionsContext.Provider>
|
||||
</OverflowStateContext.Provider>
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user