/** * External dependencies */ import { castArray } from 'lodash'; import type { Account, Site, Invoice, SiteId, SubscriptionPromoId, SubscriptionPromo, } from '@nab/types'; export type Action = | EnableAgencyFullView | LockPage | MarkSubmissionPromosAsDismissed | ReceiveAccount | ReceiveActiveSubscriptionPromo | ReceiveInvoices | ReceiveSites | RemoveSiteAfterUnlink | UnlockPage; export function lock(): LockPage { return { type: 'LOCK_PAGE', }; } export function unlock(): UnlockPage { return { type: 'UNLOCK_PAGE', }; } export function enableAgencyFullView(): EnableAgencyFullView { return { type: 'ENABLE_AGENCY_FULL_VIEW', }; } export function receiveAccount( account: Account ): ReceiveAccount { return { type: 'RECEIVE_ACCOUNT', account, }; } export function receiveSites( sites: Site | ReadonlyArray< Site > ): ReceiveSites { return { type: 'RECEIVE_SITES', sites: castArray( sites ), }; } export function receiveInvoices( invoices: Invoice | ReadonlyArray< Invoice > ): ReceiveInvoices { return { type: 'RECEIVE_INVOICES', invoices: castArray( invoices ), }; } export function removeSiteAfterUnlink( id: SiteId ): RemoveSiteAfterUnlink { return { type: 'UNLINK_SITE', id, }; } export function receiveActiveSubscriptionPromo( promo: SubscriptionPromo ): ReceiveActiveSubscriptionPromo { return { type: 'RECEIVE_ACTIVE_SUBSCRIPTION_PROMO', promo, }; } export function markSubmissionPromosAsDismissed( promoIds: SubscriptionPromoId | ReadonlyArray< SubscriptionPromoId > ): MarkSubmissionPromosAsDismissed { return { type: 'MARK_SUBSCRIPTION_PROMOS_AS_DISMISSED', promoIds: castArray( promoIds ), }; } // ============ // HELPER TYPES // ============ type ReceiveAccount = { readonly type: 'RECEIVE_ACCOUNT'; readonly account: Account; }; type ReceiveSites = { readonly type: 'RECEIVE_SITES'; readonly sites: ReadonlyArray< Site >; }; type ReceiveInvoices = { readonly type: 'RECEIVE_INVOICES'; readonly invoices: ReadonlyArray< Invoice >; }; type RemoveSiteAfterUnlink = { readonly type: 'UNLINK_SITE'; readonly id: SiteId; }; type LockPage = { readonly type: 'LOCK_PAGE'; }; type UnlockPage = { readonly type: 'UNLOCK_PAGE'; }; type EnableAgencyFullView = { readonly type: 'ENABLE_AGENCY_FULL_VIEW'; }; type MarkSubmissionPromosAsDismissed = { readonly type: 'MARK_SUBSCRIPTION_PROMOS_AS_DISMISSED'; readonly promoIds: ReadonlyArray< SubscriptionPromoId >; }; type ReceiveActiveSubscriptionPromo = { readonly type: 'RECEIVE_ACTIVE_SUBSCRIPTION_PROMO'; readonly promo: SubscriptionPromo; };