Skip to content

Commit

Permalink
fix(core): split view reordering crash (#9461)
Browse files Browse the repository at this point in the history
a workaround fix AF-1940
  • Loading branch information
pengx17 committed Dec 31, 2024
1 parent 43adb85 commit e3d6813
Showing 1 changed file with 26 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
import { useService } from '@toeverything/infra';
import clsx from 'clsx';
import type { HTMLAttributes, RefObject } from 'react';
import { useCallback, useMemo, useRef, useState } from 'react';
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
import { createPortal } from 'react-dom';

import type { View } from '../../entities/view';
Expand Down Expand Up @@ -50,6 +50,10 @@ export const SplitView = ({
const { appSettings } = useAppSettingHelper();
const workbench = useService(WorkbenchService).workbench;

// blocksuite's lit host element has an issue on remounting.
// Add a workaround here to force remounting after dropping.
const [visible, setVisibility] = useState(true);

const sensors = useSensors(
useSensor(
PointerSensor,
Expand Down Expand Up @@ -102,11 +106,25 @@ export const SplitView = ({
const fromIndex = views.findIndex(v => v.id === active.id);
const toIndex = views.findIndex(v => v.id === over?.id);
onMove?.(fromIndex, toIndex);
setVisibility(false);
}
},
[onMove, views]
);

useEffect(() => {
if (!visible) {
const timeoutId = setTimeout(() => {
setVisibility(true);
}, 0);

return () => {
clearTimeout(timeoutId);
};
}
return;
}, [visible]);

return (
<div
ref={rootRef}
Expand All @@ -121,11 +139,13 @@ export const SplitView = ({
onDragEnd={handleDragEnd}
>
<SortableContext items={views} strategy={horizontalListSortingStrategy}>
{views.map((view, index) => (
<SplitViewPanel view={view} key={view.id} setSlots={setSlots}>
{resizeHandleRenderer(view, index)}
</SplitViewPanel>
))}
{views.map((view, index) =>
visible ? (
<SplitViewPanel view={view} key={view.id} setSlots={setSlots}>
{resizeHandleRenderer(view, index)}
</SplitViewPanel>
) : null
)}
</SortableContext>
</DndContext>

Expand Down

0 comments on commit e3d6813

Please sign in to comment.