[MM-14093] Rename 'team' to 'server' and 'tab' to 'view' in most cases, some additional cleanup (#2711)
* Rename MattermostTeam -> UniqueServer, MattermostTab -> UniqueView * Rename 'team' to 'server' * Some further cleanup * Rename weirdly named function * Rename 'tab' to 'view' in most instances * Fix i18n * PR feedback
This commit is contained in:
@@ -5,7 +5,7 @@ import React, {useState, useCallback, useEffect} from 'react';
|
||||
import {useIntl, FormattedMessage} from 'react-intl';
|
||||
import classNames from 'classnames';
|
||||
|
||||
import {MattermostTeam} from 'types/config';
|
||||
import {UniqueServer} from 'types/config';
|
||||
|
||||
import {isValidURL, parseURL} from 'common/utils/url';
|
||||
import {MODAL_TRANSITION_TIMEOUT} from 'common/utils/constants';
|
||||
@@ -22,8 +22,8 @@ import 'renderer/css/components/ConfigureServer.scss';
|
||||
import 'renderer/css/components/LoadingScreen.css';
|
||||
|
||||
type ConfigureServerProps = {
|
||||
currentTeams: MattermostTeam[];
|
||||
team?: MattermostTeam;
|
||||
currentServers: UniqueServer[];
|
||||
server?: UniqueServer;
|
||||
mobileView?: boolean;
|
||||
darkMode?: boolean;
|
||||
messageTitle?: string;
|
||||
@@ -32,12 +32,12 @@ type ConfigureServerProps = {
|
||||
alternateLinkMessage?: string;
|
||||
alternateLinkText?: string;
|
||||
alternateLinkURL?: string;
|
||||
onConnect: (data: MattermostTeam) => void;
|
||||
onConnect: (data: UniqueServer) => void;
|
||||
};
|
||||
|
||||
function ConfigureServer({
|
||||
currentTeams,
|
||||
team,
|
||||
currentServers,
|
||||
server,
|
||||
mobileView,
|
||||
darkMode,
|
||||
messageTitle,
|
||||
@@ -54,7 +54,7 @@ function ConfigureServer({
|
||||
name: prevName,
|
||||
url: prevURL,
|
||||
id,
|
||||
} = team || {};
|
||||
} = server || {};
|
||||
|
||||
const [transition, setTransition] = useState<'inFromRight' | 'outToLeft'>();
|
||||
const [name, setName] = useState(prevName || '');
|
||||
@@ -92,14 +92,14 @@ function ConfigureServer({
|
||||
|
||||
if (!newName) {
|
||||
return formatMessage({
|
||||
id: 'renderer.components.newTeamModal.error.nameRequired',
|
||||
id: 'renderer.components.newServerModal.error.nameRequired',
|
||||
defaultMessage: 'Name is required.',
|
||||
});
|
||||
}
|
||||
|
||||
if (currentTeams.find(({name: existingName}) => existingName === newName)) {
|
||||
if (currentServers.find(({name: existingName}) => existingName === newName)) {
|
||||
return formatMessage({
|
||||
id: 'renderer.components.newTeamModal.error.serverNameExists',
|
||||
id: 'renderer.components.newServerModal.error.serverNameExists',
|
||||
defaultMessage: 'A server with the same name already exists.',
|
||||
});
|
||||
}
|
||||
@@ -110,28 +110,28 @@ function ConfigureServer({
|
||||
const validateURL = async (fullURL: string) => {
|
||||
if (!fullURL) {
|
||||
return formatMessage({
|
||||
id: 'renderer.components.newTeamModal.error.urlRequired',
|
||||
id: 'renderer.components.newServerModal.error.urlRequired',
|
||||
defaultMessage: 'URL is required.',
|
||||
});
|
||||
}
|
||||
|
||||
if (!parseURL(fullURL)) {
|
||||
return formatMessage({
|
||||
id: 'renderer.components.newTeamModal.error.urlIncorrectFormatting',
|
||||
id: 'renderer.components.newServerModal.error.urlIncorrectFormatting',
|
||||
defaultMessage: 'URL is not formatted correctly.',
|
||||
});
|
||||
}
|
||||
|
||||
if (!isValidURL(fullURL)) {
|
||||
return formatMessage({
|
||||
id: 'renderer.components.newTeamModal.error.urlNeedsHttp',
|
||||
id: 'renderer.components.newServerModal.error.urlNeedsHttp',
|
||||
defaultMessage: 'URL should start with http:// or https://.',
|
||||
});
|
||||
}
|
||||
|
||||
if (currentTeams.find(({url: existingURL}) => parseURL(existingURL)?.toString === parseURL(fullURL)?.toString())) {
|
||||
if (currentServers.find(({url: existingURL}) => parseURL(existingURL)?.toString === parseURL(fullURL)?.toString())) {
|
||||
return formatMessage({
|
||||
id: 'renderer.components.newTeamModal.error.serverUrlExists',
|
||||
id: 'renderer.components.newServerModal.error.serverUrlExists',
|
||||
defaultMessage: 'A server with the same URL already exists.',
|
||||
});
|
||||
}
|
||||
|
@@ -10,7 +10,7 @@ import {Container, Row} from 'react-bootstrap';
|
||||
import {DropResult} from 'react-beautiful-dnd';
|
||||
import {injectIntl, IntlShape} from 'react-intl';
|
||||
|
||||
import {MattermostTab, MattermostTeam} from 'types/config';
|
||||
import {UniqueView, UniqueServer} from 'types/config';
|
||||
import {DownloadedItems} from 'types/downloads';
|
||||
|
||||
import restoreButton from '../../assets/titlebar/chrome-restore.svg';
|
||||
@@ -23,7 +23,7 @@ import {playSound} from '../notificationSounds';
|
||||
import TabBar from './TabBar';
|
||||
import ExtraBar from './ExtraBar';
|
||||
import ErrorView from './ErrorView';
|
||||
import TeamDropdownButton from './TeamDropdownButton';
|
||||
import ServerDropdownButton from './ServerDropdownButton';
|
||||
import DownloadsDropdownButton from './DownloadsDropdown/DownloadsDropdownButton';
|
||||
|
||||
import '../css/components/UpgradeButton.scss';
|
||||
@@ -47,8 +47,8 @@ type Props = {
|
||||
type State = {
|
||||
activeServerId?: string;
|
||||
activeTabId?: string;
|
||||
servers: MattermostTeam[];
|
||||
tabs: Map<string, MattermostTab[]>;
|
||||
servers: UniqueServer[];
|
||||
tabs: Map<string, UniqueView[]>;
|
||||
sessionsExpired: Record<string, boolean>;
|
||||
unreadCounts: Record<string, boolean>;
|
||||
mentionCounts: Record<string, number>;
|
||||
@@ -147,7 +147,7 @@ class MainPage extends React.PureComponent<Props, State> {
|
||||
|
||||
setInitialActiveTab = async () => {
|
||||
const lastActive = await window.desktop.getLastActive();
|
||||
this.setActiveView(lastActive.server, lastActive.tab);
|
||||
this.setActiveView(lastActive.server, lastActive.view);
|
||||
}
|
||||
|
||||
updateServers = async () => {
|
||||
@@ -239,11 +239,11 @@ class MainPage extends React.PureComponent<Props, State> {
|
||||
this.setState({unreadCounts: newUnreads, mentionCounts: newMentionCounts, sessionsExpired: expired});
|
||||
});
|
||||
|
||||
window.desktop.onCloseTeamsDropdown(() => {
|
||||
window.desktop.onCloseServersDropdown(() => {
|
||||
this.setState({isMenuOpen: false});
|
||||
});
|
||||
|
||||
window.desktop.onOpenTeamsDropdown(() => {
|
||||
window.desktop.onOpenServersDropdown(() => {
|
||||
this.setState({isMenuOpen: true});
|
||||
});
|
||||
|
||||
@@ -290,7 +290,7 @@ class MainPage extends React.PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
handleCloseDropdowns = () => {
|
||||
window.desktop.closeTeamsDropdown();
|
||||
window.desktop.closeServersDropdown();
|
||||
this.closeDownloadsDropdown();
|
||||
}
|
||||
|
||||
@@ -307,7 +307,7 @@ class MainPage extends React.PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
handleCloseTab = (tabId: string) => {
|
||||
window.desktop.closeTab(tabId);
|
||||
window.desktop.closeView(tabId);
|
||||
}
|
||||
|
||||
handleDragAndDrop = async (dropResult: DropResult) => {
|
||||
@@ -399,7 +399,7 @@ class MainPage extends React.PureComponent<Props, State> {
|
||||
|
||||
render() {
|
||||
const {intl} = this.props;
|
||||
let currentTabs: MattermostTab[] = [];
|
||||
let currentTabs: UniqueView[] = [];
|
||||
if (this.state.activeServerId) {
|
||||
currentTabs = this.state.tabs.get(this.state.activeServerId) ?? [];
|
||||
}
|
||||
@@ -538,7 +538,7 @@ class MainPage extends React.PureComponent<Props, State> {
|
||||
/>
|
||||
</button>
|
||||
{activeServer && (
|
||||
<TeamDropdownButton
|
||||
<ServerDropdownButton
|
||||
isDisabled={this.state.modalOpen}
|
||||
activeServerName={activeServer.name}
|
||||
totalMentionCount={totalMentionCount}
|
||||
|
@@ -6,15 +6,15 @@ import React from 'react';
|
||||
import {Modal, Button, FormGroup, FormControl, FormLabel, FormText} from 'react-bootstrap';
|
||||
import {FormattedMessage, injectIntl, IntlShape} from 'react-intl';
|
||||
|
||||
import {MattermostTeam} from 'types/config';
|
||||
import {UniqueServer} from 'types/config';
|
||||
|
||||
import {isValidURL} from 'common/utils/url';
|
||||
|
||||
type Props = {
|
||||
onClose?: () => void;
|
||||
onSave?: (team: MattermostTeam) => void;
|
||||
team?: MattermostTeam;
|
||||
currentTeams?: MattermostTeam[];
|
||||
onSave?: (server: UniqueServer) => void;
|
||||
server?: UniqueServer;
|
||||
currentServers?: UniqueServer[];
|
||||
editMode?: boolean;
|
||||
show?: boolean;
|
||||
restoreFocus?: boolean;
|
||||
@@ -24,16 +24,16 @@ type Props = {
|
||||
};
|
||||
|
||||
type State = {
|
||||
teamName: string;
|
||||
teamUrl: string;
|
||||
teamId?: string;
|
||||
teamOrder: number;
|
||||
serverName: string;
|
||||
serverUrl: string;
|
||||
serverId?: string;
|
||||
serverOrder: number;
|
||||
saveStarted: boolean;
|
||||
}
|
||||
|
||||
class NewTeamModal extends React.PureComponent<Props, State> {
|
||||
class NewServerModal extends React.PureComponent<Props, State> {
|
||||
wasShown?: boolean;
|
||||
teamUrlInputRef?: HTMLInputElement;
|
||||
serverUrlInputRef?: HTMLInputElement;
|
||||
|
||||
static defaultProps = {
|
||||
restoreFocus: true,
|
||||
@@ -44,90 +44,90 @@ class NewTeamModal extends React.PureComponent<Props, State> {
|
||||
|
||||
this.wasShown = false;
|
||||
this.state = {
|
||||
teamName: '',
|
||||
teamUrl: '',
|
||||
teamOrder: props.currentOrder || 0,
|
||||
serverName: '',
|
||||
serverUrl: '',
|
||||
serverOrder: props.currentOrder || 0,
|
||||
saveStarted: false,
|
||||
};
|
||||
}
|
||||
|
||||
initializeOnShow() {
|
||||
this.setState({
|
||||
teamName: this.props.team ? this.props.team.name : '',
|
||||
teamUrl: this.props.team ? this.props.team.url : '',
|
||||
teamId: this.props.team?.id,
|
||||
serverName: this.props.server ? this.props.server.name : '',
|
||||
serverUrl: this.props.server ? this.props.server.url : '',
|
||||
serverId: this.props.server?.id,
|
||||
saveStarted: false,
|
||||
});
|
||||
}
|
||||
|
||||
getTeamNameValidationError() {
|
||||
getServerNameValidationError() {
|
||||
if (!this.state.saveStarted) {
|
||||
return null;
|
||||
}
|
||||
if (this.props.currentTeams) {
|
||||
const currentTeams = [...this.props.currentTeams];
|
||||
if (currentTeams.find((team) => team.id !== this.state.teamId && team.name === this.state.teamName)) {
|
||||
if (this.props.currentServers) {
|
||||
const currentServers = [...this.props.currentServers];
|
||||
if (currentServers.find((server) => server.id !== this.state.serverId && server.name === this.state.serverName)) {
|
||||
return (
|
||||
<FormattedMessage
|
||||
id='renderer.components.newTeamModal.error.serverNameExists'
|
||||
id='renderer.components.newServerModal.error.serverNameExists'
|
||||
defaultMessage='A server with the same name already exists.'
|
||||
/>
|
||||
);
|
||||
}
|
||||
}
|
||||
return this.state.teamName.length > 0 ? null : (
|
||||
return this.state.serverName.length > 0 ? null : (
|
||||
<FormattedMessage
|
||||
id='renderer.components.newTeamModal.error.nameRequired'
|
||||
id='renderer.components.newServerModal.error.nameRequired'
|
||||
defaultMessage='Name is required.'
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
getTeamNameValidationState() {
|
||||
return this.getTeamNameValidationError() === null ? null : 'error';
|
||||
getServerNameValidationState() {
|
||||
return this.getServerNameValidationError() === null ? null : 'error';
|
||||
}
|
||||
|
||||
handleTeamNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
handleServerNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
this.setState({
|
||||
teamName: e.target.value,
|
||||
serverName: e.target.value,
|
||||
});
|
||||
}
|
||||
|
||||
getTeamUrlValidationError() {
|
||||
getServerUrlValidationError() {
|
||||
if (!this.state.saveStarted) {
|
||||
return null;
|
||||
}
|
||||
if (this.props.currentTeams) {
|
||||
const currentTeams = [...this.props.currentTeams];
|
||||
if (currentTeams.find((team) => team.id !== this.state.teamId && team.url === this.state.teamUrl)) {
|
||||
if (this.props.currentServers) {
|
||||
const currentServers = [...this.props.currentServers];
|
||||
if (currentServers.find((server) => server.id !== this.state.serverId && server.url === this.state.serverUrl)) {
|
||||
return (
|
||||
<FormattedMessage
|
||||
id='renderer.components.newTeamModal.error.serverUrlExists'
|
||||
id='renderer.components.newServerModal.error.serverUrlExists'
|
||||
defaultMessage='A server with the same URL already exists.'
|
||||
/>
|
||||
);
|
||||
}
|
||||
}
|
||||
if (this.state.teamUrl.length === 0) {
|
||||
if (this.state.serverUrl.length === 0) {
|
||||
return (
|
||||
<FormattedMessage
|
||||
id='renderer.components.newTeamModal.error.urlRequired'
|
||||
id='renderer.components.newServerModal.error.urlRequired'
|
||||
defaultMessage='URL is required.'
|
||||
/>
|
||||
);
|
||||
}
|
||||
if (!(/^https?:\/\/.*/).test(this.state.teamUrl.trim())) {
|
||||
if (!(/^https?:\/\/.*/).test(this.state.serverUrl.trim())) {
|
||||
return (
|
||||
<FormattedMessage
|
||||
id='renderer.components.newTeamModal.error.urlNeedsHttp'
|
||||
id='renderer.components.newServerModal.error.urlNeedsHttp'
|
||||
defaultMessage='URL should start with http:// or https://.'
|
||||
/>
|
||||
);
|
||||
}
|
||||
if (!isValidURL(this.state.teamUrl.trim())) {
|
||||
if (!isValidURL(this.state.serverUrl.trim())) {
|
||||
return (
|
||||
<FormattedMessage
|
||||
id='renderer.components.newTeamModal.error.urlIncorrectFormatting'
|
||||
id='renderer.components.newServerModal.error.urlIncorrectFormatting'
|
||||
defaultMessage='URL is not formatted correctly.'
|
||||
/>
|
||||
);
|
||||
@@ -135,32 +135,32 @@ class NewTeamModal extends React.PureComponent<Props, State> {
|
||||
return null;
|
||||
}
|
||||
|
||||
getTeamUrlValidationState() {
|
||||
return this.getTeamUrlValidationError() === null ? null : 'error';
|
||||
getServerUrlValidationState() {
|
||||
return this.getServerUrlValidationError() === null ? null : 'error';
|
||||
}
|
||||
|
||||
handleTeamUrlChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
const teamUrl = e.target.value;
|
||||
this.setState({teamUrl});
|
||||
handleServerUrlChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
const serverUrl = e.target.value;
|
||||
this.setState({serverUrl});
|
||||
}
|
||||
|
||||
addProtocolToUrl = (teamUrl: string): Promise<void> => {
|
||||
if (teamUrl.startsWith('http://') || teamUrl.startsWith('https://')) {
|
||||
addProtocolToUrl = (serverUrl: string): Promise<void> => {
|
||||
if (serverUrl.startsWith('http://') || serverUrl.startsWith('https://')) {
|
||||
return Promise.resolve(undefined);
|
||||
}
|
||||
|
||||
return window.desktop.modals.pingDomain(teamUrl).
|
||||
return window.desktop.modals.pingDomain(serverUrl).
|
||||
then((result: string) => {
|
||||
this.setState({teamUrl: `${result}://${this.state.teamUrl}`});
|
||||
this.setState({serverUrl: `${result}://${this.state.serverUrl}`});
|
||||
}).
|
||||
catch(() => {
|
||||
console.error(`Could not ping url: ${teamUrl}`);
|
||||
console.error(`Could not ping url: ${serverUrl}`);
|
||||
});
|
||||
}
|
||||
|
||||
getError() {
|
||||
const nameError = this.getTeamNameValidationError();
|
||||
const urlError = this.getTeamUrlValidationError();
|
||||
const nameError = this.getServerNameValidationError();
|
||||
const urlError = this.getServerUrlValidationError();
|
||||
|
||||
if (nameError && urlError) {
|
||||
return (
|
||||
@@ -179,20 +179,20 @@ class NewTeamModal extends React.PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
validateForm() {
|
||||
return this.getTeamNameValidationState() === null &&
|
||||
this.getTeamUrlValidationState() === null;
|
||||
return this.getServerNameValidationState() === null &&
|
||||
this.getServerUrlValidationState() === null;
|
||||
}
|
||||
|
||||
save = async () => {
|
||||
await this.addProtocolToUrl(this.state.teamUrl);
|
||||
await this.addProtocolToUrl(this.state.serverUrl);
|
||||
this.setState({
|
||||
saveStarted: true,
|
||||
}, () => {
|
||||
if (this.validateForm()) {
|
||||
this.props.onSave?.({
|
||||
url: this.state.teamUrl,
|
||||
name: this.state.teamName,
|
||||
id: this.state.teamId,
|
||||
url: this.state.serverUrl,
|
||||
name: this.state.serverName,
|
||||
id: this.state.serverId,
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -219,14 +219,14 @@ class NewTeamModal extends React.PureComponent<Props, State> {
|
||||
if (this.props.editMode) {
|
||||
return (
|
||||
<FormattedMessage
|
||||
id='renderer.components.newTeamModal.title.edit'
|
||||
id='renderer.components.newServerModal.title.edit'
|
||||
defaultMessage='Edit Server'
|
||||
/>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<FormattedMessage
|
||||
id='renderer.components.newTeamModal.title.add'
|
||||
id='renderer.components.newServerModal.title.add'
|
||||
defaultMessage='Add Server'
|
||||
/>
|
||||
);
|
||||
@@ -241,11 +241,11 @@ class NewTeamModal extends React.PureComponent<Props, State> {
|
||||
return (
|
||||
<Modal
|
||||
bsClass='modal'
|
||||
className='NewTeamModal'
|
||||
className='NewServerModal'
|
||||
show={this.props.show}
|
||||
id='newServerModal'
|
||||
enforceFocus={true}
|
||||
onEntered={() => this.teamUrlInputRef?.focus()}
|
||||
onEntered={() => this.serverUrlInputRef?.focus()}
|
||||
onHide={this.props.onClose}
|
||||
restoreFocus={this.props.restoreFocus}
|
||||
onKeyDown={(e: React.KeyboardEvent) => {
|
||||
@@ -272,58 +272,58 @@ class NewTeamModal extends React.PureComponent<Props, State> {
|
||||
<FormGroup>
|
||||
<FormLabel>
|
||||
<FormattedMessage
|
||||
id='renderer.components.newTeamModal.serverURL'
|
||||
id='renderer.components.newServerModal.serverURL'
|
||||
defaultMessage='Server URL'
|
||||
/>
|
||||
</FormLabel>
|
||||
<FormControl
|
||||
id='teamUrlInput'
|
||||
id='serverUrlInput'
|
||||
type='text'
|
||||
value={this.state.teamUrl}
|
||||
value={this.state.serverUrl}
|
||||
placeholder='https://example.com'
|
||||
onChange={this.handleTeamUrlChange}
|
||||
onChange={this.handleServerUrlChange}
|
||||
onClick={(e: React.MouseEvent<HTMLInputElement>) => {
|
||||
e.stopPropagation();
|
||||
}}
|
||||
ref={(ref: HTMLInputElement) => {
|
||||
this.teamUrlInputRef = ref;
|
||||
this.serverUrlInputRef = ref;
|
||||
if (this.props.setInputRef) {
|
||||
this.props.setInputRef(ref);
|
||||
}
|
||||
}}
|
||||
isInvalid={Boolean(this.getTeamUrlValidationState())}
|
||||
isInvalid={Boolean(this.getServerUrlValidationState())}
|
||||
autoFocus={true}
|
||||
/>
|
||||
<FormControl.Feedback/>
|
||||
<FormText>
|
||||
<FormattedMessage
|
||||
id='renderer.components.newTeamModal.serverURL.description'
|
||||
id='renderer.components.newServerModal.serverURL.description'
|
||||
defaultMessage='The URL of your Mattermost server. Must start with http:// or https://.'
|
||||
/>
|
||||
</FormText>
|
||||
</FormGroup>
|
||||
<FormGroup className='NewTeamModal-noBottomSpace'>
|
||||
<FormGroup className='NewServerModal-noBottomSpace'>
|
||||
<FormLabel>
|
||||
<FormattedMessage
|
||||
id='renderer.components.newTeamModal.serverDisplayName'
|
||||
id='renderer.components.newServerModal.serverDisplayName'
|
||||
defaultMessage='Server Display Name'
|
||||
/>
|
||||
</FormLabel>
|
||||
<FormControl
|
||||
id='teamNameInput'
|
||||
id='serverNameInput'
|
||||
type='text'
|
||||
value={this.state.teamName}
|
||||
placeholder={this.props.intl.formatMessage({id: 'renderer.components.newTeamModal.serverDisplayName', defaultMessage: 'Server Display Name'})}
|
||||
onChange={this.handleTeamNameChange}
|
||||
value={this.state.serverName}
|
||||
placeholder={this.props.intl.formatMessage({id: 'renderer.components.newServerModal.serverDisplayName', defaultMessage: 'Server Display Name'})}
|
||||
onChange={this.handleServerNameChange}
|
||||
onClick={(e: React.MouseEvent<HTMLInputElement>) => {
|
||||
e.stopPropagation();
|
||||
}}
|
||||
isInvalid={Boolean(this.getTeamNameValidationState())}
|
||||
isInvalid={Boolean(this.getServerNameValidationState())}
|
||||
/>
|
||||
<FormControl.Feedback/>
|
||||
<FormText className='NewTeamModal-noBottomSpace'>
|
||||
<FormText className='NewServerModal-noBottomSpace'>
|
||||
<FormattedMessage
|
||||
id='renderer.components.newTeamModal.serverDisplayName.description'
|
||||
id='renderer.components.newServerModal.serverDisplayName.description'
|
||||
defaultMessage='The name of the server displayed on your desktop app tab bar.'
|
||||
/>
|
||||
</FormText>
|
||||
@@ -367,4 +367,4 @@ class NewTeamModal extends React.PureComponent<Props, State> {
|
||||
}
|
||||
}
|
||||
|
||||
export default injectIntl(NewTeamModal);
|
||||
export default injectIntl(NewServerModal);
|
@@ -5,7 +5,7 @@ import classNames from 'classnames';
|
||||
import React, {useEffect} from 'react';
|
||||
import {FormattedMessage} from 'react-intl';
|
||||
|
||||
import '../css/components/TeamDropdownButton.scss';
|
||||
import '../css/components/ServerDropdownButton.scss';
|
||||
|
||||
type Props = {
|
||||
isDisabled?: boolean;
|
||||
@@ -16,7 +16,7 @@ type Props = {
|
||||
darkMode: boolean;
|
||||
}
|
||||
|
||||
const TeamDropdownButton: React.FC<Props> = (props: Props) => {
|
||||
const ServerDropdownButton: React.FC<Props> = (props: Props) => {
|
||||
const {isDisabled, activeServerName, totalMentionCount, hasUnreads, isMenuOpen, darkMode} = props;
|
||||
const buttonRef: React.RefObject<HTMLButtonElement> = React.createRef();
|
||||
|
||||
@@ -30,22 +30,22 @@ const TeamDropdownButton: React.FC<Props> = (props: Props) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
if (isMenuOpen) {
|
||||
window.desktop.closeTeamsDropdown();
|
||||
window.desktop.closeServersDropdown();
|
||||
} else {
|
||||
window.desktop.openTeamsDropdown();
|
||||
window.desktop.openServersDropdown();
|
||||
}
|
||||
};
|
||||
|
||||
let badgeDiv: React.ReactNode;
|
||||
if (totalMentionCount > 0) {
|
||||
badgeDiv = (
|
||||
<div className='TeamDropdownButton__badge-count'>
|
||||
<div className='ServerDropdownButton__badge-count'>
|
||||
<span>{totalMentionCount > 99 ? '99+' : totalMentionCount}</span>
|
||||
</div>
|
||||
);
|
||||
} else if (hasUnreads) {
|
||||
badgeDiv = (
|
||||
<div className='TeamDropdownButton__badge-unreads'/>
|
||||
<div className='ServerDropdownButton__badge-unreads'/>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ const TeamDropdownButton: React.FC<Props> = (props: Props) => {
|
||||
<button
|
||||
ref={buttonRef}
|
||||
disabled={isDisabled}
|
||||
className={classNames('TeamDropdownButton', {
|
||||
className={classNames('ServerDropdownButton', {
|
||||
disabled: isDisabled,
|
||||
isMenuOpen,
|
||||
darkMode,
|
||||
@@ -63,14 +63,14 @@ const TeamDropdownButton: React.FC<Props> = (props: Props) => {
|
||||
event.stopPropagation();
|
||||
}}
|
||||
>
|
||||
<div className='TeamDropdownButton__badge'>
|
||||
<div className='ServerDropdownButton__badge'>
|
||||
<i className='icon-server-variant'/>
|
||||
{badgeDiv}
|
||||
</div>
|
||||
{activeServerName && <span>{activeServerName}</span>}
|
||||
{!activeServerName &&
|
||||
<FormattedMessage
|
||||
id='renderer.components.teamDropdownButton.noServersConfigured'
|
||||
id='renderer.components.serverDropdownButton.noServersConfigured'
|
||||
defaultMessage='No servers configured'
|
||||
/>
|
||||
}
|
||||
@@ -79,4 +79,4 @@ const TeamDropdownButton: React.FC<Props> = (props: Props) => {
|
||||
);
|
||||
};
|
||||
|
||||
export default TeamDropdownButton;
|
||||
export default ServerDropdownButton;
|
@@ -8,9 +8,9 @@ import {DragDropContext, Draggable, DraggingStyle, Droppable, DropResult, NotDra
|
||||
import {FormattedMessage, injectIntl, IntlShape} from 'react-intl';
|
||||
import classNames from 'classnames';
|
||||
|
||||
import {MattermostTab} from 'types/config';
|
||||
import {UniqueView} from 'types/config';
|
||||
|
||||
import {TabType, canCloseTab, getTabDisplayName} from 'common/tabs/TabView';
|
||||
import {ViewType, canCloseView, getViewDisplayName} from 'common/views/View';
|
||||
|
||||
type Props = {
|
||||
activeTabId?: string;
|
||||
@@ -19,7 +19,7 @@ type Props = {
|
||||
isDarkMode: boolean;
|
||||
onSelect: (id: string) => void;
|
||||
onCloseTab: (id: string) => void;
|
||||
tabs: MattermostTab[];
|
||||
tabs: UniqueView[];
|
||||
sessionsExpired: Record<string, boolean>;
|
||||
unreadCounts: Record<string, boolean>;
|
||||
mentionCounts: Record<string, number>;
|
||||
@@ -80,7 +80,7 @@ class TabBar extends React.PureComponent<Props> {
|
||||
return (
|
||||
<Draggable
|
||||
key={tab.id}
|
||||
draggableId={`teamTabItem-${tab.id}`}
|
||||
draggableId={`serverTabItem-${tab.id}`}
|
||||
index={index}
|
||||
>
|
||||
{(provided, snapshot) => {
|
||||
@@ -98,10 +98,10 @@ class TabBar extends React.PureComponent<Props> {
|
||||
<NavItem
|
||||
ref={provided.innerRef}
|
||||
as='li'
|
||||
id={`teamTabItem${index}`}
|
||||
id={`serverTabItem${index}`}
|
||||
draggable={false}
|
||||
title={this.props.intl.formatMessage({id: `common.tabs.${tab.name}`, defaultMessage: getTabDisplayName(tab.name as TabType)})}
|
||||
className={classNames('teamTabItem', {
|
||||
title={this.props.intl.formatMessage({id: `common.tabs.${tab.name}`, defaultMessage: getViewDisplayName(tab.name as ViewType)})}
|
||||
className={classNames('serverTabItem', {
|
||||
active: this.props.activeTabId === tab.id,
|
||||
dragging: snapshot.isDragging,
|
||||
})}
|
||||
@@ -121,12 +121,12 @@ class TabBar extends React.PureComponent<Props> {
|
||||
<div className='TabBar-tabSeperator'>
|
||||
<FormattedMessage
|
||||
id={`common.tabs.${tab.name}`}
|
||||
defaultMessage={getTabDisplayName(tab.name as TabType)}
|
||||
defaultMessage={getViewDisplayName(tab.name as ViewType)}
|
||||
/>
|
||||
{ badgeDiv }
|
||||
{canCloseTab(tab.name as TabType) &&
|
||||
{canCloseView(tab.name as ViewType) &&
|
||||
<button
|
||||
className='teamTabItem__close'
|
||||
className='serverTabItem__close'
|
||||
onClick={this.onCloseTab(tab.id!)}
|
||||
>
|
||||
<i className='icon-close'/>
|
||||
|
@@ -5,7 +5,7 @@ body {
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
.NewTeamModal-noBottomSpace {
|
||||
.NewServerModal-noBottomSpace {
|
||||
padding-bottom: 0px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
@@ -1,4 +1,4 @@
|
||||
.NewTeamModal-noBottomSpace {
|
||||
.NewServerModal-noBottomSpace {
|
||||
padding-bottom: 0px;
|
||||
margin-bottom: 0px;
|
||||
}
|
@@ -1,4 +1,4 @@
|
||||
.TeamDropdownButton {
|
||||
.ServerDropdownButton {
|
||||
background-color: transparent;
|
||||
border-width: 0 1px;
|
||||
border-color: rgba(61, 60, 64, 0.08);
|
||||
@@ -17,7 +17,7 @@
|
||||
&:not(.disabled):hover {
|
||||
background-color: #f4f4f4;
|
||||
|
||||
.TeamDropdownButton__badge-count, .TeamDropdownButton__badge-unreads {
|
||||
.ServerDropdownButton__badge-count, .ServerDropdownButton__badge-unreads {
|
||||
border-color: #f4f4f4;
|
||||
}
|
||||
}
|
||||
@@ -25,7 +25,7 @@
|
||||
&:not(.disabled):focus, &.isMenuOpen {
|
||||
background-color: #fff;
|
||||
|
||||
.TeamDropdownButton__badge-count, .TeamDropdownButton__badge-unreads {
|
||||
.ServerDropdownButton__badge-count, .ServerDropdownButton__badge-unreads {
|
||||
border-color: #fff;
|
||||
}
|
||||
}
|
||||
@@ -49,11 +49,11 @@
|
||||
}
|
||||
}
|
||||
|
||||
.TeamDropdownButton__badge {
|
||||
.ServerDropdownButton__badge {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.TeamDropdownButton__badge-count {
|
||||
.ServerDropdownButton__badge-count {
|
||||
background: #F74343;
|
||||
border-radius: 8px;
|
||||
display: flex;
|
||||
@@ -77,7 +77,7 @@
|
||||
box-sizing: unset;
|
||||
}
|
||||
|
||||
.TeamDropdownButton__badge-unreads {
|
||||
.ServerDropdownButton__badge-unreads {
|
||||
background: #579eff;
|
||||
border-radius: 100px;
|
||||
width: 12px;
|
||||
@@ -88,13 +88,13 @@
|
||||
border: 2px solid #efefef;
|
||||
}
|
||||
|
||||
.TeamDropdownButton.darkMode {
|
||||
.ServerDropdownButton.darkMode {
|
||||
border-color: rgba(221, 221, 221, 0.08);
|
||||
|
||||
&:hover {
|
||||
background-color: #292929;
|
||||
|
||||
.TeamDropdownButton__badge-count, .TeamDropdownButton__badge-unreads {
|
||||
.ServerDropdownButton__badge-count, .ServerDropdownButton__badge-unreads {
|
||||
border-color: #292929;
|
||||
}
|
||||
}
|
||||
@@ -102,7 +102,7 @@
|
||||
&:focus, &.isMenuOpen {
|
||||
background-color: #1f1f1f;
|
||||
|
||||
.TeamDropdownButton__badge-count, .TeamDropdownButton__badge-unreads {
|
||||
.ServerDropdownButton__badge-count, .ServerDropdownButton__badge-unreads {
|
||||
border-color: #1f1f1f;
|
||||
}
|
||||
}
|
||||
@@ -115,15 +115,15 @@
|
||||
color: rgba(221, 221, 221, 0.56);
|
||||
}
|
||||
|
||||
.TeamDropdownButton__badge-count {
|
||||
.ServerDropdownButton__badge-count {
|
||||
border-color: #2e2e2e;
|
||||
}
|
||||
|
||||
.TeamDropdownButton__badge-unreads {
|
||||
.ServerDropdownButton__badge-unreads {
|
||||
border-color: #2e2e2e;
|
||||
}
|
||||
|
||||
.TeamDropdownButton__badge-unreads {
|
||||
.ServerDropdownButton__badge-unreads {
|
||||
background: #196CAF;
|
||||
}
|
||||
}
|
@@ -14,7 +14,7 @@
|
||||
-webkit-app-region: no-drag;
|
||||
}
|
||||
|
||||
.TabBar .teamTabItem span {
|
||||
.TabBar .serverTabItem span {
|
||||
flex: 0 1 auto;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
@@ -64,7 +64,7 @@
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.TabBar>li.teamTabItem>a>div.TabBar-tabSeperator>.teamTabItem__close {
|
||||
.TabBar>li.serverTabItem>a>div.TabBar-tabSeperator>.serverTabItem__close {
|
||||
background: none;
|
||||
border: none;
|
||||
color: rgba(61,60,64,0.32);
|
||||
@@ -72,19 +72,19 @@
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.TabBar>li.teamTabItem>a>div.TabBar-tabSeperator>.teamTabItem__close:hover {
|
||||
.TabBar>li.serverTabItem>a>div.TabBar-tabSeperator>.serverTabItem__close:hover {
|
||||
color: #3d3c40;
|
||||
}
|
||||
|
||||
.TabBar.darkMode>li.teamTabItem>a>div.TabBar-tabSeperator>.teamTabItem__close:hover {
|
||||
.TabBar.darkMode>li.serverTabItem>a>div.TabBar-tabSeperator>.serverTabItem__close:hover {
|
||||
color: #ddd;
|
||||
}
|
||||
|
||||
.TabBar>li.teamTabItem>a>div.TabBar-tabSeperator>.teamTabItem__close>i::before {
|
||||
.TabBar>li.serverTabItem>a>div.TabBar-tabSeperator>.serverTabItem__close>i::before {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.TabBar.darkMode>li.teamTabItem>a>div.TabBar-tabSeperator>.teamTabItem__close {
|
||||
.TabBar.darkMode>li.serverTabItem>a>div.TabBar-tabSeperator>.serverTabItem__close {
|
||||
color: rgba(221,221,221,0.32);
|
||||
}
|
||||
|
||||
@@ -99,39 +99,39 @@
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.TabBar>li.teamTabItem.active>a, .TabBar>li.teamTabItem.dragging>a {
|
||||
.TabBar>li.serverTabItem.active>a, .TabBar>li.serverTabItem.dragging>a {
|
||||
border: none;
|
||||
background-color: #fff;
|
||||
color: #3d3c40;
|
||||
z-index: 9;
|
||||
}
|
||||
|
||||
.TabBar.darkMode>li.teamTabItem.active>a, .TabBar.darkMode>li.teamTabItem.dragging>a {
|
||||
.TabBar.darkMode>li.serverTabItem.active>a, .TabBar.darkMode>li.serverTabItem.dragging>a {
|
||||
background-color: #1f1f1f;
|
||||
color: #ddd;
|
||||
}
|
||||
|
||||
.TabBar>li.teamTabItem:not(.active)+li.teamTabItem:not(.active)>a>div.TabBar-tabSeperator {
|
||||
.TabBar>li.serverTabItem:not(.active)+li.serverTabItem:not(.active)>a>div.TabBar-tabSeperator {
|
||||
border-left: 1px solid rgba(61,60,64,0.08);
|
||||
margin-left: -1px;
|
||||
}
|
||||
|
||||
.TabBar.darkMode>li.teamTabItem:not(.active)+li.teamTabItem:not(.active)>a>div.TabBar-tabSeperator {
|
||||
.TabBar.darkMode>li.serverTabItem:not(.active)+li.serverTabItem:not(.active)>a>div.TabBar-tabSeperator {
|
||||
border-left: 1px solid rgba(221,221,221,0.08);
|
||||
margin-left: -1px;
|
||||
}
|
||||
|
||||
.TabBar>li.teamTabItem:not(.active):not(.disabled):hover+.TabBar-addServerButton>a>div.TabBar-tabSeperator {
|
||||
.TabBar>li.serverTabItem:not(.active):not(.disabled):hover+.TabBar-addServerButton>a>div.TabBar-tabSeperator {
|
||||
border-left: none;
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
.TabBar>li.teamTabItem:not(.active):not(.disabled):hover+li.teamTabItem:not(.active)>a>div.TabBar-tabSeperator {
|
||||
.TabBar>li.serverTabItem:not(.active):not(.disabled):hover+li.serverTabItem:not(.active)>a>div.TabBar-tabSeperator {
|
||||
border-left: none;
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
.TabBar>li.teamTabItem:not(.active):not(.disabled)+li.teamTabItem:not(.active)>a:hover>div.TabBar-tabSeperator {
|
||||
.TabBar>li.serverTabItem:not(.active):not(.disabled)+li.serverTabItem:not(.active)>a:hover>div.TabBar-tabSeperator {
|
||||
border-left: none;
|
||||
margin-left: 0px;
|
||||
}
|
||||
@@ -194,6 +194,6 @@
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.TabBar .teamTabItem-unread {
|
||||
.TabBar .serverTabItem-unread {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
@@ -2,7 +2,7 @@
|
||||
@import url("HoveringURL.css");
|
||||
@import url("MainPage.css");
|
||||
@import url("MattermostView.css");
|
||||
@import url("NewTeamModal.css");
|
||||
@import url("NewServerModal.css");
|
||||
@import url("PermissionRequestDialog.css");
|
||||
@import url("TabBar.css");
|
||||
@import url("UpdaterPage.css");
|
||||
|
@@ -14,7 +14,7 @@ body {
|
||||
max-width: 600px;
|
||||
}
|
||||
|
||||
.TeamDropdown {
|
||||
.ServerDropdown {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
@@ -26,7 +26,7 @@ body {
|
||||
min-width: 180px;
|
||||
}
|
||||
|
||||
.TeamDropdown__droppable {
|
||||
.ServerDropdown__droppable {
|
||||
width: 100%;
|
||||
overflow-y: scroll;
|
||||
|
||||
@@ -40,21 +40,21 @@ body {
|
||||
}
|
||||
}
|
||||
|
||||
.TeamDropdown__header {
|
||||
.ServerDropdown__header {
|
||||
padding: 6px 20px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: -webkit-fill-available;
|
||||
user-select: none;
|
||||
|
||||
.TeamDropdown__servers {
|
||||
.ServerDropdown__servers {
|
||||
font-weight: 600;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
color: #3D3C40;
|
||||
}
|
||||
|
||||
.TeamDropdown__keyboardShortcut {
|
||||
.ServerDropdown__keyboardShortcut {
|
||||
font-weight: 400;
|
||||
font-size: 12px;
|
||||
line-height: 16px;
|
||||
@@ -63,14 +63,14 @@ body {
|
||||
}
|
||||
}
|
||||
|
||||
.TeamDropdown__divider {
|
||||
.ServerDropdown__divider {
|
||||
border-top: 1px solid rgba(61, 60, 64, 0.08);
|
||||
border-bottom: 0;
|
||||
width: 100%;
|
||||
margin: 8px 0;
|
||||
}
|
||||
|
||||
.TeamDropdown__button {
|
||||
.ServerDropdown__button {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
padding: 8px 18px 8px 7px;
|
||||
@@ -83,12 +83,12 @@ body {
|
||||
&:not(.anyDragging):hover {
|
||||
background-color: rgba(61, 60, 64, 0.08);
|
||||
|
||||
.TeamDropdown__button-edit, .TeamDropdown__button-remove {
|
||||
.ServerDropdown__button-edit, .ServerDropdown__button-remove {
|
||||
opacity: 1;
|
||||
pointer-events: all;
|
||||
}
|
||||
|
||||
.TeamDropdown__draggable-handle > i.icon-drag-vertical {
|
||||
.ServerDropdown__draggable-handle > i.icon-drag-vertical {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@@ -97,17 +97,17 @@ body {
|
||||
background-color: rgba(22, 109, 224, 0.08);
|
||||
outline: none;
|
||||
|
||||
.TeamDropdown__button-edit, .TeamDropdown__button-remove {
|
||||
.ServerDropdown__button-edit, .ServerDropdown__button-remove {
|
||||
opacity: 1;
|
||||
pointer-events: all;
|
||||
}
|
||||
|
||||
.TeamDropdown__draggable-handle > i.icon-drag-vertical {
|
||||
.ServerDropdown__draggable-handle > i.icon-drag-vertical {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
&.dragging .TeamDropdown__draggable-handle {
|
||||
&.dragging .ServerDropdown__draggable-handle {
|
||||
opacity: 1;
|
||||
pointer-events: all;
|
||||
}
|
||||
@@ -126,7 +126,7 @@ body {
|
||||
color: #166de0;
|
||||
}
|
||||
|
||||
> .TeamDropdown__draggable-handle > span, &.addServer > span {
|
||||
> .ServerDropdown__draggable-handle > span, &.addServer > span {
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
color: #3D3C40;
|
||||
@@ -147,7 +147,7 @@ body {
|
||||
}
|
||||
}
|
||||
|
||||
.TeamDropdown__draggable-handle {
|
||||
.ServerDropdown__draggable-handle {
|
||||
cursor: pointer !important;
|
||||
display: flex;
|
||||
overflow: hidden;
|
||||
@@ -174,7 +174,7 @@ body {
|
||||
}
|
||||
}
|
||||
|
||||
.TeamDropdown__badge {
|
||||
.ServerDropdown__badge {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
@@ -182,7 +182,7 @@ body {
|
||||
min-width: 32px;
|
||||
}
|
||||
|
||||
.TeamDropdown__badge-dot {
|
||||
.ServerDropdown__badge-dot {
|
||||
background: #579EFF;
|
||||
height: 8px;
|
||||
width: 8px;
|
||||
@@ -190,7 +190,7 @@ body {
|
||||
flex: 0 0 8px;
|
||||
}
|
||||
|
||||
.TeamDropdown__badge-count {
|
||||
.ServerDropdown__badge-count {
|
||||
background: #F74343;
|
||||
text-align: center;
|
||||
border-radius: 8px;
|
||||
@@ -211,7 +211,7 @@ body {
|
||||
}
|
||||
}
|
||||
|
||||
.TeamDropdown__indicators {
|
||||
.ServerDropdown__indicators {
|
||||
margin-left: auto;
|
||||
display: flex;
|
||||
|
||||
@@ -229,7 +229,7 @@ body {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
&.TeamDropdown__button-remove:hover, &.TeamDropdown__button-remove:focus {
|
||||
&.ServerDropdown__button-remove:hover, &.ServerDropdown__button-remove:focus {
|
||||
background: rgba(247, 67, 67, 0.16);
|
||||
box-shadow: 0px 0px 0px 4px rgba(247, 67, 67, 0.16);
|
||||
}
|
||||
@@ -240,7 +240,7 @@ body {
|
||||
}
|
||||
}
|
||||
|
||||
.TeamDropdown__button-edit, .TeamDropdown__button-remove {
|
||||
.ServerDropdown__button-edit, .ServerDropdown__button-remove {
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
|
||||
@@ -250,10 +250,10 @@ body {
|
||||
}
|
||||
}
|
||||
|
||||
.TeamDropdown__button-remove {
|
||||
.ServerDropdown__button-remove {
|
||||
margin-right: 7px;
|
||||
|
||||
+ .TeamDropdown__badge {
|
||||
+ .ServerDropdown__badge {
|
||||
margin-left: 3px;
|
||||
}
|
||||
|
||||
@@ -262,22 +262,22 @@ body {
|
||||
}
|
||||
}
|
||||
|
||||
.TeamDropdown.darkMode {
|
||||
.ServerDropdown.darkMode {
|
||||
background: #1f1f1f;
|
||||
|
||||
.TeamDropdown__header > span {
|
||||
.ServerDropdown__header > span {
|
||||
color: #DDD;
|
||||
|
||||
&.TeamDropdown__keyboardShortcut {
|
||||
&.ServerDropdown__keyboardShortcut {
|
||||
color: rgba(221, 221, 221, 0.56);
|
||||
}
|
||||
}
|
||||
|
||||
.TeamDropdown__divider {
|
||||
.ServerDropdown__divider {
|
||||
border-color: rgba(221, 221, 221, 0.08);
|
||||
}
|
||||
|
||||
.TeamDropdown__button {
|
||||
.ServerDropdown__button {
|
||||
&:not(.anyDragging):hover {
|
||||
background-color: rgba(221, 221, 221, 0.08);
|
||||
}
|
||||
@@ -290,37 +290,37 @@ body {
|
||||
color: rgba(221, 221, 221, 0.56);
|
||||
}
|
||||
|
||||
> .TeamDropdown__draggable-handle > span, &.addServer > span {
|
||||
> .ServerDropdown__draggable-handle > span, &.addServer > span {
|
||||
color: #DDD;
|
||||
}
|
||||
|
||||
.TeamDropdown__button-remove i {
|
||||
.ServerDropdown__button-remove i {
|
||||
color: #F74343;
|
||||
}
|
||||
|
||||
.TeamDropdown__button-edit:hover, .TeamDropdown__button-edit:focus {
|
||||
.ServerDropdown__button-edit:hover, .ServerDropdown__button-edit:focus {
|
||||
background: rgba(221, 223, 228, 0.08);
|
||||
box-shadow: 0px 0px 0px 4px rgba(221, 223, 228, 0.08);
|
||||
}
|
||||
}
|
||||
|
||||
.TeamDropdown__badge-expired i {
|
||||
.ServerDropdown__badge-expired i {
|
||||
color: rgba(221, 221, 221, 0.56);
|
||||
}
|
||||
|
||||
.TeamDropdown__button-edit > i {
|
||||
.ServerDropdown__button-edit > i {
|
||||
color: rgba(221, 221, 221, 0.56);
|
||||
}
|
||||
|
||||
.TeamDropdown__draggable-handle > i.icon-drag-vertical::before {
|
||||
.ServerDropdown__draggable-handle > i.icon-drag-vertical::before {
|
||||
color:rgba(221, 221, 221, 0.32);
|
||||
}
|
||||
|
||||
.TeamDropdown__badge-count i {
|
||||
.ServerDropdown__badge-count i {
|
||||
color: #e81023;
|
||||
}
|
||||
|
||||
.TeamDropdown__badge-dot {
|
||||
.ServerDropdown__badge-dot {
|
||||
background: #196CAF;
|
||||
}
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
@import '~bootstrap-dark/src/bootstrap-dark.css';
|
||||
|
||||
.TeamListItem:hover {
|
||||
.ServerListItem:hover {
|
||||
background: #242a30;
|
||||
}
|
||||
|
||||
|
@@ -7,7 +7,7 @@ import {FormattedMessage} from 'react-intl';
|
||||
import classNames from 'classnames';
|
||||
import {DragDropContext, Draggable, DraggingStyle, Droppable, DropResult, NotDraggingStyle} from 'react-beautiful-dnd';
|
||||
|
||||
import {MattermostTeam} from 'types/config';
|
||||
import {UniqueServer} from 'types/config';
|
||||
|
||||
import {TAB_BAR_HEIGHT, THREE_DOT_MENU_WIDTH_MAC} from 'common/utils/constants';
|
||||
|
||||
@@ -16,16 +16,16 @@ import './css/dropdown.scss';
|
||||
import IntlProvider from './intl_provider';
|
||||
|
||||
type State = {
|
||||
teams?: MattermostTeam[];
|
||||
teamOrder?: string[];
|
||||
orderedTeams?: MattermostTeam[];
|
||||
activeTeam?: string;
|
||||
servers?: UniqueServer[];
|
||||
serverOrder?: string[];
|
||||
orderedServers?: UniqueServer[];
|
||||
activeServer?: string;
|
||||
darkMode?: boolean;
|
||||
enableServerManagement?: boolean;
|
||||
unreads?: Map<string, boolean>;
|
||||
mentions?: Map<string, number>;
|
||||
expired?: Map<string, boolean>;
|
||||
hasGPOTeams?: boolean;
|
||||
hasGPOServers?: boolean;
|
||||
isAnyDragging: boolean;
|
||||
windowBounds?: Electron.Rectangle;
|
||||
}
|
||||
@@ -40,7 +40,7 @@ function getStyle(style?: DraggingStyle | NotDraggingStyle) {
|
||||
}
|
||||
return style;
|
||||
}
|
||||
class TeamDropdown extends React.PureComponent<Record<string, never>, State> {
|
||||
class ServerDropdown extends React.PureComponent<Record<string, never>, State> {
|
||||
buttonRefs: Map<number, HTMLButtonElement>;
|
||||
addServerRef: React.RefObject<HTMLButtonElement>;
|
||||
focusedIndex: number | null;
|
||||
@@ -59,22 +59,22 @@ class TeamDropdown extends React.PureComponent<Record<string, never>, State> {
|
||||
}
|
||||
|
||||
handleUpdate = (
|
||||
teams: MattermostTeam[],
|
||||
servers: UniqueServer[],
|
||||
darkMode: boolean,
|
||||
windowBounds: Electron.Rectangle,
|
||||
activeTeam?: string,
|
||||
activeServer?: string,
|
||||
enableServerManagement?: boolean,
|
||||
hasGPOTeams?: boolean,
|
||||
hasGPOServers?: boolean,
|
||||
expired?: Map<string, boolean>,
|
||||
mentions?: Map<string, number>,
|
||||
unreads?: Map<string, boolean>,
|
||||
) => {
|
||||
this.setState({
|
||||
teams,
|
||||
activeTeam,
|
||||
servers,
|
||||
activeServer,
|
||||
darkMode,
|
||||
enableServerManagement,
|
||||
hasGPOTeams,
|
||||
hasGPOServers,
|
||||
unreads,
|
||||
mentions,
|
||||
expired,
|
||||
@@ -82,12 +82,12 @@ class TeamDropdown extends React.PureComponent<Record<string, never>, State> {
|
||||
});
|
||||
}
|
||||
|
||||
selectServer = (team: MattermostTeam) => {
|
||||
selectServer = (server: UniqueServer) => {
|
||||
return () => {
|
||||
if (!team.id) {
|
||||
if (!server.id) {
|
||||
return;
|
||||
}
|
||||
window.desktop.serverDropdown.switchServer(team.id);
|
||||
window.desktop.serverDropdown.switchServer(server.id);
|
||||
this.closeMenu();
|
||||
};
|
||||
}
|
||||
@@ -95,7 +95,7 @@ class TeamDropdown extends React.PureComponent<Record<string, never>, State> {
|
||||
closeMenu = () => {
|
||||
if (!this.state.isAnyDragging) {
|
||||
(document.activeElement as HTMLElement).blur();
|
||||
window.desktop.closeTeamsDropdown();
|
||||
window.desktop.closeServersDropdown();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,8 +108,8 @@ class TeamDropdown extends React.PureComponent<Record<string, never>, State> {
|
||||
this.closeMenu();
|
||||
}
|
||||
|
||||
isActiveTeam = (team: MattermostTeam) => {
|
||||
return team.id === this.state.activeTeam;
|
||||
isActiveServer = (server: UniqueServer) => {
|
||||
return server.id === this.state.activeServer;
|
||||
}
|
||||
|
||||
onDragStart = () => {
|
||||
@@ -123,17 +123,17 @@ class TeamDropdown extends React.PureComponent<Record<string, never>, State> {
|
||||
this.setState({isAnyDragging: false});
|
||||
return;
|
||||
}
|
||||
if (!this.state.teams) {
|
||||
if (!this.state.servers) {
|
||||
throw new Error('No config');
|
||||
}
|
||||
const teamsCopy = this.state.teams.concat();
|
||||
const serversCopy = this.state.servers.concat();
|
||||
|
||||
const team = teamsCopy.splice(removedIndex, 1);
|
||||
const newOrder = addedIndex < this.state.teams.length ? addedIndex : this.state.teams.length - 1;
|
||||
teamsCopy.splice(newOrder, 0, team[0]);
|
||||
const server = serversCopy.splice(removedIndex, 1);
|
||||
const newOrder = addedIndex < this.state.servers.length ? addedIndex : this.state.servers.length - 1;
|
||||
serversCopy.splice(newOrder, 0, server[0]);
|
||||
|
||||
this.setState({teams: teamsCopy, isAnyDragging: false});
|
||||
window.desktop.updateServerOrder(teamsCopy.map((team) => team.id!));
|
||||
this.setState({servers: serversCopy, isAnyDragging: false});
|
||||
window.desktop.updateServerOrder(serversCopy.map((server) => server.id!));
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
@@ -151,18 +151,18 @@ class TeamDropdown extends React.PureComponent<Record<string, never>, State> {
|
||||
window.removeEventListener('keydown', this.handleKeyboardShortcuts);
|
||||
}
|
||||
|
||||
setButtonRef = (teamIndex: number, refMethod?: (element: HTMLButtonElement) => unknown) => {
|
||||
setButtonRef = (serverIndex: number, refMethod?: (element: HTMLButtonElement) => unknown) => {
|
||||
return (ref: HTMLButtonElement) => {
|
||||
this.addButtonRef(teamIndex, ref);
|
||||
this.addButtonRef(serverIndex, ref);
|
||||
refMethod?.(ref);
|
||||
};
|
||||
}
|
||||
|
||||
addButtonRef = (teamIndex: number, ref: HTMLButtonElement | null) => {
|
||||
addButtonRef = (serverIndex: number, ref: HTMLButtonElement | null) => {
|
||||
if (ref) {
|
||||
this.buttonRefs.set(teamIndex, ref);
|
||||
this.buttonRefs.set(serverIndex, ref);
|
||||
ref.addEventListener('focusin', () => {
|
||||
this.focusedIndex = teamIndex;
|
||||
this.focusedIndex = serverIndex;
|
||||
});
|
||||
ref.addEventListener('blur', () => {
|
||||
this.focusedIndex = null;
|
||||
@@ -203,30 +203,30 @@ class TeamDropdown extends React.PureComponent<Record<string, never>, State> {
|
||||
}
|
||||
}
|
||||
|
||||
editServer = (teamId: string) => {
|
||||
if (this.teamIsPredefined(teamId)) {
|
||||
editServer = (serverId: string) => {
|
||||
if (this.serverIsPredefined(serverId)) {
|
||||
return () => {};
|
||||
}
|
||||
return (event: React.MouseEvent<HTMLButtonElement>) => {
|
||||
event.stopPropagation();
|
||||
window.desktop.serverDropdown.showEditServerModal(teamId);
|
||||
window.desktop.serverDropdown.showEditServerModal(serverId);
|
||||
this.closeMenu();
|
||||
};
|
||||
}
|
||||
|
||||
removeServer = (teamId: string) => {
|
||||
if (this.teamIsPredefined(teamId)) {
|
||||
removeServer = (serverId: string) => {
|
||||
if (this.serverIsPredefined(serverId)) {
|
||||
return () => {};
|
||||
}
|
||||
return (event: React.MouseEvent<HTMLButtonElement>) => {
|
||||
event.stopPropagation();
|
||||
window.desktop.serverDropdown.showRemoveServerModal(teamId);
|
||||
window.desktop.serverDropdown.showRemoveServerModal(serverId);
|
||||
this.closeMenu();
|
||||
};
|
||||
}
|
||||
|
||||
teamIsPredefined = (teamId: string) => {
|
||||
return this.state.teams?.some((team) => team.id === teamId && team.isPredefined);
|
||||
serverIsPredefined = (serverId: string) => {
|
||||
return this.state.servers?.some((server) => server.id === serverId && server.isPredefined);
|
||||
}
|
||||
|
||||
render() {
|
||||
@@ -234,7 +234,7 @@ class TeamDropdown extends React.PureComponent<Record<string, never>, State> {
|
||||
<IntlProvider>
|
||||
<div
|
||||
onClick={this.preventPropagation}
|
||||
className={classNames('TeamDropdown', {
|
||||
className={classNames('ServerDropdown', {
|
||||
darkMode: this.state.darkMode,
|
||||
})}
|
||||
style={{
|
||||
@@ -242,101 +242,101 @@ class TeamDropdown extends React.PureComponent<Record<string, never>, State> {
|
||||
maxWidth: this.state.windowBounds ? (this.state.windowBounds.width - THREE_DOT_MENU_WIDTH_MAC) : undefined,
|
||||
}}
|
||||
>
|
||||
<div className='TeamDropdown__header'>
|
||||
<span className='TeamDropdown__servers'>
|
||||
<div className='ServerDropdown__header'>
|
||||
<span className='ServerDropdown__servers'>
|
||||
<FormattedMessage
|
||||
id='renderer.dropdown.servers'
|
||||
defaultMessage='Servers'
|
||||
/>
|
||||
</span>
|
||||
<span className='TeamDropdown__keyboardShortcut'>
|
||||
<span className='ServerDropdown__keyboardShortcut'>
|
||||
{window.process.platform === 'darwin' ? '⌃⌘S' : 'Ctrl + Shift + S'}
|
||||
</span>
|
||||
</div>
|
||||
<hr className='TeamDropdown__divider'/>
|
||||
<hr className='ServerDropdown__divider'/>
|
||||
<DragDropContext
|
||||
onDragStart={this.onDragStart}
|
||||
onDragEnd={this.onDragEnd}
|
||||
>
|
||||
<Droppable
|
||||
isDropDisabled={this.state.hasGPOTeams}
|
||||
droppableId='TeamDropdown__droppable'
|
||||
isDropDisabled={this.state.hasGPOServers}
|
||||
droppableId='ServerDropdown__droppable'
|
||||
>
|
||||
{(provided) => (
|
||||
<div
|
||||
className='TeamDropdown__droppable'
|
||||
className='ServerDropdown__droppable'
|
||||
ref={provided.innerRef}
|
||||
{...provided.droppableProps}
|
||||
>
|
||||
{this.state.teams?.map((team, orderedIndex) => {
|
||||
const index = this.state.teams?.indexOf(team);
|
||||
const sessionExpired = this.state.expired?.get(team.id!);
|
||||
const hasUnreads = this.state.unreads?.get(team.id!);
|
||||
const mentionCount = this.state.mentions?.get(team.id!);
|
||||
{this.state.servers?.map((server, orderedIndex) => {
|
||||
const index = this.state.servers?.indexOf(server);
|
||||
const sessionExpired = this.state.expired?.get(server.id!);
|
||||
const hasUnreads = this.state.unreads?.get(server.id!);
|
||||
const mentionCount = this.state.mentions?.get(server.id!);
|
||||
|
||||
let badgeDiv: React.ReactNode;
|
||||
if (sessionExpired) {
|
||||
badgeDiv = (
|
||||
<div className='TeamDropdown__badge-expired'>
|
||||
<div className='ServerDropdown__badge-expired'>
|
||||
<i className='icon-alert-circle-outline'/>
|
||||
</div>
|
||||
);
|
||||
} else if (mentionCount && mentionCount > 0) {
|
||||
badgeDiv = (
|
||||
<div className='TeamDropdown__badge-count'>
|
||||
<div className='ServerDropdown__badge-count'>
|
||||
<span>{mentionCount > 99 ? '99+' : mentionCount}</span>
|
||||
</div>
|
||||
);
|
||||
} else if (hasUnreads) {
|
||||
badgeDiv = (
|
||||
<div className='TeamDropdown__badge-dot'/>
|
||||
<div className='ServerDropdown__badge-dot'/>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Draggable
|
||||
key={index}
|
||||
draggableId={`TeamDropdown__draggable-${index}`}
|
||||
draggableId={`ServerDropdown__draggable-${index}`}
|
||||
index={orderedIndex}
|
||||
disableInteractiveElementBlocking={true}
|
||||
>
|
||||
{(provided, snapshot) => (
|
||||
<button
|
||||
className={classNames('TeamDropdown__button', {
|
||||
className={classNames('ServerDropdown__button', {
|
||||
dragging: snapshot.isDragging,
|
||||
anyDragging: this.state.isAnyDragging,
|
||||
active: this.isActiveTeam(team),
|
||||
active: this.isActiveServer(server),
|
||||
})}
|
||||
ref={this.setButtonRef(orderedIndex, provided.innerRef)}
|
||||
{...provided.draggableProps}
|
||||
onClick={this.selectServer(team)}
|
||||
onClick={this.selectServer(server)}
|
||||
style={getStyle(provided.draggableProps.style)}
|
||||
>
|
||||
<div
|
||||
className={classNames('TeamDropdown__draggable-handle', {
|
||||
className={classNames('ServerDropdown__draggable-handle', {
|
||||
dragging: snapshot.isDragging,
|
||||
})}
|
||||
{...provided.dragHandleProps}
|
||||
onClick={this.handleClickOnDragHandle}
|
||||
>
|
||||
<i className='icon-drag-vertical'/>
|
||||
{this.isActiveTeam(team) ? <i className='icon-check'/> : <i className='icon-server-variant'/>}
|
||||
<span>{team.name}</span>
|
||||
{this.isActiveServer(server) ? <i className='icon-check'/> : <i className='icon-server-variant'/>}
|
||||
<span>{server.name}</span>
|
||||
</div>
|
||||
{!team.isPredefined && <div className='TeamDropdown__indicators'>
|
||||
{!server.isPredefined && <div className='ServerDropdown__indicators'>
|
||||
<button
|
||||
className='TeamDropdown__button-edit'
|
||||
onClick={this.editServer(team.id!)}
|
||||
className='ServerDropdown__button-edit'
|
||||
onClick={this.editServer(server.id!)}
|
||||
>
|
||||
<i className='icon-pencil-outline'/>
|
||||
</button>
|
||||
<button
|
||||
className='TeamDropdown__button-remove'
|
||||
onClick={this.removeServer(team.id!)}
|
||||
className='ServerDropdown__button-remove'
|
||||
onClick={this.removeServer(server.id!)}
|
||||
>
|
||||
<i className='icon-trash-can-outline'/>
|
||||
</button>
|
||||
{badgeDiv && <div className='TeamDropdown__badge'>
|
||||
{badgeDiv && <div className='ServerDropdown__badge'>
|
||||
{badgeDiv}
|
||||
</div>}
|
||||
</div>}
|
||||
@@ -350,13 +350,13 @@ class TeamDropdown extends React.PureComponent<Record<string, never>, State> {
|
||||
)}
|
||||
</Droppable>
|
||||
</DragDropContext>
|
||||
<hr className='TeamDropdown__divider'/>
|
||||
<hr className='ServerDropdown__divider'/>
|
||||
{this.state.enableServerManagement &&
|
||||
<button
|
||||
ref={(ref) => {
|
||||
this.addButtonRef(this.state.teams?.length || 0, ref);
|
||||
this.addButtonRef(this.state.servers?.length || 0, ref);
|
||||
}}
|
||||
className='TeamDropdown__button addServer'
|
||||
className='ServerDropdown__button addServer'
|
||||
onClick={this.addServer}
|
||||
>
|
||||
<i className='icon-plus'/>
|
||||
@@ -373,6 +373,6 @@ class TeamDropdown extends React.PureComponent<Record<string, never>, State> {
|
||||
}
|
||||
|
||||
ReactDOM.render(
|
||||
<TeamDropdown/>,
|
||||
<ServerDropdown/>,
|
||||
document.getElementById('app'),
|
||||
);
|
||||
|
@@ -7,49 +7,49 @@ import 'renderer/css/modals.css';
|
||||
import React, {useEffect, useState} from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
|
||||
import {MattermostTeam} from 'types/config';
|
||||
import {UniqueServer} from 'types/config';
|
||||
|
||||
import IntlProvider from 'renderer/intl_provider';
|
||||
|
||||
import NewTeamModal from '../../components/NewTeamModal'; //'./addServer.jsx';
|
||||
import NewServerModal from '../../components/NewServerModal';
|
||||
|
||||
import setupDarkMode from '../darkMode';
|
||||
|
||||
setupDarkMode();
|
||||
|
||||
type ModalInfo = {
|
||||
team: MattermostTeam;
|
||||
currentTeams: MattermostTeam[];
|
||||
server: UniqueServer;
|
||||
currentServers: UniqueServer[];
|
||||
};
|
||||
|
||||
const onClose = () => {
|
||||
window.desktop.modals.cancelModal();
|
||||
};
|
||||
|
||||
const onSave = (data: MattermostTeam) => {
|
||||
const onSave = (data: UniqueServer) => {
|
||||
window.desktop.modals.finishModal(data);
|
||||
};
|
||||
|
||||
const EditServerModalWrapper: React.FC = () => {
|
||||
const [server, setServer] = useState<MattermostTeam>();
|
||||
const [currentTeams, setCurrentTeams] = useState<MattermostTeam[]>();
|
||||
const [server, setServer] = useState<UniqueServer>();
|
||||
const [currentServers, setCurrentServers] = useState<UniqueServer[]>();
|
||||
|
||||
useEffect(() => {
|
||||
window.desktop.modals.getModalInfo<ModalInfo>().then(({team, currentTeams}) => {
|
||||
setServer(team);
|
||||
setCurrentTeams(currentTeams);
|
||||
window.desktop.modals.getModalInfo<ModalInfo>().then(({server, currentServers}) => {
|
||||
setServer(server);
|
||||
setCurrentServers(currentServers);
|
||||
});
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<IntlProvider>
|
||||
<NewTeamModal
|
||||
<NewServerModal
|
||||
onClose={onClose}
|
||||
onSave={onSave}
|
||||
editMode={true}
|
||||
show={Boolean(server)}
|
||||
team={server}
|
||||
currentTeams={currentTeams}
|
||||
server={server}
|
||||
currentServers={currentServers}
|
||||
/>
|
||||
</IntlProvider>
|
||||
);
|
||||
|
@@ -35,7 +35,7 @@ class LoadingScreenRoot extends React.PureComponent<Props, State> {
|
||||
window.desktop.loadingScreen.onToggleLoadingScreenVisibility(this.onToggleLoadingScreenVisibility);
|
||||
|
||||
window.addEventListener('click', () => {
|
||||
window.desktop.closeTeamsDropdown();
|
||||
window.desktop.closeServersDropdown();
|
||||
window.desktop.closeDownloadsDropdown();
|
||||
});
|
||||
}
|
||||
|
@@ -7,11 +7,11 @@ import 'renderer/css/modals.css';
|
||||
import React, {useEffect, useState} from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
|
||||
import {MattermostTeam} from 'types/config';
|
||||
import {UniqueServer} from 'types/config';
|
||||
|
||||
import IntlProvider from 'renderer/intl_provider';
|
||||
|
||||
import NewTeamModal from '../../components/NewTeamModal'; //'./addServer.jsx';
|
||||
import NewServerModal from '../../components/NewServerModal';
|
||||
|
||||
import setupDarkMode from '../darkMode';
|
||||
|
||||
@@ -21,31 +21,31 @@ const onClose = () => {
|
||||
window.desktop.modals.cancelModal();
|
||||
};
|
||||
|
||||
const onSave = (data: MattermostTeam) => {
|
||||
const onSave = (data: UniqueServer) => {
|
||||
window.desktop.modals.finishModal(data);
|
||||
};
|
||||
|
||||
const NewServerModalWrapper: React.FC = () => {
|
||||
const [unremoveable, setUnremovable] = useState<boolean>();
|
||||
const [currentTeams, setCurrentTeams] = useState<MattermostTeam[]>();
|
||||
const [currentServers, setCurrentServers] = useState<UniqueServer[]>();
|
||||
|
||||
useEffect(() => {
|
||||
window.desktop.modals.isModalUncloseable().then((uncloseable) => {
|
||||
setUnremovable(uncloseable);
|
||||
});
|
||||
window.desktop.modals.getModalInfo<MattermostTeam[]>().then((teams) => {
|
||||
setCurrentTeams(teams);
|
||||
window.desktop.modals.getModalInfo<UniqueServer[]>().then((servers) => {
|
||||
setCurrentServers(servers);
|
||||
});
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<IntlProvider>
|
||||
<NewTeamModal
|
||||
<NewServerModal
|
||||
onClose={unremoveable ? undefined : onClose}
|
||||
onSave={onSave}
|
||||
editMode={false}
|
||||
show={true}
|
||||
currentTeams={currentTeams}
|
||||
currentServers={currentServers}
|
||||
/>
|
||||
</IntlProvider>
|
||||
);
|
||||
|
@@ -4,7 +4,7 @@
|
||||
import React, {useEffect, useState} from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
|
||||
import {MattermostTeam} from 'types/config';
|
||||
import {UniqueServer} from 'types/config';
|
||||
|
||||
import IntlProvider from 'renderer/intl_provider';
|
||||
|
||||
@@ -15,7 +15,7 @@ import 'bootstrap/dist/css/bootstrap.min.css';
|
||||
|
||||
const MOBILE_SCREEN_WIDTH = 1200;
|
||||
|
||||
const onConnect = (data: MattermostTeam) => {
|
||||
const onConnect = (data: UniqueServer) => {
|
||||
window.desktop.modals.finishModal(data);
|
||||
};
|
||||
|
||||
@@ -23,7 +23,7 @@ const WelcomeScreenModalWrapper = () => {
|
||||
const [darkMode, setDarkMode] = useState(false);
|
||||
const [getStarted, setGetStarted] = useState(false);
|
||||
const [mobileView, setMobileView] = useState(false);
|
||||
const [currentTeams, setCurrentTeams] = useState<MattermostTeam[]>([]);
|
||||
const [currentServers, setCurrentServers] = useState<UniqueServer[]>([]);
|
||||
|
||||
const handleWindowResize = () => {
|
||||
setMobileView(window.innerWidth < MOBILE_SCREEN_WIDTH);
|
||||
@@ -38,8 +38,8 @@ const WelcomeScreenModalWrapper = () => {
|
||||
setDarkMode(result);
|
||||
});
|
||||
|
||||
window.desktop.modals.getModalInfo<MattermostTeam[]>().then((result) => {
|
||||
setCurrentTeams(result);
|
||||
window.desktop.modals.getModalInfo<UniqueServer[]>().then((result) => {
|
||||
setCurrentServers(result);
|
||||
});
|
||||
|
||||
handleWindowResize();
|
||||
@@ -60,7 +60,7 @@ const WelcomeScreenModalWrapper = () => {
|
||||
<ConfigureServer
|
||||
mobileView={mobileView}
|
||||
darkMode={darkMode}
|
||||
currentTeams={currentTeams}
|
||||
currentServers={currentServers}
|
||||
onConnect={onConnect}
|
||||
/>
|
||||
) : (
|
||||
|
Reference in New Issue
Block a user