MM-51846 : Upgrade Esint from 7 to 8+ (#22753)
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
84b0e3dff1
Коммит
9bffaeae42
@@ -1,3 +1,3 @@
|
||||
save-exact=true
|
||||
legacy-peer-deps=true
|
||||
global-style=true
|
||||
global-style=true
|
||||
|
||||
@@ -102,12 +102,11 @@
|
||||
"@types/react-router-dom": "^5.3.3",
|
||||
"@types/react-transition-group": "4.4.4",
|
||||
"@types/redux-mock-store": "1.0.3",
|
||||
"@typescript-eslint/eslint-plugin": "5.16.0",
|
||||
"@typescript-eslint/parser": "5.16.0",
|
||||
"@typescript-eslint/eslint-plugin": "5.57.1",
|
||||
"@typescript-eslint/parser": "5.57.1",
|
||||
"babel-eslint": "10.1.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"css-loader": "6.7.1",
|
||||
"eslint": "^8.11.0",
|
||||
"eslint-import-resolver-webpack": "0.13.2",
|
||||
"eslint-plugin-babel": "^5.3.1",
|
||||
"eslint-plugin-formatjs": "4.9.0",
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"plugin:react-hooks/recommended"
|
||||
],
|
||||
"plugins": [
|
||||
"@babel/eslint-plugin",
|
||||
"@babel",
|
||||
"mattermost",
|
||||
"import",
|
||||
"no-only-tests",
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"private": true,
|
||||
"engines": {
|
||||
"npm": ">=7.0.0",
|
||||
"node": ">=16.4.0"
|
||||
"node": ">=16.10.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@floating-ui/react-dom": "1.0.0",
|
||||
@@ -153,8 +153,8 @@
|
||||
"@types/styled-components": "5.1.24",
|
||||
"@types/tinycolor2": "1.4.3",
|
||||
"@types/webpack-env": "1.18.0",
|
||||
"@typescript-eslint/eslint-plugin": "5.41.0",
|
||||
"@typescript-eslint/parser": "5.41.0",
|
||||
"@typescript-eslint/eslint-plugin": "5.57.1",
|
||||
"@typescript-eslint/parser": "5.57.1",
|
||||
"babel-loader": "8.2.3",
|
||||
"babel-plugin-lodash": "3.3.4",
|
||||
"babel-plugin-styled-components": "1.12.0",
|
||||
@@ -167,14 +167,13 @@
|
||||
"enzyme": "3.11.0",
|
||||
"enzyme-adapter-react-17-updated": "1.0.2",
|
||||
"enzyme-to-json": "3.6.2",
|
||||
"eslint": "7.32.0",
|
||||
"eslint-import-resolver-webpack": "0.13.2",
|
||||
"eslint-plugin-formatjs": "4.3.4",
|
||||
"eslint-plugin-formatjs": "4.9.1",
|
||||
"eslint-plugin-header": "3.1.1",
|
||||
"eslint-plugin-import": "2.23.4",
|
||||
"eslint-plugin-import": "2.27.5",
|
||||
"eslint-plugin-mattermost": "github:mattermost/eslint-plugin-mattermost#5b0c972eacf19286e4c66221b39113bf8728a99e",
|
||||
"eslint-plugin-no-only-tests": "2.6.0",
|
||||
"eslint-plugin-react": "7.31.10",
|
||||
"eslint-plugin-no-only-tests": "3.1.0",
|
||||
"eslint-plugin-react": "7.32.2",
|
||||
"eslint-plugin-react-hooks": "4.6.0",
|
||||
"external-remotes-plugin": "1.0.0",
|
||||
"file-loader": "6.2.0",
|
||||
|
||||
@@ -49,7 +49,7 @@ export default class AboutBuildModal extends React.PureComponent<Props, State> {
|
||||
|
||||
doHide = () => {
|
||||
this.setState({show: false});
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const config = this.props.config;
|
||||
|
||||
@@ -32,11 +32,11 @@ export default class AccessHistoryModal extends React.PureComponent<Props, State
|
||||
|
||||
public onShow = () => { // public for testing
|
||||
this.props.actions.getUserAudits(this.props.currentUserId, 0, 200);
|
||||
}
|
||||
};
|
||||
|
||||
public onHide = () => { // public for testing
|
||||
this.setState({show: false});
|
||||
}
|
||||
};
|
||||
|
||||
public componentDidMount() {
|
||||
this.onShow();
|
||||
|
||||
@@ -23,7 +23,7 @@ export default class Accordion extends React.PureComponent<Props, State> {
|
||||
|
||||
setExpanded = (expandedKey: string) => {
|
||||
this.setState({expandedKey});
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
return (
|
||||
|
||||
@@ -92,7 +92,7 @@ export class ActionMenuClass extends React.PureComponent<Props, State> {
|
||||
appBindings: [],
|
||||
location: Locations.CENTER,
|
||||
pluginMenuItems: [],
|
||||
}
|
||||
};
|
||||
private buttonRef: React.RefObject<HTMLButtonElement>;
|
||||
|
||||
constructor(props: Props) {
|
||||
@@ -115,7 +115,7 @@ export class ActionMenuClass extends React.PureComponent<Props, State> {
|
||||
defaultMessage='Message actions'
|
||||
/>
|
||||
</Tooltip>
|
||||
)
|
||||
);
|
||||
|
||||
componentDidUpdate(prevProps: Props) {
|
||||
if (this.props.isMenuOpen && !prevProps.isMenuOpen) {
|
||||
@@ -137,7 +137,7 @@ export class ActionMenuClass extends React.PureComponent<Props, State> {
|
||||
this.setState({appBindings: data});
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
handleOpenMarketplace = (): void => {
|
||||
const openedFrom: OpenedFromType = 'actions_menu';
|
||||
@@ -197,7 +197,7 @@ export class ActionMenuClass extends React.PureComponent<Props, State> {
|
||||
this.props.actions.postEphemeralCallResponseForPost(callResp, errorMessage, post);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
visitMarketplaceTip(): React.ReactElement {
|
||||
return (
|
||||
@@ -263,7 +263,7 @@ export class ActionMenuClass extends React.PureComponent<Props, State> {
|
||||
this.setState({
|
||||
openUp: (spaceOnTop > spaceOnBottom),
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
render(): React.ReactNode {
|
||||
const isSystemMessage = PostUtils.isSystemMessage(this.props.post);
|
||||
|
||||
@@ -53,7 +53,7 @@ type State = {
|
||||
export default class ActivityLogModal extends React.PureComponent<Props, State> {
|
||||
static propTypes = {
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
constructor(props: Props) {
|
||||
super(props);
|
||||
@@ -73,15 +73,15 @@ export default class ActivityLogModal extends React.PureComponent<Props, State>
|
||||
this.props.actions.revokeSession(this.props.currentUserId, altId).then(() => {
|
||||
this.props.actions.getSessions(this.props.currentUserId);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
onShow = () => {
|
||||
this.props.actions.getSessions(this.props.currentUserId);
|
||||
}
|
||||
};
|
||||
|
||||
onHide = () => {
|
||||
this.setState({show: false});
|
||||
}
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
this.onShow();
|
||||
|
||||
@@ -56,11 +56,11 @@ export default class ActivityLog extends React.PureComponent<Props, State> {
|
||||
|
||||
handleMoreInfo = (): void => {
|
||||
this.setState({moreInfo: true});
|
||||
}
|
||||
};
|
||||
|
||||
submitRevoke = (e: React.MouseEvent): void => {
|
||||
this.props.submitRevoke(this.props.currentSession.id, e);
|
||||
}
|
||||
};
|
||||
|
||||
isMobileSession = (session: Session): boolean => {
|
||||
return Boolean(session.device_id && (session.device_id.includes('apple') || session.device_id.includes('android')));
|
||||
|
||||
@@ -110,7 +110,7 @@ export default class AddGroupsToChannelModal extends React.PureComponent<Props,
|
||||
handleHide = () => {
|
||||
this.props.actions.setModalSearchTerm('');
|
||||
this.setState({show: false});
|
||||
}
|
||||
};
|
||||
|
||||
handleResponse = (err?: ServerError) => {
|
||||
let addError = null;
|
||||
@@ -122,7 +122,7 @@ export default class AddGroupsToChannelModal extends React.PureComponent<Props,
|
||||
saving: false,
|
||||
addError,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
handleSubmit = async () => {
|
||||
const groupIDs = this.state.values.map((v) => v.id);
|
||||
@@ -147,7 +147,7 @@ export default class AddGroupsToChannelModal extends React.PureComponent<Props,
|
||||
this.handleHide();
|
||||
}
|
||||
}));
|
||||
}
|
||||
};
|
||||
|
||||
addValue = (value: GroupValue) => {
|
||||
const values = Object.assign([], this.state.values);
|
||||
@@ -157,13 +157,13 @@ export default class AddGroupsToChannelModal extends React.PureComponent<Props,
|
||||
}
|
||||
|
||||
this.setState({values});
|
||||
}
|
||||
};
|
||||
|
||||
setGroupsLoadingState = (loadingState: boolean) => {
|
||||
this.setState({
|
||||
loadingGroups: loadingState,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
handlePageChange = (page: number, prevPage: number) => {
|
||||
if (page > prevPage) {
|
||||
@@ -172,15 +172,15 @@ export default class AddGroupsToChannelModal extends React.PureComponent<Props,
|
||||
this.setGroupsLoadingState(false);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
handleDelete = (values: GroupValue[]) => {
|
||||
this.setState({values});
|
||||
}
|
||||
};
|
||||
|
||||
search = (term: string) => {
|
||||
this.props.actions.setModalSearchTerm(term);
|
||||
}
|
||||
};
|
||||
|
||||
renderOption = (option: GroupValue, isSelected: boolean, onAdd: (value: GroupValue) => void, onMouseMove?: (value: GroupValue) => void) => {
|
||||
const rowSelected = isSelected ? 'more-modal__row--selected' : '';
|
||||
@@ -222,7 +222,7 @@ export default class AddGroupsToChannelModal extends React.PureComponent<Props,
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
renderValue(props: { data: Partial<Value> }) {
|
||||
return props.data.display_name;
|
||||
|
||||
@@ -105,12 +105,12 @@ export default class AddGroupsToTeamModal extends React.PureComponent<Props, Sta
|
||||
public handleHide = () => {
|
||||
this.props.actions.setModalSearchTerm('');
|
||||
this.setState({show: false});
|
||||
}
|
||||
};
|
||||
|
||||
// public for tests
|
||||
public handleExit = (): void => {
|
||||
this.props.onExited();
|
||||
}
|
||||
};
|
||||
|
||||
// public for tests
|
||||
public handleResponse = (err?: Error): void => {
|
||||
@@ -123,7 +123,7 @@ export default class AddGroupsToTeamModal extends React.PureComponent<Props, Sta
|
||||
saving: false,
|
||||
addError,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// public for tests
|
||||
public handleSubmit = async () => {
|
||||
@@ -148,7 +148,7 @@ export default class AddGroupsToTeamModal extends React.PureComponent<Props, Sta
|
||||
this.handleHide();
|
||||
}
|
||||
}));
|
||||
}
|
||||
};
|
||||
|
||||
// public for tests
|
||||
public addValue = (value: GroupValue): void => {
|
||||
@@ -159,13 +159,13 @@ export default class AddGroupsToTeamModal extends React.PureComponent<Props, Sta
|
||||
}
|
||||
|
||||
this.setState({values});
|
||||
}
|
||||
};
|
||||
|
||||
private setGroupsLoadingState = (loadingState: boolean) => {
|
||||
this.setState({
|
||||
loadingGroups: loadingState,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// public for tests
|
||||
public handlePageChange = (page: number, prevPage: number): void => {
|
||||
@@ -175,7 +175,7 @@ export default class AddGroupsToTeamModal extends React.PureComponent<Props, Sta
|
||||
this.setGroupsLoadingState(false);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// public for tests
|
||||
public handleDelete = (values: GroupValue[]): void => this.setState({values});
|
||||
@@ -224,7 +224,7 @@ export default class AddGroupsToTeamModal extends React.PureComponent<Props, Sta
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
// public for tests
|
||||
public renderValue = (props: { data: Value }): string | undefined => props.data.display_name;
|
||||
|
||||
@@ -114,7 +114,7 @@ export default class AddUserToChannelModal extends React.PureComponent<Props, St
|
||||
|
||||
enableChannelProvider = () => {
|
||||
this.suggestionProviders[0].disableDispatches = false;
|
||||
}
|
||||
};
|
||||
|
||||
focusTextbox = () => {
|
||||
if (this.channelSearchBox == null) {
|
||||
@@ -126,30 +126,30 @@ export default class AddUserToChannelModal extends React.PureComponent<Props, St
|
||||
textbox.focus();
|
||||
placeCaretAtEnd(textbox);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
onInputChange = (e: ChangeEvent<HTMLInputElement>) => {
|
||||
this.setState({text: e.target.value, selectedChannelId: null});
|
||||
}
|
||||
};
|
||||
|
||||
onHide = () => {
|
||||
this.setState({show: false});
|
||||
}
|
||||
};
|
||||
|
||||
onExited = () => {
|
||||
this.props.onExited();
|
||||
}
|
||||
};
|
||||
|
||||
setSearchBoxRef = (input: SuggestionBoxComponent) => {
|
||||
this.channelSearchBox = input;
|
||||
this.focusTextbox();
|
||||
}
|
||||
};
|
||||
|
||||
handleSubmitError = (error: {message: string}) => {
|
||||
if (error) {
|
||||
this.setState({submitError: error.message, saving: false});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
didSelectChannel = (selection: {channel: Channel}) => {
|
||||
const channel = selection.channel;
|
||||
@@ -165,7 +165,7 @@ export default class AddUserToChannelModal extends React.PureComponent<Props, St
|
||||
this.props.actions.getChannelMember(channel.id, userId).then(() => {
|
||||
this.setState({checkingForMembership: false});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
handleSubmit = (e: FormEvent) => {
|
||||
if (e && e.preventDefault) {
|
||||
@@ -192,7 +192,7 @@ export default class AddUserToChannelModal extends React.PureComponent<Props, St
|
||||
this.onHide();
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
isUserMemberOfChannel = (channelId: string | null) => {
|
||||
const user = this.props.user;
|
||||
@@ -207,7 +207,7 @@ export default class AddUserToChannelModal extends React.PureComponent<Props, St
|
||||
}
|
||||
|
||||
return Boolean(memberships[channelId][user.id]);
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const user = this.props.user;
|
||||
|
||||
@@ -173,7 +173,7 @@ export default class AddUserToGroupMultiSelect extends React.PureComponent<Props
|
||||
return '';
|
||||
}
|
||||
return option.username;
|
||||
}
|
||||
};
|
||||
|
||||
renderOption = (option: UserProfileValue, isSelected: boolean, onAdd: (user: UserProfileValue) => void, onMouseMove: (user: UserProfileValue) => void) => {
|
||||
return (
|
||||
@@ -241,5 +241,5 @@ export default class AddUserToGroupMultiSelect extends React.PureComponent<Props
|
||||
numRemainingText={numRemainingText}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -78,11 +78,11 @@ export default class AddUsersToTeamModal extends React.PureComponent<Props, Stat
|
||||
public componentDidMount = async () => {
|
||||
await this.props.actions.getProfilesNotInTeam(this.props.team.id, false, 0, USERS_PER_PAGE * 2);
|
||||
this.setUsersLoadingState(false);
|
||||
}
|
||||
};
|
||||
|
||||
private setUsersLoadingState = (loading: boolean) => {
|
||||
this.setState({loading});
|
||||
}
|
||||
};
|
||||
|
||||
public search = async (term: string) => {
|
||||
this.setUsersLoadingState(true);
|
||||
@@ -95,17 +95,17 @@ export default class AddUsersToTeamModal extends React.PureComponent<Props, Stat
|
||||
await this.props.actions.getProfilesNotInTeam(this.props.team.id, false, 0, USERS_PER_PAGE * 2);
|
||||
}
|
||||
this.setState({loading: false, searchResults, search});
|
||||
}
|
||||
};
|
||||
|
||||
public handleHide = () => {
|
||||
this.setState({show: false});
|
||||
}
|
||||
};
|
||||
|
||||
private handleExit = () => {
|
||||
if (this.props.onExited) {
|
||||
this.props.onExited();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private renderOption = (option: UserProfileValue, isSelected: boolean, onAdd: (user: UserProfileValue) => void, onMouseMove: (user: UserProfileValue) => void) => {
|
||||
let rowSelected = '';
|
||||
@@ -139,15 +139,15 @@ export default class AddUsersToTeamModal extends React.PureComponent<Props, Stat
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
private renderValue = (value: { data: UserProfileValue }): string => {
|
||||
return value.data?.username || '';
|
||||
}
|
||||
};
|
||||
|
||||
private renderAriaLabel = (option: UserProfileValue): string => {
|
||||
return option?.username || '';
|
||||
}
|
||||
};
|
||||
|
||||
private handleAdd = (value: UserProfileValue) => {
|
||||
const values: UserProfileValue[] = [...this.state.values];
|
||||
@@ -155,11 +155,11 @@ export default class AddUsersToTeamModal extends React.PureComponent<Props, Stat
|
||||
values.push(value);
|
||||
}
|
||||
this.setState({values});
|
||||
}
|
||||
};
|
||||
|
||||
private handleDelete = (values: UserProfileValue[]) => {
|
||||
this.setState({values});
|
||||
}
|
||||
};
|
||||
|
||||
private handlePageChange = (page: number, prevPage: number) => {
|
||||
if (page > prevPage) {
|
||||
@@ -173,7 +173,7 @@ export default class AddUsersToTeamModal extends React.PureComponent<Props, Stat
|
||||
private handleSubmit = () => {
|
||||
this.props.onAddCallback(this.state.values);
|
||||
this.handleHide();
|
||||
}
|
||||
};
|
||||
|
||||
public render = (): JSX.Element => {
|
||||
const numRemainingText = (
|
||||
@@ -259,5 +259,5 @@ export default class AddUsersToTeamModal extends React.PureComponent<Props, Stat
|
||||
</Modal.Body>
|
||||
</Modal>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ export default class AdminConsole extends React.PureComponent<Props, State> {
|
||||
|
||||
private onFilterChange = (filter: string) => {
|
||||
this.setState({filter});
|
||||
}
|
||||
};
|
||||
|
||||
private mainRolesLoaded(roles: Record<string, Role>) {
|
||||
return (
|
||||
@@ -186,7 +186,7 @@ export default class AdminConsole extends React.PureComponent<Props, State> {
|
||||
{<Redirect to={`${this.props.match.url}/${defaultUrl}`}/>}
|
||||
</Switch>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
public render(): JSX.Element | null {
|
||||
const {
|
||||
|
||||
@@ -69,7 +69,7 @@ export default abstract class AdminSettings <Props extends BaseProps, State exte
|
||||
|
||||
private closeTooltip = () => {
|
||||
this.setState({errorTooltip: false});
|
||||
}
|
||||
};
|
||||
|
||||
private openTooltip = (e: React.MouseEvent) => {
|
||||
const elm: HTMLElement|null = e.currentTarget.querySelector('.control-label');
|
||||
@@ -77,7 +77,7 @@ export default abstract class AdminSettings <Props extends BaseProps, State exte
|
||||
const isElipsis = elm.offsetWidth < elm.scrollWidth;
|
||||
this.setState({errorTooltip: isElipsis});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
protected handleChange = (id: string, value: boolean) => {
|
||||
this.setState((prevState) => ({
|
||||
@@ -95,7 +95,7 @@ export default abstract class AdminSettings <Props extends BaseProps, State exte
|
||||
e.preventDefault();
|
||||
|
||||
this.doSubmit();
|
||||
}
|
||||
};
|
||||
|
||||
protected doSubmit = async (callback?: () => void) => {
|
||||
this.setState({
|
||||
|
||||
@@ -57,11 +57,11 @@ const renderScrollThumbVertical = (props: Props) => (
|
||||
|
||||
class AdminSidebar extends React.PureComponent<Props, State> {
|
||||
searchRef: React.RefObject<HTMLInputElement>;
|
||||
idx: Index | null
|
||||
idx: Index | null;
|
||||
|
||||
static defaultProps = {
|
||||
plugins: {},
|
||||
}
|
||||
};
|
||||
|
||||
constructor(props: Props) {
|
||||
super(props);
|
||||
@@ -130,7 +130,7 @@ class AdminSidebar extends React.PureComponent<Props, State> {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
updateTitle = () => {
|
||||
let currentSiteName = '';
|
||||
@@ -139,7 +139,7 @@ class AdminSidebar extends React.PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
document.title = localizeMessage('sidebar_right_menu.console', 'System Console') + currentSiteName;
|
||||
}
|
||||
};
|
||||
|
||||
visibleSections = () => {
|
||||
const {config, license, buildEnterpriseReady, consoleAccess, adminDefinition, cloud} = this.props;
|
||||
@@ -166,7 +166,7 @@ class AdminSidebar extends React.PureComponent<Props, State> {
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
renderRootMenu = (definition: typeof AdminDefinition) => {
|
||||
const {config, license, buildEnterpriseReady, consoleAccess, cloud, subscriptionProduct} = this.props;
|
||||
@@ -249,11 +249,11 @@ class AdminSidebar extends React.PureComponent<Props, State> {
|
||||
return null;
|
||||
});
|
||||
return sidebarSections;
|
||||
}
|
||||
};
|
||||
|
||||
isPluginPresentInSections = (plugin: PluginRedux) => {
|
||||
return this.state.sections && this.state.sections.indexOf(`plugin_${plugin.id}`) >= 0;
|
||||
}
|
||||
};
|
||||
|
||||
renderPluginsMenu = () => {
|
||||
const {config, plugins} = this.props;
|
||||
@@ -279,12 +279,12 @@ class AdminSidebar extends React.PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
};
|
||||
|
||||
handleClearFilter = () => {
|
||||
this.setState({sections: null, filter: ''});
|
||||
this.props.onFilterChange('');
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const {showTaskList} = this.props;
|
||||
|
||||
@@ -25,7 +25,7 @@ export default class BleveSettings extends AdminSettings {
|
||||
config.BleveSettings.EnableAutocomplete = this.state.enableAutocomplete;
|
||||
|
||||
return config;
|
||||
}
|
||||
};
|
||||
|
||||
getStateFromConfig(config) {
|
||||
return {
|
||||
@@ -55,17 +55,17 @@ export default class BleveSettings extends AdminSettings {
|
||||
}
|
||||
|
||||
this.handleChange(id, value);
|
||||
}
|
||||
};
|
||||
|
||||
handleSaved = () => {
|
||||
this.setState({
|
||||
canPurgeAndIndex: this.state.enableIndexing && this.state.indexDir !== '',
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
canSave = () => {
|
||||
return this.state.canSave;
|
||||
}
|
||||
};
|
||||
|
||||
getExtraInfo(job) {
|
||||
if (job.status === JobStatuses.IN_PROGRESS) {
|
||||
@@ -246,5 +246,5 @@ export default class BleveSettings extends AdminSettings {
|
||||
/>
|
||||
</SettingsGroup>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ export default class BooleanSetting extends React.PureComponent<Props> {
|
||||
|
||||
private handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
this.props.onChange(this.props.id, e.target.value === 'true');
|
||||
}
|
||||
};
|
||||
|
||||
public render() {
|
||||
let helpText;
|
||||
|
||||
@@ -29,7 +29,7 @@ export default class ClusterSettings extends AdminSettings {
|
||||
config.ClusterSettings.GossipPort = this.parseIntNonZero(this.state.GossipPort, 8074);
|
||||
config.ClusterSettings.StreamingPort = this.parseIntNonZero(this.state.StreamingPort, 8075);
|
||||
return config;
|
||||
}
|
||||
};
|
||||
|
||||
getStateFromConfig(config) {
|
||||
const settings = config.ClusterSettings;
|
||||
@@ -62,7 +62,7 @@ export default class ClusterSettings extends AdminSettings {
|
||||
});
|
||||
|
||||
this.handleChange(id, value);
|
||||
}
|
||||
};
|
||||
|
||||
renderSettings = () => {
|
||||
const licenseEnabled = this.props.license.IsLicensed === 'true' && this.props.license.Cluster === 'true';
|
||||
@@ -309,7 +309,7 @@ export default class ClusterSettings extends AdminSettings {
|
||||
/>
|
||||
</SettingsGroup>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const style = {
|
||||
|
||||
@@ -15,7 +15,7 @@ export default class ClusterTable extends React.PureComponent {
|
||||
static propTypes = {
|
||||
clusterInfos: PropTypes.array.isRequired,
|
||||
reload: PropTypes.func.isRequired,
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
var versionMismatch = (
|
||||
|
||||
@@ -28,7 +28,7 @@ export default class ClusterTableContainer extends React.PureComponent {
|
||||
},
|
||||
null,
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
this.load();
|
||||
@@ -53,7 +53,7 @@ export default class ClusterTableContainer extends React.PureComponent {
|
||||
});
|
||||
|
||||
this.load();
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
if (this.state.clusterInfos == null) {
|
||||
|
||||
@@ -21,7 +21,7 @@ export default class ColorSetting extends React.PureComponent<Props> {
|
||||
if (this.props.onChange) {
|
||||
this.props.onChange(this.props.id, color);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
public render() {
|
||||
return (
|
||||
|
||||
@@ -94,7 +94,7 @@ export default class ComplianceReports extends React.PureComponent<Props, State>
|
||||
this.props.actions.getComplianceReports().then(
|
||||
() => this.setState({loadingReports: false}),
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
runReport = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
|
||||
e.preventDefault();
|
||||
@@ -131,7 +131,7 @@ export default class ComplianceReports extends React.PureComponent<Props, State>
|
||||
this.props.actions.getComplianceReports();
|
||||
},
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
getDateTime(millis: number) {
|
||||
const date = new Date(millis);
|
||||
|
||||
@@ -73,7 +73,7 @@ export default class CustomTermsOfServiceSettings extends AdminSettings<Props, S
|
||||
config.SupportSettings.CustomTermsOfServiceReAcceptancePeriod = this.parseIntNonZero(String(this.state.reAcceptancePeriod), Constants.DEFAULT_TERMS_OF_SERVICE_RE_ACCEPTANCE_PERIOD);
|
||||
}
|
||||
return config;
|
||||
}
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
this.getTermsOfService();
|
||||
@@ -244,5 +244,5 @@ export default class CustomTermsOfServiceSettings extends AdminSettings<Props, S
|
||||
/>
|
||||
</SettingsGroup>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ class DataGrid extends React.PureComponent<Props, State> {
|
||||
static defaultProps = {
|
||||
term: '',
|
||||
searchPlaceholder: '',
|
||||
}
|
||||
};
|
||||
|
||||
public constructor(props: Props) {
|
||||
super(props);
|
||||
@@ -134,7 +134,7 @@ class DataGrid extends React.PureComponent<Props, State> {
|
||||
});
|
||||
|
||||
this.setState({visibleColumns});
|
||||
}
|
||||
};
|
||||
|
||||
private renderRows(): JSX.Element {
|
||||
const {rows, rowsContainerStyles} = this.props;
|
||||
@@ -219,19 +219,19 @@ class DataGrid extends React.PureComponent<Props, State> {
|
||||
if (!this.props.loading) {
|
||||
this.props.nextPage();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private previousPage = () => {
|
||||
if (!this.props.loading) {
|
||||
this.props.previousPage();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private search = (term: string) => {
|
||||
if (this.props.onSearch) {
|
||||
this.props.onSearch(term);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private renderFooter = (): JSX.Element | null => {
|
||||
const {startCount, endCount, total} = this.props;
|
||||
@@ -286,7 +286,7 @@ class DataGrid extends React.PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
return footer;
|
||||
}
|
||||
};
|
||||
|
||||
public render() {
|
||||
return (
|
||||
|
||||
@@ -32,7 +32,7 @@ class DataGridSearch extends React.PureComponent<Props, State> {
|
||||
static defaultProps = {
|
||||
placeholder: '',
|
||||
term: '',
|
||||
}
|
||||
};
|
||||
|
||||
public constructor(props: Props) {
|
||||
super(props);
|
||||
@@ -46,7 +46,7 @@ class DataGridSearch extends React.PureComponent<Props, State> {
|
||||
const term = e.target.value;
|
||||
this.setState({term});
|
||||
this.props.onSearch(term);
|
||||
}
|
||||
};
|
||||
|
||||
resetSearch = () => {
|
||||
this.props.onSearch('');
|
||||
|
||||
@@ -58,14 +58,14 @@ export default class ChannelList extends React.PureComponent<Props, State> {
|
||||
|
||||
componentDidMount = () => {
|
||||
this.loadPage(0, PAGE_SIZE * 2);
|
||||
}
|
||||
};
|
||||
|
||||
private setStateLoading = (loading: boolean) => {
|
||||
this.setState({loading});
|
||||
}
|
||||
};
|
||||
private setStatePage = (page: number) => {
|
||||
this.setState({page});
|
||||
}
|
||||
};
|
||||
|
||||
private loadPage = async (page: number, pageSize = PAGE_SIZE) => {
|
||||
if (this.props.policyId) {
|
||||
@@ -73,26 +73,26 @@ export default class ChannelList extends React.PureComponent<Props, State> {
|
||||
await this.props.actions.getDataRetentionCustomPolicyChannels(this.props.policyId, page, pageSize);
|
||||
this.setStateLoading(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private nextPage = () => {
|
||||
const page = this.state.page + 1;
|
||||
this.loadPage(page + 1);
|
||||
this.setStatePage(page);
|
||||
}
|
||||
};
|
||||
|
||||
private previousPage = () => {
|
||||
const page = this.state.page - 1;
|
||||
this.loadPage(page + 1);
|
||||
this.setStatePage(page);
|
||||
}
|
||||
};
|
||||
|
||||
private getVisibleTotalCount = (): number => {
|
||||
const {channelsToAdd, channelsToRemove, totalCount} = this.props;
|
||||
const channelsToAddCount = Object.keys(channelsToAdd).length;
|
||||
const channelsToRemoveCount = Object.keys(channelsToRemove).length;
|
||||
return totalCount + (channelsToAddCount - channelsToRemoveCount);
|
||||
}
|
||||
};
|
||||
|
||||
public getPaginationProps = (): {startCount: number; endCount: number; total: number} => {
|
||||
const {page} = this.state;
|
||||
@@ -105,7 +105,7 @@ export default class ChannelList extends React.PureComponent<Props, State> {
|
||||
endCount = endCount > total ? total : endCount;
|
||||
|
||||
return {startCount, endCount, total};
|
||||
}
|
||||
};
|
||||
|
||||
private removeChannel = (channel: ChannelWithTeamData) => {
|
||||
const {channelsToRemove} = this.props;
|
||||
@@ -122,7 +122,7 @@ export default class ChannelList extends React.PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
this.setStatePage(page);
|
||||
}
|
||||
};
|
||||
|
||||
getColumns = (): Column[] => {
|
||||
const name = (
|
||||
@@ -157,7 +157,7 @@ export default class ChannelList extends React.PureComponent<Props, State> {
|
||||
fixed: true,
|
||||
},
|
||||
];
|
||||
}
|
||||
};
|
||||
|
||||
getRows = () => {
|
||||
const {page} = this.state;
|
||||
@@ -235,11 +235,11 @@ export default class ChannelList extends React.PureComponent<Props, State> {
|
||||
},
|
||||
};
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
onSearch = async (searchTerm: string) => {
|
||||
this.props.actions.setChannelListSearch(searchTerm);
|
||||
}
|
||||
};
|
||||
public async componentDidUpdate(prevProps: Props) {
|
||||
const {policyId, searchTerm, filters} = this.props;
|
||||
const filtersModified = !isEqual(prevProps.filters, this.props.filters);
|
||||
@@ -284,7 +284,7 @@ export default class ChannelList extends React.PureComponent<Props, State> {
|
||||
filters.team_ids = teamIds.value as string[];
|
||||
}
|
||||
this.props.actions.setChannelListFilters(filters);
|
||||
}
|
||||
};
|
||||
render() {
|
||||
const rows: Row[] = this.getRows();
|
||||
const columns: Column[] = this.getColumns();
|
||||
|
||||
@@ -93,19 +93,19 @@ export default class CustomPolicyForm extends React.PureComponent<Props, State>
|
||||
|
||||
openAddChannel = () => {
|
||||
this.setState({addChannelOpen: true});
|
||||
}
|
||||
};
|
||||
|
||||
closeAddChannel = () => {
|
||||
this.setState({addChannelOpen: false});
|
||||
}
|
||||
};
|
||||
|
||||
openAddTeam = () => {
|
||||
this.setState({addTeamOpen: true});
|
||||
}
|
||||
};
|
||||
|
||||
closeAddTeam = () => {
|
||||
this.setState({addTeamOpen: false});
|
||||
}
|
||||
};
|
||||
getMessageRetentionDefaultInputValue = (): string => {
|
||||
if (!this.props.policy || Object.keys(this.props.policy).length === 0 || (this.props.policy && this.props.policy.post_duration === -1)) {
|
||||
return '';
|
||||
@@ -114,7 +114,7 @@ export default class CustomPolicyForm extends React.PureComponent<Props, State>
|
||||
return (this.props.policy.post_duration / 365).toString();
|
||||
}
|
||||
return this.props.policy.post_duration.toString();
|
||||
}
|
||||
};
|
||||
getMessageRetentionDefaultDropdownValue = () => {
|
||||
if (!this.props.policyId || (this.props.policy && this.props.policy.post_duration === -1)) {
|
||||
return keepForeverOption();
|
||||
@@ -123,11 +123,11 @@ export default class CustomPolicyForm extends React.PureComponent<Props, State>
|
||||
return yearsOption();
|
||||
}
|
||||
return daysOption();
|
||||
}
|
||||
};
|
||||
|
||||
componentDidMount = async () => {
|
||||
this.loadPage();
|
||||
}
|
||||
};
|
||||
private loadPage = async () => {
|
||||
if (this.props.policyId) {
|
||||
await this.props.actions.fetchPolicy(this.props.policyId);
|
||||
@@ -137,7 +137,7 @@ export default class CustomPolicyForm extends React.PureComponent<Props, State>
|
||||
messageRetentionDropdownValue: this.getMessageRetentionDefaultDropdownValue(),
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
addToNewTeams = (teams: Team[]) => {
|
||||
let {removedTeamsCount} = this.state;
|
||||
@@ -152,7 +152,7 @@ export default class CustomPolicyForm extends React.PureComponent<Props, State>
|
||||
});
|
||||
this.setState({newTeams: {...newTeams}, removedTeams: {...removedTeams}, removedTeamsCount, saveNeeded: true});
|
||||
this.props.actions.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
addToRemovedTeams = (team: Team) => {
|
||||
let {removedTeamsCount} = this.state;
|
||||
@@ -165,7 +165,7 @@ export default class CustomPolicyForm extends React.PureComponent<Props, State>
|
||||
}
|
||||
this.setState({removedTeams: {...removedTeams}, newTeams: {...newTeams}, removedTeamsCount, saveNeeded: true});
|
||||
this.props.actions.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
addToNewChannels = (channels: ChannelWithTeamData[]) => {
|
||||
let {removedChannelsCount} = this.state;
|
||||
@@ -180,7 +180,7 @@ export default class CustomPolicyForm extends React.PureComponent<Props, State>
|
||||
});
|
||||
this.setState({newChannels: {...newChannels}, removedChannels: {...removedChannels}, removedChannelsCount, saveNeeded: true});
|
||||
this.props.actions.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
addToRemovedChannels = (channel: ChannelWithTeamData) => {
|
||||
let {removedChannelsCount} = this.state;
|
||||
@@ -193,7 +193,7 @@ export default class CustomPolicyForm extends React.PureComponent<Props, State>
|
||||
}
|
||||
this.setState({removedChannels: {...removedChannels}, newChannels: {...newChannels}, removedChannelsCount, saveNeeded: true});
|
||||
this.props.actions.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
getTeamsToExclude = () => {
|
||||
const {teams} = this.props;
|
||||
@@ -210,7 +210,7 @@ export default class CustomPolicyForm extends React.PureComponent<Props, State>
|
||||
teamsToDisplay = [...includeTeamsList, ...teamsToDisplay];
|
||||
}
|
||||
return teamsToDisplay;
|
||||
}
|
||||
};
|
||||
handleSubmit = async () => {
|
||||
const {policyName, messageRetentionInputValue, messageRetentionDropdownValue, newTeams, removedTeams, newChannels, removedChannels} = this.state;
|
||||
const {policyId, policy} = this.props;
|
||||
@@ -302,7 +302,7 @@ export default class CustomPolicyForm extends React.PureComponent<Props, State>
|
||||
this.props.actions.setNavigationBlocked(false);
|
||||
getHistory().push('/admin_console/compliance/data_retention_settings');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
render = () => {
|
||||
const {serverError, formErrorText} = this.state;
|
||||
@@ -531,5 +531,5 @@ export default class CustomPolicyForm extends React.PureComponent<Props, State>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -65,9 +65,9 @@ export default class DataRetentionSettings extends React.PureComponent<Props, St
|
||||
deleteCustomPolicy = async (id: string) => {
|
||||
await this.props.actions.deleteDataRetentionCustomPolicy(id);
|
||||
this.loadPage(0);
|
||||
}
|
||||
};
|
||||
|
||||
includeBoards = this.props.config.PluginSettings?.PluginStates?.focalboard?.Enable && this.props.config.FeatureFlags?.BoardsDataRetention
|
||||
includeBoards = this.props.config.PluginSettings?.PluginStates?.focalboard?.Enable && this.props.config.FeatureFlags?.BoardsDataRetention;
|
||||
getGlobalPolicyColumns = (): Column[] => {
|
||||
const columns: Column[] = [
|
||||
{
|
||||
@@ -119,7 +119,7 @@ export default class DataRetentionSettings extends React.PureComponent<Props, St
|
||||
},
|
||||
);
|
||||
return columns;
|
||||
}
|
||||
};
|
||||
getCustomPolicyColumns = (): Column[] => {
|
||||
const columns: Column[] = [
|
||||
{
|
||||
@@ -156,7 +156,7 @@ export default class DataRetentionSettings extends React.PureComponent<Props, St
|
||||
},
|
||||
];
|
||||
return columns;
|
||||
}
|
||||
};
|
||||
getMessageRetentionSetting = (enabled: boolean | undefined, days: number | undefined): JSX.Element => {
|
||||
if (!enabled) {
|
||||
return (
|
||||
@@ -187,7 +187,7 @@ export default class DataRetentionSettings extends React.PureComponent<Props, St
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
getGlobalPolicyRows = (): Row[] => {
|
||||
const {DataRetentionSettings} = this.props.config;
|
||||
return [{
|
||||
@@ -240,7 +240,7 @@ export default class DataRetentionSettings extends React.PureComponent<Props, St
|
||||
getHistory().push('/admin_console/compliance/data_retention_settings/global_policy');
|
||||
},
|
||||
}];
|
||||
}
|
||||
};
|
||||
getChannelAndTeamCounts = (policy: DataRetentionCustomPolicy): JSX.Element => {
|
||||
if (policy.channel_count === 0 && policy.team_count === 0) {
|
||||
return (
|
||||
@@ -260,7 +260,7 @@ export default class DataRetentionSettings extends React.PureComponent<Props, St
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
getCustomPolicyRows = (startCount: number, endCount: number): Row[] => {
|
||||
let policies = Object.values(this.props.customPolicies);
|
||||
policies = policies.slice(startCount - 1, endCount);
|
||||
@@ -333,18 +333,18 @@ export default class DataRetentionSettings extends React.PureComponent<Props, St
|
||||
this.setState({customPoliciesLoading: true});
|
||||
await this.props.actions.getDataRetentionCustomPolicies(page);
|
||||
this.setState({page, customPoliciesLoading: false});
|
||||
}
|
||||
};
|
||||
componentDidMount = async () => {
|
||||
await this.loadPage(this.state.page);
|
||||
}
|
||||
};
|
||||
|
||||
private nextPage = () => {
|
||||
this.loadPage(this.state.page + 1);
|
||||
}
|
||||
};
|
||||
|
||||
private previousPage = () => {
|
||||
this.loadPage(this.state.page - 1);
|
||||
}
|
||||
};
|
||||
|
||||
public getPaginationProps = (): {startCount: number; endCount: number; total: number} => {
|
||||
const {page} = this.state;
|
||||
@@ -354,17 +354,17 @@ export default class DataRetentionSettings extends React.PureComponent<Props, St
|
||||
endCount = endCount > total ? total : endCount;
|
||||
|
||||
return {startCount, endCount, total};
|
||||
}
|
||||
};
|
||||
|
||||
showEditJobTime = (value: boolean) => {
|
||||
this.setState({showEditJobTime: value});
|
||||
}
|
||||
};
|
||||
|
||||
componentDidUpdate = (prevProps: Props, prevState: State) => {
|
||||
if (prevState.showEditJobTime !== this.state.showEditJobTime && this.state.showEditJobTime) {
|
||||
this.inputRef.current?.focus();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
handleCreateJob = async (e?: React.SyntheticEvent) => {
|
||||
e?.preventDefault();
|
||||
@@ -382,7 +382,7 @@ export default class DataRetentionSettings extends React.PureComponent<Props, St
|
||||
|
||||
await this.props.actions.updateConfig(newConfig);
|
||||
this.inputRef.current?.blur();
|
||||
}
|
||||
};
|
||||
|
||||
getJobStartTime = (): JSX.Element | null => {
|
||||
const {DataRetentionSettings} = this.props.config;
|
||||
@@ -417,7 +417,7 @@ export default class DataRetentionSettings extends React.PureComponent<Props, St
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
getJobTimeOptions = () => {
|
||||
const options: OptionType[] = [];
|
||||
return () => {
|
||||
@@ -445,7 +445,7 @@ export default class DataRetentionSettings extends React.PureComponent<Props, St
|
||||
|
||||
return options;
|
||||
};
|
||||
}
|
||||
};
|
||||
getJobTimes = this.getJobTimeOptions();
|
||||
|
||||
render = () => {
|
||||
@@ -653,5 +653,5 @@ export default class DataRetentionSettings extends React.PureComponent<Props, St
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ export default class GlobalPolicyForm extends React.PureComponent<Props, State>
|
||||
};
|
||||
}
|
||||
|
||||
includeBoards = this.props.config.PluginSettings?.PluginStates?.focalboard?.Enable && this.props.config.FeatureFlags?.BoardsDataRetention
|
||||
includeBoards = this.props.config.PluginSettings?.PluginStates?.focalboard?.Enable && this.props.config.FeatureFlags?.BoardsDataRetention;
|
||||
|
||||
getDefaultInputValue = (isEnabled: boolean | undefined, days: number | undefined): string => {
|
||||
if (!isEnabled || days === undefined) {
|
||||
@@ -70,7 +70,7 @@ export default class GlobalPolicyForm extends React.PureComponent<Props, State>
|
||||
return (days / 365).toString();
|
||||
}
|
||||
return days.toString();
|
||||
}
|
||||
};
|
||||
getDefaultDropdownValue = (isEnabled: boolean | undefined, days: number | undefined) => {
|
||||
if (!isEnabled || days === undefined) {
|
||||
return keepForeverOption();
|
||||
@@ -79,7 +79,7 @@ export default class GlobalPolicyForm extends React.PureComponent<Props, State>
|
||||
return yearsOption();
|
||||
}
|
||||
return daysOption();
|
||||
}
|
||||
};
|
||||
|
||||
handleSubmit = async () => {
|
||||
const {messageRetentionDropdownValue, messageRetentionInputValue, fileRetentionDropdownValue, fileRetentionInputValue, boardsRetentionDropdownValue, boardsRetentionInputValue} = this.state;
|
||||
@@ -128,7 +128,7 @@ export default class GlobalPolicyForm extends React.PureComponent<Props, State>
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
setRetentionDays = (dropdownValue: string, value: string): number => {
|
||||
if (dropdownValue === YEARS) {
|
||||
@@ -140,7 +140,7 @@ export default class GlobalPolicyForm extends React.PureComponent<Props, State>
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
render = () => {
|
||||
return (
|
||||
@@ -290,5 +290,5 @@ export default class GlobalPolicyForm extends React.PureComponent<Props, State>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -52,14 +52,14 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
|
||||
componentDidMount = () => {
|
||||
this.loadPage(0, PAGE_SIZE * 2);
|
||||
}
|
||||
};
|
||||
|
||||
private setStateLoading = (loading: boolean) => {
|
||||
this.setState({loading});
|
||||
}
|
||||
};
|
||||
private setStatePage = (page: number) => {
|
||||
this.setState({page});
|
||||
}
|
||||
};
|
||||
|
||||
private loadPage = async (page: number, pageSize = PAGE_SIZE) => {
|
||||
if (this.props.policyId) {
|
||||
@@ -67,26 +67,26 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
await this.props.actions.getDataRetentionCustomPolicyTeams(this.props.policyId, page, pageSize);
|
||||
this.setStateLoading(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private nextPage = () => {
|
||||
const page = this.state.page + 1;
|
||||
this.loadPage(page + 1);
|
||||
this.setStatePage(page);
|
||||
}
|
||||
};
|
||||
|
||||
private previousPage = () => {
|
||||
const page = this.state.page - 1;
|
||||
this.loadPage(page + 1);
|
||||
this.setStatePage(page);
|
||||
}
|
||||
};
|
||||
|
||||
private getVisibleTotalCount = (): number => {
|
||||
const {teamsToAdd, teamsToRemove, totalCount} = this.props;
|
||||
const teamsToAddCount = Object.keys(teamsToAdd).length;
|
||||
const teamsToRemoveCount = Object.keys(teamsToRemove).length;
|
||||
return totalCount + (teamsToAddCount - teamsToRemoveCount);
|
||||
}
|
||||
};
|
||||
|
||||
public getPaginationProps = (): {startCount: number; endCount: number; total: number} => {
|
||||
const {page} = this.state;
|
||||
@@ -98,7 +98,7 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
endCount = endCount > total ? total : endCount;
|
||||
|
||||
return {startCount, endCount, total};
|
||||
}
|
||||
};
|
||||
|
||||
private removeTeam = (team: Team) => {
|
||||
const {teamsToRemove} = this.props;
|
||||
@@ -115,7 +115,7 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
this.setStatePage(page);
|
||||
}
|
||||
};
|
||||
|
||||
getColumns = (): Column[] => {
|
||||
const name = (
|
||||
@@ -139,7 +139,7 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
className: 'TeamList__actionColumn',
|
||||
},
|
||||
];
|
||||
}
|
||||
};
|
||||
|
||||
getRows = () => {
|
||||
const {page} = this.state;
|
||||
@@ -203,11 +203,11 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
},
|
||||
};
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
onSearch = async (searchTerm: string) => {
|
||||
this.props.actions.setTeamListSearch(searchTerm);
|
||||
}
|
||||
};
|
||||
public async componentDidUpdate(prevProps: Props) {
|
||||
const {searchTerm} = this.props;
|
||||
const searchTermModified = prevProps.searchTerm !== this.props.searchTerm;
|
||||
|
||||
@@ -32,7 +32,7 @@ export default class DatabaseSettings extends AdminSettings {
|
||||
config.ServiceSettings.MinimumHashtagLength = this.parseIntNonZero(this.state.minimumHashtagLength, 3, 2);
|
||||
|
||||
return config;
|
||||
}
|
||||
};
|
||||
|
||||
getStateFromConfig(config) {
|
||||
return {
|
||||
@@ -370,5 +370,5 @@ export default class DatabaseSettings extends AdminSettings {
|
||||
</div>
|
||||
</SettingsGroup>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -16,15 +16,15 @@ export default class DropdownSetting extends React.PureComponent {
|
||||
disabled: PropTypes.bool,
|
||||
setByEnv: PropTypes.bool.isRequired,
|
||||
helpText: PropTypes.node,
|
||||
}
|
||||
};
|
||||
|
||||
static defaultProps = {
|
||||
isDisabled: false,
|
||||
}
|
||||
};
|
||||
|
||||
handleChange = (e) => {
|
||||
this.props.onChange(this.props.id, e.target.value);
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const options = [];
|
||||
|
||||
@@ -33,7 +33,7 @@ export default class ElasticsearchSettings extends AdminSettings {
|
||||
config.ElasticsearchSettings.EnableAutocomplete = this.state.enableAutocomplete;
|
||||
|
||||
return config;
|
||||
}
|
||||
};
|
||||
|
||||
getStateFromConfig(config) {
|
||||
return {
|
||||
@@ -83,17 +83,17 @@ export default class ElasticsearchSettings extends AdminSettings {
|
||||
}
|
||||
|
||||
this.handleChange(id, value);
|
||||
}
|
||||
};
|
||||
|
||||
handleSaved = () => {
|
||||
this.setState({
|
||||
canPurgeAndIndex: this.state.enableIndexing,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
canSave = () => {
|
||||
return this.state.canSave;
|
||||
}
|
||||
};
|
||||
|
||||
doTestConfig = (success, error) => {
|
||||
const config = JSON.parse(JSON.stringify(this.props.config));
|
||||
@@ -116,7 +116,7 @@ export default class ElasticsearchSettings extends AdminSettings {
|
||||
error(err);
|
||||
},
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
getExtraInfo(job) {
|
||||
if (job.status === JobStatuses.IN_PROGRESS) {
|
||||
@@ -470,5 +470,5 @@ export default class ElasticsearchSettings extends AdminSettings {
|
||||
/>
|
||||
</SettingsGroup>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ export default class FeatureDiscovery extends React.PureComponent<Props, State>
|
||||
callerCTA: 'feature_discovery_subscribe_button',
|
||||
},
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
contactSalesFunc = () => {
|
||||
const {customer, isCloud} = this.props;
|
||||
@@ -107,7 +107,7 @@ export default class FeatureDiscovery extends React.PureComponent<Props, State>
|
||||
const companyName = customer?.name || '';
|
||||
const utmMedium = isCloud ? 'in-product-cloud' : 'in-product';
|
||||
goToMattermostContactSalesForm(firstName, lastName, companyName, customerEmail, 'mattermost', utmMedium);
|
||||
}
|
||||
};
|
||||
|
||||
renderPostTrialCta = () => {
|
||||
const {
|
||||
@@ -164,7 +164,7 @@ export default class FeatureDiscovery extends React.PureComponent<Props, State>
|
||||
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
renderStartTrial = (learnMoreURL: string, gettingTrialError: React.ReactNode) => {
|
||||
const {
|
||||
@@ -317,7 +317,7 @@ export default class FeatureDiscovery extends React.PureComponent<Props, State>
|
||||
</p>}
|
||||
</>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const {
|
||||
|
||||
@@ -39,7 +39,7 @@ export default class FileUploadSetting extends Setting {
|
||||
if (files && files.length > 0) {
|
||||
this.setState({fileSelected: true, fileName: files[0].name});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
handleSubmit = (e) => {
|
||||
e.preventDefault();
|
||||
@@ -51,7 +51,7 @@ export default class FileUploadSetting extends Setting {
|
||||
Utils.clearFileInput(this.fileInputRef.current);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
let serverError;
|
||||
|
||||
@@ -96,23 +96,23 @@ class Filter extends React.PureComponent<Props, State> {
|
||||
|
||||
componentDidMount = () => {
|
||||
document.addEventListener('mousedown', this.handleClickOutside);
|
||||
}
|
||||
};
|
||||
|
||||
componentWillUnmount = () => {
|
||||
document.removeEventListener('mousedown', this.handleClickOutside);
|
||||
}
|
||||
};
|
||||
|
||||
handleClickOutside = (event: MouseEvent) => {
|
||||
if (this.filterRef?.current?.contains(event.target as Node)) {
|
||||
return;
|
||||
}
|
||||
this.hidePopover();
|
||||
}
|
||||
};
|
||||
|
||||
hidePopover = () => {
|
||||
this.setState({show: false});
|
||||
this.buttonRef?.current?.blur();
|
||||
}
|
||||
};
|
||||
|
||||
togglePopover = () => {
|
||||
if (this.state.show) {
|
||||
@@ -121,7 +121,7 @@ class Filter extends React.PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
this.setState({show: true});
|
||||
}
|
||||
};
|
||||
|
||||
updateValues = async (values: FilterValues, optionKey: string) => {
|
||||
const options = {
|
||||
@@ -134,12 +134,12 @@ class Filter extends React.PureComponent<Props, State> {
|
||||
},
|
||||
};
|
||||
this.setState({options, optionsModified: true});
|
||||
}
|
||||
};
|
||||
|
||||
onFilter = () => {
|
||||
this.props.onFilter(this.state.options);
|
||||
this.setState({optionsModified: false, show: false, filterCount: this.calculateFilterCount()});
|
||||
}
|
||||
};
|
||||
|
||||
calculateFilterCount = () => {
|
||||
const options = this.state.options;
|
||||
@@ -155,11 +155,11 @@ class Filter extends React.PureComponent<Props, State> {
|
||||
});
|
||||
});
|
||||
return filterCount;
|
||||
}
|
||||
};
|
||||
|
||||
resetFilters = () => {
|
||||
this.setState({options: {...this.props.options}}, this.onFilter);
|
||||
}
|
||||
};
|
||||
|
||||
renderFilterOptions = () => {
|
||||
const {keys, options} = this.state;
|
||||
@@ -176,7 +176,7 @@ class Filter extends React.PureComponent<Props, State> {
|
||||
/>
|
||||
);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const filters = this.renderFilterOptions();
|
||||
|
||||
@@ -16,7 +16,7 @@ class FilterCheckbox extends React.PureComponent<Props> {
|
||||
e.stopPropagation();
|
||||
const {checked, name, updateOption} = this.props;
|
||||
updateOption(!checked, name);
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const {name, checked, label} = this.props;
|
||||
|
||||
@@ -23,7 +23,7 @@ class FilterList extends React.PureComponent<Props> {
|
||||
},
|
||||
};
|
||||
await this.props.updateValues(values, this.props.optionKey);
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const {option} = this.props;
|
||||
|
||||
@@ -15,7 +15,7 @@ class TeamFilterCheckbox extends React.PureComponent<Props> {
|
||||
toggleOption = () => {
|
||||
const {checked, id, updateOption} = this.props;
|
||||
updateOption(!checked, id);
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const {
|
||||
|
||||
@@ -100,11 +100,11 @@ class TeamFilterDropdown extends React.PureComponent<Props, State> {
|
||||
|
||||
componentWillUnmount = () => {
|
||||
document.removeEventListener('mousedown', this.handleClickOutside);
|
||||
}
|
||||
};
|
||||
|
||||
hidePopover = () => {
|
||||
this.setState({show: false});
|
||||
}
|
||||
};
|
||||
|
||||
togglePopover = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
|
||||
if (this.state.show) {
|
||||
@@ -125,18 +125,18 @@ class TeamFilterDropdown extends React.PureComponent<Props, State> {
|
||||
this.listRef.current.scrollTop = 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
handleClickOutside = (event: MouseEvent) => {
|
||||
if (this.ref?.current?.contains(event.target as Node)) {
|
||||
return;
|
||||
}
|
||||
this.hidePopover();
|
||||
}
|
||||
};
|
||||
|
||||
setScrollPosition = (event: React.UIEvent<HTMLDivElement, UIEvent>) => {
|
||||
this.scrollPosition = (event.target as HTMLDivElement).scrollTop;
|
||||
}
|
||||
};
|
||||
|
||||
hasMore = (): boolean => {
|
||||
if (this.state.loading) {
|
||||
@@ -145,7 +145,7 @@ class TeamFilterDropdown extends React.PureComponent<Props, State> {
|
||||
return this.state.searchTotal > this.state.searchResults.length;
|
||||
}
|
||||
return this.props.total > (this.state.page + 1) * TEAMS_PER_PAGE;
|
||||
}
|
||||
};
|
||||
|
||||
loadMore = async () => {
|
||||
const {searchTerm, loading} = this.state;
|
||||
@@ -165,7 +165,7 @@ class TeamFilterDropdown extends React.PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
this.setState({page, loading: false});
|
||||
}
|
||||
};
|
||||
|
||||
searchTeams = async (term: string, page: number) => {
|
||||
let searchResults = [];
|
||||
@@ -180,7 +180,7 @@ class TeamFilterDropdown extends React.PureComponent<Props, State> {
|
||||
}
|
||||
this.searchRetryInterval *= 2;
|
||||
this.searchRetryId = window.setTimeout(this.searchTeams.bind(null, term, page), this.searchRetryInterval);
|
||||
}
|
||||
};
|
||||
|
||||
searchTeamsDebounced = debounce((page, term) => this.searchTeams(term, page), INITIAL_SEARCH_RETRY_TIMEOUT, false, () => {});
|
||||
|
||||
@@ -203,12 +203,12 @@ class TeamFilterDropdown extends React.PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
this.searchTeamsDebounced(0, searchTerm);
|
||||
}
|
||||
};
|
||||
|
||||
resetTeams = () => {
|
||||
this.setState({savedSelectedTeams: [], show: false, searchResults: [], searchTotal: 0, page: 0, searchTerm: ''});
|
||||
this.props.updateValues({team_ids: {name: 'Teams', value: []}}, 'teams');
|
||||
}
|
||||
};
|
||||
|
||||
toggleTeam = (checked: boolean, teamId: string) => {
|
||||
const prevSelectedTeamIds = this.props.option.values.team_ids.value as string[];
|
||||
@@ -220,7 +220,7 @@ class TeamFilterDropdown extends React.PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
this.props.updateValues({team_ids: {name: 'Teams', value: selectedTeamIds}}, 'teams');
|
||||
}
|
||||
};
|
||||
|
||||
generateButtonText = () => {
|
||||
const selectedTeamIds = this.props.option.values.team_ids.value as string[];
|
||||
@@ -252,7 +252,7 @@ class TeamFilterDropdown extends React.PureComponent<Props, State> {
|
||||
});
|
||||
|
||||
return {buttonText, buttonMore};
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const selectedTeamIds = this.props.option.values.team_ids.value as string[];
|
||||
|
||||
@@ -42,12 +42,12 @@ export default class FullLogEventModal extends React.PureComponent<Props, State>
|
||||
</pre>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
copyLog = () => {
|
||||
navigator.clipboard.writeText(JSON.stringify(this.props.log, undefined, 2));
|
||||
this.showCopySuccess();
|
||||
}
|
||||
};
|
||||
|
||||
exportToCsv = () => {
|
||||
const file = navigator.clipboard.writeText(JSON.stringify(this.props.log, undefined, 2));
|
||||
@@ -55,7 +55,7 @@ export default class FullLogEventModal extends React.PureComponent<Props, State>
|
||||
const encodedUri = encodeURI(csvContent);
|
||||
window.open(encodedUri);
|
||||
this.showExportSuccess();
|
||||
}
|
||||
};
|
||||
|
||||
showCopySuccess = () => {
|
||||
this.setState({
|
||||
@@ -67,7 +67,7 @@ export default class FullLogEventModal extends React.PureComponent<Props, State>
|
||||
copySuccess: false,
|
||||
});
|
||||
}, 3000);
|
||||
}
|
||||
};
|
||||
|
||||
showExportSuccess = () => {
|
||||
this.setState({
|
||||
@@ -79,7 +79,7 @@ export default class FullLogEventModal extends React.PureComponent<Props, State>
|
||||
exportSuccess: false,
|
||||
});
|
||||
}, 3000);
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
return (
|
||||
|
||||
@@ -39,7 +39,7 @@ export default class GeneratedSetting extends React.PureComponent<Props> {
|
||||
e.preventDefault();
|
||||
|
||||
this.props.onChange(this.props.id, crypto.randomBytes(256).toString('base64').substring(0, 32));
|
||||
}
|
||||
};
|
||||
|
||||
public render() {
|
||||
let disabledText = null;
|
||||
|
||||
@@ -88,7 +88,7 @@ export default class GroupsList extends React.PureComponent<Props, State> {
|
||||
|
||||
public closeFilters = () => {
|
||||
this.setState({showFilters: false});
|
||||
}
|
||||
};
|
||||
|
||||
public componentDidMount() {
|
||||
this.props.actions.getLdapGroups(this.state.page, LDAP_GROUPS_PAGE_SIZE).then(() => {
|
||||
@@ -222,7 +222,7 @@ export default class GroupsList extends React.PureComponent<Props, State> {
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
public renderRows(): JSX.Element | JSX.Element[] {
|
||||
if (this.state.loading) {
|
||||
@@ -437,7 +437,7 @@ export default class GroupsList extends React.PureComponent<Props, State> {
|
||||
this.props.actions.getLdapGroups(this.state.page, LDAP_GROUPS_PAGE_SIZE, {q: ''}).then(() => {
|
||||
this.setState({loading: false});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
public render(): JSX.Element {
|
||||
const startCount = (this.state.page * LDAP_GROUPS_PAGE_SIZE) + 1;
|
||||
|
||||
@@ -60,7 +60,7 @@ class JobTable extends React.PureComponent<Props> {
|
||||
}
|
||||
|
||||
return <span/>;
|
||||
}
|
||||
};
|
||||
|
||||
reload = () => {
|
||||
this.props.actions.getJobsByType(this.props.jobType);
|
||||
|
||||
@@ -145,14 +145,14 @@ export default class LicenseSettings extends React.PureComponent<Props, State> {
|
||||
this.interval = setInterval(this.reloadPercentage, 2000);
|
||||
}
|
||||
this.setState({upgradingPercentage: percentage || 0, upgradeError: error as string});
|
||||
}
|
||||
};
|
||||
|
||||
handleChange = () => {
|
||||
const element = this.fileInputRef.current;
|
||||
if (element?.files?.length) {
|
||||
this.setState({fileSelected: true, file: element.files[0]});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
openEELicenseModal = async () => {
|
||||
this.props.actions.openModal({
|
||||
@@ -183,7 +183,7 @@ export default class LicenseSettings extends React.PureComponent<Props, State> {
|
||||
this.props.actions.getPrevTrialLicense();
|
||||
await this.props.actions.getLicenseConfig();
|
||||
this.setState({serverError: null, removing: false});
|
||||
}
|
||||
};
|
||||
|
||||
handleUpgrade = async (e?: React.MouseEvent<HTMLButtonElement>) => {
|
||||
if (e) {
|
||||
@@ -200,7 +200,7 @@ export default class LicenseSettings extends React.PureComponent<Props, State> {
|
||||
trackEvent('api', 'upgrade_to_e0_failed', {error: error.message as string});
|
||||
this.setState({upgradeError: error.message, upgradingPercentage: 0});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
checkRestarted = () => {
|
||||
this.props.actions.ping().then(() => {
|
||||
@@ -208,7 +208,7 @@ export default class LicenseSettings extends React.PureComponent<Props, State> {
|
||||
}).catch(() => {
|
||||
setTimeout(this.checkRestarted, 1000);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
handleRestart = async (e?: React.MouseEvent<HTMLButtonElement>) => {
|
||||
if (e) {
|
||||
@@ -221,11 +221,11 @@ export default class LicenseSettings extends React.PureComponent<Props, State> {
|
||||
this.setState({restarting: false, restartError: err as string});
|
||||
}
|
||||
setTimeout(this.checkRestarted, 1000);
|
||||
}
|
||||
};
|
||||
|
||||
setClickNormalUpgradeBtn = () => {
|
||||
this.setState({clickNormalUpgradeBtn: true});
|
||||
}
|
||||
};
|
||||
|
||||
currentPlan = (
|
||||
<div className='current-plan-legend'>
|
||||
@@ -244,7 +244,7 @@ export default class LicenseSettings extends React.PureComponent<Props, State> {
|
||||
{text}
|
||||
</ExternalLink>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
termsAndPolicy = (
|
||||
<div className='terms-and-policy'>
|
||||
@@ -400,5 +400,5 @@ export default class LicenseSettings extends React.PureComponent<Props, State> {
|
||||
);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ export default class ManageRolesModal extends React.PureComponent<Props, State>
|
||||
this.setState({
|
||||
error,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
handleSystemAdminChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
if (e.target.name === 'systemadmin') {
|
||||
@@ -115,7 +115,7 @@ export default class ManageRolesModal extends React.PureComponent<Props, State>
|
||||
} else if (!UserUtils.hasPostAllPublicRole(roles) && UserUtils.hasPostAllPublicRole(oldRoles)) {
|
||||
trackEvent('actions', 'remove_roles', {role: General.SYSTEM_POST_ALL_PUBLIC_ROLE});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
handleSave = async () => {
|
||||
this.setState({error: null});
|
||||
@@ -146,7 +146,7 @@ export default class ManageRolesModal extends React.PureComponent<Props, State>
|
||||
/>,
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
renderContents = () => {
|
||||
const {user} = this.props;
|
||||
@@ -335,7 +335,7 @@ export default class ManageRolesModal extends React.PureComponent<Props, State>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
return (
|
||||
|
||||
@@ -69,7 +69,7 @@ export default class ManageTokensModal extends React.PureComponent<Props, State>
|
||||
this.setState({
|
||||
error,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
private renderContents = (): JSX.Element => {
|
||||
const {user, userAccessTokens} = this.props;
|
||||
@@ -181,7 +181,7 @@ export default class ManageTokensModal extends React.PureComponent<Props, State>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
public render = (): JSX.Element => {
|
||||
return (
|
||||
@@ -209,5 +209,5 @@ export default class ManageTokensModal extends React.PureComponent<Props, State>
|
||||
</Modal.Body>
|
||||
</Modal>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -96,7 +96,7 @@ export default class MemberListGroup extends React.PureComponent<Props, State> {
|
||||
|
||||
loadComplete = () => {
|
||||
this.setState({loading: false});
|
||||
}
|
||||
};
|
||||
|
||||
private nextPage = async () => {
|
||||
const {actions, groupID} = this.props;
|
||||
@@ -104,11 +104,11 @@ export default class MemberListGroup extends React.PureComponent<Props, State> {
|
||||
this.setState({loading: true, page});
|
||||
await actions.getProfilesInGroup(groupID, page, USERS_PER_PAGE * 2);
|
||||
this.setState({loading: false});
|
||||
}
|
||||
};
|
||||
|
||||
private previousPage = () => {
|
||||
this.setState({page: this.state.page - 1});
|
||||
}
|
||||
};
|
||||
|
||||
private getRows = (): Row[] => {
|
||||
const {users} = this.props;
|
||||
@@ -129,7 +129,7 @@ export default class MemberListGroup extends React.PureComponent<Props, State> {
|
||||
},
|
||||
};
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
private getColumns = (): Column[] => {
|
||||
return [
|
||||
@@ -143,7 +143,7 @@ export default class MemberListGroup extends React.PureComponent<Props, State> {
|
||||
field: 'name',
|
||||
},
|
||||
];
|
||||
}
|
||||
};
|
||||
|
||||
private getPaginationProps = () => {
|
||||
let {total} = this.props;
|
||||
@@ -158,7 +158,7 @@ export default class MemberListGroup extends React.PureComponent<Props, State> {
|
||||
endCount = total;
|
||||
}
|
||||
return {startCount, endCount, total};
|
||||
}
|
||||
};
|
||||
|
||||
public render = (): JSX.Element => {
|
||||
const rows: Row[] = this.getRows();
|
||||
@@ -190,5 +190,5 @@ export default class MemberListGroup extends React.PureComponent<Props, State> {
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ export default class MessageExportSettings extends AdminSettings {
|
||||
};
|
||||
}
|
||||
return config;
|
||||
}
|
||||
};
|
||||
|
||||
getStateFromConfig(config) {
|
||||
const state = {
|
||||
@@ -321,5 +321,5 @@ export default class MessageExportSettings extends AdminSettings {
|
||||
/>
|
||||
</SettingsGroup>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ export default class MultiSelectSetting extends React.PureComponent {
|
||||
|
||||
this.props.onChange(this.props.id, values);
|
||||
this.setState({error: false});
|
||||
}
|
||||
};
|
||||
|
||||
calculateValue = () => {
|
||||
return this.props.selected.reduce((values, item) => {
|
||||
|
||||
@@ -73,7 +73,7 @@ export default class OpenIdConvert extends React.PureComponent<Props, State> {
|
||||
} else {
|
||||
getHistory().push('/admin_console/authentication/openid');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
return (
|
||||
|
||||
@@ -78,7 +78,7 @@ export default class PasswordSettings extends AdminSettings {
|
||||
config.ServiceSettings.MaximumLoginAttempts = this.parseIntNonZero(this.state.maximumLoginAttempts, Constants.MAXIMUM_LOGIN_ATTEMPTS_DEFAULT);
|
||||
|
||||
return config;
|
||||
}
|
||||
};
|
||||
|
||||
getStateFromConfig(config) {
|
||||
return {
|
||||
@@ -123,17 +123,17 @@ export default class PasswordSettings extends AdminSettings {
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
handlePasswordLengthChange = (id, value) => {
|
||||
this.handleChange(id, value);
|
||||
}
|
||||
};
|
||||
|
||||
handleCheckboxChange = (id) => {
|
||||
return ({target: {checked}}) => {
|
||||
this.handleChange(id, checked);
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
renderTitle() {
|
||||
return (
|
||||
@@ -283,5 +283,5 @@ export default class PasswordSettings extends AdminSettings {
|
||||
}
|
||||
</SettingsGroup>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -70,21 +70,21 @@ export default class PermissionGroup extends React.PureComponent<Props, State> {
|
||||
toggleExpanded = (e: MouseEvent) => {
|
||||
e.stopPropagation();
|
||||
this.setState({expanded: !this.state.expanded});
|
||||
}
|
||||
};
|
||||
|
||||
toggleSelectRow = (id: string) => {
|
||||
if (this.props.readOnly) {
|
||||
return;
|
||||
}
|
||||
this.props.onChange([id]);
|
||||
}
|
||||
};
|
||||
|
||||
toggleSelectSubGroup = (ids: string[]) => {
|
||||
if (this.props.readOnly) {
|
||||
return;
|
||||
}
|
||||
this.props.onChange(ids);
|
||||
}
|
||||
};
|
||||
|
||||
toggleSelectGroup = () => {
|
||||
const {readOnly, permissions, role, onChange} = this.props;
|
||||
@@ -129,7 +129,7 @@ export default class PermissionGroup extends React.PureComponent<Props, State> {
|
||||
this.setState({prevPermissions: role.permissions || [], expanded: false});
|
||||
onChange(permissionsToToggle);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
isInScope = (permission: string) => {
|
||||
if (this.props.scope === 'channel_scope' && PermissionsScope[permission] !== 'channel_scope') {
|
||||
@@ -139,7 +139,7 @@ export default class PermissionGroup extends React.PureComponent<Props, State> {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
renderPermission = (permission: string, additionalValues: AdditionalValues) => {
|
||||
if (!this.isInScope(permission)) {
|
||||
@@ -162,7 +162,7 @@ export default class PermissionGroup extends React.PureComponent<Props, State> {
|
||||
additionalValues={additionalValues}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
renderGroup = (g: Permission) => {
|
||||
return (
|
||||
@@ -183,11 +183,11 @@ export default class PermissionGroup extends React.PureComponent<Props, State> {
|
||||
root={false}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
fromParent = (id: string) => {
|
||||
return this.props.parentRole && this.props.parentRole.permissions?.indexOf(id) !== -1;
|
||||
}
|
||||
};
|
||||
|
||||
getStatus = (permissions: Permissions) => {
|
||||
let anyChecked = false;
|
||||
@@ -219,11 +219,11 @@ export default class PermissionGroup extends React.PureComponent<Props, State> {
|
||||
return 'checked';
|
||||
}
|
||||
return '';
|
||||
}
|
||||
};
|
||||
|
||||
hasPermissionsOnScope = () => {
|
||||
return getRecursivePermissions(this.props.permissions).some((permission) => this.isInScope(permission));
|
||||
}
|
||||
};
|
||||
|
||||
allPermissionsFromParent = (permissions: Permissions) => {
|
||||
for (const permission of permissions) {
|
||||
@@ -238,7 +238,7 @@ export default class PermissionGroup extends React.PureComponent<Props, State> {
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
render = () => {
|
||||
const {id, uniqId, permissions, readOnly, combined, root, selected, additionalValues} = this.props;
|
||||
|
||||
@@ -89,7 +89,7 @@ export default class PermissionSchemesSettings extends React.PureComponent<Props
|
||||
}
|
||||
Promise.all(promises).then(() => this.setState({loadingMore: false, page: this.state.page + 1}));
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// |RunJobs && !EnableCluster|(*App).IsPhase2MigrationCompleted|View |
|
||||
// |-------------------------|---------------------------------|-------------------------------------------------------|
|
||||
@@ -127,7 +127,7 @@ export default class PermissionSchemesSettings extends React.PureComponent<Props
|
||||
'Migration job on hold: Team Override Schemes are not available until the job server can execute the permissions migration. The job will be automatically started when the job server is enabled. Learn more in the {documentationLink}.',
|
||||
docLink,
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
teamOverrideUnavalableView = (id: string, defaultMsg: string, documentationLink: React.ReactNode) => {
|
||||
return (
|
||||
@@ -211,7 +211,7 @@ export default class PermissionSchemesSettings extends React.PureComponent<Props
|
||||
);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
render = () => {
|
||||
if (this.state.loading) {
|
||||
|
||||
@@ -127,7 +127,7 @@ export default class PermissionSystemSchemeSettings extends React.PureComponent<
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
selectRow = (permission: string) => {
|
||||
this.setState({selectedPermission: permission});
|
||||
@@ -139,7 +139,7 @@ export default class PermissionSystemSchemeSettings extends React.PureComponent<
|
||||
setTimeout(() => {
|
||||
this.setState({selectedPermission: undefined});
|
||||
}, 3000);
|
||||
}
|
||||
};
|
||||
|
||||
loadRolesIntoState(props: Props) {
|
||||
this.setState({
|
||||
@@ -195,7 +195,7 @@ export default class PermissionSystemSchemeSettings extends React.PureComponent<
|
||||
permissions: role.permissions?.filter((p) => PermissionsScope[p] === 'run_scope'),
|
||||
},
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
deriveRolesFromGuests = (role: Partial<Role>): Record<string, Partial<Role>> => {
|
||||
return {
|
||||
@@ -212,7 +212,7 @@ export default class PermissionSystemSchemeSettings extends React.PureComponent<
|
||||
permissions: role.permissions?.filter((p) => PermissionsScope[p] === 'channel_scope'),
|
||||
},
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
restoreExcludedPermissions = (roles: Record<string, Partial<Role>>) => {
|
||||
for (const permission of this.props.roles.system_user.permissions) {
|
||||
@@ -236,7 +236,7 @@ export default class PermissionSystemSchemeSettings extends React.PureComponent<
|
||||
}
|
||||
}
|
||||
return roles;
|
||||
}
|
||||
};
|
||||
|
||||
restoreGuestPermissions = (roles: Record<string, Partial<Role>>) => {
|
||||
for (const permission of this.props.roles.system_guest.permissions) {
|
||||
@@ -255,7 +255,7 @@ export default class PermissionSystemSchemeSettings extends React.PureComponent<
|
||||
}
|
||||
}
|
||||
return roles;
|
||||
}
|
||||
};
|
||||
|
||||
handleSubmit = async () => {
|
||||
const teamAdminPromise = this.props.actions.editRole(this.state.roles.team_admin);
|
||||
@@ -303,13 +303,13 @@ export default class PermissionSystemSchemeSettings extends React.PureComponent<
|
||||
|
||||
this.setState({serverError, saving: false, saveNeeded});
|
||||
this.props.actions.setNavigationBlocked(saveNeeded);
|
||||
}
|
||||
};
|
||||
|
||||
toggleRole = (roleId: string) => {
|
||||
const newOpenRoles = {...this.state.openRoles};
|
||||
newOpenRoles[roleId] = !newOpenRoles[roleId];
|
||||
this.setState({openRoles: newOpenRoles});
|
||||
}
|
||||
};
|
||||
|
||||
togglePermission = (roleId: string, permissions: Iterable<string>) => {
|
||||
const roles = {...this.state.roles};
|
||||
@@ -327,7 +327,7 @@ export default class PermissionSystemSchemeSettings extends React.PureComponent<
|
||||
|
||||
this.setState({roles, saveNeeded: true});
|
||||
this.props.actions.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
resetDefaults = () => {
|
||||
const newRolesState = JSON.parse(JSON.stringify({...this.state.roles}));
|
||||
@@ -338,11 +338,11 @@ export default class PermissionSystemSchemeSettings extends React.PureComponent<
|
||||
|
||||
this.setState({roles: newRolesState, saveNeeded: true});
|
||||
this.props.actions.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
haveGuestAccountsPermissions = () => {
|
||||
return this.props.license.GuestAccountsPermissions === 'true';
|
||||
}
|
||||
};
|
||||
|
||||
render = () => {
|
||||
if (!this.state.loaded) {
|
||||
|
||||
@@ -110,7 +110,7 @@ export default class PermissionTeamSchemeSettings extends React.PureComponent<Pr
|
||||
|
||||
static defaultProps = {
|
||||
scheme: null,
|
||||
}
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
const rolesNeeded = [
|
||||
@@ -178,7 +178,7 @@ export default class PermissionTeamSchemeSettings extends React.PureComponent<Pr
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
goToSelectedRow = () => {
|
||||
const selected = document.querySelector('.permission-row.selected,.permission-group-row.selected');
|
||||
@@ -196,7 +196,7 @@ export default class PermissionTeamSchemeSettings extends React.PureComponent<Pr
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
selectRow = (permission: string) => {
|
||||
this.setState({selectedPermission: permission});
|
||||
@@ -208,7 +208,7 @@ export default class PermissionTeamSchemeSettings extends React.PureComponent<Pr
|
||||
setTimeout(() => {
|
||||
this.setState({selectedPermission: undefined});
|
||||
}, 3000);
|
||||
}
|
||||
};
|
||||
|
||||
getStateRoles = () => {
|
||||
if (this.state.roles !== null) {
|
||||
@@ -276,7 +276,7 @@ export default class PermissionTeamSchemeSettings extends React.PureComponent<Pr
|
||||
permissions: teamGuest?.permissions.concat(channelGuest?.permissions || []),
|
||||
},
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
deriveRolesFromGuests = (teamGuest: Role, channelGuest: Role, role: Role): RolesMap => {
|
||||
return {
|
||||
@@ -289,7 +289,7 @@ export default class PermissionTeamSchemeSettings extends React.PureComponent<Pr
|
||||
permissions: role.permissions.filter((p) => PermissionsScope[p] === 'channel_scope'),
|
||||
},
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
restoreGuestPermissions = (teamGuest: Role, channelGuest: Role, roles: RolesMap) => {
|
||||
for (const permission of teamGuest.permissions) {
|
||||
@@ -303,7 +303,7 @@ export default class PermissionTeamSchemeSettings extends React.PureComponent<Pr
|
||||
}
|
||||
}
|
||||
return roles;
|
||||
}
|
||||
};
|
||||
|
||||
deriveRolesFromAllUsers = (baseTeam: Role, baseChannel: Role, basePlaybookMember: Role, baseRunMember: Role, role: Role): RolesMap => {
|
||||
return {
|
||||
@@ -324,7 +324,7 @@ export default class PermissionTeamSchemeSettings extends React.PureComponent<Pr
|
||||
permissions: role.permissions?.filter((p) => PermissionsScope[p] === 'run_scope'),
|
||||
},
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
restoreExcludedPermissions = (baseTeam: Role, baseChannel: Role, roles: RolesMap) => {
|
||||
for (const permission of baseTeam.permissions) {
|
||||
@@ -338,17 +338,17 @@ export default class PermissionTeamSchemeSettings extends React.PureComponent<Pr
|
||||
}
|
||||
}
|
||||
return roles;
|
||||
}
|
||||
};
|
||||
|
||||
handleNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
this.setState({schemeName: e.target.value, saveNeeded: true});
|
||||
this.props.actions.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
handleDescriptionChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
|
||||
this.setState({schemeDescription: e.target.value, saveNeeded: true});
|
||||
this.props.actions.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
handleSubmit = async () => {
|
||||
const roles = this.getStateRoles();
|
||||
@@ -495,13 +495,13 @@ export default class PermissionTeamSchemeSettings extends React.PureComponent<Pr
|
||||
this.setState({serverError, saving: false, saveNeeded});
|
||||
this.props.actions.setNavigationBlocked(saveNeeded);
|
||||
this.props.history.push('/admin_console/user_management/permissions');
|
||||
}
|
||||
};
|
||||
|
||||
toggleRole = (roleId: 'all_users' | 'team_admin' | 'channel_admin' | 'guests' | 'playbook_admin') => {
|
||||
const newOpenRoles = {...this.state.openRoles};
|
||||
newOpenRoles[roleId] = !newOpenRoles[roleId];
|
||||
this.setState({openRoles: newOpenRoles});
|
||||
}
|
||||
};
|
||||
|
||||
togglePermission = (roleId: string, permissions: string[]) => {
|
||||
const roles = {...this.getStateRoles()} as RolesMap;
|
||||
@@ -543,17 +543,17 @@ export default class PermissionTeamSchemeSettings extends React.PureComponent<Pr
|
||||
|
||||
this.setState({roles, saveNeeded: true});
|
||||
this.props.actions.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
openAddTeam = () => {
|
||||
this.setState({addTeamOpen: true});
|
||||
}
|
||||
};
|
||||
|
||||
removeTeam = (teamId: string) => {
|
||||
const teams = (this.state.teams || this.props.teams).filter((team) => team.id !== teamId);
|
||||
this.setState({teams, saveNeeded: true});
|
||||
this.props.actions.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
addTeams = (teams: Team[]) => {
|
||||
const currentTeams = this.state.teams || this.props.teams || [];
|
||||
@@ -562,15 +562,15 @@ export default class PermissionTeamSchemeSettings extends React.PureComponent<Pr
|
||||
saveNeeded: true,
|
||||
});
|
||||
this.props.actions.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
closeAddTeam = () => {
|
||||
this.setState({addTeamOpen: false});
|
||||
}
|
||||
};
|
||||
|
||||
haveGuestAccountsPermissions = () => {
|
||||
return this.props.license.GuestAccountsPermissions === 'true';
|
||||
}
|
||||
};
|
||||
|
||||
render = () => {
|
||||
if (!this.isLoaded(this.props)) {
|
||||
|
||||
@@ -22,7 +22,7 @@ export default class TeamInList extends React.PureComponent<Props> {
|
||||
return;
|
||||
}
|
||||
onRemoveTeam(team.id);
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const {team, isDisabled} = this.props;
|
||||
|
||||
@@ -96,17 +96,17 @@ export default class PermissionsSchemeSummary extends React.PureComponent<Props
|
||||
onCancel={this.handleDeleteCanceled}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
stopPropagation = (e: React.MouseEvent<HTMLElement, MouseEvent>): void => {
|
||||
e.stopPropagation();
|
||||
}
|
||||
};
|
||||
|
||||
handleDeleteCanceled = (): void => {
|
||||
this.setState({
|
||||
showConfirmModal: false,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
handleDeleteConfirmed = async (): Promise<void> => {
|
||||
this.setState({deleting: true, serverError: undefined});
|
||||
@@ -116,7 +116,7 @@ export default class PermissionsSchemeSummary extends React.PureComponent<Props
|
||||
} else {
|
||||
this.setState({deleting: false, showConfirmModal: false});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
delete = (e: React.MouseEvent<HTMLAnchorElement, MouseEvent>): void => {
|
||||
e.stopPropagation();
|
||||
@@ -124,11 +124,11 @@ export default class PermissionsSchemeSummary extends React.PureComponent<Props
|
||||
return;
|
||||
}
|
||||
this.setState({showConfirmModal: true, serverError: undefined});
|
||||
}
|
||||
};
|
||||
|
||||
goToEdit = (): void => {
|
||||
this.props.history.push('/admin_console/user_management/permissions/team_override_scheme/' + this.props.scheme.id);
|
||||
}
|
||||
};
|
||||
|
||||
render = () => {
|
||||
const {scheme, isDisabled} = this.props;
|
||||
|
||||
@@ -260,15 +260,15 @@ export default class PermissionsTree extends React.PureComponent<Props, State> {
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
openPostTimeLimitModal = () => {
|
||||
this.setState({editTimeLimitModalIsVisible: true});
|
||||
}
|
||||
};
|
||||
|
||||
closePostTimeLimitModal = () => {
|
||||
this.setState({editTimeLimitModalIsVisible: false});
|
||||
}
|
||||
};
|
||||
|
||||
componentDidUpdate(prevProps: Props) {
|
||||
if (this.props.config !== prevProps.config || this.props.license !== prevProps.license) {
|
||||
@@ -281,7 +281,7 @@ export default class PermissionsTree extends React.PureComponent<Props, State> {
|
||||
return;
|
||||
}
|
||||
this.props.onToggle(this.props.role.name!, ids);
|
||||
}
|
||||
};
|
||||
|
||||
render = () => {
|
||||
return (
|
||||
|
||||
@@ -486,7 +486,7 @@ export default class PluginManagement extends AdminSettings<Props, State> {
|
||||
}
|
||||
|
||||
return config;
|
||||
}
|
||||
};
|
||||
|
||||
getStateFromConfig(config: Props['config']) {
|
||||
const state = {
|
||||
@@ -517,7 +517,7 @@ export default class PluginManagement extends AdminSettings<Props, State> {
|
||||
if (element.files && element.files.length > 0) {
|
||||
this.setState({fileSelected: true, file: element.files[0]});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
helpSubmitUpload = async (file: File, force: boolean) => {
|
||||
this.setState({uploading: true});
|
||||
@@ -561,7 +561,7 @@ export default class PluginManagement extends AdminSettings<Props, State> {
|
||||
uploading: false,
|
||||
loading: false,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
handleSubmitUpload = (e: React.SyntheticEvent) => {
|
||||
e.preventDefault();
|
||||
@@ -575,7 +575,7 @@ export default class PluginManagement extends AdminSettings<Props, State> {
|
||||
this.helpSubmitUpload(file, false);
|
||||
}
|
||||
Utils.clearFileInput(element);
|
||||
}
|
||||
};
|
||||
|
||||
handleOverwriteUploadPluginCancel = () => {
|
||||
this.setState({
|
||||
@@ -586,20 +586,20 @@ export default class PluginManagement extends AdminSettings<Props, State> {
|
||||
lastMessage: null,
|
||||
uploading: false,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
handleOverwriteUploadPlugin = () => {
|
||||
this.setState({confirmOverwriteUploadModal: false});
|
||||
if (this.state.file) {
|
||||
this.helpSubmitUpload(this.state.file, true);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
onPluginDownloadUrlChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
this.setState({
|
||||
pluginDownloadUrl: e.target.value,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
installFromUrl = async (force: boolean) => {
|
||||
const {pluginDownloadUrl} = this.state;
|
||||
@@ -644,7 +644,7 @@ export default class PluginManagement extends AdminSettings<Props, State> {
|
||||
installing: false,
|
||||
loading: false,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
getMarketplaceURLHelpText = (url: string, enableUploads: boolean) => {
|
||||
return (
|
||||
@@ -685,16 +685,16 @@ export default class PluginManagement extends AdminSettings<Props, State> {
|
||||
}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
canSave = () => {
|
||||
return this.state.marketplaceUrl !== '';
|
||||
}
|
||||
};
|
||||
|
||||
handleSubmitInstall = (e: React.SyntheticEvent) => {
|
||||
e.preventDefault();
|
||||
return this.installFromUrl(false);
|
||||
}
|
||||
};
|
||||
|
||||
handleOverwriteInstallPluginCancel = () => {
|
||||
this.setState({
|
||||
@@ -703,12 +703,12 @@ export default class PluginManagement extends AdminSettings<Props, State> {
|
||||
serverError: null,
|
||||
lastMessage: null,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
handleOverwriteInstallPlugin = () => {
|
||||
this.setState({confirmOverwriteInstallModal: false});
|
||||
return this.installFromUrl(true);
|
||||
}
|
||||
};
|
||||
|
||||
showRemovePluginModal = (e: React.SyntheticEvent) => {
|
||||
if (this.props.isDisabled) {
|
||||
@@ -717,16 +717,16 @@ export default class PluginManagement extends AdminSettings<Props, State> {
|
||||
e.preventDefault();
|
||||
const pluginId = e.currentTarget.getAttribute('data-plugin-id');
|
||||
this.setState({showRemoveModal: true, removing: pluginId});
|
||||
}
|
||||
};
|
||||
|
||||
handleRemovePluginCancel = () => {
|
||||
this.setState({showRemoveModal: false, removing: null});
|
||||
}
|
||||
};
|
||||
|
||||
handleRemovePlugin = () => {
|
||||
this.setState({showRemoveModal: false});
|
||||
this.handleRemove();
|
||||
}
|
||||
};
|
||||
|
||||
handleRemove = async () => {
|
||||
this.setState({lastMessage: null, serverError: null});
|
||||
@@ -738,7 +738,7 @@ export default class PluginManagement extends AdminSettings<Props, State> {
|
||||
this.setState({serverError: error.message});
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
handleEnable = async (e: React.KeyboardEvent) => {
|
||||
e.preventDefault();
|
||||
@@ -755,7 +755,7 @@ export default class PluginManagement extends AdminSettings<Props, State> {
|
||||
this.setState({serverError: error.message});
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
handleDisable = async (e: React.KeyboardEvent) => {
|
||||
this.setState({lastMessage: null, serverError: null});
|
||||
@@ -772,7 +772,7 @@ export default class PluginManagement extends AdminSettings<Props, State> {
|
||||
this.setState({serverError: error.message});
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
renderTitle() {
|
||||
return (
|
||||
@@ -818,7 +818,7 @@ export default class PluginManagement extends AdminSettings<Props, State> {
|
||||
onCancel={onCancel}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
renderRemovePluginModal = (
|
||||
show: boolean, onConfirm: (checked: boolean) => void, onCancel: (checked: boolean) => void) => {
|
||||
@@ -854,7 +854,7 @@ export default class PluginManagement extends AdminSettings<Props, State> {
|
||||
onCancel={onCancel}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
renderEnablePluginsSetting = () => {
|
||||
const hideEnablePlugins = this.props.config.ExperimentalSettings && this.props.config.ExperimentalSettings.RestrictSystemAdmin;
|
||||
@@ -892,7 +892,7 @@ export default class PluginManagement extends AdminSettings<Props, State> {
|
||||
);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
renderSettings = () => {
|
||||
const {enableUploads} = this.state;
|
||||
@@ -1256,5 +1256,5 @@ export default class PluginManagement extends AdminSettings<Props, State> {
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -22,13 +22,13 @@ const PUSH_NOTIFICATIONS_CUSTOM = 'custom';
|
||||
export default class PushSettings extends AdminSettings {
|
||||
canSave = () => {
|
||||
return this.state.pushNotificationServerType !== PUSH_NOTIFICATIONS_MHPNS || this.state.agree;
|
||||
}
|
||||
};
|
||||
|
||||
handleAgreeChange = (e) => {
|
||||
this.setState({
|
||||
agree: e.target.checked,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
handleDropdownChange = (id, value) => {
|
||||
if (id === 'pushNotificationServerType') {
|
||||
@@ -54,7 +54,7 @@ export default class PushSettings extends AdminSettings {
|
||||
}
|
||||
|
||||
this.handleChange(id, value);
|
||||
}
|
||||
};
|
||||
|
||||
getConfigFromState = (config) => {
|
||||
config.EmailSettings.SendPushNotifications = this.state.pushNotificationServerType !== PUSH_NOTIFICATIONS_OFF;
|
||||
@@ -62,7 +62,7 @@ export default class PushSettings extends AdminSettings {
|
||||
config.TeamSettings.MaxNotificationsPerChannel = this.state.maxNotificationsPerChannel;
|
||||
|
||||
return config;
|
||||
}
|
||||
};
|
||||
|
||||
getStateFromConfig(config) {
|
||||
let pushNotificationServerType = PUSH_NOTIFICATIONS_CUSTOM;
|
||||
@@ -318,5 +318,5 @@ export default class PushSettings extends AdminSettings {
|
||||
/>
|
||||
</SettingsGroup>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ export default class RemoveFileSetting extends Setting {
|
||||
this.props.onSubmit(this.props.id, () => {
|
||||
this.setState({removing: false});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
return (
|
||||
|
||||
@@ -59,7 +59,7 @@ export default class ResetEmailModal extends React.PureComponent<Props, State> {
|
||||
isEmailError: false,
|
||||
isCurrentPasswordError: false,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
private isEmailValid = (): boolean => {
|
||||
if (!this.emailRef.current || !this.emailRef.current.value || !isEmail(this.emailRef.current.value)) {
|
||||
@@ -75,7 +75,7 @@ export default class ResetEmailModal extends React.PureComponent<Props, State> {
|
||||
|
||||
this.setState({error: null, isEmailError: false});
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
private isCurrentPasswordValid = (): boolean => {
|
||||
if (!this.currentPasswordRef.current || !this.currentPasswordRef.current.value) {
|
||||
@@ -91,7 +91,7 @@ export default class ResetEmailModal extends React.PureComponent<Props, State> {
|
||||
}
|
||||
this.setState({error: null, isCurrentPasswordError: false});
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
private doSubmit = async (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
|
||||
e.preventDefault();
|
||||
@@ -126,14 +126,14 @@ export default class ResetEmailModal extends React.PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
this.props.onModalSubmit(this.props.user);
|
||||
}
|
||||
};
|
||||
|
||||
private doCancel = (): void => {
|
||||
this.setState({
|
||||
error: null,
|
||||
});
|
||||
this.props.onModalDismissed();
|
||||
}
|
||||
};
|
||||
|
||||
public render(): JSX.Element {
|
||||
const user = this.props.user;
|
||||
|
||||
@@ -98,7 +98,7 @@ export default class ResetPasswordModal extends React.PureComponent<Props, State
|
||||
return;
|
||||
}
|
||||
this.props.onModalSubmit(this.props.user);
|
||||
}
|
||||
};
|
||||
|
||||
private doCancel = (): void => {
|
||||
this.setState({
|
||||
@@ -106,7 +106,7 @@ export default class ResetPasswordModal extends React.PureComponent<Props, State
|
||||
serverErrorCurrentPass: null,
|
||||
});
|
||||
this.props.onModalDismissed();
|
||||
}
|
||||
};
|
||||
|
||||
public render(): JSX.Element {
|
||||
const user = this.props.user;
|
||||
|
||||
@@ -25,7 +25,7 @@ export default class RevokeTokenButton extends React.PureComponent<RevokeTokenBu
|
||||
if ('error' in response) {
|
||||
this.props.onError(response.error.message);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
return (
|
||||
|
||||
@@ -54,7 +54,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
consoleAccess: PropTypes.object,
|
||||
cloud: PropTypes.object,
|
||||
isCurrentUserSystemAdmin: PropTypes.bool,
|
||||
}
|
||||
};
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
@@ -161,7 +161,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
});
|
||||
this.props.setNavigationBlocked(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
getConfigFromState(config) {
|
||||
const schema = this.props.schema;
|
||||
@@ -317,7 +317,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
);
|
||||
}
|
||||
return setting.label;
|
||||
}
|
||||
};
|
||||
|
||||
renderHelpText = (setting) => {
|
||||
if (!this.props.schema) {
|
||||
@@ -353,7 +353,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
textValues={helpTextValues}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
renderLabel = (setting) => {
|
||||
if (!this.props.schema) {
|
||||
@@ -364,7 +364,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
return setting.label;
|
||||
}
|
||||
return Utils.localizeMessage(setting.label, setting.label_default);
|
||||
}
|
||||
};
|
||||
|
||||
isDisabled = (setting) => {
|
||||
const enterpriseReady = this.props.config.BuildEnterpriseReady === 'true';
|
||||
@@ -372,14 +372,14 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
return setting.isDisabled(this.props.config, this.state, this.props.license, enterpriseReady, this.props.consoleAccess, this.props.cloud, this.props.isCurrentUserSystemAdmin);
|
||||
}
|
||||
return Boolean(setting.isDisabled);
|
||||
}
|
||||
};
|
||||
|
||||
isHidden = (setting) => {
|
||||
if (typeof setting.isHidden === 'function') {
|
||||
return setting.isHidden(this.props.config, this.state, this.props.license);
|
||||
}
|
||||
return Boolean(setting.isHidden);
|
||||
}
|
||||
};
|
||||
|
||||
buildButtonSetting = (setting) => {
|
||||
const handleRequestAction = (success, error) => {
|
||||
@@ -437,7 +437,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
buildTextSetting = (setting) => {
|
||||
let inputType = 'input';
|
||||
@@ -479,7 +479,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
footer={footer}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
buildColorSetting = (setting) => {
|
||||
return (
|
||||
@@ -494,7 +494,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
onChange={this.handleChange}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
buildBoolSetting = (setting) => {
|
||||
return (
|
||||
@@ -509,7 +509,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
onChange={this.handleChange}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
buildPermissionSetting = (setting) => {
|
||||
return (
|
||||
@@ -524,7 +524,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
onChange={this.handlePermissionChange}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
buildDropdownSetting = (setting) => {
|
||||
const enterpriseReady = this.props.config.BuildEnterpriseReady === 'true';
|
||||
@@ -569,7 +569,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
onChange={this.handleChange}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
buildLanguageSetting = (setting) => {
|
||||
const locales = I18n.getAllLanguages();
|
||||
@@ -613,7 +613,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
onChange={this.handleChange}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
buildRadioSetting = (setting) => {
|
||||
const options = setting.options || [];
|
||||
@@ -632,7 +632,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
onChange={this.handleChange}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
buildBannerSetting = (setting) => {
|
||||
if (this.isDisabled(setting)) {
|
||||
@@ -651,7 +651,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
buildGeneratedSetting = (setting) => {
|
||||
return (
|
||||
@@ -668,11 +668,11 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
onChange={this.handleGeneratedChange}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
handleGeneratedChange = (id, s) => {
|
||||
this.handleChange(id, s.replace('+', '-').replace('/', '_'));
|
||||
}
|
||||
};
|
||||
|
||||
handleChange = (id, value, confirm = false, doSubmit = false, warning = false) => {
|
||||
let saveNeeded = this.state.saveNeeded === 'permissions' ? 'both' : 'config';
|
||||
@@ -702,7 +702,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
}
|
||||
|
||||
this.props.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
handlePermissionChange = (id, value) => {
|
||||
let saveNeeded = 'permissions';
|
||||
@@ -715,7 +715,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
});
|
||||
|
||||
this.props.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
buildUsernameSetting = (setting) => {
|
||||
return (
|
||||
@@ -730,7 +730,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
onChange={this.handleChange}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
buildJobsTableSetting = (setting) => {
|
||||
return (
|
||||
@@ -753,7 +753,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
buildFileUploadSetting = (setting) => {
|
||||
const setData = (id, data) => {
|
||||
@@ -831,7 +831,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
setByEnv={this.isSetByEnv(setting.key)}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
buildCustomSetting = (setting) => {
|
||||
const CustomComponent = setting.component;
|
||||
@@ -869,21 +869,21 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
);
|
||||
}
|
||||
return componentInstance;
|
||||
}
|
||||
};
|
||||
|
||||
unRegisterSaveAction = (saveAction) => {
|
||||
const indexOfSaveAction = this.saveActions.indexOf(saveAction);
|
||||
this.saveActions.splice(indexOfSaveAction, 1);
|
||||
}
|
||||
};
|
||||
|
||||
registerSaveAction = (saveAction) => {
|
||||
this.saveActions.push(saveAction);
|
||||
}
|
||||
};
|
||||
|
||||
setSaveNeeded = () => {
|
||||
this.setState({saveNeeded: 'config'});
|
||||
this.props.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
renderSettings = () => {
|
||||
const schema = this.props.schema;
|
||||
@@ -995,17 +995,17 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
closeTooltip = () => {
|
||||
this.setState({errorTooltip: false});
|
||||
}
|
||||
};
|
||||
|
||||
openTooltip = (e) => {
|
||||
const elm = e.currentTarget.querySelector('.control-label');
|
||||
const isElipsis = elm.offsetWidth < elm.scrollWidth;
|
||||
this.setState({errorTooltip: isElipsis});
|
||||
}
|
||||
};
|
||||
|
||||
doSubmit = async (getStateFromConfig) => {
|
||||
// clone config so that we aren't modifying data in the stores
|
||||
@@ -1106,7 +1106,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
canSave = () => {
|
||||
if (!this.props.schema || !this.props.schema.settings) {
|
||||
@@ -1143,7 +1143,7 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
render = () => {
|
||||
const schema = this.props.schema;
|
||||
@@ -1238,5 +1238,5 @@ export default class SchemaAdminSettings extends React.PureComponent {
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -46,21 +46,21 @@ export default class LogList extends React.PureComponent<Props, State> {
|
||||
|
||||
isSearching = (term: string, filters: ChannelSearchOpts) => {
|
||||
return term.length > 0 || Object.keys(filters).length > 0;
|
||||
}
|
||||
};
|
||||
|
||||
onSearch = (term: string) => {
|
||||
this.props.onSearchChange(term);
|
||||
}
|
||||
};
|
||||
|
||||
nextPage = () => {
|
||||
const page = this.state.page + 1;
|
||||
this.setState({page});
|
||||
}
|
||||
};
|
||||
|
||||
previousPage = () => {
|
||||
const page = this.state.page - 1;
|
||||
this.setState({page});
|
||||
}
|
||||
};
|
||||
|
||||
getPaginationProps = (): {startCount: number; endCount: number; total: number} => {
|
||||
const {page} = this.state;
|
||||
@@ -73,12 +73,12 @@ export default class LogList extends React.PureComponent<Props, State> {
|
||||
endCount = endCount > total ? total : endCount;
|
||||
|
||||
return {startCount, endCount, total};
|
||||
}
|
||||
};
|
||||
|
||||
handleDateSort = () => {
|
||||
this.setState({dateAsc: !this.state.dateAsc});
|
||||
this.getColumns(this.state.dateAsc);
|
||||
}
|
||||
};
|
||||
|
||||
getColumns = (dateAsc: boolean): Column[] => {
|
||||
const timestamp: JSX.Element = (
|
||||
@@ -155,7 +155,7 @@ export default class LogList extends React.PureComponent<Props, State> {
|
||||
width: 1,
|
||||
},
|
||||
];
|
||||
}
|
||||
};
|
||||
|
||||
getRows = (): Row[] => {
|
||||
const {startCount, endCount} = this.getPaginationProps();
|
||||
@@ -219,21 +219,21 @@ export default class LogList extends React.PureComponent<Props, State> {
|
||||
onClick: () => this.showFullLogEvent(log),
|
||||
};
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
showFullLogEvent = (log: LogObject) => {
|
||||
this.setState({
|
||||
modalLog: log,
|
||||
modalOpen: true,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
hideModal = () => {
|
||||
this.setState({
|
||||
modalLog: null,
|
||||
modalOpen: false,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
onFilter = (filterOptions: FilterOptions) => {
|
||||
const filters = {} as unknown as LogFilter;
|
||||
@@ -249,17 +249,17 @@ export default class LogList extends React.PureComponent<Props, State> {
|
||||
}, []);
|
||||
}
|
||||
this.props.onFiltersChange(filters);
|
||||
}
|
||||
};
|
||||
|
||||
showErrors = () => {
|
||||
this.props.onFiltersChange({logLevels: ['error']} as unknown as LogFilter);
|
||||
}
|
||||
};
|
||||
|
||||
getErrorCount = (): number => {
|
||||
let n = 0;
|
||||
this.props.logs.map((log) => log.level === 'error' && ++n);
|
||||
return n;
|
||||
}
|
||||
};
|
||||
|
||||
render = (): JSX.Element => {
|
||||
const {search} = this.props;
|
||||
@@ -377,5 +377,5 @@ export default class LogList extends React.PureComponent<Props, State> {
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -57,11 +57,11 @@ export default class Logs extends React.PureComponent<Props, State> {
|
||||
dateTo: this.state.dateTo,
|
||||
});
|
||||
this.setState({loadingLogs: false});
|
||||
}
|
||||
};
|
||||
|
||||
onSearchChange = (search: string) => {
|
||||
this.setState({search}, () => this.performSearch());
|
||||
}
|
||||
};
|
||||
|
||||
performSearch = debounce(() => {
|
||||
const {search} = this.state;
|
||||
@@ -74,7 +74,7 @@ export default class Logs extends React.PureComponent<Props, State> {
|
||||
|
||||
onFiltersChange = ({dateFrom, dateTo, logLevels, serverNames}: LogFilter) => {
|
||||
this.setState({dateFrom, dateTo, logLevels, serverNames}, () => this.reload());
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
return (
|
||||
|
||||
@@ -24,7 +24,7 @@ export default class SessionLengthSettings extends AdminSettings {
|
||||
config.ServiceSettings.SessionIdleTimeoutInMinutes = this.parseIntZeroOrMin(this.state.sessionIdleTimeoutInMinutes, MINIMUM_IDLE_TIMEOUT);
|
||||
|
||||
return config;
|
||||
}
|
||||
};
|
||||
|
||||
getStateFromConfig(config) {
|
||||
return {
|
||||
@@ -204,5 +204,5 @@ export default class SessionLengthSettings extends AdminSettings {
|
||||
{sessionTimeoutSetting}
|
||||
</SettingsGroup>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -76,11 +76,11 @@ export default class AddUsersToRoleModal extends React.PureComponent<Props, Stat
|
||||
componentDidMount = async () => {
|
||||
await this.props.actions.getProfiles(0, USERS_PER_PAGE * 2);
|
||||
this.setUsersLoadingState(false);
|
||||
}
|
||||
};
|
||||
|
||||
setUsersLoadingState = (loading: boolean) => {
|
||||
this.setState({loading});
|
||||
}
|
||||
};
|
||||
|
||||
search = async (term: string) => {
|
||||
this.setUsersLoadingState(true);
|
||||
@@ -93,17 +93,17 @@ export default class AddUsersToRoleModal extends React.PureComponent<Props, Stat
|
||||
await this.props.actions.getProfiles(0, USERS_PER_PAGE * 2);
|
||||
}
|
||||
this.setState({loading: false, searchResults, term});
|
||||
}
|
||||
};
|
||||
|
||||
handleHide = () => {
|
||||
this.setState({show: false});
|
||||
}
|
||||
};
|
||||
|
||||
handleExit = () => {
|
||||
if (this.props.onExited) {
|
||||
this.props.onExited();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
renderOption = (option: UserProfileValue, isSelected: boolean, onAdd: (user: UserProfileValue) => void, onMouseMove: (user: UserProfileValue) => void) => {
|
||||
let rowSelected = '';
|
||||
@@ -137,15 +137,15 @@ export default class AddUsersToRoleModal extends React.PureComponent<Props, Stat
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
renderValue = (value: { data: UserProfileValue }): string => {
|
||||
return value.data?.username || '';
|
||||
}
|
||||
};
|
||||
|
||||
renderAriaLabel = (option: UserProfileValue): string => {
|
||||
return option?.username || '';
|
||||
}
|
||||
};
|
||||
|
||||
handleAdd = (value: UserProfileValue) => {
|
||||
const values: UserProfileValue[] = [...this.state.values];
|
||||
@@ -153,11 +153,11 @@ export default class AddUsersToRoleModal extends React.PureComponent<Props, Stat
|
||||
values.push(value);
|
||||
}
|
||||
this.setState({values});
|
||||
}
|
||||
};
|
||||
|
||||
handleDelete = (values: UserProfileValue[]) => {
|
||||
this.setState({values});
|
||||
}
|
||||
};
|
||||
|
||||
handlePageChange = (page: number, prevPage: number) => {
|
||||
if (page > prevPage) {
|
||||
@@ -171,7 +171,7 @@ export default class AddUsersToRoleModal extends React.PureComponent<Props, Stat
|
||||
handleSubmit = () => {
|
||||
this.props.onAddCallback(this.state.values);
|
||||
this.handleHide();
|
||||
}
|
||||
};
|
||||
|
||||
render = (): JSX.Element => {
|
||||
const numRemainingText = (
|
||||
@@ -265,5 +265,5 @@ export default class AddUsersToRoleModal extends React.PureComponent<Props, Stat
|
||||
</Modal.Body>
|
||||
</Modal>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ export default class SystemRole extends React.PureComponent<Props, State> {
|
||||
saveNeeded = saveNeeded || difference(updatedRolePermissions, role.permissions).length > 0 || difference(role.permissions, updatedRolePermissions).length > 0;
|
||||
}
|
||||
return saveNeeded;
|
||||
}
|
||||
};
|
||||
|
||||
addUsersToRole = (users: UserProfile[]) => {
|
||||
const {actions: {setNavigationBlocked}} = this.props;
|
||||
@@ -95,7 +95,7 @@ export default class SystemRole extends React.PureComponent<Props, State> {
|
||||
const saveNeeded = this.getSaveStateNeeded({usersToAdd, usersToRemove});
|
||||
setNavigationBlocked(saveNeeded);
|
||||
this.setState({usersToAdd, usersToRemove, saveNeeded});
|
||||
}
|
||||
};
|
||||
|
||||
removeUserFromRole = (user: UserProfile) => {
|
||||
const {actions: {setNavigationBlocked}} = this.props;
|
||||
@@ -114,7 +114,7 @@ export default class SystemRole extends React.PureComponent<Props, State> {
|
||||
const saveNeeded = this.getSaveStateNeeded({usersToAdd, usersToRemove});
|
||||
setNavigationBlocked(saveNeeded);
|
||||
this.setState({usersToRemove, usersToAdd, saveNeeded});
|
||||
}
|
||||
};
|
||||
|
||||
handleSubmit = async () => {
|
||||
this.setState({saving: true, saveNeeded: false});
|
||||
@@ -189,7 +189,7 @@ export default class SystemRole extends React.PureComponent<Props, State> {
|
||||
usersToRemove: {},
|
||||
saveKey,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
updatePermissions = (permissions: PermissionToUpdate[]) => {
|
||||
const {role, actions: {setNavigationBlocked}} = this.props;
|
||||
@@ -235,7 +235,7 @@ export default class SystemRole extends React.PureComponent<Props, State> {
|
||||
...nextState,
|
||||
saveNeeded: this.getSaveStateNeeded(nextState),
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const {usersToAdd, usersToRemove, saving, saveNeeded, serverError, permissionsToUpdate, saveKey} = this.state;
|
||||
|
||||
@@ -28,7 +28,7 @@ export default class SystemRolePermission extends React.PureComponent<Props> {
|
||||
return visibleSections[section.name];
|
||||
}
|
||||
return this.getAccessForSection(section, permissionsMap, permissionsToUpdate) === mixedAccess;
|
||||
}
|
||||
};
|
||||
|
||||
renderSubsectionToggle = (section: SystemSection, isSectionVisible: boolean) => {
|
||||
if (!section.subsections || section.subsections.length === 0) {
|
||||
@@ -59,7 +59,7 @@ export default class SystemRolePermission extends React.PureComponent<Props> {
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
renderSubsections = (section: SystemSection, permissionsMap: Record<string, boolean>, permissionsToUpdate: PermissionsToUpdate, isSectionVisible: boolean) => {
|
||||
if (!section.subsections || section.subsections.length === 0) {
|
||||
@@ -74,7 +74,7 @@ export default class SystemRolePermission extends React.PureComponent<Props> {
|
||||
}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
renderSectionRow = (section: SystemSection, permissionsMap: Record<string, boolean>, permissionsToUpdate: PermissionsToUpdate, isSectionVisible: boolean) => {
|
||||
return (
|
||||
@@ -111,7 +111,7 @@ export default class SystemRolePermission extends React.PureComponent<Props> {
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
getAccessForSection = (section: SystemSection, permissions: Record<string, boolean>, permissionsToUpdate: Record<string, PermissionAccess>) => {
|
||||
// If we have subsections then use them to determine access to show.
|
||||
@@ -145,7 +145,7 @@ export default class SystemRolePermission extends React.PureComponent<Props> {
|
||||
}
|
||||
}
|
||||
return this.getAccessForSectionByName(section.name, permissions, permissionsToUpdate);
|
||||
}
|
||||
};
|
||||
|
||||
getAccessForSectionByName = (sectionName: string, permissions: Record<string, boolean>, permissionsToUpdate: Record<string, PermissionAccess>) => {
|
||||
// Assume sysadmin has write access for everything, this is a bit of a hack but it should be left in until `user_management_read|write_system_roles` is actually a permission
|
||||
@@ -167,7 +167,7 @@ export default class SystemRolePermission extends React.PureComponent<Props> {
|
||||
}
|
||||
|
||||
return access;
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const {section, permissionsMap, permissionsToUpdate, visibleSections} = this.props;
|
||||
|
||||
@@ -37,7 +37,7 @@ export default class SystemRolePermissionDropdown extends React.PureComponent<Pr
|
||||
permissions.push({name: section.name, value});
|
||||
}
|
||||
this.props.updatePermissions(permissions);
|
||||
}
|
||||
};
|
||||
|
||||
renderOption = (label: JSX.Element, description: JSX.Element) => {
|
||||
return (
|
||||
@@ -50,7 +50,7 @@ export default class SystemRolePermissionDropdown extends React.PureComponent<Pr
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const {isDisabled, section} = this.props;
|
||||
|
||||
@@ -181,11 +181,11 @@ export default class SystemRolePermissions extends React.PureComponent<Props, St
|
||||
if (sectionIndex > -1) {
|
||||
sectionsList.splice(sectionIndex, 1);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
updatePermissions = (permissions: PermissionToUpdate[]) => {
|
||||
this.props.updatePermissions(permissions);
|
||||
}
|
||||
};
|
||||
|
||||
setSectionVisible = (name: string, visible: boolean) => {
|
||||
const {visibleSections} = this.state;
|
||||
@@ -195,7 +195,7 @@ export default class SystemRolePermissions extends React.PureComponent<Props, St
|
||||
[name]: visible,
|
||||
},
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
getRows = (permissionsMap: Record<string, boolean>, permissionsToUpdate: PermissionsToUpdate, visibleSections: Record<string, boolean>) => {
|
||||
const {isLicensedForCloud} = this.props;
|
||||
@@ -257,7 +257,7 @@ export default class SystemRolePermissions extends React.PureComponent<Props, St
|
||||
/>
|
||||
);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const {role, permissionsToUpdate} = this.props;
|
||||
|
||||
@@ -106,14 +106,14 @@ export default class SystemRoleUsers extends React.PureComponent<Props, State> {
|
||||
|
||||
setStateLoading = (loading: boolean) => {
|
||||
this.setState({loading});
|
||||
}
|
||||
};
|
||||
|
||||
getVisibleTotalCount = (): number => {
|
||||
const {usersToRemove, usersToAdd, totalCount} = this.props;
|
||||
const usersToAddCount = Object.keys(usersToAdd).length;
|
||||
const usersToRemoveCount = Object.keys(usersToRemove).length;
|
||||
return totalCount + (usersToAddCount - usersToRemoveCount);
|
||||
}
|
||||
};
|
||||
|
||||
getPaginationProps = (): {startCount: number; endCount: number; total: number} => {
|
||||
const {term, usersToRemove, usersToAdd} = this.props;
|
||||
@@ -138,11 +138,11 @@ export default class SystemRoleUsers extends React.PureComponent<Props, State> {
|
||||
endCount = endCount > total ? total : endCount;
|
||||
|
||||
return {startCount, endCount, total};
|
||||
}
|
||||
};
|
||||
|
||||
onSearch = async (term: string) => {
|
||||
this.props.actions.setUserGridSearch(term);
|
||||
}
|
||||
};
|
||||
|
||||
nextPage = async () => {
|
||||
if (this.state.loading) {
|
||||
@@ -152,14 +152,14 @@ export default class SystemRoleUsers extends React.PureComponent<Props, State> {
|
||||
this.setState({loading: true});
|
||||
await this.props.actions.getProfiles(page, USERS_PER_PAGE, {role: this.props.role.name});
|
||||
this.setState({loading: false, page});
|
||||
}
|
||||
};
|
||||
|
||||
previousPage = async () => {
|
||||
if (this.state.loading || this.state.page === 0) {
|
||||
return;
|
||||
}
|
||||
this.setState({page: this.state.page - 1});
|
||||
}
|
||||
};
|
||||
|
||||
getRows = () => {
|
||||
const {users, readOnly, usersToAdd, usersToRemove} = this.props;
|
||||
@@ -198,7 +198,7 @@ export default class SystemRoleUsers extends React.PureComponent<Props, State> {
|
||||
},
|
||||
};
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
getColumns = () => {
|
||||
const name: JSX.Element = (
|
||||
@@ -228,15 +228,15 @@ export default class SystemRoleUsers extends React.PureComponent<Props, State> {
|
||||
fixed: true,
|
||||
},
|
||||
];
|
||||
}
|
||||
};
|
||||
|
||||
onAddCallback = (users: UserProfile[]) => {
|
||||
this.props.onAddCallback(users);
|
||||
}
|
||||
};
|
||||
|
||||
onRemoveCallback = (user: UserProfile) => {
|
||||
this.props.onRemoveCallback(user);
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const {page, loading} = this.state;
|
||||
|
||||
@@ -108,11 +108,11 @@ export default class SystemUserDetail extends React.PureComponent<Props & RouteC
|
||||
this.setState({teams});
|
||||
this.setState({teamIds});
|
||||
this.setState({refreshTeams: false});
|
||||
}
|
||||
};
|
||||
|
||||
openAddTeam = (): void => {
|
||||
this.setState({addTeamOpen: true});
|
||||
}
|
||||
};
|
||||
|
||||
addTeams = (teams: Team[]): void => {
|
||||
const promises = [];
|
||||
@@ -120,63 +120,63 @@ export default class SystemUserDetail extends React.PureComponent<Props & RouteC
|
||||
promises.push(this.props.actions.addUserToTeam(team.id, this.props.user.id));
|
||||
}
|
||||
Promise.all(promises).finally(() => this.setState({refreshTeams: true}));
|
||||
}
|
||||
};
|
||||
|
||||
closeAddTeam = (): void => {
|
||||
this.setState({addTeamOpen: false});
|
||||
}
|
||||
};
|
||||
|
||||
doPasswordReset = (user: UserProfile): void => {
|
||||
this.setState({
|
||||
showPasswordModal: true,
|
||||
user,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
doPasswordResetDismiss = (): void => {
|
||||
this.setState({
|
||||
showPasswordModal: false,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
doPasswordResetSubmit = (): void => {
|
||||
this.setState({
|
||||
showPasswordModal: false,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
handleMakeActive = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>): void => {
|
||||
e.preventDefault();
|
||||
this.props.actions.updateUserActive(this.props.user.id, true).
|
||||
then((data) => this.onUpdateActiveResult(data.error));
|
||||
}
|
||||
};
|
||||
|
||||
handleShowDeactivateMemberModal = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>): void => {
|
||||
e.preventDefault();
|
||||
this.setState({showDeactivateMemberModal: true});
|
||||
}
|
||||
};
|
||||
|
||||
handleDeactivateMember = (): void => {
|
||||
this.props.actions.updateUserActive(this.props.user.id, false).
|
||||
then((data) => this.onUpdateActiveResult(data.error));
|
||||
this.setState({showDeactivateMemberModal: false});
|
||||
}
|
||||
};
|
||||
|
||||
onUpdateActiveResult = (error: ServerError): void => {
|
||||
if (error) {
|
||||
this.setState({error});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
handleDeactivateCancel = (): void => {
|
||||
this.setState({showDeactivateMemberModal: false});
|
||||
}
|
||||
};
|
||||
|
||||
// TODO: add error handler function
|
||||
handleResetMfa = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>): void => {
|
||||
e.preventDefault();
|
||||
adminResetMfa(this.props.user.id, null, null);
|
||||
}
|
||||
};
|
||||
|
||||
handleEmailChange = (e: React.ChangeEvent<HTMLInputElement>): void => {
|
||||
const emailChanged = e.target.value !== this.props.user.email;
|
||||
@@ -187,7 +187,7 @@ export default class SystemUserDetail extends React.PureComponent<Props & RouteC
|
||||
saveNeeded: emailChanged,
|
||||
});
|
||||
this.props.actions.setNavigationBlocked(emailChanged);
|
||||
}
|
||||
};
|
||||
|
||||
handleSubmit = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>): void => {
|
||||
e.preventDefault();
|
||||
@@ -220,7 +220,7 @@ export default class SystemUserDetail extends React.PureComponent<Props & RouteC
|
||||
});
|
||||
this.props.actions.setNavigationBlocked(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
renderDeactivateMemberModal = (user: UserProfile): React.ReactNode => {
|
||||
const title = (
|
||||
@@ -279,7 +279,7 @@ export default class SystemUserDetail extends React.PureComponent<Props & RouteC
|
||||
onCancel={this.handleDeactivateCancel}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
renderActivateDeactivate = (): React.ReactNode => {
|
||||
if (this.props.user.delete_at > 0) {
|
||||
@@ -302,7 +302,7 @@ export default class SystemUserDetail extends React.PureComponent<Props & RouteC
|
||||
{Utils.localizeMessage('admin.user_item.makeInactive', 'Deactivate')}
|
||||
</AdminButtonOutline>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
renderRemoveMFA = (): React.ReactNode => {
|
||||
if (this.props.user.mfa_active) {
|
||||
@@ -317,7 +317,7 @@ export default class SystemUserDetail extends React.PureComponent<Props & RouteC
|
||||
);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
getAuthenticationText(): string {
|
||||
const {user, mfaEnabled} = this.props;
|
||||
|
||||
@@ -63,14 +63,14 @@ export default class AbstractList extends React.PureComponent<Props, State> {
|
||||
const page = this.state.page < 1 ? 0 : this.state.page - 1;
|
||||
this.setState({page, loading: true});
|
||||
this.performSearch();
|
||||
}
|
||||
};
|
||||
|
||||
private nextPage = async (e: React.MouseEvent<HTMLButtonElement>): Promise<void> => {
|
||||
e.preventDefault();
|
||||
const page = this.state.page + 1;
|
||||
this.setState({page, loading: true});
|
||||
this.performSearch();
|
||||
}
|
||||
};
|
||||
|
||||
private performSearch = (): void => {
|
||||
const userId = this.props.userId;
|
||||
@@ -83,7 +83,7 @@ export default class AbstractList extends React.PureComponent<Props, State> {
|
||||
}
|
||||
this.setState({loading: false});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
private getPaging(): Paging {
|
||||
const startCount = (this.state.page * PAGE_SIZE) + 1;
|
||||
@@ -110,7 +110,7 @@ export default class AbstractList extends React.PureComponent<Props, State> {
|
||||
);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
private renderRows = (): JSX.Element | JSX.Element[] => {
|
||||
if (this.state.loading) {
|
||||
@@ -134,7 +134,7 @@ export default class AbstractList extends React.PureComponent<Props, State> {
|
||||
const pageEnd = this.state.page < 1 ? PAGE_SIZE : (this.state.page + 1) * PAGE_SIZE; // ie 10, 20, 30, etc.
|
||||
const pageData = this.props.data.slice(pageStart, pageEnd).map(this.props.renderRow); // ie 0-10, 10-20, etc.
|
||||
return pageData;
|
||||
}
|
||||
};
|
||||
|
||||
public render = (): JSX.Element => {
|
||||
const {startCount, endCount, total} = this.getPaging();
|
||||
@@ -179,6 +179,6 @@ export default class AbstractList extends React.PureComponent<Props, State> {
|
||||
}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
emptyListTextId: t('admin.team_settings.team_list.no_teams_found'),
|
||||
emptyListTextDefaultMessage: 'No teams found',
|
||||
refreshTeams: false,
|
||||
}
|
||||
};
|
||||
|
||||
public constructor(props: Props) {
|
||||
super(props);
|
||||
@@ -100,7 +100,7 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
this.setState({teamsWithMemberships});
|
||||
this.props.userDetailCallback(teamsWithMemberships);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// check this out
|
||||
private mergeTeamsWithMemberships = (data: [{data: Team[]}, {data: TeamMembership[]}]): TeamWithMembership[] => {
|
||||
@@ -113,7 +113,7 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
});
|
||||
teamsWithMemberships = filterAndSortTeamsByDisplayName(teamsWithMemberships, this.props.locale);
|
||||
return teamsWithMemberships;
|
||||
}
|
||||
};
|
||||
|
||||
private doRemoveUserFromTeam = async (teamId: string): Promise<void> => {
|
||||
const {error} = await this.props.actions.removeUserFromTeam(teamId, this.props.userId);
|
||||
@@ -122,7 +122,7 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
} else {
|
||||
this.getTeamsAndMemberships();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private doMakeUserTeamAdmin = async (teamId: string) => {
|
||||
const {error} = await this.props.actions.updateTeamMemberSchemeRoles(teamId, this.props.userId, true, true);
|
||||
@@ -131,7 +131,7 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
} else {
|
||||
this.getTeamsAndMemberships();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private doMakeUserTeamMember = async (teamId: string) => {
|
||||
const {error} = await this.props.actions.updateTeamMemberSchemeRoles(teamId, this.props.userId, true, false);
|
||||
@@ -140,7 +140,7 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
} else {
|
||||
this.getTeamsAndMemberships();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
public render(): JSX.Element {
|
||||
let serverError = null;
|
||||
@@ -179,5 +179,5 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
readOnly={this.props.readOnly}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ export default class TeamRow extends React.PureComponent<Props> {
|
||||
defaultMessage={'Invite only'}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
private renderTeamRole = (team: TeamWithMembership) => {
|
||||
if (team.scheme_guest) {
|
||||
return (
|
||||
@@ -73,7 +73,7 @@ export default class TeamRow extends React.PureComponent<Props> {
|
||||
);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
public render = (): JSX.Element => {
|
||||
const {team} = this.props;
|
||||
const teamIconUrl = Utils.imageURLForTeam(team);
|
||||
|
||||
@@ -103,11 +103,11 @@ export default class SystemUsersList extends React.PureComponent<Props, State> {
|
||||
this.setState({page: this.state.page + 1});
|
||||
|
||||
this.props.nextPage(this.state.page + 1);
|
||||
}
|
||||
};
|
||||
|
||||
previousPage = () => {
|
||||
this.setState({page: this.state.page - 1});
|
||||
}
|
||||
};
|
||||
|
||||
search = (term: string) => {
|
||||
this.props.search(term);
|
||||
@@ -115,63 +115,63 @@ export default class SystemUsersList extends React.PureComponent<Props, State> {
|
||||
if (term !== '') {
|
||||
this.setState({page: 0});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
doManageTeams = (user: UserProfile) => {
|
||||
this.setState({
|
||||
showManageTeamsModal: true,
|
||||
user,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
doManageRoles = (user: UserProfile) => {
|
||||
this.setState({
|
||||
showManageRolesModal: true,
|
||||
user,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
doManageTokens = (user: UserProfile) => {
|
||||
this.setState({
|
||||
showManageTokensModal: true,
|
||||
user,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
doManageTeamsDismiss = () => {
|
||||
this.setState({
|
||||
showManageTeamsModal: false,
|
||||
user: undefined,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
doManageRolesDismiss = () => {
|
||||
this.setState({
|
||||
showManageRolesModal: false,
|
||||
user: undefined,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
doManageTokensDismiss = () => {
|
||||
this.setState({
|
||||
showManageTokensModal: false,
|
||||
user: undefined,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
doPasswordReset = (user: UserProfile) => {
|
||||
this.setState({
|
||||
showPasswordModal: true,
|
||||
user,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
doPasswordResetDismiss = () => {
|
||||
this.setState({
|
||||
showPasswordModal: false,
|
||||
user: undefined,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
doPasswordResetSubmit = (user?: UserProfile) => {
|
||||
if (user) {
|
||||
@@ -182,21 +182,21 @@ export default class SystemUsersList extends React.PureComponent<Props, State> {
|
||||
showPasswordModal: false,
|
||||
user: undefined,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
doEmailReset = (user: UserProfile) => {
|
||||
this.setState({
|
||||
showEmailModal: true,
|
||||
user,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
doEmailResetDismiss = () => {
|
||||
this.setState({
|
||||
showEmailModal: false,
|
||||
user: undefined,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
doEmailResetSubmit = (user?: UserProfile) => {
|
||||
if (user) {
|
||||
@@ -207,7 +207,7 @@ export default class SystemUsersList extends React.PureComponent<Props, State> {
|
||||
showEmailModal: false,
|
||||
user: undefined,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
getInfoForUser(user: UserProfile) {
|
||||
const info = [];
|
||||
|
||||
@@ -164,23 +164,23 @@ export default class SystemUsers extends React.PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
this.setState({loading: false});
|
||||
}
|
||||
};
|
||||
|
||||
handleTeamChange = (e: ChangeEvent<HTMLSelectElement>) => {
|
||||
const teamId = e.target.value;
|
||||
this.loadDataForTeam(teamId, this.props.filter);
|
||||
this.props.actions.setSystemUsersSearch(this.props.searchTerm, teamId, this.props.filter);
|
||||
}
|
||||
};
|
||||
|
||||
handleFilterChange = (e: ChangeEvent<HTMLSelectElement>) => {
|
||||
const filter = e.target.value;
|
||||
this.loadDataForTeam(this.props.teamId, filter);
|
||||
this.props.actions.setSystemUsersSearch(this.props.searchTerm, this.props.teamId, filter);
|
||||
}
|
||||
};
|
||||
|
||||
handleTermChange = (term: string) => {
|
||||
this.props.actions.setSystemUsersSearch(term, this.props.teamId, this.props.filter);
|
||||
}
|
||||
};
|
||||
handleRevokeAllSessions = async () => {
|
||||
const {data} = await this.props.actions.revokeSessionsForAllUsers();
|
||||
if (data) {
|
||||
@@ -188,13 +188,13 @@ export default class SystemUsers extends React.PureComponent<Props, State> {
|
||||
} else {
|
||||
this.props.actions.logError({type: 'critical', message: 'Can\'t revoke all sessions'});
|
||||
}
|
||||
}
|
||||
};
|
||||
handleRevokeAllSessionsCancel = () => {
|
||||
this.setState({showRevokeAllSessionsModal: false});
|
||||
}
|
||||
};
|
||||
handleShowRevokeAllSessionsModal = () => {
|
||||
this.setState({showRevokeAllSessionsModal: true});
|
||||
}
|
||||
};
|
||||
|
||||
nextPage = async (page: number) => {
|
||||
const {teamId, filter} = this.props;
|
||||
@@ -216,7 +216,7 @@ export default class SystemUsers extends React.PureComponent<Props, State> {
|
||||
await loadProfilesAndTeamMembers(page + 1, USERS_PER_PAGE, teamId, options);
|
||||
}
|
||||
this.setState({loading: false});
|
||||
}
|
||||
};
|
||||
|
||||
doSearch = debounce(async (term, teamId = this.props.teamId, filter = this.props.filter) => {
|
||||
if (!term) {
|
||||
@@ -250,7 +250,7 @@ export default class SystemUsers extends React.PureComponent<Props, State> {
|
||||
|
||||
await this.props.actions.getUser(id);
|
||||
this.setState({loading: false});
|
||||
}
|
||||
};
|
||||
|
||||
getUserByTokenOrId = async (id: string) => {
|
||||
if (this.props.enableUserAccessTokens) {
|
||||
@@ -264,7 +264,7 @@ export default class SystemUsers extends React.PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
this.getUserById(id);
|
||||
}
|
||||
};
|
||||
|
||||
renderRevokeAllUsersModal = () => {
|
||||
const title = (
|
||||
@@ -302,7 +302,7 @@ export default class SystemUsers extends React.PureComponent<Props, State> {
|
||||
onCancel={this.handleRevokeAllSessionsCancel}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
renderFilterRow = (doSearch: ((event: React.FormEvent<HTMLInputElement>) => void) | undefined) => {
|
||||
const teams = this.props.teams.map((team) => (
|
||||
@@ -363,7 +363,7 @@ export default class SystemUsers extends React.PureComponent<Props, State> {
|
||||
</label>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const revokeAllUsersModal = this.renderRevokeAllUsersModal();
|
||||
|
||||
@@ -86,40 +86,40 @@ export default class SystemUsersDropdown extends React.PureComponent<Props, Stat
|
||||
e.preventDefault();
|
||||
this.props.actions.updateUserActive(this.props.user.id, true).
|
||||
then(this.onUpdateActiveResult);
|
||||
}
|
||||
};
|
||||
|
||||
handleManageTeams = (e: {preventDefault: () => void}) => {
|
||||
e.preventDefault();
|
||||
|
||||
this.props.doManageTeams(this.props.user);
|
||||
}
|
||||
};
|
||||
|
||||
handleManageRoles = (e: {preventDefault: () => void}) => {
|
||||
e.preventDefault();
|
||||
|
||||
this.props.doManageRoles(this.props.user);
|
||||
}
|
||||
};
|
||||
|
||||
handleManageTokens = (e: {preventDefault: () => void}) => {
|
||||
e.preventDefault();
|
||||
|
||||
this.props.doManageTokens(this.props.user);
|
||||
}
|
||||
};
|
||||
|
||||
handleResetPassword = (e: {preventDefault: () => void}) => {
|
||||
e.preventDefault();
|
||||
this.props.doPasswordReset(this.props.user);
|
||||
}
|
||||
};
|
||||
|
||||
handleResetEmail = (e: {preventDefault: () => void}) => {
|
||||
e.preventDefault();
|
||||
this.props.doEmailReset(this.props.user);
|
||||
}
|
||||
};
|
||||
|
||||
handleResetMfa = (e: {preventDefault: () => void}) => {
|
||||
e.preventDefault();
|
||||
adminResetMfa(this.props.user.id, null, this.props.onError);
|
||||
}
|
||||
};
|
||||
|
||||
handleShowDeactivateMemberModal = async (e: {preventDefault: () => void}) => {
|
||||
e.preventDefault();
|
||||
@@ -130,23 +130,23 @@ export default class SystemUsersDropdown extends React.PureComponent<Props, Stat
|
||||
);
|
||||
}
|
||||
this.setState({showDeactivateMemberModal: true});
|
||||
}
|
||||
};
|
||||
|
||||
handleDeactivateMember = () => {
|
||||
this.props.actions.updateUserActive(this.props.user.id, false).
|
||||
then(this.onUpdateActiveResult);
|
||||
this.setState({showDeactivateMemberModal: false});
|
||||
}
|
||||
};
|
||||
|
||||
onUpdateActiveResult = ({error}: {error: ServerError}) => {
|
||||
if (error) {
|
||||
this.props.onError({id: error.server_error_id, ...error});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
handleDeactivateCancel = () => {
|
||||
this.setState({showDeactivateMemberModal: false});
|
||||
}
|
||||
};
|
||||
|
||||
renderDeactivateMemberModal = () => {
|
||||
const user = this.props.user;
|
||||
@@ -273,7 +273,7 @@ export default class SystemUsersDropdown extends React.PureComponent<Props, Stat
|
||||
onCancel={this.handleDeactivateCancel}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
shouldDisableBotsWhenOwnerIsDeactivated() {
|
||||
return this.props.config &&
|
||||
@@ -284,12 +284,12 @@ export default class SystemUsersDropdown extends React.PureComponent<Props, Stat
|
||||
handleShowRevokeSessionsModal = (e: {preventDefault: () => void}) => {
|
||||
e.preventDefault();
|
||||
this.setState({showRevokeSessionsModal: true});
|
||||
}
|
||||
};
|
||||
|
||||
handleShowCreateGroupSyncableMembershipsModal = (e: {preventDefault: () => void}) => {
|
||||
e.preventDefault();
|
||||
this.setState({showCreateGroupMembershipsModal: true});
|
||||
}
|
||||
};
|
||||
|
||||
handleCreateGroupSyncableMemberships = async () => {
|
||||
const {error} = await this.props.actions.createGroupTeamsAndChannels(this.props.user.id);
|
||||
@@ -298,11 +298,11 @@ export default class SystemUsersDropdown extends React.PureComponent<Props, Stat
|
||||
}
|
||||
|
||||
this.setState({showCreateGroupMembershipsModal: false});
|
||||
}
|
||||
};
|
||||
|
||||
handleCreateGroupSyncableMembershipsCancel = () => {
|
||||
this.setState({showCreateGroupMembershipsModal: false});
|
||||
}
|
||||
};
|
||||
|
||||
handleRevokeSessions = async () => {
|
||||
const me = this.props.currentUser;
|
||||
@@ -315,15 +315,15 @@ export default class SystemUsersDropdown extends React.PureComponent<Props, Stat
|
||||
}
|
||||
|
||||
this.setState({showRevokeSessionsModal: false});
|
||||
}
|
||||
};
|
||||
|
||||
handleRevokeSessionsCancel = () => {
|
||||
this.setState({showRevokeSessionsModal: false});
|
||||
}
|
||||
};
|
||||
|
||||
handlePromoteToUser = () => {
|
||||
this.setState({showPromoteToUserModal: true});
|
||||
}
|
||||
};
|
||||
|
||||
handlePromoteToUserConfirm = async () => {
|
||||
const {error} = await this.props.actions.promoteGuestToUser(this.props.user.id);
|
||||
@@ -332,15 +332,15 @@ export default class SystemUsersDropdown extends React.PureComponent<Props, Stat
|
||||
}
|
||||
|
||||
this.setState({showPromoteToUserModal: false});
|
||||
}
|
||||
};
|
||||
|
||||
handlePromoteToUserCancel = () => {
|
||||
this.setState({showPromoteToUserModal: false});
|
||||
}
|
||||
};
|
||||
|
||||
handleDemoteToGuest = () => {
|
||||
this.setState({showDemoteToGuestModal: true});
|
||||
}
|
||||
};
|
||||
|
||||
handleDemoteToGuestConfirm = async () => {
|
||||
const {error} = await this.props.actions.demoteUserToGuest(this.props.user.id);
|
||||
@@ -348,11 +348,11 @@ export default class SystemUsersDropdown extends React.PureComponent<Props, Stat
|
||||
this.props.onError(error);
|
||||
}
|
||||
this.setState({showDemoteToGuestModal: false});
|
||||
}
|
||||
};
|
||||
|
||||
handleDemoteToGuestCancel = () => {
|
||||
this.setState({showDemoteToGuestModal: false});
|
||||
}
|
||||
};
|
||||
|
||||
renderPromoteToUserModal = () => {
|
||||
const title = (
|
||||
@@ -393,7 +393,7 @@ export default class SystemUsersDropdown extends React.PureComponent<Props, Stat
|
||||
onCancel={this.handlePromoteToUserCancel}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
renderDemoteToGuestModal = () => {
|
||||
const title = (
|
||||
@@ -434,7 +434,7 @@ export default class SystemUsersDropdown extends React.PureComponent<Props, Stat
|
||||
onCancel={this.handleDemoteToGuestCancel}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
renderRevokeSessionsModal = () => {
|
||||
const title = (
|
||||
@@ -475,7 +475,7 @@ export default class SystemUsersDropdown extends React.PureComponent<Props, Stat
|
||||
onCancel={this.handleRevokeSessionsCancel}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
renderCreateGroupSyncablesMembershipsModal = () => {
|
||||
const title = (
|
||||
@@ -524,7 +524,7 @@ export default class SystemUsersDropdown extends React.PureComponent<Props, Stat
|
||||
onCancel={this.handleCreateGroupSyncableMembershipsCancel}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
renderAccessToken = () => {
|
||||
const userAccessTokensEnabled = this.props.enableUserAccessTokens;
|
||||
@@ -561,7 +561,7 @@ export default class SystemUsersDropdown extends React.PureComponent<Props, Stat
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const {currentUser, user, isLicensed, config} = this.props;
|
||||
|
||||
@@ -62,21 +62,21 @@ export default class AbstractList extends React.PureComponent<Props, State> {
|
||||
const page = this.state.page < 1 ? 0 : this.state.page - 1;
|
||||
this.setState({page, loading: true});
|
||||
this.performSearch(page);
|
||||
}
|
||||
};
|
||||
|
||||
nextPage = async (e: MouseEvent<HTMLButtonElement>): Promise<void> => {
|
||||
e.preventDefault();
|
||||
const page = this.state.page + 1;
|
||||
this.setState({page, loading: true});
|
||||
this.performSearch(page);
|
||||
}
|
||||
};
|
||||
|
||||
renderHeader = (): JSX.Element | null => {
|
||||
if (this.props.data.length > 0) {
|
||||
return this.props.header;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
renderRows = (): JSX.Element | JSX.Element[] => {
|
||||
if (this.state.loading) {
|
||||
@@ -98,7 +98,7 @@ export default class AbstractList extends React.PureComponent<Props, State> {
|
||||
}
|
||||
const offset = this.state.page * PAGE_SIZE;
|
||||
return this.props.data.slice(offset, offset + PAGE_SIZE).map(this.props.renderRow);
|
||||
}
|
||||
};
|
||||
|
||||
performSearch = (page: number): void => {
|
||||
this.setState({loading: true});
|
||||
@@ -109,7 +109,7 @@ export default class AbstractList extends React.PureComponent<Props, State> {
|
||||
}
|
||||
this.setState({loading: false});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
getPaging(): Paging {
|
||||
const startCount = (this.state.page * PAGE_SIZE) + 1;
|
||||
@@ -175,5 +175,5 @@ export default class AbstractList extends React.PureComponent<Props, State> {
|
||||
</div>}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -272,7 +272,7 @@ export default class ChannelDetails extends React.PureComponent<ChannelDetailsPr
|
||||
return g;
|
||||
});
|
||||
this.processGroupsChange(groups);
|
||||
}
|
||||
};
|
||||
|
||||
private channelPermissionsChanged = (name: string, channelRole: ChannelModerationRoles) => {
|
||||
const currentValueIndex = this.state.channelPermissions.findIndex((element) => element.name === name);
|
||||
@@ -321,7 +321,7 @@ export default class ChannelDetails extends React.PureComponent<ChannelDetailsPr
|
||||
};
|
||||
this.setState({channelPermissions, saveNeeded: true});
|
||||
this.props.actions.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
private handleGroupChange = (groupIDs: string[]) => {
|
||||
const groups = [...this.state.groups, ...groupIDs.map((gid: string) => this.props.allGroups[gid])];
|
||||
@@ -607,20 +607,20 @@ export default class ChannelDetails extends React.PureComponent<ChannelDetailsPr
|
||||
const {isLocalArchived} = this.state;
|
||||
const isServerArchived = this.props.channel.delete_at !== 0;
|
||||
return isLocalArchived && !isServerArchived;
|
||||
}
|
||||
};
|
||||
|
||||
private channelToBeRestored = (): boolean => {
|
||||
const {isLocalArchived} = this.state;
|
||||
const isServerArchived = this.props.channel.delete_at !== 0;
|
||||
return !isLocalArchived && isServerArchived;
|
||||
}
|
||||
};
|
||||
|
||||
private addRolesToUpdate = (userId: string, schemeUser: boolean, schemeAdmin: boolean) => {
|
||||
const {rolesToUpdate} = this.state;
|
||||
rolesToUpdate[userId] = {schemeUser, schemeAdmin};
|
||||
this.setState({rolesToUpdate: {...rolesToUpdate}, saveNeeded: true});
|
||||
this.props.actions.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
private addUserToRemove = (user: UserProfile) => {
|
||||
let {usersToRemoveCount} = this.state;
|
||||
@@ -634,7 +634,7 @@ export default class ChannelDetails extends React.PureComponent<ChannelDetailsPr
|
||||
delete rolesToUpdate[user.id];
|
||||
this.setState({usersToRemove: {...usersToRemove}, usersToAdd: {...usersToAdd}, rolesToUpdate: {...rolesToUpdate}, usersToRemoveCount, saveNeeded: true});
|
||||
this.props.actions.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
private addUsersToAdd = (users: UserProfile[]) => {
|
||||
let {usersToRemoveCount} = this.state;
|
||||
@@ -649,7 +649,7 @@ export default class ChannelDetails extends React.PureComponent<ChannelDetailsPr
|
||||
});
|
||||
this.setState({usersToAdd: {...usersToAdd}, usersToRemove: {...usersToRemove}, usersToRemoveCount, saveNeeded: true});
|
||||
this.props.actions.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
private onToggleArchive = () => {
|
||||
const {isLocalArchived, serverError, previousServerError} = this.state;
|
||||
|
||||
@@ -126,29 +126,29 @@ export default class ChannelMembers extends React.PureComponent<Props, State> {
|
||||
|
||||
private setStateLoading = (loading: boolean) => {
|
||||
this.setState({loading});
|
||||
}
|
||||
};
|
||||
|
||||
private loadPage = async (page: number) => {
|
||||
const {loadProfilesAndReloadChannelMembers} = this.props.actions;
|
||||
const {channelId, filters} = this.props;
|
||||
await loadProfilesAndReloadChannelMembers(page + 1, PROFILE_CHUNK_SIZE, channelId, '', {active: true, ...filters});
|
||||
}
|
||||
};
|
||||
|
||||
private removeUser = (user: UserProfile) => {
|
||||
this.props.onRemoveCallback(user);
|
||||
}
|
||||
};
|
||||
|
||||
private onAddCallback = (users: UserProfile[]) => {
|
||||
this.props.onAddCallback(users);
|
||||
}
|
||||
};
|
||||
|
||||
private onSearch = async (term: string) => {
|
||||
this.props.actions.setUserGridSearch(term);
|
||||
}
|
||||
};
|
||||
|
||||
private updateMembership = (membership: BaseMembership) => {
|
||||
this.props.updateRole(membership.user_id, membership.scheme_user, membership.scheme_admin);
|
||||
}
|
||||
};
|
||||
|
||||
private onFilter = async (filterOptions: FilterOptions) => {
|
||||
const roles = filterOptions.role.values;
|
||||
@@ -181,7 +181,7 @@ export default class ChannelMembers extends React.PureComponent<Props, State> {
|
||||
} else {
|
||||
this.props.actions.setUserGridFilters(filters);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
render = () => {
|
||||
const {users, channel, channelId, usersToAdd, usersToRemove, channelMembers, totalCount, searchTerm, isDisabled} = this.props;
|
||||
@@ -294,5 +294,5 @@ export default class ChannelMembers extends React.PureComponent<Props, State> {
|
||||
/>
|
||||
</AdminPanel>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -353,7 +353,7 @@ export default class ChannelModeration extends React.PureComponent<Props> {
|
||||
);
|
||||
}
|
||||
return errorMessages;
|
||||
}
|
||||
};
|
||||
|
||||
render = (): JSX.Element => {
|
||||
const {channelPermissions, guestAccountsEnabled, onChannelPermissionsChanged, readOnly} = this.props;
|
||||
@@ -421,5 +421,5 @@ export default class ChannelModeration extends React.PureComponent<Props> {
|
||||
</div>
|
||||
</AdminPanel>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ export default class ChannelList extends React.PureComponent<ChannelListProps, C
|
||||
|
||||
isSearching = (term: string, filters: ChannelSearchOpts) => {
|
||||
return term.length > 0 || Object.keys(filters).length > 0;
|
||||
}
|
||||
};
|
||||
|
||||
getPaginationProps = () => {
|
||||
const {page, term, filters} = this.state;
|
||||
@@ -78,7 +78,7 @@ export default class ChannelList extends React.PureComponent<ChannelListProps, C
|
||||
let endCount = (page + 1) * PAGE_SIZE;
|
||||
endCount = endCount > total ? total : endCount;
|
||||
return {startCount, endCount, total};
|
||||
}
|
||||
};
|
||||
|
||||
loadPage = async (page = 0, term = '', filters = {}) => {
|
||||
this.setState({loading: true, term, filters});
|
||||
@@ -93,7 +93,7 @@ export default class ChannelList extends React.PureComponent<ChannelListProps, C
|
||||
|
||||
await this.props.actions.getData(page, PAGE_SIZE, '', false, true);
|
||||
this.setState({page, loading: false});
|
||||
}
|
||||
};
|
||||
|
||||
searchChannels = async (page = 0, term = '', filters = {}) => {
|
||||
let channels = [];
|
||||
@@ -106,21 +106,21 @@ export default class ChannelList extends React.PureComponent<ChannelListProps, C
|
||||
searchErrored = false;
|
||||
}
|
||||
this.setState({page, loading: false, channels, total, searchErrored});
|
||||
}
|
||||
};
|
||||
|
||||
searchChannelsDebounced = debounce((page, term, filters = {}) => this.searchChannels(page, term, filters), 300, false, () => {});
|
||||
|
||||
nextPage = () => {
|
||||
this.loadPage(this.state.page + 1, this.state.term, this.state.filters);
|
||||
}
|
||||
};
|
||||
|
||||
previousPage = () => {
|
||||
this.setState({page: this.state.page - 1});
|
||||
}
|
||||
};
|
||||
|
||||
onSearch = async (term = '') => {
|
||||
this.loadPage(0, term, this.state.filters);
|
||||
}
|
||||
};
|
||||
|
||||
getColumns = (): Column[] => {
|
||||
const name: JSX.Element = (
|
||||
@@ -167,7 +167,7 @@ export default class ChannelList extends React.PureComponent<ChannelListProps, C
|
||||
fixed: true,
|
||||
},
|
||||
];
|
||||
}
|
||||
};
|
||||
|
||||
getRows = (): Row[] => {
|
||||
const {data} = this.props;
|
||||
@@ -245,7 +245,7 @@ export default class ChannelList extends React.PureComponent<ChannelListProps, C
|
||||
onClick: () => getHistory().push(`/admin_console/user_management/channels/${channel.id}`),
|
||||
};
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
onFilter = (filterOptions: FilterOptions) => {
|
||||
const filters: ChannelSearchOpts = {};
|
||||
@@ -285,7 +285,7 @@ export default class ChannelList extends React.PureComponent<ChannelListProps, C
|
||||
}
|
||||
}
|
||||
this.loadPage(0, this.state.term, filters);
|
||||
}
|
||||
};
|
||||
|
||||
render = (): JSX.Element => {
|
||||
const {term, searchErrored} = this.state;
|
||||
@@ -414,5 +414,5 @@ export default class ChannelList extends React.PureComponent<ChannelListProps, C
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ export default class GroupList extends React.PureComponent<Props> {
|
||||
isDisabled={this.props.isDisabled}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
render(): JSX.Element {
|
||||
return (
|
||||
|
||||
@@ -36,11 +36,11 @@ export default class GroupMembersModal extends React.PureComponent<Props, State>
|
||||
|
||||
handleHide = () => {
|
||||
this.setState({show: false});
|
||||
}
|
||||
};
|
||||
|
||||
handleExit = () => {
|
||||
this.props.onExited();
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const {group} = this.props;
|
||||
|
||||
@@ -63,7 +63,7 @@ export default class GroupRow extends React.PureComponent<GroupRowProps> {
|
||||
return teamAdmin;
|
||||
}
|
||||
return member;
|
||||
}
|
||||
};
|
||||
|
||||
displayRoleToBe = () => {
|
||||
const {group, type} = this.props;
|
||||
@@ -73,7 +73,7 @@ export default class GroupRow extends React.PureComponent<GroupRowProps> {
|
||||
return localizeMessage('admin.team_channel_settings.group_row.teamAdmin', 'Team Admin');
|
||||
}
|
||||
return localizeMessage('admin.team_channel_settings.group_row.member', 'Member');
|
||||
}
|
||||
};
|
||||
|
||||
render = () => {
|
||||
const {group} = this.props;
|
||||
|
||||
@@ -83,7 +83,7 @@ export default class UsersToRemove extends React.PureComponent<Props, State> {
|
||||
|
||||
setStateLoading = (loading: boolean) => {
|
||||
this.setState({loading});
|
||||
}
|
||||
};
|
||||
|
||||
componentWillUnmount() {
|
||||
this.props.actions.setModalSearchTerm('');
|
||||
@@ -98,23 +98,23 @@ export default class UsersToRemove extends React.PureComponent<Props, State> {
|
||||
} else if (scope === 'team') {
|
||||
await loadTeamMembersForProfilesList(profiles, scopeId);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
previousPage = async () => {
|
||||
const page = this.state.page < 1 ? 0 : this.state.page - 1;
|
||||
this.setState({page});
|
||||
}
|
||||
};
|
||||
|
||||
nextPage = async () => {
|
||||
const {total} = this.props;
|
||||
const page = (this.state.page + 1) * GROUP_MEMBERS_PAGE_SIZE >= total ? this.state.page : this.state.page + 1;
|
||||
this.setState({page});
|
||||
}
|
||||
};
|
||||
|
||||
onSearch = (term: string) => {
|
||||
this.props.actions.setModalSearchTerm(term);
|
||||
this.setState({page: 0});
|
||||
}
|
||||
};
|
||||
|
||||
private onFilter = async (filterOptions: FilterOptions) => {
|
||||
const roles = filterOptions.role.values;
|
||||
@@ -147,7 +147,7 @@ export default class UsersToRemove extends React.PureComponent<Props, State> {
|
||||
}
|
||||
this.props.actions.setModalFilters(filters);
|
||||
this.setState({page: 0});
|
||||
}
|
||||
};
|
||||
|
||||
private getPaginationProps = () => {
|
||||
const {page} = this.state;
|
||||
@@ -161,7 +161,7 @@ export default class UsersToRemove extends React.PureComponent<Props, State> {
|
||||
const firstPage = page === 0;
|
||||
|
||||
return {startCount, endCount, page, lastPage, firstPage, total};
|
||||
}
|
||||
};
|
||||
|
||||
private getRows = (): Row[] => {
|
||||
const {members, memberships, scope} = this.props;
|
||||
@@ -201,7 +201,7 @@ export default class UsersToRemove extends React.PureComponent<Props, State> {
|
||||
},
|
||||
};
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
private getColumns = (): Column[] => {
|
||||
return [
|
||||
@@ -236,7 +236,7 @@ export default class UsersToRemove extends React.PureComponent<Props, State> {
|
||||
width: 3,
|
||||
},
|
||||
];
|
||||
}
|
||||
};
|
||||
|
||||
private getFilterOptions = (): FilterOptions => {
|
||||
const filterOptions: FilterOptions = {
|
||||
@@ -325,7 +325,7 @@ export default class UsersToRemove extends React.PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
return filterOptions;
|
||||
}
|
||||
};
|
||||
|
||||
public render = (): JSX.Element => {
|
||||
const rows: Row[] = this.getRows();
|
||||
@@ -360,5 +360,5 @@ export default class UsersToRemove extends React.PureComponent<Props, State> {
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -135,7 +135,7 @@ export default class TeamDetails extends React.PureComponent<Props, State> {
|
||||
return g;
|
||||
});
|
||||
this.processGroupsChange(groups);
|
||||
}
|
||||
};
|
||||
|
||||
handleSubmit = async () => {
|
||||
this.setState({showRemoveConfirmation: false, saving: true});
|
||||
@@ -290,7 +290,7 @@ export default class TeamDetails extends React.PureComponent<Props, State> {
|
||||
getHistory().push('/admin_console/user_management/teams');
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
setToggles = (syncChecked: boolean, allAllowedChecked: boolean, allowedDomainsChecked: boolean, allowedDomains: string) => {
|
||||
this.setState({
|
||||
@@ -301,7 +301,7 @@ export default class TeamDetails extends React.PureComponent<Props, State> {
|
||||
allowedDomains,
|
||||
}, () => this.processGroupsChange(this.state.groups));
|
||||
this.props.actions.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
async processGroupsChange(groups: Group[]) {
|
||||
const {teamID, actions} = this.props;
|
||||
@@ -348,7 +348,7 @@ export default class TeamDetails extends React.PureComponent<Props, State> {
|
||||
});
|
||||
this.setState({usersToAdd: {...usersToAddCopy}, usersToRemove: {...usersToRemove}, usersToRemoveCount, saveNeeded: true});
|
||||
this.props.actions.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
addUserToRemove = (user: UserProfile) => {
|
||||
let {usersToRemoveCount} = this.state;
|
||||
@@ -362,26 +362,26 @@ export default class TeamDetails extends React.PureComponent<Props, State> {
|
||||
delete rolesToUpdate[user.id];
|
||||
this.setState({usersToRemove: {...usersToRemove}, usersToAdd: {...usersToAdd}, rolesToUpdate: {...rolesToUpdate}, usersToRemoveCount, saveNeeded: true});
|
||||
this.props.actions.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
addRolesToUpdate = (userId: string, schemeUser: boolean, schemeAdmin: boolean) => {
|
||||
const {rolesToUpdate} = this.state;
|
||||
rolesToUpdate[userId] = {schemeUser, schemeAdmin};
|
||||
this.setState({rolesToUpdate: {...rolesToUpdate}, saveNeeded: true});
|
||||
this.props.actions.setNavigationBlocked(true);
|
||||
}
|
||||
};
|
||||
|
||||
handleGroupRemoved = (gid: string) => {
|
||||
const groups = this.state.groups.filter((g) => g.id !== gid);
|
||||
this.setState({totalGroups: this.state.totalGroups - 1});
|
||||
this.processGroupsChange(groups);
|
||||
}
|
||||
};
|
||||
|
||||
handleGroupChange = (groupIDs: string[]) => {
|
||||
const groups = [...this.state.groups, ...groupIDs.map((gid) => this.props.allGroups[gid])];
|
||||
this.setState({totalGroups: this.state.totalGroups + groupIDs.length});
|
||||
this.processGroupsChange(groups);
|
||||
}
|
||||
};
|
||||
|
||||
hideRemoveUsersModal = () => this.setState({showRemoveConfirmation: false});
|
||||
|
||||
@@ -395,19 +395,19 @@ export default class TeamDetails extends React.PureComponent<Props, State> {
|
||||
} else {
|
||||
this.handleSubmit();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
teamToBeArchived = () => {
|
||||
const {isLocalArchived} = this.state;
|
||||
const isServerArchived = this.props.team.delete_at !== 0;
|
||||
return isLocalArchived && !isServerArchived;
|
||||
}
|
||||
};
|
||||
|
||||
teamToBeRestored = () => {
|
||||
const {isLocalArchived} = this.state;
|
||||
const isServerArchived = this.props.team.delete_at !== 0;
|
||||
return !isLocalArchived && isServerArchived;
|
||||
}
|
||||
};
|
||||
|
||||
onToggleArchive = () => {
|
||||
const {isLocalArchived, serverError, previousServerError} = this.state;
|
||||
|
||||
@@ -126,25 +126,25 @@ export default class TeamMembers extends React.PureComponent<Props, State> {
|
||||
|
||||
private setStateLoading = (loading: boolean) => {
|
||||
this.setState({loading});
|
||||
}
|
||||
};
|
||||
|
||||
private loadPage = async (page: number) => {
|
||||
const {loadProfilesAndReloadTeamMembers} = this.props.actions;
|
||||
const {teamId, filters} = this.props;
|
||||
await loadProfilesAndReloadTeamMembers(page + 1, PROFILE_CHUNK_SIZE, teamId, {active: true, ...filters});
|
||||
}
|
||||
};
|
||||
|
||||
private removeUser = (user: UserProfile) => {
|
||||
this.props.onRemoveCallback(user);
|
||||
}
|
||||
};
|
||||
|
||||
private onAddCallback = (users: UserProfile[]) => {
|
||||
this.props.onAddCallback(users);
|
||||
}
|
||||
};
|
||||
|
||||
private onSearch = async (term: string) => {
|
||||
this.props.actions.setUserGridSearch(term);
|
||||
}
|
||||
};
|
||||
|
||||
private onFilter = async (filterOptions: FilterOptions) => {
|
||||
const roles = filterOptions.role.values;
|
||||
@@ -177,11 +177,11 @@ export default class TeamMembers extends React.PureComponent<Props, State> {
|
||||
} else {
|
||||
this.props.actions.setUserGridFilters(filters);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private updateMembership = (membership: BaseMembership) => {
|
||||
this.props.updateRole(membership.user_id, membership.scheme_user, membership.scheme_admin);
|
||||
}
|
||||
};
|
||||
|
||||
public render = () => {
|
||||
const {users, team, usersToAdd, usersToRemove, teamMembers, totalCount, searchTerm, isDisabled} = this.props;
|
||||
@@ -294,5 +294,5 @@ export default class TeamMembers extends React.PureComponent<Props, State> {
|
||||
/>
|
||||
</AdminPanel>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
|
||||
isSearching = (term: string, filters: TeamSearchOpts) => {
|
||||
return (term.length + Object.keys(filters).length) > 0;
|
||||
}
|
||||
};
|
||||
|
||||
getPaginationProps = () => {
|
||||
const {page, term, filters} = this.state;
|
||||
@@ -70,7 +70,7 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
let endCount = (page + 1) * PAGE_SIZE;
|
||||
endCount = endCount > total ? total : endCount;
|
||||
return {startCount, endCount, total};
|
||||
}
|
||||
};
|
||||
|
||||
loadPage = async (page = 0, term = '', filters = {}) => {
|
||||
this.setState({loading: true, term, filters});
|
||||
@@ -86,7 +86,7 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
|
||||
await this.props.actions.getData(page, PAGE_SIZE);
|
||||
this.setState({page, loading: false});
|
||||
}
|
||||
};
|
||||
|
||||
searchTeams = async (page = 0, term = '', filters = {}) => {
|
||||
let teams: Team[] = [];
|
||||
@@ -99,17 +99,17 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
searchErrored = false;
|
||||
}
|
||||
this.setState({page, loading: false, teams, total, searchErrored});
|
||||
}
|
||||
};
|
||||
|
||||
searchTeamsDebounced = debounce((page, term, filters = {}) => this.searchTeams(page, term, filters), 300, false, () => {});
|
||||
|
||||
nextPage = () => {
|
||||
this.loadPage(this.state.page + 1, this.state.term, this.state.filters);
|
||||
}
|
||||
};
|
||||
|
||||
previousPage = () => {
|
||||
this.setState({page: this.state.page - 1});
|
||||
}
|
||||
};
|
||||
|
||||
onSearch = (term = '') => {
|
||||
this.loadPage(0, term, this.state.filters);
|
||||
@@ -151,7 +151,7 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
this.loadPage(0, this.state.term, filters);
|
||||
}
|
||||
};
|
||||
|
||||
getColumns = (): Column[] => {
|
||||
const name = (
|
||||
@@ -186,7 +186,7 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
fixed: true,
|
||||
},
|
||||
];
|
||||
}
|
||||
};
|
||||
|
||||
renderManagementMethodText = (team: Team) => {
|
||||
if (team.group_constrained) {
|
||||
@@ -210,7 +210,7 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
defaultMessage='Invite Only'
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
getRows = () => {
|
||||
const {data} = this.props;
|
||||
@@ -278,7 +278,7 @@ export default class TeamList extends React.PureComponent<Props, State> {
|
||||
onClick: () => getHistory().push(`/admin_console/user_management/teams/${team.id}`),
|
||||
};
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const {term, searchErrored} = this.state;
|
||||
|
||||
@@ -70,32 +70,32 @@ export default class UserGrid extends React.PureComponent<Props, State> {
|
||||
this.setState({loading: true});
|
||||
this.props.loadPage(page);
|
||||
this.setState({page, loading: false});
|
||||
}
|
||||
};
|
||||
|
||||
private nextPage = () => {
|
||||
this.loadPage(this.state.page + 1);
|
||||
}
|
||||
};
|
||||
|
||||
private previousPage = () => {
|
||||
this.loadPage(this.state.page - 1);
|
||||
}
|
||||
};
|
||||
|
||||
private onSearch = async (term: string) => {
|
||||
this.props.onSearch(term);
|
||||
this.setState({page: 0});
|
||||
}
|
||||
};
|
||||
|
||||
private onFilter = async (filters: FilterOptions) => {
|
||||
this.props.filterProps?.onFilter(filters);
|
||||
this.setState({page: 0});
|
||||
}
|
||||
};
|
||||
|
||||
private getVisibleTotalCount = (): number => {
|
||||
const {includeUsers, excludeUsers, totalCount} = this.props;
|
||||
const includeUsersCount = Object.keys(includeUsers).length;
|
||||
const excludeUsersCount = Object.keys(excludeUsers).length;
|
||||
return totalCount + (includeUsersCount - excludeUsersCount);
|
||||
}
|
||||
};
|
||||
|
||||
public getPaginationProps = (): {startCount: number; endCount: number; total: number} => {
|
||||
const {includeUsers, excludeUsers, term} = this.props;
|
||||
@@ -120,7 +120,7 @@ export default class UserGrid extends React.PureComponent<Props, State> {
|
||||
endCount = endCount > total ? total : endCount;
|
||||
|
||||
return {startCount, endCount, total};
|
||||
}
|
||||
};
|
||||
|
||||
private removeUser = (user: UserProfile) => {
|
||||
const {excludeUsers} = this.props;
|
||||
@@ -137,7 +137,7 @@ export default class UserGrid extends React.PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
this.setState({page});
|
||||
}
|
||||
};
|
||||
|
||||
private updateMembership = (membership: BaseMembership) => {
|
||||
const {membershipsToUpdate} = this.state;
|
||||
@@ -150,7 +150,7 @@ export default class UserGrid extends React.PureComponent<Props, State> {
|
||||
|
||||
this.props.updateMembership(membership);
|
||||
this.setState({membershipsToUpdate}, this.forceUpdate);
|
||||
}
|
||||
};
|
||||
|
||||
private newMembership = (user: UserProfile): BaseMembership => {
|
||||
return {
|
||||
@@ -158,7 +158,7 @@ export default class UserGrid extends React.PureComponent<Props, State> {
|
||||
scheme_admin: false,
|
||||
scheme_user: !user.roles.includes('guest'),
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
private getRows = (): Row[] => {
|
||||
const {page, membershipsToUpdate} = this.state;
|
||||
@@ -226,7 +226,7 @@ export default class UserGrid extends React.PureComponent<Props, State> {
|
||||
},
|
||||
};
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
private getColumns = (): Column[] => {
|
||||
const name: JSX.Element = (
|
||||
@@ -268,7 +268,7 @@ export default class UserGrid extends React.PureComponent<Props, State> {
|
||||
fixed: true,
|
||||
},
|
||||
];
|
||||
}
|
||||
};
|
||||
|
||||
public render = (): JSX.Element => {
|
||||
const rows: Row[] = this.getRows();
|
||||
@@ -304,5 +304,5 @@ export default class UserGrid extends React.PureComponent<Props, State> {
|
||||
filterProps={{...this.props.filterProps, onFilter: this.onFilter}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -34,5 +34,5 @@ export default class UserGridName extends React.Component<Props> {
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ export default class UserGridRemove extends React.PureComponent<Props> {
|
||||
return;
|
||||
}
|
||||
this.props.removeUser(this.props.user);
|
||||
}
|
||||
};
|
||||
|
||||
public render = (): JSX.Element => {
|
||||
const {isDisabled} = this.props;
|
||||
@@ -39,5 +39,5 @@ export default class UserGridRemove extends React.PureComponent<Props> {
|
||||
</a>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Ссылка в новой задаче
Block a user