@@ -83,6 +83,7 @@ const getAccessModelDetails: any = graphql(`
8383 }
8484 id
8585 name
86+ type
8687 description
8788 created
8889 modified
@@ -108,7 +109,8 @@ const AccessModelForm: React.FC<AccessModelProps> = ({
108109 const {
109110 data : accessModelList ,
110111 isLoading : accessModelListLoading ,
111- } : { data : any ; isLoading : boolean } = useQuery (
112+ refetch : accessModelListRefetch ,
113+ } : { data : any ; isLoading : boolean ; refetch : any } = useQuery (
112114 [ `accessModelList_${ params . id } ` ] ,
113115 ( ) => GraphQL ( accessModelListQuery , { datasetId : params . id } )
114116 ) ;
@@ -153,51 +155,74 @@ const AccessModelForm: React.FC<AccessModelProps> = ({
153155 } , [ data , selectedResources ] ) ;
154156
155157 useEffect ( ( ) => {
156- if ( accessModelId ) {
158+ if ( accessModelDetails && accessModelDetails . accessModel && accessModelId ) {
159+ const { name, description, type, modelResources } =
160+ accessModelDetails . accessModel ;
157161 refetch ( ) ;
162+ // Update accessModelData with the received data
158163 setAccessModelData ( {
159164 dataset : params . id ,
160- name : accessModelDetails ?. accessModel . name ,
161- description : accessModelDetails ?. accessModel . description ,
162- type : accessModelDetails ?. accessModel . type ,
163- resources : [ ] ,
164- accessModelId : accessModelDetails ?. accessModel . id ,
165+ name : name ,
166+ description : description ,
167+ type : type ,
168+ accessModelId : accessModelId ,
169+ resources : modelResources . map ( ( resource : any ) => ( {
170+ resource : resource . resource . id ,
171+ fields : resource . fields . map ( ( field : any ) => field . id ) ,
172+ } ) ) ,
165173 } ) ;
166- }
167- } , [ accessModelId ] ) ;
168174
169- const [ resId , setResId ] = useState ( '' ) ;
175+ // Update selectedResources and selectedFields based on modelResources
176+ const selectedResourcesIds = modelResources . map ( ( resource : any ) => ( {
177+ label : resource . resource . name ,
178+ value : resource . resource . id ,
179+ schema : resource . fields . map ( ( field : any ) => ( {
180+ label : field . fieldName ,
181+ value : field . id ,
182+ } ) ) ,
183+ } ) ) ;
170184
171- const handleAddResource = ( resourceId : any ) => {
172- setSelectedResources ( ( prevResources ) => [ ...prevResources , resourceId ] ) ;
173- setResId ( '' ) ;
174- setAvailableResources ( ( prevAvailableResources ) =>
175- prevAvailableResources . filter ( ( resource ) => resource . value !== resourceId )
176- ) ;
177- setSelectedFields ( ( prevFields ) => [ ...prevFields , resourceId ] ) ;
185+ setSelectedResources ( selectedResourcesIds ) ;
178186
179- // setAccessModelData((prevData) => ({
180- // ...prevData,
181- // resources: [...prevData.resources, { id: resourceId }],
182- // }));
183- } ;
187+ const selectedFieldsIds = selectedResourcesIds . map ( ( resource : any ) => ( {
188+ label : resource . label ,
189+ value : resource . value ,
190+ schema : resource . schema . map ( ( field : any ) => ( {
191+ id : field . id ,
192+ fieldName : field . fieldName ,
193+ } ) ) ,
194+ } ) ) ;
195+ setSelectedFields ( selectedFieldsIds ) ;
196+ }
197+ } , [ accessModelDetails , accessModelId ] ) ;
184198
185- const handleSelectAll = ( ) => {
186- const allResources =
187- data ?. datasetResources . map ( ( resource : any ) => ( {
188- label : resource . name ,
189- value : resource . id ,
190- schema : resource . schema ,
191- } ) ) || [ ] ;
199+ const [ resId , setResId ] = useState ( '' ) ;
192200
193- setSelectedFields ( allResources ) ;
194- setSelectedResources ( allResources ) ;
195- setShowSelectAll ( false ) ;
201+ const handleAddResource = ( resourceDetails : any ) => {
202+ setSelectedResources ( resourceDetails ) ;
203+ setResId ( '' ) ;
204+ setAvailableResources ( resourceDetails ) ; // Filter out the selected resource
205+ setSelectedFields ( resourceDetails ) ;
206+ const newResources = resourceDetails . map ( ( resource : any ) => ( {
207+ resource : resource . value ,
208+ fields : resource . schema . map ( ( field : any ) => field . id ) ,
209+ } ) ) ;
196210
197- setAccessModelData ( ( prevData ) => ( {
211+ setAccessModelData ( ( prevData : any ) => ( {
198212 ...prevData ,
199- resources : allResources . map ( ( resource : any ) => ( { id : resource . value } ) ) ,
213+ resources : newResources ,
200214 } ) ) ;
215+ if ( resourceDetails . length === 0 ) {
216+ setAccessModelData ( ( prevData : any ) => ( {
217+ ...prevData ,
218+ resources : [ ] ,
219+ } ) ) ;
220+ } else {
221+ setAccessModelData ( ( prevData : any ) => ( {
222+ ...prevData ,
223+ resources : [ ...prevData . resources ] ,
224+ } ) ) ;
225+ }
201226 } ;
202227
203228 const handleRemoveResource = ( resourceId : any ) => {
@@ -210,21 +235,47 @@ const AccessModelForm: React.FC<AccessModelProps> = ({
210235 setSelectedFields ( ( prevFields ) =>
211236 prevFields . filter ( ( field ) => field . value . split ( '.' ) [ 0 ] !== resourceId )
212237 ) ;
238+
213239 // Remove the corresponding resource from accessModelData.resources
214240 setAccessModelData ( ( prevData : any ) => ( {
215241 ...prevData ,
216242 resources : prevData . resources . filter (
217- ( resource : any ) => resource . id !== resourceId
243+ ( resource : any ) => resource . resource !== resourceId
218244 ) ,
219245 } ) ) ;
220246 } ;
221247
248+ const handleSelectAll = ( ) => {
249+ const allResources =
250+ data ?. datasetResources . map ( ( resource : any ) => ( {
251+ label : resource . name ,
252+ value : resource . id ,
253+ schema : resource . schema ,
254+ } ) ) || [ ] ;
255+
256+ setSelectedFields ( allResources ) ;
257+ setSelectedResources ( allResources ) ;
258+ setShowSelectAll ( false ) ;
259+
260+ setAccessModelData ( ( prevData ) => ( {
261+ ...prevData ,
262+ resources : allResources . map ( ( resource : any ) => ( {
263+ resource : resource . value ,
264+ fields : resource . schema . map ( ( option : any ) => option . value ) ,
265+ } ) ) ,
266+ } ) ) ;
267+ } ;
268+
222269 const { mutate, isLoading : editMutationLoading } = useMutation (
223270 ( data : { accessModelInput : EditAccessModelInput } ) =>
224271 GraphQL ( editaccessModel , data ) ,
225272 {
226273 onSuccess : ( ) => {
227274 toast ( 'Access Model Saved' ) ;
275+ // refetch();
276+ // accessModelListRefetch();
277+
278+ setList ( true ) ;
228279 } ,
229280 onError : ( err : any ) => {
230281 toast ( `Received ${ err } during access model saving` ) ;
@@ -307,7 +358,10 @@ const AccessModelForm: React.FC<AccessModelProps> = ({
307358 </ Sheet >
308359 </ div >
309360 < Divider />
310- { isLoading || editMutationLoading ? (
361+ { isLoading ||
362+ editMutationLoading ||
363+ accessModelDetailsLoading ||
364+ accessModelListLoading ? (
311365 < div className = "mt-8 flex justify-center" >
312366 < Spinner />
313367 </ div >
@@ -316,14 +370,14 @@ const AccessModelForm: React.FC<AccessModelProps> = ({
316370 < div className = "text-center" >
317371 < Button
318372 onClick = { ( ) =>
319- console . log ( {
373+ mutate ( {
320374 accessModelInput : {
321375 name : accessModelData . name ,
322376 resources : accessModelData . resources ,
323377 dataset : accessModelData . dataset ,
324378 description : accessModelData . description ,
325379 type : accessModelData . type as AccessTypes ,
326- accessModelId : accessModelId ,
380+ accessModelId : accessModelId || null ,
327381 } ,
328382 } )
329383 }
@@ -354,7 +408,8 @@ const AccessModelForm: React.FC<AccessModelProps> = ({
354408 { label : 'Private' , value : 'PRIVATE' } ,
355409 ] }
356410 label = { 'Permissions' }
357- defaultValue = "PUBLIC"
411+ defaultValue = { 'PUBLIC' }
412+ value = { accessModelData . type }
358413 placeholder = "Select"
359414 onChange = { ( e ) =>
360415 setAccessModelData ( { ...accessModelData , type : e } )
0 commit comments