UNPKG

@grafana/runtime

Version:
1 lines 4.45 kB
{"version":3,"file":"utils.mjs","sources":["../../../../src/services/pluginExtensions/utils.tsx"],"sourcesContent":["import React from 'react';\n\nimport {\n ComponentTypeWithExtensionMeta,\n type PluginExtension,\n type PluginExtensionComponent,\n type PluginExtensionLink,\n PluginExtensionTypes,\n} from '@grafana/data';\n\nexport function isPluginExtensionLink(extension: PluginExtension | undefined): extension is PluginExtensionLink {\n if (!extension) {\n return false;\n }\n return extension.type === PluginExtensionTypes.link && ('path' in extension || 'onClick' in extension);\n}\n\nexport function isPluginExtensionComponent(\n extension: PluginExtension | undefined\n): extension is PluginExtensionComponent {\n if (!extension) {\n return false;\n }\n return extension.type === PluginExtensionTypes.component && 'component' in extension;\n}\n\nexport function getLimitedComponentsToRender<Props extends {}>({\n props,\n components,\n limit,\n pluginId,\n}: {\n props: Props;\n components: Array<ComponentTypeWithExtensionMeta<Props>>;\n limit?: number;\n pluginId?: string | string[] | RegExp;\n}) {\n if (!components.length) {\n return null;\n }\n\n const renderedComponents: Array<ComponentTypeWithExtensionMeta<Props>> = [];\n\n for (const Component of components) {\n const { meta } = Component;\n\n if (pluginId && typeof pluginId === 'string' && pluginId !== meta.pluginId) {\n continue;\n }\n\n if (pluginId && Array.isArray(pluginId) && !pluginId.includes(meta.pluginId)) {\n continue;\n }\n\n if (pluginId instanceof RegExp && !pluginId.test(meta.pluginId)) {\n continue;\n }\n\n // If no limit is provided, return all components\n if (limit === undefined) {\n renderedComponents.push(Component);\n continue;\n }\n\n // If a component does not render anything, do not count it in the limit\n if (React.createElement<Props>(Component, props) !== null) {\n renderedComponents.push(Component);\n }\n\n // Stop if we've reached the limit\n if (renderedComponents.length >= limit) {\n break;\n }\n }\n\n return renderedComponents;\n}\n\nexport function renderLimitedComponents<Props extends {}>({\n props,\n components,\n limit,\n pluginId,\n}: {\n props: Props;\n components: Array<ComponentTypeWithExtensionMeta<Props>>;\n limit?: number;\n pluginId?: string | string[] | RegExp;\n}) {\n const limitedComponents = getLimitedComponentsToRender({ props, components, limit, pluginId });\n\n if (!limitedComponents?.length) {\n return null;\n }\n\n return (\n <>\n {limitedComponents.map((Component) => (\n <Component key={Component.meta.id} {...props} />\n ))}\n </>\n );\n}\n"],"names":[],"mappings":";;;;;AAUO,SAAS,sBAAsB,SAAA,EAA0E;AAC9G,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,UAAU,IAAA,KAAS,oBAAA,CAAqB,IAAA,KAAS,MAAA,IAAU,aAAa,SAAA,IAAa,SAAA,CAAA;AAC9F;AAEO,SAAS,2BACd,SAAA,EACuC;AACvC,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,SAAA,CAAU,IAAA,KAAS,oBAAA,CAAqB,SAAA,IAAa,WAAA,IAAe,SAAA;AAC7E;AAEO,SAAS,4BAAA,CAA+C;AAAA,EAC7D,KAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,IAAI,CAAC,WAAW,MAAA,EAAQ;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,qBAAmE,EAAC;AAE1E,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,MAAM,EAAE,MAAK,GAAI,SAAA;AAEjB,IAAA,IAAI,YAAY,OAAO,QAAA,KAAa,QAAA,IAAY,QAAA,KAAa,KAAK,QAAA,EAAU;AAC1E,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,CAAC,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,EAAG;AAC5E,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,oBAAoB,MAAA,IAAU,CAAC,SAAS,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,EAAG;AAC/D,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,UAAU,KAAA,CAAA,EAAW;AACvB,MAAA,kBAAA,CAAmB,KAAK,SAAS,CAAA;AACjC,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,KAAA,CAAM,aAAA,CAAqB,SAAA,EAAW,KAAK,MAAM,IAAA,EAAM;AACzD,MAAA,kBAAA,CAAmB,KAAK,SAAS,CAAA;AAAA,IACnC;AAGA,IAAA,IAAI,kBAAA,CAAmB,UAAU,KAAA,EAAO;AACtC,MAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,kBAAA;AACT;AAEO,SAAS,uBAAA,CAA0C;AAAA,EACxD,KAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,oBAAoB,4BAAA,CAA6B,EAAE,OAAO,UAAA,EAAY,KAAA,EAAO,UAAU,CAAA;AAE7F,EAAA,IAAI,EAAC,uDAAmB,MAAA,CAAA,EAAQ;AAC9B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,GAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA,iBAAA,CAAkB,GAAA,CAAI,CAAC,SAAA,qBACtB,GAAA,CAAC,SAAA,EAAA,EAAmC,GAAG,KAAA,EAAA,EAAvB,SAAA,CAAU,IAAA,CAAK,EAAe,CAC/C,CAAA,EACH,CAAA;AAEJ;;;;"}