|
| 1 | +<template> |
| 2 | + <!-- SidePanelSessionsListViewer --> |
| 3 | + |
| 4 | + <div class="row q-mt-xs"> |
| 5 | + <!-- <div class="col-6 q-mt-sm">--> |
| 6 | + <!-- <SidePanelTabsetsSelectorWidget :use-as-tabsets-switcher="true" />--> |
| 7 | + <!-- </div>--> |
| 8 | + <!-- <div class="col-6 text-right">--> |
| 9 | + <!-- <template v-if="useWindowsStore().allWindows.size > 1">--> |
| 10 | + <!-- Current Window only--> |
| 11 | + <!-- <q-checkbox v-model="currentWindowOnly" />--> |
| 12 | + <!-- </template>--> |
| 13 | + <!-- </div>--> |
| 14 | + <!-- <div class="col-11 q-mb-xs">--> |
| 15 | + <!-- <q-input dense autofocus ref="filterRef" filled :hint="filterHint()" v-model="filter" label="Filter Tabs">--> |
| 16 | + <!-- <template v-slot:append>--> |
| 17 | + <!-- <q-icon v-if="filter !== ''" name="clear" class="cursor-pointer" @click="resetFilter" />--> |
| 18 | + <!-- </template>--> |
| 19 | + <!-- </q-input>--> |
| 20 | + <!-- </div>--> |
| 21 | + <!-- <div class="col text-right">--> |
| 22 | + <!-- <q-icon :name="sortByUrl ? 'undo' : 'sort'" color="primary" class="cursor-pointer" @click="toggleSorting()">--> |
| 23 | + <!-- <q-tooltip class="tooltip-small">Toggle Sorting between custom and URL</q-tooltip>--> |
| 24 | + <!-- </q-icon>--> |
| 25 | + <!-- </div>--> |
| 26 | + </div> |
| 27 | + |
| 28 | + <div class="q-pa-none"> |
| 29 | + <q-list class="rounded-borders"> |
| 30 | + <q-expansion-item |
| 31 | + group="browserWindowSessions" |
| 32 | + v-for="session in tabsetsSessions" |
| 33 | + expand-separator |
| 34 | + :label="'' + session.name" |
| 35 | + :caption="'Tabsets Session - ' + session.tabs.length + ' tabs(s)'"> |
| 36 | + <q-card> |
| 37 | + <q-card-section> |
| 38 | + <div class="q-ma-none q-mb-md cursor-pointer text-right text-caption" @click="openSession(session)"> |
| 39 | + open session |
| 40 | + </div> |
| 41 | + <div v-for="tab in session.tabs" class="q-my-none tabBorder q-mb-xs"> |
| 42 | + {{ tab.id }} |
| 43 | + </div> |
| 44 | + </q-card-section> |
| 45 | + </q-card> |
| 46 | + </q-expansion-item> |
| 47 | + <q-expansion-item |
| 48 | + group="browserWindowSessions" |
| 49 | + v-for="session in recentlyClosedBrowserSessions.filter((s: chrome.sessions.Session) => s.window)" |
| 50 | + expand-separator |
| 51 | + :label="'' + session.lastModified" |
| 52 | + :caption="'Browser Windows Session - ' + session.window?.tabs?.length + ' tabs(s)'"> |
| 53 | + <q-card> |
| 54 | + <q-card-section> |
| 55 | + <div |
| 56 | + class="q-ma-none q-mb-md cursor-pointer text-right text-caption" |
| 57 | + @click="restoreSession(session.window?.sessionId)"> |
| 58 | + restore session |
| 59 | + </div> |
| 60 | + <div v-for="tab in session.window?.tabs" class="q-my-none tabBorder q-mb-xs" :style="cardStyle(tab)"> |
| 61 | + <SimpleBrowserTabCard :chromeTab="tab" /> |
| 62 | + </div> |
| 63 | + </q-card-section> |
| 64 | + </q-card> |
| 65 | + </q-expansion-item> |
| 66 | + </q-list> |
| 67 | + </div> |
| 68 | +</template> |
| 69 | + |
| 70 | +<script setup lang="ts"> |
| 71 | +import _ from 'lodash' |
| 72 | +import { SidePanelViews } from 'src/app/models/SidePanelViews' |
| 73 | +import Analytics from 'src/core/utils/google-analytics' |
| 74 | +import SimpleBrowserTabCard from 'src/tabsets/components/helper/SimpleBrowserTabCard.vue' |
| 75 | +import { Tabset, TabsetType } from 'src/tabsets/models/Tabset' |
| 76 | +import { useTabsetService } from 'src/tabsets/services/TabsetService2' |
| 77 | +import { useTabsetsStore } from 'src/tabsets/stores/tabsetsStore' |
| 78 | +import { useTabsStore2 } from 'src/tabsets/stores/tabsStore2' |
| 79 | +import { useUiStore } from 'src/ui/stores/uiStore' |
| 80 | +import { onMounted, ref, watchEffect } from 'vue' |
| 81 | +
|
| 82 | +const recentlyClosedBrowserSessions = ref<chrome.sessions.Session[]>([]) |
| 83 | +const tabsetsSessions = ref<Tabset[]>([]) |
| 84 | +const useSelection = ref(false) |
| 85 | +const userCanSelect = ref(false) |
| 86 | +
|
| 87 | +const tabSelection = ref<Set<string>>(new Set<string>()) |
| 88 | +const tabs = ref<chrome.tabs.Tab[]>([]) |
| 89 | +
|
| 90 | +onMounted(async () => { |
| 91 | + Analytics.firePageViewEvent('SidePanelSessionsListViewer', document.location.href) |
| 92 | + recentlyClosedBrowserSessions.value = await chrome.sessions.getRecentlyClosed() |
| 93 | + tabsetsSessions.value = [...useTabsetsStore().tabsets.values()].filter((ts: Tabset) => ts.type === TabsetType.SESSION) |
| 94 | +}) |
| 95 | +
|
| 96 | +watchEffect(() => { |
| 97 | + tabs.value = useTabsStore2().browserTabs |
| 98 | + const filterTerm = useUiStore().toolbarFilterTerm.toLowerCase() |
| 99 | + if (filterTerm.length > 0) { |
| 100 | + tabs.value = _.filter( |
| 101 | + tabs.value, |
| 102 | + (t: chrome.tabs.Tab) => |
| 103 | + !!((t.url && t.url?.indexOf(filterTerm) >= 0) || (t.title && t.title.toLowerCase()?.indexOf(filterTerm) >= 0)), |
| 104 | + ) |
| 105 | + } |
| 106 | +}) |
| 107 | +
|
| 108 | +watchEffect(() => { |
| 109 | + userCanSelect.value = false |
| 110 | +}) |
| 111 | +
|
| 112 | +const tabSelectionChanged = (a: any) => { |
| 113 | + const { tabId, selected } = a |
| 114 | + if (selected) { |
| 115 | + tabSelection.value.add(tabId) |
| 116 | + } else { |
| 117 | + tabSelection.value.delete(tabId) |
| 118 | + } |
| 119 | +} |
| 120 | +
|
| 121 | +const openSession = (session: Tabset) => { |
| 122 | + useTabsetService().selectTabset(session.id) |
| 123 | + useUiStore().sidePanelSetActiveView(SidePanelViews.MAIN) |
| 124 | +} |
| 125 | +
|
| 126 | +const restoreSession = async (sessionId?: string) => { |
| 127 | + const reason = await chrome.sessions.restore(sessionId) //.then((reason: any) => { |
| 128 | + console.log('restored session', reason) |
| 129 | + recentlyClosedBrowserSessions.value = await chrome.sessions.getRecentlyClosed() |
| 130 | +} |
| 131 | +
|
| 132 | +const cardStyle = (tab: chrome.tabs.Tab) => { |
| 133 | + let background = '' |
| 134 | + if (useTabsetService().urlExistsInCurrentTabset(tab.url || '')) { |
| 135 | + background = 'background: #efefef' |
| 136 | + } else { |
| 137 | + // emits('hasSelectable', true) |
| 138 | + } |
| 139 | + return `${background}` |
| 140 | +} |
| 141 | +</script> |
| 142 | + |
| 143 | +<style lang="sass" scoped> |
| 144 | +
|
| 145 | +.tabBorder |
| 146 | + border-radius: 5px 5px 0 0 |
| 147 | + border: 1px solid $lightgrey |
| 148 | + border-bottom: 0 |
| 149 | +</style> |
0 commit comments