Skip to content

Commit eef29ae

Browse files
rdonigianCarsonF
authored andcommitted
Create Field Region detail page
1 parent 52ac705 commit eef29ae

File tree

17 files changed

+379
-87
lines changed

17 files changed

+379
-87
lines changed

src/common/fragments/location.graphql

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,9 @@ fragment DisplayLocation on Location {
99

1010
fragment DisplayFieldRegion on FieldRegion {
1111
id
12-
createdAt
1312
name {
14-
canRead
15-
canEdit
1613
value
1714
}
18-
director {
19-
canRead
20-
canEdit
21-
value {
22-
id
23-
fullName
24-
}
25-
}
26-
fieldZone {
27-
canRead
28-
canEdit
29-
value {
30-
...DisplayFieldZone
31-
}
32-
}
3315
}
3416

3517
fragment DisplayFieldZone on FieldZone {

src/components/FieldRegion/CreateFieldRegion.tsx

Lines changed: 0 additions & 62 deletions
This file was deleted.
File renamed without changes.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { useMutation } from '@apollo/client';
2+
import { Except } from 'type-fest';
3+
import {
4+
CreateFieldRegionInput,
5+
type CreateFieldRegion as CreateFieldRegionType,
6+
} from '~/api/schema.graphql';
7+
import { DisplayFieldRegionFragment } from '~/common';
8+
import {
9+
FieldRegionForm,
10+
FieldRegionFormProps,
11+
} from '../FieldRegionForm/FieldRegionForm';
12+
import { CreateFieldRegionDocument } from './CreateFieldRegion.graphql';
13+
14+
type SubmitResult = DisplayFieldRegionFragment;
15+
16+
export type CreateFieldRegionProps = Except<
17+
FieldRegionFormProps<CreateFieldRegionType, SubmitResult>,
18+
'onSubmit'
19+
>;
20+
21+
export const CreateFieldRegion = (props: CreateFieldRegionProps) => {
22+
const [createFieldRegion] = useMutation(CreateFieldRegionDocument);
23+
24+
return (
25+
<FieldRegionForm<CreateFieldRegionType, SubmitResult>
26+
{...props}
27+
title="Create Field Region"
28+
onSubmit={async (values) => {
29+
const input: CreateFieldRegionInput = {
30+
fieldRegion: {
31+
name: values.fieldRegion.name,
32+
fieldZoneId: values.fieldRegion.fieldZoneId!.id,
33+
directorId: values.fieldRegion.directorId!.id,
34+
},
35+
};
36+
37+
const { data } = await createFieldRegion({
38+
variables: { input },
39+
});
40+
return data!.createFieldRegion.fieldRegion;
41+
}}
42+
/>
43+
);
44+
};
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
mutation UpdateFieldRegion($input: UpdateFieldRegionInput!) {
2+
updateFieldRegion(input: $input) {
3+
fieldRegion {
4+
...FieldRegionForm
5+
}
6+
}
7+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import { useMutation } from '@apollo/client';
2+
import { useMemo } from 'react';
3+
import { Except, SetRequired } from 'type-fest';
4+
import {
5+
UpdateFieldRegion,
6+
UpdateFieldRegionInput,
7+
} from '~/api/schema.graphql';
8+
import { DisplayFieldRegionFragment } from '~/common';
9+
import {
10+
FieldRegionForm,
11+
FieldRegionFormProps,
12+
} from '../FieldRegionForm/FieldRegionForm';
13+
import { UpdateFieldRegionDocument } from './EditFieldRegion.graphql';
14+
15+
type SubmitResult = DisplayFieldRegionFragment;
16+
export type EditFieldRegionProps = Except<
17+
FieldRegionFormProps<UpdateFieldRegion, SubmitResult>,
18+
'onSubmit' | 'initialValues'
19+
>;
20+
export const EditFieldRegion = (
21+
props: SetRequired<EditFieldRegionProps, 'fieldRegion'>
22+
) => {
23+
const [updateFieldRegion] = useMutation(UpdateFieldRegionDocument);
24+
const { fieldRegion } = props;
25+
26+
const initialValues = useMemo(
27+
() => ({
28+
fieldRegion: {
29+
id: fieldRegion.id,
30+
name: fieldRegion.name.value,
31+
fieldZoneId: fieldRegion.fieldZone.value ?? null,
32+
directorId: fieldRegion.director.value ?? null,
33+
},
34+
}),
35+
[fieldRegion]
36+
);
37+
38+
return (
39+
<FieldRegionForm<UpdateFieldRegion, SubmitResult>
40+
{...props}
41+
title="Edit Field Region"
42+
initialValues={initialValues}
43+
onSubmit={async ({ fieldRegion: values }) => {
44+
const input: UpdateFieldRegionInput = {
45+
fieldRegion: {
46+
id: values.id,
47+
name: values.name,
48+
fieldZoneId: values.fieldZoneId?.id,
49+
directorId: values.directorId?.id,
50+
},
51+
};
52+
53+
const { data } = await updateFieldRegion({
54+
variables: { input },
55+
});
56+
57+
return data!.updateFieldRegion.fieldRegion;
58+
}}
59+
/>
60+
);
61+
};
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
fragment FieldRegionForm on FieldRegion {
2+
id
3+
name {
4+
canRead
5+
canEdit
6+
value
7+
}
8+
director {
9+
canEdit
10+
canRead
11+
value {
12+
...UserLookupItem
13+
}
14+
}
15+
fieldZone {
16+
canEdit
17+
canRead
18+
value {
19+
...DisplayFieldZone
20+
}
21+
}
22+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { Merge } from 'type-fest';
2+
import { CreateFieldRegion, UpdateFieldRegion } from '~/api/schema.graphql';
3+
import { DisplayFieldZoneFragment } from '~/common';
4+
import { DialogForm, DialogFormProps } from '../../Dialog/DialogForm';
5+
import { SecuredField, SubmitError, TextField } from '../../form';
6+
import { FieldZoneField } from '../../form/Lookup/FieldZone';
7+
import { UserField } from '../../form/Lookup/User/UserField';
8+
import { UserLookupItemFragment } from '../../form/Lookup/User/UserLookup.graphql';
9+
import { FieldRegionFormFragment } from './FieldRegionForm.graphql';
10+
11+
type FieldRegionMutation = UpdateFieldRegion | CreateFieldRegion;
12+
13+
export interface FieldRegionFormValues<Mutation extends FieldRegionMutation> {
14+
fieldRegion: Merge<
15+
Mutation,
16+
{
17+
fieldZoneId: DisplayFieldZoneFragment | null;
18+
directorId: UserLookupItemFragment | null;
19+
}
20+
>;
21+
}
22+
23+
export type FieldRegionFormProps<
24+
Mutation extends FieldRegionMutation,
25+
R
26+
> = DialogFormProps<FieldRegionFormValues<Mutation>, R> & {
27+
fieldRegion?: FieldRegionFormFragment;
28+
};
29+
30+
export const FieldRegionForm = <Mutation extends FieldRegionMutation, R>({
31+
fieldRegion,
32+
...rest
33+
}: FieldRegionFormProps<Mutation, R>) => (
34+
<DialogForm {...rest} fieldsPrefix="fieldRegion">
35+
<SubmitError />
36+
<SecuredField obj={fieldRegion} name="name">
37+
{(props) => (
38+
<TextField
39+
{...props}
40+
label="Field Region Name"
41+
placeholder="Enter Field Region Name"
42+
required
43+
/>
44+
)}
45+
</SecuredField>
46+
<SecuredField obj={fieldRegion} name="fieldZoneId">
47+
{(props) => <FieldZoneField {...props} label="Field Zone" required />}
48+
</SecuredField>
49+
<SecuredField obj={fieldRegion} name="directorId">
50+
{(props) => <UserField {...props} label="Director" required />}
51+
</SecuredField>
52+
</DialogForm>
53+
);
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export * from './CreateFieldRegion/CreateFieldRegion';
2+
export * from './EditFieldRegion/EditFieldRegion';

src/components/FieldRegion/index.tsx

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)