Skip to content

Commit 8fbe820

Browse files
Merge pull request #409 from contentstack/VE-4921
fix: enhance loading state for form field focus
2 parents 8f21238 + 773299b commit 8fbe820

2 files changed

Lines changed: 26 additions & 17 deletions

File tree

src/visualBuilder/components/FieldToolbar.tsx

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import {
3939
IVariantStatus,
4040
VariantRevertDropdown,
4141
} from "./FieldRevert/FieldRevertComponent";
42+
import { LoadingIcon } from "./icons/loading";
4243

4344
export type FieldDetails = Pick<
4445
VisualBuilderCslpEventDetails,
@@ -93,27 +94,22 @@ function handleEdit(fieldMetadata: CslpData) {
9394
}
9495

9596
function handleFormFieldFocus(eventDetails: VisualBuilderCslpEventDetails) {
96-
const { editableElement, fieldMetadata, cslpData } = eventDetails;
97-
visualBuilderPostMessage
98-
?.send(VisualBuilderPostMessageEvents.TOGGLE_FORM, {
99-
fieldMetadata,
100-
cslpData,
101-
})
102-
.then(() => {
103-
visualBuilderPostMessage?.send(
104-
VisualBuilderPostMessageEvents.FOCUS_FIELD,
105-
{
106-
DOMEditStack: getDOMEditStack(editableElement),
107-
}
108-
);
109-
});
97+
const { editableElement } = eventDetails;
98+
return visualBuilderPostMessage?.send(
99+
VisualBuilderPostMessageEvents.FOCUS_FIELD,
100+
{
101+
DOMEditStack: getDOMEditStack(editableElement),
102+
toggleVisibility: true,
103+
}
104+
);
110105
}
111106

112107
function FieldToolbarComponent(
113108
props: MultipleFieldToolbarProps
114109
): JSX.Element | null {
115110
const { eventDetails, isVariant: isVariantOrParentOfVariant } = props;
116111
const { fieldMetadata, editableElement: targetElement } = eventDetails;
112+
const [isFormLoading, setIsFormLoading] = useState(false);
117113

118114
const parentPath =
119115
fieldMetadata?.multipleFieldMetadata?.parentDetails?.parentCslpValue ||
@@ -252,15 +248,27 @@ function FieldToolbarComponent(
252248
"visual-builder__tooltip--bottom": invertTooltipPosition,
253249
[visualBuilderStyles()["visual-builder__tooltip--bottom"]]:
254250
invertTooltipPosition,
251+
},
252+
{
253+
[visualBuilderStyles()["visual-builder__button--comment-loader"]]: isFormLoading,
254+
"visual-builder__button--comment-loader": isFormLoading
255255
}
256256
)}
257257
data-tooltip={"Form"}
258258
data-testid={`visual-builder-form`}
259-
onClick={(e) => {
260-
handleFormFieldFocus(eventDetails);
259+
onClick={async (e) => {
260+
e.preventDefault();
261+
e.stopPropagation();
262+
setIsFormLoading(true);
263+
try {
264+
await handleFormFieldFocus(eventDetails);
265+
} finally {
266+
setIsFormLoading(false);
267+
}
261268
}}
269+
disabled={isFormLoading}
262270
>
263-
<FormIcon />
271+
{isFormLoading ? <LoadingIcon /> : <FormIcon />}
264272
</button>
265273
);
266274

src/visualBuilder/visualBuilder.style.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,7 @@ export function visualBuilderStyles() {
355355
}
356356
`,
357357
"visual-builder__button--comment-loader": css`
358+
cursor: wait !important;
358359
svg.loader {
359360
height: 16px;
360361
width: 16px;

0 commit comments

Comments
 (0)