/** * External dependencies */ import { isDefined, createIndexedSelector } from '@nelio-content/utils'; import type { EditorialComment, Maybe, PostId, Uuid, } from '@nelio-content/types'; /** * Internal dependencies */ import type { State } from '../../config'; export function getComment( state: State, id?: Uuid ): Maybe< EditorialComment > { return id ? state.entities.comments[ id ] : undefined; } export const getCommentsRelatedToPost = createIndexedSelector( ( state: State, postId?: PostId ): ReadonlyArray< EditorialComment > => { return getCommentIdsRelatedToPost( state, postId ) .map( ( id ) => getComment( state, id ) ) .filter( isDefined ); }, ( state: State, postId?: PostId ) => ( { key: postId || 0, dependants: [ getCommentIdsRelatedToPost( state, postId ) ], } ) ); export const getCommentIdsRelatedToPost = createIndexedSelector( ( state: State, postId?: PostId ): ReadonlyArray< Uuid > => { return Object.values( state.entities.comments ) .filter( ( c ) => ! postId || c.postId === postId ) .map( ( c ) => c.id ); }, ( state: State, postId?: PostId ) => ( { key: postId || 0, dependants: [ state.entities.comments ], } ) );