@spotify/backstage-plugin-soundcheck 0.22.5 → 0.23.1

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 +46 -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{jsx as t,jsxs as m,Fragment as W}from"react/jsx-runtime";import{useRouteRef as T,useApi as A}from"@backstage/core-plugin-api";import{entityPresentationApiRef as Y}from"@backstage/plugin-catalog-react";import{usePermission as _}from"@backstage/plugin-permission-react";import{HeaderPage as q,Flex as K,Container as Q,TableRoot as X,TableHeader as Z,Column as y,TableBody as $,TablePagination as ee}from"@backstage/ui";import{makeStyles as te}from"@material-ui/core";import{soundcheckCheckCreatePermission as re}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as oe,isEmpty as P}from"lodash";import{useState as k,useMemo as N}from"react";import{useSearchParams as ie}from"react-router-dom";import ne from"react-use/lib/useDebounce";import{soundcheckApiRef as ae}from"../../api.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../hooks/graphqlKeys.esm.js";import{useGetChecks as se}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePagination as me}from"../../hooks/usePagination.esm.js";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{useProfileImages as ce}from"../../hooks/catalog/useProfileImages.esm.js";import{useImportChecks as pe}from"../../hooks/checks/useImportChecks.esm.js";import{useSearchNameOwner as le}from"../../hooks/useSearchNameOwner.esm.js";import{checkTemplatesRouteRef as fe,checkDetailsRouteRef as de}from"../../routes.esm.js";import{exportChecks as ge}from"../../utils/export.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as he}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import{EmptyStateNoChecks as ue}from"../EmptyState/EmptyStateNoChecks.esm.js";import{ImportExportPanelBUI as we}from"../ImportExportPanel/ImportExportPanelBUI.esm.js";import"../ImportExportPanel/ImportExportPanelDeprecated.esm.js";import{ListPageCustomActions as ye}from"../ListPageCustomActions/ListPageCustomActions.esm.js";import{LoadingTableSkeleton as Pe}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import"../Menus/SimpleMenu.esm.js";import{useCheckActions as ke}from"../Menus/useCheckActions.esm.js";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"uuid";import"../CampaignPage/CampaignActionsContext.esm.js";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import{TableRowWithOwner as Ce}from"../TableRowWithOwner/TableRowWithOwner.esm.js";const L=10,Re=["name","owner"],Se=({check:o,profileImageMap:a})=>{const c=T(de),i=ke(o);return t(Ce,{ownerEntityRef:o.ownerEntityRef??"",href:c({checkId:o.id}),profileImageSrc:a[o.ownerEntityRef??""],menuActions:i,name:o.name??o.id,description:o.description??"",cells:[]})},Ee=te(()=>({container:{marginBottom:"var(--bui-space-12)"}})),Ie=()=>{const o=Ee(),[a,c]=ie(),[i,z]=k(()=>a.get("search")??""),[d,B]=k(()=>a.get("sortDirection")==="descending"?"descending":"ascending"),[s,v]=k(()=>{const e=a.get("sort");return e&&Re.includes(e)?e:""}),{isLoading:p,data:C}=se({}),g=N(()=>C?.edges?.map(e=>e.node)??[],[C?.edges]),{loading:R,allowed:S}=_({permission:re}),U=T(fe),{profileImageMap:D}=ce(g.filter(e=>e.ownerEntityRef).map(e=>e.ownerEntityRef)),E=A(Y),h=le(g,i),l=N(()=>{if(!s)return h;const e=oe(h,r=>s==="owner"?r.ownerEntityRef?E.forEntity(r.ownerEntityRef).snapshot.primaryTitle:-1:s==="type"?r.type?r.type:"default":r?.name?.toLowerCase()??r.id.toLowerCase());return d==="descending"&&e.reverse(),e},[s,h,d,E]),{mutateAsync:H}=pe(),M=async e=>H(e),O=A(ae),F=async()=>{const e=await O.getChecks({orderAlphabetical:"asc"});return ge(e.edges.map(r=>r.node))},{paginatedItems:u,reset:I,paginationProps:n}=me({pageParam:"perPage",defaultPageSize:L,items:l});ne(()=>{I();const e=new URLSearchParams(a.toString());i?e.set("search",i):e.delete("search"),c(e,{replace:!0})},300,[i]);const V=({direction:e,column:r})=>{const w=String(r);v(w),B(e),I();const f=new URLSearchParams(a);w?f.set("sort",w):f.delete("sort"),f.set("sortDirection",e),c(f,{replace:!0})},j=p,b=!p&&P(u),G=!p&&!P(u),J=l.length>L;let x=null;return b&&(x=i?t(he,{title:"No checks found",body:"Your current search term did not return any checks. Please try a different search term."}):t(ue,{})),m(W,{children:[t(q,{customActions:m(K,{gap:"2",align:"center",children:[t(we,{resourceType:"check",disableImport:!R&&!S,disableExport:p||P(g),onImport:M,onExport:F}),t(ye,{searchValue:i,setSearchValue:z,canCreate:!R&&S,createHref:U()})]}),title:"Checks"}),m(Q,{className:o.container,children:[j&&t(Pe,{rowCount:10}),b&&x,G&&m(X,{onSortChange:V,sortDescriptor:{direction:d,column:s},children:[m(Z,{children:[t(y,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"82%"},children:"Name"}),t(y,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Check Owner"}),t(y,{id:"actions",style:{width:"3%"}})]}),t($,{children:u.map(e=>t(Se,{check:e,profileImageMap:D??{}},e.id))})]}),J&&t(ee,{totalCount:l.length,offset:n.offset,hasNextPage:n.offset+n.pageSize<(l.length??0),hasPreviousPage:n.offset>0,onNextPage:n.onNextPage,onPreviousPage:n.onPreviousPage,onPageSizeChange:n.onPageSizeChange,pageSize:n.pageSize})]})]})};export{Ie as ChecksListPageBUI};
1
+ import{jsx as t,jsxs as c,Fragment as re}from"react/jsx-runtime";import{useRouteRef as F,useApi as N}from"@backstage/core-plugin-api";import{entityPresentationApiRef as oe}from"@backstage/plugin-catalog-react";import{usePermission as ie}from"@backstage/plugin-permission-react";import{HeaderPage as ne,Flex as se,Container as ae,TableRoot as me,TableHeader as ce,Column as S,TableBody as pe,TablePagination as le}from"@backstage/ui";import{makeStyles as fe}from"@material-ui/core";import{soundcheckCheckCreatePermission as de}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as he,isEmpty as k}from"lodash";import{useState as R,useMemo as p}from"react";import{useSearchParams as ge}from"react-router-dom";import ue from"react-use/lib/useDebounce";import{soundcheckApiRef as we}from"../../api.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../hooks/graphqlKeys.esm.js";import{useGetChecks as ye}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePagination as Pe,DEFAULT_PAGE_SIZE as U}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useFixMe as Se}from"../../hooks/fixMe/useFixMe.esm.js";import"react-use/lib/useAsyncRetry";import{useProfileImages as ke}from"../../hooks/catalog/useProfileImages.esm.js";import{useImportChecks as Re}from"../../hooks/checks/useImportChecks.esm.js";import{useOwnerFilterOptions as Ce,useListPageFilters as Ee}from"../../hooks/filters/useListPageFilters.esm.js";import{useSearchNameOwner as Ie}from"../../hooks/useSearchNameOwner.esm.js";import{checkTemplatesRouteRef as Te,checkDetailsRouteRef as be}from"../../routes.esm.js";import{exportChecks as xe}from"../../utils/export.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Ae}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import{EmptyStateNoChecks as Le}from"../EmptyState/EmptyStateNoChecks.esm.js";import{ImportExportPanelBUI as ve}from"../ImportExportPanel/ImportExportPanelBUI.esm.js";import{ListPageCustomActions as Fe}from"../ListPageCustomActions/ListPageCustomActions.esm.js";import{LoadingTableSkeleton as Ne}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import"../Menus/SimpleMenu.esm.js";import{useCheckActions as Ue}from"../Menus/useCheckActions.esm.js";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"uuid";import"../CampaignPage/CampaignActionsContext.esm.js";import"../CampaignsPage/useArchiveConfirmationModal.esm.js";import{TableRowWithOwner as ze}from"../TableRowWithOwner/TableRowWithOwner.esm.js";const Oe=["name","owner"],Be=({check:r,profileImageMap:s})=>{const l=F(be),i=Ue(r),{hasShift:g}=Se({checkId:r.id,checkName:r.name??""});return t(ze,{ownerEntityRef:r.ownerEntityRef??"",href:l({checkId:r.id}),profileImageSrc:s[r.ownerEntityRef??""],menuActions:i,name:r.name??r.id,description:r.description??"",cells:[],hasShift:g})},Me=fe(()=>({container:{marginBottom:"var(--bui-space-12)"}})),De=()=>{const r=Me(),[s,l]=ge(),[i,g]=R(()=>s.get("search")??""),[u,z]=R(()=>s.get("sortDirection")==="descending"?"descending":"ascending"),[m,O]=R(()=>{const e=s.get("sort");return e&&Oe.includes(e)?e:""}),{isLoading:f,data:C}=ye({}),a=p(()=>C?.edges?.map(e=>e.node)??[],[C?.edges]),{loading:E,allowed:I}=ie({permission:de}),B=F(Te),{profileImageMap:M}=ke(a.filter(e=>e.ownerEntityRef).map(e=>e.ownerEntityRef)),T=N(oe),D=p(()=>a.filter(e=>e.ownerEntityRef).map(e=>e.ownerEntityRef),[a]),b=Ce(D),H=p(()=>[{key:"owners",label:"Owner",options:b,tagLabelPrefix:"owner"}],[b]),{filters:V,selected:j,setSelected:G,selectedTags:_,onRemoveTag:W,filterItems:x,hasActiveFilters:Y}=Ee(H,"checks"),Z=p(()=>x(a,{owners:{getValue:e=>e.ownerEntityRef??null}}),[a,x]),w=Ie(Z,i),d=p(()=>{if(!m)return w;const e=he(w,o=>m==="owner"?o.ownerEntityRef?T.forEntity(o.ownerEntityRef).snapshot.primaryTitle:-1:m==="type"?o.type?o.type:"default":o?.name?.toLowerCase()??o.id.toLowerCase());return u==="descending"&&e.reverse(),e},[m,w,u,T]),{mutateAsync:q}=Re(),J=async e=>q(e),K=N(we),Q=async()=>{const e=await K.getChecks({orderAlphabetical:"asc"});return xe(e.edges.map(o=>o.node))},{paginatedItems:y,reset:A,paginationProps:n}=Pe({pageParam:"perPage",defaultPageSize:U,items:d});ue(()=>{A();const e=new URLSearchParams(s.toString());i?e.set("search",i):e.delete("search"),l(e,{replace:!0})},300,[i]);const X=({direction:e,column:o})=>{const P=String(o);O(P),z(e),A();const h=new URLSearchParams(s);P?h.set("sort",P):h.delete("sort"),h.set("sortDirection",e),l(h,{replace:!0})},$=f,L=!f&&k(y),ee=!f&&!k(y),te=d.length>U;let v=null;return L&&(v=i||Y?t(Ae,{title:"No checks found",body:"Your current search or filter did not return any checks. Please try a different search term or filter."}):t(Le,{})),c(re,{children:[t(ne,{customActions:c(se,{gap:"2",align:"center",children:[t(ve,{resourceType:"check",disableImport:!E&&!I,disableExport:f||k(a),onImport:J,onExport:Q}),t(Fe,{searchValue:i,setSearchValue:g,canCreate:!E&&I,createHref:B(),filterProps:{filters:V,selected:j,setSelected:G,selectedTags:_,onRemoveTag:W}})]}),title:"Checks"}),c(ae,{className:r.container,children:[$&&t(Ne,{rowCount:10}),L&&v,ee&&c(me,{onSortChange:X,sortDescriptor:{direction:u,column:m},children:[c(ce,{children:[t(S,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"82%"},children:"Name"}),t(S,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Check Owner"}),t(S,{id:"actions",style:{width:"3%"}})]}),t(pe,{children:y.map(e=>t(Be,{check:e,profileImageMap:M??{}},e.id))})]}),te&&t(le,{totalCount:d.length,offset:n.offset,hasNextPage:n.offset+n.pageSize<(d.length??0),hasPreviousPage:n.offset>0,onNextPage:n.onNextPage,onPreviousPage:n.onPreviousPage,onPageSizeChange:n.onPageSizeChange,pageSize:n.pageSize})]})]})};export{De as ChecksListPageBUI};
2
2
  //# sourceMappingURL=ChecksListPageBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as r,jsxs as u,Fragment as K}from"react/jsx-runtime";import{useRouteRef as Q}from"@backstage/core-plugin-api";import{Row as W,CellText as T,Flex as _,Box as F,Text as q,TableRoot as J,TableHeader as X,Column as b,TableBody as Y,TablePagination as Z}from"@backstage/ui";import{makeStyles as ee}from"@material-ui/core";import{sortBy as te}from"lodash";import{memo as z,useMemo as g,useState as D,useEffect as re,useCallback as oe}from"react";import{CircularProgressbar as ie}from"react-circular-progressbar";import{useNavigate as se}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"@spotify/backstage-plugin-soundcheck-common";import{useChecks as ae}from"../../hooks/checks/useChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePagination as ne}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as ce}from"../../hooks/useSortSearchParams.esm.js";import{isCheckFailed as le,isCheckAutofixable as me}from"../../hooks/fixMe/useFixMe.esm.js";import"react-use/lib/useAsyncRetry";import{useFeatureFlag as M}from"../../hooks/useFeatureFlag.esm.js";import{trackCheckDetailsRouteRef as de}from"../../routes.esm.js";import{getPercentage as $}from"../../utils/formatters.esm.js";import"../CheckStatusBar/CheckStatusBar.esm.js";import{CheckStatusBarBUI as pe}from"../CheckStatusBar/CheckStatusBarBUI.esm.js";import{CustomCell as ue}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as ge}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import{FixMeCell as he}from"./FixMeCell.esm.js";const fe=ee(()=>({statusBar:{width:"45%"},customCell:{padding:"0 var(--bui-space-3)"},circularProgressbar:{width:"var(--bui-space-7)"}})),E=10,ke=["compliance","name","checks"],v=o=>ke.includes(o),Ce=z(()=>r("svg",{width:"0",height:"0",style:{position:"absolute",visibility:"hidden"},children:r("defs",{children:u("linearGradient",{id:"progressGradient",x1:"1",y1:"0",x2:"0",y2:"1",children:[r("stop",{offset:"0%",stopColor:"var(--bui-fg-warning)"}),r("stop",{offset:"100%",stopColor:"var(--bui-fg-success)"})]})})})),G=(o,i)=>i?.find(c=>c.id===o),L=o=>o?o.numberOfEntities-o.notApplicable-o.exempt:0,Pe=z(({trackId:o,check:i,checkStatuses:c,searchParams:h,showFixMeColumn:l})=>{const P=fe(),n=Q(de),S=se(),m=G(i.id,c),{passPercent:f,applicableChecks:k}=g(()=>{const s=L(m);return{passPercent:$(m?.passed,s),applicableChecks:s}},[m]);return u(W,{onAction:()=>{const s=n({trackId:o,checkId:i.id});S(h?`${s}${h}`:s)},children:[r(T,{leadingIcon:u("div",{className:P.circularProgressbar,title:`${f}%`,children:[r(Ce,{}),r(ie,{value:f,strokeWidth:12,styles:{path:{stroke:"url(#progressGradient)"},trail:{stroke:'rgba(var("--bui-fg-secondary"), 0.25)'}}})]}),title:`${f}%`}),r(T,{title:i.name}),r(ue,{children:u(_,{align:"center",gap:"3",justify:"between",children:[r(F,{children:u(q,{color:"secondary",children:[m?.passed??0," of ",k," checks passing"]})}),r(F,{className:P.statusBar,children:r(pe,{status:m})})]})}),r(he,{status:m,check:i,isColumnVisible:l})]},i.id)}),Se=({trackId:o,checks:i,checkStatuses:c,searchValue:h,levelOrdinal:l})=>{const{updateSortParams:P,searchParams:n}=ce(),S=M("portal"),m=M("portal-ai-fm"),f=n.get("level"),k=l===void 0||f!==null&&String(l)===f,[s,x]=D(()=>{if(k){const e=n.get("sortDirection");if(e==="ascending"||e==="descending")return e}return"descending"}),[C,y]=D(()=>{if(k){const e=n.get("sort");if(e&&v(e))return e}return"compliance"}),U=g(()=>{const e=new URLSearchParams(n.toString());e.set("sort",C),e.set("sortDirection",s),typeof l=="number"?e.set("level",String(l)):e.delete("level");const t=e.toString();return t?`?${t}`:""},[l,n,C,s]);re(()=>{if(!k)return;const e=n.get("sortDirection");(e==="ascending"||e==="descending")&&x(e);const t=n.get("sort");t&&v(t)&&y(t)},[k,n]);const j=oe(({direction:e,column:t})=>{const a=String(t);v(a)&&y(a),x(e),P({sort:v(a)?a:"compliance",sortDirection:e,level:l})},[l,P]),B=g(()=>{if(!h?.length)return i??[];const e=h.toLowerCase();return i?.filter(({name:t})=>t.toLowerCase().includes(e))??[]},[i,h]),d=g(()=>{const e=te([...B],t=>{const a=G(t.id,c);if(C==="compliance"){const V=L(a);return $(a?.passed,V)}return C==="checks"?a?.passed:t.name.toLowerCase()});return s==="descending"&&e.reverse(),e},[B,c,C,s]),{paginatedItems:A,paginationProps:p}=ne({pageParam:"perPage",defaultPageSize:E,items:d}),H=d.length>E,I=g(()=>{const e=new Map;return(c??[]).forEach(t=>e.set(t.id,t)),e},[c]),O=g(()=>d.map(({id:e})=>e),[d]),N=ae(O),R=g(()=>{const e=new Map;return N.forEach(({data:t})=>{t&&e.set(t.id,t)}),e},[N]),w=g(()=>!S||!m?!1:d.some(({id:e})=>{const t=I.get(e),a=R.get(e);return le(t)&&me(a?.rule,a?.type)}),[S,m,d,I,R]);return d?.length?u(K,{children:[u(J,{onSortChange:j,sortDescriptor:{direction:s,column:C},children:[u(X,{children:[r(b,{id:"compliance",allowsSorting:!0,style:{width:"10%"},children:"Compliance"}),r(b,{id:"name",allowsSorting:!0,isRowHeader:!0,children:"Name"}),r(b,{id:"checks",allowsSorting:!0,style:{width:"25%"},children:"Checks"}),r(b,{id:"fix-me",style:{width:w?"25%":0,padding:w?void 0:0}})]}),r(Y,{children:A.map(e=>r(Pe,{trackId:o,check:e,checkStatuses:c,searchParams:U,showFixMeColumn:w},e.id))})]}),H&&r(Z,{totalCount:d.length,offset:p.offset,hasNextPage:p.offset+p.pageSize<(d.length??0),hasPreviousPage:p.offset>0,onNextPage:p.onNextPage,onPreviousPage:p.onPreviousPage,onPageSizeChange:p.onPageSizeChange,pageSize:p.pageSize})]}):r(ge,{title:"No checks",body:"There are no checks found."})};export{Se as ChecksTable};
