Skip to content

Commit ef252b9

Browse files
committed
Disable targets that are not in the navigation index
1 parent 4418dbd commit ef252b9

2 files changed

Lines changed: 17 additions & 3 deletions

File tree

apps/lite/ui/src/routes/project/$id/workspace/OperationTarget.tsx

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,15 @@ const getOperationTypeFromData = (data: DropData): OperationType | null => {
4040
);
4141
};
4242

43-
const useOperationDropTarget = ({ target, projectId }: { target: Operand; projectId: string }) => {
43+
const useOperationDropTarget = ({
44+
enabled,
45+
target,
46+
projectId,
47+
}: {
48+
enabled: boolean;
49+
target: Operand;
50+
projectId: string;
51+
}) => {
4452
const dispatch = useAppDispatch();
4553
const { mutate: runOperation } = useMutation(useRunOperationMutationOptions());
4654
const dropRef = useRef<HTMLElement>(null);
@@ -64,13 +72,16 @@ const useOperationDropTarget = ({ target, projectId }: { target: Operand; projec
6472
);
6573
});
6674

75+
const canDrop = useEffectEvent(() => enabled);
76+
6777
useEffect(() => {
6878
const element = dropRef.current;
6979
if (!element) return;
7080

7181
return dropTargetForElements({
7282
element,
7383
getData,
84+
canDrop,
7485
onDrag: (args) => {
7586
const [innerMost] = args.location.current.dropTargets;
7687
const isActiveDropTarget = innerMost?.element === args.self.element;
@@ -129,13 +140,14 @@ const useOperationDropTarget = ({ target, projectId }: { target: Operand; projec
129140

130141
export const OperationTarget: FC<
131142
{
143+
enabled: boolean;
132144
target: Operand;
133145
projectId: string;
134146
isSelected: boolean;
135147
isAbsorptionTarget: boolean;
136148
} & useRender.ComponentProps<"div">
137-
> = ({ target, projectId, isSelected, isAbsorptionTarget, render, ...props }) => {
138-
const { dropRef } = useOperationDropTarget({ target, projectId });
149+
> = ({ enabled, target, projectId, isSelected, isAbsorptionTarget, render, ...props }) => {
150+
const { dropRef } = useOperationDropTarget({ enabled, target, projectId });
139151
const outlineMode = useAppSelector((state) => selectProjectOutlineModeState(state, projectId));
140152

141153
const insertTargetOperationType = Match.value(outlineMode).pipe(

apps/lite/ui/src/routes/project/$id/workspace/OutlinePanel.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,7 @@ const OperandC: FC<
425425
const isSelected = useIsSelected({ projectId, operand });
426426
const absorptionTargetKeys = assert(use(AbsorptionTargetKeysContext));
427427
const isAbsorptionTarget = absorptionTargetKeys.has(operandIdentityKey(operand));
428+
const navigationIndex = assert(use(NavigationIndexContext));
428429

429430
return useRender({
430431
render: (
@@ -434,6 +435,7 @@ const OperandC: FC<
434435
source={operand}
435436
render={
436437
<OperationTarget
438+
enabled={navigationIndexIncludes(navigationIndex, operand)}
437439
projectId={projectId}
438440
target={operand}
439441
isSelected={isSelected}

0 commit comments

Comments
 (0)