/** * WordPress dependencies */ import { createSelector } from '@safe-wordpress/data'; import { _x } from '@safe-wordpress/i18n'; /** * External dependencies */ import { isEqual, trim } from 'lodash'; import type { Maybe, TaskPreset, TaskTemplate } from '@nelio-content/types'; /** * Internal dependencies */ import type { State } from './types'; export function getTaskPresets( state: State ): ReadonlyArray< TaskPreset[ 'id' ] > { return state.taskPresets.allIds; } export function getTaskPreset( state: State, presetId: Maybe< TaskPreset[ 'id' ] > ): Maybe< TaskPreset > { return presetId ? state.taskPresets.byId[ presetId ] : undefined; } export function isTaskTemplateEditorOpen( state: State ): boolean { return !! state.editor; } export const getEditingTaskSource = createSelector( ( state: State ): Maybe< { readonly presetId: TaskPreset[ 'id' ]; readonly source: TaskTemplate; } > => { if ( ! state.editor ) { return undefined; } const { presetId, source } = state.editor; return { presetId, source }; }, ( state: State ) => [ state.editor?.presetId, state.editor?.source ] ); export function getEditingTask( state: State ): TaskTemplate { return state.editor?.attrs || DEFAULT_ATTRS; } export function isEditingTaskDirty( state: State ): boolean { if ( ! state.editor ) { return false; } const { source } = state.editor; const attrs = { ...state.editor.attrs, task: trim( state.editor.attrs.task ), }; return ! isEqual( source, attrs ); } export function getEditingTaskError( state: State ): Maybe< string > { if ( ! state.editor ) { return undefined; } const { attrs } = state.editor; if ( trim( attrs.task ) === '' ) { return _x( 'Please write a valid task', 'user', 'nelio-content' ); } if ( trim( attrs.dateValue ) === '' ) { return _x( 'Please set a valid date', 'user', 'nelio-content' ); } return undefined; } export function isSavingPresets( state: State ): boolean { return state.saving; } // ======= // HELPERS // ======= const DEFAULT_ATTRS: TaskTemplate = { task: '', color: 'none', dateType: 'predefined-offset', dateValue: '0', assigneeId: undefined, };