@spotify/backstage-plugin-soundcheck 0.22.5 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/dist/alpha/CampaignsRouterPage.esm.js +2 -0
  3. package/dist/alpha/ChecksRouterPage.esm.js +2 -0
  4. package/dist/alpha/IntegrationsRouterPage.esm.js +2 -0
  5. package/dist/alpha/OverviewPageWrapper.esm.js +2 -0
  6. package/dist/alpha/TracksRouterPage.esm.js +2 -0
  7. package/dist/alpha/plugin.esm.js +1 -1
  8. package/dist/alpha.d.ts +155 -59
  9. package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
  10. package/dist/components/Badge/Badge.esm.js +2 -0
  11. package/dist/components/Badges/LevelBadge.esm.js +1 -1
  12. package/dist/components/Badges/StatusBadge.esm.js +1 -1
  13. package/dist/components/CampaignForm/hooks/useCampaignForm.esm.js +1 -1
  14. package/dist/components/CampaignForm/utils/validation.esm.js +1 -1
  15. package/dist/components/CampaignPage/CampaignPageBUI.esm.js +1 -1
  16. package/dist/components/CampaignPage/CampaignStatusBarBUI.esm.js +1 -1
  17. package/dist/components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js +1 -1
  18. package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +1 -1
  19. package/dist/components/CampaignsPage/CampaignsPage.esm.js +1 -1
  20. package/dist/components/Cards/CheckStatusCard/CheckStatusCard.esm.js +1 -1
  21. package/dist/components/CheckDetails/CheckDetails.esm.js +1 -1
  22. package/dist/components/CheckDetails/CheckPullRequest.esm.js +1 -1
  23. package/dist/components/CheckDetails/FixMeDialog.esm.js +1 -1
  24. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
  25. package/dist/components/CheckForm/useCheckForm.esm.js +1 -1
  26. package/dist/components/CheckForm/utils/validation.esm.js +1 -1
  27. package/dist/components/CheckIcon/CheckIcon.esm.js +1 -1
  28. package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTableBUI.esm.js +1 -1
  29. package/dist/components/CheckPage/CheckPageBUI.esm.js +1 -1
  30. package/dist/components/CheckPage/ExemptionsTableBUI.esm.js +1 -1
  31. package/dist/components/CheckPage/utils.esm.js +1 -1
  32. package/dist/components/CheckSelection/CheckSelection.esm.js +1 -1
  33. package/dist/components/CheckStatusBar/CheckStatusBarBUI.esm.js +1 -1
  34. package/dist/components/CheckTemplatesPage/CheckTemplatesPageBUI.esm.js +1 -1
  35. package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +1 -1
  36. package/dist/components/ChecksTable/ChecksTable.esm.js +1 -1
  37. package/dist/components/ChecksTable/FixMeCell.esm.js +1 -1
  38. package/dist/components/CollectorPage/CollectorDetailsPageBUI.esm.js +1 -1
  39. package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
  40. package/dist/components/CollectorPage/CollectorStatus.esm.js +2 -0
  41. package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js +1 -1
  42. package/dist/components/CollectorPage/Configurators/AzureDevOps/validation.esm.js +1 -1
  43. package/dist/components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js +1 -1
  44. package/dist/components/CollectorPage/Configurators/BigQuery/validation.esm.js +1 -1
  45. package/dist/components/CollectorPage/Configurators/Common/CollectorOption.esm.js +1 -1
  46. package/dist/components/CollectorPage/Configurators/Common/utils.esm.js +1 -1
  47. package/dist/components/CollectorPage/Configurators/Configurator.esm.js +1 -1
  48. package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
  49. package/dist/components/CollectorPage/Configurators/Github/validation.esm.js +1 -1
  50. package/dist/components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js +1 -1
  51. package/dist/components/CollectorPage/Configurators/HTTP/validation.esm.js +1 -1
  52. package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
  53. package/dist/components/CollectorPage/Configurators/Jira/validation.esm.js +1 -1
  54. package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
  55. package/dist/components/CollectorPage/Configurators/Kubernetes/validation.esm.js +1 -1
  56. package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
  57. package/dist/components/CollectorPage/Configurators/PagerDuty/validation.esm.js +1 -1
  58. package/dist/components/CollectorPage/Configurators/SCM/RegexFactDetailsComponent.esm.js +1 -1
  59. package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
  60. package/dist/components/CollectorPage/Configurators/SCM/utils.esm.js +1 -1
  61. package/dist/components/CollectorPage/Configurators/SCM/validation.esm.js +1 -1
  62. package/dist/components/CollectorPage/Configurators/SchemaBased/SchemaBasedConfigurator.esm.js +2 -0
  63. package/dist/components/CollectorPage/Configurators/SchemaBased/SchemaField.esm.js +2 -0
  64. package/dist/components/CollectorPage/Configurators/SchemaBased/utils.esm.js +2 -0
  65. package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +1 -1
  66. package/dist/components/CollectorPage/Configurators/SonarQube/validation.esm.js +1 -1
  67. package/dist/components/CollectorPage/utils.esm.js +2 -0
  68. package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
  69. package/dist/components/CollectorsPage/IntegrationLogoBUI.esm.js +1 -1
  70. package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +1 -1
  71. package/dist/components/CreateNewTrackPage/CreateNewTrackPage.esm.js +1 -1
  72. package/dist/components/DescriptionCell/DescriptionCell.esm.js +1 -1
  73. package/dist/components/EntityChip/EntityChip.esm.js +1 -1
  74. package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
  75. package/dist/components/Filter/FilterComponent.esm.js +1 -1
  76. package/dist/components/Filter/FilterPreviewDisplay.esm.js +2 -0
  77. package/dist/components/FilterSidebar/useTrackFilterSidebar.esm.js +1 -1
  78. package/dist/components/FilterSidebar/util.esm.js +1 -1
  79. package/dist/components/FixMeBetaBadge/FixMeBetaBadge.esm.js +2 -0
  80. package/dist/components/FixMeButton/FixMeButton.esm.js +1 -1
  81. package/dist/components/FormControlledAutocomplete/ControlledAutocomplete.esm.js +1 -1
  82. package/dist/components/FormattedPreview/FormattedPreview.esm.js +3 -3
  83. package/dist/components/GroupSelectorBUI/GroupSelectionHistory.esm.js +1 -1
  84. package/dist/components/GroupSelectorBUI/GroupSelectorBUI.esm.js +1 -1
  85. package/dist/components/GroupSelectorBUI/GroupTagsDisplay.esm.js +2 -0
  86. package/dist/components/GroupSelectorBUI/ListViewMode.esm.js +2 -0
  87. package/dist/components/ListPageCustomActions/ListPageCustomActions.esm.js +1 -1
  88. package/dist/components/Menus/useCampaignActions.esm.js +1 -1
  89. package/dist/components/Menus/useCheckActions.esm.js +1 -1
  90. package/dist/components/RoutingPage/RoutingPageBUI.esm.js +1 -1
  91. package/dist/components/RoutingPage/RoutingPageWrapperBUI.esm.js +1 -1
  92. package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js +1 -1
  93. package/dist/components/StatusBar/StatusBar.esm.js +1 -1
  94. package/dist/components/Stepper/Stepper.esm.js +1 -1
  95. package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +1 -1
  96. package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +1 -1
  97. package/dist/components/TechInsights/TechInsightsTableBUI.esm.js +1 -1
  98. package/dist/components/TechInsights/hierarchyToNivo.esm.js +2 -0
  99. package/dist/components/TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js +1 -1
  100. package/dist/components/TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js +1 -1
  101. package/dist/components/TimePeriodBar/TimePeriodBarBUI.esm.js +1 -1
  102. package/dist/components/TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js +1 -1
  103. package/dist/components/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +1 -1
  104. package/dist/components/TrackBuilderPage/components/SelectProviderStep/SelectProviderStep.esm.js +1 -1
  105. package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
  106. package/dist/components/TrackForm/utils/validation.esm.js +1 -1
  107. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js +1 -1
  108. package/dist/components/TrackPage/TrackPageBUI.esm.js +1 -1
  109. package/dist/components/TrackPage/TrackStatusBarBUI.esm.js +1 -1
  110. package/dist/components/TrackPage/TrackStatusTableBUI.esm.js +1 -1
  111. package/dist/components/TrackPage/TrackTechInsightsExplorerPage.esm.js +1 -1
  112. package/dist/components/TracksPage/TracksListPageBUI.esm.js +1 -1
  113. package/dist/graphql/generated/index.esm.js +22 -13
  114. package/dist/hooks/catalog/useEntityPresentation.esm.js +2 -0
  115. package/dist/hooks/catalog/useEntityPrimaryTitle.esm.js +2 -0
  116. package/dist/hooks/catalog/useGetEntityRefs.esm.js +1 -1
  117. package/dist/hooks/checks/useDeleteCheck.esm.js +1 -1
  118. package/dist/hooks/collectors/useGetCollectors.esm.js +1 -1
  119. package/dist/hooks/filters/useFilters.esm.js +1 -1
  120. package/dist/hooks/filters/useListPageFilters.esm.js +2 -0
  121. package/dist/hooks/fixMe/useFixMe.esm.js +1 -1
  122. package/dist/hooks/useChipScopedUrlState.esm.js +2 -0
  123. package/dist/hooks/usePagination.esm.js +1 -1
  124. package/dist/index.d.ts +130 -4
  125. package/dist/index.esm.js +1 -1
  126. package/dist/plugins/soundcheck/package.json.esm.js +2 -0
  127. package/dist/utils/charts.esm.js +1 -1
  128. package/dist/utils/facetFilters/utils.esm.js +1 -1
  129. package/dist/utils/filters.esm.js +1 -1
  130. package/dist/utils/validation.esm.js +1 -1
  131. package/package.json +24 -22
  132. package/dist/alpha/pages.esm.js +0 -2
  133. package/dist/components/CategoryBar/CategoryBar.esm.js +0 -2
  134. package/dist/components/CheckStatusBar/CheckStatusBar.esm.js +0 -2
  135. package/dist/components/CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js +0 -2
  136. package/dist/components/CheckTemplatesPage/TemplateCategory.esm.js +0 -2
  137. package/dist/components/CollectorPage/CollectorDetailsPageDeprecated.esm.js +0 -2
  138. package/dist/components/CollectorPage/CollectorFactTable.esm.js +0 -2
  139. package/dist/components/CollectorsPage/CollectorListPage/CollectorListPageDeprecated.esm.js +0 -2
  140. package/dist/components/CollectorsPage/CollectorListPage/CollectorLogo.esm.js +0 -2
  141. package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +0 -2
  142. package/dist/components/HierarchicalTechInsightsPage/getLeafNodes.esm.js +0 -2
  143. package/dist/components/HierarchicalTechInsightsPage/visualizations/LoadingOverlay.esm.js +0 -2
  144. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoCirclePacking.esm.js +0 -2
  145. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoHeatmap.esm.js +0 -2
  146. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoIcicle.esm.js +0 -2
  147. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoSunburst.esm.js +0 -2
  148. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoTreemap.esm.js +0 -2
  149. package/dist/components/HierarchicalTechInsightsPage/visualizations/VisualizationBreadcrumb.esm.js +0 -2
  150. package/dist/components/HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js +0 -2
  151. package/dist/components/ImportExportPanel/ImportExportPanelDeprecated.esm.js +0 -2
  152. package/dist/components/SummaryCard/SummaryCard.esm.js +0 -2
  153. package/dist/components/SummaryCard/SummaryCardActionsMenu.esm.js +0 -2
  154. package/dist/images/GitHub_Logo.svg +0 -9
  155. package/dist/images/GitHub_Logo_White.svg +0 -9
  156. package/dist/images/SCM_DARK.svg +0 -10
  157. package/dist/images/SCM_LIGHT.svg +0 -10
  158. package/dist/images/azure-devops-rgb.svg +0 -13
  159. package/dist/images/azure-devops-white.svg +0 -13
  160. package/dist/images/bigquery-rgb.svg +0 -15
  161. package/dist/images/bigquery-white.svg +0 -15
  162. package/dist/images/cat-blk.svg +0 -12
  163. package/dist/images/cat-wht.svg +0 -12
  164. package/dist/images/data-registry-blk.svg +0 -36
  165. package/dist/images/data-registry-wht.svg +0 -36
  166. package/dist/images/dd_logo_h_rgb.svg +0 -17
  167. package/dist/images/dd_logo_h_white.svg +0 -17
  168. package/dist/images/gitlab-rgb.svg +0 -1
  169. package/dist/images/gitlab-white.svg +0 -1
  170. package/dist/images/http-rgb.svg +0 -11
  171. package/dist/images/http-white.svg +0 -11
  172. package/dist/images/jira-rgb.svg +0 -25
  173. package/dist/images/jira-white.svg +0 -25
  174. package/dist/images/k8s_blue.svg +0 -108
  175. package/dist/images/k8s_white.svg +0 -108
  176. package/dist/images/new-relic-rgb.svg +0 -1
  177. package/dist/images/new-relic-white.svg +0 -1
  178. package/dist/images/pd-black.svg +0 -9
  179. package/dist/images/pd-white.svg +0 -9
  180. package/dist/images/sonarqube-rgb.svg +0 -14
  181. package/dist/images/sonarqube-white.svg +0 -14
  182. package/dist/images/soundcheck-black.svg +0 -13
  183. package/dist/images/soundcheck-white.svg +0 -13
  184. package/dist/images/tech-black.svg +0 -11
  185. package/dist/images/tech-white.svg +0 -11
  186. /package/dist/components/CampaignsPage/{CampaignListPage/useArchiveConfirmationModal.esm.js → useArchiveConfirmationModal.esm.js} +0 -0