1
+ import{jsx as r,jsxs as u,Fragment as V}from"react/jsx-runtime";import{useRouteRef as K}from"@backstage/core-plugin-api";import{Row as Q,CellText as R,Flex as W,Box as D,Text as Z,TableRoot as q,TableHeader as J,Column as b,TableBody as X,TablePagination as Y}from"@backstage/ui";import{makeStyles as ee}from"@material-ui/core";import{sortBy as te}from"lodash";import{memo as E,useMemo as g,useState as N,useEffect as re,useCallback as oe}from"react";import{CircularProgressbar as ie}from"react-circular-progressbar";import{useNavigate as se}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"@spotify/backstage-plugin-soundcheck-common";import{useChecks as ae}from"../../hooks/checks/useChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePagination as ne,DEFAULT_PAGE_SIZE as z}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as ce}from"../../hooks/useSortSearchParams.esm.js";import{isCheckFailed as le,isCheckAutofixable as me}from"../../hooks/fixMe/useFixMe.esm.js";import"react-use/lib/useAsyncRetry";import{useFeatureFlag as M}from"../../hooks/useFeatureFlag.esm.js";import{trackCheckDetailsRouteRef as de}from"../../routes.esm.js";import{getPercentage as $}from"../../utils/formatters.esm.js";import{CheckStatusBarBUI as pe}from"../CheckStatusBar/CheckStatusBarBUI.esm.js";import{CustomCell as ue}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as ge}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import{FixMeCell as he}from"./FixMeCell.esm.js";const fe=ee(()=>({statusBar:{width:"45%"},customCell:{padding:"0 var(--bui-space-3)"},circularProgressbar:{width:"var(--bui-space-7)"}})),ke=["compliance","name","checks"],v=o=>ke.includes(o),Ce=E(()=>r("svg",{width:"0",height:"0",style:{position:"absolute",visibility:"hidden"},children:r("defs",{children:u("linearGradient",{id:"progressGradient",x1:"1",y1:"0",x2:"0",y2:"1",children:[r("stop",{offset:"0%",stopColor:"var(--bui-fg-warning)"}),r("stop",{offset:"100%",stopColor:"var(--bui-fg-success)"})]})})})),A=(o,i)=>i?.find(c=>c.id===o),G=o=>o?o.numberOfEntities-o.notApplicable-o.exempt:0,Pe=E(({trackId:o,check:i,checkStatuses:c,searchParams:h,showFixMeColumn:l})=>{const P=fe(),n=K(de),S=se(),m=A(i.id,c),{passPercent:f,applicableChecks:k}=g(()=>{const s=G(m);return{passPercent:$(m?.passed,s),applicableChecks:s}},[m]);return u(Q,{onAction:()=>{const s=n({trackId:o,checkId:i.id});S(h?`${s}${h}`:s)},children:[r(R,{leadingIcon:u("div",{className:P.circularProgressbar,title:`${f}%`,children:[r(Ce,{}),r(ie,{value:f,strokeWidth:12,styles:{path:{stroke:"url(#progressGradient)"},trail:{stroke:'rgba(var("--bui-fg-secondary"), 0.25)'}}})]}),title:`${f}%`}),r(R,{title:i.name}),r(ue,{children:u(W,{align:"center",gap:"3",justify:"between",children:[r(D,{children:u(Z,{color:"secondary",children:[m?.passed??0," of ",k," checks passing"]})}),r(D,{className:P.statusBar,children:r(pe,{status:m})})]})}),r(he,{status:m,check:i,isColumnVisible:l})]},i.id)}),Se=({trackId:o,checks:i,checkStatuses:c,searchValue:h,levelOrdinal:l})=>{const{updateSortParams:P,searchParams:n}=ce(),S=M("portal"),m=M("portal-ai-fm"),f=n.get("level"),k=l===void 0||f!==null&&String(l)===f,[s,x]=N(()=>{if(k){const e=n.get("sortDirection");if(e==="ascending"||e==="descending")return e}return"descending"}),[C,y]=N(()=>{if(k){const e=n.get("sort");if(e&&v(e))return e}return"compliance"}),L=g(()=>{const e=new URLSearchParams(n.toString());e.set("sort",C),e.set("sortDirection",s),typeof l=="number"?e.set("level",String(l)):e.delete("level");const t=e.toString();return t?`?${t}`:""},[l,n,C,s]);re(()=>{if(!k)return;const e=n.get("sortDirection");(e==="ascending"||e==="descending")&&x(e);const t=n.get("sort");t&&v(t)&&y(t)},[k,n]);const U=oe(({direction:e,column:t})=>{const a=String(t);v(a)&&y(a),x(e),P({sort:v(a)?a:"compliance",sortDirection:e,level:l})},[l,P]),I=g(()=>{if(!h?.length)return i??[];const e=h.toLowerCase();return i?.filter(({name:t})=>t.toLowerCase().includes(e))??[]},[i,h]),d=g(()=>{const e=te([...I],t=>{const a=A(t.id,c);if(C==="compliance"){const O=G(a);return $(a?.passed,O)}return C==="checks"?a?.passed:t.name.toLowerCase()});return s==="descending"&&e.reverse(),e},[I,c,C,s]),{paginatedItems:j,paginationProps:p}=ne({pageParam:"perPage",defaultPageSize:z,items:d}),H=d.length>z,T=g(()=>{const e=new Map;return(c??[]).forEach(t=>e.set(t.id,t)),e},[c]),_=g(()=>d.map(({id:e})=>e),[d]),B=ae(_),F=g(()=>{const e=new Map;return B.forEach(({data:t})=>{t&&e.set(t.id,t)}),e},[B]),w=g(()=>!S||!m?!1:d.some(({id:e})=>{const t=T.get(e),a=F.get(e);return le(t)&&me(a?.rule,a?.type)}),[S,m,d,T,F]);return d?.length?u(V,{children:[u(q,{onSortChange:U,sortDescriptor:{direction:s,column:C},children:[u(J,{children:[r(b,{id:"compliance",allowsSorting:!0,style:{width:"10%"},children:"Compliance"}),r(b,{id:"name",allowsSorting:!0,isRowHeader:!0,children:"Name"}),r(b,{id:"checks",allowsSorting:!0,style:{width:"25%"},children:"Checks"}),r(b,{id:"fix-me",style:{width:w?"25%":0,padding:w?void 0:0}})]}),r(X,{children:j.map(e=>r(Pe,{trackId:o,check:e,checkStatuses:c,searchParams:L,showFixMeColumn:w},e.id))})]}),H&&r(Y,{totalCount:d.length,offset:p.offset,hasNextPage:p.offset+p.pageSize<(d.length??0),hasPreviousPage:p.offset>0,onNextPage:p.onNextPage,onPreviousPage:p.onPreviousPage,onPageSizeChange:p.onPageSizeChange,pageSize:p.pageSize})]}):r(ge,{title:"No checks",body:"There are no checks found."})};export{Se as ChecksTable};
2
2
  //# sourceMappingURL=ChecksTable.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as l}from"react/jsx-runtime";import{Flex as o,Card as y,CardBody as R,Text as i,Cell as C}from"@backstage/ui";import{RiShiningFill as x,RiGitMergeFill as F,RiGitPullRequestFill as k,RiErrorWarningFill as S}from"@remixicon/react";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{useCheck as q}from"../../hooks/checks/useCheck.esm.js";import"react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useFixMe as P}from"../../hooks/fixMe/useFixMe.esm.js";import"react-use/lib/useAsyncRetry";import{CustomCell as v}from"../CustomCell/CustomCell.esm.js";import{FixMeButton as h}from"../FixMeButton/FixMeButton.esm.js";import{ProgressBar as w}from"../ProgressBar/ProgressBar.esm.js";import{ViewPullRequests as M}from"../ViewPullRequests/ViewPullRequests.esm.js";import{PULL_REQUEST_STATUSES as r}from"./utils.esm.js";const j=({check:t,status:g,isColumnVisible:f=!0})=>{const{data:s}=q(t.id),{showFixMeButton:a,hasShift:m,pullRequests:n,openPullRequestsCount:d,mergedPullRequestsCount:c,failedPullRequestsCount:p,pullRequestsCount:b,href:u}=P({type:s?.type,rule:s?.rule,checkStatus:g,checkId:t.id,checkName:t.name});return f?e(v,{children:l(o,{align:"center",justify:"end",children:[a&&!n.length&&e(h,{hasShift:m,href:u}),a&&n.length>0&&e(y,{style:{margin:"var(--bui-space-2) 0 var(--bui-space-2)"},children:e(R,{children:l(o,{direction:"column",children:[l(o,{align:"center",gap:"2",children:[e(x,{size:12}),e(i,{weight:"bold",children:"Fixes in progress"})]}),l(o,{align:"center",gap:"2",children:[e(w,{segments:[{key:r.merged.label,value:c,label:r.merged.label,color:r.merged.color},{key:r.open.label,value:d,label:r.open.label,color:r.open.color},{key:r.closed.label,value:p,label:r.closed.label,color:r.closed.color}]}),l(i,{weight:"bold",children:[c,"/",b]})]}),l(o,{gap:"6",children:[l(o,{align:"center",gap:"1",children:[e(F,{size:16,color:r.merged.color}),l(i,{color:"secondary",children:[c," merged"]})]}),l(o,{align:"center",gap:"1",children:[e(k,{size:16,color:r.open.color}),l(i,{color:"secondary",children:[d," open"]})]}),l(o,{align:"center",gap:"1",children:[e(S,{size:16,color:r.closed.color}),l(i,{color:"secondary",children:[p," failed"]})]})]}),l(o,{align:"center",gap:"1",justify:"between",children:[n.length>0&&e(M,{checkName:t.name,pullRequests:n}),e(h,{hasShift:m,href:u})]})]})})})]})}):e(C,{style:{padding:0}})};export{j as FixMeCell};
1
+ import{jsx as e,jsxs as l}from"react/jsx-runtime";import{Flex as o,Card as y,CardBody as C,Text as i,Cell as R}from"@backstage/ui";import{RiShiningFill as x,RiGitMergeFill as F,RiGitPullRequestFill as k,RiErrorWarningFill as S}from"@remixicon/react";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{useCheck as q}from"../../hooks/checks/useCheck.esm.js";import"react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useFixMe as w}from"../../hooks/fixMe/useFixMe.esm.js";import"react-use/lib/useAsyncRetry";import{CustomCell as B}from"../CustomCell/CustomCell.esm.js";import{FixMeBetaBadge as P}from"../FixMeBetaBadge/FixMeBetaBadge.esm.js";import{FixMeButton as u}from"../FixMeButton/FixMeButton.esm.js";import{ProgressBar as M}from"../ProgressBar/ProgressBar.esm.js";import{ViewPullRequests as j}from"../ViewPullRequests/ViewPullRequests.esm.js";import{PULL_REQUEST_STATUSES as r}from"./utils.esm.js";const v=({check:t,status:g,isColumnVisible:f=!0})=>{const{data:s}=q(t.id),{showFixMeButton:a,hasShift:m,pullRequests:n,openPullRequestsCount:d,mergedPullRequestsCount:c,failedPullRequestsCount:p,pullRequestsCount:b,href:h}=w({type:s?.type,rule:s?.rule,checkStatus:g,checkId:t.id,checkName:t.name});return f?e(B,{children:l(o,{align:"center",justify:"end",children:[a&&!n.length&&e(u,{hasShift:m,href:h}),a&&n.length>0&&e(y,{style:{margin:"var(--bui-space-2) 0 var(--bui-space-2)"},children:e(C,{children:l(o,{direction:"column",children:[l(o,{align:"center",justify:"between",children:[l(o,{align:"center",gap:"2",children:[e(x,{size:12}),e(i,{weight:"bold",children:"Fixes in progress"})]}),e(P,{})]}),l(o,{align:"center",gap:"2",children:[e(M,{segments:[{key:r.merged.label,value:c,label:r.merged.label,color:r.merged.color},{key:r.open.label,value:d,label:r.open.label,color:r.open.color},{key:r.closed.label,value:p,label:r.closed.label,color:r.closed.color}]}),l(i,{weight:"bold",children:[c,"/",b]})]}),l(o,{gap:"6",children:[l(o,{align:"center",gap:"1",children:[e(F,{size:16,color:r.merged.color}),l(i,{color:"secondary",children:[c," merged"]})]}),l(o,{align:"center",gap:"1",children:[e(k,{size:16,color:r.open.color}),l(i,{color:"secondary",children:[d," open"]})]}),l(o,{align:"center",gap:"1",children:[e(S,{size:16,color:r.closed.color}),l(i,{color:"secondary",children:[p," failed"]})]})]}),l(o,{align:"center",gap:"1",justify:"between",children:[n.length>0&&e(j,{checkName:t.name,pullRequests:n}),e(u,{hasShift:m,href:h,showBeta:!1})]})]})})})]})}):e(R,{style:{padding:0}})};export{v as FixMeCell};
2
2
  //# sourceMappingURL=FixMeCell.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as r,Fragment as k}from"react/jsx-runtime";import{useRouteRef as v}from"@backstage/core-plugin-api";import{usePermission as R}from"@backstage/plugin-permission-react";import{Box as n,Text as c,Grid as O,Flex as P,Button as w,HeaderPage as Y,Container as J}from"@backstage/ui";import{makeStyles as K}from"@material-ui/core";import{soundcheckCollectorReadPermission as Q,soundcheckCollectorUpdatePermission as X,parseFactRef as Z,asArray as _}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as ee}from"lodash";import{useMemo as te,useCallback as oe,useEffect as ie}from"react";import{useParams as re,useNavigate as ne}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{useConfirmationModal as ae}from"../../hooks/useConfirmationModal.esm.js";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{useGetCollectors as se}from"../../hooks/collectors/useGetCollectors.esm.js";import{useDeleteCollectorConfig as le}from"../../hooks/collectors/useDeleteCollectorConfig.esm.js";import{useLCPReporting as ce}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as me}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationEditRouteRef as de,integrationsPageRouteRef as pe}from"../../routes.esm.js";import{mapRuleToExpression as fe}from"../CheckForm/utils/checkFormUtils.esm.js";import{ConfigurableCollectorIds as ge}from"../CollectorsPage/CollectorListPage/CollectorListPageDeprecated.esm.js";import{DocLinkButton as he}from"../DocLinkButton/DocLinkButton.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as f}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import{FactExplorerProvider as ue}from"../FactExplorer/FactExplorerContext.esm.js";import{LoadingIndicator as Ce}from"../LoadingIndicator/LoadingIndicator.esm.js";import{CollectorFactTableBUI as be}from"./CollectorFactTableBUI.esm.js";import{DependantCheckCard as ye}from"./DependantCheckCard.esm.js";const Ie=K(()=>({container:{marginBottom:"var(--bui-space-12)"}})),ke=({id:A,integrations:N})=>{const U=Ie(),L=re(),o=A??L.integrationId,g=te(()=>({routeName:"soundcheck-integration-details",additionalAttributes:{integrationId:o||""}}),[o]),{reportContentLoaded:h}=me(g),{reporter:x}=ce(g),{data:E,isLoading:B}=se([o??""]),{loading:D,allowed:F}=R({permission:Q}),{loading:u,allowed:C}=R({permission:X}),{showModal:b}=ae(),{mutate:y,isPending:m}=le(o??""),T=oe(async()=>{!await b({title:"Are you sure you want to delete stored UI config?",message:"This action cannot be undone and will remove any stored configs for this integration from the database."})||m||y()},[y,m,b]),t=E?.[0],d=B||u||D,$=N?.map(p=>p.integrationId)??ge,M=!u&&C&&t?.isEditable&&t?.isConfigurable&&$.includes(o??""),S=ne(),W=v(de),G=v(pe),j=t?.hasUIConfig;let a;if(d)a=e(Ce,{});else if(!F)a=e(f,{title:"Cannot view Integration",body:`User does not have permission to view Integration id: ${o}`});else if(!t)a=e(f,{title:"Integration not found",body:`There is no integration with the requested id: ${o}.`});else{const p=r(n,{mb:"6",children:[e(n,{mb:"3",children:e(c,{variant:"title-small",style:{fontWeight:"bold"},children:"Facts"})}),e(n,{children:e(be,{facts:t.factNames.map(i=>{const l=(s=>{try{return Z(s).name}catch{return s}})(i),H=Array.isArray(t.config)?t.config[0]?.collects:t.config?.collects,V=_(H).find(s=>s?.type===l||s?.factName===l);return{factRef:`${o}:default/${l}`,factName:l,config:V,uiConfig:!!t.hasUIConfig,parentConfig:t.config}})})})]}),q=r(n,{mb:"6",children:[e(n,{mb:"3",children:e(c,{variant:"title-small",style:{fontWeight:"bold"},children:"Dependant Checks"})}),ee(t.dependentChecks)?e(f,{title:"No dependent checks",body:"No dependent checks found."}):e(O.Root,{columns:"5",gap:"3",children:t.dependentChecks.map(i=>e(ye,{id:i.id,title:i.name??i.id,description:i.description??void 0,rules:fe(i.rule),integrationId:o,hasSchedule:i.schedule},i.id))})]}),z=C&&j&&r(n,{mb:"6",children:[e(n,{mb:"3",children:e(c,{variant:"title-small",style:{fontWeight:"bold"},children:"Admin Actions"})}),t.hasUIConfig&&r(P,{align:"center",gap:"2",children:[e(w,{isDisabled:m,size:"small",variant:"secondary",onClick:T,children:"Remove Config"}),e(c,{color:"secondary",children:"Revert to using YAML to config this integration by deleting the stored UI config from the database."})]})]});a=r(k,{children:[p,q,z]})}const I=x?.getLCPValue();return ie(()=>{d||h({lcp:I})},[d,h,I]),r(k,{children:[e(Y,{title:t?.name??t?.id??"Integration",breadcrumbs:[{label:"Integrations",href:G()}],customActions:r(P,{align:"center",children:[M?e(w,{onClick:()=>S(W({integrationId:o??""})),children:"Configure"}):void 0,e(he,{href:`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${t?.id}`})]})}),e(J,{className:U.container,children:e(ue,{hidePath:!0,children:a})})]})};export{ke as CollectorDetailsPageBUI};
1
+ import{jsx as e,jsxs as i,Fragment as S}from"react/jsx-runtime";import{useRouteRef as k}from"@backstage/core-plugin-api";import{usePermission as A}from"@backstage/plugin-permission-react";import{Box as o,Text as l,Grid as X,Flex as f,TableRoot as Z,TableHeader as _,Column as L,TableBody as ee,Row as s,CellText as r,Button as N,HeaderPage as te,Container as ie}from"@backstage/ui";import{makeStyles as oe}from"@material-ui/core";import{soundcheckCollectorReadPermission as re,soundcheckCollectorUpdatePermission as ne,parseFactRef as ae,asArray as le}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as se}from"lodash";import{useMemo as ce,useCallback as de,useEffect as me}from"react";import{useParams as ue,useNavigate as pe}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{useConfirmationModal as he}from"../../hooks/useConfirmationModal.esm.js";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{useGetCollectors as fe}from"../../hooks/collectors/useGetCollectors.esm.js";import{useDeleteCollectorConfig as ge}from"../../hooks/collectors/useDeleteCollectorConfig.esm.js";import{useLCPReporting as be}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Ce}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationEditRouteRef as ye,integrationsPageRouteRef as we}from"../../routes.esm.js";import{mapRuleToExpression as ve}from"../CheckForm/utils/checkFormUtils.esm.js";import{ConfigurableCollectorIds as Ie}from"../CollectorsPage/CollectorsPage.esm.js";import{hasFrequency as Re}from"../CollectorsPage/IntegrationsListPageBUI.esm.js";import{CustomCell as Te}from"../CustomCell/CustomCell.esm.js";import{DocLinkButton as Se}from"../DocLinkButton/DocLinkButton.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as g}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import{FactExplorerProvider as ke}from"../FactExplorer/FactExplorerContext.esm.js";import{LoadingIndicator as Ae}from"../LoadingIndicator/LoadingIndicator.esm.js";import{CollectorFactTableBUI as Le}from"./CollectorFactTableBUI.esm.js";import{CollectorStatus as Ne}from"./CollectorStatus.esm.js";import{getCollectorDocLink as Pe}from"./Configurators/Configurator.esm.js";import{DependantCheckCard as Ue}from"./DependantCheckCard.esm.js";import{hasConfigSchema as je}from"./utils.esm.js";const Qe=oe(()=>({container:{marginBottom:"var(--bui-space-12)"}})),xe=({id:P,integrations:U})=>{const j=Qe(),Q=ue(),n=P??Q.integrationId,b=ce(()=>({routeName:"soundcheck-integration-details",additionalAttributes:{integrationId:n||""}}),[n]),{reportContentLoaded:C}=Ce(b),{reporter:x}=be(b),{data:F,isLoading:B}=fe([n??""]),{loading:D,allowed:E}=A({permission:re}),{loading:y,allowed:w}=A({permission:ne}),{showModal:v}=he(),{mutate:I,isPending:u}=ge(n??""),q=de(async()=>{!await v({title:"Are you sure you want to delete stored UI config?",message:"This action cannot be undone and will remove any stored configs for this integration from the database."})||u||I()},[I,u,v]),t=F?.[0],p=B||y||D,$=U?.map(h=>h.integrationId)??Ie,M=!y&&w&&t?.isEditable&&t?.isConfigurable&&($.includes(n??"")||(t?je(t):!1)),H=pe(),z=k(ye),G=k(we),J=t?.hasUIConfig,R=Pe(t?.id);let c;if(p)c=e(Ae,{});else if(!E)c=e(g,{title:"Cannot view Integration",body:`User does not have permission to view Integration id: ${n}`});else if(!t)c=e(g,{title:"Integration not found",body:`There is no integration with the requested id: ${n}.`});else{const h=i(o,{mb:"6",children:[e(o,{mb:"3",children:e(l,{variant:"title-small",weight:"bold",children:"Facts"})}),e(o,{children:e(Le,{facts:t.factNames.map(a=>{const m=(d=>{try{return ae(d).name}catch{return d}})(a),K=Array.isArray(t.config)?t.config[0]?.collects:t.config?.collects,O=le(K).find(d=>d?.type?.toLowerCase()===m||d?.factName===m);return{factRef:`${n}:default/${m}`,factName:m,config:O,uiConfig:!!t.hasUIConfig,parentConfig:t.config}})})})]}),V=i(o,{mb:"6",children:[e(o,{mb:"3",children:e(l,{variant:"title-small",weight:"bold",children:"Dependant Checks"})}),se(t.dependentChecks)?e(g,{title:"No dependent checks",body:"No dependent checks found."}):e(X.Root,{columns:"5",gap:"3",children:t.dependentChecks.map(a=>e(Ue,{id:a.id,title:a.name??a.id,description:a.description??void 0,rules:ve(a.rule),integrationId:n,hasSchedule:a.schedule},a.id))})]}),W=i(o,{mb:"6",children:[i(o,{mb:"3",children:[e(f,{align:"center",gap:"3",children:e(l,{variant:"title-small",weight:"bold",children:"Queue Status"})}),t.jobQueueStatus?.queueType==="Local"&&e(o,{children:e(l,{variant:"body-small",children:"Local in-memory queues are reset when instances restart. Active and waiting counts are localized to each instance so counts below might not be entirely accurate."})})]}),e(o,{children:i(Z,{children:[i(_,{children:[e(L,{id:"property",isRowHeader:!0,style:{width:"50%"}}),e(L,{id:"value",style:{width:"50%"}})]}),i(ee,{children:[i(s,{children:[e(r,{title:"Status"}),e(Te,{children:e(Ne,{hasFrequency:Re(t.config),jobQueueStatus:t.jobQueueStatus})})]}),i(s,{children:[e(r,{title:"Queue Type"}),e(r,{title:t.jobQueueStatus?.queueType??"N/A"})]}),i(s,{children:[e(r,{title:"Active Jobs"}),e(r,{title:String(t.jobQueueStatus?.active??0)})]}),i(s,{children:[e(r,{title:"Waiting Jobs"}),e(r,{title:String(t.jobQueueStatus?.waiting??0)})]}),i(s,{children:[e(r,{title:"Latest Completed Time"}),e(r,{title:t.jobQueueStatus?.latestCompletedTime??"N/A"})]}),i(s,{children:[e(r,{title:"Latest Failed Time"}),e(r,{title:t.jobQueueStatus?.latestFailedTime??"N/A"})]})]})]})})]}),Y=w&&J&&i(o,{mb:"6",children:[e(o,{mb:"3",children:e(l,{variant:"title-small",weight:"bold",children:"Admin Actions"})}),t.hasUIConfig&&i(f,{align:"center",gap:"2",children:[e(N,{isDisabled:u,size:"small",variant:"secondary",onClick:q,children:"Remove Config"}),e(l,{color:"secondary",children:"Revert to using YAML to config this integration by deleting the stored UI config from the database."})]})]});c=i(S,{children:[h,V,W,Y]})}const T=x?.getLCPValue();return me(()=>{p||C({lcp:T})},[p,C,T]),i(S,{children:[e(te,{title:t?.name??t?.id??"Integration",breadcrumbs:[{label:"Integrations",href:G()}],customActions:i(f,{align:"center",children:[M?e(N,{onClick:()=>H(z({integrationId:n??""})),children:"Configure"}):void 0,R&&e(Se,{href:R})]})}),e(ie,{className:j.container,children:e(ke,{hidePath:!0,children:c})})]})};export{xe as CollectorDetailsPageBUI};
2
2
  //# sourceMappingURL=CollectorDetailsPageBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as n,Fragment as h,jsx as t}from"react/jsx-runtime";import{Content as I}from"@backstage/core-components";import{useRouteRef as a}from"@backstage/core-plugin-api";import{usePermission as C}from"@backstage/plugin-permission-react";import{HeaderPage as b,ButtonLink as P}from"@backstage/ui";import{RiInformationLine as R}from"@remixicon/react";import{soundcheckCollectorUpdatePermission as k}from"@spotify/backstage-plugin-soundcheck-common";import{useParams as y}from"react-router-dom";import{useGetCollectors as L}from"../../hooks/collectors/useGetCollectors.esm.js";import{integrationsPageRouteRef as w,integrationDetailsRouteRef as x}from"../../routes.esm.js";import{formStyles as N}from"../../utils/formStyles.esm.js";import{LoadingIndicator as j}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as E}from"../PageWarningMessage/PageWarningMessage.esm.js";import{Configurator as F}from"./Configurators/Configurator.esm.js";const S=({collectorId:s})=>{const m=y(),r=s??m.integrationId,{data:c,isLoading:l}=L([r??""]),{loading:f,allowed:d}=C({permission:k}),p=a(w),g=a(x),o=c?.[0],e=l||f,i=d&&o?.isEditable,u=N();return n(h,{children:[t(b,{title:"Configuration",breadcrumbs:[{label:"Integrations",href:p()},{label:o?.name??o?.id??"Integration",href:g({integrationId:r??""})}],customActions:t(P,{iconStart:t(R,{}),href:`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${o?.id}`,target:"_blank",rel:"noopener noreferrer",variant:"secondary"})}),n(I,{className:u.formWrapper,children:[e&&t(j,{}),t(E,{entityName:"Integration",entityId:r,showNotFound:!e&&!o,showCannotEdit:!e&&!i}),o&&i&&t(F,{selectedCollector:o})]})]})};export{S as CollectorPage};
