/** * WordPress dependencies */ import { useDispatch, useSelect } from '@safe-wordpress/data'; /** * External dependencies */ import { store as NC_DATA } from '@nelio-content/data'; import { doesNetworkSupport } from '@nelio-content/networks'; import type { SocialNetworkName, SocialNetworkSupport, } from '@nelio-content/types'; /** * Internal dependencies */ import { store as NC_SOCIAL_EDITOR } from '../store'; import { EMPTY_ARRAY } from '@nelio-content/constants'; import { useMemo } from '@safe-wordpress/element'; export const useActiveSocialNetwork = (): SocialNetworkName => useSelect( ( select ) => select( NC_SOCIAL_EDITOR ).getActiveSocialNetwork(), [] ); export const useDoesActiveNetworkSupport = ( support: SocialNetworkSupport ): boolean => doesNetworkSupport( support, useActiveSocialNetwork() ); export const useAvailableNetworks = (): ReadonlyArray< SocialNetworkName > => { const { networks, subscribed, profiles, disabledProfiles } = useSelect( ( select ) => ( { networks: select( NC_DATA ).getAvailableSocialNetworks() ?? EMPTY_ARRAY, subscribed: select( NC_DATA ).isSubscribed(), profiles: select( NC_DATA ).getSocialProfiles() ?? EMPTY_ARRAY, disabledProfiles: select( NC_SOCIAL_EDITOR ).getDisabledProfileIds() ?? EMPTY_ARRAY, } ), [] ); return useMemo( () => { if ( subscribed ) { return networks; } const disabled = new Set( disabledProfiles ); const availableNetworks = new Set< SocialNetworkName >(); for ( const p of profiles ) { if ( ! disabled.has( p.id ) ) { availableNetworks.add( p.network ); } } return networks.filter( ( n ) => availableNetworks.has( n ) ); }, [ networks, subscribed, profiles, disabledProfiles ] ); }; export const useSelectedNetworks = (): ReadonlyArray< SocialNetworkName > => useSelect( ( select ) => select( NC_SOCIAL_EDITOR ).getSelectedSocialNetworks(), [] ); export const useActiveNetwork = (): [ SocialNetworkName, ( network: SocialNetworkName ) => void, ] => { const network = useSelect( ( select ) => select( NC_SOCIAL_EDITOR ).getActiveSocialNetwork(), [] ); const { setActiveSocialNetwork } = useDispatch( NC_SOCIAL_EDITOR ); return [ network, setActiveSocialNetwork ]; };