@@ -1,2 +1,2 @@
1
- import{jsxs as C,Fragment as j,jsx as o}from"react/jsx-runtime";import{zodResolver as P}from"@hookform/resolvers/zod";import{makeStyles as w,Paper as _,Box as J,Button as Y,Divider as y}from"@material-ui/core";import k from"@material-ui/icons/UnfoldLess";import I from"@material-ui/icons/UnfoldMore";import{useCallback as z,useMemo as H,useState as l}from"react";import{useForm as V,FormProvider as X}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as G}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as U}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../ChecksTable/utils.esm.js";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as $}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as q}from"../../../../routes.esm.js";import{FooterButtons as K}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Q}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as g}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as W,confirmationModalContent as Z}from"../Common/utils.esm.js";import{ExistsFactDetailsComponent as oo}from"./ExistsFactDetailsComponent.esm.js";import{JsonFactDetailsComponent as eo}from"./JsonFactDetailsComponent.esm.js";import{RegexFactDetailsComponent as to}from"./RegexFactDetailsComponent.esm.js";import{mapConfigToScmCollectorConfig as io,defaultScmCollectorConfig as v,EXISTS_COLLECTOR_TYPE as lo,REGEX_COLLECTOR_TYPE as ro,JSON_COLLECTOR_TYPE as ao,mapScmCollectorConfigToConfig as no}from"./utils.esm.js";import{scmCollectorFormSchema as so}from"./validation.esm.js";const mo=w(e=>({spacer:{height:e.spacing(8),width:"100%"},section:{marginBottom:e.spacing(2)},collapseAllContainer:{display:"flex",justifyContent:"flex-end",padding:e.spacing(1.5,6),borderBottom:`1px solid ${e.palette.divider}`}})),co=({disabled:e,selectedCollector:i})=>{const O=z(async(t,...d)=>{const f={enabled:!1,collectors:[]},M={exists:t.exists.enabled?t.exists:f,json:t.json.enabled?t.json:f,regex:t.regex.enabled?t.regex:f};return P(so)(M,...d)},[]),u=V({defaultValues:i?io(i.config):v(),mode:"onChange",resolver:O}),r=H(()=>v(i.config),[i]),{formState:{isValid:T},handleSubmit:x}=u,a=mo(),L=!T,{mutateAsync:N}=$(),[R,A]=U(q),{showModal:B}=G(),b=async t=>{if(!await B(Z(i)))return;const d=no(t);await N({collectorId:i.id,config:d})&&A()};Q(W(i));const[h,n]=l(!0),[S,s]=l(!0),[F,m]=l(!0),[c,E]=l(!0),p=h&&S&&F,D=()=>{p?(n(!1),s(!1),m(!1),E(!1)):(n(!0),s(!0),m(!0),E(!0))};return C(j,{children:[C(_,{className:a.section,children:[o(J,{className:a.collapseAllContainer,children:o(Y,{startIcon:p?o(I,{}):o(k,{}),onClick:D,variant:"outlined",size:"small",children:p?"Expand All":"Collapse All"})}),o(X,{...u,children:C("form",{onSubmit:x(b),children:[o(g,{name:lo,label:"Exists",description:"Collects information on the existence of files within an entity's repository.",disabled:e,multipleCollectors:{enable:!0,defaultConfig:r.exists.collectors[0]},FactDetailsComponent:oo,collapsed:h,onCollapsedChange:n,allFactsCollapsed:c}),o(y,{}),o(g,{name:ro,label:"Regex",description:"Executes regular expressions against a specified file in an entity's repository and collects its capture groups.",disabled:e,multipleCollectors:{enable:!0,defaultConfig:r.regex.collectors[0]},FactDetailsComponent:to,collapsed:S,onCollapsedChange:s,allFactsCollapsed:c}),o(y,{}),o(g,{name:ao,label:"JSON / YAML",description:"Collects data from a JSON/YAML file at specified JSON paths in an entity's repository.",disabled:e,multipleCollectors:{enable:!0,defaultConfig:r.json.collectors[0]},FactDetailsComponent:eo,collapsed:F,onCollapsedChange:m,allFactsCollapsed:c})]})})]}),o("div",{className:a.section,children:o(K,{onCancel:R,saveButtonText:"Save",isLoading:!1,onSave:x(b),disableSave:L,noMargin:!0})})]})};export{co as ScmConfigurator};
1
+ import{jsxs as t,Fragment as D,jsx as e}from"react/jsx-runtime";import{TooltipTrigger as j,ButtonIcon as w,Tooltip as _}from"@backstage/ui";import{standardSchemaResolver as z}from"@hookform/resolvers/standard-schema";import{makeStyles as J,Paper as Y,Box as s,Typography as u,FormControlLabel as G,Checkbox as H,Divider as b,Button as V}from"@material-ui/core";import U from"@material-ui/icons/UnfoldLess";import X from"@material-ui/icons/UnfoldMore";import{RiInformationLine as $}from"@remixicon/react";import{useCallback as q,useMemo as K,useState as c}from"react";import{useForm as Q,Controller as W,FormProvider as Z}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as ee}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as oe}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../ChecksTable/utils.esm.js";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as le}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as te}from"../../../../routes.esm.js";import{FooterButtons as ie}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as ae}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as x}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as re,confirmationModalContent as ne}from"../Common/utils.esm.js";import{ExistsFactDetailsComponent as se}from"./ExistsFactDetailsComponent.esm.js";import{JsonFactDetailsComponent as ce}from"./JsonFactDetailsComponent.esm.js";import{RegexFactDetailsComponent as me}from"./RegexFactDetailsComponent.esm.js";import{mapConfigToScmCollectorConfig as de,defaultScmCollectorConfig as L,EXISTS_COLLECTOR_TYPE as pe,REGEX_COLLECTOR_TYPE as fe,JSON_COLLECTOR_TYPE as ge,mapScmCollectorConfigToConfig as Ce}from"./utils.esm.js";import{scmCollectorFormSchema as he}from"./validation.esm.js";const ue=J(l=>({spacer:{height:l.spacing(8),width:"100%"},section:{marginBottom:l.spacing(2)},globalConfig:{padding:l.spacing(2,6)},globalConfigHeader:{marginBottom:l.spacing(1)},globalConfigLabel:{display:"flex",flexDirection:"column"},infoButton:{"&:hover":{backgroundColor:"transparent"}},collapseAllContainer:{display:"flex",justifyContent:"flex-end",padding:l.spacing(1.5,6),borderBottom:`1px solid ${l.palette.divider}`}})),be=({disabled:l,selectedCollector:i})=>{const B=q(async(o,...n)=>{const r={enabled:!1,collectors:[]},k={cacheFullResultsForEtags:o.cacheFullResultsForEtags,exists:o.exists.enabled?o.exists:r,json:o.json.enabled?o.json:r,regex:o.regex.enabled?o.regex:r};return z(he)(k,...n)},[]),m=Q({defaultValues:i?de(i.config):L(),mode:"onChange",resolver:B}),d=K(()=>L(i.config),[i]),{formState:{isValid:N},handleSubmit:S}=m,a=ue(),O=!N,{mutateAsync:R}=le(),[A,I]=oe(te),{showModal:M}=ee(),y=async o=>{if(!await M(ne(i)))return;const n=Ce(o);await R({collectorId:i.id,config:n})&&I()};ae(re(i));const[v,p]=c(!0),[F,f]=c(!0),[E,g]=c(!0),[C,T]=c(!0),h=v&&F&&E,P=()=>{h?(p(!1),f(!1),g(!1),T(!1)):(p(!0),f(!0),g(!0),T(!0))};return t(D,{children:[t(Y,{className:a.section,children:[t(s,{className:a.globalConfig,children:[e(u,{variant:"subtitle2",color:"textSecondary",className:a.globalConfigHeader,children:"Global Settings"}),e(W,{name:"cacheFullResultsForEtags",control:m.control,render:({field:o})=>e(G,{control:e(H,{...o,checked:!!o.value,onChange:(n,r)=>o.onChange(r),color:"primary",disabled:l}),label:t(s,{className:a.globalConfigLabel,children:[t(s,{display:"flex",alignItems:"center",children:[e(u,{variant:"body1",children:e("b",{children:"Cache full results for ETags"})}),t(j,{children:[e(w,{size:"small",variant:"tertiary",className:a.infoButton,icon:e($,{size:16})}),e(_,{children:t("div",{style:{padding:4},children:[t("div",{children:[e("b",{children:"Enabled:"})," caches full SCM responses, avoiding repeated API calls for unchanged files"]}),e("br",{}),t("div",{children:[e("b",{children:"Disabled:"})," caches only ETags, still makes lightweight API calls to check for changes"]}),e("br",{}),t("div",{children:[e("b",{children:"Tradeoffs:"})," Caching files will increase Cache size but reduce API calls for GLOB paths specifically. Caching should be off unless heavy use is made of GLOB paths in SCM"]})]})})]})]}),e(u,{variant:"caption",color:"textSecondary",children:"Cache full SCM responses for ETag checks to reduce API calls at the cost of larger cache size."})]})})})]}),e(b,{}),e(s,{className:a.collapseAllContainer,children:e(V,{startIcon:h?e(X,{}):e(U,{}),onClick:P,variant:"outlined",size:"small",children:h?"Expand All":"Collapse All"})}),e(Z,{...m,children:t("form",{onSubmit:S(y),children:[e(x,{name:pe,label:"Exists",description:"Collects information on the existence of files within an entity's repository.",disabled:l,multipleCollectors:{enable:!0,defaultConfig:d.exists.collectors[0]},FactDetailsComponent:se,collapsed:v,onCollapsedChange:p,allFactsCollapsed:C}),e(b,{}),e(x,{name:fe,label:"Regex",description:"Executes regular expressions against a specified file in an entity's repository and collects its capture groups.",disabled:l,multipleCollectors:{enable:!0,defaultConfig:d.regex.collectors[0]},FactDetailsComponent:me,collapsed:F,onCollapsedChange:f,allFactsCollapsed:C}),e(b,{}),e(x,{name:ge,label:"JSON / YAML",description:"Collects data from a JSON/YAML file at specified JSON paths in an entity's repository.",disabled:l,multipleCollectors:{enable:!0,defaultConfig:d.json.collectors[0]},FactDetailsComponent:ce,collapsed:E,onCollapsedChange:g,allFactsCollapsed:C})]})})]}),e("div",{className:a.section,children:e(ie,{onCancel:A,saveButtonText:"Save",isLoading:!1,onSave:S(y),disableSave:O,noMargin:!0})})]})};export{be as ScmConfigurator};
2
2
  //# sourceMappingURL=ScmConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{asArray as C}from"@spotify/backstage-plugin-soundcheck-common";import{sumBy as y}from"lodash";import{defaultBaseCollectorOption as D}from"../Common/CollectorOption.esm.js";import{mapBackendConfigToFormIntegrationConfig as h,mapFormIntegrationConfigToBackendConfig as d}from"../Common/utils.esm.js";const g={name:"",path:""},N={name:"",type:"string"},u={name:"",jsonPath:"",type:"string"},L={factName:"",data:[g]},_={factName:"",path:"",regex:"",data:[]},O={factName:"",path:"",data:[u]},E=(t={})=>{const o=D(t);return{exists:{enabled:!1,collectors:[{factDetails:L,...o}]},regex:{enabled:!1,collectors:[{factDetails:_,...o}]},json:{enabled:!1,collectors:[{factDetails:O,...o}]}}},P={factDetails:{factName:{name:"Fact Name",helperText:"Fact name must be unique",placeholder:"Fact Name"},branch:{name:"Custom Branch (Optional)",helperText:"If omitted collects data from default branch",placeholder:"Example: develop"},filePath:{name:"File Path",helperText:"Path to the file whose content will be searched",placeholder:"Example: /catalog-info.yaml"},label:{name:"Label",placeholder:"Label"},type:{name:"Type",placeholder:"Type"},exists:{filesSection:{name:"Files",description:"List the files whose existence will be checked"}},regex:{regex:{name:"RegEx Pattern",helperText:"RegEx pattern to match",placeholder:"Example: ^apiVersion: backstage.io/(.+)"},flags:{name:"RegEx Flags (Optional)",helperText:"Allowed RegEx flags: g, i, m, s, u, y",placeholder:"Example: mi"},trueFalseMode:{label:"True / False Mode",description:"True / False Mode uses a RegEx to search for a match in the given file."},captureGroupsMode:{label:"Capture Groups Mode",description:"RegEx Capture Groups Mode allows the collector to associate capture groups within a RegEx to named values."},captureGroupsSection:{name:"Capture Groups",description:"Each element must correspond to a capture group in the given RegEx"}},json:{jsonPath:{name:"Json Path",placeholder:"Example: $.metadata.tags"},jsonElementsSection:{name:"JSON / YAML Elements",description:"List json / yaml paths from which to pull data from the given file"}}}},f="exists",p="regex",i="json",m="yaml",T=["string","number","integer","boolean","object"],x=T.map(b);function A(t){const{exists:o,regex:c,json:l}=t;if(o.collectors.length||c.collectors.length||l.collectors.length){const e={},n=[];return e.collects=n,o.enabled&&o.collectors.forEach(a=>{n.push(d({factType:f,configOption:a,additionalParams:{factName:a.factDetails.factName,branch:a.factDetails.branch?.length?a.factDetails.branch:void 0,data:a.factDetails.data}}))}),c.enabled&&c.collectors.forEach(a=>{n.push(d({factType:p,configOption:a,additionalParams:{factName:a.factDetails.factName,branch:a.factDetails.branch?.length?a.factDetails.branch:void 0,path:a.factDetails.path,regex:a.factDetails.regex,flags:a.factDetails.flags?.length?a.factDetails.flags:void 0,data:a.factDetails.data.length?a.factDetails.data:void 0}}))}),l.enabled&&l.collectors.forEach(a=>{n.push(d({factType:i,configOption:a,additionalParams:{factName:a.factDetails.factName,branch:a.factDetails.branch?.length?a.factDetails.branch:void 0,path:a.factDetails.path,data:a.factDetails.data.map(s=>x.includes(s.type)?{name:s.name,jsonPath:s.jsonPath,type:"array",items:{type:R(s.type)}}:s)}}))}),e}return{collects:[]}}const r=(t,o)=>y(t,({type:c})=>+(c===o));function F(t){const o=E(t),c=t?.collects;if(c&&c.length>0){const l=C(c);return{exists:r(l,f)>0?{collectors:l.filter(e=>e.type===f).map(e=>({...h({factTypeConfig:e,parentConfig:t}),factDetails:{factName:e.factName,branch:e.branch,data:e.data}})),enabled:!0}:o.exists,regex:r(l,p)>0?{collectors:l.filter(e=>e.type===p).map(e=>({...h({factTypeConfig:e,parentConfig:t}),factDetails:{factName:e.factName,branch:e.branch,path:e.path,regex:e.regex,flags:e.flags,data:e.data}})),enabled:!0}:o.regex,json:r(l,i)+r(l,m)>0?{collectors:l.filter(e=>e.type===i||e.type===m).map(e=>({...h({factTypeConfig:e,parentConfig:t}),factDetails:{factName:e.factName,branch:e.branch,path:e.path,data:e.data.map(n=>n.type==="array"?{name:n.name,jsonPath:n.jsonPath,type:b(n.items?.type)}:n)}})),enabled:r(l,i)+r(l,m)>0}:o.json}}return o}function b(t="object"){return`array[${t}]`}function R(t){const o="array[";return t.substring(t.indexOf(o)+o.length,t.lastIndexOf("]"))}export{x as ARRAY_ELEMENT_TYPES,g as DEFAULT_EXISTS_FACT_DATA,u as DEFAULT_JSON_FACT_DATA,N as DEFAULT_REGEX_FACT_DATA,T as ELEMENT_TYPES,f as EXISTS_COLLECTOR_TYPE,i as JSON_COLLECTOR_TYPE,p as REGEX_COLLECTOR_TYPE,P as SCM_COLLECTOR_FIELDS,m as YAML_COLLECTOR_TYPE,E as defaultScmCollectorConfig,F as mapConfigToScmCollectorConfig,A as mapScmCollectorConfigToConfig};
1
+ import{asArray as y}from"@spotify/backstage-plugin-soundcheck-common";import{sumBy as D}from"lodash";import{defaultBaseCollectorOption as F}from"../Common/CollectorOption.esm.js";import{mapBackendConfigToFormIntegrationConfig as d,mapFormIntegrationConfigToBackendConfig as g}from"../Common/utils.esm.js";const u={name:"",path:""},A={name:"",type:"string"},E={name:"",jsonPath:"",type:"string"},R={factName:"",data:[u]},N={factName:"",path:"",regex:"",data:[]},L={factName:"",path:"",data:[E]},T=(t={})=>{const l=F(t);return{cacheFullResultsForEtags:!!t?.cacheFullResultsForEtags,exists:{enabled:!1,collectors:[{factDetails:R,...l}]},regex:{enabled:!1,collectors:[{factDetails:N,...l}]},json:{enabled:!1,collectors:[{factDetails:L,...l}]}}},_={factDetails:{factName:{name:"Fact Name",helperText:"Fact name must be unique",placeholder:"Fact Name"},branch:{name:"Custom Branch (Optional)",helperText:"If omitted collects data from default branch",placeholder:"Example: develop"},filePath:{name:"File Path",helperText:"Path to the file whose content will be searched",placeholder:"Example: /catalog-info.yaml"},label:{name:"Label",placeholder:"Label"},type:{name:"Type",placeholder:"Type"},exists:{filesSection:{name:"Files",description:"List the files whose existence will be checked"}},regex:{regex:{name:"RegEx Pattern",helperText:"RegEx pattern to match",placeholder:"Example: ^apiVersion: backstage.io/(.+)"},flags:{name:"RegEx Flags (Optional)",helperText:"Allowed RegEx flags: g, i, m, s, u, y",placeholder:"Example: mi"},trueFalseMode:{label:"True / False Mode",description:"True / False Mode uses a RegEx to search for a match in the given file."},captureGroupsMode:{label:"Capture Groups Mode",description:"RegEx Capture Groups Mode allows the collector to associate capture groups within a RegEx to named values."},matchAllMode:{label:"Match All Mode",description:"Match All Mode finds every occurrence of the RegEx in the file and returns a count and array of all matched strings."},captureGroupsSection:{name:"Capture Groups",description:"Each element must correspond to a capture group in the given RegEx"}},json:{jsonPath:{name:"Json Path",placeholder:"Example: $.metadata.tags"},jsonElementsSection:{name:"JSON / YAML Elements",description:"List json / yaml paths from which to pull data from the given file"}}}},p="exists",h="regex",i="json",m="yaml",x=["string","number","integer","boolean","object"],b=x.map(C);function O(t){const{exists:l,regex:c,json:o,cacheFullResultsForEtags:e}=t;if(e||l.collectors.length||c.collectors.length||o.collectors.length){const n={},f=[];return n.collects=f,e&&(n.cacheFullResultsForEtags=!0),l.enabled&&l.collectors.forEach(a=>{f.push(g({factType:p,configOption:a,additionalParams:{factName:a.factDetails.factName,branch:a.factDetails.branch?.length?a.factDetails.branch:void 0,data:a.factDetails.data}}))}),c.enabled&&c.collectors.forEach(a=>{f.push(g({factType:h,configOption:a,additionalParams:{factName:a.factDetails.factName,branch:a.factDetails.branch?.length?a.factDetails.branch:void 0,path:a.factDetails.path,regex:a.factDetails.regex,flags:a.factDetails.flags?.length?a.factDetails.flags:void 0,matchAll:a.factDetails.matchAll||void 0,data:a.factDetails.data.length?a.factDetails.data:void 0}}))}),o.enabled&&o.collectors.forEach(a=>{f.push(g({factType:i,configOption:a,additionalParams:{factName:a.factDetails.factName,branch:a.factDetails.branch?.length?a.factDetails.branch:void 0,path:a.factDetails.path,data:a.factDetails.data.map(r=>b.includes(r.type)?{name:r.name,jsonPath:r.jsonPath,type:"array",items:{type:S(r.type)}}:r)}}))}),n}return{collects:[]}}const s=(t,l)=>D(t,({type:c})=>+(c===l));function P(t){const l=T(t),c=t?.collects;if(c&&c.length>0){const o=y(c);return{cacheFullResultsForEtags:!!t.cacheFullResultsForEtags,exists:s(o,p)>0?{collectors:o.filter(e=>e.type===p).map(e=>({...d({factTypeConfig:e,parentConfig:t}),factDetails:{factName:e.factName,branch:e.branch,data:e.data}})),enabled:!0}:l.exists,regex:s(o,h)>0?{collectors:o.filter(e=>e.type===h).map(e=>({...d({factTypeConfig:e,parentConfig:t}),factDetails:{factName:e.factName,branch:e.branch,path:e.path,regex:e.regex,flags:e.flags,matchAll:e.matchAll,data:e.data}})),enabled:!0}:l.regex,json:s(o,i)+s(o,m)>0?{collectors:o.filter(e=>e.type===i||e.type===m).map(e=>({...d({factTypeConfig:e,parentConfig:t}),factDetails:{factName:e.factName,branch:e.branch,path:e.path,data:e.data.map(n=>n.type==="array"?{name:n.name,jsonPath:n.jsonPath,type:C(n.items?.type)}:n)}})),enabled:s(o,i)+s(o,m)>0}:l.json}}return l}function C(t="object"){return`array[${t}]`}function S(t){const l="array[";return t.substring(t.indexOf(l)+l.length,t.lastIndexOf("]"))}export{b as ARRAY_ELEMENT_TYPES,u as DEFAULT_EXISTS_FACT_DATA,E as DEFAULT_JSON_FACT_DATA,A as DEFAULT_REGEX_FACT_DATA,x as ELEMENT_TYPES,p as EXISTS_COLLECTOR_TYPE,i as JSON_COLLECTOR_TYPE,h as REGEX_COLLECTOR_TYPE,_ as SCM_COLLECTOR_FIELDS,m as YAML_COLLECTOR_TYPE,T as defaultScmCollectorConfig,P as mapConfigToScmCollectorConfig,O as mapScmCollectorConfigToConfig};
2
2
  //# sourceMappingURL=utils.esm.js.map