1
+ import{jsxs as a,Fragment as I,jsx as r}from"react/jsx-runtime";import{Content as h}from"@backstage/core-components";import{useRouteRef as m}from"@backstage/core-plugin-api";import{usePermission as P}from"@backstage/plugin-permission-react";import{HeaderPage as R,ButtonLink as b}from"@backstage/ui";import{RiInformationLine as L}from"@remixicon/react";import{soundcheckCollectorUpdatePermission as k}from"@spotify/backstage-plugin-soundcheck-common";import{useParams as y}from"react-router-dom";import{useGetCollectors as w}from"../../hooks/collectors/useGetCollectors.esm.js";import{integrationsPageRouteRef as x,integrationDetailsRouteRef as N}from"../../routes.esm.js";import{formStyles as j}from"../../utils/formStyles.esm.js";import{LoadingIndicator as v}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as D}from"../PageWarningMessage/PageWarningMessage.esm.js";import{getCollectorDocLink as E,Configurator as F}from"./Configurators/Configurator.esm.js";const S=({collectorId:s})=>{const l=y(),e=s??l.integrationId,{data:f,isLoading:d}=w([e??""]),{loading:c,allowed:g}=P({permission:k}),p=m(x),u=m(N),o=f?.[0],t=d||c,i=g&&o?.isEditable,C=j(),n=E(o?.id);return a(I,{children:[r(R,{title:"Configuration",breadcrumbs:[{label:"Integrations",href:p()},{label:o?.name??o?.id??"Integration",href:u({integrationId:e??""})}],customActions:n?r(b,{iconStart:r(L,{}),href:n,target:"_blank",rel:"noopener noreferrer",variant:"secondary"}):void 0}),a(h,{className:C.formWrapper,children:[t&&r(v,{}),r(D,{entityName:"Integration",entityId:e,showNotFound:!t&&!o,showCannotEdit:!t&&!i}),o&&i&&r(F,{selectedCollector:o})]})]})};export{S as CollectorPage};
2
2
  //# sourceMappingURL=CollectorPage.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as s,jsx as u}from"react/jsx-runtime";import{Flex as m}from"@backstage/ui";import{makeStyles as c}from"@material-ui/core";import{RiCircleFill as g}from"@remixicon/react";import{DateTime as e}from"luxon";const o=(i,r)=>{if(!i)return"inactive";const a=!!i.latestFailedTime&&e.fromISO(i.latestFailedTime)>e.now().minus({days:1}),n=!!i.latestCompletedTime&&(!i.latestFailedTime||e.fromISO(i.latestCompletedTime)>e.fromISO(i.latestFailedTime).plus({minutes:1}));return(i.active??0)>0||(i.waiting??0)>0?"running":a?n?"warning":"error":n?"healthy":r?"unknown":"inactive"},f={warning:"Warning",running:"Running",healthy:"Healthy",inactive:"Inactive",error:"Error",unknown:"Unknown"},d=i=>({warning:"var(--bui-fg-warning)",running:"var(--bui-fg-info)",healthy:"var(--bui-fg-success)",inactive:"var(--bui-fg-disabled)",unknown:"var(--bui-fg-disabled)",error:"var(--bui-fg-danger)"})[i],b=c(()=>({"@keyframes blink":{"0%, 100%":{opacity:1},"50%":{opacity:.3}},blink:{animation:"$blink 1.5s ease-in-out infinite"}})),v=({jobQueueStatus:i,hasFrequency:r})=>{const a=b(),n=o(i,r),t=f[n],l=d(n);return s(m,{align:"center",gap:"2",style:{cursor:"default"},children:[u(g,{size:12,color:l,"aria-label":t,className:n==="running"?a.blink:void 0}),t]})};export{v as CollectorStatus,o as deriveStatus};
