1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
jellyfin-web/src/components/tabbedview/tabbedview.js

115 lines
3.4 KiB
JavaScript
Raw Normal View History

import { clearBackdrop } from '../backdrop/backdrop';
2020-08-14 08:46:34 +02:00
import * as mainTabsManager from '../maintabsmanager';
import layoutManager from '../layoutManager';
import '../../elements/emby-tabs/emby-tabs';
2022-03-31 14:36:09 -04:00
import LibraryMenu from '../../scripts/libraryMenu';
2020-07-31 16:12:49 +01:00
2021-01-26 22:20:12 -05:00
function onViewDestroy() {
2020-10-07 21:12:14 +09:00
const tabControllers = this.tabControllers;
2020-07-31 16:12:49 +01:00
if (tabControllers) {
tabControllers.forEach(function (t) {
if (t.destroy) {
t.destroy();
}
});
2020-07-31 16:12:49 +01:00
this.tabControllers = null;
2018-10-23 01:05:09 +03:00
}
2020-07-31 16:12:49 +01:00
this.view = null;
this.params = null;
this.currentTabController = null;
this.initialTabIndex = null;
}
2020-07-31 16:12:49 +01:00
class TabbedView {
constructor(view, params) {
this.tabControllers = [];
this.view = view;
this.params = params;
2020-10-07 21:12:14 +09:00
const self = this;
2020-10-07 21:12:14 +09:00
let currentTabIndex = parseInt(params.tab || this.getDefaultTabIndex(params.parentId));
this.initialTabIndex = currentTabIndex;
2018-10-23 01:05:09 +03:00
function validateTabLoad(index) {
return self.validateTabLoad ? self.validateTabLoad(index) : Promise.resolve();
2018-10-23 01:05:09 +03:00
}
function loadTab(index, previousIndex) {
validateTabLoad(index).then(function () {
self.getTabController(index).then(function (controller) {
2020-10-07 21:12:14 +09:00
const refresh = !controller.refreshed;
2018-10-23 01:05:09 +03:00
controller.onResume({
autoFocus: previousIndex == null && layoutManager.tv,
2018-10-23 01:05:09 +03:00
refresh: refresh
});
controller.refreshed = true;
currentTabIndex = index;
self.currentTabController = controller;
});
});
2018-10-23 01:05:09 +03:00
}
function getTabContainers() {
return view.querySelectorAll('.tabContent');
2018-10-23 01:05:09 +03:00
}
function onTabChange(e) {
2020-10-07 21:12:14 +09:00
const newIndex = parseInt(e.detail.selectedTabIndex);
const previousIndex = e.detail.previousIndex;
2020-10-07 21:12:14 +09:00
const previousTabController = previousIndex == null ? null : self.tabControllers[previousIndex];
if (previousTabController && previousTabController.onPause) {
previousTabController.onPause();
}
loadTab(newIndex, previousIndex);
}
view.addEventListener('viewbeforehide', this.onPause.bind(this));
2021-01-26 22:20:12 -05:00
view.addEventListener('viewbeforeshow', function () {
2022-03-02 00:59:04 -05:00
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));
2018-10-23 01:05:09 +03:00
}
2021-01-26 22:20:12 -05:00
onResume() {
this.setTitle();
clearBackdrop();
2020-10-07 21:12:14 +09:00
const currentTabController = this.currentTabController;
if (!currentTabController) {
mainTabsManager.selectedTabIndex(this.initialTabIndex);
} else if (currentTabController && currentTabController.onResume) {
currentTabController.onResume({});
}
2020-07-31 16:12:49 +01:00
}
2020-07-31 16:12:49 +01:00
onPause() {
2020-10-07 21:12:14 +09:00
const currentTabController = this.currentTabController;
if (currentTabController && currentTabController.onPause) {
currentTabController.onPause();
}
2020-07-31 16:12:49 +01:00
}
2022-03-31 14:36:09 -04:00
2020-07-31 16:12:49 +01:00
setTitle() {
2022-03-31 14:36:09 -04:00
LibraryMenu.setTitle('');
2020-07-31 16:12:49 +01:00
}
}
2020-07-31 16:12:49 +01:00
export default TabbedView;