Skip to content

Commit f081c22

Browse files
authored
Fix(formgen): exclude timestamps (#725)
* fix(formgen): exclude timestamps manually from formgen components
1 parent d2a84b2 commit f081c22

File tree

3 files changed

+51
-2
lines changed

3 files changed

+51
-2
lines changed

.changeset/old-scissors-doubt.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@aws-amplify/form-generator': minor
3+
---
4+
5+
Manually exclude timestamp fields from generated forms

packages/form-generator/src/local_codegen_graphql_form_generator.test.ts

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const createMockField = (dataType: MockDataType, required = false) => {
2020
};
2121
};
2222

23-
const createMockSchema = (fields: string[]) => {
23+
const createMockSchema = (fields: string[]): GenericDataSchema => {
2424
const models = fields.reduce(
2525
(prev, name) => ({
2626
...prev,
@@ -41,7 +41,7 @@ const createMockSchema = (fields: string[]) => {
4141
models,
4242
nonModels: {},
4343
enums: {},
44-
};
44+
} as GenericDataSchema;
4545
};
4646

4747
void describe('LocalCodegenGraphqlFormGenerator', () => {
@@ -262,9 +262,35 @@ void describe('LocalCodegenGraphqlFormGenerator', () => {
262262
['graphql', './graphql'],
263263
['gql/graphql', './gql/graphql'],
264264
];
265+
void it(`createdAt and updatedAt fields are removed from the generated form`, async () => {
266+
const schema = createMockSchema(['Post']);
267+
assert('createdAt' in schema.models.Post.fields);
268+
assert('updatedAt' in schema.models.Post.fields);
269+
const resultGenerationSpy = mock.fn<ResultBuilder>();
270+
resultGenerationSpy.mock.mockImplementation(() => ({
271+
writeToDirectory: async () => undefined,
272+
}));
273+
const l = new LocalGraphqlFormGenerator(
274+
async () => schema as unknown as GenericDataSchema,
275+
{
276+
graphqlDir: './ui-components',
277+
},
278+
resultGenerationSpy
279+
);
280+
281+
await l.generateForms();
282+
283+
assert.equal(resultGenerationSpy.mock.callCount(), 1);
284+
const componentMap = resultGenerationSpy.mock.calls[0].arguments[0];
285+
286+
const component = componentMap['PostCreateForm.jsx'];
287+
assert.equal(component.includes(`createdAt`), false);
288+
assert.equal(component.includes(`updatedAt`), false);
289+
});
265290
for (const [directory, outputDir = directory] of graphqlDirectories) {
266291
void it(`given the directory ${directory}, the correct import path appears for the mutations in the generated form`, async () => {
267292
const schema = createMockSchema(['Post']);
293+
268294
const resultGenerationSpy = mock.fn<ResultBuilder>();
269295
resultGenerationSpy.mock.mockImplementation(() => ({
270296
writeToDirectory: async () => undefined,

packages/form-generator/src/local_codegen_graphql_form_generator.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,24 @@ export class LocalGraphqlFormGenerator implements GraphqlFormGenerator {
277277
name,
278278
}))
279279
);
280+
281+
dataSchema.models = Object.entries(dataSchema.models).reduce<
282+
(typeof dataSchema)['models']
283+
>((prev, [key, value]) => {
284+
// Discard createdAt and updatedAt fields
285+
/* eslint-disable-next-line @typescript-eslint/no-unused-vars */
286+
const { createdAt, updatedAt, ...fields } = value.fields;
287+
288+
const valueExcludingTimestampFields = {
289+
...value,
290+
fields,
291+
};
292+
293+
prev[key] = valueExcludingTimestampFields;
294+
295+
return prev;
296+
}, {});
297+
280298
const forms = baseForms.reduce<Record<string, string>>(
281299
(prev, formSchema) => {
282300
const results = this.codegenForm(dataSchema, formSchema);

0 commit comments

Comments
 (0)