-
Notifications
You must be signed in to change notification settings - Fork 5
/
EditOutputTemplateCell.tsx
98 lines (89 loc) · 2.31 KB
/
EditOutputTemplateCell.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import type {
EditOutputTemplateById,
UpdateOutputTemplateInput,
UpdateOutputTemplateMutationVariables,
} from 'types/graphql'
import { navigate, routes } from '@redwoodjs/router'
import type {
CellSuccessProps,
CellFailureProps,
TypedDocumentNode,
} from '@redwoodjs/web'
import { useMutation } from '@redwoodjs/web'
import { toast } from '@redwoodjs/web/toast'
import OutputTemplateForm from 'src/components/OutputTemplate/OutputTemplateForm'
export const QUERY: TypedDocumentNode<EditOutputTemplateById> = gql`
query EditOutputTemplateById($id: Int!) {
outputTemplate: outputTemplate(id: $id) {
id
name
version
effectiveDate
rulesGeneratedAt
createdAt
updatedAt
}
}
`
const UPDATE_OUTPUT_TEMPLATE_MUTATION: TypedDocumentNode<
EditOutputTemplateById,
UpdateOutputTemplateMutationVariables
> = gql`
mutation UpdateOutputTemplateMutation(
$id: Int!
$input: UpdateOutputTemplateInput!
) {
updateOutputTemplate(id: $id, input: $input) {
id
name
version
effectiveDate
rulesGeneratedAt
createdAt
updatedAt
}
}
`
export const Loading = () => <div>Loading...</div>
export const Failure = ({ error }: CellFailureProps) => (
<div className="rw-cell-error">{error?.message}</div>
)
export const Success = ({
outputTemplate,
}: CellSuccessProps<EditOutputTemplateById>) => {
const [updateOutputTemplate, { loading, error }] = useMutation(
UPDATE_OUTPUT_TEMPLATE_MUTATION,
{
onCompleted: () => {
toast.success('OutputTemplate updated')
navigate(routes.outputTemplates())
},
onError: (error) => {
toast.error(error.message)
},
}
)
const onSave = (
input: UpdateOutputTemplateInput,
id: EditOutputTemplateById['outputTemplate']['id']
) => {
updateOutputTemplate({ variables: { id, input } })
}
return (
<div className="rw-segment">
<header className="rw-segment-header">
<h2 className="rw-heading rw-heading-secondary">
Edit OutputTemplate {outputTemplate?.id}
</h2>
</header>
<div className="rw-segment-main">
<OutputTemplateForm
outputTemplate={outputTemplate}
onSave={onSave}
error={error}
loading={loading}
/>
</div>
</div>
)
}