mod-arch-shared 0.1.9 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -268
- package/dist/__tests__/unit/jest.setup.d.ts +1 -0
- package/dist/__tests__/unit/jest.setup.d.ts.map +1 -1
- package/dist/__tests__/unit/jest.setup.js +3 -46
- package/dist/__tests__/unit/jest.setup.js.map +1 -1
- package/dist/components/EditableLabelsDescriptionListGroup.d.ts +1 -0
- package/dist/components/EditableLabelsDescriptionListGroup.d.ts.map +1 -1
- package/dist/components/EditableLabelsDescriptionListGroup.js +15 -12
- package/dist/components/EditableLabelsDescriptionListGroup.js.map +1 -1
- package/dist/components/EditableTextDescriptionListGroup.d.ts +1 -0
- package/dist/components/EditableTextDescriptionListGroup.d.ts.map +1 -1
- package/dist/components/EditableTextDescriptionListGroup.js +13 -6
- package/dist/components/EditableTextDescriptionListGroup.js.map +1 -1
- package/dist/components/WhosMyAdministrator.d.ts.map +1 -1
- package/dist/components/WhosMyAdministrator.js +5 -2
- package/dist/components/WhosMyAdministrator.js.map +1 -1
- package/dist/components/index.d.ts +0 -5
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +0 -5
- package/dist/components/index.js.map +1 -1
- package/dist/config/transform.file.d.ts +2 -1
- package/dist/config/transform.file.d.ts.map +1 -1
- package/dist/config/transform.file.js +2 -7
- package/dist/config/transform.file.js.map +1 -1
- package/dist/config/transform.style.js +1 -0
- package/dist/config/transform.style.js.map +1 -1
- package/dist/images/index.d.ts +2 -2
- package/dist/images/index.d.ts.map +1 -1
- package/dist/images/index.js +2 -2
- package/dist/images/index.js.map +1 -1
- package/dist/images/index.ts +2 -2
- package/dist/images/logo-odh-dark-theme.svg +18 -0
- package/dist/images/logo-odh-light-theme.svg +18 -0
- package/dist/index.d.ts +0 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -15
- package/dist/index.js.map +1 -1
- package/dist/jest.config.d.ts +1 -0
- package/dist/jest.config.js +3 -1
- package/dist/jest.config.js.map +1 -1
- package/dist/types/common.d.ts +0 -43
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/common.js +0 -1
- package/dist/types/common.js.map +1 -1
- package/dist/utilities/__tests__/markdown.spec.d.ts +2 -0
- package/dist/utilities/__tests__/markdown.spec.d.ts.map +1 -0
- package/dist/utilities/__tests__/markdown.spec.js +17 -0
- package/dist/utilities/__tests__/markdown.spec.js.map +1 -0
- package/dist/utilities/__tests__/string.spec.d.ts +2 -0
- package/dist/utilities/__tests__/string.spec.d.ts.map +1 -0
- package/dist/utilities/__tests__/string.spec.js +51 -0
- package/dist/utilities/__tests__/string.spec.js.map +1 -0
- package/dist/utilities/__tests__/time.spec.d.ts +2 -0
- package/dist/utilities/__tests__/time.spec.d.ts.map +1 -0
- package/dist/utilities/__tests__/time.spec.js +61 -0
- package/dist/utilities/__tests__/time.spec.js.map +1 -0
- package/dist/utilities/index.d.ts +0 -5
- package/dist/utilities/index.d.ts.map +1 -1
- package/dist/utilities/index.js +0 -5
- package/dist/utilities/index.js.map +1 -1
- package/dist/utilities/utils.d.ts +0 -23
- package/dist/utilities/utils.d.ts.map +1 -1
- package/dist/utilities/utils.js +0 -93
- package/dist/utilities/utils.js.map +1 -1
- package/package.json +28 -36
- package/LICENSE +0 -201
- package/dist/__tests__/__mocks__/mockGenericResponse.d.ts +0 -8
- package/dist/__tests__/__mocks__/mockGenericResponse.d.ts.map +0 -1
- package/dist/__tests__/__mocks__/mockGenericResponse.js +0 -6
- package/dist/__tests__/__mocks__/mockGenericResponse.js.map +0 -1
- package/dist/__tests__/__mocks__/styleMock.d.ts +0 -2
- package/dist/__tests__/__mocks__/styleMock.d.ts.map +0 -1
- package/dist/__tests__/__mocks__/styleMock.js +0 -3
- package/dist/__tests__/__mocks__/styleMock.js.map +0 -1
- package/dist/__tests__/unit/testUtils/hooks.d.ts +0 -80
- package/dist/__tests__/unit/testUtils/hooks.d.ts.map +0 -1
- package/dist/__tests__/unit/testUtils/hooks.js +0 -126
- package/dist/__tests__/unit/testUtils/hooks.js.map +0 -1
- package/dist/__tests__/unit/testUtils/hooks.spec.d.ts +0 -2
- package/dist/__tests__/unit/testUtils/hooks.spec.d.ts.map +0 -1
- package/dist/__tests__/unit/testUtils/hooks.spec.js +0 -192
- package/dist/__tests__/unit/testUtils/hooks.spec.js.map +0 -1
- package/dist/api/__tests__/errorUtils.spec.d.ts +0 -2
- package/dist/api/__tests__/errorUtils.spec.d.ts.map +0 -1
- package/dist/api/__tests__/errorUtils.spec.js +0 -27
- package/dist/api/__tests__/errorUtils.spec.js.map +0 -1
- package/dist/api/apiUtils.d.ts +0 -16
- package/dist/api/apiUtils.d.ts.map +0 -1
- package/dist/api/apiUtils.js +0 -96
- package/dist/api/apiUtils.js.map +0 -1
- package/dist/api/const.d.ts +0 -3
- package/dist/api/const.d.ts.map +0 -1
- package/dist/api/const.js +0 -4
- package/dist/api/const.js.map +0 -1
- package/dist/api/errorUtils.d.ts +0 -2
- package/dist/api/errorUtils.d.ts.map +0 -1
- package/dist/api/errorUtils.js +0 -22
- package/dist/api/errorUtils.js.map +0 -1
- package/dist/api/index.d.ts +0 -7
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/index.js +0 -8
- package/dist/api/index.js.map +0 -1
- package/dist/api/k8s.d.ts +0 -10
- package/dist/api/k8s.d.ts.map +0 -1
- package/dist/api/k8s.js +0 -16
- package/dist/api/k8s.js.map +0 -1
- package/dist/api/types.d.ts +0 -19
- package/dist/api/types.d.ts.map +0 -1
- package/dist/api/types.js +0 -2
- package/dist/api/types.js.map +0 -1
- package/dist/api/useAPIState.d.ts +0 -3
- package/dist/api/useAPIState.d.ts.map +0 -1
- package/dist/api/useAPIState.js +0 -22
- package/dist/api/useAPIState.js.map +0 -1
- package/dist/components/NavBar.d.ts +0 -8
- package/dist/components/NavBar.d.ts.map +0 -1
- package/dist/components/NavBar.js +0 -53
- package/dist/components/NavBar.js.map +0 -1
- package/dist/components/NavSidebar.d.ts +0 -8
- package/dist/components/NavSidebar.d.ts.map +0 -1
- package/dist/components/NavSidebar.js +0 -25
- package/dist/components/NavSidebar.js.map +0 -1
- package/dist/components/ToastNotification.d.ts +0 -8
- package/dist/components/ToastNotification.d.ts.map +0 -1
- package/dist/components/ToastNotification.js +0 -29
- package/dist/components/ToastNotification.js.map +0 -1
- package/dist/components/ToastNotifications.d.ts +0 -4
- package/dist/components/ToastNotifications.d.ts.map +0 -1
- package/dist/components/ToastNotifications.js +0 -10
- package/dist/components/ToastNotifications.js.map +0 -1
- package/dist/components/__tests__/NavBar.test.d.ts +0 -2
- package/dist/components/__tests__/NavBar.test.d.ts.map +0 -1
- package/dist/components/__tests__/NavBar.test.js +0 -65
- package/dist/components/__tests__/NavBar.test.js.map +0 -1
- package/dist/components/browserStorage/BrowserStorageContext.d.ts +0 -25
- package/dist/components/browserStorage/BrowserStorageContext.d.ts.map +0 -1
- package/dist/components/browserStorage/BrowserStorageContext.js +0 -97
- package/dist/components/browserStorage/BrowserStorageContext.js.map +0 -1
- package/dist/components/browserStorage/index.d.ts +0 -2
- package/dist/components/browserStorage/index.d.ts.map +0 -1
- package/dist/components/browserStorage/index.js +0 -2
- package/dist/components/browserStorage/index.js.map +0 -1
- package/dist/components/table/__tests__/useCheckboxTable.spec.d.ts +0 -2
- package/dist/components/table/__tests__/useCheckboxTable.spec.d.ts.map +0 -1
- package/dist/components/table/__tests__/useCheckboxTable.spec.js +0 -45
- package/dist/components/table/__tests__/useCheckboxTable.spec.js.map +0 -1
- package/dist/config/stylePaths.d.ts +0 -2
- package/dist/config/stylePaths.d.ts.map +0 -1
- package/dist/config/stylePaths.js +0 -17
- package/dist/config/stylePaths.js.map +0 -1
- package/dist/context/ModularArchContext.d.ts +0 -20
- package/dist/context/ModularArchContext.d.ts.map +0 -1
- package/dist/context/ModularArchContext.js +0 -68
- package/dist/context/ModularArchContext.js.map +0 -1
- package/dist/context/NotificationContext.d.ts +0 -15
- package/dist/context/NotificationContext.d.ts.map +0 -1
- package/dist/context/NotificationContext.js +0 -43
- package/dist/context/NotificationContext.js.map +0 -1
- package/dist/context/ThemeContext.d.ts +0 -13
- package/dist/context/ThemeContext.d.ts.map +0 -1
- package/dist/context/ThemeContext.js +0 -23
- package/dist/context/ThemeContext.js.map +0 -1
- package/dist/context/__tests__/ModularArchContext.test.d.ts +0 -2
- package/dist/context/__tests__/ModularArchContext.test.d.ts.map +0 -1
- package/dist/context/__tests__/ModularArchContext.test.js +0 -331
- package/dist/context/__tests__/ModularArchContext.test.js.map +0 -1
- package/dist/context/index.d.ts +0 -4
- package/dist/context/index.d.ts.map +0 -1
- package/dist/context/index.js +0 -4
- package/dist/context/index.js.map +0 -1
- package/dist/hooks/__tests__/useModularArchContext.test.d.ts +0 -2
- package/dist/hooks/__tests__/useModularArchContext.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/useModularArchContext.test.js +0 -39
- package/dist/hooks/__tests__/useModularArchContext.test.js.map +0 -1
- package/dist/hooks/__tests__/useNamespaces.test.d.ts +0 -2
- package/dist/hooks/__tests__/useNamespaces.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/useNamespaces.test.js +0 -62
- package/dist/hooks/__tests__/useNamespaces.test.js.map +0 -1
- package/dist/hooks/index.d.ts +0 -9
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/index.js +0 -9
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/useModularArchContext.d.ts +0 -5
- package/dist/hooks/useModularArchContext.d.ts.map +0 -1
- package/dist/hooks/useModularArchContext.js +0 -11
- package/dist/hooks/useModularArchContext.js.map +0 -1
- package/dist/hooks/useNamespaceSelector.d.ts +0 -10
- package/dist/hooks/useNamespaceSelector.d.ts.map +0 -1
- package/dist/hooks/useNamespaceSelector.js +0 -13
- package/dist/hooks/useNamespaceSelector.js.map +0 -1
- package/dist/hooks/useNamespaces.d.ts +0 -6
- package/dist/hooks/useNamespaces.d.ts.map +0 -1
- package/dist/hooks/useNamespaces.js +0 -34
- package/dist/hooks/useNamespaces.js.map +0 -1
- package/dist/hooks/useNotification.d.ts +0 -18
- package/dist/hooks/useNotification.d.ts.map +0 -1
- package/dist/hooks/useNotification.js +0 -75
- package/dist/hooks/useNotification.js.map +0 -1
- package/dist/hooks/useQueryParamNamespaces.d.ts +0 -2
- package/dist/hooks/useQueryParamNamespaces.d.ts.map +0 -1
- package/dist/hooks/useQueryParamNamespaces.js +0 -9
- package/dist/hooks/useQueryParamNamespaces.js.map +0 -1
- package/dist/hooks/useSettings.d.ts +0 -9
- package/dist/hooks/useSettings.d.ts.map +0 -1
- package/dist/hooks/useSettings.js +0 -72
- package/dist/hooks/useSettings.js.map +0 -1
- package/dist/hooks/useThemeContext.d.ts +0 -6
- package/dist/hooks/useThemeContext.d.ts.map +0 -1
- package/dist/hooks/useThemeContext.js +0 -10
- package/dist/hooks/useThemeContext.js.map +0 -1
- package/dist/hooks/useTimeBasedRefresh.d.ts +0 -4
- package/dist/hooks/useTimeBasedRefresh.d.ts.map +0 -1
- package/dist/hooks/useTimeBasedRefresh.js +0 -32
- package/dist/hooks/useTimeBasedRefresh.js.map +0 -1
- package/dist/images/logo-dark-theme.svg +0 -43
- package/dist/images/logo-light-theme.svg +0 -43
- package/dist/style/MUI-theme.scss +0 -995
- package/dist/style/index.d.ts +0 -2
- package/dist/style/index.d.ts.map +0 -1
- package/dist/style/index.js +0 -6
- package/dist/style/index.js.map +0 -1
- package/dist/style/index.ts +0 -6
- package/dist/utilities/appUtils.d.ts +0 -2
- package/dist/utilities/appUtils.d.ts.map +0 -1
- package/dist/utilities/appUtils.js +0 -4
- package/dist/utilities/appUtils.js.map +0 -1
- package/dist/utilities/const.d.ts +0 -13
- package/dist/utilities/const.d.ts.map +0 -1
- package/dist/utilities/const.js +0 -20
- package/dist/utilities/const.js.map +0 -1
- package/dist/utilities/useFetchState.d.ts +0 -92
- package/dist/utilities/useFetchState.d.ts.map +0 -1
- package/dist/utilities/useFetchState.js +0 -153
- package/dist/utilities/useFetchState.js.map +0 -1
- package/dist/utilities/useGenericObjectState.d.ts +0 -9
- package/dist/utilities/useGenericObjectState.d.ts.map +0 -1
- package/dist/utilities/useGenericObjectState.js +0 -14
- package/dist/utilities/useGenericObjectState.js.map +0 -1
- package/dist/utilities/useMakeFetchObject.d.ts +0 -4
- package/dist/utilities/useMakeFetchObject.d.ts.map +0 -1
- package/dist/utilities/useMakeFetchObject.js +0 -6
- package/dist/utilities/useMakeFetchObject.js.map +0 -1
- package/images/Icon-Layered_A_Black-RGB.svg +0 -66
- package/images/Icon-Storage-A-Black-RGB.svg +0 -3
- package/images/Icon-Sys_admin-A-Black-RGB.svg +0 -8
- package/images/UI_icon-Branch-RGB.svg +0 -1
- package/images/UI_icon-Connected-RGB.svg +0 -1
- package/images/UI_icon-Cubes-RGB.svg +0 -1
- package/images/UI_icon-Double_arrow_right-RGB.svg +0 -1
- package/images/UI_icon-Folder-RGB.svg +0 -1
- package/images/UI_icon-Notebook-Images-RGB.svg +0 -9
- package/images/UI_icon-Server-RGB.svg +0 -1
- package/images/UI_icon-Server_upload-RGB.svg +0 -1
- package/images/UI_icon-Shared_workspace-RGB.svg +0 -8
- package/images/UI_icon-Storage-RGB.svg +0 -1
- package/images/UI_icon-User-RGB.svg +0 -1
- package/images/UI_icon-Wrench-RGB.svg +0 -1
- package/images/empty-state-cluster-storage.svg +0 -472
- package/images/empty-state-data-connections.svg +0 -299
- package/images/empty-state-model-registries.svg +0 -9
- package/images/empty-state-model-serving.svg +0 -249
- package/images/empty-state-notebooks.svg +0 -392
- package/images/empty-state-pipelines.svg +0 -393
- package/images/empty-state-project-overview.svg +0 -482
- package/images/empty-state-projects-color.svg +0 -275
- package/images/empty-state-storage-classes.svg +0 -56
- package/images/icons/AcceleratorProfileIcon.ts +0 -13
- package/images/icons/ArtifactIcon.ts +0 -13
- package/images/icons/BuildIcon.ts +0 -13
- package/images/icons/ClusterSettingsIcon.ts +0 -13
- package/images/icons/ConfigurationIcon.ts +0 -13
- package/images/icons/CreateAndTrainIcon.ts +0 -13
- package/images/icons/DataConnectionIcon.ts +0 -13
- package/images/icons/DeployedModelIcon.ts +0 -13
- package/images/icons/DistributedWorkloadIcon.ts +0 -13
- package/images/icons/EnabledApplicationsIcon.ts +0 -13
- package/images/icons/ExperimentIcon.ts +0 -13
- package/images/icons/ExploreApplicationsIcon.ts +0 -13
- package/images/icons/GroupIcon.ts +0 -13
- package/images/icons/ModelIcon.ts +0 -13
- package/images/icons/ModelRegistryIcon.ts +0 -13
- package/images/icons/ModelServerIcon.ts +0 -13
- package/images/icons/MultiModelIcon.ts +0 -13
- package/images/icons/NotebookIcon.ts +0 -13
- package/images/icons/NotebookImageIcon.ts +0 -13
- package/images/icons/PermissionsIcon.ts +0 -13
- package/images/icons/PipelineExecutionIcon.ts +0 -13
- package/images/icons/PipelineIcon.ts +0 -13
- package/images/icons/PipelineRunIcon.ts +0 -13
- package/images/icons/ProjectIcon.ts +0 -13
- package/images/icons/RegisteredModelIcon.ts +0 -13
- package/images/icons/ResourcesIcon.ts +0 -13
- package/images/icons/ServingRuntimeIcon.ts +0 -13
- package/images/icons/SingleModelIcon.ts +0 -13
- package/images/icons/StorageClassIcon.ts +0 -13
- package/images/icons/StorageIcon.ts +0 -13
- package/images/icons/UserIcon.ts +0 -13
- package/images/icons/index.ts +0 -31
- package/images/index.ts +0 -62
- package/images/logo-dark-theme.svg +0 -43
- package/images/logo-light-theme.svg +0 -43
- package/images/no-models-model-registry.svg +0 -180
- package/images/no-versions-model-registry.svg +0 -149
- package/style/MUI-theme.scss +0 -995
- package/style/index.ts +0 -6
package/README.md
CHANGED
|
@@ -1,292 +1,47 @@
|
|
|
1
|
-
#
|
|
1
|
+
# mod-arch-shared
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
`mod-arch-shared` is a shared library providing common UI components and utilities for micro-frontend projects following a modular architecture. This library follows a modular design to ensure reusability and maintainability across various projects. The library is versioned to facilitate consistent updates and integration.
|
|
3
|
+
Shared UI components and utilities for modular architecture micro-frontend projects.
|
|
6
4
|
|
|
7
5
|
## Installation
|
|
8
6
|
|
|
9
7
|
```bash
|
|
10
|
-
npm install mod-arch-shared
|
|
8
|
+
npm install mod-arch-shared sass sass-loader
|
|
11
9
|
```
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
- **MUI dependencies** (`@mui/material`, `@mui/icons-material`, `@mui/types`) are required for both PatternFly and MUI theme support
|
|
15
|
-
- **SASS dependencies** (`sass`, `sass-loader`) are required to process SCSS files used by the library components
|
|
16
|
-
|
|
17
|
-
### SASS/SCSS Processing Requirements
|
|
18
|
-
|
|
19
|
-
This library contains SCSS files that need to be processed by your application's build system. You must:
|
|
11
|
+
## Peer Dependencies
|
|
20
12
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
npm install sass sass-loader
|
|
24
|
-
```
|
|
13
|
+
- `react` (>=16.8.0)
|
|
14
|
+
- `react-dom` (>=16.8.0)
|
|
25
15
|
|
|
26
|
-
|
|
27
|
-
```js
|
|
28
|
-
{
|
|
29
|
-
test: /\.s[ac]ss$/i,
|
|
30
|
-
use: [
|
|
31
|
-
// Creates `style` nodes from JS strings
|
|
32
|
-
'style-loader',
|
|
33
|
-
// Translates CSS into CommonJS
|
|
34
|
-
'css-loader',
|
|
35
|
-
// Compiles Sass to CSS
|
|
36
|
-
'sass-loader',
|
|
37
|
-
],
|
|
38
|
-
}
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
If you're using Create React App, Vite, or similar build tools, SCSS support is typically included by default when you install the `sass` package.
|
|
16
|
+
Note: This package includes PatternFly components and requires SASS processing capabilities in your build system.
|
|
42
17
|
|
|
43
18
|
## Usage
|
|
44
19
|
|
|
45
|
-
Import components and utilities as needed:
|
|
46
|
-
|
|
47
|
-
```jsx
|
|
48
|
-
import { DashboardSearchField, useNamespaces, ToastNotification } from 'mod-arch-shared';
|
|
49
|
-
|
|
50
|
-
const MyComponent = () => {
|
|
51
|
-
const { namespaces, loading } = useNamespaces();
|
|
52
|
-
|
|
53
|
-
return (
|
|
54
|
-
<>
|
|
55
|
-
<DashboardSearchField onChange={handleSearch} />
|
|
56
|
-
{/* Your component code */}
|
|
57
|
-
<ToastNotification title="Success" type="success" message="Operation completed" />
|
|
58
|
-
</>
|
|
59
|
-
);
|
|
60
|
-
};
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## Using Styles and Images
|
|
64
|
-
|
|
65
|
-
This library exports both style files and image assets that can be imported and used in your application.
|
|
66
|
-
|
|
67
|
-
### Importing Styles
|
|
68
|
-
|
|
69
|
-
You can import specific styles or all styles at once:
|
|
70
|
-
|
|
71
|
-
```javascript
|
|
72
|
-
// Import all styles
|
|
73
|
-
import { style } from 'mod-arch-shared';
|
|
74
|
-
|
|
75
|
-
// Or import specific style components directly
|
|
76
|
-
import 'mod-arch-shared/style';
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
### Importing Images
|
|
80
|
-
|
|
81
|
-
Images can be imported in several ways:
|
|
82
|
-
|
|
83
|
-
```javascript
|
|
84
|
-
// Import specific images
|
|
85
|
-
import { emptyStateNotebooks, iconRedHatStorage } from 'mod-arch-shared/images';
|
|
86
|
-
|
|
87
|
-
// Or import all images as a namespace
|
|
88
|
-
import * as Images from 'mod-arch-shared/images';
|
|
89
|
-
|
|
90
|
-
// Then use them in your components
|
|
91
|
-
<img src={emptyStateNotebooks} alt="Empty state notebooks" />
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## Folder Structure
|
|
95
|
-
|
|
96
|
-
The repository contains the following modules:
|
|
97
|
-
|
|
98
|
-
- **api**: API utilities for making service calls and handling errors
|
|
99
|
-
- **components**: Reusable UI components
|
|
100
|
-
- **hooks**: Custom React hooks
|
|
101
|
-
- **utilities**: Utility functions
|
|
102
|
-
- **context**: Context providers
|
|
103
|
-
- **style**: Global styles
|
|
104
|
-
- **types**: TypeScript type definitions
|
|
105
|
-
|
|
106
|
-
## Provider Setup
|
|
107
|
-
|
|
108
|
-
The Modular Architecture library requires proper context setup to function correctly. The library provides two essential providers that must be configured at the root of your application:
|
|
109
|
-
|
|
110
|
-
### ModularArchContextProvider
|
|
111
|
-
|
|
112
|
-
The `ModularArchContextProvider` is **mandatory** for using this library. It provides essential configuration and state management for:
|
|
113
|
-
|
|
114
|
-
- **Deployment mode configuration** (Standalone, Federated, or Kubeflow)
|
|
115
|
-
- **Namespace management** and selection
|
|
116
|
-
- **API endpoint configuration**
|
|
117
|
-
- **Script loading state** for Kubeflow integration
|
|
118
|
-
- **Mandatory namespace enforcement** when required
|
|
119
|
-
|
|
120
|
-
### ThemeProvider
|
|
121
|
-
|
|
122
|
-
The `ThemeProvider` manages UI theming and supports:
|
|
123
|
-
|
|
124
|
-
- **PatternFly theme** (default)
|
|
125
|
-
- **Material-UI theme** with CSS variables support
|
|
126
|
-
- **Dynamic theme switching** at runtime
|
|
127
|
-
|
|
128
|
-
### Complete Setup Example
|
|
129
|
-
|
|
130
|
-
Here's how to properly set up your application root with both providers:
|
|
131
|
-
|
|
132
20
|
```typescript
|
|
133
|
-
import
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
BrowserStorageContextProvider,
|
|
140
|
-
NotificationContextProvider,
|
|
141
|
-
DeploymentMode,
|
|
142
|
-
Theme
|
|
21
|
+
import {
|
|
22
|
+
DashboardSearchField,
|
|
23
|
+
DashboardModalFooter,
|
|
24
|
+
SimpleSelect,
|
|
25
|
+
MarkdownView,
|
|
26
|
+
images
|
|
143
27
|
} from 'mod-arch-shared';
|
|
144
|
-
|
|
145
|
-
// Define your configuration
|
|
146
|
-
const modularArchConfig: ModularArchConfig = {
|
|
147
|
-
deploymentMode: DeploymentMode.Standalone, // or Federated, Kubeflow
|
|
148
|
-
URL_PREFIX: '/api',
|
|
149
|
-
BFF_API_VERSION: 'v1',
|
|
150
|
-
// Optional: Force a specific namespace
|
|
151
|
-
// mandatoryNamespace: 'production'
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
const container = document.getElementById('root');
|
|
155
|
-
const root = createRoot(container!);
|
|
156
|
-
|
|
157
|
-
root.render(
|
|
158
|
-
<React.StrictMode>
|
|
159
|
-
<Router>
|
|
160
|
-
<ModularArchContextProvider config={modularArchConfig}>
|
|
161
|
-
<ThemeProvider theme={Theme.Patternfly}>
|
|
162
|
-
<BrowserStorageContextProvider>
|
|
163
|
-
<NotificationContextProvider>
|
|
164
|
-
<App />
|
|
165
|
-
</NotificationContextProvider>
|
|
166
|
-
</BrowserStorageContextProvider>
|
|
167
|
-
</ThemeProvider>
|
|
168
|
-
</ModularArchContextProvider>
|
|
169
|
-
</Router>
|
|
170
|
-
</React.StrictMode>,
|
|
171
|
-
);
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
### Configuration Options
|
|
175
|
-
|
|
176
|
-
#### Deployment Modes
|
|
177
|
-
|
|
178
|
-
- **`DeploymentMode.Standalone`**: For single-application deployments
|
|
179
|
-
- **`DeploymentMode.Federated`**: For micro-frontend architectures
|
|
180
|
-
- **`DeploymentMode.Kubeflow`**: For integration with Kubeflow environments
|
|
181
|
-
|
|
182
|
-
#### Theme Options
|
|
183
|
-
|
|
184
|
-
- **`Theme.Patternfly`**: Red Hat PatternFly design system (default)
|
|
185
|
-
- **`Theme.MUI`**: Material-UI design system with CSS variables
|
|
186
|
-
|
|
187
|
-
Both themes require the MUI peer dependencies to be installed.
|
|
188
|
-
|
|
189
|
-
### Using the Context in Components
|
|
190
|
-
|
|
191
|
-
Once providers are set up, you can access the configuration and state throughout your application:
|
|
192
|
-
|
|
193
|
-
```typescript
|
|
194
|
-
import { useModularArchContext, useThemeContext } from 'mod-arch-shared';
|
|
195
|
-
|
|
196
|
-
const MyComponent = () => {
|
|
197
|
-
const {
|
|
198
|
-
config,
|
|
199
|
-
namespaces,
|
|
200
|
-
preferredNamespace,
|
|
201
|
-
updatePreferredNamespace
|
|
202
|
-
} = useModularArchContext();
|
|
203
|
-
|
|
204
|
-
const { theme } = useThemeContext();
|
|
205
|
-
|
|
206
|
-
return (
|
|
207
|
-
<div>
|
|
208
|
-
<p>Current deployment mode: {config.deploymentMode}</p>
|
|
209
|
-
<p>Available namespaces: {namespaces.length}</p>
|
|
210
|
-
<p>Current theme: {theme}</p>
|
|
211
|
-
</div>
|
|
212
|
-
);
|
|
213
|
-
};
|
|
214
28
|
```
|
|
215
29
|
|
|
216
|
-
##
|
|
217
|
-
|
|
218
|
-
### ModularArchConfig
|
|
219
|
-
|
|
220
|
-
The library supports various configuration options through the `ModularArchConfig` interface:
|
|
221
|
-
|
|
222
|
-
```typescript
|
|
223
|
-
interface ModularArchConfig {
|
|
224
|
-
deploymentMode: DeploymentMode;
|
|
225
|
-
URL_PREFIX: string;
|
|
226
|
-
BFF_API_VERSION: string;
|
|
227
|
-
mandatoryNamespace?: string; // Optional: Force a specific namespace
|
|
228
|
-
}
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
#### Mandatory Namespace
|
|
232
|
-
|
|
233
|
-
The `mandatoryNamespace` option allows you to enforce a specific namespace throughout the application:
|
|
234
|
-
|
|
235
|
-
```typescript
|
|
236
|
-
const config = {
|
|
237
|
-
deploymentMode: DeploymentMode.Standalone,
|
|
238
|
-
URL_PREFIX: '/api',
|
|
239
|
-
BFF_API_VERSION: 'v1',
|
|
240
|
-
mandatoryNamespace: 'production' // Force the use of 'production' namespace
|
|
241
|
-
};
|
|
242
|
-
```
|
|
30
|
+
## What's Included
|
|
243
31
|
|
|
244
|
-
|
|
32
|
+
- **Components**: Common UI components like search fields, modals, tables, and form elements
|
|
33
|
+
- **Utilities**: Shared utility functions for UI interactions
|
|
34
|
+
- **Images**: Common image assets and icons
|
|
35
|
+
- **Types**: Shared TypeScript type definitions
|
|
245
36
|
|
|
246
|
-
|
|
247
|
-
- All API calls will be restricted to the specified namespace
|
|
248
|
-
- Users cannot switch to different namespaces
|
|
249
|
-
- The `useNamespaces` hook will only return the mandatory namespace
|
|
37
|
+
## SASS/SCSS Requirements
|
|
250
38
|
|
|
251
|
-
This
|
|
252
|
-
|
|
253
|
-
## Development
|
|
254
|
-
|
|
255
|
-
### Prerequisites
|
|
256
|
-
|
|
257
|
-
- Node.js >= 20.17
|
|
258
|
-
- npm >= 10.8
|
|
259
|
-
|
|
260
|
-
### Setup
|
|
261
|
-
|
|
262
|
-
```bash
|
|
263
|
-
git clone <repository-url>
|
|
264
|
-
cd mod-arch-shared
|
|
265
|
-
npm install
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
### Building
|
|
269
|
-
|
|
270
|
-
```bash
|
|
271
|
-
npm run build
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
### Testing
|
|
275
|
-
|
|
276
|
-
```bash
|
|
277
|
-
npm test
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
### Linting
|
|
281
|
-
|
|
282
|
-
```bash
|
|
283
|
-
npm run lint
|
|
284
|
-
```
|
|
39
|
+
This package contains SCSS files that need to be processed by your build system. Most modern build tools (Create React App, Vite, etc.) support SASS out of the box when you install the `sass` package.
|
|
285
40
|
|
|
286
|
-
##
|
|
41
|
+
## Documentation
|
|
287
42
|
|
|
288
|
-
|
|
43
|
+
For detailed documentation, visit the [main repository](https://github.com/opendatahub-io/mod-arch-library).
|
|
289
44
|
|
|
290
45
|
## License
|
|
291
46
|
|
|
292
|
-
|
|
47
|
+
Apache-2.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jest.setup.d.ts","sourceRoot":"","sources":["../../../__tests__/unit/jest.setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jest.setup.d.ts","sourceRoot":"","sources":["../../../__tests__/unit/jest.setup.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AACnC,OAAO,gCAAgC,CAAC"}
|
|
@@ -1,48 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import '@testing-library/jest-dom';
|
|
2
2
|
import 'core-js/actual/array/to-sorted';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const tryExpect = (expectFn) => {
|
|
6
|
-
try {
|
|
7
|
-
expectFn();
|
|
8
|
-
}
|
|
9
|
-
catch (e) {
|
|
10
|
-
const { matcherResult } = e;
|
|
11
|
-
if (matcherResult) {
|
|
12
|
-
return { ...matcherResult, message: () => matcherResult.message };
|
|
13
|
-
}
|
|
14
|
-
throw e;
|
|
15
|
-
}
|
|
16
|
-
return {
|
|
17
|
-
pass: true,
|
|
18
|
-
message: () => '',
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
|
-
expect.extend({
|
|
22
|
-
// custom asymmetric matchers
|
|
23
|
-
/**
|
|
24
|
-
* Checks that a value is what you expect.
|
|
25
|
-
* It uses Object.is to check strict equality.
|
|
26
|
-
*
|
|
27
|
-
* Usage:
|
|
28
|
-
* expect.isIdentifyEqual(...)
|
|
29
|
-
*/
|
|
30
|
-
isIdentityEqual: (actual, expected) => ({
|
|
31
|
-
pass: Object.is(actual, expected),
|
|
32
|
-
message: () => `expected ${actual} to be identity equal to ${expected}`,
|
|
33
|
-
}),
|
|
34
|
-
// hook related custom matchers
|
|
35
|
-
hookToBe: (actual, expected) => tryExpect(() => expect(actual.result.current).toBe(expected)),
|
|
36
|
-
hookToStrictEqual: (actual, expected) => tryExpect(() => expect(actual.result.current).toStrictEqual(expected)),
|
|
37
|
-
hookToHaveUpdateCount: (actual, expected) => tryExpect(() => expect(actual.getUpdateCount()).toBe(expected)),
|
|
38
|
-
hookToBeStable: (actual, expected) => {
|
|
39
|
-
if (actual.getUpdateCount() <= 1) {
|
|
40
|
-
throw new Error('Cannot assert stability as the hook has not run at least 2 times.');
|
|
41
|
-
}
|
|
42
|
-
if (typeof expected === 'undefined') {
|
|
43
|
-
return tryExpect(() => expect(actual.result.current).toBe(actual.getPreviousResult()));
|
|
44
|
-
}
|
|
45
|
-
return tryExpect(() => expect(actual.result.current).toStrictEqual(createComparativeValue(actual.getPreviousResult(), expected)));
|
|
46
|
-
},
|
|
47
|
-
});
|
|
3
|
+
// Set up Jest environment for React component testing
|
|
4
|
+
// This file is referenced in jest.config.js setupFilesAfterEnv
|
|
48
5
|
//# sourceMappingURL=jest.setup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jest.setup.js","sourceRoot":"","sources":["../../../__tests__/unit/jest.setup.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"jest.setup.js","sourceRoot":"","sources":["../../../__tests__/unit/jest.setup.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AACnC,OAAO,gCAAgC,CAAC;AAExC,sDAAsD;AACtD,+DAA+D"}
|
|
@@ -10,6 +10,7 @@ interface EditableLabelsProps {
|
|
|
10
10
|
labelProps?: LabelProps;
|
|
11
11
|
overflowCount?: number;
|
|
12
12
|
isCollapsible?: boolean;
|
|
13
|
+
onEditingChange?: (editingState: boolean) => void;
|
|
13
14
|
}
|
|
14
15
|
export declare const EditableLabelsDescriptionListGroup: React.FC<EditableLabelsProps>;
|
|
15
16
|
export default EditableLabelsDescriptionListGroup;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditableLabelsDescriptionListGroup.d.ts","sourceRoot":"","sources":["../../components/EditableLabelsDescriptionListGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,EAA0C,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAI5F,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"EditableLabelsDescriptionListGroup.d.ts","sourceRoot":"","sources":["../../components/EditableLabelsDescriptionListGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,EAA0C,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAI5F,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;CACnD;AAED,eAAO,MAAM,kCAAkC,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAsP5E,CAAC;AAEF,eAAe,kCAAkC,CAAC"}
|
|
@@ -2,11 +2,15 @@ import React, { useState } from 'react';
|
|
|
2
2
|
import { Label, LabelGroup, Alert, AlertVariant } from '@patternfly/react-core';
|
|
3
3
|
import spacing from '@patternfly/react-styles/css/utilities/Spacing/spacing';
|
|
4
4
|
import DashboardDescriptionListGroup from '../components/DashboardDescriptionListGroup';
|
|
5
|
-
export const EditableLabelsDescriptionListGroup = ({ title = 'Labels', contentWhenEmpty = 'No labels', labels, onLabelsChange, isArchive, allExistingKeys, labelProps = {}, isCollapsible = true, overflowCount, }) => {
|
|
6
|
-
const [isEditing, setIsEditing] = useState(false);
|
|
5
|
+
export const EditableLabelsDescriptionListGroup = ({ title = 'Labels', contentWhenEmpty = 'No labels', labels, onLabelsChange, isArchive, allExistingKeys, labelProps = {}, isCollapsible = true, overflowCount, onEditingChange, }) => {
|
|
7
6
|
const [isSavingEdits, setIsSavingEdits] = useState(false);
|
|
8
7
|
const [hasSavedEdits, setHasSavedEdits] = useState(false);
|
|
9
8
|
const [unsavedLabels, setUnsavedLabels] = useState(labels);
|
|
9
|
+
const [isEditing, setIsEditing] = React.useState(false);
|
|
10
|
+
const handleEditingStateChange = (editingState) => {
|
|
11
|
+
setIsEditing(editingState);
|
|
12
|
+
onEditingChange?.(editingState);
|
|
13
|
+
};
|
|
10
14
|
const validateLabels = () => {
|
|
11
15
|
const errors = [];
|
|
12
16
|
const duplicatesMap = new Map();
|
|
@@ -90,10 +94,8 @@ export const EditableLabelsDescriptionListGroup = ({ title = 'Labels', contentWh
|
|
|
90
94
|
}
|
|
91
95
|
return false;
|
|
92
96
|
};
|
|
93
|
-
// Add a ref for the alert
|
|
94
|
-
const alertRef = React.useRef(null);
|
|
95
97
|
return (React.createElement(DashboardDescriptionListGroup, { editButtonTestId: "editable-labels-group-edit", saveButtonTestId: "editable-labels-group-save", title: title, isEmpty: labels.length === 0, contentWhenEmpty: contentWhenEmpty, isEditable: !isArchive, isEditing: isEditing, isSavingEdits: isSavingEdits, contentWhenEditing: React.createElement(React.Fragment, null,
|
|
96
|
-
React.createElement(LabelGroup, { "data-testid": "editable-label-group", isEditable: !isSavingEdits, numLabels: unsavedLabels.length, addLabelControl: !isSavingEdits ? (React.createElement(Label, { variant: "overflow", color: "blue", onClick: addNewLabel, "data-testid": "add-label-button" }, "Add label")) : undefined }, unsavedLabels.map((label, index) => (React.createElement(Label, { "data-testid": `editable-label-${label}`, key: label + index, isEditable: !isSavingEdits, onClose: () => removeUnsavedLabel(index), closeBtnProps: {
|
|
98
|
+
React.createElement(LabelGroup, { "data-testid": "editable-label-group", isEditable: !isSavingEdits, numLabels: unsavedLabels.length, addLabelControl: !isSavingEdits ? (React.createElement(Label, { variant: "overflow", color: "blue", onClick: addNewLabel, "data-testid": "add-label-button" }, "Add label")) : undefined, className: spacing.mbMd }, unsavedLabels.map((label, index) => (React.createElement(Label, { "data-testid": `editable-label-${label}`, key: label + index, isEditable: !isSavingEdits, onClose: () => removeUnsavedLabel(index), closeBtnProps: {
|
|
97
99
|
isDisabled: isSavingEdits,
|
|
98
100
|
'data-testid': `remove-label-${label}`,
|
|
99
101
|
}, onEditComplete: (event, newText) => handleEditComplete(event, newText, label), editableProps: {
|
|
@@ -101,12 +103,13 @@ export const EditableLabelsDescriptionListGroup = ({ title = 'Labels', contentWh
|
|
|
101
103
|
'aria-label': 'Edit label',
|
|
102
104
|
'data-testid': `edit-label-input-${label}`,
|
|
103
105
|
}, ...labelProps, color: hasDuplicate(label, index) ? 'red' : (labelProps.color ?? 'blue'), variant: hasDuplicate(label, index) ? 'filled' : labelProps.variant }, label)))),
|
|
104
|
-
labelErrors.length > 0 &&
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
labelErrors.length > 0 &&
|
|
107
|
+
labelErrors.map((error, index) => (React.createElement(Alert, { key: index, "data-testid": "label-error-alert", variant: AlertVariant.danger, isInline: true, title: error
|
|
108
|
+
.split('**')
|
|
109
|
+
.map((part, i) => (i % 2 === 0 ? part : React.createElement("strong", { key: i }, part))), "aria-live": "polite", isPlain: true, tabIndex: -1 }))),
|
|
110
|
+
onEditingChange && isEditing && (React.createElement(Alert, { "data-testid": "editing-labels-alert", variant: AlertVariant.info, isInline: true, title: "Changes affect all model versions", "aria-live": "polite", isPlain: true, tabIndex: -1 }))), onEditClick: () => {
|
|
108
111
|
setUnsavedLabels(labels);
|
|
109
|
-
|
|
112
|
+
handleEditingStateChange(true);
|
|
110
113
|
}, onSaveEditsClick: async () => {
|
|
111
114
|
if (labelErrors.length > 0) {
|
|
112
115
|
return;
|
|
@@ -118,11 +121,11 @@ export const EditableLabelsDescriptionListGroup = ({ title = 'Labels', contentWh
|
|
|
118
121
|
finally {
|
|
119
122
|
setHasSavedEdits(true);
|
|
120
123
|
setIsSavingEdits(false);
|
|
121
|
-
|
|
124
|
+
handleEditingStateChange(false);
|
|
122
125
|
}
|
|
123
126
|
}, onDiscardEditsClick: () => {
|
|
124
127
|
setUnsavedLabels(labels);
|
|
125
|
-
|
|
128
|
+
handleEditingStateChange(false);
|
|
126
129
|
} },
|
|
127
130
|
React.createElement(LabelGroup, { "data-testid": "display-label-group", defaultIsOpen: hasSavedEdits, key: String(hasSavedEdits), numLabels: isCollapsible ? overflowCount : labels.length }, labels.map((label) => (React.createElement(Label, { key: label, color: "blue", "data-testid": "label", ...labelProps }, label))))));
|
|
128
131
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditableLabelsDescriptionListGroup.js","sourceRoot":"","sources":["../../components/EditableLabelsDescriptionListGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAc,MAAM,wBAAwB,CAAC;AAC5F,OAAO,OAAO,MAAM,wDAAwD,CAAC;AAC7E,OAAO,6BAA6B,MAAM,4CAA4C,CAAC;
|
|
1
|
+
{"version":3,"file":"EditableLabelsDescriptionListGroup.js","sourceRoot":"","sources":["../../components/EditableLabelsDescriptionListGroup.tsx"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ type EditableTextDescriptionListGroupProps = Pick<DashboardDescriptionListGroupP
|
|
|
7
7
|
isArchive?: boolean;
|
|
8
8
|
editableVariant: 'TextInput' | 'TextArea';
|
|
9
9
|
truncateMaxLines?: number;
|
|
10
|
+
onEditingChange?: (editingState: boolean) => void;
|
|
10
11
|
};
|
|
11
12
|
declare const EditableTextDescriptionListGroup: React.FC<EditableTextDescriptionListGroupProps>;
|
|
12
13
|
export default EditableTextDescriptionListGroup;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditableTextDescriptionListGroup.d.ts","sourceRoot":"","sources":["../../components/EditableTextDescriptionListGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"EditableTextDescriptionListGroup.d.ts","sourceRoot":"","sources":["../../components/EditableTextDescriptionListGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAsC,EACpC,kCAAkC,EACnC,MAAM,4CAA4C,CAAC;AAGpD,KAAK,qCAAqC,GAAG,IAAI,CAC/C,kCAAkC,EAClC,OAAO,GAAG,kBAAkB,CAC7B,GAAG;IACF,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,WAAW,GAAG,UAAU,CAAC;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,QAAA,MAAM,gCAAgC,EAAE,KAAK,CAAC,EAAE,CAAC,qCAAqC,CAuGrF,CAAC;AAEF,eAAe,gCAAgC,CAAC"}
|
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { ExpandableSection, TextArea, TextInput } from '@patternfly/react-core';
|
|
2
|
+
import { Alert, AlertVariant, ExpandableSection, TextArea, TextInput, } from '@patternfly/react-core';
|
|
3
|
+
import spacing from '@patternfly/react-styles/css/utilities/Spacing/spacing';
|
|
3
4
|
import DashboardDescriptionListGroup from '../components/DashboardDescriptionListGroup';
|
|
4
5
|
import FormFieldset from '../components/FormFieldset';
|
|
5
|
-
const EditableTextDescriptionListGroup = ({ title, contentWhenEmpty, value, isArchive, saveEditedValue, baseTestId, editableVariant, truncateMaxLines = 12, }) => {
|
|
6
|
+
const EditableTextDescriptionListGroup = ({ title, contentWhenEmpty, value, isArchive, saveEditedValue, baseTestId, editableVariant, truncateMaxLines = 12, onEditingChange, }) => {
|
|
6
7
|
const [isEditing, setIsEditing] = React.useState(false);
|
|
7
8
|
const [unsavedValue, setUnsavedValue] = React.useState(value);
|
|
8
9
|
const [isSavingEdits, setIsSavingEdits] = React.useState(false);
|
|
9
10
|
const [isTextExpanded, setIsTextExpanded] = React.useState(false);
|
|
11
|
+
const handleEditingStateChange = (editingState) => {
|
|
12
|
+
setIsEditing(editingState);
|
|
13
|
+
onEditingChange?.(editingState);
|
|
14
|
+
};
|
|
10
15
|
const editableTextArea = editableVariant === 'TextInput' ? (React.createElement(TextInput, { autoFocus: true, "data-testid": baseTestId && `${baseTestId}-input`, "aria-label": `Text input for editing ${title}`, value: unsavedValue, onChange: (_event, v) => setUnsavedValue(v), isDisabled: isSavingEdits })) : (React.createElement(TextArea, { autoFocus: true, "data-testid": baseTestId && `${baseTestId}-input`, "aria-label": `Text box for editing ${title}`, value: unsavedValue, onChange: (_event, v) => setUnsavedValue(v), isDisabled: isSavingEdits, rows: 24, resizeOrientation: "vertical" }));
|
|
11
|
-
return (React.createElement(DashboardDescriptionListGroup, { title: title, isEmpty: !value, contentWhenEmpty: contentWhenEmpty, isEditable: !isArchive, isEditing: isEditing, isSavingEdits: isSavingEdits, groupTestId: baseTestId && `${baseTestId}-group`, editButtonTestId: baseTestId && `${baseTestId}-edit`, saveButtonTestId: baseTestId && `${baseTestId}-save`, cancelButtonTestId: baseTestId && `${baseTestId}-cancel`, contentWhenEditing: React.createElement(
|
|
16
|
+
return (React.createElement(DashboardDescriptionListGroup, { title: title, isEmpty: !value, contentWhenEmpty: contentWhenEmpty, isEditable: !isArchive, isEditing: isEditing, isSavingEdits: isSavingEdits, groupTestId: baseTestId && `${baseTestId}-group`, editButtonTestId: baseTestId && `${baseTestId}-edit`, saveButtonTestId: baseTestId && `${baseTestId}-save`, cancelButtonTestId: baseTestId && `${baseTestId}-cancel`, contentWhenEditing: React.createElement(React.Fragment, null,
|
|
17
|
+
React.createElement(FormFieldset, { component: editableTextArea }),
|
|
18
|
+
onEditingChange && isEditing && (React.createElement(Alert, { "data-testid": "editing-description-alert", className: spacing.mtMd, variant: AlertVariant.info, isInline: true, title: "Changes affect all model versions", "aria-live": "polite", isPlain: true, tabIndex: -1 }))), onEditClick: () => {
|
|
12
19
|
setUnsavedValue(value);
|
|
13
|
-
|
|
20
|
+
handleEditingStateChange(true);
|
|
14
21
|
}, onSaveEditsClick: async () => {
|
|
15
22
|
setIsSavingEdits(true);
|
|
16
23
|
try {
|
|
@@ -19,10 +26,10 @@ const EditableTextDescriptionListGroup = ({ title, contentWhenEmpty, value, isAr
|
|
|
19
26
|
finally {
|
|
20
27
|
setIsSavingEdits(false);
|
|
21
28
|
}
|
|
22
|
-
|
|
29
|
+
handleEditingStateChange(false);
|
|
23
30
|
}, onDiscardEditsClick: () => {
|
|
24
31
|
setUnsavedValue(value);
|
|
25
|
-
|
|
32
|
+
handleEditingStateChange(false);
|
|
26
33
|
} },
|
|
27
34
|
React.createElement(ExpandableSection, { "data-testid": baseTestId, variant: "truncate", truncateMaxLines: truncateMaxLines, toggleText: isTextExpanded ? 'Show less' : 'Show more', onToggle: (_event, isExpanded) => setIsTextExpanded(isExpanded), isExpanded: isTextExpanded }, value)));
|
|
28
35
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditableTextDescriptionListGroup.js","sourceRoot":"","sources":["../../components/EditableTextDescriptionListGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,
|
|
1
|
+
{"version":3,"file":"EditableTextDescriptionListGroup.js","sourceRoot":"","sources":["../../components/EditableTextDescriptionListGroup.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WhosMyAdministrator.d.ts","sourceRoot":"","sources":["../../components/WhosMyAdministrator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAmB,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"WhosMyAdministrator.d.ts","sourceRoot":"","sources":["../../components/WhosMyAdministrator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAmB,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI1E,KAAK,KAAK,GAAG;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,CAAC;AAEF,QAAA,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAqCxC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -2,8 +2,11 @@ import * as React from 'react';
|
|
|
2
2
|
import { Button, Popover, PopoverPosition } from '@patternfly/react-core';
|
|
3
3
|
import { OutlinedQuestionCircleIcon } from '@patternfly/react-icons';
|
|
4
4
|
import PopoverListContent from '../components/PopoverListContent';
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
const WhosMyAdministrator = ({ buttonLabel = "Who's my administrator?", headerContent, leadText, isInline, contentTestId, linkTestId, popoverPosition = PopoverPosition.bottom, }) => (React.createElement(Popover, { showClose: true, position: popoverPosition, headerContent: headerContent || 'Your administrator might be:', hasAutoWidth: true, maxWidth: "370px", bodyContent: React.createElement(PopoverListContent, { "data-testid": contentTestId, leadText: leadText, listHeading: headerContent ? 'Your administrator might be:' : undefined, listItems: [
|
|
6
|
+
'The person who gave you your username, or who helped you to log in for the first time',
|
|
7
|
+
'Someone in your IT department or help desk',
|
|
8
|
+
'A project manager or developer',
|
|
9
|
+
] }) },
|
|
7
10
|
React.createElement(Button, { isInline: isInline, variant: "link", icon: React.createElement(OutlinedQuestionCircleIcon, null), "data-testid": linkTestId }, buttonLabel)));
|
|
8
11
|
export default WhosMyAdministrator;
|
|
9
12
|
//# sourceMappingURL=WhosMyAdministrator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WhosMyAdministrator.js","sourceRoot":"","sources":["../../components/WhosMyAdministrator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,kBAAkB,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"WhosMyAdministrator.js","sourceRoot":"","sources":["../../components/WhosMyAdministrator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,kBAAkB,MAAM,iCAAiC,CAAC;AAYjE,MAAM,mBAAmB,GAAoB,CAAC,EAC5C,WAAW,GAAG,yBAAyB,EACvC,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,UAAU,EACV,eAAe,GAAG,eAAe,CAAC,MAAM,GACzC,EAAE,EAAE,CAAC,CACJ,oBAAC,OAAO,IACN,SAAS,QACT,QAAQ,EAAE,eAAe,EACzB,aAAa,EAAE,aAAa,IAAI,8BAA8B,EAC9D,YAAY,QACZ,QAAQ,EAAC,OAAO,EAChB,WAAW,EACT,oBAAC,kBAAkB,mBACJ,aAAa,EAC1B,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,SAAS,EACvE,SAAS,EAAE;YACT,uFAAuF;YACvF,4CAA4C;YAC5C,gCAAgC;SACjC,GACD;IAGJ,oBAAC,MAAM,IACL,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAC,MAAM,EACd,IAAI,EAAE,oBAAC,0BAA0B,OAAG,iBACvB,UAAU,IAEtB,WAAW,CACL,CACD,CACX,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -12,17 +12,12 @@ export { default as FormFieldset } from './FormFieldset';
|
|
|
12
12
|
export { default as InlineTruncatedClipboardCopy } from './InlineTruncatedClipboardCopy';
|
|
13
13
|
export { default as KubeflowDocs } from './KubeflowDocs';
|
|
14
14
|
export { default as MarkdownView } from './MarkdownView';
|
|
15
|
-
export { default as NavBar } from './NavBar';
|
|
16
|
-
export { default as NavSidebar } from './NavSidebar';
|
|
17
15
|
export { default as PopoverListContent } from './PopoverListContent';
|
|
18
16
|
export { default as ResourceNameTooltip } from './ResourceNameTooltip';
|
|
19
17
|
export { default as SimpleSelect } from './SimpleSelect';
|
|
20
|
-
export { default as ToastNotification } from './ToastNotification';
|
|
21
|
-
export { default as ToastNotifications } from './ToastNotifications';
|
|
22
18
|
export { default as TruncatedText } from './TruncatedText';
|
|
23
19
|
export { default as TypeaheadSelect } from './TypeaheadSelect';
|
|
24
20
|
export { default as WhosMyAdministrator } from './WhosMyAdministrator';
|
|
25
|
-
export * from './browserStorage';
|
|
26
21
|
export * from './dashboard';
|
|
27
22
|
export * from './design';
|
|
28
23
|
export * from './notFound';
|