mirror of
https://github.com/siteboon/claudecodeui.git
synced 2026-06-30 17:12:58 +08:00
refactor(ToolRenderer): ensure stable hook order
This commit is contained in:
@@ -54,8 +54,6 @@ export const ToolRenderer: React.FC<ToolRendererProps> = memo(({
|
|||||||
const config = getToolConfig(toolName);
|
const config = getToolConfig(toolName);
|
||||||
const displayConfig: any = mode === 'input' ? config.input : config.result;
|
const displayConfig: any = mode === 'input' ? config.input : config.result;
|
||||||
|
|
||||||
if (!displayConfig) return null;
|
|
||||||
|
|
||||||
const parsedData = useMemo(() => {
|
const parsedData = useMemo(() => {
|
||||||
try {
|
try {
|
||||||
const rawData = mode === 'input' ? toolInput : toolResult;
|
const rawData = mode === 'input' ? toolInput : toolResult;
|
||||||
@@ -66,12 +64,15 @@ export const ToolRenderer: React.FC<ToolRendererProps> = memo(({
|
|||||||
}, [mode, toolInput, toolResult]);
|
}, [mode, toolInput, toolResult]);
|
||||||
|
|
||||||
const handleAction = useCallback(() => {
|
const handleAction = useCallback(() => {
|
||||||
if (displayConfig.action === 'open-file' && onFileOpen) {
|
if (displayConfig?.action === 'open-file' && onFileOpen) {
|
||||||
const value = displayConfig.getValue?.(parsedData) || '';
|
const value = displayConfig.getValue?.(parsedData) || '';
|
||||||
onFileOpen(value);
|
onFileOpen(value);
|
||||||
}
|
}
|
||||||
}, [displayConfig, parsedData, onFileOpen]);
|
}, [displayConfig, parsedData, onFileOpen]);
|
||||||
|
|
||||||
|
// Keep hooks above this guard so hook call order stays stable across renders.
|
||||||
|
if (!displayConfig) return null;
|
||||||
|
|
||||||
if (displayConfig.type === 'one-line') {
|
if (displayConfig.type === 'one-line') {
|
||||||
const value = displayConfig.getValue?.(parsedData) || '';
|
const value = displayConfig.getValue?.(parsedData) || '';
|
||||||
const secondary = displayConfig.getSecondary?.(parsedData);
|
const secondary = displayConfig.getSecondary?.(parsedData);
|
||||||
|
|||||||
Reference in New Issue
Block a user