2
+ //# sourceMappingURL=CollectorStatus.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as u,Fragment as S,jsx as e}from"react/jsx-runtime";import{zodResolver as k}from"@hookform/resolvers/zod";import{makeStyles as B,Paper as A,Divider as n}from"@material-ui/core";import{useCallback as F}from"react";import{useForm as N,FormProvider as R}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 I}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as W}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 q}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as z}from"../../../../routes.esm.js";import{FooterButtons as w}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as x}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{defaultCollectorOption as l}from"../Common/CollectorOption.esm.js";import{collectorHeaderContent as j,confirmationModalContent as M}from"../Common/utils.esm.js";import{NumberOfDaysComponent as b}from"./NumberOfDaysComponent.esm.js";import{NumberOfWorkItemsComponent as T}from"./NumberOfWorkItemsComponent.esm.js";import{mapConfigToAzureDevOpsCollectorConfig as H,defaultAzureDevOpsConfig as U,numberOfDaysCollectorConfig as d,numberOfWorkItemsCollectorConfig as V,mapAzureDevOpsCollectorConfigToConfig as L}from"./utils.esm.js";import{azureDevOpsCollectorFormSchema as E}from"./validation.esm.js";const G=B(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),J=({disabled:t,selectedCollector:i})=>{const C=F(async(o,...s)=>{const a={enabled:!1,collectors:[]},P={repositoryDetails:o.repositoryDetails.enabled?o.repositoryDetails:l(),branchPolicies:o.branchPolicies.enabled?o.branchPolicies:l(),branchStatus:o.branchStatus.enabled?o.branchStatus:l(),numberOfBranches:o.numberOfBranches.enabled?o.numberOfBranches:a,numberOfActivePullRequests:o.numberOfActivePullRequests.enabled?o.numberOfActivePullRequests:a,numberOfWorkItems:o.numberOfWorkItems.enabled?o.numberOfWorkItems:a};return k(E)(P,...s)},[]),m=N({defaultValues:i?H(i.config):U(),mode:"onChange",resolver:C}),{formState:{isValid:h},handleSubmit:c}=m,p=G(),g=!h,{mutateAsync:O}=q(),[y,v]=W(z),{showModal:D}=I(),f=async o=>{if(!await D(M(i)))return;const s=L(o);await O({collectorId:i.id,config:s})&&v()};return x(j(i)),u(S,{children:[e(A,{className:p.section,children:e(R,{...m,children:u("form",{onSubmit:c(f),children:[e(r,{name:"repositoryDetails",label:"Repository Details",description:"Collects details about an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"branchPolicies",label:"Branch Policies",description:"Collects branch policies information from an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"branchStatus",label:"Branch Status",description:"Collects the latest branch status information from an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"numberOfBranches",label:"Number Of Branches",description:"Collects the number of branches from an entity's repository.",disabled:t,FactDetailsComponent:b,multipleCollectors:{enable:!0,defaultConfig:d()}}),e(n,{}),e(r,{name:"numberOfActivePullRequests",label:"Number Of Active Pull Requests",description:"Collects the number of active pull requests from an entity's repository.",disabled:t,FactDetailsComponent:b,multipleCollectors:{enable:!0,defaultConfig:d()}}),e(n,{}),e(r,{name:"numberOfWorkItems",label:"Number Of Work Items",description:"Collects the number of work items from an entity's project.",disabled:t,FactDetailsComponent:T,multipleCollectors:{enable:!0,defaultConfig:V()}})]})})}),e("div",{className:p.section,children:e(w,{onCancel:y,saveButtonText:"Save",isLoading:!1,onSave:c(f),disableSave:g})})]})};export{J as AzureDevOpsConfigurator};
1
+ import{jsxs as u,Fragment as S,jsx as e}from"react/jsx-runtime";import{standardSchemaResolver as k}from"@hookform/resolvers/standard-schema";import{makeStyles as B,Paper as A,Divider as n}from"@material-ui/core";import{useCallback as F}from"react";import{useForm as N,FormProvider as R}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 I}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as W}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 q}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as w}from"../../../../routes.esm.js";import{FooterButtons as z}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as x}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{defaultCollectorOption as l}from"../Common/CollectorOption.esm.js";import{collectorHeaderContent as j,confirmationModalContent as M}from"../Common/utils.esm.js";import{NumberOfDaysComponent as b}from"./NumberOfDaysComponent.esm.js";import{NumberOfWorkItemsComponent as T}from"./NumberOfWorkItemsComponent.esm.js";import{mapConfigToAzureDevOpsCollectorConfig as H,defaultAzureDevOpsConfig as U,numberOfDaysCollectorConfig as d,numberOfWorkItemsCollectorConfig as V,mapAzureDevOpsCollectorConfigToConfig as L}from"./utils.esm.js";import{azureDevOpsCollectorFormSchema as E}from"./validation.esm.js";const G=B(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),J=({disabled:t,selectedCollector:i})=>{const C=F(async(o,...a)=>{const s={enabled:!1,collectors:[]},P={repositoryDetails:o.repositoryDetails.enabled?o.repositoryDetails:l(),branchPolicies:o.branchPolicies.enabled?o.branchPolicies:l(),branchStatus:o.branchStatus.enabled?o.branchStatus:l(),numberOfBranches:o.numberOfBranches.enabled?o.numberOfBranches:s,numberOfActivePullRequests:o.numberOfActivePullRequests.enabled?o.numberOfActivePullRequests:s,numberOfWorkItems:o.numberOfWorkItems.enabled?o.numberOfWorkItems:s};return k(E)(P,...a)},[]),m=N({defaultValues:i?H(i.config):U(),mode:"onChange",resolver:C}),{formState:{isValid:h},handleSubmit:c}=m,p=G(),g=!h,{mutateAsync:O}=q(),[y,v]=W(w),{showModal:D}=I(),f=async o=>{if(!await D(M(i)))return;const a=L(o);await O({collectorId:i.id,config:a})&&v()};return x(j(i)),u(S,{children:[e(A,{className:p.section,children:e(R,{...m,children:u("form",{onSubmit:c(f),children:[e(r,{name:"repositoryDetails",label:"Repository Details",description:"Collects details about an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"branchPolicies",label:"Branch Policies",description:"Collects branch policies information from an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"branchStatus",label:"Branch Status",description:"Collects the latest branch status information from an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"numberOfBranches",label:"Number Of Branches",description:"Collects the number of branches from an entity's repository.",disabled:t,FactDetailsComponent:b,multipleCollectors:{enable:!0,defaultConfig:d()}}),e(n,{}),e(r,{name:"numberOfActivePullRequests",label:"Number Of Active Pull Requests",description:"Collects the number of active pull requests from an entity's repository.",disabled:t,FactDetailsComponent:b,multipleCollectors:{enable:!0,defaultConfig:d()}}),e(n,{}),e(r,{name:"numberOfWorkItems",label:"Number Of Work Items",description:"Collects the number of work items from an entity's project.",disabled:t,FactDetailsComponent:T,multipleCollectors:{enable:!0,defaultConfig:V()}})]})})}),e("div",{className:p.section,children:e(z,{onCancel:y,saveButtonText:"Save",isLoading:!1,onSave:c(f),disableSave:g})})]})};export{J as AzureDevOpsConfigurator};
2
2
  //# sourceMappingURL=AzureDevOpsConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{validFactNameRegex as d,invalidFactNameErrorMessage as b,validNameRegex as E,invalidNameErrorMessage as _}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FIELD_IS_REQUIRED_MSG as m}from"../../../../utils/validation.esm.js";import{CollectorOptionSchema as l,BaseCollectorSchema as I}from"../Common/CollectorOption.esm.js";import{REPOSITORY_DETAILS_COLLECTOR_TYPE as N,BRANCH_POLICIES_COLLECTOR_TYPE as p,BRANCH_STATUS_COLLECTOR_TYPE as C}from"./utils.esm.js";const r="Fact name is not unique",i="Max 100 characters",u=e.object({factName:e.string().min(1,m).max(100,i).regex(d,b)}),O=u.merge(e.object({numberOfDays:e.number().min(0).optional().nullable()})).strict(),R=u.merge(e.object({data:e.array(e.strictObject({name:e.string().min(1,m).max(100,i).regex(E,_),query:e.string().min(1,m)})).min(1)})).strict(),n=a=>e.strictObject({enabled:e.boolean().optional(),collectors:e.array(I.extend({factDetails:a}))}),h=e.strictObject({repositoryDetails:l,branchPolicies:l,branchStatus:l,numberOfBranches:n(O),numberOfActivePullRequests:n(O),numberOfWorkItems:n(R)}).superRefine((a,o)=>{const f=[N,p,C,...a.numberOfBranches.collectors.map(t=>t.factDetails.factName),...a.numberOfActivePullRequests.collectors.map(t=>t.factDetails.factName),...a.numberOfWorkItems.collectors.map(t=>t.factDetails.factName)],s=f.filter((t,c)=>f.indexOf(t)!==c);s.length&&(a.numberOfBranches.collectors.forEach((t,c)=>{s.includes(t.factDetails.factName)&&o.addIssue({code:e.ZodIssueCode.custom,message:r,path:["numberOfBranches","collectors",c,"factDetails","factName"]})}),a.numberOfActivePullRequests.collectors.forEach((t,c)=>{s.includes(t.factDetails.factName)&&o.addIssue({code:e.ZodIssueCode.custom,message:r,path:["numberOfActivePullRequests","collectors",c,"factDetails","factName"]})}),a.numberOfWorkItems.collectors.forEach((t,c)=>{s.includes(t.factDetails.factName)&&o.addIssue({code:e.ZodIssueCode.custom,message:r,path:["numberOfWorkItems","collectors",c,"factDetails","factName"]})}))});export{r as FACT_NAME_IS_NOT_UNIQUE_MSG,i as MAX_100_CHARACTERS_MSG,h as azureDevOpsCollectorFormSchema};
1
+ import{validFactNameRegex as d,invalidFactNameErrorMessage as b,validNameRegex as E,invalidNameErrorMessage as _}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod/v3";import{FIELD_IS_REQUIRED_MSG as m}from"../../../../utils/validation.esm.js";import{CollectorOptionSchema as l,BaseCollectorSchema as I}from"../Common/CollectorOption.esm.js";import{REPOSITORY_DETAILS_COLLECTOR_TYPE as N,BRANCH_POLICIES_COLLECTOR_TYPE as p,BRANCH_STATUS_COLLECTOR_TYPE as C}from"./utils.esm.js";const r="Fact name is not unique",i="Max 100 characters",u=e.object({factName:e.string().min(1,m).max(100,i).regex(d,b)}),O=u.merge(e.object({numberOfDays:e.number().min(0).optional().nullable()})).strict(),R=u.merge(e.object({data:e.array(e.strictObject({name:e.string().min(1,m).max(100,i).regex(E,_),query:e.string().min(1,m)})).min(1)})).strict(),n=a=>e.strictObject({enabled:e.boolean().optional(),collectors:e.array(I.extend({factDetails:a}))}),h=e.strictObject({repositoryDetails:l,branchPolicies:l,branchStatus:l,numberOfBranches:n(O),numberOfActivePullRequests:n(O),numberOfWorkItems:n(R)}).superRefine((a,o)=>{const f=[N,p,C,...a.numberOfBranches.collectors.map(t=>t.factDetails.factName),...a.numberOfActivePullRequests.collectors.map(t=>t.factDetails.factName),...a.numberOfWorkItems.collectors.map(t=>t.factDetails.factName)],s=f.filter((t,c)=>f.indexOf(t)!==c);s.length&&(a.numberOfBranches.collectors.forEach((t,c)=>{s.includes(t.factDetails.factName)&&o.addIssue({code:e.ZodIssueCode.custom,message:r,path:["numberOfBranches","collectors",c,"factDetails","factName"]})}),a.numberOfActivePullRequests.collectors.forEach((t,c)=>{s.includes(t.factDetails.factName)&&o.addIssue({code:e.ZodIssueCode.custom,message:r,path:["numberOfActivePullRequests","collectors",c,"factDetails","factName"]})}),a.numberOfWorkItems.collectors.forEach((t,c)=>{s.includes(t.factDetails.factName)&&o.addIssue({code:e.ZodIssueCode.custom,message:r,path:["numberOfWorkItems","collectors",c,"factDetails","factName"]})}))});export{r as FACT_NAME_IS_NOT_UNIQUE_MSG,i as MAX_100_CHARACTERS_MSG,h as azureDevOpsCollectorFormSchema};
2
2
  //# sourceMappingURL=validation.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as h,Fragment as b,jsx as o}from"react/jsx-runtime";import{zodResolver as B}from"@hookform/resolvers/zod";import{makeStyles as v,Paper as F}from"@material-ui/core";import{useCallback as Q}from"react";import{useForm as S,FormProvider as q}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 N}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as w}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 x}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as k}from"../../../../routes.esm.js";import{FooterButtons as I}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as M}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as P}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as R}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as T,confirmationModalContent as U}from"../Common/utils.esm.js";import{QueryFactDetailsComponent as j}from"./QueryFactDetailsComponent.esm.js";import{mapConfigToBigQueryCollectorConfig as A,defaultBigQueryConfig as D,queryCollectorConfig as H,mapBigQueryCollectorConfigToConfig as V}from"./utils.esm.js";import{bigQueryCollectorFormSchema as z}from"./validation.esm.js";const L=v(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),O=({disabled:t,selectedCollector:r})=>{const c=Q(async(e,...i)=>{const C={enabled:!1,collectors:[]},y={query:e.query.enabled?e.query:C};return B(z)(y,...i)},[]),m=S({defaultValues:r?A(r.config):D(),mode:"onChange",resolver:c}),{formState:{isValid:s},handleSubmit:a}=m,n=L(),p=!s,{mutateAsync:f}=x(),[d,u]=w(k),{showModal:g}=N(),l=async e=>{if(!await g(U(r)))return;const i=V(e);await f({collectorId:r.id,config:i})&&u()};return M(T(r)),h(b,{children:[o(R,{collectorName:"Bigquery",collectorId:r.id,hasNonUIOptions:!0}),o(F,{className:n.section,children:o(q,{...m,children:o("form",{onSubmit:a(l),children:o(P,{name:"query",label:"Query",description:"Collects data from BigQuery.",disabled:t,FactDetailsComponent:j,multipleCollectors:{enable:!0,defaultConfig:H()}})})})}),o("div",{className:n.section,children:o(I,{onCancel:d,saveButtonText:"Save",isLoading:!1,onSave:a(l),disableSave:p})})]})};export{O as BigQueryConfigurator};
1
+ import{jsxs as h,Fragment as b,jsx as o}from"react/jsx-runtime";import{standardSchemaResolver as B}from"@hookform/resolvers/standard-schema";import{makeStyles as v,Paper as S}from"@material-ui/core";import{useCallback as F}from"react";import{useForm as Q,FormProvider as q}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 N}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as w}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 x}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as k}from"../../../../routes.esm.js";import{FooterButtons as I}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as M}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as P}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as R}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as T,confirmationModalContent as U}from"../Common/utils.esm.js";import{QueryFactDetailsComponent as j}from"./QueryFactDetailsComponent.esm.js";import{mapConfigToBigQueryCollectorConfig as A,defaultBigQueryConfig as D,queryCollectorConfig as H,mapBigQueryCollectorConfigToConfig as V}from"./utils.esm.js";import{bigQueryCollectorFormSchema as L}from"./validation.esm.js";const O=v(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),z=({disabled:t,selectedCollector:r})=>{const c=F(async(e,...i)=>{const C={enabled:!1,collectors:[]},y={query:e.query.enabled?e.query:C};return B(L)(y,...i)},[]),m=Q({defaultValues:r?A(r.config):D(),mode:"onChange",resolver:c}),{formState:{isValid:s},handleSubmit:a}=m,n=O(),p=!s,{mutateAsync:f}=x(),[d,u]=w(k),{showModal:g}=N(),l=async e=>{if(!await g(U(r)))return;const i=V(e);await f({collectorId:r.id,config:i})&&u()};return M(T(r)),h(b,{children:[o(R,{collectorName:"Bigquery",collectorId:r.id,hasNonUIOptions:!0}),o(S,{className:n.section,children:o(q,{...m,children:o("form",{onSubmit:a(l),children:o(P,{name:"query",label:"Query",description:"Collects data from BigQuery.",disabled:t,FactDetailsComponent:j,multipleCollectors:{enable:!0,defaultConfig:H()}})})})}),o("div",{className:n.section,children:o(I,{onCancel:d,saveButtonText:"Save",isLoading:!1,onSave:a(l),disableSave:p})})]})};export{z as BigQueryConfigurator};
2
2
  //# sourceMappingURL=BigQueryConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{validFactNameRegex as g,invalidFactNameErrorMessage as d,validNameRegex as m,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 p}from"../Common/CollectorOption.esm.js";const l="Fact name is not unique",r="Max 100 characters",x=p.extend({factDetails:e.strictObject({factName:e.string().min(1,a).max(100,r).regex(g,d),projectId:e.string().optional(),query:e.string().min(1,a),schema:e.array(e.strictObject({name:e.string().min(1,a).max(100,r).regex(m,n),type:e.string().min(1,a).max(100,r).regex(m,n).optional(),foreignKey:e.string().optional()})).optional()})}).strict(),N=e.strictObject({enabled:e.boolean(),collectors:e.array(x).superRefine((c,f)=>{const o=c.map(t=>t.factDetails.factName),s=o.filter((t,i)=>o.indexOf(t)!==i);s.length&&c.forEach((t,i)=>{s.includes(t.factDetails.factName)&&f.addIssue({code:e.ZodIssueCode.custom,message:l,path:[i,"factDetails","factName"]})})})}),_=e.strictObject({query:N});export{l as FACT_NAME_IS_NOT_UNIQUE_MSG,r as MAX_100_CHARACTERS_MSG,_ as bigQueryCollectorFormSchema};
1
+ import{validFactNameRegex as g,invalidFactNameErrorMessage as d,validNameRegex as m,invalidNameErrorMessage as n}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod/v3";import{FIELD_IS_REQUIRED_MSG as a}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as p}from"../Common/CollectorOption.esm.js";const l="Fact name is not unique",r="Max 100 characters",x=p.extend({factDetails:e.strictObject({factName:e.string().min(1,a).max(100,r).regex(g,d),projectId:e.string().optional(),query:e.string().min(1,a),schema:e.array(e.strictObject({name:e.string().min(1,a).max(100,r).regex(m,n),type:e.string().min(1,a).max(100,r).regex(m,n).optional(),foreignKey:e.string().optional()})).optional()})}).strict(),N=e.strictObject({enabled:e.boolean(),collectors:e.array(x).superRefine((c,f)=>{const o=c.map(t=>t.factDetails.factName),s=o.filter((t,i)=>o.indexOf(t)!==i);s.length&&c.forEach((t,i)=>{s.includes(t.factDetails.factName)&&f.addIssue({code:e.ZodIssueCode.custom,message:l,path:[i,"factDetails","factName"]})})})}),_=e.strictObject({query:N});export{l as FACT_NAME_IS_NOT_UNIQUE_MSG,r as MAX_100_CHARACTERS_MSG,_ as bigQueryCollectorFormSchema};
2
2
  //# sourceMappingURL=validation.esm.js.map
@@ -1,2 +1,2 @@
1
- import{z as t}from"zod";import{FrequencySchema as o,formFiltersSchema as n,CacheConfigSchema as m}from"../../../../utils/validation.esm.js";import{mapToCacheConfig as f,defaultCacheConfig as p}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as i}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import{emptyFilters as l}from"../../../Filter/types.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as a,defaultFrequency as u}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";const r=(e={})=>({filters:{include:e?.filter&&typeof e.filter=="object"?i(e.filter):[{...l(),selectedKinds:["Component"]}],exclude:e?.exclude&&typeof e.exclude=="object"?i(e.exclude):[l()]},frequency:e?.frequency?a(e.frequency):u(),cacheConfig:e?.cache?f(e.cache):p(),batchSize:e?.batchSize,initialDelay:e?.initialDelay?a(e.initialDelay):void 0}),h=(e={})=>({enabled:!1,...r(e)}),c=t.object({frequency:o,filters:n,cacheConfig:m,initialDelay:o.optional(),batchSize:t.number().min(1,"Batch size should be at least 1").optional().nullable()}),d=c.extend({enabled:t.boolean()}).strict();export{c as BaseCollectorSchema,d as CollectorOptionSchema,r as defaultBaseCollectorOption,h as defaultCollectorOption};
1
+ import{z as t}from"zod/v3";import{FrequencySchema as o,formFiltersSchema as n,CacheConfigSchema as m}from"../../../../utils/validation.esm.js";import{mapToCacheConfig as f,defaultCacheConfig as p}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as i}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import{emptyFilters as l}from"../../../Filter/types.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as a,defaultFrequency as u}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";const r=(e={})=>({filters:{include:e?.filter&&typeof e.filter=="object"?i(e.filter):[{...l(),selectedKinds:["Component"]}],exclude:e?.exclude&&typeof e.exclude=="object"?i(e.exclude):[l()]},frequency:e?.frequency?a(e.frequency):u(),cacheConfig:e?.cache?f(e.cache):p(),batchSize:e?.batchSize,initialDelay:e?.initialDelay?a(e.initialDelay):void 0}),h=(e={})=>({enabled:!1,...r(e)}),c=t.object({frequency:o,filters:n,cacheConfig:m,initialDelay:o.optional(),batchSize:t.number().min(1,"Batch size should be at least 1").optional().nullable()}),d=c.extend({enabled:t.boolean()}).strict();export{c as BaseCollectorSchema,d as CollectorOptionSchema,r as defaultBaseCollectorOption,h as defaultCollectorOption};
2
2
  //# sourceMappingURL=CollectorOption.esm.js.map
@@ -1,2 +1,2 @@
1
- import{mapToCacheConfig as c,mapCacheConfigToHumanDurationOrBoolean as l}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as n,mapFiltersToCatalogFilter as t}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as a,mapFrequencyToHumanDurationOrCron as r}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";const f=i=>({title:i.name??i.id,description:i.description,docLink:`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${i.id}`}),s=i=>({title:"Update Integration",message:`Are you sure you want to update the ${i.name} integration? This will overwrite any configurations currently saved in the database. Configs saved this way will have priority over anything configured in YAML.`,error:!1}),u=({configOption:i,factType:e,additionalParams:o={}})=>({type:e,frequency:r(i.frequency),filter:t(i.filters.include),exclude:t(i.filters.exclude),cache:l(i.cacheConfig),batchSize:i.batchSize??void 0,initialDelay:i.initialDelay?r(i.initialDelay):void 0,...o}),d=({parentConfig:i,factTypeConfig:e})=>{const o=e.initialDelay??i.initialDelay;return{frequency:a(e.frequency??i.frequency),filters:{include:n(e.filter??i.filter),exclude:n(e.exclude??i.exclude)},cacheConfig:c(e.cache??i.cache),batchSize:e.batchSize??i.batchSize,initialDelay:o?a(o):void 0}},p="~1.",g=i=>i.join(p),m=i=>`/config-manager/soundcheck#${g(["root","soundcheck","collectors",i])}__title`;export{f as collectorHeaderContent,s as confirmationModalContent,m as getConfigManagerLink,d as mapBackendConfigToFormIntegrationConfig,u as mapFormIntegrationConfigToBackendConfig};
1
+ import{mapToCacheConfig as c,mapCacheConfigToHumanDurationOrBoolean as l}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as t,mapFiltersToCatalogFilter as n}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as a,mapFrequencyToHumanDurationOrCron as r}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";const f=i=>({title:i.name??i.id,description:i.description,docLink:`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${i.id}`}),s=i=>({title:`Update ${i.name} Integration?`,message:`Are you sure you want to update the ${i.name} integration? This will overwrite the current configuration stored in the database. Database settings will take priority over configurations defined in YAML.`,error:!1}),u=({configOption:i,factType:e,additionalParams:o={}})=>({type:e,frequency:r(i.frequency),filter:n(i.filters.include),exclude:n(i.filters.exclude),cache:l(i.cacheConfig),batchSize:i.batchSize??void 0,initialDelay:i.initialDelay?r(i.initialDelay):void 0,...o}),d=({parentConfig:i,factTypeConfig:e})=>{const o=e.initialDelay??i.initialDelay;return{frequency:a(e.frequency??i.frequency),filters:{include:t(e.filter??i.filter),exclude:t(e.exclude??i.exclude)},cacheConfig:c(e.cache??i.cache),batchSize:e.batchSize??i.batchSize,initialDelay:o?a(o):void 0}},m="~1.",p=i=>i.join(m),g=i=>`/config-manager/soundcheck#${p(["root","soundcheck","collectors",i])}__title`;export{f as collectorHeaderContent,s as confirmationModalContent,g as getConfigManagerLink,d as mapBackendConfigToFormIntegrationConfig,u as mapFormIntegrationConfigToBackendConfig};
2
2
  //# sourceMappingURL=utils.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t}from"react/jsx-runtime";import{PageWarningMessage as i}from"../../PageWarningMessage/PageWarningMessage.esm.js";import{AzureDevOpsConfigurator as a}from"./AzureDevOps/AzureDevOpsConfigurator.esm.js";import{BigQueryConfigurator as e}from"./BigQuery/BigQueryConfigurator.esm.js";import{CatalogConfigurator as m}from"./Catalog/CatalogConfigurator.esm.js";import{DataDogConfigurator as n}from"./DataDog/DataDogConfigurator.esm.js";import{DataRegistryConfigurator as f}from"./DataRegistry/DataRegistryConfigurator.esm.js";import{GithubConfigurator as g}from"./Github/GithubConfigurator.esm.js";import{GitlabConfigurator as u}from"./Gitlab/GitlabConfigurator.esm.js";import{HttpConfigurator as p}from"./HTTP/HttpConfigurator.esm.js";import{JiraConfigurator as C}from"./Jira/JiraConfigurator.esm.js";import{KubernetesConfigurator as s}from"./Kubernetes/KubernetesConfigurator.esm.js";import{NewRelicConfigurator as c}from"./NewRelic/NewRelicConfigurator.esm.js";import{PagerDutyConfigurator as l}from"./PagerDuty/PagerDutyConfigurator.esm.js";import{ScmConfigurator as d}from"./SCM/ScmConfigurator.esm.js";import{SonarQubeConfigurator as b}from"./SonarQube/SonarQubeConfigurator.esm.js";const y={github:g,gitlab:u,scm:d,pagerduty:l,datadog:n,kubernetes:s,jira:C,sonarqube:b,newrelic:c,bigquery:e,catalog:m,azure:a,http:p,"data-registry":f},D=({selectedCollector:r})=>{const o=y[r?.id];return o?t(o,{selectedCollector:r}):t(i,{entityName:"Integration",entityId:r.id,showCannotEdit:!0})};export{D as Configurator};
