From 46a06353d366455135bfaad713bcc4499f8c8c95 Mon Sep 17 00:00:00 2001 From: Lucas Fernandez Date: Wed, 18 Sep 2024 18:45:28 +0200 Subject: [PATCH] Add Registered Model View (#396) Signed-off-by: lucferbux --- .../ui/bff/api/registered_models_handler.go | 3 +- .../bff/internals/mocks/static_data_mock.go | 38 +- clients/ui/frontend/docs/architecture.md | 6 +- .../ui/frontend/docs/meta/arch-overview.png | Bin 0 -> 1349457 bytes clients/ui/frontend/package-lock.json | 120 ++++- clients/ui/frontend/package.json | 12 +- .../frontend/src/__mocks__/mockBFFResponse.ts | 5 + .../__mocks__/mockModelRegistryResponse.ts | 8 - clients/ui/frontend/src/__mocks__/utils.ts | 10 +- .../cypress/pages/components/Contextual.ts | 7 + .../cypress/cypress/pages/components/Modal.ts | 29 ++ .../cypress/cypress/pages/components/table.ts | 26 ++ .../cypress/cypress/pages/modelRegistry.ts | 136 +++--- .../cypress/cypress/support/commands/api.ts | 7 +- .../cypress/tests/mocked/modelRegistry.cy.ts | 176 +++---- .../__tests__/cypress/cypress/utils/should.ts | 56 +++ .../src/app/api/__tests__/errorUtils.spec.ts | 5 +- .../src/app/api/__tests__/service.spec.ts | 436 ++++++++---------- clients/ui/frontend/src/app/api/apiUtils.ts | 9 +- clients/ui/frontend/src/app/api/k8s.ts | 4 +- clients/ui/frontend/src/app/api/service.ts | 132 +++++- .../components/DashboardEmptyTableView.tsx | 40 ++ .../app/components/DashboardModalFooter.tsx | 74 +++ .../app/components/DashboardSearchField.tsx | 75 +++ .../src/app/components/MarkdownView.scss | 88 ++++ .../src/app/components/MarkdownView.tsx | 34 ++ .../src/app/components/SimpleSelect.scss | 9 + .../src/app/components/SimpleSelect.tsx | 144 ++++++ .../src/app/components/design/utils.ts | 14 +- .../src/app/components/table/CheckboxTd.tsx | 42 ++ .../src/app/components/table/Table.tsx | 66 +++ .../src/app/components/table/TableBase.tsx | 318 +++++++++++++ .../table/TableRowTitleDescription.tsx | 50 ++ .../table/__tests__/useCheckboxTable.spec.ts | 54 +++ .../src/app/components/table/const.ts | 23 + .../src/app/components/table/index.ts | 13 + .../src/app/components/table/types.ts | 27 ++ .../app/components/table/useCheckboxTable.ts | 29 ++ .../components/table/useCheckboxTableBase.ts | 117 +++++ .../components/table/useTableColumnSort.ts | 135 ++++++ .../modelRegistry/ModelRegistryRoutes.tsx | 8 +- .../modelRegistry/screens/ModelRegistry.tsx | 9 +- .../RegisteredModelListView.tsx | 117 +++++ .../RegisteredModels/RegisteredModelTable.tsx | 34 ++ .../RegisteredModelTableRow.tsx | 124 +++++ .../RegisteredModelsTableColumns.ts | 42 ++ .../RegisteredModelsTableToolbar.tsx | 122 +++++ .../RegisteredModelsArchive.tsx | 47 ++ .../RegisteredModelsArchiveListView.tsx | 100 ++++ .../RegisteredModelsArchiveTable.tsx | 34 ++ .../ArchiveRegisteredModelModal.tsx | 95 ++++ .../screens/components/ModelLabels.tsx | 120 +++++ .../screens/components/ModelTimestamp.tsx | 32 ++ .../components/RestoreRegisteredModel.tsx | 67 +++ .../app/pages/modelRegistry/screens/utils.ts | 150 ++++++ clients/ui/frontend/src/app/types.ts | 5 +- clients/ui/frontend/src/app/utils.ts | 48 ++ .../src/images/no-models-model-registry.svg | 180 ++++++++ .../src/images/no-versions-model-registry.svg | 149 ++++++ clients/ui/frontend/src/types.ts | 5 + clients/ui/frontend/src/utilities/markdown.ts | 53 +++ clients/ui/frontend/src/utilities/time.ts | 69 +++ .../src/utilities/useDebounceCallback.ts | 10 + 63 files changed, 3744 insertions(+), 453 deletions(-) create mode 100644 clients/ui/frontend/docs/meta/arch-overview.png create mode 100644 clients/ui/frontend/src/__mocks__/mockBFFResponse.ts delete mode 100644 clients/ui/frontend/src/__mocks__/mockModelRegistryResponse.ts create mode 100644 clients/ui/frontend/src/__tests__/cypress/cypress/pages/components/Contextual.ts create mode 100644 clients/ui/frontend/src/__tests__/cypress/cypress/pages/components/Modal.ts create mode 100644 clients/ui/frontend/src/__tests__/cypress/cypress/pages/components/table.ts create mode 100644 clients/ui/frontend/src/__tests__/cypress/cypress/utils/should.ts create mode 100644 clients/ui/frontend/src/app/components/DashboardEmptyTableView.tsx create mode 100644 clients/ui/frontend/src/app/components/DashboardModalFooter.tsx create mode 100644 clients/ui/frontend/src/app/components/DashboardSearchField.tsx create mode 100644 clients/ui/frontend/src/app/components/MarkdownView.scss create mode 100644 clients/ui/frontend/src/app/components/MarkdownView.tsx create mode 100644 clients/ui/frontend/src/app/components/SimpleSelect.scss create mode 100644 clients/ui/frontend/src/app/components/SimpleSelect.tsx create mode 100644 clients/ui/frontend/src/app/components/table/CheckboxTd.tsx create mode 100644 clients/ui/frontend/src/app/components/table/Table.tsx create mode 100644 clients/ui/frontend/src/app/components/table/TableBase.tsx create mode 100644 clients/ui/frontend/src/app/components/table/TableRowTitleDescription.tsx create mode 100644 clients/ui/frontend/src/app/components/table/__tests__/useCheckboxTable.spec.ts create mode 100644 clients/ui/frontend/src/app/components/table/const.ts create mode 100644 clients/ui/frontend/src/app/components/table/index.ts create mode 100644 clients/ui/frontend/src/app/components/table/types.ts create mode 100644 clients/ui/frontend/src/app/components/table/useCheckboxTable.ts create mode 100644 clients/ui/frontend/src/app/components/table/useCheckboxTableBase.ts create mode 100644 clients/ui/frontend/src/app/components/table/useTableColumnSort.ts create mode 100644 clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelListView.tsx create mode 100644 clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelTable.tsx create mode 100644 clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelTableRow.tsx create mode 100644 clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelsTableColumns.ts create mode 100644 clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelsTableToolbar.tsx create mode 100644 clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelsArchive.tsx create mode 100644 clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelsArchiveListView.tsx create mode 100644 clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelsArchiveTable.tsx create mode 100644 clients/ui/frontend/src/app/pages/modelRegistry/screens/components/ArchiveRegisteredModelModal.tsx create mode 100644 clients/ui/frontend/src/app/pages/modelRegistry/screens/components/ModelLabels.tsx create mode 100644 clients/ui/frontend/src/app/pages/modelRegistry/screens/components/ModelTimestamp.tsx create mode 100644 clients/ui/frontend/src/app/pages/modelRegistry/screens/components/RestoreRegisteredModel.tsx create mode 100644 clients/ui/frontend/src/app/pages/modelRegistry/screens/utils.ts create mode 100644 clients/ui/frontend/src/app/utils.ts create mode 100644 clients/ui/frontend/src/images/no-models-model-registry.svg create mode 100644 clients/ui/frontend/src/images/no-versions-model-registry.svg create mode 100644 clients/ui/frontend/src/utilities/markdown.ts create mode 100644 clients/ui/frontend/src/utilities/time.ts create mode 100644 clients/ui/frontend/src/utilities/useDebounceCallback.ts diff --git a/clients/ui/bff/api/registered_models_handler.go b/clients/ui/bff/api/registered_models_handler.go index 6a27215bc..dc28ff1f5 100644 --- a/clients/ui/bff/api/registered_models_handler.go +++ b/clients/ui/bff/api/registered_models_handler.go @@ -4,11 +4,12 @@ import ( "encoding/json" "errors" "fmt" + "net/http" + "github.com/julienschmidt/httprouter" "github.com/kubeflow/model-registry/pkg/openapi" "github.com/kubeflow/model-registry/ui/bff/integrations" "github.com/kubeflow/model-registry/ui/bff/validation" - "net/http" ) type RegisteredModelEnvelope Envelope[*openapi.RegisteredModel, None] diff --git a/clients/ui/bff/internals/mocks/static_data_mock.go b/clients/ui/bff/internals/mocks/static_data_mock.go index d534fde5b..a156c8d52 100644 --- a/clients/ui/bff/internals/mocks/static_data_mock.go +++ b/clients/ui/bff/internals/mocks/static_data_mock.go @@ -29,7 +29,19 @@ func GetRegisteredModelMocks() []openapi.RegisteredModel { State: stateToPointer(openapi.REGISTEREDMODELSTATE_LIVE), } - return []openapi.RegisteredModel{model1, model2} + model3 := openapi.RegisteredModel{ + CustomProperties: newCustomProperties(), + Name: "Model Three", + Description: stringToPointer("This model does things and stuff"), + ExternalId: stringToPointer("345235989"), + Id: stringToPointer("3"), + CreateTimeSinceEpoch: stringToPointer("1725282249933"), + LastUpdateTimeSinceEpoch: stringToPointer("1725282249933"), + Owner: stringToPointer("M. Oriarty"), + State: stateToPointer(openapi.REGISTEREDMODELSTATE_ARCHIVED), + } + + return []openapi.RegisteredModel{model1, model2, model3} } func GetRegisteredModelListMock() openapi.RegisteredModelList { @@ -135,10 +147,28 @@ func GetModelArtifactListMock() openapi.ModelArtifactList { func newCustomProperties() *map[string]openapi.MetadataValue { result := map[string]openapi.MetadataValue{ - "my-label9": { + "tensorflow": { + MetadataStringValue: &openapi.MetadataStringValue{ + StringValue: "", + MetadataType: "MetadataStringValue", + }, + }, + "pytorch": { + MetadataStringValue: &openapi.MetadataStringValue{ + StringValue: "", + MetadataType: "MetadataStringValue", + }, + }, + "mll": { + MetadataStringValue: &openapi.MetadataStringValue{ + StringValue: "", + MetadataType: "MetadataStringValue", + }, + }, + "rnn": { MetadataStringValue: &openapi.MetadataStringValue{ - StringValue: "property9", - MetadataType: "string", + StringValue: "", + MetadataType: "MetadataStringValue", }, }, } diff --git a/clients/ui/frontend/docs/architecture.md b/clients/ui/frontend/docs/architecture.md index c18228f4d..5ad39411b 100644 --- a/clients/ui/frontend/docs/architecture.md +++ b/clients/ui/frontend/docs/architecture.md @@ -1,3 +1,7 @@ # Model Registry UI Architecture -[TBD] \ No newline at end of file +## Overview + +![Overview](./meta/arch-overview.png) + +[TBD] diff --git a/clients/ui/frontend/docs/meta/arch-overview.png b/clients/ui/frontend/docs/meta/arch-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..bfdfb90655b1c9db42fe64bc85f6cb1f95c11927 GIT binary patch literal 1349457 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 iuePkm`3zFV} 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 eY$KK=Il`;kp`PN|h|%H1HlfBdz4Q#9E# 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%0A@9xt!aZ(#ON!N8T$d}8h_cGuCSq&@P>#nSNEG*q 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 YJ4Rl8_&4X*xNDQfPx~tD%lSY2KiU(;5C8xG literal 0 HcmV?d00001 diff --git a/clients/ui/frontend/package-lock.json b/clients/ui/frontend/package-lock.json index fec36417a..7dbae7b04 100644 --- a/clients/ui/frontend/package-lock.json +++ b/clients/ui/frontend/package-lock.json @@ -12,11 +12,15 @@ "@patternfly/react-core": "6.0.0-alpha.102", "@patternfly/react-icons": "6.0.0-alpha.37", "@patternfly/react-styles": "6.0.0-alpha.35", - "lodash-es": "^4.17.21", + "@patternfly/react-table": "6.0.0-alpha.101", + "classnames": "^2.2.6", + "dompurify": "^2.2.6", + "lodash-es": "^4.17.15", "npm-run-all": "^4.1.5", "react": "^18", "react-dom": "^18", - "sass": "^1.78.0" + "sass": "^1.78.0", + "showdown": "^2.1.0" }, "devDependencies": { "@babel/preset-env": "^7.21.5", @@ -28,8 +32,12 @@ "@testing-library/jest-dom": "^6.5.0", "@testing-library/react": "^16.0.0", "@testing-library/user-event": "14.5.2", + "@types/classnames": "^2.3.1", + "@types/dompurify": "^2.2.6", "@types/jest": "^29.5.12", + "@types/lodash-es": "^4.17.8", "@types/react-router-dom": "^5.3.3", + "@types/showdown": "^2.0.3", "chai-subset": "^1.6.0", "copy-webpack-plugin": "^12.0.2", "core-js": "^3.37.1", @@ -3607,6 +3615,24 @@ "integrity": "sha512-9ddQpDJ1CXDbsuV5lYmynw8hqGncKXxnhNwvUKc+s/i50pNBAMmNO9CP5dkKhnZPcjHQj0A35aleQ7xdRgNWQw==", "license": "MIT" }, + "node_modules/@patternfly/react-table": { + "version": "6.0.0-alpha.101", + "resolved": "https://registry.npmjs.org/@patternfly/react-table/-/react-table-6.0.0-alpha.101.tgz", + "integrity": "sha512-nR5UsFsht0ZtoAXH69mJGKx+H/o6GFZ1fjiTWoP6Mt4Rz5T0k/OyGmlcothJb4zMc+kjDdhDZIKIqQAF+qyqmA==", + "license": "MIT", + "dependencies": { + "@patternfly/react-core": "^6.0.0-alpha.100", + "@patternfly/react-icons": "^6.0.0-alpha.35", + "@patternfly/react-styles": "^6.0.0-alpha.34", + "@patternfly/react-tokens": "^6.0.0-alpha.34", + "lodash": "^4.17.21", + "tslib": "^2.6.3" + }, + "peerDependencies": { + "react": "^17 || ^18", + "react-dom": "^17 || ^18" + } + }, "node_modules/@patternfly/react-tokens": { "version": "6.0.0-prerelease.1", "resolved": "https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-6.0.0-prerelease.1.tgz", @@ -4077,6 +4103,17 @@ "@types/node": "*" } }, + "node_modules/@types/classnames": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-zeOWb0JGBoVmlQoznvqXbE0tEC/HONsnoUNH19Hc96NFsTAwTXbTqb8FMYkru1F/iqp7a18Ws3nWJvtA1sHD1A==", + "deprecated": "This is a stub types definition. classnames provides its own type definitions, so you do not need this installed.", + "dev": true, + "license": "MIT", + "dependencies": { + "classnames": "*" + } + }, "node_modules/@types/connect": { "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", @@ -4098,6 +4135,16 @@ "@types/node": "*" } }, + "node_modules/@types/dompurify": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-2.4.0.tgz", + "integrity": "sha512-IDBwO5IZhrKvHFUl+clZxgf3hn2b/lU6H1KaBShPkQyGJUQ0xwebezIPSuiyGwfz1UzJWQl4M7BDxtHtCCPlTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/trusted-types": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -4271,6 +4318,23 @@ "license": "MIT", "optional": true }, + "node_modules/@types/lodash": { + "version": "4.17.7", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz", + "integrity": "sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -4393,6 +4457,13 @@ "@types/send": "*" } }, + "node_modules/@types/showdown": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/showdown/-/showdown-2.0.6.tgz", + "integrity": "sha512-pTvD/0CIeqe4x23+YJWlX2gArHa8G0J0Oh6GKaVXV7TAeickpkkZiNOgFcFcmLQ5lB/K0qBJL1FtRYltBfbGCQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/sinonjs__fake-timers": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", @@ -4431,6 +4502,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/ws": { "version": "8.5.12", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", @@ -6588,6 +6666,12 @@ "dev": true, "license": "MIT" }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, "node_modules/clean-css": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", @@ -8303,6 +8387,12 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, + "node_modules/dompurify": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz", + "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==", + "license": "(MPL-2.0 OR Apache-2.0)" + }, "node_modules/domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", @@ -15014,7 +15104,6 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, "license": "MIT" }, "node_modules/lodash-es": { @@ -19758,6 +19847,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/showdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz", + "integrity": "sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==", + "license": "MIT", + "dependencies": { + "commander": "^9.0.0" + }, + "bin": { + "showdown": "bin/showdown.js" + }, + "funding": { + "type": "individual", + "url": "https://www.paypal.me/tiviesantos" + } + }, + "node_modules/showdown/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, "node_modules/side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", diff --git a/clients/ui/frontend/package.json b/clients/ui/frontend/package.json index 7504ff06f..ce958388f 100644 --- a/clients/ui/frontend/package.json +++ b/clients/ui/frontend/package.json @@ -42,6 +42,10 @@ "@testing-library/user-event": "14.5.2", "@types/jest": "^29.5.12", "@types/react-router-dom": "^5.3.3", + "@types/classnames": "^2.3.1", + "@types/dompurify": "^2.2.6", + "@types/showdown": "^2.0.3", + "@types/lodash-es": "^4.17.8", "chai-subset": "^1.6.0", "copy-webpack-plugin": "^12.0.2", "core-js": "^3.37.1", @@ -89,11 +93,15 @@ "@patternfly/react-core": "6.0.0-alpha.102", "@patternfly/react-icons": "6.0.0-alpha.37", "@patternfly/react-styles": "6.0.0-alpha.35", - "lodash-es": "^4.17.21", + "@patternfly/react-table": "6.0.0-alpha.101", + "lodash-es": "^4.17.15", "npm-run-all": "^4.1.5", "react": "^18", "react-dom": "^18", - "sass": "^1.78.0" + "sass": "^1.78.0", + "dompurify": "^2.2.6", + "showdown": "^2.1.0", + "classnames": "^2.2.6" }, "optionalDependencies": { "@typescript-eslint/eslint-plugin": "^8.5.0", diff --git a/clients/ui/frontend/src/__mocks__/mockBFFResponse.ts b/clients/ui/frontend/src/__mocks__/mockBFFResponse.ts new file mode 100644 index 000000000..8b2f910b7 --- /dev/null +++ b/clients/ui/frontend/src/__mocks__/mockBFFResponse.ts @@ -0,0 +1,5 @@ +import { ModelRegistryResponse } from '~/app/types'; + +export const mockBFFResponse = (data: T): ModelRegistryResponse => ({ + data, +}); diff --git a/clients/ui/frontend/src/__mocks__/mockModelRegistryResponse.ts b/clients/ui/frontend/src/__mocks__/mockModelRegistryResponse.ts deleted file mode 100644 index 79b1e1973..000000000 --- a/clients/ui/frontend/src/__mocks__/mockModelRegistryResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -/* eslint-disable camelcase */ -import { ModelRegistryResponse } from '~/app/types'; - -export const mockModelRegistryResponse = ({ - model_registry = [], -}: Partial): ModelRegistryResponse => ({ - model_registry, -}); diff --git a/clients/ui/frontend/src/__mocks__/utils.ts b/clients/ui/frontend/src/__mocks__/utils.ts index 054067883..1500da7dc 100644 --- a/clients/ui/frontend/src/__mocks__/utils.ts +++ b/clients/ui/frontend/src/__mocks__/utils.ts @@ -1,4 +1,8 @@ -import { ModelRegistryMetadataType, ModelRegistryStringCustomProperties } from '~/app/types'; +import { + ModelRegistryMetadataType, + ModelRegistryResponse, + ModelRegistryStringCustomProperties, +} from '~/app/types'; export const createModelRegistryLabelsObject = ( labels: string[], @@ -11,3 +15,7 @@ export const createModelRegistryLabelsObject = ( }; return acc; }, {} as ModelRegistryStringCustomProperties); + +export const mockBFFResponse = (data: T): ModelRegistryResponse => ({ + data, +}); diff --git a/clients/ui/frontend/src/__tests__/cypress/cypress/pages/components/Contextual.ts b/clients/ui/frontend/src/__tests__/cypress/cypress/pages/components/Contextual.ts new file mode 100644 index 000000000..fec632f49 --- /dev/null +++ b/clients/ui/frontend/src/__tests__/cypress/cypress/pages/components/Contextual.ts @@ -0,0 +1,7 @@ +export class Contextual { + constructor(private parentSelector: () => Cypress.Chainable>) {} + + find(): Cypress.Chainable> { + return this.parentSelector(); + } +} diff --git a/clients/ui/frontend/src/__tests__/cypress/cypress/pages/components/Modal.ts b/clients/ui/frontend/src/__tests__/cypress/cypress/pages/components/Modal.ts new file mode 100644 index 000000000..a98a22392 --- /dev/null +++ b/clients/ui/frontend/src/__tests__/cypress/cypress/pages/components/Modal.ts @@ -0,0 +1,29 @@ +import type { ByRoleOptions } from '@testing-library/react'; + +export class Modal { + constructor(private title: ByRoleOptions['name']) {} + + shouldBeOpen(open = true): void { + if (open) { + this.find().testA11y(); + } else { + this.find().should('not.exist'); + } + } + + find(): Cypress.Chainable> { + return cy.findByRole('dialog', { name: this.title }); + } + + findCloseButton(): Cypress.Chainable> { + return this.find().findByRole('button', { name: 'Close' }); + } + + findCancelButton(): Cypress.Chainable> { + return this.findFooter().findByRole('button', { name: 'Cancel' }); + } + + findFooter(): Cypress.Chainable> { + return this.find().find('footer'); + } +} diff --git a/clients/ui/frontend/src/__tests__/cypress/cypress/pages/components/table.ts b/clients/ui/frontend/src/__tests__/cypress/cypress/pages/components/table.ts new file mode 100644 index 000000000..7915e8d25 --- /dev/null +++ b/clients/ui/frontend/src/__tests__/cypress/cypress/pages/components/table.ts @@ -0,0 +1,26 @@ +import { Contextual } from '~/__tests__/cypress/cypress/pages/components/Contextual'; + +export class TableRow extends Contextual { + findExpandButton(): Cypress.Chainable> { + return this.find().findByRole('button', { name: 'Details' }); + } + + findRowCheckbox(): Cypress.Chainable> { + return this.find().find(`[data-label=Checkbox]`).find('input'); + } + + shouldBeMarkedForDeletion(): this { + this.find() + .findByRole('button', { name: 'This resource is marked for deletion.' }) + .should('exist'); + return this; + } + + findKebabAction(name: string): Cypress.Chainable> { + return this.find().findKebabAction(name); + } + + findKebab(): Cypress.Chainable> { + return this.find().findKebab(); + } +} diff --git a/clients/ui/frontend/src/__tests__/cypress/cypress/pages/modelRegistry.ts b/clients/ui/frontend/src/__tests__/cypress/cypress/pages/modelRegistry.ts index 9133b2ce3..bffc77fe8 100644 --- a/clients/ui/frontend/src/__tests__/cypress/cypress/pages/modelRegistry.ts +++ b/clients/ui/frontend/src/__tests__/cypress/cypress/pages/modelRegistry.ts @@ -1,58 +1,56 @@ import { appChrome } from '~/__tests__/cypress/cypress/pages/appChrome'; -// import { TableRow } from './components/table'; -// import { Modal } from './components/Modal'; - -// TODO: Uncomment when the modal is implemented -// class LabelModal extends Modal { -// constructor() { -// super('Labels'); -// } - -// findModalSearchInput() { -// return cy.findByTestId('label-modal-search'); -// } - -// findCloseModal() { -// return cy.findByTestId('close-modal'); -// } - -// shouldContainsModalLabels(labels: string[]) { -// cy.findByTestId('modal-label-group').within(() => labels.map((label) => cy.contains(label))); -// return this; -// } -// } - -// TODO: Uncomment when the table is implemented -// class ModelRegistryTableRow extends TableRow { -// findName() { -// return this.find().findByTestId('model-name'); -// } - -// findDescription() { -// return this.find().findByTestId('description'); -// } - -// findOwner() { -// return this.find().findByTestId('registered-model-owner'); -// } - -// findLabelPopoverText() { -// return this.find().findByTestId('popover-label-text'); -// } - -// findLabelModalText() { -// return this.find().findByTestId('modal-label-text'); -// } - -// shouldContainsPopoverLabels(labels: string[]) { -// cy.findByTestId('popover-label-group').within(() => labels.map((label) => cy.contains(label))); -// return this; -// } - -// findModelVersionName() { -// return this.find().findByTestId('model-version-name'); -// } -// } +import { TableRow } from './components/table'; +import { Modal } from './components/Modal'; + +class LabelModal extends Modal { + constructor() { + super('Labels'); + } + + findModalSearchInput() { + return cy.findByTestId('label-modal-search'); + } + + findCloseModal() { + return cy.findByTestId('close-modal'); + } + + shouldContainsModalLabels(labels: string[]) { + cy.findByTestId('modal-label-group').within(() => labels.map((label) => cy.contains(label))); + return this; + } +} + +class ModelRegistryTableRow extends TableRow { + findName() { + return this.find().findByTestId('model-name'); + } + + findDescription() { + return this.find().findByTestId('description'); + } + + findOwner() { + return this.find().findByTestId('registered-model-owner'); + } + + findLabelPopoverText() { + return this.find().findByTestId('popover-label-text'); + } + + findLabelModalText() { + return this.find().findByTestId('modal-label-text'); + } + + shouldContainsPopoverLabels(labels: string[]) { + cy.findByTestId('popover-label-group').within(() => labels.map((label) => cy.contains(label))); + return this; + } + + findModelVersionName() { + return this.find().findByTestId('model-version-name'); + } +} class ModelRegistry { landingPage() { @@ -132,20 +130,20 @@ class ModelRegistry { } // TODO: Uncomment when the table row is implemented - // getRow(name: string) { - // return new ModelRegistryTableRow(() => - // this.findTable().find(`[data-label="Model name"]`).contains(name).parents('tr'), - // ); - // } - - // getModelVersionRow(name: string) { - // return new ModelRegistryTableRow(() => - // this.findModelVersionsTable() - // .find(`[data-label="Version name"]`) - // .contains(name) - // .parents('tr'), - // ); - // } + getRow(name: string) { + return new ModelRegistryTableRow(() => + this.findTable().find(`[data-label="Model name"]`).contains(name).parents('tr'), + ); + } + + getModelVersionRow(name: string) { + return new ModelRegistryTableRow(() => + this.findModelVersionsTable() + .find(`[data-label="Version name"]`) + .contains(name) + .parents('tr'), + ); + } findRegisteredModelTableHeaderButton(name: string) { return this.findTable().find('thead').findByRole('button', { name }); @@ -189,4 +187,4 @@ class ModelRegistry { } export const modelRegistry = new ModelRegistry(); -// export const labelModal = new LabelModal(); +export const labelModal = new LabelModal(); diff --git a/clients/ui/frontend/src/__tests__/cypress/cypress/support/commands/api.ts b/clients/ui/frontend/src/__tests__/cypress/cypress/support/commands/api.ts index e96daa3cf..730064daf 100644 --- a/clients/ui/frontend/src/__tests__/cypress/cypress/support/commands/api.ts +++ b/clients/ui/frontend/src/__tests__/cypress/cypress/support/commands/api.ts @@ -2,6 +2,7 @@ import type { GenericStaticResponse, RouteHandlerController } from 'cypress/type import type { ModelArtifact, ModelArtifactList, + ModelRegistry, ModelRegistryResponse, ModelVersion, ModelVersionList, @@ -31,7 +32,7 @@ declare global { interceptApi: (( type: 'GET /api/:apiVersion/model_registry/:modelRegistryName/registered_models', options: { path: { modelRegistryName: string; apiVersion: string } }, - response: ApiResponse, + response: ApiResponse>, ) => Cypress.Chainable) & (( type: 'POST /api/:apiVersion/model_registry/:modelRegistryName/registered_models', @@ -43,7 +44,7 @@ declare global { options: { path: { modelRegistryName: string; apiVersion: string; registeredModelId: number }; }, - response: ApiResponse, + response: ApiResponse>, ) => Cypress.Chainable) & (( type: 'POST /api/:apiVersion/model_registry/:modelRegistryName/registered_models/:registeredModelId/versions', @@ -97,7 +98,7 @@ declare global { (( type: 'GET /api/:apiVersion/model_registry', options: { path: { apiVersion: string } }, - response: ApiResponse, + response: ApiResponse>, ) => Cypress.Chainable); } } diff --git a/clients/ui/frontend/src/__tests__/cypress/cypress/tests/mocked/modelRegistry.cy.ts b/clients/ui/frontend/src/__tests__/cypress/cypress/tests/mocked/modelRegistry.cy.ts index ac6c0729d..91592ae11 100644 --- a/clients/ui/frontend/src/__tests__/cypress/cypress/tests/mocked/modelRegistry.cy.ts +++ b/clients/ui/frontend/src/__tests__/cypress/cypress/tests/mocked/modelRegistry.cy.ts @@ -4,9 +4,10 @@ import { mockModelVersion } from '~/__mocks__/mockModelVersion'; import { mockModelVersionList } from '~/__mocks__/mockModelVersionList'; import { mockRegisteredModel } from '~/__mocks__/mockRegisteredModel'; import { mockRegisteredModelList } from '~/__mocks__/mockRegisteredModelsList'; -import { modelRegistry } from '~/__tests__/cypress/cypress/pages/modelRegistry'; -import { mockModelRegistryResponse } from '~/__mocks__/mockModelRegistryResponse'; +import { labelModal, modelRegistry } from '~/__tests__/cypress/cypress/pages/modelRegistry'; +import { mockBFFResponse } from '~/__mocks__/mockBFFResponse'; import type { ModelRegistry, ModelVersion, RegisteredModel } from '~/app/types'; +import { be } from '~/__tests__/cypress/cypress/utils/should'; const MODEL_REGISTRY_API_VERSION = 'v1'; @@ -69,7 +70,7 @@ const initIntercepts = ({ { path: { apiVersion: MODEL_REGISTRY_API_VERSION }, }, - mockModelRegistryResponse({ model_registry: modelRegistries }), + mockBFFResponse(modelRegistries), ); cy.interceptApi( @@ -77,7 +78,7 @@ const initIntercepts = ({ { path: { modelRegistryName: 'modelregistry-sample', apiVersion: MODEL_REGISTRY_API_VERSION }, }, - mockRegisteredModelList({ items: registeredModels }), + mockBFFResponse(mockRegisteredModelList({ items: registeredModels })), ); cy.interceptApi( @@ -89,13 +90,28 @@ const initIntercepts = ({ registeredModelId: 1, }, }, - mockModelVersionList({ items: modelVersions }), + mockBFFResponse(mockModelVersionList({ items: modelVersions })), ); }; describe('Model Registry core', () => { it('Model Registry Enabled in the cluster', () => { - initIntercepts({}); + initIntercepts({ + registeredModels: [ + mockRegisteredModel({ + name: 'Fraud detection model', + description: + 'A machine learning model trained to detect fraudulent transactions in financial data', + labels: [ + 'Financial data', + 'Fraud detection', + 'Test label', + 'Machine learning', + 'Next data to be overflow', + ], + }), + ], + }); modelRegistry.visit(); modelRegistry.navigate(); @@ -103,16 +119,15 @@ describe('Model Registry core', () => { modelRegistry.tabEnabled(); }); - // it('Renders empty state with no model registries', () => { - // initIntercepts({ - // disableModelRegistryFeature: false, - // modelRegistries: [], - // }); + it('Renders empty state with no model registries', () => { + initIntercepts({ + modelRegistries: [], + }); - // modelRegistry.visit(); - // modelRegistry.navigate(); - // modelRegistry.findModelRegistryEmptyState().should('exist'); - // }); + modelRegistry.visit(); + modelRegistry.navigate(); + modelRegistry.findModelRegistryEmptyState().should('exist'); + }); it('No registered models in the selected Model Registry', () => { initIntercepts({ @@ -122,74 +137,73 @@ describe('Model Registry core', () => { modelRegistry.visit(); modelRegistry.navigate(); modelRegistry.shouldModelRegistrySelectorExist(); - // modelRegistry.shouldregisteredModelsEmpty(); + modelRegistry.shouldregisteredModelsEmpty(); }); - // TODO: Enable when registered model table is enabled - // describe('Registered model table', () => { - // beforeEach(() => { - // initIntercepts({ disableModelRegistryFeature: false }); - // modelRegistry.visit(); - // }); - - // it('Renders row contents', () => { - // const registeredModelRow = modelRegistry.getRow('Fraud detection model'); - // registeredModelRow.findName().contains('Fraud detection model'); - // registeredModelRow - // .findDescription() - // .contains( - // 'A machine learning model trained to detect fraudulent transactions in financial data', - // ); - // registeredModelRow.findOwner().contains('Author 1'); - - // // Label popover - // registeredModelRow.findLabelPopoverText().contains('2 more'); - // registeredModelRow.findLabelPopoverText().click(); - // registeredModelRow.shouldContainsPopoverLabels([ - // 'Machine learning', - // 'Next data to be overflow', - // ]); - // }); - - // it('Renders labels in modal', () => { - // const registeredModelRow2 = modelRegistry.getRow('Label modal'); - // registeredModelRow2.findLabelModalText().contains('6 more'); - // registeredModelRow2.findLabelModalText().click(); - // labelModal.shouldContainsModalLabels([ - // 'Testing label', - // 'Financial', - // 'Financial data', - // 'Fraud detection', - // 'Machine learning', - // 'Next data to be overflow', - // 'Label x', - // 'Label y', - // 'Label z', - // ]); - // labelModal.findModalSearchInput().type('Financial'); - // labelModal.shouldContainsModalLabels(['Financial', 'Financial data']); - // labelModal.findCloseModal().click(); - // }); - - // it('Sort by Model name', () => { - // modelRegistry.findRegisteredModelTableHeaderButton('Model name').click(); - // modelRegistry.findRegisteredModelTableHeaderButton('Model name').should(be.sortAscending); - // modelRegistry.findRegisteredModelTableHeaderButton('Model name').click(); - // modelRegistry.findRegisteredModelTableHeaderButton('Model name').should(be.sortDescending); - // }); - - // it('Sort by Last modified', () => { - // modelRegistry.findRegisteredModelTableHeaderButton('Last modified').should(be.sortAscending); - // modelRegistry.findRegisteredModelTableHeaderButton('Last modified').click(); - // modelRegistry.findRegisteredModelTableHeaderButton('Last modified').should(be.sortDescending); - // }); - - // it('Filter by keyword', () => { - // modelRegistry.findTableSearch().type('Fraud detection model'); - // modelRegistry.findTableRows().should('have.length', 1); - // modelRegistry.findTableRows().contains('Fraud detection model'); - // }); - // }); + describe('Registered model table', () => { + beforeEach(() => { + initIntercepts({}); + modelRegistry.visit(); + }); + + it('Renders row contents', () => { + const registeredModelRow = modelRegistry.getRow('Fraud detection model'); + registeredModelRow.findName().contains('Fraud detection model'); + registeredModelRow + .findDescription() + .contains( + 'A machine learning model trained to detect fraudulent transactions in financial data', + ); + registeredModelRow.findOwner().contains('Author 1'); + + // Label popover + registeredModelRow.findLabelPopoverText().contains('2 more'); + registeredModelRow.findLabelPopoverText().click(); + registeredModelRow.shouldContainsPopoverLabels([ + 'Machine learning', + 'Next data to be overflow', + ]); + }); + + it('Renders labels in modal', () => { + const registeredModelRow2 = modelRegistry.getRow('Label modal'); + registeredModelRow2.findLabelModalText().contains('6 more'); + registeredModelRow2.findLabelModalText().click(); + labelModal.shouldContainsModalLabels([ + 'Testing label', + 'Financial', + 'Financial data', + 'Fraud detection', + 'Machine learning', + 'Next data to be overflow', + 'Label x', + 'Label y', + 'Label z', + ]); + labelModal.findModalSearchInput().type('Financial'); + labelModal.shouldContainsModalLabels(['Financial', 'Financial data']); + labelModal.findCloseModal().click(); + }); + + it('Sort by Model name', () => { + modelRegistry.findRegisteredModelTableHeaderButton('Model name').click(); + modelRegistry.findRegisteredModelTableHeaderButton('Model name').should(be.sortAscending); + modelRegistry.findRegisteredModelTableHeaderButton('Model name').click(); + modelRegistry.findRegisteredModelTableHeaderButton('Model name').should(be.sortDescending); + }); + + it('Sort by Last modified', () => { + modelRegistry.findRegisteredModelTableHeaderButton('Last modified').should(be.sortAscending); + modelRegistry.findRegisteredModelTableHeaderButton('Last modified').click(); + modelRegistry.findRegisteredModelTableHeaderButton('Last modified').should(be.sortDescending); + }); + + it('Filter by keyword', () => { + modelRegistry.findTableSearch().type('Fraud detection model'); + modelRegistry.findTableRows().should('have.length', 1); + modelRegistry.findTableRows().contains('Fraud detection model'); + }); + }); }); // TODO: Enable when model registration is there diff --git a/clients/ui/frontend/src/__tests__/cypress/cypress/utils/should.ts b/clients/ui/frontend/src/__tests__/cypress/cypress/utils/should.ts new file mode 100644 index 000000000..d8b39801e --- /dev/null +++ b/clients/ui/frontend/src/__tests__/cypress/cypress/utils/should.ts @@ -0,0 +1,56 @@ +const status = { + warning: ($subject: JQuery) => { + expect($subject.hasClass('pf-m-warning')).to.eq(true); + }, + info: ($subject: JQuery) => { + expect($subject.hasClass('pf-m-info')).to.eq(true); + }, + danger: ($subject: JQuery) => { + expect($subject.hasClass('pf-m-danger')).to.eq(true); + }, + success: ($subject: JQuery) => { + expect($subject.hasClass('pf-m-success')).to.eq(true); + }, + custom: ($subject: JQuery) => { + expect($subject.hasClass('pf-m-custom')).to.eq(true); + }, + error: ($subject: JQuery) => { + expect($subject.hasClass('pf-m-error')).to.eq(true); + }, + indeterminate: ($subject: JQuery) => { + expect($subject.hasClass('pf-m-indeterminate')).to.eq(true); + }, +}; + +const expandCollapse = { + expanded: ($subject: JQuery) => { + expect($subject.hasClass('pf-m-expanded')).to.eq(true); + }, + + collapsed: ($subject: JQuery) => { + expect($subject.hasClass('pf-m-expanded')).to.eq(false); + }, +}; + +const form = { + invalid: ($subject: JQuery) => { + expect($subject.attr('aria-invalid')).to.eq('true'); + }, +}; + +const sort = { + sortAscending: ($subject: JQuery) => { + expect($subject.parents('th').attr('aria-sort')).to.eq('ascending'); + }, + + sortDescending: ($subject: JQuery) => { + expect($subject.parents('th').attr('aria-sort')).to.eq('descending'); + }, +}; + +export const be = { + ...status, + ...expandCollapse, + ...form, + ...sort, +}; diff --git a/clients/ui/frontend/src/app/api/__tests__/errorUtils.spec.ts b/clients/ui/frontend/src/app/api/__tests__/errorUtils.spec.ts index fdf473f1e..921a3d7b9 100644 --- a/clients/ui/frontend/src/app/api/__tests__/errorUtils.spec.ts +++ b/clients/ui/frontend/src/app/api/__tests__/errorUtils.spec.ts @@ -2,12 +2,13 @@ import { NotReadyError } from '~/utilities/useFetchState'; import { APIError } from '~/app/api/types'; import { handleRestFailures } from '~/app/api/errorUtils'; import { mockRegisteredModel } from '~/__mocks__/mockRegisteredModel'; +import { mockBFFResponse } from '~/__mocks__/utils'; describe('handleRestFailures', () => { it('should successfully return registered models', async () => { const modelRegistryMock = mockRegisteredModel({}); - const result = await handleRestFailures(Promise.resolve(modelRegistryMock)); - expect(result).toStrictEqual(modelRegistryMock); + const result = await handleRestFailures(Promise.resolve(mockBFFResponse(modelRegistryMock))); + expect(result.data).toStrictEqual(modelRegistryMock); }); it('should handle and throw model registry errors', async () => { diff --git a/clients/ui/frontend/src/app/api/__tests__/service.spec.ts b/clients/ui/frontend/src/app/api/__tests__/service.spec.ts index 6bfe6e6a7..7da6df753 100644 --- a/clients/ui/frontend/src/app/api/__tests__/service.spec.ts +++ b/clients/ui/frontend/src/app/api/__tests__/service.spec.ts @@ -1,4 +1,4 @@ -import { restCREATE, restGET, restPATCH } from '~/app/api/apiUtils'; +import { isModelRegistryResponse, restCREATE, restGET, restPATCH } from '~/app/api/apiUtils'; import { handleRestFailures } from '~/app/api/errorUtils'; import { ModelState, ModelArtifactState } from '~/app/types'; import { @@ -21,436 +21,374 @@ import { } from '~/app/api/service'; import { BFF_API_VERSION } from '~/app/const'; -const mockProxyPromise = Promise.resolve(); +const mockRestPromise = Promise.resolve({ data: {} }); +const mockRestResponse = {}; jest.mock('~/app/api/apiUtils', () => ({ - restCREATE: jest.fn(() => mockProxyPromise), - restGET: jest.fn(() => mockProxyPromise), - restPATCH: jest.fn(() => mockProxyPromise), + restCREATE: jest.fn(() => mockRestPromise), + restGET: jest.fn(() => mockRestPromise), + restPATCH: jest.fn(() => mockRestPromise), + isModelRegistryResponse: jest.fn(() => true), })); -const mockResultPromise = Promise.resolve(); - jest.mock('~/app/api/errorUtils', () => ({ - handleRestFailures: jest.fn(() => mockResultPromise), + handleRestFailures: jest.fn(() => mockRestPromise), })); const handleRestFailuresMock = jest.mocked(handleRestFailures); const restCREATEMock = jest.mocked(restCREATE); const restGETMock = jest.mocked(restGET); const restPATCHMock = jest.mocked(restPATCH); +const isModelRegistryResponseMock = jest.mocked(isModelRegistryResponse); -const K8sAPIOptionsMock = {}; +const APIOptionsMock = {}; describe('createRegisteredModel', () => { - it('should call restCREATE and handleRestFailures to create registered model', () => { - expect( - createRegisteredModel(`/api/${BFF_API_VERSION}/model_registry/model-registry-1/`)( - K8sAPIOptionsMock, - { - description: 'test', - externalID: '1', - name: 'test new registered model', - state: ModelState.LIVE, - customProperties: {}, - }, - ), - ).toBe(mockResultPromise); + it('should call restCREATE and handleRestFailures to create registered model', async () => { + const mockData = { + description: 'test', + externalID: '1', + name: 'test new registered model', + state: ModelState.LIVE, + customProperties: {}, + }; + const response = await createRegisteredModel( + `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, + )(APIOptionsMock, mockData); + expect(response).toEqual(mockRestResponse); expect(restCREATEMock).toHaveBeenCalledTimes(1); + expect(isModelRegistryResponseMock).toHaveBeenCalledTimes(1); expect(restCREATEMock).toHaveBeenCalledWith( `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, `/registered_models`, - { - description: 'test', - externalID: '1', - name: 'test new registered model', - state: ModelState.LIVE, - customProperties: {}, - }, + mockData, {}, - K8sAPIOptionsMock, + APIOptionsMock, ); expect(handleRestFailuresMock).toHaveBeenCalledTimes(1); - expect(handleRestFailuresMock).toHaveBeenCalledWith(mockProxyPromise); + expect(handleRestFailuresMock).toHaveBeenCalledWith(mockRestPromise); }); }); describe('createModelVersion', () => { - it('should call restCREATE and handleRestFailures to create model version', () => { - expect( - createModelVersion(`/api/${BFF_API_VERSION}/model_registry/model-registry-1/`)( - K8sAPIOptionsMock, - { - description: 'test', - externalID: '1', - author: 'test author', - registeredModelId: '1', - name: 'test new model version', - state: ModelState.LIVE, - customProperties: {}, - }, - ), - ).toBe(mockResultPromise); + it('should call restCREATE and handleRestFailures to create model version', async () => { + const mockData = { + description: 'test', + externalID: '1', + author: 'test author', + registeredModelId: '1', + name: 'test new model version', + state: ModelState.LIVE, + customProperties: {}, + }; + const response = await createModelVersion( + `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, + )(APIOptionsMock, mockData); + expect(response).toEqual(mockRestResponse); expect(restCREATEMock).toHaveBeenCalledTimes(1); expect(restCREATEMock).toHaveBeenCalledWith( `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, `/model_versions`, - { - description: 'test', - externalID: '1', - author: 'test author', - registeredModelId: '1', - name: 'test new model version', - state: ModelState.LIVE, - customProperties: {}, - }, + mockData, {}, - K8sAPIOptionsMock, + APIOptionsMock, ); expect(handleRestFailuresMock).toHaveBeenCalledTimes(1); - expect(handleRestFailuresMock).toHaveBeenCalledWith(mockProxyPromise); + expect(handleRestFailuresMock).toHaveBeenCalledWith(mockRestPromise); }); }); describe('createModelVersionForRegisteredModel', () => { - it('should call restCREATE and handleRestFailures to create model version for a model', () => { - expect( - createModelVersionForRegisteredModel( - `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, - )(K8sAPIOptionsMock, '1', { - description: 'test', - externalID: '1', - author: 'test author', - registeredModelId: '1', - name: 'test new model version', - state: ModelState.LIVE, - customProperties: {}, - }), - ).toBe(mockResultPromise); + it('should call restCREATE and handleRestFailures to create model version for a model', async () => { + const mockData = { + description: 'test', + externalID: '1', + author: 'test author', + registeredModelId: '1', + name: 'test new model version', + state: ModelState.LIVE, + customProperties: {}, + }; + const response = await createModelVersionForRegisteredModel( + `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, + )(APIOptionsMock, '1', mockData); + expect(response).toEqual(mockRestResponse); expect(restCREATEMock).toHaveBeenCalledTimes(1); expect(restCREATEMock).toHaveBeenCalledWith( `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, `/registered_models/1/versions`, - { - description: 'test', - externalID: '1', - author: 'test author', - registeredModelId: '1', - name: 'test new model version', - state: ModelState.LIVE, - customProperties: {}, - }, + mockData, {}, - K8sAPIOptionsMock, + APIOptionsMock, ); expect(handleRestFailuresMock).toHaveBeenCalledTimes(1); - expect(handleRestFailuresMock).toHaveBeenCalledWith(mockProxyPromise); + expect(handleRestFailuresMock).toHaveBeenCalledWith(mockRestPromise); }); }); describe('createModelArtifact', () => { - it('should call restCREATE and handleRestFailures to create model artifact', () => { - expect( - createModelArtifact(`/api/${BFF_API_VERSION}/model_registry/model-registry-1/`)( - K8sAPIOptionsMock, - { - description: 'test', - externalID: 'test', - uri: 'test-uri', - state: ModelArtifactState.LIVE, - name: 'test-name', - modelFormatName: 'test-modelformatname', - storageKey: 'teststoragekey', - storagePath: 'teststoragePath', - modelFormatVersion: 'testmodelFormatVersion', - serviceAccountName: 'testserviceAccountname', - customProperties: {}, - artifactType: 'model-artifact', - }, - ), - ).toBe(mockResultPromise); + it('should call restCREATE and handleRestFailures to create model artifact', async () => { + const mockData = { + description: 'test', + externalID: 'test', + uri: 'test-uri', + state: ModelArtifactState.LIVE, + name: 'test-name', + modelFormatName: 'test-modelformatname', + storageKey: 'teststoragekey', + storagePath: 'teststoragePath', + modelFormatVersion: 'testmodelFormatVersion', + serviceAccountName: 'testserviceAccountname', + customProperties: {}, + artifactType: 'model-artifact', + }; + const response = await createModelArtifact( + `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, + )(APIOptionsMock, mockData); + expect(response).toEqual(mockRestResponse); expect(restCREATEMock).toHaveBeenCalledTimes(1); expect(restCREATEMock).toHaveBeenCalledWith( `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, `/model_artifacts`, - { - description: 'test', - externalID: 'test', - uri: 'test-uri', - state: ModelArtifactState.LIVE, - name: 'test-name', - modelFormatName: 'test-modelformatname', - storageKey: 'teststoragekey', - storagePath: 'teststoragePath', - modelFormatVersion: 'testmodelFormatVersion', - serviceAccountName: 'testserviceAccountname', - customProperties: {}, - artifactType: 'model-artifact', - }, + mockData, {}, - K8sAPIOptionsMock, + APIOptionsMock, ); expect(handleRestFailuresMock).toHaveBeenCalledTimes(1); - expect(handleRestFailuresMock).toHaveBeenCalledWith(mockProxyPromise); + expect(handleRestFailuresMock).toHaveBeenCalledWith(mockRestPromise); }); }); describe('createModelArtifactForModelVersion', () => { - it('should call restCREATE and handleRestFailures to create model artifact for version', () => { - expect( - createModelArtifactForModelVersion( - `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, - )(K8sAPIOptionsMock, '2', { - description: 'test', - externalID: 'test', - uri: 'test-uri', - state: ModelArtifactState.LIVE, - name: 'test-name', - modelFormatName: 'test-modelformatname', - storageKey: 'teststoragekey', - storagePath: 'teststoragePath', - modelFormatVersion: 'testmodelFormatVersion', - serviceAccountName: 'testserviceAccountname', - customProperties: {}, - artifactType: 'model-artifact', - }), - ).toBe(mockResultPromise); + it('should call restCREATE and handleRestFailures to create model artifact for version', async () => { + const mockData = { + description: 'test', + externalID: 'test', + uri: 'test-uri', + state: ModelArtifactState.LIVE, + name: 'test-name', + modelFormatName: 'test-modelformatname', + storageKey: 'teststoragekey', + storagePath: 'teststoragePath', + modelFormatVersion: 'testmodelFormatVersion', + serviceAccountName: 'testserviceAccountname', + customProperties: {}, + artifactType: 'model-artifact', + }; + const response = await createModelArtifactForModelVersion( + `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, + )(APIOptionsMock, '2', mockData); + expect(response).toEqual(mockRestResponse); expect(restCREATEMock).toHaveBeenCalledTimes(1); expect(restCREATEMock).toHaveBeenCalledWith( `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, `/model_versions/2/artifacts`, - { - description: 'test', - externalID: 'test', - uri: 'test-uri', - state: ModelArtifactState.LIVE, - name: 'test-name', - modelFormatName: 'test-modelformatname', - storageKey: 'teststoragekey', - storagePath: 'teststoragePath', - modelFormatVersion: 'testmodelFormatVersion', - serviceAccountName: 'testserviceAccountname', - customProperties: {}, - artifactType: 'model-artifact', - }, + mockData, {}, - K8sAPIOptionsMock, + APIOptionsMock, ); expect(handleRestFailuresMock).toHaveBeenCalledTimes(1); - expect(handleRestFailuresMock).toHaveBeenCalledWith(mockProxyPromise); + expect(handleRestFailuresMock).toHaveBeenCalledWith(mockRestPromise); }); }); describe('getRegisteredModel', () => { - it('should call restGET and handleRestFailures to fetch registered model', () => { - expect( - getRegisteredModel(`/api/${BFF_API_VERSION}/model_registry/model-registry-1/`)( - K8sAPIOptionsMock, - '1', - ), - ).toBe(mockResultPromise); + it('should call restGET and handleRestFailures to fetch registered model', async () => { + const response = await getRegisteredModel( + `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, + )(APIOptionsMock, '1'); + expect(response).toEqual(mockRestResponse); expect(restGETMock).toHaveBeenCalledTimes(1); expect(restGETMock).toHaveBeenCalledWith( `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, `/registered_models/1`, {}, - K8sAPIOptionsMock, + APIOptionsMock, ); expect(handleRestFailuresMock).toHaveBeenCalledTimes(1); - expect(handleRestFailuresMock).toHaveBeenCalledWith(mockProxyPromise); + expect(handleRestFailuresMock).toHaveBeenCalledWith(mockRestPromise); }); }); describe('getModelVersion', () => { - it('should call restGET and handleRestFailures to fetch model version', () => { - expect( - getModelVersion(`/api/${BFF_API_VERSION}/model_registry/model-registry-1/`)( - K8sAPIOptionsMock, - '1', - ), - ).toBe(mockResultPromise); + it('should call restGET and handleRestFailures to fetch model version', async () => { + const response = await getModelVersion( + `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, + )(APIOptionsMock, '1'); + expect(response).toEqual(mockRestResponse); expect(restGETMock).toHaveBeenCalledTimes(1); expect(restGETMock).toHaveBeenCalledWith( `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, `/model_versions/1`, {}, - K8sAPIOptionsMock, + APIOptionsMock, ); expect(handleRestFailuresMock).toHaveBeenCalledTimes(1); - expect(handleRestFailuresMock).toHaveBeenCalledWith(mockProxyPromise); + expect(handleRestFailuresMock).toHaveBeenCalledWith(mockRestPromise); }); }); describe('getModelArtifact', () => { - it('should call restGET and handleRestFailures to fetch model version', () => { - expect( - getModelArtifact(`/api/${BFF_API_VERSION}/model_registry/model-registry-1/`)( - K8sAPIOptionsMock, - '1', - ), - ).toBe(mockResultPromise); + it('should call restGET and handleRestFailures to fetch model version', async () => { + const response = await getModelArtifact( + `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, + )(APIOptionsMock, '1'); + expect(response).toEqual(mockRestResponse); expect(restGETMock).toHaveBeenCalledTimes(1); expect(restGETMock).toHaveBeenCalledWith( `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, `/model_artifacts/1`, {}, - K8sAPIOptionsMock, + APIOptionsMock, ); expect(handleRestFailuresMock).toHaveBeenCalledTimes(1); - expect(handleRestFailuresMock).toHaveBeenCalledWith(mockProxyPromise); + expect(handleRestFailuresMock).toHaveBeenCalledWith(mockRestPromise); }); }); describe('getListRegisteredModels', () => { - it('should call restGET and handleRestFailures to list registered models', () => { - expect( - getListRegisteredModels(`/api/${BFF_API_VERSION}/model_registry/model-registry-1/`)({}), - ).toBe(mockResultPromise); + it('should call restGET and handleRestFailures to list registered models', async () => { + const response = await getListRegisteredModels( + `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, + )({}); + expect(response).toEqual(mockRestResponse); expect(restGETMock).toHaveBeenCalledTimes(1); expect(restGETMock).toHaveBeenCalledWith( `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, `/registered_models`, {}, - K8sAPIOptionsMock, + APIOptionsMock, ); expect(handleRestFailuresMock).toHaveBeenCalledTimes(1); - expect(handleRestFailuresMock).toHaveBeenCalledWith(mockProxyPromise); + expect(handleRestFailuresMock).toHaveBeenCalledWith(mockRestPromise); }); }); describe('getListModelArtifacts', () => { - it('should call restGET and handleRestFailures to list models artifacts', () => { - expect( - getListModelArtifacts(`/api/${BFF_API_VERSION}/model_registry/model-registry-1/`)({}), - ).toBe(mockResultPromise); + it('should call restGET and handleRestFailures to list models artifacts', async () => { + const response = await getListModelArtifacts( + `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, + )({}); + expect(response).toEqual(mockRestResponse); expect(restGETMock).toHaveBeenCalledTimes(1); expect(restGETMock).toHaveBeenCalledWith( `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, `/model_artifacts`, {}, - K8sAPIOptionsMock, + APIOptionsMock, ); expect(handleRestFailuresMock).toHaveBeenCalledTimes(1); - expect(handleRestFailuresMock).toHaveBeenCalledWith(mockProxyPromise); + expect(handleRestFailuresMock).toHaveBeenCalledWith(mockRestPromise); }); }); describe('getListModelVersions', () => { - it('should call restGET and handleRestFailures to list models versions', () => { - expect( - getListModelVersions(`/api/${BFF_API_VERSION}/model_registry/model-registry-1/`)({}), - ).toBe(mockResultPromise); + it('should call restGET and handleRestFailures to list models versions', async () => { + const response = await getListModelVersions( + `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, + )({}); + expect(response).toEqual(mockRestResponse); expect(restGETMock).toHaveBeenCalledTimes(1); expect(restGETMock).toHaveBeenCalledWith( `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, `/model_versions`, {}, - K8sAPIOptionsMock, + APIOptionsMock, ); expect(handleRestFailuresMock).toHaveBeenCalledTimes(1); - expect(handleRestFailuresMock).toHaveBeenCalledWith(mockProxyPromise); + expect(handleRestFailuresMock).toHaveBeenCalledWith(mockRestPromise); }); }); describe('getModelVersionsByRegisteredModel', () => { - it('should call restGET and handleRestFailures to list models versions by registered model', () => { - expect( - getModelVersionsByRegisteredModel(`/api/${BFF_API_VERSION}/model_registry/model-registry-1/`)( - {}, - '1', - ), - ).toBe(mockResultPromise); + it('should call restGET and handleRestFailures to list models versions by registered model', async () => { + const response = await getModelVersionsByRegisteredModel( + `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, + )({}, '1'); + expect(response).toEqual(mockRestResponse); expect(restGETMock).toHaveBeenCalledTimes(1); expect(restGETMock).toHaveBeenCalledWith( `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, `/registered_models/1/versions`, {}, - K8sAPIOptionsMock, + APIOptionsMock, ); expect(handleRestFailuresMock).toHaveBeenCalledTimes(1); - expect(handleRestFailuresMock).toHaveBeenCalledWith(mockProxyPromise); + expect(handleRestFailuresMock).toHaveBeenCalledWith(mockRestPromise); }); }); describe('getModelArtifactsByModelVersion', () => { - it('should call restGET and handleRestFailures to list models artifacts by model version', () => { - expect( - getModelArtifactsByModelVersion(`/api/${BFF_API_VERSION}/model_registry/model-registry-1/`)( - {}, - '1', - ), - ).toBe(mockResultPromise); + it('should call restGET and handleRestFailures to list models artifacts by model version', async () => { + const response = await getModelArtifactsByModelVersion( + `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, + )({}, '1'); + expect(response).toEqual(mockRestResponse); expect(restGETMock).toHaveBeenCalledTimes(1); expect(restGETMock).toHaveBeenCalledWith( `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, `/model_versions/1/artifacts`, {}, - K8sAPIOptionsMock, + APIOptionsMock, ); expect(handleRestFailuresMock).toHaveBeenCalledTimes(1); - expect(handleRestFailuresMock).toHaveBeenCalledWith(mockProxyPromise); + expect(handleRestFailuresMock).toHaveBeenCalledWith(mockRestPromise); }); }); describe('patchRegisteredModel', () => { - it('should call restPATCH and handleRestFailures to update registered model', () => { - expect( - patchRegisteredModel(`/api/${BFF_API_VERSION}/model_registry/model-registry-1/`)( - K8sAPIOptionsMock, - { description: 'new test' }, - '1', - ), - ).toBe(mockResultPromise); + it('should call restPATCH and handleRestFailures to update registered model', async () => { + const mockData = { description: 'new test' }; + const response = await patchRegisteredModel( + `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, + )(APIOptionsMock, mockData, '1'); + expect(response).toEqual(mockRestResponse); expect(restPATCHMock).toHaveBeenCalledTimes(1); expect(restPATCHMock).toHaveBeenCalledWith( `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, `/registered_models/1`, - { description: 'new test' }, - K8sAPIOptionsMock, + mockData, + APIOptionsMock, ); expect(handleRestFailuresMock).toHaveBeenCalledTimes(1); - expect(handleRestFailuresMock).toHaveBeenCalledWith(mockProxyPromise); + expect(handleRestFailuresMock).toHaveBeenCalledWith(mockRestPromise); }); }); describe('patchModelVersion', () => { - it('should call restPATCH and handleRestFailures to update model version', () => { - expect( - patchModelVersion(`/api/${BFF_API_VERSION}/model_registry/model-registry-1/`)( - K8sAPIOptionsMock, - { description: 'new test' }, - '1', - ), - ).toBe(mockResultPromise); + it('should call restPATCH and handleRestFailures to update model version', async () => { + const mockData = { description: 'new test' }; + const response = await patchModelVersion( + `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, + )(APIOptionsMock, mockData, '1'); + expect(response).toEqual(mockRestResponse); expect(restPATCHMock).toHaveBeenCalledTimes(1); expect(restPATCHMock).toHaveBeenCalledWith( `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, `/model_versions/1`, - { description: 'new test' }, - K8sAPIOptionsMock, + mockData, + APIOptionsMock, ); expect(handleRestFailuresMock).toHaveBeenCalledTimes(1); - expect(handleRestFailuresMock).toHaveBeenCalledWith(mockProxyPromise); + expect(handleRestFailuresMock).toHaveBeenCalledWith(mockRestPromise); }); }); describe('patchModelArtifact', () => { - it('should call restPATCH and handleRestFailures to update model artifact', () => { - expect( - patchModelArtifact(`/api/${BFF_API_VERSION}/model_registry/model-registry-1/`)( - K8sAPIOptionsMock, - { description: 'new test' }, - '1', - ), - ).toBe(mockResultPromise); + it('should call restPATCH and handleRestFailures to update model artifact', async () => { + const mockData = { description: 'new test' }; + const response = await patchModelArtifact( + `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, + )(APIOptionsMock, mockData, '1'); + expect(response).toEqual(mockRestResponse); expect(restPATCHMock).toHaveBeenCalledTimes(1); expect(restPATCHMock).toHaveBeenCalledWith( `/api/${BFF_API_VERSION}/model_registry/model-registry-1/`, `/model_artifacts/1`, - { description: 'new test' }, - K8sAPIOptionsMock, + mockData, + APIOptionsMock, ); expect(handleRestFailuresMock).toHaveBeenCalledTimes(1); - expect(handleRestFailuresMock).toHaveBeenCalledWith(mockProxyPromise); + expect(handleRestFailuresMock).toHaveBeenCalledWith(mockRestPromise); }); }); diff --git a/clients/ui/frontend/src/app/api/apiUtils.ts b/clients/ui/frontend/src/app/api/apiUtils.ts index 0af638474..93e166813 100644 --- a/clients/ui/frontend/src/app/api/apiUtils.ts +++ b/clients/ui/frontend/src/app/api/apiUtils.ts @@ -163,11 +163,14 @@ export const restDELETE = ( parseJSON: options?.parseJSON, }); -export const isModelRegistryResponse = (response: unknown): response is ModelRegistryResponse => { +export const isModelRegistryResponse = ( + response: unknown, +): response is ModelRegistryResponse => { if (typeof response === 'object' && response !== null) { // eslint-disable-next-line @typescript-eslint/consistent-type-assertions - const modelRegistryResponse = response as { model_registry?: unknown }; - return Array.isArray(modelRegistryResponse.model_registry); + const modelRegistryResponse = response as { data?: T }; + // TODO: Check if data is conforming any type so we have a proper check + return modelRegistryResponse.data !== undefined; } return false; }; diff --git a/clients/ui/frontend/src/app/api/k8s.ts b/clients/ui/frontend/src/app/api/k8s.ts index 07f70e98f..0b97eb891 100644 --- a/clients/ui/frontend/src/app/api/k8s.ts +++ b/clients/ui/frontend/src/app/api/k8s.ts @@ -9,8 +9,8 @@ export const getListModelRegistries = (opts: APIOptions): Promise => handleRestFailures(restGET(hostPath, `/api/${BFF_API_VERSION}/model_registry`, {}, opts)).then( (response) => { - if (isModelRegistryResponse(response)) { - return response.model_registry; + if (isModelRegistryResponse(response)) { + return response.data; } throw new Error('Invalid response format'); }, diff --git a/clients/ui/frontend/src/app/api/service.ts b/clients/ui/frontend/src/app/api/service.ts index 696c46bad..b894c6df4 100644 --- a/clients/ui/frontend/src/app/api/service.ts +++ b/clients/ui/frontend/src/app/api/service.ts @@ -9,19 +9,31 @@ import { RegisteredModelList, RegisteredModel, } from '~/app/types'; -import { restCREATE, restGET, restPATCH } from '~/app/api/apiUtils'; +import { isModelRegistryResponse, restCREATE, restGET, restPATCH } from '~/app/api/apiUtils'; import { APIOptions } from '~/app/api/types'; import { handleRestFailures } from '~/app/api/errorUtils'; export const createRegisteredModel = (hostPath: string) => (opts: APIOptions, data: CreateRegisteredModelData): Promise => - handleRestFailures(restCREATE(hostPath, `/registered_models`, data, {}, opts)); + handleRestFailures(restCREATE(hostPath, `/registered_models`, data, {}, opts)).then( + (response) => { + if (isModelRegistryResponse(response)) { + return response.data; + } + throw new Error('Invalid response format'); + }, + ); export const createModelVersion = (hostPath: string) => (opts: APIOptions, data: CreateModelVersionData): Promise => - handleRestFailures(restCREATE(hostPath, `/model_versions`, data, {}, opts)); + handleRestFailures(restCREATE(hostPath, `/model_versions`, data, {}, opts)).then((response) => { + if (isModelRegistryResponse(response)) { + return response.data; + } + throw new Error('Invalid response format'); + }); export const createModelVersionForRegisteredModel = (hostPath: string) => @@ -32,12 +44,24 @@ export const createModelVersionForRegisteredModel = ): Promise => handleRestFailures( restCREATE(hostPath, `/registered_models/${registeredModelId}/versions`, data, {}, opts), - ); + ).then((response) => { + if (isModelRegistryResponse(response)) { + return response.data; + } + throw new Error('Invalid response format'); + }); export const createModelArtifact = (hostPath: string) => (opts: APIOptions, data: CreateModelArtifactData): Promise => - handleRestFailures(restCREATE(hostPath, `/model_artifacts`, data, {}, opts)); + handleRestFailures(restCREATE(hostPath, `/model_artifacts`, data, {}, opts)).then( + (response) => { + if (isModelRegistryResponse(response)) { + return response.data; + } + throw new Error('Invalid response format'); + }, + ); export const createModelArtifactForModelVersion = (hostPath: string) => @@ -48,49 +72,102 @@ export const createModelArtifactForModelVersion = ): Promise => handleRestFailures( restCREATE(hostPath, `/model_versions/${modelVersionId}/artifacts`, data, {}, opts), - ); + ).then((response) => { + if (isModelRegistryResponse(response)) { + return response.data; + } + throw new Error('Invalid response format'); + }); export const getRegisteredModel = (hostPath: string) => (opts: APIOptions, registeredModelId: string): Promise => - handleRestFailures(restGET(hostPath, `/registered_models/${registeredModelId}`, {}, opts)); + handleRestFailures(restGET(hostPath, `/registered_models/${registeredModelId}`, {}, opts)).then( + (response) => { + if (isModelRegistryResponse(response)) { + return response.data; + } + throw new Error('Invalid response format'); + }, + ); export const getModelVersion = (hostPath: string) => (opts: APIOptions, modelversionId: string): Promise => - handleRestFailures(restGET(hostPath, `/model_versions/${modelversionId}`, {}, opts)); + handleRestFailures(restGET(hostPath, `/model_versions/${modelversionId}`, {}, opts)).then( + (response) => { + if (isModelRegistryResponse(response)) { + return response.data; + } + throw new Error('Invalid response format'); + }, + ); export const getModelArtifact = (hostPath: string) => (opts: APIOptions, modelArtifactId: string): Promise => - handleRestFailures(restGET(hostPath, `/model_artifacts/${modelArtifactId}`, {}, opts)); + handleRestFailures(restGET(hostPath, `/model_artifacts/${modelArtifactId}`, {}, opts)).then( + (response) => { + if (isModelRegistryResponse(response)) { + return response.data; + } + throw new Error('Invalid response format'); + }, + ); export const getListModelArtifacts = (hostPath: string) => (opts: APIOptions): Promise => - handleRestFailures(restGET(hostPath, `/model_artifacts`, {}, opts)); + handleRestFailures(restGET(hostPath, `/model_artifacts`, {}, opts)).then((response) => { + if (isModelRegistryResponse(response)) { + return response.data; + } + throw new Error('Invalid response format'); + }); export const getListModelVersions = (hostPath: string) => (opts: APIOptions): Promise => - handleRestFailures(restGET(hostPath, `/model_versions`, {}, opts)); + handleRestFailures(restGET(hostPath, `/model_versions`, {}, opts)).then((response) => { + if (isModelRegistryResponse(response)) { + return response.data; + } + throw new Error('Invalid response format'); + }); export const getListRegisteredModels = (hostPath: string) => (opts: APIOptions): Promise => - handleRestFailures(restGET(hostPath, `/registered_models`, {}, opts)); + handleRestFailures(restGET(hostPath, `/registered_models`, {}, opts)).then((response) => { + if (isModelRegistryResponse(response)) { + return response.data; + } + throw new Error('Invalid response format'); + }); export const getModelVersionsByRegisteredModel = (hostPath: string) => (opts: APIOptions, registeredmodelId: string): Promise => handleRestFailures( restGET(hostPath, `/registered_models/${registeredmodelId}/versions`, {}, opts), - ); + ).then((response) => { + if (isModelRegistryResponse(response)) { + return response.data; + } + throw new Error('Invalid response format'); + }); export const getModelArtifactsByModelVersion = (hostPath: string) => (opts: APIOptions, modelVersionId: string): Promise => - handleRestFailures(restGET(hostPath, `/model_versions/${modelVersionId}/artifacts`, {}, opts)); + handleRestFailures( + restGET(hostPath, `/model_versions/${modelVersionId}/artifacts`, {}, opts), + ).then((response) => { + if (isModelRegistryResponse(response)) { + return response.data; + } + throw new Error('Invalid response format'); + }); export const patchRegisteredModel = (hostPath: string) => @@ -99,12 +176,26 @@ export const patchRegisteredModel = data: Partial, registeredModelId: string, ): Promise => - handleRestFailures(restPATCH(hostPath, `/registered_models/${registeredModelId}`, data, opts)); + handleRestFailures( + restPATCH(hostPath, `/registered_models/${registeredModelId}`, data, opts), + ).then((response) => { + if (isModelRegistryResponse(response)) { + return response.data; + } + throw new Error('Invalid response format'); + }); export const patchModelVersion = (hostPath: string) => (opts: APIOptions, data: Partial, modelversionId: string): Promise => - handleRestFailures(restPATCH(hostPath, `/model_versions/${modelversionId}`, data, opts)); + handleRestFailures(restPATCH(hostPath, `/model_versions/${modelversionId}`, data, opts)).then( + (response) => { + if (isModelRegistryResponse(response)) { + return response.data; + } + throw new Error('Invalid response format'); + }, + ); export const patchModelArtifact = (hostPath: string) => @@ -113,4 +204,11 @@ export const patchModelArtifact = data: Partial, modelartifactId: string, ): Promise => - handleRestFailures(restPATCH(hostPath, `/model_artifacts/${modelartifactId}`, data, opts)); + handleRestFailures(restPATCH(hostPath, `/model_artifacts/${modelartifactId}`, data, opts)).then( + (response) => { + if (isModelRegistryResponse(response)) { + return response.data; + } + throw new Error('Invalid response format'); + }, + ); diff --git a/clients/ui/frontend/src/app/components/DashboardEmptyTableView.tsx b/clients/ui/frontend/src/app/components/DashboardEmptyTableView.tsx new file mode 100644 index 000000000..0ce3f8bf1 --- /dev/null +++ b/clients/ui/frontend/src/app/components/DashboardEmptyTableView.tsx @@ -0,0 +1,40 @@ +import * as React from 'react'; +import { + Bullseye, + Button, + EmptyState, + EmptyStateBody, + EmptyStateFooter, + EmptyStateVariant, +} from '@patternfly/react-core'; +import { SearchIcon } from '@patternfly/react-icons'; + +type DashboardEmptyTableViewProps = { + hasIcon?: boolean; + onClearFilters: (event: React.SyntheticEvent) => void; + variant?: EmptyStateVariant; +}; + +const DashboardEmptyTableView: React.FC = ({ + onClearFilters, + hasIcon = true, + variant, +}) => ( + + + Adjust your filters and try again. + + + + + +); + +export default DashboardEmptyTableView; diff --git a/clients/ui/frontend/src/app/components/DashboardModalFooter.tsx b/clients/ui/frontend/src/app/components/DashboardModalFooter.tsx new file mode 100644 index 000000000..4b8d99447 --- /dev/null +++ b/clients/ui/frontend/src/app/components/DashboardModalFooter.tsx @@ -0,0 +1,74 @@ +import * as React from 'react'; +import { + ActionList, + ActionListItem, + Alert, + Button, + ButtonProps, + Stack, + StackItem, +} from '@patternfly/react-core'; + +type DashboardModalFooterProps = { + submitLabel: string; + submitButtonVariant?: ButtonProps['variant']; + onSubmit: () => void; + onCancel: () => void; + isSubmitDisabled: boolean; + isSubmitLoading?: boolean; + isCancelDisabled?: boolean; + alertTitle: string; + error?: Error; +}; + +const DashboardModalFooter: React.FC = ({ + submitLabel, + submitButtonVariant = 'primary', + onSubmit, + onCancel, + isSubmitDisabled, + isSubmitLoading, + isCancelDisabled, + error, + alertTitle, +}) => ( + // make sure alert uses the full width + + {error && ( + + + {error.message} + + + )} + + + + + + + + + + + +); + +export default DashboardModalFooter; diff --git a/clients/ui/frontend/src/app/components/DashboardSearchField.tsx b/clients/ui/frontend/src/app/components/DashboardSearchField.tsx new file mode 100644 index 000000000..2aed1464d --- /dev/null +++ b/clients/ui/frontend/src/app/components/DashboardSearchField.tsx @@ -0,0 +1,75 @@ +import * as React from 'react'; +import { InputGroup, SearchInput, InputGroupItem } from '@patternfly/react-core'; +import SimpleSelect from '~/app/components/SimpleSelect'; +import { asEnumMember } from '~/app/utils'; + +// List all the possible search fields here +export enum SearchType { + NAME = 'Name', + DESCRIPTION = 'Description', + USER = 'User', + PROJECT = 'Project', + METRIC = 'Metric', + PROTECTED_ATTRIBUTE = 'Protected attribute', + PRIVILEGED_VALUE = 'Privileged value', + UNPRIVILEGED_VALUE = 'Unprivileged value', + OUTPUT = 'Output', + OUTPUT_VALUE = 'Output value', + PROVIDER = 'Provider', + IDENTIFIER = 'Identifier', + KEYWORD = 'Keyword', + AUTHOR = 'Author', + OWNER = 'Owner', +} + +type DashboardSearchFieldProps = { + types: SearchType[]; + searchType: SearchType; + onSearchTypeChange: (searchType: SearchType) => void; + searchValue: string; + onSearchValueChange: (searchValue: string) => void; + icon?: React.ReactNode; +}; + +const DashboardSearchField: React.FC = ({ + types, + searchValue, + searchType, + onSearchValueChange, + onSearchTypeChange, + icon, +}) => ( + + + ({ + key, + label: key, + }))} + value={searchType} + onChange={(key) => { + const enumMember = asEnumMember(key, SearchType); + if (enumMember !== null) { + onSearchTypeChange(enumMember); + } + }} + icon={icon} + /> + + + { + onSearchValueChange(newSearch); + }} + onClear={() => onSearchValueChange('')} + style={{ minWidth: '200px' }} + /> + + +); + +export default DashboardSearchField; diff --git a/clients/ui/frontend/src/app/components/MarkdownView.scss b/clients/ui/frontend/src/app/components/MarkdownView.scss new file mode 100644 index 000000000..aa367b237 --- /dev/null +++ b/clients/ui/frontend/src/app/components/MarkdownView.scss @@ -0,0 +1,88 @@ +.kubeflow-markdown-view { + word-break: break-word; + + &--with-padding { + padding-bottom: var(--pf-v5-global--spacer--md); + + p { + margin-bottom: var(--pf-v5-global--spacer--sm); + } + } + + h1, + h2, + h3, + h4, + h5, + h6 { + font-family: var(--pf-v5-global--FontFamily--heading--sans-serif); + font-weight: var(--pf-v5-global--FontWeight--normal); + margin-top: var(--pf-v5-global--spacer--md); + margin-bottom: var(--pf-v5-global--spacer--sm); + } + + h1 { + font-size: var(--pf-v5-global--FontSize--2xl); + } + + h2 { + font-size: var(--pf-v5-global--FontSize--xl); + } + + h3 { + font-size: var(--pf-v5-global--FontSize--lg); + } + + h4, + h5, + h6 { + font-size: var(--pf-v5-global--FontSize--md); + margin-top: var(--pf-v5-global--spacer--sm); + } + + ul, + ol { + margin-top: 0; + margin-bottom: var(--pf-v5-global--spacer--sm); + } + + ul { + list-style: initial; + } + + li { + margin-left: var(--pf-v5-global--spacer--lg); + } + + code, + pre { + font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; + background-color: var(--pf-v5-global--BackgroundColor--200); + border-radius: var(--pf-v5-global--BorderRadius--sm); + } + + code { + padding: 2px 4px; + font-size: 85%; + color: var(--pf-v5-global--danger-color--100); + } + + pre { + display: block; + padding: var(--pf-v5-global--spacer--sm); + margin-bottom: var(--pf-v5-global--spacer--sm); + font-size: var(--pf-v5-global--FontSize--sm); + color: var(--pf-v5-global--Color--300); + word-break: break-all; + word-wrap: break-word; + background-color: var(--pf-v5-global--BackgroundColor--200); + border: var(--pf-v5-global--BorderWidth--sm) solid var(--pf-v5-global--Color--light-300); + border-radius: var(--pf-v5-global--BorderRadius--sm); + code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + } + } +} diff --git a/clients/ui/frontend/src/app/components/MarkdownView.tsx b/clients/ui/frontend/src/app/components/MarkdownView.tsx new file mode 100644 index 000000000..4ece1204a --- /dev/null +++ b/clients/ui/frontend/src/app/components/MarkdownView.tsx @@ -0,0 +1,34 @@ +import React from 'react'; +import classNames from 'classnames'; +import { markdownConverter } from '~/utilities/markdown'; + +import './MarkdownView.scss'; + +type MarkdownViewProps = { + markdown?: string; + className?: string; + /** Strips some padding out so the content can fit as an inline-block effort */ + conciseDisplay?: boolean; + component?: 'div' | 'span'; +}; + +const MarkdownView: React.FC> = ({ + className = '', + markdown = '', + conciseDisplay, + component = 'div', + ...props +}) => { + const Component = component; + return ( + + ); +}; + +export default MarkdownView; diff --git a/clients/ui/frontend/src/app/components/SimpleSelect.scss b/clients/ui/frontend/src/app/components/SimpleSelect.scss new file mode 100644 index 000000000..30dd30512 --- /dev/null +++ b/clients/ui/frontend/src/app/components/SimpleSelect.scss @@ -0,0 +1,9 @@ +.full-width { + width: 100%; +} + +// remove this file when https://github.com/patternfly/patternfly/issues/6062 is solved +.truncate-no-min-width { + --pf-v5-c-truncate--MinWidth: 0; + --pf-v5-c-truncate__start--MinWidth: 0; +} diff --git a/clients/ui/frontend/src/app/components/SimpleSelect.tsx b/clients/ui/frontend/src/app/components/SimpleSelect.tsx new file mode 100644 index 000000000..27960895f --- /dev/null +++ b/clients/ui/frontend/src/app/components/SimpleSelect.tsx @@ -0,0 +1,144 @@ +import * as React from 'react'; +import { + Truncate, + MenuToggle, + Select, + SelectList, + SelectOption, + SelectGroup, + Divider, + MenuToggleProps, +} from '@patternfly/react-core'; + +import './SimpleSelect.scss'; + +export type SimpleSelectOption = { + key: string; + label: string; + description?: React.ReactNode; + dropdownLabel?: React.ReactNode; + isPlaceholder?: boolean; + isDisabled?: boolean; +}; + +export type SimpleGroupSelectOption = { + key: string; + label: string; + options: SimpleSelectOption[]; +}; + +type SimpleSelectProps = { + options?: SimpleSelectOption[]; + groupedOptions?: SimpleGroupSelectOption[]; + value?: string; + toggleLabel?: React.ReactNode; + placeholder?: string; + onChange: (key: string, isPlaceholder: boolean) => void; + isFullWidth?: boolean; + toggleProps?: MenuToggleProps; + isDisabled?: boolean; + icon?: React.ReactNode; + dataTestId?: string; +} & Omit< + React.ComponentProps, + 'isOpen' | 'toggle' | 'dropdownItems' | 'onChange' | 'selected' +>; + +const SimpleSelect: React.FC = ({ + isDisabled, + onChange, + options, + groupedOptions, + placeholder = 'Select...', + value, + toggleLabel, + isFullWidth, + icon, + dataTestId, + toggleProps, + ...props +}) => { + const [open, setOpen] = React.useState(false); + + const findOptionForKey = (key: string) => + options?.find((option) => option.key === key) || + groupedOptions + ?.reduce((acc, group) => [...acc, ...group.options], []) + .find((o) => o.key === key); + + const selectedOption = value ? findOptionForKey(value) : undefined; + const selectedLabel = selectedOption?.label ?? placeholder; + + return ( + + ); +}; + +export default SimpleSelect; diff --git a/clients/ui/frontend/src/app/components/design/utils.ts b/clients/ui/frontend/src/app/components/design/utils.ts index ef4f41141..23b67af9a 100644 --- a/clients/ui/frontend/src/app/components/design/utils.ts +++ b/clients/ui/frontend/src/app/components/design/utils.ts @@ -1,5 +1,8 @@ import registerModelImg from '~/images/UI_icon-Cubes-RGB.svg'; import modelRegistryEmptyStateImg from '~/images/empty-state-model-registries.svg'; +import modelRegistryMissingModelImg from '~/images/no-models-model-registry.svg'; +import modelRegistryMissingVersionImg from '~/images/no-versions-model-registry.svg'; + import './vars.scss'; export enum ProjectObjectType { @@ -24,10 +27,17 @@ export const typedObjectImage = (objectType: ProjectObjectType): string => { } }; -export const typedEmptyImage = (objectType: ProjectObjectType): string => { +export const typedEmptyImage = (objectType: ProjectObjectType, option?: string): string => { switch (objectType) { case ProjectObjectType.registeredModels: - return modelRegistryEmptyStateImg; + switch (option) { + case 'MissingModel': + return modelRegistryMissingModelImg; + case 'MissingVersion': + return modelRegistryMissingVersionImg; + default: + return modelRegistryEmptyStateImg; + } default: return ''; } diff --git a/clients/ui/frontend/src/app/components/table/CheckboxTd.tsx b/clients/ui/frontend/src/app/components/table/CheckboxTd.tsx new file mode 100644 index 000000000..b8d12b77f --- /dev/null +++ b/clients/ui/frontend/src/app/components/table/CheckboxTd.tsx @@ -0,0 +1,42 @@ +import * as React from 'react'; +import { Td } from '@patternfly/react-table'; +import { Checkbox, Tooltip } from '@patternfly/react-core'; + +type CheckboxTrProps = { + id: string; + isChecked: boolean | null; + onToggle: () => void; + isDisabled?: boolean; + tooltip?: string; +} & React.ComponentProps; + +const CheckboxTd: React.FC = ({ + id, + isChecked, + onToggle, + isDisabled, + tooltip, + ...props +}) => { + let content = ( + onToggle()} + isDisabled={isDisabled} + /> + ); + + if (tooltip) { + content = {content}; + } + + return ( + + {content} + + ); +}; + +export default CheckboxTd; diff --git a/clients/ui/frontend/src/app/components/table/Table.tsx b/clients/ui/frontend/src/app/components/table/Table.tsx new file mode 100644 index 000000000..f702ff39b --- /dev/null +++ b/clients/ui/frontend/src/app/components/table/Table.tsx @@ -0,0 +1,66 @@ +import * as React from 'react'; +import { TbodyProps } from '@patternfly/react-table'; +import { EitherNotBoth } from '~/typeHelpers'; +import TableBase, { MIN_PAGE_SIZE } from './TableBase'; +import useTableColumnSort from './useTableColumnSort'; + +type TableProps = Omit< + React.ComponentProps>, + 'itemCount' | 'onPerPageSelect' | 'onSetPage' | 'page' | 'perPage' +> & + EitherNotBoth< + { disableRowRenderSupport?: boolean }, + { tbodyProps?: TbodyProps & { ref?: React.Ref } } + >; + +const Table = ({ + data: allData, + columns, + subColumns, + enablePagination, + defaultSortColumn = 0, + truncateRenderingAt = 0, + ...props +}: TableProps): React.ReactElement => { + const [page, setPage] = React.useState(1); + const [pageSize, setPageSize] = React.useState(MIN_PAGE_SIZE); + const sort = useTableColumnSort(columns, subColumns || [], defaultSortColumn); + const sortedData = sort.transformData(allData); + + let data: T[]; + if (truncateRenderingAt) { + data = sortedData.slice(0, truncateRenderingAt); + } else if (enablePagination) { + data = sortedData.slice(pageSize * (page - 1), pageSize * page); + } else { + data = sortedData; + } + + // update page to 1 if data changes (common when filter is applied) + React.useEffect(() => { + if (data.length === 0) { + setPage(1); + } + }, [data.length]); + + return ( + setPage(newPage)} + onPerPageSelect={(e, newSize, newPage) => { + setPageSize(newSize); + setPage(newPage); + }} + getColumnSort={sort.getColumnSort} + {...props} + /> + ); +}; + +export default Table; diff --git a/clients/ui/frontend/src/app/components/table/TableBase.tsx b/clients/ui/frontend/src/app/components/table/TableBase.tsx new file mode 100644 index 000000000..30f845fca --- /dev/null +++ b/clients/ui/frontend/src/app/components/table/TableBase.tsx @@ -0,0 +1,318 @@ +import * as React from 'react'; +import { + Pagination, + PaginationProps, + Skeleton, + Toolbar, + ToolbarContent, + ToolbarGroup, + ToolbarItem, + Tooltip, +} from '@patternfly/react-core'; +import { + Table, + Thead, + Tr, + Th, + TableProps, + Caption, + Tbody, + Td, + TbodyProps, + InnerScrollContainer, +} from '@patternfly/react-table'; +import { EitherNotBoth } from '~/typeHelpers'; +import { GetColumnSort, SortableData } from './types'; +import { CHECKBOX_FIELD_ID, EXPAND_FIELD_ID, KEBAB_FIELD_ID } from './const'; + +type Props = { + loading?: boolean; + data: DataType[]; + columns: SortableData[]; + subColumns?: SortableData[]; + hasNestedHeader?: boolean; + defaultSortColumn?: number; + rowRenderer: (data: DataType, rowIndex: number) => React.ReactNode; + enablePagination?: boolean | 'compact'; + truncateRenderingAt?: number; + toolbarContent?: React.ReactElement; + bottomToolbarContent?: React.ReactElement; + emptyTableView?: React.ReactNode; + caption?: string; + footerRow?: (pageNumber: number) => React.ReactElement | null; + selectAll?: { + onSelect: (value: boolean) => void; + selected: boolean; + disabled?: boolean; + tooltip?: string; + }; + getColumnSort?: GetColumnSort; + disableItemCount?: boolean; + hasStickyColumns?: boolean; +} & EitherNotBoth< + { disableRowRenderSupport?: boolean }, + { tbodyProps?: TbodyProps & { ref?: React.Ref } } +> & + Omit & + Pick< + PaginationProps, + | 'itemCount' + | 'onPerPageSelect' + | 'onSetPage' + | 'page' + | 'perPage' + | 'perPageOptions' + | 'toggleTemplate' + | 'onNextClick' + | 'onPreviousClick' + >; + +export const MIN_PAGE_SIZE = 10; + +const defaultPerPageOptions = [ + { + title: '10', + value: 10, + }, + { + title: '20', + value: 20, + }, + { + title: '30', + value: 30, + }, +]; + +const TableBase = ({ + data, + columns, + subColumns, + hasNestedHeader, + rowRenderer, + enablePagination, + toolbarContent, + bottomToolbarContent, + emptyTableView, + caption, + disableRowRenderSupport, + selectAll, + footerRow, + tbodyProps, + perPage = 10, + page = 1, + perPageOptions = defaultPerPageOptions, + onSetPage, + onNextClick, + onPreviousClick, + onPerPageSelect, + getColumnSort, + itemCount = 0, + loading, + toggleTemplate, + disableItemCount = false, + hasStickyColumns, + ...props +}: Props): React.ReactElement => { + const selectAllRef = React.useRef(null); + const showPagination = enablePagination; + + const pagination = (variant: 'top' | 'bottom') => ( + + ); + + // Use a reference to store the heights of table rows once loaded + const tableRef = React.useRef(null); + const rowHeightsRef = React.useRef(); + React.useLayoutEffect(() => { + if (!loading || rowHeightsRef.current == null) { + const heights: number[] = []; + const rows = tableRef.current?.querySelectorAll(':scope > tbody > tr'); + rows?.forEach((r) => heights.push(r.offsetHeight)); + rowHeightsRef.current = heights; + } + }, [loading]); + + const renderColumnHeader = (col: SortableData, i: number, isSubheader?: boolean) => { + if (col.field === CHECKBOX_FIELD_ID && selectAll) { + return ( + + + selectAll.onSelect(value), + isDisabled: selectAll.disabled, + }} + // TODO: Log PF bug -- when there are no rows this gets truncated + style={{ minWidth: '45px' }} + isSubheader={isSubheader} + aria-label="Select all" + /> + + ); + } + + return col.label ? ( + + {col.label} + + ) : ( + // Table headers cannot be empty for a11y, table cells can -- https://dequeuniversity.com/rules/axe/4.0/empty-table-header + + ); + }; + + const renderRows = () => + loading + ? // compute the number of items in the upcoming page + new Array( + itemCount === 0 + ? rowHeightsRef.current?.length || MIN_PAGE_SIZE + : Math.max(0, Math.min(perPage, itemCount - perPage * (page - 1))), + ) + .fill(undefined) + .map((_, i) => { + // Set the height to the last known row height or otherwise the same height as the first row. + // When going to a previous page, the number of rows may be greater than the current. + + const getRow = () => ( + + {columns.map((col) => ( + + { + // render placeholders to reserve space + col.field === EXPAND_FIELD_ID || col.field === KEBAB_FIELD_ID ? ( +

+ ) : col.field === CHECKBOX_FIELD_ID ? ( +
+ ) : ( + + ) + } + + ))} + + ); + return disableRowRenderSupport ? ( + {getRow()} + ) : ( + getRow() + ); + }) + : data.map((row, rowIndex) => rowRenderer(row, rowIndex)); + + const table = ( + + {caption && } + + {columns.map((col, i) => renderColumnHeader(col, i))} + {subColumns?.length ? ( + {subColumns.map((col, i) => renderColumnHeader(col, columns.length + i, true))} + ) : null} + + {disableRowRenderSupport ? renderRows() : {renderRows()}} + {footerRow && footerRow(page)} +
{caption}
+ ); + + return ( + <> + {(toolbarContent || showPagination) && ( + } + > + + {toolbarContent} + {showPagination && ( + + {pagination('top')} + + )} + + + )} + + {hasStickyColumns ? {table} : table} + + {!loading && emptyTableView && data.length === 0 && ( +
+ {emptyTableView} +
+ )} + + {(bottomToolbarContent || showPagination) && ( + + + {bottomToolbarContent} + {showPagination && ( + + {pagination('bottom')} + + )} + + + )} + + ); +}; + +export default TableBase; diff --git a/clients/ui/frontend/src/app/components/table/TableRowTitleDescription.tsx b/clients/ui/frontend/src/app/components/table/TableRowTitleDescription.tsx new file mode 100644 index 000000000..be2d02e9b --- /dev/null +++ b/clients/ui/frontend/src/app/components/table/TableRowTitleDescription.tsx @@ -0,0 +1,50 @@ +import * as React from 'react'; +import { Content } from '@patternfly/react-core'; +import MarkdownView from '~/app/components/MarkdownView'; + +type TableRowTitleDescriptionProps = { + title: React.ReactNode; + // resource?: K8sResourceCommon; // TODO: Sort this out in refactor + subtitle?: React.ReactNode; + description?: string; + descriptionAsMarkdown?: boolean; + label?: React.ReactNode; +}; + +const TableRowTitleDescription: React.FC = ({ + title, + description, + // resource, + subtitle, + descriptionAsMarkdown, + label, +}) => { + let descriptionNode: React.ReactNode; + if (description) { + descriptionNode = descriptionAsMarkdown ? ( + + ) : ( + + {description} + + ); + } + + return ( + <> + + {/* {resource ? {title} : title} */} + {title} + + {subtitle} + {descriptionNode} + {label} + + ); +}; + +export default TableRowTitleDescription; diff --git a/clients/ui/frontend/src/app/components/table/__tests__/useCheckboxTable.spec.ts b/clients/ui/frontend/src/app/components/table/__tests__/useCheckboxTable.spec.ts new file mode 100644 index 000000000..8744706eb --- /dev/null +++ b/clients/ui/frontend/src/app/components/table/__tests__/useCheckboxTable.spec.ts @@ -0,0 +1,54 @@ +import { act } from 'react'; +import { testHook } from '~/__tests__/unit/testUtils/hooks'; +import { useCheckboxTable } from '~/app/components/table'; + +describe('useCheckboxTable', () => { + it('should select/unselect all', () => { + const renderResult = testHook(useCheckboxTable)(['a', 'b', 'c']); + + act(() => { + renderResult.result.current.tableProps.selectAll.onSelect(true); + }); + expect(renderResult.result.current.selections).toStrictEqual(['a', 'b', 'c']); + expect(renderResult.result.current.tableProps.selectAll.selected).toBe(true); + + act(() => { + renderResult.result.current.tableProps.selectAll.onSelect(false); + }); + expect(renderResult.result.current.selections).toStrictEqual([]); + expect(renderResult.result.current.tableProps.selectAll.selected).toBe(false); + }); + + it('should select/unselect ids', () => { + const renderResult = testHook(useCheckboxTable)(['a', 'b', 'c']); + + act(() => { + renderResult.result.current.toggleSelection('a'); + renderResult.result.current.toggleSelection('b'); + }); + expect(renderResult.result.current.selections).toStrictEqual(['a', 'b']); + expect(renderResult.result.current.isSelected('a')).toBe(true); + expect(renderResult.result.current.isSelected('b')).toBe(true); + expect(renderResult.result.current.isSelected('c')).toBe(false); + + act(() => { + renderResult.result.current.toggleSelection('a'); + }); + expect(renderResult.result.current.selections).toStrictEqual(['b']); + expect(renderResult.result.current.isSelected('a')).toBe(false); + expect(renderResult.result.current.isSelected('b')).toBe(true); + expect(renderResult.result.current.isSelected('c')).toBe(false); + }); + + it('should remove selected ids that no longer exist', () => { + const renderResult = testHook(useCheckboxTable)(['a', 'b', 'c']); + + act(() => { + renderResult.result.current.tableProps.selectAll.onSelect(true); + }); + + renderResult.rerender(['c']); + + expect(renderResult.result.current.selections).toStrictEqual(['c']); + }); +}); diff --git a/clients/ui/frontend/src/app/components/table/const.ts b/clients/ui/frontend/src/app/components/table/const.ts new file mode 100644 index 000000000..dda019bd4 --- /dev/null +++ b/clients/ui/frontend/src/app/components/table/const.ts @@ -0,0 +1,23 @@ +import { SortableData } from './types'; + +export const CHECKBOX_FIELD_ID = 'checkbox'; +export const KEBAB_FIELD_ID = 'kebab'; +export const EXPAND_FIELD_ID = 'expand'; + +export const checkboxTableColumn = (): SortableData => ({ + label: '', + field: CHECKBOX_FIELD_ID, + sortable: false, +}); + +export const kebabTableColumn = (): SortableData => ({ + label: '', + field: KEBAB_FIELD_ID, + sortable: false, +}); + +export const expandTableColumn = (): SortableData => ({ + label: '', + field: EXPAND_FIELD_ID, + sortable: false, +}); diff --git a/clients/ui/frontend/src/app/components/table/index.ts b/clients/ui/frontend/src/app/components/table/index.ts new file mode 100644 index 000000000..e09c66415 --- /dev/null +++ b/clients/ui/frontend/src/app/components/table/index.ts @@ -0,0 +1,13 @@ +export * from './types'; +export * from './const'; + +export { default as Table } from './Table'; +export { default as TableBase } from './TableBase'; +export { default as useCheckboxTable } from './useCheckboxTable'; +export { default as useCheckboxTableBase } from './useCheckboxTableBase'; +export type { UseCheckboxTableBaseProps } from './useCheckboxTableBase'; + +export { default as TableRowTitleDescription } from './TableRowTitleDescription'; +export { default as CheckboxTd } from './CheckboxTd'; + +export { getTableColumnSort } from './useTableColumnSort'; diff --git a/clients/ui/frontend/src/app/components/table/types.ts b/clients/ui/frontend/src/app/components/table/types.ts new file mode 100644 index 000000000..8e6bc1558 --- /dev/null +++ b/clients/ui/frontend/src/app/components/table/types.ts @@ -0,0 +1,27 @@ +import { ThProps } from '@patternfly/react-table'; + +export type GetColumnSort = (columnIndex: number) => ThProps['sort']; + +export type SortableData = Pick< + ThProps, + | 'hasRightBorder' + | 'isStickyColumn' + | 'stickyMinWidth' + | 'stickyLeftOffset' + | 'modifier' + | 'width' + | 'info' + | 'className' +> & { + label: string; + field: string; + colSpan?: number; + rowSpan?: number; + /** + * Set to false to disable sort. + * Set to true to handle string and number fields automatically (everything else is equal). + * Pass a function that will get the two results and what field needs to be matched. + * Assume ASC -- the result will be inverted internally if needed. + */ + sortable: boolean | ((a: T, b: T, keyField: string) => number); +}; diff --git a/clients/ui/frontend/src/app/components/table/useCheckboxTable.ts b/clients/ui/frontend/src/app/components/table/useCheckboxTable.ts new file mode 100644 index 000000000..f6680debf --- /dev/null +++ b/clients/ui/frontend/src/app/components/table/useCheckboxTable.ts @@ -0,0 +1,29 @@ +import * as React from 'react'; +import { useCheckboxTableBase } from '~/app/components/table'; +import type Table from './Table'; + +type UseCheckboxTable = { + selections: string[]; + tableProps: Required, 'selectAll'>>; + toggleSelection: (id: string) => void; + isSelected: (id: string) => boolean; + setSelections: (selections: string[]) => void; +}; + +const useCheckboxTable = ( + dataIds: string[], + defaultSelectedIds?: string[], + persistSelections?: boolean, +): UseCheckboxTable => { + const [selectedIds, setSelectedIds] = React.useState(defaultSelectedIds ?? []); + + return useCheckboxTableBase( + dataIds, + selectedIds, + setSelectedIds, + React.useCallback((d) => d, []), + { persistSelections }, + ); +}; + +export default useCheckboxTable; diff --git a/clients/ui/frontend/src/app/components/table/useCheckboxTableBase.ts b/clients/ui/frontend/src/app/components/table/useCheckboxTableBase.ts new file mode 100644 index 000000000..ad30914a9 --- /dev/null +++ b/clients/ui/frontend/src/app/components/table/useCheckboxTableBase.ts @@ -0,0 +1,117 @@ +import * as React from 'react'; +import { intersection, xor } from 'lodash-es'; +import type Table from './Table'; + +export type UseCheckboxTableBaseProps = { + selections: DataType[]; + tableProps: Required, 'selectAll'>>; + toggleSelection: (selection: DataType) => void; + isSelected: (selection: DataType) => boolean; + disableCheck: (item: DataType, enabled: boolean) => void; + setSelections: React.Dispatch>; +}; + +const useCheckboxTableBase = ( + data: T[], + selectedData: T[], + setSelectedData: React.Dispatch>, + dataMappingHelper: (selectData: T) => string, + options?: { selectAll?: { selected?: boolean; disabled?: boolean }; persistSelections?: boolean }, +): UseCheckboxTableBaseProps => { + const dataIds = React.useMemo(() => data.map(dataMappingHelper), [data, dataMappingHelper]); + + const [disabledData, setDisabledData] = React.useState([]); + + const selectedDataIds = React.useMemo( + () => selectedData.map(dataMappingHelper), + [selectedData, dataMappingHelper], + ); + + // remove selected ids that are no longer present in the provided dataIds + React.useEffect(() => { + if (options?.persistSelections) { + return; + } + + const newSelectedIds = intersection(selectedDataIds, dataIds); + const newSelectedData = newSelectedIds + .map((id) => data.find((d) => dataMappingHelper(d) === id)) + .filter((v): v is T => !!v); + if (selectedData.length !== newSelectedData.length) { + setSelectedData(newSelectedData); + } + }, [ + data, + dataIds, + dataMappingHelper, + options?.persistSelections, + selectedData, + selectedDataIds, + setSelectedData, + ]); + + const disableCheck = React.useCallback['disableCheck']>( + (item, disabled) => + setDisabledData((prevData) => + disabled + ? prevData.some((d) => dataMappingHelper(d) === dataMappingHelper(item)) + ? prevData + : [...prevData, item] + : prevData.filter((d) => dataMappingHelper(d) !== dataMappingHelper(item)), + ), + [dataMappingHelper], + ); + + return React.useMemo(() => { + // Header is selected if all selections and all ids are equal + // This will allow for checking of the header to "reset" to provided ids during a trim/filter + const checkable = data.filter( + (d) => !disabledData.some((item) => dataMappingHelper(item) === dataMappingHelper(d)), + ); + + const headerSelected = + selectedDataIds.length > 0 && + xor(selectedDataIds, checkable.map(dataMappingHelper)).length === 0; + + const allDisabled = selectedData.length === 0 && disabledData.length === data.length; + + return { + selections: selectedData, + setSelections: setSelectedData, + tableProps: { + selectAll: { + disabled: allDisabled, + tooltip: allDisabled ? 'No selectable rows' : undefined, + onSelect: (value) => { + setSelectedData(value ? checkable : []); + }, + selected: headerSelected, + ...options?.selectAll, + }, + }, + disableCheck, + isSelected: (selection) => selectedDataIds.includes(dataMappingHelper(selection)), + toggleSelection: (selection) => { + const id = dataMappingHelper(selection); + setSelectedData((prevData) => + prevData.map(dataMappingHelper).includes(id) + ? prevData.filter( + (currentSelectedData) => dataMappingHelper(currentSelectedData) !== id, + ) + : [...prevData, selection], + ); + }, + }; + }, [ + data, + selectedDataIds, + dataMappingHelper, + selectedData, + disabledData, + setSelectedData, + options?.selectAll, + disableCheck, + ]); +}; + +export default useCheckboxTableBase; diff --git a/clients/ui/frontend/src/app/components/table/useTableColumnSort.ts b/clients/ui/frontend/src/app/components/table/useTableColumnSort.ts new file mode 100644 index 000000000..56c4519d6 --- /dev/null +++ b/clients/ui/frontend/src/app/components/table/useTableColumnSort.ts @@ -0,0 +1,135 @@ +import * as React from 'react'; +import { GetColumnSort, SortableData } from './types'; + +type TableColumnSortProps = { + columns: SortableData[]; + subColumns?: SortableData[]; + sortDirection?: 'asc' | 'desc'; + setSortDirection: (dir: 'asc' | 'desc') => void; +}; + +type TableColumnSortByFieldProps = TableColumnSortProps & { + sortField?: string; + setSortField: (field: string) => void; +}; + +type TableColumnSortByIndexProps = TableColumnSortProps & { + sortIndex?: number; + setSortIndex: (index: number) => void; +}; + +export const getTableColumnSort = ({ + columns, + subColumns, + sortField, + setSortField, + ...sortProps +}: TableColumnSortByFieldProps): GetColumnSort => + getTableColumnSortByIndex({ + columns, + subColumns, + sortIndex: columns.findIndex((c) => c.field === sortField), + setSortIndex: (index: number) => setSortField(String(columns[index].field)), + ...sortProps, + }); + +const getTableColumnSortByIndex = + ({ + columns, + subColumns, + sortIndex, + sortDirection, + setSortIndex, + setSortDirection, + }: TableColumnSortByIndexProps): GetColumnSort => + (columnIndex: number) => + (columnIndex < columns.length + ? columns[columnIndex] + : subColumns?.[columnIndex - columns.length] + )?.sortable + ? { + sortBy: { + index: sortIndex, + direction: sortDirection, + defaultDirection: 'asc', + }, + onSort: (_event, index, direction) => { + setSortIndex(index); + setSortDirection(direction); + }, + columnIndex, + } + : undefined; +/** + * Using PF Composable Tables, this utility will help with handling sort logic. + * + * Use `transformData` on your data before you render rows. + * Use `getColumnSort` on your Th.sort as you render it (using the index of your column) + * + * @see https://www.patternfly.org/v4/components/table + */ +const useTableColumnSort = ( + columns: SortableData[], + subColumns: SortableData[], + defaultSortColIndex?: number, +): { + transformData: (data: T[]) => T[]; + getColumnSort: GetColumnSort; +} => { + const [activeSortIndex, setActiveSortIndex] = React.useState( + defaultSortColIndex, + ); + const [activeSortDirection, setActiveSortDirection] = React.useState<'desc' | 'asc' | undefined>( + 'asc', + ); + + return { + transformData: (data: T[]): T[] => { + if (activeSortIndex === undefined) { + return data; + } + + return data.toSorted((a, b) => { + const columnField = + activeSortIndex < columns.length + ? columns[activeSortIndex] + : subColumns[activeSortIndex - columns.length]; + + const compute = () => { + if (typeof columnField.sortable === 'function') { + return columnField.sortable(a, b, columnField.field); + } + + if (!columnField.field) { + // If you lack the field, no auto sorting can be done + return 0; + } + + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions + const dataValueA = a[columnField.field as keyof T]; + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions + const dataValueB = b[columnField.field as keyof T]; + if (typeof dataValueA === 'string' && typeof dataValueB === 'string') { + return dataValueA.localeCompare(dataValueB); + } + if (typeof dataValueA === 'number' && typeof dataValueB === 'number') { + return dataValueA - dataValueB; + } + return 0; + }; + + return compute() * (activeSortDirection === 'desc' ? -1 : 1); + }); + }, + getColumnSort: getTableColumnSortByIndex({ + columns, + subColumns, + sortDirection: activeSortDirection, + setSortDirection: setActiveSortDirection, + sortIndex: activeSortIndex, + setSortIndex: setActiveSortIndex, + }), + }; +}; + +export default useTableColumnSort; diff --git a/clients/ui/frontend/src/app/pages/modelRegistry/ModelRegistryRoutes.tsx b/clients/ui/frontend/src/app/pages/modelRegistry/ModelRegistryRoutes.tsx index 40050b5a3..6e3184406 100644 --- a/clients/ui/frontend/src/app/pages/modelRegistry/ModelRegistryRoutes.tsx +++ b/clients/ui/frontend/src/app/pages/modelRegistry/ModelRegistryRoutes.tsx @@ -1,8 +1,9 @@ import * as React from 'react'; -import { Route, Routes } from 'react-router-dom'; +import { Navigate, Route, Routes } from 'react-router-dom'; import ModelRegistry from './screens/ModelRegistry'; import ModelRegistryCoreLoader from './ModelRegistryCoreLoader'; import { modelRegistryUrl } from './screens/routeUtils'; +import RegisteredModelsArchive from './screens/RegisteredModelsArchive/RegisteredModelsArchive'; const ModelRegistryRoutes: React.FC = () => ( @@ -15,6 +16,11 @@ const ModelRegistryRoutes: React.FC = () => ( } > } /> + + } /> + } /> + + } /> ); diff --git a/clients/ui/frontend/src/app/pages/modelRegistry/screens/ModelRegistry.tsx b/clients/ui/frontend/src/app/pages/modelRegistry/screens/ModelRegistry.tsx index d37dda7ab..ddc33484b 100644 --- a/clients/ui/frontend/src/app/pages/modelRegistry/screens/ModelRegistry.tsx +++ b/clients/ui/frontend/src/app/pages/modelRegistry/screens/ModelRegistry.tsx @@ -3,7 +3,9 @@ import ApplicationsPage from '~/app/components/ApplicationsPage'; import TitleWithIcon from '~/app/components/design/TitleWithIcon'; import { ProjectObjectType } from '~/app/components/design/utils'; import useRegisteredModels from '~/app/hooks/useRegisteredModels'; +import { filterLiveModels } from '~/app/utils'; import ModelRegistrySelectorNavigator from './ModelRegistrySelectorNavigator'; +import RegisteredModelListView from './RegisteredModels/RegisteredModelListView'; import { modelRegistryUrl } from './routeUtils'; type ModelRegistryProps = Omit< @@ -18,7 +20,7 @@ type ModelRegistryProps = Omit< >; const ModelRegistry: React.FC = ({ ...pageProps }) => { - const [, loaded, loadError] = useRegisteredModels(); + const [registeredModels, loaded, loadError, refresh] = useRegisteredModels(); return ( = ({ ...pageProps }) => { provideChildrenPadding removeChildrenTopPadding > - TODO: Add table of registered models; + ); }; diff --git a/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelListView.tsx b/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelListView.tsx new file mode 100644 index 000000000..d2a6367d6 --- /dev/null +++ b/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelListView.tsx @@ -0,0 +1,117 @@ +import * as React from 'react'; +import { SearchInput, ToolbarFilter, ToolbarGroup, ToolbarItem } from '@patternfly/react-core'; +import { FilterIcon } from '@patternfly/react-icons'; +import { useNavigate } from 'react-router-dom'; +import { RegisteredModel } from '~/app/types'; +import { ModelRegistrySelectorContext } from '~/app/context/ModelRegistrySelectorContext'; +import { SearchType } from '~/app/components/DashboardSearchField'; +import { ProjectObjectType, typedEmptyImage } from '~/app/components/design/utils'; +import { asEnumMember, filterRegisteredModels } from '~/app/utils'; +import SimpleSelect from '~/app/components/SimpleSelect'; +import { + registeredModelArchiveUrl, + registerModelUrl, +} from '~/app/pages/modelRegistry/screens/routeUtils'; +import EmptyModelRegistryState from '~/app/pages/modelRegistry/screens/components/EmptyModelRegistryState'; +import RegisteredModelTable from './RegisteredModelTable'; +import RegisteredModelsTableToolbar from './RegisteredModelsTableToolbar'; + +type RegisteredModelListViewProps = { + registeredModels: RegisteredModel[]; + refresh: () => void; +}; + +const RegisteredModelListView: React.FC = ({ + registeredModels: unfilteredRegisteredModels, + refresh, +}) => { + const navigate = useNavigate(); + const { preferredModelRegistry } = React.useContext(ModelRegistrySelectorContext); + const [searchType, setSearchType] = React.useState(SearchType.KEYWORD); + const [search, setSearch] = React.useState(''); + + const searchTypes = React.useMemo(() => [SearchType.KEYWORD, SearchType.OWNER], []); + + if (unfilteredRegisteredModels.length === 0) { + return ( + ( + missing model + )} + description={`${preferredModelRegistry?.name} has no active registered models. Register a model in this registry, or select a different registry.`} + primaryActionText="Register model" + secondaryActionText="View archived models" + primaryActionOnClick={() => { + navigate(registerModelUrl(preferredModelRegistry?.name)); + }} + secondaryActionOnClick={() => { + navigate(registeredModelArchiveUrl(preferredModelRegistry?.name)); + }} + /> + ); + } + + const filteredRegisteredModels = filterRegisteredModels( + unfilteredRegisteredModels, + search, + searchType, + ); + + const resetFilters = () => { + setSearch(''); + }; + + const toggleGroupItems = ( + + setSearch('')} + deleteLabelGroup={() => setSearch('')} + categoryName="Keyword" + > + ({ + key, + label: key, + }))} + value={searchType} + onChange={(newSearchType) => { + const newSearchTypeInput = asEnumMember(newSearchType, SearchType); + if (newSearchTypeInput !== null) { + setSearchType(newSearchTypeInput); + } + }} + icon={} + /> + + + { + setSearch(searchValue); + }} + onClear={() => setSearch('')} + style={{ minWidth: '200px' }} + data-testid="registered-model-table-search" + /> + + + ); + + return ( + } + /> + ); +}; + +export default RegisteredModelListView; diff --git a/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelTable.tsx b/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelTable.tsx new file mode 100644 index 000000000..c46ac1b4e --- /dev/null +++ b/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelTable.tsx @@ -0,0 +1,34 @@ +import * as React from 'react'; +import { Table } from '~/app/components/table'; +import { RegisteredModel } from '~/app/types'; +import DashboardEmptyTableView from '~/app/components/DashboardEmptyTableView'; +import { rmColumns } from './RegisteredModelsTableColumns'; +import RegisteredModelTableRow from './RegisteredModelTableRow'; + +type RegisteredModelTableProps = { + clearFilters: () => void; + registeredModels: RegisteredModel[]; + refresh: () => void; +} & Partial, 'toolbarContent'>>; + +const RegisteredModelTable: React.FC = ({ + clearFilters, + registeredModels, + toolbarContent, + refresh, +}) => ( + } + rowRenderer={(rm) => ( + + )} + /> +); + +export default RegisteredModelTable; diff --git a/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelTableRow.tsx b/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelTableRow.tsx new file mode 100644 index 000000000..881e0033c --- /dev/null +++ b/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelTableRow.tsx @@ -0,0 +1,124 @@ +import * as React from 'react'; +import { useNavigate, Link } from 'react-router-dom'; +import { ActionsColumn, Td, Tr } from '@patternfly/react-table'; +import { Content, ContentVariants, FlexItem, Truncate } from '@patternfly/react-core'; +import { ModelRegistryContext } from '~/app/context/ModelRegistryContext'; +import { ModelState, RegisteredModel } from '~/app/types'; +import { ModelRegistrySelectorContext } from '~/app/context/ModelRegistrySelectorContext'; +import ModelLabels from '~/app/pages/modelRegistry/screens/components/ModelLabels'; +import ModelTimestamp from '~/app/pages/modelRegistry/screens/components/ModelTimestamp'; +import { ArchiveRegisteredModelModal } from '~/app/pages/modelRegistry/screens/components/ArchiveRegisteredModelModal'; +import { RestoreRegisteredModelModal } from '~/app/pages/modelRegistry/screens/components/RestoreRegisteredModel'; +import { + registeredModelArchiveDetailsUrl, + registeredModelUrl, +} from '~/app/pages/modelRegistry/screens/routeUtils'; + +type RegisteredModelTableRowProps = { + registeredModel: RegisteredModel; + isArchiveRow?: boolean; + refresh: () => void; +}; + +const RegisteredModelTableRow: React.FC = ({ + registeredModel: rm, + isArchiveRow, + refresh, +}) => { + const { apiState } = React.useContext(ModelRegistryContext); + const navigate = useNavigate(); + const { preferredModelRegistry } = React.useContext(ModelRegistrySelectorContext); + const [isArchiveModalOpen, setIsArchiveModalOpen] = React.useState(false); + const [isRestoreModalOpen, setIsRestoreModalOpen] = React.useState(false); + const rmUrl = registeredModelUrl(rm.id, preferredModelRegistry?.name); + + const actions = [ + { + title: 'View details', + // eslint-disable-next-line @typescript-eslint/no-empty-function + onClick: () => {}, // TODO: @Griffin-Sullivan uncomment this once model versions is active ---> navigate(`${rmUrl}/${ModelVersionsTab.DETAILS}`), + }, + isArchiveRow + ? { + title: 'Restore model', + onClick: () => setIsRestoreModalOpen(true), + } + : { + title: 'Archive model', + onClick: () => setIsArchiveModalOpen(true), + }, + ]; + + return ( + + + + + + + + ); +}; + +export default RegisteredModelTableRow; diff --git a/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelsTableColumns.ts b/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelsTableColumns.ts new file mode 100644 index 000000000..bd7e4309e --- /dev/null +++ b/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelsTableColumns.ts @@ -0,0 +1,42 @@ +import { SortableData } from '~/app/components/table'; +import { RegisteredModel } from '~/app/types'; + +export const rmColumns: SortableData[] = [ + { + field: 'model name', + label: 'Model name', + sortable: (a, b) => a.name.localeCompare(b.name), + width: 40, + }, + { + field: 'labels', + label: 'Labels', + sortable: false, + width: 35, + }, + { + field: 'last_modified', + label: 'Last modified', + sortable: (a: RegisteredModel, b: RegisteredModel): number => { + const first = parseInt(a.lastUpdateTimeSinceEpoch); + const second = parseInt(b.lastUpdateTimeSinceEpoch); + return new Date(second).getTime() - new Date(first).getTime(); + }, + }, + { + field: 'owner', + label: 'Owner', + sortable: true, + info: { + tooltip: 'The owner is the user who registered the model.', + tooltipProps: { + isContentLeftAligned: true, + }, + }, + }, + { + field: 'kebab', + label: '', + sortable: false, + }, +]; diff --git a/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelsTableToolbar.tsx b/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelsTableToolbar.tsx new file mode 100644 index 000000000..877d1fee0 --- /dev/null +++ b/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelsTableToolbar.tsx @@ -0,0 +1,122 @@ +import * as React from 'react'; +import { + Dropdown, + DropdownItem, + DropdownList, + MenuToggle, + MenuToggleAction, + MenuToggleElement, + Toolbar, + ToolbarContent, + ToolbarItem, + ToolbarToggleGroup, +} from '@patternfly/react-core'; +import { EllipsisVIcon, FilterIcon } from '@patternfly/react-icons'; +import { useNavigate } from 'react-router-dom'; +import { ModelRegistrySelectorContext } from '~/app/context/ModelRegistrySelectorContext'; +import { + registeredModelArchiveUrl, + registerModelUrl, + registerVersionUrl, +} from '~/app/pages/modelRegistry/screens/routeUtils'; + +type RegisteredModelsTableToolbarProps = { + toggleGroupItems?: React.ReactNode; +}; + +const RegisteredModelsTableToolbar: React.FC = ({ + toggleGroupItems: tableToggleGroupItems, +}) => { + const navigate = useNavigate(); + const { preferredModelRegistry } = React.useContext(ModelRegistrySelectorContext); + const [isRegisterNewVersionOpen, setIsRegisterNewVersionOpen] = React.useState(false); + const [isArchivedModelKebabOpen, setIsArchivedModelKebabOpen] = React.useState(false); + + const tooltipRef = React.useRef(null); + + return ( + + + } breakpoint="xl"> + {tableToggleGroupItems} + + + setIsRegisterNewVersionOpen(false)} + onOpenChange={(isOpen) => setIsRegisterNewVersionOpen(isOpen)} + toggle={(toggleRef) => ( + setIsRegisterNewVersionOpen(!isRegisterNewVersionOpen)} + isExpanded={isRegisterNewVersionOpen} + splitButtonOptions={{ + variant: 'action', + items: [ + navigate(registerModelUrl(preferredModelRegistry?.name))} + > + Register model + , + ], + }} + aria-label="Register model toggle" + data-testid="register-model-split-button" + /> + )} + > + + { + navigate(registerVersionUrl(preferredModelRegistry?.name)); + }} + ref={tooltipRef} + > + Register new version + + + + + + setIsArchivedModelKebabOpen(false)} + onOpenChange={(isOpen: boolean) => setIsArchivedModelKebabOpen(isOpen)} + toggle={(tr: React.Ref) => ( + setIsArchivedModelKebabOpen(!isArchivedModelKebabOpen)} + isExpanded={isArchivedModelKebabOpen} + aria-label="View archived models" + > + + + )} + shouldFocusToggleOnSelect + > + + navigate(registeredModelArchiveUrl(preferredModelRegistry?.name))} + > + View archived models + + + + + + + ); +}; + +export default RegisteredModelsTableToolbar; diff --git a/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelsArchive.tsx b/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelsArchive.tsx new file mode 100644 index 000000000..00aa63aba --- /dev/null +++ b/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelsArchive.tsx @@ -0,0 +1,47 @@ +import React from 'react'; +import { Breadcrumb, BreadcrumbItem } from '@patternfly/react-core'; +import { Link } from 'react-router-dom'; +import ApplicationsPage from '~/app/components/ApplicationsPage'; +import { ModelRegistrySelectorContext } from '~/app/context/ModelRegistrySelectorContext'; +import { filterArchiveModels } from '~/app/pages/modelRegistry/screens/utils'; +import useRegisteredModels from '~/app/hooks/useRegisteredModels'; +import RegisteredModelsArchiveListView from './RegisteredModelsArchiveListView'; + +type RegisteredModelsArchiveProps = Omit< + React.ComponentProps, + 'breadcrumb' | 'title' | 'loadError' | 'loaded' | 'provideChildrenPadding' +>; + +const RegisteredModelsArchive: React.FC = ({ ...pageProps }) => { + const { preferredModelRegistry } = React.useContext(ModelRegistrySelectorContext); + const [registeredModels, loaded, loadError, refresh] = useRegisteredModels(); + + return ( + + ( + Model registry - {preferredModelRegistry?.name} + )} + /> + + Archived models + + + } + title={`Archived models of ${preferredModelRegistry?.name}`} + loadError={loadError} + loaded={loaded} + provideChildrenPadding + > + + + ); +}; + +export default RegisteredModelsArchive; diff --git a/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelsArchiveListView.tsx b/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelsArchiveListView.tsx new file mode 100644 index 000000000..cd419d036 --- /dev/null +++ b/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelsArchiveListView.tsx @@ -0,0 +1,100 @@ +import * as React from 'react'; +import { + SearchInput, + ToolbarContent, + ToolbarFilter, + ToolbarGroup, + ToolbarItem, + ToolbarToggleGroup, +} from '@patternfly/react-core'; +import { FilterIcon } from '@patternfly/react-icons'; +import { RegisteredModel } from '~/app/types'; +import { SearchType } from '~/app/components/DashboardSearchField'; +import { filterRegisteredModels } from '~/app/pages/modelRegistry/screens/utils'; +import EmptyModelRegistryState from '~/app/pages/modelRegistry/screens/components/EmptyModelRegistryState'; +import SimpleSelect from '~/app/components/SimpleSelect'; +import { asEnumMember } from '~/app/utils'; +import RegisteredModelsArchiveTable from './RegisteredModelsArchiveTable'; + +type RegisteredModelsArchiveListViewProps = { + registeredModels: RegisteredModel[]; + refresh: () => void; +}; + +const RegisteredModelsArchiveListView: React.FC = ({ + registeredModels: unfilteredRegisteredModels, + refresh, +}) => { + const [searchType, setSearchType] = React.useState(SearchType.KEYWORD); + const [search, setSearch] = React.useState(''); + + const searchTypes = [SearchType.KEYWORD, SearchType.AUTHOR]; + + const filteredRegisteredModels = filterRegisteredModels( + unfilteredRegisteredModels, + search, + searchType, + ); + + if (unfilteredRegisteredModels.length === 0) { + return ( + + ); + } + + return ( + setSearch('')} + registeredModels={filteredRegisteredModels} + toolbarContent={ + + } breakpoint="xl"> + + setSearch('')} + deleteLabelGroup={() => setSearch('')} + categoryName="Keyword" + > + ({ + key, + label: key, + }))} + value={searchType} + onChange={(newSearchType) => { + const newSearchTypeInput = asEnumMember(newSearchType, SearchType); + if (newSearchTypeInput !== null) { + setSearchType(newSearchTypeInput); + } + }} + icon={} + /> + + + { + setSearch(searchValue); + }} + onClear={() => setSearch('')} + style={{ minWidth: '200px' }} + data-testid="registered-models-archive-table-search" + /> + + + + + } + /> + ); +}; + +export default RegisteredModelsArchiveListView; diff --git a/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelsArchiveTable.tsx b/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelsArchiveTable.tsx new file mode 100644 index 000000000..30aca1f68 --- /dev/null +++ b/clients/ui/frontend/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelsArchiveTable.tsx @@ -0,0 +1,34 @@ +import * as React from 'react'; +import { Table } from '~/app/components/table'; +import { RegisteredModel } from '~/app/types'; +import { rmColumns } from '~/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelsTableColumns'; +import DashboardEmptyTableView from '~/app/components/DashboardEmptyTableView'; +import RegisteredModelTableRow from '~/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelTableRow'; + +type RegisteredModelsArchiveTableProps = { + clearFilters: () => void; + registeredModels: RegisteredModel[]; + refresh: () => void; +} & Partial, 'toolbarContent'>>; + +const RegisteredModelsArchiveTable: React.FC = ({ + clearFilters, + registeredModels, + toolbarContent, + refresh, +}) => ( +
+
+ + + + + +
+ {rm.description && ( + + + + )} +
+ + + + + + {rm.owner || '-'} + + + + setIsArchiveModalOpen(false)} + onSubmit={() => + apiState.api + .patchRegisteredModel( + {}, + { + state: ModelState.ARCHIVED, + }, + rm.id, + ) + .then(refresh) + } + isOpen={isArchiveModalOpen} + registeredModelName={rm.name} + /> + setIsRestoreModalOpen(false)} + onSubmit={() => + apiState.api + .patchRegisteredModel( + {}, + { + state: ModelState.LIVE, + }, + rm.id, + ) + .then(() => navigate(registeredModelUrl(rm.id, preferredModelRegistry?.name))) + } + isOpen={isRestoreModalOpen} + registeredModelName={rm.name} + /> +
} + rowRenderer={(rm) => ( + + )} + /> +); + +export default RegisteredModelsArchiveTable; diff --git a/clients/ui/frontend/src/app/pages/modelRegistry/screens/components/ArchiveRegisteredModelModal.tsx b/clients/ui/frontend/src/app/pages/modelRegistry/screens/components/ArchiveRegisteredModelModal.tsx new file mode 100644 index 000000000..233ed8777 --- /dev/null +++ b/clients/ui/frontend/src/app/pages/modelRegistry/screens/components/ArchiveRegisteredModelModal.tsx @@ -0,0 +1,95 @@ +import * as React from 'react'; +import { Flex, FlexItem, Stack, StackItem, TextInput } from '@patternfly/react-core'; +import { Modal } from '@patternfly/react-core/deprecated'; +import DashboardModalFooter from '~/app/components/DashboardModalFooter'; + +// import useNotification from '~/utilities/useNotification'; // TODO: Implement useNotification + +interface ArchiveRegisteredModelModalProps { + onCancel: () => void; + onSubmit: () => void; + isOpen: boolean; + registeredModelName: string; +} + +export const ArchiveRegisteredModelModal: React.FC = ({ + onCancel, + onSubmit, + isOpen, + registeredModelName, +}) => { + // const notification = useNotification(); + const [isSubmitting, setIsSubmitting] = React.useState(false); + const [error, setError] = React.useState(); + const [confirmInputValue, setConfirmInputValue] = React.useState(''); + const isDisabled = confirmInputValue.trim() !== registeredModelName || isSubmitting; + + const onClose = React.useCallback(() => { + setConfirmInputValue(''); + onCancel(); + }, [onCancel]); + + const onConfirm = React.useCallback(async () => { + setIsSubmitting(true); + + try { + await onSubmit(); + onClose(); + // notification.success(`${registeredModelName} and all its versions archived.`); + } catch (e) { + if (e instanceof Error) { + setError(e); + } + } finally { + setIsSubmitting(false); + } + }, [onSubmit, onClose]); + + return ( + + } + data-testid="archive-registered-model-modal" + > + + + {registeredModelName} and all of its versions will be archived and unavailable for + use unless it is restored. + + + + + Type {registeredModelName} to confirm archiving: + + setConfirmInputValue(newValue)} + onKeyDown={(event) => { + if (event.key === 'Enter' && !isDisabled) { + onConfirm(); + } + }} + /> + + + + + ); +}; diff --git a/clients/ui/frontend/src/app/pages/modelRegistry/screens/components/ModelLabels.tsx b/clients/ui/frontend/src/app/pages/modelRegistry/screens/components/ModelLabels.tsx new file mode 100644 index 000000000..e888b6965 --- /dev/null +++ b/clients/ui/frontend/src/app/pages/modelRegistry/screens/components/ModelLabels.tsx @@ -0,0 +1,120 @@ +import { Button, Label, LabelGroup, Popover, SearchInput, Content } from '@patternfly/react-core'; +import { Modal, ModalVariant } from '@patternfly/react-core/deprecated'; +import React from 'react'; +import { ModelVersion, RegisteredModel } from '~/app/types'; +import useDebounceCallback from '~/utilities/useDebounceCallback'; +import { getLabels } from '~/app/pages/modelRegistry/screens/utils'; + +// Threshold count to decide whether to choose modal or popover +const MODAL_THRESHOLD = 4; + +type ModelLabelsProps = { + name: string; + customProperties: RegisteredModel['customProperties'] | ModelVersion['customProperties']; +}; + +const ModelLabels: React.FC = ({ name, customProperties }) => { + const [isLabelModalOpen, setIsLabelModalOpen] = React.useState(false); + const [searchValue, setSearchValue] = React.useState(''); + + const allLabels = getLabels(customProperties); + const filteredLabels = allLabels.filter( + (label) => label && label.toLowerCase().includes(searchValue.toLowerCase()), + ); + + const doSetSearchDebounced = useDebounceCallback(setSearchValue); + + const labelsComponent = (labels: string[], textMaxWidth?: string) => + labels.map((label, index) => ( + + )); + + const getLabelComponent = (labels: JSX.Element[]) => { + const labelCount = labels.length; + if (labelCount) { + return labelCount > MODAL_THRESHOLD + ? getLabelModal(labelCount) + : getLabelPopover(labelCount, labels); + } + return null; + }; + + const getLabelPopover = (labelCount: number, labels: JSX.Element[]) => ( + + {labels} + + } + > + + + ); + + const getLabelModal = (labelCount: number) => ( + + ); + + const labelModal = ( + setIsLabelModalOpen(false)} + description={ + + The following are all the labels of {name} + + } + actions={[ + , + ]} + > + doSetSearchDebounced(value)} + onClear={() => setSearchValue('')} + /> +
+ + {labelsComponent(filteredLabels, '50ch')} + +
+ ); + + if (Object.keys(customProperties).length === 0) { + return '-'; + } + + return ( + <> + + {labelsComponent(allLabels.slice(0, 3))} + {getLabelComponent(labelsComponent(allLabels.slice(3)))} + + {labelModal} + + ); +}; + +export default ModelLabels; diff --git a/clients/ui/frontend/src/app/pages/modelRegistry/screens/components/ModelTimestamp.tsx b/clients/ui/frontend/src/app/pages/modelRegistry/screens/components/ModelTimestamp.tsx new file mode 100644 index 000000000..7fbebbea6 --- /dev/null +++ b/clients/ui/frontend/src/app/pages/modelRegistry/screens/components/ModelTimestamp.tsx @@ -0,0 +1,32 @@ +import { Timestamp, TimestampTooltipVariant } from '@patternfly/react-core'; +import React from 'react'; +import { relativeTime } from '~/utilities/time'; + +type ModelTimestampProps = { + timeSinceEpoch?: string; +}; + +const ModelTimestamp: React.FC = ({ timeSinceEpoch }) => { + if (!timeSinceEpoch) { + return '--'; + } + + const time = new Date(parseInt(timeSinceEpoch)).getTime(); + + if (Number.isNaN(time)) { + return '--'; + } + + return ( + + {relativeTime(Date.now(), time)} + + ); +}; + +export default ModelTimestamp; diff --git a/clients/ui/frontend/src/app/pages/modelRegistry/screens/components/RestoreRegisteredModel.tsx b/clients/ui/frontend/src/app/pages/modelRegistry/screens/components/RestoreRegisteredModel.tsx new file mode 100644 index 000000000..66bfec9b2 --- /dev/null +++ b/clients/ui/frontend/src/app/pages/modelRegistry/screens/components/RestoreRegisteredModel.tsx @@ -0,0 +1,67 @@ +import * as React from 'react'; +import { Modal } from '@patternfly/react-core/deprecated'; +import DashboardModalFooter from '~/app/components/DashboardModalFooter'; + +// import useNotification from '~/utilities/useNotification'; TODO: Implement useNotification + +interface RestoreRegisteredModelModalProps { + onCancel: () => void; + onSubmit: () => void; + isOpen: boolean; + registeredModelName: string; +} + +export const RestoreRegisteredModelModal: React.FC = ({ + onCancel, + onSubmit, + isOpen, + registeredModelName, +}) => { + // const notification = useNotification(); + const [isSubmitting, setIsSubmitting] = React.useState(false); + const [error, setError] = React.useState(); + + const onClose = React.useCallback(() => { + onCancel(); + }, [onCancel]); + + const onConfirm = React.useCallback(async () => { + setIsSubmitting(true); + + try { + await onSubmit(); + onClose(); + // notification.success(`${registeredModelName} and all its versions restored.`); + } catch (e) { + if (e instanceof Error) { + setError(e); + } + } finally { + setIsSubmitting(false); + } + }, [onSubmit, onClose]); + + return ( + + } + data-testid="restore-registered-model-modal" + > + {registeredModelName} and all of its versions will be restored and returned to the + registered models list. + + ); +}; diff --git a/clients/ui/frontend/src/app/pages/modelRegistry/screens/utils.ts b/clients/ui/frontend/src/app/pages/modelRegistry/screens/utils.ts new file mode 100644 index 000000000..ff6d4ef47 --- /dev/null +++ b/clients/ui/frontend/src/app/pages/modelRegistry/screens/utils.ts @@ -0,0 +1,150 @@ +import { SearchType } from '~/app/components/DashboardSearchField'; +import { + ModelRegistryCustomProperties, + ModelRegistryMetadataType, + ModelRegistryStringCustomProperties, + ModelState, + ModelVersion, + RegisteredModel, +} from '~/app/types'; +import { KeyValuePair } from '~/types'; + +// Retrieves the labels from customProperties that have non-empty string_value. +export const getLabels = (customProperties: T): string[] => + Object.keys(customProperties).filter((key) => { + const prop = customProperties[key]; + return prop.metadataType === ModelRegistryMetadataType.STRING && prop.string_value === ''; + }); + +// Returns the customProperties object with an updated set of labels (non-empty string_value) without affecting other properties. +export const mergeUpdatedLabels = ( + customProperties: ModelRegistryCustomProperties, + updatedLabels: string[], +): ModelRegistryCustomProperties => { + const existingLabels = getLabels(customProperties); + const addedLabels = updatedLabels.filter((label) => !existingLabels.includes(label)); + const removedLabels = existingLabels.filter((label) => !updatedLabels.includes(label)); + const customPropertiesCopy = { ...customProperties }; + removedLabels.forEach((label) => { + delete customPropertiesCopy[label]; + }); + addedLabels.forEach((label) => { + customPropertiesCopy[label] = { + // eslint-disable-next-line camelcase + string_value: '', + metadataType: ModelRegistryMetadataType.STRING, + }; + }); + return customPropertiesCopy; +}; + +// Retrives the customProperties that are not labels (they have a defined string_value). +export const getProperties = ( + customProperties: T, +): ModelRegistryStringCustomProperties => { + const initial: ModelRegistryStringCustomProperties = {}; + return Object.keys(customProperties).reduce((acc, key) => { + const prop = customProperties[key]; + if (prop.metadataType === ModelRegistryMetadataType.STRING && prop.string_value !== '') { + return { ...acc, [key]: prop }; + } + return acc; + }, initial); +}; + +// Returns the customProperties object with a single string property added, updated or deleted +export const mergeUpdatedProperty = ( + args: { customProperties: ModelRegistryCustomProperties } & ( + | { op: 'create'; newPair: KeyValuePair } + | { op: 'update'; oldKey: string; newPair: KeyValuePair } + | { op: 'delete'; oldKey: string } + ), +): ModelRegistryCustomProperties => { + const { op } = args; + const customPropertiesCopy = { ...args.customProperties }; + if (op === 'delete' || (op === 'update' && args.oldKey !== args.newPair.key)) { + delete customPropertiesCopy[args.oldKey]; + } + if (op === 'create' || op === 'update') { + const { key, value } = args.newPair; + customPropertiesCopy[key] = { + // eslint-disable-next-line camelcase + string_value: value, + metadataType: ModelRegistryMetadataType.STRING, + }; + } + return customPropertiesCopy; +}; + +export const filterModelVersions = ( + unfilteredModelVersions: ModelVersion[], + search: string, + searchType: SearchType, +): ModelVersion[] => + unfilteredModelVersions.filter((mv: ModelVersion) => { + if (!search) { + return true; + } + + switch (searchType) { + case SearchType.KEYWORD: + return ( + mv.name.toLowerCase().includes(search.toLowerCase()) || + (mv.description && mv.description.toLowerCase().includes(search.toLowerCase())) + ); + + case SearchType.AUTHOR: + return ( + mv.author && + (mv.author.toLowerCase().includes(search.toLowerCase()) || + (mv.author && mv.author.toLowerCase().includes(search.toLowerCase()))) + ); + + default: + return true; + } + }); + +export const sortModelVersionsByCreateTime = (registeredModels: ModelVersion[]): ModelVersion[] => + registeredModels.toSorted((a, b) => { + const first = parseInt(a.createTimeSinceEpoch); + const second = parseInt(b.createTimeSinceEpoch); + return new Date(second).getTime() - new Date(first).getTime(); + }); + +export const filterRegisteredModels = ( + unfilteredRegisteredModels: RegisteredModel[], + search: string, + searchType: SearchType, +): RegisteredModel[] => + unfilteredRegisteredModels.filter((rm: RegisteredModel) => { + if (!search) { + return true; + } + + switch (searchType) { + case SearchType.KEYWORD: + return ( + rm.name.toLowerCase().includes(search.toLowerCase()) || + (rm.description && rm.description.toLowerCase().includes(search.toLowerCase())) + ); + + case SearchType.OWNER: + return rm.owner && rm.owner.toLowerCase().includes(search.toLowerCase()); + + default: + return true; + } + }); + +export const filterArchiveVersions = (modelVersions: ModelVersion[]): ModelVersion[] => + modelVersions.filter((mv) => mv.state === ModelState.ARCHIVED); + +export const filterLiveVersions = (modelVersions: ModelVersion[]): ModelVersion[] => + modelVersions.filter((mv) => mv.state === ModelState.LIVE); + +export const filterArchiveModels = (registeredModels: RegisteredModel[]): RegisteredModel[] => + registeredModels.filter((rm) => rm.state === ModelState.ARCHIVED); + +export const filterLiveModels = (registeredModels: RegisteredModel[]): RegisteredModel[] => + registeredModels.filter((rm) => rm.state === ModelState.LIVE); diff --git a/clients/ui/frontend/src/app/types.ts b/clients/ui/frontend/src/app/types.ts index da39d133b..27348cd65 100644 --- a/clients/ui/frontend/src/app/types.ts +++ b/clients/ui/frontend/src/app/types.ts @@ -22,8 +22,9 @@ export type ModelRegistry = { }; // TODO: Change in the backend AND frontend to "items" instead of "model-registries" -export type ModelRegistryResponse = { - model_registry: ModelRegistry[]; +export type ModelRegistryResponse = { + data: T; + metadata?: Record; }; export enum ModelRegistryMetadataType { diff --git a/clients/ui/frontend/src/app/utils.ts b/clients/ui/frontend/src/app/utils.ts new file mode 100644 index 000000000..bced95699 --- /dev/null +++ b/clients/ui/frontend/src/app/utils.ts @@ -0,0 +1,48 @@ +import { SearchType } from '~/app/components/DashboardSearchField'; +import { ModelState, RegisteredModel } from '~/app/types'; + +export const asEnumMember = ( + member: T[keyof T] | string | number | undefined | null, + e: T, +): T[keyof T] | null => (isEnumMember(member, e) ? member : null); + +export const isEnumMember = ( + member: T[keyof T] | string | number | undefined | unknown | null, + e: T, +): member is T[keyof T] => { + if (member != null) { + return Object.entries(e) + .filter(([key]) => Number.isNaN(Number(key))) + .map(([, value]) => value) + .includes(member); + } + return false; +}; + +export const filterLiveModels = (registeredModels: RegisteredModel[]): RegisteredModel[] => + registeredModels.filter((rm) => rm.state === ModelState.LIVE); + +export const filterRegisteredModels = ( + unfilteredRegisteredModels: RegisteredModel[], + search: string, + searchType: SearchType, +): RegisteredModel[] => + unfilteredRegisteredModels.filter((rm: RegisteredModel) => { + if (!search) { + return true; + } + + switch (searchType) { + case SearchType.KEYWORD: + return ( + rm.name.toLowerCase().includes(search.toLowerCase()) || + (rm.description && rm.description.toLowerCase().includes(search.toLowerCase())) + ); + + case SearchType.OWNER: + return rm.owner && rm.owner.toLowerCase().includes(search.toLowerCase()); + + default: + return true; + } + }); diff --git a/clients/ui/frontend/src/images/no-models-model-registry.svg b/clients/ui/frontend/src/images/no-models-model-registry.svg new file mode 100644 index 000000000..5b3e712be --- /dev/null +++ b/clients/ui/frontend/src/images/no-models-model-registry.svg @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/clients/ui/frontend/src/images/no-versions-model-registry.svg b/clients/ui/frontend/src/images/no-versions-model-registry.svg new file mode 100644 index 000000000..8c4fa99e7 --- /dev/null +++ b/clients/ui/frontend/src/images/no-versions-model-registry.svg @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/clients/ui/frontend/src/types.ts b/clients/ui/frontend/src/types.ts index 34f4c36fc..b40371e0b 100644 --- a/clients/ui/frontend/src/types.ts +++ b/clients/ui/frontend/src/types.ts @@ -19,3 +19,8 @@ export type CommonConfig = { export type FeatureFlag = { modelRegistry: boolean; }; + +export type KeyValuePair = { + key: string; + value: string; +}; diff --git a/clients/ui/frontend/src/utilities/markdown.ts b/clients/ui/frontend/src/utilities/markdown.ts new file mode 100644 index 000000000..9b0b2ec3b --- /dev/null +++ b/clients/ui/frontend/src/utilities/markdown.ts @@ -0,0 +1,53 @@ +import DOMPurify from 'dompurify'; +import { Converter } from 'showdown'; + +export const markdownConverter = { + makeHtml: (markdown: string): string => { + const unsafeHtml = new Converter({ + tables: true, + openLinksInNewWindow: true, + strikethrough: true, + emoji: true, + literalMidWordUnderscores: true, + }).makeHtml(markdown); + + // add hook to transform anchor tags + DOMPurify.addHook('beforeSanitizeElements', (node) => { + // nodeType 1 = element type + if (node.nodeType === 1 && node.nodeName.toLowerCase() === 'a') { + node.setAttribute('rel', 'noopener noreferrer'); + } + }); + + return DOMPurify.sanitize(unsafeHtml, { + ALLOWED_TAGS: [ + 'b', + 'i', + 'strike', + 's', + 'del', + 'em', + 'strong', + 'a', + 'p', + 'h1', + 'h2', + 'h3', + 'h4', + 'ul', + 'ol', + 'li', + 'code', + 'pre', + 'table', + 'thead', + 'tbody', + 'tr', + 'th', + 'td', + ], + ALLOWED_ATTR: ['href', 'target', 'rel', 'class'], + ALLOWED_URI_REGEXP: /^(?:(?:https?|mailto):|[^a-z]|[a-z+.-]+(?:[^a-z+.\-:]|$))/i, + }); + }, +}; diff --git a/clients/ui/frontend/src/utilities/time.ts b/clients/ui/frontend/src/utilities/time.ts new file mode 100644 index 000000000..16fd8a8e8 --- /dev/null +++ b/clients/ui/frontend/src/utilities/time.ts @@ -0,0 +1,69 @@ +// TODO: Trimed down version of the original file. Needs to be updated with the original file. + +const printAgo = (time: number, unit: string) => `${time} ${unit}${time > 1 ? 's' : ''} ago`; +const printIn = (time: number, unit: string) => `in ${time} ${unit}${time > 1 ? 's' : ''}`; + +export const relativeTime = (current: number, previous: number): string => { + const msPerMinute = 60 * 1000; + const msPerHour = msPerMinute * 60; + const msPerDay = msPerHour * 24; + const msPerMonth = msPerDay * 30; + const msPerYear = msPerDay * 365; + + if (Number.isNaN(previous)) { + return 'Just now'; + } + + let elapsed = current - previous; + let shortPrintFn = printAgo; + + if (elapsed < 0) { + elapsed *= -1; + shortPrintFn = printIn; + } + + if (elapsed < msPerMinute) { + return 'Just now'; + } + if (elapsed < msPerHour) { + return shortPrintFn(Math.round(elapsed / msPerMinute), 'minute'); + } + if (elapsed < msPerDay) { + return shortPrintFn(Math.round(elapsed / msPerHour), 'hour'); + } + if (elapsed < msPerMonth) { + return shortPrintFn(Math.round(elapsed / msPerDay), 'day'); + } + if (elapsed < msPerYear) { + return shortPrintFn(Math.round(elapsed / msPerMonth), 'month'); + } + const date = new Date(previous); + + const month = date.getMonth(); + let monthAsString = 'Jan'; + if (month === 1) { + monthAsString = 'Feb'; + } else if (month === 2) { + monthAsString = 'Mar'; + } else if (month === 3) { + monthAsString = 'April'; + } else if (month === 4) { + monthAsString = 'May'; + } else if (month === 5) { + monthAsString = 'June'; + } else if (month === 6) { + monthAsString = 'July'; + } else if (month === 7) { + monthAsString = 'August'; + } else if (month === 8) { + monthAsString = 'Sept'; + } else if (month === 9) { + monthAsString = 'Oct'; + } else if (month === 10) { + monthAsString = 'Nov'; + } else if (month === 11) { + monthAsString = 'Dec'; + } + + return `${date.getDate()} ${monthAsString} ${date.getFullYear()}`; +}; diff --git a/clients/ui/frontend/src/utilities/useDebounceCallback.ts b/clients/ui/frontend/src/utilities/useDebounceCallback.ts new file mode 100644 index 000000000..7fc5fcb54 --- /dev/null +++ b/clients/ui/frontend/src/utilities/useDebounceCallback.ts @@ -0,0 +1,10 @@ +import * as _ from 'lodash-es'; +import * as React from 'react'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const useDebounceCallback = any>( + fn: T, + delay = 250, +): ReturnType> => React.useMemo(() => _.debounce(fn, delay), [fn, delay]); + +export default useDebounceCallback;