/** * External dependencies */ import { createIndexedSelector } from '@nelio-content/utils'; import type { Maybe, Post, PostId, SocialMessage, EditorialComment, EditorialTask, } from '@nelio-content/types'; /** * Internal dependencies */ import { getSocialMessagesRelatedToPost } from '../messages/selectors'; import { getCommentsRelatedToPost } from '../comments/selectors'; import { getTasksRelatedToPost } from '../tasks/selectors'; import { getAllPremiumItemsRelatedToPost } from '../premium/selectors'; import type { State } from '../../config'; type PostRelatedItems = { readonly comment: ReadonlyArray< EditorialComment >; readonly social: ReadonlyArray< SocialMessage >; readonly task: ReadonlyArray< EditorialTask >; } & ReturnType< typeof getAllPremiumItemsRelatedToPost >; export function getPost( state: State, id?: PostId ): Maybe< Post > { return id ? state.entities.posts[ id ] : undefined; } export const getPostRelatedItems = createIndexedSelector( ( state: State, id?: PostId ): PostRelatedItems => { return { comment: getCommentsRelatedToPost( state, id ), social: getSocialMessagesRelatedToPost( state, id ), task: getTasksRelatedToPost( state, id ), ...getAllPremiumItemsRelatedToPost( state, id ), }; }, ( state: State, id?: PostId ) => ( { key: id || 0, dependants: [ getCommentsRelatedToPost( state, id ), getSocialMessagesRelatedToPost( state, id ), getTasksRelatedToPost( state, id ), getAllPremiumItemsRelatedToPost( state, id ), ], } ) );