with one click
create-creation-form
// Use when: scaffolding a creation form drawer with Formik validation and a Relay mutation for a new entity
// Use when: scaffolding a creation form drawer with Formik validation and a Relay mutation for a new entity
Use when: creating a new ElasticSearch database migration file, adding or transforming data at deploy time
Use when: scaffolding a new backend entity type, domain module, GraphQL schema, resolvers, or STIX converter in opencti-graphql
Use when: adding a new playbook automation component, implementing a PlaybookComponent interface, or registering a new playbook step
Use when: creating a new Relay-connected React component, defining a GraphQL fragment, or wiring a component to a query
Use when: scaffolding a new GitHub Actions CI/CD workflow, adding automation for tests, builds, releases, or security scans
| name | create-creation-form |
| description | Use when: scaffolding a creation form drawer with Formik validation and a Relay mutation for a new entity |
Use the Codebase Pattern Finder agent to locate a similar existing creation form in opencti-platform/opencti-front/src/private/components/ (look for files ending in Creation.tsx). Model the new form after the existing one to stay idiomatic.
Use Yup for validation schema.
const creationMutation = graphql`
mutation MyEntityCreationMutation($input: MyEntityAddInput!) {
myEntityAdd(input: $input) {
...MyEntityLine_node
}
}
`;
const validationSchema = Yup.object().shape({
name: Yup.string().required(t('This field is required')),
});
Return a Drawer containing a Formik form.
export const MyEntityCreation: React.FC<Props> = ({ paginationOptions }) => {
const [commit] = useApiMutation(creationMutation);
const onSubmit = (values, { setSubmitting, resetForm }) => {
commit({
variables: {
input: values,
},
updater: (store) => {
// Use utils/store helper
insertNode(store, 'Pagination_myEntities', paginationOptions, 'myEntityAdd');
},
onCompleted: () => {
setSubmitting(false);
resetForm();
},
});
};
return (
<Drawer title={t_i18n('Create entity')}>
<Formik initialValues={{ name: '' }} validationSchema={validationSchema} onSubmit={onSubmit}>
<Form>
<Field component={TextField} name="name" label={t_i18n('Name')} />
<Button type="submit">{t_i18n('Create')}</Button>
</Form>
</Formik>
</Drawer>
);
};