Skip to content

Commit 76d4fed

Browse files
authored
feat: add organization list tab to account page (#6197)
* feat: add organization list tab to account page * chore: conform components to new org-allowance data shape * chore: add link to checkout page * chore: fix formatting nits * chore: adjust types and component names in response to code review * chore: reorder imports * chore: make display of account/org tab conditional
1 parent 7f227d6 commit 76d4fed

File tree

56 files changed

+834
-115
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+834
-115
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
"cy": "CYPRESS_dexUrl=https://$INGRESS_HOST:$PORT_HTTPS CYPRESS_baseUrl=http://localhost:9999 cypress open",
5353
"cy:dev": "source ../monitor-ci/.env && CYPRESS_dexUrl=CLOUD CYPRESS_baseUrl=https://$INGRESS_HOST:$PORT_HTTPS cypress open --config testFiles='{cloud,shared}/**/*.*'",
5454
"cy:dev-oss": "source ../monitor-ci/.env && CYPRESS_dexUrl=OSS CYPRESS_baseUrl=https://$INGRESS_HOST:$PORT_HTTPS cypress open --config testFiles='{oss,shared}/**/*.*'",
55-
"generate": "export SHA=b561645e05716036f071a43df0bf2a81ad32be90 && export REMOTE=https://raw.githubusercontent.com/influxdata/openapi/${SHA}/ && yarn generate-meta",
55+
"generate": "export SHA=1378c4d5bf380e7f33de3381fa4c8c45b6734e58 && export REMOTE=https://raw.githubusercontent.com/influxdata/openapi/${SHA}/ && yarn generate-meta",
5656
"generate-local": "export REMOTE=../openapi/ && yarn generate-meta",
5757
"generate-local-cloud": "export REMOTE=../openapi/ && yarn generate-meta-cloud",
5858
"generate-meta": "if [ -z \"${CLOUD_URL}\" ]; then yarn generate-meta-oss; else yarn generate-meta-cloud; fi",

src/accounts/AccountPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ const AccountAboutPage: FC = () => {
105105
const showDeactivateAccountSection = isFlagEnabled('freeAccountCancellation')
106106

107107
return (
108-
<AccountTabContainer activeTab="about">
108+
<AccountTabContainer activeTab="settings">
109109
<>
110110
<h4
111111
data-testid="account-settings--header"
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.account-page--tab-contents {
2+
padding-top: 0px !important;
3+
}

src/accounts/AccountTabContainer.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ import {Tabs, Orientation, Page} from '@influxdata/clockface'
99
// Decorators
1010
import {ErrorHandling} from 'src/shared/decorators/errors'
1111

12+
// Style
13+
import './AccountTabContainer.scss'
14+
1215
interface Props {
1316
activeTab: string
1417
}
@@ -22,7 +25,9 @@ class AccountTabContainer extends PureComponent<Props> {
2225
<Page.Contents fullWidth={true} scrollable={true}>
2326
<Tabs.Container orientation={Orientation.Horizontal}>
2427
<AccountTabs activeTab={activeTab} />
25-
<Tabs.TabContents>{children}</Tabs.TabContents>
28+
<Tabs.TabContents className="account-page--tab-contents">
29+
{children}
30+
</Tabs.TabContents>
2631
</Tabs.Container>
2732
</Page.Contents>
2833
)

src/accounts/AccountTabs.tsx

Lines changed: 37 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,74 @@
11
// Libraries
22
import React, {FC} from 'react'
3-
import {useSelector} from 'react-redux'
43
import {Link} from 'react-router-dom'
4+
import {useSelector} from 'react-redux'
55

66
// Components
7-
import {Tabs, Orientation, ComponentSize} from '@influxdata/clockface'
7+
import {ComponentSize, Orientation, Tabs} from '@influxdata/clockface'
88

99
// Utils
1010
import {getOrg} from 'src/organizations/selectors'
11+
import {isFlagEnabled} from 'src/shared/utils/featureFlag'
1112

1213
interface Props {
1314
activeTab: string
1415
}
1516

1617
interface AccountPageTab {
17-
text: string
1818
id: string
19+
enabled: boolean
1920
link: string
2021
testID: string
21-
}
22-
23-
enum Tab {
24-
Billing = 'billing',
25-
About = 'about',
22+
text: string
2623
}
2724

2825
const AccountTabs: FC<Props> = ({activeTab}) => {
2926
const orgID = useSelector(getOrg)?.id
3027

3128
const tabs: AccountPageTab[] = [
3229
{
33-
text: 'Settings',
34-
id: Tab.About,
35-
testID: 'accounts-setting-tab',
30+
id: 'settings',
3631
link: `/orgs/${orgID}/accounts/settings`,
32+
enabled: true,
33+
testID: 'accounts-setting-tab',
34+
text: 'Settings',
3735
},
3836
{
39-
text: 'Billing',
40-
id: Tab.Billing,
41-
testID: 'accounts-billing-tab',
37+
id: 'organizations',
38+
enabled: isFlagEnabled('createDeleteOrgs'),
39+
link: `/orgs/${orgID}/accounts/orglist`,
40+
testID: 'accounts-orglist-tab',
41+
text: 'Organizations',
42+
},
43+
{
44+
id: 'billing',
45+
enabled: true,
4246
link: `/orgs/${orgID}/billing`,
47+
testID: 'accounts-billing-tab',
48+
text: 'Billing',
4349
},
4450
]
4551

4652
return (
4753
<Tabs orientation={Orientation.Horizontal} size={ComponentSize.Large}>
48-
{tabs.map(tabInfo => {
49-
const isActive = tabInfo.id === activeTab
54+
{tabs
55+
.filter(tab => tab.enabled)
56+
.map(tab => {
57+
const isActive = tab.id === activeTab
5058

51-
return (
52-
<Tabs.Tab
53-
key={tabInfo.id}
54-
text={tabInfo.text}
55-
id={tabInfo.id}
56-
linkElement={className => (
57-
<Link to={tabInfo.link} className={className} />
58-
)}
59-
testID={tabInfo.testID}
60-
active={isActive}
61-
/>
62-
)
63-
})}
59+
return (
60+
<Tabs.Tab
61+
key={tab.id}
62+
text={tab.text}
63+
id={tab.id}
64+
linkElement={className => (
65+
<Link to={tab.link} className={className} />
66+
)}
67+
testID={tab.testID}
68+
active={isActive}
69+
/>
70+
)
71+
})}
6472
</Tabs>
6573
)
6674
}

src/annotations/components/AnnotationsTab.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ import {
1010
Grid,
1111
Sort,
1212
} from '@influxdata/clockface'
13-
import SearchWidget from 'src/shared/components/search_widget/SearchWidget'
13+
import {SearchWidget} from 'src/shared/components/search_widget/SearchWidget'
1414
import TabbedPageHeader from 'src/shared/components/tabbed_page/TabbedPageHeader'
15-
import Filter from 'src/shared/components/FilterList'
15+
import {FilterListContainer} from 'src/shared/components/FilterList'
1616
import GetResources from 'src/resources/components/GetResources'
1717

1818
import {AnnotationsList} from 'src/annotations/components/AnnotationsList'
@@ -28,7 +28,7 @@ import {SortTypes} from 'src/shared/utils/sort'
2828
// Thunks
2929
import {fetchAndSetAnnotationStreams} from 'src/annotations/actions/thunks'
3030

31-
const FilterList = Filter<AnnotationStream>()
31+
const FilterList = FilterListContainer<AnnotationStream>()
3232

3333
interface AnnotationsTabEmptyStateProps {
3434
searchTerm?: string

src/authorizations/components/CustomApiTokenOverlay.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import {
2525
ComponentStatus,
2626
} from '@influxdata/clockface'
2727
import ResourceAccordion from 'src/authorizations/components/ResourceAccordion'
28-
import SearchWidget from 'src/shared/components/search_widget/SearchWidget'
28+
import {SearchWidget} from 'src/shared/components/search_widget/SearchWidget'
2929

3030
// Contexts
3131
import {OverlayContext} from 'src/overlays/components/OverlayController'

src/authorizations/components/EditResourceAccordion.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {ResourceAccordionHeader} from 'src/authorizations/components/ResourceAcc
88
import {IndividualAccordionBody} from 'src/authorizations/components/IndividualAccordionBody'
99
import {AllAccordionBody} from './AllAccordionBody'
1010
import {formatResources} from 'src/authorizations/utils/permissions'
11-
import FilterList from 'src/shared/components/FilterList'
11+
import {FilterListContainer} from 'src/shared/components/FilterList'
1212

1313
// Types
1414
import {Resource} from 'src/client'
@@ -17,7 +17,7 @@ interface Props {
1717
searchTerm: string
1818
}
1919

20-
const Filter = FilterList<Resource>()
20+
const Filter = FilterListContainer<Resource>()
2121
export class EditResourceAccordion extends Component<Props> {
2222
public render() {
2323
const {permissions} = this.props

src/authorizations/components/EditTokenOverlay.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import {
1919
ComponentStatus,
2020
} from '@influxdata/clockface'
2121
import {EditResourceAccordion} from 'src/authorizations/components/EditResourceAccordion'
22-
import SearchWidget from 'src/shared/components/search_widget/SearchWidget'
22+
import {SearchWidget} from 'src/shared/components/search_widget/SearchWidget'
2323

2424
// Types
2525
import {Authorization, ResourceType} from 'src/types'

src/authorizations/components/ResourceAccordion.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {Accordion, DapperScrollbars} from '@influxdata/clockface'
1010
import {ResourceAccordionHeader} from 'src/authorizations/components/ResourceAccordionHeader'
1111
import {AllAccordionBody} from 'src/authorizations/components/AllAccordionBody'
1212
import {IndividualAccordionBody} from 'src/authorizations/components/IndividualAccordionBody'
13-
import FilterList from 'src/shared/components/FilterList'
13+
import {FilterListContainer} from 'src/shared/components/FilterList'
1414

1515
// Types
1616
import {Resource} from 'src/client'
@@ -27,7 +27,7 @@ interface OwnProps {
2727
searchTerm: string
2828
}
2929

30-
const Filter = FilterList<Resource>()
30+
const Filter = FilterListContainer<Resource>()
3131

3232
class ResourceAccordion extends Component<OwnProps> {
3333
public render() {

0 commit comments

Comments
 (0)