19
19
********************************************************************************/
20
20
21
21
import { Table } from '@catena-x/portal-shared-components'
22
- import { fetchSemanticModels } from 'features/semanticModels/actions'
23
- import { semanticModelsSelector } from 'features/semanticModels/slice'
24
22
import {
25
- type FilterParams ,
23
+ useDeleteModelByIdMutation ,
24
+ useGetModelsQuery ,
25
+ } from 'features/semanticModels/apiSlice'
26
+ import {
26
27
type SemanticModel ,
27
28
DefaultStatus ,
28
29
} from 'features/semanticModels/types'
29
30
import { useState , useEffect } from 'react'
30
31
import { useTranslation } from 'react-i18next'
31
- import { useDispatch , useSelector } from 'react-redux'
32
32
import { LoadMoreButton } from '../../shared/basic/LoadMoreButton'
33
33
import { SemanticModelTableColumns } from './SemanticModelTableColumn'
34
34
import uniqueId from 'lodash/uniqueId'
35
- import type { AppDispatch } from 'features/store'
35
+ import { useSelector } from 'react-redux'
36
+ import { semanticModelsSelector } from 'features/semanticModels/slice'
36
37
37
38
interface ModelTableProps {
38
39
onModelSelect : ( id : string ) => void
@@ -44,11 +45,9 @@ type SelectedFilter = {
44
45
45
46
const ModelTable = ( { onModelSelect } : ModelTableProps ) => {
46
47
const { t } = useTranslation ( )
47
- const dispatch = useDispatch < AppDispatch > ( )
48
- const { modelList, loadingModelList, deleteModelId, uploadedModel, error } =
49
- useSelector ( semanticModelsSelector )
50
48
const [ models , setModels ] = useState < SemanticModel [ ] > ( [ ] )
51
49
const [ pageNumber , setPageNumber ] = useState < number > ( 0 )
50
+ const [ searchValue , setSearchValue ] = useState < string > ( '' )
52
51
const [ selectedFilter , setSelectedFilter ] = useState < SelectedFilter > ( {
53
52
status : [ DefaultStatus ] ,
54
53
} )
@@ -77,87 +76,78 @@ const ModelTable = ({ onModelSelect }: ModelTableProps) => {
77
76
} ,
78
77
]
79
78
79
+ const {
80
+ data : modelList ,
81
+ isLoading : loadingModelList ,
82
+ error : modelListError ,
83
+ } = useGetModelsQuery ( {
84
+ page : pageNumber ,
85
+ pageSize : rowCount ,
86
+ namespaceFilter : searchValue ,
87
+ status :
88
+ selectedFilter . status [ 0 ] !== DefaultStatus
89
+ ? selectedFilter . status [ 0 ]
90
+ : undefined ,
91
+ } )
92
+
93
+ const [ deleteModelById ] = useDeleteModelByIdMutation ( )
94
+
95
+ const { uploadedModel } = useSelector ( semanticModelsSelector )
96
+
80
97
useEffect ( ( ) => {
81
- const filter = {
82
- page : pageNumber ,
83
- pageSize : rowCount ,
84
- ... ( selectedFilter . status [ 0 ] !== DefaultStatus && {
85
- status : selectedFilter . status [ 0 ] ,
86
- } ) ,
98
+ if ( modelList ) {
99
+ if ( pageNumber === 0 ) {
100
+ setModels ( modelList . items )
101
+ } else {
102
+ setModels ( ( prevModels ) => [ ... prevModels , ... modelList . items ] )
103
+ }
87
104
}
88
- dispatch ( fetchSemanticModels ( { filter } ) )
89
- } , [ dispatch , pageNumber ] )
105
+ } , [ modelList , pageNumber ] )
90
106
91
107
useEffect ( ( ) => {
92
- if ( deleteModelId . length > 0 ) {
108
+ if ( deleteModelById . length > 0 ) {
93
109
setModels ( ( prevModels ) =>
94
- prevModels . filter ( ( model ) => model . urn !== deleteModelId )
110
+ prevModels . filter ( ( model ) => model . urn !== deleteModelById . toString ( ) )
95
111
)
96
112
}
97
- } , [ deleteModelId ] )
113
+ } , [ deleteModelById ] )
98
114
99
115
useEffect ( ( ) => {
100
- if ( uploadedModel !== null ) {
116
+ if ( uploadedModel ) {
101
117
setModels ( ( prevModels ) => [ uploadedModel , ...prevModels ] )
102
118
}
103
119
} , [ uploadedModel ] )
104
120
105
- useEffect ( ( ) => {
106
- if ( models . length > 0 && pageNumber > 0 ) {
107
- if ( modelList . items . length > 0 )
108
- setModels ( ( prevModels ) => prevModels . concat ( modelList . items ) )
109
- } else {
110
- setModels ( modelList . items )
111
- }
112
- } , [ modelList ] )
113
-
114
121
const onFilterReset = ( ) => {
115
- //Reset PageNumber back to 0
116
- dispatch ( fetchSemanticModels ( { filter : { page : 0 , pageSize : rowCount } } ) )
122
+ setPageNumber ( 0 )
123
+ setSelectedFilter ( { status : [ DefaultStatus ] } )
117
124
}
118
125
119
126
const onSearch = ( value : string ) => {
127
+ setSearchValue ( value )
120
128
setModels ( [ ] )
121
- const filter : FilterParams = {
122
- page : 0 ,
123
- pageSize : rowCount ,
124
- namespaceFilter : value ,
125
- ...( selectedFilter . status [ 0 ] !== DefaultStatus && {
126
- status : selectedFilter . status [ 0 ] ,
127
- } ) ,
128
- }
129
- dispatch ( fetchSemanticModels ( { filter } ) )
130
129
}
131
130
132
131
const onFilter = ( selectedFilter : SelectedFilter ) => {
133
132
setModels ( [ ] )
134
- //Reset PageNumber back to 0
135
133
setPageNumber ( 0 )
136
134
setSelectedFilter ( selectedFilter )
137
- if ( selectedFilter . status [ 0 ] !== DefaultStatus ) {
138
- dispatch (
139
- fetchSemanticModels ( {
140
- filter : {
141
- page : 0 ,
142
- pageSize : rowCount ,
143
- status : selectedFilter . status [ 0 ] ,
144
- } ,
145
- } )
146
- )
147
- } else {
135
+ if ( selectedFilter . status [ 0 ] === DefaultStatus ) {
148
136
onFilterReset ( )
149
137
}
150
138
}
139
+
151
140
const columns = SemanticModelTableColumns ( t , onModelSelect )
141
+
152
142
const errorObj = {
153
143
status : 0 ,
154
144
message : '' ,
155
145
}
156
146
157
- if ( error ) {
158
- errorObj . status = Number ( error )
147
+ if ( modelListError ) {
148
+ errorObj . status = Number ( modelListError )
159
149
errorObj . message =
160
- Number ( error ) >= 400 && Number ( error ) < 500
150
+ Number ( modelListError ) >= 400 && Number ( modelListError ) < 500
161
151
? t ( 'global.errors.dataLoadFailed' )
162
152
: t ( 'global.errors.loadFailed' )
163
153
}
@@ -166,7 +156,7 @@ const ModelTable = ({ onModelSelect }: ModelTableProps) => {
166
156
< section >
167
157
< Table
168
158
autoFocus = { false }
169
- rowsCount = { modelList . totalItems }
159
+ rowsCount = { modelList ? .totalItems }
170
160
hideFooter
171
161
loading = { loadingModelList }
172
162
disableRowSelectionOnClick = { true }
@@ -191,21 +181,13 @@ const ModelTable = ({ onModelSelect }: ModelTableProps) => {
191
181
getRowId = { ( row : { urn : string | undefined } ) => uniqueId ( row . urn ) }
192
182
hasBorder = { false }
193
183
error = { errorObj }
194
- reload = { ( ) =>
195
- dispatch (
196
- fetchSemanticModels ( {
197
- filter : {
198
- page : 0 ,
199
- pageSize : rowCount ,
200
- status : selectedFilter . status [ 0 ] ,
201
- } ,
202
- } )
203
- )
204
- }
184
+ reload = { ( ) => {
185
+ setPageNumber ( 0 )
186
+ } }
205
187
noRowsMsg = { t ( 'global.noData.heading' ) }
206
188
/>
207
189
< div className = "load-more-button-container" >
208
- { modelList . totalPages !== pageNumber && (
190
+ { modelList ? .totalPages !== pageNumber && (
209
191
< LoadMoreButton
210
192
onClick = { ( ) => {
211
193
setPageNumber ( ( prevState ) => prevState + 1 )
0 commit comments