1
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
1
2
import { useTranslation } from 'react-i18next' ;
2
- import { useParams } from 'react-router-dom' ;
3
- import { PageActions , PageHeader , PageLayout , PageTab , PageTabs } from '../../../framework' ;
4
- import { PageDetailsFromColumns } from '../../../framework/PageDetails/PageDetailsFromColumns' ;
3
+ import { useParams , useNavigate } from 'react-router-dom' ;
4
+ import {
5
+ PageActions ,
6
+ PageHeader ,
7
+ PageTable ,
8
+ PageLayout ,
9
+ PageTab ,
10
+ PageTabs ,
11
+ } from '../../../framework' ;
12
+ import { PageDetailsFromColumns } from '../../../framework' ;
5
13
import { RouteObj } from '../../Routes' ;
6
14
import { useGet } from '../../common/crud/useGet' ;
7
15
import { HubItemsResponse } from '../useHubView' ;
8
16
import { HubNamespace } from './HubNamespace' ;
17
+ import { useHubView } from '../useHubView' ;
9
18
import { useHubNamespaceActions } from './hooks/useHubNamespaceActions' ;
10
19
import { useHubNamespacesColumns } from './hooks/useHubNamespacesColumns' ;
20
+ import { useCollectionFilters } from '../collections/hooks/useCollectionFilters' ;
21
+ import { useCollectionsActions } from '../collections/hooks/useCollectionsActions' ;
22
+ import { useCollectionColumns } from '../collections/hooks/useCollectionColumns' ;
23
+ import { useCollectionActions } from '../collections/hooks/useCollectionActions' ;
24
+ import { Collection } from '../collections/Collection' ;
25
+ import { idKeyFn , hubAPI } from '../api' ;
26
+
11
27
import { DropdownPosition } from '@patternfly/react-core' ;
12
- import { hubAPI } from '../api' ;
13
28
14
29
export function NamespaceDetails ( ) {
15
30
const { t } = useTranslation ( ) ;
16
31
const params = useParams < { id : string } > ( ) ;
17
32
const { data } = useGet < HubItemsResponse < HubNamespace > > (
18
- hubAPI `/_ui/v1 /namespaces/?limit=1&name=${ params . id ?? '' } `
33
+ `/api/automation-hub/pulp/api/v3/pulp_ansible /namespaces/?limit=1&name=${ params . id ?? '' } `
19
34
) ;
20
35
let namespace : HubNamespace | undefined = undefined ;
21
- if ( data && data . data && data . data . length > 0 ) {
22
- namespace = data . data [ 0 ] ;
36
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
37
+ // @ts -ignore
38
+ if ( data && data . results && data . count > 0 ) {
39
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
40
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
41
+ // @ts -ignore
42
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
43
+ namespace = data . results [ 0 ] ;
23
44
}
24
45
25
46
const pageActions = useHubNamespaceActions ( ) ;
26
47
return (
27
48
< PageLayout >
28
49
< PageHeader
29
50
title = { namespace ?. name }
30
- breadcrumbs = { [
31
- { label : t ( 'Namespaces' ) , to : RouteObj . Namespaces } ,
32
- { label : namespace ?. name } ,
33
- ] }
51
+ breadcrumbs = { [ { label : t ( 'Namespaces' ) , to : RouteObj . Namespaces } , { label : params . id } ] }
34
52
headerActions = {
35
53
< PageActions < HubNamespace >
36
54
actions = { pageActions }
@@ -40,8 +58,11 @@ export function NamespaceDetails() {
40
58
}
41
59
/>
42
60
< PageTabs >
43
- < PageTab label = { t ( 'Details' ) } >
44
- < NamespaceDetailsTab namespace = { namespace } />
61
+ < PageTab label = { t ( 'Collections' ) } >
62
+ < CollectionsTab namespace = { namespace } />
63
+ </ PageTab >
64
+ < PageTab label = { t ( 'Namespace Details' ) } >
65
+ < NamespaceDetailsTab />
45
66
</ PageTab >
46
67
</ PageTabs >
47
68
</ PageLayout >
@@ -53,3 +74,40 @@ function NamespaceDetailsTab(props: { namespace?: HubNamespace }) {
53
74
const tableColumns = useHubNamespacesColumns ( ) ;
54
75
return < PageDetailsFromColumns item = { namespace } columns = { tableColumns } /> ;
55
76
}
77
+
78
+ function CollectionsTab ( props : { namespace ?: HubNamespace } ) {
79
+ const { t } = useTranslation ( ) ;
80
+ const toolbarFilters = useCollectionFilters ( ) ;
81
+ const tableColumns = useCollectionColumns ( ) ;
82
+ const view = useHubView < Collection > ( {
83
+ url : hubAPI `/_ui/v1/repo/published/` ,
84
+ keyFn : idKeyFn ,
85
+ toolbarFilters,
86
+ tableColumns,
87
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
88
+ // @ts -ignore
89
+ queryParams : { namespace : props ?. namespace ?. name } ,
90
+ } ) ;
91
+ const toolbarActions = useCollectionsActions ( view . unselectItemsAndRefresh ) ;
92
+ const rowActions = useCollectionActions ( view . unselectItemsAndRefresh ) ;
93
+ const navigate = useNavigate ( ) ;
94
+
95
+ return (
96
+ < PageLayout >
97
+ < PageTable < Collection >
98
+ toolbarFilters = { toolbarFilters }
99
+ toolbarActions = { toolbarActions }
100
+ tableColumns = { tableColumns }
101
+ rowActions = { rowActions }
102
+ errorStateTitle = { t ( 'Error loading collections' ) }
103
+ emptyStateTitle = { t ( 'No collections yet' ) }
104
+ emptyStateDescription = { t ( 'To get started, upload a collection.' ) }
105
+ emptyStateButtonText = { t ( 'Upload collection' ) }
106
+ emptyStateButtonClick = { ( ) => navigate ( RouteObj . UploadCollection ) }
107
+ { ...view }
108
+ defaultTableView = "list"
109
+ defaultSubtitle = { t ( 'Collection' ) }
110
+ />
111
+ </ PageLayout >
112
+ ) ;
113
+ }
0 commit comments