import * as React from 'react'; import { Sorting } from './Sorting'; import { Searchbox } from './Searchbox'; import { Filter } from './Filter'; import { Folders } from './Folders'; import { Settings, NavigationType } from '../../models'; import { DashboardMessage } from '../../DashboardMessage'; import { Startup } from '../Startup'; import { Navigation } from '../Navigation'; import { Grouping } from '.'; import { ViewSwitch } from './ViewSwitch'; import { useRecoilState, useRecoilValue, useResetRecoilState } from 'recoil'; import { CategoryAtom, GroupingSelector, SortingAtom, TagAtom } from '../../state'; import { Messenger } from '@estruyf/vscode/dist/client'; import { ClearFilters } from './ClearFilters'; import { MediaHeaderTop } from '../Media/MediaHeaderTop'; import { ChoiceButton } from '../ChoiceButton'; import { MediaHeaderBottom } from '../Media/MediaHeaderBottom'; import { Tabs } from './Tabs'; import { CustomScript } from '../../../models'; import { LightningBoltIcon, PlusIcon } from '@heroicons/react/outline'; import { useLocation, useNavigate } from 'react-router-dom'; import { routePaths } from '../..'; import { useEffect, useMemo } from 'react'; import { SyncButton } from './SyncButton'; import { PAGE_LIMIT, Pagination } from './Pagination'; import { GroupOption } from '../../constants/GroupOption'; export interface IHeaderProps { header?: React.ReactNode; settings: Settings | null; // Navigation totalPages?: number; // Page folders folders?: string[]; } export const Header: React.FunctionComponent = ({header, totalPages, folders, settings }: React.PropsWithChildren) => { const [ crntTag, setCrntTag ] = useRecoilState(TagAtom); const [ crntCategory, setCrntCategory ] = useRecoilState(CategoryAtom); const grouping = useRecoilValue(GroupingSelector); const resetSorting = useResetRecoilState(SortingAtom); const location = useLocation(); const navigate = useNavigate(); const createContent = () => { Messenger.send(DashboardMessage.createContent); }; const createByContentType = () => { Messenger.send(DashboardMessage.createByContentType); }; const createByTemplate = () => { Messenger.send(DashboardMessage.createByTemplate); }; const updateView = (view: NavigationType) => { navigate(routePaths[view]); resetSorting(); } const runBulkScript = (script: CustomScript) => { Messenger.send(DashboardMessage.runCustomScript, { script }); }; const customActions: any[] = (settings?.scripts || []).filter(s => s.bulk && (s.type === "content" || !s.type)).map((s, idx) => ({ title: (
{s.title}
), onClick: () => runBulkScript(s) })); const choiceOptions = useMemo(() => { const isEnabled = settings?.dashboardState?.contents?.templatesEnabled || false; if (isEnabled) { return [ { title: (
Create by content type
), onClick: createByContentType, disabled: !settings?.initialized }, { title: (
Create by template
), onClick: createByTemplate, disabled: !settings?.initialized }, ...customActions ]; } return []; }, [settings?.dashboardState?.contents?.templatesEnabled]); useEffect(() => { if (location.search) { const searchParams = new URLSearchParams(location.search); const taxonomy = searchParams.get("taxonomy"); const value = searchParams.get("value"); if (taxonomy && value) { if (taxonomy === "tags") { setCrntTag(value); } else if (taxonomy === "categories") { setCrntCategory(value); } } return; } setCrntTag(""); setCrntCategory(""); }, [location.search]); return (
{ location.pathname === routePaths.contents && ( <>
setCrntTag(value)} /> setCrntCategory(value)} />
{ (settings?.dashboardState.contents.pagination) && (totalPages || 0) > PAGE_LIMIT && (!grouping || grouping === GroupOption.none) && (
) } ) } { location.pathname === routePaths.media && ( <> ) } { header }
); };