Skip to content

Commit c1865d4

Browse files
authored
feat: add filter to EditTokenOverlay (#3328)
1 parent 4126e18 commit c1865d4

File tree

2 files changed

+82
-26
lines changed

2 files changed

+82
-26
lines changed

src/authorizations/components/redesigned/EditResourceAccordion.tsx

Lines changed: 70 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,16 @@ import {ResourceAccordionHeader} from 'src/authorizations/components/redesigned/
88
import {IndividualAccordionBody} from 'src/authorizations/components/redesigned/IndividualAccordionBody'
99
import {AllAccordionBody} from './AllAccordionBody'
1010
import {formatResources} from 'src/authorizations/utils/permissions'
11+
import FilterList from 'src/shared/components/FilterList'
1112

13+
// Types
14+
import {Resource} from 'src/client'
1215
interface Props {
1316
permissions: any
17+
searchTerm: string
1418
}
1519

20+
const Filter = FilterList<Resource>()
1621
export class EditResourceAccordion extends Component<Props> {
1722
public render() {
1823
const {permissions} = this.props
@@ -48,44 +53,83 @@ export class EditResourceAccordion extends Component<Props> {
4853
{!isEmpty(allResourceNames[1]) && (
4954
<Accordion key="Other Resources" expanded={true}>
5055
<ResourceAccordionHeader resourceName="Other Resources" />
51-
{allResourceNames[1].map(resource => {
52-
const resourceName =
53-
resource.charAt(0).toUpperCase() + resource.slice(1)
54-
55-
return (
56-
<AllAccordionBody
57-
key={resource}
58-
resourceName={resourceName}
59-
permissions={permissions[resource]}
60-
disabled={true}
61-
/>
62-
)
63-
})}
56+
{this.getOtherResourceAccordionBody(allResourceNames)}
6457
</Accordion>
6558
)}
6659
</>
6760
)
6861
}
6962

63+
getOtherResourceAccordionBody = allResourceNames => {
64+
const {permissions, searchTerm} = this.props
65+
const resourcePermissions = []
66+
allResourceNames[1].forEach(resource => {
67+
resourcePermissions.push({name: resource, perm: permissions[resource]})
68+
})
69+
return (
70+
<Filter
71+
list={resourcePermissions}
72+
searchTerm={searchTerm}
73+
searchKeys={['name']}
74+
>
75+
{filteredNames => (
76+
<AllAccordionBody
77+
resourceName="All Resources"
78+
permissions={filteredNames}
79+
disabled={true}
80+
/>
81+
)}
82+
</Filter>
83+
)
84+
}
85+
7086
getAccordionBody = (resourceName, resource) => {
71-
const {permissions} = this.props
87+
const {permissions, searchTerm} = this.props
88+
const permissionNames = []
89+
7290
if (resourceName === 'Telegrafs') {
91+
for (const [, value] of Object.entries(
92+
permissions[resource].sublevelPermissions
93+
)) {
94+
permissionNames.push(value)
95+
}
7396
return (
74-
<IndividualAccordionBody
75-
resourceName={resource}
76-
permissions={permissions[resource].sublevelPermissions}
77-
title="Individual Telegraf Configuration Names"
78-
disabled={true}
79-
/>
97+
<Filter
98+
list={permissionNames}
99+
searchTerm={searchTerm}
100+
searchKeys={['name']}
101+
>
102+
{filteredNames => (
103+
<IndividualAccordionBody
104+
resourceName={resource}
105+
permissions={filteredNames}
106+
title="Individual Telegraf Configuration Names"
107+
disabled={true}
108+
/>
109+
)}
110+
</Filter>
80111
)
81112
} else if (resourceName === 'Buckets') {
113+
for (const [, value] of Object.entries(
114+
permissions[resource].sublevelPermissions
115+
)) {
116+
permissionNames.push(value)
117+
}
82118
return (
83-
<IndividualAccordionBody
84-
resourceName={resource}
85-
permissions={permissions[resource].sublevelPermissions}
86-
title="Individual Bucket Names"
87-
disabled={true}
88-
/>
119+
<Filter
120+
list={permissionNames}
121+
searchTerm={searchTerm}
122+
searchKeys={['name']}
123+
>
124+
{filteredNames => (
125+
<IndividualAccordionBody
126+
resourceName={resource}
127+
permissions={filteredNames}
128+
title="Individual Bucket Names"
129+
disabled={true}
130+
/>
131+
)}
132+
</Filter>
89133
)
90134
}
91135
}

src/authorizations/components/redesigned/EditTokenOverlay.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {
2121
Page,
2222
} from '@influxdata/clockface'
2323
import {EditResourceAccordion} from 'src/authorizations/components/redesigned/EditResourceAccordion'
24+
import SearchWidget from 'src/shared/components/search_widget/SearchWidget'
2425

2526
// Types
2627
import {Authorization} from 'src/types'
@@ -56,6 +57,7 @@ const EditTokenOverlay: FC<Props> = props => {
5657
)
5758
const [label, setlabel] = useState(props.auth.status)
5859
const [permissions, setPermissions] = useState([])
60+
const [searchTerm, setSearchTerm] = useState('')
5961

6062
useEffect(() => {
6163
if (_.isEmpty(permissions)) {
@@ -100,6 +102,10 @@ const EditTokenOverlay: FC<Props> = props => {
100102
setStatus(ComponentStatus.Default)
101103
}
102104

105+
const handleChangeSearchTerm = (searchTerm: string): void => {
106+
setSearchTerm(searchTerm)
107+
}
108+
103109
const handleDismiss = () => props.onDismissOverlay()
104110

105111
const changeToggle = () => {
@@ -160,6 +166,11 @@ const EditTokenOverlay: FC<Props> = props => {
160166
</FlexBox>
161167
</Form>
162168
<FlexBox.Child className="main-flexbox-child">
169+
<SearchWidget
170+
searchTerm={searchTerm}
171+
placeholderText="Filter Access Permissions..."
172+
onSearch={handleChangeSearchTerm}
173+
/>
163174
<FlexBox
164175
margin={ComponentSize.Large}
165176
justifyContent={JustifyContent.SpaceBetween}
@@ -192,6 +203,7 @@ const EditTokenOverlay: FC<Props> = props => {
192203
</FlexBox>
193204
<EditResourceAccordion
194205
permissions={formatPermissionsObj(permissions)}
206+
searchTerm={searchTerm}
195207
/>
196208
</FlexBox.Child>
197209
<Page.ControlBarCenter>

0 commit comments

Comments
 (0)