@@ -29,12 +29,34 @@ const ResourceSelector: React.FC<ResourceSelectorProps> = ({
2929 useEffect ( ( ) => {
3030 const initialOptions = selectedResource . schema . map ( ( field : any ) => ( {
3131 label : field . fieldName ,
32- value : + field . id ,
32+ value : field . id . toString ( ) , // Ensure ID is a string for Combobox
3333 } ) ) ;
3434 setOptions ( initialOptions ) ;
35- if ( selectAllFields ) {
35+
36+ const selectedResourceData = accessModelData . resources . find (
37+ ( resource : any ) => resource . resource === selectedResource . id
38+ ) ;
39+
40+ if ( selectedResourceData ) {
41+ const initialSelectedFields = selectedResourceData . fields
42+ . map ( ( fieldId : any ) => {
43+ const field = selectedResource . schema . find (
44+ ( f : any ) => f . id . toString ( ) === fieldId . toString ( )
45+ ) ;
46+ return field
47+ ? {
48+ label : field . fieldName ,
49+ value : field . id . toString ( ) , // Ensure ID is a string for Combobox
50+ }
51+ : null ;
52+ } )
53+ . filter ( ( field : any ) => field !== null ) ; // Filter out null values
54+ setSelectedFields ( initialSelectedFields ) ;
55+ setSelectAllFields (
56+ initialSelectedFields . length === initialOptions . length
57+ ) ;
58+ } else if ( selectAllFields ) {
3659 setSelectedFields ( initialOptions ) ;
37- // Update accessModelData with all options selected
3860 setAccessModelData ( ( prevData : any ) => ( {
3961 ...prevData ,
4062 resources : [
@@ -43,33 +65,23 @@ const ResourceSelector: React.FC<ResourceSelectorProps> = ({
4365 ) ,
4466 {
4567 resource : selectedResource . id ,
46- fields : initialOptions . map ( ( option : any ) => option . value ) ,
68+ fields : initialOptions . map ( ( option : any ) =>
69+ parseInt ( option . value , 10 )
70+ ) , // Convert to integer
4771 } ,
4872 ] ,
4973 } ) ) ;
50- } else {
51- // Update accessModelData to remove this resource
52- setAccessModelData ( ( prevData : any ) => ( {
53- ...prevData ,
54- resources : prevData . resources . filter (
55- ( resource : any ) => resource . resource !== selectedResource . id
56- ) ,
57- } ) ) ;
5874 }
59- } , [ selectedResource . schema , selectAllFields ] ) ;
75+ } , [ selectedResource , accessModelData , selectAllFields ] ) ;
6076
61- const handleFieldSelection = ( selectedOptions : [ ] ) => {
62- setSelectedFields (
63- selectedOptions . map ( ( option : any ) => ( {
64- label : option ?. label || '' ,
65- value : option ?. value ,
66- } ) )
67- ) ;
77+ const handleFieldSelection = ( selectedOptions : any ) => {
78+ const updatedFields = selectedOptions . map ( ( option : any ) => ( {
79+ label : option . label ,
80+ value : option . value ,
81+ } ) ) ;
6882
69- // Check if all options are selected
70- const allOptionsSelected = selectedOptions . length === options . length ;
83+ setSelectedFields ( updatedFields ) ;
7184
72- // Update accessModelData with the selected fields
7385 setAccessModelData ( ( prevData : any ) => ( {
7486 ...prevData ,
7587 resources : [
@@ -78,18 +90,36 @@ const ResourceSelector: React.FC<ResourceSelectorProps> = ({
7890 ) ,
7991 {
8092 resource : selectedResource . id ,
81- fields : selectedOptions . map ( ( option : any ) => option . value ) ,
93+ fields : updatedFields . map ( ( field : any ) => parseInt ( field . value , 10 ) ) , // Convert to integer
8294 } ,
8395 ] ,
8496 } ) ) ;
8597
86- // Update selectAllFields state based on whether all options are selected or not
87- setSelectAllFields ( allOptionsSelected ) ;
98+ setSelectAllFields ( updatedFields . length === options . length ) ;
99+ } ;
100+
101+ const handleSelectAllFields = ( ) => {
102+ const updatedFields = selectAllFields ? [ ] : options ;
103+ setSelectAllFields ( ! selectAllFields ) ;
104+ setSelectedFields ( updatedFields ) ;
105+
106+ setAccessModelData ( ( prevData : any ) => ( {
107+ ...prevData ,
108+ resources : [
109+ ...prevData . resources . filter (
110+ ( resource : any ) => resource . resource !== selectedResource . id
111+ ) ,
112+ {
113+ resource : selectedResource . id ,
114+ fields : updatedFields . map ( ( field : any ) => parseInt ( field . value , 10 ) ) , // Convert to integer
115+ } ,
116+ ] ,
117+ } ) ) ;
88118 } ;
89119
90120 return (
91121 < div >
92- < div className = " mb-4" >
122+ < div className = "mb-4" >
93123 < Text > { selectedResource . name } </ Text >
94124 </ div >
95125 < div className = "flex flex-wrap justify-start gap-6 px-8" >
@@ -98,47 +128,44 @@ const ResourceSelector: React.FC<ResourceSelectorProps> = ({
98128 < div className = "w-full" >
99129 < Combobox
100130 displaySelected
101- label = { ' Select Fields of the Resource' }
131+ label = " Select Fields of the Resource"
102132 list = { options }
103133 selectedValue = { selectedFields }
104- name = { '' }
105- helpText = { ' Use the dropdown to add specific fields' }
134+ name = ""
135+ helpText = " Use the dropdown to add specific fields"
106136 onChange = { ( e : any ) => handleFieldSelection ( e ) }
107137 />
108138 </ div >
109- < div className = "absolute right-0 top-0 " style = { { top : '-4px' } } >
139+ < div className = "absolute right-0" style = { { top : '-4px' } } >
110140 < Checkbox
111- name = { 'Select All Fields' }
112- defaultChecked = { true }
141+ name = "Select All Fields"
113142 checked = { selectAllFields }
114- onChange = { ( ) => setSelectAllFields ( ! selectAllFields ) }
143+ onChange = { handleSelectAllFields }
115144 >
116145 Select All
117146 </ Checkbox >
118147 </ div >
119148 </ div >
120149 </ div >
121150 < div className = "flex gap-6" >
122- < hr className = " m-0" />
151+ < hr className = "m-0" />
123152 < div className = "flex w-fit flex-col items-center justify-center gap-1" >
124- < div className = "flex w-full items-center justify-between gap-2 " >
153+ < div className = "flex w-full items-center justify-between gap-2" >
125154 < Text > Select Rows of the Resource</ Text >
126155 < Checkbox
127- name = { ' Select All Rows' }
156+ name = " Select All Rows"
128157 defaultChecked = { false }
129158 onChange = { ( e ) => console . log ( e ) }
130159 >
131160 Select All
132161 </ Checkbox >
133162 </ div >
134- < div
135- className = { cn ( 'flex flex-wrap gap-6' , styles . accessModelEdit ) }
136- >
137- < TextField type = "number" label = "From Row Number" name = "name" />
138- < TextField type = "number" label = "From Row Number" name = "name" />
163+ < div className = { cn ( 'flex flex-wrap gap-6' , styles . accessModelEdit ) } >
164+ < TextField type = "number" label = "From Row Number" name = "fromRow" />
165+ < TextField type = "number" label = "To Row Number" name = "toRow" />
139166 </ div >
140167 </ div >
141- < hr className = " m-0" />
168+ < hr className = "m-0" />
142169 </ div >
143170 < Button
144171 className = "my-auto h-fit w-fit items-center"
0 commit comments