@grafana/runtime
Version:
Grafana Runtime Library
1 lines • 4.39 kB
Source Map (JSON)
{"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,SAA0E,EAAA;AAC9G,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAO,OAAA,KAAA;AAAA;AAET,EAAA,OAAO,UAAU,IAAS,KAAA,oBAAA,CAAqB,IAAS,KAAA,MAAA,IAAU,aAAa,SAAa,IAAA,SAAA,CAAA;AAC9F;AAEO,SAAS,2BACd,SACuC,EAAA;AACvC,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAO,OAAA,KAAA;AAAA;AAET,EAAA,OAAO,SAAU,CAAA,IAAA,KAAS,oBAAqB,CAAA,SAAA,IAAa,WAAe,IAAA,SAAA;AAC7E;AAEO,SAAS,4BAA+C,CAAA;AAAA,EAC7D,KAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAKG,EAAA;AACD,EAAI,IAAA,CAAC,WAAW,MAAQ,EAAA;AACtB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,MAAM,qBAAmE,EAAC;AAE1E,EAAA,KAAA,MAAW,aAAa,UAAY,EAAA;AAClC,IAAM,MAAA,EAAE,MAAS,GAAA,SAAA;AAEjB,IAAA,IAAI,YAAY,OAAO,QAAA,KAAa,QAAY,IAAA,QAAA,KAAa,KAAK,QAAU,EAAA;AAC1E,MAAA;AAAA;AAGF,IAAI,IAAA,QAAA,IAAY,KAAM,CAAA,OAAA,CAAQ,QAAQ,CAAA,IAAK,CAAC,QAAS,CAAA,QAAA,CAAS,IAAK,CAAA,QAAQ,CAAG,EAAA;AAC5E,MAAA;AAAA;AAGF,IAAA,IAAI,oBAAoB,MAAU,IAAA,CAAC,SAAS,IAAK,CAAA,IAAA,CAAK,QAAQ,CAAG,EAAA;AAC/D,MAAA;AAAA;AAIF,IAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,MAAA,kBAAA,CAAmB,KAAK,SAAS,CAAA;AACjC,MAAA;AAAA;AAIF,IAAA,IAAI,KAAM,CAAA,aAAA,CAAqB,SAAW,EAAA,KAAK,MAAM,IAAM,EAAA;AACzD,MAAA,kBAAA,CAAmB,KAAK,SAAS,CAAA;AAAA;AAInC,IAAI,IAAA,kBAAA,CAAmB,UAAU,KAAO,EAAA;AACtC,MAAA;AAAA;AACF;AAGF,EAAO,OAAA,kBAAA;AACT;AAEO,SAAS,uBAA0C,CAAA;AAAA,EACxD,KAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAKG,EAAA;AACD,EAAA,MAAM,oBAAoB,4BAA6B,CAAA,EAAE,OAAO,UAAY,EAAA,KAAA,EAAO,UAAU,CAAA;AAE7F,EAAI,IAAA,EAAC,uDAAmB,MAAQ,CAAA,EAAA;AAC9B,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,uBAEK,GAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA,iBAAA,CAAkB,GAAI,CAAA,CAAC,SACtB,qBAAA,GAAA,CAAC,SAAmC,EAAA,EAAA,GAAG,KAAvB,EAAA,EAAA,SAAA,CAAU,IAAK,CAAA,EAAe,CAC/C,CACH,EAAA,CAAA;AAEJ;;;;"}