@spotify/backstage-plugin-soundcheck 0.17.0 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +56 -0
- package/config.d.ts +14 -0
- package/dist/api.esm.js +1 -1
- package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
- package/dist/components/Badges/StatusBadge.esm.js +1 -1
- package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignOwnerField.esm.js +1 -1
- package/dist/components/CampaignInsightsPage/CampaignInsightsPage.esm.js +1 -1
- package/dist/components/CampaignsPage/CampaignListPage/CampaignListPage.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
- package/dist/components/CheckDetails/FixMeDialog.esm.js +1 -1
- package/dist/components/CheckForm/CheckForm.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/CheckPathResolverInput.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/CheckScheduleSection/ScheduleSection.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js +1 -1
- package/dist/components/CheckIcon/CheckIcon.esm.js +1 -1
- package/dist/components/CheckPage/CheckInsightsPage.esm.js +1 -1
- package/dist/components/CheckPage/CheckStatusHistoryChart.esm.js +1 -1
- package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +1 -1
- package/dist/components/CollapsablePanel/CollapsablePanel.esm.js +2 -0
- package/dist/components/CollectorPage/CollectorDetailsPage.esm.js +2 -0
- package/dist/components/CollectorPage/CollectorFactTable.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Github/CodeScanningAlertsFactDetails.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/DependabotAlertsFactDetails.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/SecretScanningAlertsFactDetails.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/SecurityAdvisoriesFactDetails.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/HTTP/HttpStatusesInput.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SonarQube/IssuesFactDetailsInput.esm.js +1 -1
- package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +1 -1
- package/dist/components/ColorChip/ColorChip.esm.js +2 -0
- package/dist/components/EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js +1 -1
- package/dist/components/Expand/Expand.esm.js +1 -1
- package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
- package/dist/components/FactExplorer/FactExplorerContext.esm.js +1 -1
- package/dist/components/FactExplorer/FactExplorerDialog.esm.js +1 -1
- package/dist/components/FactExplorer/useFactOptions.esm.js +1 -1
- package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
- package/dist/components/FilterSidebar/FilterSidebar.esm.js +1 -1
- package/dist/components/FilterSidebar/StateFilter.esm.js +1 -1
- package/dist/components/FormControlledAutocomplete/ControlledAutocomplete.esm.js +1 -1
- package/dist/components/FormControlledAutocomplete/FormControlledMultipleAutocomplete.esm.js +1 -1
- package/dist/components/GroupHierarchySelector/GroupHierarchyCategorySelection.esm.js +2 -0
- package/dist/components/GroupHierarchySelector/GroupHierarchyChip.esm.js +2 -0
- package/dist/components/GroupHierarchySelector/GroupHierarchyGroupInfo.esm.js +2 -0
- package/dist/components/GroupHierarchySelector/GroupHierarchySelector.esm.js +2 -0
- package/dist/components/GroupHierarchySelector/GroupHierarchySelectorDialog.esm.js +2 -0
- package/dist/components/GroupHierarchySelector/usePreviousSelectedGroups.esm.js +2 -0
- package/dist/components/ImportExportPanel/ImportExportPanel.esm.js +2 -0
- package/dist/components/LevelsTable/CheckRowContent.esm.js +1 -1
- package/dist/components/LevelsTable/LevelsTable.esm.js +1 -1
- package/dist/components/MultiSelectFilter/MultiSelectFilter.esm.js +1 -1
- package/dist/components/OverviewTable/Cell/CheckCell.esm.js +1 -1
- package/dist/components/OverviewTable/Cell/cellRenderer.esm.js +1 -1
- package/dist/components/OverviewTable/ResultsTableRow.esm.js +1 -1
- package/dist/components/PassingPercentProgressbar/PassPercentageProgressbar.esm.js +2 -0
- package/dist/components/QuickstartPage/HowDoIListItem.esm.js +1 -1
- package/dist/components/QuickstartPage/QuickstartCardBase.esm.js +1 -1
- package/dist/components/QuickstartPage/QuickstartPage.esm.js +2 -1
- package/dist/components/QuickstartPage/WelcomeHelpSection.esm.js +5 -5
- package/dist/components/QuickstartPage/WelcomeModal.esm.js +1 -1
- package/dist/components/QuickstartPage/styles.esm.js +1 -1
- package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
- package/dist/components/SearchFilters/SearchFilters.esm.js +1 -1
- package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialog.esm.js +2 -0
- package/dist/components/SoundcheckDialog/SoundcheckDialog.esm.js +1 -1
- package/dist/components/SoundcheckHeader/SoundcheckHeader.esm.js +1 -1
- package/dist/components/SoundcheckHeader/headerUtil.esm.js +1 -1
- package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
- package/dist/components/TechHealth/Filters/FilterProvider.esm.js +1 -1
- package/dist/components/TechHealth/Filters/utils.esm.js +1 -1
- package/dist/components/TechHealth/Loading/Loading.esm.js +1 -1
- package/dist/components/TechHealth/Loading/TechHealthLoading.esm.js +1 -1
- package/dist/components/TechInsights/ColorLegend.esm.js +2 -0
- package/dist/components/TechInsights/ColorSchemeSelector.esm.js +2 -0
- package/dist/components/TechInsights/FilterControls.esm.js +2 -0
- package/dist/components/TechInsights/HierarchicalTechInsightsPage.esm.js +2 -0
- package/dist/components/TechInsights/HierarchyTable.esm.js +2 -0
- package/dist/components/TechInsights/LoadingOverlay.esm.js +2 -0
- package/dist/components/TechInsights/LowestPerformingTeams.esm.js +2 -0
- package/dist/components/TechInsights/NivoCirclePacking.esm.js +2 -0
- package/dist/components/TechInsights/NivoIcicle.esm.js +2 -0
- package/dist/components/TechInsights/NivoSunburst.esm.js +2 -0
- package/dist/components/TechInsights/NivoTreemap.esm.js +2 -0
- package/dist/components/TechInsights/SelectedNodeSidebar.esm.js +2 -0
- package/dist/components/TechInsights/SummaryTiles.esm.js +2 -0
- package/dist/components/TechInsights/TeamComparison/FailingComponentsTable.esm.js +2 -0
- package/dist/components/TechInsights/TeamComparison/MultiCheckStatusHistoryChart.esm.js +2 -0
- package/dist/components/TechInsights/TeamPerformanceCard.esm.js +2 -0
- package/dist/components/TechInsights/TeamPerformanceListCard.esm.js +2 -0
- package/dist/components/TechInsights/TeamStatusBar.esm.js +2 -0
- package/dist/components/TechInsights/TechInsightsCardsView.esm.js +2 -0
- package/dist/components/TechInsights/TechInsightsChartView.esm.js +2 -0
- package/dist/components/TechInsights/TechInsightsGroupSelector.esm.js +2 -0
- package/dist/components/TechInsights/TechInsightsPage2.esm.js +2 -0
- package/dist/components/TechInsights/TechInsightsTableView.esm.js +2 -0
- package/dist/components/TechInsights/TechInsightsViewSelector.esm.js +2 -0
- package/dist/components/TechInsights/Tiles/TileUtils.esm.js +2 -0
- package/dist/components/TechInsights/Tiles/TrackStatusCard.esm.js +2 -0
- package/dist/components/TechInsights/TopPerformingTeams.esm.js +2 -0
- package/dist/components/TechInsights/ViewModeControls.esm.js +2 -0
- package/dist/components/TechInsights/VisualizationBreadcrumb.esm.js +2 -0
- package/dist/components/TechInsights/colorContrast.esm.js +2 -0
- package/dist/components/TechInsights/findNodePath.esm.js +2 -0
- package/dist/components/TechInsights/hierarchy/GroupNode.esm.js +2 -0
- package/dist/components/TechInsights/hierarchy/Hierarchy.esm.js +2 -0
- package/dist/components/TechInsights/hierarchyToNivo.esm.js +2 -0
- package/dist/components/TechInsights/persistence/FavoriteViews.esm.js +2 -0
- package/dist/components/TechInsights/styles.esm.js +2 -0
- package/dist/components/TimePeriodBar/TimePeriodBar.esm.js +2 -0
- package/dist/components/TopFailingChecksTable/TopFailingChecksTable.esm.js +1 -1
- package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackBadgeTypeSelect/TrackBadgeTypeSelect.esm.js +1 -1
- package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackOwnerSelect/TrackOwnerSelect.esm.js +1 -1
- package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/TrackStatusChip.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/columns.esm.js +1 -1
- package/dist/components/TrackPage/TrackHistoryChart.esm.js +1 -1
- package/dist/components/TrackPage/TrackPage.esm.js +1 -1
- package/dist/components/TrackSelection/TrackSelection.esm.js +2 -0
- package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +1 -1
- package/dist/graphql/generated/index.esm.js +301 -76
- package/dist/hooks/cache/useEntityCountCached.esm.js +2 -0
- package/dist/hooks/cache/useTrackCountCached.esm.js +2 -0
- package/dist/hooks/campaigns/useGetCampaigns.esm.js +1 -1
- package/dist/hooks/campaigns/useSendCampaignNotification.esm.js +2 -0
- package/dist/hooks/catalog/useGetEntityCount.esm.js +2 -0
- package/dist/hooks/checks/useImportChecks.esm.js +2 -0
- package/dist/hooks/checks/useUpdateCheck.esm.js +1 -1
- package/dist/hooks/facets/useFacetFilters.esm.js +1 -1
- package/dist/hooks/graphqlKeys.esm.js +1 -1
- package/dist/hooks/groups/useAllGroups.esm.js +1 -1
- package/dist/hooks/groups/useGroupOptions.esm.js +1 -1
- package/dist/hooks/groups/useUsersGroupClaims.esm.js +1 -1
- package/dist/hooks/heirarchy/useBatchedHierarchicalTrackStatuses.esm.js +2 -0
- package/dist/hooks/heirarchy/useGetDescendentsOfGroups.esm.js +2 -0
- package/dist/hooks/heirarchy/useGroupHierarchy.esm.js +2 -0
- package/dist/hooks/heirarchy/useGroupTypeHierarchy.esm.js +2 -0
- package/dist/hooks/heirarchy/useHierarchicalTrackStatus.esm.js +2 -0
- package/dist/hooks/tracks/useGetAllTracks.esm.js +1 -1
- package/dist/hooks/tracks/useGetTracksApplicableEntityCount.esm.js +2 -0
- package/dist/hooks/tracks/useImportTracks.esm.js +2 -0
- package/dist/hooks/tracks/useTracksApplicableToGroup.esm.js +2 -0
- package/dist/index.d.ts +3 -0
- package/dist/routes.esm.js +1 -1
- package/dist/utils/colors.esm.js +1 -1
- package/dist/utils/export.esm.js +7 -3
- package/dist/utils/helpers.esm.js +2 -0
- package/package.json +40 -23
- package/dist/components/OrgInsights/OrgInsightsPage.esm.js +0 -2
- package/dist/components/OrgInsights/OrgInsightsSidebar.esm.js +0 -2
- package/dist/components/OrgInsights/OrgInsightsViewSelector.esm.js +0 -2
- package/dist/components/OrgInsights/TrackCardGrid.esm.js +0 -2
- package/dist/components/OrgInsights/TrackComparison.esm.js +0 -2
- package/dist/components/OrgInsights/TrackStatusTile.esm.js +0 -2
- package/dist/components/OrgInsights/styles.esm.js +0 -2
- package/dist/components/QuickstartPage/QuickStartChecksCard.esm.js +0 -2
- package/dist/components/QuickstartPage/QuickstartCollectorConfigurationsCard.esm.js +0 -2
- package/dist/components/QuickstartPage/QuickstartTracksCard.esm.js +0 -2
- package/dist/components/TechHealth/Loading/Emoji.esm.js +0 -2
- package/dist/components/TechHealth/Loading/EmojiFountain.esm.js +0 -2
- package/dist/utils/getGroupFilterFromConfig.esm.js +0 -2
package/dist/components/CollectorPage/Configurators/Github/CodeScanningAlertsFactDetails.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as u,jsx as e}from"react/jsx-runtime";import{Typography as n,Box as m,TextField as c}from"@material-ui/core";import{useFormContext as S,Controller as s}from"react-hook-form";import{FormControlledAutocomplete as p}from"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as f}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"
|
|
1
|
+
import{jsxs as u,jsx as e}from"react/jsx-runtime";import{Typography as n,Box as m,TextField as c}from"@material-ui/core";import{useFormContext as S,Controller as s}from"react-hook-form";import{FormControlledAutocomplete as p}from"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as f}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"../../../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{FormFieldLabel as d}from"../../../FormFieldLabel/FormFieldLabel.esm.js";import{useStyles as x}from"./GithubConfigurator.esm.js";import{CODE_SCANNING_ALERTS_STATE_OPTIONS as T,CODE_SCANNING_ALERTS_SEVERITY_OPTIONS as v}from"./types.esm.js";const b=({name:r,disabled:a})=>{const l=x(),{control:i}=S(),h=f(T.map(t=>({label:t,value:t}))),N=f(v.map(t=>({label:t,value:t})));return u("div",{className:l.root,children:[e(d,{title:"Fact Name"}),e(n,{variant:"caption",children:"Fact name must be unique"}),e(m,{children:e(s,{name:`${r}.factName`,control:i,render:({field:t,fieldState:{error:o}})=>e(c,{...t,type:"text",variant:"outlined",margin:"dense",placeholder:"Fact Name",className:l.formInput,disabled:a,error:!!o,helperText:o?.message,FormHelperTextProps:{className:l.helperText}})})}),e(d,{title:"Code Scanning Tool Name"}),e(n,{variant:"caption",children:"Optional, if not provided results by all code scanning tools will be collected"}),e(m,{children:e(s,{name:`${r}.toolName`,control:i,render:({field:t,fieldState:{error:o}})=>e(c,{...t,type:"text",variant:"outlined",margin:"dense",placeholder:"Example: CodeQL",className:l.formInput,disabled:a,error:!!o,helperText:o?.message,FormHelperTextProps:{className:l.helperText}})})}),e(d,{title:"Code Scanning Alert State"}),e(n,{variant:"caption",children:"Optional, if not provided code scanning alerts with all states will be collected"}),e(m,{className:l.formInput,children:e(p,{name:`${r}.state`,control:i,fullWidth:!0,freeSolo:!1,disabled:a,placeholder:"Example: open",...h})}),e(d,{title:"Code Scanning Alert Severity"}),e(n,{variant:"caption",children:"Optional, if not provided code scanning alerts with all severities will be collected"}),e(m,{className:l.formInput,children:e(p,{name:`${r}.severity`,control:i,fullWidth:!0,freeSolo:!1,disabled:a,placeholder:"Example: critical",...N})})]})};export{b as CodeScanningAlertsFactDetails};
|
|
2
2
|
//# sourceMappingURL=CodeScanningAlertsFactDetails.esm.js.map
|
package/dist/components/CollectorPage/Configurators/Github/DependabotAlertsFactDetails.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as h,jsx as e}from"react/jsx-runtime";import{Typography as i,Box as
|
|
1
|
+
import{jsxs as h,jsx as e}from"react/jsx-runtime";import{Typography as i,Box as n,TextField as u}from"@material-ui/core";import{useFormContext as b,Controller as T}from"react-hook-form";import"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import{FormControlledMultipleAutocomplete as d}from"../../../FormControlledAutocomplete/FormControlledMultipleAutocomplete.esm.js";import{useLabelOptions as s}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"../../../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{FormFieldLabel as m}from"../../../FormFieldLabel/FormFieldLabel.esm.js";import{useStyles as v}from"./GithubConfigurator.esm.js";import{DEPENDABOT_ALERTS_STATE_OPTIONS as x,DEPENDABOT_ALERTS_SEVERITY_OPTIONS as N}from"./types.esm.js";const S=({name:r,disabled:o})=>{const l=v(),{control:a}=b(),c=s(x.map(t=>({label:t,value:t}))),f=s(N.map(t=>({label:t,value:t})));return h("div",{className:l.root,children:[e(m,{title:"Fact Name"}),e(i,{variant:"caption",children:"Fact name must be unique"}),e(n,{children:e(T,{name:`${r}.factName`,control:a,render:({field:t,fieldState:{error:p}})=>e(u,{...t,type:"text",variant:"outlined",margin:"dense",placeholder:"Fact Name",className:l.formInput,disabled:o,error:!!p,helperText:p?.message,FormHelperTextProps:{className:l.helperText}})})}),e(m,{title:"Dependabot Alert States"}),e(i,{variant:"caption",children:"Optional, if not provided dependabot alerts with all states will be collected"}),e(n,{className:l.formInput,children:e(d,{name:`${r}.states`,control:a,fullWidth:!0,freeSolo:!1,disabled:o,placeholder:"Example: open",...c})}),e(m,{title:"Dependabot Alert Severities"}),e(i,{variant:"caption",children:"Optional, if not provided dependabot alerts with all severities will be collected"}),e(n,{className:l.formInput,children:e(d,{name:`${r}.severities`,control:a,fullWidth:!0,freeSolo:!1,disabled:o,placeholder:"Example: critical",...f})})]})};export{S as DependabotAlertsFactDetails};
|
|
2
2
|
//# sourceMappingURL=DependabotAlertsFactDetails.esm.js.map
|
package/dist/components/CollectorPage/Configurators/Github/SecretScanningAlertsFactDetails.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as f,jsx as e}from"react/jsx-runtime";import{Typography as i,Box as n,TextField as S}from"@material-ui/core";import{useFormContext as u,Controller as h}from"react-hook-form";import{FormControlledAutocomplete as N}from"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import{FormControlledMultipleAutocomplete as T}from"../../../FormControlledAutocomplete/FormControlledMultipleAutocomplete.esm.js";import{useLabelOptions as
|
|
1
|
+
import{jsxs as f,jsx as e}from"react/jsx-runtime";import{Typography as i,Box as n,TextField as S}from"@material-ui/core";import{useFormContext as u,Controller as h}from"react-hook-form";import{FormControlledAutocomplete as N}from"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import{FormControlledMultipleAutocomplete as T}from"../../../FormControlledAutocomplete/FormControlledMultipleAutocomplete.esm.js";import{useLabelOptions as s}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"../../../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{FormFieldLabel as m}from"../../../FormFieldLabel/FormFieldLabel.esm.js";import{useStyles as v}from"./GithubConfigurator.esm.js";import{SECRET_SCANNING_ALERTS_STATE_OPTIONS as x,SECRET_SCANNING_ALERTS_VALIDITY_OPTIONS as b}from"./types.esm.js";const A=({name:r,disabled:o})=>{const l=v(),{control:a}=u(),d=s(x.map(t=>({label:t,value:t}))),p=s(b.map(t=>({label:t,value:t})));return f("div",{className:l.root,children:[e(m,{title:"Fact Name"}),e(i,{variant:"caption",children:"Fact name must be unique"}),e(n,{children:e(h,{name:`${r}.factName`,control:a,render:({field:t,fieldState:{error:c}})=>e(S,{...t,type:"text",variant:"outlined",margin:"dense",placeholder:"Fact Name",className:l.formInput,disabled:o,error:!!c,helperText:c?.message,FormHelperTextProps:{className:l.helperText}})})}),e(m,{title:"Secret Scanning Alert State"}),e(i,{variant:"caption",children:"Optional, if not provided secret scanning alerts with all states will be collected"}),e(n,{className:l.formInput,children:e(N,{name:`${r}.state`,control:a,fullWidth:!0,freeSolo:!1,disabled:o,placeholder:"Example: open",...d})}),e(m,{title:"Secret Scanning Alert Validities"}),e(i,{variant:"caption",children:"Optional, if not provided secret scanning alerts with all validities will be collected"}),e(n,{className:l.formInput,children:e(T,{name:`${r}.validities`,control:a,fullWidth:!0,freeSolo:!1,disabled:o,placeholder:"Example: active",...p})})]})};export{A as SecretScanningAlertsFactDetails};
|
|
2
2
|
//# sourceMappingURL=SecretScanningAlertsFactDetails.esm.js.map
|
package/dist/components/CollectorPage/Configurators/Github/SecurityAdvisoriesFactDetails.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as d,jsx as e}from"react/jsx-runtime";import{Typography as m,Box as s,TextField as c}from"@material-ui/core";import{useFormContext as u,Controller as f}from"react-hook-form";import{FormControlledAutocomplete as h}from"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as x}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"
|
|
1
|
+
import{jsxs as d,jsx as e}from"react/jsx-runtime";import{Typography as m,Box as s,TextField as c}from"@material-ui/core";import{useFormContext as u,Controller as f}from"react-hook-form";import{FormControlledAutocomplete as h}from"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as x}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"../../../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{FormFieldLabel as n}from"../../../FormFieldLabel/FormFieldLabel.esm.js";import{useStyles as S}from"./GithubConfigurator.esm.js";import{SECURITY_ADVISORIES_STATE_OPTIONS as F}from"./types.esm.js";const b=({name:o,disabled:l})=>{const t=S(),{control:i}=u(),p=x(F.map(r=>({label:r,value:r})));return d("div",{className:t.root,children:[e(n,{title:"Fact Name"}),e(m,{variant:"caption",children:"Fact name must be unique"}),e(s,{children:e(f,{name:`${o}.factName`,control:i,render:({field:r,fieldState:{error:a}})=>e(c,{...r,type:"text",variant:"outlined",margin:"dense",placeholder:"Fact Name",className:t.formInput,disabled:l,error:!!a,helperText:a?.message,FormHelperTextProps:{className:t.helperText}})})}),e(n,{title:"Security Advisory State"}),e(m,{variant:"caption",children:"Optional, if not provided security advisories with all states will be collected"}),e(s,{className:t.formInput,children:e(h,{name:`${o}.state`,control:i,fullWidth:!0,freeSolo:!1,disabled:l,placeholder:"Example: published",...p})})]})};export{b as SecurityAdvisoriesFactDetails};
|
|
2
2
|
//# sourceMappingURL=SecurityAdvisoriesFactDetails.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as b,jsx as o}from"react/jsx-runtime";import{makeStyles as x,Box as c,Chip as
|
|
1
|
+
import{jsxs as b,jsx as o}from"react/jsx-runtime";import{makeStyles as x,Box as c,Chip as T,TextField as g,FormControlLabel as C,Checkbox as S}from"@material-ui/core";import v from"@material-ui/icons/CheckBox";import N from"@material-ui/icons/CheckBoxOutlineBlank";import{Autocomplete as k}from"@material-ui/lab";import{useState as I,useEffect as L}from"react";import{ListboxVirtualized as z}from"../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{HTTP_STATUSES as p}from"./utils.esm.js";const H=x(a=>({statusInput:{marginTop:0},statusChips:{marginBottom:a.spacing(1)},helperText:{marginLeft:0}})),E=({value:a,onChange:i,disabled:r,errors:m,helperText:d})=>{const n=H(),[s,u]=I(a??[]);L(()=>{i&&i(s.map(e=>Number(e)))},[s,i]);const f=(e,t)=>{u(s?.filter(l=>l!==t))},h=(e,t)=>{const l=t.length?t[t.length-1]:void 0;l&&isNaN(Number(l))||u(t)};return b(c,{children:[o(c,{children:s.map(e=>o(T,{label:e,size:"small",className:n.statusChips,onDelete:t=>f(t,e),clickable:!1,disabled:r},e))}),o(k,{disableCloseOnSelect:!0,fullWidth:!0,multiple:!0,freeSolo:!0,popupIcon:null,renderTags:()=>null,disabled:r,options:p.map(e=>e.value),getOptionLabel:e=>p.find(t=>t.value===e)?.label??"",value:s,onChange:(e,t)=>h(e,t),ListboxComponent:z,ListboxProps:{itemHeight:40},renderInput:e=>o(g,{...e,variant:"outlined",margin:"dense",className:n.statusInput,placeholder:"Example: 500",disabled:r,error:!!m,helperText:m?.message??d,FormHelperTextProps:{className:n.helperText}}),renderOption:(e,{selected:t})=>o(C,{onClick:l=>l.preventDefault(),control:o(S,{icon:o(N,{fontSize:"small"}),checkedIcon:o(v,{fontSize:"small"}),checked:t,disabled:r}),label:p.find(l=>l.value===e)?.label??""})})]})};export{E as HttpStatusesInput};
|
|
2
2
|
//# sourceMappingURL=HttpStatusesInput.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as h,jsx as e}from"react/jsx-runtime";import{makeStyles as I,Typography as i,Box as s,TextField as S}from"@material-ui/core";import{useFormContext as T,Controller as v}from"react-hook-form";import"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import{FormControlledMultipleAutocomplete as p}from"../../../FormControlledAutocomplete/FormControlledMultipleAutocomplete.esm.js";import{useLabelOptions as m}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"
|
|
1
|
+
import{jsxs as h,jsx as e}from"react/jsx-runtime";import{makeStyles as I,Typography as i,Box as s,TextField as S}from"@material-ui/core";import{useFormContext as T,Controller as v}from"react-hook-form";import"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import{FormControlledMultipleAutocomplete as p}from"../../../FormControlledAutocomplete/FormControlledMultipleAutocomplete.esm.js";import{useLabelOptions as m}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"../../../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{FormFieldLabel as n}from"../../../FormFieldLabel/FormFieldLabel.esm.js";import{ISSUE_STATUS_OPTIONS as x,ISSUE_SEVERITY_OPTIONS as b,ISSUE_TYPE_OPTIONS as N}from"./utils.esm.js";const O=I(t=>({root:{paddingTop:t.spacing(1)},formInput:{marginTop:0,width:"500px",marginBottom:t.spacing(2)},helperText:{marginLeft:0}})),E=({name:t,disabled:r})=>{const o=O(),{control:a}=T(),c=m(x.map(l=>({label:l,value:l}))),u=m(b.map(l=>({label:l,value:l}))),f=m(N.map(l=>({label:l,value:l})));return h("div",{className:o.root,children:[e(n,{title:"Fact Name"}),e(i,{variant:"caption",children:"Fact name must be unique"}),e(s,{children:e(v,{name:`${t}.factName`,control:a,render:({field:l,fieldState:{error:d}})=>e(S,{...l,type:"text",variant:"outlined",margin:"dense",placeholder:"Fact Name",className:o.formInput,disabled:r,error:!!d,helperText:d?.message,FormHelperTextProps:{className:o.helperText}})})}),e(n,{title:"Issue Statuses (Optional)"}),e(i,{variant:"caption",children:"If not provided issues with all statuses will be collected"}),e(s,{className:o.formInput,children:e(p,{name:`${t}.statuses`,control:a,fullWidth:!0,freeSolo:!1,disabled:r,placeholder:"Example: OPEN",...c})}),e(n,{title:"Issue Severities (Optional)"}),e(i,{variant:"caption",children:"If not provided issues with all severities will be collected"}),e(s,{className:o.formInput,children:e(p,{name:`${t}.severities`,control:a,fullWidth:!0,freeSolo:!1,disabled:r,placeholder:"Example: BLOCKER",...u})}),e(n,{title:"Issue Types (Optional)"}),e(i,{variant:"caption",children:"If not provided issues with all types will be collected"}),e(s,{className:o.formInput,children:e(p,{name:`${t}.types`,control:a,fullWidth:!0,freeSolo:!1,disabled:r,placeholder:"Example: VULNERABILITY",...f})})]})};export{E as IssuesFactDetailsInput};
|
|
2
2
|
//# sourceMappingURL=IssuesFactDetailsInput.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as i,jsx as e}from"react/jsx-runtime";import{useRouteRef as
|
|
1
|
+
import{jsxs as i,jsx as e}from"react/jsx-runtime";import{LinkButton as S}from"@backstage/core-components";import{useRouteRef as u}from"@backstage/core-plugin-api";import{usePermission as U}from"@backstage/plugin-permission-react";import{makeStyles as D,CardContent as f,CardHeader as R,Typography as c,Tooltip as B,Divider as H,CardActions as L,Button as j}from"@material-ui/core";import{soundcheckCollectorUpdatePermission as A}from"@spotify/backstage-plugin-soundcheck-common";import{useNavigate as P}from"react-router-dom";import{integrationEditRouteRef as $,integrationDetailsRouteRef as M}from"../../../routes.esm.js";import{SoundcheckMarkdownContent as Y}from"../../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import"react";import"react-markdown";import"rehype-raw";import"remark-gfm";import{useSummaryCardStyles as w,Card as z}from"../../SummaryCard/SummaryCard.esm.js";import{hasLogo as E,CollectorLogo as q}from"./CollectorLogo.esm.js";const F=D(t=>({cardContent:{flex:1,paddingTop:t.spacing(1)},logoHeader:{paddingBottom:0,flex:0},headerContent:{display:"flex",alignItems:"center",height:t.spacing(5),marginBottom:t.spacing(1.5)},headerTypography:{marginBottom:0},usageText:{marginTop:t.spacing(.5)},checkUsageHover:{textDecoration:"underline",textDecorationStyle:"dotted","&:hover":{cursor:"default"}}})),G=({collector:t,hasNoCodeUI:l,routePath:y})=>{const{description:C,id:o,isConfigurable:m,isEditable:g,name:v}=t,{loading:p,allowed:h}=U({permission:A}),N=P(),b=u($),k=u(M),r=w(),a=F(),x=l&&m&&g&&!p&&h,I=()=>{N(y??b({integrationId:o}))};let n;p||!h?n="You don't have permissions to configure this integration.":m?g?l?t.hasUIConfig&&(n="Configured via UI."):n="Integration can only be configured through YAML.":n="Integration is already configured via YAML and cannot be configured through the UI.":n="Integration is not configurable.";const s=t?.dependentChecks?.length??0,d=v??o;return i(z,{"data-testid":o,className:r.card,children:[E(o)?e(f,{className:a.logoHeader,children:e(q,{collectorId:o})}):e(R,{title:d,titleTypographyProps:{className:`${r.summaryName} ${a.headerTypography}`},classes:{content:a.headerContent}}),i(f,{className:a.cardContent,children:[e(c,{variant:"body1",component:"div",children:e(Y,{className:r.summaryDescription,content:C??""})}),e(c,{color:"textSecondary",variant:"body2",children:n}),s>0&&i(c,{className:a.usageText,color:"textSecondary",variant:"body2",children:[e(B,{title:t.dependentChecks?.map(T=>T.name).join(", ")??"",children:i("span",{className:a.checkUsageHover,children:[s," check",s>1?"s":""]})})," ","use facts from this integration."]})]}),i("div",{children:[e(H,{}),i(L,{className:r.actionArea,children:[e(S,{size:"medium",variant:"outlined",className:r.button,to:k({integrationId:o}),children:"Details"}),x&&e(j,{"aria-label":`${d}-edit`,"data-testid":`${d}-button`,size:"medium",role:"link",onClick:I,className:r.button,variant:"outlined",children:"Configure"})]})]})]})};export{G as CollectorSummaryCard};
|
|
2
2
|
//# sourceMappingURL=CollectorSummaryCard.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as n}from"react/jsx-runtime";import{Typography as m}from"@material-ui/core";import{getContrastTextColor as p}from"../TechInsights/colorContrast.esm.js";const s=({value:r,getColor:l,numericValue:o,size:t="medium"})=>{const e=l(o||0),i=p(e);return n(m,{style:{backgroundColor:e,color:i,borderRadius:"4px",textAlign:"center",fontWeight:"bold",fontSize:t==="small"?"0.7rem":"0.9rem",minWidth:t==="small"?"32px":"48px",width:t==="small"?"32px":"48px",height:t==="small"?"15px":"28px",display:"flex",alignItems:"center",justifyContent:"center",padding:t==="small"?"0 4px":"0 8px"},children:r})};export{s as ColorChip};
|
|
2
|
+
//# sourceMappingURL=ColorChip.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as T}from"react/jsx-runtime";import{makeStyles as F,FormControlLabel as O,Checkbox as z,Typography as A,Box as
|
|
1
|
+
import{jsx as e,jsxs as T}from"react/jsx-runtime";import{makeStyles as F,FormControlLabel as O,Checkbox as z,Typography as A,Box as w,TextField as I}from"@material-ui/core";import j from"@material-ui/icons/CheckBox";import B from"@material-ui/icons/CheckBoxOutlineBlank";import E from"@material-ui/icons/ExpandMore";import{Autocomplete as G}from"@material-ui/lab";import{useState as N,useMemo as m,useCallback as p}from"react";import{useGetEntityRefs as D}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{FormFieldLabel as H}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as M}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const P=F({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),Q=({label:d,values:o,onChange:n,disabled:f,filter:g,renderOption:b,renderTags:h})=>{const i=P(),[C,a]=N(!1),{data:t,isLoading:u,error:k}=D(g),s=m(()=>o?.map(l=>l.toLocaleLowerCase("en-US"))??[],[o]),x=p((l,r)=>{n(r),t&&t.every(c=>r.includes(c))&&a(!1)},[t,n]),y=p(()=>{n(o?.length?o:void 0)},[o,n]),L=p((l,r)=>b?.(l,r)??e(O,{onClick:c=>c.preventDefault(),control:e(z,{icon:e(B,{fontSize:"small"}),checkedIcon:e(j,{fontSize:"small"}),checked:r.selected}),label:l,classes:{label:i.label}}),[b,i.label]),S=m(()=>f||u||!o?.length&&!t?.length,[f,u,o?.length,t?.length]),v=m(()=>Array.from(new Set([...t??[],...s])),[t,s]);return k?e(A,{color:"error",children:"Failed to load entities"}):T(w,{pb:1,pt:1,className:i.container,children:[e(H,{title:d,docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(G,{open:C,onOpen:()=>a(!0),onClose:()=>a(!1),className:i.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":d,options:v,value:s,onChange:x,onBlur:y,disabled:S,ListboxComponent:M,renderOption:L,renderTags:h,size:"small",popupIcon:e(E,{"data-testid":"selected-facets-expand"}),renderInput:l=>e(I,{...l,variant:"outlined"})})]})};export{Q as EntitiesAutocompletePicker};
|
|
2
2
|
//# sourceMappingURL=EntitiesAutocompletePicker.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import{motion as a}from"framer-motion";const d={hidden:{height:0,opacity:0,overflow:"hidden"},visible:{height:"auto",opacity:1,overflow:"visible"}};function r({visible:o,onExpandDone:i,...e}){return t(a.div,{...e,animate:o?"visible":"hidden",initial:"hidden",variants:d,onAnimationComplete:n=>{n==="visible"&&i&&i()}})}export{r as default};
|
|
2
2
|
//# sourceMappingURL=Expand.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as
|
|
1
|
+
import{jsx as e,jsxs as a,Fragment as v}from"react/jsx-runtime";import{makeStyles as q,Box as o,Typography as r,TextField as X,Button as j}from"@material-ui/core";import{Alert as Y}from"@material-ui/lab";import{parseFactRef as Z}from"@spotify/backstage-plugin-soundcheck-common";import ee from"lodash";import{useMemo as g,useState as S,useEffect as te,useCallback as ae}from"react";import{useGetEntityRefs as ie}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{useGetCollectors as oe}from"../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as re}from"../../hooks/collectors/useGetFactSchema.esm.js";import{useGetFact as ne}from"../../hooks/useGetFact.esm.js";import{useGetPathResolvers as le}from"../../hooks/useGetPathResolvers.esm.js";import{generateJsonPaths as ce}from"../CheckForm/utils/checkFormUtils.esm.js";import{hasLogo as se,CollectorLogo as de}from"../CollectorsPage/CollectorListPage/CollectorLogo.esm.js";import{ExpandableSection as B}from"../ExpandableSection/ExpandableSection.esm.js";import{mapFiltersToCatalogFilter as he}from"../Filter/utils.esm.js";import"../Filter/FilterComponent.esm.js";import{emptyFilters as pe}from"../Filter/types.esm.js";import{FormattedPreview as E}from"../FormattedPreview/FormattedPreview.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as me}from"../FormControlledAutocomplete/useLabelOptions.esm.js";import{ControlledAutocomplete as y}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as fe}from"../LoadingIndicator/LoadingIndicator.esm.js";import{useFactOptions as ue}from"./useFactOptions.esm.js";const ve=800,ge=q(t=>({content:{padding:t.spacing(2,3),width:ve},section:{margin:t.spacing(2,0)},expandedSection:{borderTop:`1px solid ${t.palette.divider}`,padding:t.spacing(0,2)},loading:{margin:t.spacing(2)},preview:{maxHeight:500,overflow:"auto",border:`1px solid ${t.palette.divider}`},pathSection:{display:"flex",alignItems:"center",margin:t.spacing(1,0)},testPathButton:{margin:t.spacing(1,1,.5,0)},collectorName:{fontSize:24}})),I=t=>{const p=!t||Object.values(t).every(h=>!h?.length)?{...pe(),selectedKinds:["Component","System"]}:t;return he(p)},ye=({factRef:t,updateFactRef:p,path:h,updatePath:W,entityRef:m,updateEntityRef:k,pathResolver:s,filters:G,onSave:C,hidePath:w})=>{const i=ge(),d=g(()=>{if(t)try{return Z(t)}catch{return}},[t]),[F,L]=S(d?.source??null);te(()=>{d?.source&&L(d.source)},[d?.source]);const[b,V]=S("jsonpath"),[x,P]=S(),[N,M]=S(),{data:O}=le(),$=g(()=>O?.map(c=>c.id)??[],[O]),{data:f}=re(d?.source,d?.name,!0),A=g(()=>f?ce(f.schema):[],[f]),{data:R,isLoading:D}=oe(),J=R?.map(c=>c.id)?.sort()??[],{data:z,isLoading:H}=ie(I(G),500),n=g(()=>R?.find(c=>c.id===F),[R,F]),{factOptions:K}=ue({selectedCollector:n}),{options:Q,getOptionLabel:T}=me(K),{data:l,isLoading:u}=ne({factRef:t||"",entityRef:N||"",path:x,pathResolver:s??b??void 0},!!t&&!!N),U=ae(()=>{P(h),M(m)},[m,h]),_=g(()=>!!n?.config?.cache,[n]);return e(o,{className:i.content,"data-testid":"fact-explorer",children:a(o,{children:[a(o,{children:[e(r,{variant:"subtitle1",children:"Select an Integration"}),e(y,{options:J,onChange:c=>{L(c),p("")},value:F,placeholder:"Integration",disabled:D,fullWidth:!0,freeSolo:!0})]}),!n&&e(v,{children:a(o,{children:[e(r,{variant:"subtitle1",children:"Enter a Fact Ref Directly"}),e(X,{value:t,onChange:c=>p(c.currentTarget.value),variant:"outlined",margin:"dense",placeholder:"Enter the full fact ref, i.e. custom:default/custom-fact",fullWidth:!0})]})}),!!n&&e(v,{children:a(o,{className:i.section,children:[se(n.id)?e(de,{noMargin:!0,collectorId:n.id}):a(r,{variant:"h5",className:i.collectorName,component:"div",children:[n.name??n.id," "]}),!!n.description&&e(r,{variant:"body2",children:n.description}),e(y,{options:Q,onChange:p,value:t??null,placeholder:"Select Fact",getOptionLabel:T,noOptionsText:"No Facts",fullWidth:!0})]})}),!!t&&!!d&&a(v,{children:[!!f?.schema&&e(o,{className:i.section,children:e(B,{elevation:1,title:"JSON Schema",children:e("div",{className:i.preview,children:e(E,{data:f.schema})})})}),!w&&a(v,{children:[a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Path Resolver"}),!s&&e(r,{variant:"caption",children:"Defaults to jsonpath"}),s?e(r,{variant:"body1",children:s}):e(y,{options:$,onChange:V,value:s??b,placeholder:"Path Resolver (Optional)",getOptionLabel:T,fullWidth:!0,disabled:!!s,freeSolo:!0})]}),a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Path"}),e(y,{options:(s??b)==="jsonpath"?A:[],onChange:c=>{x&&P(void 0),W(c)},value:h??null,placeholder:"Path",fullWidth:!0,freeSolo:!0}),e("div",{className:i.pathSection,children:!!C&&e(j,{className:i.testPathButton,variant:"contained",onClick:()=>C({factRef:t,path:h??"",pathResolver:b??s??""}),disabled:!h,color:"primary",children:"Save"})})]})]})]}),!!t&&!!d&&e(B,{alwaysExpanded:w,elevation:0,title:"Sample Fact and Test Path",children:a(o,{className:i.expandedSection,children:[a(o,{marginBottom:1,children:[e(r,{variant:"subtitle1",children:"Select an Entity"}),a(r,{variant:"caption",children:["Fact will be sampled from this entity.",e("br",{}),"If you don't see the entity in the drop-down list, you can type its reference in the format ","<kind>:<namespace>/<name>","."]}),e(y,{options:z??[],onChange:k,value:m??null,placeholder:"Entity Selection",isLoading:H,freeSolo:!0,fullWidth:!0})]}),e(o,{children:e(j,{className:i.testPathButton,variant:"contained",onClick:U,disabled:!m,color:"primary",children:"Sample Fact"})}),a(v,{children:[!!x&&!u&&a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Resolved Value"}),l?.resolvedValue!==null&&l?.resolvedValue!==void 0?e(o,{className:i.preview,children:e(E,{data:l?.resolvedValue})}):e(r,{color:"textSecondary",variant:"body2",children:"Could not resolve path"})]}),!!N&&a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Fact Data"}),_&&e(r,{variant:"caption",children:"Uses cache when available."}),!!u&&e("div",{className:i.loading,children:e(fe,{})}),!u&&!!l?.fact&&e(o,{className:i.preview,children:l?.fact?.sensitive&&ee.isEmpty(l?.fact?.data)?e(o,{children:e(Y,{severity:"info",children:"The associated fact contains potentially sensitive information and has been redacted."})}):e(E,{data:l?.fact?.data})}),!u&&!!l?.collectionError&&a(r,{color:"textSecondary",variant:"body2",children:["Failed to collect:"," ",l?.collectionError?.errorMessage]}),!u&&!l?.fact&&!l?.collectionError&&a(r,{color:"textSecondary",variant:"body2",children:["Fact ",t," unavailable for entity ",m]})]})]})]})})]})})};export{ye as FactExplorer,I as toEntityFilterQuery};
|
|
2
2
|
//# sourceMappingURL=FactExplorer.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as
|
|
1
|
+
import{jsx as t,jsxs as R,Fragment as P}from"react/jsx-runtime";import{createContext as F,useState as e}from"react";import{useFormContext as E}from"react-hook-form";import{FactExplorerDialog as S}from"./FactExplorerDialog.esm.js";const a=F({open:!1,updateOpen:()=>{},updateOnSave:()=>{},updateFactRef:()=>{},updatePath:()=>{},updateEntityRef:()=>{},updatePathResolver:()=>{}}),g=({children:r,hidePath:o})=>{const[p,n]=e(!1),[d,i]=e(),[u,l]=e(),[f,h]=e(),[s,c]=e(),[m,v]=e(),x=E()?.getValues("filtersStep.filter");return t(a.Provider,{value:{open:p,updateOpen:n,onSave:d,updateOnSave:i,factRef:u,updateFactRef:l,path:f,updatePath:h,entityRef:s,updateEntityRef:c,pathResolver:m,updatePathResolver:v,filters:x},children:R(P,{children:[r,t(S,{hidePath:o})]})})};export{a as FactExplorerContext,g as FactExplorerProvider};
|
|
2
2
|
//# sourceMappingURL=FactExplorerContext.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as a}from"react/jsx-runtime";import{Button as
|
|
1
|
+
import{jsx as a}from"react/jsx-runtime";import{Button as v}from"@material-ui/core";import F from"@material-ui/icons/Search";import{useContext as d}from"react";import{SoundcheckDialog as E}from"../SoundcheckDialog/SoundcheckDialog.esm.js";import{FactExplorer as P}from"./FactExplorer.esm.js";import{FactExplorerContext as h}from"./FactExplorerContext.esm.js";const S=({hidePath:t})=>{const{open:o,updateOpen:r,onSave:p,factRef:n,updateFactRef:i,path:c,updatePath:l,entityRef:f,updateEntityRef:e,pathResolver:s,filters:u}=d(h);return a(E,{open:o,handleClose:()=>r(!1),title:"Fact Explorer",fullScreen:!1,children:a(P,{onSave:p,factRef:n,updateFactRef:i,path:c,updatePath:l,entityRef:f,updateEntityRef:e,pathResolver:s,filters:u,hidePath:t})})},g=({onSave:t,factRef:o,path:r,pathResolver:p,className:n,text:i="Explore Facts",hideIcon:c,variant:l="text",size:f})=>{const{updateOpen:e,updateOnSave:s,updateFactRef:u,updatePath:m,updatePathResolver:R}=d(h);return a(v,{onClick:()=>{e(!0),u(o??""),m(r??""),R(p??""),s(()=>x=>{t&&t(x),e(!1)})},className:n,variant:l,size:f,startIcon:c?void 0:a(F,{}),children:i})};export{S as FactExplorerDialog,g as FactExplorerDialogButton};
|
|
2
2
|
//# sourceMappingURL=FactExplorerDialog.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{parseFactRef as
|
|
1
|
+
import{parseFactRef as i,stringifyFactRef as p}from"@spotify/backstage-plugin-soundcheck-common";import{useMemo as n}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as s}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";const l=({selectedCollector:e})=>{const{data:a}=s({});return{factOptions:n(()=>e?.factNames?.map(o=>{const t=e.id==="soundcheck"?{source:e.id,scope:"default",name:o}:i(o,{defaultSource:e.id,defaultScope:"default"});let m=t.name;if(e?.id==="soundcheck"){const r=a?.edges.find(c=>c.node.id===t.name.replace("track/",""))?.node;m=r?`${r.type==="campaign"?"Campaign: ":"Track: "}${r.name}`:t.name}return{label:m,value:p(t)}})?.sort((o,t)=>o.label.localeCompare(t.label))??[],[e?.factNames,e?.id,a])}};export{l as useFactOptions};
|
|
2
2
|
//# sourceMappingURL=useFactOptions.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as L}from"react/jsx-runtime";import{makeStyles as z,FormControlLabel as A,Checkbox as I,Typography as j,Box as B,TextField as E}from"@material-ui/core";import G from"@material-ui/icons/CheckBox";import N from"@material-ui/icons/CheckBoxOutlineBlank";import U from"@material-ui/icons/ExpandMore";import{Autocomplete as V}from"@material-ui/lab";import{useState as
|
|
1
|
+
import{jsx as t,jsxs as L}from"react/jsx-runtime";import{makeStyles as z,FormControlLabel as A,Checkbox as I,Typography as j,Box as B,TextField as E}from"@material-ui/core";import G from"@material-ui/icons/CheckBox";import N from"@material-ui/icons/CheckBoxOutlineBlank";import U from"@material-ui/icons/ExpandMore";import{Autocomplete as V}from"@material-ui/lab";import{useState as $,useMemo as s,useCallback as d}from"react";import{useGetEntityFacets as D}from"../../hooks/catalog/useGetEntityFacets.esm.js";import{FormFieldLabel as H}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as M}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const P=z({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),q=({facet:f,label:b,values:l,onChange:n,disabled:g,filter:x,renderOption:u,renderTags:k,facetFilter:h})=>{const i=P(),[y,c]=$(!1),{data:r,isLoading:C,error:S}=D(f,x),o=s(()=>r?.filter(h??(()=>!0)).map(e=>e.toLocaleLowerCase("en-US")),[r,h]),m=s(()=>l?.map(e=>e.toLocaleLowerCase("en-US"))??[],[l]),F=d((e,a)=>{n(a),o&&o.every(p=>a.includes(p))&&c(!1)},[o,n]),T=d(()=>{n(l?.length?l:void 0)},[l,n]),v=d((e,a)=>u?.(e,a)??t(A,{onClick:p=>p.preventDefault(),control:t(I,{icon:t(N,{fontSize:"small"}),checkedIcon:t(G,{fontSize:"small"}),checked:a.selected}),label:e,classes:{label:i.label}}),[u,i.label]),O=s(()=>g||C||!l?.length&&(!r?.length||!o?.length),[g,C,l?.length,r?.length,o?.length]),w=s(()=>Array.from(new Set([...o??[],...m])),[o,m]);return S?L(j,{color:"error",children:["Failed to load facet: ",f]}):L(B,{pb:1,pt:1,className:i.container,children:[t(H,{title:b,docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),t(V,{open:y,onOpen:()=>c(!0),onClose:()=>c(!1),className:i.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":b,options:w,value:m,getOptionLabel:e=>r&&o?r[o.indexOf(e)]??e:e,onChange:F,onBlur:T,disabled:O,ListboxComponent:M,renderOption:v,renderTags:k,size:"small",popupIcon:t(U,{"data-testid":"selected-facets-expand"}),renderInput:e=>t(E,{...e,variant:"outlined"})})]})};export{q as EntityAutocompletePicker};
|
|
2
2
|
//# sourceMappingURL=EntityAutocompletePicker.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as s,jsx as e,Fragment as p}from"react/jsx-runtime";import{createElement as T}from"react";import{parseEntityRef as w}from"@backstage/catalog-model";import{useApi as E,configApiRef as L}from"@backstage/core-plugin-api";import{EntityDisplayName as h}from"@backstage/plugin-catalog-react";import{makeStyles as O,Box as f,Typography as R,Button as g,Grid as n,Checkbox as z,Chip as N}from"@material-ui/core";import{combineEntityFilterQueries as j}from"@spotify/backstage-plugin-soundcheck-common";import{
|
|
1
|
+
import{jsxs as s,jsx as e,Fragment as p}from"react/jsx-runtime";import{createElement as T}from"react";import{parseEntityRef as w}from"@backstage/catalog-model";import{useApi as E,configApiRef as L}from"@backstage/core-plugin-api";import{EntityDisplayName as h}from"@backstage/plugin-catalog-react";import{makeStyles as O,Box as f,Typography as R,Button as g,Grid as n,Checkbox as z,Chip as N}from"@material-ui/core";import{combineEntityFilterQueries as j,getGroupFilterFromConfig as B}from"@spotify/backstage-plugin-soundcheck-common";import{EntitiesAutocompletePicker as W}from"../EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js";import{EntityAutocompletePicker as c}from"../Filter/EntityAutocompletePicker.esm.js";const y=(i,{selected:r})=>s(p,{children:[e(z,{value:i,checked:r,color:"primary"}),e(h,{entityRef:i})]}),u=(i,r)=>e(p,{children:i.map((l,a)=>T(N,{...r({index:a}),key:l,label:e(h,{entityRef:l}),size:"small"}))}),D=i=>{try{return w(i).kind.toLowerCase()==="system"}catch{return!1}},G=O(i=>({sidebar:{width:"275px",flexShrink:0,height:"100%",padding:i.spacing(3),display:"flex",flexDirection:"column",borderRight:`1px solid ${i.palette.divider}`},filterLabel:{fontWeight:"bold",marginBottom:i.spacing(1)},additionalFilters:{marginTop:i.spacing(2)}})),P=({trackFilter:i,stagedTypes:r,stagedLifecycles:l,stagedOwners:a,stagedSystems:d,onTypesChange:b,onLifecyclesChange:C,onOwnersChange:x,onSystemsChange:F,onApplyFilters:k,onClearFilters:v,hasFilterChanges:A,children:m})=>{const o=G(),S=E(L);return s("div",{className:o.sidebar,children:[s(f,{display:"flex",alignItems:"center",justifyContent:"space-between",mb:1,children:[e(R,{variant:"subtitle2",className:o.filterLabel,children:"Filters"}),(r.length>0||l.length>0||a.length>0||d.length>0)&&e(g,{size:"small",onClick:v,children:"Clear All"})]}),s(n,{container:!0,spacing:1,children:[e(n,{item:!0,xs:12,children:e(c,{facet:"spec.type",label:"Type",values:r,onChange:t=>b(t??[]),filter:i})}),e(n,{item:!0,xs:12,children:e(c,{facet:"spec.lifecycle",label:"Lifecycle",values:l,onChange:t=>C(t??[]),filter:i})}),e(n,{item:!0,xs:12,children:e(W,{label:"Owner",values:a,onChange:t=>x(t??[]),filter:j({kind:["group"]},B(S)),renderOption:y,renderTags:u})}),e(n,{item:!0,xs:12,children:e(c,{facet:"relations.partOf",label:"System",values:d,onChange:t=>F(t??[]),filter:i,renderOption:y,renderTags:u,facetFilter:D})})]}),m&&e("div",{className:o.additionalFilters,children:m}),e(f,{mt:2,children:e(g,{variant:"contained",color:"primary",size:"small",fullWidth:!0,onClick:k,disabled:!A,children:"Apply Filters"})})]})};export{P as FilterSidebar};
|
|
2
2
|
//# sourceMappingURL=FilterSidebar.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as s,jsx as e}from"react/jsx-runtime";import{makeStyles as h,Box as r,TextField as C,FormControlLabel as S,Checkbox as b,Typography as g}from"@material-ui/core";import x from"@material-ui/icons/CheckBox";import k from"@material-ui/icons/CheckBoxOutlineBlank";import L from"@material-ui/icons/ExpandMore";import{Autocomplete as I}from"@material-ui/lab";import{useState as A,useEffect as F,useCallback as c}from"react";import{CheckIcon as
|
|
1
|
+
import{jsxs as s,jsx as e}from"react/jsx-runtime";import{makeStyles as h,Box as r,TextField as C,FormControlLabel as S,Checkbox as b,Typography as g}from"@material-ui/core";import x from"@material-ui/icons/CheckBox";import k from"@material-ui/icons/CheckBoxOutlineBlank";import L from"@material-ui/icons/ExpandMore";import{Autocomplete as I}from"@material-ui/lab";import{useState as A,useEffect as F,useCallback as c}from"react";import{CheckIcon as T}from"../CheckIcon/CheckIcon.esm.js";import{FormFieldLabel as E}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as y}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const N=["PASSED","FAILED","WARNING","EXEMPT","NOT_APPLICABLE"],O=h({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),m=l=>l.toLowerCase().split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" "),P=(l,{selected:t})=>e(S,{onClick:o=>o.preventDefault(),control:e(b,{icon:e(k,{fontSize:"small"}),checkedIcon:e(x,{fontSize:"small"}),checked:t}),label:s(r,{display:"flex",alignItems:"center",children:[e(T,{result:l}),e(r,{mr:1}),e(g,{children:m(l)})]})}),v=({states:l,stagedStates:t,onStagedStatesChange:o})=>{const a=O(),[p,n]=A(!1);F(()=>{o(l)},[l,o]);const d=c((i,u)=>{o(u)},[o]),f=c(()=>{o(t?.length?t:[])},[t,o]);return s(r,{pb:1,pt:1,className:a.container,children:[e(E,{title:"State",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(I,{open:p,onOpen:()=>n(!0),onClose:()=>n(!1),className:a.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":"State",options:N,value:t,getOptionLabel:m,onChange:d,onBlur:f,ListboxComponent:y,renderOption:P,size:"small",popupIcon:e(L,{"data-testid":"selected-facets-expand"}),renderInput:i=>e(C,{...i,variant:"outlined"})})]})};export{v as StateFilter};
|
|
2
2
|
//# sourceMappingURL=StateFilter.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as n,jsxs as P,Fragment as T}from"react/jsx-runtime";import{makeStyles as V,TextField as v,IconButton as z}from"@material-ui/core";import j from"@material-ui/icons/Clear";import{Autocomplete as k}from"@material-ui/lab";import{useState as F,useMemo as W}from"react";import{ListboxVirtualized as y}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const B=V(l=>({clearIndicator:{marginRight:l.spacing(.5)}})),D=({options:l,onChange:r,value:t,placeholder:d,getOptionLabel:s,disabled:p,fullWidth:u,noOptionsText:m,freeSolo:c=!1,isLoading:g=!1,autoSelect:I=!0,renderOption:f,testId:h,disableCloseOnSelect:S,multiple:o,multipleValue:a,getOptionSelected:b})=>{const[C,O]=F(t??""),x=B(),A=W(()=>o?a||[]:t||null,[o,a,t]),L=!o&&t;return n(k,{multiple:o,disableCloseOnSelect:S,options:l,inputValue:C,classes:{clearIndicator:x.clearIndicator},onInputChange:(e,i)=>O(i),onChange:(e,i)=>r(i),value:A,getOptionLabel:s,ListboxComponent:y,disabled:p,fullWidth:u,noOptionsText:m,freeSolo:c,loading:g,closeIcon:null,disableClearable:!0,getOptionSelected:b,autoSelect:I,renderOption:f,renderTags:()=>null,"data-testid":h,renderInput:e=>n(v,{...e,placeholder:d,variant:"outlined",margin:"dense",InputProps:{...e.InputProps,endAdornment:L?P(T,{children:[n(z,{onClick:()=>r(""),size:"small",children:n(j,{fontSize:"small"})}),e.InputProps.endAdornment]}):e.InputProps.endAdornment}})})};export{D as ControlledAutocomplete};
|
|
2
2
|
//# sourceMappingURL=ControlledAutocomplete.esm.js.map
|
package/dist/components/FormControlledAutocomplete/FormControlledMultipleAutocomplete.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e}from"react/jsx-runtime";import{TextField as L,FormControlLabel as k,Checkbox as z}from"@material-ui/core";import F from"@material-ui/icons/CheckBox";import I from"@material-ui/icons/CheckBoxOutlineBlank";import{Autocomplete as O}from"@material-ui/lab";import{Controller as W}from"react-hook-form";import{ListboxVirtualized as
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import{TextField as L,FormControlLabel as k,Checkbox as z}from"@material-ui/core";import F from"@material-ui/icons/CheckBox";import I from"@material-ui/icons/CheckBoxOutlineBlank";import{Autocomplete as O}from"@material-ui/lab";import{Controller as W}from"react-hook-form";import{ListboxVirtualized as w}from"../ListboxVirtualized/ListboxVirtualized.esm.js";import{useStyles as y}from"./FormControlledAutocomplete.esm.js";const A=({name:i,rules:p,label:c,control:u,options:f,getOptionLabel:h,getOptionValue:m,onChange:b,disabled:C,placeholder:g,freeSolo:x=!0,width:s,helperText:v,disableClearable:S,fullWidth:d})=>{const a=y();return e(W,{name:i,control:u,rules:p,render:({field:l,fieldState:n})=>e(O,{...l,value:l.value,freeSolo:x,autoSelect:!0,"data-testid":`${i}-autocomplete`,style:s?{width:s}:{minWidth:d?void 0:250},disabled:C,options:f,getOptionLabel:h,classes:{clearIndicator:a.clearIndicator},disableClearable:S,fullWidth:d,multiple:!0,size:"small",renderInput:o=>e(L,{...o,variant:"outlined",label:c,error:n.invalid,placeholder:l.value?.length?"":g,FormHelperTextProps:{className:a.helperText},margin:"dense",className:a.noMargin,helperText:v??(n.error?n.error.message:null)}),renderOption:(o,{selected:t})=>e(k,{onClick:r=>r.preventDefault(),control:e(z,{icon:e(I,{fontSize:"small"}),checkedIcon:e(F,{fontSize:"small"}),checked:t}),label:o}),onChange:(o,t)=>{const r=m?t.map(T=>m(T)):t;b?.(r),l.onChange(r)},ListboxComponent:w})})};export{A as FormControlledMultipleAutocomplete};
|
|
2
2
|
//# sourceMappingURL=FormControlledMultipleAutocomplete.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as m,jsx as t}from"react/jsx-runtime";import{Box as l,Typography as c}from"@material-ui/core";import{upperFirst as f,isEmpty as g}from"lodash";import{useMemo as i}from"react";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 G}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{GroupHierarchyChip as x}from"./GroupHierarchyChip.esm.js";const C=({selectedGroupEntityRef:p,groupType:o,allOptions:a,selectGroup:n,isLoading:u})=>{const e=i(()=>a.filter(r=>r.type===o),[a,o]),d=i(()=>e.map(r=>r.ref),[e]),s=i(()=>e.filter(r=>r.key==="My Groups").map(r=>r.ref),[e]),y=i(()=>e.find(r=>r.ref===p)?.ref||null,[e,p]);return m(l,{maxWidth:480,marginBottom:1,children:[t(c,{variant:"subtitle2",children:f(o)}),t(G,{value:y,options:d,onChange:n,autoSelect:!1,getOptionLabel:r=>e.find(h=>h.ref===r)?.name??r,isLoading:u,placeholder:`Search all ${o}s`}),!g(s)&&m(l,{marginTop:1,children:[m(c,{variant:"subtitle2",children:["My ",f(o),"s"]}),t(l,{marginTop:1,children:s.map(r=>t(x,{selectedGroupRef:p,groupEntityRef:r,setSelectedGroup:n},r))})]})]})};export{C as GroupHierarchyCategorySelection};
|
|
2
|
+
//# sourceMappingURL=GroupHierarchyCategorySelection.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{EntityDisplayName as l}from"@backstage/plugin-catalog-react";import{Chip as p}from"@material-ui/core";const s=({groupEntityRef:o,selectedGroupRef:e,setSelectedGroup:i})=>{const t=o===e;return r(p,{onClick:t?void 0:()=>i(o),size:"small",color:t?"secondary":"default",label:r(l,{entityRef:o,disableTooltip:!0}),style:{marginBottom:6}},o)};export{s as GroupHierarchyChip};
|
|
2
|
+
//# sourceMappingURL=GroupHierarchyChip.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as r,jsx as e,Fragment as b}from"react/jsx-runtime";import{useEntityPresentation as B,EntityDisplayName as O}from"@backstage/plugin-catalog-react";import{Box as l,Typography as p}from"@material-ui/core";import{isEmpty as d}from"lodash";import{useMemo as s}from"react";import{useGroupHierarchy as x}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";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 j}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as C}from"../LoadingIndicator/LoadingIndicator.esm.js";import{GroupHierarchyChip as H}from"./GroupHierarchyChip.esm.js";const S=({filteredGroupOptions:t,setSelectedGroup:m,selectedGroupRef:u})=>{const c=s(()=>t.map(n=>n.ref),[t]),h=s(()=>t.find(n=>n.ref===u)?.ref||null,[t,u]);return r(b,{children:[!d(t)&&t.length>=20&&e(l,{marginBottom:2,children:e(j,{options:c,onChange:m,value:h,autoSelect:!1,getOptionLabel:n=>t.find(f=>f.ref===n)?.name??n,placeholder:"Search groups"})}),!d(t)&&t.length<20&&t.map(({ref:n})=>e(H,{setSelectedGroup:m,groupEntityRef:n},n))]})},L=({groupEntityRef:t,selectedGroup:m,setSelectedGroup:u,groupOptions:c})=>{const{primaryTitle:h,secondaryTitle:n}=B(t),{isLoading:f,data:R}=x(t,{includeParent:!0}),i=R?.[t],y=s(()=>{if(!i)return 0;let a=0;const o=(E={})=>{a+=E.ownedEntityRefs?.length??0;for(const w of Object.values(E.children))o(w)};return o(i),a},[i]),g=s(()=>{const a=i?.children??{};return Object.values(a).map(o=>({ref:o.entityRef,type:o.type}))},[i?.children]),G=s(()=>{if(d(g))return[];const a=new Set(g.map(o=>o.ref));return c.filter(o=>a.has(o.ref))},[g,c]),v=s(()=>{if(d(i?.parents))return[];const a=new Set(i?.parents??[]);return c.filter(o=>a.has(o.ref))},[i?.parents,c]);return r(l,{children:[r(l,{marginBottom:1,children:[e(p,{variant:"h6",children:e(O,{entityRef:t})}),e(p,{variant:"caption",children:n})]}),f&&r(l,{textAlign:"center",marginTop:2,marginBottom:2,children:[e(C,{}),e(l,{marginTop:2,children:e(p,{variant:"caption",children:"Loading Group Hierarchy"})})]}),i?.ownedEntityRefs&&r(l,{marginBottom:2,children:[e(p,{variant:"subtitle2",children:"Entity Ownership"}),r(p,{variant:"body2",children:[r("strong",{children:[h," directly owns:"]})," ",i.ownedEntityRefs.length," ",i.ownedEntityRefs.length===0?"Entity":"Entities"]}),r(p,{variant:"body2",children:[r("strong",{children:[h," and it's subgroups own:"]})," ",y," ",y===0?"Entity":"Entities"]})]}),!f&&r(b,{children:[r(l,{marginBottom:2,children:[e(p,{variant:"subtitle2",children:"Select Child Group"}),d(G)&&e(p,{variant:"body2",children:"No child groups"}),e(S,{filteredGroupOptions:G,setSelectedGroup:u,selectedGroupRef:m})]}),r(l,{marginBottom:2,children:[e(p,{variant:"subtitle2",children:"Select Parent Group"}),d(v)&&e(p,{variant:"body2",children:"No parent groups"}),e(S,{filteredGroupOptions:v,setSelectedGroup:u,selectedGroupRef:m})]})]})]})};export{L as GroupHierarchyGroupInfo};
|
|
2
|
+
//# sourceMappingURL=GroupHierarchyGroupInfo.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as d,Fragment as f,jsx as t}from"react/jsx-runtime";import{Button as G}from"@material-ui/core";import y from"@material-ui/icons/Menu";import{useState as l,useCallback as s}from"react";import{GroupHierarchySelectorDialog as h}from"./GroupHierarchySelectorDialog.esm.js";import{usePreviousSelectedGroups as S}from"./usePreviousSelectedGroups.esm.js";const g=({buttonProps:u,currentSelectedGroup:r,applyGroup:p})=>{const[c,e]=l(!1),[o,i]=l(""),{groupEntityRefs:n}=S(),a=s(()=>{r&&i(r),e(!0)},[r]),m=s(()=>{p(o),e(!1)},[p,o]);return d(f,{children:[t(G,{onClick:a,color:"primary",variant:"outlined",...u,size:"small",startIcon:t(y,{}),children:"Group"}),t(h,{open:c,handleClose:()=>e(!1),handleApply:m,previousGroupEntityRefs:n,selectedGroup:o,setSelectedGroup:i})]})};export{g as GroupHierarchySelector};
|
|
2
|
+
//# sourceMappingURL=GroupHierarchySelector.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as e,jsxs as i,Fragment as R}from"react/jsx-runtime";import{makeStyles as L,Slide as D,Dialog as E,DialogTitle as j,Box as r,IconButton as A,DialogContent as H,Typography as a,Divider as O,DialogActions as k,Button as S}from"@material-ui/core";import I from"@material-ui/icons/Close";import{uniq as N,isEmpty as g}from"lodash";import{forwardRef as z,useMemo as f}from"react";import{useGroupOptions as w}from"../../hooks/groups/useGroupOptions.esm.js";import{useGroupTypeHierarchy as M}from"../../hooks/heirarchy/useGroupTypeHierarchy.esm.js";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 W}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as K}from"../LoadingIndicator/LoadingIndicator.esm.js";import{GroupHierarchyCategorySelection as P}from"./GroupHierarchyCategorySelection.esm.js";import{GroupHierarchyChip as y}from"./GroupHierarchyChip.esm.js";import{GroupHierarchyGroupInfo as q}from"./GroupHierarchyGroupInfo.esm.js";const F=L(n=>({dialogToolbar:{justifyContent:"flex-start"},dialogToolbarButton:{margin:n.spacing(.5,1,.5,0)},divider:{marginTop:n.spacing(2),marginBottom:n.spacing(2)}})),_=z((n,d)=>e(D,{direction:"up",ref:d,...n})),J=({open:n,handleClose:d,handleApply:b,previousGroupEntityRefs:s,selectedGroup:t,setSelectedGroup:p})=>{const m=F(),{isLoading:G,options:l}=w(),{isLoading:T,data:h}=M(),B=f(()=>{if(!h)return[];const o=[],c=u=>{o.push(u.type);for(const x of Object.values(u.children))c(x)};for(const u of Object.values(h))c(u);return N(o)},[h]),v=f(()=>l.filter(o=>o.key==="My Groups").map(o=>o.ref),[l]),C=f(()=>l.map(o=>o.ref),[l]);return i(E,{fullWidth:!0,maxWidth:"md",open:n,onClose:(o,c)=>c==="escapeKeyDown"&&d(),TransitionComponent:_,children:[e(j,{children:i(r,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[e(r,{children:"Group Selection"}),e(r,{children:e(A,{onClick:d,size:"small",children:e(I,{fontSize:"small"})})})]})}),e(H,{dividers:!0,children:i(r,{display:"flex",children:[i(r,{maxWidth:480,flex:1,children:[i(r,{marginBottom:2,children:[e(a,{variant:"h6",children:"Search All Groups"}),e(a,{variant:"subtitle2",children:"Selected Group"}),e(W,{options:C,isLoading:G,value:t,autoSelect:!1,getOptionLabel:o=>l.find(c=>c.ref===o)?.name??o,onChange:p,placeholder:"No group selected"})]}),e(O,{className:m.divider}),!t&&!g(s)&&i(r,{marginBottom:2,children:[e(a,{variant:"subtitle2",children:"Previously Selected Groups"}),e(r,{marginTop:1,children:s.map(o=>e(y,{groupEntityRef:o,selectedGroupRef:t,setSelectedGroup:p},o))})]}),!t&&!g(v)&&i(r,{marginBottom:2,children:[e(a,{variant:"subtitle2",children:"My Groups"}),e(r,{marginTop:1,children:v.map(o=>e(y,{groupEntityRef:o,selectedGroupRef:t,setSelectedGroup:p},o))})]}),t&&e(r,{marginTop:2,children:e(q,{groupEntityRef:t,selectedGroup:t,setSelectedGroup:p,groupOptions:l})})]}),i(r,{marginLeft:3,flex:1,children:[t&&!g(s)&&e(R,{children:i(r,{marginBottom:2,children:[e(a,{variant:"subtitle2",children:"Previously Selected Groups"}),e(r,{marginTop:1,children:s.map(o=>e(y,{groupEntityRef:o,selectedGroupRef:t,setSelectedGroup:p},o))})]})}),T&&i(r,{marginTop:4,marginBottom:2,children:[e(K,{}),e(r,{marginTop:2,marginBottom:2,textAlign:"center",children:e(a,{variant:"caption",children:"Loading Hierarchy Data"})})]}),!T&&i(r,{children:[e(a,{variant:"h6",children:"Search By Group Type"}),B.map(o=>e(P,{groupType:o,selectedGroupEntityRef:t,selectGroup:p,allOptions:l,isLoading:G},o))]})]})]})}),e(k,{className:m.dialogToolbar,children:i(r,{marginLeft:2,children:[e(S,{size:"small",onClick:b,variant:"contained",color:"primary",className:m.dialogToolbarButton,children:"Apply"}),e(S,{className:m.dialogToolbarButton,size:"small",onClick:d,color:"primary",children:"Cancel"})]})})]})};export{J as GroupHierarchySelectorDialog};
|
|
2
|
+
//# sourceMappingURL=GroupHierarchySelectorDialog.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useCallback as n}from"react";import u from"react-use/lib/useLocalStorage";const c=10,i=l=>{const[o,s]=u("soundcheck-previously-selected-groups",[]),p=n(r=>{const e=o??[],t=e.indexOf(r);t>-1&&e.splice(t,1),e.unshift(r),e.length>c&&e.pop(),s(e)},[o,s]);return{groupEntityRefs:o,addGroup:p}};export{i as usePreviousSelectedGroups};
|
|
2
|
+
//# sourceMappingURL=usePreviousSelectedGroups.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as y,Fragment as F,jsx as r}from"react/jsx-runtime";import{makeStyles as L,Tooltip as $,IconButton as x,CircularProgress as b}from"@material-ui/core";import M from"@material-ui/icons/GetApp";import O from"@material-ui/icons/Publish";import P from"js-yaml";import{capitalize as a}from"lodash";import{useState as E}from"react";import{useSoundcheckAlert as H}from"../../hooks/useSoundcheckAlert.esm.js";const J=L(e=>({button:{height:"44px",lineHeight:"1.25rem",padding:e.spacing(1.5,1),marginRight:e.spacing(.5),borderRadius:"12px",color:e.palette.text.primary}})),V=({resourceType:e,disableImport:w,disableExport:I,onImport:A,onExport:S})=>{const k=`${a(e)} Import Success`,n=`Error Importing ${a(e)}s`,v=`Error Exporting ${a(e)}s`,l=J(),{showAlert:s}=H(),[z,c]=E(!1),[C,p]=E(!1),N=async()=>{try{p(!0),await S()}catch(t){s({title:v,message:`An error occurred while exporting ${e}s: ${t.message}`,severity:"error"})}finally{p(!1)}},R=async t=>{try{c(!0);const o=t.target?.files?.[0],m=new FileReader;o&&(m.readAsText(o,"utf-8"),m.onload=async T=>{const d=T.target?.result?.toString();if(d){const j=P.load(d);try{const{created:g,skipped:B,failed:i}=await A(j);let h=k,u="success",f=`Successfully imported ${g.length} ${e}(s), failed ${i.length} ${e}(s), ${B.length} ${e}(s) already existed.`;i.length&&(h=n,u=g.length?"warning":"error",f+=` Errors: ${JSON.stringify(i)}.`),s({title:h,message:f,severity:u})}catch{}}})}catch(o){s({title:n,message:`An error occurred while importing ${e}s: ${o.message}`,severity:"error"})}finally{t.target.value="",c(!1)}};return y(F,{children:[r($,{title:`Export all ${e}s`,children:r(x,{className:l.button,disabled:I,onClick:N,children:C?r(b,{size:24}):r(O,{})})}),r($,{title:`Import YAML ${e}(s)`,children:y(x,{className:l.button,disabled:w,component:"label",children:[z?r(b,{size:24}):r(M,{}),r("input",{type:"file",hidden:!0,onChange:R,accept:".yaml"})]})})]})};export{V as ImportExportPanel};
|
|
2
|
+
//# sourceMappingURL=ImportExportPanel.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as
|
|
1
|
+
import{jsxs as n,Fragment as r,jsx as e}from"react/jsx-runtime";import{Link as y}from"@backstage/core-components";import{useRouteRef as u}from"@backstage/core-plugin-api";import{TableCell as s,Box as c,Typography as d}from"@material-ui/core";import{makeStyles as N}from"@material-ui/core/styles";import{Skeleton as o}from"@material-ui/lab";import"react-circular-progressbar/dist/styles.css";import{useSearchParams as w}from"react-router-dom";import{trackCheckDetailsRouteRef as S}from"../../routes.esm.js";import{compactNumberFormatter as m}from"../../utils/formatters.esm.js";import{CheckStatusBar as B}from"../CheckStatusBar/CheckStatusBar.esm.js";import{PassPercentageProgressbar as C}from"../PassingPercentProgressbar/PassPercentageProgressbar.esm.js";const R=N(t=>({checkContent:{display:"flex",alignItems:"center",gap:t.spacing(2),width:"100%",paddingTop:t.spacing(1),paddingBottom:t.spacing(1)},checkStatus:{display:"flex",alignItems:"center",gap:t.spacing(1),minWidth:"fit-content"},checkName:{display:"flex",alignItems:"center"},checkNameLink:{color:"inherit",textDecoration:"none","&:hover":{textDecoration:"none"}},passingText:{color:t.palette.text.secondary,display:"flex",flexDirection:"column",alignItems:"flex-end",lineHeight:1.2,minWidth:"40px"},categoryBarSection:{display:"flex",flexDirection:"column",alignItems:"flex-end",width:"100%",justifyContent:"flex-end"},categoryBar:{"& .MuiBox-root > div":{height:"8px"},width:"100%"},skeleton:{backgroundColor:t.palette.action.hover},passingTextCell:{width:"100px",paddingRight:0,paddingTop:t.spacing(1),paddingBottom:t.spacing(1)}})),I=({check:t,status:a,theme:h,trackId:g})=>{const i=R(),x=u(S),[p]=w(),l=a?a.numberOfEntities-a.notApplicable-a.exempt:0,f=l>0?Math.round((a?.passed??0)/l*100):0,k=`${x({trackId:g,checkId:t.id})}${p.toString()?`?${p.toString()}`:""}`;return n(r,{children:[e(s,{style:{width:"120px",paddingRight:0},children:e(c,{className:i.checkStatus,children:a?e(C,{passPercentage:f}):n(r,{children:[e(o,{variant:"circle",width:24,height:24,className:i.skeleton}),e(o,{width:45,height:24,className:i.skeleton})]})})}),e(s,{style:{width:"300px",paddingRight:0},children:e(c,{className:i.checkName,children:e(y,{to:k,className:i.checkNameLink,children:e(d,{children:t.name})})})}),e(s,{style:{width:"250px",paddingRight:0},children:e(c,{className:i.categoryBarSection,children:a?e(c,{style:{width:"100%",display:"flex",justifyContent:"flex-end"},children:e(B,{status:a,className:i.categoryBar})}):e(o,{variant:"rect",width:250,height:8,className:i.skeleton})})}),e(s,{style:{width:"100px",paddingRight:0,paddingTop:h.spacing(1),paddingBottom:h.spacing(1)},children:e(c,{className:i.passingText,children:a?n(r,{children:[n(d,{variant:"caption",children:[m(a.passed)," of"," ",m(l)]}),e(d,{variant:"caption",children:"passing"})]}):n(r,{children:[e(o,{width:60,height:16,className:i.skeleton}),e(o,{width:40,height:16,className:i.skeleton})]})})})]})};export{I as CheckRowContent};
|
|
2
2
|
//# sourceMappingURL=CheckRowContent.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,
|
|
1
|
+
import{jsx as e,Fragment as o,jsxs as d}from"react/jsx-runtime";import{TableRow as s,useTheme as k,TableContainer as v,Table as m,TableBody as h,TableCell as p,Box as C,IconButton as x,Typography as y,Collapse as T}from"@material-ui/core";import{makeStyles as b}from"@material-ui/core/styles";import w from"@material-ui/icons/KeyboardArrowDown";import N from"@material-ui/icons/KeyboardArrowUp";import{memo as S,useState as I,useCallback as B}from"react";import{CheckRowContent as R}from"./CheckRowContent.esm.js";const g=b(l=>({root:{width:"100%"},levelCell:{display:"flex",alignItems:"flex-start",width:"100%",padding:l.spacing(1)},levelContent:{display:"flex",flexDirection:"column",gap:l.spacing(2),width:"100%"},levelHeader:{display:"flex",alignItems:"center"},levelName:{fontSize:"1rem",fontWeight:500,lineHeight:1,marginLeft:l.spacing(1)},headerCell:{fontWeight:500,color:l.palette.text.secondary,padding:l.spacing(2)}})),f=S(({checks:l,checkStatuses:i,theme:n,trackId:a})=>e(o,{children:l.map(t=>{const c=i?.find(r=>r.id===t.id);return e(s,{children:e(R,{check:t,status:c,theme:n,trackId:a})})})}));f.displayName="CheckRows";const u=({level:l,children:i})=>{const n=g(),[a,t]=I(!0),c=B(()=>{t(r=>!r)},[]);return d(o,{children:[e(s,{children:e(p,{colSpan:4,className:n.levelCell,children:d(C,{className:n.levelHeader,children:[e(x,{size:"small",onClick:c,children:a?e(N,{}):e(w,{})}),e(y,{className:n.levelName,children:l.name??`Level ${l.ordinal}`})]})})}),e(s,{children:e(p,{style:{paddingTop:0,paddingBottom:0},children:e(T,{in:a,timeout:"auto",unmountOnExit:!0,children:e(m,{size:"small",padding:"none",children:e(h,{children:i})})})})})]})},L=({track:l,checkStatuses:i})=>{const n=g(),a=k();return l.levels?.length?e(v,{component:"div",className:n.root,children:e(m,{children:e(h,{children:l.levels.map(t=>e(u,{level:t,children:e(f,{checks:t.checks,checkStatuses:i,theme:a,trackId:l.id})},t.ordinal))})})}):null};export{u as LevelRow,L as LevelsTable};
|
|
2
2
|
//# sourceMappingURL=LevelsTable.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as p,Fragment as s,jsx as r}from"react/jsx-runtime";import{withStyles as w,Button as C,makeStyles as S,Popover as P,TextField as
|
|
1
|
+
import{jsxs as p,Fragment as s,jsx as r}from"react/jsx-runtime";import{withStyles as w,Button as C,makeStyles as S,Popover as P,TextField as I,Checkbox as O}from"@material-ui/core";import T from"@material-ui/icons/ArrowDropDown";import{Autocomplete as z}from"@material-ui/lab";import{useState as F}from"react";import{ListboxVirtualized as L}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const d=w(o=>({root:{color:o.palette.text.primary,paddingLeft:o.spacing(1),paddingRight:o.spacing(1),textTransform:"initial",fontSize:o.typography.body1.fontSize}}))(C),$=S(o=>({root:{borderBottom:`1px solid ${o.palette.grey.A100}`,padding:o.spacing(1.5),backgroundColor:o.palette.background.paper},popper:{width:300,height:400,overflow:"hidden"},paper:{boxShadow:"none",margin:0},popperDisablePortal:{width:"100% !important"},listbox:{border:"none",height:400},option:{padding:`${o.spacing(.5)}px !important`,'&[data-selected="true"]':{background:"inherit"}},chips:{display:"flex",flexWrap:"wrap"},chip:{margin:1}})),B=({name:o,options:c,label:l,icon:m,filters:h,setFilters:u,disabled:g,customRenderOption:f})=>{const t=$(),[n,a]=F(null),b=e=>{a(e.currentTarget)},x=()=>{a(null)},v=(e,i)=>{u(i)},y=e=>r(I,{...e,name:"filter",variant:"outlined",placeholder:"Filter",fullWidth:!0}),k=(e,{selected:i})=>p(s,{children:[r(O,{value:e,checked:i,color:"primary"}),e]});return p(s,{children:[r(d,{startIcon:m,endIcon:r(T,{}),onClick:b,disabled:g,children:l}),r(P,{id:`${l}-filter-popover`,open:!!n,anchorEl:n,onClose:x,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},PaperProps:{elevation:4,className:t.popper},children:r(z,{multiple:!0,disablePortal:!0,classes:{root:t.root,paper:t.paper,popperDisablePortal:t.popperDisablePortal,listbox:t.listbox,option:t.option},ListboxComponent:L,renderOption:f??k,id:`multi-select-filter-${o}--select`,value:h,options:c,limitTags:3,onChange:v,getOptionSelected:(e,i)=>e.toLowerCase()===i.toLowerCase(),renderInput:y,renderTags:()=>null,closeIcon:null,popupIcon:null,handleHomeEndKeys:!0,clearOnEscape:!0,open:!0})})]})};export{d as QuickFilterButton,B as default};
|
|
2
2
|
//# sourceMappingURL=MultiSelectFilter.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import{parseEntityRef as f}from"@backstage/catalog-model";import{Link as k}from"@backstage/core-components";import{makeStyles as u}from"@material-ui/core";import{memo as $}from"react";import{ResultState as p}from"../../../graphql/generated/index.esm.js";import{CheckIcon as v}from"../../CheckIcon/CheckIcon.esm.js";import{CheckCellTooltip as N}from"./CheckCellTooltip.esm.js";const g=u(i=>({root:{padding:0},iconWrapper:{padding:i.spacing(1.5),display:"flex",alignItems:"center",justifyContent:"center"},link:{"&:hover $iconWrapper, &:active $iconWrapper, &:focus $iconWrapper":{backgroundColor:i.palette.action.hover}},icon:{width:"17px",height:"17px"},virtualized:{borderBottom:`1px solid ${i.palette.divider}`,borderRight:`1px solid ${i.palette.divider}`}})),y=$(({trackId:i,check:c,entityRef:r,result:o,entityRoute:m,isVirtualized:a,timestamp:h})=>{const e=g();if(typeof r!="string"){const d=t("div",{className:e.iconWrapper,children:t("div",{className:e.icon})});return a?t("div",{className:`${e.root} ${e.virtualized}`,"aria-hidden":!0,children:d}):t("td",{className:e.root,"aria-hidden":!0,children:d})}const n=t(v,{className:e.icon,result:o??p.NotReported,timestamp:h}),l=t("div",{className:e.iconWrapper,children:n}),s=o&&o===p.NotApplicable?l:t(k,{className:e.link,to:`${m(f(r))}/soundcheck/tracks/${i}/checks/${c.id}`,children:l});return a?t("div",{className:`${e.root} ${e.virtualized}`,children:t(N,{check:c,icon:n,entityRef:r,children:s})}):t("td",{className:`${e.root}`,children:s})});export{y as CheckCell};
|
|
2
2
|
//# sourceMappingURL=CheckCell.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as l}from"react/jsx-runtime";import{CheckCell as
|
|
1
|
+
import{jsx as l}from"react/jsx-runtime";import{CheckCell as o}from"./CheckCell.esm.js";import{CheckNameCell as i}from"./CheckNameCell.esm.js";import{EntityRefCell as d}from"./EntityRefCell.esm.js";import{TrackBadgeCell as s}from"./TrackBadgeCell.esm.js";import{TrackLevelHeaderCell as m,TrackLevelHeaderFill as k}from"./TrackLevelHeaderCell.esm.js";import{TrackTitleCell as y}from"./TrackTitleCell.esm.js";const p=e=>({type:"TrackHeader",render:()=>l(y,{name:e})}),C=e=>({type:"LevelHeader",render:()=>e?l(m,{name:e}):l(k,{})}),f=(e,t,r)=>l(i,{name:e,progress:t,checkId:r}),u=(e,t,r)=>({type:"CheckTitle",render:()=>f(e,t,r)}),h=({trackId:e,check:t,entityRef:r,result:c,entityRoute:n,timestamp:a})=>l(o,{check:t,entityRef:r,entityRoute:n,trackId:e,result:c,isVirtualized:!0,timestamp:a}),R=(e,t,r,c,n,a)=>({type:"CheckResult",render:()=>l(h,{trackId:e,check:t,entityRef:r,result:c,entityRoute:n,timestamp:a})}),T=(e,t)=>l(d,{entityRef:e,noTransform:t}),H=(e,t)=>({type:"EntityHeader",render:()=>T(e,t)}),v=(e,t,r)=>({type:"LevelBadge",render:()=>l(s,{small:r,trackStatus:e,trackType:t})}),I=e=>t=>{const r=e[t.rowIndex].cells[t.columnIndex];return r?l("div",{style:t.style,children:r.render()}):l("div",{style:t.style})};export{I as cellRenderer,R as checkResultCell,u as checkTitleCell,H as entityHeaderCell,C as levelHeaderCell,v as trackBadgeCell,p as trackHeaderCell};
|
|
2
2
|
//# sourceMappingURL=cellRenderer.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as g}from"react/jsx-runtime";import{ResultState as R}from"../../graphql/generated/index.esm.js";import{entityHeaderCell as v,trackHeaderCell as w,trackBadgeCell as C,levelHeaderCell as H,checkTitleCell as E,checkResultCell as T}from"./Cell/cellRenderer.esm.js";import{CheckLabelCellType as y,CheckLabelCell as b}from"./Cell/CheckLabelCell.esm.js";import{TrackLevelHeaderFill as F}from"./Cell/TrackLevelHeaderCell.esm.js";import{findLongestRefTitle as L,calculateHeightForRefTitle as M,RowHeights as m}from"./resultsTableUtils.esm.js";const S=i=>{const r=L(i??[]);return{height:Math.min(M(r.length??1)-10,125),cells:[v(""),...i.map(t=>v(t||""))]}},A=(i,r,t)=>{const e=[];return i.forEach(({track:o,levels:s,trackStatuses:n})=>{e.push({height:m.trackTitle,cells:[w(o.name),...r.map(c=>{const l=c?n.find(a=>a.entityRef===c):void 0;return C(l,o.type??void 0)})]}),s.forEach(c=>{e.push({height:m.levelTitle,cells:[H(c.name),...r.map(l=>H(""))]}),c.checks.forEach(({check:l,results:a,totalPassing:k,totalFailing:p})=>{const f={PASSED:k,FAILED:p};e.push({height:m.check,cells:[E(l.name,f,l.id),...r.map(h=>{const d=a.find(u=>u.entityRef===h);return T(o.id,l,h,d?.result??R.NotApplicable,t,d?.timestamp??void 0)})]})})})}),e},P=i=>{const r=i.flatMap(({track:t,levels:e})=>{const o={label:t.name??t.id,description:t.description??"",cellType:y.track},s=e.flatMap(n=>{const c={label:n.name??`level ${n.ordinal}`,cellType:y.level},l=n.checks.map(({check:a})=>({label:a.name??a.id,description:a.description??"",cellType:y.check}));return[c,...l]});return[o,...s]});return{height:125,cells:[{type:"CheckHeader",render:()=>g(b,{})},...r.map(t=>({render:()=>g(b,{...t}),type:"CheckHeader"}))]}},x=(i,r,t)=>r.map(e=>{const o=v(e,!0),s=i.flatMap(({track:n,levels:c,trackStatuses:l})=>{const a=e?l.find(p=>p.entityRef===e):void 0,k=c.flatMap(p=>{const f=p.checks.map(({check:h,results:d})=>T(n.id,h,e,d.find(u=>u.entityRef===e)?.result??R.NotApplicable,t));return[{type:"Filler",render:()=>g(F,{pivot:!0})},...f]});return[C(a,n.type??void 0,!0),...k]});return[o,...s]}).map(e=>({height:m.check,cells:e}));export{S as generateHeaderRow,P as generateHeaderRowPivoted,A as generateRows,x as generateRowsPivoted};
|
|
2
2
|
//# sourceMappingURL=ResultsTableRow.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as a,Fragment as n,jsx as t}from"react/jsx-runtime";import{makeStyles as c,useTheme as p,Box as m,Typography as g}from"@material-ui/core";import d from"@material-ui/icons/Check";import{CircularProgressbarWithChildren as h,buildStyles as f}from"react-circular-progressbar";import{getPercentageColor as u}from"../../utils/colors.esm.js";const C=c(e=>({progressCircle:{width:"24px !important",height:"24px !important"},passPercentage:{fontWeight:"bold",fontSize:"1.25em",minWidth:"50px"},icon:{color:e.palette.background.default,fontSize:15}})),P=({passPercentage:e,getColor:i})=>{const r=p(),o=C(r),s=i||(l=>u(r,l));return a(n,{children:[t(m,{className:o.progressCircle,children:t(h,{value:e,strokeWidth:e===100?50:15,styles:f({strokeLinecap:"round",pathColor:s(e),trailColor:r.palette.divider}),children:e===100&&t(d,{className:o.icon})})}),a(g,{className:o.passPercentage,style:{color:s(e)},children:[e,"%"]})]})};export{P as PassPercentageProgressbar};
|
|
2
|
+
//# sourceMappingURL=PassPercentageProgressbar.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as l,jsx as t}from"react/jsx-runtime";import{Grid as e,Typography as
|
|
1
|
+
import{jsxs as l,jsx as t}from"react/jsx-runtime";import{Grid as e,Typography as r,Button as a}from"@material-ui/core";import{getQuickstartStyles as m}from"./styles.esm.js";const d=({title:n,description:o,onClick:s,className:c})=>{const i=m();return l(e,{container:!0,direction:"row",alignItems:"center",className:c,children:[t(e,{item:!0,xs:3,children:t(r,{variant:"h6",children:n})}),t(e,{item:!0,xs:!0,className:i.flexGrowGrid,children:t(r,{variant:"body1",children:o})}),t(e,{item:!0,xs:1,container:!0,justifyContent:"flex-end",children:t(a,{onClick:s,className:i.dontYellAtMeButton,children:"Go"})})]})};export{d as HowDoIListItem};
|
|
2
2
|
//# sourceMappingURL=HowDoIListItem.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as
|
|
1
|
+
import{jsxs as s,jsx as a}from"react/jsx-runtime";import{Box as e,Typography as c,Divider as l}from"@material-ui/core";import{useNavigate as h}from"react-router-dom";import{Card as p}from"../SummaryCard/SummaryCard.esm.js";import{getQuickstartStyles as N}from"./styles.esm.js";const f=({header:o,routeRef:t,icon:i,description:d})=>{const r=N(),m=h(),n=()=>{m(t())};return s(p,{className:r.cardBase,onClick:n,children:[s(e,{className:r.cardHeader,children:[i&&a(e,{className:r.cardIcon,children:i}),a(c,{variant:"h5",className:r.headers,children:o})]}),a(l,{className:r.divider}),a(e,{children:a(c,{variant:"body1",component:"div",className:r.mainPoint,children:d})})]})};export{f as QuickstartCardBase};
|
|
2
2
|
//# sourceMappingURL=QuickstartCardBase.esm.js.map
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{jsxs as n,jsx as e}from"react/jsx-runtime";import{Content as v}from"@backstage/core-components";import{useApi as m,featureFlagsApiRef as w,configApiRef as C,useRouteRef as a}from"@backstage/core-plugin-api";import{usePermission as P}from"@backstage/plugin-permission-react";import{Typography as l,Grid as t,Accordion as H,AccordionSummary as S,AccordionDetails as T}from"@material-ui/core";import h from"@material-ui/icons/BarChart";import z from"@material-ui/icons/CheckCircle";import I from"@material-ui/icons/Computer";import W from"@material-ui/icons/ExpandMore";import j from"@material-ui/icons/Flag";import D from"@material-ui/icons/Timeline";import{soundcheckCollectorReadPermission as F}from"@spotify/backstage-plugin-soundcheck-common";import{integrationsPageRouteRef as Q,tracksPageRouteRef as G,checksPageRouteRef as O,campaignsPageRouteRef as q,techHealthRouteRef as B,techInsightsPageRouteRef as M}from"../../routes.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as V}from"../SoundcheckHeader/useHeader.esm.js";import{QuickstartCardBase as i}from"./QuickstartCardBase.esm.js";import{getQuickstartStyles as $}from"./styles.esm.js";import{WelcomeHelpSection as E}from"./WelcomeHelpSection.esm.js";import{WelcomeModal as J}from"./WelcomeModal.esm.js";const K=()=>{const o=$();V({title:"Welcome to Soundcheck!",description:"Soundcheck lets you define and monitor the tech health of your organization. What insights do you need today?"});const r=m(w),d=m(C).getOptionalStringArray("soundcheck.flags"),c=r.getRegisteredFlags(),u=(!c.find(s=>s.name==="soundcheck-enable-tech-insights")||r.isActive("soundcheck-enable-tech-insights"))&&(d?.includes("enable-tech-insights")??!1),{loading:g,allowed:p}=P({permission:F}),f=(!c.find(s=>s.name==="soundcheck-enable-collectors")||r.isActive("soundcheck-enable-collectors"))&&!g&&p,k=(!c.find(s=>s.name==="soundcheck-enable-tech-health")||r.isActive("soundcheck-enable-tech-health"))&&!d?.includes("soundcheck-disable-tech-health"),R=a(Q),y=a(G),b=a(O),x=a(q),A=a(B),N=a(M);return n(v,{className:o.introTitle,children:[e(J,{}),e(l,{className:o.welcomeSection,children:"This is your starting point for exploring and managing your tech health initiatives. Here are some key areas to get you started:"}),n(t,{container:!0,direction:"row",justifyContent:"flex-start","aria-label":"getting-started-items",className:o.grid,spacing:2,children:[u&&e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(i,{header:"Tech Insights",routeRef:N,icon:e(h,{}),description:`Visualize and analyze your technology landscape across teams and
|
|
2
|
+
components.`})}),k&&e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(i,{header:"Tech Health",routeRef:A,icon:e(h,{}),description:"Detailed query and analysis tool across teams, components, tracks, and checks."})}),e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(i,{header:"Campaigns",routeRef:x,icon:e(j,{}),description:"Organize and manage coordinated initiatives across your organization."})}),e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(i,{header:"Checks",routeRef:b,icon:e(z,{}),description:"Checks are comparisons between defined acceptable fact values and actual fact values."})}),e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(i,{header:"Tracks",routeRef:y,icon:e(D,{}),description:"Tracks encourage alignment to architectural best practices and standards."})}),f&&e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(i,{header:"Integrations",routeRef:R,icon:e(I,{}),description:"Integrations collect raw data about your components for use in checks and tracks."})})]}),n(H,{className:o.accordion,children:[e(S,{expandIcon:e(W,{}),"aria-controls":"howdoi-content",id:"howdoi-header",children:e(l,{variant:"h5",children:"How Do I...?"})}),e(T,{children:e(E,{})})]})]})};export{K as QuickstartPage};
|
|
2
3
|
//# sourceMappingURL=QuickstartPage.esm.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{
|
|
2
|
-
you'll be presented with a list of templates from which to choose.`,onClick:()=>t(
|
|
3
|
-
the collector you wish to configure.`,onClick:()=>t(
|
|
4
|
-
Your team's components will appear in the table along with their check statuses.`,onClick:()=>t(
|
|
1
|
+
import{jsx as e,jsxs as d}from"react/jsx-runtime";import{useRouteRef as i}from"@backstage/core-plugin-api";import{Grid as r}from"@material-ui/core";import{useNavigate as u}from"react-router-dom";import{checkCreateRouteRef as C,checkTemplatesRouteRef as f,trackCreateRouteRef as w,integrationsPageRouteRef as b,rootRouteRef as R,checksPageRouteRef as N,tracksPageRouteRef as G}from"../../routes.esm.js";import{HowDoIListItem as c}from"./HowDoIListItem.esm.js";import{getQuickstartStyles as y}from"./styles.esm.js";const T=()=>{const a=y(),t=u(),n=i(C),s=i(f),l=i(w),h=i(b),m=i(R),k=i(N),p=i(G),o=g=>g%2===0?a.bgColorEven:a.bgColorOdd;return e("div",{className:a.howDoIList,children:e(r,{container:!0,direction:"column","aria-label":"getting-started-items",className:a.grid,children:d(r,{item:!0,children:[e(c,{className:o(0),title:"Create a new check from scratch?",description:"Go to the Checks page and click the 'Create Check' button, then select 'Custom Check'.",onClick:()=>t(n())}),e(c,{className:o(1),title:"Add a new check from a template?",description:`Go to the Checks page and click the 'Create Check' button. There,
|
|
2
|
+
you'll be presented with a list of templates from which to choose.`,onClick:()=>t(s())}),e(c,{className:o(0),title:"Add a new track?",description:"Go to the Tracks page and click the 'Create Track' button.",onClick:()=>t(l())}),e(c,{className:o(1),title:"Configure an Integration?",description:`Go to the Integrations page and click the 'Configure' button below
|
|
3
|
+
the collector you wish to configure.`,onClick:()=>t(h())}),e(c,{className:o(0),title:"Check my team's components?",description:`Go to the Overview page and select your team from the drop-down in the top-right corner.
|
|
4
|
+
Your team's components will appear in the table along with their check statuses.`,onClick:()=>t(m())}),e(c,{className:o(1),title:"See which components are passing a Check?",description:`Go to the insights page for the Check by clicking the 'View' button on the Checks page. Scroll
|
|
5
5
|
down and look at the 'Entities' table.`,onClick:()=>t(k())}),e(c,{className:o(0),title:"See which components are passing a Track?",description:`Go to the insights page for the Track by clicking the 'View' button on the Tracks page. Select
|
|
6
|
-
the 'Entities' tab.`,onClick:()=>t(
|
|
6
|
+
the 'Entities' tab.`,onClick:()=>t(p())})]})})})};export{T as WelcomeHelpSection};
|
|
7
7
|
//# sourceMappingURL=WelcomeHelpSection.esm.js.map
|