@@ -656,15 +665,16 @@ function TextFieldProperties({ elementId }: { elementId: string }) {
function CheckboxProperties({ elementId }: { elementId: string }) {
const { t } = useTranslation();
const defaultCheckedId = useId();
- const element = useEditorStore((s) =>
- s.elements.find((el) => el.id === elementId),
- );
+ const element = useDisplayElement(elementId);
const updateElement = useEditorStore((s) => s.updateElement);
+ const getElementChanges = useElementPropertyChanges(elementId);
if (!element || !isCheckbox(element)) return null;
- const nameField = useDeferredValue(element.name, (v) =>
- updateElement(element.id, { name: v }),
+ const nameField = usePropertyInput(
+ createPropertyEditKey("name", [element.id]),
+ element.name,
+ (v) => getElementChanges({ name: v }),
);
return (
@@ -700,21 +710,25 @@ function CheckboxProperties({ elementId }: { elementId: string }) {
function RadioButtonProperties({ elementId }: { elementId: string }) {
const { t } = useTranslation();
- const element = useEditorStore((s) =>
- s.elements.find((el) => el.id === elementId),
- );
- const updateElement = useEditorStore((s) => s.updateElement);
+ const element = useDisplayElement(elementId);
+ const getElementChanges = useElementPropertyChanges(elementId);
if (!element || !isRadioButton(element)) return null;
- const groupNameField = useDeferredValue(element.groupName, (v) =>
- updateElement(element.id, { groupName: v }),
+ const groupNameField = usePropertyInput(
+ createPropertyEditKey("groupName", [element.id]),
+ element.groupName,
+ (v) => getElementChanges({ groupName: v }),
);
- const valueField = useDeferredValue(element.value, (v) =>
- updateElement(element.id, { value: v }),
+ const valueField = usePropertyInput(
+ createPropertyEditKey("value", [element.id]),
+ element.value,
+ (v) => getElementChanges({ value: v }),
);
- const labelField = useDeferredValue(element.label, (v) =>
- updateElement(element.id, { label: v }),
+ const labelField = usePropertyInput(
+ createPropertyEditKey("label", [element.id]),
+ element.label,
+ (v) => getElementChanges({ label: v }),
);
return (
@@ -900,15 +914,16 @@ function DropdownProperties({ elementId }: { elementId: string }) {
const { t } = useTranslation();
const requiredId = useId();
const editableId = useId();
- const element = useEditorStore((s) =>
- s.elements.find((el) => el.id === elementId),
- );
+ const element = useDisplayElement(elementId);
const updateElement = useEditorStore((s) => s.updateElement);
+ const getElementChanges = useElementPropertyChanges(elementId);
if (!element || !isDropdownField(element)) return null;
- const nameField = useDeferredValue(element.name, (v) =>
- updateElement(element.id, { name: v }),
+ const nameField = usePropertyInput(
+ createPropertyEditKey("name", [element.id]),
+ element.name,
+ (v) => getElementChanges({ name: v }),
);
const addOption = () => {
@@ -968,6 +983,7 @@ function DropdownProperties({ elementId }: { elementId: string }) {
updateElement(element.id, updates)}
+ onPreview={getElementChanges}
/>