import React, { PureComponent } from 'react'; import { connect } from 'react-redux'; import { hot } from 'react-hot-loader'; import { NavModel, ApiKey, NewApiKey, OrgRole } from 'app/types'; import { getNavModel } from 'app/core/selectors/navModel'; import { getApiKeys } from './state/selectors'; import { loadApiKeys, deleteApiKey, setSearchQuery, addApiKey } from './state/actions'; // import { getSearchQuery, getTeams, getTeamsCount } from './state/selectors'; import PageHeader from 'app/core/components/PageHeader/PageHeader'; import SlideDown from 'app/core/components/Animations/SlideDown'; export interface Props { navModel: NavModel; apiKeys: ApiKey[]; searchQuery: string; loadApiKeys: typeof loadApiKeys; deleteApiKey: typeof deleteApiKey; setSearchQuery: typeof setSearchQuery; addApiKey: typeof addApiKey; } export interface State { isAdding: boolean; newApiKey: NewApiKey; } enum ApiKeyStateProps { Name = 'name', Role = 'role', } const initialApiKeyState = { name: '', role: OrgRole.Viewer, }; export class ApiKeysPage extends PureComponent { constructor(props) { super(props); this.state = { isAdding: false, newApiKey: initialApiKeyState }; } componentDidMount() { this.fetchApiKeys(); } async fetchApiKeys() { await this.props.loadApiKeys(); } onDeleteApiKey(key: ApiKey) { this.props.deleteApiKey(key.id); } onSearchQueryChange = evt => { this.props.setSearchQuery(evt.target.value); }; onToggleAdding = () => { this.setState({ isAdding: !this.state.isAdding }); }; onAddApiKey = async evt => { evt.preventDefault(); this.props.addApiKey(this.state.newApiKey); this.setState((prevState: State) => { return { ...prevState, newApiKey: initialApiKeyState, }; }); }; onApiKeyStateUpdate = (evt, prop: string) => { const value = evt.currentTarget.value; this.setState((prevState: State) => { const newApiKey = { ...prevState.newApiKey, }; newApiKey[prop] = value; return { ...prevState, newApiKey: newApiKey, }; }); }; render() { const { newApiKey, isAdding } = this.state; const { navModel, apiKeys, searchQuery } = this.props; return (
Add API Key
Key name this.onApiKeyStateUpdate(evt, ApiKeyStateProps.Name)} />
Role

Existing Keys

{apiKeys.length > 0 ? ( {apiKeys.map(key => { // id, name, role return ( ); })} ) : null}
Name Role
{key.name} {key.role}
); } } function mapStateToProps(state) { return { navModel: getNavModel(state.navIndex, 'apikeys'), apiKeys: getApiKeys(state.apiKeys), searchQuery: state.apiKeys.searchQuery, // searchQuery: getSearchQuery(state.teams), }; } const mapDispatchToProps = { loadApiKeys, deleteApiKey, setSearchQuery, addApiKey, }; export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(ApiKeysPage));