/** * External dependencies */ import type { PostStatus, PostStatusSlug } from '@nelio-content/types'; export type Action = | MarkAsSaving | ResetStatuses | SetStatus | RemoveStatus | ReorderStatuses | OpenStatusEditor | EditStatus | CloseStatusEditor; export function markAsSaving( saving: boolean ): MarkAsSaving { return { type: 'MARK_AS_SAVING', saving, }; } export function resetStatuses( statuses: ReadonlyArray< PostStatus > ): ResetStatuses { return { type: 'RESET_STATUSES', statuses, }; } export function reorderStatuses( slugs: ReadonlyArray< PostStatusSlug > ): ReorderStatuses { return { type: 'REORDER_STATUSES', slugs, }; } export function setStatus( status: PostStatus ): SetStatus { return { type: 'SET_STATUS', status, }; } export function removeStatus( status: PostStatusSlug ): RemoveStatus { return { type: 'REMOVE_STATUS', status, }; } export function openStatusEditor( status: PostStatus, isNew: boolean = false ): OpenStatusEditor { return { type: 'OPEN_STATUS_EDITOR', slug: status.slug, status, isNew, }; } export function editStatus( status: Partial< PostStatus > ): EditStatus { return { type: 'EDIT_STATUS', status, }; } export function closeStatusEditor(): CloseStatusEditor { return { type: 'CLOSE_STATUS_EDITOR', }; } // ============ // HELPER TYPES // ============ type MarkAsSaving = { readonly type: 'MARK_AS_SAVING'; readonly saving: boolean; }; type ReorderStatuses = { readonly type: 'REORDER_STATUSES'; readonly slugs: ReadonlyArray< PostStatusSlug >; }; type ResetStatuses = { readonly type: 'RESET_STATUSES'; readonly statuses: ReadonlyArray< PostStatus >; }; type SetStatus = { readonly type: 'SET_STATUS'; readonly status: PostStatus; }; type RemoveStatus = { readonly type: 'REMOVE_STATUS'; readonly status: PostStatusSlug; }; type OpenStatusEditor = { readonly type: 'OPEN_STATUS_EDITOR'; readonly slug: PostStatusSlug; readonly status: PostStatus; readonly isNew: boolean; }; type EditStatus = { readonly type: 'EDIT_STATUS'; readonly status: Partial< PostStatus >; }; type CloseStatusEditor = { readonly type: 'CLOSE_STATUS_EDITOR'; };