1
+ import{jsx as r}from"react/jsx-runtime";import{PageWarningMessage as e}from"../../PageWarningMessage/PageWarningMessage.esm.js";import{hasConfigSchema as a}from"../utils.esm.js";import{AzureDevOpsConfigurator as m}from"./AzureDevOps/AzureDevOpsConfigurator.esm.js";import{BigQueryConfigurator as n}from"./BigQuery/BigQueryConfigurator.esm.js";import{CatalogConfigurator as f}from"./Catalog/CatalogConfigurator.esm.js";import{DataDogConfigurator as g}from"./DataDog/DataDogConfigurator.esm.js";import{DataRegistryConfigurator as u}from"./DataRegistry/DataRegistryConfigurator.esm.js";import{GithubConfigurator as c}from"./Github/GithubConfigurator.esm.js";import{GitlabConfigurator as p}from"./Gitlab/GitlabConfigurator.esm.js";import{HttpConfigurator as s}from"./HTTP/HttpConfigurator.esm.js";import{JiraConfigurator as C}from"./Jira/JiraConfigurator.esm.js";import{KubernetesConfigurator as l}from"./Kubernetes/KubernetesConfigurator.esm.js";import{NewRelicConfigurator as d}from"./NewRelic/NewRelicConfigurator.esm.js";import{PagerDutyConfigurator as b}from"./PagerDuty/PagerDutyConfigurator.esm.js";import{SchemaBasedConfigurator as h}from"./SchemaBased/SchemaBasedConfigurator.esm.js";import{ScmConfigurator as y}from"./SCM/ScmConfigurator.esm.js";import{SonarQubeConfigurator as D}from"./SonarQube/SonarQubeConfigurator.esm.js";const t={github:c,gitlab:p,scm:y,pagerduty:b,datadog:g,kubernetes:l,jira:C,sonarqube:D,newrelic:d,bigquery:n,catalog:f,azure:m,http:s,"data-registry":u},k=o=>{if(!(!o||!(o in t)))return`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${o}`},R=({selectedCollector:o})=>{const i=t[o?.id];return i?r(i,{selectedCollector:o}):a(o)?r(h,{selectedCollector:o}):r(e,{entityName:"Integration",entityId:o.id,showCannotEdit:!0})};export{t as CONFIGURATOR_MAP,R as Configurator,k as getCollectorDocLink};
2
2
  //# sourceMappingURL=Configurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as p,Fragment as S,jsx as e}from"react/jsx-runtime";import{zodResolver as A}from"@hookform/resolvers/zod";import{makeStyles as F,Paper as v,Divider as r}from"@material-ui/core";import{useForm as D,FormProvider as R}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"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as B}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as L}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 T}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as x}from"../../../../routes.esm.js";import{FooterButtons as N}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as P}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as i}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as w,confirmationModalContent as G}from"../Common/utils.esm.js";import{CodeScanningAlertsFactDetails as E}from"./CodeScanningAlertsFactDetails.esm.js";import{DependabotAlertsFactDetails as I}from"./DependabotAlertsFactDetails.esm.js";import{SecretScanningAlertsFactDetails as M}from"./SecretScanningAlertsFactDetails.esm.js";import{SecurityAdvisoriesFactDetails as O}from"./SecurityAdvisoriesFactDetails.esm.js";import{mapConfigToGithubCollectorConfig as _,defaultGithubConfig as j,DEFAULT_NEW_COLLECTOR_CONFIG as n,mapGithubCollectorConfigToConfig as k}from"./utils.esm.js";import{githubCollectorFormSchema as H}from"./validation.esm.js";const d=F(o=>({spacer:{height:o.spacing(8),width:"100%"},section:{marginBottom:o.spacing(2)},form:{marginBottom:o.spacing(2)},root:{paddingTop:o.spacing(1)},formInput:{marginTop:0,marginBottom:o.spacing(2),width:"500px"},helperText:{marginLeft:0}})),U=({disabled:o,selectedCollector:a})=>{const s=D({defaultValues:a?_(a.config):j(),mode:"onChange",resolver:A(H)}),{formState:{errors:t},handleSubmit:l}=s,m=d(),f=!!t.branchProtections||!!t.branchRules||!!t.codeScanningAlerts||!!t.dependabotAlerts||!!t.repositoryDetails||!!t.repositoryLanguages||!!t.secretScanningAlerts||!!t.securityAdvisories,{mutateAsync:u}=T(),[g,b]=L(x),{showModal:C}=B(),c=async y=>{if(!await C(G(a)))return;const h=k(y);await u({collectorId:a.id,config:h})&&b()};return P(w(a)),p(S,{children:[e(v,{className:m.form,children:e(R,{...s,children:p("form",{onSubmit:l(c),children:[e(i,{name:"branchProtections",label:"Branch Protections",description:"Collects branch protection information from an entity's repository.",disabled:o}),e(r,{}),e(i,{name:"branchRules",label:"Branch Rules",description:"Collects branch rules information from an entity's repository.",disabled:o}),e(r,{}),e(i,{name:"codeScanningAlerts",label:"Code Scanning Alerts",description:"Collects details about code scanning alerts for an entity's repository.",disabled:o,FactDetailsComponent:E,multipleCollectors:{enable:!0,defaultConfig:n}}),e(r,{}),e(i,{name:"dependabotAlerts",label:"Dependabot Alerts",description:"Collects details about dependabot alerts for an entity's repository.",disabled:o,FactDetailsComponent:I,multipleCollectors:{enable:!0,defaultConfig:n}}),e(r,{}),e(i,{name:"repositoryDetails",label:"Repository Details",description:"Collects details about an entity's repository.",disabled:o}),e(r,{}),e(i,{name:"repositoryLanguages",label:"Repository Languages",description:"Collects details about the languages used in an entity's repository.",disabled:o}),e(r,{}),e(i,{name:"secretScanningAlerts",label:"Secret Scanning Alerts",description:"Collects details about secret scanning alerts for an entity's repository.",disabled:o,FactDetailsComponent:M,multipleCollectors:{enable:!0,defaultConfig:n}}),e(r,{}),e(i,{name:"securityAdvisories",label:"Security Advisories",description:"Collects details about security advisories for an entity's repository.",disabled:o,FactDetailsComponent:O,multipleCollectors:{enable:!0,defaultConfig:n}})]})})}),e("div",{className:m.section,children:e(N,{onCancel:g,saveButtonText:"Save",isLoading:!1,onSave:l(c),disableSave:f})})]})};export{U as GithubConfigurator,d as useStyles};
