Skip to content

Commit 6c759b9

Browse files
committed
fix: fixed changes in hover
1 parent 95de6b0 commit 6c759b9

File tree

6 files changed

+170
-61
lines changed

6 files changed

+170
-61
lines changed

src/visualBuilder/generators/generateOverlay.tsx

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,14 @@ export function hideFocusOverlay(elements: HideOverlayParams): void {
109109
} = elements;
110110

111111
if (visualBuilderOverlayWrapper) {
112+
const previousSelectedEditableDOM =
113+
VisualBuilder.VisualBuilderGlobalState.value
114+
.previousSelectedEditableDOM;
115+
116+
if (previousSelectedEditableDOM) {
117+
sendUnlockFieldEvent(previousSelectedEditableDOM);
118+
}
119+
112120
visualBuilderOverlayWrapper.classList.remove("visible");
113121

114122
// Cleanup overlay styles: Top, Right, Bottom, Left & Outline
@@ -128,7 +136,7 @@ export function hideFocusOverlay(elements: HideOverlayParams): void {
128136
eventType: VisualBuilderPostMessageEvents.UPDATE_FIELD,
129137
});
130138
} else if (noTrigger) {
131-
const { previousSelectedEditableDOM, focusFieldValue } =
139+
const { focusFieldValue } =
132140
VisualBuilder.VisualBuilderGlobalState.value || {};
133141
if (
134142
previousSelectedEditableDOM &&
@@ -209,6 +217,38 @@ export function sendFieldEvent(options: ISendFieldEventParams): void {
209217
});
210218
}
211219
}
220+
221+
export function sendUnlockFieldEvent(editableElement: Element | null): void {
222+
if (!editableElement) {
223+
return;
224+
}
225+
226+
const cslpData = editableElement.getAttribute("data-cslp");
227+
if (!cslpData) {
228+
return;
229+
}
230+
231+
const isLocked =
232+
editableElement.getAttribute("data-field-locked") === "true";
233+
if (!isLocked) {
234+
return;
235+
}
236+
237+
const fieldMetadata = extractDetailsFromCslp(cslpData);
238+
239+
visualBuilderPostMessage?.send(
240+
VisualBuilderPostMessageEvents.UNLOCK_FIELD,
241+
{
242+
fieldMetadata: {
243+
content_type_uid: fieldMetadata.content_type_uid,
244+
entry_uid: fieldMetadata.entry_uid,
245+
fieldPath: fieldMetadata.fieldPath,
246+
locale: fieldMetadata.locale,
247+
variant: fieldMetadata.variant,
248+
},
249+
}
250+
);
251+
}
212252
interface HideOverlayParams
213253
extends Pick<
214254
EventListenerHandlerParams,

src/visualBuilder/generators/generateToolbar.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export function appendFocusedToolbar(
2424
}
2525
): void {
2626
appendFieldPathDropdown(eventDetails, focusedToolbarElement, options);
27-
if(options?.isHover) {
27+
if (options?.isHover) {
2828
return;
2929
}
3030
appendFieldToolbar(
@@ -79,9 +79,10 @@ export function appendFieldPathDropdown(
7979
focusedToolbarElement: HTMLDivElement,
8080
options?: {
8181
isHover?: boolean;
82+
isLocked?: boolean;
8283
}
8384
): void {
84-
const { isHover } = options || {};
85+
const { isHover, isLocked: providedIsLocked } = options || {};
8586
const fieldLabelWrapper = document.querySelector(
8687
".visual-builder__focused-toolbar__field-label-wrapper"
8788
) as HTMLDivElement | null;
@@ -134,7 +135,10 @@ export function appendFieldPathDropdown(
134135
focusedToolbarElement.style.top = `${adjustedDistanceFromTop}px`;
135136

136137
const parentPaths = collectParentCSLPPaths(targetElement, 2);
137-
const isLocked = targetElement.getAttribute("data-field-locked") === "true";
138+
const isLocked =
139+
providedIsLocked !== undefined
140+
? providedIsLocked
141+
: targetElement.getAttribute("data-field-locked") === "true";
138142

139143
const wrapper = document.createDocumentFragment();
140144
render(

src/visualBuilder/listeners/mouseClick.ts

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@ import {
1010

1111
import { appendFocusedToolbar } from "../generators/generateToolbar";
1212

13-
import { addFocusOverlay, hideOverlay } from "../generators/generateOverlay";
13+
import {
14+
addFocusOverlay,
15+
hideOverlay,
16+
sendUnlockFieldEvent,
17+
} from "../generators/generateOverlay";
1418

1519
import visualBuilderPostMessage from "../utils/visualBuilderPostMessage";
1620

@@ -32,6 +36,7 @@ import { fixSvgXPath } from "../utils/collabUtils";
3236
import { v4 as uuidV4 } from "uuid";
3337
import { CslpData } from "../../cslp/types/cslp.types";
3438
import { fetchEntryPermissionsAndStageDetails } from "../utils/fetchEntryPermissionsAndStageDetails";
39+
import { checkAndApplyFieldLockStatus } from "./mouseHover";
3540

3641
export type HandleBuilderInteractionParams = Omit<
3742
EventListenerHandlerParams,
@@ -173,8 +178,24 @@ export async function handleBuilderInteraction(
173178

174179
const { editableElement, fieldMetadata } = eventDetails;
175180

181+
const previousSelectedEditableDOM =
182+
VisualBuilder.VisualBuilderGlobalState.value
183+
.previousSelectedEditableDOM;
184+
185+
if (
186+
previousSelectedEditableDOM &&
187+
previousSelectedEditableDOM !== editableElement
188+
) {
189+
sendUnlockFieldEvent(previousSelectedEditableDOM);
190+
}
191+
176192
const isFieldLocked = await checkFieldLockStatus(fieldMetadata);
177193
if (isFieldLocked) {
194+
await checkAndApplyFieldLockStatus(
195+
editableElement,
196+
fieldMetadata,
197+
"click"
198+
);
178199
return;
179200
}
180201

@@ -322,14 +343,17 @@ async function handleFieldSchemaAndIndividualFields(
322343
content_type_uid,
323344
fieldPath
324345
);
325-
const { acl: entryAcl, workflowStage: entryWorkflowStageDetails, resolvedVariantPermissions } =
326-
await fetchEntryPermissionsAndStageDetails({
327-
entryUid: entry_uid,
328-
contentTypeUid: content_type_uid,
329-
locale,
330-
variantUid,
331-
fieldPathWithIndex,
332-
});
346+
const {
347+
acl: entryAcl,
348+
workflowStage: entryWorkflowStageDetails,
349+
resolvedVariantPermissions,
350+
} = await fetchEntryPermissionsAndStageDetails({
351+
entryUid: entry_uid,
352+
contentTypeUid: content_type_uid,
353+
locale,
354+
variantUid,
355+
fieldPathWithIndex,
356+
});
333357

334358
if (fieldSchema) {
335359
const { isDisabled } = isFieldDisabled(

0 commit comments

Comments
 (0)