/** * WordPress dependencies */ import { useSelect } from '@safe-wordpress/data'; /** * External dependencies */ import { isArray } from 'lodash'; import { store as NC_DATA } from '@nelio-content/data'; import type { Maybe, MediaId, MediaItem, SocialMessage, } from '@nelio-content/types'; /** * Internal dependencies */ import { useActiveSocialNetwork } from './networks'; import { store as NC_SOCIAL_EDITOR } from '../store'; import type { State } from '../store/types'; export const useActiveNetworkType = (): SocialMessage[ 'type' ] => { const network = useActiveSocialNetwork(); return useSelect( ( select ) => select( NC_SOCIAL_EDITOR ).getMessageTypeInNetwork( network ), [ network ] ); }; export const useTypeByNetwork = (): State[ 'attributes' ][ 'typeByNetwork' ] => useSelect( ( select ) => select( NC_SOCIAL_EDITOR ).getTypeByNetwork(), [] ); export const useHasExplicitImage = (): boolean => useSelect( ( select ) => select( NC_SOCIAL_EDITOR ).hasExplicitImage(), [] ); export const useHasExplicitVideo = (): boolean => useSelect( ( select ) => select( NC_SOCIAL_EDITOR ).hasExplicitVideo(), [] ); export const useMediaImage = (): Maybe< MediaItem | ReadonlyArray< MediaItem > > => useSelect( ( select ) => { const id = select( NC_SOCIAL_EDITOR ).getImageId(); if ( ! id ) { return; } if ( isArray( id ) ) { return id .map( ( i: MediaId ) => select( NC_DATA ).getMedia( i ) ) .filter( ( x ) => !! x ); } return select( NC_DATA ).getMedia( id as MediaId ); }, [] ); export const useMediaVideo = (): Maybe< MediaItem | ReadonlyArray< MediaItem > > => useSelect( ( select ) => { const id = select( NC_SOCIAL_EDITOR ).getVideoId(); if ( ! id ) { return; } if ( isArray( id ) ) { return id .map( ( i: MediaId ) => select( NC_DATA ).getMedia( i ) ) .filter( ( x ) => !! x ); } return select( NC_DATA ).getMedia( id as MediaId ); }, [] );