@@ -32,33 +32,84 @@ import {
3232 Row ,
3333} from "reactstrap" ;
3434
35- import MembershipGuard from "../../ProjectPageV2/utils/MembershipGuard " ;
35+ import ClampedParagraph from "../../../components/clamped/ClampedParagraph " ;
3636import { Loader } from "../../../components/Loader" ;
3737import Pagination from "../../../components/Pagination" ;
3838import { TimeCaption } from "../../../components/TimeCaption" ;
3939import { RtkOrNotebooksError } from "../../../components/errors/RtkErrorAlert" ;
40+ import MembershipGuard from "../../ProjectPageV2/utils/MembershipGuard" ;
41+ import type { NamespaceKind } from "../../projectsV2/api/namespace.api" ;
4042import type { DataConnector } from "../../projectsV2/api/data-connectors.api" ;
4143import {
4244 useGetDataConnectorsQuery ,
4345 useGetGroupsByGroupSlugMembersQuery ,
4446 type GetDataConnectorsApiResponse ,
4547} from "../../projectsV2/api/projectV2.enhanced-api" ;
46- import ClampedParagraph from "../../../components/clamped/ClampedParagraph " ;
48+ import { useGetUserQuery } from "../../user/dataServicesUser.api " ;
4749
4850import DataConnectorModal from "./DataConnectorModal" ;
4951import DataConnectorView from "./DataConnectorView" ;
5052
5153const DEFAULT_PER_PAGE = 12 ;
5254const DEFAULT_PAGE_PARAM = "page" ;
5355
56+ function AddButtonForGroupNamespace ( {
57+ namespace,
58+ toggleOpen,
59+ } : Pick < DataConnectorBoxHeaderProps , "namespace" | "toggleOpen" > ) {
60+ const { data : members } = useGetGroupsByGroupSlugMembersQuery ( {
61+ groupSlug : namespace ,
62+ } ) ;
63+ return (
64+ < MembershipGuard
65+ disabled = { null }
66+ enabled = {
67+ < Button
68+ data-cy = "add-data-connector"
69+ color = "outline-primary"
70+ onClick = { toggleOpen }
71+ size = "sm"
72+ >
73+ < PlusLg className = "icon-text" />
74+ </ Button >
75+ }
76+ members = { members }
77+ minimumRole = "editor"
78+ />
79+ ) ;
80+ }
81+
82+ function AddButtonForUserNamespace ( {
83+ namespace,
84+ toggleOpen,
85+ } : Pick < DataConnectorBoxHeaderProps , "namespace" | "toggleOpen" > ) {
86+ const { data : currentUser } = useGetUserQuery ( ) ;
87+
88+ if ( currentUser ?. username === namespace ) {
89+ return (
90+ < Button
91+ data-cy = "add-data-connector"
92+ color = "outline-primary"
93+ onClick = { toggleOpen }
94+ size = "sm"
95+ >
96+ < PlusLg className = "icon-text" />
97+ </ Button >
98+ ) ;
99+ }
100+ return null ;
101+ }
102+
54103interface DataConnectorListDisplayProps {
55- namespace ?: string ;
104+ namespace : string ;
105+ namespaceKind : NamespaceKind ;
56106 pageParam ?: string ;
57107 perPage ?: number ;
58108}
59109
60110export default function DataConnectorsBox ( {
61111 namespace : ns ,
112+ namespaceKind,
62113 pageParam : pageParam_ ,
63114 perPage : perPage_ ,
64115} : DataConnectorListDisplayProps ) {
@@ -133,6 +184,7 @@ export default function DataConnectorsBox({
133184 < DataConnectorBoxContent
134185 data = { data }
135186 namespace = { ns ?? "" }
187+ namespaceKind = { namespaceKind }
136188 onPageChange = { onPageChange }
137189 perPage = { perPage }
138190 />
@@ -142,12 +194,14 @@ export default function DataConnectorsBox({
142194interface DataConnectorBoxContentProps {
143195 data : GetDataConnectorsApiResponse ;
144196 namespace : string ;
197+ namespaceKind : NamespaceKind ;
145198 onPageChange : ( pageNumber : number ) => void ;
146199 perPage : number ;
147200}
148201function DataConnectorBoxContent ( {
149202 data,
150203 namespace,
204+ namespaceKind,
151205 onPageChange,
152206 perPage,
153207} : DataConnectorBoxContentProps ) {
@@ -161,6 +215,7 @@ function DataConnectorBoxContent({
161215 < DataConnectorBoxHeader
162216 toggleOpen = { toggleOpen }
163217 namespace = { namespace }
218+ namespaceKind = { namespaceKind }
164219 totalConnectors = { data . total }
165220 />
166221 < CardBody >
@@ -200,17 +255,16 @@ function DataConnectorBoxContent({
200255interface DataConnectorBoxHeaderProps {
201256 toggleOpen : ( ) => void ;
202257 namespace : string ;
258+ namespaceKind : NamespaceKind ;
203259 totalConnectors : number ;
204260}
205261
206262function DataConnectorBoxHeader ( {
207263 toggleOpen,
208264 namespace,
265+ namespaceKind,
209266 totalConnectors,
210267} : DataConnectorBoxHeaderProps ) {
211- const { data : members } = useGetGroupsByGroupSlugMembersQuery ( {
212- groupSlug : namespace ,
213- } ) ;
214268 return (
215269 < CardHeader >
216270 < div
@@ -228,21 +282,17 @@ function DataConnectorBoxHeader({
228282 < Badge > { totalConnectors } </ Badge >
229283 </ div >
230284 < div className = "my-auto" >
231- < MembershipGuard
232- disabled = { null }
233- enabled = {
234- < Button
235- data-cy = "add-data-connector"
236- color = "outline-primary"
237- onClick = { toggleOpen }
238- size = "sm"
239- >
240- < PlusLg className = "icon-text" />
241- </ Button >
242- }
243- members = { members }
244- minimumRole = "editor"
245- />
285+ { namespaceKind === "group" ? (
286+ < AddButtonForGroupNamespace
287+ namespace = { namespace }
288+ toggleOpen = { toggleOpen }
289+ />
290+ ) : (
291+ < AddButtonForUserNamespace
292+ namespace = { namespace }
293+ toggleOpen = { toggleOpen }
294+ />
295+ ) }
246296 </ div >
247297 </ div >
248298 </ CardHeader >
0 commit comments