@@ -1,2 +1,2 @@
1
- import{validFactNameRegex as N,invalidFactNameErrorMessage as h,validNameRegex as i,invalidNameErrorMessage as n}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FIELD_IS_REQUIRED_MSG as a}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as _}from"../Common/CollectorOption.esm.js";const m="Fact name is not unique",r="Max 100 characters",x="Max 1000 characters",p="Invalid regex flags: at least one of g, i, m, s, u, or y is required.",u=/^[gimsuy]*$/,g=e.object({factName:e.string().min(1,a).max(100,r).regex(N,h),branch:e.string().optional()}),j=g.merge(e.object({data:e.array(e.strictObject({name:e.string().min(1,a).max(100,r).regex(i,n),path:e.string().min(1,a).max(1e3,x)}))})).strict(),E=g.merge(e.object({path:e.string().min(1,a),regex:e.string().min(1,a),flags:e.string().regex(u,p).optional(),data:e.array(e.strictObject({name:e.string().min(1,a).max(100,r).regex(i,n),type:e.string().min(1,a).max(100,r).regex(i,n).optional()})).optional()})).strict(),I=g.merge(e.object({path:e.string().min(1,a),data:e.array(e.strictObject({name:e.string().min(1,a).regex(i,n),jsonPath:e.string().min(1,a),type:e.string().min(1,a)}))})).strict(),f=s=>e.strictObject({enabled:e.boolean().optional(),collectors:e.array(_.extend({factDetails:s}))}),D=e.strictObject({exists:f(j),regex:f(E),json:f(I)}).superRefine((s,l)=>{const d=[...s.exists.collectors.map(t=>t.factDetails.factName),...s.regex.collectors.map(t=>t.factDetails.factName),...s.json.collectors.map(t=>t.factDetails.factName)],o=d.filter((t,c)=>d.indexOf(t)!==c);o.length&&(s.exists.collectors.forEach((t,c)=>{o.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:m,path:["exists","collectors",c,"factDetails","factName"]})}),s.regex.collectors.forEach((t,c)=>{o.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:m,path:["regex","collectors",c,"factDetails","factName"]})}),s.json.collectors.forEach((t,c)=>{o.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:m,path:["json","collectors",c,"factDetails","factName"]})}))});export{m as FACT_NAME_IS_NOT_UNIQUE_MSG,p as INVALID_REGEX_FLAGS_MSG,x as MAX_1000_CHARACTERS_MSG,r as MAX_100_CHARACTERS_MSG,D as scmCollectorFormSchema,u as validFlagsRegex};
1
+ import{validFactNameRegex as _,invalidFactNameErrorMessage as A,validNameRegex as l,invalidNameErrorMessage as m}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod/v3";import{FIELD_IS_REQUIRED_MSG as s}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as N}from"../Common/CollectorOption.esm.js";const n="Fact name is not unique",r="Max 100 characters",p="Max 1000 characters",u="Invalid regex flags: at least one of g, i, m, s, u, or y is required.",x="Match All mode cannot be used with capture groups. Remove capture groups or disable Match All.",h=/^[gimsuy]*$/,g=e.object({factName:e.string().min(1,s).max(100,r).regex(_,A),branch:e.string().optional()}),b=g.merge(e.object({data:e.array(e.strictObject({name:e.string().min(1,s).max(100,r).regex(l,m),path:e.string().min(1,s).max(1e3,p)}))})).strict(),E=g.merge(e.object({path:e.string().min(1,s),regex:e.string().min(1,s),flags:e.string().regex(h,u).optional(),matchAll:e.boolean().optional(),data:e.array(e.strictObject({name:e.string().min(1,s).max(100,r).regex(l,m),type:e.string().min(1,s).max(100,r).regex(l,m).optional()})).optional()})).strict().superRefine((a,o)=>{a.matchAll&&a.data&&a.data.length>0&&o.addIssue({code:e.ZodIssueCode.custom,message:x,path:["matchAll"]})}),I=g.merge(e.object({path:e.string().min(1,s),data:e.array(e.strictObject({name:e.string().min(1,s).regex(l,m),jsonPath:e.string().min(1,s),type:e.string().min(1,s)}))})).strict(),d=a=>e.strictObject({enabled:e.boolean().optional(),collectors:e.array(N.extend({factDetails:a}))}),M=e.strictObject({cacheFullResultsForEtags:e.boolean().optional(),exists:d(b),regex:d(E),json:d(I)}).superRefine((a,o)=>{const f=[...a.exists.collectors.map(t=>t.factDetails.factName),...a.regex.collectors.map(t=>t.factDetails.factName),...a.json.collectors.map(t=>t.factDetails.factName)],i=f.filter((t,c)=>f.indexOf(t)!==c);i.length&&(a.exists.collectors.forEach((t,c)=>{i.includes(t.factDetails.factName)&&o.addIssue({code:e.ZodIssueCode.custom,message:n,path:["exists","collectors",c,"factDetails","factName"]})}),a.regex.collectors.forEach((t,c)=>{i.includes(t.factDetails.factName)&&o.addIssue({code:e.ZodIssueCode.custom,message:n,path:["regex","collectors",c,"factDetails","factName"]})}),a.json.collectors.forEach((t,c)=>{i.includes(t.factDetails.factName)&&o.addIssue({code:e.ZodIssueCode.custom,message:n,path:["json","collectors",c,"factDetails","factName"]})}))});export{n as FACT_NAME_IS_NOT_UNIQUE_MSG,u as INVALID_REGEX_FLAGS_MSG,x as MATCH_ALL_AND_CAPTURE_GROUPS_MSG,p as MAX_1000_CHARACTERS_MSG,r as MAX_100_CHARACTERS_MSG,M as scmCollectorFormSchema,h as validFlagsRegex};
2
2
  //# sourceMappingURL=validation.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as o,jsxs as l,Fragment as B}from"react/jsx-runtime";import{Card as p,CardBody as f,Text as n,Box as u}from"@backstage/ui";import{makeStyles as x}from"@material-ui/core";import{useMemo as F}from"react";import{useForm as N,FormProvider as w}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as j}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as M}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../ChecksTable/utils.esm.js";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as k}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as A}from"../../../../routes.esm.js";import{FooterButtons as V}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as H}from"../../../SoundcheckHeader/useHeader.esm.js";import{collectorHeaderContent as L,confirmationModalContent as P}from"../Common/utils.esm.js";import{SchemaField as R}from"./SchemaField.esm.js";import{buildDefaultValues as T,stripEmptyValues as D}from"./utils.esm.js";const E=x(()=>({section:{marginBottom:"var(--bui-space-4)"},card:{marginBottom:"var(--bui-space-4)",padding:"var(--bui-space-6)"}})),G=({disabled:h,selectedCollector:i})=>{const t=E(),e=i.configSchema,g=i.config&&typeof i.config=="object"&&!Array.isArray(i.config)?i.config:void 0,a=F(()=>new Set,[]),c=N({defaultValues:T(e??{},g,a),mode:"onChange"}),{handleSubmit:d}=c,{mutateAsync:b,isLoading:v}=k(),[y,C]=M(A),{showModal:S}=j(),s=async r=>{if(await S(P(i)))try{const m=D(r,a);await b({collectorId:i.id,config:m})&&C()}catch{}};return H(L(i)),!e||!e.properties?o(p,{className:t.card,children:o(f,{children:o(n,{variant:"body-medium",color:"secondary",children:"No configuration schema available for this collector."})})}):l(B,{children:[o(p,{className:t.card,children:o(f,{children:o(w,{...c,children:l("form",{onSubmit:d(s),children:[o(u,{mb:"2",children:o(n,{variant:"title-small",weight:"bold",children:i.name??i.id})}),(e.description||i.description)&&o(u,{mb:"6",children:o(n,{variant:"body-medium",color:"secondary",children:e.description??i.description})}),Object.entries(e.properties).map(([r,m])=>o(R,{name:r,schema:m,disabled:h,maskedFields:a},r))]})})})}),o("div",{className:t.section,children:o(V,{onCancel:y,saveButtonText:"Save",isLoading:v,onSave:d(s)})})]})};export{G as SchemaBasedConfigurator};
2
+ //# sourceMappingURL=SchemaBasedConfigurator.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as h,jsx as o}from"react/jsx-runtime";import{Box as m,Text as c,Checkbox as S,PasswordField as x,TextField as f}from"@backstage/ui";import{makeStyles as N}from"@material-ui/core";import{useFormContext as $,Controller as d}from"react-hook-form";const j=new Set(["string","number","integer","boolean"]),p=e=>e.anyOf||e.oneOf||e.$ref?!1:e.type==="object"&&e.properties?!0:!!e.type&&j.has(e.type),g=e=>{const i=e.split(".");return i[i.length-1]},b=e=>g(e).replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/[_-]/g," ").replace(/^\w/,i=>i.toUpperCase()).trim(),w=N(()=>({field:{display:"block",marginBottom:"var(--bui-space-4)",maxWidth:500},objectSection:{marginBottom:"var(--bui-space-4)",marginTop:"var(--bui-space-6)"},sectionDescription:{display:"block",marginBottom:"var(--bui-space-4)"}})),v=({name:e,schema:i,disabled:t,maskedFields:u})=>{const l=w(),{control:s}=$();if(!p(i))return null;if(i.type==="object"&&i.properties){const a=Object.entries(i.properties).filter(([,n])=>p(n));return a.length===0?null:h(m,{className:l.objectSection,children:[o(m,{mb:"1",children:o(c,{variant:"title-small",weight:"bold",children:b(e)})}),i.description&&o(c,{variant:"body-medium",color:"secondary",className:l.sectionDescription,children:i.description}),a.map(([n,k])=>o(v,{name:`${e}.${n}`,schema:k,disabled:t,maskedFields:u},n))]})}if(i.type==="boolean")return o(d,{name:e,control:s,render:({field:a})=>o(m,{className:l.field,children:h(S,{isSelected:!!a.value,onChange:a.onChange,isDisabled:t,children:[o(c,{variant:"body-medium",children:b(e)}),i.description&&o(c,{variant:"body-medium",color:"secondary",children:` \u2014 ${i.description}`})]})})});const y=i.format==="password"||/token|secret|password|key/i.test(g(e)),C=u?.has(e)??!1,r=b(e);return y?o(d,{name:e,control:s,render:({field:a})=>o(x,{label:r,description:i.description,value:a.value??"",onChange:a.onChange,isDisabled:t,placeholder:C?"Previously configured \u2014 leave empty to keep":void 0,className:l.field,"aria-label":r})}):i.type==="integer"||i.type==="number"?o(d,{name:e,control:s,render:({field:a})=>o(f,{label:r,description:i.description,value:a.value!==void 0?String(a.value):"",onChange:n=>{a.onChange(n===""?void 0:Number(n))},isDisabled:t,className:l.field,"aria-label":r})}):o(d,{name:e,control:s,render:({field:a})=>o(f,{label:r,description:i.description,value:a.value??"",onChange:a.onChange,isDisabled:t,className:l.field,"aria-label":r})})};export{v as SchemaField,p as isSimpleSchema};
2
+ //# sourceMappingURL=SchemaField.esm.js.map
@@ -0,0 +1,2 @@
1
+ const f=new Set(["string","number","integer","boolean"]),l="******",y=t=>t.anyOf||t.oneOf||t.$ref?!1:t.type==="object"&&t.properties?!0:!!t.type&&f.has(t.type),b=(t,s)=>s.format==="password"||/token|secret|password|key/i.test(t),d=t=>{switch(t){case"boolean":return!1;case"number":case"integer":return;case"array":return[];default:return""}},i=(t,s,a=new Set,n="")=>{const r={};if(t.type!=="object"||!t.properties)return r;for(const[e,o]of Object.entries(t.properties)){if(!y(o))continue;const c=n?`${n}.${e}`:e,p=s?.[e];o.type==="object"&&o.properties?r[e]=i(o,p,a,c):b(e,o)&&p===l?(a.add(c),r[e]=""):p!==void 0?r[e]=p:o.default!==void 0?r[e]=o.default:r[e]=d(o.type)}return r},u=(t,s=new Set,a="")=>{const n={};for(const[r,e]of Object.entries(t)){const o=a?`${a}.${r}`:r;if(!(s.has(o)&&e==="")&&!(e===void 0||e===""))if(typeof e=="object"&&e!==null&&!Array.isArray(e)){const c=u(e,s,o);Object.keys(c).length>0&&(n[r]=c)}else n[r]=e}return n};export{i as buildDefaultValues,u as stripEmptyValues};
2
+ //# sourceMappingURL=utils.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as p,Fragment as Q,jsx as o}from"react/jsx-runtime";import{zodResolver as F}from"@hookform/resolvers/zod";import{makeStyles as y,Paper as k,Divider as s}from"@material-ui/core";import{asArray as w}from"@spotify/backstage-plugin-soundcheck-common";import{useForm as I,FormProvider as N}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as T}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as D}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../ChecksTable/utils.esm.js";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as M}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as P}from"../../../../routes.esm.js";import{FooterButtons as x}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as B}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as i}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as A}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as R,confirmationModalContent as H}from"../Common/utils.esm.js";import{IssuesFactDetailsInput as U}from"./IssuesFactDetailsInput.esm.js";import{MeasuresFactDetailsInput as z}from"./MeasuresFactDetailsInput.esm.js";import{mapConfigToSonarQubeCollectorConfig as E,defaultSonarQubeConfig as L,issuesCollectorConfig as O,measuresCollectorConfig as V,mapSonarQubeCollectorConfigToConfig as q}from"./utils.esm.js";import{sonarQubeCollectorFormSchema as G}from"./validation.esm.js";const J=y(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),K=({disabled:t,selectedCollector:e})=>{const n=I({defaultValues:e?E(e.config):L(),mode:"onChange",resolver:F(G)}),{formState:{errors:r},handleSubmit:l}=n,m=J(),d=!!r.projects||!!r.projectTags||!!r.issues||!!r.measures,{mutateAsync:u}=M(),[f,C]=D(P),{showModal:g}=T(),c=async j=>{if(!await g(H(e)))return;const v=q(j);await u({collectorId:e.id,config:v})&&C()};B(R(e));const a=w(e.config),b=a[0]?.token,S=a[0]?.username&&a[0]?.password,h=!b&&!S;return p(Q,{children:[o(A,{collectorName:"SonarQube",collectorId:e.id,invalidConfig:h,hasNonUIOptions:!0}),o(k,{className:m.section,children:o(N,{...n,children:p("form",{onSubmit:l(c),children:[o(i,{name:"projects",label:"Projects",description:"Collects details about SonarQube project linked to an entity.",disabled:t}),o(s,{}),o(i,{name:"projectTags",label:"Project Tags",description:"Collects details about tags set on a SonarQube project linked to an entity.",disabled:t}),o(s,{}),o(i,{name:"issues",label:"Issues",description:"Collects details about issues associated with a SonarQube project linked to an entity.",disabled:t,FactDetailsComponent:U,multipleCollectors:{enable:!0,defaultConfig:O(e.config)}}),o(s,{}),o(i,{name:"measures",label:"Measures",description:"Collects details about measures associated with a SonarQube project linked to an entity.",disabled:t,FactDetailsComponent:z,multipleCollectors:{enable:!0,defaultConfig:V(e.config)}})]})})}),o("div",{className:m.section,children:o(x,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:l(c),disableSave:d})})]})};export{K as SonarQubeConfigurator};
1
+ import{jsxs as p,Fragment as Q,jsx as o}from"react/jsx-runtime";import{standardSchemaResolver as F}from"@hookform/resolvers/standard-schema";import{makeStyles as y,Paper as k,Divider as s}from"@material-ui/core";import{asArray as w}from"@spotify/backstage-plugin-soundcheck-common";import{useForm as I,FormProvider as N}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as T}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as D}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../ChecksTable/utils.esm.js";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as M}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as P}from"../../../../routes.esm.js";import{FooterButtons as x}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as B}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as i}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as A}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as R,confirmationModalContent as H}from"../Common/utils.esm.js";import{IssuesFactDetailsInput as U}from"./IssuesFactDetailsInput.esm.js";import{MeasuresFactDetailsInput as E}from"./MeasuresFactDetailsInput.esm.js";import{mapConfigToSonarQubeCollectorConfig as L,defaultSonarQubeConfig as O,issuesCollectorConfig as V,measuresCollectorConfig as q,mapSonarQubeCollectorConfigToConfig as z}from"./utils.esm.js";import{sonarQubeCollectorFormSchema as G}from"./validation.esm.js";const J=y(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),K=({disabled:t,selectedCollector:e})=>{const n=I({defaultValues:e?L(e.config):O(),mode:"onChange",resolver:F(G)}),{formState:{errors:r},handleSubmit:l}=n,m=J(),d=!!r.projects||!!r.projectTags||!!r.issues||!!r.measures,{mutateAsync:u}=M(),[f,C]=D(P),{showModal:g}=T(),c=async j=>{if(!await g(H(e)))return;const v=z(j);await u({collectorId:e.id,config:v})&&C()};B(R(e));const a=w(e.config),b=a[0]?.token,S=a[0]?.username&&a[0]?.password,h=!b&&!S;return p(Q,{children:[o(A,{collectorName:"SonarQube",collectorId:e.id,invalidConfig:h,hasNonUIOptions:!0}),o(k,{className:m.section,children:o(N,{...n,children:p("form",{onSubmit:l(c),children:[o(i,{name:"projects",label:"Projects",description:"Collects details about SonarQube project linked to an entity.",disabled:t}),o(s,{}),o(i,{name:"projectTags",label:"Project Tags",description:"Collects details about tags set on a SonarQube project linked to an entity.",disabled:t}),o(s,{}),o(i,{name:"issues",label:"Issues",description:"Collects details about issues associated with a SonarQube project linked to an entity.",disabled:t,FactDetailsComponent:U,multipleCollectors:{enable:!0,defaultConfig:V(e.config)}}),o(s,{}),o(i,{name:"measures",label:"Measures",description:"Collects details about measures associated with a SonarQube project linked to an entity.",disabled:t,FactDetailsComponent:E,multipleCollectors:{enable:!0,defaultConfig:q(e.config)}})]})})}),o("div",{className:m.section,children:o(x,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:l(c),disableSave:d})})]})};export{K as SonarQubeConfigurator};
2
2
  //# sourceMappingURL=SonarQubeConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{validFactNameRegex as l,invalidFactNameErrorMessage as n}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FIELD_IS_REQUIRED_MSG as f}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as u,CollectorOptionSchema as d}from"../Common/CollectorOption.esm.js";import{ISSUE_STATUS_OPTIONS as _,ISSUE_SEVERITY_OPTIONS as p,ISSUE_TYPE_OPTIONS as I}from"./utils.esm.js";const r="Fact name is not unique",o="Max 100 characters",S="At least one metric must be added",N=u.extend({factDetails:e.strictObject({factName:e.string().min(1,f).max(100,o).regex(l,n),statuses:e.array(e.enum(_)).optional(),severities:e.array(e.enum(p)).optional(),types:e.array(e.enum(I)).optional()})}).strict(),E=e.strictObject({enabled:e.boolean(),collectors:e.array(N)}),O=u.extend({factDetails:e.strictObject({factName:e.string().min(1,f).max(100,o).regex(l,n),metrics:e.array(e.string()).min(1,S)})}).strict(),g=e.strictObject({enabled:e.boolean(),collectors:e.array(O)}),T=e.strictObject({projects:d,projectTags:d,issues:E,measures:g}).superRefine((s,i)=>{const m=[...s.issues.collectors.map(t=>t.factDetails.factName),...s.measures.collectors.map(t=>t.factDetails.factName)],c=m.filter((t,a)=>m.indexOf(t)!==a);c.length&&s.issues.collectors.forEach((t,a)=>{c.includes(t.factDetails.factName)&&i.addIssue({code:e.ZodIssueCode.custom,message:r,path:["issues","collectors",a,"factDetails","factName"]})}),c.length&&s.measures.collectors.forEach((t,a)=>{c.includes(t.factDetails.factName)&&i.addIssue({code:e.ZodIssueCode.custom,message:r,path:["measures","collectors",a,"factDetails","factName"]})})});export{r as FACT_NAME_IS_NOT_UNIQUE_MSG,o as MAX_100_CHARACTERS_MSG,S as MIN_1_METRIC_MSG,T as sonarQubeCollectorFormSchema};
1
+ import{validFactNameRegex as l,invalidFactNameErrorMessage as n}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod/v3";import{FIELD_IS_REQUIRED_MSG as f}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as u,CollectorOptionSchema as d}from"../Common/CollectorOption.esm.js";import{ISSUE_STATUS_OPTIONS as _,ISSUE_SEVERITY_OPTIONS as p,ISSUE_TYPE_OPTIONS as I}from"./utils.esm.js";const r="Fact name is not unique",o="Max 100 characters",S="At least one metric must be added",N=u.extend({factDetails:e.strictObject({factName:e.string().min(1,f).max(100,o).regex(l,n),statuses:e.array(e.enum(_)).optional(),severities:e.array(e.enum(p)).optional(),types:e.array(e.enum(I)).optional()})}).strict(),E=e.strictObject({enabled:e.boolean(),collectors:e.array(N)}),O=u.extend({factDetails:e.strictObject({factName:e.string().min(1,f).max(100,o).regex(l,n),metrics:e.array(e.string()).min(1,S)})}).strict(),g=e.strictObject({enabled:e.boolean(),collectors:e.array(O)}),T=e.strictObject({projects:d,projectTags:d,issues:E,measures:g}).superRefine((s,i)=>{const m=[...s.issues.collectors.map(t=>t.factDetails.factName),...s.measures.collectors.map(t=>t.factDetails.factName)],c=m.filter((t,a)=>m.indexOf(t)!==a);c.length&&s.issues.collectors.forEach((t,a)=>{c.includes(t.factDetails.factName)&&i.addIssue({code:e.ZodIssueCode.custom,message:r,path:["issues","collectors",a,"factDetails","factName"]})}),c.length&&s.measures.collectors.forEach((t,a)=>{c.includes(t.factDetails.factName)&&i.addIssue({code:e.ZodIssueCode.custom,message:r,path:["measures","collectors",a,"factDetails","factName"]})})});export{r as FACT_NAME_IS_NOT_UNIQUE_MSG,o as MAX_100_CHARACTERS_MSG,S as MIN_1_METRIC_MSG,T as sonarQubeCollectorFormSchema};
2
2
  //# sourceMappingURL=validation.esm.js.map
