@@ -60,14 +60,16 @@ export const ModelsList: FC = () => {
6060 const [ sortDirection , setSortDirection ] = useState < Direction > ( 'asc' ) ;
6161
6262 const [ isLoading , setIsLoading ] = useState ( false ) ;
63- const [ modelsStats , setModelsStats ] = useState < ModelsBarStats | undefined > ( ) ;
6463 const [ items , setItems ] = useState < ModelItem [ ] > ( [ ] ) ;
6564 const [ selectedModels , setSelectedModels ] = useState < ModelItem [ ] > ( [ ] ) ;
6665
6766 const [ modelsToDelete , setModelsToDelete ] = useState < ModelWithStats [ ] > ( [ ] ) ;
6867
6968 const [ itemIdToExpandedRowMap , setItemIdToExpandedRowMap ] = useState < Record < string , any > > ( { } ) ;
7069
70+ /**
71+ * Fetches inference trained models.
72+ */
7173 async function fetchData ( ) {
7274 setIsLoading ( true ) ;
7375 try {
@@ -80,16 +82,6 @@ export const ModelsList: FC = () => {
8082 : { } ) ,
8183 } ) )
8284 ) ;
83-
84- setModelsStats ( {
85- total : {
86- show : true ,
87- value : response . trained_model_configs . length ,
88- label : i18n . translate ( 'xpack.ml.inference.modelsList.totalAmountLabel' , {
89- defaultMessage : 'Total inference trained models' ,
90- } ) ,
91- } ,
92- } ) ;
9385 } catch ( error ) {
9486 toasts . addError ( new Error ( error . body . message ) , {
9587 title : i18n . translate ( 'xpack.ml.inference.modelsList.fetchFailedErrorMessage' , {
@@ -100,6 +92,18 @@ export const ModelsList: FC = () => {
10092 setIsLoading ( false ) ;
10193 }
10294
95+ const modelsStats : ModelsBarStats = useMemo ( ( ) => {
96+ return {
97+ total : {
98+ show : true ,
99+ value : items . length ,
100+ label : i18n . translate ( 'xpack.ml.inference.modelsList.totalAmountLabel' , {
101+ defaultMessage : 'Total inference trained models' ,
102+ } ) ,
103+ } ,
104+ } ;
105+ } , [ items ] ) ;
106+
103107 useEffect ( ( ) => {
104108 fetchData ( ) ;
105109 } , [ ] ) ;
@@ -167,20 +171,38 @@ export const ModelsList: FC = () => {
167171 }
168172 }
169173
174+ /**
175+ * Deletes the models marked for deletion.
176+ */
170177 async function deleteModels ( ) {
178+ const modelsToDeleteIds = modelsToDelete . map ( ( model ) => model . model_id ) ;
179+
171180 try {
172181 await Promise . all (
173- modelsToDelete . map ( ( model ) => inferenceApiService . deleteInferenceModel ( model . model_id ) )
182+ modelsToDeleteIds . map ( ( modelId ) => inferenceApiService . deleteInferenceModel ( modelId ) )
174183 ) ;
175184 setItems (
176185 items . filter (
177186 ( model ) => ! modelsToDelete . some ( ( toDelete ) => toDelete . model_id === model . model_id )
178187 )
179188 ) ;
189+ toasts . addSuccess (
190+ i18n . translate ( 'xpack.ml.inference.modelsList.successfullyDeletedMessage' , {
191+ defaultMessage :
192+ '{modelsCount, plural, one {Model} other {Models}} {modelsToDeleteIds} {modelsCount, plural, one {has} other {have}} been successfully deleted' ,
193+ values : {
194+ modelsCount : modelsToDeleteIds . length ,
195+ modelsToDeleteIds : modelsToDeleteIds . join ( ', ' ) ,
196+ } ,
197+ } )
198+ ) ;
180199 } catch ( error ) {
181- toasts . addError ( new Error ( error . body . message ) , {
200+ toasts . addError ( new Error ( error ? .body ? .message ) , {
182201 title : i18n . translate ( 'xpack.ml.inference.modelsList.fetchDeletionErrorMessage' , {
183- defaultMessage : 'Model deletion failed' ,
202+ defaultMessage : '{modelsCount, plural, one {Model} other {Models}} deletion failed' ,
203+ values : {
204+ modelsCount : modelsToDeleteIds . length ,
205+ } ,
184206 } ) ,
185207 } ) ;
186208 }
0 commit comments