@spotify/backstage-plugin-soundcheck 0.22.4 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/dist/alpha/CampaignsRouterPage.esm.js +2 -0
- package/dist/alpha/ChecksRouterPage.esm.js +2 -0
- package/dist/alpha/IntegrationsRouterPage.esm.js +2 -0
- package/dist/alpha/OverviewPageWrapper.esm.js +2 -0
- package/dist/alpha/TracksRouterPage.esm.js +2 -0
- package/dist/alpha/plugin.esm.js +1 -1
- package/dist/alpha.d.ts +155 -59
- package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
- package/dist/components/Badge/Badge.esm.js +2 -0
- package/dist/components/Badges/LevelBadge.esm.js +1 -1
- package/dist/components/Badges/StatusBadge.esm.js +1 -1
- package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +1 -1
- package/dist/components/CampaignForm/hooks/useCampaignForm.esm.js +1 -1
- package/dist/components/CampaignForm/utils/validation.esm.js +1 -1
- package/dist/components/CampaignPage/CampaignPageBUI.esm.js +1 -1
- package/dist/components/CampaignPage/CampaignStatusBarBUI.esm.js +1 -1
- package/dist/components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js +1 -1
- package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +1 -1
- package/dist/components/CampaignsPage/CampaignsPage.esm.js +1 -1
- package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
- package/dist/components/Cards/CheckStatusCard/CheckStatusCard.esm.js +1 -1
- package/dist/components/CertificationAccordion/CertificationAccordion.esm.js +1 -1
- package/dist/components/CertificationSidebar/CertificationSidebar.esm.js +1 -1
- package/dist/components/CertificationSidebar/Check.esm.js +1 -1
- package/dist/components/CertificationSidebar/ExemptionJustificationDialog.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationTab.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationsPage.esm.js +1 -1
- package/dist/components/CertificationsPage/Playlist/PlaylistContext.esm.js +1 -1
- package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +1 -1
- package/dist/components/CheckDetails/CheckDetails.esm.js +1 -1
- package/dist/components/CheckDetails/CheckPullRequest.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/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js +1 -1
- package/dist/components/CheckForm/Steps/CheckApplicabilityStep.esm.js +1 -1
- package/dist/components/CheckForm/Steps/CheckDetailsStep.esm.js +1 -1
- package/dist/components/CheckForm/Steps/CheckRulesStep.esm.js +1 -1
- package/dist/components/CheckForm/useCheckForm.esm.js +1 -1
- package/dist/components/CheckForm/utils/validation.esm.js +1 -1
- package/dist/components/CheckIcon/CheckIcon.esm.js +1 -1
- package/dist/components/CheckPage/CheckEditPage.esm.js +1 -1
- package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
- package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTableBUI.esm.js +1 -1
- package/dist/components/CheckPage/CheckPageBUI.esm.js +1 -1
- package/dist/components/CheckPage/ExemptionsTableBUI.esm.js +1 -1
- package/dist/components/CheckPage/utils.esm.js +1 -1
- package/dist/components/CheckSelection/CheckSelection.esm.js +1 -1
- package/dist/components/CheckStatusBar/CheckStatusBarBUI.esm.js +1 -1
- package/dist/components/CheckTemplatesPage/CheckTemplatesPageBUI.esm.js +1 -1
- package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +1 -1
- package/dist/components/ChecksTable/ChecksTable.esm.js +1 -1
- package/dist/components/ChecksTable/FixMeCell.esm.js +1 -1
- package/dist/components/ChecksTable/PullRequestsTable.esm.js +1 -1
- package/dist/components/ChecksTable/utils.esm.js +2 -0
- package/dist/components/CollectorPage/CollectorDetailsPageBUI.esm.js +1 -1
- package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
- package/dist/components/CollectorPage/CollectorStatus.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/AzureDevOps/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/BigQuery/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Common/CollectorOption.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Common/utils.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Configurator.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/GithubConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/validation.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/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Jira/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Kubernetes/validation.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/PagerDuty/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/RegexFactDetailsComponent.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/utils.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SchemaBased/SchemaBasedConfigurator.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SchemaBased/SchemaField.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SchemaBased/utils.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SonarQube/validation.esm.js +1 -1
- package/dist/components/CollectorPage/utils.esm.js +2 -0
- package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
- package/dist/components/CollectorsPage/IntegrationLogoBUI.esm.js +1 -1
- package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +1 -1
- package/dist/components/CreateNewTrackPage/CreateNewTrackPage.esm.js +1 -1
- package/dist/components/DescriptionCell/DescriptionCell.esm.js +1 -1
- package/dist/components/EntityChip/EntityChip.esm.js +1 -1
- package/dist/components/EntitySoundcheckCard/Card.esm.js +1 -1
- package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
- package/dist/components/FactExplorer/useFactOptions.esm.js +1 -1
- package/dist/components/Filter/FilterComponent.esm.js +1 -1
- package/dist/components/Filter/FilterPreviewDisplay.esm.js +2 -0
- package/dist/components/FilterSidebar/useTrackFilterSidebar.esm.js +1 -1
- package/dist/components/FilterSidebar/util.esm.js +1 -1
- package/dist/components/FixMeBetaBadge/FixMeBetaBadge.esm.js +2 -0
- package/dist/components/FixMeButton/FixMeButton.esm.js +1 -1
- package/dist/components/FormControlledAutocomplete/ControlledAutocomplete.esm.js +1 -1
- package/dist/components/FormattedPreview/FormattedPreview.esm.js +3 -3
- package/dist/components/GroupSelectorBUI/GroupSelectList.esm.js +1 -1
- package/dist/components/GroupSelectorBUI/GroupSelectionHistory.esm.js +1 -1
- package/dist/components/GroupSelectorBUI/GroupSelectorBUI.esm.js +1 -1
- package/dist/components/GroupSelectorBUI/GroupTagsDisplay.esm.js +2 -0
- package/dist/components/GroupSelectorBUI/ListViewMode.esm.js +2 -0
- package/dist/components/LevelUpParty/LevelUpParty.esm.js +1 -1
- package/dist/components/ListPageCustomActions/ListPageCustomActions.esm.js +1 -1
- package/dist/components/Menus/useCampaignActions.esm.js +1 -1
- package/dist/components/Menus/useCheckActions.esm.js +1 -1
- package/dist/components/Menus/useTrackActions.esm.js +1 -1
- package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
- package/dist/components/RefetchingIndicator/RefetchingIndicator.esm.js +1 -1
- package/dist/components/Router.esm.js +1 -1
- package/dist/components/RoutingPage/RoutingPageBUI.esm.js +1 -1
- package/dist/components/RoutingPage/RoutingPageWrapperBUI.esm.js +1 -1
- package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js +1 -1
- package/dist/components/StatusBar/StatusBar.esm.js +1 -1
- package/dist/components/Stepper/Stepper.esm.js +1 -1
- package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +1 -1
- package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +1 -1
- package/dist/components/TechInsights/TechInsightsTableBUI.esm.js +1 -1
- package/dist/components/TechInsights/hierarchyToNivo.esm.js +2 -0
- package/dist/components/TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js +1 -1
- package/dist/components/TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js +1 -1
- package/dist/components/TimePeriodBar/TimePeriodBarBUI.esm.js +1 -1
- package/dist/components/TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js +1 -1
- package/dist/components/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +1 -1
- package/dist/components/TrackBuilderPage/components/SelectProviderStep/SelectProviderStep.esm.js +1 -1
- package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +1 -1
- package/dist/components/TrackEditPage/TrackEditPage.esm.js +1 -1
- package/dist/components/TrackEditPage/TrackEditView.esm.js +1 -1
- package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
- package/dist/components/TrackForm/utils/validation.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js +1 -1
- package/dist/components/TrackPage/TrackPageBUI.esm.js +1 -1
- package/dist/components/TrackPage/TrackStatusBarBUI.esm.js +1 -1
- package/dist/components/TrackPage/TrackStatusTableBUI.esm.js +1 -1
- package/dist/components/TrackPage/TrackTechInsightsExplorerPage.esm.js +1 -1
- package/dist/components/TracksPage/TracksListPageBUI.esm.js +1 -1
- package/dist/contexts/UserProvider.esm.js +1 -1
- package/dist/graphql/generated/index.esm.js +22 -13
- package/dist/hooks/catalog/useEntityPresentation.esm.js +2 -0
- package/dist/hooks/catalog/useEntityPrimaryTitle.esm.js +2 -0
- package/dist/hooks/catalog/useGetEntityRefs.esm.js +1 -1
- package/dist/hooks/checks/useChecks.esm.js +2 -0
- package/dist/hooks/checks/useDeleteCheck.esm.js +1 -1
- package/dist/hooks/collectors/useGetCollectors.esm.js +1 -1
- package/dist/hooks/filters/useFilters.esm.js +1 -1
- package/dist/hooks/filters/useListPageFilters.esm.js +2 -0
- package/dist/hooks/fixMe/useFixMe.esm.js +1 -1
- package/dist/hooks/fixWithAika/useFixWithAika.esm.js +1 -1
- package/dist/hooks/groups/useGroupOptions.esm.js +1 -1
- package/dist/hooks/useChipScopedUrlState.esm.js +2 -0
- package/dist/hooks/usePagination.esm.js +1 -1
- package/dist/index.d.ts +130 -4
- package/dist/index.esm.js +1 -1
- package/dist/plugins/soundcheck/package.json.esm.js +2 -0
- package/dist/utils/charts.esm.js +1 -1
- package/dist/utils/facetFilters/utils.esm.js +1 -1
- package/dist/utils/filters.esm.js +1 -1
- package/dist/utils/validation.esm.js +1 -1
- package/package.json +24 -22
- package/dist/alpha/pages.esm.js +0 -2
- package/dist/components/CategoryBar/CategoryBar.esm.js +0 -2
- package/dist/components/CheckStatusBar/CheckStatusBar.esm.js +0 -2
- package/dist/components/CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js +0 -2
- package/dist/components/CheckTemplatesPage/TemplateCategory.esm.js +0 -2
- package/dist/components/CollectorPage/CollectorDetailsPageDeprecated.esm.js +0 -2
- package/dist/components/CollectorPage/CollectorFactTable.esm.js +0 -2
- package/dist/components/CollectorsPage/CollectorListPage/CollectorListPageDeprecated.esm.js +0 -2
- package/dist/components/CollectorsPage/CollectorListPage/CollectorLogo.esm.js +0 -2
- package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/getLeafNodes.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/LoadingOverlay.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoCirclePacking.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoHeatmap.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoIcicle.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoSunburst.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoTreemap.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/VisualizationBreadcrumb.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js +0 -2
- package/dist/components/ImportExportPanel/ImportExportPanelDeprecated.esm.js +0 -2
- package/dist/components/SummaryCard/SummaryCard.esm.js +0 -2
- package/dist/components/SummaryCard/SummaryCardActionsMenu.esm.js +0 -2
- package/dist/images/GitHub_Logo.svg +0 -9
- package/dist/images/GitHub_Logo_White.svg +0 -9
- package/dist/images/SCM_DARK.svg +0 -10
- package/dist/images/SCM_LIGHT.svg +0 -10
- package/dist/images/azure-devops-rgb.svg +0 -13
- package/dist/images/azure-devops-white.svg +0 -13
- package/dist/images/bigquery-rgb.svg +0 -15
- package/dist/images/bigquery-white.svg +0 -15
- package/dist/images/cat-blk.svg +0 -12
- package/dist/images/cat-wht.svg +0 -12
- package/dist/images/data-registry-blk.svg +0 -36
- package/dist/images/data-registry-wht.svg +0 -36
- package/dist/images/dd_logo_h_rgb.svg +0 -17
- package/dist/images/dd_logo_h_white.svg +0 -17
- package/dist/images/gitlab-rgb.svg +0 -1
- package/dist/images/gitlab-white.svg +0 -1
- package/dist/images/http-rgb.svg +0 -11
- package/dist/images/http-white.svg +0 -11
- package/dist/images/jira-rgb.svg +0 -25
- package/dist/images/jira-white.svg +0 -25
- package/dist/images/k8s_blue.svg +0 -108
- package/dist/images/k8s_white.svg +0 -108
- package/dist/images/new-relic-rgb.svg +0 -1
- package/dist/images/new-relic-white.svg +0 -1
- package/dist/images/pd-black.svg +0 -9
- package/dist/images/pd-white.svg +0 -9
- package/dist/images/sonarqube-rgb.svg +0 -14
- package/dist/images/sonarqube-white.svg +0 -14
- package/dist/images/soundcheck-black.svg +0 -13
- package/dist/images/soundcheck-white.svg +0 -13
- package/dist/images/tech-black.svg +0 -11
- package/dist/images/tech-white.svg +0 -11
- /package/dist/components/CampaignsPage/{CampaignListPage/useArchiveConfirmationModal.esm.js → useArchiveConfirmationModal.esm.js} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as i,jsx as
|
|
1
|
+
import{jsxs as i,jsx as t}from"react/jsx-runtime";import{FormControlLabel as b,Switch as y,Typography as c}from"@material-ui/core";import{makeStyles as x}from"@material-ui/core/styles";import{useFormContext as g}from"react-hook-form";import"../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as k}from"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"react";import"../../../contexts/UserProvider.esm.js";import{FormFieldLabel as s}from"../../FormFieldLabel/FormFieldLabel.esm.js";import{FormFilterSection as v}from"../../FormFilterSection/FormFilterSection.esm.js";import{FormMarkdownInput as C}from"../../FormMarkdownInput/FormMarkdownInput.esm.js";import"../FormFields/CheckNameInput/CheckNameInput.esm.js";import"../FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import{CHECK_FIELDS as F}from"../utils/checkFormUtils.esm.js";import"../FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../FormFields/RuleInput/AddMenuButton.esm.js";import{RuleInputBox as N}from"../FormFields/RuleInput/RuleInputBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"@material-ui/icons/Search";import"../../SoundcheckDialog/SoundcheckDialog.esm.js";import"../../FactExplorer/FactExplorer.esm.js";import"../../FactExplorer/FactExplorerContext.esm.js";import"../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"../FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../ChecksTable/utils.esm.js";import"../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import"../FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"../FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"../FormFields/CheckPathResolverInput.esm.js";import{ExpressionType as S}from"../types/ExpressionType.esm.js";import"../../Frequency/types.esm.js";import"../../Frequency/util.esm.js";import"../../Frequency/FrequencyComponent.esm.js";import"../types/Path.esm.js";const w=x(e=>({container:{display:"flex",flexDirection:"column",gap:e.spacing(2)},innerContainer:{display:"flex",flexDirection:"column"}})),A=()=>{const e=w(),{isLoading:o,isReadOnly:r}=k(),{control:d,watch:m,setValue:a}=g(),p="filtersStep.applicabilityExpressions",n="filtersStep.notApplicableMessage",h=m("detailsStep.type"),l=m(p),f=u=>{u.target.checked?(a(p,{expressionType:S.AllOf,conditions:[{factRef:"",path:"",operator:"",operatorPrefix:"",value:""}]}),a(n,"")):(a(p,void 0),a(n,void 0))};return i("div",{className:e.container,children:[t(v,{includeFilterName:"filtersStep.include",excludeFilterName:"filtersStep.exclude",disabled:o||r,description:F.filter.description}),h!=="manual"&&i("div",{className:e.container,children:[i("div",{className:e.innerContainer,children:[t(b,{label:t(s,{title:"Applicability rule (Optional)",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks/#applicability-rule"}),disabled:o||r,control:t(y,{checked:!!l?.conditions||!!l?.expressions,onChange:f})}),t(c,{variant:"caption",children:"The check applies to all entities that match the catalog filters above. If you want to add an extra fact-based applicability rule, turn on the toggle and define the fact-based rule. With this rule enabled, the check will only apply to entities that match both the catalog filters and the fact-based rule. The fact-based rule is re-checked every time the check runs."})]}),(!!l?.conditions||!!l?.expressions)&&i("div",{className:e.container,children:[t("div",{className:e.innerContainer,children:t(N,{disabled:o||r,name:p,depth:0})}),i("div",{className:e.innerContainer,children:[t(s,{title:"Not applicable message (Optional)"}),t(c,{variant:"caption",children:"Add a message explaining why the check doesn't apply if an entity fails the fact-based rule."}),t(C,{name:n,control:d,placeholder:"Enter not applicable message...",disabled:o||r})]})]})]})]})};export{A as CheckApplicabilityStep};
|
|
2
2
|
//# sourceMappingURL=CheckApplicabilityStep.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as e,jsx as t}from"react/jsx-runtime";import{makeStyles as n}from"@material-ui/core/styles";import{useFormContext as s}from"react-hook-form";import"../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as a}from"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"react";import"../../../contexts/UserProvider.esm.js";import{CheckNameInput as c}from"../FormFields/CheckNameInput/CheckNameInput.esm.js";import"../FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import{CheckDescriptionInput as l}from"../FormFields/CheckDescriptionInput/CheckDescriptionInput.esm.js";import{TeamDetailsInput as d}from"../FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../FormFields/RuleInput/AddMenuButton.esm.js";import"../FormFields/RuleInput/RuleInputBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/core";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"@material-ui/icons/Search";import"../../SoundcheckDialog/SoundcheckDialog.esm.js";import"../../FactExplorer/FactExplorer.esm.js";import"../../FactExplorer/FactExplorerContext.esm.js";import"../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"../FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import"../utils/checkFormUtils.esm.js";import"../FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"../FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"../FormFields/CheckPathResolverInput.esm.js";import{CheckTypeInput as f}from"../FormFields/CheckTypeInput/CheckTypeInput.esm.js";const u=n(i=>({container:{display:"flex",flexDirection:"column",gap:i.spacing(1)}})),x=()=>{const i=u(),{isLoading:m,isReadOnly:o}=a(),{control:r,formState:{errors:p}}=s();return e("div",{className:i.container,children:[t(c,{control:r,error:p?.detailsStep?.name,isLoading:m,disabled:o}),t(l,{control:r,error:p?.detailsStep?.description,isLoading:m,disabled:o}),t(d,{control:r,disabled:o,error:p?.detailsStep?.ownerEntityRef}),t(f,{control:r,disabled:o,isLoading:m})]})};export{x as CheckDetailsStep};
|
|
1
|
+
import{jsxs as e,jsx as t}from"react/jsx-runtime";import{makeStyles as n}from"@material-ui/core/styles";import{useFormContext as s}from"react-hook-form";import"../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as a}from"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"react";import"../../../contexts/UserProvider.esm.js";import{CheckNameInput as c}from"../FormFields/CheckNameInput/CheckNameInput.esm.js";import"../FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import{CheckDescriptionInput as l}from"../FormFields/CheckDescriptionInput/CheckDescriptionInput.esm.js";import{TeamDetailsInput as d}from"../FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../FormFields/RuleInput/AddMenuButton.esm.js";import"../FormFields/RuleInput/RuleInputBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/core";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"@material-ui/icons/Search";import"../../SoundcheckDialog/SoundcheckDialog.esm.js";import"../../FactExplorer/FactExplorer.esm.js";import"../../FactExplorer/FactExplorerContext.esm.js";import"../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"../FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../ChecksTable/utils.esm.js";import"../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import"../utils/checkFormUtils.esm.js";import"../FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"../FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"../FormFields/CheckPathResolverInput.esm.js";import{CheckTypeInput as f}from"../FormFields/CheckTypeInput/CheckTypeInput.esm.js";const u=n(i=>({container:{display:"flex",flexDirection:"column",gap:i.spacing(1)}})),x=()=>{const i=u(),{isLoading:m,isReadOnly:o}=a(),{control:r,formState:{errors:p}}=s();return e("div",{className:i.container,children:[t(c,{control:r,error:p?.detailsStep?.name,isLoading:m,disabled:o}),t(l,{control:r,error:p?.detailsStep?.description,isLoading:m,disabled:o}),t(d,{control:r,disabled:o,error:p?.detailsStep?.ownerEntityRef}),t(f,{control:r,disabled:o,isLoading:m})]})};export{x as CheckDetailsStep};
|
|
2
2
|
//# sourceMappingURL=CheckDetailsStep.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as e,Fragment as h,jsx as o}from"react/jsx-runtime";import{Typography as t,FormControlLabel as u,Checkbox as f}from"@material-ui/core";import{makeStyles as C}from"@material-ui/core/styles";import{useFormContext as s,Controller as v}from"react-hook-form";import"../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as g}from"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"react";import"../../../contexts/UserProvider.esm.js";import{FormFieldLabel as k}from"../../FormFieldLabel/FormFieldLabel.esm.js";import"../FormFields/CheckNameInput/CheckNameInput.esm.js";import{PassFailMessageInput as x}from"../FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../../FormMarkdownInput/FormMarkdownInput.esm.js";import{CHECK_FIELDS as y}from"../utils/checkFormUtils.esm.js";import"../FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../FormFields/RuleInput/AddMenuButton.esm.js";import{RuleInputBox as b}from"../FormFields/RuleInput/RuleInputBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"@material-ui/icons/Search";import"../../SoundcheckDialog/SoundcheckDialog.esm.js";import"../../FactExplorer/FactExplorer.esm.js";import"../../FactExplorer/FactExplorerContext.esm.js";import"../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"../FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import"../FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"../FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../FormFields/CheckScheduleSection/ScheduleSection.esm.js";import{CheckPathResolverInput as F}from"../FormFields/CheckPathResolverInput.esm.js";const S=C(r=>({container:{display:"flex",flexDirection:"column",gap:r.spacing(2)},innerContainer:{display:"flex",flexDirection:"column"}})),L=()=>{const r=S(),{isLoading:c,isReadOnly:n}=g(),{control:m}=s(),{rules:
|
|
1
|
+
import{jsxs as e,Fragment as h,jsx as o}from"react/jsx-runtime";import{Typography as t,FormControlLabel as u,Checkbox as f}from"@material-ui/core";import{makeStyles as C}from"@material-ui/core/styles";import{useFormContext as s,Controller as v}from"react-hook-form";import"../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as g}from"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"react";import"../../../contexts/UserProvider.esm.js";import{FormFieldLabel as k}from"../../FormFieldLabel/FormFieldLabel.esm.js";import"../FormFields/CheckNameInput/CheckNameInput.esm.js";import{PassFailMessageInput as x}from"../FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../../FormMarkdownInput/FormMarkdownInput.esm.js";import{CHECK_FIELDS as y}from"../utils/checkFormUtils.esm.js";import"../FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../FormFields/RuleInput/AddMenuButton.esm.js";import{RuleInputBox as b}from"../FormFields/RuleInput/RuleInputBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"@material-ui/icons/Search";import"../../SoundcheckDialog/SoundcheckDialog.esm.js";import"../../FactExplorer/FactExplorer.esm.js";import"../../FactExplorer/FactExplorerContext.esm.js";import"../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"../FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../ChecksTable/utils.esm.js";import"../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import"../FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"../FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../FormFields/CheckScheduleSection/ScheduleSection.esm.js";import{CheckPathResolverInput as F}from"../FormFields/CheckPathResolverInput.esm.js";const S=C(r=>({container:{display:"flex",flexDirection:"column",gap:r.spacing(2)},innerContainer:{display:"flex",flexDirection:"column"}})),L=()=>{const r=S(),{isLoading:c,isReadOnly:n}=g(),{control:m}=s(),{rules:a,warnings:p}=y.rulesStep,{watch:d}=s(),i=d("detailsStep.type");return e(h,{children:[i==="manual"&&o("div",{className:r.container,children:o("div",{className:r.innerContainer,children:o(t,{children:"Rules do not apply to manual checks. These types of checks are meant to have their state manually set by users, not executed by Soundcheck."})})}),(i==="default"||i===void 0||i===null)&&e("div",{className:r.container,children:[e("div",{className:r.innerContainer,children:[o(F,{control:m}),e("div",{children:[o(k,{title:a.name,docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks#rules"}),o(t,{variant:"caption",children:a.description})]}),o(b,{disabled:n,name:"rulesStep.expressions",depth:0})]}),o(x,{control:m,isLoading:c,disabled:n}),o("div",{className:r.container,children:e("div",{className:r.innerContainer,children:[e("div",{children:[o(t,{variant:"subtitle2",children:p.name}),o(t,{variant:"caption",children:p.description})]}),o(v,{name:"rulesStep.warning",control:m,render:({field:l})=>o(u,{disabled:n,control:o(f,{checked:l.value,onChange:l.onChange}),label:p.label})})]})})]})]})};export{L as CheckRulesStep};
|
|
2
2
|
//# sourceMappingURL=CheckRulesStep.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{standardSchemaResolver as p}from"@hookform/resolvers/standard-schema";import{useForm as c}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as u}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react/jsx-runtime";import"react";import{useLoggedInUser as l}from"../../contexts/UserProvider.esm.js";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 f}from"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{mapCheckerToFormValues as d,mapToCheckerInput as h,DEFAULT_FORM_VALUES as C}from"./utils/checkFormUtils.esm.js";import{manualCheckFormSchema as S,defaultCheckFormSchema as k}from"./utils/validation.esm.js";const F=a=>{const{selectedItem:r}=u(),{userEntityRef:m}=l();let t=C;r&&(t=d(r)),m&&!t.detailsStep.ownerEntityRef&&(t.detailsStep.ownerEntityRef=m);const s=c({defaultValues:t,mode:"onChange",resolver:(o,e,i)=>o.detailsStep.type==="manual"?p(S)(o,e,i):p(k)(o,e,i)}),{showModal:n}=f();return{formMethods:s,onSubmit:async o=>{if(!await n({title:"Save Check",message:`Are you sure you want to save check: ${o.detailsStep.name}?`,error:!1}))return;const e=h(o,r);a(e)}}};export{F as useCheckForm};
|
|
2
2
|
//# sourceMappingURL=useCheckForm.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{CheckMessagingSchema as f,DefaultCheckDetailsSchema as u,ManualCheckDetailsSchema as S,parseFactRef as d}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as o}from"lodash";import{z as e}from"zod";import{baseFiltersSchema as E,refineFilters as h,EXCLUDE_WITHOUT_INCLUDE_FILTERS_MESSAGE as y,ensureNoEmptyFilterBlocks as b,EMPTY_FILTER_BLOCKS_MESSAGE as g,ensureNoConflictingFilters as O,CONFLICTING_FILTER_ERROR_MESSAGE as R,FrequencySchema as C}from"../../../utils/validation.esm.js";import{ExpressionType as r}from"../types/ExpressionType.esm.js";import"../../Frequency/types.esm.js";import"../../Frequency/util.esm.js";import"../../Frequency/FrequencyComponent.esm.js";import"../types/Path.esm.js";const a=t=>{try{return d(t),!0}catch{return"Invalid fact reference. [source]:[scope]/[name]."}},F=100,n=async t=>{if(!await a(t))throw new Error("Fact reference validation failed");return t},s=e.union([e.string().min(1,"Required"),e.number(),e.boolean()]),c=e.lazy(()=>e.strictObject({factRef:e.string().refine(n,{message:"Valid format: [source]:[scope]/[name]"}),path:e.string().min(1,"Required"),operator:e.string().min(1,"Required"),operatorPrefix:e.string().optional().nullable(),value:s.or(e.array(s).min(1,"Required")).or(e.strictObject({factRef:e.string().refine(n,{message:"Valid format: [source]:[scope]/[name]"}),path:e.string().min(1,"Required")})),conditions:e.array(c).optional()})),i=e.lazy(()=>e.strictObject({expressionType:e.enum([r.AllOf,r.AnyOf,r.Not]).optional(),expressions:e.array(i).optional(),conditions:e.array(c).optional()}).refine(({expressions:t,conditions:m})=>!o(t)||!o(m),"Must contain either a condition or an expression.")),_=e.strictObject({expressions:i,pathResolver:e.string().optional()}).merge(f),l=e.lazy(()=>e.strictObject({applicabilityExpressions:i.optional(),notApplicableMessage:e.string().optional()}).merge(E).refine(h,y).refine(b,g).refine(O,R)),M=e.strictObject({enabled:e.boolean(),frequency:C}),p=e.strictObject({schedule:M.optional()}),T=e.strictObject({detailsStep:u,rulesStep:_,filtersStep:l,scheduleStep:p}),j=e.strictObject({detailsStep:S,rulesStep:e.any(),filtersStep:l,scheduleStep:p});export{F as CHECK_NAME_MAX_LENGTH,T as defaultCheckFormSchema,j as manualCheckFormSchema,a as validateFactRef};
|
|
1
|
+
import{CheckMessagingSchema as f,DefaultCheckDetailsSchema as u,ManualCheckDetailsSchema as S,parseFactRef as d}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as o}from"lodash";import{z as e}from"zod/v3";import{baseFiltersSchema as E,refineFilters as h,EXCLUDE_WITHOUT_INCLUDE_FILTERS_MESSAGE as y,ensureNoEmptyFilterBlocks as b,EMPTY_FILTER_BLOCKS_MESSAGE as g,ensureNoConflictingFilters as O,CONFLICTING_FILTER_ERROR_MESSAGE as R,FrequencySchema as C}from"../../../utils/validation.esm.js";import{ExpressionType as r}from"../types/ExpressionType.esm.js";import"../../Frequency/types.esm.js";import"../../Frequency/util.esm.js";import"../../Frequency/FrequencyComponent.esm.js";import"../types/Path.esm.js";const a=t=>{try{return d(t),!0}catch{return"Invalid fact reference. [source]:[scope]/[name]."}},F=100,n=async t=>{if(!await a(t))throw new Error("Fact reference validation failed");return t},s=e.union([e.string().min(1,"Required"),e.number(),e.boolean()]),c=e.lazy(()=>e.strictObject({factRef:e.string().refine(n,{message:"Valid format: [source]:[scope]/[name]"}),path:e.string().min(1,"Required"),operator:e.string().min(1,"Required"),operatorPrefix:e.string().optional().nullable(),value:s.or(e.array(s).min(1,"Required")).or(e.strictObject({factRef:e.string().refine(n,{message:"Valid format: [source]:[scope]/[name]"}),path:e.string().min(1,"Required")})),conditions:e.array(c).optional()})),i=e.lazy(()=>e.strictObject({expressionType:e.enum([r.AllOf,r.AnyOf,r.Not]).optional(),expressions:e.array(i).optional(),conditions:e.array(c).optional()}).refine(({expressions:t,conditions:m})=>!o(t)||!o(m),"Must contain either a condition or an expression.")),_=e.strictObject({expressions:i,pathResolver:e.string().optional()}).merge(f),l=e.lazy(()=>e.strictObject({applicabilityExpressions:i.optional(),notApplicableMessage:e.string().optional()}).merge(E).refine(h,y).refine(b,g).refine(O,R)),M=e.strictObject({enabled:e.boolean(),frequency:C}),p=e.strictObject({schedule:M.optional()}),T=e.strictObject({detailsStep:u,rulesStep:_,filtersStep:l,scheduleStep:p}),j=e.strictObject({detailsStep:S,rulesStep:e.any(),filtersStep:l,scheduleStep:p});export{F as CHECK_NAME_MAX_LENGTH,T as defaultCheckFormSchema,j as manualCheckFormSchema,a as validateFactRef};
|
|
2
2
|
//# sourceMappingURL=validation.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),D=l(o=>({root:{color:o.palette.text.primary}}))(T),E=l(o=>({root:{color:o.palette.text.disabled}}))(m),I=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(D,{...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(E,{...i}),tooltip:e}):o===n.Exempt?t(r,{icon:t(I,{...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{jsxs as d,Fragment as h,jsx as o}from"react/jsx-runtime";import{useRouteRef as m}from"@backstage/core-plugin-api";import{usePermission as f}from"@backstage/plugin-permission-react";import{HeaderPage as k}from"@backstage/ui";import{soundcheckCheckUpdatePermission as l}from"@spotify/backstage-plugin-soundcheck-common";import{useParams as u}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import{CheckFormProvider as g}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useCheck as C}from"../../hooks/checks/useCheck.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{checkDetailsRouteRef as P,checksPageRouteRef as R}from"../../routes.esm.js";import{DocLinkButton as b}from"../DocLinkButton/DocLinkButton.esm.js";import{LoadingIndicator as E}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as w}from"../PageWarningMessage/PageWarningMessage.esm.js";import{CheckEditView as I}from"./CheckEditView.esm.js";const x=()=>{const{checkId:
|
|
1
|
+
import{jsxs as d,Fragment as h,jsx as o}from"react/jsx-runtime";import{useRouteRef as m}from"@backstage/core-plugin-api";import{usePermission as f}from"@backstage/plugin-permission-react";import{HeaderPage as k}from"@backstage/ui";import{soundcheckCheckUpdatePermission as l}from"@spotify/backstage-plugin-soundcheck-common";import{useParams as u}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import{CheckFormProvider as g}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useCheck as C}from"../../hooks/checks/useCheck.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{checkDetailsRouteRef as P,checksPageRouteRef as R}from"../../routes.esm.js";import{DocLinkButton as b}from"../DocLinkButton/DocLinkButton.esm.js";import{LoadingIndicator as E}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as w}from"../PageWarningMessage/PageWarningMessage.esm.js";import{CheckEditView as I}from"./CheckEditView.esm.js";const x=()=>{const{checkId:r}=u(),{data:e,isLoading:c}=C(r),{loading:s,allowed:p}=f({permission:l,resourceRef:r}),t=s||c,i=p&&e?.isEditable,a=m(P),n=m(R);return d(h,{children:[o(k,{title:`Edit ${e?.name??r??"Check"}`,breadcrumbs:[{label:"All Checks",href:n()},{label:"Details",href:a({checkId:r??""})}],customActions:o(b,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks/"})}),o(w,{entityName:"check",entityId:r,showCannotEdit:!t&&!i,showNotFound:!t&&!e}),t&&o(E,{}),o(g,{children:!t&&!!e&&i&&o(I,{check:e})})]})};export{x as CheckEditPage};
|
|
2
2
|
//# sourceMappingURL=CheckEditPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as d}from"react/jsx-runtime";import{useEffect as i}from"react";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as m}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";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"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as u}from"../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCheck as f}from"../../hooks/checks/useUpdateCheck.esm.js";import{checksPageRouteRef as h}from"../../routes.esm.js";import{CheckForm as g}from"../CheckForm/CheckForm.esm.js";import"../CheckForm/Steps/CheckDetailsStep.esm.js";import"../CheckForm/Steps/CheckRulesStep.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as l}from"../SoundcheckHeader/useHeader.esm.js";const C=({check:t})=>{const{selectedItem:c,setSelectedItem:o}=m(),{setIsLoading:e}=m(),{mutateAsync:p,isLoading:r}=f();i(()=>{e(r)},[e,r]),i(()=>{o(t)},[t,o]);const[s,a]=u(h),n=async k=>{await p(k,{onSuccess:a})};return l({title:"Edit a Check",description:"Make changes to your check\u2019s facts, rules and other details.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),c&&d(g,{onClose:s,onSave:n})};export{C as CheckEditView};
|
|
1
|
+
import{jsx as d}from"react/jsx-runtime";import{useEffect as i}from"react";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as m}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";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"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as u}from"../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCheck as f}from"../../hooks/checks/useUpdateCheck.esm.js";import{checksPageRouteRef as h}from"../../routes.esm.js";import{CheckForm as g}from"../CheckForm/CheckForm.esm.js";import"../CheckForm/Steps/CheckDetailsStep.esm.js";import"../CheckForm/Steps/CheckRulesStep.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as l}from"../SoundcheckHeader/useHeader.esm.js";const C=({check:t})=>{const{selectedItem:c,setSelectedItem:o}=m(),{setIsLoading:e}=m(),{mutateAsync:p,isLoading:r}=f();i(()=>{e(r)},[e,r]),i(()=>{o(t)},[t,o]);const[s,a]=u(h),n=async k=>{await p(k,{onSuccess:a})};return l({title:"Edit a Check",description:"Make changes to your check\u2019s facts, rules and other details.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),c&&d(g,{onClose:s,onSave:n})};export{C as CheckEditView};
|
|
2
2
|
//# sourceMappingURL=CheckEditView.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as
|
|
1
|
+
import{jsx as t,jsxs as h,Fragment as ie}from"react/jsx-runtime";import{stringifyEntityRef as P,parseEntityRef as oe,RELATION_OWNED_BY as re,RELATION_PART_OF as ne}from"@backstage/catalog-model";import{useRouteRef as ae}from"@backstage/core-plugin-api";import{entityRouteRef as se,useEntityPresentation as ce,getEntityRelations as j,humanizeEntityRef as U}from"@backstage/plugin-catalog-react";import{TableRoot as le,TableHeader as de,Column as d,TableBody as pe,TablePagination as fe,Row as me,Flex as ge,CellText as y,CellProfile as ye}from"@backstage/ui";import{RiCheckLine as ue,RiCloseLine as he,RiAlertLine as Ie,RiErrorWarningFill as we,RiProhibitedLine as ke,RiIndeterminateCircleLine as Se,RiInformationOffLine as Ee}from"@remixicon/react";import{compact as Re,uniq as be,startCase as Ce}from"lodash";import{useState as v,useEffect as W,useMemo as L,useCallback as A}from"react";import{useNavigate as Pe}from"react-router-dom";import{ResultState as p,CheckEntityField as f,Direction as s}from"../../../graphql/generated/index.esm.js";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{DEFAULT_PAGE_SIZE as $}from"../../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as ve}from"../../../hooks/useSortSearchParams.esm.js";import"react-use/lib/useAsync";import"../../ChecksTable/utils.esm.js";import"react-use/lib/useAsyncRetry";import{useEntitiesByRefs as Le}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useProfileImages as Ae}from"../../../hooks/catalog/useProfileImages.esm.js";import{useCheckEntities as Te}from"../../../hooks/entities/useCheckEntities.esm.js";import{CustomCell as Ne}from"../../CustomCell/CustomCell.esm.js";import"../../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as ze}from"../../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"../../../routes.esm.js";import{LoadingTableSkeleton as Be}from"../../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{toResultState as K}from"../utils.esm.js";import{toCheckEntityRow as De}from"./utils.esm.js";const xe=["kind","metadata.name","metadata.namespace","spec.profile.displayName","metadata.title","relations","spec.lifecycle","spec.type"],Oe={[p.Passed]:t(ue,{style:{color:"var(--bui-fg-success)"}}),[p.Failed]:t(he,{style:{color:"var(--bui-fg-danger)"}}),[p.Warning]:t(Ie,{}),[p.Error]:t(we,{}),[p.Exempt]:t(ke,{style:{color:"var(--bui-fg-disabled)"}}),[p.NotReported]:t(Se,{style:{color:"var(--bui-fg-disabled)"}}),[p.NotApplicable]:t(Ee,{style:{color:"var(--bui-fg-disabled)"}})},T={name:f.Name,owner:f.Owner,system:f.System,type:f.Type,lifecycle:f.Lifecycle},Fe=({checkId:I,trackId:m,filter:w,states:k})=>{const{updateSortParams:N,searchParams:g}=ve(),[S,z]=v(()=>{const e=g.get("sortDirection");return e==="ascending"?s.Asc:e==="descending"?s.Desc:s.Asc}),[u,B]=v(()=>{const e=g.get("sort");return e&&T[e]?e:"name"}),M=S===s.Asc?"ascending":"descending",[i,D]=v({orderBy:void 0,filter:w,states:k?.map(K).filter(e=>e!==void 0),pageInfo:{page:0,pageSize:$,direction:"forward",cursor:null}});W(()=>{const e=g.get("sortDirection");(e==="ascending"||e==="descending")&&z(e==="ascending"?s.Asc:s.Desc);const o=g.get("sort");o&&T[o]&&B(o)},[g]),W(()=>{let e;u?e={field:T[u]??f.Name,direction:S}:e=void 0,D(o=>({...o,orderBy:e,pageInfo:{...o.pageInfo,page:0,cursor:null},filter:w,states:k?.map(K).filter(a=>a!==void 0)}))},[w,k,u,S]);const{data:n,isLoading:q}=Te({checkId:I,trackId:m,orderBy:i.orderBy,filter:i.filter,states:i.states?.length?i.states:void 0,[i.pageInfo.direction==="forward"?"first":"last"]:i.pageInfo.pageSize,[i.pageInfo.direction==="forward"?"after":"before"]:i.pageInfo.cursor}),G=n?.checkEntities.edges.map(e=>e.node.entityRef)??[],{data:E,isLoading:H}=Le({entityRefs:G,fields:xe}),Y=L(()=>n?.checkEntities.edges??[],[n]),R=L(()=>n?.checkEntities.totalCount??0,[n]),Z=R>$,b=A((e,o)=>{const a=e>i.pageInfo.page?"forward":"backward",C=a==="forward"?n?.checkEntities.pageInfo.endCursor??null:n?.checkEntities.pageInfo.startCursor??null;D({...i,pageInfo:{page:e,pageSize:o,direction:a,cursor:C}})},[n,i]),J=A(({direction:e,column:o})=>{B(String(o)),z(e==="ascending"?s.Desc:s.Asc),N({sort:String(o),sortDirection:e})},[N]),x=L(()=>!n?.checkEntities.edges?.length||!E?.items?.length?[]:Re(n.checkEntities.edges.map(e=>{const o=E.items.find(a=>!!a&&P(a)===e.node.entityRef);return o?De({checkDetails:e.node,entity:o}):void 0})),[n?.checkEntities.edges,E?.items]),V=({row:e})=>{const o=Pe(),a=ae(se),C=A(r=>{const c=oe(P(r));let l=`${a(c)}/soundcheck`;m&&I?l+=`/tracks/${m}/checks/${I}`:m&&(l+=`/tracks/${m}`),o(l)},[o,a]),{primaryTitle:O}=ce(P(e.entity)),X=j(e.entity,re).map(r=>U(r,{defaultKind:r.kind})).join(", "),Q=j(e.entity,ne,{kind:"system"}).map(r=>U(r,{defaultKind:"system"})).join(", "),ee=be(x.flatMap(r=>r.entity.relations?.filter(({type:c,targetRef:l})=>c==="ownedBy"&&l).map(c=>c.targetRef)||[])),{profileImageMap:te}=Ae(ee),F=e.entity.relations?.find(({type:r})=>r==="ownedBy")?.targetRef;let _;return F&&(_=te?.[F]),h(me,{onAction:()=>C(e.entity),children:[t(Ne,{children:t(ge,{children:(r=>{const c=Oe[r],l=Ce(r.toLowerCase());return t("span",{title:l,children:c})})(e.state)})}),t(y,{title:O}),t(y,{title:Q}),t(y,{title:e.entity.spec?.type}),t(y,{title:e.entity.spec?.lifecycle}),t(y,{title:e.entity.kind.toLowerCase()}),t(ye,{name:X,src:_??O})]},e.id)};return q||H?t(Be,{}):Y.length?h(ie,{children:[h(le,{onSortChange:J,sortDescriptor:{direction:M,column:u},children:[h(de,{children:[t(d,{id:"state",style:{width:"5%"}}),t(d,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"32%"},children:"Name"}),t(d,{id:"system",allowsSorting:!0,style:{width:"18%"},children:"System"}),t(d,{id:"type",allowsSorting:!0,style:{width:"10%"},children:"Type"}),t(d,{id:"lifecycle",allowsSorting:!0,style:{width:"10%"},children:"Lifecycle"}),t(d,{id:"kind",allowsSorting:!0,style:{width:"10%"},children:"Kind"}),t(d,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Owner"})]}),t(pe,{children:x.map(e=>t(V,{row:e},e.id))})]}),Z&&t(fe,{showPageSizeOptions:!0,totalCount:R,pageSize:i.pageInfo.pageSize,offset:i.pageInfo.page*i.pageInfo.pageSize,onPreviousPage:()=>{const e=i.pageInfo.page-1;b(e,i.pageInfo.pageSize)},onNextPage:()=>{const e=i.pageInfo.page+1;b(e,i.pageInfo.pageSize)},onPageSizeChange:e=>{b(i.pageInfo.page,e)},hasNextPage:(i.pageInfo.page+1)*i.pageInfo.pageSize<R,hasPreviousPage:i.pageInfo.page>0})]}):t(ze,{title:"No check entities found",body:"There are no check entities found."})};export{Fe as CheckEntitiesTableBUI};
|
|
2
2
|
//# sourceMappingURL=CheckEntitiesTableBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as t,jsxs as m,Fragment as K}from"react/jsx-runtime";import{useRouteRef as A,useApi as Se,configApiRef as Ie}from"@backstage/core-plugin-api";import{usePermission as ye}from"@backstage/plugin-permission-react";import{Container as z,HeaderPage as Ee,Flex as R,Box as F}from"@backstage/ui";import{makeStyles as Te}from"@material-ui/core";import{toEntityFilterQuery as L,combineEntityFilterQueries as G,soundcheckCheckReadPermission as be}from"@spotify/backstage-plugin-soundcheck-common";import{useState as M,useMemo as a,useEffect as ve}from"react";import{useSearchParams as Ce,useParams as Ne}from"react-router-dom";import Pe from"react-use/lib/useDebounce";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useCheck as we}from"../../hooks/checks/useCheck.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useTrack as Ae}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCheckStatus as Re}from"../../hooks/aggregations/useCheckStatus.esm.js";import"react-use/lib/useLocalStorage";import{useFixMe as Fe}from"../../hooks/fixMe/useFixMe.esm.js";import"react-use/lib/useAsyncRetry";import{useEntityPrimaryTitle as Le}from"../../hooks/catalog/useEntityPrimaryTitle.esm.js";import{useFilters as Me}from"../../hooks/filters/useFilters.esm.js";import{useChipScopedUrlState as xe}from"../../hooks/useChipScopedUrlState.esm.js";import{useLCPReporting as Ue}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as je}from"../../hooks/useLoadTimeReporting.esm.js";import{trackDetailsRouteRef as Oe,checksPageRouteRef as Be,tracksPageRouteRef as De}from"../../routes.esm.js";import"../../utils/facetFilters/types.esm.js";import{parseNumberOfDays as qe}from"../../utils/facetFilters/utils.esm.js";import{Alert as Ve}from"../Alert/Alert.esm.js";import{DescriptionCard as Ye}from"../Cards/DescriptionCard/DescriptionCard.esm.js";import"../Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js";import"../Cards/TrackStatusCard/TrackStatusCard.esm.js";import{CheckStatusCard as Xe}from"../Cards/CheckStatusCard/CheckStatusCard.esm.js";import{HistoricalCheckStatusCard as Qe}from"../Cards/HistoricalCheckStatusCard/HistoricalCheckStatusCard.esm.js";import{ChipSelector as He}from"../ChipSelector/ChipSelector.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as x}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import"lodash";import{toFilter as $e}from"../FilterSidebar/util.esm.js";import{FixMeButton as Ke}from"../FixMeButton/FixMeButton.esm.js";import{LoadingTableSkeleton as ze}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as Ge}from"../Menus/SimpleMenu.esm.js";import{useCheckActions as Je}from"../Menus/useCheckActions.esm.js";import{PageCustomActions as We}from"../PageCustomActions/PageCustomActions.esm.js";import{ViewPullRequests as Ze}from"../ViewPullRequests/ViewPullRequests.esm.js";import{CheckEntitiesTableBUI as _e}from"./CheckEntitiesTable/CheckEntitiesTableBUI.esm.js";import{ExemptionsTableBUI as et}from"./ExemptionsTableBUI.esm.js";const tt=Te(()=>({container:{marginBottom:"var(--bui-space-12)"},tables:{margin:"var(--bui-space-12) 0 0"},tableContent:{margin:"var(--bui-space-3) 0 0"}})),s={ENTITIES:"Entities",EXEMPTIONS:"Exemptions"},J={entities:s.ENTITIES,exemptions:s.EXEMPTIONS},it={[s.ENTITIES]:"entities",[s.EXEMPTIONS]:"exemptions"},rt="entities",ot=(d,e)=>d.levels.flatMap(({checks:p})=>p).find(({id:p})=>p===e)||null,st=()=>{const d=tt(),[e,p]=Ce(),{trackId:o,checkId:i}=Ne(),{data:c,isLoading:g,isError:W}=Ae(o),{data:h,isLoading:u,isError:Z}=we(i),U=Je(h??void 0),_=A(Oe),ee=A(Be),te=A(De),ie=Le(h?.ownerEntityRef??void 0),[j,re]=M(()=>{const r=e.get("section"),w=r?J[r]:null;return new Set([w??s.ENTITIES])}),b=j.values().next().value??s.ENTITIES,[f,O]=M(e.get("search")||""),[B,oe]=M(""),{handleSectionChange:se}=xe({searchParams:e,setSearchParams:p,sectionParamToSection:J,sectionToParam:it,defaultSectionParam:rt,defaultSection:s.ENTITIES,pageFiltersStorageKey:"check-page-filters",pageSearchParamsStorageKey:"check-overview-search-params",setSectionSelection:re,setSearchValue:O}),l=a(()=>e.getAll("states"),[e]),k=a(()=>e.getAll("owners"),[e]),S=a(()=>e.getAll("lifecycles"),[e]),I=a(()=>e.getAll("types"),[e]),y=a(()=>e.getAll("systems"),[e]),E=a(()=>e.getAll("kinds"),[e]),D=Se(Ie).getOptionalNumber("soundcheck.certifications.history.retentionTimeInDays"),v=a(()=>qe(e.get("numberOfDays"),D),[e,D]);Pe(()=>{oe(f);const r=new URLSearchParams(e.toString());f?r.set("search",f):r.delete("search"),p(r,{replace:!0})},300,[f]);const q=a(()=>({routeName:"soundcheck-check-insights",additionalAttributes:{checkId:i||"",trackId:o||"",filtersApplied:k.length+S.length+I.length+y.length+E.length+l.length,ownersFilter:k.join(",")||"",lifecyclesFilter:S.join(",")||"",typesFilter:I.join(",")||"",systemsFilter:y.join(",")||"",kindsFilter:E.join(",")||"",statesFilter:l.join(",")||"",numberOfDays:v,checkSearch:B}}),[i,o,k,S,I,y,E,l,v,B]),{reportContentLoaded:V}=je(q),{reporter:ae}=Ue(q),n=a(()=>h??c?.levels.flatMap(r=>r.checks).find(r=>r.id===i),[h,i,c?.levels]),C=$e({lifecycles:S,owners:k,types:I,systems:y,kinds:E}),{data:N,isLoading:P,isError:ne}=Re({checkId:i,trackId:o,filter:C,states:l?.length?l:void 0},!!i),{showFixMeButton:ce,hasShift:le,pullRequests:Y,href:me}=Fe({type:h?.type,rule:h?.rule,checkStatus:N,checkId:i??"",checkName:n?.name??""});let T;if(i)if(c){const r=L(c.filter),w=L(ot(c,i)?.filter);T=G(r,w)}else n?.filter&&(T=L(n.filter));const he=G(T,C),{loading:X,allowed:Q}=ye({permission:be,resourceRef:i}),de=a(()=>!!n&&!X&&!Q,[Q,n,X]),{filters:pe,selected:fe,setSelected:ue,onRemoveTag:ge,selectedTags:ke}=Me({entityFilterQuery:T,hasStatusFilters:!0}),H=W||Z||ne,$=ae?.getLCPValue();return ve(()=>{!u&&!P&&(!o||!g)&&V({lcp:$})},[u,P,g,o,V,$]),u||o&&g?t(ze,{}):!u&&!n?t(z,{className:d.container,children:t(x,{title:"Check not found",body:`There is no check with the requested id: ${i}.`})}):de?t(x,{title:"Cannot view check",body:`No permission to view check with the requested id: ${i}.`}):o&&!g&&!c?t(x,{title:"No track found",body:`There is no track with the requested id: ${o}.`}):m(K,{children:[t(Ee,{title:n?.name??"",breadcrumbs:o?[{label:"Tracks",href:te()},{label:c?.name??"Track",href:_({trackId:o})}]:[{label:"Checks",href:ee()}],customActions:t(Ge,{label:"Check Actions",disabled:!U.length,placement:"left top",menuActions:U})}),m(z,{className:d.container,children:[h?.isDefinedInYamlAndNcui&&t(Ve,{variant:"warning",title:"This check is defined in both YAML and the No-Code UI",children:'The No-Code UI version is currently active and overrides all YAML fields \u2014 any changes to your YAML configuration will have no effect while this override exists. Use "Remove No-Code UI version" in the Actions menu to delete the override and restore the YAML definition. Alternatively, if you want to keep the NCUI version, you can delete the YAML definition which will remove this warning.'}),m(R,{children:[t(Ye,{description:n?.description??void 0,owner:ie,isError:H,isLoading:u}),t(Xe,{states:l,status:N,isLoading:P,isError:H}),t(Qe,{checkId:i,trackId:o,filter:C,states:l,checkStatus:N,numberOfDays:v})]}),m(F,{className:d.tables,children:[m(R,{justify:"between",children:[t(F,{minWidth:"12rem",children:t(He,{options:Object.values(s),selected:j,ariaLabel:"Sections",onSelectionChange:se})}),m(R,{children:[ce&&m(K,{children:[Y.length>0&&t(Ze,{checkName:n?.name,pullRequests:Y}),t(Ke,{hasShift:le,href:me})]}),t(We,{searchValue:f,setSearchValue:r=>O(r),filters:pe,selected:fe,setSelected:ue,onRemoveTag:ge,selectedTags:ke,showSearch:b!==s.ENTITIES})]})]}),m(F,{className:d.tableContent,children:[b===s.ENTITIES&&t(_e,{checkId:i,trackId:c?.id,filter:he,states:l}),b===s.EXEMPTIONS&&t(et,{checkId:i,searchValue:f})]})]})]})]})};export{st as CheckPageBUI};
|
|
2
2
|
//# sourceMappingURL=CheckPageBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as i,jsxs as l,Fragment as I}from"react/jsx-runtime";import{parseEntityRef as n}from"@backstage/catalog-model";import{useRouteRef as
|
|
1
|
+
import{jsx as i,jsxs as l,Fragment as I}from"react/jsx-runtime";import{parseEntityRef as n}from"@backstage/catalog-model";import{useRouteRef as U,useApi as W}from"@backstage/core-plugin-api";import{entityRouteRef as D,entityPresentationApiRef as F}from"@backstage/plugin-catalog-react";import{TableRoot as $,TableHeader as H,Column as f,TableBody as M,Row as O,CellText as P,TooltipTrigger as G,Button as J,Tooltip as V,TablePagination as Z}from"@backstage/ui";import{makeStyles as q}from"@material-ui/core";import{useState as k,useMemo as p,useCallback as K}from"react";import{useNavigate as Q}from"react-router-dom";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePagination as X,DEFAULT_PAGE_SIZE as T}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useExemptions as Y}from"../../hooks/exemptions/useExemptions.esm.js";import{formatTimestamp as ee}from"../../utils/time.esm.js";import{CustomCell as te}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as j}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"../../routes.esm.js";import{LoadingTableSkeleton as ie}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";const oe=q(u=>({justificationCell:{overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",whiteSpace:"pre-line",wordBreak:"break-word",fontWeight:"normal",textAlign:"left",background:"none !important",padding:0},emptyStateWrapper:{padding:u.spacing(2)}})),re=({checkId:u,searchValue:g})=>{const E=oe(),x=Q(),S=U(D),[c,v]=k("ascending"),[h,R]=k("entity"),{data:d,isLoading:z,error:A}=Y(u),y=p(()=>d?.totalCount??0,[d]),w=p(()=>d?.edges??[],[d]),B=K(t=>{const e=n(t),o=S(e);x(`${o}/soundcheck`)},[x,S]),m=p(()=>{const t=(e,o)=>e<o?c==="ascending"?-1:1:e>o?c==="ascending"?1:-1:0;return[...w].sort((e,o)=>{const a=e.node,s=o.node;switch(h){case"entity":return t(n(a.entity_ref).name,n(s.entity_ref).name);case"justification":return t(a.justification??"",s.justification??"");case"user":return t(n(a.user_ref).name,n(s.user_ref).name);case"date":return t(a.timestamp,s.timestamp);default:return 0}})},[w,h,c]),b=W(F),C=p(()=>{const t=new Map;for(const{node:e}of m){const o=b.forEntity(e.entity_ref)?.snapshot?.primaryTitle;o&&t.set(e.entity_ref,o)}return t},[m,b]),_=p(()=>{if(!g?.length)return m;const t=g.toLowerCase().trim();return m.filter(({node:e})=>C.get(e.entity_ref)?.toLowerCase().includes(t))},[m,g,C]),L=y>T,{paginatedItems:N,paginationProps:r}=X({pageParam:"perPage",defaultPageSize:T,items:_});return z?i(ie,{}):A?i(j,{title:"Exemptions failed",body:"Failed to load exemptions."}):!w.length||!_.length?i(j,{title:"No check exemptions found",body:"There are no check exemptions found."}):l(I,{children:[l($,{onSortChange:({direction:t,column:e})=>{R(e),v(t)},sortDescriptor:{direction:c,column:h},children:[l(H,{children:[i(f,{id:"entity",allowsSorting:!0,isRowHeader:!0,style:{width:"35%"},children:"Entity"}),i(f,{id:"justification",style:{width:"40%"},children:"Justification"}),i(f,{id:"user",allowsSorting:!0,style:{width:"15%"},children:"User"}),i(f,{id:"date",allowsSorting:!0,style:{width:"10%"},children:"Date"})]}),i(M,{children:N.map(t=>{const e=t.node,o=ee(e.timestamp),a=n(e.user_ref),s=n(e.entity_ref);return l(O,{onAction:()=>B(e.entity_ref),children:[i(P,{title:s.name}),i(te,{children:l(G,{children:[i(J,{variant:"tertiary",className:E.justificationCell,children:e.justification}),i(V,{children:e.justification})]})}),i(P,{title:a.name}),i(P,{title:o})]},`${e.entity_ref}-${e.check_id}`)})})]}),L&&i(Z,{totalCount:y,offset:r.offset,hasNextPage:r.offset+r.pageSize<y,hasPreviousPage:r.offset>0,onNextPage:r.onNextPage,onPreviousPage:r.onPreviousPage,onPageSizeChange:r.onPageSizeChange,pageSize:r.pageSize})]})};export{re as ExemptionsTableBUI};
|
|
2
2
|
//# sourceMappingURL=ExemptionsTableBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ResultState as t}from"../../graphql/generated/index.esm.js";const e={PASSED:"PASSED",FAILED:"FAILED",WARNING:"WARNING",EXEMPT:"EXEMPT",NOT_APPLICABLE:"NOT_APPLICABLE",NOT_REPORTED:"NOT_REPORTED",ERROR:"ERROR"},r={PASSED:"passed",FAILED:"failed",WARNING:"warning",EXEMPT:"exempt",ERROR:"error",NOT_APPLICABLE:"notApplicable",NOT_REPORTED:"notReported"},R=E=>{switch(E){case e.PASSED:return t.Passed;case e.FAILED:return t.Failed;case e.WARNING:return t.Warning;case e.NOT_APPLICABLE:return t.NotApplicable;case e.NOT_REPORTED:return t.NotReported;case e.EXEMPT:return t.Exempt;case e.ERROR:return t.Error;default:return}};function A(E){return E?E.numberOfEntities-E.
|
|
1
|
+
import{ResultState as t}from"../../graphql/generated/index.esm.js";const e={PASSED:"PASSED",FAILED:"FAILED",WARNING:"WARNING",EXEMPT:"EXEMPT",NOT_APPLICABLE:"NOT_APPLICABLE",NOT_REPORTED:"NOT_REPORTED",ERROR:"ERROR"},r={PASSED:"passed",FAILED:"failed",WARNING:"warning",EXEMPT:"exempt",ERROR:"error",NOT_APPLICABLE:"notApplicable",NOT_REPORTED:"notReported"},R=E=>{switch(E){case e.PASSED:return t.Passed;case e.FAILED:return t.Failed;case e.WARNING:return t.Warning;case e.NOT_APPLICABLE:return t.NotApplicable;case e.NOT_REPORTED:return t.NotReported;case e.EXEMPT:return t.Exempt;case e.ERROR:return t.Error;default:return}};function A(E){return E?E.numberOfEntities-E.exempt:0}export{e as CheckState,r as CheckStateCategories,A as getApplicableEntitiesCount,R as toResultState};
|
|
2
2
|
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as n,Fragment as B,jsx as o}from"react/jsx-runtime";import{makeStyles as E,Box as i,Checkbox as N,Typography as O,FormHelperText as A,Tooltip as L,Button as z}from"@material-ui/core";import R from"@material-ui/icons/CheckCircleOutlined";import P from"@material-ui/icons/InfoOutlined";import{isEmpty as j,last as D,difference as F}from"lodash";import{useContext as v,useMemo as g}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import{useGetChecks as G}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{ControlledAutocomplete as M}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{CheckPreviewContext as S}from"./CheckPreviewContext.esm.js";const
|
|
1
|
+
import{jsxs as n,Fragment as B,jsx as o}from"react/jsx-runtime";import{makeStyles as E,Box as i,Checkbox as N,Typography as O,FormHelperText as A,Tooltip as L,Button as z}from"@material-ui/core";import R from"@material-ui/icons/CheckCircleOutlined";import P from"@material-ui/icons/InfoOutlined";import{isEmpty as j,last as D,difference as F}from"lodash";import{useContext as v,useMemo as g}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import{useGetChecks as G}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{ControlledAutocomplete as M}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{CheckPreviewContext as S}from"./CheckPreviewContext.esm.js";const w=E(e=>({checkSelectCard:{padding:e.spacing(1,2),border:`1px solid ${e.palette.divider}`,borderRadius:e.spacing(.25),"&:hover":{cursor:"pointer"},display:"flex",alignItems:"center",background:e.palette.background.default,minWidth:200},selectedCard:{border:`1px solid ${e.palette.border}`},selectedIcon:{color:e.palette.text.secondary},checkCardInfo:{textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"},selectArea:{display:"flex",flexDirection:"column",gap:e.spacing(.75)},removeButton:{margin:0,marginLeft:e.spacing(1),padding:0,color:e.palette.text.primary},wrapper:{padding:e.spacing(1),border:`1px solid ${e.palette.divider}`,borderRadius:e.spacing(1)},wrapperError:{border:`1px solid ${e.palette.error.main}`},checkSearch:{background:e.palette.background.paper}})),H=({check:e,removeCheck:f,isExternal:p})=>{const c=w(),{updateCheck:k,check:x}=v(S),d=e&&x?.id===e.id;return e?n(i,{className:`${c.checkSelectCard} ${d?c.selectedCard:""}`,onClick:()=>k(e),children:[o(R,{className:d?c.selectedIcon:"",fontSize:"small"}),o(i,{className:c.checkCardInfo,flex:1,marginLeft:2,children:e.name}),p&&o(i,{display:"flex",alignItems:"center",marginRight:1,children:o(L,{title:"Externally submitted check",placement:"top",arrow:!0,children:o(P,{fontSize:"small",color:"action",style:{cursor:"help"}})})}),!p&&o(z,{onClick:l=>{l.stopPropagation(),f(e.id)},className:c.removeButton,variant:"text",size:"small","aria-label":`remove check ${e.id}`,children:"Remove"})]}):null},U=({currentSectionCheckIds:e,addCheckToSelection:f,removeCheck:p,error:c,helperText:k,blankText:x,selectedChecks:d})=>{const l=w(),{data:b,isLoading:y}=G({ids:void 0}),{updateCheck:I}=v(S),u=g(()=>b?.edges.map(r=>r.node)??[],[b]),s=g(()=>new Set(u.map(r=>r.id)),[u]),m=g(()=>{const r=(d??[]).filter(t=>!s.has(t.id)).map(t=>({...t,description:t.description??""}));return[...u,...r]},[u,s,d]),C=g(()=>new Map(m.map(r=>[r.id,r])),[m]),$=g(()=>m.map(r=>r.id)??[],[m]),T=r=>{if(r.length>e.length){const t=D(r),a=m.find(h=>h.id===t);f(a),a&&I(a)}if(r.length<e.length){const t=F(e,r)?.[0];t&&p(t)}};return n(B,{children:[n(i,{className:`${l.wrapper} ${c?l.wrapperError:""}`,children:[o(i,{className:l.checkSearch,marginBottom:1,children:o(M,{multiple:!0,openUpwards:!0,disableCloseOnSelect:!0,options:$,getOptionDisabled:r=>!s.has(r),renderOption:(r,{selected:t})=>{const a=C.get(r),h=!s.has(r);return n(i,{display:"flex",alignItems:"center",gridGap:4,style:{opacity:h?.5:1},children:[o(N,{checked:t,size:"small",color:"primary",disabled:h}),n(i,{children:[a?a.name:r,h&&" (External)"]})]})},getOptionLabel:r=>C.get(r)?.name??r,multipleValue:e,onChange:T,isLoading:y,placeholder:"Check Search",autoSelect:!1,testId:"check-search",getOptionSelected:(r,t)=>t.includes(r)})}),n(i,{className:l.selectArea,children:[j(e)&&o(i,{marginTop:1,marginBottom:1,textAlign:"center",children:o(O,{children:x??"Select checks from the dropdown above."})}),e.map(r=>{const t=C.get(r),a=t?!s.has(t.id):!1;return o(H,{removeCheck:p,check:t,isExternal:a},r)})]})]}),k&&o(A,{error:c,children:k})]})};export{U as CheckSelection};
|
|
2
2
|
//# sourceMappingURL=CheckSelection.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as o}from"react/jsx-runtime";import{Flex as f}from"@backstage/ui";import{makeStyles as S}from"@material-ui/core/styles";import{useMemo as m}from"react";import{getChartStatusKeys as R,calculateAdjustedBarWidths as v,getChartStatusColor as A}from"../../utils/charts.esm.js";import{CheckState as r}from"../CheckPage/utils.esm.js";const E=S(()=>({container:{gap:"var(--bui-space-1)",width:"100%"},barSegment:{height:"var(--bui-space-1_5)",borderRadius:"var(--bui-space-1)"},emptyBar:{width:"100%",background:"var(--bui-fg-disabled)"}})),y=({status:e,states:t})=>{const s=E(),n=m(()=>({passed:!t?.length||t.includes(r.PASSED)?e?.passed??0:0,failed:!t?.length||t.includes(r.FAILED)?e?.failed??0:0,warning:!t?.length||t.includes(r.WARNING)?e?.warning??0:0,error:!t?.length||t.includes(r.ERROR)?e?.error??0:0,exempt:!t?.length||t.includes(r.EXEMPT)?e?.exempt??0:0,notReported:!t?.length||t.includes(r.NOT_REPORTED)?e?.notReported??0:0,notApplicable:!t?.length||t.includes(r.NOT_APPLICABLE)?e?.notApplicable??0:0}),[e,t]),i=R(),c=i.map(a=>n[a]).filter(a=>typeof a=="number"),u=i.every(a=>(n[a]||0)===0),p=m(()=>v(c),[c]);let l;return u?l=o("div",{className:`${s.barSegment} ${s.emptyBar}`}):l=i.map((a,d)=>{const g=n[a],h=A(a)||"var(--bui-fg-disabled)",b=p[d]||0;return g<=0?null:o("div",{className:s.barSegment,style:{backgroundColor:h,width:`${b}%`}},`check-status-bar-segment-${d}`)}),o(f,{className:s.container,children:l})};export{y as CheckStatusBarBUI};
|
|
2
2
|
//# sourceMappingURL=CheckStatusBarBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as o,Fragment as
|
|
1
|
+
import{jsx as e,jsxs as o,Fragment as d}from"react/jsx-runtime";import{useRouteRef as h}from"@backstage/core-plugin-api";import{Grid as u,Link as b,Card as y,CardHeader as R,Text as m,CardBody as x,Box as B,HeaderPage as L,Container as N}from"@backstage/ui";import{makeStyles as T}from"@material-ui/core/styles";import{groupBy as P}from"lodash";import{useMemo as f,useEffect as H,Fragment as I}from"react";import{useCheckTemplates as j}from"../../hooks/checks/useCheckTemplates.esm.js";import{useLCPReporting as v}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as D}from"../../hooks/useLoadTimeReporting.esm.js";import{checkCreateRouteRef as F,checksPageRouteRef as U}from"../../routes.esm.js";import{DocLinkButton as A}from"../DocLinkButton/DocLinkButton.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as E}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react-router-dom";import{LoadingIndicator as M}from"../LoadingIndicator/LoadingIndicator.esm.js";import{TemplateCategoryBUI as S}from"./TemplateCategoryBUI.esm.js";const G=T(()=>({container:{marginBottom:"var(--bui-space-12)"},link:{textDecoration:"none"},fullHeightCard:{height:"100%",display:"flex",flexDirection:"column"}})),O=()=>{const r=G(),n=f(()=>({routeName:"soundcheck-check-templates"}),[]),{reportContentLoaded:l}=D(n),{reporter:g}=v(n),k=h(F),{data:i,isLoading:c}=j(),s=f(()=>P(i??[],"category"),[i]),p=g?.getLCPValue();H(()=>{c||l({lcp:p})},[c,l,p]);const C=h(U);let t;return c?t=e(M,{}):i?.length?t=o(d,{children:[e(u.Root,{columns:"5",gap:"3",mb:"6",children:e(b,{href:k(),className:r.link,children:o(y,{className:r.fullHeightCard,children:[e(R,{children:e(m,{variant:"body-large",style:{fontWeight:"bold"},children:"Custom Check"})}),e(x,{children:e(m,{children:"Create a custom check using the facts collected about your entities."})})]})})}),Object.keys(s).sort().map(a=>o(I,{children:[e(B,{mb:"3",children:e(m,{variant:"title-x-small",children:a})}),e(u.Root,{columns:"5",gap:"3",mb:"6",children:e(S,{templates:s[a]})})]},a))]}):t=e(E,{title:"No check templates",body:"No check templates found."}),o(d,{children:[e(L,{title:"Check Templates",breadcrumbs:[{label:"All Checks",href:C()}],customActions:e(A,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks/"})}),e(N,{className:r.container,children:t})]})};export{O as CheckTemplatesPageBUI};
|
|
2
2
|
//# sourceMappingURL=CheckTemplatesPageBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as
|
|
1
|
+
import{jsx as t,jsxs as c,Fragment as re}from"react/jsx-runtime";import{useRouteRef as F,useApi as N}from"@backstage/core-plugin-api";import{entityPresentationApiRef as oe}from"@backstage/plugin-catalog-react";import{usePermission as ie}from"@backstage/plugin-permission-react";import{HeaderPage as ne,Flex as se,Container as ae,TableRoot as me,TableHeader as ce,Column as S,TableBody as pe,TablePagination as le}from"@backstage/ui";import{makeStyles as fe}from"@material-ui/core";import{soundcheckCheckCreatePermission as de}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as he,isEmpty as k}from"lodash";import{useState as R,useMemo as p}from"react";import{useSearchParams as ge}from"react-router-dom";import ue from"react-use/lib/useDebounce";import{soundcheckApiRef as we}from"../../api.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../hooks/graphqlKeys.esm.js";import{useGetChecks as ye}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePagination as Pe,DEFAULT_PAGE_SIZE as U}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useFixMe as Se}from"../../hooks/fixMe/useFixMe.esm.js";import"react-use/lib/useAsyncRetry";import{useProfileImages as ke}from"../../hooks/catalog/useProfileImages.esm.js";import{useImportChecks as Re}from"../../hooks/checks/useImportChecks.esm.js";import{useOwnerFilterOptions as Ce,useListPageFilters as Ee}from"../../hooks/filters/useListPageFilters.esm.js";import{useSearchNameOwner as Ie}from"../../hooks/useSearchNameOwner.esm.js";import{checkTemplatesRouteRef as Te,checkDetailsRouteRef as be}from"../../routes.esm.js";import{exportChecks as xe}from"../../utils/export.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Ae}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import{EmptyStateNoChecks as Le}from"../EmptyState/EmptyStateNoChecks.esm.js";import{ImportExportPanelBUI as ve}from"../ImportExportPanel/ImportExportPanelBUI.esm.js";import{ListPageCustomActions as Fe}from"../ListPageCustomActions/ListPageCustomActions.esm.js";import{LoadingTableSkeleton as Ne}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import"../Menus/SimpleMenu.esm.js";import{useCheckActions as Ue}from"../Menus/useCheckActions.esm.js";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"uuid";import"../CampaignPage/CampaignActionsContext.esm.js";import"../CampaignsPage/useArchiveConfirmationModal.esm.js";import{TableRowWithOwner as ze}from"../TableRowWithOwner/TableRowWithOwner.esm.js";const Oe=["name","owner"],Be=({check:r,profileImageMap:s})=>{const l=F(be),i=Ue(r),{hasShift:g}=Se({checkId:r.id,checkName:r.name??""});return t(ze,{ownerEntityRef:r.ownerEntityRef??"",href:l({checkId:r.id}),profileImageSrc:s[r.ownerEntityRef??""],menuActions:i,name:r.name??r.id,description:r.description??"",cells:[],hasShift:g})},Me=fe(()=>({container:{marginBottom:"var(--bui-space-12)"}})),De=()=>{const r=Me(),[s,l]=ge(),[i,g]=R(()=>s.get("search")??""),[u,z]=R(()=>s.get("sortDirection")==="descending"?"descending":"ascending"),[m,O]=R(()=>{const e=s.get("sort");return e&&Oe.includes(e)?e:""}),{isLoading:f,data:C}=ye({}),a=p(()=>C?.edges?.map(e=>e.node)??[],[C?.edges]),{loading:E,allowed:I}=ie({permission:de}),B=F(Te),{profileImageMap:M}=ke(a.filter(e=>e.ownerEntityRef).map(e=>e.ownerEntityRef)),T=N(oe),D=p(()=>a.filter(e=>e.ownerEntityRef).map(e=>e.ownerEntityRef),[a]),b=Ce(D),H=p(()=>[{key:"owners",label:"Owner",options:b,tagLabelPrefix:"owner"}],[b]),{filters:V,selected:j,setSelected:G,selectedTags:_,onRemoveTag:W,filterItems:x,hasActiveFilters:Y}=Ee(H,"checks"),Z=p(()=>x(a,{owners:{getValue:e=>e.ownerEntityRef??null}}),[a,x]),w=Ie(Z,i),d=p(()=>{if(!m)return w;const e=he(w,o=>m==="owner"?o.ownerEntityRef?T.forEntity(o.ownerEntityRef).snapshot.primaryTitle:-1:m==="type"?o.type?o.type:"default":o?.name?.toLowerCase()??o.id.toLowerCase());return u==="descending"&&e.reverse(),e},[m,w,u,T]),{mutateAsync:q}=Re(),J=async e=>q(e),K=N(we),Q=async()=>{const e=await K.getChecks({orderAlphabetical:"asc"});return xe(e.edges.map(o=>o.node))},{paginatedItems:y,reset:A,paginationProps:n}=Pe({pageParam:"perPage",defaultPageSize:U,items:d});ue(()=>{A();const e=new URLSearchParams(s.toString());i?e.set("search",i):e.delete("search"),l(e,{replace:!0})},300,[i]);const X=({direction:e,column:o})=>{const P=String(o);O(P),z(e),A();const h=new URLSearchParams(s);P?h.set("sort",P):h.delete("sort"),h.set("sortDirection",e),l(h,{replace:!0})},$=f,L=!f&&k(y),ee=!f&&!k(y),te=d.length>U;let v=null;return L&&(v=i||Y?t(Ae,{title:"No checks found",body:"Your current search or filter did not return any checks. Please try a different search term or filter."}):t(Le,{})),c(re,{children:[t(ne,{customActions:c(se,{gap:"2",align:"center",children:[t(ve,{resourceType:"check",disableImport:!E&&!I,disableExport:f||k(a),onImport:J,onExport:Q}),t(Fe,{searchValue:i,setSearchValue:g,canCreate:!E&&I,createHref:B(),filterProps:{filters:V,selected:j,setSelected:G,selectedTags:_,onRemoveTag:W}})]}),title:"Checks"}),c(ae,{className:r.container,children:[$&&t(Ne,{rowCount:10}),L&&v,ee&&c(me,{onSortChange:X,sortDescriptor:{direction:u,column:m},children:[c(ce,{children:[t(S,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"82%"},children:"Name"}),t(S,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Check Owner"}),t(S,{id:"actions",style:{width:"3%"}})]}),t(pe,{children:y.map(e=>t(Be,{check:e,profileImageMap:M??{}},e.id))})]}),te&&t(le,{totalCount:d.length,offset:n.offset,hasNextPage:n.offset+n.pageSize<(d.length??0),hasPreviousPage:n.offset>0,onNextPage:n.onNextPage,onPreviousPage:n.onPreviousPage,onPageSizeChange:n.onPageSizeChange,pageSize:n.pageSize})]})]})};export{De as ChecksListPageBUI};
|
|
2
2
|
//# sourceMappingURL=ChecksListPageBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as r,jsxs as u,Fragment as V}from"react/jsx-runtime";import{useRouteRef as K}from"@backstage/core-plugin-api";import{Row as Q,CellText as R,Flex as W,Box as D,Text as Z,TableRoot as q,TableHeader as J,Column as b,TableBody as X,TablePagination as Y}from"@backstage/ui";import{makeStyles as ee}from"@material-ui/core";import{sortBy as te}from"lodash";import{memo as E,useMemo as g,useState as N,useEffect as re,useCallback as oe}from"react";import{CircularProgressbar as ie}from"react-circular-progressbar";import{useNavigate as se}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import{useChecks as ae}from"../../hooks/checks/useChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePagination as ne,DEFAULT_PAGE_SIZE as z}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as ce}from"../../hooks/useSortSearchParams.esm.js";import{isCheckFailed as le,isCheckAutofixable as me}from"../../hooks/fixMe/useFixMe.esm.js";import"react-use/lib/useAsyncRetry";import{useFeatureFlag as M}from"../../hooks/useFeatureFlag.esm.js";import{trackCheckDetailsRouteRef as de}from"../../routes.esm.js";import{getPercentage as $}from"../../utils/formatters.esm.js";import{CheckStatusBarBUI as pe}from"../CheckStatusBar/CheckStatusBarBUI.esm.js";import{CustomCell as ue}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as ge}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import{FixMeCell as he}from"./FixMeCell.esm.js";const fe=ee(()=>({statusBar:{width:"45%"},customCell:{padding:"0 var(--bui-space-3)"},circularProgressbar:{width:"var(--bui-space-7)"}})),ke=["compliance","name","checks"],v=o=>ke.includes(o),Ce=E(()=>r("svg",{width:"0",height:"0",style:{position:"absolute",visibility:"hidden"},children:r("defs",{children:u("linearGradient",{id:"progressGradient",x1:"1",y1:"0",x2:"0",y2:"1",children:[r("stop",{offset:"0%",stopColor:"var(--bui-fg-warning)"}),r("stop",{offset:"100%",stopColor:"var(--bui-fg-success)"})]})})})),A=(o,i)=>i?.find(c=>c.id===o),G=o=>o?o.numberOfEntities-o.notApplicable-o.exempt:0,Pe=E(({trackId:o,check:i,checkStatuses:c,searchParams:h,showFixMeColumn:l})=>{const P=fe(),n=K(de),S=se(),m=A(i.id,c),{passPercent:f,applicableChecks:k}=g(()=>{const s=G(m);return{passPercent:$(m?.passed,s),applicableChecks:s}},[m]);return u(Q,{onAction:()=>{const s=n({trackId:o,checkId:i.id});S(h?`${s}${h}`:s)},children:[r(R,{leadingIcon:u("div",{className:P.circularProgressbar,title:`${f}%`,children:[r(Ce,{}),r(ie,{value:f,strokeWidth:12,styles:{path:{stroke:"url(#progressGradient)"},trail:{stroke:'rgba(var("--bui-fg-secondary"), 0.25)'}}})]}),title:`${f}%`}),r(R,{title:i.name}),r(ue,{children:u(W,{align:"center",gap:"3",justify:"between",children:[r(D,{children:u(Z,{color:"secondary",children:[m?.passed??0," of ",k," checks passing"]})}),r(D,{className:P.statusBar,children:r(pe,{status:m})})]})}),r(he,{status:m,check:i,isColumnVisible:l})]},i.id)}),Se=({trackId:o,checks:i,checkStatuses:c,searchValue:h,levelOrdinal:l})=>{const{updateSortParams:P,searchParams:n}=ce(),S=M("portal"),m=M("portal-ai-fm"),f=n.get("level"),k=l===void 0||f!==null&&String(l)===f,[s,x]=N(()=>{if(k){const e=n.get("sortDirection");if(e==="ascending"||e==="descending")return e}return"descending"}),[C,y]=N(()=>{if(k){const e=n.get("sort");if(e&&v(e))return e}return"compliance"}),L=g(()=>{const e=new URLSearchParams(n.toString());e.set("sort",C),e.set("sortDirection",s),typeof l=="number"?e.set("level",String(l)):e.delete("level");const t=e.toString();return t?`?${t}`:""},[l,n,C,s]);re(()=>{if(!k)return;const e=n.get("sortDirection");(e==="ascending"||e==="descending")&&x(e);const t=n.get("sort");t&&v(t)&&y(t)},[k,n]);const U=oe(({direction:e,column:t})=>{const a=String(t);v(a)&&y(a),x(e),P({sort:v(a)?a:"compliance",sortDirection:e,level:l})},[l,P]),I=g(()=>{if(!h?.length)return i??[];const e=h.toLowerCase();return i?.filter(({name:t})=>t.toLowerCase().includes(e))??[]},[i,h]),d=g(()=>{const e=te([...I],t=>{const a=A(t.id,c);if(C==="compliance"){const O=G(a);return $(a?.passed,O)}return C==="checks"?a?.passed:t.name.toLowerCase()});return s==="descending"&&e.reverse(),e},[I,c,C,s]),{paginatedItems:j,paginationProps:p}=ne({pageParam:"perPage",defaultPageSize:z,items:d}),H=d.length>z,T=g(()=>{const e=new Map;return(c??[]).forEach(t=>e.set(t.id,t)),e},[c]),_=g(()=>d.map(({id:e})=>e),[d]),B=ae(_),F=g(()=>{const e=new Map;return B.forEach(({data:t})=>{t&&e.set(t.id,t)}),e},[B]),w=g(()=>!S||!m?!1:d.some(({id:e})=>{const t=T.get(e),a=F.get(e);return le(t)&&me(a?.rule,a?.type)}),[S,m,d,T,F]);return d?.length?u(V,{children:[u(q,{onSortChange:U,sortDescriptor:{direction:s,column:C},children:[u(J,{children:[r(b,{id:"compliance",allowsSorting:!0,style:{width:"10%"},children:"Compliance"}),r(b,{id:"name",allowsSorting:!0,isRowHeader:!0,children:"Name"}),r(b,{id:"checks",allowsSorting:!0,style:{width:"25%"},children:"Checks"}),r(b,{id:"fix-me",style:{width:w?"25%":0,padding:w?void 0:0}})]}),r(X,{children:j.map(e=>r(Pe,{trackId:o,check:e,checkStatuses:c,searchParams:L,showFixMeColumn:w},e.id))})]}),H&&r(Y,{totalCount:d.length,offset:p.offset,hasNextPage:p.offset+p.pageSize<(d.length??0),hasPreviousPage:p.offset>0,onNextPage:p.onNextPage,onPreviousPage:p.onPreviousPage,onPageSizeChange:p.onPageSizeChange,pageSize:p.pageSize})]}):r(ge,{title:"No checks",body:"There are no checks found."})};export{Se as ChecksTable};
|
|
2
2
|
//# sourceMappingURL=ChecksTable.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as
|
|
1
|
+
import{jsx as e,jsxs as l}from"react/jsx-runtime";import{Flex as o,Card as y,CardBody as C,Text as i,Cell as R}from"@backstage/ui";import{RiShiningFill as x,RiGitMergeFill as F,RiGitPullRequestFill as k,RiErrorWarningFill as S}from"@remixicon/react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import{useCheck as q}from"../../hooks/checks/useCheck.esm.js";import"react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useFixMe as w}from"../../hooks/fixMe/useFixMe.esm.js";import"react-use/lib/useAsyncRetry";import{CustomCell as B}from"../CustomCell/CustomCell.esm.js";import{FixMeBetaBadge as P}from"../FixMeBetaBadge/FixMeBetaBadge.esm.js";import{FixMeButton as u}from"../FixMeButton/FixMeButton.esm.js";import{ProgressBar as M}from"../ProgressBar/ProgressBar.esm.js";import{ViewPullRequests as j}from"../ViewPullRequests/ViewPullRequests.esm.js";import{PULL_REQUEST_STATUSES as r}from"./utils.esm.js";const v=({check:t,status:g,isColumnVisible:f=!0})=>{const{data:s}=q(t.id),{showFixMeButton:a,hasShift:m,pullRequests:n,openPullRequestsCount:d,mergedPullRequestsCount:c,failedPullRequestsCount:p,pullRequestsCount:b,href:h}=w({type:s?.type,rule:s?.rule,checkStatus:g,checkId:t.id,checkName:t.name});return f?e(B,{children:l(o,{align:"center",justify:"end",children:[a&&!n.length&&e(u,{hasShift:m,href:h}),a&&n.length>0&&e(y,{style:{margin:"var(--bui-space-2) 0 var(--bui-space-2)"},children:e(C,{children:l(o,{direction:"column",children:[l(o,{align:"center",justify:"between",children:[l(o,{align:"center",gap:"2",children:[e(x,{size:12}),e(i,{weight:"bold",children:"Fixes in progress"})]}),e(P,{})]}),l(o,{align:"center",gap:"2",children:[e(M,{segments:[{key:r.merged.label,value:c,label:r.merged.label,color:r.merged.color},{key:r.open.label,value:d,label:r.open.label,color:r.open.color},{key:r.closed.label,value:p,label:r.closed.label,color:r.closed.color}]}),l(i,{weight:"bold",children:[c,"/",b]})]}),l(o,{gap:"6",children:[l(o,{align:"center",gap:"1",children:[e(F,{size:16,color:r.merged.color}),l(i,{color:"secondary",children:[c," merged"]})]}),l(o,{align:"center",gap:"1",children:[e(k,{size:16,color:r.open.color}),l(i,{color:"secondary",children:[d," open"]})]}),l(o,{align:"center",gap:"1",children:[e(S,{size:16,color:r.closed.color}),l(i,{color:"secondary",children:[p," failed"]})]})]}),l(o,{align:"center",gap:"1",justify:"between",children:[n.length>0&&e(j,{checkName:t.name,pullRequests:n}),e(u,{hasShift:m,href:h,showBeta:!1})]})]})})})]})}):e(R,{style:{padding:0}})};export{v as FixMeCell};
|
|
2
2
|
//# sourceMappingURL=FixMeCell.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as
|
|
1
|
+
import{jsx as e,jsxs as b}from"react/jsx-runtime";import{parseEntityRef as f}from"@backstage/catalog-model";import{useTable as w,Table as x,CellText as i,Cell as a,Flex as g,Text as k,Button as C}from"@backstage/ui";import{makeStyles as R}from"@material-ui/core";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"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{getBranchName as T}from"../../hooks/fixMe/useFixMe.esm.js";import"react-use/lib/useAsyncRetry";import{getPullRequestStatus as S}from"./utils.esm.js";const y=o=>{const r=o.lastIndexOf("/");return r!==-1?o.substring(r+1):o},q=R(()=>({statusDot:{width:8,height:8,borderRadius:"50%",flexShrink:0}})),B=({pullRequests:o,checkName:r})=>{const m=q(),s=o.map(t=>({...t,action:null})),c=T(r??""),p=t=>{const l=window.open(t,"_blank","noopener,noreferrer");l&&(l.opener=null)},d=[{id:"component",label:"Component",width:"25%",isRowHeader:!0,cell:({component:t,id:l})=>e(i,{title:t?f(t).name:y(l)})},{id:"title",label:"Title",width:"29%",cell:({title:t})=>e(i,{title:t})},{id:"status",label:"Status",width:"10%",cell:({status:t,remedyStatus:l})=>{const{label:h,color:n}=S(t,l);return e(a,{children:b(g,{align:"center",gap:"2",children:[n&&e("div",{className:m.statusDot,style:{backgroundColor:n}}),e(k,{children:h})]})})}},{id:"branch",label:"Branch",width:"30%",cell:({branch:t})=>e(i,{title:t??c})},{id:"action",label:"Action",width:"6%",cell:({url:t})=>e(a,{children:e(C,{onClick:()=>{t&&p(t)},children:"View"})})}],{tableProps:u}=w({mode:"complete",data:s});return e(x,{columnConfig:d,...u})};export{B as PullRequestsTable};
|
|
2
2
|
//# sourceMappingURL=PullRequestsTable.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{REMEDY_STATUS as o}from"@spotify/backstage-plugin-soundcheck-common";const E={OPEN:"open",MERGED:"merged",CLOSED:"closed",CREATING:"creating"},l={[E.CREATING]:{label:"Creating",color:"var(--bui-fg-success)"},[E.OPEN]:{label:"Open",color:"var(--bui-fg-success)"},[E.MERGED]:{label:"Merged",color:"#c054deff"},[E.CLOSED]:{label:"Failed",color:"var(--bui-fg-danger)"}},c={[o.IN_PROGRESS]:E.OPEN,[o.RESOLVED]:E.MERGED,[o.FAILED]:E.CLOSED},s=e=>e in l,t=(e,r)=>{const S=e&&s(e)?e:c[r??""]??E.OPEN;return l[S]};export{E as PULL_REQUEST_STATUS,l as PULL_REQUEST_STATUSES,t as getPullRequestStatus};
|
|
2
|
+
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as
|
|
1
|
+
import{jsx as e,jsxs as i,Fragment as S}from"react/jsx-runtime";import{useRouteRef as k}from"@backstage/core-plugin-api";import{usePermission as A}from"@backstage/plugin-permission-react";import{Box as o,Text as l,Grid as X,Flex as f,TableRoot as Z,TableHeader as _,Column as L,TableBody as ee,Row as s,CellText as r,Button as N,HeaderPage as te,Container as ie}from"@backstage/ui";import{makeStyles as oe}from"@material-ui/core";import{soundcheckCollectorReadPermission as re,soundcheckCollectorUpdatePermission as ne,parseFactRef as ae,asArray as le}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as se}from"lodash";import{useMemo as ce,useCallback as de,useEffect as me}from"react";import{useParams as ue,useNavigate as pe}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as he}from"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useGetCollectors as fe}from"../../hooks/collectors/useGetCollectors.esm.js";import{useDeleteCollectorConfig as ge}from"../../hooks/collectors/useDeleteCollectorConfig.esm.js";import{useLCPReporting as be}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Ce}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationEditRouteRef as ye,integrationsPageRouteRef as we}from"../../routes.esm.js";import{mapRuleToExpression as ve}from"../CheckForm/utils/checkFormUtils.esm.js";import{ConfigurableCollectorIds as Ie}from"../CollectorsPage/CollectorsPage.esm.js";import{hasFrequency as Re}from"../CollectorsPage/IntegrationsListPageBUI.esm.js";import{CustomCell as Te}from"../CustomCell/CustomCell.esm.js";import{DocLinkButton as Se}from"../DocLinkButton/DocLinkButton.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as g}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import{FactExplorerProvider as ke}from"../FactExplorer/FactExplorerContext.esm.js";import{LoadingIndicator as Ae}from"../LoadingIndicator/LoadingIndicator.esm.js";import{CollectorFactTableBUI as Le}from"./CollectorFactTableBUI.esm.js";import{CollectorStatus as Ne}from"./CollectorStatus.esm.js";import{getCollectorDocLink as Pe}from"./Configurators/Configurator.esm.js";import{DependantCheckCard as Ue}from"./DependantCheckCard.esm.js";import{hasConfigSchema as je}from"./utils.esm.js";const Qe=oe(()=>({container:{marginBottom:"var(--bui-space-12)"}})),xe=({id:P,integrations:U})=>{const j=Qe(),Q=ue(),n=P??Q.integrationId,b=ce(()=>({routeName:"soundcheck-integration-details",additionalAttributes:{integrationId:n||""}}),[n]),{reportContentLoaded:C}=Ce(b),{reporter:x}=be(b),{data:F,isLoading:B}=fe([n??""]),{loading:D,allowed:E}=A({permission:re}),{loading:y,allowed:w}=A({permission:ne}),{showModal:v}=he(),{mutate:I,isPending:u}=ge(n??""),q=de(async()=>{!await v({title:"Are you sure you want to delete stored UI config?",message:"This action cannot be undone and will remove any stored configs for this integration from the database."})||u||I()},[I,u,v]),t=F?.[0],p=B||y||D,$=U?.map(h=>h.integrationId)??Ie,M=!y&&w&&t?.isEditable&&t?.isConfigurable&&($.includes(n??"")||(t?je(t):!1)),H=pe(),z=k(ye),G=k(we),J=t?.hasUIConfig,R=Pe(t?.id);let c;if(p)c=e(Ae,{});else if(!E)c=e(g,{title:"Cannot view Integration",body:`User does not have permission to view Integration id: ${n}`});else if(!t)c=e(g,{title:"Integration not found",body:`There is no integration with the requested id: ${n}.`});else{const h=i(o,{mb:"6",children:[e(o,{mb:"3",children:e(l,{variant:"title-small",weight:"bold",children:"Facts"})}),e(o,{children:e(Le,{facts:t.factNames.map(a=>{const m=(d=>{try{return ae(d).name}catch{return d}})(a),K=Array.isArray(t.config)?t.config[0]?.collects:t.config?.collects,O=le(K).find(d=>d?.type?.toLowerCase()===m||d?.factName===m);return{factRef:`${n}:default/${m}`,factName:m,config:O,uiConfig:!!t.hasUIConfig,parentConfig:t.config}})})})]}),V=i(o,{mb:"6",children:[e(o,{mb:"3",children:e(l,{variant:"title-small",weight:"bold",children:"Dependant Checks"})}),se(t.dependentChecks)?e(g,{title:"No dependent checks",body:"No dependent checks found."}):e(X.Root,{columns:"5",gap:"3",children:t.dependentChecks.map(a=>e(Ue,{id:a.id,title:a.name??a.id,description:a.description??void 0,rules:ve(a.rule),integrationId:n,hasSchedule:a.schedule},a.id))})]}),W=i(o,{mb:"6",children:[i(o,{mb:"3",children:[e(f,{align:"center",gap:"3",children:e(l,{variant:"title-small",weight:"bold",children:"Queue Status"})}),t.jobQueueStatus?.queueType==="Local"&&e(o,{children:e(l,{variant:"body-small",children:"Local in-memory queues are reset when instances restart. Active and waiting counts are localized to each instance so counts below might not be entirely accurate."})})]}),e(o,{children:i(Z,{children:[i(_,{children:[e(L,{id:"property",isRowHeader:!0,style:{width:"50%"}}),e(L,{id:"value",style:{width:"50%"}})]}),i(ee,{children:[i(s,{children:[e(r,{title:"Status"}),e(Te,{children:e(Ne,{hasFrequency:Re(t.config),jobQueueStatus:t.jobQueueStatus})})]}),i(s,{children:[e(r,{title:"Queue Type"}),e(r,{title:t.jobQueueStatus?.queueType??"N/A"})]}),i(s,{children:[e(r,{title:"Active Jobs"}),e(r,{title:String(t.jobQueueStatus?.active??0)})]}),i(s,{children:[e(r,{title:"Waiting Jobs"}),e(r,{title:String(t.jobQueueStatus?.waiting??0)})]}),i(s,{children:[e(r,{title:"Latest Completed Time"}),e(r,{title:t.jobQueueStatus?.latestCompletedTime??"N/A"})]}),i(s,{children:[e(r,{title:"Latest Failed Time"}),e(r,{title:t.jobQueueStatus?.latestFailedTime??"N/A"})]})]})]})})]}),Y=w&&J&&i(o,{mb:"6",children:[e(o,{mb:"3",children:e(l,{variant:"title-small",weight:"bold",children:"Admin Actions"})}),t.hasUIConfig&&i(f,{align:"center",gap:"2",children:[e(N,{isDisabled:u,size:"small",variant:"secondary",onClick:q,children:"Remove Config"}),e(l,{color:"secondary",children:"Revert to using YAML to config this integration by deleting the stored UI config from the database."})]})]});c=i(S,{children:[h,V,W,Y]})}const T=x?.getLCPValue();return me(()=>{p||C({lcp:T})},[p,C,T]),i(S,{children:[e(te,{title:t?.name??t?.id??"Integration",breadcrumbs:[{label:"Integrations",href:G()}],customActions:i(f,{align:"center",children:[M?e(N,{onClick:()=>H(z({integrationId:n??""})),children:"Configure"}):void 0,R&&e(Se,{href:R})]})}),e(ie,{className:j.container,children:e(ke,{hidePath:!0,children:c})})]})};export{xe as CollectorDetailsPageBUI};
|
|
2
2
|
//# sourceMappingURL=CollectorDetailsPageBUI.esm.js.map
|