1
+ import{jsxs as p,Fragment as S,jsx as e}from"react/jsx-runtime";import{standardSchemaResolver as A}from"@hookform/resolvers/standard-schema";import{makeStyles as F,Paper as v,Divider as r}from"@material-ui/core";import{useForm as D,FormProvider as R}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"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as B}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as L}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 T}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as x}from"../../../../routes.esm.js";import{FooterButtons as N}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as P}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as i}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as w,confirmationModalContent as G}from"../Common/utils.esm.js";import{CodeScanningAlertsFactDetails as E}from"./CodeScanningAlertsFactDetails.esm.js";import{DependabotAlertsFactDetails as I}from"./DependabotAlertsFactDetails.esm.js";import{SecretScanningAlertsFactDetails as M}from"./SecretScanningAlertsFactDetails.esm.js";import{SecurityAdvisoriesFactDetails as O}from"./SecurityAdvisoriesFactDetails.esm.js";import{mapConfigToGithubCollectorConfig as _,defaultGithubConfig as j,DEFAULT_NEW_COLLECTOR_CONFIG as n,mapGithubCollectorConfigToConfig as k}from"./utils.esm.js";import{githubCollectorFormSchema as H}from"./validation.esm.js";const d=F(o=>({spacer:{height:o.spacing(8),width:"100%"},section:{marginBottom:o.spacing(2)},form:{marginBottom:o.spacing(2)},root:{paddingTop:o.spacing(1)},formInput:{marginTop:0,marginBottom:o.spacing(2),width:"500px"},helperText:{marginLeft:0}})),U=({disabled:o,selectedCollector:a})=>{const s=D({defaultValues:a?_(a.config):j(),mode:"onChange",resolver:A(H)}),{formState:{errors:t},handleSubmit:l}=s,m=d(),f=!!t.branchProtections||!!t.branchRules||!!t.codeScanningAlerts||!!t.dependabotAlerts||!!t.repositoryDetails||!!t.repositoryLanguages||!!t.secretScanningAlerts||!!t.securityAdvisories,{mutateAsync:u}=T(),[g,b]=L(x),{showModal:C}=B(),c=async y=>{if(!await C(G(a)))return;const h=k(y);await u({collectorId:a.id,config:h})&&b()};return P(w(a)),p(S,{children:[e(v,{className:m.form,children:e(R,{...s,children:p("form",{onSubmit:l(c),children:[e(i,{name:"branchProtections",label:"Branch Protections",description:"Collects branch protection information from an entity's repository.",disabled:o}),e(r,{}),e(i,{name:"branchRules",label:"Branch Rules",description:"Collects branch rules information from an entity's repository.",disabled:o}),e(r,{}),e(i,{name:"codeScanningAlerts",label:"Code Scanning Alerts",description:"Collects details about code scanning alerts for an entity's repository.",disabled:o,FactDetailsComponent:E,multipleCollectors:{enable:!0,defaultConfig:n}}),e(r,{}),e(i,{name:"dependabotAlerts",label:"Dependabot Alerts",description:"Collects details about dependabot alerts for an entity's repository.",disabled:o,FactDetailsComponent:I,multipleCollectors:{enable:!0,defaultConfig:n}}),e(r,{}),e(i,{name:"repositoryDetails",label:"Repository Details",description:"Collects details about an entity's repository.",disabled:o}),e(r,{}),e(i,{name:"repositoryLanguages",label:"Repository Languages",description:"Collects details about the languages used in an entity's repository.",disabled:o}),e(r,{}),e(i,{name:"secretScanningAlerts",label:"Secret Scanning Alerts",description:"Collects details about secret scanning alerts for an entity's repository.",disabled:o,FactDetailsComponent:M,multipleCollectors:{enable:!0,defaultConfig:n}}),e(r,{}),e(i,{name:"securityAdvisories",label:"Security Advisories",description:"Collects details about security advisories for an entity's repository.",disabled:o,FactDetailsComponent:O,multipleCollectors:{enable:!0,defaultConfig:n}})]})})}),e("div",{className:m.section,children:e(N,{onCancel:g,saveButtonText:"Save",isLoading:!1,onSave:l(c),disableSave:f})})]})};export{U as GithubConfigurator,d as useStyles};
2
2
  //# sourceMappingURL=GithubConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{validFactNameRegex as i,invalidFactNameErrorMessage as n}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FIELD_IS_REQUIRED_MSG as m}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as A,CollectorOptionSchema as S}from"../Common/CollectorOption.esm.js";import{CODE_SCANNING_ALERTS_STATE_OPTIONS as d,CODE_SCANNING_ALERTS_SEVERITY_OPTIONS as _,DEPENDABOT_ALERTS_STATE_OPTIONS as E,DEPENDABOT_ALERTS_SEVERITY_OPTIONS as f,SECRET_SCANNING_ALERTS_STATE_OPTIONS as T,SECRET_SCANNING_ALERTS_VALIDITY_OPTIONS as O,SECURITY_ADVISORIES_STATE_OPTIONS as I,BRANCH_PROTECTIONS_FACT_NAME as u,BRANCH_RULES_FACT_NAME as g,REPOSITORY_DETAILS_FACT_NAME as p,REPOSITORY_LANGUAGES_FACT_NAME as b}from"./types.esm.js";const o="Fact name is not unique",r="Max 100 characters",D=A.merge(e.object({factDetails:e.strictObject({factName:e.string().min(1,m).max(100,r).regex(i,n),toolName:e.string().optional(),state:e.enum(d).or(e.literal("")).optional(),severity:e.enum(_).or(e.literal("")).optional()})})).strict(),R=A.merge(e.object({factDetails:e.strictObject({factName:e.string().min(1,m).max(100,r).regex(i,n),states:e.array(e.enum(E)).optional(),severities:e.array(e.enum(f)).optional()})})).strict(),C=A.merge(e.object({factDetails:e.strictObject({factName:e.string().min(1,m).max(100,r).regex(i,n),state:e.enum(T).or(e.literal("")).optional(),validities:e.array(e.enum(O)).optional()})})).strict(),h=A.merge(e.object({factDetails:e.strictObject({factName:e.string().min(1,m).max(100,r).regex(i,n),state:e.enum(I).or(e.literal("")).optional()})})).strict(),y=e.strictObject({branchProtections:S,branchRules:S,codeScanningAlerts:e.strictObject({enabled:e.boolean(),collectors:e.array(D)}),dependabotAlerts:e.strictObject({enabled:e.boolean(),collectors:e.array(R)}),repositoryDetails:S,repositoryLanguages:S,secretScanningAlerts:e.strictObject({enabled:e.boolean(),collectors:e.array(C)}),securityAdvisories:e.strictObject({enabled:e.boolean(),collectors:e.array(h)})}).superRefine((c,l)=>{const N=[u,g,p,b,...c.codeScanningAlerts.collectors.map(t=>t.factDetails.factName),...c.dependabotAlerts.collectors.map(t=>t.factDetails.factName),...c.secretScanningAlerts.collectors.map(t=>t.factDetails.factName),...c.securityAdvisories.collectors.map(t=>t.factDetails.factName)],s=N.filter((t,a)=>N.indexOf(t)!==a);s.length&&(c.codeScanningAlerts.collectors.forEach((t,a)=>{s.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:o,path:["codeScanningAlerts","collectors",a,"factDetails","factName"]})}),c.dependabotAlerts.collectors.forEach((t,a)=>{s.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:o,path:["dependabotAlerts","collectors",a,"factDetails","factName"]})}),c.secretScanningAlerts.collectors.forEach((t,a)=>{s.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:o,path:["secretScanningAlerts","collectors",a,"factDetails","factName"]})}),c.securityAdvisories.collectors.forEach((t,a)=>{s.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:o,path:["securityAdvisories","collectors",a,"factDetails","factName"]})}))});export{o as FACT_NAME_IS_NOT_UNIQUE_MSG,r as MAX_100_CHARACTERS_MSG,y as githubCollectorFormSchema};
1
+ import{validFactNameRegex as i,invalidFactNameErrorMessage as n}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod/v3";import{FIELD_IS_REQUIRED_MSG as m}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as A,CollectorOptionSchema as S}from"../Common/CollectorOption.esm.js";import{CODE_SCANNING_ALERTS_STATE_OPTIONS as d,CODE_SCANNING_ALERTS_SEVERITY_OPTIONS as _,DEPENDABOT_ALERTS_STATE_OPTIONS as E,DEPENDABOT_ALERTS_SEVERITY_OPTIONS as f,SECRET_SCANNING_ALERTS_STATE_OPTIONS as T,SECRET_SCANNING_ALERTS_VALIDITY_OPTIONS as O,SECURITY_ADVISORIES_STATE_OPTIONS as I,BRANCH_PROTECTIONS_FACT_NAME as u,BRANCH_RULES_FACT_NAME as g,REPOSITORY_DETAILS_FACT_NAME as p,REPOSITORY_LANGUAGES_FACT_NAME as b}from"./types.esm.js";const o="Fact name is not unique",r="Max 100 characters",D=A.merge(e.object({factDetails:e.strictObject({factName:e.string().min(1,m).max(100,r).regex(i,n),toolName:e.string().optional(),state:e.enum(d).or(e.literal("")).optional(),severity:e.enum(_).or(e.literal("")).optional()})})).strict(),R=A.merge(e.object({factDetails:e.strictObject({factName:e.string().min(1,m).max(100,r).regex(i,n),states:e.array(e.enum(E)).optional(),severities:e.array(e.enum(f)).optional()})})).strict(),C=A.merge(e.object({factDetails:e.strictObject({factName:e.string().min(1,m).max(100,r).regex(i,n),state:e.enum(T).or(e.literal("")).optional(),validities:e.array(e.enum(O)).optional()})})).strict(),h=A.merge(e.object({factDetails:e.strictObject({factName:e.string().min(1,m).max(100,r).regex(i,n),state:e.enum(I).or(e.literal("")).optional()})})).strict(),y=e.strictObject({branchProtections:S,branchRules:S,codeScanningAlerts:e.strictObject({enabled:e.boolean(),collectors:e.array(D)}),dependabotAlerts:e.strictObject({enabled:e.boolean(),collectors:e.array(R)}),repositoryDetails:S,repositoryLanguages:S,secretScanningAlerts:e.strictObject({enabled:e.boolean(),collectors:e.array(C)}),securityAdvisories:e.strictObject({enabled:e.boolean(),collectors:e.array(h)})}).superRefine((c,l)=>{const N=[u,g,p,b,...c.codeScanningAlerts.collectors.map(t=>t.factDetails.factName),...c.dependabotAlerts.collectors.map(t=>t.factDetails.factName),...c.secretScanningAlerts.collectors.map(t=>t.factDetails.factName),...c.securityAdvisories.collectors.map(t=>t.factDetails.factName)],s=N.filter((t,a)=>N.indexOf(t)!==a);s.length&&(c.codeScanningAlerts.collectors.forEach((t,a)=>{s.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:o,path:["codeScanningAlerts","collectors",a,"factDetails","factName"]})}),c.dependabotAlerts.collectors.forEach((t,a)=>{s.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:o,path:["dependabotAlerts","collectors",a,"factDetails","factName"]})}),c.secretScanningAlerts.collectors.forEach((t,a)=>{s.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:o,path:["secretScanningAlerts","collectors",a,"factDetails","factName"]})}),c.securityAdvisories.collectors.forEach((t,a)=>{s.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:o,path:["securityAdvisories","collectors",a,"factDetails","factName"]})}))});export{o as FACT_NAME_IS_NOT_UNIQUE_MSG,r as MAX_100_CHARACTERS_MSG,y as githubCollectorFormSchema};
2
2
  //# sourceMappingURL=validation.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as b,Fragment as v,jsx as o}from"react/jsx-runtime";import{zodResolver as F}from"@hookform/resolvers/zod";import{makeStyles as H,Paper as S}from"@material-ui/core";import{useCallback as q}from"react";import{useForm as N,FormProvider as R}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 T}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as w}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 x}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as y}from"../../../../routes.esm.js";import{FooterButtons as B}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as P}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as k}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as I}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as M,confirmationModalContent as U}from"../Common/utils.esm.js";import{RequestFactDetailsComponent as j}from"./RequestFactDetailsComponent.esm.js";import{mapConfigToHttpCollectorConfig as A,defaultHttpConfig as D,defaultRequestCollectorConfig as V,mapHttpCollectorConfigToConfig as z}from"./utils.esm.js";import{httpCollectorFormSchema as L}from"./validation.esm.js";const O=H(e=>({spacer:{height:e.spacing(8),width:"100%"},section:{marginBottom:e.spacing(2)}})),E=({disabled:e,selectedCollector:t})=>{const s=q(async(r,...i)=>{const g={enabled:!1,collectors:[]},h={request:r.request.enabled?r.request:g};return F(L)(h,...i)},[]),m=N({defaultValues:t?A(t.config):D(),mode:"onChange",resolver:s}),{formState:{isValid:c},handleSubmit:n}=m,a=O(),p=!c,{mutateAsync:f}=x(),[d,u]=w(y),{showModal:C}=T(),l=async r=>{if(!await C(U(t)))return;const i=z(r);await f({collectorId:t.id,config:i})&&u()};return P(M(t)),b(v,{children:[o(I,{collectorName:"Http",collectorId:t.id,hasNonUIOptions:!0}),o(S,{className:a.section,children:o(R,{...m,children:o("form",{onSubmit:n(l),children:o(k,{name:"request",label:"Request",description:"Collects data from HTTP endpoint.",disabled:e,FactDetailsComponent:j,multipleCollectors:{enable:!0,defaultConfig:V()}})})})}),o("div",{className:a.section,children:o(B,{onCancel:d,saveButtonText:"Save",isLoading:!1,onSave:n(l),disableSave:p})})]})};export{E as HttpConfigurator};
1
+ import{jsxs as b,Fragment as v,jsx as o}from"react/jsx-runtime";import{standardSchemaResolver as S}from"@hookform/resolvers/standard-schema";import{makeStyles as F,Paper as H}from"@material-ui/core";import{useCallback as q}from"react";import{useForm as N,FormProvider as R}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 T}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as w}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 x}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as y}from"../../../../routes.esm.js";import{FooterButtons as B}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as P}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as k}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as I}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as M,confirmationModalContent as U}from"../Common/utils.esm.js";import{RequestFactDetailsComponent as j}from"./RequestFactDetailsComponent.esm.js";import{mapConfigToHttpCollectorConfig as A,defaultHttpConfig as D,defaultRequestCollectorConfig as V,mapHttpCollectorConfigToConfig as L}from"./utils.esm.js";import{httpCollectorFormSchema as O}from"./validation.esm.js";const z=F(e=>({spacer:{height:e.spacing(8),width:"100%"},section:{marginBottom:e.spacing(2)}})),E=({disabled:e,selectedCollector:t})=>{const s=q(async(r,...i)=>{const g={enabled:!1,collectors:[]},h={request:r.request.enabled?r.request:g};return S(O)(h,...i)},[]),m=N({defaultValues:t?A(t.config):D(),mode:"onChange",resolver:s}),{formState:{isValid:c},handleSubmit:a}=m,n=z(),p=!c,{mutateAsync:f}=x(),[d,u]=w(y),{showModal:C}=T(),l=async r=>{if(!await C(U(t)))return;const i=L(r);await f({collectorId:t.id,config:i})&&u()};return P(M(t)),b(v,{children:[o(I,{collectorName:"Http",collectorId:t.id,hasNonUIOptions:!0}),o(H,{className:n.section,children:o(R,{...m,children:o("form",{onSubmit:a(l),children:o(k,{name:"request",label:"Request",description:"Collects data from HTTP endpoint.",disabled:e,FactDetailsComponent:j,multipleCollectors:{enable:!0,defaultConfig:V()}})})})}),o("div",{className:n.section,children:o(B,{onCancel:d,saveButtonText:"Save",isLoading:!1,onSave:a(l),disableSave:p})})]})};export{E as HttpConfigurator};
2
2
  //# sourceMappingURL=HttpConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{validFactNameRegex as m,invalidFactNameErrorMessage as p}from"@spotify/backstage-plugin-soundcheck-common";import{z as t}from"zod";import{FIELD_IS_REQUIRED_MSG as i}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as u}from"../Common/CollectorOption.esm.js";const n="Fact name is not unique",c="Max 100 characters",f=t.strictObject({method:t.enum(["POST","GET"]).optional(),url:t.string().min(1,i),headers:t.array(t.strictObject({key:t.string().optional(),value:t.string().optional()})),body:t.string().optional(),targetPluginId:t.string().optional()}),b=t.strictObject({transform:t.string().optional(),schema:t.string().optional(),emptyOnStatuses:t.array(t.number()).optional()}),d=t.strictObject({maxRetries:t.number().min(0).optional().nullable(),retryDelay:t.number().min(0).optional().nullable(),retryOnStatuses:t.array(t.number()).optional()}),g=u.extend({factDetails:t.strictObject({factName:t.string().min(1,i).max(100,c).regex(m,p),request:f,response:b,retries:d})}).strict(),O=t.strictObject({enabled:t.boolean(),collectors:t.array(g).superRefine((r,l)=>{const o=r.map(e=>e.factDetails.factName),s=o.filter((e,a)=>o.indexOf(e)!==a);s.length&&r.forEach((e,a)=>{s.includes(e.factDetails.factName)&&l.addIssue({code:t.ZodIssueCode.custom,message:n,path:[a,"factDetails","factName"]})})})}),S=t.strictObject({request:O});export{n as FACT_NAME_IS_NOT_UNIQUE_MSG,c as MAX_100_CHARACTERS_MSG,S as httpCollectorFormSchema};
1
+ import{validFactNameRegex as m,invalidFactNameErrorMessage as p}from"@spotify/backstage-plugin-soundcheck-common";import{z as t}from"zod/v3";import{FIELD_IS_REQUIRED_MSG as i}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as u}from"../Common/CollectorOption.esm.js";const n="Fact name is not unique",c="Max 100 characters",f=t.strictObject({method:t.enum(["POST","GET"]).optional(),url:t.string().min(1,i),headers:t.array(t.strictObject({key:t.string().optional(),value:t.string().optional()})),body:t.string().optional(),targetPluginId:t.string().optional()}),b=t.strictObject({transform:t.string().optional(),schema:t.string().optional(),emptyOnStatuses:t.array(t.number()).optional()}),d=t.strictObject({maxRetries:t.number().min(0).optional().nullable(),retryDelay:t.number().min(0).optional().nullable(),retryOnStatuses:t.array(t.number()).optional()}),g=u.extend({factDetails:t.strictObject({factName:t.string().min(1,i).max(100,c).regex(m,p),request:f,response:b,retries:d})}).strict(),O=t.strictObject({enabled:t.boolean(),collectors:t.array(g).superRefine((r,l)=>{const o=r.map(e=>e.factDetails.factName),s=o.filter((e,a)=>o.indexOf(e)!==a);s.length&&r.forEach((e,a)=>{s.includes(e.factDetails.factName)&&l.addIssue({code:t.ZodIssueCode.custom,message:n,path:[a,"factDetails","factName"]})})})}),S=t.strictObject({request:O});export{n as FACT_NAME_IS_NOT_UNIQUE_MSG,c as MAX_100_CHARACTERS_MSG,S as httpCollectorFormSchema};
2
2
  //# sourceMappingURL=validation.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as i,Fragment as N,jsx as o}from"react/jsx-runtime";import{DismissableBanner as w}from"@backstage/core-components";import{zodResolver as y}from"@hookform/resolvers/zod";import{makeStyles as D,Typography as F,Link as l,Paper as j,Divider as L}from"@material-ui/core";import{useForm as A,FormProvider as P}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"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as T}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as x}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 B}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as M}from"../../../../routes.esm.js";import{FooterButtons as R}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as U}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as m}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as q}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as H,confirmationModalContent as O}from"../Common/utils.esm.js";import{IssuesFactDetailsComponent as p}from"./IssuesFactDetailsComponent.esm.js";import{mapConfigToJiraCollectorConfig as Q,defaultJiraConfig as _,issuesCollectorConfig as d,mapJiraCollectorConfigToConfig as z}from"./utils.esm.js";import{jiraCollectorFormSchema as V}from"./validation.esm.js";const E=D(r=>({spacer:{height:r.spacing(8),width:"100%"},section:{marginBottom:r.spacing(2)},apiLink:{color:r.palette.text.primary}})),G=({disabled:r,selectedCollector:e})=>{const s=A({defaultValues:e?Q(e.config):_(),mode:"onChange",resolver:y(V)}),{formState:{errors:u},handleSubmit:n}=s,a=E(),f=!!u.issuesSearch,{mutateAsync:h}=B(),[g,C]=x(M),{showModal:S}=T(),c=async k=>{if(!await S(O(e)))return;const I=z(k);await h({collectorId:e.id,config:I})&&C()};U(H(e));const b=!e.config?.apiToken||!e.config?.username,v=!e.config?.personalAccessToken,J=!e.config?.baseUrl||b&&v,t={issuesSearchDeprecated:{name:"Search for issues using JQL",href:"https://developer.atlassian.com/cloud/jira/platform/rest/v2/api-group-issue-search/#api-rest-api-2-search-get"},issuesSearchNew:{name:"Search for issues using JQL enhanced search",href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-search/#api-rest-api-3-search-jql-post"}};return i(N,{children:[o(q,{collectorName:"Jira",collectorId:e.id,invalidConfig:J,hasNonUIOptions:!0}),o(w,{message:i(F,{variant:"body2",children:["Issues Search fact collector now uses the updated",o(l,{href:t.issuesSearchNew.href,target:"_blank",children:i("span",{className:a.apiLink,children:[" ",t.issuesSearchNew.name," "]})}),"API, as the previous",o(l,{href:t.issuesSearchDeprecated.href,target:"_blank",children:i("span",{className:a.apiLink,children:[" ",t.issuesSearchDeprecated.name," "]})}),"API was deprecated and removed for Jira Cloud instances. Jira Cloud users may be required to update their dependent checks due to this minor API schema change."]}),variant:"warning",id:"jiraDeprecatedIssuesSearch"}),o(j,{className:a.section,children:o(P,{...s,children:i("form",{onSubmit:n(c),children:[o(m,{name:"issuesSearch",label:"Issues Search",description:"Collects details about Jira issues.",disabled:r,FactDetailsComponent:p,multipleCollectors:{enable:!0,defaultConfig:d(e.config)}}),o(L,{}),o(m,{name:"issuesCount",label:"Issues Count",description:"Collects details about a total number of Jira issues.",disabled:r,FactDetailsComponent:p,multipleCollectors:{enable:!0,defaultConfig:d(e.config)}})]})})}),o("div",{className:a.section,children:o(R,{onCancel:g,saveButtonText:"Save",isLoading:!1,onSave:n(c),disableSave:f})})]})};export{G as JiraConfigurator};
