2023-04-10 22:58:14 +03:00
|
|
|
import { clearBackdrop } from '../backdrop/backdrop';
|
|
|
|
import * as mainTabsManager from '../maintabsmanager';
|
|
|
|
import layoutManager from '../layoutManager';
|
|
|
|
import '../../elements/emby-tabs/emby-tabs';
|
|
|
|
import LibraryMenu from '../../scripts/libraryMenu';
|
|
|
|
|
|
|
|
function onViewDestroy() {
|
|
|
|
const tabControllers = this.tabControllers;
|
|
|
|
|
|
|
|
if (tabControllers) {
|
|
|
|
tabControllers.forEach(function (t) {
|
|
|
|
if (t.destroy) {
|
|
|
|
t.destroy();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
this.tabControllers = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
this.view = null;
|
|
|
|
this.params = null;
|
|
|
|
this.currentTabController = null;
|
|
|
|
this.initialTabIndex = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
class TabbedView {
|
|
|
|
constructor(view, params) {
|
|
|
|
this.tabControllers = [];
|
|
|
|
this.view = view;
|
|
|
|
this.params = params;
|
|
|
|
|
|
|
|
const self = this;
|
|
|
|
|
|
|
|
let currentTabIndex = parseInt(params.tab || this.getDefaultTabIndex(params.parentId), 10);
|
|
|
|
this.initialTabIndex = currentTabIndex;
|
|
|
|
|
|
|
|
function validateTabLoad(index) {
|
|
|
|
return self.validateTabLoad ? self.validateTabLoad(index) : Promise.resolve();
|
|
|
|
}
|
|
|
|
|
|
|
|
function loadTab(index, previousIndex) {
|
|
|
|
validateTabLoad(index).then(function () {
|
|
|
|
self.getTabController(index).then(function (controller) {
|
|
|
|
const refresh = !controller.refreshed;
|
|
|
|
|
|
|
|
controller.onResume({
|
|
|
|
autoFocus: previousIndex == null && layoutManager.tv,
|
|
|
|
refresh: refresh
|
|
|
|
});
|
|
|
|
|
|
|
|
controller.refreshed = true;
|
|
|
|
|
|
|
|
currentTabIndex = index;
|
|
|
|
self.currentTabController = controller;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function getTabContainers() {
|
|
|
|
return view.querySelectorAll('.tabContent');
|
|
|
|
}
|
|
|
|
|
|
|
|
function onTabChange(e) {
|
|
|
|
const newIndex = parseInt(e.detail.selectedTabIndex, 10);
|
|
|
|
const previousIndex = e.detail.previousIndex;
|
|
|
|
|
|
|
|
const previousTabController = previousIndex == null ? null : self.tabControllers[previousIndex];
|
2023-07-06 13:39:48 -04:00
|
|
|
if (previousTabController?.onPause) {
|
2023-04-10 22:58:14 +03:00
|
|
|
previousTabController.onPause();
|
|
|
|
}
|
|
|
|
|
|
|
|
loadTab(newIndex, previousIndex);
|
|
|
|
}
|
|
|
|
|
|
|
|
view.addEventListener('viewbeforehide', this.onPause.bind(this));
|
|
|
|
|
|
|
|
view.addEventListener('viewbeforeshow', function () {
|
|
|
|
mainTabsManager.setTabs(view, currentTabIndex, self.getTabs, getTabContainers, null, onTabChange, false);
|
|
|
|
});
|
|
|
|
|
|
|
|
view.addEventListener('viewshow', function (e) {
|
|
|
|
self.onResume(e.detail);
|
|
|
|
});
|
|
|
|
|
|
|
|
view.addEventListener('viewdestroy', onViewDestroy.bind(this));
|
|
|
|
}
|
|
|
|
|
|
|
|
onResume() {
|
|
|
|
this.setTitle();
|
|
|
|
clearBackdrop();
|
|
|
|
|
|
|
|
const currentTabController = this.currentTabController;
|
|
|
|
|
|
|
|
if (!currentTabController) {
|
|
|
|
mainTabsManager.selectedTabIndex(this.initialTabIndex);
|
2023-07-06 13:39:48 -04:00
|
|
|
} else if (currentTabController?.onResume) {
|
2023-04-10 22:58:14 +03:00
|
|
|
currentTabController.onResume({});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
onPause() {
|
|
|
|
const currentTabController = this.currentTabController;
|
|
|
|
|
2023-07-06 13:39:48 -04:00
|
|
|
if (currentTabController?.onPause) {
|
2023-04-10 22:58:14 +03:00
|
|
|
currentTabController.onPause();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
setTitle() {
|
|
|
|
LibraryMenu.setTitle('');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export default TabbedView;
|