import { ReactElement, useState, useMemo } from 'react';
import { useAppDispatch, useAppSelector } from '../../store/hooks';
import { clearSelectionAndSelectMulti, selectSimilarUrls, selectSelectedUrls } from '../../store/uiSlice';
import { selectWindowsSortedExcept } from '../../store/selectors';
import { selectTabs, selectDuplicateUrls, dedupAll } from '../../store/windowsSlice';
import WindowTabList from './WindowTabList';
import { useLiveQuery } from 'dexie-react-hooks';
import { getTabvanaWindowId } from '../../db/prefs';
import FlexViewHeader from '../flexView/FlexViewHeader';
import Inspector from '../inspector/Inspector';
import { RootState } from '../../store/rootState';
import SplitPane from 'react-split-pane';
import { Page, PageFilter, PageSortOrder, fetchPagesByNormalizedUrls, fetchPages } from '../../db/pages';
import { sortBy } from 'lodash';
import { pageSortOrderMap, filterPage } from '../sort';
import PageRow from '../flexView/pagelists/pagerow/PageRow';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faClone } from '@fortawesome/free-solid-svg-icons';
import IconButton from '@mui/joy/IconButton';
import { Tooltip } from '@mui/joy';
const Windows = (): ReactElement => {
// const inspectorSize = useAppSelector(selectInspectorSize);
const [filter, setFilter] = useState({ flagged: false });
const [groupByWindow, setGroupByWindow] = useState(true);
const [sortOrder, setSortOrder] = useState(PageSortOrder.recent);
const tabvanaWindowId = useLiveQuery(() => {
return getTabvanaWindowId();
}, []);
const windowsSorted = useAppSelector((state: RootState) =>
selectWindowsSortedExcept(state, tabvanaWindowId)
);
const tabs = useAppSelector(selectTabs);
const dispatch = useAppDispatch();
const duplicateUrls = useAppSelector(selectDuplicateUrls);
const similarUrls = useAppSelector(selectSimilarUrls);
const selectedUrls = useAppSelector(selectSelectedUrls);
// Data for Flat View
const allTabIds = useMemo(() => {
if (!windowsSorted) return [];
return windowsSorted.flatMap(([_, w]) => w.tabIds);
}, [windowsSorted]);
const allTabObjects = useMemo(() => allTabIds.map(id => tabs[id]).filter(t => t && t.url), [allTabIds, tabs]);
const allUrls = useMemo(() => allTabObjects.map(t => t.url!.normalized), [allTabObjects]);
const pages = useLiveQuery(() => fetchPages(allUrls), [allUrls]);
let content;
if (!windowsSorted) {
content = <>>;
} else if (groupByWindow) {
content = windowsSorted.map(([windowId, window]) => (