import * as React from "react"; import Icon from "../elements/icon"; import {Link} from "react-router-dom"; import {getPeriodString} from "../global"; import Alert from "../elements/alert"; export default class UserOverview extends React.Component { constructor(props) { super(props); this.parent = { showDialog: props.showDialog || function () { }, api: props.api, }; this.state = { loaded: false, users: { data: {}, page: 1, pageCount: 1, totalCount: 0, }, groups: { data: {}, page: 1, pageCount: 1, totalCount: 0, }, errors: [] }; } fetchGroups(page) { page = page || this.state.groups.page; this.setState({...this.state, groups: {...this.state.groups, data: {}, page: 1, totalCount: 0}}); this.parent.api.fetchGroups(page).then((res) => { if (res.success) { this.setState({ ...this.state, groups: { data: res.groups, pageCount: res.pageCount, page: page, totalCount: res.totalCount, } }); } else { let errors = this.state.errors.slice(); errors.push({title: "Error fetching groups", message: res.msg}); this.setState({ ...this.state, errors: errors }); } if (!this.state.loaded) { this.fetchUsers(1) } }); } fetchUsers(page) { page = page || this.state.users.page; this.setState({...this.state, users: {...this.state.users, data: {}, pageCount: 1, totalCount: 0}}); this.parent.api.fetchUsers(page).then((res) => { if (res.success) { this.setState({ ...this.state, loaded: true, users: { data: res.users, pageCount: res.pageCount, page: page, totalCount: res.totalCount, } }); } else { let errors = this.state.errors.slice(); errors.push({title: "Error fetching users", message: res.msg}); this.setState({ ...this.state, loaded: true, errors: errors }); } }); } componentDidMount() { this.setState({...this.state, loaded: false}); this.fetchGroups(1); } removeError(i) { if (i >= 0 && i < this.state.errors.length) { let errors = this.state.errors.slice(); errors.splice(i, 1); this.setState({...this.state, errors: errors}); } } render() { if (!this.state.loaded) { return

Loading… 

} let errors = []; for (let i = 0; i < this.state.errors.length; i++) { errors.push( this.removeError(i)} {...this.state.errors[i]}/>) } return <>

Users & Groups

  1. Home
  2. Users
{errors}
{this.createUserCard()}
{this.createGroupCard()}
; } createUserCard() { let userRows = []; for (let uid in this.state.users.data) { if (!this.state.users.data.hasOwnProperty(uid)) { continue; } let user = this.state.users.data[uid]; let groups = []; for (let groupId in user.groups) { if (user.groups.hasOwnProperty(groupId)) { let groupName = user.groups[groupId]; let color = (groupId === "1" ? "danger" : "secondary"); groups.push({groupName}); } } userRows.push( {user.name} {user.email} {groups} {getPeriodString(user.registered_at)} ); } let pages = []; let previousDisabled = (this.state.users.page === 1 ? " disabled" : ""); let nextDisabled = (this.state.users.page >= this.state.users.pageCount ? " disabled" : ""); for (let i = 1; i <= this.state.users.pageCount; i++) { let active = (this.state.users.page === i ? " active" : ""); pages.push(
  • this.fetchUsers(i)}> {i}
  • ); } return

    Users

    this.fetchUsers()}>
    {userRows}
    Username Email Groups Registered
    ; } createGroupCard() { let groupRows = []; for (let uid in this.state.groups.data) { if (!this.state.groups.data.hasOwnProperty(uid)) { continue; } let group = this.state.groups.data[uid]; groupRows.push( {group.name} {group.memberCount} ); } let pages = []; let previousDisabled = (this.state.groups.page === 1 ? " disabled" : ""); let nextDisabled = (this.state.groups.page >= this.state.groups.pageCount ? " disabled" : ""); for (let i = 1; i <= this.state.groups.pageCount; i++) { let active = (this.state.groups.page === i ? " active" : ""); pages.push(
  • this.fetchGroups(i)}> {i}
  • ); } return

    Groups

    this.fetchGroups()}>
    {groupRows}
    Name Members
    ; } }