-
Notifications
You must be signed in to change notification settings - Fork 5
/
EditOrganizationCell.tsx
81 lines (73 loc) · 1.94 KB
/
EditOrganizationCell.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
import type {
EditOrganizationById,
UpdateOrganizationInput,
} 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 EditOrganizationForm from 'src/components/Organization/EditOrganizationForm/EditOrganizationForm'
export const QUERY = gql`
query EditOrganizationById($id: Int!) {
organization: organization(id: $id) {
id
name
preferences
}
}
`
const UPDATE_ORGANIZATION_MUTATION = gql`
mutation UpdateOrganizationMutation(
$id: Int!
$input: UpdateOrganizationInput!
) {
updateOrganization(id: $id, input: $input) {
id
name
preferences
}
}
`
export const Loading = () => <div>Loading...</div>
export const Failure = ({ error }: CellFailureProps) => (
<div className="rw-cell-error">{error?.message}</div>
)
export const Success = ({
organization,
}: CellSuccessProps<EditOrganizationById>) => {
const [updateOrganization, { loading, error }] = useMutation(
UPDATE_ORGANIZATION_MUTATION,
{
onCompleted: () => {
toast.success('Organization updated')
navigate(routes.organizations())
},
onError: (error) => {
toast.error(error.message)
},
}
)
const onSave = (
input: UpdateOrganizationInput,
id: EditOrganizationById['organization']['id']
) => {
updateOrganization({ variables: { id, input } })
}
return (
<div className="rw-segment">
<header className="rw-segment-header">
<h2 className="rw-heading rw-heading-secondary">
{organization?.name}
</h2>
</header>
<div className="rw-segment-main">
<EditOrganizationForm
organization={organization}
onSave={onSave}
error={error}
loading={loading}
/>
</div>
</div>
)
}