@@ -0,0 +1,2 @@
1
+ const e=c=>c.isConfigurable&&!!c.configSchema&&typeof c.configSchema=="object"&&!!Object.keys(c.configSchema.properties??{}).length;export{e as hasConfigSchema};
2
+ //# sourceMappingURL=utils.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as o}from"react/jsx-runtime";import{IntegrationsListPageBUI as r}from"./IntegrationsListPageBUI.esm.js";const i=({integrations:t})=>o(r,{integrations:t});export{i as CollectorsPage};
1
+ import{jsx as r}from"react/jsx-runtime";import{IntegrationsListPageBUI as e}from"./IntegrationsListPageBUI.esm.js";const a=["github","gitlab","scm","pagerduty","datadog","kubernetes","jira","sonarqube","newrelic","bigquery","catalog","azure","http","data-registry"],o=({integrations:t})=>r(e,{integrations:t});export{o as CollectorsPage,a as ConfigurableCollectorIds};
2
2
  //# sourceMappingURL=CollectorsPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as p}from"react/jsx-runtime";import{makeStyles as f,useTheme as s}from"@material-ui/core";import g from"../../images/integrations-bui/azure-rgb.svg";import c from"../../images/integrations-bui/azure-wht.svg";import n from"../../images/integrations-bui/bigquery-rgb.svg";import u from"../../images/integrations-bui/bigquery-wht.svg";import h from"../../images/integrations-bui/catalog-rgb.svg";import l from"../../images/integrations-bui/catalog-wht.svg";import b from"../../images/integrations-bui/data-registry-rgb.svg";import d from"../../images/integrations-bui/data-registry-wht.svg";import y from"../../images/integrations-bui/datadog-rgb.svg";import k from"../../images/integrations-bui/datadog-wht.svg";import v from"../../images/integrations-bui/default-logo-rgb.svg";import j from"../../images/integrations-bui/default-logo-wht.svg";import q from"../../images/integrations-bui/github-rgb.svg";import w from"../../images/integrations-bui/github-wht.svg";import x from"../../images/integrations-bui/gitlab-rgb.svg";import z from"../../images/integrations-bui/gitlab-wht.svg";import I from"../../images/integrations-bui/http-rgb.svg";import B from"../../images/integrations-bui/http-wht.svg";import T from"../../images/integrations-bui/jira-rgb.svg";import D from"../../images/integrations-bui/jira-wht.svg";import F from"../../images/integrations-bui/kubernetes-rgb.svg";import L from"../../images/integrations-bui/kubernetes-wht.svg";import M from"../../images/integrations-bui/newrelic-rgb.svg";import S from"../../images/integrations-bui/newrelic-wht.svg";import U from"../../images/integrations-bui/pagerduty-rgb.svg";import W from"../../images/integrations-bui/pagerduty-wht.svg";import A from"../../images/integrations-bui/scm-rgb.svg";import C from"../../images/integrations-bui/scm-wht.svg";import E from"../../images/integrations-bui/sonarqube-rgb.svg";import G from"../../images/integrations-bui/sonarqube-wht.svg";import H from"../../images/integrations-bui/soundcheck-rgb.svg";import K from"../../images/integrations-bui/soundcheck-wht.svg";import N from"../../images/integrations-bui/techinsights-rgb.svg";import O from"../../images/integrations-bui/techinsights-wht.svg";import{isDarkTheme as Q}from"../Charts/chartUtils.esm.js";const R={github:q,gitlab:x,datadog:y,scm:A,pagerduty:U,catalog:h,soundcheck:H,techinsights:N,kubernetes:F,jira:T,sonarqube:E,newrelic:M,bigquery:n,azure:g,http:I,"data-registry":b},Z={github:w,gitlab:z,datadog:k,scm:C,pagerduty:W,catalog:l,soundcheck:K,techinsights:O,kubernetes:L,jira:D,sonarqube:G,newrelic:S,bigquery:u,azure:c,http:B,"data-registry":d},_={small:"var(--bui-space-4)",medium:"var(--bui-space-6)",large:"var(--bui-space-8)"},J=f(()=>({image:{objectFit:"contain",color:"white",height:"var(--bui-space-4)",maxWidth:"100%"}})),P=({integrationId:r,noMargin:t,size:i="small"})=>{const e=J(),a=s(),m=Q(a);let o=m?Z[r]:R[r];return o||(o=m?j:v),p("img",{src:o,alt:r,style:{height:_[i],marginBottom:t?0:void 0},className:e.image})};export{P as IntegrationLogoBUI};
1
+ import{jsx as s}from"react/jsx-runtime";import{makeStyles as g,useTheme as c}from"@material-ui/core";import n from"../../images/integrations-bui/azure-rgb.svg";import u from"../../images/integrations-bui/azure-wht.svg";import h from"../../images/integrations-bui/bigquery-rgb.svg";import l from"../../images/integrations-bui/bigquery-wht.svg";import b from"../../images/integrations-bui/catalog-rgb.svg";import d from"../../images/integrations-bui/catalog-wht.svg";import y from"../../images/integrations-bui/data-registry-rgb.svg";import k from"../../images/integrations-bui/data-registry-wht.svg";import v from"../../images/integrations-bui/datadog-rgb.svg";import j from"../../images/integrations-bui/datadog-wht.svg";import q from"../../images/integrations-bui/default-logo-rgb.svg";import w from"../../images/integrations-bui/default-logo-wht.svg";import x from"../../images/integrations-bui/github-rgb.svg";import z from"../../images/integrations-bui/github-wht.svg";import I from"../../images/integrations-bui/gitlab-rgb.svg";import B from"../../images/integrations-bui/gitlab-wht.svg";import L from"../../images/integrations-bui/http-rgb.svg";import T from"../../images/integrations-bui/http-wht.svg";import D from"../../images/integrations-bui/jira-rgb.svg";import F from"../../images/integrations-bui/jira-wht.svg";import M from"../../images/integrations-bui/kubernetes-rgb.svg";import N from"../../images/integrations-bui/kubernetes-wht.svg";import S from"../../images/integrations-bui/newrelic-rgb.svg";import U from"../../images/integrations-bui/newrelic-wht.svg";import A from"../../images/integrations-bui/pagerduty-rgb.svg";import C from"../../images/integrations-bui/pagerduty-wht.svg";import E from"../../images/integrations-bui/scm-rgb.svg";import G from"../../images/integrations-bui/scm-wht.svg";import H from"../../images/integrations-bui/sonarqube-rgb.svg";import K from"../../images/integrations-bui/sonarqube-wht.svg";import O from"../../images/integrations-bui/soundcheck-rgb.svg";import Q from"../../images/integrations-bui/soundcheck-wht.svg";import R from"../../images/integrations-bui/techinsights-rgb.svg";import W from"../../images/integrations-bui/techinsights-wht.svg";import{isDarkTheme as Z}from"../Charts/chartUtils.esm.js";const t={github:x,gitlab:I,datadog:v,scm:E,pagerduty:A,catalog:b,soundcheck:O,techinsights:R,kubernetes:M,jira:D,sonarqube:H,newrelic:S,bigquery:h,azure:n,http:L,"data-registry":y},i={github:z,gitlab:B,datadog:j,scm:G,pagerduty:C,catalog:d,soundcheck:Q,techinsights:W,kubernetes:N,jira:F,sonarqube:K,newrelic:U,bigquery:l,azure:u,http:T,"data-registry":k},_={small:"var(--bui-space-4)",medium:"var(--bui-space-6)",large:"var(--bui-space-8)"},J=g(()=>({image:{objectFit:"contain",color:"white",height:"var(--bui-space-4)",maxWidth:"100%"}})),P=r=>!!t[r]&&!!i[r],V=({integrationId:r,noMargin:e,size:a="small"})=>{const p=J(),f=c(),m=Z(f);let o=m?i[r]:t[r];return o||(o=m?w:q),s("img",{src:o,alt:r,style:{height:_[a],marginBottom:e?0:void 0},className:p.image})};export{V as IntegrationLogoBUI,P as hasLogo};
2
2
  //# sourceMappingURL=IntegrationLogoBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as r,Fragment as M}from"react/jsx-runtime";import{useRouteRef as w}from"@backstage/core-plugin-api";import{usePermission as Y}from"@backstage/plugin-permission-react";import{HeaderPage as $,SearchField as O,Container as V,TableRoot as W,TableHeader as q,Column as g,TableBody as z,Row as J,Flex as K,Text as Q,TooltipTrigger as X,ButtonIcon as Z,Tooltip as _,Box as ee,CellText as y,Button as te}from"@backstage/ui";import{makeStyles as oe}from"@material-ui/core";import{RiInformationLine as ie}from"@remixicon/react";import{soundcheckCollectorUpdatePermission as re}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as ne,isEmpty as p}from"lodash";import{useState as f,useMemo as P,useEffect as ae,useCallback as se}from"react";import{useNavigate as ce}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useSearchName as me}from"../../hooks/useSearchName.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as de}from"../../hooks/useSortSearchParams.esm.js";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useGetCollectors as le}from"../../hooks/collectors/useGetCollectors.esm.js";import{useLCPReporting as ge}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as pe}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationDetailsRouteRef as he,integrationEditRouteRef as ue}from"../../routes.esm.js";import{CustomCell as x}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as fe}from"../EmptyState/EmptyStateBUI.esm.js";import{LoadingTableSkeleton as Ce}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{IntegrationLogoBUI as Se}from"./IntegrationLogoBUI.esm.js";const R=t=>{const s=t.hasUIConfig?"UI":"YAML";return p(t.config)&&p(t.collectionConfigs)?"None":s},B=oe(()=>({container:{marginBottom:"var(--bui-space-12)"},button:{boxShadow:"none !important",backgroundColor:"inherit !important"},tooltip:{maxWidth:"50rem",padding:0},scrollBox:{maxHeight:"30rem",overflow:"auto",padding:"0 var(--bui-space-3)"}})),N=({integration:t,hasConfigPage:s})=>{const n=B(),c=w(he),a=ce(),h=w(ue);return r(J,{onAction:()=>a(c({integrationId:t.id})),children:[e(x,{children:r(K,{gap:"2",align:"center",children:[e(Se,{integrationId:t.id}),e(Q,{children:t.name??t.id}),t.description&&r(X,{children:[e(Z,{className:n.button,variant:"secondary",icon:e(ie,{}),onClick:()=>a(c({integrationId:t.id}))}),e(_,{className:n.tooltip,children:e(ee,{className:n.scrollBox,children:e("p",{children:t.description})})})]})]})}),e(y,{title:`${String(t.dependentChecks?.length??0)} checks`}),e(y,{title:R(t)}),e(x,{onClick:m=>m.stopPropagation(),children:e(te,{onClick:()=>a(h({integrationId:t.id})),isDisabled:!s,variant:"tertiary","aria-label":`${t.id} configure`,children:"Configure"})})]})},be=["name","dependent-checks","config-source"],ke=({integrations:t})=>{const s=B(),{updateSortParams:n,searchParams:c}=de(),[a,h]=f(""),[m,T]=f(()=>c.get("sortDirection")==="descending"?"descending":"ascending"),[d,L]=f(()=>{const o=c.get("sort");return o&&be.includes(o)?o:""}),C=P(()=>({routeName:"soundcheck-integrations",additionalAttributes:{integrationsPerPage:t?.length}}),[t?.length]),{reportContentLoaded:S}=pe(C),{reporter:v}=ge(C),{loading:D,allowed:E}=Y({permission:re}),{data:U,isLoading:l}=le(),b=me({items:U??[],searchTerm:a}),u=P(()=>{const o=ne(b,i=>d==="name"?i.name??i.id:d==="dependent-checks"?i.dependentChecks?.length??0:d==="config-source"?R(i):i.isEditable?1:2);return m==="descending"&&o.reverse(),o},[b,d,m]),k=v?.getLCPValue();ae(()=>{l||S({lcp:k})},[l,S,k]);const H=se(({direction:o,column:i})=>{const I=String(i);L(I),T(o),n({sort:I,sortDirection:o})},[n]),A=!l&&!p(u),F=l,j=!l&&p(u),G=e(fe,{title:"No integrations found",body:"Your current search term did not return any integrations. Please try a different search term."});return r(M,{children:[e($,{customActions:e(O,{value:a,onChange:h,"aria-label":"Search Name"}),title:"Integrations"}),r(V,{className:s.container,children:[F&&e(Ce,{rowCount:10,rowHeight:36}),j&&G,A&&r(W,{onSortChange:H,sortDescriptor:{direction:m,column:d},children:[r(q,{children:[e(g,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"63%"},children:"Name"}),e(g,{id:"dependent-checks",allowsSorting:!0,style:{width:"15%"},children:"Dependent Checks"}),e(g,{id:"config-source",allowsSorting:!0,style:{width:"15%"},children:"Config Source"}),e(g,{style:{width:"7%"}})]}),e(z,{children:u.map(o=>e(N,{integration:o,hasConfigPage:!D&&E&&o.isEditable},o.id))})]})]})]})};export{N as IntegrationRow,ke as IntegrationsListPageBUI};
1
+ import{jsx as e,jsxs as n,Fragment as Q}from"react/jsx-runtime";import{useRouteRef as I}from"@backstage/core-plugin-api";import{usePermission as Y}from"@backstage/plugin-permission-react";import{HeaderPage as $,SearchField as G,Container as V,TableRoot as W,TableHeader as z,Column as g,TableBody as J,Row as K,Flex as O,Text as X,TooltipTrigger as Z,ButtonIcon as _,Tooltip as ee,Box as te,CellText as P,Button as oe}from"@backstage/ui";import{makeStyles as re}from"@material-ui/core";import{RiInformationLine as ie}from"@remixicon/react";import{asArray as ne,soundcheckCollectorUpdatePermission as ae}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as se,isEmpty as p}from"lodash";import{useState as f,useMemo as x,useEffect as ce,useCallback as le}from"react";import{useNavigate as me}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useSearchName as de}from"../../hooks/useSearchName.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as ge}from"../../hooks/useSortSearchParams.esm.js";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useGetCollectors as pe}from"../../hooks/collectors/useGetCollectors.esm.js";import{useLCPReporting as ue}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as he}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationDetailsRouteRef as fe,integrationEditRouteRef as Ce}from"../../routes.esm.js";import{CollectorStatus as Se}from"../CollectorPage/CollectorStatus.esm.js";import{CustomCell as C}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as be}from"../EmptyState/EmptyStateBUI.esm.js";import{LoadingTableSkeleton as ye}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{IntegrationLogoBUI as ke}from"./IntegrationLogoBUI.esm.js";const R=t=>{const r=t.hasUIConfig?"UI":"YAML";return p(t.config)&&p(t.collectionConfigs)?"None":r},B=re(()=>({container:{marginBottom:"var(--bui-space-12)"},button:{boxShadow:"none !important",backgroundColor:"inherit !important"},tooltip:{maxWidth:"50rem",padding:0},scrollBox:{maxHeight:"30rem",overflow:"auto",padding:"0 var(--bui-space-3)"}})),N=t=>t?.frequency||t?.collects&&ne(t.collects).some(r=>r?.frequency),T=({integration:t,hasConfigPage:r})=>{const a=B(),c=I(fe),s=me(),u=I(Ce);return n(K,{onAction:()=>s(c({integrationId:t.id})),children:[e(C,{children:n(O,{gap:"2",align:"center",children:[e(ke,{integrationId:t.id}),e(X,{children:t.name??t.id}),t.description&&n(Z,{children:[e(_,{className:a.button,variant:"secondary",icon:e(ie,{}),onClick:()=>s(c({integrationId:t.id}))}),e(ee,{className:a.tooltip,children:e(te,{className:a.scrollBox,children:e("p",{children:t.description})})})]})]})}),e(C,{children:e(Se,{hasFrequency:N(t.config),jobQueueStatus:t.jobQueueStatus})}),e(P,{title:`${String(t.dependentChecks?.length??0)} checks`}),e(P,{title:R(t)}),e(C,{onClick:l=>l.stopPropagation(),children:e(oe,{onClick:()=>s(u({integrationId:t.id})),isDisabled:!r,variant:"tertiary","aria-label":`${t.id} configure`,children:"Configure"})})]})},we=["name","dependent-checks","config-source"],Ie=({integrations:t})=>{const r=B(),{updateSortParams:a,searchParams:c}=ge(),[s,u]=f(""),[l,L]=f(()=>c.get("sortDirection")==="descending"?"descending":"ascending"),[m,v]=f(()=>{const o=c.get("sort");return o&&we.includes(o)?o:""}),S=x(()=>({routeName:"soundcheck-integrations",additionalAttributes:{integrationsPerPage:t?.length}}),[t?.length]),{reportContentLoaded:b}=he(S),{reporter:D}=ue(S),{loading:E,allowed:U}=Y({permission:ae}),{data:A,isLoading:d}=pe(),y=de({items:A??[],searchTerm:s}),h=x(()=>{const o=se(y,i=>m==="name"?i.name??i.id:m==="dependent-checks"?i.dependentChecks?.length??0:m==="config-source"?R(i):i.isEditable?1:2);return l==="descending"&&o.reverse(),o},[y,m,l]),k=D?.getLCPValue();ce(()=>{d||b({lcp:k})},[d,b,k]);const F=le(({direction:o,column:i})=>{const w=String(i);v(w),L(o),a({sort:w,sortDirection:o})},[a]),H=!d&&!p(h),q=d,j=!d&&p(h),M=e(be,{title:"No integrations found",body:"Your current search term did not return any integrations. Please try a different search term."});return n(Q,{children:[e($,{customActions:e(G,{value:s,onChange:u,"aria-label":"Search Name"}),title:"Integrations"}),n(V,{className:r.container,children:[q&&e(ye,{rowCount:10,rowHeight:36}),j&&M,H&&n(W,{onSortChange:F,sortDescriptor:{direction:l,column:m},children:[n(z,{children:[e(g,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"53%"},children:"Name"}),e(g,{id:"status",children:"Status"}),e(g,{id:"dependent-checks",allowsSorting:!0,style:{width:"15%"},children:"Dependent Checks"}),e(g,{id:"config-source",allowsSorting:!0,style:{width:"15%"},children:"Config Source"}),e(g,{style:{width:"7%"}})]}),e(J,{children:h.map(o=>e(T,{integration:o,hasConfigPage:!E&&U&&o.isEditable},o.id))})]})]})]})};export{T as IntegrationRow,Ie as IntegrationsListPageBUI,N as hasFrequency};
2
2
  //# sourceMappingURL=IntegrationsListPageBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as t,Fragment as y,jsx as e}from"react/jsx-runtime";import{useRouteRef as n}from"@backstage/core-plugin-api";import{HeaderPage as b,Container as C,Box as a,Text as o,Flex as i,Card as d,CardBody as m,Link as u}from"@backstage/ui";import{makeStyles as R}from"@material-ui/core/styles";import{RiAddLine as v,RiLayoutGridFill as N}from"@remixicon/react";import{useNavigate as x}from"react-router-dom";import B from"react-use/lib/useLocalStorage";import{trackCreateRouteRef as T,tracksPageRouteRef as w,trackBuilderRouteRef as P}from"../../routes.esm.js";import{PROVIDER_STORAGE_KEY as S}from"../TrackBuilderPage/utils.esm.js";const E=R(()=>({container:{marginBottom:"var(--bui-space-12)"},icon:{width:"64px",height:"64px",background:"var(--bui-bg-neutral-2)",borderRadius:"var(--bui-radius-full)",display:"flex",alignItems:"center",justifyContent:"center",color:"var(--bui-fg-success)"},cardBody:{padding:"var(--bui-space-10)"},card:{width:"30%",cursor:"pointer"}})),_=()=>{const r=E(),p=n(T),h=n(w),f=n(P),s=x(),g="Create a custom track or use Spotify templates.",[l]=B(S,null),k=()=>{const c=f();return l?`${c}?step=2&provider=${l}`:c};return t(y,{children:[e(b,{title:"Create New Track",breadcrumbs:[{label:"All Tracks",href:h()}]}),t(C,{className:r.container,children:[e(a,{mb:"8",children:e(o,{color:"secondary",variant:"body-large",children:g})}),t(i,{children:[e(d,{className:r.card,onClick:()=>s(p()),children:t(m,{className:r.cardBody,children:[e(i,{direction:"column",align:"center",mb:"2",children:e(a,{className:r.icon,children:e(v,{size:64})})}),t(i,{direction:"column",align:"center",gap:"1",children:[e(o,{variant:"title-small",children:"Create Custom Track"}),e(o,{color:"secondary",children:"Create a custom track with your own checks. Ensure that checks are created first."}),e(a,{mt:"4",children:e(u,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks#creating-a-custom-track",target:"_blank",rel:"noopener noreferrer",onClick:c=>c.stopPropagation(),children:"Documentation"})})]})]})}),e(d,{className:r.card,onClick:()=>s(k()),children:t(m,{className:r.cardBody,children:[e(i,{direction:"column",align:"center",mb:"2",children:e(a,{className:r.icon,children:e(N,{size:36})})}),t(i,{direction:"column",align:"center",gap:"1",children:[e(o,{variant:"title-small",children:"Use Spotify Templates"}),e(o,{color:"secondary",children:"Ready-to-use tracks and checks recommended by Spotify. You can modify this configuration at any time."}),e(a,{mt:"4",children:e(u,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks#creating-tracks-using-spotify-templates",target:"_blank",rel:"noopener noreferrer",onClick:c=>c.stopPropagation(),children:"Documentation"})})]})]})})]})]})]})};export{_ as CreateNewTrackPage};
