/** * WordPress dependencies */ import { useDispatch, useSelect } from '@safe-wordpress/data'; import { _x } from '@safe-wordpress/i18n'; /** * External dependencies */ import clsx from 'clsx'; import { getPremiumComponent } from '@nelio-content/components'; /** * Internal dependencies */ import './style.scss'; import { Comments } from './comments'; import { SuggestedReferences } from './suggested-references'; import { Tasks } from './tasks'; import { Taxonomies } from './taxonomies'; import { useIsFeatureEnabled, useIsSaving, useMayHaveExtraInfo, useSupportsTaxonomies, } from '../../hooks'; import { store as NC_POST_EDITOR } from '../../store'; import type { ExtraInfoTab } from '../../store/types'; export const ExtraInformation = (): JSX.Element | null => { const activeTab = useActiveTab(); if ( ! useMayHaveExtraInfo() ) { return null; } return 'none' === activeTab ? null : ; }; // ====== // HELPER // ====== const TabbedInfo = ( { tab }: { tab: TabType } ) => { const TabComponent = useTabComponent( tab ); const tabs = useTabs(); const { setExtraInfoTab } = useDispatch( NC_POST_EDITOR ); const isSaving = useIsSaving(); return (
{ tabs.map( ( { name, title } ) => ( ) ) }
); }; // ===== // HOOKS // ===== const useTabComponent = ( tab: TabType ): ( () => JSX.Element | null ) => { switch ( tab ) { case 'tasks': return Tasks; case 'future-actions': return getPremiumComponent( 'pqe/future-actions', 'raw/future-actions' ); case 'comments': return Comments; case 'references': return SuggestedReferences; case 'series': return getPremiumComponent( 'pqe/series', 'raw/series' ); case 'taxonomies': return () => ; } }; const useActiveTab = () => useSelect( ( select ) => select( NC_POST_EDITOR ).getExtraInfoTab(), [] ); const useTabs = (): ReadonlyArray< Tab > => [ useSupportsTaxonomies() && { name: 'taxonomies' as const, title: _x( 'Taxonomies', 'text', 'nelio-content' ), }, useIsFeatureEnabled( 'tasks' ) && { name: 'tasks' as const, title: _x( 'Tasks', 'text', 'nelio-content' ), }, useIsFeatureEnabled( 'series' ) && { name: 'series' as const, title: _x( 'Series', 'text', 'nelio-content' ), }, useIsFeatureEnabled( 'future-actions' ) && { name: 'future-actions' as const, title: _x( 'Future Actions', 'text', 'nelio-content' ), }, useIsFeatureEnabled( 'comments' ) && { name: 'comments' as const, title: _x( 'Comments', 'text', 'nelio-content' ), }, useIsFeatureEnabled( 'references' ) && { name: 'references' as const, title: _x( 'References', 'text', 'nelio-content' ), }, ].filter( ( x ) => !! x ); // ============ // HELPER TYPES // ============ type TabType = Exclude< ExtraInfoTab, 'none' >; type Tab = { readonly name: TabType; readonly title: string; };