Skip to content

Commit 8310d89

Browse files
committed
integrate partners mutations to add and remove
1 parent 92d1b06 commit 8310d89

File tree

1 file changed

+116
-8
lines changed
  • app/[locale]/dashboard/[entityType]/[entitySlug]/usecases/edit/[id]/contributors

1 file changed

+116
-8
lines changed

app/[locale]/dashboard/[entityType]/[entitySlug]/usecases/edit/[id]/contributors/page.tsx

Lines changed: 116 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,14 @@ const FetchUsecaseInfo: any = graphql(`
4242
name
4343
}
4444
}
45+
partnerOrganizations{
46+
id
47+
name
48+
logo{
49+
url
50+
name
51+
}
52+
}
4553
}
4654
}
4755
`);
@@ -128,6 +136,54 @@ const RemoveSupporters: any = graphql(`
128136
}
129137
`);
130138

139+
const AddPartners: any = graphql(`
140+
mutation addPartnerOrganizationToUseCase(
141+
$useCaseId: String!
142+
$organizationId: ID!
143+
) {
144+
addPartnerOrganizationToUseCase(
145+
useCaseId: $useCaseId
146+
organizationId: $organizationId
147+
) {
148+
__typename
149+
... on TypeUseCaseOrganizationRelationship {
150+
organization {
151+
id
152+
name
153+
logo {
154+
url
155+
name
156+
}
157+
}
158+
}
159+
}
160+
}
161+
`);
162+
163+
const RemovePartners: any = graphql(`
164+
mutation removePartnerOrganizationFromUseCase(
165+
$useCaseId: String!
166+
$organizationId: ID!
167+
) {
168+
removePartnerOrganizationFromUseCase(
169+
useCaseId: $useCaseId
170+
organizationId: $organizationId
171+
) {
172+
__typename
173+
... on TypeUseCaseOrganizationRelationship {
174+
organization {
175+
id
176+
name
177+
logo {
178+
url
179+
name
180+
}
181+
}
182+
}
183+
}
184+
}
185+
`);
186+
131187
const Details = () => {
132188
const params = useParams<{ id: string }>();
133189
const { allEntityDetails } = useDashboardStore();
@@ -176,6 +232,11 @@ const Details = () => {
176232
useEffect(() => {
177233
setFormData((prev) => ({
178234
...prev,
235+
partners:
236+
UseCaseData?.data?.useCases?.[0]?.partnerOrganizations?.map((org: any) => ({
237+
label: org.name,
238+
value: org.id,
239+
})) || [],
179240
supporters:
180241
UseCaseData?.data?.useCases?.[0]?.supportingOrganizations?.map((org: any) => ({
181242
label: org.name,
@@ -244,6 +305,33 @@ const Details = () => {
244305
}
245306
);
246307

308+
const { mutate: addPartner, isLoading: addPartnerLoading } = useMutation(
309+
(input: { useCaseId: string; organizationId: string }) =>
310+
GraphQL(AddPartners, {}, input),
311+
{
312+
onSuccess: (res: any) => {
313+
toast('Partner added successfully');
314+
},
315+
onError: (error: any) => {
316+
toast(`Error: ${error.message}`);
317+
},
318+
}
319+
);
320+
321+
const { mutate: removePartner, isLoading: removePartnerLoading } =
322+
useMutation(
323+
(input: { useCaseId: string; organizationId: string }) =>
324+
GraphQL(RemovePartners, {}, input),
325+
{
326+
onSuccess: (res: any) => {
327+
toast('Partner removed successfully');
328+
},
329+
onError: (error: any) => {
330+
toast(`Error: ${error.message}`);
331+
},
332+
}
333+
);
334+
247335
useEffect(() => {
248336
Users.refetch();
249337
}, [searchValue]);
@@ -263,7 +351,8 @@ const Details = () => {
263351
addContributorLoading ||
264352
removeContributorLoading ||
265353
addSupporterLoading ||
266-
removeSupporterLoading
354+
removeSupporterLoading ||
355+
addPartnerLoading
267356
? 'loading'
268357
: 'success'
269358
); // update based on mutation state
@@ -272,6 +361,7 @@ const Details = () => {
272361
removeContributorLoading,
273362
addSupporterLoading,
274363
removeSupporterLoading,
364+
addPartnerLoading,
275365
]);
276366

277367

@@ -393,15 +483,33 @@ const Details = () => {
393483
})
394484
)}
395485
selectedValues={formData.partners}
396-
onChange={(newValues: any) =>
397-
setFormData((prev) => ({ ...prev, partners: newValues }))
398-
}
399-
onRemove={(item: any) =>
486+
onChange={(newValues: any) => {
487+
const prevValues = formData.partners.map((item) => item.value);
488+
const newlyAdded = newValues.find(
489+
(item: any) => !prevValues.includes(item.value)
490+
);
491+
492+
setFormData((prev) => ({ ...prev, partners: newValues }));
493+
494+
if (newlyAdded) {
495+
addPartner({
496+
useCaseId: params.id,
497+
organizationId: newlyAdded.value,
498+
});
499+
}
500+
}}
501+
onRemove={(item: any) => {
400502
setFormData((prev) => ({
401503
...prev,
402-
partners: prev.partners.filter((p) => p.value !== item.value),
403-
}))
404-
}
504+
partners: prev.partners.filter(
505+
(s) => s.value !== item.value
506+
),
507+
}));
508+
removePartner({
509+
useCaseId: params.id,
510+
organizationId: item.value,
511+
});
512+
}}
405513
/>
406514
</div>
407515
)}

0 commit comments

Comments
 (0)