import * as React from 'react'; import isFunction from 'lodash/isFunction'; import { VisynDataViewPluginType, VisynSimpleViewPluginType, VisynViewPluginDesc } from './interfaces'; import { EXTENSION_POINT_VISYN_VIEW } from '../../plugin/extensions'; /** * Resolves the current value of a setStateAction by calling it with the current value if it is a function, * or by simply returning the value otherwise. * @param valueOrFunction Value or function to the value. * @param currentValue Current value passed to the function to receive the new value. */ export function setStateActionCaller(valueOrFunction: React.SetStateAction, currentValue: T) { if (isFunction(valueOrFunction)) { return valueOrFunction(currentValue); } return valueOrFunction; } export function isVisynViewPluginDesc(desc: unknown): desc is VisynViewPluginDesc { return (desc)?.type === EXTENSION_POINT_VISYN_VIEW; } export function isVisynSimpleViewDesc(desc: unknown): desc is VisynSimpleViewPluginType['desc'] { return isVisynViewPluginDesc(desc) && (desc)?.visynViewType === 'simple'; } export function isVisynSimpleView(plugin: unknown): plugin is VisynSimpleViewPluginType['plugin'] { return isVisynViewPluginDesc((plugin)?.desc) && (plugin)?.viewType === 'simple'; } export function isVisynDataViewDesc(desc: unknown): desc is VisynDataViewPluginType['desc'] { return isVisynViewPluginDesc(desc) && (desc)?.visynViewType === 'data'; } export function isVisynDataView(plugin: unknown): plugin is VisynDataViewPluginType['plugin'] { return isVisynViewPluginDesc((plugin)?.desc) && (plugin)?.viewType === 'data'; }