
* 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
74 lines
2.5 KiB
TypeScript
74 lines
2.5 KiB
TypeScript
// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import {IpcMainEvent, IpcMainInvokeEvent} from 'electron';
|
|
|
|
import ServerManager from 'common/servers/serverManager';
|
|
import {Logger} from 'common/log';
|
|
|
|
import ViewManager from 'main/views/viewManager';
|
|
|
|
const log = new Logger('App.Views');
|
|
|
|
export const handleCloseView = (event: IpcMainEvent, viewId: string) => {
|
|
log.debug('handleCloseView', {viewId});
|
|
|
|
const view = ServerManager.getView(viewId);
|
|
if (!view) {
|
|
return;
|
|
}
|
|
ServerManager.setViewIsOpen(viewId, false);
|
|
const nextView = ServerManager.getLastActiveTabForServer(view.server.id);
|
|
ViewManager.showById(nextView.id);
|
|
};
|
|
|
|
export const handleOpenView = (event: IpcMainEvent, viewId: string) => {
|
|
log.debug('handleOpenView', {viewId});
|
|
|
|
ServerManager.setViewIsOpen(viewId, true);
|
|
ViewManager.showById(viewId);
|
|
};
|
|
|
|
export const selectNextView = () => {
|
|
selectView((order) => order + 1);
|
|
};
|
|
|
|
export const selectPreviousView = () => {
|
|
selectView((order, length) => (length + (order - 1)));
|
|
};
|
|
|
|
export const handleGetOrderedViewsForServer = (event: IpcMainInvokeEvent, serverId: string) => {
|
|
return ServerManager.getOrderedTabsForServer(serverId).map((view) => view.toUniqueView());
|
|
};
|
|
|
|
export const handleGetLastActive = () => {
|
|
const server = ServerManager.getCurrentServer();
|
|
const view = ServerManager.getLastActiveTabForServer(server.id);
|
|
return {server: server.id, view: view.id};
|
|
};
|
|
|
|
const selectView = (fn: (order: number, length: number) => number) => {
|
|
const currentView = ViewManager.getCurrentView();
|
|
if (!currentView) {
|
|
return;
|
|
}
|
|
|
|
const currentServerViews = ServerManager.getOrderedTabsForServer(currentView.view.server.id).map((view, index) => ({view, index}));
|
|
const filteredViews = currentServerViews?.filter((view) => view.view.isOpen);
|
|
const currentServerView = currentServerViews?.find((view) => view.view.type === currentView.view.type);
|
|
if (!currentServerViews || !currentServerView || !filteredViews) {
|
|
return;
|
|
}
|
|
|
|
let currentOrder = currentServerView.index;
|
|
let nextIndex = -1;
|
|
while (nextIndex === -1) {
|
|
const nextOrder = (fn(currentOrder, currentServerViews.length) % currentServerViews.length);
|
|
nextIndex = filteredViews.findIndex((view) => view.index === nextOrder);
|
|
currentOrder = nextOrder;
|
|
}
|
|
|
|
const newView = filteredViews[nextIndex].view;
|
|
ViewManager.showById(newView.id);
|
|
};
|