@@ -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+
131187const 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