Skip to content

Commit 4a8303a

Browse files
fix:utility added for styles handlling
1 parent ed0bac2 commit 4a8303a

4 files changed

Lines changed: 42 additions & 26 deletions

File tree

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
const originalStyles = new WeakMap<
2+
HTMLElement,
3+
{
4+
visibility?: string;
5+
transition?: string;
6+
animation?: string;
7+
}
8+
>();
9+
10+
export function clearVisibelityStyles(element: HTMLElement) {
11+
const originalStyleValues = {
12+
visibility: element.style.visibility,
13+
transition: element.style.transition,
14+
animation: element.style.animation,
15+
};
16+
17+
originalStyles.set(element, originalStyleValues);
18+
19+
element.style.visibility = "hidden";
20+
element.style.transition = "none";
21+
element.style.animation = "none";
22+
}
23+
24+
export function restoreVisibelityStyles(element: HTMLElement) {
25+
const storedStyles = originalStyles.get(element);
26+
27+
if (storedStyles) {
28+
element.style.visibility = storedStyles.visibility || "";
29+
element.style.transition = storedStyles.transition || "";
30+
element.style.animation = storedStyles.animation || "";
31+
32+
originalStyles.delete(element);
33+
}
34+
}

src/visualBuilder/utils/enableInlineEditing.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { handleFieldInput, handleFieldKeyDown } from "./handleFieldMouseDown";
1010
import { FieldDataType, VisualBuilderEditContext } from "./types/index.types";
1111
import { updateFocussedState } from "./updateFocussedState";
1212
import { pasteAsPlainText } from "./pasteAsPlainText";
13+
import { clearVisibelityStyles } from "./clearStyles";
1314

1415
export function enableInlineEditing({
1516
expectedFieldData,
@@ -31,7 +32,6 @@ export function enableInlineEditing({
3132
const elementComputedDisplay =
3233
window.getComputedStyle(actualEditableField).display;
3334

34-
3535
let textContent =
3636
(editableElement as HTMLElement).innerText ||
3737
editableElement.textContent ||
@@ -42,8 +42,9 @@ export function enableInlineEditing({
4242
actualEditableField.addEventListener("paste", pasteAsPlainText);
4343
}
4444
const expectedTextContent = expectedFieldData;
45-
46-
const isFieldLastEdited = document.querySelector("[data-cs-last-edited]") === editableElement;
45+
46+
const isFieldLastEdited =
47+
document.querySelector("[data-cs-last-edited]") === editableElement;
4748
if (
4849
(expectedTextContent && textContent !== expectedTextContent) ||
4950
isEllipsisActive(editableElement as HTMLElement) ||
@@ -52,14 +53,12 @@ export function enableInlineEditing({
5253
// TODO: Testing will be done in the E2E.
5354
const pseudoEditableField = generatePseudoEditableElement(
5455
{ editableElement: editableElement as HTMLElement },
55-
{ textContent: expectedFieldData }
56+
{ textContent: expectedFieldData }
5657
);
5758

5859
// Hide original element immediately, disabling any transitions/animations
5960
const originalElement = editableElement as HTMLElement;
60-
originalElement.style.visibility = "hidden";
61-
originalElement.style.transition = "none";
62-
originalElement.style.animation = "none";
61+
clearVisibelityStyles(originalElement);
6362

6463
// set field type attribute to the pseudo editable field
6564
// ensures proper keydown handling similar to the actual editable field

src/visualBuilder/utils/handleIndividualFields.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { VisualBuilderEditContext } from "./types/index.types";
1616
import { pasteAsPlainText } from "./pasteAsPlainText";
1717
import { removeFieldToolbar } from "../generators/generateToolbar";
1818
import { fetchEntryPermissionsAndStageDetails } from "./fetchEntryPermissionsAndStageDetails";
19+
import { restoreVisibelityStyles } from "./clearStyles";
1920

2021
/**
2122
* It handles all the fields based on their data type and its "multiple" property.
@@ -154,9 +155,7 @@ export function cleanIndividualFieldResidual(elements: {
154155
pseudoEditableElement.removeEventListener("paste", pasteAsPlainText);
155156
pseudoEditableElement.remove();
156157
if (previousSelectedEditableDOM) {
157-
(previousSelectedEditableDOM as HTMLElement).style.removeProperty(
158-
"visibility"
159-
);
158+
restoreVisibelityStyles(previousSelectedEditableDOM as HTMLElement);
160159
}
161160
}
162161

src/visualBuilder/utils/truncateHandler.ts

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
interface LineClampStyles {
77
webkitLineClamp?: string;
88
overflow?: string;
9-
display?: string;
109
webkitBoxOrient?: string;
1110
whiteSpace?: string;
1211
}
@@ -36,10 +35,6 @@ export function removeTruncateStyles(element: Element): void {
3635
styles.overflow = computedStyles.overflow;
3736
}
3837

39-
if (computedStyles.display && computedStyles.display.includes("box")) {
40-
styles.display = computedStyles.display;
41-
}
42-
4338
if (
4439
computedStyles.webkitBoxOrient &&
4540
computedStyles.webkitBoxOrient !== "horizontal"
@@ -58,10 +53,6 @@ export function removeTruncateStyles(element: Element): void {
5853
// Remove the styles
5954
element.style.webkitLineClamp = "none";
6055
element.style.overflow = "visible";
61-
// Reset display if it was -webkit-box
62-
if (styles.display?.includes("box")) {
63-
element.style.display = "block";
64-
}
6556
if (styles.webkitBoxOrient) {
6657
element.style.webkitBoxOrient = "horizontal";
6758
}
@@ -94,12 +85,6 @@ export function restoreTruncateStyles(element: Element): void {
9485
element.style.removeProperty("overflow");
9586
}
9687

97-
if (storedStyles.display) {
98-
element.style.display = storedStyles.display;
99-
} else {
100-
element.style.removeProperty("display");
101-
}
102-
10388
if (storedStyles.webkitBoxOrient) {
10489
element.style.webkitBoxOrient = storedStyles.webkitBoxOrient;
10590
} else {
@@ -128,7 +113,6 @@ export function hasTruncateStyles(element: Element): boolean {
128113
return (
129114
computedStyles.webkitLineClamp !== "none" ||
130115
(computedStyles.overflow === "hidden" &&
131-
computedStyles.display?.includes("box") &&
132116
computedStyles.webkitBoxOrient === "vertical") ||
133117
computedStyles.whiteSpace === "nowrap"
134118
);

0 commit comments

Comments
 (0)