1
+ import{jsxs as i,Fragment as N,jsx as o}from"react/jsx-runtime";import{DismissableBanner as w}from"@backstage/core-components";import{standardSchemaResolver as y}from"@hookform/resolvers/standard-schema";import{makeStyles as D,Typography as F,Link as l,Paper as j,Divider as L}from"@material-ui/core";import{useForm as A,FormProvider as P}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"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as T}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as x}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 B}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as M}from"../../../../routes.esm.js";import{FooterButtons as R}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as U}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as m}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as q}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as H,confirmationModalContent as Q}from"../Common/utils.esm.js";import{IssuesFactDetailsComponent as p}from"./IssuesFactDetailsComponent.esm.js";import{mapConfigToJiraCollectorConfig as V,defaultJiraConfig as _,issuesCollectorConfig as d,mapJiraCollectorConfigToConfig as O}from"./utils.esm.js";import{jiraCollectorFormSchema as z}from"./validation.esm.js";const E=D(r=>({spacer:{height:r.spacing(8),width:"100%"},section:{marginBottom:r.spacing(2)},apiLink:{color:r.palette.text.primary}})),G=({disabled:r,selectedCollector:e})=>{const s=A({defaultValues:e?V(e.config):_(),mode:"onChange",resolver:y(z)}),{formState:{errors:u},handleSubmit:n}=s,a=E(),f=!!u.issuesSearch,{mutateAsync:h}=B(),[g,C]=x(M),{showModal:S}=T(),c=async k=>{if(!await S(Q(e)))return;const I=O(k);await h({collectorId:e.id,config:I})&&C()};U(H(e));const b=!e.config?.apiToken||!e.config?.username,v=!e.config?.personalAccessToken,J=!e.config?.baseUrl||b&&v,t={issuesSearchDeprecated:{name:"Search for issues using JQL",href:"https://developer.atlassian.com/cloud/jira/platform/rest/v2/api-group-issue-search/#api-rest-api-2-search-get"},issuesSearchNew:{name:"Search for issues using JQL enhanced search",href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-search/#api-rest-api-3-search-jql-post"}};return i(N,{children:[o(q,{collectorName:"Jira",collectorId:e.id,invalidConfig:J,hasNonUIOptions:!0}),o(w,{message:i(F,{variant:"body2",children:["Issues Search fact collector now uses the updated",o(l,{href:t.issuesSearchNew.href,target:"_blank",children:i("span",{className:a.apiLink,children:[" ",t.issuesSearchNew.name," "]})}),"API, as the previous",o(l,{href:t.issuesSearchDeprecated.href,target:"_blank",children:i("span",{className:a.apiLink,children:[" ",t.issuesSearchDeprecated.name," "]})}),"API was deprecated and removed for Jira Cloud instances. Jira Cloud users may be required to update their dependent checks due to this minor API schema change."]}),variant:"warning",id:"jiraDeprecatedIssuesSearch"}),o(j,{className:a.section,children:o(P,{...s,children:i("form",{onSubmit:n(c),children:[o(m,{name:"issuesSearch",label:"Issues Search",description:"Collects details about Jira issues.",disabled:r,FactDetailsComponent:p,multipleCollectors:{enable:!0,defaultConfig:d(e.config)}}),o(L,{}),o(m,{name:"issuesCount",label:"Issues Count",description:"Collects details about a total number of Jira issues.",disabled:r,FactDetailsComponent:p,multipleCollectors:{enable:!0,defaultConfig:d(e.config)}})]})})}),o("div",{className:a.section,children:o(R,{onCancel:g,saveButtonText:"Save",isLoading:!1,onSave:n(c),disableSave:f})})]})};export{G as JiraConfigurator};
2
2
  //# sourceMappingURL=JiraConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{validFactNameRegex as f,invalidFactNameErrorMessage as n}from"@spotify/backstage-plugin-soundcheck-common";import{z as s}from"zod";import{FIELD_IS_REQUIRED_MSG as u}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as d}from"../Common/CollectorOption.esm.js";const o="Fact name is not unique",l="Max 100 characters",h=d.extend({factDetails:s.strictObject({factName:s.string().min(1,u).max(100,l).regex(f,n),jql:s.string().optional()})}).strict(),m=s.strictObject({enabled:s.boolean(),collectors:s.array(h)}),N=s.strictObject({issuesSearch:m,issuesCount:m}).superRefine((a,r)=>{const i=[...a.issuesSearch.collectors.map(e=>e.factDetails.factName),...a.issuesCount.collectors.map(e=>e.factDetails.factName)],c=i.filter((e,t)=>i.indexOf(e)!==t);c.length&&(a.issuesSearch.collectors.forEach((e,t)=>{c.includes(e.factDetails.factName)&&r.addIssue({code:s.ZodIssueCode.custom,message:o,path:["issuesSearch","collectors",t,"factDetails","factName"]})}),a.issuesCount.collectors.forEach((e,t)=>{c.includes(e.factDetails.factName)&&r.addIssue({code:s.ZodIssueCode.custom,message:o,path:["issuesCount","collectors",t,"factDetails","factName"]})}))});export{o as FACT_NAME_IS_NOT_UNIQUE_MSG,l as MAX_100_CHARACTERS_MSG,N as jiraCollectorFormSchema};
1
+ import{validFactNameRegex as f,invalidFactNameErrorMessage as n}from"@spotify/backstage-plugin-soundcheck-common";import{z as s}from"zod/v3";import{FIELD_IS_REQUIRED_MSG as u}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as d}from"../Common/CollectorOption.esm.js";const o="Fact name is not unique",l="Max 100 characters",h=d.extend({factDetails:s.strictObject({factName:s.string().min(1,u).max(100,l).regex(f,n),jql:s.string().optional()})}).strict(),m=s.strictObject({enabled:s.boolean(),collectors:s.array(h)}),N=s.strictObject({issuesSearch:m,issuesCount:m}).superRefine((a,r)=>{const i=[...a.issuesSearch.collectors.map(e=>e.factDetails.factName),...a.issuesCount.collectors.map(e=>e.factDetails.factName)],c=i.filter((e,t)=>i.indexOf(e)!==t);c.length&&(a.issuesSearch.collectors.forEach((e,t)=>{c.includes(e.factDetails.factName)&&r.addIssue({code:s.ZodIssueCode.custom,message:o,path:["issuesSearch","collectors",t,"factDetails","factName"]})}),a.issuesCount.collectors.forEach((e,t)=>{c.includes(e.factDetails.factName)&&r.addIssue({code:s.ZodIssueCode.custom,message:o,path:["issuesCount","collectors",t,"factDetails","factName"]})}))});export{o as FACT_NAME_IS_NOT_UNIQUE_MSG,l as MAX_100_CHARACTERS_MSG,N as jiraCollectorFormSchema};
2
2
  //# sourceMappingURL=validation.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as n,Fragment as b,jsx as o}from"react/jsx-runtime";import{zodResolver as h}from"@hookform/resolvers/zod";import{makeStyles as v,Paper as S,Divider as F}from"@material-ui/core";import{useForm as R,FormProvider as K}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"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as w}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as x}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 y}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as B}from"../../../../routes.esm.js";import{FooterButtons as D}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as L}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as c}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{defaultCollectorOption as N}from"../Common/CollectorOption.esm.js";import{collectorHeaderContent as O,confirmationModalContent as T}from"../Common/utils.esm.js";import{KubernetesFactDetails as j}from"./KubernetesFactDetails.esm.js";import{mapConfigToKubernetesCollectorConfig as k,defaultKubernetesConfig as I,K8S_COLLECTOR_FIELDS as M,mapKubernetesCollectorConfigToConfig as P}from"./utils.esm.js";import{customResourceFormSchema as E}from"./validation.esm.js";const H=v(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),V=({disabled:t,selectedCollector:e})=>{const r=R({defaultValues:e?k(e.config):I(),mode:"onChange",resolver:h(E)}),a=H(),{mutateAsync:p}=y(),[d,f]=x(B),{isValid:u}=r.formState,{showModal:C}=w(),s=async m=>{if(!await C(T(e)))return;const i=P(m);await p({collectorId:e.id,config:i})&&f()};return L(O(e)),n(b,{children:[o(S,{className:a.section,children:o(K,{...r,children:n("form",{onSubmit:r.handleSubmit(s),children:[Object.entries(M).map(([m,i],l,g)=>n("div",{children:[o(c,{name:m,label:i.label,description:i.description,disabled:t}),l<g.length-1&&o(F,{})]},l)),o(c,{name:"customResources",label:"Custom Resources",description:"Collect facts from a kubernetes custom resource associated with an entity.",disabled:t,FactDetailsComponent:j,multipleCollectors:{enable:!0,defaultConfig:N(e.config)}})]})})}),o("div",{className:a.section,children:o(D,{onCancel:d,saveButtonText:"Save",isLoading:!1,onSave:r.handleSubmit(s),disableSave:!u})})]})};export{V as KubernetesConfigurator};
1
+ import{jsxs as n,Fragment as b,jsx as o}from"react/jsx-runtime";import{standardSchemaResolver as h}from"@hookform/resolvers/standard-schema";import{makeStyles as S,Paper as v,Divider as F}from"@material-ui/core";import{useForm as R,FormProvider as K}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"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as w}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as x}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 y}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as B}from"../../../../routes.esm.js";import{FooterButtons as D}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as L}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as c}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{defaultCollectorOption as N}from"../Common/CollectorOption.esm.js";import{collectorHeaderContent as O,confirmationModalContent as T}from"../Common/utils.esm.js";import{KubernetesFactDetails as j}from"./KubernetesFactDetails.esm.js";import{mapConfigToKubernetesCollectorConfig as k,defaultKubernetesConfig as I,K8S_COLLECTOR_FIELDS as M,mapKubernetesCollectorConfigToConfig as P}from"./utils.esm.js";import{customResourceFormSchema as E}from"./validation.esm.js";const H=S(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),V=({disabled:t,selectedCollector:e})=>{const r=R({defaultValues:e?k(e.config):I(),mode:"onChange",resolver:h(E)}),a=H(),{mutateAsync:p}=y(),[d,f]=x(B),{isValid:u}=r.formState,{showModal:C}=w(),s=async m=>{if(!await C(T(e)))return;const i=P(m);await p({collectorId:e.id,config:i})&&f()};return L(O(e)),n(b,{children:[o(v,{className:a.section,children:o(K,{...r,children:n("form",{onSubmit:r.handleSubmit(s),children:[Object.entries(M).map(([m,i],l,g)=>n("div",{children:[o(c,{name:m,label:i.label,description:i.description,disabled:t}),l<g.length-1&&o(F,{})]},l)),o(c,{name:"customResources",label:"Custom Resources",description:"Collect facts from a kubernetes custom resource associated with an entity.",disabled:t,FactDetailsComponent:j,multipleCollectors:{enable:!0,defaultConfig:N(e.config)}})]})})}),o("div",{className:a.section,children:o(D,{onCancel:d,saveButtonText:"Save",isLoading:!1,onSave:r.handleSubmit(s),disableSave:!u})})]})};export{V as KubernetesConfigurator};
2
2
  //# sourceMappingURL=KubernetesConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{validFactNameRegex as l,invalidFactNameErrorMessage as f}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FIELD_IS_REQUIRED_MSG as p}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as u,CollectorOptionSchema as t}from"../Common/CollectorOption.esm.js";const i="Fact name is not unique",m="Max 100 characters",d=u.extend({enabled:e.boolean(),factDetails:e.strictObject({factName:e.string().min(1,p).max(100,m).regex(l,f),customResource:e.strictObject({group:e.string(),apiVersion:e.string(),plural:e.string()})})}).strict(),g=e.strictObject({enabled:e.boolean(),collectors:e.array(d).superRefine((c,n)=>{const o=c.map(s=>s.factDetails.factName),r=o.filter((s,a)=>o.indexOf(s)!==a);r.length&&c.forEach((s,a)=>{r.includes(s.factDetails.factName)&&n.addIssue({code:e.ZodIssueCode.custom,message:i,path:[a,"factDetails","factName"]})})})}),_=e.strictObject({deployments:t,hpas:t,ingresses:t,podDisruptionBudgets:t,pods:t,services:t,statefulSets:t,customResources:g});export{i as FACT_NAME_IS_NOT_UNIQUE_MSG,m as MAX_100_CHARACTERS_MSG,_ as customResourceFormSchema};
1
+ import{validFactNameRegex as l,invalidFactNameErrorMessage as f}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod/v3";import{FIELD_IS_REQUIRED_MSG as p}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as u,CollectorOptionSchema as t}from"../Common/CollectorOption.esm.js";const i="Fact name is not unique",m="Max 100 characters",d=u.extend({enabled:e.boolean(),factDetails:e.strictObject({factName:e.string().min(1,p).max(100,m).regex(l,f),customResource:e.strictObject({group:e.string(),apiVersion:e.string(),plural:e.string()})})}).strict(),g=e.strictObject({enabled:e.boolean(),collectors:e.array(d).superRefine((c,n)=>{const o=c.map(s=>s.factDetails.factName),r=o.filter((s,a)=>o.indexOf(s)!==a);r.length&&c.forEach((s,a)=>{r.includes(s.factDetails.factName)&&n.addIssue({code:e.ZodIssueCode.custom,message:i,path:[a,"factDetails","factName"]})})})}),_=e.strictObject({deployments:t,hpas:t,ingresses:t,podDisruptionBudgets:t,pods:t,services:t,statefulSets:t,customResources:g});export{i as FACT_NAME_IS_NOT_UNIQUE_MSG,m as MAX_100_CHARACTERS_MSG,_ as customResourceFormSchema};
2
2
  //# sourceMappingURL=validation.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as m,Fragment as D,jsx as o}from"react/jsx-runtime";import{zodResolver as P}from"@hookform/resolvers/zod";import{makeStyles as b,Paper as h,Divider as c}from"@material-ui/core";import{useForm as S,FormProvider as T}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"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as L}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as E}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 N}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as w}from"../../../../routes.esm.js";import{FooterButtons as F}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as I}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as R}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as O,confirmationModalContent as k}from"../Common/utils.esm.js";import{IncidentsFactDetailsComponent as _}from"./IncidentsFactDetailsComponent.esm.js";import{mapConfigToPagerDutyCollectorConfig as x,defaultPagerDutyConfig as A,SERVICE_COLLECTOR_TYPE as B,STANDARDS_COLLECTOR_TYPE as M,INCIDENTS_COLLECTOR_TYPE as Y,incidentsCollectorConfig as j,mapPagerDutyCollectorConfigToConfig as H}from"./utils.esm.js";import{pagerDutyCollectorFormSchema as U}from"./validation.esm.js";const V=b(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),z=({disabled:t,selectedCollector:e})=>{const a=S({defaultValues:e?x(e.config):A(),mode:"onChange",resolver:P(U)}),{formState:{errors:i},handleSubmit:n}=a,l=V(),d=!!i.service||!!i.standards||!!i.incidents,{mutateAsync:p}=N(),[f,C]=E(w),{showModal:g}=L(),s=async v=>{if(!await g(k(e)))return;const y=H(v);await p({collectorId:e.id,config:y})&&C()};I(O(e));const u=!e.config?.token||!e.config?.server;return m(D,{children:[o(R,{collectorName:"PagerDuty",collectorId:e.id,invalidConfig:u,hasNonUIOptions:!0}),o(h,{className:l.section,children:o(T,{...a,children:m("form",{onSubmit:n(s),children:[o(r,{name:B.toLowerCase(),label:"Service",description:"Collects details about PagerDuty service linked to an entity.",disabled:t}),o(c,{}),o(r,{name:M.toLowerCase(),label:"Standards",description:"Collects details about standards applied to a PagerDuty service linked to an entity.",disabled:t}),o(c,{}),o(r,{name:Y.toLowerCase(),label:"Incidents",description:"Collects details about incidents associated with a PagerDuty service linked to an entity.",disabled:t,FactDetailsComponent:_,multipleCollectors:{enable:!0,defaultConfig:j(e.config)}})]})})}),o("div",{className:l.section,children:o(F,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:n(s),disableSave:d})})]})};export{z as PagerDutyConfigurator};
