@spotify/backstage-plugin-soundcheck 0.18.0 → 0.19.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 +69 -0
- package/config.d.ts +21 -0
- package/dist/alpha/apis.esm.js +1 -1
- package/dist/alpha/entity-content.esm.js +1 -1
- package/dist/alpha/pages.esm.js +1 -1
- package/dist/alpha/plugin.esm.js +1 -1
- package/dist/alpha.d.ts +83 -77
- package/dist/api.esm.js +1 -1
- package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
- package/dist/components/Badges/CampaignBadge.esm.js +1 -1
- package/dist/components/Badges/StatusBadge.esm.js +1 -1
- package/dist/components/CacheConfig/CacheConfigComponent.esm.js +1 -1
- package/dist/components/CampaignForm/CampaignForm.esm.js +1 -1
- package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignOwnerField.esm.js +1 -1
- package/dist/components/CampaignForm/Steps/CampaignTrackStepNew.esm.js +1 -1
- package/dist/components/CampaignForm/hooks/utils.esm.js +1 -1
- package/dist/components/CampaignForm/utils/campaignFormUtils.esm.js +2 -2
- package/dist/components/CampaignForm/utils/validation.esm.js +1 -1
- package/dist/components/CampaignInsightsPage/CampaignInsightsPage.esm.js +1 -1
- package/dist/components/CampaignInsightsPage/CampaignStatusHistoryTile.esm.js +1 -1
- package/dist/components/CampaignInsightsPage/CampaignStatusTile.esm.js +1 -1
- package/dist/components/CampaignInsightsPage/DaysRemainingTile.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/CategoryBar/CategoryBar.esm.js +1 -1
- package/dist/components/CertificationSidebar/Check.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
- package/dist/components/CheckDetails/FixMeDialog.esm.js +1 -1
- package/dist/components/CheckForm/CheckForm.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/CheckPathResolverInput.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/CheckScheduleSection/ScheduleSection.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/AddMenuButton.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js +1 -1
- package/dist/components/CheckForm/utils/checkFormUtils.esm.js +2 -2
- package/dist/components/CheckIcon/CheckIcon.esm.js +1 -1
- package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTable.esm.js +1 -1
- package/dist/components/CheckPage/CheckEntitiesTable/columns.esm.js +1 -1
- package/dist/components/CheckPage/CheckInsightsPage.esm.js +1 -1
- package/dist/components/CheckPage/CheckStatusTable.esm.js +1 -1
- package/dist/components/CheckTemplatesPage/CheckTemplatesPage.esm.js +1 -1
- package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +1 -1
- package/dist/components/ChecksPage/ChecksPage.esm.js +1 -1
- package/dist/components/CollapsablePanel/CollapsablePanel.esm.js +1 -1
- package/dist/components/CollectorPage/CollectorDetailsPage.esm.js +2 -0
- package/dist/components/CollectorPage/CollectorFactTable.esm.js +2 -0
- package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/AzureDevOps/NumberOfWorkItemsComponent.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/BigQuery/QueryFactDetailsComponent.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Common/CollectorConfigAlert.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Common/PortalConfigAlert.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Common/utils.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/CodeScanningAlertsFactDetails.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/DependabotAlertsFactDetails.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/SecretScanningAlertsFactDetails.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/SecurityAdvisoriesFactDetails.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/HTTP/HttpRequestComponent.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/HTTP/HttpStatusesInput.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SonarQube/IssuesFactDetailsInput.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.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/ColorChip/ColorChip.esm.js +2 -0
- package/dist/components/EmptyState/EmptyState.esm.js +1 -1
- package/dist/components/EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js +1 -1
- package/dist/components/Expand/Expand.esm.js +1 -1
- package/dist/components/ExpandableSection/ExpandableSection.esm.js +1 -1
- package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
- package/dist/components/FactExplorer/FactExplorerContext.esm.js +1 -1
- package/dist/components/FactExplorer/FactExplorerDialog.esm.js +1 -1
- package/dist/components/FactExplorer/useFactOptions.esm.js +1 -1
- package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
- package/dist/components/FilterSidebar/StateFilter.esm.js +1 -1
- package/dist/components/FilterSidebar/useTrackFilterSidebar.esm.js +2 -0
- package/dist/components/FormControlledAutocomplete/ControlledAutocomplete.esm.js +1 -1
- package/dist/components/Frequency/FrequencyComponent.esm.js +1 -1
- package/dist/components/Frequency/util.esm.js +1 -1
- package/dist/components/GroupHierarchySelector/GroupHierarchyCategorySelection.esm.js +2 -0
- package/dist/components/GroupHierarchySelector/GroupHierarchyChip.esm.js +2 -0
- package/dist/components/GroupHierarchySelector/GroupHierarchyGroupInfo.esm.js +2 -0
- package/dist/components/GroupHierarchySelector/GroupHierarchySelector.esm.js +2 -0
- package/dist/components/GroupHierarchySelector/GroupHierarchySelectorDialog.esm.js +2 -0
- package/dist/components/GroupHierarchySelector/getAllOwnedEntityCount.esm.js +2 -0
- package/dist/components/GroupHierarchySelector/usePreviousSelectedGroups.esm.js +2 -0
- package/dist/components/HierarchicalTechInsightsPage/ColorLegend.esm.js +2 -0
- package/dist/components/HierarchicalTechInsightsPage/HierarchicalTechInsightsPage.esm.js +2 -0
- package/dist/components/HierarchicalTechInsightsPage/HierarchyTable.esm.js +2 -0
- package/dist/components/HierarchicalTechInsightsPage/LowestPerformingTeams.esm.js +2 -0
- package/dist/components/HierarchicalTechInsightsPage/SelectedNodeSidebar.esm.js +2 -0
- package/dist/components/HierarchicalTechInsightsPage/TeamPerformanceCard.esm.js +2 -0
- package/dist/components/HierarchicalTechInsightsPage/TopPerformingTeams.esm.js +2 -0
- package/dist/components/HierarchicalTechInsightsPage/getLeafNodes.esm.js +2 -0
- package/dist/components/HierarchicalTechInsightsPage/visualizations/LoadingOverlay.esm.js +2 -0
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoCirclePacking.esm.js +2 -0
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoHeatmap.esm.js +2 -0
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoIcicle.esm.js +2 -0
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoSunburst.esm.js +2 -0
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoTreemap.esm.js +2 -0
- package/dist/components/HierarchicalTechInsightsPage/visualizations/VisualizationBreadcrumb.esm.js +2 -0
- package/dist/components/HierarchicalTechInsightsPage/visualizations/findNodePath.esm.js +2 -0
- package/dist/components/HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js +2 -0
- package/dist/components/ImportExportPanel/ImportExportPanel.esm.js +1 -1
- package/dist/components/LevelsTable/LevelsTable.esm.js +1 -1
- package/dist/components/OverviewPage/OverviewPage.esm.js +1 -1
- package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
- package/dist/components/PassRateGrid/PassRateMetadata.esm.js +1 -1
- package/dist/components/QuickstartPage/HowDoIListItem.esm.js +1 -1
- package/dist/components/QuickstartPage/QuickstartCardBase.esm.js +1 -1
- package/dist/components/QuickstartPage/QuickstartPage.esm.js +2 -1
- package/dist/components/QuickstartPage/WelcomeHelpSection.esm.js +5 -5
- package/dist/components/QuickstartPage/styles.esm.js +1 -1
- package/dist/components/RoutingPage/NewFeatureTab.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/SoundcheckEntityLink/SoundcheckEntityLink.esm.js +2 -0
- package/dist/components/SoundcheckHeader/SoundcheckHeader.esm.js +1 -1
- package/dist/components/SoundcheckHeader/headerUtil.esm.js +1 -1
- package/dist/components/TeamStatusBar/TeamStatusBar.esm.js +2 -0
- package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
- package/dist/components/TechHealth/Filters/FilterProvider.esm.js +1 -1
- package/dist/components/TechHealth/Loading/Loading.esm.js +1 -1
- package/dist/components/TechHealth/Loading/TechHealthLoading.esm.js +1 -1
- package/dist/components/TechHealth/TechHealth.esm.js +1 -1
- package/dist/components/TechHealthTabs/PassRateTabHeader.esm.js +1 -1
- package/dist/components/TechInsights/FilterControls.esm.js +2 -0
- package/dist/components/TechInsights/SummaryTiles.esm.js +2 -0
- package/dist/components/TechInsights/TechInsightsCardsView.esm.js +2 -0
- package/dist/components/TechInsights/TechInsightsPage.esm.js +1 -1
- package/dist/components/TechInsights/TechInsightsTableView.esm.js +2 -0
- package/dist/components/TechInsights/TrackStatusCard.esm.js +2 -0
- package/dist/components/TechInsights/ViewModeControls.esm.js +2 -0
- package/dist/components/TechInsights/convertToCommonTrackStatus.esm.js +2 -0
- package/dist/components/TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js +2 -0
- package/dist/components/TopFailingChecksTable/TopFailingChecksTable.esm.js +1 -1
- package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackBadgeTypeSelect/TrackBadgeTypeSelect.esm.js +1 -1
- package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackOwnerSelect/TrackOwnerSelect.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/TrackStatusChip.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/columns.esm.js +1 -1
- package/dist/components/TrackPage/TrackHistoryChart.esm.js +1 -1
- package/dist/components/TrackPage/TrackPage.esm.js +1 -1
- package/dist/components/TrackPage/TrackStatusBar.esm.js +1 -1
- package/dist/components/TrackPage/TrackStatusTable.esm.js +1 -1
- package/dist/components/TrackSelection/TrackSelection.esm.js +2 -0
- package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +1 -1
- package/dist/components/TracksPage/TracksPage.esm.js +1 -1
- package/dist/graphql/generated/index.esm.js +202 -149
- package/dist/hooks/cache/useEntityCountCached.esm.js +2 -0
- package/dist/hooks/cache/useTrackCountCached.esm.js +2 -0
- package/dist/hooks/campaigns/useCreateCampaign.esm.js +1 -1
- package/dist/hooks/campaigns/useGetCampaigns.esm.js +1 -1
- package/dist/hooks/catalog/useGetEntityCount.esm.js +2 -0
- package/dist/hooks/catalog/useGetLimitedEntityRefs.esm.js +2 -0
- package/dist/hooks/checks/useUpdateCheck.esm.js +1 -1
- package/dist/hooks/collectors/useDeleteCollectorConfig.esm.js +2 -0
- package/dist/hooks/graphqlKeys.esm.js +1 -1
- package/dist/hooks/groups/useAllGroups.esm.js +1 -1
- package/dist/hooks/groups/useGroupOptions.esm.js +1 -1
- package/dist/hooks/heirarchy/useBatchedHierarchicalTrackStatuses.esm.js +2 -0
- package/dist/hooks/heirarchy/useGroupHierarchy.esm.js +1 -1
- package/dist/hooks/heirarchy/useGroupTypeHierarchy.esm.js +2 -0
- package/dist/hooks/heirarchy/useHierarchicalTrackStatus.esm.js +1 -1
- package/dist/hooks/tracks/useCreateTrack.esm.js +1 -1
- package/dist/hooks/tracks/useGetAllTracks.esm.js +1 -1
- package/dist/hooks/tracks/useGetTracksApplicableEntityCount.esm.js +2 -0
- package/dist/hooks/tracks/useTracksApplicableToGroup.esm.js +2 -0
- package/dist/hooks/useFeatureFlag.esm.js +1 -1
- package/dist/hooks/useLCPReporting.esm.js +2 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.esm.js +1 -1
- package/dist/routes.esm.js +1 -1
- package/dist/utils/colors.esm.js +1 -1
- package/dist/utils/lcpReporting.esm.js +2 -0
- package/package.json +27 -24
- package/dist/components/CheckCard/CheckCard.esm.js +0 -2
- package/dist/components/CheckCard/CheckHistoryChart.esm.js +0 -2
- package/dist/components/CheckCard/utils.esm.js +0 -2
- package/dist/components/MultiSelectFilter/MultiSelectFilter.esm.js +0 -2
- package/dist/components/QuickstartPage/QuickStartChecksCard.esm.js +0 -2
- package/dist/components/QuickstartPage/QuickstartCollectorConfigurationsCard.esm.js +0 -2
- package/dist/components/QuickstartPage/QuickstartTracksCard.esm.js +0 -2
- package/dist/components/QuickstartPage/WelcomeModal.esm.js +0 -2
- package/dist/components/TechHealth/Loading/Emoji.esm.js +0 -2
- package/dist/components/TechHealth/Loading/EmojiFountain.esm.js +0 -2
- package/dist/components/TechInsights/ColorLegend.esm.js +0 -2
- package/dist/components/TechInsights/LoadingOverlay.esm.js +0 -2
- package/dist/components/TechInsights/LowestPerformingTeams.esm.js +0 -2
- package/dist/components/TechInsights/NivoCirclePacking.esm.js +0 -2
- package/dist/components/TechInsights/NivoIcicle.esm.js +0 -2
- package/dist/components/TechInsights/NivoSunburst.esm.js +0 -2
- package/dist/components/TechInsights/NivoTreemap.esm.js +0 -2
- package/dist/components/TechInsights/TeamComparison/CheckComparison.esm.js +0 -2
- package/dist/components/TechInsights/TeamComparison/FailingComponentsTable.esm.js +0 -2
- package/dist/components/TechInsights/TeamComparison/LineChartContainer.esm.js +0 -2
- package/dist/components/TechInsights/TeamComparison/MultiCheckStatusHistoryChart.esm.js +0 -2
- package/dist/components/TechInsights/TeamComparison/MultiTrackHistoryChart.esm.js +0 -2
- package/dist/components/TechInsights/TeamComparison/TeamComparison.esm.js +0 -2
- package/dist/components/TechInsights/TeamComparison/TrackComparison.esm.js +0 -2
- package/dist/components/TechInsights/TeamPerformanceCard.esm.js +0 -2
- package/dist/components/TechInsights/TechInsightsGroupSelector.esm.js +0 -2
- package/dist/components/TechInsights/TechInsightsPage2.esm.js +0 -2
- package/dist/components/TechInsights/TechInsightsSidebar.esm.js +0 -2
- package/dist/components/TechInsights/TechInsightsViewSelector.esm.js +0 -2
- package/dist/components/TechInsights/Tiles/CheckStatusTile.esm.js +0 -2
- package/dist/components/TechInsights/Tiles/TileUtils.esm.js +0 -2
- package/dist/components/TechInsights/Tiles/TrackStatusTile.esm.js +0 -2
- package/dist/components/TechInsights/TopPerformingTeams.esm.js +0 -2
- package/dist/components/TechInsights/TrackCardGrid.esm.js +0 -2
- package/dist/components/TechInsights/TrackCardGridBox.esm.js +0 -2
- package/dist/components/TechInsights/colorContrast.esm.js +0 -2
- package/dist/components/TechInsights/hierarchy/GroupNode.esm.js +0 -2
- package/dist/components/TechInsights/hierarchy/Hierarchy.esm.js +0 -2
- package/dist/components/TechInsights/hierarchy/VirtualRow.esm.js +0 -2
- package/dist/components/TechInsights/hierarchyToNivo.esm.js +0 -2
- package/dist/components/TechInsights/persistence/FavoriteViews.esm.js +0 -2
- package/dist/components/TechInsights/styles.esm.js +0 -2
- package/dist/components/TrackPage/FilterBar/FilterBar.esm.js +0 -2
- package/dist/hooks/aggregations/useCertificationStatusHistories.esm.js +0 -2
- package/dist/hooks/aggregations/useCertificationStatuses.esm.js +0 -2
- package/dist/hooks/aggregations/useCheckStatusByGroups.esm.js +0 -2
- package/dist/hooks/aggregations/useCheckStatusHistories.esm.js +0 -2
- package/dist/hooks/aggregations/useCheckStatusHistoriesMultiFilter.esm.js +0 -2
- package/dist/hooks/heirarchy/useGetDescendentsOfGroups.esm.js +0 -2
- package/dist/hooks/heirarchy/useRootGroups.esm.js +0 -2
- package/dist/hooks/savedViews/useDeleteView.esm.js +0 -2
- package/dist/hooks/savedViews/useSaveView.esm.js +0 -2
- package/dist/hooks/savedViews/useSavedViews.esm.js +0 -2
- /package/dist/components/{TrackPage/FilterBar → FilterSidebar}/util.esm.js +0 -0
- /package/dist/components/{TechInsights → HierarchicalTechInsightsPage}/TeamPerformanceListCard.esm.js +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{parseFactRef as p,stringifyFactRef as
|
|
1
|
+
import{parseFactRef as p,stringifyFactRef as $}from"@spotify/backstage-plugin-soundcheck-common";import{useState as b,useEffect as y,useMemo as f}from"react";import{useWatch as C}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{useGetAllTracks as F}from"../../../../../hooks/tracks/useGetAllTracks.esm.js";import"../../../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetCollectors as G}from"../../../../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as O}from"../../../../../hooks/collectors/useGetFactSchema.esm.js";import{generateJsonPaths as L}from"../../../utils/checkFormUtils.esm.js";const M=(o,d)=>{const{data:m,isLoading:h}=G(),{data:s}=F({}),r=C({control:d,name:`${o}.factRef`}),[i,g]=b(()=>l(r));y(()=>{g(l(r))},[r]);const{data:n}=O(i?.source,i?.name),k=f(()=>n?L(n.schema):[],[n]),R=f(()=>m?.flatMap(e=>e.factNames.map(a=>{const t=e.id==="soundcheck"?{source:e.id,scope:"default",name:a}:p(a,{defaultSource:e.id,defaultScope:"default"});let u=t.name;if(t.source==="soundcheck"){const c=s?.edges.find(S=>S.node.id===t.name.replace("track/",""))?.node;u=c?`${c.type==="campaign"?"Campaign: ":"Track: "}${c.name}`:t.name}return{label:`${t.source} - ${u}`,value:$(t)}}))?.sort((e,a)=>e.label.localeCompare(a.label))??[],[m,s]);return{isLoading:h,pathOptions:k,factRefOptions:R}};function l(o){if(o)try{return p(o,{defaultSource:"unknown",defaultScope:"default"})}catch{return null}return null}export{M as useRuleOptions};
|
|
2
2
|
//# sourceMappingURL=useRuleOptions.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as y,jsx as i}from"react/jsx-runtime";import{parseEntityRef as h}from"@backstage/catalog-model";import{Typography as b}from"@material-ui/core";import{makeStyles as g}from"@material-ui/core/styles";import{uniqBy as x}from"lodash";import{useFormContext as E}from"react-hook-form";import"../../../../contexts/TrackFormContext.esm.js";import"../../../../contexts/CheckFormContext.esm.js";import"../../../../contexts/CampaignFormContext.esm.js";import"react";import{useLoggedInUser as w}from"../../../../contexts/UserProvider.esm.js";import{useGroupOptions as L}from"../../../../hooks/groups/useGroupOptions.esm.js";import{FormControlledAutocomplete as S}from"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as C}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import{CHECK_FIELDS as R}from"../../utils/checkFormUtils.esm.js";const T=g(m=>({container:{display:"flex",flexDirection:"column",gap:m.spacing(1)}})),D=({control:m,disabled:a,error:n})=>{const l=T(),{options:p,isLoading:s}=L();let e=x(p.map(r=>({value:r.ref,label:r.name})),"value");const{user:c,userEntityRef:t}=w();t&&(e=[{value:t,label:c?.metadata?.name??t},...e]);const{watch:d}=E(),o=d("detailsStep.ownerEntityRef");o&&t!==o&&!e.some(r=>r.value===o)&&(e=[{value:o,label:h(o).name},...e]);const f=C(e),{owner:{name:u,selectLabel:v}}=R.details;return y("div",{className:l.container,children:[i("div",{children:i(b,{variant:"subtitle2",children:u})}),i("div",{children:i(S,{freeSolo:!1,name:"detailsStep.ownerEntityRef",control:m,placeholder:v,width:250,helperText:n?.message??void 0,disabled:a||s,...f})})]})};export{D as TeamDetailsInput};
|
|
1
|
+
import{jsxs as y,jsx as i}from"react/jsx-runtime";import{parseEntityRef as h}from"@backstage/catalog-model";import{Typography as b}from"@material-ui/core";import{makeStyles as g}from"@material-ui/core/styles";import{uniqBy as x}from"lodash";import{useFormContext as E}from"react-hook-form";import"../../../../contexts/TrackFormContext.esm.js";import"../../../../contexts/CheckFormContext.esm.js";import"../../../../contexts/CampaignFormContext.esm.js";import"react";import{useLoggedInUser as w}from"../../../../contexts/UserProvider.esm.js";import{useGroupOptions as L}from"../../../../hooks/groups/useGroupOptions.esm.js";import{FormControlledAutocomplete as S}from"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as C}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"../../../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{CHECK_FIELDS as R}from"../../utils/checkFormUtils.esm.js";const T=g(m=>({container:{display:"flex",flexDirection:"column",gap:m.spacing(1)}})),D=({control:m,disabled:a,error:n})=>{const l=T(),{options:p,isLoading:s}=L();let e=x(p.map(r=>({value:r.ref,label:r.name})),"value");const{user:c,userEntityRef:t}=w();t&&(e=[{value:t,label:c?.metadata?.name??t},...e]);const{watch:d}=E(),o=d("detailsStep.ownerEntityRef");o&&t!==o&&!e.some(r=>r.value===o)&&(e=[{value:o,label:h(o).name},...e]);const f=C(e),{owner:{name:u,selectLabel:v}}=R.details;return y("div",{className:l.container,children:[i("div",{children:i(b,{variant:"subtitle2",children:u})}),i("div",{children:i(S,{freeSolo:!1,name:"detailsStep.ownerEntityRef",control:m,placeholder:v,width:250,helperText:n?.message??void 0,disabled:a||s,...f})})]})};export{D as TeamDetailsInput};
|
|
2
2
|
//# sourceMappingURL=TeamDetailsInput.esm.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{FrequencySchema as A}from"@spotify/backstage-plugin-soundcheck-common";import{isObject as C}from"lodash";import{v4 as R}from"uuid";import{mapInputFilterToFormFilters as x,mapCatalogFilterToFormKeyValueFilters as g,mapFiltersToCatalogFilter as m}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{emptyFilters as v,emptyKeyValueFilters as b}from"../../Filter/types.esm.js";import{TimeUnit as F}from"../../Frequency/types.esm.js";import{isTimeUnit as M}from"../../Frequency/util.esm.js";import"../../Frequency/FrequencyComponent.esm.js";import{ExpressionType as l}from"../types/ExpressionType.esm.js";import{defaultSchedule as O}from"../types/Schedule.esm.js";import"../types/Path.esm.js";import{CHECK_NAME_MAX_LENGTH as P}from"./validation.esm.js";const E=e=>{if(C(e)&&"frequency"in e){const r=A.safeParse(e.frequency);if(r.success){const t=r.data;if("cron"in t)return{enabled:!0,frequency:{type:"cron",unit:F.
|
|
2
|
-
For example, selecting an include filter of 'Kind' as 'Component' and an exclude filter of 'Type' as 'Service' will select all entities with kind Component where type is NOT Service.`},schedule:{description:"Checks are automatically triggered whenever a dependent fact is updated. When collectors are scheduled, there is generally no need to schedule checks.",checkboxLabel:"Schedule check"}};export{
|
|
1
|
+
import{FrequencySchema as A}from"@spotify/backstage-plugin-soundcheck-common";import{isObject as C}from"lodash";import{v4 as R}from"uuid";import{mapInputFilterToFormFilters as x,mapCatalogFilterToFormKeyValueFilters as g,mapFiltersToCatalogFilter as m}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{emptyFilters as v,emptyKeyValueFilters as b}from"../../Filter/types.esm.js";import{TimeUnit as F}from"../../Frequency/types.esm.js";import{isTimeUnit as M}from"../../Frequency/util.esm.js";import"../../Frequency/FrequencyComponent.esm.js";import{ExpressionType as l}from"../types/ExpressionType.esm.js";import{defaultSchedule as O}from"../types/Schedule.esm.js";import"../types/Path.esm.js";import{CHECK_NAME_MAX_LENGTH as P}from"./validation.esm.js";const E=e=>{if(C(e)&&"frequency"in e){const r=A.safeParse(e.frequency);if(r.success){const t=r.data;if("cron"in t)return{enabled:!0,frequency:{type:"cron",unit:F.Days,value:1,cron:t.cron}};const i=Object.keys(t);if(i.length){const s=i[0];if(M(s))return{enabled:!0,frequency:{type:"HumanDuration",unit:s,value:t[s]??1,cron:""}}}}}return{enabled:!1,frequency:{type:"HumanDuration",unit:F.Days,value:1,cron:""}}},w=(e,r)=>{const{enabled:t,frequency:i}=e;if(t){const{cron:s,type:o,unit:a,value:u}=i;return o==="HumanDuration"?{frequency:{[a]:u},filter:m(r)}:{frequency:{cron:s}}}},y=e=>{if(Array.isArray(e))return e.map(r=>y(r));if(typeof e=="string"){if(e==="true")return!0;if(e==="false")return!1;const r=Number(e);if(!isNaN(r))return r}return e},p=e=>{if(!e)return{};if(e.expressionType){const r={[e.expressionType]:e.conditions?.map(t=>({factRef:t.factRef,path:t.path,operator:t.operatorPrefix?`${t.operatorPrefix}:${t.operator}`:t.operator,value:y(t.value)}))};return e.expressions&&e.expressions.forEach(t=>{r[e.expressionType]?.push(p(t))}),r}if(e.expressions)return e.expressions.map(p);if(e.conditions&&e.conditions.length===1){const r=e.conditions[0];return{factRef:r.factRef,path:r.path,operator:r.operatorPrefix?`${r.operatorPrefix}:${r.operator}`:r.operator,value:y(r.value)}}return{}},k=e=>{if(e?.match(/.:./)){const r=e.split(":");if(["all","any","none"].includes(r[0]))return{operator:r[1],operatorPrefix:r[0]}}return{}},f=(e,r=!0)=>{if(!e)return{conditions:[]};const t=Object.keys(e);let i=t.includes("all")||r&&!t.includes("any")?l.AllOf:l.AnyOf;if(t.includes("not")&&(i=l.Not),t.includes(i)||r){const a=e[i]||[e],u=[],d=[];return a.forEach(n=>{const h=Object.keys(n);if(h.includes("all")||h.includes("any")||h.includes("not"))d.push(f(n,!1));else{const{operator:T,operatorPrefix:S}=k(n.operator);u.push({factRef:n.factRef,path:n.path,operator:T??n.operator,value:n.value,operatorPrefix:S})}}),{expressions:d.length>0?d:void 0,conditions:u,expressionType:i}}const{operator:s,operatorPrefix:o}=k(e.operator);return{expressionType:l.AllOf,conditions:[{factRef:e.factRef,path:e.path,operator:s??e.operator,value:e.value,operatorPrefix:o}]}},V=e=>({detailsStep:{name:e.name??"",description:e.description??"",ownerEntityRef:e.ownerEntityRef??"",type:e.type??"default"},rulesStep:{pathResolver:e.pathResolver??"jsonpath",expressions:f(e.rule),passedMessage:e.passedMessage??void 0,failedMessage:e.failedMessage??void 0,warning:e.warning??!1},filtersStep:{filter:x(e.filter),keyValueFilter:g(e.filter),excludeFilter:x(e.exclude),excludeKeyValueFilter:g(e.exclude),applicabilityExpressions:e.applicable?f(e.applicable):void 0,notApplicableMessage:e.notApplicableMessage??void 0},scheduleStep:{schedule:E(e.schedule)}}),N=(e,r)=>{const{detailsStep:t,rulesStep:i,filtersStep:s,scheduleStep:o}=e;return{id:r?r.id:R(),ownerEntityRef:t.ownerEntityRef??void 0,name:t.name,description:t.description,pathResolver:i.pathResolver,passedMessage:i.passedMessage??void 0,failedMessage:i.failedMessage??void 0,rule:t.type==="manual"?void 0:p(i.expressions),warning:i.warning??!1,filter:s.filter||s.keyValueFilter?m(s.filter,s.keyValueFilter):void 0,exclude:s.excludeFilter||s.excludeKeyValueFilter?m(s.excludeFilter,s.excludeKeyValueFilter):void 0,applicable:t.type!=="manual"&&(s.applicabilityExpressions?.conditions?.length||s.applicabilityExpressions?.expressions?.length)?p(s.applicabilityExpressions):void 0,notApplicableMessage:s.notApplicableMessage&&t.type!=="manual"&&s.applicabilityExpressions?.conditions?.length?s.notApplicableMessage:void 0,schedule:w(o.schedule,s.filter),type:t.type}},c=(e,r="$")=>{const t=[];if(e.type==="object"&&e.properties){const i=e.properties;for(const s in i)if(i.hasOwnProperty(s)){const o=`${r}.${s}`;t.push(o);const a=i[s];t.push(...c(a,o))}}if(e.type==="array"&&e.items){const i=`${r}[*]`;t.push(i);const s=Array.isArray(e.items)?e.items:[e.items];for(const o of s)t.push(...c(o,i))}if(e.oneOf){const i=Array.isArray(e.oneOf)?e.oneOf:[e.oneOf];for(const s of i)t.push(...c(s,r))}if(e.allOf){const i=Array.isArray(e.allOf)?e.allOf:[e.allOf];for(const s of i)t.push(...c(s,r))}return[...new Set(t)]},q={detailsStep:{name:"",description:"",ownerEntityRef:"",type:"default"},rulesStep:{pathResolver:"jsonpath",expressions:{expressionType:l.AllOf,expressions:void 0,conditions:[{factRef:"",path:"",operator:"",operatorPrefix:"",value:"",conditions:[]}]},warning:!1},filtersStep:{filter:v(),keyValueFilter:b(),excludeFilter:v(),excludeKeyValueFilter:b()},scheduleStep:{schedule:O()}},D={details:{name:{name:"Check name",helperText:`Max ${P} characters`,placeholder:"Name your check (e.g., 'Code Coverage\u2019)"},description:{name:"Check description",placeholder:"Describe your check clearly so others understand its purpose. e.g., 'Ensure code coverage meets the minimum threshold.'"},owner:{name:"Check owner",selectLabel:"Assign an owner"},type:{name:"Check Type",selectLabel:"Choose the type of check."}},rulesStep:{rules:{name:"Check rules",description:"Define the rules the check will verify."},messages:{name:"Pass/Fail messages (Optional)",description:"Add the messages for check success and failure.",passMessagePlaceholder:"Enter pass message...",failMessagePlaceholder:"Enter fail message...",passedTabName:"Passed Message",failedTabName:"Failed Message"},warnings:{name:"Enable warnings",description:"Enable to classify failures as warnings, so they don\u2019t impact certification.",label:"Warning"}},filter:{description:`Use the filters below to narrow the scope of the Check. Only Entities that match the selected include and exclude filters will be applicable to the Check. Exclude filters must be used with with an include filter.
|
|
2
|
+
For example, selecting an include filter of 'Kind' as 'Component' and an exclude filter of 'Type' as 'Service' will select all entities with kind Component where type is NOT Service.`},schedule:{description:"Checks are automatically triggered whenever a dependent fact is updated. When collectors are scheduled, there is generally no need to schedule checks.",checkboxLabel:"Schedule check"}};export{D as CHECK_FIELDS,q as DEFAULT_FORM_VALUES,c as generateJsonPaths,V as mapCheckerToFormValues,p as mapExpressionToRule,E as mapInputScheduleToSchedule,f as mapRuleToExpression,w as mapScheduleToInputSchedule,N as mapToCheckerInput};
|
|
3
3
|
//# sourceMappingURL=checkFormUtils.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as c,Fragment as h,jsx as t}from"react/jsx-runtime";import{withStyles as l,lighten as f,Tooltip as g}from"@material-ui/core";import x from"@material-ui/icons/Check";import u from"@material-ui/icons/Close";import T from"@material-ui/icons/HelpOutline";import N from"@material-ui/icons/NotInterested";import m from"@material-ui/icons/RemoveCircleOutline";import b from"@material-ui/icons/ReportProblemOutlined";import{ResultState as n}from"../../graphql/generated/index.esm.js";import{resultToText as s}from"../../text.esm.js";const w=l(o=>({root:{color:o.palette.success.main}}))(x),S=l(o=>({root:{color:o.palette.error.main}}))(u),v=l(o=>({root:{color:o.palette.warning.main}}))(b),
|
|
1
|
+
import{jsxs as c,Fragment as h,jsx as t}from"react/jsx-runtime";import{withStyles as l,lighten as f,Tooltip as g}from"@material-ui/core";import x from"@material-ui/icons/Check";import u from"@material-ui/icons/Close";import T from"@material-ui/icons/HelpOutline";import N from"@material-ui/icons/NotInterested";import m from"@material-ui/icons/RemoveCircleOutline";import b from"@material-ui/icons/ReportProblemOutlined";import{ResultState as n}from"../../graphql/generated/index.esm.js";import{resultToText as s}from"../../text.esm.js";const w=l(o=>({root:{color:o.palette.success.main}}))(x),S=l(o=>({root:{color:o.palette.error.main}}))(u),v=l(o=>({root:{color:o.palette.warning.main}}))(b),y=l(o=>({root:{color:o.palette.text.primary}}))(T),D=l(o=>({root:{color:o.palette.text.disabled}}))(m),E=l(o=>({root:{color:o.palette.info.main}}))(N),R=l(o=>({root:{color:f(o.palette.error.main,.2)}}))(m),r=({icon:o,tooltip:a})=>t(g,{title:a,children:o}),j=({result:o,className:a,tooltip:d=!0,timestamp:p})=>{const i={className:a,"aria-label":s(o),"aria-hidden":!1},e=d?c(h,{children:[t("div",{children:t("strong",{children:s(o)})}),p&&c("div",{children:[t("strong",{children:"Updated:"})," ",new Date(p).toLocaleDateString()," ",new Date(p).toLocaleTimeString()]})]}):"";return o===n.Passed?t(r,{icon:t(w,{...i}),tooltip:e}):o===n.NotReported?t(r,{icon:t(y,{...i}),tooltip:e}):o===n.Failed?t(r,{icon:t(S,{...i}),tooltip:e}):o===n.Warning?t(r,{icon:t(v,{...i}),tooltip:e}):o===n.NotApplicable?t(r,{icon:t(D,{...i}),tooltip:e}):o===n.Exempt?t(r,{icon:t(E,{...i}),tooltip:e}):o===n.Error?t(r,{icon:t(R,{...i}),tooltip:e}):null};export{j as CheckIcon,r as IconWithTooltip};
|
|
2
2
|
//# sourceMappingURL=CheckIcon.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as f}from"react/jsx-runtime";import{stringifyEntityRef as v}from"@backstage/catalog-model";import{Table as x}from"@backstage/core-components";import{makeStyles as z}from"@material-ui/core";import L from"lodash";import{useState as B,useEffect as T,useCallback as m}from"react";import{CheckEntityField as r,Direction as g}from"../../../graphql/generated/index.esm.js";import{useEntitiesByRefs as N}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useCheckEntities as D}from"../../../hooks/entities/useCheckEntities.esm.js";import{toResultState as u}from"../utils.esm.js";import{columnFactories as n}from"./columns.esm.js";import{toCheckEntityRow as O}from"./utils.esm.js";const P=10,F=["kind","metadata.name","metadata.namespace","spec.profile.displayName","metadata.title","relations","spec.lifecycle","spec.type"],A=(s,c)=>[n.createStateColumn(),n.createNameColumn({trackId:s,checkId:c}),n.createSystemColumn(),n.createOwnerColumn(),n.createSpecTypeColumn(),n.createSpecLifecycleColumn()],j=[r.State,r.Name,r.System,r.Owner,r.Type,r.Lifecycle],Q=z({tableContainer:{display:"flex",flexDirection:"column",width:"100%",overflowX:"auto","& table":{boxSizing:"border-box","& th:first-child, & td:first-child":{paddingLeft:"6px"},"& th:last-child, & td:last-child":{paddingRight:"6px !important"}}}}),W=({checkId:s,trackId:c,filter:p,states:l})=>{const h=Q(),y=A(c,s),[e,d]=B({orderBy:void 0,filter:p,states:l?.map(u).filter(t=>t!==void 0),pageInfo:{page:0,pageSize:P,direction:"forward",cursor:null}});T(()=>{d(t=>({...t,pageInfo:{...t.pageInfo,page:0,cursor:null},filter:p,states:l?.map(u).filter(i=>i!==void 0)}))},[p,l]);const{data:a,isLoading:I}=D({checkId:s,trackId:c,orderBy:e.orderBy,filter:e.filter,states:e.states?.length?e.states:void 0,[e.pageInfo.direction==="forward"?"first":"last"]:e.pageInfo.pageSize,[e.pageInfo.direction==="forward"?"after":"before"]:e.pageInfo.cursor}),k=m((t,i)=>{let o;t===-1?o=void 0:o={field:j[t],direction:i==="asc"?g.Asc:g.Desc},d({...e,orderBy:o,pageInfo:{...e.pageInfo,page:0,cursor:null}})},[e]),C=m((t,i)=>{const o=t>e.pageInfo.page?"forward":"backward",R=o==="forward"?a?.checkEntities.pageInfo.endCursor??null:a?.checkEntities.pageInfo.startCursor??null;d({...e,pageInfo:{page:t,pageSize:i,direction:o,cursor:R}})},[a,e]),S=a?.checkEntities.edges.map(t=>t.node.entityRef)??[],{data:w,isLoading:b}=N({entityRefs:S,fields:F}),E=L.compact(a?.checkEntities.edges.map(t=>{const i=w?.items.find(o=>!!o&&v(o)===t.node.entityRef);return i?O({checkDetails:t.node,entity:i}):void 0}))??[];return f("div",{className:h.tableContainer,children:f(x,{title:"Entities",style:{width:"100%",border:"none",margin:0},columns:y,data:E,options:{paging:!0,showFirstLastPageButtons:!1,paginationPosition:"bottom",emptyRowsWhenPaging:!0,pageSizeOptions:[10,25,50],pageSize:e.pageInfo.pageSize,search:!1,showTitle:!0,padding:"dense"},onOrderChange:k,onPageChange:C,page:e.pageInfo.page,totalCount:a?.checkEntities.totalCount??0,isLoading:I||b,components:{Toolbar:()=>null}})})};export{W as CheckEntitiesTable};
|
|
2
2
|
//# sourceMappingURL=CheckEntitiesTable.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as r,Fragment as o}from"react/jsx-runtime";import{OverflowTooltip as
|
|
1
|
+
import{jsx as r,Fragment as o}from"react/jsx-runtime";import{OverflowTooltip as c}from"@backstage/core-components";import{EntityRefLink as m,EntityRefLinks as s}from"@backstage/plugin-catalog-react";import{makeStyles as u,Chip as d}from"@material-ui/core";import{CheckIcon as p}from"../../CheckIcon/CheckIcon.esm.js";import{SoundcheckEntityLink as y}from"../../SoundcheckEntityLink/SoundcheckEntityLink.esm.js";const l=u(()=>({linkHover:{"& span":{"&:hover":{textDecoration:"underline"}}}})),f=Object.freeze({createStateColumn(){return{title:"",field:"state",render:({state:t})=>r(p,{result:t}),width:"auto",align:"center",sorting:!1}},createNameColumn(t){return{title:"Name",field:"resolved.entityRef",highlight:!0,customSort(e,n){return 0},render:({entity:e})=>{const n=l();return t?.checkId||t?.trackId?r(y,{entity:e,trackId:t.trackId,checkId:t.checkId,className:n.linkHover}):r(m,{entityRef:e,defaultKind:t?.defaultKind||"Component",className:n.linkHover})}}},createSystemColumn(){return{title:"System",field:"resolved.partOfSystemRelationTitle",customSort(t,e){return 0},render:({resolved:t})=>{const e=l();return r(s,{entityRefs:t.partOfSystemRelations,defaultKind:"system",className:e.linkHover})}}},createOwnerColumn(){return{title:"Owner",field:"resolved.ownedByRelationsTitle",customSort(t,e){return 0},render:({resolved:t})=>{const e=l();return r(s,{entityRefs:t.ownedByRelations,defaultKind:"group",className:e.linkHover})}}},createSpecTypeColumn(){return{title:"Type",field:"entity.spec.type",customSort(t,e){return 0}}},createSpecLifecycleColumn(){return{title:"Lifecycle",field:"entity.spec.lifecycle",customSort(t,e){return 0},width:"auto"}},createMetadataDescriptionColumn(){return{title:"Description",field:"entity.metadata.description",customSort(t,e){return 0},render:({entity:t})=>r(c,{text:t.metadata.description,placement:"bottom-start"}),width:"auto"}},createTagsColumn(){return{title:"Tags",field:"entity.metadata.tags",cellStyle:{padding:"0px 16px 0px 20px"},render:({entity:t})=>r(o,{children:t.metadata.tags&&t.metadata.tags.map(e=>r(d,{label:e,size:"small",variant:"outlined",style:{marginBottom:"0px"}},e))}),width:"auto",sorting:!1}},createTitleColumn(t){return{title:"Title",field:"entity.metadata.title",customSort(e,n){return 0},hidden:t?.hidden,searchable:!0}},createLabelColumn(t,e){return{title:e?.title||"Label",field:"entity.metadata.labels",customSort(n,a){return 0},cellStyle:{padding:"0px 16px 0px 20px"},render:({entity:n})=>{const a=n.metadata?.labels,i=a&&a[t]||e?.defaultValue;return r(o,{children:i&&r(d,{label:i,size:"small",variant:"outlined"},i)})},width:"auto",sorting:!1}},createNamespaceColumn(){return{title:"Namespace",field:"entity.metadata.namespace",customSort(t,e){return 0},width:"auto"}}});export{f as columnFactories};
|
|
2
2
|
//# sourceMappingURL=columns.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as i,jsxs as u}from"react/jsx-runtime";import{useRouteRef as ne}from"@backstage/core-plugin-api";import{EntityRefLink as se}from"@backstage/plugin-catalog-react";import{usePermission as Q}from"@backstage/plugin-permission-react";import{makeStyles as ae,useTheme as le,Button as ce,Typography as G,Tabs as de,Tab as K,Box as V}from"@material-ui/core";import{soundcheckCheckReadPermission as me,soundcheckCheckUpdatePermission as pe,toEntityFilterQuery as D,combineEntityFilterQueries as he}from"@spotify/backstage-plugin-soundcheck-common";import v from"lodash/isEqual";import{useMemo as a,useState as b,useEffect as fe,useCallback as X}from"react";import{useSearchParams as ue,useParams as ge,useNavigate as ye}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCheck as ke}from"../../hooks/checks/useCheck.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useTrack as Ce}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCheckStatus as Se}from"../../hooks/aggregations/useCheckStatus.esm.js";import{useLCPReporting as xe}from"../../hooks/useLCPReporting.esm.js";import{checkEditRouteRef as we}from"../../routes.esm.js";import{toFilter as be}from"../../utils/helpers.esm.js";import{CheckStatusBar as ve}from"../CheckStatusBar/CheckStatusBar.esm.js";import{FilterSidebar as Ee}from"../FilterSidebar/FilterSidebar.esm.js";import{StateFilter as Ne}from"../FilterSidebar/StateFilter.esm.js";import{LoadingIndicator as Ie}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as Y}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Re}from"../SoundcheckHeader/useHeader.esm.js";import{SoundcheckMarkdownContent as Fe}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../TechHealth/Filters/types.esm.js";import"../TechHealth/Filters/FacetFilter.esm.js";import"../TechHealth/Filters/FilterProvider.esm.js";import"../TechHealth/Filters/Filters.esm.js";import"../TechHealth/Filters/FiltersHeader.esm.js";import"../TechHealth/Filters/FiltersSection.esm.js";import"lodash";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{parseNumberOfDays as Te}from"../TechHealth/Filters/utils.esm.js";import{CheckEntitiesTable as Le}from"./CheckEntitiesTable/CheckEntitiesTable.esm.js";import{CheckStatusHistoryChart as Ae}from"./CheckStatusHistoryChart.esm.js";import{CheckStatusTable as Be}from"./CheckStatusTable.esm.js";import{ExemptionsTable as De}from"./ExemptionsTable.esm.js";function Pe(e,r){for(const y of e.levels)for(const l of y.checks)if(l.id===r)return l;return null}const je=ae(e=>({root:{height:"100%"},pageContent:{display:"flex",minHeight:`calc(100vh - ${e.spacing(15)}px)`,borderTop:`1px solid ${e.palette.divider}`,height:"100%"},mainContentArea:{flex:1,display:"flex",flexDirection:"column",minWidth:0},editButton:{marginLeft:"auto"},statusContainer:{borderBottom:`1px solid ${e.palette.divider}`,padding:e.spacing(3,0,2,3)},statusCards:{display:"flex",gap:e.spacing(2)},currentStatusSection:{width:"325px",minWidth:"325px",flex:0,display:"flex",flexDirection:"column"},historicalStatusSection:{flex:1,flexShrink:1,flexGrow:1,flexBasis:"auto",minWidth:"150px",display:"flex",flexDirection:"column"},statusTitle:{fontWeight:"bold",fontSize:"1.1rem",lineHeight:`${e.typography.h5.fontSize}px`,cursor:"default",marginBottom:e.spacing(2)},headerDescription:{fontSize:e.typography.body2.fontSize,margin:e.spacing(.5,0,0),"& p":{margin:0},"& a":{color:"inherit",textDecoration:"underline"}},entitiesContainer:{padding:e.spacing(2,3,3,3)},ownerLink:{"& span":{color:"inherit","&:hover":{textDecoration:"underline"}}}})),Oe=()=>{const e=je(),[r,y]=ue(),{trackId:l,checkId:o}=ge(),s=a(()=>r.getAll("states"),[r]),m=a(()=>r.getAll("owners"),[r]),p=a(()=>r.getAll("lifecycles"),[r]),h=a(()=>r.getAll("types"),[r]),f=a(()=>r.getAll("systems"),[r]),P=a(()=>Te(r.get("numberOfDays")),[r]),[k,E]=b(p),[C,N]=b(m),[S,I]=b(h),[x,R]=b(f),[w,F]=b(s);fe(()=>{N(m),E(p),I(h),R(f),F(s)},[m,p,h,f,s]);const Z=a(()=>{const t={owners:!v(C,m),lifecycles:!v(k,p),types:!v(S,h),systems:!v(x,f),states:!v(w,s)};return Object.values(t).some(Boolean)},[C,m,k,p,S,h,x,f,w,s]),q=X(()=>{const t=new URLSearchParams(r);t.delete("lifecycles"),t.delete("owners"),t.delete("types"),t.delete("systems"),t.delete("states"),k.length>0&&k.forEach(n=>t.append("lifecycles",n)),C.length>0&&C.forEach(n=>t.append("owners",n)),S.length>0&&S.forEach(n=>t.append("types",n)),x.length>0&&x.forEach(n=>t.append("systems",n)),w.length>0&&w.forEach(n=>t.append("states",n)),y(t)},[r,k,C,S,x,w,y]),J=X(()=>{E([]),N([]),I([]),R([]),F([]);const t=new URLSearchParams(r);t.delete("lifecycles"),t.delete("owners"),t.delete("types"),t.delete("systems"),t.delete("states"),y(t)},[r,y]),T=be({lifecycles:p,owners:m,types:h,systems:f}),{data:g,isLoading:j}=Ce(l),{data:c,isLoading:O}=ke(o),{loading:H,allowed:L}=Q({permission:me,resourceRef:o}),d=a(()=>c??g?.levels.flatMap(t=>t.checks).find(t=>t.id===o),[c,o,g?.levels]),{loading:W,allowed:z}=Q({permission:pe,resourceRef:o}),M=ye(),U=ne(we),_=le();let A;if(o)if(g){const t=D(g.filter),n=D(Pe(g,o)?.filter);A=he(t,n)}else d?.filter&&(A=D(d.filter));const{data:$}=Se({checkId:o,trackId:l,filter:T,states:s?.length?s:void 0},!!o),ee=a(()=>c?.ownerEntityRef?i(se,{color:"inherit",entityRef:c.ownerEntityRef,className:e.ownerLink}):null,[c?.ownerEntityRef,e.ownerLink]),te=a(()=>!W&&z&&c?.isEditable?i(ce,{className:e.editButton,variant:"contained",color:"primary",onClick:()=>{M(U({checkId:c.id}))},children:"Edit Check"}):null,[z,c?.id,c?.isEditable,e.editButton,U,W,M]),ie=a(()=>d?.description?i(Fe,{className:e.headerDescription,content:d.description}):null,[e.headerDescription,d?.description]);Re({title:d?.name??o??"Soundcheck",description:ie,customSubtitle:ee,sectionRight:te}),xe({routeName:"soundcheck-check-details",additionalAttributes:{checkId:o||"unknown",trackId:l||"unknown",checkName:d?.name||"unknown",filtersApplied:(m.length+p.length+h.length+f.length+s.length).toString(),ownersFilter:m.join(",")||"none",lifecyclesFilter:p.join(",")||"none",typesFilter:h.join(",")||"none",systemsFilter:f.join(",")||"none",statesFilter:s.join(",")||"none",numberOfDays:P.toString()}});const re=a(()=>!!d&&!H&&!L,[L,d,H]),[B,oe]=b(0);return u("div",{children:[i(Y,{entityName:"track",entityId:l,showNotFound:!!l&&!j&&!g}),i(Y,{entityName:"check",entityId:o,showCannotView:re}),(O||!!l&&j)&&i(Ie,{}),!O&&L&&i("div",{className:e.root,children:u("div",{className:e.pageContent,children:[i(Ee,{trackFilter:A,stagedTypes:S,stagedLifecycles:k,stagedOwners:C,stagedSystems:x,onTypesChange:I,onLifecyclesChange:E,onOwnersChange:N,onSystemsChange:R,onApplyFilters:q,onClearFilters:J,hasFilterChanges:Z,children:i(Ne,{states:s,stagedStates:w,onStagedStatesChange:F})}),u("div",{className:e.mainContentArea,children:[i("div",{className:e.statusContainer,children:u("div",{className:e.statusCards,children:[u("div",{className:e.currentStatusSection,children:[i(G,{className:e.statusTitle,children:"Current Status"}),i("div",{style:{width:"100%",height:30,display:"flex",alignItems:"flex-start",marginBottom:_.spacing(2)},children:i(ve,{status:$})}),i("div",{children:i(Be,{checkStatus:$})})]}),u("div",{className:e.historicalStatusSection,children:[i(G,{className:e.statusTitle,children:"Historical Status"}),i("div",{style:{height:"100%"},children:i(Ae,{checkId:o,trackId:l,filter:T,states:s,numberOfDays:P})})]})]})}),u("div",{className:e.entitiesContainer,children:[u(de,{value:B,onChange:(t,n)=>oe(n),indicatorColor:"primary",textColor:"primary","aria-label":"Entities and Exemptions Tabs",children:[i(K,{label:"Entities"}),i(K,{label:"Exemptions"})]}),i(V,{hidden:B!==0,children:i(Le,{checkId:o,trackId:g?.id,filter:T,states:s})}),i(V,{hidden:B!==1,children:i(De,{checkId:o})})]})]})]})})]})};export{Oe as CheckInsightsPage};
|
|
2
2
|
//# sourceMappingURL=CheckInsightsPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as a,jsxs as n}from"react/jsx-runtime";import{useTheme as
|
|
1
|
+
import{jsx as a,jsxs as n}from"react/jsx-runtime";import{useTheme as f,Typography as s}from"@material-ui/core";import{makeStyles as y,createStyles as u}from"@material-ui/core/styles";import{Skeleton as x}from"@material-ui/lab";import{memo as k,useMemo as S,Fragment as N}from"react";import{getCheckStatusColor as o}from"../../utils/colors.esm.js";import{compactNumberFormatter as c}from"../../utils/formatters.esm.js";const v=y(e=>u({container:{display:"grid",gridTemplateColumns:"3fr 2fr",gap:e.spacing(1),minWidth:0},item:{display:"flex",alignItems:"center",fontSize:"0.875rem",minWidth:0},legendDash:{width:e.spacing(2),height:e.spacing(.75),borderRadius:e.spacing(.375),marginRight:e.spacing(1)},category:{display:"flex",alignItems:"center",fontSize:"0.875rem",minWidth:0,flex:1},categoryText:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",fontSize:"0.875rem",minWidth:0,flex:1},value:{fontSize:"0.875rem",color:e.palette.text.primary},valueCell:{justifyContent:"flex-end",whiteSpace:"nowrap"},percentage:{color:e.palette.text.secondary,marginLeft:e.spacing(1)},skeleton:{backgroundColor:e.palette.action.hover}})),w=k(({checkStatus:e})=>{const r=f(),t=v(),p=S(()=>[{name:"Passed",key:"passed",color:o(r,"passed")},{name:"Failed",key:"failed",color:o(r,"failed")},{name:"Warning",key:"warning",color:o(r,"warning")},{name:"Exempt",key:"exempt",color:o(r,"exempt")},{name:"Error",key:"error",color:o(r,"error")},{name:"Not Reported",key:"notReported",color:o(r,"not-reported")}],[r]),i=e?e.numberOfEntities-e.notApplicable-e.exempt:-1;return a("div",{className:t.container,children:p.map(({name:d,key:l,color:g})=>{const m=Number(e?.[l]??0),h=i>0?Math.round(m/i*100):0;return n(N,{children:[a("div",{className:t.item,children:n("div",{className:t.category,children:[a("span",{className:t.legendDash,style:{backgroundColor:g}}),a(s,{className:t.categoryText,children:d})]})}),a("div",{className:`${t.item} ${t.valueCell}`,children:e?n(s,{className:t.value,children:[c(m)," of"," ",c(i),n("span",{className:t.percentage,children:["(",h,"%)"]})]}):a(x,{width:120,height:20,className:t.skeleton})})]},l)})})});export{w as CheckStatusTable};
|
|
2
2
|
//# sourceMappingURL=CheckStatusTable.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as c,jsx as
|
|
1
|
+
import{jsxs as c,jsx as t}from"react/jsx-runtime";import{Content as l,ItemCardGrid as p}from"@backstage/core-components";import{useRouteRef as d}from"@backstage/core-plugin-api";import{Typography as n,Box as a,Card as h,CardContent as g}from"@material-ui/core";import{makeStyles as u}from"@material-ui/core/styles";import f from"lodash";import{useMemo as k}from"react";import{Link as C}from"react-router-dom";import{useCheckTemplates as y}from"../../hooks/checks/useCheckTemplates.esm.js";import{useLCPReporting as b}from"../../hooks/useLCPReporting.esm.js";import{checkCreateRouteRef as x}from"../../routes.esm.js";import{LoadingIndicator as L}from"../LoadingIndicator/LoadingIndicator.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as N}from"../SoundcheckHeader/useHeader.esm.js";import{TemplateCategory as v}from"./TemplateCategory.esm.js";const R=u(e=>({content:{display:"flex",flexDirection:"column",gap:e.spacing(2)},grid:{marginLeft:e.spacing(2)},cardContent:{"&:hover":{backgroundColor:e.palette.action.hover}},docsLink:{color:e.palette.text.primary},link:{textDecoration:"none"}})),j=()=>{const e=R(),m=d(x),{data:o,isLoading:s}=y(),r=k(()=>f.groupBy(o??[],"category"),[o]);return N({title:"What would you like to check?",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),b({routeName:"soundcheck-check-templates",additionalAttributes:{templatesCount:(o?.length||0).toString(),categoriesCount:Object.keys(r).length.toString()}}),c("div",{children:[s&&t(L,{}),o&&o.length===0&&t(n,{children:"No check templates."}),o&&o.length&&c(l,{className:e.content,children:[t(a,{className:e.grid,children:t(p,{children:t(C,{to:m(),className:e.link,children:t(h,{children:c(g,{className:e.cardContent,children:[t(a,{mb:1,children:t(n,{variant:"subtitle1",style:{fontWeight:"bold"},component:"div",children:"Custom Check"})}),t(n,{variant:"body1",children:"Create a custom check using the facts collected about your entities."})]})})})})}),Object.keys(r).sort().map(i=>t(v,{name:i,templates:r[i]},i))]})]})};export{j as CheckTemplatesPage};
|
|
2
2
|
//# sourceMappingURL=CheckTemplatesPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as
|
|
1
|
+
import{jsx as t,jsxs as u}from"react/jsx-runtime";import{useApi as w,featureFlagsApiRef as Y,useRouteRef as Z}from"@backstage/core-plugin-api";import{usePermission as _}from"@backstage/plugin-permission-react";import{makeStyles as ee,Button as A,Grid as o}from"@material-ui/core";import{soundcheckCheckCreatePermission as re}from"@spotify/backstage-plugin-soundcheck-common";import{useState as i,useEffect as N}from"react";import{useNavigate as te}from"react-router-dom";import ae from"react-use/lib/useDebounce";import{soundcheckApiRef as oe}from"../../../api.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useGetChecks as ie}from"../../../hooks/checks/useGetChecks.esm.js";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useGetCheckOwners as se}from"../../../hooks/checks/useGetCheckOwners.esm.js";import{useImportChecks as ce}from"../../../hooks/checks/useImportChecks.esm.js";import ne from"../../../images/no-results.svg";import{checkTemplatesRouteRef as me}from"../../../routes.esm.js";import{exportChecks as le}from"../../../utils/export.esm.js";import{FilterDefault as I}from"../../../utils/filters.esm.js";import{EmptyState as S}from"../../EmptyState/EmptyState.esm.js";import{ImportExportPanel as pe}from"../../ImportExportPanel/ImportExportPanel.esm.js";import{Pagination as de}from"../../Pagination/Pagination.esm.js";import{SearchFilters as he}from"../../SearchFilters/SearchFilters.esm.js";import{ChecksOverviewSkeleton as ge}from"../skeletons/ChecksOverviewSkeleton.esm.js";import{CheckSummaryCard as ue}from"./CheckSummaryCard.esm.js";var B=(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))(B||{}),R=(e=>(e.title="No checks found",e.description="No checks matched your search. Consider changing search term and filters.",e))(R||{});const fe=ee(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)}})),ke=({checksPerPage:e,currentCursor:E})=>{const s=fe(),[f,k]=i(E),[l,F]=i(""),[p,O]=i(I.Alpha),[d,T]=i(I.Owner),[C,G]=i(""),{data:L,isLoading:j}=se();ae(()=>{G(l)},500,[l]);const{loading:P,allowed:D}=_({permission:re}),{data:a,isLoading:c}=ie({ids:void 0,first:e,after:f,orderAlphabetical:p,searchByOwner:d,searchByName:C}),[h,H]=i(a),n=h?.edges?.map(r=>r.node),[b,v]=i([]);N(()=>{k(void 0),v([])},[C,p,d]);const x=w(Y),W=!x.getRegisteredFlags().find(r=>r.name==="soundcheck-enable-check-creation")||x.isActive("soundcheck-enable-check-creation"),g=!D||!W,$=r=>{O(r.target.value)},q=r=>{T(r.target.value)};N(()=>{a&&H(()=>({totalCount:a.totalCount,edges:a.edges,pageInfo:{startCursor:a.pageInfo.startCursor,endCursor:a.pageInfo.endCursor,hasNextPage:a?.pageInfo.hasNextPage??!1,hasPreviousPage:a?.pageInfo.hasPreviousPage??!1}}))},[a]);const z=te(),J=Z(me),y=()=>z(J()),M=w(oe),{mutateAsync:Q}=ce(),V=async r=>Q(r),X=async()=>{const r=await M.getChecks({orderAlphabetical:"asc"});return le(r.edges.map(U=>U.node))};if(!c&&!n)return t(S,{title:"Create a check",description:"A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",imgSrc:ne,action:!P&&t(A,{disabled:g,variant:"contained",color:"primary",onClick:y,children:"Get started"})});let m;c?m=t(ge,{}):n?.length?m=n?.map(r=>t(o,{xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":`check card ${r.id}`,children:t(ue,{check:r})},r.id)):m=t(o,{xs:12,item:!0,role:"listitem","aria-label":"result",children:t(S,{title:"No checks found",description:"No checks matched your search. Consider changing search term and filters."})});const K=h?.pageInfo.hasNextPage||b?.length>0;return u(o,{container:!0,direction:"row",className:s.container,children:[u(o,{container:!0,className:s.header,children:[t(he,{searchPlaceholder:"Search Available Checks",isLoading:c||j,searchTerm:l,setSearchTerm:F,filterAlpha:p,handleAlphabeticalFilterChange:$,filterOwner:d,handleOwnerFilterChange:q,owners:L}),u(o,{item:!0,xs:4,className:s.headerButtons,children:[t(pe,{resourceType:"check",disableImport:g,disableExport:c||!n?.length,onImport:V,onExport:X}),!P&&t(A,{disabled:g,variant:"contained",color:"primary",onClick:y,className:s.createButton,children:"Create Check"})]})]}),t(o,{container:!0,spacing:4,role:"list","aria-label":"checks",children:m}),K&&t(o,{item:!0,xs:12,children:t(de,{response:h,listingsPerPage:e,cursor:f,setCursor:k,prevCursors:b,setPrevCursors:v,labelPerPageDropdown:"Checks Per Page:",urlRoute:"checks?checksPerPage="})})]})};export{B as CheckEmptyState,ke as CheckListPage,R as CheckNoResults};
|
|
2
2
|
//# sourceMappingURL=CheckListPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import{useSearchParams as c}from"react-router-dom";import{useLCPReporting as s}from"../../hooks/useLCPReporting.esm.js";import{RESULTS_PER_PAGE as i}from"../../utils/filters.esm.js";import{CheckListPage as a}from"./CheckListPage/CheckListPage.esm.js";const m=()=>{const[o]=c(),e=o.get("checksPerPage"),r=e?parseInt(e,10):i;return s({routeName:"soundcheck-checks",additionalAttributes:{checksPerPage:r.toString()}}),t("div",{children:t(a,{checksPerPage:r})})};export{m as ChecksPage};
|
|
2
2
|
//# sourceMappingURL=ChecksPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as o,jsx as e}from"react/jsx-runtime";import{makeStyles as
|
|
1
|
+
import{jsxs as o,jsx as e}from"react/jsx-runtime";import{makeStyles as f,Box as i,Typography as h,Tooltip as x,Icon as y,IconButton as b}from"@material-ui/core";import I from"@material-ui/icons/ArrowDropDown";import u from"@material-ui/icons/ArrowDropUp";import g from"@material-ui/icons/HelpOutline";import v from"../Expand/Expand.esm.js";const C=f(({palette:l})=>({header:{display:"flex",alignItems:"left",flexDirection:"row",cursor:"pointer",justifyContent:"space-between"},label:{display:"flex",alignItems:"center"},tooltipIcon:{display:"flex",alignItems:"center",justifyContent:"center",color:l.text.primary}})),D=({label:l,tooltip:r,isExpanded:a,setIsExpanded:p,children:d,onExpandDone:m=()=>{}})=>{const n=C(),s=()=>{p(t=>!t)},c=t=>{(t.key==="Enter"||t.key===" ")&&s()};return o(i,{children:[o("div",{className:n.header,onClick:s,onKeyDown:c,role:"button",tabIndex:0,children:[o("div",{className:n.label,children:[e(i,{children:e(h,{variant:"subtitle2",children:l})}),r&&e(x,{title:r,className:n.tooltipIcon,children:e(y,{children:e(g,{style:{fontSize:16,verticalAlign:"text-top"}})})})]}),e(i,{children:e(b,{size:"small",onKeyDown:c,children:a?e(u,{fontSize:"small"}):e(I,{fontSize:"small"})})})]}),e(v,{visible:a,onExpandDone:m,children:d})]})};export{D as CollapsablePanel};
|
|
2
2
|
//# sourceMappingURL=CollapsablePanel.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as r,jsx as e}from"react/jsx-runtime";import{Content as M,LinkButton as S}from"@backstage/core-components";import{useRouteRef as x}from"@backstage/core-plugin-api";import{usePermission as T}from"@backstage/plugin-permission-react";import{makeStyles as G,Box as i,Button as I,Typography as l,Card as L,CardHeader as j,CardContent as H,Tooltip as $,CardActions as O}from"@material-ui/core";import{Alert as V}from"@material-ui/lab";import{soundcheckCollectorReadPermission as W,soundcheckCollectorUpdatePermission as q,parseFactRef as B,asArray as z}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as A,uniq as Y}from"lodash";import{useCallback as _,useMemo as D}from"react";import{useParams as J,useNavigate as K}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as Q}from"../../hooks/useConfirmationModal.esm.js";import{useGetCollectors as X}from"../../hooks/collectors/useGetCollectors.esm.js";import{useDeleteCollectorConfig as Z}from"../../hooks/collectors/useDeleteCollectorConfig.esm.js";import{integrationEditRouteRef as ee,integrationsPageRouteRef as te,checkDetailsRouteRef as oe}from"../../routes.esm.js";import{mapRuleToExpression as ie}from"../CheckForm/utils/checkFormUtils.esm.js";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import{FactExplorerProvider as re}from"../FactExplorer/FactExplorerContext.esm.js";import{LoadingIndicator as ne}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as ae}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as ce}from"../SoundcheckHeader/useHeader.esm.js";import{SoundcheckMarkdownContent as se}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import"react-markdown";import"rehype-raw";import"remark-gfm";import{CollectorFactTable as de}from"./CollectorFactTable.esm.js";const le=G(d=>({card:{width:360},cardDescription:{"& p":{marginTop:d.spacing(.5),marginBottom:d.spacing(.5)}},cardContent:{flexGrow:1}})),me=({id:d,title:y,description:o,rules:m,integrationId:u,hasSchedule:v})=>{const p=le(),k=x(oe),f=D(()=>{const a=[],h=c=>{for(const s of c.conditions??[])a.push(s.factRef),typeof s.value=="object"&&Object.hasOwn(s.value,"factRef")&&a.push(s.value.factRef);for(const s of c.expressions??[])h(s)};return m&&h(m),Y(a).filter(c=>{try{return B(c).source===u}catch{return!1}})},[u,m]);return r(L,{className:p.card,children:[e(j,{title:y}),r(H,{className:p.cardContent,children:[o&&e(i,{overflow:"auto",maxHeight:200,children:e(se,{className:p.cardDescription,content:o})}),!A(f)&&r(i,{marginTop:1,overflow:"auto",maxHeight:120,children:[e(l,{variant:"subtitle2",children:"Used Fact Refs"}),f.map(a=>e(i,{children:a},"factRef"))]}),v&&e(i,{marginTop:1,children:e($,{title:"Configure this integration's collection schedule instead.",children:e(V,{severity:"warning",children:"Check Schedule Detected"})})})]}),e(O,{children:e(S,{variant:"outlined",to:k({checkId:d}),target:"_blank",children:"View"})})]})},pe=({id:d})=>{const y=J(),o=d??y.integrationId,{data:m,isLoading:u}=X([o??""]),{loading:v,allowed:p}=T({permission:W}),{loading:k,allowed:f}=T({permission:q}),{showModal:a}=Q(),{mutate:h,isPending:c}=Z(o??""),s=_(async()=>{!await a({title:"Are you sure you want to delete stored UI config?",message:"This action cannot be undone and will remove any stored configs for this integration from the database."})||c||h()},[h,c,a]),t=m?.[0],R=u||k||v,b=f&&t?.isEditable,w=K(),N=x(ee),P=x(te),U=t?.hasUIConfig,E=D(()=>r(i,{display:"flex",gridGap:12,children:[e(I,{variant:"contained",color:"primary",onClick:()=>{w(P())},children:"All Integrations"}),o&&b&&e(I,{variant:"contained",color:"primary",onClick:()=>{w(N({integrationId:o}))},children:"Edit Integration"})]}),[P,N,o,b,w]);return ce({title:t?.name??o,description:t?t.description??"":"",docLink:t?`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${t.id}`:"",sectionRight:E}),e(re,{hidePath:!0,children:r(M,{children:[R&&e(ne,{}),e(ae,{entityName:"Integration",entityId:o,showNotFound:!R&&!t,showCannotView:!R&&!p}),t&&r(i,{children:[r(i,{marginBottom:2,children:[e(l,{variant:"h6",children:"Facts"}),e(i,{marginBottom:2,children:e(de,{facts:t.factNames.map(n=>{const C=(g=>{try{return B(g).name}catch{return g}})(n),F=z(t.config?.collects).find(g=>g?.type===C||g?.factName===C);return{factRef:`${o}:default/${C}`,factName:C,config:F,uiConfig:!!t.hasUIConfig}})})})]}),r(i,{marginBottom:2,children:[e(l,{variant:"h6",children:"Dependant Checks"}),A(t.dependentChecks)?e(l,{variant:"body2",children:"No dependant checks"}):e(i,{display:"flex",gridGap:12,flexWrap:"wrap",children:t.dependentChecks.map(n=>e(me,{id:n.id,title:n.name??n.id,description:n.description??void 0,rules:ie(n.rule),integrationId:o,hasSchedule:n.schedule},n.id))})]}),f&&U&&r(i,{marginBottom:2,children:[e(l,{variant:"h6",children:"Admin Actions"}),t.hasUIConfig&&r(i,{marginTop:1,display:"flex",alignItems:"center",gridGap:16,children:[e(I,{disabled:c,size:"small",variant:"contained",color:"secondary",onClick:s,children:"Remove Config"}),e(l,{variant:"body2",color:"textSecondary",children:"Revert to using YAML to config this integration by deleting the stored UI config from the database."})]})]})]})]})})};export{pe as CollectorDetailsPage};
|
|
2
|
+
//# sourceMappingURL=CollectorDetailsPage.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as e,jsxs as c}from"react/jsx-runtime";import{makeStyles as s,TableContainer as h,Paper as m,Table as u,TableHead as g,TableRow as i,TableCell as r,TableBody as p,Box as t}from"@material-ui/core";import{isEmpty as y}from"lodash";import{getCronDescription as b}from"../../utils/cron.esm.js";import{FactExplorerDialogButton as C}from"../FactExplorer/FactExplorerDialog.esm.js";import"../FactExplorer/FactExplorerContext.esm.js";const T=s(o=>({noConfig:{color:o.palette.action.disabled}})),q=({facts:o})=>{const l=T();return e(h,{component:m,children:c(u,{size:"small",children:[e(g,{children:c(i,{children:[e(r,{children:"Fact Name"}),e(r,{align:"center",width:120,children:"Source"}),e(r,{children:"Schedule"}),e(r,{align:"center",width:150,children:"Test"})]})}),c(p,{children:[y(o)&&e(i,{children:e(r,{colSpan:10,children:"No Available Facts Found for Integration"})}),o.map(({factName:d,config:n,uiConfig:f,factRef:a})=>c(i,{children:[e(r,{children:e("strong",{children:d})}),c(r,{className:n?void 0:l.noConfig,align:"center",children:[!n&&"No Config",n&&(f?"UI":"YAML")]}),c(r,{children:[n?.frequency&&(n.frequency.cron?c(t,{children:["cron(",n.frequency.cron,")"," ",b(n.frequency.cron)]}):c(t,{children:["Every ",Object.values(n.frequency)[0]," ",Object.keys(n.frequency)[0]]})),!n?.frequency&&e(t,{className:l.noConfig,children:"No Schedule Configured"})]}),e(r,{align:"center",children:e(C,{variant:"text",factRef:a,size:"small",text:"Test"})})]},a))]})]})})};export{q as CollectorFactTable};
|
|
2
|
+
//# sourceMappingURL=CollectorFactTable.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as c,jsx as
|
|
1
|
+
import{jsxs as c,jsx as i}from"react/jsx-runtime";import{Content as p}from"@backstage/core-components";import{usePermission as g}from"@backstage/plugin-permission-react";import{soundcheckCollectorUpdatePermission as f}from"@spotify/backstage-plugin-soundcheck-common";import{useParams as u}from"react-router-dom";import{useGetCollectors as C}from"../../hooks/collectors/useGetCollectors.esm.js";import{useLCPReporting as I}from"../../hooks/useLCPReporting.esm.js";import{LoadingIndicator as P}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as h}from"../PageWarningMessage/PageWarningMessage.esm.js";import{Configurator as w}from"./Configurators/Configurator.esm.js";const x=({collectorId:n})=>{const s=u(),t=n??s.integrationId;I({routeName:"soundcheck-integration-details",additionalAttributes:{integrationId:t??""}});const{data:a,isLoading:m}=C([t??""]),{loading:d,allowed:l}=g({permission:f}),o=a?.[0],r=m||d,e=l&&o?.isEditable;return c(p,{children:[r&&i(P,{}),i(h,{entityName:"Integration",entityId:t,showNotFound:!r&&!o,showCannotEdit:!r&&!e}),o&&e&&i(w,{selectedCollector:o})]})};export{x as CollectorPage};
|
|
2
2
|
//# sourceMappingURL=CollectorPage.esm.js.map
|
package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as p,Fragment as S,jsx as e}from"react/jsx-runtime";import{zodResolver as k}from"@hookform/resolvers/zod";import{makeStyles as B,Paper as A,Divider as n}from"@material-ui/core";import{useCallback as F}from"react";import{useForm as N,FormProvider as R}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as I}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as W}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as q}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as z}from"../../../../routes.esm.js";import{FooterButtons as w}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as x}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import{defaultCollectorOption as l}from"../Common/CollectorOption.esm.js";import{collectorHeaderContent as j,confirmationModalContent as M}from"../Common/utils.esm.js";import{NumberOfDaysComponent as b}from"./NumberOfDaysComponent.esm.js";import{NumberOfWorkItemsComponent as T}from"./NumberOfWorkItemsComponent.esm.js";import{mapConfigToAzureDevOpsCollectorConfig as H,defaultAzureDevOpsConfig as U,numberOfDaysCollectorConfig as d,numberOfWorkItemsCollectorConfig as V,mapAzureDevOpsCollectorConfigToConfig as L}from"./utils.esm.js";import{azureDevOpsCollectorFormSchema as E}from"./validation.esm.js";const G=B(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),J=({disabled:t,selectedCollector:i})=>{const C=F(async(o,...s)=>{const a={enabled:!1,collectors:[]},P={repositoryDetails:o.repositoryDetails.enabled?o.repositoryDetails:l(),branchPolicies:o.branchPolicies.enabled?o.branchPolicies:l(),branchStatus:o.branchStatus.enabled?o.branchStatus:l(),numberOfBranches:o.numberOfBranches.enabled?o.numberOfBranches:a,numberOfActivePullRequests:o.numberOfActivePullRequests.enabled?o.numberOfActivePullRequests:a,numberOfWorkItems:o.numberOfWorkItems.enabled?o.numberOfWorkItems:a};return k(E)(P,...s)},[]),m=N({defaultValues:i?H(i.config):U(),mode:"onChange",resolver:C}),{formState:{isValid:h},handleSubmit:c}=m,f=G(),g=!h,{mutateAsync:O}=q(),[y,v]=W(z),{showModal:D}=I(),u=async o=>{if(!await D(M(i)))return;const s=L(o);await O({collectorId:i.id,config:s})&&v()};return x(j(i)),p(S,{children:[e(A,{className:f.section,children:e(R,{...m,children:p("form",{onSubmit:c(u),children:[e(r,{name:"repositoryDetails",label:"Repository Details",description:"Collects details about an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"branchPolicies",label:"Branch Policies",description:"Collects branch policies information from an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"branchStatus",label:"Branch Status",description:"Collects the latest branch status information from an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"numberOfBranches",label:"Number Of Branches",description:"Collects the number of branches from an entity's repository.",disabled:t,FactDetailsComponent:b,multipleCollectors:{enable:!0,defaultConfig:d()}}),e(n,{}),e(r,{name:"numberOfActivePullRequests",label:"Number Of Active Pull Requests",description:"Collects the number of active pull requests from an entity's repository.",disabled:t,FactDetailsComponent:b,multipleCollectors:{enable:!0,defaultConfig:d()}}),e(n,{}),e(r,{name:"numberOfWorkItems",label:"Number Of Work Items",description:"Collects the number of work items from an entity's project.",disabled:t,FactDetailsComponent:T,multipleCollectors:{enable:!0,defaultConfig:V()}})]})})}),e("div",{className:f.section,children:e(w,{onCancel:y,saveButtonText:"Save",isLoading:!1,onSave:c(u),disableSave:g})})]})};export{J as AzureDevOpsConfigurator};
|
|
1
|
+
import{jsxs as p,Fragment as S,jsx as e}from"react/jsx-runtime";import{zodResolver as k}from"@hookform/resolvers/zod";import{makeStyles as B,Paper as A,Divider as n}from"@material-ui/core";import{useCallback as F}from"react";import{useForm as N,FormProvider as R}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as I}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as W}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as q}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as z}from"../../../../routes.esm.js";import{FooterButtons as w}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as x}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{defaultCollectorOption as l}from"../Common/CollectorOption.esm.js";import{collectorHeaderContent as j,confirmationModalContent as M}from"../Common/utils.esm.js";import{NumberOfDaysComponent as b}from"./NumberOfDaysComponent.esm.js";import{NumberOfWorkItemsComponent as T}from"./NumberOfWorkItemsComponent.esm.js";import{mapConfigToAzureDevOpsCollectorConfig as H,defaultAzureDevOpsConfig as U,numberOfDaysCollectorConfig as d,numberOfWorkItemsCollectorConfig as V,mapAzureDevOpsCollectorConfigToConfig as L}from"./utils.esm.js";import{azureDevOpsCollectorFormSchema as E}from"./validation.esm.js";const G=B(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),J=({disabled:t,selectedCollector:i})=>{const C=F(async(o,...s)=>{const a={enabled:!1,collectors:[]},P={repositoryDetails:o.repositoryDetails.enabled?o.repositoryDetails:l(),branchPolicies:o.branchPolicies.enabled?o.branchPolicies:l(),branchStatus:o.branchStatus.enabled?o.branchStatus:l(),numberOfBranches:o.numberOfBranches.enabled?o.numberOfBranches:a,numberOfActivePullRequests:o.numberOfActivePullRequests.enabled?o.numberOfActivePullRequests:a,numberOfWorkItems:o.numberOfWorkItems.enabled?o.numberOfWorkItems:a};return k(E)(P,...s)},[]),m=N({defaultValues:i?H(i.config):U(),mode:"onChange",resolver:C}),{formState:{isValid:h},handleSubmit:c}=m,f=G(),g=!h,{mutateAsync:O}=q(),[y,v]=W(z),{showModal:D}=I(),u=async o=>{if(!await D(M(i)))return;const s=L(o);await O({collectorId:i.id,config:s})&&v()};return x(j(i)),p(S,{children:[e(A,{className:f.section,children:e(R,{...m,children:p("form",{onSubmit:c(u),children:[e(r,{name:"repositoryDetails",label:"Repository Details",description:"Collects details about an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"branchPolicies",label:"Branch Policies",description:"Collects branch policies information from an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"branchStatus",label:"Branch Status",description:"Collects the latest branch status information from an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"numberOfBranches",label:"Number Of Branches",description:"Collects the number of branches from an entity's repository.",disabled:t,FactDetailsComponent:b,multipleCollectors:{enable:!0,defaultConfig:d()}}),e(n,{}),e(r,{name:"numberOfActivePullRequests",label:"Number Of Active Pull Requests",description:"Collects the number of active pull requests from an entity's repository.",disabled:t,FactDetailsComponent:b,multipleCollectors:{enable:!0,defaultConfig:d()}}),e(n,{}),e(r,{name:"numberOfWorkItems",label:"Number Of Work Items",description:"Collects the number of work items from an entity's project.",disabled:t,FactDetailsComponent:T,multipleCollectors:{enable:!0,defaultConfig:V()}})]})})}),e("div",{className:f.section,children:e(w,{onCancel:y,saveButtonText:"Save",isLoading:!1,onSave:c(u),disableSave:g})})]})};export{J as AzureDevOpsConfigurator};
|
|
2
2
|
//# sourceMappingURL=AzureDevOpsConfigurator.esm.js.map
|
package/dist/components/CollectorPage/Configurators/AzureDevOps/NumberOfWorkItemsComponent.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as a,jsx as e,Fragment as y}from"react/jsx-runtime";import{makeStyles as I,Box as T,Grid as n,Typography as d,TextField as h,FormHelperText as
|
|
1
|
+
import{jsxs as a,jsx as e,Fragment as y}from"react/jsx-runtime";import{makeStyles as I,Box as T,Grid as n,Typography as d,TextField as h,FormHelperText as N,IconButton as x}from"@material-ui/core";import v from"@material-ui/icons/Add";import q from"@material-ui/icons/Remove";import C from"classnames";import{highlight as F,languages as L}from"prismjs";import"prismjs/components/prism-sql";import{useFormContext as S,useFieldArray as k,Controller as c}from"react-hook-form";import w from"react-simple-code-editor";import{FormFieldLabel as $}from"../../../FormFieldLabel/FormFieldLabel.esm.js";import*as E from"../Common/css/prism-dark-sql.css.esm.js";import{numberOfWorkItemsDataConfig as H}from"./utils.esm.js";const W=I(r=>({...E,root:{paddingTop:r.spacing(1)},factNameInput:{marginTop:0,width:"450px"},labelInput:{marginTop:0,width:"255px"},labelInputArea:{height:"40px"},queryInput:{marginTop:0,width:"420px",minHeight:"40px",maxHeight:"300px",overflowY:"scroll",outline:`1px solid ${r.palette.action.disabled}`,borderRadius:"4px",display:"grid","&:hover":{outlineColor:r.palette.textContrast}},queryInputError:{outlineColor:r.palette.error.main,"&:hover":{outlineColor:r.palette.error.main}},queryTextarea:{outline:"none"},helperText:{marginLeft:0},caption:{margin:r.spacing(2,0)}})),z=({name:r,disabled:l})=>{const t=W(),{control:m}=S(),{fields:u,insert:g,remove:f}=k({control:m,name:`${r}.data`});return a(T,{className:t.root,children:[e(c,{name:`${r}.factName`,control:m,render:({field:p,fieldState:{error:i}})=>a(n,{item:!0,children:[e(d,{variant:"subtitle2",children:"Fact Name"}),e(h,{...p,type:"text",variant:"outlined",margin:"dense",placeholder:"Fact Name",className:t.factNameInput,disabled:l,error:!!i,helperText:i?.message??"Fact name must be unique",FormHelperTextProps:{className:t.helperText}})]})}),a("div",{className:t.caption,children:[e(d,{variant:"subtitle1",children:"Queries"}),e(d,{variant:"caption",children:"List the WIQL syntax queries to filter work items by"})]}),e(n,{container:!0,spacing:0,direction:"column",children:u.map((p,i)=>a(n,{item:!0,container:!0,spacing:2,children:[a(n,{item:!0,children:[e(d,{variant:"subtitle2",children:"Label"}),e(c,{name:`${r}.data.${i}.name`,control:m,render:({field:s,fieldState:{error:o}})=>e(h,{...s,type:"text",variant:"outlined",margin:"dense",placeholder:"Label",className:t.labelInput,disabled:l,error:!!o,helperText:o?.message??" ",InputProps:{className:t.labelInputArea},FormHelperTextProps:{className:t.helperText}})})]}),a(n,{item:!0,children:[e($,{title:"WIQL Query",docLink:"https://learn.microsoft.com/en-us/azure/devops/boards/queries/wiql-syntax?view=azure-devops"}),e(c,{name:`${r}.data.${i}.query`,control:m,render:({field:s,fieldState:{error:o}})=>a(y,{children:[e("div",{className:C(t.queryInput,o?t.queryInputError:void 0),children:e(w,{...s,highlight:b=>F(b,L.sql,"sql"),onValueChange:s.onChange,padding:10,disabled:l,placeholder:"Example: SELECT [System.Id] FROM WorkItem",textareaClassName:t.queryTextarea})}),e(N,{className:t.helperText,error:!!o,children:o?.message??" "})]})})]}),a(n,{item:!0,alignContent:"center",children:[e(x,{onClick:()=>f(i),disabled:l||u.length===1,children:e(q,{fontSize:"small"})}),e(x,{onClick:()=>g(i+1,H()),disabled:l,children:e(v,{fontSize:"small"})})]})]},p.id))})]})};export{z as NumberOfWorkItemsComponent};
|
|
2
2
|
//# sourceMappingURL=NumberOfWorkItemsComponent.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as h,Fragment as b,jsx as o}from"react/jsx-runtime";import{zodResolver as
|
|
1
|
+
import{jsxs as h,Fragment as b,jsx as o}from"react/jsx-runtime";import{zodResolver as B}from"@hookform/resolvers/zod";import{makeStyles as v,Paper as F}from"@material-ui/core";import{useCallback as Q}from"react";import{useForm as S,FormProvider as q}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as N}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as w}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as x}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as k}from"../../../../routes.esm.js";import{FooterButtons as I}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as M}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as P}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as R}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as T,confirmationModalContent as U}from"../Common/utils.esm.js";import{QueryFactDetailsComponent as j}from"./QueryFactDetailsComponent.esm.js";import{mapConfigToBigQueryCollectorConfig as A,defaultBigQueryConfig as D,queryCollectorConfig as H,mapBigQueryCollectorConfigToConfig as V}from"./utils.esm.js";import{bigQueryCollectorFormSchema as z}from"./validation.esm.js";const L=v(e=>({spacer:{height:e.spacing(8),width:"100%"},section:{marginBottom:e.spacing(2)}})),O=({disabled:e,selectedCollector:r})=>{const c=Q(async(t,...i)=>{const C={enabled:!1,collectors:[]},y={query:t.query.enabled?t.query:C};return B(z)(y,...i)},[]),a=S({defaultValues:r?A(r.config):D(),mode:"onChange",resolver:c}),{formState:{isValid:s},handleSubmit:m}=a,n=L(),f=!s,{mutateAsync:p}=x(),[d,u]=w(k),{showModal:g}=N(),l=async t=>{if(!await g(U(r)))return;const i=V(t);await p({collectorId:r.id,config:i})&&u()};return M(T(r)),h(b,{children:[o(R,{collectorName:"Bigquery",collectorId:r.id,hasNonUIOptions:!0}),o(F,{className:n.section,children:o(q,{...a,children:o("form",{onSubmit:m(l),children:o(P,{name:"query",label:"Query",description:"Collects data from BigQuery.",disabled:e,FactDetailsComponent:j,multipleCollectors:{enable:!0,defaultConfig:H()}})})})}),o("div",{className:n.section,children:o(I,{onCancel:d,saveButtonText:"Save",isLoading:!1,onSave:m(l),disableSave:f})})]})};export{O as BigQueryConfigurator};
|
|
2
2
|
//# sourceMappingURL=BigQueryConfigurator.esm.js.map
|
package/dist/components/CollectorPage/Configurators/BigQuery/QueryFactDetailsComponent.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as a,jsx as e,Fragment as T}from"react/jsx-runtime";import{makeStyles as b,Box as
|
|
1
|
+
import{jsxs as a,jsx as e,Fragment as T}from"react/jsx-runtime";import{makeStyles as b,Box as N,Grid as n,Typography as m,TextField as h,FormHelperText as C,Tooltip as v,IconButton as g}from"@material-ui/core";import S from"@material-ui/icons/Add";import q from"@material-ui/icons/Remove";import F from"classnames";import{highlight as I,languages as E}from"prismjs";import"prismjs/components/prism-sql";import{useFormContext as $,useFieldArray as D,Controller as p}from"react-hook-form";import L from"react-simple-code-editor";import{FormControlledSelect as x}from"../../../FormControlledSelect/FormControlledSelect.esm.js";import{FormFieldLabel as _}from"../../../FormFieldLabel/FormFieldLabel.esm.js";import*as k from"../Common/css/prism-dark-sql.css.esm.js";import{DATA_TYPES as H,FOREIGN_KEY_OPTIONS as P,DEFAULT_SCHEMA_ITEM as j}from"./utils.esm.js";const w=b(t=>({...k,root:{paddingTop:t.spacing(1)},textInput:{marginTop:0,width:"580px"},queryCaption:{width:"580px",display:"block"},queryInput:{marginTop:0,width:"580px",minHeight:"100px",maxHeight:"300px",overflowY:"scroll",outline:`1px solid ${t.palette.action.disabled}`,borderRadius:"6px",display:"grid","&:hover":{outlineColor:t.palette.textContrast}},queryInputError:{outlineColor:t.palette.error.main,"&:hover":{outlineColor:t.palette.error.main}},queryTextarea:{outline:"none"},caption:{margin:t.spacing(2,0)},nameInput:{marginTop:0,display:"inline"},selectInput:{marginTop:0,width:"150px"},helperText:{marginLeft:0}})),O=({name:t,disabled:o})=>{const i=w(),{control:l}=$(),{fields:u,insert:y,remove:f}=D({control:l,name:`${t}.schema`});return a(N,{children:[a(n,{container:!0,spacing:1,direction:"column",className:i.root,children:[a(n,{item:!0,children:[e(m,{variant:"subtitle2",children:"Fact Name"}),e(p,{name:`${t}.factName`,control:l,render:({field:d,fieldState:{error:r}})=>e(h,{...d,type:"text",variant:"outlined",margin:"dense",placeholder:"Fact Name",className:i.textInput,disabled:o,error:!!r,helperText:r?.message??"Fact name must be unique",FormHelperTextProps:{className:i.helperText}})})]}),a(n,{item:!0,children:[e(m,{variant:"subtitle2",children:"GCP Project ID (Optional)"}),e(p,{name:`${t}.projectId`,control:l,render:({field:d,fieldState:{error:r}})=>e(h,{...d,type:"text",variant:"outlined",margin:"dense",placeholder:"Project ID",className:i.textInput,disabled:o,error:!!r,helperText:r?.message??"Google Cloud project ID",FormHelperTextProps:{className:i.helperText}})})]}),a(n,{item:!0,children:[e(_,{title:"SQL Query (GoogleSQL)",docLink:"https://cloud.google.com/bigquery/docs/introduction-sql"}),e(m,{variant:"caption",className:i.queryCaption,children:"The query can be parameterized, supported named parameters are @entity_refs and @entity_names (the values will be resolved automatically)"}),e(p,{name:`${t}.query`,control:l,render:({field:d,fieldState:{error:r}})=>a(T,{children:[e("div",{className:F(i.queryInput,r?i.queryInputError:void 0),children:e(L,{...d,highlight:s=>I(s,E.sql,"sql"),onValueChange:d.onChange,padding:10,disabled:o,placeholder:"Example: SELECT * FROM [bigquery-data:catalog.entities] WHERE entity_ref IN UNNEST(@entity_refs)",textareaClassName:i.queryTextarea})}),e(C,{className:i.helperText,error:!!r,children:r?.message??"Consider updating the collector's batch size to schedule the query for multiple entities at once"})]})})]})]}),a("div",{className:i.caption,children:[e(m,{variant:"subtitle1",children:"Output Schema"}),e(m,{variant:"caption",children:"List the columns returned by the query"})]}),e(n,{container:!0,spacing:0,direction:"column",children:u.map((d,r)=>a(n,{item:!0,container:!0,alignItems:"center",spacing:2,children:[a(n,{item:!0,children:[e(m,{variant:"subtitle2",children:"Column Name"}),e(p,{name:`${t}.schema.${r}.name`,control:l,render:({field:s,fieldState:{error:c}})=>e(h,{...s,type:"text",variant:"outlined",margin:"dense",placeholder:"Column Name",className:i.nameInput,disabled:o,error:!!c,helperText:c?.message??" ",FormHelperTextProps:{className:i.helperText}})})]}),a(n,{item:!0,children:[e(m,{variant:"subtitle2",children:"Data Type"}),e(p,{name:`${t}.schema.${r}.type`,control:l,render:({field:s,fieldState:{error:c}})=>e(x,{...s,control:l,placeholder:"Data Type",options:H,disabled:o,helperText:c?.message??" "})})]}),a(n,{item:!0,children:[e(v,{placement:"top",title:"Select a value if the column is a foreign key that references a catalog entity field",children:e(m,{variant:"subtitle2",children:"Foreign Key"})}),e(p,{name:`${t}.schema.${r}.foreignKey`,control:l,render:({field:s,fieldState:{error:c}})=>e(x,{...s,control:l,placeholder:"Foreign Key",options:P,disabled:o,helperText:c?.message??" "})})]}),a(n,{item:!0,children:[e(g,{onClick:()=>f(r),disabled:o||u.length===1,children:e(q,{fontSize:"small"})}),e(g,{onClick:()=>y(r+1,j),disabled:o,children:e(S,{fontSize:"small"})})]})]},d.id))})]})};export{O as QueryFactDetailsComponent};
|
|
2
2
|
//# sourceMappingURL=QueryFactDetailsComponent.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as C,Fragment as u,jsx as o}from"react/jsx-runtime";import{makeStyles as h,Paper as S}from"@material-ui/core";import{useForm as v,FormProvider 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"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as y}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as B}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as w}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as x}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 N}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as k}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as D,confirmationModalContent as M}from"../Common/utils.esm.js";import{mapConfigToCatalogCollectorConfig as P,defaultCatalogConfig as T,mapCatalogCollectorConfigToConfig as j}from"./utils.esm.js";const H=h(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)},form:{marginBottom:t.spacing(2)}})),R=({disabled:t,selectedCollector:r})=>{const
|
|
1
|
+
import{jsxs as C,Fragment as u,jsx as o}from"react/jsx-runtime";import{makeStyles as h,Paper as S}from"@material-ui/core";import{useForm as v,FormProvider 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"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as y}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as B}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as w}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as x}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 N}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as k}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as D,confirmationModalContent as M}from"../Common/utils.esm.js";import{mapConfigToCatalogCollectorConfig as P,defaultCatalogConfig as T,mapCatalogCollectorConfigToConfig as j}from"./utils.esm.js";const H=h(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)},form:{marginBottom:t.spacing(2)}})),R=({disabled:t,selectedCollector:r})=>{const i=v({defaultValues:r?P(r.config):T(),mode:"onChange"}),{formState:{errors:n},handleSubmit:e}=i,a=H(),s=!!n.entityDescriptor,{mutateAsync:l}=w(),[c,p]=B(x),{showModal:f}=y(),m=async g=>{if(!await f(M(r)))return;const d=j(g);await l({collectorId:r.id,config:d})&&p()};return N(D(r)),C(u,{children:[o(S,{className:a.form,children:o(b,{...i,children:o("form",{onSubmit:e(m),children:o(k,{name:"entityDescriptor",label:"Entity Descriptor",description:"Collects entities from Backstage's Software Catalog.",disabled:t})})})}),o("div",{className:a.section,children:o(F,{onCancel:c,saveButtonText:"Save",isLoading:!1,onSave:e(m),disableSave:s})})]})};export{R as CatalogConfigurator};
|
|
2
2
|
//# sourceMappingURL=CatalogConfigurator.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as o,jsxs as f}from"react/jsx-runtime";import{makeStyles as p,Box as d,Button as l}from"@material-ui/core";import{Alert as u}from"@material-ui/lab";import{upperFirst as h}from"lodash";import{useFeatureFlag as B}from"../../../../hooks/useFeatureFlag.esm.js";import{PortalConfigAlert as C}from"./PortalConfigAlert.esm.js";import{getConfigManagerLink as y}from"./utils.esm.js";const k=p(t=>({actionButton:{margin:t.spacing(.5)}})),v=({collectorName:t,collectorId:r,marginBottom:e=2,invalidConfig:s,hasNonUIOptions:i})=>{const a=k(),m=B("portal"),n=i&&m,c=y(r),g=`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${r}#prerequisites`;return s?o(d,{marginBottom:e,children:f(u,{variant:"filled",severity:"warning",title:`${h(t)} Requires Additional Configurations`,action:n?o(l,{className:a.actionButton,variant:"contained",color:"secondary",size:"small",href:c,target:"_blank",children:"Config Manager"}):o(l,{className:a.actionButton,variant:"contained",color:"secondary",size:"small",href:g,target:"_blank",children:"Documentation"}),children:["There are additional configuration required for this integration to collect facts correctly."," ",n?"See config manager to configure these options.":"See documentation and configure these in YAML."]})}):n&&i?o(C,{portalConfigManagerPath:c,marginBottom:e}):null};export{v as CollectorConfigAlert};
|
|
2
|
+
//# sourceMappingURL=CollectorConfigAlert.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as n}from"react/jsx-runtime";import{makeStyles as i,Box as r,Button as e}from"@material-ui/core";import{Alert as l}from"@material-ui/lab";const c=i(o=>({actionButton:{margin:o.spacing(.5)}})),g=({portalConfigManagerPath:o,marginBottom:t=2})=>{const a=c();return n(r,{marginBottom:t,children:n(l,{title:"Additional Options in Config Manager",variant:"filled",action:n(e,{className:a.actionButton,variant:"contained",color:"secondary",size:"small",href:o,target:"_blank",children:"Config Manager"}),severity:"info",children:"Additional global config options available via config manager."})})};export{g as PortalConfigAlert};
|
|
2
|
+
//# sourceMappingURL=PortalConfigAlert.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{mapToCacheConfig as c,mapCacheConfigToHumanDurationOrBoolean as f}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as
|
|
1
|
+
import{mapToCacheConfig as c,mapCacheConfigToHumanDurationOrBoolean as f}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as o,mapCatalogFilterToFormKeyValueFilters as a,mapFiltersToCatalogFilter as r}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as n,mapFrequencyToHumanDurationOrCron as l}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";const u=e=>({title:e.name??e.id,description:e.description,docLink:`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${e.id}`}),s=e=>({title:"Update Integration",message:`Are you sure you want to update the ${e.name} integration? This will overwrite any configurations currently saved in the database. Configs saved this way will have priority over anything configured in YAML.`,error:!1}),d=({configOption:e,factType:i,additionalParams:t={}})=>({type:i,frequency:l(e.frequency),filter:r(e.filters.filter,e.filters.keyValueFilter),exclude:r(e.filters.excludeFilter,e.filters.excludeKeyValueFilter),cache:f(e.cacheConfig),batchSize:e.batchSize??void 0,initialDelay:e.initialDelay?l(e.initialDelay):void 0,...t}),m=({parentConfig:e,factTypeConfig:i})=>{const t=i.initialDelay??e.initialDelay;return{frequency:n(i.frequency??e.frequency),filters:{filter:o(i.filter??e.filter),keyValueFilter:a(i.filter??e.filter),excludeFilter:o(i.exclude??e.exclude),excludeKeyValueFilter:a(i.exclude??e.exclude)},cacheConfig:c(i.cache??e.cache),batchSize:i.batchSize??e.batchSize,initialDelay:t?n(t):void 0}},p="~1.",g=e=>e.join(p),y=e=>`/config-manager/soundcheck#${g(["root","soundcheck","collectors",e])}__title`;export{u as collectorHeaderContent,s as confirmationModalContent,y as getConfigManagerLink,m as mapBackendConfigToFormIntegrationConfig,d as mapFormIntegrationConfigToBackendConfig};
|
|
2
2
|
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as
|
|
1
|
+
import{jsxs as l,Fragment as D,jsx as e}from"react/jsx-runtime";import{makeStyles as b,Paper as h,Divider as S}from"@material-ui/core";import{useForm as y,FormProvider as j}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as N}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as F}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as L}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as O}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 m}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as x}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as B,confirmationModalContent as I}from"../Common/utils.esm.js";import{mapConfigToDataDogCollectorConfig as M,defaultDataDogConfig as P,mapDataDogCollectorConfigToConfig as T}from"./utils.esm.js";const A=b(i=>({spacer:{height:i.spacing(8),width:"100%"},section:{marginBottom:i.spacing(2)}})),H=({disabled:i,selectedCollector:o})=>{const t=y({defaultValues:o?M(o.config):P(),mode:"onChange"}),{formState:{errors:r},handleSubmit:a}=t,n=A(),s=!!r.serviceDefinition||!!r.serviceLevelObjective,{mutateAsync:d}=L(),[f,p]=F(O),{showModal:g}=N(),c=async C=>{if(!await g(I(o)))return;const u=T(C);await d({collectorId:o.id,config:u})&&p()};w(B(o));const v=!o.config?.apiKey||!o.config?.appKey;return l(D,{children:[e(x,{collectorName:"Datadog",collectorId:o.id,invalidConfig:v,hasNonUIOptions:!0}),e(h,{className:n.section,children:e(j,{...t,children:l("form",{onSubmit:a(c),children:[e(m,{name:"serviceDefinition",label:"Service Definition",description:"Collects details about Datadog service linked to an entity.",disabled:i}),e(S,{}),e(m,{name:"serviceLevelObjective",label:"Service Level Objective",description:"Collects details about SLOs configured for a Datadog service linked to an entity.",disabled:i})]})})}),e("div",{className:n.section,children:e(k,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:a(c),disableSave:s})})]})};export{H as DataDogConfigurator};
|
|
2
2
|
//# sourceMappingURL=DataDogConfigurator.esm.js.map
|
package/dist/components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as C,Fragment as u,jsx as o}from"react/jsx-runtime";import{makeStyles as h,Paper as S}from"@material-ui/core";import{useForm as y,FormProvider 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"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as R}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as b}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as D}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as B}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 w}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as x}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as N,confirmationModalContent as T}from"../Common/utils.esm.js";import{mapConfigToDataRegistryCollectorConfig as M,defaultDataRegistryConfig as P,mapDataRegistryCollectorConfigToConfig as j}from"./utils.esm.js";const k=h(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)},form:{marginBottom:t.spacing(2)}})),H=({disabled:t,selectedCollector:e})=>{const r=y({defaultValues:e?M(e.config):P(),mode:"onChange"}),{formState:{errors:n},handleSubmit:i}=r,a=k(),s=!!n.datasetSchema,{mutateAsync:c}=D(),[l,p]=b(B),{showModal:f}=R(),m=async d=>{if(!await f(T(e)))return;const g=j(d);await c({collectorId:e.id,config:g})&&p()};return w(N(e)),C(u,{children:[o(S,{className:a.form,children:o(v,{...r,children:o("form",{onSubmit:i(m),children:o(x,{name:"datasetSchema",label:"Dataset Schema",description:"Collects fields (name, type, description) from a dataset in Data Registry.",disabled:t})})})}),o("div",{className:a.section,children:o(F,{onCancel:l,saveButtonText:"Save",isLoading:!1,onSave:i(m),disableSave:s})})]})};export{H as DataRegistryConfigurator};
|
|
1
|
+
import{jsxs as C,Fragment as u,jsx as o}from"react/jsx-runtime";import{makeStyles as h,Paper as S}from"@material-ui/core";import{useForm as y,FormProvider 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"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as R}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as b}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as D}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as B}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 w}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as x}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as N,confirmationModalContent as T}from"../Common/utils.esm.js";import{mapConfigToDataRegistryCollectorConfig as M,defaultDataRegistryConfig as P,mapDataRegistryCollectorConfigToConfig as j}from"./utils.esm.js";const k=h(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)},form:{marginBottom:t.spacing(2)}})),H=({disabled:t,selectedCollector:e})=>{const r=y({defaultValues:e?M(e.config):P(),mode:"onChange"}),{formState:{errors:n},handleSubmit:i}=r,a=k(),s=!!n.datasetSchema,{mutateAsync:c}=D(),[l,p]=b(B),{showModal:f}=R(),m=async d=>{if(!await f(T(e)))return;const g=j(d);await c({collectorId:e.id,config:g})&&p()};return w(N(e)),C(u,{children:[o(S,{className:a.form,children:o(v,{...r,children:o("form",{onSubmit:i(m),children:o(x,{name:"datasetSchema",label:"Dataset Schema",description:"Collects fields (name, type, description) from a dataset in Data Registry.",disabled:t})})})}),o("div",{className:a.section,children:o(F,{onCancel:l,saveButtonText:"Save",isLoading:!1,onSave:i(m),disableSave:s})})]})};export{H as DataRegistryConfigurator};
|
|
2
2
|
//# sourceMappingURL=DataRegistryConfigurator.esm.js.map
|
package/dist/components/CollectorPage/Configurators/Github/CodeScanningAlertsFactDetails.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as u,jsx as e}from"react/jsx-runtime";import{Typography as n,Box as m,TextField as c}from"@material-ui/core";import{useFormContext as S,Controller as s}from"react-hook-form";import{FormControlledAutocomplete as p}from"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as f}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"
|
|
1
|
+
import{jsxs as u,jsx as e}from"react/jsx-runtime";import{Typography as n,Box as m,TextField as c}from"@material-ui/core";import{useFormContext as S,Controller as s}from"react-hook-form";import{FormControlledAutocomplete as p}from"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as f}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"../../../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{FormFieldLabel as d}from"../../../FormFieldLabel/FormFieldLabel.esm.js";import{useStyles as x}from"./GithubConfigurator.esm.js";import{CODE_SCANNING_ALERTS_STATE_OPTIONS as T,CODE_SCANNING_ALERTS_SEVERITY_OPTIONS as v}from"./types.esm.js";const b=({name:r,disabled:a})=>{const l=x(),{control:i}=S(),h=f(T.map(t=>({label:t,value:t}))),N=f(v.map(t=>({label:t,value:t})));return u("div",{className:l.root,children:[e(d,{title:"Fact Name"}),e(n,{variant:"caption",children:"Fact name must be unique"}),e(m,{children:e(s,{name:`${r}.factName`,control:i,render:({field:t,fieldState:{error:o}})=>e(c,{...t,type:"text",variant:"outlined",margin:"dense",placeholder:"Fact Name",className:l.formInput,disabled:a,error:!!o,helperText:o?.message,FormHelperTextProps:{className:l.helperText}})})}),e(d,{title:"Code Scanning Tool Name"}),e(n,{variant:"caption",children:"Optional, if not provided results by all code scanning tools will be collected"}),e(m,{children:e(s,{name:`${r}.toolName`,control:i,render:({field:t,fieldState:{error:o}})=>e(c,{...t,type:"text",variant:"outlined",margin:"dense",placeholder:"Example: CodeQL",className:l.formInput,disabled:a,error:!!o,helperText:o?.message,FormHelperTextProps:{className:l.helperText}})})}),e(d,{title:"Code Scanning Alert State"}),e(n,{variant:"caption",children:"Optional, if not provided code scanning alerts with all states will be collected"}),e(m,{className:l.formInput,children:e(p,{name:`${r}.state`,control:i,fullWidth:!0,freeSolo:!1,disabled:a,placeholder:"Example: open",...h})}),e(d,{title:"Code Scanning Alert Severity"}),e(n,{variant:"caption",children:"Optional, if not provided code scanning alerts with all severities will be collected"}),e(m,{className:l.formInput,children:e(p,{name:`${r}.severity`,control:i,fullWidth:!0,freeSolo:!1,disabled:a,placeholder:"Example: critical",...N})})]})};export{b as CodeScanningAlertsFactDetails};
|
|
2
2
|
//# sourceMappingURL=CodeScanningAlertsFactDetails.esm.js.map
|
package/dist/components/CollectorPage/Configurators/Github/DependabotAlertsFactDetails.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as h,jsx as e}from"react/jsx-runtime";import{Typography as i,Box as
|
|
1
|
+
import{jsxs as h,jsx as e}from"react/jsx-runtime";import{Typography as i,Box as n,TextField as u}from"@material-ui/core";import{useFormContext as b,Controller as T}from"react-hook-form";import"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import{FormControlledMultipleAutocomplete as d}from"../../../FormControlledAutocomplete/FormControlledMultipleAutocomplete.esm.js";import{useLabelOptions as s}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"../../../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{FormFieldLabel as m}from"../../../FormFieldLabel/FormFieldLabel.esm.js";import{useStyles as v}from"./GithubConfigurator.esm.js";import{DEPENDABOT_ALERTS_STATE_OPTIONS as x,DEPENDABOT_ALERTS_SEVERITY_OPTIONS as N}from"./types.esm.js";const S=({name:r,disabled:o})=>{const l=v(),{control:a}=b(),c=s(x.map(t=>({label:t,value:t}))),f=s(N.map(t=>({label:t,value:t})));return h("div",{className:l.root,children:[e(m,{title:"Fact Name"}),e(i,{variant:"caption",children:"Fact name must be unique"}),e(n,{children:e(T,{name:`${r}.factName`,control:a,render:({field:t,fieldState:{error:p}})=>e(u,{...t,type:"text",variant:"outlined",margin:"dense",placeholder:"Fact Name",className:l.formInput,disabled:o,error:!!p,helperText:p?.message,FormHelperTextProps:{className:l.helperText}})})}),e(m,{title:"Dependabot Alert States"}),e(i,{variant:"caption",children:"Optional, if not provided dependabot alerts with all states will be collected"}),e(n,{className:l.formInput,children:e(d,{name:`${r}.states`,control:a,fullWidth:!0,freeSolo:!1,disabled:o,placeholder:"Example: open",...c})}),e(m,{title:"Dependabot Alert Severities"}),e(i,{variant:"caption",children:"Optional, if not provided dependabot alerts with all severities will be collected"}),e(n,{className:l.formInput,children:e(d,{name:`${r}.severities`,control:a,fullWidth:!0,freeSolo:!1,disabled:o,placeholder:"Example: critical",...f})})]})};export{S as DependabotAlertsFactDetails};
|
|
2
2
|
//# sourceMappingURL=DependabotAlertsFactDetails.esm.js.map
|