diff --git a/packages/app/src/App.tsx b/packages/app/src/App.tsx
index 3f748813f5..a0390d96e8 100644
--- a/packages/app/src/App.tsx
+++ b/packages/app/src/App.tsx
@@ -91,7 +91,10 @@ import { apis } from './apis';
import { entityPage } from './components/catalog/EntityPage';
import { homePage } from './components/home/HomePage';
import { Root } from './components/Root';
-import { LowerCaseValuePickerFieldExtension } from './components/scaffolder/customScaffolderExtensions';
+import {
+ DelayingComponentFieldExtension,
+ LowerCaseValuePickerFieldExtension,
+} from './components/scaffolder/customScaffolderExtensions';
import { defaultPreviewTemplate } from './components/scaffolder/defaultPreviewTemplate';
import { searchPage } from './components/search/SearchPage';
import { providers } from './identityProviders';
@@ -228,7 +231,7 @@ const routes = (
}
>
-
+
} />
diff --git a/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx b/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx
index 61407e2918..2a4dedf080 100644
--- a/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx
+++ b/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx
@@ -62,3 +62,37 @@ export const LowerCaseValuePickerFieldExtension = scaffolderPlugin.provide(
},
}),
);
+
+const MockDelayComponent = (
+ props: FieldExtensionComponentProps<{ test?: string }>,
+) => {
+ const { onChange, formData, rawErrors } = props;
+ return (
+ onChange({ test: value })}
+ margin="normal"
+ error={rawErrors?.length > 0 && !formData}
+ />
+ );
+};
+
+export const DelayingComponentFieldExtension = scaffolderPlugin.provide(
+ createScaffolderFieldExtension({
+ name: 'DelayingComponent',
+ component: MockDelayComponent,
+ validation: async (
+ value: { test?: string },
+ validation: FieldValidation,
+ ) => {
+ // delay 2 seconds
+ await new Promise(resolve => setTimeout(resolve, 2000));
+
+ if (value.test !== 'pass') {
+ validation.addError('value was not equal to pass');
+ }
+ },
+ }),
+);