1
+ import{jsxs as m,Fragment as y,jsx as o}from"react/jsx-runtime";import{standardSchemaResolver as D}from"@hookform/resolvers/standard-schema";import{makeStyles as P,Paper as S,Divider as c}from"@material-ui/core";import{useForm as b,FormProvider as T}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"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as L}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as E}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 N}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as w}from"../../../../routes.esm.js";import{FooterButtons as F}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as I}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as R}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as O,confirmationModalContent as k}from"../Common/utils.esm.js";import{IncidentsFactDetailsComponent as _}from"./IncidentsFactDetailsComponent.esm.js";import{mapConfigToPagerDutyCollectorConfig as x,defaultPagerDutyConfig as A,SERVICE_COLLECTOR_TYPE as B,STANDARDS_COLLECTOR_TYPE as M,INCIDENTS_COLLECTOR_TYPE as Y,incidentsCollectorConfig as j,mapPagerDutyCollectorConfigToConfig as H}from"./utils.esm.js";import{pagerDutyCollectorFormSchema as U}from"./validation.esm.js";const V=P(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),Q=({disabled:t,selectedCollector:e})=>{const a=b({defaultValues:e?x(e.config):A(),mode:"onChange",resolver:D(U)}),{formState:{errors:i},handleSubmit:n}=a,l=V(),d=!!i.service||!!i.standards||!!i.incidents,{mutateAsync:p}=N(),[f,C]=E(w),{showModal:g}=L(),s=async v=>{if(!await g(k(e)))return;const h=H(v);await p({collectorId:e.id,config:h})&&C()};I(O(e));const u=!e.config?.token||!e.config?.server;return m(y,{children:[o(R,{collectorName:"PagerDuty",collectorId:e.id,invalidConfig:u,hasNonUIOptions:!0}),o(S,{className:l.section,children:o(T,{...a,children:m("form",{onSubmit:n(s),children:[o(r,{name:B.toLowerCase(),label:"Service",description:"Collects details about PagerDuty service linked to an entity.",disabled:t}),o(c,{}),o(r,{name:M.toLowerCase(),label:"Standards",description:"Collects details about standards applied to a PagerDuty service linked to an entity.",disabled:t}),o(c,{}),o(r,{name:Y.toLowerCase(),label:"Incidents",description:"Collects details about incidents associated with a PagerDuty service linked to an entity.",disabled:t,FactDetailsComponent:_,multipleCollectors:{enable:!0,defaultConfig:j(e.config)}})]})})}),o("div",{className:l.section,children:o(F,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:n(s),disableSave:d})})]})};export{Q as PagerDutyConfigurator};
2
2
  //# sourceMappingURL=PagerDutyConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{validFactNameRegex as d,invalidFactNameErrorMessage as f}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FIELD_IS_REQUIRED_MSG as g}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as S,CollectorOptionSchema as r}from"../Common/CollectorOption.esm.js";const i="Fact name is not unique",l="Max 100 characters",n="At least one status must be selected",_=S.extend({factDetails:e.strictObject({factName:e.string().min(1,g).max(100,l).regex(d,f),statuses:e.strictObject({triggered:e.boolean(),acknowledged:e.boolean(),resolved:e.boolean()}).refine(t=>t.triggered||t.acknowledged||t.resolved,{message:n})})}).strict(),E=e.strictObject({enabled:e.boolean(),collectors:e.array(_).superRefine((t,m)=>{const o=t.map(a=>a.factDetails.factName),c=o.filter((a,s)=>o.indexOf(a)!==s);c.length&&t.forEach((a,s)=>{c.includes(a.factDetails.factName)&&m.addIssue({code:e.ZodIssueCode.custom,message:i,path:[s,"factDetails","factName"]})})})}),u=e.strictObject({service:r,standards:r,incidents:E});export{i as FACT_NAME_IS_NOT_UNIQUE_MSG,l as MAX_100_CHARACTERS_MSG,n as NO_SELECTED_STATUSES,u as pagerDutyCollectorFormSchema};
1
+ import{validFactNameRegex as d,invalidFactNameErrorMessage as f}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod/v3";import{FIELD_IS_REQUIRED_MSG as g}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as S,CollectorOptionSchema as r}from"../Common/CollectorOption.esm.js";const i="Fact name is not unique",l="Max 100 characters",n="At least one status must be selected",_=S.extend({factDetails:e.strictObject({factName:e.string().min(1,g).max(100,l).regex(d,f),statuses:e.strictObject({triggered:e.boolean(),acknowledged:e.boolean(),resolved:e.boolean()}).refine(t=>t.triggered||t.acknowledged||t.resolved,{message:n})})}).strict(),E=e.strictObject({enabled:e.boolean(),collectors:e.array(_).superRefine((t,m)=>{const o=t.map(a=>a.factDetails.factName),c=o.filter((a,s)=>o.indexOf(a)!==s);c.length&&t.forEach((a,s)=>{c.includes(a.factDetails.factName)&&m.addIssue({code:e.ZodIssueCode.custom,message:i,path:[s,"factDetails","factName"]})})})}),u=e.strictObject({service:r,standards:r,incidents:E});export{i as FACT_NAME_IS_NOT_UNIQUE_MSG,l as MAX_100_CHARACTERS_MSG,n as NO_SELECTED_STATUSES,u as pagerDutyCollectorFormSchema};
2
2
  //# sourceMappingURL=validation.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as t,jsx as e}from"react/jsx-runtime";import{makeStyles as L,Box as m,Grid as d,Typography as a,TextField as h,RadioGroup as D,FormControlLabel as I,Radio as M,MenuItem as _,IconButton as $}from"@material-ui/core";import A from"@material-ui/icons/Add";import H from"@material-ui/icons/Remove";import{useState as R}from"react";import{useFormContext as w,useFieldArray as k,Controller as u}from"react-hook-form";import{FactDetailsComponent as z}from"./FactDetailsComponent.esm.js";import{ELEMENT_TYPES as j,DEFAULT_REGEX_FACT_DATA as E,SCM_COLLECTOR_FIELDS as B}from"./utils.esm.js";const x="CaptureGroupsMode",g="TrueFalseMode",O=L(i=>({textInput:{marginTop:0,width:"690px"},labelInput:{marginTop:0,width:"255px"},typeInput:{marginTop:0,width:"150px"},helperText:{marginLeft:0},caption:{margin:i.spacing(2,0)},regexSection:{padding:i.spacing(1,0)}})),U=({name:i,disabled:c})=>{const l=O(),{label:C,type:F,filePath:T,regex:n}=B.factDetails,{control:p}=w(),{fields:f,insert:y,remove:N}=k({control:p,name:`${i}.data`}),[v,G]=R(f.length?x:g),P=o=>{const r=o.target.value;G(r),r===x?y(0,E):r===g&&N()};return t(m,{children:[e(z,{name:i,control:p,disabled:c}),t(d,{container:!0,spacing:1,direction:"column",className:l.regexSection,children:[t(d,{item:!0,children:[t(m,{children:[e(a,{variant:"subtitle2",children:T.name}),e(a,{variant:"caption",children:T.helperText})]}),e(u,{name:`${i}.path`,control:p,render:({field:o,fieldState:{error:r}})=>e(h,{...o,type:"text",variant:"outlined",margin:"dense",placeholder:T.placeholder,className:l.textInput,disabled:c,error:!!r,helperText:r?.message??"",FormHelperTextProps:{className:l.helperText}})})]}),t(d,{item:!0,children:[t(m,{children:[e(a,{variant:"subtitle2",children:n.regex.name}),e(a,{variant:"caption",children:n.regex.helperText})]}),e(u,{name:`${i}.regex`,control:p,render:({field:o,fieldState:{error:r}})=>e(h,{...o,type:"text",variant:"outlined",margin:"dense",placeholder:n.regex.placeholder,className:l.textInput,disabled:c,error:!!r,helperText:r?.message??"",FormHelperTextProps:{className:l.helperText}})})]}),t(d,{item:!0,children:[t(m,{children:[e(a,{variant:"subtitle2",children:n.flags.name}),e(a,{variant:"caption",children:n.flags.helperText})]}),e(u,{name:`${i}.flags`,control:p,render:({field:o,fieldState:{error:r}})=>e(h,{...o,type:"text",variant:"outlined",margin:"dense",placeholder:n.flags.placeholder,className:l.textInput,disabled:c,error:!!r,helperText:r?.message??"",FormHelperTextProps:{className:l.helperText}})})]})]}),t(D,{row:!0,name:"regexMode",value:v,onChange:P,children:[e(I,{value:g,control:e(M,{}),label:e(a,{variant:"subtitle2",children:n.trueFalseMode.label})}),e(I,{value:x,control:e(M,{}),label:e(a,{variant:"subtitle2",children:n.captureGroupsMode.label})})]}),v===g&&e(a,{variant:"caption",children:n.trueFalseMode.description}),v===x&&t(m,{children:[e(a,{variant:"caption",children:n.captureGroupsMode.description}),t("div",{className:l.caption,children:[e(a,{variant:"subtitle2",children:n.captureGroupsSection.name}),e(a,{variant:"caption",children:n.captureGroupsSection.description})]}),e(d,{container:!0,spacing:0,direction:"column",children:f.map((o,r)=>t(d,{item:!0,container:!0,alignItems:"center",spacing:2,children:[t(d,{item:!0,children:[e(a,{variant:"subtitle2",children:C.name}),e(u,{name:`${i}.data.${r}.name`,control:p,render:({field:b,fieldState:{error:s}})=>e(h,{...b,type:"text",variant:"outlined",margin:"dense",placeholder:C.placeholder,className:l.labelInput,disabled:c,error:!!s,helperText:s?.message??" ",FormHelperTextProps:{className:l.helperText}})})]}),t(d,{item:!0,children:[e(a,{variant:"subtitle2",children:F.name}),e(u,{name:`${i}.data.${r}.type`,control:p,render:({field:b,fieldState:{error:s}})=>e(h,{...b,select:!0,type:"text",variant:"outlined",margin:"dense",placeholder:F.placeholder,className:l.typeInput,disabled:c,error:!!s,helperText:s?.message??" ",FormHelperTextProps:{className:l.helperText},children:j.map(S=>e(_,{value:S,children:S},S))})})]}),t(d,{item:!0,children:[e($,{onClick:()=>N(r),disabled:c||f.length===1,children:e(H,{fontSize:"small"})}),e($,{onClick:()=>y(r+1,E),disabled:c,children:e(A,{fontSize:"small"})})]})]},o.id))})]})]})};export{U as RegexFactDetailsComponent};
1
+ import{jsxs as a,jsx as e}from"react/jsx-runtime";import{makeStyles as H,Box as m,Grid as d,Typography as t,TextField as h,RadioGroup as R,FormControlLabel as A,Radio as I,MenuItem as w,IconButton as E}from"@material-ui/core";import k from"@material-ui/icons/Add";import j from"@material-ui/icons/Remove";import{useState as z}from"react";import{useFormContext as B,useFieldArray as O,Controller as u}from"react-hook-form";import{FactDetailsComponent as V}from"./FactDetailsComponent.esm.js";import{ELEMENT_TYPES as q,DEFAULT_REGEX_FACT_DATA as G,SCM_COLLECTOR_FIELDS as U}from"./utils.esm.js";const g="CaptureGroupsMode",T="TrueFalseMode",b="MatchAllMode",X=H(l=>({textInput:{marginTop:0,width:"690px"},labelInput:{marginTop:0,width:"255px"},typeInput:{marginTop:0,width:"150px"},helperText:{marginLeft:0},caption:{margin:l.spacing(2,0)},regexSection:{padding:l.spacing(1,0)}})),Y=({name:l,disabled:o})=>{const i=X(),{label:N,type:$,filePath:v,regex:n}=U.factDetails,{control:s,getValues:L,setValue:f}=B(),{fields:F,insert:C,remove:S}=O({control:s,name:`${l}.data`}),P=()=>L(`${l}.matchAll`)?b:F.length?g:T,[x,_]=z(P),D=c=>{const r=c.target.value;_(r),r===g?(C(0,G),f(`${l}.matchAll`,!1)):r===T?(S(),f(`${l}.matchAll`,!1)):r===b&&(S(),f(`${l}.matchAll`,!0))};return a(m,{children:[e(V,{name:l,control:s,disabled:o}),a(d,{container:!0,spacing:1,direction:"column",className:i.regexSection,children:[a(d,{item:!0,children:[a(m,{children:[e(t,{variant:"subtitle2",children:v.name}),e(t,{variant:"caption",children:v.helperText})]}),e(u,{name:`${l}.path`,control:s,render:({field:c,fieldState:{error:r}})=>e(h,{...c,type:"text",variant:"outlined",margin:"dense",placeholder:v.placeholder,className:i.textInput,disabled:o,error:!!r,helperText:r?.message??"",FormHelperTextProps:{className:i.helperText}})})]}),a(d,{item:!0,children:[a(m,{children:[e(t,{variant:"subtitle2",children:n.regex.name}),e(t,{variant:"caption",children:n.regex.helperText})]}),e(u,{name:`${l}.regex`,control:s,render:({field:c,fieldState:{error:r}})=>e(h,{...c,type:"text",variant:"outlined",margin:"dense",placeholder:n.regex.placeholder,className:i.textInput,disabled:o,error:!!r,helperText:r?.message??"",FormHelperTextProps:{className:i.helperText}})})]}),a(d,{item:!0,children:[a(m,{children:[e(t,{variant:"subtitle2",children:n.flags.name}),e(t,{variant:"caption",children:n.flags.helperText})]}),e(u,{name:`${l}.flags`,control:s,render:({field:c,fieldState:{error:r}})=>e(h,{...c,type:"text",variant:"outlined",margin:"dense",placeholder:n.flags.placeholder,className:i.textInput,disabled:o,error:!!r,helperText:r?.message??"",FormHelperTextProps:{className:i.helperText}})})]})]}),a(R,{row:!0,name:"regexMode",value:x,onChange:D,children:[e(A,{value:T,control:e(I,{}),label:e(t,{variant:"subtitle2",children:n.trueFalseMode.label})}),e(A,{value:g,control:e(I,{}),label:e(t,{variant:"subtitle2",children:n.captureGroupsMode.label})}),e(A,{value:b,control:e(I,{}),disabled:o,label:e(t,{variant:"subtitle2",children:n.matchAllMode.label})})]}),x===T&&e(t,{variant:"caption",children:n.trueFalseMode.description}),x===b&&e(t,{variant:"caption",children:n.matchAllMode.description}),x===g&&a(m,{children:[e(t,{variant:"caption",children:n.captureGroupsMode.description}),a("div",{className:i.caption,children:[e(t,{variant:"subtitle2",children:n.captureGroupsSection.name}),e(t,{variant:"caption",children:n.captureGroupsSection.description})]}),e(d,{container:!0,spacing:0,direction:"column",children:F.map((c,r)=>a(d,{item:!0,container:!0,alignItems:"center",spacing:2,children:[a(d,{item:!0,children:[e(t,{variant:"subtitle2",children:N.name}),e(u,{name:`${l}.data.${r}.name`,control:s,render:({field:M,fieldState:{error:p}})=>e(h,{...M,type:"text",variant:"outlined",margin:"dense",placeholder:N.placeholder,className:i.labelInput,disabled:o,error:!!p,helperText:p?.message??" ",FormHelperTextProps:{className:i.helperText}})})]}),a(d,{item:!0,children:[e(t,{variant:"subtitle2",children:$.name}),e(u,{name:`${l}.data.${r}.type`,control:s,render:({field:M,fieldState:{error:p}})=>e(h,{...M,select:!0,type:"text",variant:"outlined",margin:"dense",placeholder:$.placeholder,className:i.typeInput,disabled:o,error:!!p,helperText:p?.message??" ",FormHelperTextProps:{className:i.helperText},children:q.map(y=>e(w,{value:y,children:y},y))})})]}),a(d,{item:!0,children:[e(E,{onClick:()=>S(r),disabled:o||F.length===1,children:e(j,{fontSize:"small"})}),e(E,{onClick:()=>C(r+1,G),disabled:o,children:e(k,{fontSize:"small"})})]})]},c.id))})]})]})};export{Y as RegexFactDetailsComponent};
2
2
  //# sourceMappingURL=RegexFactDetailsComponent.esm.js.map