1
+ import{jsxs as t,Fragment as y,jsx as e}from"react/jsx-runtime";import{useRouteRef as n}from"@backstage/core-plugin-api";import{HeaderPage as b,Container as C,Box as c,Text as o,Flex as i,Card as d,CardBody as m,Link as u}from"@backstage/ui";import{makeStyles as R}from"@material-ui/core/styles";import{RiAddLine as v,RiLayoutGridFill as N}from"@remixicon/react";import{useNavigate as x}from"react-router-dom";import T from"react-use/lib/useLocalStorage";import{trackCreateRouteRef as P,tracksPageRouteRef as B,trackBuilderRouteRef as w}from"../../routes.esm.js";import{PROVIDER_STORAGE_KEY as S}from"../TrackBuilderPage/utils.esm.js";const E=R(()=>({container:{marginBottom:"var(--bui-space-12)"},icon:{width:"64px",height:"64px",background:"var(--bui-bg-neutral-2)",borderRadius:"var(--bui-radius-full)",display:"flex",alignItems:"center",justifyContent:"center",color:"var(--bui-fg-success)"},cardBody:{padding:"var(--bui-space-10)"},card:{width:"30%",cursor:"pointer"}})),F=()=>{const r=E(),p=n(P),h=n(B),f=n(w),s=x(),g="Create a custom track or use Spotify templates.",[l]=T(S,null),k=()=>{const a=f();return l?`${a}?step=2&provider=${l}`:a};return t(y,{children:[e(b,{title:"Create New Track",breadcrumbs:[{label:"All Tracks",href:h()}]}),t(C,{className:r.container,children:[e(c,{mb:"8",children:e(o,{color:"secondary",variant:"body-large",children:g})}),t(i,{children:[e(d,{className:r.card,onPress:()=>s(p()),label:"Create Custom Track",children:t(m,{className:r.cardBody,children:[e(i,{direction:"column",align:"center",mb:"2",children:e(c,{className:r.icon,children:e(v,{size:64})})}),t(i,{direction:"column",align:"center",gap:"1",children:[e(o,{variant:"title-small",children:"Create Custom Track"}),e(o,{color:"secondary",children:"Create a custom track with your own checks. Ensure that checks are created first."}),e(c,{mt:"4",children:e(u,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks#creating-a-custom-track",target:"_blank",rel:"noopener noreferrer",onClick:a=>a.stopPropagation(),children:"Documentation"})})]})]})}),e(d,{className:r.card,onPress:()=>s(k()),label:"Use Spotify Templates",children:t(m,{className:r.cardBody,children:[e(i,{direction:"column",align:"center",mb:"2",children:e(c,{className:r.icon,children:e(N,{size:36})})}),t(i,{direction:"column",align:"center",gap:"1",children:[e(o,{variant:"title-small",children:"Use Spotify Templates"}),e(o,{color:"secondary",children:"Ready-to-use tracks and checks recommended by Spotify. You can modify this configuration at any time."}),e(c,{mt:"4",children:e(u,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks#creating-tracks-using-spotify-templates",target:"_blank",rel:"noopener noreferrer",onClick:a=>a.stopPropagation(),children:"Documentation"})})]})]})})]})]})]})};export{F as CreateNewTrackPage};
2
2
  //# sourceMappingURL=CreateNewTrackPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as o,jsxs as i}from"react/jsx-runtime";import{Flex as l,Text as m,TooltipTrigger as c,ButtonIcon as a,Tooltip as p,Box as s}from"@backstage/ui";import{makeStyles as d}from"@material-ui/core";import{RiInformationLine as h}from"@remixicon/react";import{CustomCell as x}from"../CustomCell/CustomCell.esm.js";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"@backstage/core-components";import"react";import"react-markdown";import"rehype-raw";import"remark-gfm";import{SoundcheckMarkdownContentBUI as u}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";const f=d(()=>({button:{boxShadow:"none !important",backgroundColor:"inherit !important"},tooltip:{maxWidth:"50rem",padding:0},scrollBox:{maxHeight:"30rem",overflow:"auto",padding:"0 var(--bui-space-3)"}})),g=({title:n,description:r,onClick:e})=>{const t=f();return o(x,{children:i(l,{gap:"0",align:"center",children:[o(m,{children:n}),i(c,{children:[o(a,{className:t.button,isDisabled:!r,variant:"secondary",icon:o(h,{}),onClick:e}),o(p,{className:t.tooltip,children:o(s,{className:t.scrollBox,children:o(u,{content:r})})})]})]})})};export{g as DescriptionCell};
1
+ import{jsx as o,jsxs as i}from"react/jsx-runtime";import{Flex as m,Text as n,TooltipTrigger as c,ButtonIcon as p,Tooltip as s,Box as d}from"@backstage/ui";import{makeStyles as h}from"@material-ui/core";import{RiInformationLine as f}from"@remixicon/react";import{Badge as x}from"../Badge/Badge.esm.js";import{CustomCell as g}from"../CustomCell/CustomCell.esm.js";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"@backstage/core-components";import"react";import"react-markdown";import"rehype-raw";import"remark-gfm";import{SoundcheckMarkdownContentBUI as u}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";const b=h(()=>({button:{boxShadow:"none !important",backgroundColor:"inherit !important"},tooltip:{maxWidth:"50rem",padding:0},scrollBox:{maxHeight:"30rem",overflow:"auto",padding:"0 var(--bui-space-3)"}})),C=({title:e,description:r,hasShift:l=!1,onClick:a})=>{const t=b();return o(g,{children:i(m,{gap:"0",align:"center",children:[o(n,{children:e}),i(c,{children:[o(p,{className:t.button,isDisabled:!r,variant:"secondary",icon:o(f,{}),onClick:a}),o(s,{className:t.tooltip,children:o(d,{className:t.scrollBox,children:o(u,{content:r})})})]}),l&&o(x,{variant:"default",children:o(n,{variant:"body-x-small",children:"Shift In Progress"})})]})})};export{C as DescriptionCell};
2
2
  //# sourceMappingURL=DescriptionCell.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t}from"react/jsx-runtime";import{useApi as l}from"@backstage/core-plugin-api";import{entityPresentationApiRef as m,EntityRefLink as s}from"@backstage/plugin-catalog-react";import{Chip as o,Avatar as p}from"@material-ui/core";import{Skeleton as a}from"@material-ui/lab";import f from"react-use/esm/useAsync";const y=({entityOrRef:e,style:r})=>{const n=l(m),{value:i}=f(async()=>await n.forEntity(e).promise);return i?t(s,{entityRef:e,children:t(o,{size:"small",avatar:i.Icon?t(p,{children:t(i.Icon,{})}):void 0,label:i.primaryTitle,style:{cursor:"pointer",...r}})}):t(o,{size:"small",avatar:t(a,{variant:"circle",width:16,height:16}),label:t(a,{variant:"text",width:65}),style:r})};export{y as EntityChip};
1
+ import{jsx as t}from"react/jsx-runtime";import{EntityRefLink as a}from"@backstage/plugin-catalog-react";import{Chip as o,Avatar as l}from"@material-ui/core";import{Skeleton as n}from"@material-ui/lab";import{useEntityPresentation as m}from"../../hooks/catalog/useEntityPresentation.esm.js";const s=({entityOrRef:i,style:r})=>{const e=m(i);return e?t(a,{entityRef:i,children:t(o,{size:"small",avatar:e.Icon?t(l,{children:t(e.Icon,{})}):void 0,label:e.primaryTitle,style:{cursor:"pointer",...r}})}):t(o,{size:"small",avatar:t(n,{variant:"circle",width:16,height:16}),label:t(n,{variant:"text",width:65}),style:r})};export{s as EntityChip};
2
2
  //# sourceMappingURL=EntityChip.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as a,Fragment as v}from"react/jsx-runtime";import{stringifyEntityRef as ee}from"@backstage/catalog-model";import{makeStyles as te,Box as o,Typography as r,TextField as ae,Button as W}from"@material-ui/core";import{Alert as ie}from"@material-ui/lab";import{parseFactRef as oe}from"@spotify/backstage-plugin-soundcheck-common";import re from"lodash";import{useMemo as g,useState as F,useEffect as ne,useCallback as le}from"react";import{useGetEntityRefs as ce}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{useGetLimitedEntityRefs as se}from"../../hooks/catalog/useGetLimitedEntityRefs.esm.js";import{useGetCollectors as de}from"../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as he}from"../../hooks/collectors/useGetFactSchema.esm.js";import{useGetFact as pe}from"../../hooks/useGetFact.esm.js";import{useGetPathResolvers as me}from"../../hooks/useGetPathResolvers.esm.js";import{generateJsonPaths as fe}from"../CheckForm/utils/checkFormUtils.esm.js";import{hasLogo as ue,CollectorLogo as ve}from"../CollectorsPage/CollectorListPage/CollectorLogo.esm.js";import{ExpandableSection as G}from"../ExpandableSection/ExpandableSection.esm.js";import{mapFiltersToCatalogFilter as ge}from"../Filter/utils.esm.js";import"../Filter/FilterComponent.esm.js";import{emptyFilters as ye}from"../Filter/types.esm.js";import{FormattedPreview as w}from"../FormattedPreview/FormattedPreview.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as be}from"../FormControlledAutocomplete/useLabelOptions.esm.js";import{ControlledAutocomplete as y}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as Se}from"../LoadingIndicator/LoadingIndicator.esm.js";import{useFactOptions as Fe}from"./useFactOptions.esm.js";const Ne=800,Re=te(t=>({content:{padding:t.spacing(2,3),width:Ne},section:{margin:t.spacing(2,0)},expandedSection:{borderTop:`1px solid ${t.palette.divider}`,padding:t.spacing(0,2)},loading:{margin:t.spacing(2)},preview:{maxHeight:500,overflow:"auto",border:`1px solid ${t.palette.divider}`},pathSection:{display:"flex",alignItems:"center",margin:t.spacing(1,0)},testPathButton:{margin:t.spacing(1,1,.5,0)},collectorName:{fontSize:24}})),xe=t=>{const p=!t?.length||t.every(h=>Object.values(h).every(N=>!N?.length))?[{...ye(),selectedKinds:["Component","System"]}]:t;return ge(p)},Ee=({factRef:t,updateFactRef:p,path:h,updatePath:N,entityRef:m,updateEntityRef:k,pathResolver:s,filters:R,onSave:P,hidePath:O})=>{const i=Re(),d=g(()=>{if(t)try{return oe(t)}catch{return}},[t]),[x,j]=F(d?.source??null);ne(()=>{d?.source&&j(d.source)},[d?.source]);const[b,V]=F("jsonpath"),[E,B]=F(),[C,M]=F(),{data:I}=me(),A=g(()=>I?.map(n=>n.id)??[],[I]),{data:f}=he(d?.source,d?.name,!0),D=g(()=>f?fe(f.schema):[],[f]),{data:L,isLoading:J}=de(),$=L?.map(n=>n.id)?.sort()??[],S=!R?.length||R.every(n=>Object.values(n).every(Z=>!Z?.length)),{data:z,isLoading:H}=ce(xe(R),1e3,!S),K=z?.items.map(n=>ee(n)),{entityRefs:U,allLoading:q}=se(500,S),l=g(()=>L?.find(n=>n.id===x),[L,x]),{factOptions:Q}=Fe({selectedCollector:l}),{options:X,getOptionLabel:T}=be(Q),{data:c,isLoading:u}=pe({factRef:t||"",entityRef:C||"",path:E,pathResolver:s??b??void 0,refresh:!0},!!t&&!!C),Y=le(()=>{B(h),M(m)},[m,h]),_=g(()=>!!l?.config?.cache,[l]);return e(o,{className:i.content,"data-testid":"fact-explorer",children:a(o,{children:[a(o,{children:[e(r,{variant:"subtitle1",children:"Select an Integration"}),e(y,{options:$,onChange:n=>{j(n),p("")},value:x,placeholder:"Integration",disabled:J,fullWidth:!0,freeSolo:!0})]}),!l&&e(v,{children:a(o,{children:[e(r,{variant:"subtitle1",children:"Enter a Fact Ref Directly"}),e(ae,{value:t,onChange:n=>p(n.currentTarget.value),variant:"outlined",margin:"dense",placeholder:"Enter the full fact ref, i.e. custom:default/custom-fact",fullWidth:!0})]})}),!!l&&e(v,{children:a(o,{className:i.section,children:[ue(l.id)?e(ve,{noMargin:!0,collectorId:l.id}):a(r,{variant:"h5",className:i.collectorName,component:"div",children:[l.name??l.id," "]}),!!l.description&&e(r,{variant:"body2",children:l.description}),e(y,{options:X,onChange:p,value:t??null,placeholder:"Select Fact",getOptionLabel:T,noOptionsText:"No Facts",fullWidth:!0})]})}),!!t&&!!d&&a(v,{children:[!!f?.schema&&e(o,{className:i.section,children:e(G,{elevation:1,title:"JSON Schema",children:e("div",{className:i.preview,children:e(w,{data:f.schema})})})}),!O&&a(v,{children:[a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Path Resolver"}),!s&&e(r,{variant:"caption",children:"Defaults to jsonpath"}),s?e(r,{variant:"body1",children:s}):e(y,{options:A,onChange:V,value:s??b,placeholder:"Path Resolver (Optional)",getOptionLabel:T,fullWidth:!0,disabled:!!s,freeSolo:!0})]}),a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Path"}),e(y,{options:(s??b)==="jsonpath"?D:[],onChange:n=>{E&&B(void 0),N(n)},value:h??null,placeholder:"Path",fullWidth:!0,freeSolo:!0}),e("div",{className:i.pathSection,children:!!P&&e(W,{className:i.testPathButton,variant:"contained",onClick:()=>P({factRef:t,path:h??"",pathResolver:b??s??""}),disabled:!h,color:"primary",children:"Save"})})]})]})]}),!!t&&!!d&&e(G,{alwaysExpanded:O,elevation:0,title:"Sample Fact and Test Path",children:a(o,{className:i.expandedSection,children:[a(o,{marginBottom:1,children:[e(r,{variant:"subtitle1",children:"Select an Entity"}),a(r,{variant:"caption",children:["Fact will be sampled from this entity.",e("br",{}),"If you don't see the entity in the drop-down list, you can type its reference in the format ","<kind>:<namespace>/<name>","."]}),e(y,{options:S?U??[]:K??[],onChange:k,value:m??null,placeholder:"Entity Selection",isLoading:S?q:H,freeSolo:!0,fullWidth:!0})]}),e(o,{children:e(W,{className:i.testPathButton,variant:"contained",onClick:Y,disabled:!m,color:"primary",children:"Sample Fact"})}),a(v,{children:[!!E&&!u&&a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Resolved Value"}),c?.resolvedValue!==null&&c?.resolvedValue!==void 0?e(o,{className:i.preview,children:e(w,{data:c?.resolvedValue})}):e(r,{color:"textSecondary",variant:"body2",children:"Could not resolve path"})]}),!!C&&a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Fact Data"}),_&&e(r,{variant:"caption",children:"Uses cache when available."}),!!u&&e("div",{className:i.loading,children:e(Se,{})}),!u&&!!c?.fact&&e(o,{className:i.preview,children:c?.fact?.sensitive&&re.isEmpty(c?.fact?.data)?e(o,{children:e(ie,{severity:"info",children:"The associated fact contains potentially sensitive information and has been redacted."})}):e(w,{data:c?.fact?.data})}),!u&&!!c?.collectionError&&a(r,{color:"textSecondary",variant:"body2",children:["Failed to collect:"," ",c?.collectionError?.errorMessage]}),!u&&!c?.fact&&!c?.collectionError&&a(r,{color:"textSecondary",variant:"body2",children:["Fact ",t," unavailable for entity ",m]})]})]})]})})]})})};export{Ee as FactExplorer};
1
+ import{jsx as e,jsxs as a,Fragment as v}from"react/jsx-runtime";import{stringifyEntityRef as ee}from"@backstage/catalog-model";import{makeStyles as te,Box as o,Typography as n,TextField as ae,Button as W}from"@material-ui/core";import{Alert as ie}from"@material-ui/lab";import{parseFactRef as oe}from"@spotify/backstage-plugin-soundcheck-common";import ne from"lodash";import{useMemo as g,useState as F,useEffect as re,useCallback as le}from"react";import{useGetEntityRefs as ce}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{useGetLimitedEntityRefs as se}from"../../hooks/catalog/useGetLimitedEntityRefs.esm.js";import{useGetCollectors as de}from"../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as he}from"../../hooks/collectors/useGetFactSchema.esm.js";import{useGetFact as pe}from"../../hooks/useGetFact.esm.js";import{useGetPathResolvers as me}from"../../hooks/useGetPathResolvers.esm.js";import{generateJsonPaths as fe}from"../CheckForm/utils/checkFormUtils.esm.js";import{hasLogo as ue,IntegrationLogoBUI as ve}from"../CollectorsPage/IntegrationLogoBUI.esm.js";import{ExpandableSection as G}from"../ExpandableSection/ExpandableSection.esm.js";import{mapFiltersToCatalogFilter as ge}from"../Filter/utils.esm.js";import"../Filter/FilterComponent.esm.js";import{emptyFilters as ye}from"../Filter/types.esm.js";import{FormattedPreview as w}from"../FormattedPreview/FormattedPreview.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as be}from"../FormControlledAutocomplete/useLabelOptions.esm.js";import{ControlledAutocomplete as y}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as Se}from"../LoadingIndicator/LoadingIndicator.esm.js";import{useFactOptions as Fe}from"./useFactOptions.esm.js";const Ne=800,Re=te(t=>({content:{padding:t.spacing(2,3),width:Ne},section:{margin:t.spacing(2,0)},expandedSection:{borderTop:`1px solid ${t.palette.divider}`,padding:t.spacing(0,2)},loading:{margin:t.spacing(2)},preview:{maxHeight:500,overflow:"auto",border:`1px solid ${t.palette.divider}`},pathSection:{display:"flex",alignItems:"center",margin:t.spacing(1,0)},testPathButton:{margin:t.spacing(1,1,.5,0)},collectorName:{fontSize:24}})),xe=t=>{const p=!t?.length||t.every(h=>Object.values(h).every(N=>!N?.length))?[{...ye(),selectedKinds:["Component","System"]}]:t;return ge(p)},Ee=({factRef:t,updateFactRef:p,path:h,updatePath:N,entityRef:m,updateEntityRef:k,pathResolver:s,filters:R,onSave:P,hidePath:O})=>{const i=Re(),d=g(()=>{if(t)try{return oe(t)}catch{return}},[t]),[x,I]=F(d?.source??null);re(()=>{d?.source&&I(d.source)},[d?.source]);const[b,V]=F("jsonpath"),[E,j]=F(),[C,M]=F(),{data:B}=me(),$=g(()=>B?.map(r=>r.id)??[],[B]),{data:f}=he(d?.source,d?.name,!0),A=g(()=>f?fe(f.schema):[],[f]),{data:L,isLoading:D}=de(),J=L?.map(r=>r.id)?.sort()??[],S=!R?.length||R.every(r=>Object.values(r).every(Z=>!Z?.length)),{data:U,isLoading:z}=ce(xe(R),1e3,!S),H=U?.items.map(r=>ee(r)),{entityRefs:K,allLoading:q}=se(500,S),l=g(()=>L?.find(r=>r.id===x),[L,x]),{factOptions:Q}=Fe({selectedCollector:l}),{options:X,getOptionLabel:T}=be(Q),{data:c,isLoading:u}=pe({factRef:t||"",entityRef:C||"",path:E,pathResolver:s??b??void 0,refresh:!0},!!t&&!!C),Y=le(()=>{j(h),M(m)},[m,h]),_=g(()=>!!l?.config?.cache,[l]);return e(o,{className:i.content,"data-testid":"fact-explorer",children:a(o,{children:[a(o,{children:[e(n,{variant:"subtitle1",children:"Select an Integration"}),e(y,{options:J,onChange:r=>{I(r),p("")},value:x,placeholder:"Integration",disabled:D,fullWidth:!0,freeSolo:!0})]}),!l&&e(v,{children:a(o,{children:[e(n,{variant:"subtitle1",children:"Enter a Fact Ref Directly"}),e(ae,{value:t,onChange:r=>p(r.currentTarget.value),variant:"outlined",margin:"dense",placeholder:"Enter the full fact ref, i.e. custom:default/custom-fact",fullWidth:!0})]})}),!!l&&e(v,{children:a(o,{className:i.section,children:[ue(l.id)?e(ve,{noMargin:!0,integrationId:l.id}):a(n,{variant:"h5",className:i.collectorName,component:"div",children:[l.name??l.id," "]}),!!l.description&&e(n,{variant:"body2",children:l.description}),e(y,{options:X,onChange:p,value:t??null,placeholder:"Select Fact",getOptionLabel:T,noOptionsText:"No Facts",fullWidth:!0})]})}),!!t&&!!d&&a(v,{children:[!!f?.schema&&e(o,{className:i.section,children:e(G,{elevation:1,title:"JSON Schema",children:e("div",{className:i.preview,children:e(w,{data:f.schema})})})}),!O&&a(v,{children:[a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Path Resolver"}),!s&&e(n,{variant:"caption",children:"Defaults to jsonpath"}),s?e(n,{variant:"body1",children:s}):e(y,{options:$,onChange:V,value:s??b,placeholder:"Path Resolver (Optional)",getOptionLabel:T,fullWidth:!0,disabled:!!s,freeSolo:!0})]}),a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Path"}),e(y,{options:(s??b)==="jsonpath"?A:[],onChange:r=>{E&&j(void 0),N(r)},value:h??null,placeholder:"Path",fullWidth:!0,freeSolo:!0}),e("div",{className:i.pathSection,children:!!P&&e(W,{className:i.testPathButton,variant:"contained",onClick:()=>P({factRef:t,path:h??"",pathResolver:b??s??""}),disabled:!h,color:"primary",children:"Save"})})]})]})]}),!!t&&!!d&&e(G,{alwaysExpanded:O,elevation:0,title:"Sample Fact and Test Path",children:a(o,{className:i.expandedSection,children:[a(o,{marginBottom:1,children:[e(n,{variant:"subtitle1",children:"Select an Entity"}),a(n,{variant:"caption",children:["Fact will be sampled from this entity.",e("br",{}),"If you don't see the entity in the drop-down list, you can type its reference in the format ","<kind>:<namespace>/<name>","."]}),e(y,{options:S?K??[]:H??[],onChange:k,value:m??null,placeholder:"Entity Selection",isLoading:S?q:z,freeSolo:!0,fullWidth:!0})]}),e(o,{children:e(W,{className:i.testPathButton,variant:"contained",onClick:Y,disabled:!m,color:"primary",children:"Sample Fact"})}),a(v,{children:[!!E&&!u&&a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Resolved Value"}),c?.resolvedValue!==null&&c?.resolvedValue!==void 0?e(o,{className:i.preview,children:e(w,{data:c?.resolvedValue})}):e(n,{color:"textSecondary",variant:"body2",children:"Could not resolve path"})]}),!!C&&a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Fact Data"}),_&&e(n,{variant:"caption",children:"Uses cache when available."}),!!u&&e("div",{className:i.loading,children:e(Se,{})}),!u&&!!c?.fact&&e(o,{className:i.preview,children:c?.fact?.sensitive&&ne.isEmpty(c?.fact?.data)?e(o,{children:e(ie,{severity:"info",children:"The associated fact contains potentially sensitive information and has been redacted."})}):e(w,{data:c?.fact?.data})}),!u&&!!c?.collectionError&&a(n,{color:"textSecondary",variant:"body2",children:["Failed to collect:"," ",c?.collectionError?.errorMessage]}),!u&&!c?.fact&&!c?.collectionError&&a(n,{color:"textSecondary",variant:"body2",children:["Fact ",t," unavailable for entity ",m]})]})]})]})})]})})};export{Ee as FactExplorer};
2
2
  //# sourceMappingURL=FactExplorer.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as l,Fragment as y,jsx as e}from"react/jsx-runtime";import{parseEntityRef as A}from"@backstage/catalog-model";import{useApi as Z,configApiRef as ee}from"@backstage/core-plugin-api";import{makeStyles as te,Typography as s,Divider as ie,Box as b,Tabs as re,Tab as S,Grid as c,Button as j,Paper as le,Chip as z,Switch as ne,FormHelperText as ae}from"@material-ui/core";import oe from"@material-ui/icons/Add";import se from"@material-ui/icons/Remove";import{combineEntityFilterQueries as ce,getGroupFilterFromConfig as me}from"@spotify/backstage-plugin-soundcheck-common";import de,{isEmpty as W}from"lodash";import{useState as pe,useMemo as he}from"react";import{useFormContext as ge,useFieldArray as K}from"react-hook-form";import fe from"react-use/lib/useLocalStorage";import{EntitiesAutocompletePicker as ue}from"../EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js";import{FormFieldLabel as R}from"../FormFieldLabel/FormFieldLabel.esm.js";import{EntityAutocompletePicker as ye}from"./EntityAutocompletePicker.esm.js";import{FilterKeyValueInput as N}from"./FilterKeyValueInput.esm.js";import{FilterPreviewTable as be}from"./FilterPreviewTable/FilterPreviewTable.esm.js";import{FILTER_OPTIONS as Y,emptyFilters as P}from"./types.esm.js";import{isValidOtherFilterKey as ve}from"./utils.esm.js";const Fe=te(i=>({title:{fontWeight:700},filterContainer:{display:"flex",flexWrap:"wrap"},selectionTabs:{marginBottom:i.spacing(2)},divider:{marginTop:i.spacing(2)},filterDisplayBox:{padding:i.spacing(2),paddingLeft:i.spacing(4),border:`1px solid ${i.palette.divider}`,marginBottom:i.spacing(0),display:"flex",alignItems:"center",flex:1},error:{borderColor:i.palette.error.main}})),B=i=>W(i)?"":`${i.length>1?`[${i.join(", ")}]`:i[0]}`,xe=({includeFilterValue:i,excludeFilterValue:m})=>{const $=(L=[P()])=>L.map(f=>{const v=Y.map(n=>{const o=f[n.key];if(W(o)||!o.every(h=>typeof h=="string"))return;let u;return n.key==="selectedOwners"?o.length>1?u=`[${o.map(h=>A(h).name).join(", ")}]`:u=A(o[0]).name:u=B(o),`${n.facet}: ${u}`}).filter(n=>!!n),w=[f?.selectedLabels?.map(n=>`metadata.labels.${n.key}: ${B(n.value)}`),f?.selectedAnnotations?.map(n=>`metadata.annotations.${n.key}: ${B(n.value)}`),f?.selectedOtherFilters?.map(n=>`${n.key}: ${B(n.value)}`)].flat();return[...v,...w]}),g=$(i),p=$(m);return{includeFilterDisplay:g,excludeFilterDisplay:p}},ke=({includeFilterName:i,excludeFilterName:m,errorPath:$="filtersStep",disabled:g})=>{const p=Fe(),{setValue:L,formState:f,trigger:v,control:w,getValues:n}=ge(),[o,u]=pe(0),[h,G]=fe("soundcheck-show-preview",!0),M=Z(ee),{fields:V,insert:Q,remove:X}=K({control:w,name:i}),{fields:D,insert:q,remove:H}=K({control:w,name:m}),F=he(()=>o===0?i:m,[i,m,o]),T=n(i),I=n(m),x=F===m?I:T,E=(r,t)=>a=>{L(F,[...x.slice(0,t),{...x[t],[r]:a??[]},...x.slice(t+1)]),v()},J=r=>()=>{o===0?Q(r,P()):q(r,P()),v()},_=r=>()=>{o===0?X(r):H(r),v()},{includeFilterDisplay:C,excludeFilterDisplay:k}=xe({includeFilterValue:T,excludeFilterValue:I}),O=de.get(f.errors,$,void 0);return l(y,{children:[l(s,{variant:"body2",children:[e("strong",{children:"Note:"})," For performance reasons, filter facets selected for inclusion cannot be used for exclusion and vice versa."]}),m&&l(y,{children:[e(ie,{className:p.divider}),e(b,{className:p.selectionTabs,children:l(re,{value:o,onChange:(r,t)=>u(t),children:[e(S,{label:"Include Filters","aria-label":"include filters"}),e(S,{label:"Exclude Filters","aria-label":"exclude filters"})]})})]}),l(c,{container:!0,spacing:4,children:[(o===0?V:D).map((r,t)=>l(c,{item:!0,container:!0,className:p.filterContainer,spacing:2,children:[Y.map(a=>e(c,{item:!0,xs:12,sm:6,md:4,children:a.key==="selectedOwners"?e(ue,{facet:a.facet,label:a.label,values:x[t][a.key].map(d=>({label:A(d).name,value:d})),onChange:d=>E(a.key,t)(d?.map(({value:U})=>U)),disabled:g,filter:ce({kind:["group"]},me(M))}):e(ye,{...a,values:x[t][a.key],onChange:E(a.key,t),disabled:g})},`${r.id}|${a.key}`)),l(c,{item:!0,xs:12,sm:6,md:4,children:[e(R,{title:"Label",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(N,{name:`${F}.${t}.selectedLabels`,title:"Label Filter"})]}),l(c,{item:!0,xs:12,sm:6,md:4,children:[e(R,{title:"Annotation",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(N,{name:`${F}.${t}.selectedAnnotations`,title:"Annotation Filter"})]}),l(c,{item:!0,xs:12,sm:6,md:4,children:[e(R,{title:"Other",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(N,{name:`${F}.${t}.selectedOtherFilters`,title:"Other Catalog Filter",validateKey:ve})]}),l(c,{item:!0,container:!0,spacing:1,children:[(o===0?V:D).length!==1&&e(c,{item:!0,children:e(j,{startIcon:e(se,{}),onClick:_(t),disabled:g,variant:"outlined",size:"small",color:"secondary",children:"Remove"})}),e(c,{item:!0,children:e(j,{startIcon:e(oe,{}),onClick:J(t+1),disabled:g,variant:"outlined",size:"small",color:"primary",children:"Add OR Condition"})})]})]},r.id)),l(c,{item:!0,xs:12,children:[l(le,{className:`${p.filterDisplayBox} ${O?.message?p.error:""}`,elevation:0,children:[l(b,{flex:1,overflow:"auto",children:[l(b,{display:"flex",flexWrap:"wrap",alignItems:"center",style:{overflowX:"auto",overflowY:"hidden"},children:[e(s,{style:{marginRight:4,marginBottom:4},variant:"subtitle2",component:"span",children:"Include:"}),C.map((r,t)=>l(y,{children:[C.length>1&&t===0&&e(s,{style:{marginBottom:4},variant:"body2",children:"("}),r.length>0&&t>0&&e(s,{style:{marginBottom:4},variant:"body2",children:") or ("}),r.map((a,d)=>l(y,{children:[e(z,{size:"small",label:a,style:{marginBottom:4,marginRight:4,marginLeft:4}},a),d<r.length-1&&e(s,{style:{marginBottom:4},variant:"body2",children:"and"})]})),C.length>1&&t===C.length-1&&e(s,{style:{marginBottom:4},variant:"body2",children:")"})]}))]}),k.flat().length>0&&l(b,{display:"flex",flexWrap:"wrap",alignItems:"center",style:{overflowX:"auto",overflowY:"hidden"},children:[e(s,{style:{marginRight:4,marginBottom:4},variant:"subtitle2",component:"span",children:"Exclude:"}),k.map((r,t)=>l(y,{children:[k.length>1&&t===0&&e(s,{variant:"body2",children:"("}),r.length>0&&t>0&&e(s,{variant:"body2",children:") or ("}),r.map((a,d)=>l(y,{children:[e(z,{size:"small",label:a,style:{marginBottom:4,marginRight:4,marginLeft:4}},a),d<r.length-1&&e(s,{variant:"body2",children:"and"})]})),k.length>1&&t===k.length-1&&e(s,{variant:"body2",children:")"})]}))]})]}),e(s,{style:{marginLeft:10},variant:"subtitle2",component:"div",children:"Preview"}),e(b,{children:e(ne,{checked:h,onChange:()=>{G(!h)},inputProps:{"aria-label":"toggle entity preview"}})})]}),e(b,{marginBottom:2,children:O?.message&&e(ae,{error:!0,children:O?.message})}),h&&e(be,{includeFilter:T,excludeFilter:I})]})]})]})};export{ke as FilterComponent};
1
+ import{jsxs as o,Fragment as V,jsx as e}from"react/jsx-runtime";import{parseEntityRef as L}from"@backstage/catalog-model";import{useApi as Z,configApiRef as ee}from"@backstage/core-plugin-api";import{makeStyles as te,Typography as B,Divider as ie,Box as x,Tabs as re,Tab as E,Grid as s,Button as S,Paper as le,Switch as oe,FormHelperText as ne}from"@material-ui/core";import ae from"@material-ui/icons/Add";import se from"@material-ui/icons/Remove";import{combineEntityFilterQueries as ce,getGroupFilterFromConfig as me}from"@spotify/backstage-plugin-soundcheck-common";import de,{isEmpty as j}from"lodash";import{useState as pe,useMemo as ue}from"react";import{useFormContext as fe,useFieldArray as R}from"react-hook-form";import he from"react-use/lib/useLocalStorage";import{EntitiesAutocompletePicker as ge}from"../EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js";import{FormFieldLabel as T}from"../FormFieldLabel/FormFieldLabel.esm.js";import{EntityAutocompletePicker as ye}from"./EntityAutocompletePicker.esm.js";import{FilterKeyValueInput as A}from"./FilterKeyValueInput.esm.js";import{FilterPreviewDisplay as Fe}from"./FilterPreviewDisplay.esm.js";import{FilterPreviewTable as be}from"./FilterPreviewTable/FilterPreviewTable.esm.js";import{FILTER_OPTIONS as K,emptyFilters as I}from"./types.esm.js";import{isValidOtherFilterKey as ve}from"./utils.esm.js";const xe=te(t=>({title:{fontWeight:700},filterContainer:{display:"flex",flexWrap:"wrap"},selectionTabs:{marginBottom:t.spacing(2)},divider:{marginTop:t.spacing(2)},filterDisplayBox:{padding:t.spacing(2),paddingLeft:t.spacing(4),border:`1px solid ${t.palette.divider}`,marginBottom:t.spacing(0),display:"flex",alignItems:"center",flex:1},error:{borderColor:t.palette.error.main}})),k=t=>j(t)?"":`${t.length>1?`[${t.join(", ")}]`:t[0]}`,W=({includeFilterValue:t,excludeFilterValue:c})=>{const F=($=[I()])=>$.map(u=>{const h=K.map(i=>{const l=u[i.key];if(j(l)||!l.every(d=>typeof d=="string"))return;let f;return i.key==="selectedOwners"?l.length>1?f=`[${l.map(d=>L(d).name).join(", ")}]`:f=L(l[0]).name:f=k(l),`${i.facet}: ${f}`}).filter(i=>!!i),b=[u?.selectedLabels?.map(i=>`metadata.labels.${i.key}: ${k(i.value)}`),u?.selectedAnnotations?.map(i=>`metadata.annotations.${i.key}: ${k(i.value)}`),u?.selectedOtherFilters?.map(i=>`${i.key}: ${k(i.value)}`)].flat();return[...h,...b]}),p=F(t),m=F(c);return{includeFilterDisplay:p,excludeFilterDisplay:m}},ke=({includeFilterName:t,excludeFilterName:c,errorPath:F="filtersStep",disabled:p})=>{const m=xe(),{setValue:$,formState:u,trigger:h,control:b,getValues:i}=fe(),[l,f]=pe(0),[d,z]=he("soundcheck-show-preview",!0),G=Z(ee),{fields:P,insert:H,remove:M}=R({control:b,name:t}),{fields:D,insert:Q,remove:q}=R({control:b,name:c}),g=ue(()=>l===0?t:c,[t,c,l]),C=i(t),O=i(c),y=g===c?O:C,N=(n,r)=>a=>{$(g,[...y.slice(0,r),{...y[r],[n]:a??[]},...y.slice(r+1)]),h()},J=n=>()=>{l===0?H(n,I()):Q(n,I()),h()},U=n=>()=>{l===0?M(n):q(n),h()},{includeFilterDisplay:_,excludeFilterDisplay:X}=W({includeFilterValue:C,excludeFilterValue:O}),w=de.get(u.errors,F,void 0);return o(V,{children:[o(B,{variant:"body2",children:[e("strong",{children:"Note:"})," For performance reasons, filter facets selected for inclusion cannot be used for exclusion and vice versa."]}),c&&o(V,{children:[e(ie,{className:m.divider}),e(x,{className:m.selectionTabs,children:o(re,{value:l,onChange:(n,r)=>f(r),children:[e(E,{label:"Include Filters","aria-label":"include filters"}),e(E,{label:"Exclude Filters","aria-label":"exclude filters"})]})})]}),o(s,{container:!0,spacing:4,children:[(l===0?P:D).map((n,r)=>o(s,{item:!0,container:!0,className:m.filterContainer,spacing:2,children:[K.map(a=>e(s,{item:!0,xs:12,sm:6,md:4,children:a.key==="selectedOwners"?e(ge,{facet:a.facet,label:a.label,values:y[r][a.key].map(v=>({label:L(v).name,value:v})),onChange:v=>N(a.key,r)(v?.map(({value:Y})=>Y)),disabled:p,filter:ce({kind:["group"]},me(G))}):e(ye,{...a,values:y[r][a.key],onChange:N(a.key,r),disabled:p})},`${n.id}|${a.key}`)),o(s,{item:!0,xs:12,sm:6,md:4,children:[e(T,{title:"Label",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(A,{name:`${g}.${r}.selectedLabels`,title:"Label Filter"})]}),o(s,{item:!0,xs:12,sm:6,md:4,children:[e(T,{title:"Annotation",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(A,{name:`${g}.${r}.selectedAnnotations`,title:"Annotation Filter"})]}),o(s,{item:!0,xs:12,sm:6,md:4,children:[e(T,{title:"Other",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(A,{name:`${g}.${r}.selectedOtherFilters`,title:"Other Catalog Filter",validateKey:ve})]}),o(s,{item:!0,container:!0,spacing:1,children:[(l===0?P:D).length!==1&&e(s,{item:!0,children:e(S,{startIcon:e(se,{}),onClick:U(r),disabled:p,variant:"outlined",size:"small",color:"secondary",children:"Remove"})}),e(s,{item:!0,children:e(S,{startIcon:e(ae,{}),onClick:J(r+1),disabled:p,variant:"outlined",size:"small",color:"primary",children:"Add OR Condition"})})]})]},n.id)),o(s,{item:!0,xs:12,children:[o(le,{className:`${m.filterDisplayBox} ${w?.message?m.error:""}`,elevation:0,children:[e(x,{flex:1,overflow:"auto",children:e(Fe,{includeOrItems:_,excludeOrItems:X})}),e(B,{style:{marginLeft:10},variant:"subtitle2",component:"div",children:"Preview"}),e(x,{children:e(oe,{checked:d,onChange:()=>{z(!d)},inputProps:{"aria-label":"toggle entity preview"}})})]}),e(x,{marginBottom:2,children:w?.message&&e(ne,{error:!0,children:w?.message})}),d&&e(be,{includeFilter:C,excludeFilter:O})]})]})]})};export{ke as FilterComponent,W as getDisplayValues};
2
2
  //# sourceMappingURL=FilterComponent.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as a,Fragment as o,jsx as e}from"react/jsx-runtime";import{Box as h,Typography as t,Chip as g}from"@material-ui/core";const s=({includeOrItems:m,excludeOrItems:r})=>a(o,{children:[a(h,{display:"flex",flexWrap:"wrap",alignItems:"center",style:{overflowX:"auto",overflowY:"hidden"},children:[e(t,{style:{marginRight:4,marginBottom:4},variant:"subtitle2",component:"span",children:"Include:"}),m.map((n,l)=>a(o,{children:[m.length>1&&l===0&&e(t,{style:{marginBottom:4},variant:"body2",children:"("}),n.length>0&&l>0&&e(t,{style:{marginBottom:4},variant:"body2",children:") or ("}),n.map((i,d)=>a(o,{children:[e(g,{size:"small",label:i,style:{marginBottom:4,marginRight:4,marginLeft:4}},i),d<n.length-1&&e(t,{style:{marginBottom:4},variant:"body2",children:"and"})]})),m.length>1&&l===m.length-1&&e(t,{style:{marginBottom:4},variant:"body2",children:")"})]}))]}),r.flat().length>0&&a(h,{display:"flex",flexWrap:"wrap",alignItems:"center",style:{overflowX:"auto",overflowY:"hidden"},children:[e(t,{style:{marginRight:4,marginBottom:4},variant:"subtitle2",component:"span",children:"Exclude:"}),r.map((n,l)=>a(o,{children:[r.length>1&&l===0&&e(t,{variant:"body2",children:"("}),n.length>0&&l>0&&e(t,{variant:"body2",children:") or ("}),n.map((i,d)=>a(o,{children:[e(g,{size:"small",label:i,style:{marginBottom:4,marginRight:4,marginLeft:4}},i),d<n.length-1&&e(t,{variant:"body2",children:"and"})]})),r.length>1&&l===r.length-1&&e(t,{variant:"body2",children:")"})]}))]})]});export{s as FilterPreviewDisplay};
2
+ //# sourceMappingURL=FilterPreviewDisplay.esm.js.map
@@ -1,2 +1,2 @@
1
- import{isEqual as m}from"lodash";import{useMemo as y,useCallback as P,useState as S,useEffect as v}from"react";import{useSearchParams as T}from"react-router-dom";import{getSearchParamValues as u}from"./util.esm.js";const k=()=>{const[t,h]=T(),a=y(()=>u(t,"owners"),[t]),c=y(()=>u(t,"lifecycles"),[t]),r=y(()=>u(t,"types"),[t]),l=y(()=>u(t,"systems"),[t]),i=y(()=>u(t,"certificationStatuses"),[t]),g=P(()=>a.map(e=>({label:e,value:e})),[a]),[n,w]=S(c),[o,E]=S(g()),[d,C]=S(r),[f,b]=S(l),[p,L]=S(i);v(()=>{E(g()),w(c??[]),C(r??[]),b(l??[]),L(i??[])},[a,c,r,l,g,i]);const F=y(()=>{const e={owners:!m(o,a??[]),lifecycles:!m(n,c??[]),types:!m(d,r??[]),systems:!m(f,l??[]),certificationStatus:!m(p,i??[])};return Object.values(e).some(Boolean)},[o,a,n,c,d,r,f,l,p,i]),O=P(()=>{const e=new URLSearchParams(t);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),e.delete("certificationStatuses"),n.length>0&&n.forEach(s=>e.append("lifecycles",s)),o.length>0&&o.forEach(({value:s})=>e.append("owners",s)),d.length>0&&d.forEach(s=>e.append("types",s)),f.length>0&&f.forEach(s=>e.append("systems",s)),p.length>0&&p.forEach(s=>e.append("certificationStatuses",s)),h(e)},[t,n,o,d,f,p,h]);return{handleClearFilters:P(()=>{w([]),E([]),C([]),b([]),L([]);const e=new URLSearchParams(t);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),e.delete("certificationStatuses"),h(e)},[t,h]),handleApplyFilters:O,hasFilterChanges:F,stagedTypes:d,stagedLifecycles:n,stagedSystems:f,stagedOwners:o,stagedCertificationStatuses:p,setStagedTypes:C,setStagedLifecycles:w,setStagedOwners:E,setStagedSystems:b,setStagedCertificationStatuses:L,owners:a,lifecycles:c,types:r,systems:l,certificationStatuses:i}};export{k as useTrackFilterSidebar};
1
+ import{isEqual as S}from"lodash";import{useMemo as a,useCallback as L,useState as g,useEffect as K}from"react";import{useSearchParams as R}from"react-router-dom";import{getSearchParamValues as h}from"./util.esm.js";const U=()=>{const[s,w]=R(),l=a(()=>h(s,"owners"),[s]),c=a(()=>h(s,"lifecycles"),[s]),i=a(()=>h(s,"types"),[s]),n=a(()=>h(s,"systems"),[s]),r=a(()=>h(s,"kinds"),[s]),d=a(()=>h(s,"certificationStatuses"),[s]),k=L(()=>l.map(e=>({label:e,value:e})),[l]),[o,E]=g(c),[p,C]=g(k()),[f,b]=g(i),[y,F]=g(n),[m,P]=g(r),[u,v]=g(d);K(()=>{C(k()),E(c??[]),b(i??[]),F(n??[]),P(r??[]),v(d??[])},[l,c,i,n,r,k,d]);const O=a(()=>{const e=p.map(({value:A})=>A),t={owners:!S(e,l??[]),lifecycles:!S(o,c??[]),types:!S(f,i??[]),systems:!S(y,n??[]),kinds:!S(m,r??[]),certificationStatus:!S(u,d??[])};return Object.values(t).some(Boolean)},[p,l,o,c,f,i,y,n,m,r,u,d]),T=L(()=>{const e=new URLSearchParams(s);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),e.delete("kinds"),e.delete("certificationStatuses"),o.length>0&&o.forEach(t=>e.append("lifecycles",t)),p.length>0&&p.forEach(({value:t})=>e.append("owners",t)),f.length>0&&f.forEach(t=>e.append("types",t)),y.length>0&&y.forEach(t=>e.append("systems",t)),m.length>0&&m.forEach(t=>e.append("kinds",t)),u.length>0&&u.forEach(t=>e.append("certificationStatuses",t)),w(e)},[s,o,p,f,y,m,u,w]);return{handleClearFilters:L(()=>{E([]),C([]),b([]),F([]),P([]),v([]);const e=new URLSearchParams(s);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),e.delete("kinds"),e.delete("certificationStatuses"),w(e)},[s,w]),handleApplyFilters:T,hasFilterChanges:O,stagedTypes:f,stagedLifecycles:o,stagedSystems:y,stagedKinds:m,stagedOwners:p,stagedCertificationStatuses:u,setStagedTypes:b,setStagedLifecycles:E,setStagedOwners:C,setStagedSystems:F,setStagedKinds:P,setStagedCertificationStatuses:v,owners:l,lifecycles:c,types:i,systems:n,kinds:r,certificationStatuses:d}};export{U as useTrackFilterSidebar};
2
2
  //# sourceMappingURL=useTrackFilterSidebar.esm.js.map
@@ -1,2 +1,2 @@
1
- import{TrackCertificationState as l}from"../../graphql/generated/index.esm.js";const p=o=>{const{lifecycles:t,owners:e,types:i,systems:a}=o,s=t?.length?{"spec.lifecycle":t}:void 0,r=e?.length?{"relations.ownedBy":e}:void 0,n=i?.length?{"spec.type":i}:void 0,c=a?.length?{"relations.partOf":a}:void 0;if(s||r||n||c)return{...s,...r,...n,...c}},d={Passed:l.Passed,Failed:l.Failed,"Not Reported":l.NotReported},f=(o,t)=>o.getAll(t).flatMap(e=>e.split(",")).map(e=>e.trim()).filter(Boolean);export{d as CERTIFICATION_STATUS_MAP,f as getSearchParamValues,p as toFilter};
1
+ import{TrackCertificationState as o}from"../../graphql/generated/index.esm.js";const f=i=>{const{lifecycles:t,owners:e,types:l,systems:s,kinds:a}=i,r=t?.length?{"spec.lifecycle":t}:void 0,n=e?.length?{"relations.ownedBy":e}:void 0,d=l?.length?{"spec.type":l}:void 0,c=s?.length?{"relations.partOf":s}:void 0,p=a?.length?{kind:a}:void 0;if(r||n||d||c||p)return{...r,...n,...d,...c,...p}},g={Passed:o.Passed,Failed:o.Failed,"Not Reported":o.NotReported},h=(i,t)=>i.getAll(t).flatMap(e=>e.split(",")).map(e=>e.trim()).filter(Boolean);export{g as CERTIFICATION_STATUS_MAP,h as getSearchParamValues,f as toFilter};
2
2
  //# sourceMappingURL=util.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as r}from"react/jsx-runtime";import{Text as a}from"@backstage/ui";import{Badge as e}from"../Badge/Badge.esm.js";const i=({label:o="Beta"})=>r(e,{bg:"var(--bui-bg-app)",color:"var(--bui-fg-primary)",border:"none",children:r(a,{variant:"body-x-small",children:o})});export{i as FixMeBetaBadge};
2
+ //# sourceMappingURL=FixMeBetaBadge.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as r}from"react/jsx-runtime";import{Button as s}from"@backstage/ui";import{useNavigate as n}from"react-router-dom";const f=({href:i,isDisabled:t,hasShift:e})=>{const o=n();return r(s,{onClick:()=>i&&o(i),isDisabled:t,children:e?"View Fix Progress":"Fix with Fleetshift"})};export{f as FixMeButton};
1
+ import{jsxs as s,jsx as a}from"react/jsx-runtime";import{Button as m}from"@backstage/ui";import{useNavigate as f}from"react-router-dom";import{FixMeBetaBadge as h}from"../FixMeBetaBadge/FixMeBetaBadge.esm.js";const n=({href:i,isDisabled:t,hasShift:e,showBeta:o=!0})=>{const r=f();return s(m,{onClick:()=>i&&r(i),isDisabled:t,children:[e?"View Fix Progress":"Fix with Fleetshift"," ",o&&a(h,{})]})};export{n as FixMeButton};
2
2
  //# sourceMappingURL=FixMeButton.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as n,jsxs as T,Fragment as V}from"react/jsx-runtime";import{makeStyles as v,TextField as z,IconButton as j}from"@material-ui/core";import k from"@material-ui/icons/Clear";import{Autocomplete as D}from"@material-ui/lab";import{useState as F,useMemo as W}from"react";import{ListboxVirtualized as y}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const B=v(l=>({clearIndicator:{marginRight:l.spacing(.5)}})),M=({options:l,onChange:r,value:t,placeholder:d,getOptionLabel:s,disabled:p,fullWidth:u,noOptionsText:m,freeSolo:c=!1,isLoading:g=!1,autoSelect:b=!0,renderOption:I,testId:O,disableCloseOnSelect:f,multiple:o,multipleValue:a,getOptionSelected:S,getOptionDisabled:h})=>{const[C,x]=F(t??""),A=B(),L=W(()=>o?a||[]:t||null,[o,a,t]),P=!o&&t;return n(D,{multiple:o,disableCloseOnSelect:f,options:l,inputValue:C,classes:{clearIndicator:A.clearIndicator},onInputChange:(e,i)=>x(i),onChange:(e,i)=>r(i),value:L,getOptionLabel:s,ListboxComponent:y,disabled:p,fullWidth:u,noOptionsText:m,freeSolo:c,loading:g,closeIcon:null,disableClearable:!0,getOptionSelected:S,getOptionDisabled:h,autoSelect:b,renderOption:I,renderTags:()=>null,"data-testid":O,renderInput:e=>n(z,{...e,placeholder:d,variant:"outlined",margin:"dense",InputProps:{...e.InputProps,endAdornment:P?T(V,{children:[n(j,{onClick:()=>r(""),size:"small",children:n(k,{fontSize:"small"})}),e.InputProps.endAdornment]}):e.InputProps.endAdornment}})})};export{M as ControlledAutocomplete};
1
+ import{jsx as o,jsxs as z,Fragment as T}from"react/jsx-runtime";import{makeStyles as V,TextField as j,IconButton as k}from"@material-ui/core";import D from"@material-ui/core/Popper";import F from"@material-ui/icons/Clear";import{Autocomplete as R}from"@material-ui/lab";import{useState as W,useMemo as w}from"react";import{ListboxVirtualized as y}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const B=V(t=>({clearIndicator:{marginRight:t.spacing(.5)}})),M=t=>o(D,{...t,placement:"top-start"}),U=({options:t,onChange:r,value:n,placeholder:p,getOptionLabel:s,disabled:d,fullWidth:m,noOptionsText:u,freeSolo:c=!1,isLoading:g=!1,autoSelect:b=!0,renderOption:f,testId:I,disableCloseOnSelect:O,multiple:l,multipleValue:a,getOptionSelected:S,getOptionDisabled:h,openUpwards:C=!1})=>{const[x,A]=W(n??""),L=B(),P=w(()=>l?a||[]:n||null,[l,a,n]),v=!l&&n;return o(R,{...C?{PopperComponent:M}:{},multiple:l,disableCloseOnSelect:O,options:t,inputValue:x,classes:{clearIndicator:L.clearIndicator},onInputChange:(e,i)=>A(i),onChange:(e,i)=>r(i),value:P,getOptionLabel:s,ListboxComponent:y,disabled:d,fullWidth:m,noOptionsText:u,freeSolo:c,loading:g,closeIcon:null,disableClearable:!0,getOptionSelected:S,getOptionDisabled:h,autoSelect:b,renderOption:f,renderTags:()=>null,"data-testid":I,renderInput:e=>o(j,{...e,placeholder:p,variant:"outlined",margin:"dense",InputProps:{...e.InputProps,endAdornment:v?z(T,{children:[o(k,{onClick:()=>r(""),size:"small",children:o(F,{fontSize:"small"})}),e.InputProps.endAdornment]}):e.InputProps.endAdornment}})})};export{U as ControlledAutocomplete};
2
2
  //# sourceMappingURL=ControlledAutocomplete.esm.js.map
@@ -1,4 +1,4 @@
1
- import{jsx as m}from"react/jsx-runtime";import{makeStyles as p}from"@material-ui/core";import{dump as a}from"js-yaml";import{useMemo as n}from"react";import{SoundcheckMarkdownContentDeprecated as i}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";const d=p(o=>({markdownBox:{padding:0,margin:0,fontSize:o.typography.body2.fontSize,"& pre":{margin:0}},preBox:{padding:o.spacing(1),fontSize:o.typography.body2.fontSize,margin:0,background:o.palette.background.paper}})),s=({data:o,dataType:r="json"})=>{const e=d(),t=n(()=>r==="json"?JSON.stringify(o,null,2):r==="yaml"?a(o,{noRefs:!0}):"",[o,r]);return t?.length&&t.length>15e4?m("pre",{className:e.preBox,children:t}):m(i,{className:e.markdownBox,content:`\`\`\`${r}
2
- ${t}
3
- \`\`\``})};export{s as FormattedPreview};
1
+ import{jsxs as e,jsx as a}from"react/jsx-runtime";import{ButtonIcon as p}from"@backstage/ui";import{makeStyles as n}from"@material-ui/core";import{RiClipboardLine as m}from"@remixicon/react";import d from"copy-to-clipboard";import{dump as s}from"js-yaml";import{useMemo as l}from"react";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";import{SoundcheckMarkdownContentBUI as c}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";const f=n(o=>({clipboardWrapper:{position:"relative"},clipboardButton:{position:"absolute",top:4,right:4,zIndex:1e3},markdownBox:{padding:0,margin:0,fontSize:o.typography.body2.fontSize,"& pre":{margin:0}},preBox:{padding:o.spacing(1),fontSize:o.typography.body2.fontSize,margin:0,background:o.palette.background.paper}})),g=({data:o,dataType:t="json"})=>{const i=f(),r=l(()=>t==="json"?JSON.stringify(o,null,2):t==="yaml"?s(o,{noRefs:!0}):"",[o,t]);return e("div",{className:i.clipboardWrapper,children:[a(p,{className:i.clipboardButton,icon:a(m,{}),variant:"tertiary","aria-label":"Copy to clipboard",onPress:()=>{d(r)}}),r?.length&&r.length>15e4?a("pre",{className:i.preBox,children:r}):a(c,{className:i.markdownBox,content:`\`\`\`${t}
2
+ ${r}
3
+ \`\`\``})]})};export{g as FormattedPreview};
4
4
  //# sourceMappingURL=FormattedPreview.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as a,jsx as e,Fragment as c}from"react/jsx-runtime";import{useApi as g}from"@backstage/core-plugin-api";import{entityPresentationApiRef as x}from"@backstage/plugin-catalog-react";import{Flex as h,Card as y,Text as s,TagGroup as R,Box as v,Button as p}from"@backstage/ui";import{makeStyles as S}from"@material-ui/core";import{RiUserLine as d}from"@remixicon/react";import{isEmpty as f}from"lodash";import{ListBox as b,ListBoxItem as C}from"react-aria-components";import{GroupTag as T}from"./GroupTag.esm.js";const u=S(()=>({historyArea:{width:"36rem",marginTop:"var(--bui-space-3)"},historyCard:{padding:"var(--bui-space-3)",maxHeight:"12rem",overflow:"auto"},historyItem:{marginBottom:"var(--bui-space-0_5)",display:"flex",alignItems:"center"}})),k=({groupRef:n,selectRef:i,parentRef:o,childRef:t})=>{const r=u(),l=g(x),m=l.forEntity(n);return a(C,{textValue:m.snapshot.primaryTitle,className:r.historyItem,children:[e(p,{iconStart:e(d,{}),variant:"tertiary",onClick:()=>i(n),style:{paddingLeft:0},children:m.snapshot.primaryTitle}),o&&a(c,{children:[e(s,{children:"child of"})," ",e(p,{iconStart:e(d,{}),variant:"tertiary",onClick:()=>i(o),children:l.forEntity(o).snapshot.primaryTitle})]}),t&&a(c,{children:[e(s,{children:"parent of"})," ",e(p,{iconStart:e(d,{}),variant:"tertiary",onClick:()=>i(t),children:l.forEntity(t).snapshot.primaryTitle})]})]})},A=({previouslySelectedGroups:n,history:i,selectRef:o})=>{const t=u();return a(h,{direction:"column",gap:"3",className:t.historyArea,children:[!f(n)&&a(y,{className:t.historyCard,children:[e(s,{weight:"bold",children:"Previously Selected"}),e(R,{"aria-label":"Previously Selected Groups",selectionMode:"single",children:n.filter(r=>!!r).map(r=>e(T,{groupRef:r,handleClick:o},r))})]}),e(y,{className:t.historyCard,children:e(h,{direction:"column",gap:"1",children:f(i)?e(v,{style:{textAlign:"center",padding:"3rem 0"},children:e(s,{variant:"body-large",children:"No group selection history"})}):a(c,{children:[e(s,{weight:"bold",children:"History"}),e(b,{"aria-label":"Selection History",children:i.map((r,l)=>e(k,{selectRef:o,groupRef:r.ref,parentRef:r.parent,childRef:r.child},`${r.ref}-${l}`))})]})})})]})};export{A as GroupSelectionHistory};
1
+ import{jsxs as l,jsx as e,Fragment as s}from"react/jsx-runtime";import{Flex as p,Card as f,Text as n,TagGroup as v,Box as R,Button as d}from"@backstage/ui";import{makeStyles as S}from"@material-ui/core";import{RiUserLine as m}from"@remixicon/react";import{isEmpty as y}from"lodash";import{ListBox as b,ListBoxItem as C}from"react-aria-components";import{useEntityPrimaryTitle as h}from"../../hooks/catalog/useEntityPrimaryTitle.esm.js";import{GroupTag as k}from"./GroupTag.esm.js";const u=S(()=>({historyArea:{width:"36rem",marginTop:"var(--bui-space-3)"},historyCard:{padding:"var(--bui-space-3)",maxHeight:"12rem",overflow:"auto"},historyItem:{marginBottom:"var(--bui-space-0_5)",display:"flex",alignItems:"center"}})),B=({groupRef:a,selectRef:t,parentRef:o,childRef:i})=>{const r=u(),c=h(a),g=h(o),x=h(i);return l(C,{textValue:c,className:r.historyItem,children:[e(d,{iconStart:e(m,{}),variant:"tertiary",onClick:()=>t(a),style:{paddingLeft:0},children:c}),o&&l(s,{children:[e(n,{children:"child of"})," ",e(d,{iconStart:e(m,{}),variant:"tertiary",onClick:()=>t(o),children:g})]}),i&&l(s,{children:[e(n,{children:"parent of"})," ",e(d,{iconStart:e(m,{}),variant:"tertiary",onClick:()=>t(i),children:x})]})]})},G=({previouslySelectedGroups:a,history:t,selectRef:o})=>{const i=u();return l(p,{direction:"column",gap:"3",className:i.historyArea,children:[!y(a)&&l(f,{className:i.historyCard,children:[e(n,{weight:"bold",children:"Previously Selected"}),e(v,{"aria-label":"Previously Selected Groups",selectionMode:"single",children:a.filter(r=>!!r).map(r=>e(k,{groupRef:r,handleClick:o},r))})]}),e(f,{className:i.historyCard,children:e(p,{direction:"column",gap:"1",children:y(t)?e(R,{style:{textAlign:"center",padding:"3rem 0"},children:e(n,{variant:"body-large",children:"No group selection history"})}):l(s,{children:[e(n,{weight:"bold",children:"History"}),e(b,{"aria-label":"Selection History",children:t.map((r,c)=>e(B,{selectRef:o,groupRef:r.ref,parentRef:r.parent,childRef:r.child},`${r.ref}-${c}`))})]})})})]})};export{G as GroupSelectionHistory};
2
2
  //# sourceMappingURL=GroupSelectionHistory.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as r,jsx as e,Fragment as D}from"react/jsx-runtime";import{useApi as F}from"@backstage/core-plugin-api";import{entityPresentationApiRef as M,useEntityPresentation as O}from"@backstage/plugin-catalog-react";import{Button as w,Flex as p,TextField as I,ButtonIcon as U,Box as y,Card as $,Text as l,Skeleton as G,TagGroup as A}from"@backstage/ui";import{makeStyles as q}from"@material-ui/core";import{RiUserLine as z,RiSearchLine as J,RiHistoryLine as K}from"@remixicon/react";import{sortBy as N,isEmpty as C,uniq as H}from"lodash";import{useState as k,useCallback as Q,useMemo as S}from"react";import{DialogTrigger as V,Popover as W,Dialog as X}from"react-aria-components";import{useGroupHierarchy as Y}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{getAllOwnedEntityCount as Z}from"../../utils/getAllOwnedEntityCount.esm.js";import{GroupSelectionHistory as _}from"./GroupSelectionHistory.esm.js";import{GroupSelectList as ee}from"./GroupSelectList.esm.js";import{GroupTag as P}from"./GroupTag.esm.js";import{useGroupHistory as re}from"./useGroupHistory.esm.js";import{usePreviousSelectedGroups as ie}from"./usePreviousSelectedGroups.esm.js";const E=q(()=>({dialog:{padding:"var(--bui-space-3)",backgroundColor:"var(--bui-bg-popover)",border:"1px solid var(--bui-border)",borderRadius:"var(--bui-radius-2)"},buttonArea:{marginTop:"var(--bui-space-2)"},selectedCard:{padding:"var(--bui-space-3)",gap:"var(--bui-space-2)",width:"36rem",margin:"var(--bui-space-3) 0"},relatedGroups:{marginTop:"var(--bui-space-2)"},tagArea:{height:"8rem",width:"16rem",overflow:"auto"}})),oe=({groupRef:o,onSelect:b})=>{const d=E(),{primaryTitle:i,secondaryTitle:f}=O(o),{isLoading:n,data:v}=Y(o,{includeParent:!0}),t=v?.[o],m=S(()=>Z(t),[t]),h=S(()=>{const a=t?.children??{};return N(Object.values(a).map(c=>({ref:c.entityRef,type:c.type})),"ref")},[t?.children]),u=S(()=>C(h)?[]:H(h.map(a=>a.ref)),[h]),g=S(()=>C(t?.parents)?[]:N(H(t.parents),a=>a),[t?.parents]);return r(y,{children:[r($,{className:d.selectedCard,children:[e(l,{variant:"body-medium",color:"secondary",children:"Currently Selected"}),r(p,{direction:"column",gap:"0",children:[e(l,{variant:"body-large",weight:"bold",children:i}),e(l,{variant:"body-medium",color:"secondary",children:f})]}),r(p,{gap:"0",direction:"column",children:[r(p,{gap:"1",align:"center",children:[r(l,{variant:"body-medium",children:[i," directly owns:"]}),n?e(G,{height:"1rem"}):r(l,{variant:"body-medium",color:"secondary",children:[u.length," ",u.length===1?"entity":"entities"]})]}),r(p,{gap:"1",align:"center",children:[r(l,{variant:"body-medium",children:[i," and it's subgroups owns:"]}),n?e(G,{height:"1rem"}):r(l,{variant:"body-medium",color:"secondary",children:[m," ",m===1?"entity":"entities"]})]})]})]}),r(p,{className:d.relatedGroups,children:[r(y,{style:{flex:1},children:[e(l,{color:"secondary",children:"Parent Groups"}),r(y,{className:d.tagArea,children:[n&&e(G,{width:"10rem"}),!n&&C(g)?e(l,{variant:"body-small",children:"No parent groups."}):e(A,{selectionMode:"single","aria-label":"Parent Groups",children:g.map(a=>e(P,{groupRef:a,handleClick:c=>b(c,o)},`${a}-parent`))})]})]}),r(y,{style:{flex:1},children:[e(l,{color:"secondary",children:"Child Groups"}),r(y,{className:d.tagArea,children:[n&&e(G,{width:"10rem"}),!n&&C(u)?e(l,{variant:"body-small",children:"No child groups."}):e(A,{selectionMode:"single","aria-label":"Child Groups",children:u.map(a=>e(P,{groupRef:a,handleClick:c=>b(c,void 0,o)},`${a}-child`))})]})]})]})]})},te=({selectedGroupRef:o,updateGroupRef:b})=>{const d=E(),[i,f]=k(o),[n,v]=k(""),[t,m]=k(!1),h=F(M),u=o?h.forEntity(o).snapshot.primaryTitle:void 0,{addGroupHistory:g,history:a}=re(),{addGroup:c,groupEntityRefs:B}=ie(),R=Q((s,x,T)=>{f(s),v(""),g(s,x,T)},[g]),L=!t&&(!i||n),j=!t&&i&&!n;return r(V,{onOpenChange:s=>{s&&o&&o!==i&&f(o),t&&m(!1)},children:[e(w,{variant:"secondary",iconStart:e(z,{}),children:u??"Select Group"}),e(W,{placement:"bottom right",children:e(X,{className:d.dialog,children:({close:s})=>{const x=()=>{i&&i!==o&&(b(i),c(i)),s()};return r(D,{children:[r(p,{align:"center",gap:"2",children:[e(I,{placeholder:"Search Groups",value:n,onChange:v,size:"small",icon:e(J,{}),"aria-label":"Search Groups",style:{flex:"1"}}),e(U,{"aria-label":"Show History",variant:"secondary",icon:e(K,{}),onClick:()=>m(!t)})]}),t&&e(_,{previouslySelectedGroups:B??[],history:a??[],selectRef:T=>{R(T),m(!1)}}),L&&e(ee,{searchTerm:n,selectedRef:i,selectRef:R}),j&&e(oe,{groupRef:i,onSelect:R}),r(p,{className:d.buttonArea,justify:"end",children:[e(w,{onClick:s,variant:"tertiary",children:"Close"}),e(w,{onClick:x,isDisabled:!i,children:"Apply"})]})]})}})})]})};export{te as GroupSelectorBUI};
1
+ import{jsxs as r,jsx as e,Fragment as D}from"react/jsx-runtime";import{useEntityPresentation as E}from"@backstage/plugin-catalog-react";import{Button as x,Flex as d,TextField as j,ButtonIcon as F,Box as h,Card as O,Text as l,Skeleton as L}from"@backstage/ui";import{makeStyles as I}from"@material-ui/core";import{RiUserLine as U,RiSearchLine as q,RiHistoryLine as z}from"@remixicon/react";import{sortBy as k,isEmpty as w,uniq as A}from"lodash";import{useState as T,useCallback as M,useMemo as v}from"react";import{DialogTrigger as $,Popover as J,Dialog as K}from"react-aria-components";import{useEntityPrimaryTitle as Q}from"../../hooks/catalog/useEntityPrimaryTitle.esm.js";import{useGroupHierarchy as V}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{getAllOwnedEntityCount as W}from"../../utils/getAllOwnedEntityCount.esm.js";import{GroupSelectionHistory as X}from"./GroupSelectionHistory.esm.js";import{GroupSelectList as Y}from"./GroupSelectList.esm.js";import{GroupTagsDisplay as H}from"./GroupTagsDisplay.esm.js";import{useGroupHistory as Z}from"./useGroupHistory.esm.js";import{usePreviousSelectedGroups as _}from"./usePreviousSelectedGroups.esm.js";const N=I(()=>({dialog:{padding:"var(--bui-space-3)",backgroundColor:"var(--bui-bg-popover)",border:"1px solid var(--bui-border)",borderRadius:"var(--bui-radius-2)"},buttonArea:{marginTop:"var(--bui-space-2)"},selectedCard:{padding:"var(--bui-space-3)",gap:"var(--bui-space-2)",width:"36rem",margin:"var(--bui-space-3) 0"},relatedGroups:{marginTop:"var(--bui-space-2)"},tagArea:{minHeight:"8rem",width:"16rem"}})),ee=({groupRef:t,onSelect:y})=>{const c=N(),{primaryTitle:o,secondaryTitle:g}=E(t),{isLoading:n,data:f}=V(t,{includeParent:!0}),i=f?.[t],p=v(()=>W(i),[i]),u=v(()=>{const a=i?.children??{};return k(Object.values(a).map(b=>({ref:b.entityRef,type:b.type})),"ref")},[i?.children]),m=v(()=>w(u)?[]:A(u.map(a=>a.ref)),[u]),G=v(()=>w(i?.parents)?[]:k(A(i.parents),a=>a),[i?.parents]);return r(h,{children:[r(O,{className:c.selectedCard,children:[e(l,{variant:"body-medium",color:"secondary",children:"Currently Selected"}),r(d,{direction:"column",gap:"0",children:[e(l,{variant:"body-large",weight:"bold",children:o}),e(l,{variant:"body-medium",color:"secondary",children:g})]}),r(d,{gap:"0",direction:"column",children:[r(d,{gap:"1",align:"center",children:[r(l,{variant:"body-medium",children:[o," directly owns:"]}),n?e(L,{height:"1rem"}):r(l,{variant:"body-medium",color:"secondary",children:[m.length," ",m.length===1?"entity":"entities"]})]}),r(d,{gap:"1",align:"center",children:[r(l,{variant:"body-medium",children:[o," and it's subgroups owns:"]}),n?e(L,{height:"1rem"}):r(l,{variant:"body-medium",color:"secondary",children:[p," ",p===1?"entity":"entities"]})]})]})]}),r(d,{className:c.relatedGroups,children:[r(h,{style:{flex:1},children:[e(l,{color:"secondary",children:"Parent Groups"}),e(h,{className:c.tagArea,children:e(H,{groups:G,onSelect:a=>y(a,t),type:"parent",isLoading:n})})]}),r(h,{style:{flex:1},children:[e(l,{color:"secondary",children:"Child Groups"}),e(h,{className:c.tagArea,children:e(H,{groups:m,onSelect:a=>y(a,void 0,t),type:"child",isLoading:n})})]})]})]})},re=({selectedGroupRef:t,updateGroupRef:y})=>{const c=N(),[o,g]=T(t),[n,f]=T(""),[i,p]=T(!1),u=Q(t),{addGroupHistory:m,history:G}=Z(),{addGroup:a,groupEntityRefs:b}=_(),S=M((s,C,R)=>{g(s),f(""),m(s,C,R)},[m]),P=!i&&(!o||n),B=!i&&o&&!n;return r($,{onOpenChange:s=>{s&&t&&t!==o&&g(t),i&&p(!1)},children:[e(x,{variant:"secondary",iconStart:e(U,{}),children:u??"Select Group"}),e(J,{placement:"bottom right",children:e(K,{className:c.dialog,children:({close:s})=>{const C=()=>{o&&o!==t&&(y(o),a(o)),s()};return r(D,{children:[r(d,{align:"center",gap:"2",children:[e(j,{placeholder:"Search Groups",value:n,onChange:f,size:"small",icon:e(q,{}),"aria-label":"Search Groups",style:{flex:"1"}}),e(F,{"aria-label":"Show History",variant:"secondary",icon:e(z,{}),onClick:()=>p(!i)})]}),i&&e(X,{previouslySelectedGroups:b??[],history:G??[],selectRef:R=>{S(R),p(!1)}}),P&&e(Y,{searchTerm:n,selectedRef:o,selectRef:S}),B&&e(ee,{groupRef:o,onSelect:S}),r(d,{className:c.buttonArea,justify:"end",children:[e(x,{onClick:s,variant:"tertiary",children:"Close"}),e(x,{onClick:C,isDisabled:!o,children:"Apply"})]})]})}})})]})};export{re as GroupSelectorBUI};
2
2
  //# sourceMappingURL=GroupSelectorBUI.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as r,jsxs as s}from"react/jsx-runtime";import{Skeleton as l,Text as a,TagGroup as n}from"@backstage/ui";import{isEmpty as m}from"lodash";import{GroupTag as d}from"./GroupTag.esm.js";import{ListViewMode as g}from"./ListViewMode.esm.js";const c=10,u=({groups:o,onSelect:t,type:e,isLoading:i})=>i?r(l,{width:"10rem"}):m(o)?s(a,{variant:"body-small",children:["No ",e," groups."]}):o.length>=c?r(g,{groups:o,onSelect:t,type:e}):r(n,{selectionMode:"single","aria-label":`${e==="parent"?"Parent":"Child"} Groups`,children:o.map(p=>r(d,{groupRef:p,handleClick:t},`${p}-${e}`))});export{u as GroupTagsDisplay};
2
+ //# sourceMappingURL=GroupTagsDisplay.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as m,jsx as t}from"react/jsx-runtime";import{useApi as d}from"@backstage/core-plugin-api";import{entityPresentationApiRef as x}from"@backstage/plugin-catalog-react";import{Box as c,SearchField as y,Text as T,TagGroup as b}from"@backstage/ui";import{makeStyles as v}from"@material-ui/core";import{useState as L,useMemo as u}from"react";import{GroupTag as $}from"./GroupTag.esm.js";const w=v(()=>({tagList:{height:"8rem",overflow:"auto",marginTop:"var(--bui-space-2)"},verticalTagGroup:{"& .bui-TagList":{display:"flex",flexDirection:"column !important",flexWrap:"nowrap !important",alignItems:"flex-start !important",gap:"var(--bui-space-1)"}}})),C=({groups:n,onSelect:g,type:a})=>{const s=w(),[e,f]=L(""),l=d(x),o=u(()=>n.map(r=>({ref:r,name:l.forEntity(r).snapshot.primaryTitle})),[n,l]),i=u(()=>{if(!e)return o;const r=e.toLowerCase();return o.filter(({name:h})=>{const p=h.toLowerCase();return e.length<=1?p.startsWith(r):p.includes(r)})},[o,e]);return m(c,{children:[t(y,{value:e,onChange:f,"aria-label":`Search ${a} groups`}),m(T,{variant:"body-small",color:"secondary",children:[i.length," ",i.length===1?"group":"groups"]}),t(c,{className:`${s.tagList} ${s.verticalTagGroup}`,children:t(b,{selectionMode:"single","aria-label":`${a==="parent"?"Parent":"Child"} Groups List`,children:i.map(({ref:r})=>t($,{groupRef:r,handleClick:g},`${r}-${a}`))})})]})};export{C as ListViewMode};
2
+ //# sourceMappingURL=ListViewMode.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as s,jsx as e}from"react/jsx-runtime";import{Box as c,SearchField as l,Button as m}from"@backstage/ui";import{makeStyles as p}from"@material-ui/core";import{RiAddLine as u}from"@remixicon/react";import{useNavigate as d}from"react-router-dom";const f=p(()=>({actionBar:{gap:"var(--bui-space-2)",display:"flex",alignItems:"center",justifyContent:"end"}})),h=({searchValue:a,setSearchValue:r,createHref:t,canCreate:i})=>{const o=f(),n=d();return s(c,{className:o.actionBar,children:[e(l,{value:a,onChange:r,"aria-label":"Search Name"}),e(m,{isDisabled:!i,onClick:()=>n(t),iconStart:e(u,{}),children:"Create"})]})};export{h as ListPageCustomActions};
1
+ import{jsxs as r,jsx as t}from"react/jsx-runtime";import{Flex as m,TagGroup as d,Tag as g,Box as p,SearchField as u,Button as f}from"@backstage/ui";import{makeStyles as h}from"@material-ui/core";import{RiAddLine as S}from"@remixicon/react";import{useNavigate as v}from"react-router-dom";import{FilterMenu as C}from"../FilterMenu/FilterMenu.esm.js";const x=h(()=>({actionBar:{gap:"var(--bui-space-2)",display:"flex",alignItems:"center",justifyContent:"end"}})),T=({searchValue:l,setSearchValue:i,createHref:s,canCreate:c,filterProps:e})=>{const o=x(),n=v();return r(m,{align:"center",gap:"2",children:[e&&e.selectedTags.length>0&&t(d,{"aria-label":"Selected Filters",items:e.selectedTags,onRemove:e.onRemoveTag,children:e.selectedTags.map(a=>t(g,{id:a.value,children:a.label},a.value))}),r(p,{className:o.actionBar,children:[e&&t(C,{filters:e.filters,selected:e.selected,setSelected:e.setSelected}),t(u,{value:l,onChange:i,"aria-label":"Search Name"}),t(f,{isDisabled:!c,onClick:()=>n(s),iconStart:t(S,{}),children:"Create"})]})]})};export{T as ListPageCustomActions};
2
2
  //# sourceMappingURL=ListPageCustomActions.esm.js.map