/** * External dependencies */ import { map } from 'lodash'; import { EMPTY_ARRAY } from '@nelio-content/constants'; import { createIndexedSelector, isDefined } from '@nelio-content/utils'; import type { EditorialTask, Maybe, PostId, Uuid } from '@nelio-content/types'; /** * Internal dependencies */ import type { State } from '../../config'; export function getTask( state: State, id?: Uuid ): Maybe< EditorialTask > { return id ? state.entities.tasks.byId[ id ] : undefined; } export const getTasksRelatedToPost = createIndexedSelector( ( state: State, postId?: PostId ): ReadonlyArray< EditorialTask > => { const summaries = !! postId && state.entities.tasks.byRelatedPost[ postId ]; if ( ! summaries ) { return EMPTY_ARRAY; } return map( summaries, ( { id } ) => getTask( state, id ) ).filter( isDefined ); }, ( state: State, postId?: PostId ) => ( { key: postId || 0, dependants: [ !! postId && state.entities.tasks.byRelatedPost[ postId ], state.entities.tasks.byId, ], } ) ); export const getTaskIdsRelatedToPost = createIndexedSelector( ( state: State, postId?: PostId ): ReadonlyArray< Uuid > => { return map( getTasksRelatedToPost( state, postId ), 'id' ); }, ( state: State, postId?: PostId ) => ( { key: postId || 0, dependants: [ getTasksRelatedToPost( state, postId ) ], } ) );