+
+ Navigate to General → Store Settings, type “test” as
+ the Store Name, and click Save. A server-side error will appear on the field.
+ Changing the field clears the error automatically.
+
+
+ {
+ setValues((prev) => ({ ...prev, [key]: value }));
+ log({ type: 'change', pageId: scopeId, key, value });
+ }}
+ onSave={async (scopeId, _treeValues, flatValues) => {
+ // Simulate network delay
+ await new Promise((r) => setTimeout(r, 500));
+
+ log({ type: 'save', pageId: scopeId, values: flatValues });
+
+ // Simulate server-side validation error
+ if (flatValues['store_name'] === 'test') {
+ throw {
+ errors: {
+ store_name: 'Store name "test" is already taken. Please choose another.',
+ },
+ };
+ }
+ }}
+ renderSaveButton={({ dirty, hasErrors, onSave: triggerSave }) => (
+
+ )}
+ />
+
+
+
+ );
+}
+
+/** Server-side validation demo — type "test" as store name and save to see a server error. */
+export const ServerSideValidation: Story = {
+ args: {
+ schema: sampleSchema,
+ title: 'Server-Side Validation',
+ },
+ render: (args) =>