@spotify/backstage-plugin-soundcheck 0.13.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -0
- package/alpha/package.json +1 -1
- package/dist/alpha/pages.esm.js +1 -1
- package/dist/alpha.d.ts +1 -1
- package/dist/api.esm.js +1 -1
- package/dist/components/Badges/BaseBadge.esm.js +1 -1
- package/dist/components/Badges/CampaignBadge.esm.js +1 -1
- package/dist/components/Badges/CertificationBadge.esm.js +1 -1
- package/dist/components/Badges/NoLevelBadge.esm.js +5 -1
- package/dist/components/Badges/PlaylistBadge.esm.js +1 -1
- package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +2 -0
- package/dist/components/CampaignDetailsPage/CampaignChecks.esm.js +1 -1
- package/dist/components/CampaignDetailsPage/CampaignDetailRow.esm.js +1 -1
- package/dist/components/CampaignDetailsPage/CampaignDetails.esm.js +1 -1
- package/dist/components/CampaignDetailsPage/CampaignDetailsPage.esm.js +1 -1
- package/dist/components/CampaignDetailsPage/CampaignMilestones.esm.js +1 -1
- package/dist/components/CampaignDetailsPage/CampaignProgress.esm.js +1 -1
- package/dist/components/CampaignForm/CampaignForm.esm.js +1 -1
- package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignDescriptionField.esm.js +1 -1
- package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignNameField.esm.js +1 -1
- package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignOwnerField.esm.js +1 -1
- package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignScheduleField.esm.js +1 -1
- package/dist/components/CampaignForm/Steps/CampaignMilestonesStep.esm.js +1 -1
- package/dist/components/CampaignForm/utils/campaignFormUtils.esm.js +1 -1
- package/dist/components/CampaignForm/utils/validation.esm.js +1 -1
- package/dist/components/CampaignsPage/CampaignEmptyState.esm.js +1 -1
- package/dist/components/CampaignsPage/CampaignListPage/CampaignListPage.esm.js +1 -1
- package/dist/components/CampaignsPage/CampaignsPage.esm.js +1 -1
- package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
- package/dist/components/CertificationAccordion/CertificationAccordion.esm.js +1 -1
- package/dist/components/CertificationSidebar/CertificationSummary.esm.js +1 -1
- package/dist/components/CertificationSidebar/Check.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationsPage.esm.js +1 -1
- package/dist/components/CheckCard/CheckCard.esm.js +1 -1
- package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +2 -0
- package/dist/components/CheckDetails/ResultStateBox.esm.js +1 -1
- package/dist/components/CheckDryRun/CheckDryRun.esm.js +2 -0
- package/dist/components/CheckDryRun/CheckDryRunContext.esm.js +2 -0
- package/dist/components/CheckDryRun/CheckDryRunDetails.esm.js +2 -0
- package/dist/components/CheckDryRun/CheckDryRunDialog.esm.js +2 -0
- package/dist/components/CheckDryRun/CheckDryRunDialogButton.esm.js +2 -0
- package/dist/components/CheckDryRun/checkDryRunUtils.esm.js +2 -0
- package/dist/components/CheckForm/CheckForm.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/CheckDescriptionInput/CheckDescriptionInput.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/CheckNameInput/CheckNameInput.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/CheckPathResolverInput.esm.js +2 -0
- package/dist/components/CheckForm/FormFields/RuleInput/AddMenuButton.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ConditionList.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/FactValueDisplay.esm.js +2 -0
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ValueListContext.esm.js +2 -0
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ValueListInput.esm.js +2 -0
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/styles.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/useRuleInputHandlers.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js +1 -1
- package/dist/components/CheckForm/Steps/CheckDetailsStep.esm.js +1 -1
- package/dist/components/CheckForm/Steps/CheckReviewStep.esm.js +2 -0
- package/dist/components/CheckForm/Steps/CheckRulesStep.esm.js +1 -1
- package/dist/components/CheckForm/types/ExpressionType.esm.js +1 -1
- package/dist/components/CheckForm/useCheckForm.esm.js +1 -1
- package/dist/components/CheckForm/utils/checkFormUtils.esm.js +1 -1
- package/dist/components/CheckForm/utils/validation.esm.js +1 -1
- package/dist/components/CheckIcon/CheckIcon.esm.js +1 -1
- package/dist/components/CheckPage/CheckDetailsView.esm.js +1 -1
- package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
- package/dist/components/CheckPage/CheckInsightsPage.esm.js +1 -1
- package/dist/components/CheckPage/CheckStatusBar.esm.js +1 -1
- package/dist/components/CheckPage/CheckStatusHistoryChart.esm.js +1 -1
- package/dist/components/CheckPage/FilterBar/FilterBar.esm.js +1 -1
- package/dist/components/CheckTemplatesPage/CheckTemplatesPage.esm.js +2 -0
- package/dist/components/CheckTemplatesPage/TemplateCategory.esm.js +2 -0
- package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +1 -1
- package/dist/components/ChecksPage/ChecksPage.esm.js +1 -1
- package/dist/components/ChecksTab/ChecksTab.esm.js +1 -1
- package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Common/CollectorOption.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Common/FactCollectionConfig.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Common/utils.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Configurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/DataDog/utils.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/utils.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Jira/IssuesSearchFactDetailsComponent.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Jira/utils.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Jira/validation.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Kubernetes/utils.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/PagerDuty/IncidentsFactDetailsComponent.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/PagerDuty/StatusesComponent.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/PagerDuty/utils.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/PagerDuty/validation.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SCM/ExistsFactDetailsComponent.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SCM/FactCollectionConfig.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SCM/FactDetailsComponent.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SCM/JsonFactDetailsComponent.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SCM/RegexFactDetailsComponent.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SCM/utils.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SCM/validation.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SonarQube/MeasuresFactDetailsInput.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SonarQube/MetricsInput.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SonarQube/utils.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SonarQube/validation.esm.js +2 -0
- package/dist/components/CollectorsPage/CollectorListPage/CollectorListPage.esm.js +1 -1
- package/dist/components/CollectorsPage/CollectorListPage/CollectorLogo.esm.js +1 -1
- package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +1 -1
- package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
- package/dist/components/EntitySoundcheckCard/Card.esm.js +1 -1
- package/dist/components/ExpandableSection/ExpandableSection.esm.js +2 -0
- package/dist/components/FactExplorer/FactExplorer.esm.js +2 -0
- package/dist/components/FactExplorer/FactExplorerContext.esm.js +2 -0
- package/dist/components/FactExplorer/FactExplorerDialog.esm.js +2 -0
- package/dist/components/FactExplorer/useFactOptions.esm.js +2 -0
- package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
- package/dist/components/Filter/FilterPreviewTable/EntityTableToolbar.esm.js +1 -1
- package/dist/components/Filter/FilterPreviewTable/FilterPreviewTable.esm.js +1 -1
- package/dist/components/Filter/utils.esm.js +1 -1
- package/dist/components/FooterButtons/FooterButtons.esm.js +1 -1
- package/dist/components/FormControlledAutocomplete/ControlledAutocomplete.esm.js +2 -0
- package/dist/components/FormControlledAutocomplete/FormControlledAutocomplete.esm.js +2 -0
- package/dist/components/FormControlledAutocomplete/useLabelOptions.esm.js +2 -0
- package/dist/components/FormFieldLabel/FormFieldLabel.esm.js +2 -0
- package/dist/components/FormStepper/FormStepper.esm.js +1 -1
- package/dist/components/FormattedPreview/FormattedPreview.esm.js +4 -0
- package/dist/components/Frequency/FrequencyComponent.esm.js +1 -1
- package/dist/components/LevelCard/LevelCard.esm.js +1 -1
- package/dist/components/ListboxVirtualized/ListboxVirtualized.esm.js +2 -0
- package/dist/components/MultiSelectFilter/MultiSelectFilter.esm.js +1 -1
- package/dist/components/OverviewPage/CampaignBanner/CampaignBanner.esm.js +1 -1
- package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
- package/dist/components/OverviewTable/Cell/EntityRefCell.esm.js +1 -1
- package/dist/components/OverviewTable/Cell/HighestLevelBadge.esm.js +1 -1
- package/dist/components/OverviewTable/ResultsTableHeader.esm.js +1 -1
- package/dist/components/PassRateTable/PassRateTable.esm.js +3 -1
- package/dist/components/QuickstartPage/HowDoIListItem.esm.js +2 -0
- package/dist/components/QuickstartPage/QuickStartChecksCard.esm.js +2 -0
- package/dist/components/QuickstartPage/QuickstartCardBase.esm.js +2 -0
- package/dist/components/QuickstartPage/QuickstartCollectorConfigurationsCard.esm.js +2 -0
- package/dist/components/QuickstartPage/QuickstartPage.esm.js +2 -0
- package/dist/components/QuickstartPage/QuickstartTracksCard.esm.js +2 -0
- package/dist/components/QuickstartPage/WelcomeHelpSection.esm.js +7 -0
- package/dist/components/QuickstartPage/WelcomeModal.esm.js +2 -0
- package/dist/components/QuickstartPage/styles.esm.js +2 -0
- package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
- package/dist/components/SearchBar/SearchBar.esm.js +1 -1
- package/dist/components/SearchFilters/SearchFilters.esm.js +1 -1
- package/dist/components/SoundcheckDialog/SoundcheckDialog.esm.js +2 -0
- package/dist/components/SoundcheckHeader/Breadcrumbs.esm.js +2 -0
- package/dist/components/SoundcheckHeader/SoundcheckHeader.esm.js +2 -0
- package/dist/components/SoundcheckHeader/SoundcheckHeaderContext.esm.js +2 -0
- package/dist/components/SoundcheckHeader/headerUtil.esm.js +2 -0
- package/dist/components/SoundcheckHeader/useHeader.esm.js +2 -0
- package/dist/components/SummaryCard/SummaryCard.esm.js +1 -1
- package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
- package/dist/components/TechHealth/TechHealth.esm.js +1 -1
- package/dist/components/TechHealthTabs/ActionColumn.esm.js +1 -1
- package/dist/components/TechHealthTabs/CheckResultsTab/CheckResultsTab.esm.js +1 -1
- package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +2 -0
- package/dist/components/{EditTrackPage/EditTrackPage.esm.js → TrackEditPage/TrackEditPage.esm.js} +2 -2
- package/dist/components/TrackEditPage/TrackEditView.esm.js +2 -0
- package/dist/components/TrackForm/Steps/LevelsStep/ChecksSection/ChecksSection.esm.js +1 -1
- package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackDescriptionInput/TrackDescriptionInput.esm.js +1 -1
- package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackDocumentationUrlInput/TrackDocumentationUrlInput.esm.js +1 -1
- package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackNameInput/TrackNameInput.esm.js +1 -1
- package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackOwnerSelect/TrackOwnerSelect.esm.js +1 -1
- package/dist/components/TrackForm/TrackForm.esm.js +1 -1
- package/dist/components/TrackForm/utils/trackFormUtils.esm.js +1 -1
- package/dist/components/TrackForm/utils/validation.esm.js +1 -1
- package/dist/components/TrackPage/FilterBar/FilterBar.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/utils.esm.js +1 -1
- package/dist/components/TrackPage/TrackPage.esm.js +1 -1
- package/dist/components/TrackPage/TrackProgressCard.esm.js +1 -1
- package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +1 -1
- package/dist/components/TracksPage/TracksPage.esm.js +1 -1
- package/dist/components/TracksTab/TracksTab.esm.js +1 -1
- package/dist/contexts/GenericFormContext.esm.js +1 -1
- package/dist/graphql/generated/index.esm.js +99 -33
- package/dist/hooks/catalog/useGetEntityRefs.esm.js +2 -0
- package/dist/hooks/checks/useCheckTemplates.esm.js +2 -0
- package/dist/hooks/checks/useExecuteCheck.esm.js +1 -1
- package/dist/hooks/checks/useGetChecks.esm.js +1 -1
- package/dist/hooks/collectors/useGetFactSchema.esm.js +1 -1
- package/dist/hooks/collectors/useUpdateCollectorConfig.esm.js +1 -1
- package/dist/hooks/graphqlKeys.esm.js +1 -1
- package/dist/hooks/useGetFact.esm.js +2 -0
- package/dist/hooks/useGetPathResolvers.esm.js +2 -0
- package/dist/images/gitlab-rgb.svg +1 -0
- package/dist/images/gitlab-white.svg +1 -0
- package/dist/images/jira-rgb.svg +25 -0
- package/dist/images/jira-white.svg +25 -0
- package/dist/images/sonarqube-rgb.svg +14 -0
- package/dist/images/sonarqube-white.svg +14 -0
- package/dist/index.d.ts +1 -1
- package/dist/plugin.esm.js +1 -1
- package/dist/routes.esm.js +1 -1
- package/dist/utils/export.esm.js +3 -3
- package/dist/utils/formStyles.esm.js +1 -1
- package/dist/utils/validation.esm.js +1 -1
- package/package.json +20 -17
- package/dist/components/CampaignForm/CampaignFormDescription.esm.js +0 -2
- package/dist/components/CampaignsPage/AddCampaignView.esm.js +0 -2
- package/dist/components/CheckForm/CheckFormDescription.esm.js +0 -2
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ControlledAutocomplete.esm.js +0 -2
- package/dist/components/ChecksPage/AddCheckView.esm.js +0 -2
- package/dist/components/CollectorPage/Configurators/Github/FactCollectionConfig.esm.js +0 -2
- package/dist/components/EditTrackPage/EditTrackView.esm.js +0 -2
- package/dist/components/FormControlledSelect/FormControlledSelect.esm.js +0 -2
- package/dist/components/FullScreenDialog/FullScreenDialog.esm.js +0 -2
- package/dist/components/RoutingPage/Breadcrumbs.esm.js +0 -2
- package/dist/components/RoutingPage/utils.esm.js +0 -2
- package/dist/components/TracksPage/AddTrackView.esm.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useApi as
|
|
1
|
+
import{useApi as W,featureFlagsApiRef as Y,useRouteRef as q}from"@backstage/core-plugin-api";import{usePermission as z}from"@backstage/plugin-permission-react";import{makeStyles as J,Button as E,Grid as o}from"@material-ui/core";import{soundcheckCheckCreatePermission as K}from"@spotify/backstage-plugin-soundcheck-common";import t,{useState as c,useEffect as U}from"react";import{useNavigate as V}from"react-router-dom";import X from"react-use/lib/useDebounce";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useGetChecks as Z}from"../../../hooks/checks/useGetChecks.esm.js";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useGetCheckOwners as _}from"../../../hooks/checks/useGetCheckOwners.esm.js";import ee from"../../../images/no-results.svg";import{checkTemplatesRouteRef as te}from"../../../routes.esm.js";import{FilterDefault as v}from"../../../utils/filters.esm.js";import{EmptyState as b}from"../../EmptyState/EmptyState.esm.js";import{Pagination as ae}from"../../Pagination/Pagination.esm.js";import{SearchFilters as re}from"../../SearchFilters/SearchFilters.esm.js";import{ChecksOverviewSkeleton as oe}from"../skeletons/ChecksOverviewSkeleton.esm.js";import{CheckSummaryCard as ce}from"./CheckSummaryCard.esm.js";var N=(e=>(e.title="Create a check",e.description="A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",e.callToAction="Get started",e))(N||{}),y=(e=>(e.title="No checks found",e.description="No checks matched your search. Consider changing search term and filters.",e))(y||{});const ie=J(e=>({headerButtons:{display:"flex",gap:e.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:e.spacing(0,0,1)},container:{padding:e.spacing(3),gap:e.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:e.spacing(1.5),paddingBottom:e.spacing(1.5)}})),se=({checksPerPage:e,currentCursor:w})=>{const i=ie(),[d,x]=c(w),[n,A]=c(""),[h,S]=c(v.Alpha),[g,B]=c(v.Owner),[I,R]=c(""),{data:F,isLoading:O}=_();X(()=>{R(n)},500,[n]);const{loading:u,allowed:G}=z({permission:K}),{data:r,isLoading:l}=Z({ids:void 0,first:e,after:d,orderAlphabetical:h,searchByOwner:g,searchByName:I}),[m,T]=c(r),p=m?.edges?.map(a=>a.node),[f,L]=c([]),k=W(Y),D=!k.getRegisteredFlags().find(a=>a.name==="soundcheck-enable-check-creation")||k.isActive("soundcheck-enable-check-creation"),C=!G||!D,j=a=>{S(a.target.value)},H=a=>{B(a.target.value)};U(()=>{r&&T(()=>({totalCount:r.totalCount,edges:r.edges,pageInfo:{startCursor:r.pageInfo.startCursor,endCursor:r.pageInfo.endCursor,hasNextPage:r?.pageInfo.hasNextPage??!1,hasPreviousPage:r?.pageInfo.hasPreviousPage??!1}}))},[r]);const $=V(),M=q(te),P=()=>$(M());if(!l&&!p)return t.createElement(b,{title:"Create a check",description:"A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",imgSrc:ee,action:!u&&t.createElement(E,{disabled:C,variant:"contained",color:"primary",onClick:P},"Get started")});let s;l?s=t.createElement(oe,null):p?.length?s=p?.map(a=>t.createElement(o,{key:a.id,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":`check card ${a.id}`},t.createElement(ce,{check:a}))):s=t.createElement(o,{xs:12,item:!0,role:"listitem","aria-label":"result"},t.createElement(b,{title:"No checks found",description:"No checks matched your search. Consider changing search term and filters."}));const Q=m?.pageInfo.hasNextPage||f?.length>0;return t.createElement(o,{container:!0,direction:"row",className:i.container},t.createElement(o,{container:!0,className:i.header},t.createElement(re,{searchPlaceholder:"Search Available Checks",isLoading:l||O,searchTerm:n,setSearchTerm:A,filterAlpha:h,handleAlphabeticalFilterChange:j,filterOwner:g,handleOwnerFilterChange:H,owners:F}),t.createElement(o,{item:!0,xs:2,className:i.headerButtons},!u&&t.createElement(E,{disabled:C,variant:"contained",color:"primary",onClick:P,className:i.createButton},"Create Check"))),t.createElement(o,{container:!0,spacing:4,role:"list","aria-label":"checks"},s),Q&&t.createElement(o,{item:!0,xs:12},t.createElement(ae,{response:m,listingsPerPage:e,cursor:d,setCursor:x,prevCursors:f,setPrevCursors:L,labelPerPageDropdown:"Checks Per Page:",urlRoute:"checks?checksPerPage="})))};export{N as CheckEmptyState,se as CheckListPage,y as CheckNoResults};
|
|
2
2
|
//# sourceMappingURL=CheckListPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import r from"react";import{useSearchParams as m}from"react-router-dom";import{RESULTS_PER_PAGE as o}from"../../utils/filters.esm.js";import{CheckListPage as a}from"./CheckListPage/CheckListPage.esm.js";const s=()=>{const[t]=m(),e=t.get("checksPerPage"),c=e?parseInt(e,10):o;return r.createElement("div",null,r.createElement(a,{checksPerPage:c}))};export{s as ChecksPage};
|
|
2
2
|
//# sourceMappingURL=ChecksPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"react";import"../../contexts/TrackFormContext.esm.js";import{CheckFormProvider as r}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{ChecksPage as o}from"../ChecksPage/ChecksPage.esm.js";const m=()=>e.createElement(r,null,e.createElement(o,null));export{m as ChecksTab};
|
|
1
|
+
import e from"react";import"../../contexts/TrackFormContext.esm.js";import{CheckFormProvider as r}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{ChecksPage as o}from"../ChecksPage/ChecksPage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as t}from"../SoundcheckHeader/useHeader.esm.js";const m=()=>(t(),e.createElement(r,null,e.createElement(o,null)));export{m as ChecksTab};
|
|
2
2
|
//# sourceMappingURL=ChecksTab.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{usePermission as
|
|
1
|
+
import{Content as l}from"@backstage/core-components";import{usePermission as c}from"@backstage/plugin-permission-react";import{soundcheckCollectorUpdatePermission as d}from"@spotify/backstage-plugin-soundcheck-common";import e from"react";import{useParams as p}from"react-router-dom";import{useGetCollectors as f}from"../../hooks/collectors/useGetCollectors.esm.js";import{LoadingIndicator as g}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as u}from"../PageWarningMessage/PageWarningMessage.esm.js";import{Configurator as C}from"./Configurators/Configurator.esm.js";const E=()=>{const{integrationId:r}=p(),{data:i,isLoading:m}=f([r??""]),{loading:a,allowed:s}=c({permission:d}),o=i?.[0],t=m||a,n=s&&o?.isEditable;return e.createElement(l,null,t&&e.createElement(g,null),e.createElement(u,{entityName:"Integration",entityId:r,showNotFound:!t&&!o,showCannotEdit:!t&&!n}),o&&n&&e.createElement(C,{selectedCollector:o}))};export{E as CollectorPage};
|
|
2
2
|
//# sourceMappingURL=CollectorPage.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{z as e}from"zod";import{FrequencySchema as r,FiltersSchema as c,CacheConfigSchema as i}from"../../../../utils/validation.esm.js";import{defaultCacheConfig as l}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{emptyFilters as m}from"../../../Filter/types.esm.js";import"../../../Frequency/types.esm.js";import{defaultFrequency as n}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";const o=()=>({filters:{...m(),selectedKinds:["Component"]},frequency:n(),cacheConfig:l()}),a=()=>({enabled:!1,...o()}),t=e.object({frequency:r,filters:c,cacheConfig:i}),f=t.extend({enabled:e.boolean()}).strict();export{t as BaseCollectorSchema,f as CollectorOptionSchema,o as defaultBaseCollectorOption,a as defaultCollectorOption};
|
|
2
|
+
//# sourceMappingURL=CollectorOption.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as z,FormControlLabel as I,Switch as R,Box as G,Typography as y,Divider as L,Tabs as W,Tab as p,Grid as b,Button as $}from"@material-ui/core";import Y from"@material-ui/icons/Add";import j from"@material-ui/icons/Remove";import e,{useState as H}from"react";import{useFieldArray as J,useWatch as K,Controller as u}from"react-hook-form";import{validateCacheConfig as M}from"../../../../utils/collectors.esm.js";import{validateFrequency as O}from"../../../../utils/frequency.esm.js";import"lodash";import"../../../Frequency/types.esm.js";import"../../../Frequency/util.esm.js";import{FrequencyComponent as P}from"../../../Frequency/FrequencyComponent.esm.js";import{CacheConfigComponent as Q}from"../../../CacheConfig/CacheConfigComponent.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import{FilterComponent as U}from"../../../Filter/FilterComponent.esm.js";const V=z(a=>({root:{padding:a.spacing(1.5,6)},tabsContainer:{marginRight:16},tab:{height:"64px",textAlign:"left"},contentContainer:{width:"100%",padding:a.spacing(1)},divider:{marginTop:a.spacing(1),marginBottom:a.spacing(1)},switchTrack:{backgroundColor:`${a.palette.primary.main} !important`},buttonsContainer:{marginTop:a.spacing(1),marginBottom:a.spacing(2)}})),C="FactDetails",v="Frequency",F="Filters",D="Caching",X=({name:a,label:E,description:N,control:i,disabled:m,errors:s,FactDetailsComponent:d,multipleCollectors:r})=>{const{fields:k,insert:q,remove:x}=J({control:i,name:r?.enable?`${a}.collectors`:a}),f=r?.enable?k:[{id:a}],h=d?C:v,[o,g]=H(Array(f.length).fill(h)),T=(l,t,n)=>{g([...o.slice(0,n),t,...o.slice(n+1)])},w=l=>{q(l+1,r?.defaultConfig),g([...o.slice(0,l+1),h,...o.slice(l+1)])},A=l=>{x(l),g([...o.slice(0,l),...o.slice(l+1)])},B=K({control:i,name:`${a}.enabled`}),c=V();return e.createElement("div",{className:c.root},e.createElement(u,{name:`${a}.enabled`,control:i,render:({field:l})=>e.createElement(I,{control:e.createElement(R,{...l,checked:l.value,"data-testid":`${a}-switch`,classes:{track:l.value?c.switchTrack:void 0},disabled:m}),label:e.createElement(G,{display:"flex",flexDirection:"column"},e.createElement(y,{variant:"body1",component:"span"},e.createElement("b",null,`${E}`)),e.createElement(y,{variant:"caption",color:"textSecondary",component:"p"},`${N}`))})}),B&&e.createElement("div",null,f.map((l,t)=>e.createElement("div",{key:l.id},t!==0&&e.createElement(L,{className:c.divider}),e.createElement(W,{orientation:"horizontal",variant:"scrollable",value:o[t],onChange:(n,S)=>T(n,S,t),className:c.tabsContainer},d&&e.createElement(p,{label:"Fact Details",value:C,className:c.tab}),e.createElement(p,{label:"Frequency",value:v,className:c.tab}),e.createElement(p,{label:"Filters",value:F,className:c.tab}),e.createElement(p,{label:"Caching",value:D,className:c.tab})),e.createElement("div",{className:c.contentContainer},o[t]===C&&d&&e.createElement(d,{name:r?.enable?`${a}.collectors.${t}.factDetails`:`${a}.factDetails`,control:i,disabled:m,errors:r?.enable?s?.collectors?.[t]?.factDetails:s?.factDetails}),o[t]===v&&e.createElement(u,{name:r?.enable?`${a}.collectors.${t}.frequency`:`${a}.frequency`,control:i,rules:{validate:O},render:({field:n})=>e.createElement(P,{disabled:m,value:n.value,onChange:n.onChange,errors:r?.enable?s?.collectors?.[t]?.frequency:s?.frequency})}),o[t]===F&&e.createElement(u,{name:r?.enable?`${a}.collectors.${t}.filters`:`${a}.filters`,control:i,render:({field:n})=>e.createElement(U,{disabled:m,value:n.value,onChange:n.onChange})}),o[t]===D&&e.createElement(u,{name:r?.enable?`${a}.collectors.${t}.cacheConfig`:`${a}.cacheConfig`,control:i,rules:{validate:M},render:({field:n})=>e.createElement(Q,{disabled:m,value:n.value,onChange:n.onChange,errors:r?.enable?s?.collectors?.[t]?.cacheConfig:s?.cacheConfig})})),r?.enable&&e.createElement(b,{container:!0,spacing:1,className:c.buttonsContainer},f.length>1&&e.createElement(b,{item:!0},e.createElement($,{startIcon:e.createElement(j,null),onClick:()=>A(t),disabled:m,variant:"outlined",size:"small",color:"secondary"},"Remove")),e.createElement(b,{item:!0},e.createElement($,{startIcon:e.createElement(Y,null),onClick:()=>w(t),disabled:m,variant:"outlined",size:"small",color:"primary"},"Add ",E)))))))};export{X as FactCollectionConfig};
|
|
2
|
+
//# sourceMappingURL=FactCollectionConfig.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const o=t=>({title:t.name??t.id,description:t.description,docLink:`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${t.id}`}),e=t=>({title:"Update Integration",message:`Are you sure you want to update the ${t.name} integration?`,error:!1});export{o as collectorHeaderContent,e as confirmationModalContent};
|
|
2
|
+
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import t from"react";import{
|
|
1
|
+
import t from"react";import{DataDogConfigurator as e}from"./DataDog/DataDogConfigurator.esm.js";import{GithubConfigurator as i}from"./Github/GithubConfigurator.esm.js";import{JiraConfigurator as a}from"./Jira/JiraConfigurator.esm.js";import{KubernetesConfigurator as m}from"./Kubernetes/KubernetesConfigurator.esm.js";import{PagerDutyConfigurator as n}from"./PagerDuty/PagerDutyConfigurator.esm.js";import{ScmConfigurator as u}from"./SCM/ScmConfigurator.esm.js";import{SonarQubeConfigurator as f}from"./SonarQube/SonarQubeConfigurator.esm.js";const g={github:i,scm:u,pagerduty:n,datadog:e,kubernetes:m,jira:a,sonarqube:f},c=({selectedCollector:o})=>{const r=g[o?.id];return t.createElement(r,{selectedCollector:o})};export{c as Configurator};
|
|
2
2
|
//# sourceMappingURL=Configurator.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as u,Paper as C,Divider as D}from"@material-ui/core";import e from"react";import{useForm as b}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"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as S}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as E}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as h}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as L}from"../../../../routes.esm.js";import{FooterButtons as y}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as O}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as l}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as j,confirmationModalContent as k}from"../Common/utils.esm.js";import{mapConfigToDataDogCollectorConfig as w,defaultDataDogConfig as B,mapDataDogCollectorConfigToConfig as F}from"./utils.esm.js";const x=u(o=>({spacer:{height:o.spacing(8),width:"100%"},section:{marginBottom:o.spacing(2)}})),M=({disabled:o,selectedCollector:t})=>{const{control:r,formState:{errors:i},handleSubmit:a}=b({defaultValues:t?w(t.config):B(),mode:"onChange"}),n=x(),m=!!i.serviceDefinition||!!i.serviceLevelObjective,{mutateAsync:s}=h(),[f,d]=E(L),{showModal:p}=S(),c=async g=>{if(!await p(k(t)))return;const v=F(g);await s({collectorId:t.id,config:v})&&d()};return O(j(t)),e.createElement(e.Fragment,null,e.createElement(C,{className:n.section},e.createElement("form",{onSubmit:a(c)},e.createElement(l,{name:"serviceDefinition",label:"Service Definition",description:"Collects details about Datadog service linked to an entity.",control:r,disabled:o,errors:i.serviceDefinition}),e.createElement(D,null),e.createElement(l,{name:"serviceLevelObjective",label:"Service Level Objective",description:"Collects details about SLOs configured for a Datadog service linked to an entity.",control:r,disabled:o,errors:i.serviceLevelObjective}))),e.createElement("div",{className:n.section},e.createElement(y,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:a(c),disableSave:m})))};export{M as DataDogConfigurator};
|
|
2
|
+
//# sourceMappingURL=DataDogConfigurator.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{asArray as h}from"@spotify/backstage-plugin-soundcheck-common";import{mapToCacheConfig as s,mapCacheConfigToHumanDurationOrBoolean as u}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as C,mapFiltersToCatalogFilter as m}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as p,mapFrequencyToHumanDurationOrCron as g}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import{defaultCollectorOption as v}from"../Common/CollectorOption.esm.js";const a="service-definition",l="service-level-objective",y=()=>({serviceDefinition:v(),serviceLevelObjective:v()});function T(e){const{serviceDefinition:i,serviceLevelObjective:r}=e;if(i.enabled||r.enabled){const o={},c=[];if(o.collects=c,i.enabled){const{cacheConfig:t,frequency:n,filters:f}=i;c.push({type:a,frequency:g(n),filter:m(f),cache:u(t)})}if(r.enabled){const{cacheConfig:t,frequency:n,filters:f}=r;c.push({type:l,frequency:g(n),filter:m(f),cache:u(t)})}return o}return{collects:[]}}function D(e){const i=y();if(e){const r=e.collects;if(r)for(const o of h(r)){const c=o.type;c===a&&(i.serviceDefinition={enabled:!0,frequency:p(o.frequency??e.frequency),filters:C(o.filter??e.filter),cacheConfig:s(o.cache??e.cache)}),c===l&&(i.serviceLevelObjective={enabled:!0,frequency:p(o.frequency??e.frequency),filters:C(o.filter??e.filter),cacheConfig:s(o.cache??e.cache)})}}return i}export{a as SERVICE_DEFINITION_COLLECTOR_TYPE,l as SERVICE_LEVEL_OBJECTIVE_COLLECTOR_TYPE,y as defaultDataDogConfig,D as mapConfigToDataDogCollectorConfig,T as mapDataDogCollectorConfigToConfig};
|
|
2
|
+
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{makeStyles as b,
|
|
1
|
+
import{makeStyles as b,Paper as h,Divider as m}from"@material-ui/core";import o from"react";import{useForm as y}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"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as E}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as S}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as v}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as B}from"../../../../routes.esm.js";import{FooterButtons as P}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as D}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as i}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as L,confirmationModalContent as w}from"../Common/utils.esm.js";import{mapConfigToGithubCollectorConfig as F,defaultGithubConfig as G,mapGithubCollectorConfigToConfig as R}from"./utils.esm.js";const x=b(e=>({spacer:{height:e.spacing(8),width:"100%"},section:{marginBottom:e.spacing(2)},form:{marginBottom:e.spacing(2)}})),M=({disabled:e,selectedCollector:r})=>{const{control:a,formState:{errors:t},handleSubmit:n}=y({defaultValues:r?F(r.config):G(),mode:"onChange"}),s=x(),c=!!t.branchProtections||!!t.repositoryDetails||!!t.repositoryLanguages,{mutateAsync:p}=v(),[f,g]=S(B),{showModal:u}=E(),l=async d=>{if(!await u(w(r)))return;const C=R(d);await p({collectorId:r.id,config:C})&&g()};return D(L(r)),o.createElement(o.Fragment,null,o.createElement(h,{className:s.form},o.createElement("form",{onSubmit:n(l)},o.createElement(i,{name:"branchProtections",label:"Branch Protections",description:"Collects branch protection information from an entity's repository.",control:a,disabled:e,errors:t.branchProtections}),o.createElement(m,null),o.createElement(i,{name:"repositoryDetails",label:"Repository Details",description:"Collects details about the an entity's repository.",control:a,disabled:e,errors:t.repositoryDetails}),o.createElement(m,null),o.createElement(i,{name:"repositoryLanguages",label:"Repository Languages",description:"Collects details about the languages used in an entity's repository.",control:a,disabled:e,errors:t.repositoryLanguages}))),o.createElement("div",{className:s.section},o.createElement(P,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:n(l),disableSave:c})))};export{M as GithubConfigurator};
|
|
2
2
|
//# sourceMappingURL=GithubConfigurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{asArray as
|
|
1
|
+
import{asArray as b}from"@spotify/backstage-plugin-soundcheck-common";import{mapToCacheConfig as l,mapCacheConfigToHumanDurationOrBoolean as s}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as u,mapFiltersToCatalogFilter as p}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as y,mapFrequencyToHumanDurationOrCron as C}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import{defaultCollectorOption as h}from"../Common/CollectorOption.esm.js";const m="BranchProtections",g="RepositoryDetails",T="RepositoryLanguages",q=()=>({branchProtections:h(),repositoryDetails:h(),repositoryLanguages:h()});function O(r){const{branchProtections:o,repositoryDetails:n,repositoryLanguages:e}=r;if(o.enabled||n.enabled||e.enabled){const c={},f=[];if(c.collects=f,o.enabled){const{cacheConfig:t,frequency:i,filters:a}=o;f.push({factName:"branch_protections",type:m,frequency:C(i),filter:p(a),cache:s(t)})}if(n.enabled){const{cacheConfig:t,frequency:i,filters:a}=n;f.push({factName:"repository_details",type:g,frequency:C(i),filter:p(a),cache:s(t)})}if(e.enabled){const{cacheConfig:t,frequency:i,filters:a}=e;f.push({factName:"repository_languages",type:T,frequency:C(i),filter:p(a),cache:s(t)})}return c}return[]}function d(r){const o=q();if(r){const n=r.collects;if(n)for(const e of b(n)){const c=e.type;c===m&&(o.branchProtections={enabled:!0,frequency:y(e.frequency??r.frequency),filters:u(e.filter??r.filter),cacheConfig:l(e.cache??r.cache)}),c===g&&(o.repositoryDetails={enabled:!0,frequency:y(e.frequency??r.frequency),filters:u(e.filter??r.filter),cacheConfig:l(e.cache??r.cache)}),c===T&&(o.repositoryLanguages={enabled:!0,frequency:y(e.frequency??r.frequency),filters:u(e.filter??r.filter),cacheConfig:l(e.cache??r.cache)})}}return o}export{m as BRANCH_PROTECTIONS_COLLECTOR_TYPE,g as REPOSITORY_DETAILS_COLLECTOR_TYPE,T as REPOSITORY_LANGUAGES_COLLECTOR_TYPE,q as defaultGithubConfig,d as mapConfigToGithubCollectorConfig,O as mapGithubCollectorConfigToConfig};
|
|
2
2
|
//# sourceMappingURL=utils.esm.js.map
|
package/dist/components/CollectorPage/Configurators/Jira/IssuesSearchFactDetailsComponent.esm.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as x,Grid as m,Typography as p,TextField as i}from"@material-ui/core";import e from"react";import{Controller as d}from"react-hook-form";import{JIRA_COLLECTOR_FIELDS as T}from"./utils.esm.js";const h=x(r=>({root:{paddingTop:r.spacing(1)},textInput:{marginTop:0,width:"500px"},helperText:{marginLeft:0}})),f=({name:r,disabled:c,control:s,errors:a})=>{const t=h(),{factName:l,jql:n}=T.factDetails;return e.createElement(m,{container:!0,spacing:1,direction:"column",className:t.root},e.createElement(m,{item:!0},e.createElement(p,{variant:"subtitle2"},l.name),e.createElement(d,{name:`${r}.factName`,control:s,render:({field:o})=>e.createElement(i,{...o,type:"text",variant:"outlined",margin:"dense",placeholder:l.placeholder,className:t.textInput,disabled:c,error:!!a?.factName,helperText:a?.factName?.message??l.helperText,FormHelperTextProps:{className:t.helperText}})})),e.createElement(m,{item:!0},e.createElement(p,{variant:"subtitle2"},n.name),e.createElement(d,{name:`${r}.jql`,control:s,render:({field:o})=>e.createElement(i,{...o,type:"text",variant:"outlined",margin:"dense",placeholder:n.placeholder,className:t.textInput,disabled:c,error:!!a?.jql,helperText:a?.jql?.message??n.helperText,FormHelperTextProps:{className:t.helperText}})})))};export{f as IssuesSearchFactDetailsComponent};
|
|
2
|
+
//# sourceMappingURL=IssuesSearchFactDetailsComponent.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{zodResolver as d}from"@hookform/resolvers/zod";import{makeStyles as g,Paper as S}from"@material-ui/core";import o from"react";import{useForm as h}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"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as b}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as v}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as E}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as F}from"../../../../routes.esm.js";import{FooterButtons as J}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as w}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as B}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as y,confirmationModalContent as I}from"../Common/utils.esm.js";import{IssuesSearchFactDetailsComponent as M}from"./IssuesSearchFactDetailsComponent.esm.js";import{mapConfigToJiraCollectorConfig as N,defaultJiraConfig as R,issueSearchCollectorConfig as T,mapJiraCollectorConfigToConfig as k}from"./utils.esm.js";import{jiraCollectorFormSchema as x}from"./validation.esm.js";const D=g(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),H=({disabled:t,selectedCollector:e})=>{const{control:n,formState:{errors:r},handleSubmit:i}=h({defaultValues:e?N(e.config):R(),mode:"onChange",resolver:d(x)}),a=D(),s=!!r.issuesSearch,{mutateAsync:l}=E(),[c,f]=v(F),{showModal:p}=b(),m=async u=>{if(!await p(I(e)))return;const C=k(u);await l({collectorId:e.id,config:C})&&f()};return w(y(e)),o.createElement(o.Fragment,null,o.createElement(S,{className:a.section},o.createElement("form",{onSubmit:i(m)},o.createElement(B,{name:"issuesSearch",label:"Issues Search",description:"Collects details about Jira issues.",control:n,disabled:t,errors:r.issuesSearch,FactDetailsComponent:M,multipleCollectors:{enable:!0,defaultConfig:T()}}))),o.createElement("div",{className:a.section},o.createElement(J,{onCancel:c,saveButtonText:"Save",isLoading:!1,onSave:i(m),disableSave:s})))};export{H as JiraConfigurator};
|
|
2
|
+
//# sourceMappingURL=JiraConfigurator.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{asArray as f}from"@spotify/backstage-plugin-soundcheck-common";import{mapToCacheConfig as s,mapCacheConfigToHumanDurationOrBoolean as m}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as u,mapFiltersToCatalogFilter as p}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as C,mapFrequencyToHumanDurationOrCron as h}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import{defaultBaseCollectorOption as g}from"../Common/CollectorOption.esm.js";const c="issues-search",q={factDetails:{factName:{name:"Fact Name",helperText:"Fact name must be unique",placeholder:"Fact Name"},jql:{name:"Jira Query Language (JQL)",helperText:"Optional, the value will be concatenated with JQL from 'atlassian.net/jql' annotation.",placeholder:'Example: status = "To Do" AND created >= -30d'}}},i=(a,t)=>({...g(),factDetails:{factName:a??"",jql:t}}),n=()=>({issuesSearch:{enabled:!1,collectors:[i(c)]}});function T(a){const{issuesSearch:t}=a;if(t.enabled){const o={},r=[];return o.collects=r,t.collectors.forEach(e=>{const l=e.factDetails.jql?.trim();r.push({factName:e.factDetails.factName,type:c,jql:l?.length?l:void 0,frequency:h(e.frequency),filter:p(e.filters),cache:m(e.cacheConfig)})}),o}return{collects:[]}}function d(a){const t=n();if(a){const o=a.collects;if(o){const r=f(o).filter(e=>e.type===c);r.length&&(t.issuesSearch={enabled:!0,collectors:r.map(e=>({factDetails:{factName:e.factName??c,jql:e.jql},frequency:C(e.frequency??a.frequency),filters:u(e.filter??a.filter),cacheConfig:s(e.cache??a.cache)}))})}}return t}export{c as ISSUES_SEARCH_COLLECTOR_TYPE,q as JIRA_COLLECTOR_FIELDS,n as defaultJiraConfig,i as issueSearchCollectorConfig,d as mapConfigToJiraCollectorConfig,T as mapJiraCollectorConfigToConfig};
|
|
2
|
+
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{validNameRegex as f}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FIELD_IS_REQUIRED_MSG as l}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as d}from"../Common/CollectorOption.esm.js";const r="Fact name is not unique",i="The field contains forbidden characters",m="Max 100 characters",_=d.extend({factDetails:e.strictObject({factName:e.string().min(1,l).max(100,m).regex(f,i),jql:e.string().optional()})}).strict(),S=e.strictObject({enabled:e.boolean(),collectors:e.array(_).superRefine((c,n)=>{const o=c.map(t=>t.factDetails.factName),s=o.filter((t,a)=>o.indexOf(t)!==a);s.length&&c.forEach((t,a)=>{s.includes(t.factDetails.factName)&&n.addIssue({code:e.ZodIssueCode.custom,message:r,path:[a,"factDetails","factName"]})})})}),h=e.strictObject({issuesSearch:S});export{r as FACT_NAME_IS_NOT_UNIQUE_MSG,i as INVALID_CHARACTERS_MSG,m as MAX_100_CHARACTERS_MSG,h as jiraCollectorFormSchema};
|
|
2
|
+
//# sourceMappingURL=validation.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as b,Paper as S,Divider as E}from"@material-ui/core";import e from"react";import{useForm as v}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"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as h}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as y}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as B}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as F}from"../../../../routes.esm.js";import{FooterButtons as K}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as w}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as L}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as T,confirmationModalContent as k}from"../Common/utils.esm.js";import{mapConfigToKubernetesCollectorConfig as x,defaultKubernetesConfig as D,K8S_COLLECTOR_FIELDS as M,mapKubernetesCollectorConfigToConfig as N}from"./utils.esm.js";const O=b(r=>({spacer:{height:r.spacing(8),width:"100%"},section:{marginBottom:r.spacing(2)}})),R=({disabled:r,selectedCollector:t})=>{const{control:c,formState:{errors:o},handleSubmit:a}=v({defaultValues:t?x(t.config):D(),mode:"onChange"}),m=O(),p=!!o.pods||!!o.services||!!o.deployments||!!o.hpas||!!o.statefulSets||!!o.podDisruptionBudgets||!!o.ingresses,{mutateAsync:f}=B(),[d,u]=y(F),{showModal:g}=h(),s=async i=>{if(!await g(k(t)))return;const n=N(i);await f({collectorId:t.id,config:n})&&u()};return w(T(t)),e.createElement(e.Fragment,null,e.createElement(S,{className:m.section},e.createElement("form",{onSubmit:a(s)},Object.entries(M).map(([i,n],l,C)=>e.createElement("div",{key:l},e.createElement(L,{name:i,label:n.label,description:n.description,control:c,disabled:r,errors:o[i]}),l<C.length-1&&e.createElement(E,null))))),e.createElement("div",{className:m.section},e.createElement(K,{onCancel:d,saveButtonText:"Save",isLoading:!1,onSave:a(s),disableSave:p})))};export{R as KubernetesConfigurator};
|
|
2
|
+
//# sourceMappingURL=KubernetesConfigurator.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{asArray as u}from"@spotify/backstage-plugin-soundcheck-common";import{mapToCacheConfig as d,mapCacheConfigToHumanDurationOrBoolean as f}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as b,mapFiltersToCatalogFilter as m}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as y,mapFrequencyToHumanDurationOrCron as C}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import{defaultCollectorOption as s}from"../Common/CollectorOption.esm.js";const l={pods:{type:"k8s_pods",label:"Pods",description:"Collects details about kubernetes pods associated with an entity."},services:{type:"k8s_services",label:"Services",description:"Collects details about kubernetes services associated with an entity."},deployments:{type:"k8s_deployments",label:"Deployments",description:"Collects details about kubernetes deployments associated with an entity."},hpas:{type:"k8s_hpas",label:"Horizontal Pod Autoscalers",description:"Collects details about kubernetes horizontal pod autoscalers associated with an entity."},statefulSets:{type:"k8s_stateful_sets",label:"Stateful Sets",description:"Collects details about kubernetes stateful sets associated with an entity."},podDisruptionBudgets:{type:"k8s_pod_disruption_budgets",label:"Pod Disruption Budgets",description:"Collects details about kubernetes pod disruption budgets associated with an entity."},ingresses:{type:"k8s_ingresses",label:"Ingresses",description:"Collects details about kubernetes ingresses associated with an entity."}},c=()=>({pods:s(),services:s(),deployments:s(),hpas:s(),statefulSets:s(),podDisruptionBudgets:s(),ingresses:s()});function g(e){if(Object.values(e).some(t=>t.enabled)){const t={},i=[];return t.collects=i,Object.entries(e).forEach(([o,n])=>{if(n.enabled){const{cacheConfig:a,frequency:r,filters:p}=n;i.push({type:l[o].type,frequency:C(r),filter:m(p),cache:f(a)})}}),t}return{collects:[]}}function h(e){const t=c();if(e){const i=e.collects;if(i)for(const o of u(i)){const n=o.type;Object.entries(l).map(([a,r])=>{n===r.type&&(t[a]={enabled:!0,frequency:y(o.frequency??e.frequency),filters:b(o.filter??e.filter),cacheConfig:d(o.cache??e.cache)})})}}return t}export{l as K8S_COLLECTOR_FIELDS,c as defaultKubernetesConfig,h as mapConfigToKubernetesCollectorConfig,g as mapKubernetesCollectorConfigToConfig};
|
|
2
|
+
//# sourceMappingURL=utils.esm.js.map
|
package/dist/components/CollectorPage/Configurators/PagerDuty/IncidentsFactDetailsComponent.esm.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as c,Typography as i,TextField as p}from"@material-ui/core";import e from"react";import{Controller as s}from"react-hook-form";import{StatusesComponent as d}from"./StatusesComponent.esm.js";import{PAGERDUTY_COLLECTOR_FIELDS as f}from"./utils.esm.js";const T=c(t=>({root:{paddingTop:t.spacing(1)},textInput:{marginTop:0,width:"255px"},helperText:{marginLeft:0}})),x=({name:t,disabled:l,control:m,errors:r})=>{const n=T(),{factName:o}=f.factDetails;return e.createElement("div",{className:n.root},e.createElement(i,{variant:"subtitle2"},o.name),e.createElement(s,{name:`${t}.factName`,control:m,render:({field:a})=>e.createElement(p,{...a,type:"text",variant:"outlined",margin:"dense",placeholder:o.placeholder,className:n.textInput,disabled:l,error:!!r?.factName,helperText:r?.factName?.message??o.helperText,FormHelperTextProps:{className:n.helperText}})}),e.createElement(s,{name:`${t}.statuses`,control:m,render:({field:a})=>e.createElement(d,{disabled:l,value:a.value,onChange:a.onChange,errors:r?.statuses})}))};export{x as IncidentsFactDetailsComponent};
|
|
2
|
+
//# sourceMappingURL=IncidentsFactDetailsComponent.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{zodResolver as E}from"@hookform/resolvers/zod";import{makeStyles as v,Paper as S,Divider as m}from"@material-ui/core";import e from"react";import{useForm as b}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"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as y}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as D}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as P}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as T}from"../../../../routes.esm.js";import{FooterButtons as L}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as h}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as i}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as w,confirmationModalContent as R}from"../Common/utils.esm.js";import{IncidentsFactDetailsComponent as F}from"./IncidentsFactDetailsComponent.esm.js";import{mapConfigToPagerDutyCollectorConfig as I,defaultPagerDutyConfig as N,SERVICE_COLLECTOR_TYPE as O,STANDARDS_COLLECTOR_TYPE as _,INCIDENTS_COLLECTOR_TYPE as k,incidentsCollectorConfig as B,mapPagerDutyCollectorConfigToConfig as Y}from"./utils.esm.js";import{pagerDutyCollectorFormSchema as A}from"./validation.esm.js";const M=v(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),x=({disabled:t,selectedCollector:r})=>{const{control:a,formState:{errors:o},handleSubmit:n}=b({defaultValues:r?I(r.config):N(),mode:"onChange",resolver:E(A)}),l=M(),c=!!o.service||!!o.standards||!!o.incidents,{mutateAsync:d}=P(),[p,C]=D(T),{showModal:f}=y(),s=async u=>{if(!await f(R(r)))return;const g=Y(u);await d({collectorId:r.id,config:g})&&C()};return h(w(r)),e.createElement(e.Fragment,null,e.createElement(S,{className:l.section},e.createElement("form",{onSubmit:n(s)},e.createElement(i,{name:O.toLowerCase(),label:"Service",description:"Collects details about PagerDuty service linked to an entity.",control:a,disabled:t,errors:o.service}),e.createElement(m,null),e.createElement(i,{name:_.toLowerCase(),label:"Standards",description:"Collects details about standards applied to a PagerDuty service linked to an entity.",control:a,disabled:t,errors:o.standards}),e.createElement(m,null),e.createElement(i,{name:k.toLowerCase(),label:"Incidents",description:"Collects details about incidents associated with a PagerDuty service linked to an entity.",control:a,disabled:t,errors:o.incidents,FactDetailsComponent:F,multipleCollectors:{enable:!0,defaultConfig:B()}}))),e.createElement("div",{className:l.section},e.createElement(L,{onCancel:p,saveButtonText:"Save",isLoading:!1,onSave:n(s),disableSave:c})))};export{x as PagerDutyConfigurator};
|
|
2
|
+
//# sourceMappingURL=PagerDutyConfigurator.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as u,Typography as l,FormControl as d,FormGroup as g,FormControlLabel as T,Checkbox as C,FormHelperText as b}from"@material-ui/core";import e,{useState as S,useEffect as f}from"react";import{DEFAULT_INCIDENT_STATUSES as h,PAGERDUTY_COLLECTOR_FIELDS as v}from"./utils.esm.js";const k=u(a=>({caption:{marginTop:a.spacing(2),marginBottom:a.spacing(1)}})),y=({value:a,onChange:r,disabled:m,errors:c})=>{const s=k(),{statuses:o}=v.factDetails,[n,i]=S(a);f(()=>{r&&r(n)},[n,r]);const p=t=>{i({...n,[t.target.name]:t.target.checked})};return e.createElement("div",null,e.createElement("div",{className:s.caption},e.createElement(l,{variant:"subtitle2"},o.name),e.createElement(l,{variant:"caption",color:"textSecondary"},o.description)),e.createElement(d,{disabled:m,component:"fieldset",error:!!c?.message},e.createElement(g,null,Object.keys(h).map((t,E)=>e.createElement(T,{key:E,label:e.createElement(l,{variant:"subtitle2"},t),control:e.createElement(C,{checked:n[t],onChange:p,name:t})}))),e.createElement(b,null,c?.message??o.helperText)))};export{y as StatusesComponent};
|
|
2
|
+
//# sourceMappingURL=StatusesComponent.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{asArray as E}from"@spotify/backstage-plugin-soundcheck-common";import{mapToCacheConfig as f,mapCacheConfigToHumanDurationOrBoolean as u}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as d,mapFiltersToCatalogFilter as g}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as m,mapFrequencyToHumanDurationOrCron as C}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import{defaultBaseCollectorOption as O,defaultCollectorOption as y}from"../Common/CollectorOption.esm.js";const p="Service",h="Standards",l="Incidents",T={triggered:!0,acknowledged:!0,resolved:!0},N={factDetails:{factName:{name:"Fact Name",helperText:"Fact name must be unique",placeholder:"Fact Name"},statuses:{name:"Statuses",description:"Return only incidents with the given statuses",helperText:"Select at least one status"}}},q=(t,a)=>({...O(),factDetails:{factName:t??"",statuses:{triggered:a?.triggered??!1,acknowledged:a?.acknowledged??!1,resolved:a?.resolved??!1}}}),D=()=>({service:y(),standards:y(),incidents:{enabled:!1,collectors:[q(l.toLowerCase(),T)]}});function b(t){const{service:a,standards:o,incidents:n}=t;if(a.enabled||o.enabled||n.enabled){const s={},r=[];if(s.collects=r,a.enabled){const{cacheConfig:c,frequency:e,filters:i}=a;r.push({type:p,frequency:C(e),filter:g(i),cache:u(c)})}if(o.enabled){const{cacheConfig:c,frequency:e,filters:i}=o;r.push({type:h,frequency:C(e),filter:g(i),cache:u(c)})}return n.enabled&&n.collectors.forEach(c=>{r.push({factName:c.factDetails.factName,type:l,statuses:Object.entries(c.factDetails.statuses).filter(([e,i])=>i).map(([e,i])=>e),frequency:C(c.frequency),filter:g(c.filters),cache:u(c.cacheConfig)})}),s}return{collects:[]}}function S(t){const a=D();if(t){const o=t.collects;if(o){const n=E(o),s=n.find(e=>e.type===p);s&&(a.service={enabled:!0,frequency:m(s.frequency??t.frequency),filters:d(s.filter??t.filter),cacheConfig:f(s.cache??t.cache)});const r=n.find(e=>e.type===h);r&&(a.standards={enabled:!0,frequency:m(r.frequency??t.frequency),filters:d(r.filter??t.filter),cacheConfig:f(r.cache??t.cache)});const c=n.filter(e=>e.type===l);c.length&&(a.incidents={enabled:!0,collectors:c.map(e=>({factDetails:{factName:e.factName??l,statuses:{triggered:e.statuses?.length?e.statuses.includes("triggered"):!0,acknowledged:e.statuses?.length?e.statuses.includes("acknowledged"):!0,resolved:e.statuses?.length?e.statuses.includes("resolved"):!0}},frequency:m(e.frequency??t.frequency),filters:d(e.filter??t.filter),cacheConfig:f(e.cache??t.cache)}))})}}return a}export{T as DEFAULT_INCIDENT_STATUSES,l as INCIDENTS_COLLECTOR_TYPE,N as PAGERDUTY_COLLECTOR_FIELDS,p as SERVICE_COLLECTOR_TYPE,h as STANDARDS_COLLECTOR_TYPE,D as defaultPagerDutyConfig,q as incidentsCollectorConfig,S as mapConfigToPagerDutyCollectorConfig,b as mapPagerDutyCollectorConfigToConfig};
|
|
2
|
+
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{validNameRegex as f}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FIELD_IS_REQUIRED_MSG as S}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as _,CollectorOptionSchema as r}from"../Common/CollectorOption.esm.js";const i="Fact name is not unique",n="The field contains forbidden characters",l="Max 100 characters",d="At least one status must be selected",g=_.extend({factDetails:e.strictObject({factName:e.string().min(1,S).max(100,l).regex(f,n),statuses:e.strictObject({triggered:e.boolean(),acknowledged:e.boolean(),resolved:e.boolean()}).refine(t=>t.triggered||t.acknowledged||t.resolved,{message:d})})}).strict(),E=e.strictObject({enabled:e.boolean(),collectors:e.array(g).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"]})})})}),b=e.strictObject({service:r,standards:r,incidents:E});export{i as FACT_NAME_IS_NOT_UNIQUE_MSG,n as INVALID_CHARACTERS_MSG,l as MAX_100_CHARACTERS_MSG,d as NO_SELECTED_STATUSES,b as pagerDutyCollectorFormSchema};
|
|
2
|
+
//# sourceMappingURL=validation.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as b,Box as S,Typography as o,Grid as i,TextField as f,IconButton as h}from"@material-ui/core";import y from"@material-ui/icons/Add";import C from"@material-ui/icons/Remove";import e from"react";import{useFieldArray as F,Controller as x}from"react-hook-form";import{FactDetailsComponent as v}from"./FactDetailsComponent.esm.js";import{DEFAULT_EXISTS_FACT_DATA as I,SCM_COLLECTOR_FIELDS as D}from"./utils.esm.js";const P=b(a=>({labelInput:{marginTop:0,width:"255px"},filePathInput:{marginTop:0,width:"420px"},caption:{margin:a.spacing(2,0)},helperText:{marginLeft:0}})),A=({name:a,disabled:r,control:m,errors:n})=>{const l=P(),{filePath:s,label:p,exists:d}=D.factDetails,{fields:E,insert:T,remove:u}=F({control:m,name:`${a}.data`});return e.createElement(S,null,e.createElement(v,{name:a,control:m,disabled:r,errors:n}),e.createElement("div",{className:l.caption},e.createElement(o,{variant:"subtitle2"},d.filesSection.name),e.createElement(o,{variant:"caption",color:"textSecondary"},d.filesSection.description)),e.createElement(i,{container:!0,spacing:0,direction:"column"},E.map((g,t)=>e.createElement(i,{item:!0,container:!0,alignItems:"center",spacing:2,key:g.id},e.createElement(i,{item:!0},e.createElement(o,{variant:"subtitle2"},p.name),e.createElement(x,{name:`${a}.data.${t}.name`,control:m,render:({field:c})=>e.createElement(f,{...c,type:"text",variant:"outlined",margin:"dense",placeholder:p.placeholder,className:l.labelInput,disabled:r,error:!!n?.data?.[t]?.name,helperText:n?.data?.[t]?.name?.message??" ",FormHelperTextProps:{className:l.helperText}})})),e.createElement(i,{item:!0},e.createElement(o,{variant:"subtitle2"},s.name),e.createElement(x,{name:`${a}.data.${t}.path`,control:m,render:({field:c})=>e.createElement(f,{...c,type:"text",variant:"outlined",margin:"dense",placeholder:s.placeholder,className:l.filePathInput,disabled:r,error:!!n?.data?.[t]?.path,helperText:n?.data?.[t]?.path?.message??" ",FormHelperTextProps:{className:l.helperText}})})),e.createElement(i,{item:!0},e.createElement(h,{onClick:()=>u(t),disabled:r||E.length===1},e.createElement(C,{fontSize:"small"})),e.createElement(h,{onClick:()=>T(t+1,I),disabled:r},e.createElement(y,{fontSize:"small"})))))))};export{A as ExistsFactDetailsComponent};
|
|
2
|
+
//# sourceMappingURL=ExistsFactDetailsComponent.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as T,Box as $,Typography as u,Divider as B,Grid as s,Tabs as L,Tab as d,Button as C}from"@material-ui/core";import v from"@material-ui/icons/Add";import O from"@material-ui/icons/Remove";import e,{useState as R}from"react";import{useFieldArray as S,Controller as f}from"react-hook-form";import"lodash";import"../../../Frequency/types.esm.js";import"../../../Frequency/util.esm.js";import{FrequencyComponent as _}from"../../../Frequency/FrequencyComponent.esm.js";import{CacheConfigComponent as k}from"../../../CacheConfig/CacheConfigComponent.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import{FilterComponent as A}from"../../../Filter/FilterComponent.esm.js";import{ExistsFactDetailsComponent as I}from"./ExistsFactDetailsComponent.esm.js";import{JsonFactDetailsComponent as q}from"./JsonFactDetailsComponent.esm.js";import{RegexFactDetailsComponent as z}from"./RegexFactDetailsComponent.esm.js";import{EXISTS_COLLECTOR_TYPE as P,REGEX_COLLECTOR_TYPE as Y,JSON_COLLECTOR_TYPE as G,defaultCollectorConfig as J}from"./utils.esm.js";const X=T(a=>({root:{padding:a.spacing(1,3)},collectorDivider:{marginTop:a.spacing(1)},collectorContainer:{display:"flex",alignItems:"flex-start",paddingBottom:a.spacing(2)},tabsContainer:{marginRight:16},tab:{height:"64px",textAlign:"left"},tabsContentContainer:{width:"100%",padding:a.spacing(1,1,2,1)},addCollectorButton:{margin:a.spacing(2,0)},collectorButtons:{paddingLeft:a.spacing(1)}})),j=({name:a,label:g,description:h,control:i,disabled:c,errors:m})=>{const n=X(),{fields:p,insert:y,remove:D}=S({control:i,name:`${a}.collectors`}),[o,E]=R(Array(p.length).fill(0)),x=(r,t,l)=>{E([...o.slice(0,l),t,...o.slice(l+1)])},b=r=>{y(r+1,J(a)),E([...o.slice(0,r+1),0,...o.slice(r+1)])},F=r=>{D(r),E([...o.slice(0,r),...o.slice(r+1)])};return e.createElement("div",{className:n.root},e.createElement($,{display:"flex",flexDirection:"column"},e.createElement(u,{variant:"body1",component:"span"},e.createElement("b",null,`${g}`)),e.createElement(u,{variant:"caption",color:"textSecondary",component:"p"},`${h}`)),e.createElement(e.Fragment,null,p.map((r,t)=>e.createElement("div",{key:r.id},t!==0&&e.createElement(B,{className:n.collectorDivider}),e.createElement(s,{container:!0,spacing:0,direction:"column",className:n.collectorContainer},e.createElement(s,{item:!0},e.createElement(L,{orientation:"horizontal",variant:"scrollable",value:o[t],onChange:(l,N)=>x(l,N,t),className:n.tabsContainer},e.createElement(d,{label:"Fact Details",className:n.tab}),e.createElement(d,{label:"Frequency",className:n.tab}),e.createElement(d,{label:"Filters",className:n.tab}),e.createElement(d,{label:"Caching",className:n.tab})),e.createElement("div",{className:n.tabsContentContainer},o[t]===0&&a===P&&e.createElement(I,{name:`${a}.collectors.${t}.factDetails`,control:i,disabled:c,errors:m?.collectors?.[t]?.factDetails}),o[t]===0&&a===Y&&e.createElement(z,{name:`${a}.collectors.${t}.factDetails`,control:i,disabled:c,errors:m?.collectors?.[t]?.factDetails}),o[t]===0&&a===G&&e.createElement(q,{name:`${a}.collectors.${t}.factDetails`,control:i,disabled:c,errors:m?.collectors?.[t]?.factDetails}),o[t]===1&&e.createElement(f,{name:`${a}.collectors.${t}.frequency`,control:i,render:({field:l})=>e.createElement(_,{disabled:c,value:l.value,onChange:l.onChange,errors:m?.collectors?.[t]?.frequency})}),o[t]===2&&e.createElement(f,{name:`${a}.collectors.${t}.filters`,control:i,render:({field:l})=>e.createElement(A,{disabled:c,value:l.value,onChange:l.onChange})}),o[t]===3&&e.createElement(f,{name:`${a}.collectors.${t}.cacheConfig`,control:i,render:({field:l})=>e.createElement(k,{disabled:c,value:l.value,onChange:l.onChange,errors:m?.collectors?.[t]?.cacheConfig})}))),e.createElement(s,{item:!0,container:!0,spacing:1,className:n.collectorButtons},e.createElement(s,{item:!0},e.createElement(C,{startIcon:e.createElement(O,null),onClick:()=>F(t),disabled:c,variant:"outlined",size:"small",color:"secondary"},"Remove")),e.createElement(s,{item:!0},e.createElement(C,{startIcon:e.createElement(v,null),onClick:()=>b(t),disabled:c,variant:"outlined",size:"small",color:"primary"},"Add ",g))))))),p.length===0&&e.createElement(C,{startIcon:e.createElement(v,null),onClick:()=>b(0),disabled:c,variant:"outlined",size:"small",color:"primary","data-testid":`${a}-add-first`,className:n.addCollectorButton},"Add"))};export{j as FactCollectionConfig};
|
|
2
|
+
//# sourceMappingURL=FactCollectionConfig.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as E,Grid as p,Typography as d,TextField as b,FormControlLabel as N,Checkbox as u}from"@material-ui/core";import e,{useState as C}from"react";import{useWatch as L,Controller as x}from"react-hook-form";import{SCM_COLLECTOR_FIELDS as F}from"./utils.esm.js";const S=E(r=>({root:{paddingTop:r.spacing(1)},factNameInput:{marginTop:0,width:"255px"},branchInput:{marginTop:0,width:"265px"},branchLabel:{height:"40px"},branchSection:{alignContent:"flex-end"},helperText:{marginLeft:0}})),y=({name:r,disabled:l,control:c,errors:n})=>{const a=S(),{factName:o,branch:m}=F.factDetails,g=L({control:c,name:`${r}.branch`}),[s,T]=C(g),f=(t,i)=>{const h=t.target.checked;T(h),h||i("")};return e.createElement(p,{container:!0,spacing:2,className:a.root},e.createElement(x,{name:`${r}.factName`,control:c,render:({field:t})=>e.createElement(p,{item:!0},e.createElement(d,{variant:"subtitle2"},o.name),e.createElement(b,{...t,type:"text",variant:"outlined",margin:"dense",placeholder:o.placeholder,className:a.factNameInput,disabled:l,error:!!n?.factName,helperText:n?.factName?.message??o.helperText,FormHelperTextProps:{className:a.helperText}}))}),e.createElement(x,{name:`${r}.branch`,control:c,render:({field:t})=>e.createElement(p,{item:!0,className:a.branchSection},e.createElement(N,{control:e.createElement(u,{checked:s,onChange:i=>f(i,t.onChange)}),disabled:l,label:e.createElement(d,{variant:"subtitle2"},m.name),className:a.branchLabel}),e.createElement(b,{...t,type:"text",variant:"outlined",margin:"dense",placeholder:m.placeholder,className:a.branchInput,disabled:l||!s,error:!!n?.branch,helperText:n?.branch?.message??m.helperText,FormHelperTextProps:{className:a.helperText}}))}))};export{y as FactDetailsComponent};
|
|
2
|
+
//# sourceMappingURL=FactDetailsComponent.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as b,Box as v,Typography as o,TextField as p,Grid as i,MenuItem as N,IconButton as f}from"@material-ui/core";import S from"@material-ui/icons/Add";import F from"@material-ui/icons/Remove";import e from"react";import{useFieldArray as I,Controller as d}from"react-hook-form";import{FactDetailsComponent as j}from"./FactDetailsComponent.esm.js";import{ELEMENT_TYPES as C,ARRAY_ELEMENT_TYPES as $,DEFAULT_JSON_FACT_DATA as _,SCM_COLLECTOR_FIELDS as A}from"./utils.esm.js";const L=b(r=>({filePathInput:{marginTop:0,width:"690px"},labelInput:{marginTop:0,width:"255px"},jsonPathInput:{marginTop:0,width:"300px"},typeInput:{marginTop:0,width:"150px"},helperText:{marginLeft:0},caption:{margin:r.spacing(2,0)},filePathSection:{marginTop:r.spacing(1)}})),D=({name:r,disabled:l,control:m,errors:n})=>{const a=L(),{filePath:E,label:x,type:u,json:c}=A.factDetails,{fields:g,insert:P,remove:y}=I({control:m,name:`${r}.data`});return e.createElement(v,null,e.createElement(j,{name:r,control:m,disabled:l,errors:n}),e.createElement("div",{className:a.filePathSection},e.createElement(o,{variant:"subtitle2"},E.name),e.createElement(d,{name:`${r}.path`,control:m,render:({field:h})=>e.createElement(p,{...h,type:"text",variant:"outlined",margin:"dense",placeholder:E.placeholder,className:a.filePathInput,disabled:l,error:!!n?.path,helperText:n?.path?.message??E.helperText,FormHelperTextProps:{className:a.helperText}})})),e.createElement("div",{className:a.caption},e.createElement(o,{variant:"subtitle2"},c.jsonElementsSection.name),e.createElement(o,{variant:"caption",color:"textSecondary"},c.jsonElementsSection.description)),e.createElement(i,{container:!0,spacing:0,direction:"column"},g.map((h,t)=>e.createElement(i,{item:!0,container:!0,alignItems:"center",spacing:2,key:h.id},e.createElement(i,{item:!0},e.createElement(o,{variant:"subtitle2"},x.name),e.createElement(d,{name:`${r}.data.${t}.name`,control:m,render:({field:s})=>e.createElement(p,{...s,type:"text",variant:"outlined",margin:"dense",placeholder:x.placeholder,className:a.labelInput,disabled:l,error:!!n?.data?.[t]?.name,helperText:n?.data?.[t]?.name?.message??" ",FormHelperTextProps:{className:a.helperText}})})),e.createElement(i,{item:!0},e.createElement(o,{variant:"subtitle2"},c.jsonPath.name),e.createElement(d,{name:`${r}.data.${t}.jsonPath`,control:m,render:({field:s})=>e.createElement(p,{...s,type:"text",variant:"outlined",margin:"dense",placeholder:c.jsonPath.placeholder,className:a.jsonPathInput,disabled:l,error:!!n?.data?.[t]?.jsonPath,helperText:n?.data?.[t]?.jsonPath?.message??" ",FormHelperTextProps:{className:a.helperText}})})),e.createElement(i,{item:!0},e.createElement(o,{variant:"subtitle2"},u.name),e.createElement(d,{name:`${r}.data.${t}.type`,control:m,render:({field:s})=>e.createElement(p,{...s,select:!0,type:"text",variant:"outlined",margin:"dense",placeholder:u.placeholder,className:a.typeInput,disabled:l,error:!!n?.data?.[t]?.type,helperText:n?.data?.[t]?.type?.message??" ",FormHelperTextProps:{className:a.helperText}},[...C,...$].map(T=>e.createElement(N,{key:T,value:T},T)))})),e.createElement(i,{item:!0},e.createElement(f,{onClick:()=>y(t),disabled:l||g.length===1},e.createElement(F,{fontSize:"small"})),e.createElement(f,{onClick:()=>P(t+1,_),disabled:l},e.createElement(S,{fontSize:"small"})))))))};export{D as JsonFactDetailsComponent};
|
|
2
|
+
//# sourceMappingURL=JsonFactDetailsComponent.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as D,Box as S,Grid as c,Typography as r,TextField as s,RadioGroup as L,FormControlLabel as C,Radio as N,MenuItem as P,IconButton as I}from"@material-ui/core";import _ from"@material-ui/icons/Add";import k from"@material-ui/icons/Remove";import e,{useState as A}from"react";import{useFieldArray as R,Controller as d}from"react-hook-form";import{FactDetailsComponent as w}from"./FactDetailsComponent.esm.js";import{ELEMENT_TYPES as H,DEFAULT_REGEX_FACT_DATA as M,SCM_COLLECTOR_FIELDS as z}from"./utils.esm.js";const E="CaptureGroupsMode",u="TrueFalseMode",B=D(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)}})),O=({name:l,disabled:m,control:p,errors:n})=>{const a=B(),{label:y,type:v,filePath:x,regex:o}=z.factDetails,{fields:g,insert:f,remove:F}=R({control:p,name:`${l}.data`}),[h,$]=A(g.length?E:u),G=i=>{const t=i.target.value;$(t),t===E?f(0,M):t===u&&F()};return e.createElement(S,null,e.createElement(w,{name:l,control:p,disabled:m,errors:n}),e.createElement(c,{container:!0,spacing:1,direction:"column",className:a.regexSection},e.createElement(c,{item:!0},e.createElement(r,{variant:"subtitle2"},x.name),e.createElement(d,{name:`${l}.path`,control:p,render:({field:i})=>e.createElement(s,{...i,type:"text",variant:"outlined",margin:"dense",placeholder:x.placeholder,className:a.textInput,disabled:m,error:!!n?.path,helperText:n?.path?.message??x.helperText,FormHelperTextProps:{className:a.helperText}})})),e.createElement(c,{item:!0},e.createElement(r,{variant:"subtitle2"},o.regex.name),e.createElement(d,{name:`${l}.regex`,control:p,render:({field:i})=>e.createElement(s,{...i,type:"text",variant:"outlined",margin:"dense",placeholder:o.regex.placeholder,className:a.textInput,disabled:m,error:!!n?.regex,helperText:n?.regex?.message??o.regex.helperText,FormHelperTextProps:{className:a.helperText}})}))),e.createElement(L,{row:!0,name:"regexMode",value:h,onChange:G},e.createElement(C,{value:u,control:e.createElement(N,null),label:e.createElement(r,{variant:"subtitle2"},o.trueFalseMode.label)}),e.createElement(C,{value:E,control:e.createElement(N,null),label:e.createElement(r,{variant:"subtitle2"},o.captureGroupsMode.label)})),h===u&&e.createElement(r,{variant:"caption",color:"textSecondary"},o.trueFalseMode.description),h===E&&e.createElement(S,null,e.createElement(r,{variant:"caption",color:"textSecondary"},o.captureGroupsMode.description),e.createElement("div",{className:a.caption},e.createElement(r,{variant:"subtitle2"},o.captureGroupsSection.name),e.createElement(r,{variant:"caption",color:"textSecondary"},o.captureGroupsSection.description)),e.createElement(c,{container:!0,spacing:0,direction:"column"},g.map((i,t)=>e.createElement(c,{item:!0,container:!0,alignItems:"center",spacing:2,key:i.id},e.createElement(c,{item:!0},e.createElement(r,{variant:"subtitle2"},y.name),e.createElement(d,{name:`${l}.data.${t}.name`,control:p,render:({field:T})=>e.createElement(s,{...T,type:"text",variant:"outlined",margin:"dense",placeholder:y.placeholder,className:a.labelInput,disabled:m,error:!!n?.data?.[t]?.name,helperText:n?.data?.[t]?.name?.message??" ",FormHelperTextProps:{className:a.helperText}})})),e.createElement(c,{item:!0},e.createElement(r,{variant:"subtitle2"},v.name),e.createElement(d,{name:`${l}.data.${t}.type`,control:p,render:({field:T})=>e.createElement(s,{...T,select:!0,type:"text",variant:"outlined",margin:"dense",placeholder:v.placeholder,className:a.typeInput,disabled:m,error:!!n?.data?.[t]?.type,helperText:n?.data?.[t]?.type?.message??" ",FormHelperTextProps:{className:a.helperText}},H.map(b=>e.createElement(P,{key:b,value:b},b)))})),e.createElement(c,{item:!0},e.createElement(I,{onClick:()=>F(t),disabled:m||g.length===1},e.createElement(k,{fontSize:"small"})),e.createElement(I,{onClick:()=>f(t+1,M),disabled:m},e.createElement(_,{fontSize:"small"}))))))))};export{O as RegexFactDetailsComponent};
|
|
2
|
+
//# sourceMappingURL=RegexFactDetailsComponent.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{zodResolver as E}from"@hookform/resolvers/zod";import{makeStyles as S,Paper as O,Divider as l}from"@material-ui/core";import e from"react";import{useForm as L}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"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as T}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as x}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as b}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as h}from"../../../../routes.esm.js";import{FooterButtons as v}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as y}from"../../../SoundcheckHeader/useHeader.esm.js";import{collectorHeaderContent as R,confirmationModalContent as _}from"../Common/utils.esm.js";import{FactCollectionConfig as n}from"./FactCollectionConfig.esm.js";import{mapConfigToScmCollectorConfig as N,DEFAULT_SCM_COLLECTOR_CONFIG as F,EXISTS_COLLECTOR_TYPE as M,REGEX_COLLECTOR_TYPE as w,JSON_COLLECTOR_TYPE as P,mapScmCollectorConfigToConfig as Y}from"./utils.esm.js";import{scmCollectorFormSchema as A}from"./validation.esm.js";const B=S(o=>({spacer:{height:o.spacing(8),width:"100%"},section:{marginBottom:o.spacing(2)}})),J=({disabled:o,selectedCollector:r})=>{const{control:i,formState:{errors:t},handleSubmit:a}=L({defaultValues:r?N(r.config):F,mode:"onChange",resolver:E(A)}),m=B(),c=!!t.exists||!!t.regex||!!t.json,{mutateAsync:p}=b(),[f,d]=x(h),{showModal:C}=T(),s=async g=>{if(!await C(_(r)))return;const u=Y(g);await p({collectorId:r.id,config:u})&&d()};return y(R(r)),e.createElement(e.Fragment,null,e.createElement(O,{className:m.section},e.createElement("form",{onSubmit:a(s)},e.createElement(n,{name:M,label:"Exists",description:"Collects information on the existence of files within an entity's repository.",control:i,disabled:o,errors:t.exists}),e.createElement(l,null),e.createElement(n,{name:w,label:"Regex",description:"Executes regular expressions against a specified file in an entity's repository and collects its capture groups.",control:i,disabled:o,errors:t.regex}),e.createElement(l,null),e.createElement(n,{name:P,label:"JSON / YAML",description:"Collects data from a JSON/YAML file at specified JSON paths in an entity's repository.",control:i,disabled:o,errors:t.json}))),e.createElement("div",{className:m.section},e.createElement(v,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:a(s),disableSave:c,noMargin:!0})))};export{J as ScmConfigurator};
|
|
2
|
+
//# sourceMappingURL=ScmConfigurator.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{asArray as D}from"@spotify/backstage-plugin-soundcheck-common";import{mapToCacheConfig as h,mapCacheConfigToHumanDurationOrBoolean as p,defaultCacheConfig as F}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as m,mapFiltersToCatalogFilter as u}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import{emptyFilters as N}from"../../../Filter/types.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as d,mapFrequencyToHumanDurationOrCron as g,defaultFrequency as _}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";const y={exists:{collectors:[]},regex:{collectors:[]},json:{collectors:[]}},C={name:"",path:""},L={name:"",type:"string"},E={name:"",jsonPath:"",type:"string"},q={factName:"",data:[C]},O={factName:"",path:"",regex:"",data:[]},A={factName:"",path:"",data:[E]},S={factDetails:{factName:{name:"Fact Name",helperText:"Fact name must be unique",placeholder:"Fact Name"},branch:{name:"Custom Branch:",helperText:"If omitted collects data from default branch",placeholder:"Example: develop"},filePath:{name:"File Path",helperText:"Path to the file whose content will be searched",placeholder:"Example: /catalog-info.yaml"},label:{name:"Label",placeholder:"Label"},type:{name:"Type",placeholder:"Type"},exists:{filesSection:{name:"Files",description:"List the files whose existence will be checked"}},regex:{regex:{name:"RegEx",helperText:"Regex to match",placeholder:"Example: ^apiVersion: backstage.io/(.+)"},trueFalseMode:{label:"True / False Mode",description:"True / False Mode uses a RegEx to search for a match in the given file."},captureGroupsMode:{label:"Capture Groups Mode",description:"RegEx Capture Groups Mode allows the collector to associate capture groups within a RegEx to named values."},captureGroupsSection:{name:"Capture Groups",description:"Each element must correspond to a capture group in the given RegEx"}},json:{jsonPath:{name:"Json Path",placeholder:"Example: metadata.tags"},jsonElementsSection:{name:"JSON / YAML Elements",description:"List json / yaml paths from which to pull data from the given file"}}}},i="exists",s="regex",f="json",T=["string","number","integer","boolean","object"],x=T.map(b),P=t=>{let c;switch(t){case i:c=q;break;case s:c=O;break;case f:c=A;break;default:throw Error(`Unsupported fact type ${t}`)}return{factDetails:c,filters:{...N(),selectedKinds:["Component"]},frequency:_(),cacheConfig:F()}};function R(t){const{exists:c,regex:o,json:e}=t;if(c.collectors.length||o.collectors.length||e.collectors.length){const r={},n=[];return r.collects=n,c.collectors.forEach(a=>{n.push({type:i,factName:a.factDetails.factName,branch:a.factDetails.branch?.length?a.factDetails.branch:void 0,data:a.factDetails.data,frequency:g(a.frequency),filter:u(a.filters),cache:p(a.cacheConfig)})}),o.collectors.forEach(a=>{n.push({type:s,factName:a.factDetails.factName,branch:a.factDetails.branch?.length?a.factDetails.branch:void 0,path:a.factDetails.path,regex:a.factDetails.regex,data:a.factDetails.data.length?a.factDetails.data:void 0,frequency:g(a.frequency),filter:u(a.filters),cache:p(a.cacheConfig)})}),e.collectors.forEach(a=>{n.push({type:f,factName:a.factDetails.factName,branch:a.factDetails.branch?.length?a.factDetails.branch:void 0,path:a.factDetails.path,data:a.factDetails.data.map(l=>x.includes(l.type)?{name:l.name,jsonPath:l.jsonPath,type:"array",items:{type:M(l.type)}}:l),frequency:g(a.frequency),filter:u(a.filters),cache:p(a.cacheConfig)})}),r}return[]}function j(t){const c=t?.collects;if(c){const o=D(c);return{exists:{collectors:o.filter(e=>e.type===i).map(e=>({factDetails:{factName:e.factName,branch:e.branch,data:e.data},frequency:d(e.frequency??t.frequency),filters:m(e.filter??t.filter),cacheConfig:h(e.cache)}))},regex:{collectors:o.filter(e=>e.type===s).map(e=>({factDetails:{factName:e.factName,branch:e.branch,path:e.path,regex:e.regex,data:e.data},frequency:d(e.frequency??t.frequency),filters:m(e.filter??t.filter),cacheConfig:h(e.cache)}))},json:{collectors:o.filter(e=>e.type===f).map(e=>({factDetails:{factName:e.factName,branch:e.branch,path:e.path,data:e.data.map(r=>r.type==="array"?{name:r.name,jsonPath:r.jsonPath,type:b(r.items.type)}:r)},frequency:d(e.frequency??t.frequency),filters:m(e.filter??t.filter),cacheConfig:h(e.cache)}))}}}return y}function b(t){return`array[${t}]`}function M(t){const c="array[";return t.substring(t.indexOf(c)+c.length,t.lastIndexOf("]"))}export{x as ARRAY_ELEMENT_TYPES,C as DEFAULT_EXISTS_FACT_DATA,E as DEFAULT_JSON_FACT_DATA,L as DEFAULT_REGEX_FACT_DATA,y as DEFAULT_SCM_COLLECTOR_CONFIG,T as ELEMENT_TYPES,i as EXISTS_COLLECTOR_TYPE,f as JSON_COLLECTOR_TYPE,s as REGEX_COLLECTOR_TYPE,S as SCM_COLLECTOR_FIELDS,P as defaultCollectorConfig,j as mapConfigToScmCollectorConfig,R as mapScmCollectorConfigToConfig};
|
|
2
|
+
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{validNameRegex as o}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FIELD_IS_REQUIRED_MSG as a,FrequencySchema as h,FiltersSchema as p,CacheConfigSchema as u}from"../../../../utils/validation.esm.js";const n="Fact name is not unique",r="The field contains forbidden characters",i="Max 100 characters",x="Max 1000 characters",f=e.object({factName:e.string().min(1,a).max(100,i).regex(o,r),branch:e.string().optional()}),_=f.merge(e.object({data:e.array(e.strictObject({name:e.string().min(1,a).max(100,i).regex(o,r),path:e.string().min(1,a).max(1e3,x)}))})).strict(),j=f.merge(e.object({path:e.string().min(1,a),regex:e.string().min(1,a),data:e.array(e.strictObject({name:e.string().min(1,a).max(100,i).regex(o,r),type:e.string().min(1,a).max(100,i).regex(o,r).optional()})).optional()})).strict(),N=f.merge(e.object({path:e.string().min(1,a),data:e.array(e.strictObject({name:e.string().min(1,a).regex(o,r),jsonPath:e.string().min(1,a),type:e.string().min(1,a)}))})).strict(),g=s=>e.strictObject({collectors:e.array(e.strictObject({factDetails:s,frequency:h,filters:p,cacheConfig:u}))}),C=e.strictObject({exists:g(_),regex:g(j),json:g(N)}).superRefine((s,l)=>{const d=[...s.exists.collectors.map(t=>t.factDetails.factName),...s.regex.collectors.map(t=>t.factDetails.factName),...s.json.collectors.map(t=>t.factDetails.factName)],m=d.filter((t,c)=>d.indexOf(t)!==c);m.length&&(s.exists.collectors.forEach((t,c)=>{m.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:n,path:["exists","collectors",c,"factDetails","factName"]})}),s.regex.collectors.forEach((t,c)=>{m.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:n,path:["regex","collectors",c,"factDetails","factName"]})}),s.json.collectors.forEach((t,c)=>{m.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:n,path:["json","collectors",c,"factDetails","factName"]})}))});export{n as FACT_NAME_IS_NOT_UNIQUE_MSG,r as INVALID_CHARACTERS_MSG,x as MAX_1000_CHARACTERS_MSG,i as MAX_100_CHARACTERS_MSG,C as scmCollectorFormSchema};
|
|
2
|
+
//# sourceMappingURL=validation.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as c,Typography as i,TextField as p}from"@material-ui/core";import e from"react";import{Controller as s}from"react-hook-form";import{MetricsInput as d}from"./MetricsInput.esm.js";import{SONARQUBE_COLLECTOR_FIELDS as f}from"./utils.esm.js";const h=c(t=>({root:{paddingTop:t.spacing(1)},textInput:{marginTop:0,width:"500px"},helperText:{marginLeft:0}})),x=({name:t,disabled:n,control:m,errors:a})=>{const o=h(),{factName:l}=f.factDetails;return e.createElement("div",{className:o.root},e.createElement(i,{variant:"subtitle2"},l.name),e.createElement(s,{name:`${t}.factName`,control:m,render:({field:r})=>e.createElement(p,{...r,type:"text",variant:"outlined",margin:"dense",placeholder:l.placeholder,className:o.textInput,disabled:n,error:!!a?.factName,helperText:a?.factName?.message??l.helperText,FormHelperTextProps:{className:o.helperText}})}),e.createElement(s,{name:`${t}.metrics`,control:m,render:({field:r})=>e.createElement(d,{disabled:n,value:r.value,onChange:r.onChange,errors:a?.metrics})}))};export{x as MeasuresFactDetailsInput};
|
|
2
|
+
//# sourceMappingURL=MeasuresFactDetailsInput.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as x,Typography as T,Grid as o,Chip as v,TextField as y}from"@material-ui/core";import t,{useState as u,useEffect as C}from"react";import{SONARQUBE_COLLECTOR_FIELDS as N}from"./utils.esm.js";const b=x(r=>({caption:{marginTop:r.spacing(2),marginBottom:r.spacing(1)},metricsInput:{width:"500px"},metricChips:{marginBottom:r.spacing(1)},helperText:{marginLeft:0}})),I=({value:r,onChange:l,disabled:p,errors:d})=>{const i=b(),{metrics:n}=N.factDetails,[a,g]=u(r),[m,h]=u("");C(()=>{l&&l(a)},[a,l]);const E=e=>{e.key==="Enter"&&(a.includes(m.trim())||g([...a,m]),h(""))},f=(e,s)=>{g(a.filter(c=>c!==s))};return t.createElement("div",null,t.createElement("div",{className:i.caption},t.createElement(T,{variant:"subtitle2"},n.name)),t.createElement(o,{container:!0,direction:"column",spacing:0,className:i.metricsInput},t.createElement(o,{item:!0},a.map((e,s)=>t.createElement(v,{key:`${e}-${s}`,label:e,disabled:p,size:"small",onDelete:c=>f(c,e),className:i.metricChips}))),t.createElement(o,{item:!0},t.createElement(y,{type:"text",variant:"outlined",margin:"dense",placeholder:n.placeholder,className:i.metricsInput,disabled:p,error:!!d,fullWidth:!0,value:m,onChange:e=>h(e.target.value),onKeyDown:E,helperText:d?.message??n.helperText,FormHelperTextProps:{className:i.helperText}}))))};export{I as MetricsInput};
|
|
2
|
+
//# sourceMappingURL=MetricsInput.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{zodResolver as b}from"@hookform/resolvers/zod";import{makeStyles as S,Paper as j,Divider as s}from"@material-ui/core";import e from"react";import{useForm as E}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"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as h}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as v}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as Q}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as y}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 T}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as n}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as k,confirmationModalContent as w}from"../Common/utils.esm.js";import{MeasuresFactDetailsInput as M}from"./MeasuresFactDetailsInput.esm.js";import{mapConfigToSonarQubeCollectorConfig as B,defaultSonarQubeConfig as N,measuresCollectorConfig as P,mapSonarQubeCollectorConfigToConfig as D}from"./utils.esm.js";import{sonarQubeCollectorFormSchema as I}from"./validation.esm.js";const R=S(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),x=({disabled:t,selectedCollector:r})=>{const{control:a,formState:{errors:o},handleSubmit:i}=E({defaultValues:r?B(r.config):N(),mode:"onChange",resolver:b(I)}),l=R(),c=!!o.projects||!!o.projectTags||!!o.issues||!!o.measures,{mutateAsync:p}=Q(),[u,d]=v(y),{showModal:f}=h(),m=async g=>{if(!await f(w(r)))return;const C=D(g);await p({collectorId:r.id,config:C})&&d()};return T(k(r)),e.createElement(e.Fragment,null,e.createElement(j,{className:l.section},e.createElement("form",{onSubmit:i(m)},e.createElement(n,{name:"projects",label:"Projects",description:"Collects details about SonarQube project linked to an entity.",control:a,disabled:t,errors:o.projects}),e.createElement(s,null),e.createElement(n,{name:"projectTags",label:"Project Tags",description:"Collects details about tags set on a SonarQube project linked to an entity.",control:a,disabled:t,errors:o.projectTags}),e.createElement(s,null),e.createElement(n,{name:"issues",label:"Issues",description:"Collects details about issues associated with a SonarQube project linked to an entity.",control:a,disabled:t,errors:o.issues}),e.createElement(s,null),e.createElement(n,{name:"measures",label:"Measures",description:"Collects details about measures associated with a SonarQube project linked to an entity.",control:a,disabled:t,errors:o.measures,FactDetailsComponent:M,multipleCollectors:{enable:!0,defaultConfig:P()}}))),e.createElement("div",{className:l.section},e.createElement(F,{onCancel:u,saveButtonText:"Save",isLoading:!1,onSave:i(m),disableSave:c})))};export{x as SonarQubeConfigurator};
|
|
2
|
+
//# sourceMappingURL=SonarQubeConfigurator.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{asArray as E}from"@spotify/backstage-plugin-soundcheck-common";import{mapToCacheConfig as u,mapCacheConfigToHumanDurationOrBoolean as m}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as p,mapFiltersToCatalogFilter as C}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as h,mapFrequencyToHumanDurationOrCron as y}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import{defaultBaseCollectorOption as S,defaultCollectorOption as T}from"../Common/CollectorOption.esm.js";const d="projects",g="project-tags",q="issues",s="measures",O=["ncloc","complexity","violations","open_issues"],L={factDetails:{factName:{name:"Fact Name",helperText:"Fact name must be unique",placeholder:"Fact Name"},metrics:{name:"Metrics",helperText:"Add more metrics to collect",placeholder:"Example: code_smells"}}},b=(c,t)=>({...S(),factDetails:{factName:c??"",metrics:t??O}}),_=()=>({projects:T(),projectTags:T(),issues:T(),measures:{enabled:!1,collectors:[b(s)]}});function F(c){const{projects:t,projectTags:f,issues:a,measures:n}=c;if(t.enabled||f.enabled||a.enabled||n.enabled){const i={},o=[];if(i.collects=o,t.enabled){const{cacheConfig:r,frequency:e,filters:l}=t;o.push({type:d,frequency:y(e),filter:C(l),cache:m(r)})}if(f.enabled){const{cacheConfig:r,frequency:e,filters:l}=f;o.push({type:g,frequency:y(e),filter:C(l),cache:m(r)})}if(a.enabled){const{cacheConfig:r,frequency:e,filters:l}=a;o.push({type:q,frequency:y(e),filter:C(l),cache:m(r)})}return n.enabled&&n.collectors.forEach(r=>{o.push({factName:r.factDetails.factName,type:s,metrics:r.factDetails.metrics,frequency:y(r.frequency),filter:C(r.filters),cache:m(r.cacheConfig)})}),i}return{collects:[]}}function D(c){const t=_();if(c){const f=E(c).flatMap(a=>a.collects);if(f){const a=E(f),n=a.find(e=>e.type===d);n&&(t.projects={enabled:!0,frequency:h(n.frequency??c.frequency),filters:p(n.filter??c.filter),cacheConfig:u(n.cache??c.cache)});const i=a.find(e=>e.type===g);i&&(t.projectTags={enabled:!0,frequency:h(i.frequency??c.frequency),filters:p(i.filter??c.filter),cacheConfig:u(i.cache??c.cache)});const o=a.find(e=>e.type===q);o&&(t.issues={enabled:!0,frequency:h(o.frequency??c.frequency),filters:p(o.filter??c.filter),cacheConfig:u(o.cache??c.cache)});const r=a.filter(e=>e.type===s);r.length&&(t.measures={enabled:!0,collectors:r.map(e=>({factDetails:{factName:e.factName??s,metrics:e.metrics},frequency:h(e.frequency??c.frequency),filters:p(e.filter??c.filter),cacheConfig:u(e.cache??c.cache)}))})}}return t}export{O as DEFAULT_METRICS,q as ISSUES_COLLECTOR_TYPE,s as MEASURES_COLLECTOR_TYPE,d as PROJECTS_COLLECTOR_TYPE,g as PROJECT_TAGS_COLLECTOR_TYPE,L as SONARQUBE_COLLECTOR_FIELDS,_ as defaultSonarQubeConfig,D as mapConfigToSonarQubeCollectorConfig,F as mapSonarQubeCollectorConfigToConfig,b as measuresCollectorConfig};
|
|
2
|
+
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{validNameRegex as d}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FIELD_IS_REQUIRED_MSG as _}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as S,CollectorOptionSchema as c}from"../Common/CollectorOption.esm.js";const i="Fact name is not unique",m="The field contains forbidden characters",n="Max 100 characters",l="At least one metric must be added",p=S.extend({factDetails:e.strictObject({factName:e.string().min(1,_).max(100,n).regex(d,m),metrics:e.array(e.string()).min(1,l)})}).strict(),u=e.strictObject({enabled:e.boolean(),collectors:e.array(p).superRefine((r,f)=>{const s=r.map(t=>t.factDetails.factName),o=s.filter((t,a)=>s.indexOf(t)!==a);o.length&&r.forEach((t,a)=>{o.includes(t.factDetails.factName)&&f.addIssue({code:e.ZodIssueCode.custom,message:i,path:[a,"factDetails","factName"]})})})}),I=e.strictObject({projects:c,projectTags:c,issues:c,measures:u});export{i as FACT_NAME_IS_NOT_UNIQUE_MSG,m as INVALID_CHARACTERS_MSG,n as MAX_100_CHARACTERS_MSG,l as MIN_1_METRIC_MSG,I as sonarQubeCollectorFormSchema};
|
|
2
|
+
//# sourceMappingURL=validation.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Grid as
|
|
1
|
+
import{Grid as o}from"@material-ui/core";import l from"react";import{useGetCollectors as c}from"../../../hooks/collectors/useGetCollectors.esm.js";import{CollectorListSkeleton as m}from"./CollectorListSkeleton.esm.js";import{ConfigurableCollectorIds as i,CollectorSummaryCard as n}from"./CollectorSummaryCard.esm.js";const d=()=>{const{data:r,isLoading:a}=c();return l.createElement(o,{container:!0,direction:"row"},l.createElement(o,{container:!0,spacing:4,role:"list","aria-label":"checks"},a?l.createElement(m,null):r?.filter(e=>e.isConfigurable)?.sort((e,t)=>!i.includes(e.id)&&i.includes(t.id)?1:i.includes(e.id)&&!i.includes(t.id)?-1:(e.name??e.id).localeCompare(t.name??t.id))?.map(e=>l.createElement(o,{key:e.id,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":`collector card ${e.id}`},l.createElement(n,{collector:e})))))};export{d as CollectorListPage};
|
|
2
2
|
//# sourceMappingURL=CollectorListPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{makeStyles as
|
|
1
|
+
import{makeStyles as p,useTheme as s}from"@material-ui/core";import c from"react";import g from"../../../images/cat-blk.svg";import n from"../../../images/cat-wht.svg";import f from"../../../images/dd_logo_h_rgb.svg";import h from"../../../images/dd_logo_h_white.svg";import l from"../../../images/GitHub_Logo.svg";import u from"../../../images/GitHub_Logo_White.svg";import d from"../../../images/gitlab-rgb.svg";import b from"../../../images/gitlab-white.svg";import k from"../../../images/jira-rgb.svg";import y from"../../../images/jira-white.svg";import j from"../../../images/k8s_blue.svg";import q from"../../../images/k8s_white.svg";import B from"../../../images/pd-black.svg";import w from"../../../images/pd-white.svg";import x from"../../../images/SCM_DARK.svg";import I from"../../../images/SCM_LIGHT.svg";import L from"../../../images/sonarqube-rgb.svg";import S from"../../../images/sonarqube-white.svg";import T from"../../../images/soundcheck-black.svg";import D from"../../../images/soundcheck-white.svg";import E from"../../../images/tech-black.svg";import M from"../../../images/tech-white.svg";import{isDarkTheme as $}from"../../Charts/chartUtils.esm.js";const t={github:l,gitlab:d,datadog:f,scm:I,pagerduty:B,catalog:g,soundcheck:T,techinsights:E,kubernetes:j,jira:k,sonarqube:L},i={github:u,gitlab:b,datadog:h,scm:x,pagerduty:w,catalog:n,soundcheck:D,techinsights:M,kubernetes:q,jira:y,sonarqube:S},C=new Set(["catalog","soundcheck","techinsights","sonarqube"]),F=p(o=>({image:{objectFit:"contain",color:"white",height:o.spacing(5)-4,maxWidth:"100%",marginBottom:o.spacing(1.5)},tallImage:{height:o.spacing(6.5),marginBottom:o.spacing(0)}})),G=o=>!!t[o]&&!!i[o],N=({collectorId:o,noMargin:e})=>{const r=F(),a=s(),m=$(a)?i[o]:t[o];return m?c.createElement("img",{src:m,alt:o,style:e?{marginBottom:0}:{},className:`${r.image} ${C.has(o)?r.tallImage:""}`}):null};export{N as CollectorLogo,G as hasLogo};
|
|
2
2
|
//# sourceMappingURL=CollectorLogo.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{MarkdownContent as
|
|
1
|
+
import{MarkdownContent as E}from"@backstage/core-components";import{useRouteRef as v}from"@backstage/core-plugin-api";import{usePermission as N}from"@backstage/plugin-permission-react";import{makeStyles as I,CardContent as g,CardHeader as k,Typography as u,Divider as x,CardActions as S,Button as T}from"@material-ui/core";import{soundcheckCollectorUpdatePermission as $}from"@spotify/backstage-plugin-soundcheck-common";import e from"react";import{useNavigate as A}from"react-router-dom";import{integrationDetailsRouteRef as B}from"../../../routes.esm.js";import{useSummaryCardStyles as L,Card as M}from"../../SummaryCard/SummaryCard.esm.js";import{hasLogo as R,CollectorLogo as D}from"./CollectorLogo.esm.js";const H=I(o=>({cardContent:{flex:1,paddingTop:o.spacing(1)},logoHeader:{paddingBottom:0,flex:0},headerContent:{display:"flex",alignItems:"center",height:o.spacing(5),marginBottom:o.spacing(1.5)},headerTypography:{marginBottom:0}})),l=["github","scm","pagerduty","datadog","kubernetes","jira","sonarqube"],P=({collector:o})=>{const{description:p,id:t,isConfigurable:s,isEditable:m,name:f}=o,{loading:c,allowed:d}=N({permission:$}),y=A(),h=v(B),a=L(),n=H(),C=l.includes(t)&&s&&m&&!c&&d,b=()=>{y(h({integrationId:t}))};let r;c||!d?r="You don't have permissions to configure this integration.":s?m?l.includes(t)||(r="Integration can only be configured through YAML"):r="Integration is already configured via YAML and cannot be configured through the UI.":r="Integration is not configurable.";const i=f??t;return e.createElement(M,{"data-testid":t,className:a.card},R(t)?e.createElement(g,{className:n.logoHeader},e.createElement(D,{collectorId:t})):e.createElement(k,{title:i,titleTypographyProps:{className:`${a.summaryName} ${n.headerTypography}`},classes:{content:n.headerContent}}),e.createElement(g,{className:n.cardContent},e.createElement(u,{variant:"body1",component:"div"},e.createElement(E,{className:a.summaryDescription,content:p??""})),e.createElement(u,{color:"textSecondary",variant:"body2"},r)),C&&e.createElement("div",null,e.createElement(x,null),e.createElement(S,{className:a.actionArea},e.createElement(T,{"aria-label":`${i}-edit`,"data-testid":`${i}-button`,size:"medium",role:"link",onClick:b,className:a.button,variant:"outlined"},"Configure"))))};export{P as CollectorSummaryCard,l as ConfigurableCollectorIds};
|
|
2
2
|
//# sourceMappingURL=CollectorSummaryCard.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{makeStyles as o}from"@material-ui/core";import t from"react";import{
|
|
1
|
+
import{makeStyles as o}from"@material-ui/core";import t from"react";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as r}from"../SoundcheckHeader/useHeader.esm.js";import{CollectorListPage as a}from"./CollectorListPage/CollectorListPage.esm.js";const m=o(e=>({container:{padding:e.spacing(3)}})),n=()=>{const e=m();return r(),t.createElement("div",{className:e.container},t.createElement(a,null))};export{n as CollectorsPage};
|
|
2
2
|
//# sourceMappingURL=CollectorsPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Link as u,InfoCard as k}from"@backstage/core-components";import{useRouteRef as c}from"@backstage/core-plugin-api";import{useEntity as h}from"@backstage/plugin-catalog-react";import{Divider as v}from"@material-ui/core";import C from"@material-ui/core/styles/makeStyles";import{SpotifyLicenseBanner as L}from"@spotify/backstage-plugin-core";import e,{Fragment as R}from"react";import{useAllCertifications as S}from"../../hooks/certifications/useAllCertifications.esm.js";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/catalog-model";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{usePlaylists as I}from"../../hooks/playlists/usePlaylists.esm.js";import{certificationTrackRouteRef as w,
|
|
1
|
+
import{Link as u,InfoCard as k}from"@backstage/core-components";import{useRouteRef as c}from"@backstage/core-plugin-api";import{useEntity as h}from"@backstage/plugin-catalog-react";import{Divider as v}from"@material-ui/core";import C from"@material-ui/core/styles/makeStyles";import{SpotifyLicenseBanner as L}from"@spotify/backstage-plugin-core";import e,{Fragment as R}from"react";import{useAllCertifications as S}from"../../hooks/certifications/useAllCertifications.esm.js";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/catalog-model";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{usePlaylists as I}from"../../hooks/playlists/usePlaylists.esm.js";import{certificationTrackRouteRef as w,certificationPlaylistTrackRouteRef as b}from"../../routes.esm.js";import{soundcheckBackend as N,invalidLicenseMessage as A}from"../../utils/license.esm.js";import{AlertPanel as P}from"../AlertPanel/AlertPanel.esm.js";import"../CertificationSidebar/CertificationSidebar.esm.js";import{CertificationSummary as T}from"../CertificationSidebar/CertificationSummary.esm.js";import"@material-ui/lab";import"../CertificationSidebar/Check.esm.js";import"../CertificationSidebar/LevelSummary.esm.js";import{NoCertifications as x}from"../EmptyState/EmptyState.esm.js";import{CardSkeleton as B}from"./skeletons/CardSkeleton.esm.js";const n=C(t=>({certificationWrapper:{display:"flex",justifyContent:"space-between",alignItems:"center"},infoCard:{display:"grid",gridRowGap:t.spacing(2)},emptyState:{overflow:"hidden"}})),m=({children:t,title:i})=>{const a=n();return e.createElement(k,{title:i},e.createElement("div",{className:a.infoCard},e.createElement(L,{inline:!0,backend:N,invalidLicenseMessage:A}),t))},D=(t,i)=>t.find(a=>a.trackIds.some(o=>o===i))?.id??"",M=({title:t="Soundcheck"})=>{const{entity:i}=h(),a=n(),{data:o,isError:p,isLoading:s}=S(i),{data:l,isError:d,isLoading:f}=I(i),g=c(w),y=c(b);return p||d?e.createElement(m,{title:t},e.createElement(P,{severity:"error",title:"Error loading certifications"})):s||f||!o||!l?e.createElement(m,{title:t},e.createElement(B,null)):o.length?e.createElement(m,{title:t},o.map((r,E)=>e.createElement(R,{key:r.program.name},e.createElement("div",{className:a.certificationWrapper,"data-testid":"soundcheck-track-row"},e.createElement(T,{key:r.program.id,name:r.program.name,badge:r.highestLevel?.badge,trackType:r.program?.type}),e.createElement(u,{to:r.program.type==="playlist"?y({playlistId:D(l,r.program.id),trackId:r.program.id}):g({trackId:r.program.id})},"View Details")),E<o.length-1?e.createElement(v,null):null))):e.createElement(m,{title:t},e.createElement("div",{className:a.emptyState},e.createElement(x,null)))};export{M as Card,n as useStyles};
|
|
2
2
|
//# sourceMappingURL=Card.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Paper as p,Grid as o,IconButton as f,Typography as E,Collapse as g}from"@material-ui/core";import{makeStyles as u}from"@material-ui/core/styles";import x from"@material-ui/icons/ArrowDropDown";import d from"@material-ui/icons/ArrowRight";import e,{useState as y}from"react";const S=u(t=>({root:{display:"flex",flexDirection:"column",gap:0},button:{marginLeft:-t.spacing(1)},title:{fontWeight:700,color:t.palette.text.primary,cursor:"pointer"}})),h=({title:t,alwaysExpanded:r=!1,children:i,className:c,elevation:m=1})=>{const[a,s]=y(r),n=S(),l=()=>{r||s(!a)};return e.createElement(p,{elevation:m,className:`${n.root} ${c??""}`},e.createElement(o,{container:!0,alignItems:"center",spacing:0},e.createElement(o,{item:!0},!r&&e.createElement(f,{onClick:l,className:n.button},a?e.createElement(x,{fontSize:"large"}):e.createElement(d,{fontSize:"large"}))),e.createElement(o,{item:!0},e.createElement(E,{onClick:l,className:n.title},t))),e.createElement(g,{in:a},i))};export{h as ExpandableSection};
|
|
2
|
+
//# sourceMappingURL=ExpandableSection.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as H,Box as n,Typography as o,Button as L}from"@material-ui/core";import{parseFactRef as z}from"@spotify/backstage-plugin-soundcheck-common";import e,{useMemo as E,useState as f,useEffect as U,useCallback as q}from"react";import{useGetEntityRefs as K}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{useGetCollectors as Q}from"../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as X}from"../../hooks/collectors/useGetFactSchema.esm.js";import{useGetFact as Y}from"../../hooks/useGetFact.esm.js";import{useGetPathResolvers as Z}from"../../hooks/useGetPathResolvers.esm.js";import{generateJsonPaths as _}from"../CheckForm/utils/checkFormUtils.esm.js";import{hasLogo as ee,CollectorLogo as te}from"../CollectorsPage/CollectorListPage/CollectorLogo.esm.js";import{ExpandableSection as O}from"../ExpandableSection/ExpandableSection.esm.js";import{FormattedPreview as F}from"../FormattedPreview/FormattedPreview.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import{useLabelOptions as ae}from"../FormControlledAutocomplete/useLabelOptions.esm.js";import{ControlledAutocomplete as v}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as oe}from"../LoadingIndicator/LoadingIndicator.esm.js";import{useFactOptions as ne}from"./useFactOptions.esm.js";const le=800,re=H(t=>({content:{padding:t.spacing(2,3),width:le},section:{margin:t.spacing(2,0)},expandedSection:{borderTop:`1px solid ${t.palette.divider}`,padding:t.spacing(0,2)},loading:{margin:t.spacing(2)},preview:{maxHeight:500,overflow:"auto",border:`1px solid ${t.palette.divider}`},pathSection:{display:"flex",alignItems:"center",margin:t.spacing(1,0)},testPathButton:{margin:t.spacing(1,1,.5,0)},collectorName:{fontSize:24}})),ce=({factRef:t,updateFactRef:N,path:m,updatePath:B,entityRef:p,updateEntityRef:G,pathResolver:i,onSave:x})=>{const a=re(),s=E(()=>{if(t)return z(t)},[t]),[g,R]=f(s?.source??null);U(()=>{s?.source&&R(s.source)},[s?.source]);const[h,W]=f("jsonpath"),[b,C]=f(),[S,k]=f(),{data:P}=Z(),I=E(()=>P?.map(c=>c.id)??[],[P]),{data:d}=X(s?.source,s?.name,!0),V=E(()=>d?_(d.schema):[],[d]),{data:y,isLoading:j}=Q(),M=y?.map(c=>c.id)?.sort()??[],{data:$}=K(),l=E(()=>y?.find(c=>c.id===g),[y,g]),{factOptions:D}=ne({selectedCollector:l}),{options:J,getOptionLabel:w}=ae(D),{data:r,isLoading:u}=Y({factRef:t||"",entityRef:S||"",path:b,pathResolver:i??h??void 0},!!t&&!!S),T=q(()=>{C(m),k(p)},[p,m]),A=E(()=>!!l?.config?.cache,[l]);return e.createElement(n,{className:a.content,"data-testid":"fact-explorer"},e.createElement(n,null,e.createElement(n,null,e.createElement(o,{variant:"subtitle1"},"Select an Integration"),e.createElement(v,{options:M,onChange:c=>{R(c),N("")},value:g,placeholder:"Integration",disabled:j,fullWidth:!0})),!!l&&e.createElement(e.Fragment,null,e.createElement(n,{className:a.section},ee(l.id)?e.createElement(te,{noMargin:!0,collectorId:l.id}):e.createElement(o,{variant:"h5",className:a.collectorName,component:"div"},l.name??l.id," "),!!l.description&&e.createElement(o,{variant:"body2"},l.description),e.createElement(v,{options:J,onChange:N,value:t??null,placeholder:"Select Fact",getOptionLabel:w,noOptionsText:"No Facts",fullWidth:!0}))),!!t&&e.createElement(e.Fragment,null,!!d?.schema&&e.createElement(n,{className:a.section},e.createElement(O,{elevation:1,title:"JSON Schema"},e.createElement("div",{className:a.preview},e.createElement(F,{data:d.schema})))),e.createElement(n,{className:a.section},e.createElement(o,{variant:"subtitle1"},"Path Resolver"),!i&&e.createElement(o,{variant:"caption"},"Defaults to jsonpath"),i?e.createElement(o,{variant:"body1"},i):e.createElement(v,{options:I,onChange:W,value:i??h,placeholder:"Path Resolver (Optional)",getOptionLabel:w,fullWidth:!0,disabled:!!i})),e.createElement(n,{className:a.section},e.createElement(o,{variant:"subtitle1"},"Path"),e.createElement(v,{options:(i??h)==="jsonpath"?V:[],onChange:c=>{b&&C(void 0),B(c)},value:m??null,placeholder:"Path",fullWidth:!0,freeSolo:!0}),e.createElement("div",{className:a.pathSection},!!x&&e.createElement(L,{className:a.testPathButton,variant:"contained",onClick:()=>x({factRef:t,path:m??"",pathResolver:h??i??""}),disabled:!m,color:"primary"},"Save")))),!!t&&e.createElement(O,{elevation:0,title:"Sample Fact and Test Path"},e.createElement(n,{className:a.expandedSection},e.createElement(n,{marginBottom:1},e.createElement(o,{variant:"subtitle1"},"Select an Entity"),e.createElement(o,{variant:"caption"},"Fact will be sampled from this entity."),e.createElement(v,{options:$??[],onChange:G,value:p??null,placeholder:"Entity Selection",fullWidth:!0})),e.createElement(n,null,e.createElement(L,{className:a.testPathButton,variant:"contained",onClick:T,disabled:!p,color:"primary"},"Sample Fact")),e.createElement(e.Fragment,null,!!b&&!u&&e.createElement(n,{className:a.section},e.createElement(o,{variant:"subtitle1"},"Resolved Value"),r?.resolvedValue!==null&&r?.resolvedValue!==void 0?e.createElement(n,{className:a.preview},e.createElement(F,{data:r?.resolvedValue})):e.createElement(o,{color:"textSecondary",variant:"body2"},"Could not resolve path")),!!S&&e.createElement(n,{className:a.section},e.createElement(o,{variant:"subtitle1"},"Fact Data"),A&&e.createElement(o,{variant:"caption"},"Uses cache when available."),!!u&&e.createElement("div",{className:a.loading},e.createElement(oe,null)),!u&&!!r?.fact&&e.createElement(n,{className:a.preview},e.createElement(F,{data:r?.fact?.data})),!u&&!!r?.collectionError&&e.createElement(o,{color:"textSecondary",variant:"body2"},"Failed to collect:"," ",r?.collectionError?.errorMessage),!u&&!r?.fact&&!r?.collectionError&&e.createElement(o,{color:"textSecondary",variant:"body2"},"Fact ",t," unavailable for entity ",p)))))))};export{ce as FactExplorer};
|
|
2
|
+
//# sourceMappingURL=FactExplorer.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import t,{createContext as E,useState as e}from"react";import{FactExplorerDialog as h}from"./FactExplorerDialog.esm.js";const a=E({open:!1,updateOpen:()=>{},updateOnSave:()=>{},updateFactRef:()=>{},updatePath:()=>{},updateEntityRef:()=>{},updatePathResolver:()=>{}}),s=({children:r})=>{const[p,n]=e(!1),[o,u]=e(),[l,d]=e(),[c,f]=e(),[i,v]=e(),[R,m]=e();return t.createElement(a.Provider,{value:{open:p,updateOpen:n,onSave:o,updateOnSave:u,factRef:l,updateFactRef:d,path:c,updatePath:f,entityRef:i,updateEntityRef:v,pathResolver:R,updatePathResolver:m}},t.createElement(t.Fragment,null,r,t.createElement(h,null)))};export{a as FactExplorerContext,s as FactExplorerProvider};
|
|
2
|
+
//# sourceMappingURL=FactExplorerContext.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Button as R}from"@material-ui/core";import E from"@material-ui/icons/Search";import a,{useContext as i}from"react";import{SoundcheckDialog as x}from"../SoundcheckDialog/SoundcheckDialog.esm.js";import{FactExplorer as v}from"./FactExplorer.esm.js";import{FactExplorerContext as m}from"./FactExplorerContext.esm.js";const F=()=>{const{open:e,updateOpen:o,onSave:r,factRef:p,updateFactRef:n,path:c,updatePath:l,entityRef:t,updateEntityRef:f,pathResolver:u}=i(m);return a.createElement(x,{open:e,handleClose:()=>o(!1),title:"Fact Explorer",fullScreen:!1},a.createElement(v,{onSave:r,factRef:p,updateFactRef:n,path:c,updatePath:l,entityRef:t,updateEntityRef:f,pathResolver:u}))},S=({onSave:e,factRef:o,path:r,pathResolver:p,className:n,text:c="Explore Facts",hideIcon:l})=>{const{updateOpen:t,updateOnSave:f,updateFactRef:u,updatePath:d,updatePathResolver:s}=i(m);return a.createElement(R,{onClick:()=>{t(!0),u(o??""),d(r??""),s(p??""),f(()=>h=>{e&&e(h),t(!1)})},className:n,variant:"text",startIcon:l?void 0:a.createElement(E,null)},c)};export{F as FactExplorerDialog,S as FactExplorerDialogButton};
|
|
2
|
+
//# sourceMappingURL=FactExplorerDialog.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{parseFactRef as p,stringifyFactRef as c}from"@spotify/backstage-plugin-soundcheck-common";import{useMemo as n}from"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"../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as l}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";const s=({selectedCollector:o})=>{const{data:r}=l({});return{factOptions:n(()=>o?.factNames?.map(t=>{const e=p(t,{defaultSource:o.id,defaultScope:"default"});let m=e.name;if(o?.id==="soundcheck"){const a=r?.edges.find(i=>i.node.id===e.name)?.node;m=a?`${a.type==="campaign"?"Campaign: ":"Track: "}${a.name}`:e.name}return{label:m,value:c(e)}})?.sort((t,e)=>t.label.localeCompare(e.label))??[],[o?.factNames,o?.id,r])}};export{s as useFactOptions};
|
|
2
|
+
//# sourceMappingURL=useFactOptions.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{makeStyles as
|
|
1
|
+
import{makeStyles as v,Typography as f,Box as y,FormControlLabel as O,Checkbox as w,TextField as z}from"@material-ui/core";import F from"@material-ui/icons/CheckBox";import T from"@material-ui/icons/CheckBoxOutlineBlank";import A from"@material-ui/icons/ExpandMore";import{Autocomplete as I}from"@material-ui/lab";import t,{useState as N,useMemo as B,useCallback as u}from"react";import{useGetEntityFacets as G}from"../../hooks/catalog/useGetEntityFacets.esm.js";import{ListboxVirtualized as U}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const D=v({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),H=({facet:s,label:p,values:a,onChange:n,disabled:b,filter:C})=>{const m=D(),[g,r]=N(!1),{data:l,isLoading:E,error:h}=G(s,C),o=B(()=>l?.map(e=>e.toLocaleLowerCase("en-US")),[l]),d=a?.map(e=>e.toLocaleLowerCase("en-US"))??[],x=u((e,i)=>{n(i),o&&o.every(c=>i.includes(c))&&r(!1)},[o,n,r]),L=u(()=>{n(a?.length?a:void 0)},[a,n]);if(!l||!o||h)return t.createElement(f,{color:"error"},"Failed to load facet: ",s);const k=b||E||!a?.length&&(!l?.length||!o?.length),S=Array.from(new Set([...o,...d]));return t.createElement(y,{pb:1,pt:1,className:m.container},t.createElement(f,{variant:"subtitle2"},p),t.createElement(I,{open:g,onOpen:()=>r(!0),onClose:()=>r(!1),className:m.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":p,options:S,value:d,getOptionLabel:e=>l[o.indexOf(e)]??e,onChange:x,onBlur:L,disabled:k,ListboxComponent:U,renderOption:(e,{selected:i})=>t.createElement(O,{onClick:c=>c.preventDefault(),control:t.createElement(w,{icon:t.createElement(T,{fontSize:"small"}),checkedIcon:t.createElement(F,{fontSize:"small"}),checked:i}),label:l[o.indexOf(e)]??e,classes:{label:m.label}}),size:"small",popupIcon:t.createElement(A,{"data-testid":"selected-facets-expand"}),renderInput:e=>t.createElement(z,{...e,variant:"outlined"})}))};export{H as EntityAutocompletePicker};
|
|
2
2
|
//# sourceMappingURL=EntityAutocompletePicker.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{EntitySearchBar as o}from"@backstage/plugin-catalog-react";import{Toolbar as
|
|
1
|
+
import{EntitySearchBar as o}from"@backstage/plugin-catalog-react";import{Toolbar as n,Typography as r}from"@material-ui/core";import{makeStyles as i}from"@material-ui/core/styles";import t from"react";const p=i(e=>({root:{paddingTop:e.spacing(1.5),paddingLeft:e.spacing(4),paddingRight:e.spacing(4),paddingBottom:e.spacing(1),display:"flex",justifyContent:"space-between",marginRight:"0",marginLeft:"0"},text:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}}),{name:"BackstageTableToolbar"});function l(e){const a=p();return t.createElement(n,{className:a.root,disableGutters:!0},t.createElement(r,{variant:"h5",component:"div",className:a.text},e.title),t.createElement(o,null))}export{l as CatalogTableToolbar};
|
|
2
2
|
//# sourceMappingURL=EntityTableToolbar.esm.js.map
|