/** * WordPress dependencies */ import { useSelect } from '@safe-wordpress/data'; /** * External dependencies */ import { difference, find, isEqual, map, some } from 'lodash'; import { store as NC_DATA } from '@nelio-content/data'; import type { Maybe, PostStatus, PostStatusSlug } from '@nelio-content/types'; /** * Internal dependencies */ import { store as NC_CUSTOM_STATUSES } from './store'; import { isDefined } from '@nelio-content/utils'; export const useAreStatusesDirty = (): boolean => useSelect( ( select ) => { const oldStatuses = select( NC_DATA ).getStatuses(); const { getStatus, getStatuses } = select( NC_CUSTOM_STATUSES ); const newStatuses = getStatuses().map( getStatus ).filter( isDefined ); const oldSlugs = map( oldStatuses, 'slug' ); const newSlugs = map( newStatuses, 'slug' ); if ( difference( oldSlugs, newSlugs ).length ) { return true; } if ( ! isEqual( oldSlugs, newSlugs ) ) { return true; } return some( newStatuses, ( newStatus ) => { const oldStatus = find( oldStatuses, { slug: newStatus.slug } ); return ! isEqual( newStatus, oldStatus ); } ); }, [] ); export const useIsSaving = (): boolean => useSelect( ( select ) => select( NC_CUSTOM_STATUSES ).isSavingStatuses(), [] ); export const useStatus = ( slug: PostStatusSlug ): Maybe< PostStatus > => useSelect( ( select ) => select( NC_CUSTOM_STATUSES ).getStatus( slug ), [ slug ] );