import * as React from 'react'; import { Sorting } from './Sorting'; import { Searchbox } from './Searchbox'; import { Settings, NavigationType } from '../../models'; import { DashboardMessage } from '../../DashboardMessage'; import { Grouping } from '.'; import { ViewSwitch } from './ViewSwitch'; import { useRecoilValue, useResetRecoilState } from 'recoil'; import { GroupingSelector, SortingAtom } from '../../state'; import { Messenger } from '@estruyf/vscode/dist/client'; import { ClearFilters } from './ClearFilters'; import { MediaHeaderTop } from '../Media/MediaHeaderTop'; import { ChoiceButton } from '../Common/ChoiceButton'; import { MediaHeaderBottom } from '../Media/MediaHeaderBottom'; import { Tabs } from './Tabs'; import { CustomScript } from '../../../models'; import { ArrowTopRightOnSquareIcon, BoltIcon, PlusIcon } from '@heroicons/react/24/outline'; import { HeartIcon } from '@heroicons/react/24/solid'; import { useLocation, useNavigate } from 'react-router-dom'; import { routePaths } from '../..'; import { useEffect, useMemo } from 'react'; import { SyncButton } from './SyncButton'; import { Pagination } from './Pagination'; import { GroupOption } from '../../constants/GroupOption'; import usePagination from '../../hooks/usePagination'; import { PaginationStatus } from './PaginationStatus'; import { Navigation } from './Navigation'; import { ProjectSwitcher } from './ProjectSwitcher'; import * as l10n from '@vscode/l10n'; import { LocalizationKey } from '../../../localization'; import { SettingsLink } from '../SettingsView/SettingsLink'; import { Link } from '../Common/Link'; import { SPONSOR_LINK } from '../../../constants'; import { Filters } from './Filters'; export interface IHeaderProps { header?: React.ReactNode; settings: Settings | null; // Navigation totalPages?: number; // Page folders folders?: string[]; } export const Header: React.FunctionComponent = ({ header, totalPages, settings }: React.PropsWithChildren) => { const grouping = useRecoilValue(GroupingSelector); const resetSorting = useResetRecoilState(SortingAtom); const location = useLocation(); const navigate = useNavigate(); const { pageSetNr } = usePagination(settings?.dashboardState.contents.pagination); 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: (
{l10n.t(LocalizationKey.dashboardHeaderHeaderCreateByContentType)}
), onClick: createByContentType, disabled: !settings?.initialized }, { title: (
{l10n.t(LocalizationKey.dashboardHeaderHeaderCreateByTemplate)}
), onClick: createByTemplate, disabled: !settings?.initialized }, ...customActions ]; } return []; }, [settings?.dashboardState?.contents?.templatesEnabled]); return (
{ settings?.websiteUrl && ( {settings?.websiteUrl}
{location.pathname === routePaths.contents && ( <>
{pageSetNr > 0 && (totalPages || 0) > pageSetNr && (!grouping || grouping === GroupOption.none) && (
)} )} {location.pathname === routePaths.media && ( <> )} {header}
); };