-
Notifications
You must be signed in to change notification settings - Fork 5
/
EditUploadCell.tsx
83 lines (75 loc) · 1.95 KB
/
EditUploadCell.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
import type { EditUploadById, UpdateUploadInput } from 'types/graphql'
import { navigate, routes } from '@redwoodjs/router'
import type { CellSuccessProps, CellFailureProps } from '@redwoodjs/web'
import { useMutation } from '@redwoodjs/web'
import { toast } from '@redwoodjs/web/toast'
import UploadForm from 'src/components/Upload/UploadForm'
export const QUERY = gql`
query EditUploadById($id: Int!) {
upload: upload(id: $id) {
id
filename
uploadedById
agencyId
reportingPeriodId
expenditureCategoryId
createdAt
updatedAt
}
}
`
const UPDATE_UPLOAD_MUTATION = gql`
mutation UpdateUploadMutation($id: Int!, $input: UpdateUploadInput!) {
updateUpload(id: $id, input: $input) {
id
filename
uploadedById
agencyId
reportingPeriodId
expenditureCategoryId
createdAt
updatedAt
}
}
`
export const Loading = () => <div>Loading...</div>
export const Failure = ({ error }: CellFailureProps) => (
<div className="rw-cell-error">{error?.message}</div>
)
export const Success = ({ upload }: CellSuccessProps<EditUploadById>) => {
const [updateUpload, { loading, error }] = useMutation(
UPDATE_UPLOAD_MUTATION,
{
onCompleted: () => {
toast.success('Upload updated')
navigate(routes.uploads())
},
onError: (error) => {
toast.error(error.message)
},
}
)
const onSave = (
input: UpdateUploadInput,
id: EditUploadById['upload']['id']
) => {
updateUpload({ variables: { id, input } })
}
return (
<div className="rw-segment">
<header className="rw-segment-header">
<h2 className="rw-heading rw-heading-secondary">
Edit Upload {upload?.id}
</h2>
</header>
<div className="rw-segment-main">
<UploadForm
upload={upload}
onSave={onSave}
error={error}
loading={loading}
/>
</div>
</div>
)
}