1414// You should have received a copy of the GNU Affero General Public License 
1515// along with this program.  If not, see <http://www.gnu.org/licenses/>. 
1616
17- import  React ,  {  useState  }  from  "react" ; 
17+ import  React ,  {  useEffect ,   useState  }  from  "react" ; 
1818import  Grid  from  "@material-ui/core/Grid" ; 
1919import  Typography  from  "@material-ui/core/Typography" ; 
2020import  TextField  from  "@material-ui/core/TextField" ; 
@@ -28,6 +28,12 @@ import AddCluster from "./AddCluster";
2828import  {  createStyles ,  Theme ,  withStyles  }  from  "@material-ui/core/styles" ; 
2929import  DeleteCluster  from  "./DeleteCluster" ; 
3030import  {  Link  }  from  "react-router-dom" ; 
31+ import  api  from  "../../../../common/api" ; 
32+ import  {  PolicyList  }  from  "../../Policies/types" ; 
33+ import  {  GroupsList  }  from  "../../Groups/types" ; 
34+ import  {  stringSort  }  from  "../../../../utils/sortFunctions" ; 
35+ import  {  ICluster ,  IClustersResponse  }  from  "./types" ; 
36+ import  {  niceBytes  }  from  "../../../../common/utils" ; 
3137
3238interface  IClustersList  { 
3339  classes : any ; 
@@ -85,8 +91,9 @@ const ListClusters = ({ classes }: IClustersList) => {
8591  const  [ filterClusters ,  setFilterClusters ]  =  useState < string > ( "" ) ; 
8692  const  [ records ,  setRecords ]  =  useState < any [ ] > ( [ ] ) ; 
8793  const  [ offset ,  setOffset ]  =  useState < number > ( 0 ) ; 
88-   const  [ rowsPerPage ,  setRowsPerPage ]  =  useState < number > ( 0 ) ; 
94+   const  [ rowsPerPage ,  setRowsPerPage ]  =  useState < number > ( 10 ) ; 
8995  const  [ page ,  setPage ]  =  useState < number > ( 0 ) ; 
96+   const  [ error ,  setError ]  =  useState < string > ( "" ) ; 
9097
9198  const  closeAddModalAndRefresh  =  ( reloadData : boolean )  =>  { 
9299    setCreateClusterOpen ( false ) ; 
@@ -140,6 +147,54 @@ const ListClusters = ({ classes }: IClustersList) => {
140147      } 
141148    } ) ; 
142149
150+   useEffect ( ( )  =>  { 
151+     if  ( isLoading )  { 
152+       const  fetchRecords  =  ( )  =>  { 
153+         const  offset  =  page  *  rowsPerPage ; 
154+         api 
155+           . invoke ( 
156+             "GET" , 
157+             `/api/v1/clusters?offset=${ offset }  &limit=${ rowsPerPage }  ` 
158+           ) 
159+           . then ( ( res : IClustersResponse )  =>  { 
160+             if  ( res  ===  null )  { 
161+               setIsLoading ( false ) ; 
162+               return ; 
163+             } 
164+             let  resClusters : ICluster [ ]  =  [ ] ; 
165+             if  ( res . clusters  !==  null )  { 
166+               resClusters  =  res . clusters ; 
167+             } 
168+ 
169+             for  ( let  i  =  0 ;  i  <  resClusters . length ;  i ++ )  { 
170+               const  total  = 
171+                 resClusters [ i ] . volume_count  *  resClusters [ i ] . volume_size ; 
172+               resClusters [ i ] . capacity  =  niceBytes ( total  +  "" ) ; 
173+             } 
174+ 
175+             setRecords ( resClusters ) ; 
176+             setError ( "" ) ; 
177+             setIsLoading ( false ) ; 
178+ 
179+             // if we get 0 results, and page > 0 , go down 1 page 
180+             if  ( ( ! res . clusters  ||  res . clusters . length  ===  0 )  &&  page  >  0 )  { 
181+               const  newPage  =  page  -  1 ; 
182+               setPage ( newPage ) ; 
183+             } 
184+           } ) 
185+           . catch ( ( err )  =>  { 
186+             setError ( err ) ; 
187+             setIsLoading ( false ) ; 
188+           } ) ; 
189+       } ; 
190+       fetchRecords ( ) ; 
191+     } 
192+   } ,  [ isLoading ,  page ,  rowsPerPage ] ) ; 
193+ 
194+   useEffect ( ( )  =>  { 
195+     setIsLoading ( true ) ; 
196+   } ,  [ ] ) ; 
197+ 
143198  return  ( 
144199    < React . Fragment > 
145200      { createClusterOpen  &&  ( 
@@ -200,7 +255,8 @@ const ListClusters = ({ classes }: IClustersList) => {
200255            columns = { [ 
201256              {  label : "Name" ,  elementKey : "name"  } , 
202257              {  label : "Capacity" ,  elementKey : "capacity"  } , 
203-               {  label : "# of Zones" ,  elementKey : "zones_counter"  } , 
258+               {  label : "# of Zones" ,  elementKey : "zone_count"  } , 
259+               {  label : "State" ,  elementKey : "currentState"  } , 
204260            ] } 
205261            isLoading = { isLoading } 
206262            records = { filteredRecords } 
0 commit comments