@spotify/backstage-plugin-soundcheck 0.12.10 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/alpha/package.json +1 -1
- package/dist/components/CampaignDetailsPage/CampaignChecks.esm.js +2 -0
- package/dist/components/CampaignDetailsPage/CampaignDetailsPage.esm.js +2 -0
- package/dist/components/CampaignDetailsPage/CampaignProgress.esm.js +2 -0
- package/dist/components/CampaignDetailsPage/CampaignResultsTable.esm.js +2 -0
- package/dist/components/CampaignForm/CampaignForm.esm.js +2 -0
- package/dist/components/CampaignForm/CampaignFormDescription.esm.js +2 -0
- package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignDetailsStep.esm.js +2 -0
- package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignOwnerField.esm.js +2 -0
- package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignScheduleField.esm.js +2 -0
- package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignSupportChannelField.esm.js +2 -0
- package/dist/components/CampaignForm/Steps/CampaignMilestonesStep.esm.js +2 -0
- package/dist/components/CampaignForm/Steps/CampaignTrackStep.esm.js +2 -0
- package/dist/components/CampaignForm/hooks/useCampaignForm.esm.js +2 -0
- package/dist/components/CampaignForm/hooks/utils.esm.js +2 -0
- package/dist/components/CampaignForm/types/CampaignFormTypes.esm.js +2 -0
- package/dist/components/CampaignForm/utils/validation.esm.js +2 -0
- package/dist/components/CampaignsPage/AddCampaignView.esm.js +2 -0
- package/dist/components/CampaignsPage/CampaignEmptyState.esm.js +2 -0
- package/dist/components/CampaignsPage/CampaignListPage/CampaignListPage.esm.js +2 -0
- package/dist/components/CampaignsPage/CampaignsPage.esm.js +1 -1
- package/dist/components/CampaignsPage/EditCampaignView.esm.js +2 -0
- package/dist/components/CertificationSidebar/Check.esm.js +1 -1
- package/dist/components/CheckForm/CheckForm.esm.js +2 -0
- package/dist/components/CheckForm/CheckFormDescription.esm.js +2 -0
- package/dist/components/CheckForm/FormFields/CheckDescriptionInput/CheckDescriptionInput.esm.js +2 -0
- package/dist/components/CheckForm/FormFields/CheckScheduleSection/ScheduleSection.esm.js +2 -0
- package/dist/components/CheckForm/FormFields/PassFailMessageInput/PassFailMessageInput.esm.js +2 -0
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +2 -0
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +2 -0
- package/dist/components/CheckForm/FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js +2 -0
- package/dist/components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js +2 -0
- package/dist/components/CheckForm/FormFields/RuleInput/useRuleInputHandlers.esm.js +2 -0
- package/dist/components/CheckForm/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js +2 -0
- package/dist/components/CheckForm/Steps/CheckDetailsStep.esm.js +2 -0
- package/dist/components/CheckForm/Steps/CheckRulesStep.esm.js +2 -0
- package/dist/components/CheckForm/types/CheckFormTypes.esm.js +2 -0
- package/dist/components/CheckForm/types/Schedule.esm.js +2 -0
- package/dist/components/CheckForm/useCheckForm.esm.js +2 -0
- package/dist/components/CheckForm/utils/checkFormUtils.esm.js +2 -0
- package/dist/components/CheckForm/utils/validation.esm.js +2 -0
- package/dist/components/CheckPage/CheckDetailsView.esm.js +1 -1
- package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
- package/dist/components/CheckPage/FilterBar/FilterBar.esm.js +1 -1
- package/dist/components/ChecksPage/AddCheckView.esm.js +2 -0
- package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +1 -1
- package/dist/components/ChecksPage/ChecksPage.esm.js +1 -1
- package/dist/components/DroppableInput/DroppableInput.esm.js +1 -1
- package/dist/components/OverviewPage/CampaignBanner/CampaignBanner.esm.js +2 -0
- package/dist/components/OverviewPage/{CampaignRow/useCampaignRowStyles.esm.js → CampaignBanner/useCampaignBannerStyles.esm.js} +2 -2
- package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
- package/dist/components/OverviewPage/OverviewTabs.esm.js +1 -1
- package/dist/components/OverviewTable/Cell/CheckCell.esm.js +2 -0
- package/dist/components/OverviewTable/Cell/CheckNameCell.esm.js +2 -0
- package/dist/components/OverviewTable/Cell/EntityRefCell.esm.js +2 -0
- package/dist/components/OverviewTable/Cell/HighestLevelBadge.esm.js +2 -0
- package/dist/components/OverviewTable/Cell/TrackCheckIndicator.esm.js +2 -0
- package/dist/components/OverviewTable/Cell/TrackLevelHeaderCell.esm.js +2 -0
- package/dist/components/OverviewTable/Cell/TrackTitleCell.esm.js +2 -0
- package/dist/components/OverviewTable/Cell/cellRenderer.esm.js +2 -0
- package/dist/components/OverviewTable/OverviewTable.esm.js +2 -0
- package/dist/components/OverviewTable/OverviewTableContent.esm.js +2 -0
- package/dist/components/OverviewTable/OverviewTableSkeleton.esm.js +2 -0
- package/dist/components/OverviewTable/ResultsTable.esm.js +2 -0
- package/dist/components/OverviewTable/ResultsTableHeader.esm.js +2 -0
- package/dist/components/OverviewTable/ResultsTableRow.esm.js +2 -0
- package/dist/components/OverviewTable/resultsTableUtils.esm.js +2 -0
- package/dist/components/OverviewTable/useWindowDimensions.esm.js +2 -0
- 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/TechHealth/Filters/FilterProvider.esm.js +1 -1
- package/dist/components/TrackPage/FilterBar/FilterBar.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/TrackStatusChip.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/columns.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/utils.esm.js +1 -1
- package/dist/components/TrackPage/utils.esm.js +1 -1
- package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +1 -1
- package/dist/hooks/catalog/useGetEntityFacets.esm.js +1 -1
- package/dist/hooks/facets/useFacetFilters.esm.js +1 -1
- package/dist/utils/export.esm.js +3 -3
- package/package.json +15 -15
- package/dist/components/CampaignsTab/CampaignDetailsPage/CampaignChecks.esm.js +0 -2
- package/dist/components/CampaignsTab/CampaignDetailsPage/CampaignDetailsPage.esm.js +0 -2
- package/dist/components/CampaignsTab/CampaignDetailsPage/CampaignProgress.esm.js +0 -2
- package/dist/components/CampaignsTab/CampaignDetailsPage/CampaignResultsTable.esm.js +0 -2
- package/dist/components/CampaignsTab/CampaignListPage/CampaignListPage.esm.js +0 -2
- package/dist/components/CampaignsTab/MutateCampaignsViews/AddCampaignView.esm.js +0 -2
- package/dist/components/CampaignsTab/MutateCampaignsViews/CampaignForm.esm.js +0 -2
- package/dist/components/CampaignsTab/MutateCampaignsViews/CampaignFormDescription.esm.js +0 -2
- package/dist/components/CampaignsTab/MutateCampaignsViews/EditCampaignView.esm.js +0 -2
- package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignDetailsStep/CampaignDetailsStep.esm.js +0 -2
- package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignDetailsStep/CampaignOwnerField.esm.js +0 -2
- package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignDetailsStep/CampaignScheduleField/CampaignScheduleField.esm.js +0 -2
- package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignDetailsStep/CampaignSupportChannelField.esm.js +0 -2
- package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignMilestonesStep.esm.js +0 -2
- package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignTrackStep.esm.js +0 -2
- package/dist/components/CampaignsTab/MutateCampaignsViews/hooks/useCampaignForm.esm.js +0 -2
- package/dist/components/CampaignsTab/MutateCampaignsViews/hooks/utils.esm.js +0 -2
- package/dist/components/CampaignsTab/MutateCampaignsViews/types/CampaignFormTypes.esm.js +0 -2
- package/dist/components/CampaignsTab/MutateCampaignsViews/utils/validation.esm.js +0 -2
- package/dist/components/ChecksPage/MutateCheckViews/AddCheckView.esm.js +0 -2
- package/dist/components/ChecksPage/MutateCheckViews/CheckForm/CheckForm.esm.js +0 -2
- package/dist/components/ChecksPage/MutateCheckViews/CheckForm/CheckFormDescription.esm.js +0 -2
- package/dist/components/ChecksPage/MutateCheckViews/CheckForm/Steps/CheckDetailsStep.esm.js +0 -2
- package/dist/components/ChecksPage/MutateCheckViews/CheckForm/Steps/CheckRulesStep.esm.js +0 -2
- package/dist/components/ChecksPage/MutateCheckViews/FormFields/CheckDescriptionInput/CheckDescriptionInput.esm.js +0 -2
- package/dist/components/ChecksPage/MutateCheckViews/FormFields/CheckScheduleSection/ScheduleSection.esm.js +0 -2
- package/dist/components/ChecksPage/MutateCheckViews/FormFields/PassFailMessageInput/PassFailMessageInput.esm.js +0 -2
- package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +0 -2
- package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +0 -2
- package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js +0 -2
- package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/RuleInputBox.esm.js +0 -2
- package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/useRuleInputHandlers.esm.js +0 -2
- package/dist/components/ChecksPage/MutateCheckViews/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js +0 -2
- package/dist/components/ChecksPage/MutateCheckViews/hooks/useCheckForm.esm.js +0 -2
- package/dist/components/ChecksPage/MutateCheckViews/types/CheckFormTypes.esm.js +0 -2
- package/dist/components/ChecksPage/MutateCheckViews/types/Schedule.esm.js +0 -2
- package/dist/components/ChecksPage/MutateCheckViews/utils/checkFormUtils.esm.js +0 -2
- package/dist/components/ChecksPage/MutateCheckViews/utils/validation.esm.js +0 -2
- package/dist/components/EmptyState/CampaignEmptyState.esm.js +0 -2
- package/dist/components/OverviewPage/CampaignRow/CampaignRow.esm.js +0 -2
- package/dist/components/OverviewPage/TableContent/TableContent.esm.js +0 -2
- package/dist/components/OverviewPage/TableContent/VirtualTableContent.esm.js +0 -2
- package/dist/components/ResultsTable/CheckCell/CheckCell.esm.js +0 -2
- package/dist/components/ResultsTable/HighestLevelBadge.esm.js +0 -2
- package/dist/components/ResultsTable/ProgramCheckIndicator.esm.js +0 -2
- package/dist/components/ResultsTable/ProgramCheckRow.esm.js +0 -2
- package/dist/components/ResultsTable/ProgramLevelRow.esm.js +0 -2
- package/dist/components/ResultsTable/ProgramTitleRow.esm.js +0 -2
- package/dist/components/ResultsTable/ResultsTableFooter.esm.js +0 -2
- package/dist/components/ResultsTable/skeletons/ResultsTableSkeleton.esm.js +0 -2
- package/dist/components/ResultsTable/virtualized/Cell.esm.js +0 -2
- package/dist/components/ResultsTable/virtualized/Row.esm.js +0 -2
- package/dist/components/ResultsTable/virtualized/VirtualizedResultsTable.esm.js +0 -2
- package/dist/components/ResultsTable/virtualized/virtualizedTableUtils.esm.js +0 -2
- /package/dist/components/{CampaignsTab/CampaignDetailsPage → CampaignDetailsPage}/CampaignDetailRow.esm.js +0 -0
- /package/dist/components/{CampaignsTab/CampaignDetailsPage → CampaignDetailsPage}/CampaignDetails.esm.js +0 -0
- /package/dist/components/{CampaignsTab/CampaignDetailsPage → CampaignDetailsPage}/CampaignMilestones.esm.js +0 -0
- /package/dist/components/{CampaignsTab/MutateCampaignsViews → CampaignForm}/Steps/CampaignDetailsStep/CampaignDescriptionField.esm.js +0 -0
- /package/dist/components/{CampaignsTab/MutateCampaignsViews → CampaignForm}/Steps/CampaignDetailsStep/CampaignNameField.esm.js +0 -0
- /package/dist/components/{CampaignsTab/MutateCampaignsViews/Steps/CampaignDetailsStep/CampaignScheduleField → CampaignForm/Steps/CampaignDetailsStep}/EndDateChips.esm.js +0 -0
- /package/dist/components/{CampaignsTab/MutateCampaignsViews → CampaignForm}/utils/campaignFormUtils.esm.js +0 -0
- /package/dist/components/{CampaignsTab → CampaignsPage}/CampaignListPage/CampaignMetadata.esm.js +0 -0
- /package/dist/components/{CampaignsTab → CampaignsPage}/CampaignListPage/CampaignSummaryCard.esm.js +0 -0
- /package/dist/components/{CampaignsTab → CampaignsPage/CampaignListPage}/CampaignTypes.esm.js +0 -0
- /package/dist/components/{CampaignsTab/skeletons → CampaignsPage/CampaignListPage}/CampaignsOverviewSkeleton.esm.js +0 -0
- /package/dist/components/{CampaignsTab → CampaignsPage}/CampaignListPage/useArchiveConfirmationModal.esm.js +0 -0
- /package/dist/components/{ChecksPage/MutateCheckViews → CheckForm}/FormFields/CheckNameInput/CheckNameInput.esm.js +0 -0
- /package/dist/components/{ChecksPage/MutateCheckViews → CheckForm}/FormFields/RuleInput/AddMenuButton.esm.js +0 -0
- /package/dist/components/{ChecksPage/MutateCheckViews → CheckForm}/FormFields/RuleInput/Conditions/ConditionList.esm.js +0 -0
- /package/dist/components/{ChecksPage/MutateCheckViews → CheckForm}/FormFields/RuleInput/Conditions/ControlledAutocomplete.esm.js +0 -0
- /package/dist/components/{ChecksPage/MutateCheckViews → CheckForm}/FormFields/RuleInput/Conditions/styles.esm.js +0 -0
- /package/dist/components/{ChecksPage/MutateCheckViews → CheckForm}/FormFields/RuleInput/Expressions/ExpressionBox.esm.js +0 -0
- /package/dist/components/{ChecksPage/MutateCheckViews → CheckForm}/types/ExpressionType.esm.js +0 -0
- /package/dist/components/{ChecksPage/MutateCheckViews → CheckForm}/types/Path.esm.js +0 -0
- /package/dist/components/OverviewPage/{CampaignRow → CampaignBanner}/utils.esm.js +0 -0
- /package/dist/components/OverviewPage/{skeletons/OverviewTabsSkeleton.esm.js → OverviewTabsSkeleton.esm.js} +0 -0
- /package/dist/components/{ResultsTable/CheckCell → OverviewTable/Cell}/CheckCellTooltip.esm.js +0 -0
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{zodResolver as h}from"@hookform/resolvers/zod";import{useMemo as d}from"react";import{useForm as C}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as S}from"../../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetChecksMap as F}from"../../../../hooks/tracks/useGetChecksMap.esm.js";import{DEFAULT_FORM_VALUES as V}from"../utils/campaignFormUtils.esm.js";import{campaignFormSchema as k}from"../utils/validation.esm.js";import{mapCampaignToFormValues as M,mapCampaignFormDataToCampaignInput as v}from"./utils.esm.js";const L=(e,o)=>{const a=d(()=>o?M(o):V,[o]),{control:m,handleSubmit:t,getValues:i,setValue:p,trigger:s,formState:{errors:n}}=C({defaultValues:a,mode:"onChange",resolver:h(k)}),{showModal:u}=S(),{checksMap:c,checkChips:g,checksLoading:l}=F();return{control:m,handleSubmit:t,getValues:i,setValue:p,trigger:s,errors:n,onSubmit:async r=>{if(!await u({title:"Save Campaign",message:`Are you sure you want to save campaign: ${r.detailsStep.name}?`,error:!1}))return;const f=v(r,o,c);e(f)},checkChips:g,checksLoading:l}};export{L as useCampaignForm};
|
|
2
|
-
//# sourceMappingURL=useCampaignForm.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{v4 as S}from"uuid";import{mapInputFilterToFormFilters as h}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import{mapTrackFormToInput as u}from"../../../TrackForm/utils/useTrackForm.esm.js";const D=({name:r,ownerEntityRef:a,description:p,targetCompletionDate:o,supportChannel:e,milestones:s,startDate:i,track:n})=>({detailsStep:{name:r,description:p,ownerEntityRef:a,supportChannel:e,startDate:i,targetCompletionDate:o},tracksStep:{checks:n?.levels?.[0].checks.map(t=>({id:t.id,name:t.name??t.id,description:t.description}))},filtersStep:h(n.filter),milestonesStep:{milestones:s.map(t=>({id:Number(t.id),name:t.name,description:t.description,passRate:t.targetPercent.toString()}))}}),R=(r,a,p)=>{const{tracksStep:{checks:o},detailsStep:{name:e,description:s,ownerEntityRef:i,supportChannel:n,startDate:t,targetCompletionDate:m},filtersStep:l,milestonesStep:{milestones:d}}=r,c=u({detailsStep:{name:`${e}`,description:`The checks for the ${e} campaign.`,ownerEntityRef:i},levelsStep:{levels:[{name:"Level 1",checks:o,description:""}]},filtersStep:{filter:l}},p??{},a?.track);return{id:a?.id??S(),track:{...c,type:"campaign"},name:e,description:s,ownerEntityRef:i,supportChannel:n,startDate:t,targetCompletionDate:m,milestones:d.map(({id:f,name:g,description:k,passRate:C})=>({id:f,trackId:c.id,name:g,description:k,targetPercent:parseInt(C,10),targetCompletionDate:m}))}};export{R as mapCampaignFormDataToCampaignInput,D as mapCampaignToFormValues};
|
|
2
|
-
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const i={0:"detailsStep",1:"tracksStep",2:"filtersStep",3:"milestonesStep"};var t=(a=>(a.title="Create a campaign",a.description="A soundcheck campaign allows you to define a tech health goal, assign it to a team and monitor progress.",a.callToAction="Get started",a))(t||{}),e=(a=>(a.title="No campaigns found",a.description="No campaigns matched your search. Consider changing search term and filters.",a))(e||{});export{t as CampaignEmptyState,e as CampaignNoResults,i as StepNameMapping};
|
|
2
|
-
//# sourceMappingURL=CampaignFormTypes.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{TrackCheckSchema as o,CampaignDetailsSchema as l}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{CHECK_IS_REQUIRED_MSG as p,FIELD_IS_REQUIRED_MSG as a}from"../../../../utils/validation.esm.js";const r=0,s=100,S=100,i=100,m="Ending date must come after the Starting Date",g=e.strictObject({selectedKinds:e.string().array(),selectedTypes:e.string().array(),selectedLifecycles:e.string().array(),selectedOwners:e.string().array(),selectedSystems:e.string().array(),selectedTags:e.string().array()}),E=e.strictObject({checks:e.array(o.extend({key:e.string().optional()})).min(1,p)}),_=e.strictObject({id:e.number().optional(),name:e.string().min(1,a).max(i,`Input must be less than ${i} characters`),description:e.string().min(1,a),passRate:e.coerce.number().min(r,`Minimum pass rate is ${r}%`).max(s,`Maximum pass rate is ${s}%`)}),D=e.strictObject({milestones:e.array(_).min(1,a)}),n=e.coerce.string().nullable().refine(t=>t!==null,{message:a}),M=e.strictObject({startDate:n,targetCompletionDate:n}),T=({startDate:t,targetCompletionDate:c})=>t&&c?new Date(t)<new Date(c):!0,A=l.merge(M),d=t=>t.refine(T,{message:m,path:["targetCompletionDate"]}),y=e.strictObject({detailsStep:d(A),tracksStep:E,filtersStep:g,milestonesStep:D});export{S as CAMPAIGN_NAME_MAX_LENGTH,m as END_AFTER_START_DATE_MSG,s as MILESTONE_MAX_PASS_RATE,r as MILESTONE_MIN_PASS_RATE,i as MILESTONE_NAME_MAX_LENGTH,n as campaignDateTimeSchema,y as campaignFormSchema};
|
|
2
|
-
//# sourceMappingURL=validation.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import c,{useEffect as s}from"react";import"../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as a}from"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import{useCreateCheck as n}from"../../../hooks/checks/useCreateCheck.esm.js";import{CheckForm as p}from"./CheckForm/CheckForm.esm.js";import"@material-ui/core";import"./CheckForm/Steps/CheckDetailsStep.esm.js";import"./CheckForm/Steps/CheckRulesStep.esm.js";const d=()=>{const{hideModal:e,showAddModal:r,setIsLoading:o}=a(),{mutateAsync:m,isLoading:t}=n();return s(()=>{o(t)},[o,t]),c.createElement(p,{title:"Create a Check",open:r,onSave:async i=>{await m(i,{onSuccess:()=>e()})},onClose:()=>e()})};export{d as AddCheckView};
|
|
2
|
-
//# sourceMappingURL=AddCheckView.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import e from"react";import{FormProvider as h}from"react-hook-form";import"../../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as f}from"../../../../contexts/CheckFormContext.esm.js";import"../../../../contexts/CampaignFormContext.esm.js";import"../../../../contexts/UserProvider.esm.js";import{FormFilterSection as S}from"../../../FormFilterSection/FormFilterSection.esm.js";import{FormStepper as u}from"../../../FormStepper/FormStepper.esm.js";import{FullScreenDialog as C}from"../../../FullScreenDialog/FullScreenDialog.esm.js";import"../FormFields/CheckNameInput/CheckNameInput.esm.js";import"../FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../../../FormMarkdownInput/FormMarkdownInput.esm.js";import{CHECK_FIELDS as b}from"../utils/checkFormUtils.esm.js";import"../FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../FormFields/RuleInput/AddMenuButton.esm.js";import"../FormFields/RuleInput/RuleInputBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/core";import"@material-ui/icons/Delete";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../FormControlledSelect/FormControlledSelect.esm.js";import"../FormFields/RuleInput/Conditions/ControlledAutocomplete.esm.js";import"../FormFields/RuleInput/Conditions/styles.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/graphqlKeys.esm.js";import"../FormFields/RuleInput/Conditions/ConditionList.esm.js";import{ScheduleSection as E}from"../FormFields/CheckScheduleSection/ScheduleSection.esm.js";import{useCheckForm as k}from"../hooks/useCheckForm.esm.js";import"../types/ExpressionType.esm.js";import{CheckStepNameMapping as F}from"../types/CheckFormTypes.esm.js";import"../../../Frequency/types.esm.js";import"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import"../types/Path.esm.js";import{CheckFormDescription as g}from"./CheckFormDescription.esm.js";import{CheckDetailsStep as v}from"./Steps/CheckDetailsStep.esm.js";import{CheckRulesStep as y}from"./Steps/CheckRulesStep.esm.js";const D=({title:l,open:p,onSave:a,onClose:o})=>{const{hideModal:i,isLoading:c,isReadOnly:r,selectedItem:s}=f(),{formMethods:t,onSubmit:m}=k(a),n=[{label:"Enter check details",content:()=>e.createElement(v,null)},{label:"Add rules",content:()=>e.createElement(y,null)},{label:"Choose the affected entities (Optional)",content:()=>e.createElement(S,{name:"filtersStep.filter",control:t.control,disabled:r,description:b.filter.description})},{label:"Set the check schedule (Optional)",content:()=>e.createElement(E,{control:t.control,disabled:r})}],d=s?[...Array(n.length).keys()]:[0];return e.createElement(C,{handleClose:o?()=>o():i,title:l,open:p},e.createElement(h,{...t},e.createElement("form",{onSubmit:t.handleSubmit(m)},e.createElement(u,{onClose:o?()=>o():i,handleSubmit:t.handleSubmit,trigger:t.trigger,onSubmit:m,initialVisited:d,stepNameMap:F,steps:n,isLoading:c,isReadOnly:r,saveButtonText:"Save Check",detailsComponent:e.createElement(g,null)}))))};export{D as CheckForm};
|
|
2
|
-
//# sourceMappingURL=CheckForm.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{Typography as a}from"@material-ui/core";import e from"react";const t=()=>e.createElement("div",{style:{display:"flex",gap:"10px",flexDirection:"column"}},e.createElement(a,{variant:"h6"},"Creating and managing checks"),e.createElement(a,{variant:"body1"},"Checks are entities created from four components: facts, paths, operators and values. These components are then organized via a boolean calculator in the UI."),e.createElement(a,{variant:"body1"},"To create a check, select the components that you want to use, organize them into rules and give your check a meaningful name and a description."),e.createElement(a,{variant:"body1"},"Once created, you will be able to manage and edit your track on its detail page."));export{t as CheckFormDescription};
|
|
2
|
-
//# sourceMappingURL=CheckFormDescription.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{makeStyles as p}from"@material-ui/core/styles";import t from"react";import{useFormContext as n}from"react-hook-form";import"../../../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as a}from"../../../../../contexts/CheckFormContext.esm.js";import"../../../../../contexts/CampaignFormContext.esm.js";import"../../../../../contexts/UserProvider.esm.js";import{CheckNameInput as s}from"../../FormFields/CheckNameInput/CheckNameInput.esm.js";import"../../FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import{CheckDescriptionInput as c}from"../../FormFields/CheckDescriptionInput/CheckDescriptionInput.esm.js";import{TeamDetailsInput as l}from"../../FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../../FormFields/RuleInput/AddMenuButton.esm.js";import"../../FormFields/RuleInput/RuleInputBox.esm.js";import"../../FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../../FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/core";import"@material-ui/icons/Delete";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../../api.esm.js";import"../../../../FormControlledSelect/FormControlledSelect.esm.js";import"../../FormFields/RuleInput/Conditions/ControlledAutocomplete.esm.js";import"../../FormFields/RuleInput/Conditions/styles.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../../hooks/graphqlKeys.esm.js";import"../../utils/checkFormUtils.esm.js";import"../../FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../../FormFields/CheckScheduleSection/ScheduleSection.esm.js";const d=p(r=>({container:{display:"flex",flexDirection:"column",gap:r.spacing(1)}})),f=()=>{const r=d(),{isLoading:m,isReadOnly:o}=a(),{control:e,formState:{errors:i}}=n();return t.createElement("div",{className:r.container},t.createElement(s,{control:e,error:i?.detailsStep?.name,isLoading:m,disabled:o}),t.createElement(c,{control:e,error:i?.detailsStep?.description,isLoading:m,disabled:o}),t.createElement(l,{control:e,disabled:o,error:i?.detailsStep?.ownerEntityRef}))};export{f as CheckDetailsStep};
|
|
2
|
-
//# sourceMappingURL=CheckDetailsStep.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{Typography as r,FormControlLabel as p,Checkbox as c}from"@material-ui/core";import{makeStyles as s}from"@material-ui/core/styles";import e from"react";import{useFormContext as d,Controller as u}from"react-hook-form";import"../../../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as E}from"../../../../../contexts/CheckFormContext.esm.js";import"../../../../../contexts/CampaignFormContext.esm.js";import"../../../../../contexts/UserProvider.esm.js";import"../../FormFields/CheckNameInput/CheckNameInput.esm.js";import{PassFailMessageInput as C}from"../../FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../../../../FormMarkdownInput/FormMarkdownInput.esm.js";import{CHECK_FIELDS as f}from"../../utils/checkFormUtils.esm.js";import"../../FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../../FormFields/RuleInput/AddMenuButton.esm.js";import{RuleInputBox as v}from"../../FormFields/RuleInput/RuleInputBox.esm.js";import"../../FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../../FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Delete";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../../api.esm.js";import"../../../../FormControlledSelect/FormControlledSelect.esm.js";import"../../FormFields/RuleInput/Conditions/ControlledAutocomplete.esm.js";import"../../FormFields/RuleInput/Conditions/styles.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../../hooks/graphqlKeys.esm.js";import"../../FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../../FormFields/CheckScheduleSection/ScheduleSection.esm.js";const g=s(t=>({container:{display:"flex",flexDirection:"column",gap:t.spacing(2)},innerContainer:{display:"flex",flexDirection:"column"}})),x=()=>{const t=g(),{isLoading:l,isReadOnly:n}=E(),{control:i}=d(),{rules:a,warnings:o}=f.rulesStep;return e.createElement("div",{className:t.container},e.createElement("div",{className:t.innerContainer},e.createElement("div",null,e.createElement(r,{variant:"subtitle2"},a.name),e.createElement(r,{variant:"caption"},a.description)),e.createElement(v,{disabled:n,name:"rulesStep.expressions",depth:0})),e.createElement(C,{control:i,isLoading:l,disabled:n}),e.createElement("div",{className:t.container},e.createElement("div",{className:t.innerContainer},e.createElement("div",null,e.createElement(r,{variant:"subtitle2"},o.name),e.createElement(r,{variant:"caption"},o.description)),e.createElement(u,{name:"rulesStep.warning",control:i,render:({field:m})=>e.createElement(p,{disabled:n,control:e.createElement(c,{checked:m.value,onChange:m.onChange}),label:o.label})}))))};export{x as CheckRulesStep};
|
|
2
|
-
//# sourceMappingURL=CheckRulesStep.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import n from"react";import{FormMarkdownInput as d}from"../../../../FormMarkdownInput/FormMarkdownInput.esm.js";import{CHECK_FIELDS as p}from"../../utils/checkFormUtils.esm.js";const c=({control:r,isLoading:t,disabled:o,error:i})=>{const{description:e}=p.details;return n.createElement(d,{name:"detailsStep.description",control:r,error:i,label:e.name,description:e.description,placeholder:o?void 0:e.placeholder,disabled:o||t})};export{c as CheckDescriptionInput};
|
|
2
|
-
//# sourceMappingURL=CheckDescriptionInput.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{makeStyles as s,Typography as p,Grid as n,FormControlLabel as h,Checkbox as u}from"@material-ui/core";import e from"react";import{useWatch as E,Controller as l}from"react-hook-form";import"../../../../Frequency/types.esm.js";import"../../../../Frequency/util.esm.js";import{FrequencyComponent as b}from"../../../../Frequency/FrequencyComponent.esm.js";import{CHECK_FIELDS as f}from"../../utils/checkFormUtils.esm.js";const C=s(t=>({container:{display:"flex",flexDirection:"column",gap:t.spacing(1)}})),y=({control:t,disabled:o})=>{const c=C(),a=E({control:t,name:"scheduleStep.schedule"}),{description:m,checkboxLabel:i}=f.schedule;return e.createElement("div",{className:c.container},e.createElement(p,{variant:"body2"},m),e.createElement(n,{item:!0,xs:12},e.createElement(n,{item:!0},e.createElement(l,{name:"scheduleStep.schedule.enabled",control:t,render:({field:r})=>e.createElement(h,{disabled:o,control:e.createElement(u,{checked:r.value,onChange:r.onChange}),label:i})})),e.createElement(n,{item:!0},e.createElement(l,{name:"scheduleStep.schedule.frequency",control:t,render:({field:r,fieldState:d})=>e.createElement(b,{disabled:o||!a.enabled,value:r.value,onChange:r.onChange,errors:d.error})}))))};export{y as ScheduleSection};
|
|
2
|
-
//# sourceMappingURL=ScheduleSection.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{Typography as s,Tabs as v,Tab as o}from"@material-ui/core";import{makeStyles as h}from"@material-ui/core/styles";import e,{useState as M}from"react";import{FormMarkdownInput as i}from"../../../../FormMarkdownInput/FormMarkdownInput.esm.js";import{CHECK_FIELDS as S}from"../../utils/checkFormUtils.esm.js";const C=h(a=>({container:{display:"flex",flexDirection:"column",gap:a.spacing(1)},tabContent:{padding:a.spacing(1)}})),T=({control:a,isLoading:l,disabled:n})=>{const r=C(),[t,c]=M(0),{name:m,description:p,passMessagePlaceholder:d,failMessagePlaceholder:b,passedTabName:g,failedTabName:u}=S.rulesStep.messages,E=(y,f)=>{c(f)};return e.createElement("div",{className:r.container},e.createElement("div",null,e.createElement(s,{variant:"subtitle2"},m),e.createElement(s,{variant:"caption"},p)),e.createElement(v,{orientation:"horizontal",variant:"scrollable",value:t,onChange:E},e.createElement(o,{label:g}),e.createElement(o,{label:u})),e.createElement("div",{className:r.tabContent},t===0&&e.createElement(i,{name:"rulesStep.passedMessage",control:a,placeholder:d,disabled:l||n}),t===1&&e.createElement(i,{name:"rulesStep.failedMessage",control:a,placeholder:b,disabled:l||n})))};export{T as PassFailMessageInput};
|
|
2
|
-
//# sourceMappingURL=PassFailMessageInput.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{Box as n,TextField as $,IconButton as O}from"@material-ui/core";import F from"@material-ui/icons/Delete";import t,{useMemo as u}from"react";import{useFormContext as R,Controller as B}from"react-hook-form";import{useOperators as S}from"../../../../../../hooks/operators/useOperators.esm.js";import{FormControlledSelect as T}from"../../../../../FormControlledSelect/FormControlledSelect.esm.js";import{ControlledAutocomplete as f}from"./ControlledAutocomplete.esm.js";import{useRuleConditionStyles as V}from"./styles.esm.js";import{useRuleOptions as I}from"./useRuleOptions.esm.js";const L=({name:l,handleDelete:E,disabled:r,disableDelete:b})=>{const a=V(),{control:m,getValues:h,setValue:c}=R(),{data:s,isLoading:C}=S(),p=u(()=>s?.map(e=>({value:e.name,label:e.title}))??[],[s]),{pathOptions:g,factRefOptions:i,isLoading:d}=I(l,m),v=u(()=>i?.map(e=>e.value)??[],[i]),x=h("rulesStep.expressions.conditions")?.map(({factRef:e})=>e),N=e=>{e&&!x?.includes(e)&&(c(`${l}.path`,""),c(`${l}.operator`,""),c(`${l}.value`,""))};return t.createElement(n,{className:a.container},t.createElement(n,{className:a.connector}),t.createElement(n,{className:a.innerContainer},t.createElement(n,{className:a.inputsContainer},i&&t.createElement(n,null,t.createElement(f,{name:`${l}.factRef`,control:m,placeholder:"Fact",options:v,getOptionLabel:e=>i?.find(o=>e===o.value)?.label??e,getOptionValue:e=>i?.find(o=>e===o.label)?.value??e??"",disabled:r||d,onChange:N})),t.createElement(n,null,t.createElement(f,{name:`${l}.path`,placeholder:"Path",control:m,disabled:r||d,options:g})),p&&t.createElement(n,null,t.createElement(T,{name:`${l}.operator`,control:m,placeholder:"Operator",options:p,disabled:C||r})),t.createElement(n,null,t.createElement(B,{name:`${l}.value`,control:m,defaultValue:"",render:({field:e,fieldState:o})=>t.createElement($,{...e,variant:"outlined",placeholder:"Enter a value",FormHelperTextProps:{className:a.helperText},error:o.invalid,helperText:o.error?o.error.message:null,margin:"dense",disabled:r,className:a.noMargin})})))),!r&&!b&&t.createElement(O,{onClick:E,className:a.deleteButton,"data-test-id":`${l}-delete-button`},t.createElement(F,{className:a.deleteIcon})))};export{L as RuleConditionInput};
|
|
2
|
-
//# sourceMappingURL=RuleConditionInput.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{parseFactRef as f,stringifyFactRef as S}from"@spotify/backstage-plugin-soundcheck-common";import{useState as R,useEffect as g,useMemo as s}from"react";import{useWatch as F}from"react-hook-form";import{useGetCollectors as O}from"../../../../../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as y}from"../../../../../../hooks/collectors/useGetFactSchema.esm.js";import{generateJsonPaths as G}from"../../../utils/checkFormUtils.esm.js";const L=(e,m)=>{const{data:o,isLoading:i}=O(),t=F({control:m,name:`${e}.factRef`}),[r,l]=R(()=>c(t));g(()=>{l(c(t))},[t]);const{data:a}=y(r?.source,r?.name),p=s(()=>a?G(a.schema):[],[a]),d=s(()=>o?.flatMap(n=>n.factNames.map(h=>{const u=f(h,{defaultSource:n.id,defaultScope:"default"});return{label:u.name,value:S(u)}})),[o]);return{isLoading:i,pathOptions:p,factRefOptions:d}};function c(e){if(e)try{return f(e,{defaultSource:"unknown",defaultScope:"default"})}catch{return null}return null}export{L as useRuleOptions};
|
|
2
|
-
//# sourceMappingURL=useRuleOptions.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{makeStyles as b,ButtonGroup as f,Button as g}from"@material-ui/core";import n,{useState as E}from"react";import{useFormContext as k,Controller as y}from"react-hook-form";import{ExpressionType as l,ExpressionTypeReadableMap as C}from"../../../types/ExpressionType.esm.js";import"../../../types/CheckFormTypes.esm.js";import"../../../../../Frequency/types.esm.js";import"../../../../../Frequency/util.esm.js";import"../../../../../Frequency/FrequencyComponent.esm.js";import"../../../types/Path.esm.js";const x=b(e=>({button:{backgroundColor:e.palette.background.default},selectedButton:{backgroundColor:e.palette.action.hover}})),B=({name:e,disabled:a})=>{const o=x(),{control:m,getValues:p}=k(),s=`${e}`,c=p(s),[i,u]=E(c||l.AllOf),d=r=>{u(r)};return n.createElement(y,{control:m,name:e,render:({field:{onChange:r}})=>n.createElement(f,{color:"primary"},Object.values(l).map(t=>n.createElement(g,{key:t,className:i===t?`${o.selectedButton} ${o.button}`:`${o.button}`,onClick:()=>{d(t),r(t)},disabled:a},C[t])))})};export{B as ExpressionTypeToggle};
|
|
2
|
-
//# sourceMappingURL=ExpressionTypeToggle.esm.js.map
|
package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/RuleInputBox.esm.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{Box as p,Grid as r}from"@material-ui/core";import{makeStyles as b}from"@material-ui/core/styles";import t from"react";import{useFormContext as B}from"react-hook-form";import{AddMenuButton as N}from"./AddMenuButton.esm.js";import"@material-ui/icons/Delete";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../../api.esm.js";import"../../../../FormControlledSelect/FormControlledSelect.esm.js";import"./Conditions/ControlledAutocomplete.esm.js";import"./Conditions/styles.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../../hooks/graphqlKeys.esm.js";import"../../utils/checkFormUtils.esm.js";import{ConditionList as y}from"./Conditions/ConditionList.esm.js";import{ExpressionBox as A}from"./Expressions/ExpressionBox.esm.js";import{ExpressionTypeToggle as C}from"./Expressions/ExpressionTypeToggle.esm.js";import{useRuleInputHandlers as P}from"./useRuleInputHandlers.esm.js";const $=b(e=>({root:{padding:0},inner:{marginLeft:e.spacing(2),paddingBottom:e.spacing(2),borderLeft:`1px solid ${e.palette.border}`,display:"flex",flexDirection:"row",gap:0},connector:{borderBottom:`1px solid ${e.palette.border}`,padding:e.spacing(0),width:"15px",height:"20px"},noPadding:{padding:0}})),k=({name:e,depth:o,disabled:i})=>{const n=$(),{getValues:m,setValue:l,trigger:c}=B(),{handleAddCondition:g,handleAddExpression:x,handleDeleteCondition:f}=P(e,m,l,c),u=`${e}`,a=m(u),E=a?.conditions||[],h=a?.expressions;return t.createElement(p,{className:o>0?n.inner:n.root},o>0&&t.createElement(p,{className:n.connector}),t.createElement(r,{container:!0,spacing:0,direction:"column",className:n.noPadding},t.createElement(r,{item:!0,className:n.noPadding},t.createElement(C,{disabled:i,name:`${e}.expressionType`})),t.createElement(r,{item:!0,container:!0,spacing:0,direction:"column",className:n.noPadding},t.createElement(y,{depth:o,handleDelete:d=>f(d,e),disabled:i,conditions:E,name:e}),h?.map((d,s)=>t.createElement(A,{key:s,expression:d,name:`${e}.expressions[${s}]`,depth:o,disabled:i}))),!i&&t.createElement(r,{item:!0,className:n.noPadding},t.createElement(N,{onAddCondition:g,onAddExpression:x}))))};export{k as RuleInputBox};
|
|
2
|
-
//# sourceMappingURL=RuleInputBox.esm.js.map
|
package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/useRuleInputHandlers.esm.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{ExpressionType as l}from"../../types/ExpressionType.esm.js";import"../../types/CheckFormTypes.esm.js";import"../../../../Frequency/types.esm.js";import"../../../../Frequency/util.esm.js";import"../../../../Frequency/FrequencyComponent.esm.js";import"../../types/Path.esm.js";const x=(a,e,s,t)=>({handleAddCondition:async()=>{const i=`${a}`,o=[...e(i)?.conditions||[],{factRef:"",path:"",operator:"",value:""}],n=`${a}.conditions`;s(n,o),await t(n)},handleAddExpression:async()=>{const i=`${a}.expressions`,o=e(i)||[];o.push({expressionType:l.AllOf,expressions:void 0,conditions:[{factRef:"",path:"",operator:"",value:""}]}),s(i,o),await t(i)},handleDeleteCondition:async(i,o)=>{const n=o.match(/(.*\.expressions)(?=\[\d+])/)?.[0]||o,p=`${o}.conditions`,r=e(p);if(r.splice(i,1),r.length===0){s(p,void 0);const c=parseInt(o.slice(o.lastIndexOf("[")+1,o.lastIndexOf("]")),10),d=e(n);d[c]?.expressions?.splice(c,1),s(n,d[c]?.expressions?d:void 0),await t(n)}else s(p,r),await t(p)}});export{x as useRuleInputHandlers};
|
|
2
|
-
//# sourceMappingURL=useRuleInputHandlers.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{Typography as r}from"@material-ui/core";import{makeStyles as f}from"@material-ui/core/styles";import{uniqBy as u}from"lodash";import e from"react";import{FormControlledSelect as E}from"../../../../FormControlledSelect/FormControlledSelect.esm.js";import{useOptions as v}from"../../../../GroupSelector/useOptions.esm.js";import{CHECK_FIELDS as y}from"../../utils/checkFormUtils.esm.js";const b=f(t=>({container:{display:"flex",flexDirection:"column",gap:t.spacing(1)}})),g=({control:t,disabled:a,error:n})=>{const l=b(),{options:i,isLoading:m}=v(),p=u(i.map(o=>({value:o.ref,label:o.name})),"value"),{owner:{name:s,description:c,selectLabel:d}}=y.details;return e.createElement("div",{className:l.container},e.createElement("div",null,e.createElement(r,{variant:"subtitle2"},s),e.createElement(r,{variant:"caption"},c)),e.createElement("div",null,e.createElement(E,{name:"detailsStep.ownerEntityRef",control:t,options:p,placeholder:d,disabled:a||m,helperText:n?.message??void 0})))};export{g as TeamDetailsInput};
|
|
2
|
-
//# sourceMappingURL=TeamDetailsInput.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{zodResolver as s}from"@hookform/resolvers/zod";import{useForm as a}from"react-hook-form";import"../../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as c}from"../../../../contexts/CheckFormContext.esm.js";import"../../../../contexts/CampaignFormContext.esm.js";import"react";import"../../../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as n}from"../../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{mapCheckerToFormValues as u,mapToCheckerInput as h,DEFAULT_FORM_VALUES as l}from"../utils/checkFormUtils.esm.js";import{checkFormSchema as f}from"../utils/validation.esm.js";const d=t=>{const{selectedItem:o}=c();let e=l;o&&(e=u(o));const m=a({defaultValues:e,mode:"onChange",resolver:s(f)}),{showModal:i}=n();return{formMethods:m,onSubmit:async r=>{if(!await i({title:"Save Check",message:`Are you sure you want to save check: ${r.detailsStep.name}?`,error:!1}))return;const p=h(r,o);t(p)}}};export{d as useCheckForm};
|
|
2
|
-
//# sourceMappingURL=useCheckForm.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const a={0:"detailsStep",1:"rulesStep",2:"filtersStep",3:"scheduleStep"};var t=(e=>(e.title="Create a check",e.description="A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",e.callToAction="Get started",e))(t||{}),c=(e=>(e.title="No checks found",e.description="No checks matched your search. Consider changing search term and filters.",e))(c||{});export{t as CheckEmptyState,c as CheckNoResults,a as CheckStepNameMapping};
|
|
2
|
-
//# sourceMappingURL=CheckFormTypes.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{FrequencySchema as g}from"@spotify/backstage-plugin-soundcheck-common";import{isObject as w}from"lodash";import{v4 as k}from"uuid";import{mapInputFilterToFormFilters as v,mapFiltersToInputFilter as x,mapFiltersToCatalogFilter as E}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import{emptyFilters as b}from"../../../Filter/types.esm.js";import{TimeUnit as d}from"../../../Frequency/types.esm.js";import{isTimeUnit as T}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import{ExpressionType as c}from"../types/ExpressionType.esm.js";import"../types/CheckFormTypes.esm.js";import{defaultSchedule as S}from"../types/Schedule.esm.js";import"../types/Path.esm.js";import{CHECK_NAME_MAX_LENGTH as C}from"./validation.esm.js";const h=e=>{if(w(e)&&"frequency"in e){const s=g.safeParse(e.frequency);if(s.success){const t=s.data;if("cron"in t)return{enabled:!0,frequency:{type:"cron",unit:d.Hours,value:1,cron:t.cron}};const r=Object.keys(t);if(r.length){const n=r[0];if(T(n))return{enabled:!0,frequency:{type:"HumanDuration",unit:n,value:t[n]??1,cron:""}}}}}return{enabled:!1,frequency:{type:"HumanDuration",unit:d.Hours,value:1,cron:""}}},m=(e,s)=>{const{enabled:t,frequency:r}=e;if(t){const{cron:n,type:i,unit:a,value:o}=r;return i==="HumanDuration"?{frequency:{[a]:o},filter:E(s)}:{frequency:{cron:n}}}},y=e=>{if(typeof e=="string"){if(e==="true")return!0;if(e==="false")return!1;const s=Number(e);if(!isNaN(s))return s}return e},p=e=>{if(!e)return{};if(e.expressionType){const s={[e.expressionType]:e.conditions?.map(t=>({factRef:t.factRef,path:t.path,operator:t.operator,value:y(t.value)}))};return e.expressions&&e.expressions.forEach(t=>{s[e.expressionType]?.push(p(t))}),s}if(e.expressions)return e.expressions.map(p);if(e.conditions&&e.conditions.length===1){const s=e.conditions[0];return{factRef:s.factRef,path:s.path,operator:s.operator,value:y(s.value)}}return{}},l=(e,s=!0)=>{if(!e)return{conditions:[]};const t=Object.keys(e),r=t.includes("all")||s&&!t.includes("any")?c.AllOf:c.AnyOf;if(t.includes(r)||s){const n=e[r]||[e],i=[],a=[];return n.forEach(o=>{const f=Object.keys(o);f.includes("all")||f.includes("any")?a.push(l(o,!1)):i.push({factRef:o.factRef,path:o.path,operator:o.operator,value:o.value})}),{expressions:a.length>0?a:void 0,conditions:i,expressionType:r}}return{expressionType:c.AllOf,conditions:[{factRef:e.factRef,path:e.path,operator:e.operator,value:e.value}]}},R=e=>({detailsStep:{name:e.name??"",description:e.description??"",ownerEntityRef:e.ownerEntityRef??""},rulesStep:{expressions:l(e.rule),passedMessage:e.passedMessage??void 0,failedMessage:e.failedMessage??void 0,warning:e.warning??!1},filtersStep:{filter:v(e.filter)},scheduleStep:{schedule:h(e.schedule)}}),M=(e,s)=>{const{detailsStep:t,rulesStep:r,filtersStep:n,scheduleStep:i}=e;return{id:s?s.id:k(),ownerEntityRef:t.ownerEntityRef??void 0,name:t.name,description:t.description,passedMessage:r.passedMessage??void 0,failedMessage:r.failedMessage??void 0,rule:p(r.expressions),warning:r.warning??!1,filter:n.filter?x(n.filter):void 0,schedule:m(i.schedule,n.filter)}},u=(e,s="$")=>{const t=[];if(e.type==="object"&&e.properties){const r=e.properties;for(const n in r)if(r.hasOwnProperty(n)){const i=`${s}.${n}`;t.push(i);const a=r[n];t.push(...u(a,i))}}if(e.type==="array"&&e.items){const r=`${s}[*]`;t.push(r);const n=Array.isArray(e.items)?e.items:[e.items];for(const i of n)t.push(...u(i,r))}return t},A={detailsStep:{name:"",description:"",ownerEntityRef:""},rulesStep:{expressions:{expressionType:c.AllOf,expressions:void 0,conditions:[{factRef:"",path:"",operator:"",value:"",conditions:[]}]},warning:!1},filtersStep:{filter:b()},scheduleStep:{schedule:S()}},F={details:{name:{name:"Check name",description:"Give your check a meaningful name so it's easy to remember",helperText:`Max ${C} characters`,placeholder:"Example: Code Coverage Check"},description:{name:"Check description",description:"Give your check a meaningful description so others know what it's for",placeholder:"Example: Ensure code coverage meets the minimum threshold"},owner:{name:"Check owner",description:"Add yourself, or a team, as the owner of this check",selectLabel:"Owner"}},rulesStep:{rules:{name:"Check rules",description:"Add the rules you want your check to enforce"},messages:{name:"Pass/Fail messages (Optional)",description:"Add the messages that will appear to you when checks either pass or fail",passMessagePlaceholder:"Enter pass message...",failMessagePlaceholder:"Enter fail message...",passedTabName:"Passed Message",failedTabName:"Failed Message"},warnings:{name:"Enable warnings",description:"Enable if the check should emit warning check results if it fails",label:"Warning"}},filter:{description:'Setting the filters below will limit the scope of the Check so that only those Entities that match the filter will be monitored by the Check. As an example, choosing a "Kind" of "Component" will make this Check only apply to Entities whose Kind is indeed set to "Component". This would exclude Entities like Groups, Users, APIs, etc. from being impacted by the Check.'},schedule:{description:"By default, checks are executed when any fact they depend on is updated. However, you may also schedule a check to run on a schedule.",checkboxLabel:"Schedule check"}};export{F as CHECK_FIELDS,A as DEFAULT_FORM_VALUES,u as generateJsonPaths,R as mapCheckerToFormValues,p as mapExpressionToRule,h as mapInputScheduleToSchedule,l as mapRuleToExpression,m as mapScheduleToInputSchedule,M as mapToCheckerInput};
|
|
2
|
-
//# sourceMappingURL=checkFormUtils.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{CheckMessagingSchema as c,CheckDetailsSchema as l,parseFactRef as m}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{isValidCron as p}from"../../../../utils/cron.esm.js";import{validateTimeUnitValue as u}from"../../../../utils/time.esm.js";import{TimeUnit as f}from"../../../Frequency/types.esm.js";import"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import{ExpressionType as r}from"../types/ExpressionType.esm.js";import"../types/CheckFormTypes.esm.js";import"../types/Path.esm.js";const i=t=>{try{return m(t),!0}catch{return"Invalid fact reference. [source]:[scope]/[name]."}},d=100,y=async t=>{if(!await i(t))throw new Error("Fact reference validation failed");return t},a=e.lazy(()=>e.strictObject({factRef:e.string().refine(y,{message:"Valid format: [source]:[scope]/[name]"}),path:e.string().min(1,"Required"),operator:e.string().min(1,"Required"),value:e.union([e.string().min(1,"Required"),e.number(),e.boolean()]),conditions:e.array(a).optional()})),n=e.lazy(()=>e.strictObject({expressionType:e.enum([r.AllOf,r.AnyOf]).optional(),expressions:e.array(n).optional(),conditions:e.array(a).optional()})),g=e.strictObject({expressions:n}).merge(c),b=e.strictObject({filter:e.strictObject({selectedKinds:e.string().array(),selectedTypes:e.string().array(),selectedLifecycles:e.string().array(),selectedOwners:e.string().array(),selectedSystems:e.string().array(),selectedTags:e.string().array()}).optional()}),h=e.nativeEnum(f),O=({type:t,cron:o,value:s})=>t==="cron"?p(o):t==="HumanDuration"?u(s)===!0:!0,j=e.strictObject({type:e.enum(["HumanDuration","cron"]),unit:h.optional(),value:e.number().min(1,"Value must be greater than 0.").optional(),cron:e.string().optional()}).refine(O,{message:"Invalid frequency configuration"}),v=e.strictObject({enabled:e.boolean(),frequency:j}),S=e.strictObject({schedule:v.optional()}),T=e.strictObject({detailsStep:l,rulesStep:g,filtersStep:b,scheduleStep:S});export{d as CHECK_NAME_MAX_LENGTH,T as checkFormSchema,i as validateFactRef};
|
|
2
|
-
//# sourceMappingURL=validation.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{usePermission as e}from"@backstage/plugin-permission-react";import{Button as a}from"@material-ui/core";import{soundcheckCampaignCreatePermission as n}from"@spotify/backstage-plugin-soundcheck-common";import o from"react";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as p}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import c from"../../images/no-results.svg";import{CampaignEmptyState as t}from"../CampaignsTab/MutateCampaignsViews/types/CampaignFormTypes.esm.js";import{EmptyState as s}from"./EmptyState.esm.js";const l=()=>{const{setShowAddModal:i}=p(),{loading:r,allowed:m}=e({permission:n});return o.createElement(s,{title:t.title,description:t.description,imgSrc:c,action:!r&&o.createElement(a,{disabled:!m,variant:"contained",color:"primary",onClick:()=>i(!0)},t.callToAction)})};export{l as EmptyCampaignState};
|
|
2
|
-
//# sourceMappingURL=CampaignEmptyState.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{useRouteRef as u}from"@backstage/core-plugin-api";import{EntityRefLink as L}from"@backstage/plugin-catalog-react";import{Typography as t,Button as M,Menu as O,MenuItem as E}from"@material-ui/core";import z from"@material-ui/icons/ArrowDropDown";import j from"@material-ui/icons/ArrowDropUp";import e,{useState as q}from"react";import{useNavigate as A}from"react-router-dom";import{useEntityPassRateTrend as B}from"../../../hooks/aggregations/useEntityPassRateTrend.esm.js";import{campaignDetailsRouteRef as F,campaignEditRouteRef as Q}from"../../../routes.esm.js";import{convertToReadableDate as p}from"../../CampaignsTab/CampaignDetailsPage/CampaignDetails.esm.js";import{Loading as V}from"../../TechHealth/Loading/Loading.esm.js";import{useCampaignRowStyles as W}from"./useCampaignRowStyles.esm.js";import{calculateOverallPassPercent as G,calculatePassingEntities as H}from"./utils.esm.js";const J=l=>{if(l?.edges.length){const a=H(l);return e.createElement(t,{variant:"body2"},a,"/",l.edges.length)}return e.createElement(t,{variant:"body2"},"No progress found.")},K=({campaign:l})=>{const a=W(),v=u(F),f=u(Q),m=A(),[n,c]=q(null),o=150,g=l.track.levels.flatMap(({checks:s})=>s.map(({id:T})=>T)),{data:N,isLoading:b,isError:y}=B({filter:{tracks:[{trackId:l.track.id}],checkIds:{included:g},numberOfDays:void 0}}),i=N?.individualEntityPassRates??{totalCount:0,edges:[],pageInfo:{hasNextPage:!1,hasPreviousPage:!1}},C=s=>{c(s.currentTarget)},R=()=>{c(null)},x=()=>{m(f({campaignId:l.id}))},h=()=>{m(v({campaignId:l.id}))};if(b)return e.createElement("div",{"data-testid":"loading-indicator"},e.createElement(V,null));if(y)return e.createElement(t,{color:"error"},"Failed to load campaigns progress.");const w=i.edges.length?G(i):0,k=J(i),{name:P,description:r,ownerEntityRef:D,targetCompletionDate:I,startDate:S,supportChannel:d}=l;return e.createElement("div",{className:a.campaignCards},e.createElement("div",{className:a.campaignCard},e.createElement("div",{className:a.flexRow,style:{justifyContent:"space-between"}},e.createElement("div",{className:a.flexColumn},e.createElement(t,{variant:"h5"},P),e.createElement(t,{variant:"body1",className:a.description},r.length>o?`${r.substring(0,o)}...`:r)),e.createElement("div",null,e.createElement(M,{variant:"text","aria-controls":"menu","aria-haspopup":"true",onClick:C},e.createElement("div",{className:a.actions},e.createElement("div",{className:a.actionsText},"Actions"),e.createElement("div",{className:a.flexRow},n?e.createElement(j,{fontSize:"small"}):e.createElement(z,{fontSize:"small"})))),e.createElement(O,{id:"campaign-menu",anchorEl:n,keepMounted:!0,open:!!n,onClose:R,classes:{list:a.menuList}},e.createElement(E,{onClick:h},"View"),e.createElement(E,{onClick:x},"Edit")))),e.createElement("div",{className:a.detailSection},e.createElement("div",{className:a.flexColumn},e.createElement("div",{className:a.flexRow},e.createElement(t,{variant:"subtitle1",className:a.label},"Owner:"),e.createElement(t,{variant:"body1",display:"inline",className:a.value},e.createElement(L,{className:a.ownerLink,entityRef:D}))),d&&e.createElement("div",{className:a.flexRow},e.createElement(t,{variant:"subtitle1",className:a.label},"Support Channel:"),e.createElement(t,{variant:"body1",display:"inline",className:a.value},d))),e.createElement("div",{className:a.flexColumn},e.createElement("div",{className:a.flexRow},e.createElement(t,{variant:"subtitle1",className:a.label},"Start Date:"),e.createElement(t,{variant:"body1",display:"inline",className:a.value},p(S))),e.createElement("div",{className:a.flexRow},e.createElement(t,{variant:"subtitle1",className:a.label},"Target Completion Date:"),e.createElement(t,{variant:"body1",display:"inline",className:a.value},p(I)))),e.createElement("div",{className:a.flexRow,style:{minWidth:"300px"}},e.createElement("div",{className:a.flexColumn},e.createElement(t,{variant:"subtitle1",className:a.label},"Checks Passing"),e.createElement(t,{variant:"body2"},w,"%")),e.createElement("div",{className:a.flexColumn},e.createElement(t,{variant:"subtitle1",className:a.label},"Entities Complete"),k)))))};export{K as CampaignRow};
|
|
2
|
-
//# sourceMappingURL=CampaignRow.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{makeStyles as m}from"@material-ui/core";import e from"react";import{AlertPanel as f}from"../../AlertPanel/AlertPanel.esm.js";import{NoCertifications as E,NoEntities as u}from"../../EmptyState/EmptyState.esm.js";import{VirtualTableContent as y}from"./VirtualTableContent.esm.js";const d=m(()=>({scrollContainer:{overflow:"auto"}})),h=({facets:t,ownerEntityRef:r,hasError:o,kind:i,type:s,setError:a,isFixedGroup:l})=>{const c=d();if(o)return e.createElement(f,{severity:"error",title:o.message});const n="Use the groups drop-down list at the top-right of the page to select another group.";return t&&(t.types?.length??0)>0?t.types?.find(p=>p.count>0)?e.createElement("div",{className:c.scrollContainer},e.createElement(y,{facets:t,kind:i,type:s,setError:a,ownerEntityRef:r,hasError:o})):e.createElement(E,{ownerEntityRef:r,selectGroupHint:n}):e.createElement(u,{ownerEntityRef:r,selectGroupHint:l?void 0:n})};export{h as TableContent};
|
|
2
|
-
//# sourceMappingURL=TableContent.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import a,{useMemo as u}from"react";import{VirtualizedResultsTable as m}from"../../ResultsTable/virtualized/VirtualizedResultsTable.esm.js";const y=({facets:e,ownerEntityRef:t,kind:l,type:c,setError:r})=>{const p=u(()=>{const n=new Map;return e.types.forEach(({kind:o,type:s})=>{const i=`${o}|${s??""}`;n.set(i,a.createElement(m,{key:i,ownerEntityRef:t,kind:o,type:s,setError:r}))}),n},[e,t,r]);return a.createElement("div",null,p.get(`${l}|${c??""}`))};export{y as VirtualTableContent};
|
|
2
|
-
//# sourceMappingURL=VirtualTableContent.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{parseEntityRef as f}from"@backstage/catalog-model";import{Link as h}from"@backstage/core-components";import{makeStyles as u}from"@material-ui/core";import t,{memo as k}from"react";import{ResultState as s}from"../../../graphql/generated/index.esm.js";import{CheckIcon as v}from"../../CheckIcon/CheckIcon.esm.js";import{CheckCellTooltip as $}from"./CheckCellTooltip.esm.js";const E=u(r=>({root:{padding:0},iconWrapper:{padding:r.spacing(1.5),display:"flex",alignItems:"center",justifyContent:"center"},link:{"&:hover $iconWrapper, &:active $iconWrapper, &:focus $iconWrapper":{backgroundColor:r.palette.action.hover}},icon:{width:"17px",height:"17px"},virtualized:{borderBottom:`1px solid ${r.palette.divider}`,borderRight:`1px solid ${r.palette.divider}`}})),N=k(({programId:r,check:a,entityRef:o,result:i,entityRoute:d,isVirtualized:c})=>{const e=E();if(typeof o!="string"){const p=t.createElement("div",{className:e.iconWrapper},t.createElement("div",{className:e.icon}));return c?t.createElement("div",{className:`${e.root} ${e.virtualized}`,"aria-hidden":!0},p):t.createElement("td",{className:e.root,"aria-hidden":!0},p)}const n=t.createElement(v,{className:e.icon,result:i??s.NotReported}),l=t.createElement("div",{className:e.iconWrapper},n),m=i&&i===s.NotApplicable?l:t.createElement(h,{className:e.link,to:`${d(f(o))}/soundcheck/tracks/${r}/checks/${a.id}`},l);return c?t.createElement("div",{className:`${e.root} ${e.virtualized}`},t.createElement($,{check:a,icon:n,entityRef:o},m)):t.createElement("td",{className:`${e.root}`},m)});export{N as CheckCell};
|
|
2
|
-
//# sourceMappingURL=CheckCell.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{makeStyles as d}from"@material-ui/core";import e,{memo as c}from"react";import{LevelBadge as m}from"../Badges/LevelBadge.esm.js";import{NoLevelBadge as n}from"../Badges/NoLevelBadge.esm.js";import{CampaignBadge as g}from"../Badges/CampaignBadge.esm.js";import{RowHeights as s,NO_LEVEL_BADGE_NAME as p}from"./virtualized/virtualizedTableUtils.esm.js";const f=d(t=>({virtualized:{borderRight:`1px solid ${t.palette.divider}`,height:`${s.programTitle}px`,display:"flex",justifyContent:"center",alignItems:"center"}})),v=c(({entityRef:t,highestLevels:l,trackType:r})=>{const a=l.find(o=>o.entityRef===t);let i=a?.badge?e.createElement(m,{badge:a.badge}):e.createElement(n,null);return r==="campaign"&&(i=e.createElement(g,null)),i}),E=({highestLevel:t,trackType:l})=>{const r=f();if(!t?.badge)return e.createElement("div",{className:r.virtualized},"\xA0");let a=t.name!==p?e.createElement(m,{badge:t.badge}):e.createElement(n,null);return l==="campaign"&&(a=e.createElement(g,null)),e.createElement("div",{className:r.virtualized},a)};export{v as HighestLevelBadge,E as HighestLevelBadgeCell};
|
|
2
|
-
//# sourceMappingURL=HighestLevelBadge.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{makeStyles as p,Tooltip as l,LinearProgress as m}from"@material-ui/core";import s,{useMemo as g}from"react";import{ResultState as a}from"../../graphql/generated/index.esm.js";const d=p(e=>({root:{height:"8px",minWidth:"64px",marginLeft:e.spacing(2),borderRadius:"100vh",backgroundColor:e.palette.action.hover},bar:{backgroundColor:e.palette.success.main,transition:"none"}})),u=e=>{const r=d(e),t=g(()=>Object.entries(e.progress).reduce((i,[,c])=>i+c,0),[e.progress]);if(t===0)return null;const o=e.progress[a.Passed]??0,n=Math.round(o/t*100);return s.createElement(l,{arrow:!0,title:`Check passing at ${n}%, ${o} of ${t} ${t===1?"entity":"entities"} passing.`,enterDelay:0,placement:"top"},s.createElement(m,{variant:"determinate",value:(e.progress[a.Passed]??0)/t*100,classes:{root:r.root,bar:r.bar}}))};export{u as ProgramCheckIndicator};
|
|
2
|
-
//# sourceMappingURL=ProgramCheckIndicator.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{makeStyles as f,Typography as s}from"@material-ui/core";import t,{memo as u,useMemo as C}from"react";import{CheckCell as E}from"./CheckCell/CheckCell.esm.js";import{ProgramCheckIndicator as i}from"./ProgramCheckIndicator.esm.js";import{RowHeights as p}from"./virtualized/virtualizedTableUtils.esm.js";const h=f(e=>({checkNameCell:{padding:0,backgroundColor:e.palette.background.paper},checkNameContent:{padding:`0 ${e.spacing(2)}px`,display:"flex",justifyContent:"space-between",alignItems:"center"},checkNameTypography:{overflow:"hidden",textOverflow:"ellipsis",fontWeight:e.typography.body1.fontWeight},checkIndicator:{flexBasis:e.spacing(8)},checkNameCellVirtualized:{height:`${p.check}px`,lineHeight:`${p.check}px`,borderBottom:`1px solid ${e.palette.divider}`,borderRight:`1px solid ${e.palette.divider}`}}));u(({programId:e,programName:l,check:a,entityRefs:d,results:k,entityRoute:g,level:m})=>{const r=h(),y=C(()=>{let c=0,o=0;return m.checks.forEach(n=>{o+=n.totalCount-n.totalPassing,c+=n.totalPassing}),{PASSED:c,FAILED:o}},[m]),N=new Map(k.map(c=>[c.entityRef,c.result]));return t.createElement("tr",{"data-testid":"track-check-row"},t.createElement("th",{scope:"row",className:r.checkNameCell,"aria-label":`${a.name} check for ${l} track`},t.createElement("div",{className:r.checkNameContent},t.createElement(s,{className:r.checkNameTypography,variant:"subtitle2",component:"p"},a.name),t.createElement(i,{className:r.checkIndicator,progress:y}))),d.map((c,o)=>t.createElement(E,{key:o,programId:e,check:a,entityRef:c,result:typeof c=="string"?N.get(c):void 0,entityRoute:g})))});const v=({name:e,progress:l})=>{const a=h();return t.createElement("div",{className:a.checkNameCell,"aria-label":`${e} check`},t.createElement("div",{className:`${a.checkNameContent} ${a.checkNameCellVirtualized}`},t.createElement(s,{variant:"subtitle2",component:"p",className:a.checkNameTypography},e),t.createElement(i,{className:a.checkIndicator,progress:l})))};export{v as CheckNameCell};
|
|
2
|
-
//# sourceMappingURL=ProgramCheckRow.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{makeStyles as p,Typography as o}from"@material-ui/core";import a,{memo as s}from"react";import{RowHeights as c}from"./virtualized/virtualizedTableUtils.esm.js";const l=p(e=>{const t=e.palette.action.hover;return{root:{color:e.palette.text.primary,backgroundColor:t},levelContent:{padding:`${e.spacing(.5)}px ${e.spacing(2)}px`,backgroundColor:t},levelTypography:{overflow:"hidden",textOverflow:"ellipsis"},levelHeaderCell:{padding:`${e.spacing(.5)}px ${e.spacing(2)}px`,borderRight:`1px solid ${e.palette.divider}`,height:`${c.levelTitle}px`}}});s(({level:e,entityRefs:t,programName:n})=>{const r=l();return a.createElement("tr",{className:r.root,"data-testid":"track-level-row"},a.createElement("th",{scope:"row",className:r.root},a.createElement("div",{className:r.levelContent},a.createElement(o,{className:r.levelTypography,variant:"subtitle2",component:"p","aria-label":`${e.name} for ${n} track`},e.name))),t.map((v,m)=>a.createElement("td",{key:m,className:r.root,"aria-hidden":!0})))});const i=({name:e})=>{const t=l();return a.createElement("div",{className:`${t.levelHeaderCell} ${t.root}`,"aria-label":`${e}`},a.createElement(o,{variant:"subtitle2",component:"p",className:t.levelTypography},e))},d=()=>{const e=l();return a.createElement("div",{className:`${e.levelHeaderCell} ${e.root}`},"\xA0")};export{i as ProgramLevelHeaderCell,d as ProgramLevelHeaderFill};
|
|
2
|
-
//# sourceMappingURL=ProgramLevelRow.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{makeStyles as s,Typography as o}from"@material-ui/core";import e,{memo as n}from"react";import{HighestLevelBadge as c}from"./HighestLevelBadge.esm.js";const i=s(t=>({programNameCell:{padding:0,position:"sticky",backgroundColor:t.palette.background.paper},programNameContent:{padding:t.spacing(2)},programNameTypography:{overflow:"hidden",textOverflow:"ellipsis"},badgeCellContent:{display:"flex",justifyContent:"center",alignItems:"center"},programNameCellVirtualized:{borderRight:`1px solid ${t.palette.divider}`}}));n(({program:t,entityRefs:a,highestLevels:p})=>{const r=i();return e.createElement("tr",{"data-testid":"track-title-row"},e.createElement("th",{scope:"row",className:r.programNameCell},e.createElement("div",{className:r.programNameContent},e.createElement(o,{className:r.programNameTypography,variant:"h5",component:"p"},t.name))),a.map((m,l)=>typeof m!="string"?e.createElement("td",{key:l,"aria-hidden":!0}):e.createElement("td",{key:l,"data-testid":"track-certification-cell"},e.createElement("div",{className:r.badgeCellContent},e.createElement(c,{entityRef:m,highestLevels:p,trackType:t.type??void 0})))))});const d=n(({name:t})=>{const a=i();return e.createElement("div",{className:`${a.programNameCell} ${a.programNameCellVirtualized}`},e.createElement("div",{className:a.programNameContent},e.createElement(o,{className:a.programNameTypography,variant:"h5",component:"p"},t)))});export{d as ProgramTitleCell};
|
|
2
|
-
//# sourceMappingURL=ProgramTitleRow.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{parseEntityRef as n}from"@backstage/catalog-model";import{Link as d}from"@backstage/core-components";import{useRouteRef as m}from"@backstage/core-plugin-api";import{entityRouteRef as p,humanizeEntityRef as c}from"@backstage/plugin-catalog-react";import{makeStyles as f}from"@material-ui/core";import"lodash";import o from"react";import"@tanstack/react-query";import"../../hooks/graphqlKeys.esm.js";import{useEntityByRef as s}from"../../hooks/catalog/useEntityByRef.esm.js";const u=f(e=>({root:{position:"sticky",bottom:"-1px",backgroundColor:e.palette.background.default,boxShadow:`0 -1px ${e.palette.divider}`,"& td$cell, & th$cell":{border:0,padding:e.spacing(1)},"& td$cell":{backgroundColor:e.palette.background.default}},row:{boxShadow:`1px 0 ${e.palette.background.default}, -1px 0 ${e.palette.background.default}`},cell:{verticalAlign:"top"},cellInner:{textOrientation:"mixed",writingMode:"vertical-lr",transform:"rotate(-20deg)",transformOrigin:`100% ${e.spacing(1)}px`,wordBreak:"keep-all",fontWeight:"bold",overflow:"hidden",textOverflow:"ellipsis",maxHeight:"max(15vh, 175px)"}})),g=({entityRef:e})=>{const{data:r}=s(e),l=m(p),a=u(),t=e?n(e):void 0,i=t?o.createElement(d,{"aria-label":`entity link to ${t.name}`,to:l(t)},r?.metadata.title?r.metadata.title:c(t,{defaultKind:t.kind})):o.createElement(o.Fragment,null);return o.createElement("div",{className:a.cell},o.createElement("div",{className:a.cellInner},i))};export{g as EntityRefCell};
|
|
2
|
-
//# sourceMappingURL=ResultsTableFooter.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{makeStyles as h}from"@material-ui/core";import{Skeleton as l}from"@material-ui/lab";import e from"react";const E=h(t=>({table:{backgroundColor:t.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap","& th, & td":{border:`1px solid ${t.palette.divider}`,borderCollapse:"collapse"},paddingBottom:t.spacing(2)},programTitle:{padding:t.spacing(2)},checkResult:{padding:t.spacing(1.5)},title:{padding:`${t.spacing(1)}px ${t.spacing(2)}px`},header:{backgroundColor:t.palette.action.hover}})),b=({entityCount:t=25,levelCount:o=3,checkCount:i=5})=>{const a=E(),r=new Array(t).fill(void 0),m=new Array(i).fill(void 0),d=new Array(o).fill(void 0);return e.createElement("table",{"aria-label":"table loading",className:a.table},e.createElement("tbody",null,e.createElement("tr",null,e.createElement("td",{className:a.programTitle},e.createElement(l,{width:180,height:40})),r.map((p,n)=>e.createElement("td",{key:n}))),d.map((p,n)=>e.createElement(e.Fragment,{key:n},e.createElement("tr",{className:a.header},e.createElement("td",{className:a.title},e.createElement(l,{width:180})),r.map((s,c)=>e.createElement("td",{key:c}))),m.map((s,c)=>e.createElement("tr",{key:c},e.createElement("td",{className:a.title},e.createElement(l,{width:240})),r.map((k,g)=>e.createElement("td",{key:g,className:a.checkResult},e.createElement(l,{width:18,height:18,variant:"rect"})))))))))};export{b as ResultsTableSkeleton};
|
|
2
|
-
//# sourceMappingURL=ResultsTableSkeleton.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import r from"react";import{CheckCell as c}from"../CheckCell/CheckCell.esm.js";import{HighestLevelBadgeCell as m}from"../HighestLevelBadge.esm.js";import{CheckNameCell as a}from"../ProgramCheckRow.esm.js";import{ProgramLevelHeaderCell as s,ProgramLevelHeaderFill as d}from"../ProgramLevelRow.esm.js";import{ProgramTitleCell as i}from"../ProgramTitleRow.esm.js";import{EntityRefCell as p}from"../ResultsTableFooter.esm.js";const y=e=>r.createElement(i,{name:e}),C=e=>({type:"ProgramHeader",render:()=>y(e)}),g=e=>e?r.createElement(s,{name:e}):r.createElement(d,null),h=e=>({type:"LevelHeader",render:()=>g(e)}),E=(e,t)=>r.createElement(a,{name:e,progress:t}),f=(e,t)=>({type:"CheckTitle",render:()=>E(e,t)}),v=(e,t,l,n,o)=>r.createElement(c,{check:t,entityRef:l,entityRoute:o,programId:e,result:n,isVirtualized:!0}),H=(e,t,l,n,o)=>({type:"CheckResult",render:()=>v(e,t,l,n,o)}),k=e=>r.createElement(p,{entityRef:e}),u=e=>({type:"EntityHeader",render:()=>k(e)}),R=(e,t)=>r.createElement(m,{highestLevel:e,trackType:t}),L=(e,t)=>({type:"LevelBadge",render:()=>R(e,t)}),P=e=>t=>{const l=e[t.rowIndex].cells[t.columnIndex];return l?r.createElement("div",{style:t.style},l.render()):r.createElement("div",{style:t.style})};export{H as checkResultCell,f as checkTitleCell,u as entityHeaderCell,P as getCellRenderer,L as levelBadgeCell,h as levelHeaderCell,C as programHeaderCell};
|
|
2
|
-
//# sourceMappingURL=Cell.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{ResultState as C}from"../../../graphql/generated/index.esm.js";import{programHeaderCell as k,levelBadgeCell as H,levelHeaderCell as c,checkTitleCell as T,checkResultCell as y,entityHeaderCell as h}from"./Cell.esm.js";import{RowHeights as i,generateNoLevelBadge as L,findLongestRefTitle as A,calculateHeightForRefTitle as S}from"./virtualizedTableUtils.esm.js";const w=(p,t,f)=>{const l=[];for(const{program:o,levels:m,highestLevels:u}of p){l.push({height:i.programTitle,cells:[k(o.name),...t.map(e=>{const r=e?u.find(s=>s.entityRef===e)||L(e):void 0;return H(r,o.type??void 0)})]});for(const e of m){l.push({height:i.levelTitle,cells:[c(e.name),...t.map(r=>c(""))]});for(const{check:r,results:s,totalCount:d,totalPassing:n}of e.checks){const R={PASSED:n,FAILED:d-n};l.push({height:i.check,cells:[T(r.name,R),...t.map(a=>y(o.id,r,a,s.find(v=>v.entityRef===a)?.result??C.NotApplicable,f))]})}}}const g=A(t??[]);return l.push({height:S(g.length??1),cells:[h(""),...t.map(o=>h(o||""))]}),l};export{w as generateRows};
|
|
2
|
-
//# sourceMappingURL=Row.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{useRouteRef as z}from"@backstage/core-plugin-api";import{entityRouteRef as T}from"@backstage/plugin-catalog-react";import{makeStyles as x,Grid as H}from"@material-ui/core";import e,{useEffect as W,useState as $,useRef as A,useLayoutEffect as G}from"react";import{VariableSizeGrid as L}from"react-window";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import{useProgramOverviewForOwner as N}from"../../../hooks/certifications/useProgramOverviewForOwner.esm.js";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"../../Pagination/Pagination.esm.js";import{useCursorPagination as O,CursorPagination as V}from"../../Pagination/CursorPagination.esm.js";import{ResultsTableSkeleton as B}from"../skeletons/ResultsTableSkeleton.esm.js";import{getCellRenderer as F}from"./Cell.esm.js";import{generateRows as j}from"./Row.esm.js";import{CellWidths as c,calculateTableHeight as q,RowHeights as D}from"./virtualizedTableUtils.esm.js";const d=25,I=x(r=>({table:{backgroundColor:r.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap",textAlign:"left",overflow:"auto"}})),J=({setError:r,kind:n,type:m,ownerEntityRef:t})=>{const{cursor:h,pageSize:u,...C}=O({defaultPageSize:d,label:"entitiesPerPage"}),{data:o,isLoading:w,isError:p}=N(t,{kind:n,type:m},u,h),R=I(),E=z(T);W(()=>{r?.(p?new Error("Error loading program overview"):void 0)},[p,r]);const[g,b]=$(0),i=A(null);if(G(()=>{o&&t&&i?.current&&b(i.current.clientWidth)},[i,o,t]),w)return e.createElement(B,null);if(!o||!t)return null;const{programs:v,entityRefs:l,totalCount:y,endCursor:P,prevCursor:S}=o,f=l.length>=25?l:[...l,...Array.from({length:25-l.length},()=>{})],a=j(v,f,E),k=F(a);return e.createElement("div",{ref:i},e.createElement(H,{"aria-label":`Check results for ${m??n}`,key:`${n}|${m??""}`,item:!0,xs:12,style:{marginBottom:"1.5em"}},g>0&&e.createElement(L,{className:R.table,columnCount:f.length+1,columnWidth:s=>s===0?c.programTitle:c.checkResult,rowCount:a.length,rowHeight:s=>a[s].height,height:q(a)+D.paginationControl,width:g},k)),e.createElement(V,{...C,totalCount:y,defaultPageSize:d,endCursor:P,prevCursor:S,pageSize:u,labelRowsPerPage:"Entities per page:"}))};export{J as VirtualizedResultsTable};
|
|
2
|
-
//# sourceMappingURL=VirtualizedResultsTable.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{parseEntityRef as r}from"@backstage/catalog-model";import{humanizeEntityRef as n}from"@backstage/plugin-catalog-react";import{BadgeVariant as c}from"../../../graphql/generated/index.esm.js";const a=8,g=16,d={programTitle:70,levelTitle:30,check:42,entityRefFooter:100,paginationControl:50},i={programTitle:350+g*2,checkResult:42},h=e=>e.reduce((t,l)=>t+l.height,0),f=e=>e*i.checkResult+i.programTitle,m=e=>e.filter(t=>t!==void 0).map(t=>{const l=r(t);return n(l,{defaultKind:l.kind})}).reduce((t,l)=>t.length>l.length?t:l,""),p=e=>a*e+a,o="NoLevel",s=e=>({name:o,badge:{options:{level:0,color:""},variant:c.Medal},entityRef:e,ordinal:0});export{i as CellWidths,o as NO_LEVEL_BADGE_NAME,d as RowHeights,p as calculateHeightForRefTitle,h as calculateTableHeight,f as calculateTableWidth,m as findLongestRefTitle,s as generateNoLevelBadge};
|
|
2
|
-
//# sourceMappingURL=virtualizedTableUtils.esm.js.map
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/components/{CampaignsTab → CampaignsPage}/CampaignListPage/CampaignMetadata.esm.js
RENAMED
|
File without changes
|
/package/dist/components/{CampaignsTab → CampaignsPage}/CampaignListPage/CampaignSummaryCard.esm.js
RENAMED
|
File without changes
|
/package/dist/components/{CampaignsTab → CampaignsPage/CampaignListPage}/CampaignTypes.esm.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/components/{ChecksPage/MutateCheckViews → CheckForm}/types/ExpressionType.esm.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/components/{ResultsTable/CheckCell → OverviewTable/Cell}/CheckCellTooltip.esm.js
RENAMED
|
File without changes
|