{"version":3,"file":"utils.cjs","sources":["../../../../src/services/pluginExtensions/utils.tsx"],"sourcesContent":["import React from 'react';\n\nimport {\n  type 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  wrapper: Wrapper,\n}: {\n  props: Props;\n  components: Array<ComponentTypeWithExtensionMeta<Props>>;\n  limit?: number;\n  pluginId?: string | string[] | RegExp;\n  wrapper?: (props: { children: React.ReactNode }) => React.ReactNode;\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        Wrapper ? (\n          <Wrapper key={Component.meta.id}>\n            <Component {...props} />\n          </Wrapper>\n        ) : (\n          <Component key={Component.meta.id} {...props} />\n        )\n      )}\n    </>\n  );\n}\n"],"names":["PluginExtensionTypes","React","jsx"],"mappings":";;;;;;;;;;;;;AAUO,SAAS,sBAAsB,SAAA,EAA0E;AAC9G,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,UAAU,IAAA,KAASA,yBAAA,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,KAASA,yBAAA,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,IAAIC,sBAAA,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,QAAA;AAAA,EACA,OAAA,EAAS;AACX,CAAA,EAMG;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,6DAEK,QAAA,EAAA,iBAAA,CAAkB,GAAA;AAAA,IAAI,CAAC,cACtB,OAAA,mBACEC,cAAA,CAAC,WACC,QAAA,kBAAAA,cAAA,CAAC,SAAA,EAAA,EAAW,GAAG,KAAA,EAAO,CAAA,EAAA,EADV,UAAU,IAAA,CAAK,EAE7B,oBAEAA,cAAA,CAAC,SAAA,EAAA,EAAmC,GAAG,KAAA,EAAA,EAAvB,SAAA,CAAU,KAAK,EAAe;AAAA,GAElD,EACF,CAAA;AAEJ;;;;;;;"}