import React, { useEffect } from "react"; import { connect } from "react-redux"; import { Icon } from "@blueprintjs/core"; import { TableWrapper } from "components/designSystems/appsmith/TableStyledWrappers"; import { AppState } from "reducers"; import { getAllUsers, getAllRoles, getOrgs, } from "selectors/organizationSelectors"; import PageSectionDivider from "pages/common/PageSectionDivider"; import PageSectionHeader from "pages/common/PageSectionHeader"; import { ReduxActionTypes } from "constants/ReduxActionConstants"; import InviteUsersFormv2 from "pages/organization/InviteUsersFromv2"; import Button from "components/editorComponents/Button"; import { OrgUser, Organization } from "constants/orgConstants"; import { Menu, MenuItem, Popover, Position } from "@blueprintjs/core"; import styled from "styled-components"; import { FormIcons } from "icons/FormIcons"; import "@syncfusion/ej2-react-grids/styles/material.css"; import { RouteComponentProps } from "react-router"; import Spinner from "components/editorComponents/Spinner"; import FormDialogComponent from "components/editorComponents/form/FormDialogComponent"; import { getCurrentUser } from "selectors/usersSelectors"; import { User } from "constants/userConstants"; import { useTable, useFlexLayout } from "react-table"; type OrgProps = { allOrgs: Organization[]; changeOrgName: (value: string) => void; getAllApplication: () => void; fetchUser: (orgId: string) => void; fetchAllRoles: (orgId: string) => void; deleteOrgUser: (orgId: string, username: string) => void; changeOrgUserRole: (orgId: string, role: string, username: string) => void; allUsers: OrgUser[]; allRole: object; currentUser: User | undefined; isFetchAllUsers: boolean; isFetchAllRoles: boolean; }; export type PageProps = OrgProps & RouteComponentProps<{ orgId: string; }>; export type MenuItemProps = { rolename: string; }; type DropdownProps = { activeItem: string; userRoles: object; username: string; }; const StyledDropDown = styled.div` cursor: pointer; `; const StyledTableWrapped = styled(TableWrapper)` width: 100%; height: auto; font-size: 14px; .table { .tbody { overflow: auto; height: auto; max-height: calc( 100vh - (100vh / 3) - ${props => props.theme.headerHeight} ); } } `; const StyledMenu = styled(Menu)` &&&&.bp3-menu { max-width: 250px; cursor: pointer; } `; export const OrgSettings = (props: PageProps) => { const { match: { params: { orgId }, }, deleteOrgUser, changeOrgUserRole, allOrgs, fetchUser, fetchAllRoles, getAllApplication, } = props; const userTableData = props.allUsers.map(user => ({ ...user, roles: props.allRole, isCurrentUser: user.username === props.currentUser?.username, })); const data = React.useMemo(() => userTableData, [ props.allUsers, props.allRole, ]); const columns = React.useMemo(() => { return [ { Header: "Email", accessor: "username", }, { Header: "Name", accessor: "name", }, { Header: "Role", accessor: "roleName", Cell: (cellProps: any) => { const { roleName, roles, username, isCurrentUser, isChangingRole, } = cellProps.row.original; if (isCurrentUser) { return