/** * External dependencies */ import { indexOf } from 'lodash'; import { make } from 'ts-brand'; import { EMPTY_ARRAY } from '@nelio-content/constants'; import type { Maybe, OrderedSubscriptionPlans, PremiumFeature, SubscriptionPlan, TaxonomySlug, Url, } from '@nelio-content/types'; /** * Internal dependencies */ import type { State } from '../../config'; export function getPluginLimits( state: State ): State[ 'meta' ][ 'plugin' ][ 'limits' ] { return state.meta.plugin.limits; } export function getPremiumStatus( state: State ): State[ 'meta' ][ 'plugin' ][ 'premiumStatus' ] { return state.meta.plugin.premiumStatus; } export function isSubscribed( state: State, requiredPlan?: SubscriptionPlan ): boolean { const { subscriptionPlan } = state.meta.plugin; if ( ! requiredPlan ) { return 'none' !== subscriptionPlan; } const plans: OrderedSubscriptionPlans = [ 'basic', 'standard', 'plus' ]; return indexOf( plans, requiredPlan ) <= indexOf( plans, subscriptionPlan ); } export function isFeatureEnabled( state: State, _: PremiumFeature ): boolean { return isSubscribed( state ); } export function hasPromoActive( state: State, promo: string ): boolean { return state.meta.plugin.activePromos.includes( promo ); } export function isAnalyticsEnabled( state: State ): boolean { return state.meta.plugin.isAnalyticsEnabled; } export function isGAConnected( state: State ): boolean { return state.meta.plugin.isGAConnected; } export function getApiRoot( state: State ): string { return state.meta.plugin.apiRoot; } export function getAuthenticationToken( state: State ): string { return state.meta.plugin.authenticationToken; } export function areAutoTutorialsEnabled( state: State ): boolean { return state.meta.plugin.areAutoTutorialsEnabled; } export function getDefaultTime( state: State, type: 'post' | 'social' ): string { return state.meta.plugin.defaultTimes[ type ]; } export function getNonReferenceDomainRegexes( state: State ): ReadonlyArray< RegExp > { return state.meta.plugin.nonReferenceDomainRegexes ?? EMPTY_ARRAY; } export function isSocialPublicationPaused( state: State ): boolean { return !! state.meta.plugin.isSocialPublicationPaused; } export function isSocialPublicationStatusBeingSynched( state: State ): boolean { return !! state.meta.plugin.isSocialPublicationStatusBeingSynched; } export function getPremiumDialog( state: State ): 'none' | PremiumFeature { return state.meta.plugin.premiumDialog; } export function getPluginUrl( state: State, path: string = '' ): Url { return make< Url >()( `${ state.meta.plugin.pluginUrl }${ path }` ); } export function getSeriesTaxonomySlug( state: State ): Maybe< TaxonomySlug > { return state.meta.plugin.seriesTaxonomySlug; }