| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import React, { PureComponent } from 'react';
- import { connect } from 'react-redux';
- import classNames from 'classnames';
- import { setUsersSearchQuery } from './state/actions';
- import { getInviteesCount, getUsersSearchQuery } from './state/selectors';
- import { FilterInput } from 'app/core/components/FilterInput/FilterInput';
- export interface Props {
- searchQuery: string;
- setUsersSearchQuery: typeof setUsersSearchQuery;
- onShowInvites: () => void;
- pendingInvitesCount: number;
- canInvite: boolean;
- showInvites: boolean;
- externalUserMngLinkUrl: string;
- externalUserMngLinkName: string;
- }
- export class UsersActionBar extends PureComponent<Props> {
- render() {
- const {
- canInvite,
- externalUserMngLinkName,
- externalUserMngLinkUrl,
- searchQuery,
- pendingInvitesCount,
- setUsersSearchQuery,
- onShowInvites,
- showInvites,
- } = this.props;
- const pendingInvitesButtonStyle = classNames({
- btn: true,
- 'toggle-btn': true,
- active: showInvites,
- });
- const usersButtonStyle = classNames({
- btn: true,
- 'toggle-btn': true,
- active: !showInvites,
- });
- return (
- <div className="page-action-bar">
- <div className="gf-form gf-form--grow">
- <FilterInput
- labelClassName="gf-form--has-input-icon"
- inputClassName="gf-form-input width-20"
- value={searchQuery}
- onChange={setUsersSearchQuery}
- placeholder="Filter by name or type"
- />
- {pendingInvitesCount > 0 && (
- <div style={{ marginLeft: '1rem' }}>
- <button className={usersButtonStyle} key="users" onClick={onShowInvites}>
- Users
- </button>
- <button className={pendingInvitesButtonStyle} onClick={onShowInvites} key="pending-invites">
- Pending Invites ({pendingInvitesCount})
- </button>
- </div>
- )}
- <div className="page-action-bar__spacer" />
- {canInvite && (
- <a className="btn btn-primary" href="org/users/invite">
- <span>Invite</span>
- </a>
- )}
- {externalUserMngLinkUrl && (
- <a className="btn btn-primary" href={externalUserMngLinkUrl} target="_blank">
- <i className="fa fa-external-link-square" /> {externalUserMngLinkName}
- </a>
- )}
- </div>
- </div>
- );
- }
- }
- function mapStateToProps(state) {
- return {
- searchQuery: getUsersSearchQuery(state.users),
- pendingInvitesCount: getInviteesCount(state.users),
- externalUserMngLinkName: state.users.externalUserMngLinkName,
- externalUserMngLinkUrl: state.users.externalUserMngLinkUrl,
- canInvite: state.users.canInvite,
- };
- }
- const mapDispatchToProps = {
- setUsersSearchQuery,
- };
- export default connect(
- mapStateToProps,
- mapDispatchToProps
- )(UsersActionBar);
|