@spotify/backstage-plugin-soundcheck 0.19.2 → 0.19.3
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 +34 -0
- package/config.d.ts +54 -1
- package/dist/api.esm.js +1 -1
- package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +1 -1
- package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignOwnerField.esm.js +1 -1
- package/dist/components/CampaignPage/CampaignPage.esm.js +2 -0
- package/dist/components/CampaignPage/CampaignPageBUI.esm.js +2 -0
- package/dist/components/CampaignPage/CampaignPageDeprecated.esm.js +2 -0
- package/dist/components/{CampaignInsightsPage → CampaignPage}/CampaignStatusTile.esm.js +1 -1
- package/dist/components/CampaignsPage/CampaignListPage/CampaignListPageDeprecated.esm.js +2 -0
- package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +2 -0
- package/dist/components/CampaignsPage/CampaignsPage.esm.js +1 -1
- package/dist/components/Cards/CurrentStatusCard/CurrentStatusCard.esm.js +2 -0
- package/dist/components/Cards/CurrentStatusCard/CurrentStatusCardRow.esm.js +2 -0
- package/dist/components/Cards/DescriptionCard/DescriptionCard.esm.js +2 -0
- package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationsPage.esm.js +1 -1
- package/dist/components/CertificationsPage/Playlist/PlaylistComponent.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/CheckForm/FormFields/CheckPathResolverInput.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js +1 -1
- package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
- package/dist/components/CheckPage/CheckInsightsPage.esm.js +1 -1
- package/dist/components/CheckPage/CheckStatusHistoryChart.esm.js +1 -1
- package/dist/components/CheckPage/CheckStatusTable.esm.js +1 -1
- package/dist/components/CheckPage/utils.esm.js +1 -1
- package/dist/components/CheckStatusBar/CheckStatusBar.esm.js +1 -1
- package/dist/components/CheckStatusBar/CheckStatusBarBUI.esm.js +2 -0
- package/dist/components/CheckStatusBar/CheckStatusBarCell.esm.js +2 -0
- package/dist/components/CheckTemplatesPage/CheckTemplatesPage.esm.js +1 -1
- package/dist/components/ChecksPage/CheckListPage/CheckListPageDeprecated.esm.js +2 -0
- package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +2 -0
- package/dist/components/ChecksPage/ChecksPage.esm.js +1 -1
- package/dist/components/ChecksTable/ChecksTable.esm.js +2 -0
- package/dist/components/ChipSelector/ChipSelector.esm.js +2 -0
- package/dist/components/CollectorPage/CollectorDetailsPage.esm.js +1 -1
- package/dist/components/CollectorPage/CollectorFactTable.esm.js +1 -1
- package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/CodeScanningAlertsFactDetails.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/SecretScanningAlertsFactDetails.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/SecurityAdvisoriesFactDetails.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Jira/IssuesFactDetailsComponent.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Jira/utils.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/NewRelic/NewRelicConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +1 -1
- package/dist/components/CollectorsPage/CollectorListPage/CollectorListPage.esm.js +1 -1
- package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
- package/dist/components/CustomCell/CustomCell.esm.js +2 -0
- package/dist/components/EmptyState/EmptyStateBUI.esm.js +2 -0
- package/dist/components/EmptyState/EmptyStateNoCampaigns.esm.js +2 -0
- package/dist/components/EmptyState/EmptyStateNoChecks.esm.js +2 -0
- package/dist/components/EmptyState/EmptyStateNoTracks.esm.js +2 -0
- package/dist/components/EntitiesAutocompletePicker/EntitiesAutocompletePicker.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/Filter/EntityAutocompletePicker.esm.js +1 -1
- package/dist/components/Filter/FilterPreviewTable/FilterPreviewTable.esm.js +1 -1
- package/dist/components/Filter/KeyValueInputDialog.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/FilterSidebar/useTrackFilterSidebar.esm.js +1 -1
- package/dist/components/FilterSidebar/util.esm.js +1 -1
- package/dist/components/FormControlledAutocomplete/FormControlledAutocomplete.esm.js +1 -1
- package/dist/components/FormControlledAutocomplete/useLabelValueOptions.esm.js +2 -0
- package/dist/components/GroupHierarchySelector/GroupHierarchySelector.esm.js +1 -1
- package/dist/components/HierarchicalTechInsightsPage/HierarchicalTechInsightsPage.esm.js +1 -1
- package/dist/components/HierarchicalTechInsightsPage/SelectedNodeSidebar.esm.js +1 -1
- package/dist/components/LevelUpParty/LevelUpParty.esm.js +1 -1
- package/dist/components/LevelsTable/CheckRowContent.esm.js +1 -1
- package/dist/components/LevelsTable/LevelsTable.esm.js +1 -1
- package/dist/components/ListPageCustomActions/ListPageCustomActions.esm.js +2 -0
- package/dist/components/LoadingTableSkeleton/LoadingTableSkeleton.esm.js +2 -0
- package/dist/components/OverviewPage/OverviewPage.esm.js +1 -1
- package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
- package/dist/components/OverviewTable/OverviewTable.esm.js +1 -1
- package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
- package/dist/components/PageCustomActions/PageCustomActions.esm.js +2 -0
- package/dist/components/QuickstartPage/QuickstartPage.esm.js +2 -2
- package/dist/components/Router.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/SummaryCard/SummaryCard.esm.js +1 -1
- package/dist/components/SummaryCard/SummaryCardActionsMenu.esm.js +1 -1
- package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +2 -0
- package/dist/components/TeamStatusBar/TeamStatusBar.esm.js +1 -1
- package/dist/components/TechInsights/FilterControls.esm.js +1 -1
- package/dist/components/TechInsights/SummaryTiles.esm.js +1 -1
- package/dist/components/TechInsights/TechInsightsPage.esm.js +1 -1
- package/dist/components/TechInsights/TechInsightsTableBUI.esm.js +2 -0
- package/dist/components/TechInsights/TechInsightsTableView.esm.js +1 -1
- package/dist/components/TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js +1 -1
- package/dist/components/TimePeriodBar/TimePeriodBar.esm.js +1 -1
- package/dist/components/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +2 -0
- package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +1 -1
- package/dist/components/TrackEditPage/TrackEditView.esm.js +1 -1
- package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackBadgeTypeSelect/TrackBadgeTypeSelect.esm.js +1 -1
- package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackOwnerSelect/TrackOwnerSelect.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js +2 -0
- package/dist/components/TrackPage/TrackHistoryChart.esm.js +1 -1
- package/dist/components/TrackPage/TrackPage.esm.js +1 -1
- package/dist/components/TrackPage/TrackPageBUI.esm.js +2 -0
- package/dist/components/TrackPage/TrackPageDeprecated.esm.js +2 -0
- package/dist/components/TracksPage/TrackListPage/TrackListPageDeprecated.esm.js +2 -0
- package/dist/components/TracksPage/TrackListPage/TrackSummaryCard.esm.js +1 -1
- package/dist/components/TracksPage/TracksListPageBUI.esm.js +2 -0
- package/dist/components/TracksPage/TracksPage.esm.js +1 -1
- package/dist/graphql/generated/index.esm.js +125 -117
- package/dist/hooks/aggregations/useCheckStatus.esm.js +1 -1
- package/dist/hooks/catalog/useGetEntityRefs.esm.js +1 -1
- package/dist/hooks/catalog/useGetLimitedEntityRefs.esm.js +1 -1
- package/dist/hooks/catalog/useProfileImages.esm.js +2 -0
- package/dist/hooks/checks/useCheckDetails.esm.js +1 -1
- package/dist/hooks/checks/useCheckStatusTotals.esm.js +2 -0
- package/dist/hooks/entities/useTrackEntities.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 +1 -1
- package/dist/hooks/tracks/useRecertifyTrack.esm.js +2 -0
- package/dist/hooks/tracks/useTracksApplicableToGroup.esm.js +1 -1
- package/dist/hooks/useConfirmationModal.esm.js +1 -1
- package/dist/hooks/useLoadTimeReporting.esm.js +2 -0
- package/dist/hooks/usePagination.esm.js +2 -0
- package/dist/hooks/useSearchName.esm.js +2 -0
- package/dist/utils/checks.esm.js +2 -0
- package/dist/utils/formatters.esm.js +1 -1
- package/dist/utils/helpers.esm.js +1 -1
- package/dist/utils/lcpReporting.esm.js +1 -1
- package/package.json +18 -27
- package/dist/components/CampaignInsightsPage/CampaignInsightsPage.esm.js +0 -2
- package/dist/components/CampaignsPage/CampaignListPage/CampaignListPage.esm.js +0 -2
- package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +0 -2
- package/dist/components/CollectorPage/Configurators/Jira/IssuesSearchFactDetailsComponent.esm.js +0 -2
- package/dist/components/TechInsights/TechInsightsCardsView.esm.js +0 -2
- package/dist/components/TechInsights/TrackStatusCard.esm.js +0 -2
- package/dist/components/TechInsights/ViewModeControls.esm.js +0 -2
- package/dist/components/TechInsights/convertToCommonTrackStatus.esm.js +0 -2
- package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +0 -2
- /package/dist/components/{CampaignInsightsPage → CampaignPage}/CampaignStatusHistoryTile.esm.js +0 -0
- /package/dist/components/{CampaignInsightsPage → CampaignPage}/DaysRemainingTile.esm.js +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{asArray as
|
|
1
|
+
import{asArray as p}from"@spotify/backstage-plugin-soundcheck-common";import{defaultBaseCollectorOption as g}from"../Common/CollectorOption.esm.js";import{mapBackendConfigToFormIntegrationConfig as r,mapFormIntegrationConfigToBackendConfig as m}from"../Common/utils.esm.js";const i="issues-search",l="issues-count",f=(e,o,c)=>({...g(e),factDetails:{factName:o??"",jql:c}}),C=e=>({issuesSearch:{enabled:!1,collectors:[f(e,i)]},issuesCount:{enabled:!1,collectors:[f(e,l)]}});function u(e){const{issuesSearch:o,issuesCount:c}=e;if(o.enabled||c.enabled){const s={},n=[];return s.collects=n,o.enabled&&o.collectors.forEach(a=>{const t=a.factDetails.jql?.trim();n.push(m({factType:i,configOption:a,additionalParams:{factName:a.factDetails.factName,jql:t?.length?t:void 0}}))}),c.enabled&&c.collectors.forEach(a=>{const t=a.factDetails.jql?.trim();n.push(m({factType:l,configOption:a,additionalParams:{factName:a.factDetails.factName,jql:t?.length?t:void 0}}))}),s}return{collects:[]}}function d(e){const o=C(e);if(e){const c=e.collects;if(c){const s=p(c),n=s.filter(t=>t.type===i);n.length&&(o.issuesSearch={enabled:!0,collectors:n.map(t=>({...r({parentConfig:e,factTypeConfig:t}),factDetails:{factName:t.factName??i,jql:t.jql}}))});const a=s.filter(t=>t.type===l);a.length&&(o.issuesCount={enabled:!0,collectors:a.map(t=>({...r({parentConfig:e,factTypeConfig:t}),factDetails:{factName:t.factName??l,jql:t.jql}}))})}}return o}export{l as ISSUES_COUNT_COLLECTOR_TYPE,i as ISSUES_SEARCH_COLLECTOR_TYPE,C as defaultJiraConfig,f as issuesCollectorConfig,d as mapConfigToJiraCollectorConfig,u as mapJiraCollectorConfigToConfig};
|
|
2
2
|
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{validFactNameRegex as
|
|
1
|
+
import{validFactNameRegex as f,invalidFactNameErrorMessage as n}from"@spotify/backstage-plugin-soundcheck-common";import{z as s}from"zod";import{FIELD_IS_REQUIRED_MSG as u}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as d}from"../Common/CollectorOption.esm.js";const o="Fact name is not unique",l="Max 100 characters",h=d.extend({factDetails:s.strictObject({factName:s.string().min(1,u).max(100,l).regex(f,n),jql:s.string().optional()})}).strict(),m=s.strictObject({enabled:s.boolean(),collectors:s.array(h)}),N=s.strictObject({issuesSearch:m,issuesCount:m}).superRefine((a,r)=>{const i=[...a.issuesSearch.collectors.map(e=>e.factDetails.factName),...a.issuesCount.collectors.map(e=>e.factDetails.factName)],c=i.filter((e,t)=>i.indexOf(e)!==t);c.length&&(a.issuesSearch.collectors.forEach((e,t)=>{c.includes(e.factDetails.factName)&&r.addIssue({code:s.ZodIssueCode.custom,message:o,path:["issuesSearch","collectors",t,"factDetails","factName"]})}),a.issuesCount.collectors.forEach((e,t)=>{c.includes(e.factDetails.factName)&&r.addIssue({code:s.ZodIssueCode.custom,message:o,path:["issuesCount","collectors",t,"factDetails","factName"]})}))});export{o as FACT_NAME_IS_NOT_UNIQUE_MSG,l as MAX_100_CHARACTERS_MSG,N as jiraCollectorFormSchema};
|
|
2
2
|
//# sourceMappingURL=validation.esm.js.map
|
package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as n,Fragment as b,jsx as o}from"react/jsx-runtime";import{zodResolver as h}from"@hookform/resolvers/zod";import{makeStyles as v,Paper as S,Divider as F}from"@material-ui/core";import{useForm as R,FormProvider as K}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as w}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as x}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as y}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as B}from"../../../../routes.esm.js";import{FooterButtons as D}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as L}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as c}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{defaultCollectorOption as N}from"../Common/CollectorOption.esm.js";import{collectorHeaderContent as O,confirmationModalContent as T}from"../Common/utils.esm.js";import{KubernetesFactDetails as j}from"./KubernetesFactDetails.esm.js";import{mapConfigToKubernetesCollectorConfig as k,defaultKubernetesConfig as I,K8S_COLLECTOR_FIELDS as M,mapKubernetesCollectorConfigToConfig as P}from"./utils.esm.js";import{customResourceFormSchema as E}from"./validation.esm.js";const H=v(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),V=({disabled:t,selectedCollector:e})=>{const r=R({defaultValues:e?k(e.config):I(),mode:"onChange",resolver:h(E)}),a=H(),{mutateAsync:p}=y(),[d,f]=x(B),{isValid:u}=r.formState,{showModal:C}=w(),s=async m=>{if(!await C(T(e)))return;const i=P(m);await p({collectorId:e.id,config:i})&&f()};return L(O(e)),n(b,{children:[o(S,{className:a.section,children:o(K,{...r,children:n("form",{onSubmit:r.handleSubmit(s),children:[Object.entries(M).map(([m,i],l,g)=>n("div",{children:[o(c,{name:m,label:i.label,description:i.description,disabled:t}),l<g.length-1&&o(F,{})]},l)),o(c,{name:"customResources",label:"Custom Resources",description:"Collect facts from a kubernetes custom resource associated with an entity.",disabled:t,FactDetailsComponent:j,multipleCollectors:{enable:!0,defaultConfig:N(e.config)}})]})})}),o("div",{className:a.section,children:o(D,{onCancel:d,saveButtonText:"Save",isLoading:!1,onSave:r.handleSubmit(s),disableSave:!u})})]})};export{V as KubernetesConfigurator};
|
|
1
|
+
import{jsxs as n,Fragment as b,jsx as o}from"react/jsx-runtime";import{zodResolver as h}from"@hookform/resolvers/zod";import{makeStyles as v,Paper as S,Divider as F}from"@material-ui/core";import{useForm as R,FormProvider as K}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as w}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as x}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import{useUpdateCollectorConfig as y}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as B}from"../../../../routes.esm.js";import{FooterButtons as D}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as L}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as c}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{defaultCollectorOption as N}from"../Common/CollectorOption.esm.js";import{collectorHeaderContent as O,confirmationModalContent as T}from"../Common/utils.esm.js";import{KubernetesFactDetails as j}from"./KubernetesFactDetails.esm.js";import{mapConfigToKubernetesCollectorConfig as k,defaultKubernetesConfig as I,K8S_COLLECTOR_FIELDS as M,mapKubernetesCollectorConfigToConfig as P}from"./utils.esm.js";import{customResourceFormSchema as E}from"./validation.esm.js";const H=v(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),V=({disabled:t,selectedCollector:e})=>{const r=R({defaultValues:e?k(e.config):I(),mode:"onChange",resolver:h(E)}),a=H(),{mutateAsync:p}=y(),[d,f]=x(B),{isValid:u}=r.formState,{showModal:C}=w(),s=async m=>{if(!await C(T(e)))return;const i=P(m);await p({collectorId:e.id,config:i})&&f()};return L(O(e)),n(b,{children:[o(S,{className:a.section,children:o(K,{...r,children:n("form",{onSubmit:r.handleSubmit(s),children:[Object.entries(M).map(([m,i],l,g)=>n("div",{children:[o(c,{name:m,label:i.label,description:i.description,disabled:t}),l<g.length-1&&o(F,{})]},l)),o(c,{name:"customResources",label:"Custom Resources",description:"Collect facts from a kubernetes custom resource associated with an entity.",disabled:t,FactDetailsComponent:j,multipleCollectors:{enable:!0,defaultConfig:N(e.config)}})]})})}),o("div",{className:a.section,children:o(D,{onCancel:d,saveButtonText:"Save",isLoading:!1,onSave:r.handleSubmit(s),disableSave:!u})})]})};export{V as KubernetesConfigurator};
|
|
2
2
|
//# sourceMappingURL=KubernetesConfigurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as m,Fragment as w,jsx as o}from"react/jsx-runtime";import{makeStyles as b,Paper as S,Divider as s}from"@material-ui/core";import{useForm as y,FormProvider as R}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as v}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as B}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as F}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as x}from"../../../../routes.esm.js";import{FooterButtons as P}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as E}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as I}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as M,confirmationModalContent as T}from"../Common/utils.esm.js";import{mapConfigToNewRelicCollectorConfig as j,defaultNewRelicConfig as k,mapNewRelicCollectorConfigToConfig as A}from"./utils.esm.js";const H=b(e=>({spacer:{height:e.spacing(8),width:"100%"},section:{marginBottom:e.spacing(2)},form:{marginBottom:e.spacing(2)}})),U=({disabled:e,selectedCollector:i})=>{const a=y({defaultValues:i?j(i.config):k(),mode:"onChange"}),{formState:{errors:t},handleSubmit:c}=a,n=H(),p=!!t.entity||!!t.entitySearch||!!t.policiesSearch,{mutateAsync:d}=F(),[f,g]=B(x),{showModal:C}=v(),l=async h=>{if(!await C(T(i)))return;const N=A(h);await d({collectorId:i.id,config:N})&&g()};E(M(i));const u=!i.config?.apiKey;return m(w,{children:[o(I,{collectorName:"NewRelic",collectorId:i.id,invalidConfig:u,hasNonUIOptions:!0}),o(S,{className:n.form,children:o(R,{...a,children:m("form",{onSubmit:c(l),children:[o(r,{name:"entity",label:"Entity",description:"Collects details about New Relic entity with a specific id.",disabled:e}),o(s,{}),o(r,{name:"entitySearch",label:"Entity Search",description:"Collects details about New Relic entities with a specific tag.",disabled:e}),o(s,{}),o(r,{name:"policiesSearch",label:"Policies Search",description:"Collects details about New Relic policies for a specific account.",disabled:e})]})})}),o("div",{className:n.section,children:o(P,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:c(l),disableSave:p})})]})};export{U as NewRelicConfigurator};
|
|
1
|
+
import{jsxs as m,Fragment as w,jsx as o}from"react/jsx-runtime";import{makeStyles as b,Paper as S,Divider as s}from"@material-ui/core";import{useForm as y,FormProvider as R}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as v}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as B}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import{useUpdateCollectorConfig as F}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as x}from"../../../../routes.esm.js";import{FooterButtons as P}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as E}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as I}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as M,confirmationModalContent as T}from"../Common/utils.esm.js";import{mapConfigToNewRelicCollectorConfig as j,defaultNewRelicConfig as k,mapNewRelicCollectorConfigToConfig as A}from"./utils.esm.js";const H=b(e=>({spacer:{height:e.spacing(8),width:"100%"},section:{marginBottom:e.spacing(2)},form:{marginBottom:e.spacing(2)}})),U=({disabled:e,selectedCollector:i})=>{const a=y({defaultValues:i?j(i.config):k(),mode:"onChange"}),{formState:{errors:t},handleSubmit:c}=a,n=H(),p=!!t.entity||!!t.entitySearch||!!t.policiesSearch,{mutateAsync:d}=F(),[f,g]=B(x),{showModal:C}=v(),l=async h=>{if(!await C(T(i)))return;const N=A(h);await d({collectorId:i.id,config:N})&&g()};E(M(i));const u=!i.config?.apiKey;return m(w,{children:[o(I,{collectorName:"NewRelic",collectorId:i.id,invalidConfig:u,hasNonUIOptions:!0}),o(S,{className:n.form,children:o(R,{...a,children:m("form",{onSubmit:c(l),children:[o(r,{name:"entity",label:"Entity",description:"Collects details about New Relic entity with a specific id.",disabled:e}),o(s,{}),o(r,{name:"entitySearch",label:"Entity Search",description:"Collects details about New Relic entities with a specific tag.",disabled:e}),o(s,{}),o(r,{name:"policiesSearch",label:"Policies Search",description:"Collects details about New Relic policies for a specific account.",disabled:e})]})})}),o("div",{className:n.section,children:o(P,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:c(l),disableSave:p})})]})};export{U as NewRelicConfigurator};
|
|
2
2
|
//# sourceMappingURL=NewRelicConfigurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as m,Fragment as D,jsx as o}from"react/jsx-runtime";import{zodResolver as P}from"@hookform/resolvers/zod";import{makeStyles as b,Paper as h,Divider as c}from"@material-ui/core";import{useForm as S,FormProvider as T}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as L}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as E}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as N}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as w}from"../../../../routes.esm.js";import{FooterButtons as F}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as I}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as R}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as O,confirmationModalContent as k}from"../Common/utils.esm.js";import{IncidentsFactDetailsComponent as _}from"./IncidentsFactDetailsComponent.esm.js";import{mapConfigToPagerDutyCollectorConfig as x,defaultPagerDutyConfig as A,SERVICE_COLLECTOR_TYPE as B,STANDARDS_COLLECTOR_TYPE as M,INCIDENTS_COLLECTOR_TYPE as Y,incidentsCollectorConfig as j,mapPagerDutyCollectorConfigToConfig as H}from"./utils.esm.js";import{pagerDutyCollectorFormSchema as U}from"./validation.esm.js";const V=b(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),z=({disabled:t,selectedCollector:e})=>{const a=S({defaultValues:e?x(e.config):A(),mode:"onChange",resolver:P(U)}),{formState:{errors:i},handleSubmit:n}=a,l=V(),d=!!i.service||!!i.standards||!!i.incidents,{mutateAsync:p}=N(),[f,C]=E(w),{showModal:g}=L(),s=async v=>{if(!await g(k(e)))return;const y=H(v);await p({collectorId:e.id,config:y})&&C()};I(O(e));const u=!e.config?.token||!e.config?.server;return m(D,{children:[o(R,{collectorName:"PagerDuty",collectorId:e.id,invalidConfig:u,hasNonUIOptions:!0}),o(h,{className:l.section,children:o(T,{...a,children:m("form",{onSubmit:n(s),children:[o(r,{name:B.toLowerCase(),label:"Service",description:"Collects details about PagerDuty service linked to an entity.",disabled:t}),o(c,{}),o(r,{name:M.toLowerCase(),label:"Standards",description:"Collects details about standards applied to a PagerDuty service linked to an entity.",disabled:t}),o(c,{}),o(r,{name:Y.toLowerCase(),label:"Incidents",description:"Collects details about incidents associated with a PagerDuty service linked to an entity.",disabled:t,FactDetailsComponent:_,multipleCollectors:{enable:!0,defaultConfig:j(e.config)}})]})})}),o("div",{className:l.section,children:o(F,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:n(s),disableSave:d})})]})};export{z as PagerDutyConfigurator};
|
|
1
|
+
import{jsxs as m,Fragment as D,jsx as o}from"react/jsx-runtime";import{zodResolver as P}from"@hookform/resolvers/zod";import{makeStyles as b,Paper as h,Divider as c}from"@material-ui/core";import{useForm as S,FormProvider as T}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as L}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as E}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import{useUpdateCollectorConfig as N}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as w}from"../../../../routes.esm.js";import{FooterButtons as F}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as I}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as R}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as O,confirmationModalContent as k}from"../Common/utils.esm.js";import{IncidentsFactDetailsComponent as _}from"./IncidentsFactDetailsComponent.esm.js";import{mapConfigToPagerDutyCollectorConfig as x,defaultPagerDutyConfig as A,SERVICE_COLLECTOR_TYPE as B,STANDARDS_COLLECTOR_TYPE as M,INCIDENTS_COLLECTOR_TYPE as Y,incidentsCollectorConfig as j,mapPagerDutyCollectorConfigToConfig as H}from"./utils.esm.js";import{pagerDutyCollectorFormSchema as U}from"./validation.esm.js";const V=b(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),z=({disabled:t,selectedCollector:e})=>{const a=S({defaultValues:e?x(e.config):A(),mode:"onChange",resolver:P(U)}),{formState:{errors:i},handleSubmit:n}=a,l=V(),d=!!i.service||!!i.standards||!!i.incidents,{mutateAsync:p}=N(),[f,C]=E(w),{showModal:g}=L(),s=async v=>{if(!await g(k(e)))return;const y=H(v);await p({collectorId:e.id,config:y})&&C()};I(O(e));const u=!e.config?.token||!e.config?.server;return m(D,{children:[o(R,{collectorName:"PagerDuty",collectorId:e.id,invalidConfig:u,hasNonUIOptions:!0}),o(h,{className:l.section,children:o(T,{...a,children:m("form",{onSubmit:n(s),children:[o(r,{name:B.toLowerCase(),label:"Service",description:"Collects details about PagerDuty service linked to an entity.",disabled:t}),o(c,{}),o(r,{name:M.toLowerCase(),label:"Standards",description:"Collects details about standards applied to a PagerDuty service linked to an entity.",disabled:t}),o(c,{}),o(r,{name:Y.toLowerCase(),label:"Incidents",description:"Collects details about incidents associated with a PagerDuty service linked to an entity.",disabled:t,FactDetailsComponent:_,multipleCollectors:{enable:!0,defaultConfig:j(e.config)}})]})})}),o("div",{className:l.section,children:o(F,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:n(s),disableSave:d})})]})};export{z as PagerDutyConfigurator};
|
|
2
2
|
//# sourceMappingURL=PagerDutyConfigurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as f,Fragment as v,jsx as o}from"react/jsx-runtime";import{zodResolver as y}from"@hookform/resolvers/zod";import{makeStyles as O,Paper as T,Divider as d}from"@material-ui/core";import{useCallback as L,useMemo as R}from"react";import{useForm as N,FormProvider as D}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as M}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as j}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as P}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as _}from"../../../../routes.esm.js";import{FooterButtons as w}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as J}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as s}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as Y,confirmationModalContent as B}from"../Common/utils.esm.js";import{ExistsFactDetailsComponent as k}from"./ExistsFactDetailsComponent.esm.js";import{JsonFactDetailsComponent as A}from"./JsonFactDetailsComponent.esm.js";import{RegexFactDetailsComponent as z}from"./RegexFactDetailsComponent.esm.js";import{mapConfigToScmCollectorConfig as H,defaultScmCollectorConfig as C,EXISTS_COLLECTOR_TYPE as I,REGEX_COLLECTOR_TYPE as V,JSON_COLLECTOR_TYPE as X,mapScmCollectorConfigToConfig as G}from"./utils.esm.js";import{scmCollectorFormSchema as U}from"./validation.esm.js";const q=O(i=>({spacer:{height:i.spacing(8),width:"100%"},section:{marginBottom:i.spacing(2)}})),K=({disabled:i,selectedCollector:t})=>{const g=L(async(e,...n)=>{const a={enabled:!1,collectors:[]},F={exists:e.exists.enabled?e.exists:a,json:e.json.enabled?e.json:a,regex:e.regex.enabled?e.regex:a};return y(U)(F,...n)},[]),l=N({defaultValues:t?H(t.config):C(),mode:"onChange",resolver:g}),r=R(()=>C(t.config),[t]),{formState:{isValid:u},handleSubmit:m}=l,c=q(),x=!u,{mutateAsync:b}=P(),[S,h]=j(_),{showModal:E}=M(),p=async e=>{if(!await E(B(t)))return;const n=G(e);await b({collectorId:t.id,config:n})&&h()};return J(Y(t)),f(v,{children:[o(T,{className:c.section,children:o(D,{...l,children:f("form",{onSubmit:m(p),children:[o(s,{name:I,label:"Exists",description:"Collects information on the existence of files within an entity's repository.",disabled:i,multipleCollectors:{enable:!0,defaultConfig:r.exists.collectors[0]},FactDetailsComponent:k}),o(d,{}),o(s,{name:V,label:"Regex",description:"Executes regular expressions against a specified file in an entity's repository and collects its capture groups.",disabled:i,multipleCollectors:{enable:!0,defaultConfig:r.regex.collectors[0]},FactDetailsComponent:z}),o(d,{}),o(s,{name:X,label:"JSON / YAML",description:"Collects data from a JSON/YAML file at specified JSON paths in an entity's repository.",disabled:i,multipleCollectors:{enable:!0,defaultConfig:r.json.collectors[0]},FactDetailsComponent:A})]})})}),o("div",{className:c.section,children:o(w,{onCancel:S,saveButtonText:"Save",isLoading:!1,onSave:m(p),disableSave:x,noMargin:!0})})]})};export{K as ScmConfigurator};
|
|
1
|
+
import{jsxs as f,Fragment as v,jsx as o}from"react/jsx-runtime";import{zodResolver as y}from"@hookform/resolvers/zod";import{makeStyles as O,Paper as T,Divider as d}from"@material-ui/core";import{useCallback as L,useMemo as R}from"react";import{useForm as N,FormProvider as D}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as M}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as j}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import{useUpdateCollectorConfig as P}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as _}from"../../../../routes.esm.js";import{FooterButtons as w}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as J}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as s}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as Y,confirmationModalContent as B}from"../Common/utils.esm.js";import{ExistsFactDetailsComponent as k}from"./ExistsFactDetailsComponent.esm.js";import{JsonFactDetailsComponent as A}from"./JsonFactDetailsComponent.esm.js";import{RegexFactDetailsComponent as z}from"./RegexFactDetailsComponent.esm.js";import{mapConfigToScmCollectorConfig as H,defaultScmCollectorConfig as C,EXISTS_COLLECTOR_TYPE as I,REGEX_COLLECTOR_TYPE as V,JSON_COLLECTOR_TYPE as X,mapScmCollectorConfigToConfig as G}from"./utils.esm.js";import{scmCollectorFormSchema as U}from"./validation.esm.js";const q=O(i=>({spacer:{height:i.spacing(8),width:"100%"},section:{marginBottom:i.spacing(2)}})),K=({disabled:i,selectedCollector:t})=>{const g=L(async(e,...n)=>{const a={enabled:!1,collectors:[]},F={exists:e.exists.enabled?e.exists:a,json:e.json.enabled?e.json:a,regex:e.regex.enabled?e.regex:a};return y(U)(F,...n)},[]),l=N({defaultValues:t?H(t.config):C(),mode:"onChange",resolver:g}),r=R(()=>C(t.config),[t]),{formState:{isValid:u},handleSubmit:m}=l,c=q(),x=!u,{mutateAsync:b}=P(),[S,h]=j(_),{showModal:E}=M(),p=async e=>{if(!await E(B(t)))return;const n=G(e);await b({collectorId:t.id,config:n})&&h()};return J(Y(t)),f(v,{children:[o(T,{className:c.section,children:o(D,{...l,children:f("form",{onSubmit:m(p),children:[o(s,{name:I,label:"Exists",description:"Collects information on the existence of files within an entity's repository.",disabled:i,multipleCollectors:{enable:!0,defaultConfig:r.exists.collectors[0]},FactDetailsComponent:k}),o(d,{}),o(s,{name:V,label:"Regex",description:"Executes regular expressions against a specified file in an entity's repository and collects its capture groups.",disabled:i,multipleCollectors:{enable:!0,defaultConfig:r.regex.collectors[0]},FactDetailsComponent:z}),o(d,{}),o(s,{name:X,label:"JSON / YAML",description:"Collects data from a JSON/YAML file at specified JSON paths in an entity's repository.",disabled:i,multipleCollectors:{enable:!0,defaultConfig:r.json.collectors[0]},FactDetailsComponent:A})]})})}),o("div",{className:c.section,children:o(w,{onCancel:S,saveButtonText:"Save",isLoading:!1,onSave:m(p),disableSave:x,noMargin:!0})})]})};export{K as ScmConfigurator};
|
|
2
2
|
//# sourceMappingURL=ScmConfigurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as p,Fragment as Q,jsx as o}from"react/jsx-runtime";import{zodResolver as F}from"@hookform/resolvers/zod";import{makeStyles as y,Paper as k,Divider as s}from"@material-ui/core";import{asArray as w}from"@spotify/backstage-plugin-soundcheck-common";import{useForm as I,FormProvider as N}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as T}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as D}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as M}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as P}from"../../../../routes.esm.js";import{FooterButtons as x}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as B}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as i}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as A}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as R,confirmationModalContent as H}from"../Common/utils.esm.js";import{IssuesFactDetailsInput as U}from"./IssuesFactDetailsInput.esm.js";import{MeasuresFactDetailsInput as z}from"./MeasuresFactDetailsInput.esm.js";import{mapConfigToSonarQubeCollectorConfig as E,defaultSonarQubeConfig as L,issuesCollectorConfig as O,measuresCollectorConfig as V,mapSonarQubeCollectorConfigToConfig as q}from"./utils.esm.js";import{sonarQubeCollectorFormSchema as G}from"./validation.esm.js";const J=y(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),K=({disabled:t,selectedCollector:e})=>{const n=I({defaultValues:e?E(e.config):L(),mode:"onChange",resolver:F(G)}),{formState:{errors:r},handleSubmit:l}=n,m=J(),d=!!r.projects||!!r.projectTags||!!r.issues||!!r.measures,{mutateAsync:u}=M(),[f,C]=D(P),{showModal:g}=T(),c=async j=>{if(!await g(H(e)))return;const v=q(j);await u({collectorId:e.id,config:v})&&C()};B(R(e));const a=w(e.config),b=a[0]?.token,S=a[0]?.username&&a[0]?.password,h=!b&&!S;return p(Q,{children:[o(A,{collectorName:"SonarQube",collectorId:e.id,invalidConfig:h,hasNonUIOptions:!0}),o(k,{className:m.section,children:o(N,{...n,children:p("form",{onSubmit:l(c),children:[o(i,{name:"projects",label:"Projects",description:"Collects details about SonarQube project linked to an entity.",disabled:t}),o(s,{}),o(i,{name:"projectTags",label:"Project Tags",description:"Collects details about tags set on a SonarQube project linked to an entity.",disabled:t}),o(s,{}),o(i,{name:"issues",label:"Issues",description:"Collects details about issues associated with a SonarQube project linked to an entity.",disabled:t,FactDetailsComponent:U,multipleCollectors:{enable:!0,defaultConfig:O(e.config)}}),o(s,{}),o(i,{name:"measures",label:"Measures",description:"Collects details about measures associated with a SonarQube project linked to an entity.",disabled:t,FactDetailsComponent:z,multipleCollectors:{enable:!0,defaultConfig:V(e.config)}})]})})}),o("div",{className:m.section,children:o(x,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:l(c),disableSave:d})})]})};export{K as SonarQubeConfigurator};
|
|
1
|
+
import{jsxs as p,Fragment as Q,jsx as o}from"react/jsx-runtime";import{zodResolver as F}from"@hookform/resolvers/zod";import{makeStyles as y,Paper as k,Divider as s}from"@material-ui/core";import{asArray as w}from"@spotify/backstage-plugin-soundcheck-common";import{useForm as I,FormProvider as N}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as T}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as D}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import{useUpdateCollectorConfig as M}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as P}from"../../../../routes.esm.js";import{FooterButtons as x}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as B}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as i}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as A}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as R,confirmationModalContent as H}from"../Common/utils.esm.js";import{IssuesFactDetailsInput as U}from"./IssuesFactDetailsInput.esm.js";import{MeasuresFactDetailsInput as z}from"./MeasuresFactDetailsInput.esm.js";import{mapConfigToSonarQubeCollectorConfig as E,defaultSonarQubeConfig as L,issuesCollectorConfig as O,measuresCollectorConfig as V,mapSonarQubeCollectorConfigToConfig as q}from"./utils.esm.js";import{sonarQubeCollectorFormSchema as G}from"./validation.esm.js";const J=y(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),K=({disabled:t,selectedCollector:e})=>{const n=I({defaultValues:e?E(e.config):L(),mode:"onChange",resolver:F(G)}),{formState:{errors:r},handleSubmit:l}=n,m=J(),d=!!r.projects||!!r.projectTags||!!r.issues||!!r.measures,{mutateAsync:u}=M(),[f,C]=D(P),{showModal:g}=T(),c=async j=>{if(!await g(H(e)))return;const v=q(j);await u({collectorId:e.id,config:v})&&C()};B(R(e));const a=w(e.config),b=a[0]?.token,S=a[0]?.username&&a[0]?.password,h=!b&&!S;return p(Q,{children:[o(A,{collectorName:"SonarQube",collectorId:e.id,invalidConfig:h,hasNonUIOptions:!0}),o(k,{className:m.section,children:o(N,{...n,children:p("form",{onSubmit:l(c),children:[o(i,{name:"projects",label:"Projects",description:"Collects details about SonarQube project linked to an entity.",disabled:t}),o(s,{}),o(i,{name:"projectTags",label:"Project Tags",description:"Collects details about tags set on a SonarQube project linked to an entity.",disabled:t}),o(s,{}),o(i,{name:"issues",label:"Issues",description:"Collects details about issues associated with a SonarQube project linked to an entity.",disabled:t,FactDetailsComponent:U,multipleCollectors:{enable:!0,defaultConfig:O(e.config)}}),o(s,{}),o(i,{name:"measures",label:"Measures",description:"Collects details about measures associated with a SonarQube project linked to an entity.",disabled:t,FactDetailsComponent:z,multipleCollectors:{enable:!0,defaultConfig:V(e.config)}})]})})}),o("div",{className:m.section,children:o(x,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:l(c),disableSave:d})})]})};export{K as SonarQubeConfigurator};
|
|
2
2
|
//# sourceMappingURL=SonarQubeConfigurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{Grid as l}from"@material-ui/core";import{useMemo as g,useEffect as p}from"react";import{useGetCollectors as f}from"../../../hooks/collectors/useGetCollectors.esm.js";import{useLCPReporting as C}from"../../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as h}from"../../../hooks/useLoadTimeReporting.esm.js";import{CollectorListSkeleton as b}from"./CollectorListSkeleton.esm.js";import{CollectorSummaryCard as L}from"./CollectorSummaryCard.esm.js";const c=["github","gitlab","scm","pagerduty","datadog","kubernetes","jira","sonarqube","newrelic","bigquery","catalog","azure","http","data-registry"],P=({integrations:i})=>{const n=g(()=>({routeName:"soundcheck-integrations",additionalAttributes:{integrationsPerPage:i?.length}}),[i?.length]),{reportContentLoaded:d}=h(n),{reporter:m}=C(n),{data:u,isLoading:a}=f(),o=i?.map(e=>e.integrationId)??c,s=m?.getLCPValue();return p(()=>{a||d({lcp:s})},[a,d,s]),r(l,{container:!0,direction:"row",children:r(l,{container:!0,spacing:4,role:"list","aria-label":"checks",children:a?r(b,{}):u?.filter(e=>e.isConfigurable)?.sort((e,t)=>!o.includes(e.id)&&o.includes(t.id)?1:o.includes(e.id)&&!o.includes(t.id)?-1:(e.name??e.id).localeCompare(t.name??t.id))?.map(e=>r(l,{xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":`collector card ${e.id}`,children:r(L,{collector:e,hasNoCodeUI:o.includes(e.id),routePath:i?.find(t=>t.integrationId===e.id)?.routePath})},e.id))})})};export{P as CollectorListPage,c as ConfigurableCollectorIds};
|
|
2
2
|
//# sourceMappingURL=CollectorListPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import{makeStyles as e}from"@material-ui/core";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as i}from"../SoundcheckHeader/useHeader.esm.js";import{CollectorListPage as n}from"./CollectorListPage/CollectorListPage.esm.js";const a=e(o=>({container:{padding:o.spacing(3)}})),s=({integrations:o})=>{const r=a();return i(),t("div",{className:r.container,children:t(n,{integrations:o})})};export{s as CollectorsPage};
|
|
2
2
|
//# sourceMappingURL=CollectorsPage.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import{makeStyles as l}from"@material-ui/core";import{Cell as r}from"react-aria-components";const s=l(()=>({customCell:{padding:"0 var(--bui-space-3)"}})),m=({children:o})=>{const t=s();return e(r,{className:t.customCell,children:o})};export{m as CustomCell};
|
|
2
|
+
//# sourceMappingURL=CustomCell.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as t,jsxs as o}from"react/jsx-runtime";import{Box as r,Text as c,Button as p,ButtonLink as x,Icon as y}from"@backstage/ui";import{makeStyles as g}from"@material-ui/core";const h=g(e=>({emptyStateContent:{display:"flex",flexDirection:"column",alignItems:"center",textAlign:"center",gridGap:e.spacing(1),maxWidth:500},emptyStateContainer:{padding:e.spacing(6,4),width:"100%",display:"flex",justifyContent:"center",border:`1px dashed ${e.palette.divider}`},actions:{display:"flex",alignItems:"center",gridGap:e.spacing(1),marginTop:e.spacing(2)}})),f=({title:e,body:l,actionOnClick:n,actionButtonIcon:s,actionDisabled:d,actionText:m="Create",docLink:i})=>{const a=h();return t(r,{className:a.emptyStateContainer,children:o(r,{className:a.emptyStateContent,children:[t(c,{variant:"title-x-small",weight:"bold",children:e}),t(c,{variant:"body-medium",color:"secondary",children:l}),(n||i)&&o(r,{className:a.actions,children:[n&&t(p,{isDisabled:d,iconStart:s,onClick:n,children:m}),i&&t(x,{href:i,target:"_blank",rel:"noopener noreferrer",iconEnd:t(y,{name:"external-link"}),variant:"secondary",children:"Learn More"})]})]})})};export{f as EmptyStateBUI};
|
|
2
|
+
//# sourceMappingURL=EmptyStateBUI.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import{useRouteRef as r}from"@backstage/core-plugin-api";import{usePermission as m}from"@backstage/plugin-permission-react";import{Icon as s}from"@backstage/ui";import{soundcheckCampaignCreatePermission as c}from"@spotify/backstage-plugin-soundcheck-common";import{useNavigate as p}from"react-router-dom";import{campaignCreateRouteRef as g}from"../../routes.esm.js";import{EmptyStateBUI as u}from"./EmptyStateBUI.esm.js";const f=()=>{const a=r(g),i=p(),{loading:e,allowed:n}=m({permission:c}),o=!e&&n;return t(u,{title:o?"Create your first campaign":"No campaigns found",body:"Campaigns organize and manage coordinated initiatives across your organization.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns/",actionButtonIcon:t(s,{name:"plus"}),actionOnClick:o?()=>i(a()):()=>{},actionText:"Create a campaign",actionDisabled:!o})};export{f as EmptyStateNoCampaigns};
|
|
2
|
+
//# sourceMappingURL=EmptyStateNoCampaigns.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import{useRouteRef as r}from"@backstage/core-plugin-api";import{usePermission as a}from"@backstage/plugin-permission-react";import{Icon as n}from"@backstage/ui";import{soundcheckCheckCreatePermission as m}from"@spotify/backstage-plugin-soundcheck-common";import{useNavigate as p}from"react-router-dom";import{checkTemplatesRouteRef as f}from"../../routes.esm.js";import{EmptyStateBUI as d}from"./EmptyStateBUI.esm.js";const h=()=>{const t=r(f),c=p(),{loading:s,allowed:i}=a({permission:m}),o=!s&&i;return e(d,{title:o?"Create your first check":"No checks found",body:"Checks indicate where the software aligns to or deviates from organizational standards and best practices.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks/",actionButtonIcon:e(n,{name:"plus"}),actionOnClick:o?()=>c(t()):()=>{},actionText:"Create a check",actionDisabled:!o})};export{h as EmptyStateNoChecks};
|
|
2
|
+
//# sourceMappingURL=EmptyStateNoChecks.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as o}from"react/jsx-runtime";import{useRouteRef as i}from"@backstage/core-plugin-api";import{usePermission as n}from"@backstage/plugin-permission-react";import{Icon as m}from"@backstage/ui";import{soundcheckTrackCreatePermission as p}from"@spotify/backstage-plugin-soundcheck-common";import{useNavigate as u}from"react-router-dom";import{trackCreateRouteRef as f}from"../../routes.esm.js";import{EmptyStateBUI as k}from"./EmptyStateBUI.esm.js";const d=({title:r})=>{const e=i(f),a=u(),{loading:c,allowed:s}=n({permission:p}),t=!c&&s;return o(k,{title:r??(t?"Create your first track":"No tracks found"),body:"Tracks encourage alignment to architectural best practices and standards.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks/",actionButtonIcon:o(m,{name:"plus"}),actionOnClick:t?()=>a(e()):()=>{},actionText:"Create a track",actionDisabled:!t})};export{d as EmptyStateNoTracks};
|
|
2
|
+
//# sourceMappingURL=EmptyStateNoTracks.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as t,jsxs as w}from"react/jsx-runtime";import{stringifyEntityRef as T}from"@backstage/catalog-model";import{makeStyles as z,FormControlLabel as F,Checkbox as E,Typography as I,Box as j,TextField as A}from"@material-ui/core";import B from"@material-ui/icons/CheckBox";import D from"@material-ui/icons/CheckBoxOutlineBlank";import G from"@material-ui/icons/ExpandMore";import{Autocomplete as N}from"@material-ui/lab";import{useState as P,useMemo as c,useCallback as p}from"react";import{useGetEntityRefs as R}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{FormFieldLabel as V}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as H}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const M=z({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),U=({label:d,values:a,onChange:n,disabled:u,filter:C,renderOption:f,renderTags:h})=>{const s=M(),[L,m]=P(!1),{data:b,isLoading:g,error:v}=R(C),i=c(()=>b?.items.map(e=>({label:e.metadata.title??e.metadata.name,value:T(e),description:e.metadata.description}))??[],[b]),k=c(()=>a?.map(e=>({...e,value:e.value.toLocaleLowerCase("en-US")}))??[],[a]),x=p((e,o)=>{n(o),i.every(l=>o.some(({value:r})=>l.value===r))&&m(!1)},[i,n]),y=p(()=>{n(a)},[a,n]),O=p((e,o)=>f?.(e,o)??t(F,{onClick:l=>l.preventDefault(),control:t(E,{icon:t(D,{fontSize:"small"}),checkedIcon:t(B,{fontSize:"small"}),checked:o.selected}),label:e.label,classes:{label:s.label}}),[f,s.label]),S=c(()=>u||g||!a?.length&&!i.length,[u,g,a?.length,i.length]);return v?t(I,{color:"error",children:"Failed to load entities"}):w(j,{pb:1,pt:1,className:s.container,children:[t(V,{title:d,docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),t(N,{multiple:!0,open:L,onOpen:()=>m(!0),onClose:()=>m(!1),className:s.formControl,limitTags:4,disableCloseOnSelect:!0,"aria-label":d,value:k,onChange:x,onBlur:y,disabled:S,ListboxComponent:H,renderOption:O,renderTags:h,size:"small",popupIcon:t(G,{"data-testid":"selected-facets-expand"}),renderInput:e=>t(A,{...e,variant:"outlined"}),options:i,getOptionLabel:e=>e.label,getOptionSelected:(e,o)=>e.value===o.value,filterOptions:(e,o)=>{const l=o.inputValue.toLowerCase();return e.filter(r=>r.label.toLowerCase().includes(l)||r.value.toLowerCase().includes(l)||r.description?.toLowerCase().includes(l))}})]})};export{U as EntitiesAutocompletePicker};
|
|
2
2
|
//# sourceMappingURL=EntitiesAutocompletePicker.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as i,jsxs as c}from"react/jsx-runtime";import{Link as g,InfoCard as v}from"@backstage/core-components";import{useRouteRef as d}from"@backstage/core-plugin-api";import{useEntity as C}from"@backstage/plugin-catalog-react";import{Divider as R}from"@material-ui/core";import S from"@material-ui/core/styles/makeStyles";import{SpotifyLicenseBanner as I}from"@spotify/backstage-plugin-core";import{Fragment as L}from"react";import{useAllCertifications as w}from"../../hooks/certifications/useAllCertifications.esm.js";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{usePlaylists as b}from"../../hooks/playlists/usePlaylists.esm.js";import{certificationTrackRouteRef as x,certificationPlaylistTrackRouteRef as E}from"../../routes.esm.js";import{soundcheckBackend as N,invalidLicenseMessage as j}from"../../utils/license.esm.js";import{AlertPanel as A}from"../AlertPanel/AlertPanel.esm.js";import"../CertificationSidebar/CertificationSidebar.esm.js";import{CertificationSummary as P}from"../CertificationSidebar/CertificationSummary.esm.js";import"@material-ui/lab";import"../CertificationSidebar/Check.esm.js";import"../CertificationSidebar/LevelSummary.esm.js";import{NoCertifications as T}from"../EmptyState/EmptyState.esm.js";import{CardSkeleton as B}from"./skeletons/CardSkeleton.esm.js";const m=S(t=>({certificationWrapper:{display:"flex",justifyContent:"space-between",alignItems:"center"},infoCard:{display:"grid",gridRowGap:t.spacing(2)},emptyState:{overflow:"hidden"}})),n=({children:t,title:e})=>{const o=m();return i(v,{title:e,children:c("div",{className:o.infoCard,children:[i(I,{inline:!0,backend:N,invalidLicenseMessage:j}),t]})})},D=(t,e)=>t.find(o=>o.trackIds.some(a=>a===e))?.id??"",M=({title:t="Soundcheck"})=>{const{entity:e}=C(),o=m(),{data:a,isError:l,isLoading:p}=w(e),{data:s,isError:f,isLoading:k}=b(e),y=d(x),h=d(E);return l||f?i(n,{title:t,children:i(A,{severity:"error",title:"Error loading certifications"})}):p||k||!a||!s?i(n,{title:t,children:i(B,{})}):a.length?i(n,{title:t,children:a.map((r,u)=>c(L,{children:[c("div",{className:o.certificationWrapper,"data-testid":"soundcheck-track-row",children:[i(P,{name:r.track.name,badge:r.track.badge,trackType:r.track?.type},r.track.id),i(g,{to:r.track.type==="playlist"?h({playlistId:D(s,r.track.id),trackId:r.track.id}):y({trackId:r.track.id}),children:"View Details"})]}),u<a.length-1?i(R,{}):null]},r.track.name))}):i(n,{title:t,children:i("div",{className:o.emptyState,children:i(T,{})})})};export{M as Card,m as useStyles};
|
|
1
|
+
import{jsx as i,jsxs as c}from"react/jsx-runtime";import{Link as g,InfoCard as v}from"@backstage/core-components";import{useRouteRef as d}from"@backstage/core-plugin-api";import{useEntity as C}from"@backstage/plugin-catalog-react";import{Divider as R}from"@material-ui/core";import S from"@material-ui/core/styles/makeStyles";import{SpotifyLicenseBanner as I}from"@spotify/backstage-plugin-core";import{Fragment as L}from"react";import{useAllCertifications as w}from"../../hooks/certifications/useAllCertifications.esm.js";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{usePlaylists as b}from"../../hooks/playlists/usePlaylists.esm.js";import{certificationTrackRouteRef as x,certificationPlaylistTrackRouteRef as E}from"../../routes.esm.js";import{soundcheckBackend as N,invalidLicenseMessage as j}from"../../utils/license.esm.js";import{AlertPanel as A}from"../AlertPanel/AlertPanel.esm.js";import"../CertificationSidebar/CertificationSidebar.esm.js";import{CertificationSummary as P}from"../CertificationSidebar/CertificationSummary.esm.js";import"@material-ui/lab";import"../CertificationSidebar/Check.esm.js";import"../CertificationSidebar/LevelSummary.esm.js";import{NoCertifications as T}from"../EmptyState/EmptyState.esm.js";import"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@backstage/ui";import{CardSkeleton as B}from"./skeletons/CardSkeleton.esm.js";const m=S(t=>({certificationWrapper:{display:"flex",justifyContent:"space-between",alignItems:"center"},infoCard:{display:"grid",gridRowGap:t.spacing(2)},emptyState:{overflow:"hidden"}})),n=({children:t,title:e})=>{const o=m();return i(v,{title:e,children:c("div",{className:o.infoCard,children:[i(I,{inline:!0,backend:N,invalidLicenseMessage:j}),t]})})},D=(t,e)=>t.find(o=>o.trackIds.some(a=>a===e))?.id??"",M=({title:t="Soundcheck"})=>{const{entity:e}=C(),o=m(),{data:a,isError:l,isLoading:p}=w(e),{data:s,isError:f,isLoading:k}=b(e),y=d(x),h=d(E);return l||f?i(n,{title:t,children:i(A,{severity:"error",title:"Error loading certifications"})}):p||k||!a||!s?i(n,{title:t,children:i(B,{})}):a.length?i(n,{title:t,children:a.map((r,u)=>c(L,{children:[c("div",{className:o.certificationWrapper,"data-testid":"soundcheck-track-row",children:[i(P,{name:r.track.name,badge:r.track.badge,trackType:r.track?.type},r.track.id),i(g,{to:r.track.type==="playlist"?h({playlistId:D(s,r.track.id),trackId:r.track.id}):y({trackId:r.track.id}),children:"View Details"})]}),u<a.length-1?i(R,{}):null]},r.track.name))}):i(n,{title:t,children:i("div",{className:o.emptyState,children:i(T,{})})})};export{M as Card,m as useStyles};
|
|
2
2
|
//# sourceMappingURL=Card.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as a,Fragment as v}from"react/jsx-runtime";import{makeStyles as
|
|
1
|
+
import{jsx as e,jsxs as a,Fragment as v}from"react/jsx-runtime";import{stringifyEntityRef as Z}from"@backstage/catalog-model";import{makeStyles as ee,Box as o,Typography as n,TextField as te,Button as T}from"@material-ui/core";import{Alert as ae}from"@material-ui/lab";import{parseFactRef as ie}from"@spotify/backstage-plugin-soundcheck-common";import oe from"lodash";import{useMemo as g,useState as F,useEffect as ne,useCallback as re}from"react";import{useGetEntityRefs as le}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{useGetLimitedEntityRefs as ce}from"../../hooks/catalog/useGetLimitedEntityRefs.esm.js";import{useGetCollectors as se}from"../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as de}from"../../hooks/collectors/useGetFactSchema.esm.js";import{useGetFact as pe}from"../../hooks/useGetFact.esm.js";import{useGetPathResolvers as he}from"../../hooks/useGetPathResolvers.esm.js";import{generateJsonPaths as me}from"../CheckForm/utils/checkFormUtils.esm.js";import{hasLogo as fe,CollectorLogo as ue}from"../CollectorsPage/CollectorListPage/CollectorLogo.esm.js";import{ExpandableSection as W}from"../ExpandableSection/ExpandableSection.esm.js";import{mapFiltersToCatalogFilter as ve}from"../Filter/utils.esm.js";import"../Filter/FilterComponent.esm.js";import{emptyFilters as ge}from"../Filter/types.esm.js";import{FormattedPreview as L}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 ye}from"../FormControlledAutocomplete/useLabelOptions.esm.js";import{ControlledAutocomplete as y}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as be}from"../LoadingIndicator/LoadingIndicator.esm.js";import{useFactOptions as Se}from"./useFactOptions.esm.js";const Fe=800,Ne=ee(t=>({content:{padding:t.spacing(2,3),width:Fe},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}})),Re=t=>{const h=!t||Object.values(t).every(p=>!p?.length)?{...ge(),selectedKinds:["Component","System"]}:t;return ve(h)},xe=({factRef:t,updateFactRef:h,path:p,updatePath:G,entityRef:m,updateEntityRef:k,pathResolver:s,filters:N,onSave:w,hidePath:P})=>{const i=Ne(),d=g(()=>{if(t)try{return ie(t)}catch{return}},[t]),[R,O]=F(d?.source??null);ne(()=>{d?.source&&O(d.source)},[d?.source]);const[b,V]=F("jsonpath"),[x,j]=F(),[C,M]=F(),{data:B}=he(),A=g(()=>B?.map(r=>r.id)??[],[B]),{data:f}=de(d?.source,d?.name,!0),D=g(()=>f?me(f.schema):[],[f]),{data:E,isLoading:J}=se(),$=E?.map(r=>r.id)?.sort()??[],S=!N||Object.values(N).every(r=>!r?.length),{data:z,isLoading:H}=le(Re(N),1e3,!S),K=z?.items.map(r=>Z(r)),{entityRefs:U,allLoading:q}=ce(500,S),l=g(()=>E?.find(r=>r.id===R),[E,R]),{factOptions:Q}=Se({selectedCollector:l}),{options:X,getOptionLabel:I}=ye(Q),{data:c,isLoading:u}=pe({factRef:t||"",entityRef:C||"",path:x,pathResolver:s??b??void 0},!!t&&!!C),Y=re(()=>{j(p),M(m)},[m,p]),_=g(()=>!!l?.config?.cache,[l]);return e(o,{className:i.content,"data-testid":"fact-explorer",children:a(o,{children:[a(o,{children:[e(n,{variant:"subtitle1",children:"Select an Integration"}),e(y,{options:$,onChange:r=>{O(r),h("")},value:R,placeholder:"Integration",disabled:J,fullWidth:!0,freeSolo:!0})]}),!l&&e(v,{children:a(o,{children:[e(n,{variant:"subtitle1",children:"Enter a Fact Ref Directly"}),e(te,{value:t,onChange:r=>h(r.currentTarget.value),variant:"outlined",margin:"dense",placeholder:"Enter the full fact ref, i.e. custom:default/custom-fact",fullWidth:!0})]})}),!!l&&e(v,{children:a(o,{className:i.section,children:[fe(l.id)?e(ue,{noMargin:!0,collectorId:l.id}):a(n,{variant:"h5",className:i.collectorName,component:"div",children:[l.name??l.id," "]}),!!l.description&&e(n,{variant:"body2",children:l.description}),e(y,{options:X,onChange:h,value:t??null,placeholder:"Select Fact",getOptionLabel:I,noOptionsText:"No Facts",fullWidth:!0})]})}),!!t&&!!d&&a(v,{children:[!!f?.schema&&e(o,{className:i.section,children:e(W,{elevation:1,title:"JSON Schema",children:e("div",{className:i.preview,children:e(L,{data:f.schema})})})}),!P&&a(v,{children:[a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Path Resolver"}),!s&&e(n,{variant:"caption",children:"Defaults to jsonpath"}),s?e(n,{variant:"body1",children:s}):e(y,{options:A,onChange:V,value:s??b,placeholder:"Path Resolver (Optional)",getOptionLabel:I,fullWidth:!0,disabled:!!s,freeSolo:!0})]}),a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Path"}),e(y,{options:(s??b)==="jsonpath"?D:[],onChange:r=>{x&&j(void 0),G(r)},value:p??null,placeholder:"Path",fullWidth:!0,freeSolo:!0}),e("div",{className:i.pathSection,children:!!w&&e(T,{className:i.testPathButton,variant:"contained",onClick:()=>w({factRef:t,path:p??"",pathResolver:b??s??""}),disabled:!p,color:"primary",children:"Save"})})]})]})]}),!!t&&!!d&&e(W,{alwaysExpanded:P,elevation:0,title:"Sample Fact and Test Path",children:a(o,{className:i.expandedSection,children:[a(o,{marginBottom:1,children:[e(n,{variant:"subtitle1",children:"Select an Entity"}),a(n,{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:S?U??[]:K??[],onChange:k,value:m??null,placeholder:"Entity Selection",isLoading:S?q:H,freeSolo:!0,fullWidth:!0})]}),e(o,{children:e(T,{className:i.testPathButton,variant:"contained",onClick:Y,disabled:!m,color:"primary",children:"Sample Fact"})}),a(v,{children:[!!x&&!u&&a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Resolved Value"}),c?.resolvedValue!==null&&c?.resolvedValue!==void 0?e(o,{className:i.preview,children:e(L,{data:c?.resolvedValue})}):e(n,{color:"textSecondary",variant:"body2",children:"Could not resolve path"})]}),!!C&&a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Fact Data"}),_&&e(n,{variant:"caption",children:"Uses cache when available."}),!!u&&e("div",{className:i.loading,children:e(be,{})}),!u&&!!c?.fact&&e(o,{className:i.preview,children:c?.fact?.sensitive&&oe.isEmpty(c?.fact?.data)?e(o,{children:e(ae,{severity:"info",children:"The associated fact contains potentially sensitive information and has been redacted."})}):e(L,{data:c?.fact?.data})}),!u&&!!c?.collectionError&&a(n,{color:"textSecondary",variant:"body2",children:["Failed to collect:"," ",c?.collectionError?.errorMessage]}),!u&&!c?.fact&&!c?.collectionError&&a(n,{color:"textSecondary",variant:"body2",children:["Fact ",t," unavailable for entity ",m]})]})]})]})})]})})};export{xe as FactExplorer};
|
|
2
2
|
//# sourceMappingURL=FactExplorer.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as L}from"react/jsx-runtime";import{makeStyles as
|
|
1
|
+
import{jsx as t,jsxs as L}from"react/jsx-runtime";import{makeStyles as w,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 P from"@material-ui/icons/ExpandMore";import{Autocomplete as U}from"@material-ui/lab";import{useState as V,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 $=w({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=$(),[y,c]=V(!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]),O=d(()=>{n(l?.length?l:void 0)},[l,n]),T=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]),v=s(()=>g||C||!l?.length&&(!r?.length||!o?.length),[g,C,l?.length,r?.length,o?.length]),z=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(U,{open:y,onOpen:()=>c(!0),onClose:()=>c(!1),className:i.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":b,options:z,value:m,getOptionLabel:e=>r&&o?r[o.indexOf(e)]??e:e,onChange:F,onBlur:O,disabled:v,ListboxComponent:M,renderOption:T,renderTags:k,size:"small",popupIcon:t(P,{"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{jsx as
|
|
1
|
+
import{jsx as F,Fragment as j}from"react/jsx-runtime";import{parseEntityRef as k,stringifyEntityRef as b}from"@backstage/catalog-model";import{Table as D}from"@backstage/core-components";import{makeStyles as K,useTheme as O}from"@material-ui/core";import{combineEntityFilterQueries as N,difference as A}from"@spotify/backstage-plugin-soundcheck-common";import{useState as C,useMemo as u}from"react";import{useEntitiesByRefs as B}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useGetEntityRefs as z}from"../../../hooks/catalog/useGetEntityRefs.esm.js";import{mapFiltersToCatalogFilter as R}from"../utils.esm.js";import{createEntityRefColumn as M,createSystemColumn as W,createOwnerColumn as G,createKindColumn as I,createSpecTypeColumn as Q,createSpecLifecycleColumn as X,createTagsColumn as Y}from"./EntityTableColumns.esm.js";const $=K(()=>({entityTable:{'& span[class*="CatalogReactEntityDisplayName-root"]':{"&:hover":{textDecoration:"underline"}}}})),w=[M(),W(),G(),I(),Q(),X(),Y()],q=15e3,H=({filter:y,excludeFilter:p,keyValueFilter:f,excludeKeyValueFilter:m})=>{const a=R(y,f),r=!!a?.[0]&&Object.values(a[0]).some(t=>!!t),l=p||m?R(p,m):[],e=!!l?.[0]&&Object.values(l[0]).some(t=>!!t),{data:g,isFetching:c}=z(a,e&&!r?q:void 0,r),d=g?.items.map(t=>b(t)),n=e?N(a,l):void 0,{data:h,isFetching:s}=z(n??{},void 0,r&&!!n),o=h?.items.map(t=>b(t));return{allEntityRefs:u(()=>A(d??[],o??[]),[o,d]),isLoading:c||s}},J=({filter:y,excludeFilter:p,keyValueFilter:f,excludeKeyValueFilter:m,additionalColumns:a=[],title:r,hideTags:l=!1})=>{const[e,g]=C({page:0,pageSize:10}),[c,d]=C(""),{allEntityRefs:n,isLoading:h}=H({filter:y,excludeFilter:p,keyValueFilter:f,excludeKeyValueFilter:m}),s=u(()=>{const i=new RegExp(c,"i");return n.filter(V=>k(V).name.match(i))},[n,c]),o=s.length,t=O(),x=$(),E=u(()=>s.slice(e.page*e.pageSize,(e.page+1)*e.pageSize),[s,e.page,e.pageSize]),{data:T,isLoading:S}=B({entityRefs:E}),v=u(()=>l?[...w.slice(0,-1),...a]:[...w,...a],[a,l]),L=o>0?`All (${o||0}) `:"No Items",P=r||L;return F(j,{children:F("div",{className:x.entityTable,children:F(D,{title:P,columns:v,subtitle:o===0?"Add or adjust filters to see preview.":"",data:T?.items?.filter(i=>!!i)??[],isLoading:S||h,options:{padding:"dense",paging:o>e.pageSize,toolbar:!0,draggable:!1,tableLayout:"fixed",search:!0,showTitle:!0,rowStyle:{fontSize:t.typography.body1.fontSize},showFirstLastPageButtons:!1,emptyRowsWhenPaging:!0,pageSizeOptions:[10,25,50],loadingType:"linear",showEmptyDataSourceMessage:!S,pageSize:e.pageSize,sorting:!1},onPageChange:i=>{g({...e,page:i})},onSearchChange:i=>{d(i)},onRowsPerPageChange:i=>{g({...e,pageSize:i})},page:e.page,totalCount:o,localization:{pagination:{labelDisplayedRows:""}}})})})};export{J as FilterPreviewTable};
|
|
2
2
|
//# sourceMappingURL=FilterPreviewTable.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as v,Fragment as z}from"react/jsx-runtime";import{Box as i,IconButton as
|
|
1
|
+
import{jsx as e,jsxs as v,Fragment as z}from"react/jsx-runtime";import{Box as i,IconButton as T,Divider as V,Button as B,FormHelperText as A,TextField as W,Chip as E}from"@material-ui/core";import F from"@material-ui/icons/Add";import G from"@material-ui/icons/Delete";import{useEffect as j,useCallback as f,useMemo as L,useState as M}from"react";import{useImmer as w}from"use-immer";import{SoundcheckDialog as $}from"../SoundcheckDialog/SoundcheckDialog.esm.js";const D=({value:h,onChange:c,onKeyDown:u,placeholder:o,endAdornment:m,error:r,helperText:t})=>v(z,{children:[t&&e(A,{error:r,children:t}),e(i,{display:"flex",alignItems:"center",children:e(W,{value:h,onChange:c,variant:"outlined",margin:"dense",fullWidth:!0,onKeyDown:u,placeholder:o,InputProps:{endAdornment:m},error:r})})]}),H=({values:h,addValue:c,deleteValue:u})=>{const[o,m]=M("");return v(i,{width:"100%",children:[e(i,{marginTop:1,marginBottom:1,display:"flex",gridGap:1,flexWrap:"wrap",children:h.map(r=>e(E,{label:r,size:"small",onDelete:()=>u(r),style:{marginBottom:4}},r))}),e(D,{value:o,onChange:r=>m(r.currentTarget.value),onKeyDown:r=>{r.key==="Enter"&&(c(o),m(""))},placeholder:"Type a value and press enter to add to value list.",endAdornment:e(i,{display:"flex",alignItems:"center",children:e(B,{onClick:()=>c(o),style:{padding:0},size:"small",variant:"text",disabled:!o?.length,children:"Add"})})})]})},P=({title:h,open:c,handleClose:u,values:o,onSave:m,validateKey:r})=>{const[t,d]=w([{key:"",value:[]}]);j(()=>{o?.length>0?d(o):d([{key:"",value:[]}])},[o]);const[y,g]=w({}),x=f(({key:a,value:l,idx:n})=>{d(p=>{const s=p[n];s.key=a===void 0?s.key:a,s.value=l===void 0?s.value:l,a&&y[n]&&g(k=>{k[n]=""})})},[y,g,d]),I=f(a=>{d(l=>{l.splice(a,1),l.length===0&&l.push({key:"",value:[]})})},[d]),b=f(a=>{d(l=>{l.splice(a+1,0,{key:"",value:[]})})},[d]),K=f(()=>{let a=!1;if(r){const n=t.map(s=>s.key);let p=0;g(s=>{for(const k of n){const{errorMessage:C}=r(k);C&&(a=!0),s[p]=C??"",p++}})}if(a)return;const l=t.filter(n=>n.key&&n.value);m(l),u()},[r,t,m,u,g]),S=L(()=>t.every(a=>!!a.key&&a.value?.length||!a.key&&!a.value?.length),[t]);return e($,{title:h,open:c,handleClose:u,fullScreen:!1,children:v(i,{marginLeft:1,minWidth:640,children:[t.map((a,l)=>v(i,{children:[v(i,{display:"flex",alignItems:"flex-end",gridGap:12,marginBottom:2,children:[e(i,{flexGrow:1,children:e(D,{value:a.key,onChange:n=>x({key:n.target.value,idx:l}),placeholder:"Key",error:!!y[l],helperText:y[l]})}),e(i,{width:480,children:e(H,{values:a.value,addValue:n=>{x({idx:l,value:[...a.value,n]})},deleteValue:n=>{x({idx:l,value:a.value.filter(p=>p!==n)})}})}),e(i,{marginBottom:.75,children:e(T,{"aria-label":`remove index ${l} key value pair`,size:"small",onClick:()=>b(l),children:e(F,{})})}),e(i,{marginBottom:.75,children:e(T,{"aria-label":`remove index ${l} key value pair`,size:"small",onClick:()=>I(l),children:e(G,{})})})]}),e(V,{})]},l)),e(i,{display:"flex",paddingTop:2,marginTop:1,children:e(B,{variant:"contained",size:"medium",color:"primary",onClick:K,disabled:!S,children:"Save"})})]})})};export{P as KeyValueInputDialog};
|
|
2
2
|
//# sourceMappingURL=KeyValueInputDialog.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as
|
|
1
|
+
import{jsxs as a,jsx as e,Fragment as d}from"react/jsx-runtime";import{createElement as w}from"react";import{parseEntityRef as R}from"@backstage/catalog-model";import{useApi as N,configApiRef as B}from"@backstage/core-plugin-api";import{EntityDisplayName as f}from"@backstage/plugin-catalog-react";import{makeStyles as j,Box as m,Typography as y,Button as u,Grid as r,TextField as z,Checkbox as P,Chip as W}from"@material-ui/core";import{Autocomplete as D}from"@material-ui/lab";import{combineEntityFilterQueries as G,getGroupFilterFromConfig as I}from"@spotify/backstage-plugin-soundcheck-common";import{EntitiesAutocompletePicker as Q}from"../EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js";import{EntityAutocompletePicker as p}from"../Filter/EntityAutocompletePicker.esm.js";import{FormFieldLabel as X}from"../FormFieldLabel/FormFieldLabel.esm.js";const b=(i,{selected:l})=>a(d,{children:[e(P,{value:i,checked:l,color:"primary"}),e(f,{entityRef:typeof i=="string"?i:i.value})]}),C=(i,l)=>e(d,{children:i.map((n,s)=>{const o=typeof n=="string"?n:n.value;return w(W,{...l({index:s}),key:o,label:e(f,{entityRef:o}),size:"small"})})}),_=i=>{try{return R(i).kind.toLowerCase()==="system"}catch{return!1}},$=j(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)},entityFilterLabel:{fontWeight:"bold",marginTop:i.spacing(2)},additionalFilters:{marginTop:i.spacing(2)}})),q=({trackFilter:i,stagedTypes:l,stagedLifecycles:n,stagedOwners:s,stagedSystems:o,stagedCertificationStatus:F,onTypesChange:x,onLifecyclesChange:v,onOwnersChange:k,onSystemsChange:T,onCertificationStatusChange:h,onApplyFilters:S,onClearFilters:A,hasFilterChanges:L,children:g})=>{const c=$(),E=N(B);return a("div",{className:c.sidebar,children:[a(m,{display:"flex",alignItems:"center",justifyContent:"space-between",mb:1,children:[e(y,{variant:"subtitle2",children:"Filters"}),(l.length>0||n.length>0||s.length>0||o.length>0)&&e(u,{size:"small",onClick:A,children:"Clear All"})]}),a(r,{container:!0,spacing:1,children:[e(r,{item:!0,xs:12,children:e(p,{facet:"spec.type",label:"Type",values:l,onChange:t=>x(t??[]),filter:i})}),e(r,{item:!0,xs:12,children:e(p,{facet:"spec.lifecycle",label:"Lifecycle",values:n,onChange:t=>v(t??[]),filter:i})}),e(r,{item:!0,xs:12,children:e(Q,{label:"Owner",values:s,onChange:t=>k(t??[]),filter:G({kind:["group"]},I(E)),renderOption:b,renderTags:C})}),e(r,{item:!0,xs:12,children:e(p,{facet:"relations.partOf",label:"System",values:o,onChange:t=>T(t??[]),filter:i,renderOption:b,renderTags:C,facetFilter:_})}),h&&a(d,{children:[e(r,{item:!0,xs:12,children:e(y,{variant:"subtitle2",className:c.entityFilterLabel,children:"Entity Table Filters"})}),e(r,{item:!0,xs:12,children:a(m,{padding:0,marginBottom:1,children:[e(X,{title:"Status"}),e(D,{value:F,renderInput:t=>e(z,{...t,variant:"outlined"}),onChange:(t,O)=>h(O??""),options:["Passed","Failed","Not Reported"]})]})})]})]}),g&&e("div",{className:c.additionalFilters,children:g}),e(m,{mt:2,children:e(u,{variant:"contained",color:"primary",size:"small",fullWidth:!0,onClick:S,disabled:!L,children:"Apply Filters"})})]})};export{q as FilterSidebar};
|
|
2
2
|
//# sourceMappingURL=FilterSidebar.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as
|
|
1
|
+
import{jsxs as c,jsx as e}from"react/jsx-runtime";import{makeStyles as C,Box as a,TextField as S,FormControlLabel as b,Checkbox as g,Typography as k}from"@material-ui/core";import x from"@material-ui/icons/CheckBox";import L from"@material-ui/icons/CheckBoxOutlineBlank";import I from"@material-ui/icons/ExpandMore";import{Autocomplete as A}from"@material-ui/lab";import{useState as E,useEffect as F,useCallback as m}from"react";import{CheckIcon as O}from"../CheckIcon/CheckIcon.esm.js";import{CheckState as r}from"../CheckPage/utils.esm.js";import{FormFieldLabel as P}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as T}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const y=[r.PASSED,r.FAILED,r.WARNING,r.EXEMPT,r.NOT_APPLICABLE,r.ERROR],z=C({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),p=l=>l.toLowerCase().split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" "),N=(l,{selected:t})=>e(b,{onClick:o=>o.preventDefault(),control:e(g,{icon:e(L,{fontSize:"small"}),checkedIcon:e(x,{fontSize:"small"}),checked:t}),label:c(a,{display:"flex",alignItems:"center",children:[e(O,{result:l}),e(a,{mr:1}),e(k,{children:p(l)})]})}),R=({states:l,stagedStates:t,onStagedStatesChange:o})=>{const i=z(),[d,n]=E(!1);F(()=>{o(l)},[l,o]);const f=m((s,h)=>{o(h)},[o]),u=m(()=>{o(t?.length?t:[])},[t,o]);return c(a,{pb:1,pt:1,className:i.container,children:[e(P,{title:"State",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(A,{open:d,onOpen:()=>n(!0),onClose:()=>n(!1),className:i.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":"State",options:y,value:t,getOptionLabel:p,onChange:f,onBlur:u,ListboxComponent:T,renderOption:N,size:"small",popupIcon:e(I,{"data-testid":"selected-facets-expand"}),renderInput:s=>e(S,{...s,variant:"outlined"})})]})};export{R as StateFilter};
|
|
2
2
|
//# sourceMappingURL=StateFilter.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{isEqual as
|
|
1
|
+
import{isEqual as g}from"lodash";import{useMemo as y,useCallback as F,useState as u,useEffect as O}from"react";import{useSearchParams as P}from"react-router-dom";const v=()=>{const[t,S]=P(),a=y(()=>t.getAll("owners"),[t]),l=y(()=>t.getAll("lifecycles"),[t]),c=y(()=>t.getAll("types"),[t]),r=y(()=>t.getAll("systems"),[t]),i=y(()=>t.getAll("certificationStatuses"),[t]),m=F(()=>a.map(e=>({label:e,value:e})),[a]),[n,h]=u(l),[o,w]=u(m()),[d,E]=u(c),[f,A]=u(r),[p,C]=u(i);O(()=>{w(m()),h(l??[]),E(c??[]),A(r??[]),C(i??[])},[a,l,c,r,m,i]);const b=y(()=>{const e={owners:!g(o,a??[]),lifecycles:!g(n,l??[]),types:!g(d,c??[]),systems:!g(f,r??[]),certificationStatus:!g(p,i??[])};return Object.values(e).some(Boolean)},[o,a,n,l,d,c,f,r,p,i]),L=F(()=>{const e=new URLSearchParams(t);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),e.delete("certificationStatuses"),n.length>0&&n.forEach(s=>e.append("lifecycles",s)),o.length>0&&o.forEach(({value:s})=>e.append("owners",s)),d.length>0&&d.forEach(s=>e.append("types",s)),f.length>0&&f.forEach(s=>e.append("systems",s)),p.length>0&&p.forEach(s=>e.append("certificationStatuses",s)),S(e)},[t,n,o,d,f,p,S]);return{handleClearFilters:F(()=>{h([]),w([]),E([]),A([]),C([]);const e=new URLSearchParams(t);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),e.delete("certificationStatuses"),S(e)},[t,S]),handleApplyFilters:L,hasFilterChanges:b,stagedTypes:d,stagedLifecycles:n,stagedSystems:f,stagedOwners:o,stagedCertificationStatuses:p,setStagedTypes:E,setStagedLifecycles:h,setStagedOwners:w,setStagedSystems:A,setStagedCertificationStatuses:C,owners:a,lifecycles:l,types:c,systems:r,certificationStatuses:i}};export{v as useTrackFilterSidebar};
|
|
2
2
|
//# sourceMappingURL=useTrackFilterSidebar.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const
|
|
1
|
+
import{TrackCertificationState as e}from"../../graphql/generated/index.esm.js";const a=d=>{const{lifecycles:t,owners:o,types:i,systems:s}=d,r=t?.length?{"spec.lifecycle":t}:void 0,l=o?.length?{"relations.ownedBy":o}:void 0,n=i?.length?{"spec.type":i}:void 0,c=s?.length?{"relations.partOf":s}:void 0;if(r||l||n||c)return{...r,...l,...n,...c}},p={Passed:e.Passed,Failed:e.Failed,"Not Reported":e.NotReported};export{p as CERTIFICATION_STATUS_MAP,a as toFilter};
|
|
2
2
|
//# sourceMappingURL=util.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as s}from"react/jsx-runtime";import{makeStyles as
|
|
1
|
+
import{jsx as s}from"react/jsx-runtime";import{makeStyles as F,TextField as W}from"@material-ui/core";import{Autocomplete as w}from"@material-ui/lab";import{Controller as A}from"react-hook-form";import{ListboxVirtualized as M}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const g=F(o=>({clearIndicator:{marginRight:o.spacing(1)},helperText:{marginLeft:0},noMargin:{margin:0}})),N=({name:o,rules:f,label:h,control:b,options:d,filterOptions:x,getOptionLabel:C,getOptionValue:r,getOptionSelected:S,onChange:p,disabled:v,placeholder:O,freeSolo:T=!0,width:m,helperText:y,disableClearable:I,fullWidth:c})=>{const n=g();return s(A,{name:o,control:b,rules:f,render:({field:a,fieldState:i})=>{const L=d.find(({value:l})=>l===a.value)||null;return s(w,{...a,value:L,freeSolo:T,autoSelect:!0,"data-testid":`${o}-autocomplete`,style:m?{width:m}:{minWidth:c?void 0:250},disabled:v,options:d,getOptionLabel:C,getOptionSelected:S,classes:{clearIndicator:n.clearIndicator},disableClearable:I,fullWidth:c,filterOptions:x,onChange:(l,e)=>{let t=null;e===null?t=null:typeof e=="string"?t=e:t=e.value;const u=r?r(t):t;p?.(u),a.onChange(u)},onInputChange:(l,e)=>{const t=r?r(e):e;p?.(t)},renderInput:l=>s(W,{...l,variant:"outlined",label:h,error:i.invalid,placeholder:O,FormHelperTextProps:{className:n.helperText},margin:"dense",className:n.noMargin,helperText:y??(i.error?i.error.message:null)}),ListboxComponent:M})}})};export{N as FormControlledAutocomplete,g as useStyles};
|
|
2
2
|
//# sourceMappingURL=FormControlledAutocomplete.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const l=i=>({getOptionLabel:e=>typeof e=="string"?e:e?.label??"",getOptionSelected:(e,t)=>typeof e=="string"||typeof t=="string"?e===t:e.value===t.value,filterOptions:(e,t)=>{const s=t.inputValue.toLowerCase();return e.filter(o=>typeof o=="string"?o.toLowerCase().includes(s):o.label.toLowerCase().includes(s)||o.value.toLowerCase().includes(s)||o.description?.toLowerCase().includes(s))},options:i});export{l as useLabelValueOptions};
|
|
2
|
+
//# sourceMappingURL=useLabelValueOptions.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as
|
|
1
|
+
import{jsxs as m,Fragment as d,jsx as t}from"react/jsx-runtime";import{Button as G}from"@backstage/ui";import{RiFilter3Line as f}from"@remixicon/react";import{useState as l,useCallback as n}from"react";import{GroupHierarchySelectorDialog as y}from"./GroupHierarchySelectorDialog.esm.js";import{usePreviousSelectedGroups as S}from"./usePreviousSelectedGroups.esm.js";const h=({currentSelectedGroup:r,applyGroup:p})=>{const[u,e]=l(!1),[o,i]=l(""),{groupEntityRefs:c}=S(),s=n(()=>{r&&i(r),e(!0)},[r]),a=n(()=>{p(o),e(!1)},[p,o]);return m(d,{children:[t(G,{variant:"secondary",size:"small",iconStart:t(f,{}),onClick:s,children:"Group"}),t(y,{open:u,handleClose:()=>e(!1),handleApply:a,previousGroupEntityRefs:c,selectedGroup:o,setSelectedGroup:i})]})};export{h as GroupHierarchySelector};
|
|
2
2
|
//# sourceMappingURL=GroupHierarchySelector.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as d,Fragment as re}from"react/jsx-runtime";import{useApi as O,useRouteRef as ae,featureFlagsApiRef as Re,configApiRef as Te}from"@backstage/core-plugin-api";import{entityPresentationApiRef as we}from"@backstage/plugin-catalog-react";import{useTheme as ze,Button as Ie,Box as a,Select as oe,MenuItem as v,CircularProgress as Le,Typography as le,Tabs as Pe,Tab as ce}from"@material-ui/core";import{makeStyles as Be}from"@material-ui/core/styles";import De from"@material-ui/icons/ViewList";import{useState as w,useMemo as D,useCallback as W,useEffect as z,useRef as se}from"react";import{useSearchParams as We,useNavigate as He}from"react-router-dom";import $e from"react-use/lib/useLocalStorage";import"@backstage/catalog-model";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{useGetAllTracks as Ae}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useGroupOptions as Ee}from"../../hooks/groups/useGroupOptions.esm.js";import{useHierarchicalTrackStatus as Ge}from"../../hooks/heirarchy/useHierarchicalTrackStatus.esm.js";import{useGroupHierarchy as Ue}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useLCPReporting as je}from"../../hooks/useLCPReporting.esm.js";import{trackDetailsRouteRef as Fe,techInsightsPageRouteRef as Ve}from"../../routes.esm.js";import{getColorInterpolators as Me}from"../../utils/colors.esm.js";import{EmptyState as Oe}from"../EmptyState/EmptyState.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Ze}from"../SoundcheckHeader/useHeader.esm.js";import{TechInsightsGroupSelector as qe}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{TrackEntitiesTable as Je}from"../TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js";import{TrackSelection as Ke}from"../TrackSelection/TrackSelection.esm.js";import{ColorLegend as Qe}from"./ColorLegend.esm.js";import{HierarchyTable as Xe}from"./HierarchyTable.esm.js";import{LowestPerformingTeams as Ye}from"./LowestPerformingTeams.esm.js";import{SelectedNodeSidebar as _e}from"./SelectedNodeSidebar.esm.js";import et from"./TopPerformingTeams.esm.js";import{NivoCirclePacking as de}from"./visualizations/NivoCirclePacking.esm.js";import"./visualizations/NivoHeatmap.esm.js";import{NivoIcicle as tt}from"./visualizations/NivoIcicle.esm.js";import{NivoSunburst as it}from"./visualizations/NivoSunburst.esm.js";import{NivoTreemap as nt}from"./visualizations/NivoTreemap.esm.js";import{VisualizationBreadcrumb as rt}from"./visualizations/VisualizationBreadcrumb.esm.js";import{hierarchyToNivo as me}from"./visualizations/hierarchyToNivo.esm.js";const ue=Be(i=>({root:{display:"flex",flexDirection:"column",height:"100%",padding:i.spacing(2,4)},mainContent:{flex:1,display:"flex",flexDirection:"column",minHeight:0},controlsContainer:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:i.spacing(2)},leftControls:{display:"flex",gap:i.spacing(1.5),alignItems:"center"},rightControls:{display:"flex",gap:i.spacing(2),alignItems:"center"},trackSelect:{minWidth:200},visualizationSelect:{minWidth:120},colorSchemeSelect:{minWidth:80},visualizationContainer:{flex:1,display:"flex",flexDirection:"column",gap:i.spacing(.5),width:"100%"},visualizationHeader:{display:"flex",justifyContent:"flex-end",alignItems:"center",marginBottom:i.spacing(2)},visualizationBox:{flex:1,minHeight:500},visualizationWrapper:{display:"flex",flexDirection:"row",height:"calc(100% - 56px)"},colorLegendContainer:{marginLeft:i.spacing(2),display:"flex",alignItems:"center"},colorLegendWrapper:{width:300},visualizationContent:{flex:1},loadingContainer:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100%",minHeight:500,backgroundColor:i.palette.background.default,borderRadius:i.shape.borderRadius},loadingSpinner:{marginBottom:i.spacing(2)},loadingText:{color:i.palette.text.secondary,fontSize:"1.1rem",fontWeight:500,textAlign:"center"},loadingSubtext:{color:i.palette.text.secondary,fontSize:"0.875rem",opacity:.8,textAlign:"center",marginTop:i.spacing(1)},summaryContainer:{display:"flex",flexDirection:"row",width:"100%",minHeight:300,padding:24},summaryBox:{flex:1,minWidth:0,display:"flex",flexDirection:"column"},summaryBoxLeft:{marginRight:i.spacing(1)},summaryBoxRight:{marginLeft:i.spacing(1)},entitiesContainer:{padding:24},tabsContainer:{width:"100%",marginTop:8},layoutContainer:{display:"flex",height:"100%"},mainLayout:{flex:3,display:"flex",flexDirection:"column",minWidth:0},mainLayoutTable:{flex:1,display:"flex",flexDirection:"column",minWidth:0},sidebarCollapsed:{width:0},sidebarTransition:{transition:"width 0.25s",height:"100%"},sidebarContainer:{height:"100%",marginLeft:24,borderLeft:`1px solid ${i.palette.divider}`,paddingLeft:24},breadcrumbContainer:{flex:1,marginRight:16},input:{backgroundColor:i.palette.background.paper}}));function he({interpolator:i,width:b=100,height:p=16,steps:o=40,style:l={}}){const g=`linear-gradient(to right, ${Array.from({length:o},(c,I)=>{const r=I/(o-1);return i(r)}).join(",")})`;return t(a,{style:{width:b,height:p,background:g,borderRadius:4,...l}})}function pe(i){const{children:b,value:p,index:o,...l}=i,g=ue();return t("div",{role:"tabpanel",hidden:p!==o,id:`tabpanel-${o}`,"aria-labelledby":`tab-${o}`,className:g.mainContent,...l,children:p===o&&b})}const at=()=>{const i=ue(),b=ze(),p=O(we),[o,l]=We(),g=o.get("track")||"",[c,I]=w(g),r=o.get("group"),H=o.get("node"),[Z,$]=w(null),[A,ge]=w(0),E=He(),fe=ae(Fe),q=ae(Ve),[ye,x]=w(null),[u,k]=w(null),J=O(Re),K=O(Te);je({routeName:"soundcheck-tech-insights-track",additionalAttributes:{trackId:c,group:r||"",visualization:o.get("visualization")||"table"}});const xe=D(()=>t(Ie,{variant:"contained",color:"primary",startIcon:t(De,{}),onClick:()=>{E(q())},children:"All Tracks"}),[q,E]);Ze({title:"Tech Insights",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tech-insights",sectionRight:xe});const{data:Ce}=Ae({}),s=Ce?.edges.find(e=>e.node.id===c)?.node,{data:S,isLoading:Q}=Ue(r||void 0,{enabled:!!r&&!!c&&!!s,ownedEntitiesFilter:s?.filter??void 0}),{data:f}=Ge({trackId:c,groupRef:r||"",skip:!c||!r}),ve=D(()=>s?.levels?s.levels.flatMap(e=>e.checks.map(n=>n.id)):[],[s]),C=o.get("visualization")||"table",X=o.get("colors")||"default",G=W((e,n)=>{if(e.entityRef===n)return e;if(e.children)for(const m of e.children){const ne=G(m,n);if(ne)return ne}return null},[]);z(()=>{if(H&&S&&r&&f&&s){const e=S[r];if(e){const n=me(e,f||null,()=>"#ccc",p,void 0);if(n){const m=G(n,H);m&&(k(m),x(m))}}}},[H,S,r,f,s,G,p]);const U=W(e=>{k(e),x(e);const n=new URLSearchParams(o.toString());e&&e.entityRef!==r?n.set("node",e.entityRef):n.delete("node"),l(n,{replace:!0})},[o,l,r]),{options:h,isLoading:N}=Ee(),[j,L]=$e("soundcheck.overview.groupRef",null),R=r,F=K.getOptionalString("soundcheck.overview.defaultSelectedGroupType"),P=D(()=>{if(!N&&h.length){if(R||j){const e=R??j;return h.find(n=>n.ref===e)??h[0]}else if(F)return h.find(e=>e.type===F)??h[0];return h[0]}return null},[F,N,h,R,j]);z(()=>{if(!N&&h.length&&!R&&P){const e=new URLSearchParams(o.toString());e.set("group",P.ref),l(e,{replace:!0}),L(P.ref)}},[N,h,R,P,o,l,L]);const Y=W(e=>{I(e);const n=new URLSearchParams(o.toString());n.set("track",e),r&&n.delete("group"),n.delete("node"),l(n),k(null),x(null)},[o,r,l]),_=se(null),T=W(()=>{k(null),x(null),$(null);const e=new URLSearchParams(o.toString());e.delete("node"),l(e,{replace:!0})},[o,l]),V=se(null);z(()=>{V.current&&V.current!==C&&T(),V.current=C},[C,T]),z(()=>{r&&r!==_.current&&T(),_.current=r},[r,T]),z(()=>{c!==g&&I(g)},[g]);const be=e=>{const n=e.target.value;if(n!==null){const m=new URLSearchParams(o.toString());m.set("visualization",n),l(m),$(null)}},ke=e=>{const n=new URLSearchParams(o.toString());n.set("colors",e.target.value),l(n)},Se=(e,n)=>{ge(n)},B=e=>{if(!c)return;const n=fe({trackId:c});E(`${n}?owners=${encodeURIComponent(e)}`)},M=Me(b),ee=M.find(e=>e.value===X)?.interpolator??(e=>"#ccc"),y=e=>ee(e/100),Ne=()=>{if(!r||!c||!s)return null;const e={trackId:c,groupRef:r,track:s,hierarchyData:S,trackStatus:f,getColor:y,onZoomChange:$,onNodeHover:n=>x(n),hoveredNode:ye,selectedNode:u,onNodeSelect:U};switch(C){case"treemap":return t(nt,{...e});case"icicle":return t(tt,{...e});case"sunburst":return t(it,{...e});case"circlepack":return t(de,{...e});case"table":{const n=S?.[r];if(!n)return null;const m=me(n,f||null,y,p,void 0);return t(Xe,{hierarchyData:m??null,getColor:y,selectedNode:u,onNodeSelect:U,trackStatus:f,onTeamClick:B})}default:return t(de,{...e})}},te=(!J.getRegisteredFlags().find(e=>e.name==="soundcheck-enable-tech-insights-visualizations")||J.isActive("soundcheck-enable-tech-insights-visualizations"))&&K.getOptionalBoolean("soundcheck.techInsights.showExperimentalVisualizations"),ie=D(()=>d(re,{children:[t(qe,{onChange:e=>{k(null),x(null),L(e)}}),t(a,{minWidth:320,children:t(Ke,{selectedTrackId:c,selectTrack:Y,selectedGroupRef:r??""})})]}),[Y,r,c,L]);return!(N||Q)&&(!s||!r)?t(a,{className:i.root,children:t(Oe,{title:"No Group or Track Selected",description:"Select a group and track in order to view insights.",action:t(a,{display:"flex",flexDirection:"column",gridGap:12,children:ie})})}):t(a,{className:i.root,children:d(a,{className:i.layoutContainer,children:[t(a,{className:i.mainLayout,children:d(a,{className:i.mainContent,children:[d(a,{className:i.controlsContainer,children:[t(a,{className:i.leftControls,children:ie}),te&&d(a,{className:i.rightControls,children:[t(a,{className:i.visualizationSelect,children:d(oe,{className:i.input,value:C,onChange:be,displayEmpty:!0,fullWidth:!0,"aria-label":"visualization select",margin:"dense",placeholder:"Visualization",variant:"outlined",children:[t(v,{value:"circlepack",children:"Circle Pack"}),t(v,{value:"icicle",children:"Icicle"}),t(v,{value:"sunburst",children:"Sunburst"}),t(v,{value:"treemap",children:"Treemap"}),t(v,{value:"table",children:"Table"})]})}),t(a,{className:i.colorSchemeSelect,children:t(oe,{className:i.input,value:X,fullWidth:!0,"aria-label":"color schema",onChange:ke,margin:"dense",placeholder:"Color Scheme",variant:"outlined",renderValue:e=>{const n=M.find(m=>m.value===e)?.interpolator;return t(a,{display:"flex",alignItems:"center",pr:3,children:typeof n=="function"&&t(he,{interpolator:n,width:90,height:20})})},children:M.map(e=>t(v,{value:e.value,children:t(a,{display:"flex",alignItems:"center",children:e.interpolator&&t(he,{interpolator:e.interpolator,width:90,height:20})})},e.value))})})]})]}),c&&r&&d(re,{children:[d(a,{className:i.visualizationContainer,minHeight:C!=="table"?400:void 0,children:[d(a,{mb:.5,display:"flex",alignItems:"center",children:[t(a,{className:i.breadcrumbContainer,children:t(rt,{node:u,onNodeClick:e=>{U(e)}})}),te&&t(a,{className:i.colorLegendWrapper,children:t(Qe,{interpolator:ee,orientation:"horizontal",height:24,width:"100%",markerValue:u?u.passPercentage:void 0})})]}),t(a,{className:i.visualizationContent,children:Q?d(a,{className:i.loadingContainer,children:[t(Le,{className:i.loadingSpinner,size:48}),t(le,{className:i.loadingText,children:"Loading organization hierarchy..."}),t(le,{className:i.loadingSubtext,children:"This may take a few moments while we gather data about your organization."})]}):Ne()})]}),d(a,{className:i.tabsContainer,children:[d(Pe,{value:A,onChange:Se,indicatorColor:"primary",textColor:"primary",children:[t(ce,{label:"Summary"}),t(ce,{label:"Entities"})]}),t(pe,{value:A,index:0,children:d(a,{className:i.summaryContainer,children:[t(a,{className:`${i.summaryBox} ${i.summaryBoxLeft}`,children:t(Ye,{trackStatus:f||null,getColor:y,onTeamClick:B})}),t(a,{className:`${i.summaryBox} ${i.summaryBoxRight}`,children:t(et,{trackStatus:f||null,getColor:y,onTeamClick:B})})]})}),t(pe,{value:A,index:1,children:t(a,{className:i.entitiesContainer,children:s&&t(Je,{track:s,initialPageSize:10,owners:u&&u.entityRef!==r?[u.entityRef]:Z?[Z]:[r],getColor:y})})})]})]})]})}),t(a,{className:i.sidebarTransition,width:u?360:0,children:t(a,{className:i.sidebarContainer,children:u&&t(_e,{node:u,clearSelectedNode:T,checkIds:ve,track:s,getColor:y,onTeamClick:B})})})]})})};export{at as HierarchicalTechInsightsPage};
|
|
1
|
+
import{jsx as t,jsxs as d,Fragment as se}from"react/jsx-runtime";import{useApi as q,useRouteRef as de,featureFlagsApiRef as Be,configApiRef as Pe}from"@backstage/core-plugin-api";import{entityPresentationApiRef as De}from"@backstage/plugin-catalog-react";import{useTheme as He,Button as We,Box as o,Select as me,MenuItem as S,CircularProgress as Ae,Typography as ue,Tabs as $e,Tab as pe}from"@material-ui/core";import{makeStyles as Ee}from"@material-ui/core/styles";import Ge from"@material-ui/icons/ViewList";import{useMemo as L,useState as I,useCallback as H,useEffect as N,useRef as he}from"react";import{useSearchParams as Ue,useNavigate as je}from"react-router-dom";import Oe from"react-use/lib/useLocalStorage";import"@backstage/catalog-model";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{useGetAllTracks as Ve}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useGroupOptions as Fe}from"../../hooks/groups/useGroupOptions.esm.js";import{useHierarchicalTrackStatus as Me}from"../../hooks/heirarchy/useHierarchicalTrackStatus.esm.js";import{useGroupHierarchy as Ze}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useLCPReporting as qe}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Ke}from"../../hooks/useLoadTimeReporting.esm.js";import{trackDetailsRouteRef as Qe,techInsightsPageRouteRef as Xe}from"../../routes.esm.js";import{getColorInterpolators as Ye}from"../../utils/colors.esm.js";import{getEntitiesBucket as _e,getTracksBucket as Je}from"../../utils/helpers.esm.js";import{EmptyState as et}from"../EmptyState/EmptyState.esm.js";import"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@backstage/ui";import"../GroupHierarchySelector/GroupHierarchySelectorDialog.esm.js";import"@remixicon/react";import{getAllOwnedEntityCount as tt}from"../GroupHierarchySelector/getAllOwnedEntityCount.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as it}from"../SoundcheckHeader/useHeader.esm.js";import{TechInsightsGroupSelector as rt}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{TrackEntitiesTable as nt}from"../TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js";import{TrackSelection as at}from"../TrackSelection/TrackSelection.esm.js";import{ColorLegend as ot}from"./ColorLegend.esm.js";import{HierarchyTable as lt}from"./HierarchyTable.esm.js";import{LowestPerformingTeams as ct}from"./LowestPerformingTeams.esm.js";import{SelectedNodeSidebar as st}from"./SelectedNodeSidebar.esm.js";import dt from"./TopPerformingTeams.esm.js";import{NivoCirclePacking as ge}from"./visualizations/NivoCirclePacking.esm.js";import"./visualizations/NivoHeatmap.esm.js";import{NivoIcicle as mt}from"./visualizations/NivoIcicle.esm.js";import{NivoSunburst as ut}from"./visualizations/NivoSunburst.esm.js";import{NivoTreemap as pt}from"./visualizations/NivoTreemap.esm.js";import{VisualizationBreadcrumb as ht}from"./visualizations/VisualizationBreadcrumb.esm.js";import{hierarchyToNivo as fe}from"./visualizations/hierarchyToNivo.esm.js";const ye=Ee(n=>({root:{display:"flex",flexDirection:"column",height:"100%",padding:n.spacing(2,4)},mainContent:{flex:1,display:"flex",flexDirection:"column",minHeight:0},controlsContainer:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:n.spacing(2)},leftControls:{display:"flex",gap:n.spacing(1.5),alignItems:"center"},rightControls:{display:"flex",gap:n.spacing(2),alignItems:"center"},trackSelect:{minWidth:200},visualizationSelect:{minWidth:120},colorSchemeSelect:{minWidth:80},visualizationContainer:{flex:1,display:"flex",flexDirection:"column",gap:n.spacing(.5),width:"100%"},visualizationHeader:{display:"flex",justifyContent:"flex-end",alignItems:"center",marginBottom:n.spacing(2)},visualizationBox:{flex:1,minHeight:500},visualizationWrapper:{display:"flex",flexDirection:"row",height:"calc(100% - 56px)"},colorLegendContainer:{marginLeft:n.spacing(2),display:"flex",alignItems:"center"},colorLegendWrapper:{width:300},visualizationContent:{flex:1},loadingContainer:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100%",minHeight:500,backgroundColor:n.palette.background.default,borderRadius:n.shape.borderRadius},loadingSpinner:{marginBottom:n.spacing(2)},loadingText:{color:n.palette.text.secondary,fontSize:"1.1rem",fontWeight:500,textAlign:"center"},loadingSubtext:{color:n.palette.text.secondary,fontSize:"0.875rem",opacity:.8,textAlign:"center",marginTop:n.spacing(1)},summaryContainer:{display:"flex",flexDirection:"row",width:"100%",minHeight:300,padding:24},summaryBox:{flex:1,minWidth:0,display:"flex",flexDirection:"column"},summaryBoxLeft:{marginRight:n.spacing(1)},summaryBoxRight:{marginLeft:n.spacing(1)},entitiesContainer:{padding:24},tabsContainer:{width:"100%",marginTop:8},layoutContainer:{display:"flex",height:"100%"},mainLayout:{flex:3,display:"flex",flexDirection:"column",minWidth:0},mainLayoutTable:{flex:1,display:"flex",flexDirection:"column",minWidth:0},sidebarCollapsed:{width:0},sidebarTransition:{transition:"width 0.25s",height:"100%"},sidebarContainer:{height:"100%",marginLeft:24,borderLeft:`1px solid ${n.palette.divider}`,paddingLeft:24},breadcrumbContainer:{flex:1,marginRight:16},input:{backgroundColor:n.palette.background.paper}}));function xe({interpolator:n,width:l=100,height:u=16,steps:r=40,style:C={}}){const k=`linear-gradient(to right, ${Array.from({length:r},(K,a)=>{const W=a/(r-1);return n(W)}).join(",")})`;return t(o,{style:{width:l,height:u,background:k,borderRadius:4,...C}})}function Ce(n){const{children:l,value:u,index:r,...C}=n,k=ye();return t("div",{role:"tabpanel",hidden:u!==r,id:`tabpanel-${r}`,"aria-labelledby":`tab-${r}`,className:k.mainContent,...C,children:u===r&&l})}const gt=()=>{const[n,l]=Ue(),u=n.get("track")||"",r=n.get("group"),C=L(()=>({routeName:"soundcheck-tech-insights-explorer",additionalAttributes:{trackId:u||"",group:r||""}}),[u,r]),{reportContentLoaded:k}=Ke(C),{reporter:K}=qe(C),a=ye(),W=He(),A=q(De),[c,Q]=I(u),$=n.get("node"),[X,E]=I(null),[G,ke]=I(0),U=je(),be=de(Qe),Y=de(Xe),[ve,b]=I(null),[p,T]=I(null),_=q(Be),J=q(Pe),Se=L(()=>t(We,{variant:"contained",color:"primary",startIcon:t(Ge,{}),onClick:()=>{U(Y())},children:"All Tracks"}),[Y,U]);it({title:"Tech Insights",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tech-insights",sectionRight:Se});const{data:Ne}=Ve({}),s=Ne?.edges.find(e=>e.node.id===c)?.node,{data:f,isLoading:z}=Ze(r||void 0,{enabled:!!r&&!!c&&!!s,ownedEntitiesFilter:s?.filter??void 0}),{data:g,isLoading:ee}=Me({trackId:c,groupRef:r||"",skip:!c||!r}),Te=L(()=>s?.levels?s.levels.flatMap(e=>e.checks.map(i=>i.id)):[],[s]),v=n.get("visualization")||"table",te=n.get("colors")||"default",j=H((e,i)=>{if(e.entityRef===i)return e;if(e.children)for(const m of e.children){const ce=j(m,i);if(ce)return ce}return null},[]);N(()=>{if($&&f&&r&&g&&s){const e=f[r];if(e){const i=fe(e,g||null,()=>"#ccc",A,void 0);if(i){const m=j(i,$);m&&(T(m),b(m))}}}},[$,f,r,g,s,j,A]);const O=H(e=>{T(e),b(e);const i=new URLSearchParams(n.toString());e&&e.entityRef!==r?i.set("node",e.entityRef):i.delete("node"),l(i,{replace:!0})},[n,l,r]),{options:h,isLoading:y}=Fe(),[V,B]=Oe("soundcheck.overview.groupRef",null),R=r,F=J.getOptionalString("soundcheck.overview.defaultSelectedGroupType"),P=L(()=>{if(!y&&h.length){if(R||V){const e=R??V;return h.find(i=>i.ref===e)??h[0]}else if(F)return h.find(e=>e.type===F)??h[0];return h[0]}return null},[F,y,h,R,V]);N(()=>{if(!y&&h.length&&!R&&P){const e=new URLSearchParams(n.toString());e.set("group",P.ref),l(e,{replace:!0}),B(P.ref)}},[y,h,R,P,n,l,B]);const ie=H(e=>{Q(e);const i=new URLSearchParams(n.toString());i.set("track",e),r&&i.delete("group"),i.delete("node"),l(i),T(null),b(null)},[n,r,l]),re=he(null),w=H(()=>{T(null),b(null),E(null);const e=new URLSearchParams(n.toString());e.delete("node"),l(e,{replace:!0})},[n,l]),M=he(null);N(()=>{M.current&&M.current!==v&&w(),M.current=v},[v,w]),N(()=>{r&&r!==re.current&&w(),re.current=r},[r,w]),N(()=>{c!==u&&Q(u)},[u]);const Re=e=>{const i=e.target.value;if(i!==null){const m=new URLSearchParams(n.toString());m.set("visualization",i),l(m),E(null)}},we=e=>{const i=new URLSearchParams(n.toString());i.set("colors",e.target.value),l(i)},Le=(e,i)=>{ke(i)},D=e=>{if(!c)return;const i=be({trackId:c});U(`${i}?owners=${encodeURIComponent(e)}`)},Z=Ye(W),ne=Z.find(e=>e.value===te)?.interpolator??(e=>"#ccc"),x=e=>ne(e/100),Ie=()=>{if(!r||!c||!s)return null;const e={trackId:c,groupRef:r,track:s,hierarchyData:f,trackStatus:g,getColor:x,onZoomChange:E,onNodeHover:i=>b(i),hoveredNode:ve,selectedNode:p,onNodeSelect:O};switch(v){case"treemap":return t(pt,{...e});case"icicle":return t(mt,{...e});case"sunburst":return t(ut,{...e});case"circlepack":return t(ge,{...e});case"table":{const i=f?.[r];if(!i)return null;const m=fe(i,g||null,x,A,void 0);return t(lt,{hierarchyData:m??null,getColor:x,selectedNode:p,onNodeSelect:O,trackStatus:g,onTeamClick:D})}default:return t(ge,{...e})}},ae=(!_.getRegisteredFlags().find(e=>e.name==="soundcheck-enable-tech-insights-visualizations")||_.isActive("soundcheck-enable-tech-insights-visualizations"))&&J.getOptionalBoolean("soundcheck.techInsights.showExperimentalVisualizations"),oe=L(()=>d(se,{children:[t(rt,{onChange:e=>{T(null),b(null),B(e)}}),t(o,{minWidth:320,children:t(at,{selectedTrackId:c,selectTrack:ie,selectedGroupRef:r??""})})]}),[ie,r,c,B]),ze=y||z,le=K?.getLCPValue();return N(()=>{if(!y&&!z&&!ee){const e=r?tt(f?.[r]):0,i=c?1:0;k({lcp:le,numberOfEntities:e,entitiesBucket:_e(e),numberOfTracks:i,tracksBucket:Je(i)})}},[y,z,ee,f,r,c,k,le]),!ze&&(!s||!r)?t(o,{className:a.root,children:t(et,{title:"No Group or Track Selected",description:"Select a group and track in order to view insights.",action:t(o,{display:"flex",flexDirection:"column",gridGap:12,children:oe})})}):t(o,{className:a.root,children:d(o,{className:a.layoutContainer,children:[t(o,{className:a.mainLayout,children:d(o,{className:a.mainContent,children:[d(o,{className:a.controlsContainer,children:[t(o,{className:a.leftControls,children:oe}),ae&&d(o,{className:a.rightControls,children:[t(o,{className:a.visualizationSelect,children:d(me,{className:a.input,value:v,onChange:Re,displayEmpty:!0,fullWidth:!0,"aria-label":"visualization select",margin:"dense",placeholder:"Visualization",variant:"outlined",children:[t(S,{value:"circlepack",children:"Circle Pack"}),t(S,{value:"icicle",children:"Icicle"}),t(S,{value:"sunburst",children:"Sunburst"}),t(S,{value:"treemap",children:"Treemap"}),t(S,{value:"table",children:"Table"})]})}),t(o,{className:a.colorSchemeSelect,children:t(me,{className:a.input,value:te,fullWidth:!0,"aria-label":"color schema",onChange:we,margin:"dense",placeholder:"Color Scheme",variant:"outlined",renderValue:e=>{const i=Z.find(m=>m.value===e)?.interpolator;return t(o,{display:"flex",alignItems:"center",pr:3,children:typeof i=="function"&&t(xe,{interpolator:i,width:90,height:20})})},children:Z.map(e=>t(S,{value:e.value,children:t(o,{display:"flex",alignItems:"center",children:e.interpolator&&t(xe,{interpolator:e.interpolator,width:90,height:20})})},e.value))})})]})]}),c&&r&&d(se,{children:[d(o,{className:a.visualizationContainer,minHeight:v!=="table"?400:void 0,children:[d(o,{mb:.5,display:"flex",alignItems:"center",children:[t(o,{className:a.breadcrumbContainer,children:t(ht,{node:p,onNodeClick:e=>{O(e)}})}),ae&&t(o,{className:a.colorLegendWrapper,children:t(ot,{interpolator:ne,orientation:"horizontal",height:24,width:"100%",markerValue:p?p.passPercentage:void 0})})]}),t(o,{className:a.visualizationContent,children:z?d(o,{className:a.loadingContainer,children:[t(Ae,{className:a.loadingSpinner,size:48}),t(ue,{className:a.loadingText,children:"Loading organization hierarchy..."}),t(ue,{className:a.loadingSubtext,children:"This may take a few moments while we gather data about your organization."})]}):Ie()})]}),d(o,{className:a.tabsContainer,children:[d($e,{value:G,onChange:Le,indicatorColor:"primary",textColor:"primary",children:[t(pe,{label:"Summary"}),t(pe,{label:"Entities"})]}),t(Ce,{value:G,index:0,children:d(o,{className:a.summaryContainer,children:[t(o,{className:`${a.summaryBox} ${a.summaryBoxLeft}`,children:t(ct,{trackStatus:g||null,getColor:x,onTeamClick:D})}),t(o,{className:`${a.summaryBox} ${a.summaryBoxRight}`,children:t(dt,{trackStatus:g||null,getColor:x,onTeamClick:D})})]})}),t(Ce,{value:G,index:1,children:t(o,{className:a.entitiesContainer,children:s&&t(nt,{track:s,initialPageSize:10,owners:p&&p.entityRef!==r?[p.entityRef]:X?[X]:[r],getColor:x})})})]})]})]})}),t(o,{className:a.sidebarTransition,width:p?360:0,children:t(o,{className:a.sidebarContainer,children:p&&t(st,{node:p,clearSelectedNode:w,checkIds:Te,track:s,getColor:x,onTeamClick:D})})})]})})};export{gt as HierarchicalTechInsightsPage};
|
|
2
2
|
//# sourceMappingURL=HierarchicalTechInsightsPage.esm.js.map
|