@spotify/backstage-plugin-soundcheck 0.8.1 → 0.9.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.
@@ -0,0 +1,429 @@
1
+ import{createApiRef as Ne,createRouteRef as I,createSubRouteRef as k,createPlugin as Oe,createApiFactory as qe,discoveryApiRef as Ge,fetchApiRef as Te,createRoutableExtension as S,createComponentExtension as Ae,useApi as x,errorApiRef as Le,useRouteRef as j}from"@backstage/core-plugin-api";import{GraphQLClient as xe}from"graphql-request";import c from"graphql-tag";import n,{createContext as V,useState as b,useCallback as E,useContext as K,useRef as Be,useEffect as Me,Fragment as ze}from"react";import{QueryClient as Ue,QueryClientProvider as He,useQuery as _}from"@tanstack/react-query";import{memoize as We}from"lodash";import Qe from"@material-ui/core/styles/makeStyles";import{makeStyles as p,Typography as u,Modal as je,Box as J,Button as X,Fade as Ve,alpha as P,Tooltip as Ke,withStyles as D,Divider as _e}from"@material-ui/core";import{MarkdownContent as Y,Link as Z,EmptyState as ee,InfoCard as Je}from"@backstage/core-components";import{useEntity as te,humanizeEntityRef as Xe}from"@backstage/plugin-catalog-react";import{useAutoUpdatingRelativeTime as Ye,SpotifyLicenseBanner as Ze}from"@spotify/backstage-plugin-core";import{stringifyEntityRef as ae,parseEntityRef as et}from"@backstage/catalog-model";import{Alert as tt,Skeleton as f}from"@material-ui/lab";import{Link as at}from"react-router-dom";import F from"classnames";import rt from"@material-ui/icons/Schedule";import{DateTime as re}from"luxon";import nt from"@material-ui/icons/Check";import it from"@material-ui/icons/Close";import st from"@material-ui/icons/RemoveCircleOutline";import ct from"@material-ui/icons/HelpOutline";var ne=(e=>(e.Medal="MEDAL",e))(ne||{}),h=(e=>(e.Failed="FAILED",e.NotApplicable="NOT_APPLICABLE",e.NotReported="NOT_REPORTED",e.Passed="PASSED",e))(h||{});const ot=c`
2
+ fragment CertificationSummary on Certification {
3
+ entityRef
4
+ program {
5
+ id
6
+ name
7
+ }
8
+ highestLevel {
9
+ ordinal
10
+ name
11
+ description
12
+ badge {
13
+ ... on BadgeVariantMedal {
14
+ variant
15
+ options {
16
+ level
17
+ color
18
+ }
19
+ }
20
+ }
21
+ }
22
+ }
23
+ `,lt=c`
24
+ fragment check on Check {
25
+ id
26
+ name
27
+ description
28
+ }
29
+ `,dt=c`
30
+ fragment level on Level {
31
+ ordinal
32
+ name
33
+ description
34
+ checks {
35
+ ...check
36
+ }
37
+ }
38
+ ${lt}`,mt=c`
39
+ fragment CheckResultSummary on CheckResult {
40
+ id
41
+ name
42
+ result
43
+ timestamp
44
+ }
45
+ `,ut=c`
46
+ fragment LevelResultDetails on LevelResult {
47
+ ordinal
48
+ name
49
+ description
50
+ badge {
51
+ ... on BadgeVariantMedal {
52
+ variant
53
+ options {
54
+ level
55
+ color
56
+ }
57
+ }
58
+ }
59
+ certified
60
+ checks {
61
+ ...CheckResultSummary
62
+ }
63
+ }
64
+ ${mt}`,pt=c`
65
+ fragment CheckResultDetails on CheckResult {
66
+ id
67
+ name
68
+ description
69
+ result
70
+ timestamp
71
+ notes
72
+ }
73
+ `,gt=c`
74
+ fragment OverviewLevelResult on OverviewLevelResult {
75
+ ordinal
76
+ name
77
+ checks {
78
+ check {
79
+ id
80
+ name
81
+ description
82
+ }
83
+ results {
84
+ id
85
+ entityRef
86
+ result
87
+ }
88
+ }
89
+ }
90
+ `,ie=c`
91
+ fragment HighestLevel on LevelResult {
92
+ entityRef
93
+ ordinal
94
+ name
95
+ badge {
96
+ ... on BadgeVariantMedal {
97
+ variant
98
+ options {
99
+ color
100
+ level
101
+ }
102
+ }
103
+ }
104
+ }
105
+ `,ht=c`
106
+ mutation archiveCampaign($campaignId: String!) {
107
+ campaignArchived: archiveCampaign(campaignId: $campaignId)
108
+ }
109
+ `,ft=c`
110
+ mutation createCampaign($input: CampaignInput!) {
111
+ campaign: createCampaign(input: $input) {
112
+ id
113
+ }
114
+ }
115
+ `,yt=c`
116
+ mutation createCheck($input: CheckerInput!) {
117
+ check: createChecker(input: $input) {
118
+ id
119
+ filter
120
+ name
121
+ description
122
+ }
123
+ }
124
+ `,kt=c`
125
+ mutation createProgram($input: ProgramInput!) {
126
+ program: createProgram(input: $input) {
127
+ id
128
+ ownerEntityRef
129
+ name
130
+ description
131
+ documentationURL
132
+ }
133
+ }
134
+ `,vt=c`
135
+ mutation deleteCampaign($campaignId: String!) {
136
+ campaignDeleted: deleteCampaign(campaignId: $campaignId)
137
+ }
138
+ `,Ct=c`
139
+ mutation deleteChecker($checkerId: String!) {
140
+ deleteChecker(checkerId: $checkerId)
141
+ }
142
+ `,Rt=c`
143
+ mutation deleteProgram($programId: String!) {
144
+ programDeleted: deleteProgram(programId: $programId)
145
+ }
146
+ `,Et=c`
147
+ mutation updateCampaign($input: CampaignInput!) {
148
+ campaign: updateCampaign(input: $input) {
149
+ id
150
+ }
151
+ }
152
+ `,Pt=c`
153
+ mutation updateCheck($input: CheckerInput!) {
154
+ check: updateChecker(input: $input) {
155
+ id
156
+ filter
157
+ name
158
+ description
159
+ }
160
+ }
161
+ `,$t=c`
162
+ mutation updateCollectorConfig($input: CollectorConfigInput!) {
163
+ collector: setCollectorConfig(input: $input) {
164
+ id
165
+ factNames
166
+ collectionConfigs {
167
+ factRefs
168
+ filter
169
+ frequency
170
+ cache
171
+ }
172
+ config
173
+ configSchema
174
+ }
175
+ }
176
+ `,wt=c`
177
+ mutation updateProgram($input: ProgramInput!) {
178
+ program: updateProgram(input: $input) {
179
+ id
180
+ ownerEntityRef
181
+ name
182
+ description
183
+ documentationURL
184
+ }
185
+ }
186
+ `,It=c`
187
+ query getAllCertifications($entityRef: String!) {
188
+ certifications(entityRef: $entityRef, includeFilteredChecks: false) {
189
+ ...CertificationSummary
190
+ }
191
+ }
192
+ ${ot}`,St=c`
193
+ query getAllPrograms($programIds: [String!], $first: Int, $after: String) {
194
+ programs(programIds: $programIds, first: $first, after: $after) {
195
+ totalCount
196
+ endCursor
197
+ hasNextPage
198
+ edges {
199
+ cursor
200
+ program {
201
+ id
202
+ ownerEntityRef
203
+ name
204
+ description
205
+ documentationURL
206
+ filter
207
+ levels {
208
+ ...level
209
+ }
210
+ isEditable
211
+ }
212
+ }
213
+ }
214
+ }
215
+ ${dt}`,bt=c`
216
+ query getCampaigns($filter: ListCampaignsFilter!) {
217
+ campaigns(filter: $filter) {
218
+ totalCount
219
+ endCursor
220
+ hasNextPage
221
+ edges {
222
+ cursor
223
+ campaign {
224
+ id
225
+ name
226
+ description
227
+ ownerEntityRef
228
+ archived
229
+ startDate
230
+ targetCompletionDate
231
+ }
232
+ }
233
+ }
234
+ }
235
+ `,Dt=c`
236
+ query getCertificationDetails($entityRef: String!, $programId: String!) {
237
+ programCertification(
238
+ entityRef: $entityRef
239
+ programId: $programId
240
+ includeFilteredChecks: false
241
+ ) {
242
+ program {
243
+ id
244
+ name
245
+ description
246
+ documentationURL
247
+ }
248
+ highestLevel {
249
+ ...HighestLevel
250
+ }
251
+ levels {
252
+ ...LevelResultDetails
253
+ }
254
+ }
255
+ }
256
+ ${ie}
257
+ ${ut}`,Ft=c`
258
+ query getCheckResultDetails($entityRef: String!, $programId: String!, $checkId: String!) {
259
+ checkResult(entityRef: $entityRef, programId: $programId, checkId: $checkId) {
260
+ ...CheckResultDetails
261
+ }
262
+ }
263
+ ${pt}`,Nt=c`
264
+ query getCheckers($ids: [String!], $first: Int, $after: String, $orderAlphabetical: String, $searchByOwner: String, $searchByName: String) {
265
+ checkers(
266
+ ids: $ids
267
+ first: $first
268
+ after: $after
269
+ orderAlphabetical: $orderAlphabetical
270
+ searchByOwner: $searchByOwner
271
+ searchByName: $searchByName
272
+ ) {
273
+ totalCount
274
+ endCursor
275
+ hasNextPage
276
+ edges {
277
+ cursor
278
+ checker {
279
+ id
280
+ ownerEntityRef
281
+ supportChannel
282
+ name
283
+ description
284
+ rule
285
+ passedMessage
286
+ failedMessage
287
+ filter
288
+ isEditable
289
+ schedule
290
+ }
291
+ }
292
+ }
293
+ }
294
+ `,Ot=c`
295
+ query getEntityRefsForTechHealthFilter($ownerEntityRef: String) {
296
+ entityRefsForTechHealthFilter(ownerEntityRef: $ownerEntityRef)
297
+ }
298
+ `,qt=c`
299
+ query getFacetsForOwner($ownerEntityRef: String!) {
300
+ facetsForOwner(ownerEntityRef: $ownerEntityRef) {
301
+ types {
302
+ kind
303
+ type
304
+ count
305
+ }
306
+ }
307
+ }
308
+ `,Gt=c`
309
+ query getCollectors($ids: [String!]) {
310
+ collectors(ids: $ids) {
311
+ id
312
+ name
313
+ description
314
+ factNames
315
+ config
316
+ isConfigurable
317
+ isEditable
318
+ collectionConfigs {
319
+ factRefs
320
+ filter
321
+ frequency
322
+ cache
323
+ }
324
+ }
325
+ }
326
+ `,Tt=c`
327
+ query getFactSchemas($collectorId: String!, $factName: String!) {
328
+ factSchema(collectorId: $collectorId, factName: $factName) {
329
+ schema
330
+ }
331
+ }
332
+ `,At=c`
333
+ query getIndividualCheckPassRates($filter: Filter) {
334
+ individualCheckPassRates(filter: $filter) {
335
+ id
336
+ checkName
337
+ checkDescription
338
+ checkOwnerRef
339
+ snapshotPassRate
340
+ trendPassRates
341
+ }
342
+ }
343
+ `,Lt=c`
344
+ query getIndividualEntityPassRates($filter: Filter) {
345
+ individualEntityPassRates(filter: $filter) {
346
+ id
347
+ entityDescription
348
+ entityOwnerRef
349
+ snapshotPassRate
350
+ trendPassRates
351
+ }
352
+ }
353
+ `,xt=c`
354
+ query getIndividualGroupPassRates($filter: Filter) {
355
+ groupPassRates(filter: $filter) {
356
+ id
357
+ groupTitle
358
+ memberRefs
359
+ snapshotPassRate
360
+ trendPassRates
361
+ }
362
+ }
363
+ `,Bt=c`
364
+ query getIndividualTrackPassRate($filter: Filter) {
365
+ individualTrackPassRate(filter: $filter) {
366
+ id
367
+ trackName
368
+ trackDescription
369
+ trackOwnerRef
370
+ levels {
371
+ levelOrdinal
372
+ levelName
373
+ snapshotPassRate
374
+ trendPassRates
375
+ }
376
+ }
377
+ }
378
+ `,Mt=c`
379
+ query getOverallCheckPassRates($filter: Filter) {
380
+ overallCheckPassRates(filter: $filter)
381
+ }
382
+ `,zt=c`
383
+ query getOverallEntityPassRates($filter: Filter) {
384
+ overallEntityPassRates(filter: $filter) {
385
+ id
386
+ trendPassRates
387
+ }
388
+ }
389
+ `,Ut=c`
390
+ query getOverallGroupPassRates($filter: Filter) {
391
+ groupPassRates(filter: $filter, limit: 5) {
392
+ id
393
+ groupTitle
394
+ snapshotPassRate
395
+ }
396
+ }
397
+ `,Ht=c`
398
+ query getOverallTrackPassRate($filter: Filter) {
399
+ overallTrackPassRate(filter: $filter) {
400
+ levelOrdinal
401
+ snapshotPassRate
402
+ trendPassRates
403
+ }
404
+ }
405
+ `,Wt=c`
406
+ query getProgramOverviewForOwner($ownerEntityRef: String!, $facet: FacetInput) {
407
+ programOverviewForOwner(
408
+ ownerEntityRef: $ownerEntityRef
409
+ facet: $facet
410
+ includeFilteredChecks: false
411
+ ) {
412
+ programs {
413
+ program {
414
+ id
415
+ name
416
+ }
417
+ highestLevels {
418
+ ...HighestLevel
419
+ }
420
+ levels {
421
+ ...OverviewLevelResult
422
+ }
423
+ }
424
+ entityRefs
425
+ }
426
+ }
427
+ ${ie}
428
+ ${gt}`,Qt=(e,t,a)=>e();function jt(e,t=Qt){return{archiveCampaign(a,r){return t(i=>e.request(ht,a,{...r,...i}),"archiveCampaign","mutation")},createCampaign(a,r){return t(i=>e.request(ft,a,{...r,...i}),"createCampaign","mutation")},createCheck(a,r){return t(i=>e.request(yt,a,{...r,...i}),"createCheck","mutation")},createProgram(a,r){return t(i=>e.request(kt,a,{...r,...i}),"createProgram","mutation")},deleteCampaign(a,r){return t(i=>e.request(vt,a,{...r,...i}),"deleteCampaign","mutation")},deleteChecker(a,r){return t(i=>e.request(Ct,a,{...r,...i}),"deleteChecker","mutation")},deleteProgram(a,r){return t(i=>e.request(Rt,a,{...r,...i}),"deleteProgram","mutation")},updateCampaign(a,r){return t(i=>e.request(Et,a,{...r,...i}),"updateCampaign","mutation")},updateCheck(a,r){return t(i=>e.request(Pt,a,{...r,...i}),"updateCheck","mutation")},updateCollectorConfig(a,r){return t(i=>e.request($t,a,{...r,...i}),"updateCollectorConfig","mutation")},updateProgram(a,r){return t(i=>e.request(wt,a,{...r,...i}),"updateProgram","mutation")},getAllCertifications(a,r){return t(i=>e.request(It,a,{...r,...i}),"getAllCertifications","query")},getAllPrograms(a,r){return t(i=>e.request(St,a,{...r,...i}),"getAllPrograms","query")},getCampaigns(a,r){return t(i=>e.request(bt,a,{...r,...i}),"getCampaigns","query")},getCertificationDetails(a,r){return t(i=>e.request(Dt,a,{...r,...i}),"getCertificationDetails","query")},getCheckResultDetails(a,r){return t(i=>e.request(Ft,a,{...r,...i}),"getCheckResultDetails","query")},getCheckers(a,r){return t(i=>e.request(Nt,a,{...r,...i}),"getCheckers","query")},getEntityRefsForTechHealthFilter(a,r){return t(i=>e.request(Ot,a,{...r,...i}),"getEntityRefsForTechHealthFilter","query")},getFacetsForOwner(a,r){return t(i=>e.request(qt,a,{...r,...i}),"getFacetsForOwner","query")},getCollectors(a,r){return t(i=>e.request(Gt,a,{...r,...i}),"getCollectors","query")},getFactSchemas(a,r){return t(i=>e.request(Tt,a,{...r,...i}),"getFactSchemas","query")},getIndividualCheckPassRates(a,r){return t(i=>e.request(At,a,{...r,...i}),"getIndividualCheckPassRates","query")},getIndividualEntityPassRates(a,r){return t(i=>e.request(Lt,a,{...r,...i}),"getIndividualEntityPassRates","query")},getIndividualGroupPassRates(a,r){return t(i=>e.request(xt,a,{...r,...i}),"getIndividualGroupPassRates","query")},getIndividualTrackPassRate(a,r){return t(i=>e.request(Bt,a,{...r,...i}),"getIndividualTrackPassRate","query")},getOverallCheckPassRates(a,r){return t(i=>e.request(Mt,a,{...r,...i}),"getOverallCheckPassRates","query")},getOverallEntityPassRates(a,r){return t(i=>e.request(zt,a,{...r,...i}),"getOverallEntityPassRates","query")},getOverallGroupPassRates(a,r){return t(i=>e.request(Ut,a,{...r,...i}),"getOverallGroupPassRates","query")},getOverallTrackPassRate(a,r){return t(i=>e.request(Ht,a,{...r,...i}),"getOverallTrackPassRate","query")},getProgramOverviewForOwner(a,r){return t(i=>e.request(Wt,a,{...r,...i}),"getProgramOverviewForOwner","query")}}}var se=(e,t,a)=>{if(!t.has(e))throw TypeError("Cannot "+a)},s=(e,t,a)=>(se(e,t,"read from private field"),a?a.call(e):t.get(e)),$=(e,t,a)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,a)},B=(e,t,a,r)=>(se(e,t,"write to private field"),r?r.call(e,a):t.set(e,a),a),N,O,o,M,l;const q=Ne({id:"plugin.soundcheck"}),Vt=e=>"response"in e&&"errors"in e.response,Kt=e=>"response"in e&&"message"in e.response;class _t{constructor(t){$(this,N,void 0),$(this,O,void 0),$(this,o,void 0),$(this,M,r=>{var i,d,m;return Vt(r)?(m=(d=(i=r.response)==null?void 0:i.errors)==null?void 0:d[0].message)!=null?m:`${r}`:Kt(r)?r.response.message:`${r}`}),$(this,l,async r=>{try{return await r()}catch(i){throw new Error(`Error from Soundcheck backend: ${s(this,M).call(this,i)}`)}}),B(this,N,t.fetchApi),B(this,O,t.discoveryApi);const a=new xe("/graphql",{fetch:async(r,i)=>{const d=`${await s(this,O).getBaseUrl("soundcheck")}${r}`;return s(this,N).fetch(d,i)}});B(this,o,jt(a))}async getAllCertifications(t){return s(this,l).call(this,async()=>{const{certifications:a}=await s(this,o).getAllCertifications({entityRef:t});return a})}async getCertificationDetails(t,a){return s(this,l).call(this,async()=>{const{programCertification:r}=await s(this,o).getCertificationDetails({entityRef:t,programId:a});return r})}async getCheckResultDetails(t,a,r){return s(this,l).call(this,async()=>{const{checkResult:i}=await s(this,o).getCheckResultDetails({entityRef:t,programId:a,checkId:r});return i})}async getFacetsForOwner(t){return s(this,l).call(this,async()=>{const{facetsForOwner:a}=await s(this,o).getFacetsForOwner({ownerEntityRef:t});return a})}async getProgramOverviewForOwner(t,a){return s(this,l).call(this,async()=>{const{programOverviewForOwner:r}=await s(this,o).getProgramOverviewForOwner({ownerEntityRef:t,facet:a});return r})}async getAllPrograms(t,a,r){return s(this,l).call(this,async()=>{const{programs:i}=await s(this,o).getAllPrograms({programIds:t,first:a,after:r});return i})}async createProgram(t){return s(this,l).call(this,async()=>{const{program:a}=await s(this,o).createProgram({input:t});return a})}async updateProgram(t){return s(this,l).call(this,async()=>{const{program:a}=await s(this,o).updateProgram({input:t});return a})}async deleteProgram(t){return s(this,l).call(this,async()=>{const{programDeleted:a}=await s(this,o).deleteProgram({programId:t});return a})}async getChecks(t,a,r){return s(this,l).call(this,async()=>{const{checkers:i}=await s(this,o).getCheckers({ids:t,first:a,after:r});return i})}async createCheck(t){return s(this,l).call(this,async()=>{const{check:a}=await s(this,o).createCheck({input:t});return a})}async updateCheck(t){return s(this,l).call(this,async()=>{const{check:a}=await s(this,o).updateCheck({input:t});return a})}async deleteCheck(t){return s(this,l).call(this,async()=>await s(this,o).deleteChecker({checkerId:t}))}async getCollectors(t){return s(this,l).call(this,async()=>{const{collectors:a}=await s(this,o).getCollectors({ids:t});return a})}async getFactSchema(t,a){if(!(!t||!a))return s(this,l).call(this,async()=>{const{factSchema:r}=await s(this,o).getFactSchemas({collectorId:t,factName:a});return r})}async updateCollectorConfig(t){return s(this,l).call(this,async()=>{const{collector:a}=await s(this,o).updateCollectorConfig({input:t});return a})}async getOverallCheckPassRates(t){return s(this,l).call(this,async()=>await s(this,o).getOverallCheckPassRates({filter:t}))}async getIndividualCheckPassRates(t){return s(this,l).call(this,async()=>await s(this,o).getIndividualCheckPassRates({filter:t}))}async getOverallTrackPassRate(t){return s(this,l).call(this,async()=>await s(this,o).getOverallTrackPassRate({filter:t}))}async getIndividualTrackPassRate(t){return s(this,l).call(this,async()=>await s(this,o).getIndividualTrackPassRate({filter:t}))}async getOverallEntityPassRates(t){return s(this,l).call(this,async()=>await s(this,o).getOverallEntityPassRates({filter:t}))}async getIndividualEntityPassRates(t){return s(this,l).call(this,async()=>await s(this,o).getIndividualEntityPassRates({filter:t}))}async getOverallGroupPassRates(t){return s(this,l).call(this,async()=>await s(this,o).getOverallGroupPassRates({filter:t}))}async getIndividualGroupPassRates(t){return s(this,l).call(this,async()=>await s(this,o).getIndividualGroupPassRates({filter:t}))}async getEntityRefsForTechHealthFilter(t){return s(this,l).call(this,async()=>await s(this,o).getEntityRefsForTechHealthFilter({ownerEntityRef:t}))}async getCampaigns(t){return s(this,l).call(this,async()=>{const{campaigns:a}=await s(this,o).getCampaigns({filter:t});return a})}async createCampaign(t){return s(this,l).call(this,async()=>{const{campaign:a}=await s(this,o).createCampaign({input:t});return a})}async updateCampaign(t){return s(this,l).call(this,async()=>{const{campaign:a}=await s(this,o).updateCampaign({input:t});return a})}async deleteCampaign(t){return s(this,l).call(this,async()=>{const{campaignDeleted:a}=await s(this,o).deleteCampaign({campaignId:t});return a})}async archiveCampaign(t){return s(this,l).call(this,async()=>{const{campaignArchived:a}=await s(this,o).archiveCampaign({campaignId:t});return a})}}N=new WeakMap,O=new WeakMap,o=new WeakMap,M=new WeakMap,l=new WeakMap;const G=I({id:"soundcheck-entity"}),Jt=I({id:"soundcheck-group"}),ce=k({id:"soundcheck-entity-certification-track-redirect",parent:G,path:"/:trackId"}),oe=k({id:"soundcheck-entity-certification",parent:G,path:"/:trackId/:checkId"}),Xt=I({id:"soundcheck-overview"}),v=I({id:"soundcheck"}),Yt=k({id:"soundcheck-checks",parent:v,path:"/checks"});k({id:"soundcheck-tracks",parent:v,path:"/tracks"});const Zt=k({id:"soundcheck-track-details",parent:v,path:"/tracks/:trackId"}),ea=k({id:"soundcheck-campaigns",parent:v,path:"/campaigns"}),ta=k({id:"soundcheck-campaign-details",parent:v,path:"/campaigns/:campaignId"}),aa=k({id:"soundcheck-campaign-edit",parent:v,path:"/campaigns/:campaignId/edit"}),C=Oe({id:"soundcheck",apis:[qe({api:q,deps:{discoveryApi:Ge,fetchApi:Te},factory:e=>new _t(e)})],routes:{entityContent:G}}),ra=C.provide(S({name:"EntitySoundcheckContent",component:()=>import("./EntitySoundcheckContent-aecd6416.esm.js").then(e=>e.EntitySoundcheckContent),mountPoint:G})),na=C.provide(Ae({name:"EntitySoundcheckCard",component:{lazy:()=>import("./index-01c3a9f5.esm.js").then(e=>e.EntitySoundcheckCard)}})),ia=C.provide(S({name:"GroupSoundcheckContent",component:()=>import("./index-a224cc6f.esm.js").then(e=>e.FixedGroupOverviewPage),mountPoint:Jt})),sa=C.provide(S({name:"SoundcheckOverviewPage",component:()=>import("./index-a224cc6f.esm.js").then(e=>e.OverviewPage),mountPoint:Xt})),ca=C.provide(S({name:"SoundcheckRoutingPage",component:()=>import("./index-29e115b6.esm.js").then(e=>e.RoutingPage),mountPoint:v})),oa=We(e=>new Ue({defaultOptions:{queries:{refetchInterval:6e4,refetchIntervalInBackground:!1,refetchOnWindowFocus:"always",retry:2,retryDelay:t=>{const a=450+Math.ceil(Math.random()*100);return Math.min(a*2**t,3e4)},onError:t=>e.post(t)}}})),la=e=>{const t=x(Le),a=oa(t);return n.createElement(He,{client:a},e.children)};function le(e){const t=x(q),a=ae(e);return _(["soundcheck/certifications",a],async()=>t.getAllCertifications(a))}function de(e,t){const a=x(q),r=ae(e);return _(["soundcheck/certifications",r,t],async()=>a.getCertificationDetails(r,t),{enabled:!!t})}var me=(e=>(e.GetAllPrograms="soundcheck/programs",e.GetChecks="soundcheck/checks",e.GetCollectors="soundcheck/collectors",e.GetFactSchema="soundcheck/collectors/schema",e.GetEntityFacets="soundcheck/catalog/facets",e.GetSoftwareEntityRefsForUser="soundcheck/entities/softwareEntityRefsForUser",e.GetCampaigns="soundcheck/campaigns",e.GetOverallCheckPassRates="soundcheck/charts/overallCheckPassRates",e.GetIndividualCheckPassRate="soundcheck/charts/getIndividualCheckPassRate",e.GetOverallTrackPassRate="soundcheck/charts/overallTrackPassRate",e.GetIndividualTrackPassRate="soundcheck/charts/individualTrackPassRate",e.GetOverallEntityPassRates="soundcheck/charts/overallEntityPassRates",e.GetIndividualEntityPassRate="soundcheck/charts/individualEntityPassRate",e.GetOverallGroupPassRates="soundcheck/charts/overallGroupPassRates",e.GetIndividualGroupPassRates="soundcheck/charts/individualGroupPassRates",e.EntityByRef="soundcheck/catalog/entityByRef",e.EntitiesByRefs="soundcheck/catalog/entitiesByRef",e))(me||{}),ue=(e=>(e.DeleteCheck="soundcheck/deleteCheck",e.CreateCheck="soundcheck/createCheck",e.UpdateCheck="soundcheck/updateCheck",e.DeleteProgram="soundcheck/deleteProgram",e.CreateProgram="soundcheck/createProgram",e.UpdateProgram="soundcheck/updateProgram",e.UpdateCollectorConfig="soundcheck/updateCollectorConfig",e))(ue||{});const da=p(e=>({root:{padding:e.spacing(3)},icon:{display:"none"},message:{padding:0},type:{fontWeight:700,lineHeight:1.75}})),T=e=>{const{type:t,...a}=da();return n.createElement(tt,{severity:e.severity,elevation:1,classes:a,onClose:e.onClose},n.createElement(u,{classes:{root:t}},e.title),e.children)},pe=V({}),ma=e=>{const[t,a]=b(),r=E(d=>{a(d)},[]),i=E(()=>{a(null)},[]);return n.createElement(pe.Provider,{value:{showAlert:r,clearAlert:i}},t&&n.createElement(T,{severity:t.severity,title:t.title,onClose:i},t.message),e.children)},ua=()=>K(pe),pa=p(e=>({modalContent:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",padding:"25px",backgroundColor:e.palette.type==="dark"?e.palette.grey[800]:e.palette.grey[200]},modalButtons:{display:"flex",justifyContent:"space-evenly","& button":{width:"40%",maxWidth:"185px"}},modalMessage:{margin:"15px 0 35px"}})),ge=V({}),ga=e=>{const t=pa(),[a,r]=b(!1),[i,d]=b(),m=Be(),g=E(({title:w,message:be,error:De})=>(d({title:w,message:be,error:De}),r(!0),new Promise(Fe=>{m.current=Fe})),[]),R=E(()=>{m.current&&m.current(!0),r(!1)},[]),y=E(()=>{m.current&&m.current(!1),r(!1)},[]);return n.createElement(ge.Provider,{value:{showModal:g}},e.children,i&&n.createElement(je,{open:a,onClose:y,"aria-labelledby":"confirmation-modal-title","aria-describedby":"confirmation-modal-description"},n.createElement(J,{className:t.modalContent},n.createElement(u,{id:"confirmation-modal-title",variant:"h6"},i.title),n.createElement(u,{className:t.modalMessage,id:"confirmation-modal-description",variant:"body1"},i.message),n.createElement("div",{className:t.modalButtons},!i.error&&n.createElement(X,{onClick:y,variant:"contained","aria-label":"cancel"},"Cancel"),n.createElement(X,{color:"primary",onClick:R,variant:"contained","aria-label":"confirm"},i.error?"Ok":"Confirm")))))},ha=()=>K(ge),he=24,fa=11,z=e=>e==="small"?1:2,ya=p({root:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",borderRadius:"50%",borderWidth:"2px",fontWeight:700,width:({size:e})=>`${he*z(e)}px`,height:({size:e})=>`${he*z(e)}px`,fontSize:({size:e})=>`${fa*z(e)}px`}}),fe=({className:e,label:t,size:a="small"})=>{const r=ya({size:a});return n.createElement("span",{className:F(e,r.root),role:"img","aria-label":`${t} badge`},t)},ka=p(e=>({root:{background:({color:t})=>t,color:e.palette.common.black,borderColor:e.palette.common.black,borderStyle:"solid","&::after":{position:"absolute",display:"block",content:'""',top:0,left:0,width:"100%",height:"100%",borderRadius:"50%",boxShadow:["inset 0 -0.18em 0 0 rgba(0, 0, 0, 0.25)","inset 0px 0.18em 0px 0px rgba(255, 255, 255, 0.5)","inset 0px 1.3em 0px -0.5em rgba(255, 255, 255, 0.2)"].join(",")}}})),U=({className:e,badge:t,size:a="small"})=>{const r=ka({color:t.options.color,size:a});return n.createElement(fe,{className:F(e,r.root),size:a,label:`L${t.options.level}`})},va=p({root:{borderColor:"currentColor",borderStyle:"dashed"}}),ye=({className:e,size:t="small"})=>{const a=va();return n.createElement(fe,{className:F(e,a.root),size:t,label:"NL"})},H=p(e=>({description:{padding:0,margin:0,display:"block","& p":{margin:0}},root:{padding:e.spacing(2),margin:0,display:"grid",gridTemplateColumns:"min-content auto",gridGap:e.spacing(2)},title:{fontSize:e.typography.pxToRem(18),fontWeight:700,lineHeight:1.235,marginBottom:"6px"},level:{textTransform:"uppercase",color:e.palette.text.secondary,fontWeight:700,letterSpacing:"1px"}}));function Ca({description:e,documentationUrl:t}){const a=H();return t?n.createElement("div",{className:a.description},n.createElement(Y,{content:e}),n.createElement(Z,{to:t},"Learn more")):n.createElement("div",{className:a.description},n.createElement(Y,{content:e}))}const ke=({name:e,level:t,badge:a,description:r,documentationUrl:i})=>{const d=H();return n.createElement("div",{className:d.root},a?n.createElement(U,{size:"large",badge:a}):n.createElement(ye,{size:"large"}),n.createElement("div",null,n.createElement(u,{variant:"caption",className:d.level},t!=null?t:"No Level"),n.createElement(u,{className:d.title},e),r&&n.createElement(Ca,{description:r,documentationUrl:i})))},A=({children:e})=>{const[t,a]=b(!1);return Me(()=>{const r=setTimeout(()=>{a(!0)},250);return()=>clearTimeout(r)},[]),n.createElement(Ve,{in:t,timeout:250},e)},W=({hideDescription:e=!1})=>{const t=H();return n.createElement(A,null,n.createElement("div",{className:t.root},n.createElement(f,{width:44,height:44}),n.createElement("div",null,n.createElement(u,{variant:"caption",className:t.level},n.createElement(f,{width:100})),n.createElement(u,{variant:"h4",className:t.title},n.createElement(f,{width:300})),!e&&n.createElement(u,{variant:"body2"},n.createElement(f,null)))))},ve=p(e=>{const t=e.palette.type==="dark"?e.palette.grey[700]:e.palette.grey[100];return{wrapper:{backgroundColor:t,color:P(e.palette.getContrastText(t),.8),fontSize:e.typography.caption.fontSize,minHeight:"auto",borderTop:`1px solid ${e.palette.divider}`,borderBottom:`1px solid ${e.palette.divider}`,padding:e.spacing(1),display:"grid",gridTemplateAreas:({badge:a})=>[`"${a?"badge":"title"} title"`,`"${a?".":"description"} description"`].join(" "),gridTemplateColumns:"auto 1fr"},title:{gridArea:"title",textTransform:"uppercase",fontWeight:"bold",color:P(e.palette.getContrastText(t),.8),fontSize:e.typography.body2.fontSize,paddingTop:e.spacing(.5),paddingBottom:e.spacing(.5),lineHeight:1},badge:{gridArea:"badge",marginRight:e.spacing(1)},description:{gridArea:"description",color:P(e.palette.getContrastText(t),.8),fontSize:e.typography.subtitle2.fontSize,marginTop:e.spacing(1)}}}),Ra=e=>{const t=ve({badge:e.badge});return n.createElement("div",{className:t.wrapper},e.badge?n.createElement(U,{className:t.badge,badge:e.badge}):null,n.createElement(u,{className:t.title},e.title),e.description?n.createElement(u,{className:t.description},e.description):null)},Ea=()=>{const e=ve({});return n.createElement(A,null,n.createElement("div",{className:e.wrapper},n.createElement(f,{className:e.title}),n.createElement(u,{className:e.description},n.createElement(f,null))))},Pa=p(e=>({root:{display:"inline-flex",alignItems:"center",gap:e.spacing(1)}})),Ce=({timestamp:e,description:t})=>{const a=Pa(),r=re.fromISO(e).toLocaleString(re.DATETIME_FULL),i=Ye(e),d=t?`${t}: ${i}`:void 0;return n.createElement("div",{className:a.root},n.createElement(Ke,{title:r},n.createElement(u,{variant:"caption","aria-label":d},i)),n.createElement(rt,null))},$a=e=>({[h.Passed]:"Check passed",[h.NotReported]:"Check not reported",[h.Failed]:"Check failed",[h.NotApplicable]:"Check not applicable"})[e],wa=D(e=>({root:{color:e.palette.success.main}}))(nt),Ia=D(e=>({root:{color:e.palette.error.main}}))(it),Sa=D(e=>({root:{color:e.palette.info.main}}))(ct),ba=D(e=>({root:{color:e.palette.text.disabled}}))(st),Re=({result:e,className:t})=>{const a={className:t,"aria-label":$a(e),"aria-hidden":!1};return e===h.Passed?n.createElement(wa,{...a}):e===h.NotReported?n.createElement(Sa,{...a}):e===h.Failed?n.createElement(Ia,{...a}):e===h.NotApplicable?n.createElement(ba,{...a}):null},Ee=p(e=>({root:{display:"grid",width:"100%",gridTemplateColumns:"auto 1fr auto",gridColumnGap:e.spacing(1),padding:e.spacing(1),alignItems:"center","&.selected":{backgroundColor:P(e.palette.primary[e.palette.type],.2)},"&:hover, &:active, &:focus":{backgroundColor:P(e.palette.primary[e.palette.type],.3)}}})),Da=({className:e,href:t,children:a})=>t?n.createElement(at,{to:t,className:e},a):n.createElement("div",{className:e},a),Fa=({result:e,name:t,timestamp:a,selected:r=!1,href:i})=>{const d=Ee(),m=F(d.root,{selected:r});return n.createElement(Da,{href:i,className:m},n.createElement(Re,{result:e}),n.createElement(u,{variant:"body2"},t),a?n.createElement(Ce,{timestamp:a}):null)},Q=()=>{const e=Ee();return n.createElement(A,null,n.createElement("div",{className:e.root},n.createElement(f,{width:24,height:24}),n.createElement(u,{variant:"body2"},n.createElement(f,null)),n.createElement(f,{width:100,height:24})))},Na=()=>{const e=Pe();return n.createElement("div",{className:e.root},n.createElement(W,null),new Array(3).fill(null).map((t,a)=>n.createElement(n.Fragment,{key:`skeleton-level-${a}`},n.createElement(Ea,null),n.createElement("ul",{className:e.checks},n.createElement(Q,null),n.createElement(Q,null),n.createElement(Q,null)))))},Oa=p(e=>({noChecks:{padding:e.spacing(1)},checks:{padding:0,margin:0,flex:1,listStyle:"none"},checkItem:{borderBottom:`1px solid ${e.palette.divider}`,"&:last-of-type":{borderBottom:"0"}}})),qa=({checks:e,trackId:t,checkId:a})=>{const r=Oa(),i=j(oe);return e.length?n.createElement("ul",{className:r.checks},e.map(d=>n.createElement("li",{key:d.id,className:r.checkItem},n.createElement(Fa,{...d,selected:d.id===a,href:i({trackId:t,checkId:d.id})})))):n.createElement(u,{variant:"body2",className:r.noChecks},"No applicable checks at this level.")},Ga=({level:e,checkId:t,trackId:a})=>{var r;return n.createElement(n.Fragment,null,n.createElement(Ra,{badge:e.badge,title:e.name,description:e.description}),n.createElement(qa,{checks:(r=e.checks)!=null?r:[],trackId:a,checkId:t}))},Pe=p(e=>({root:{borderRight:`1px solid ${e.palette.divider}`},checks:{padding:0,margin:0,flex:1,listStyle:"none"}})),Ta=({trackId:e,checkId:t})=>{var a,r;const i=Pe(),{entity:d}=te(),{data:m,isLoading:g,isError:R}=de(d,e);return R?n.createElement("div",{className:i.root},n.createElement(J,{padding:2},n.createElement(T,{severity:"error",title:"Error loading certification"}))):g||!e?n.createElement(Na,null):m?n.createElement("div",{className:i.root},n.createElement(ke,{name:m.program.name,level:(a=m.highestLevel)==null?void 0:a.name,badge:(r=m.highestLevel)==null?void 0:r.badge,description:m.program.description,documentationUrl:m.program.documentationURL}),m==null?void 0:m.levels.map(y=>n.createElement(Ga,{key:y.ordinal,level:y,checkId:t,trackId:e}))):null},Aa=()=>n.createElement(n.Fragment,null,n.createElement(W,{hideDescription:!0}),n.createElement(W,{hideDescription:!0})),$e=({className:e,description:t="There are no tracks configured that apply to this entity."})=>n.createElement("div",{className:e},n.createElement(ee,{title:"No certifications available",missing:"data",description:t})),La=({ownerEntityRef:e,selectGroupHint:t})=>e?n.createElement(ee,{missing:"data",title:"Missing entities",description:n.createElement(n.Fragment,null,"The group '",Xe(et(e),{defaultKind:"Group"}),"' doesn't own any entities.",t&&n.createElement(n.Fragment,null,n.createElement("br",null),n.createElement("br",null),t))}):null,we="soundcheck",Ie="Submitted check results will still be stored, but it will not be possible to view certifications or individual results until a valid license is present.",Se=Qe(e=>({certificationWrapper:{display:"flex",justifyContent:"space-between",alignItems:"center"},infoCard:{display:"grid",gridRowGap:e.spacing(2)},emptyState:{"& > div":{backgroundColor:e.palette.background.paper}}})),L=({children:e,title:t})=>{const a=Se();return n.createElement(Je,{title:t},n.createElement("div",{className:a.infoCard},n.createElement(Ze,{inline:!0,backend:we,invalidLicenseMessage:Ie}),e))},xa=({title:e="Soundcheck"})=>{const{entity:t}=te(),a=Se(),{data:r,isError:i,isLoading:d}=le(t),m=j(ce);return i?n.createElement(L,{title:e},n.createElement(T,{severity:"error",title:"Error loading certifications"})):d||!r?n.createElement(L,{title:e},n.createElement(Aa,null)):r.length===0?n.createElement(L,{title:e},n.createElement($e,{className:a.emptyState})):n.createElement(L,{title:e},r.map((g,R)=>{var y,w;return n.createElement(ze,{key:g.program.name},n.createElement("div",{className:a.certificationWrapper,"data-testid":"soundcheck-track-row"},n.createElement(ke,{key:g.program.id,name:g.program.name,badge:(y=g.highestLevel)==null?void 0:y.badge,level:(w=g.highestLevel)==null?void 0:w.name}),n.createElement(Z,{to:m({trackId:g.program.id})},"View Details")),R<r.length-1?n.createElement(_e,null):null)}))};export{T as A,ne as B,Ta as C,ra as E,A as F,ia as G,U as L,ue as M,ye as N,me as Q,h as R,la as S,Ce as a,le as b,ce as c,$e as d,we as e,oe as f,xa as g,Re as h,Ie as i,La as j,ua as k,ha as l,Yt as m,ta as n,aa as o,ea as p,ma as q,C as r,q as s,Zt as t,de as u,na as v,ga as w,sa as x,ca as y};
429
+ //# sourceMappingURL=index-6e141f2f.esm.js.map
@@ -1,2 +1,2 @@
1
- import e,{useState as n}from"react";import{Page as g,Header as f}from"@backstage/core-components";import{SpotifyLicenseBanner as s}from"@spotify/backstage-plugin-core";import{u as h,U as P,G as S,O as c}from"./OverviewPageContent-7cf86a3a.esm.js";import{S as l,w as y,e as p,i as u}from"./index-95ae147b.esm.js";import{stringifyEntityRef as k}from"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import{useEntity as w}from"@backstage/plugin-catalog-react";import{makeStyles as C}from"@material-ui/core";import{Routes as G,Route as L}from"react-router-dom";import"@material-ui/lab/Autocomplete";import"react-use/lib/useAsync";import"./RefetchingIndicator-b042ec49.esm.js";import"react-use/lib/useDebounce";import"lodash";import"@material-ui/lab";import"react-window";import"graphql-request";import"graphql-tag";import"@material-ui/core/styles/makeStyles";import"classnames";import"@material-ui/icons/Schedule";import"luxon";import"@material-ui/icons/Check";import"@material-ui/icons/Close";import"@material-ui/icons/RemoveCircleOutline";import"@material-ui/icons/HelpOutline";const O=C(t=>({overviewContainer:{padding:t.spacing(1,3)}})),b=t=>{const{title:i="Soundcheck"}=t,o=O(),[r,a]=h(),{group:d}=r,[E,v]=n(void 0);return e.createElement(l,null,e.createElement(P,null,e.createElement(y,null,e.createElement(g,{themeId:"website"},e.createElement(s,{backend:p,invalidLicenseMessage:u}),e.createElement(f,{title:i},e.createElement(S,{onChange:m=>{m&&a({...r,group:m})},initialValue:d,setError:v})),e.createElement("div",{className:o.overviewContainer},e.createElement(c,{groupSelectorError:E,searchParams:r,setSearchParams:a}))))))},x=()=>{const{entity:t}=w(),i={group:k(t)},[o,r]=n(i);return e.createElement(l,null,e.createElement(G,null,e.createElement(L,{path:"/*",element:e.createElement(e.Fragment,null,e.createElement(s,{backend:p,invalidLicenseMessage:u,inline:!0}),e.createElement(c,{searchParams:o,setSearchParams:r,isFixedGroup:!0}))})))};export{x as FixedGroupOverviewPage,b as OverviewPage};
2
- //# sourceMappingURL=index-fcd50c7d.esm.js.map
1
+ import e,{useState as n}from"react";import{Page as g,Header as f}from"@backstage/core-components";import{SpotifyLicenseBanner as s}from"@spotify/backstage-plugin-core";import{u as h,U as P,G as S,O as c}from"./OverviewPageContent-433c8dc6.esm.js";import{S as l,w as y,e as p,i as u}from"./index-6e141f2f.esm.js";import{stringifyEntityRef as k}from"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import{useEntity as w}from"@backstage/plugin-catalog-react";import{makeStyles as C}from"@material-ui/core";import{Routes as G,Route as L}from"react-router-dom";import"@material-ui/lab/Autocomplete";import"react-use/lib/useAsync";import"./RefetchingIndicator-3707a744.esm.js";import"react-use/lib/useDebounce";import"lodash";import"@material-ui/lab";import"react-window";import"graphql-request";import"graphql-tag";import"@material-ui/core/styles/makeStyles";import"classnames";import"@material-ui/icons/Schedule";import"luxon";import"@material-ui/icons/Check";import"@material-ui/icons/Close";import"@material-ui/icons/RemoveCircleOutline";import"@material-ui/icons/HelpOutline";const O=C(t=>({overviewContainer:{padding:t.spacing(1,3)}})),b=t=>{const{title:i="Soundcheck"}=t,o=O(),[r,a]=h(),{group:d}=r,[E,v]=n(void 0);return e.createElement(l,null,e.createElement(P,null,e.createElement(y,null,e.createElement(g,{themeId:"website"},e.createElement(s,{backend:p,invalidLicenseMessage:u}),e.createElement(f,{title:i},e.createElement(S,{onChange:m=>{m&&a({...r,group:m})},initialValue:d,setError:v})),e.createElement("div",{className:o.overviewContainer},e.createElement(c,{groupSelectorError:E,searchParams:r,setSearchParams:a}))))))},x=()=>{const{entity:t}=w(),i={group:k(t)},[o,r]=n(i);return e.createElement(l,null,e.createElement(G,null,e.createElement(L,{path:"/*",element:e.createElement(e.Fragment,null,e.createElement(s,{backend:p,invalidLicenseMessage:u,inline:!0}),e.createElement(c,{searchParams:o,setSearchParams:r,isFixedGroup:!0}))})))};export{x as FixedGroupOverviewPage,b as OverviewPage};
2
+ //# sourceMappingURL=index-a224cc6f.esm.js.map
package/dist/index.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import{p as f,E as l,G as q,q as w,r as x,o as O}from"./esm/index-95ae147b.esm.js";import"react";import"@backstage/core-plugin-api";import"graphql-request";import"graphql-tag";import"@tanstack/react-query";import"lodash";import"@material-ui/core/styles/makeStyles";import"@material-ui/core";import"@backstage/core-components";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-core";import"@backstage/catalog-model";import"@material-ui/lab";import"react-router-dom";import"classnames";import"@material-ui/icons/Schedule";import"luxon";import"@material-ui/icons/Check";import"@material-ui/icons/Close";import"@material-ui/icons/RemoveCircleOutline";import"@material-ui/icons/HelpOutline";export{f as EntitySoundcheckCard,l as EntitySoundcheckContent,q as GroupSoundcheckContent,w as SoundcheckOverviewPage,x as SoundcheckRoutingPage,O as soundcheckPlugin};
1
+ import{v as G,E as f,G as l,x as w,y as O,r as R}from"./esm/index-6e141f2f.esm.js";import"react";import"@backstage/core-plugin-api";import"graphql-request";import"graphql-tag";import"@tanstack/react-query";import"lodash";import"@material-ui/core/styles/makeStyles";import"@material-ui/core";import"@backstage/core-components";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-core";import"@backstage/catalog-model";import"@material-ui/lab";import"react-router-dom";import"classnames";import"@material-ui/icons/Schedule";import"luxon";import"@material-ui/icons/Check";import"@material-ui/icons/Close";import"@material-ui/icons/RemoveCircleOutline";import"@material-ui/icons/HelpOutline";export{G as EntitySoundcheckCard,f as EntitySoundcheckContent,l as GroupSoundcheckContent,w as SoundcheckOverviewPage,O as SoundcheckRoutingPage,R as soundcheckPlugin};
2
2
  //# sourceMappingURL=index.esm.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@spotify/backstage-plugin-soundcheck",
3
3
  "description": "Ensure quality, reliability and alignment of software development with codified checks and guidance.",
4
- "version": "0.8.1",
4
+ "version": "0.9.0",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "homepage": "https://backstage.spotify.com",
7
7
  "main": "dist/index.esm.js",
@@ -27,20 +27,21 @@
27
27
  "prepare": "yarn generate"
28
28
  },
29
29
  "dependencies": {
30
- "@backstage/catalog-client": "^1.4.4",
31
- "@backstage/catalog-model": "^1.4.2",
32
- "@backstage/core-components": "^0.13.5",
33
- "@backstage/core-plugin-api": "^1.6.0",
34
- "@backstage/plugin-catalog-react": "^1.8.4",
35
- "@backstage/plugin-permission-react": "^0.4.15",
36
- "@backstage/theme": "^0.4.2",
30
+ "@backstage/catalog-client": "^1.4.5",
31
+ "@backstage/catalog-model": "^1.4.3",
32
+ "@backstage/core-components": "^0.13.6",
33
+ "@backstage/core-plugin-api": "^1.7.0",
34
+ "@backstage/plugin-catalog-react": "^1.8.5",
35
+ "@backstage/plugin-permission-react": "^0.4.16",
36
+ "@backstage/theme": "^0.4.3",
37
37
  "@backstage/types": "^1.1.1",
38
38
  "@material-ui/core": "^4.12.2",
39
39
  "@material-ui/icons": "^4.9.1",
40
40
  "@material-ui/lab": "4.0.0-alpha.61",
41
- "@spotify/backstage-plugin-core": "^0.5.6",
42
- "@spotify/backstage-plugin-soundcheck-common": "^0.8.1",
41
+ "@spotify/backstage-plugin-core": "^0.5.7",
42
+ "@spotify/backstage-plugin-soundcheck-common": "^0.9.0",
43
43
  "@tanstack/react-query": "^4.6.1",
44
+ "@types/react-csv": "^1.1.6",
44
45
  "classnames": "^2.3.2",
45
46
  "cron-validate": "^1.4.5",
46
47
  "cronstrue": "^2.28.0",
@@ -50,6 +51,7 @@
50
51
  "luxon": "^3.1.1",
51
52
  "react-circular-progressbar": "^2.1.0",
52
53
  "react-confetti": "^6.1.0",
54
+ "react-csv": "^2.2.2",
53
55
  "react-dnd": "^16.0.1",
54
56
  "react-dnd-html5-backend": "^16.0.1",
55
57
  "react-hook-form": "^7.19.5",
@@ -63,17 +65,17 @@
63
65
  "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
64
66
  },
65
67
  "devDependencies": {
66
- "@backstage/cli": "^0.22.13",
67
- "@backstage/core-app-api": "^1.10.0",
68
- "@backstage/dev-utils": "^1.0.21",
69
- "@backstage/test-utils": "^1.4.3",
68
+ "@backstage/cli": "^0.23.0",
69
+ "@backstage/core-app-api": "^1.11.0",
70
+ "@backstage/dev-utils": "^1.0.22",
71
+ "@backstage/e2e-test-utils": "^0.1.0",
72
+ "@backstage/test-utils": "^1.4.4",
70
73
  "@graphql-codegen/cli": "^5.0.0",
71
74
  "@graphql-codegen/typescript": "^4.0.0",
72
75
  "@graphql-codegen/typescript-graphql-request": "^5.0.0",
73
76
  "@graphql-codegen/typescript-operations": "^4.0.0",
74
77
  "@playwright/test": "^1.32.3",
75
- "@sp4b-dev/e2e-test-utils": "^0.0.0",
76
- "@spotify/backstage-plugin-core-common": "^0.5.6",
78
+ "@spotify/backstage-plugin-core-common": "^0.5.7",
77
79
  "@testing-library/jest-dom": "^6.0.0",
78
80
  "@testing-library/react": "^12.1.5",
79
81
  "@testing-library/react-hooks": "^8.0.1",
@@ -1,2 +0,0 @@
1
- import t,{useState as I,useEffect as v,useMemo as O,useCallback as j,createContext as me,useContext as ue,memo as b,Fragment as ge}from"react";import{useSearchParams as he}from"react-router-dom";import{makeStyles as f,alpha as M,TextField as fe,CircularProgress as ye,Tooltip as K,LinearProgress as ve,withStyles as ke,Grid as C,Typography as k}from"@material-ui/core";import Ee from"@material-ui/lab/Autocomplete";import{stringifyEntityRef as W,parseEntityRef as w}from"@backstage/catalog-model";import{useApi as E,identityApiRef as U,useRouteRef as P,configApiRef as be}from"@backstage/core-plugin-api";import{useQuery as A}from"@tanstack/react-query";import{s as D,R as N,h as Ce,B as we,L as _,N as Q,A as Ne,d as Re,j as $e}from"./index-95ae147b.esm.js";import{catalogApiRef as G,humanizeEntityRef as T,entityRouteRef as F}from"@backstage/plugin-catalog-react";import xe from"react-use/lib/useAsync";import{HeaderTabs as q,MarkdownContent as Te,Link as B,EmptyState as Le}from"@backstage/core-components";import{R as Ie}from"./RefetchingIndicator-b042ec49.esm.js";import{countBy as J}from"lodash";import{Skeleton as S}from"@material-ui/lab";import{VariableSizeGrid as Oe}from"react-window";function X(e,r){const a=E(D);return A(["soundcheck/track-overview-for-owner",e,r],async()=>a.getProgramOverviewForOwner(e,r),{enabled:!!e&&!!(r!=null&&r.kind)})}function Y(){const e=E(G);return A(["soundcheck/all-groups"],async()=>{const{items:r}=await e.getEntities({filter:{kind:"Group"},fields:["spec.profile.displayName","metadata.title","metadata.name","metadata.namespace","kind"]});return r.filter(a=>(a==null?void 0:a.kind)==="Group").map(a=>{var n,l,i,s;return{name:(s=(i=(l=(n=a.spec)==null?void 0:n.profile)==null?void 0:l.displayName)!=null?i:a.metadata.title)!=null?s:a.metadata.name,ref:W(a)}})},{staleTime:5*60*1e3,refetchInterval:!1,refetchOnWindowFocus:!1})}function Pe(){const e=E(U),r=E(G);return A(["soundcheck/user-groups-claims"],async()=>{const{ownershipEntityRefs:a}=await e.getBackstageIdentity();return(await r.getEntitiesByRefs({entityRefs:a})).items.filter(n=>(n==null?void 0:n.kind)==="Group").map(n=>{var l,i,s,c;return{name:(c=(s=(i=(l=n.spec)==null?void 0:l.profile)==null?void 0:i.displayName)!=null?s:n.metadata.title)!=null?c:n.metadata.name,ref:W(n)}})})}function Ae(e){const r=E(D);return A(["soundcheck/facets-for-owner",e],async()=>r.getFacetsForOwner(e),{enabled:!!e})}const Fe=()=>{const[e,r]=he(),a=Object.fromEntries(e.entries()),[n,l]=I(a);return v(()=>{r(n,{replace:!0})},[n]),[n,l]},Z=()=>{const{data:e,isLoading:r,isError:a}=Pe(),{data:n,isLoading:l,isError:i}=Y();return{options:O(()=>{const s=[];return e&&s.push(...e.map(({name:c,ref:o})=>({name:c,ref:o,key:"My Groups"}))),n&&s.push(...n.map(({name:c,ref:o})=>({name:c,ref:o,key:"All Groups"}))),s},[e,n]),isLoading:r||l,isError:a||i}},Be=f(e=>({root:{width:"100%",minWidth:250},textField:{"& $notchedOutline":{borderColor:M(e.page.fontColor,.25)},"&:hover $notchedOutline":{borderColor:e.page.fontColor}},input:{backgroundColor:"transparent",color:e.page.fontColor},clearIndicator:{color:e.page.fontColor},popupIndicator:{color:e.page.fontColor},notchedOutline:{}})),Se=e=>{const{onChange:r,initialValue:a,setError:n}=e,{options:l,isLoading:i,isError:s}=Z(),c=Be(),[o,d]=I(null);v(()=>{if(!i&&l!=null&&l.length&&!o){const m=a?l.find(p=>p.ref===a):l[0];m&&(d(m),r==null||r(m.ref))}},[i,l,o,r,a]);const u=j((m,p)=>{d(p),r==null||r(p==null?void 0:p.ref)},[r,d]);return v(()=>{n==null||n(s?new Error("Error loading groups"):void 0)},[s,n]),s?null:t.createElement(Ee,{"aria-label":"Current group",className:c.root,classes:{clearIndicator:c.clearIndicator,popupIndicator:c.popupIndicator},disableClearable:!0,options:l!=null?l:[],loading:i,groupBy:m=>m.key,value:o,freeSolo:!1,onChange:u,getOptionLabel:m=>m.name,renderInput:m=>t.createElement(fe,{...m,variant:"outlined",placeholder:i?"Loading":"Select a group",className:c.textField,InputProps:{...m.InputProps,className:c.input,classes:{notchedOutline:c.notchedOutline},endAdornment:t.createElement(t.Fragment,null,i?t.createElement(ye,{color:"inherit",size:20}):null,m.InputProps.endAdornment)}})})},ee={loading:!1},te=me(ee),ze=()=>ue(te),He=({children:e})=>{const[r,a]=I(ee),n=E(G),l=E(U),{value:i,loading:s,error:c}=xe(async()=>{const[{token:o},d]=await Promise.all([l.getCredentials(),l.getBackstageIdentity()]);return o?await n.getEntityByRef(d.userEntityRef):null},[n,l]);return v(()=>{if(i){const o=W(i);a({user:i,userEntityRef:o,loading:s,error:c})}else a({loading:s,error:c})},[i,s,c]),t.createElement(te.Provider,{value:r},e)},We=e=>({key:`skeleton${e}`,label:"",id:`skeleton${e}`}),Ge=()=>{const e=Array.from({length:4},(r,a)=>We(a));return t.createElement(q,{tabs:e})},Ve=f(e=>({root:{borderTop:`1px solid ${e.palette.divider}`,borderBottom:`1px solid ${e.palette.divider}`},tab:{textTransform:"uppercase",paddingTop:e.spacing(2),paddingBottom:e.spacing(2)}})),je=({unfilteredFacets:e,onChange:r,kind:a,type:n})=>{var l,i,s;const c=Ve(),o={types:(l=e==null?void 0:e.types.filter(({count:p})=>p>0))!=null?l:[]},d=j(p=>{var g;r((g=o==null?void 0:o.types[p].kind)!=null?g:"",o==null?void 0:o.types[p].type)},[o==null?void 0:o.types,r]);v(()=>{var p,g,y;const h=(o==null?void 0:o.types)&&o.types.length>=0,L=!a&&h,H=a&&h&&!(o!=null&&o.types.find(({kind:$,type:x})=>a===$&&(!n&&!x||n===x)));(L||H)&&r((g=(p=o==null?void 0:o.types[0])==null?void 0:p.kind)!=null?g:"",(y=o==null?void 0:o.types[0])==null?void 0:y.type)},[a,n,o==null?void 0:o.types,r]);const u=(i=o==null?void 0:o.types.map(({kind:p,type:g,count:y})=>{const h=`${p}|${g!=null?g:""}`;return{key:h,label:`${g!=null?g:p} (${y>50?"50+":y})`,id:h,tabProps:{className:c.tab}}}))!=null?i:[];if(!u.length)return null;const m=(s=o==null?void 0:o.types.findIndex(p=>p.kind===a&&(!p.type&&!n||p.type===n)))!=null?s:-1;return t.createElement(t.Fragment,null,t.createElement(Ie,null),t.createElement(q,{onChange:d,tabs:u,selectedIndex:m>-1?m:void 0}))},Me=f(e=>({root:{height:"8px",minWidth:"64px",marginLeft:e.spacing(2),borderRadius:"100vh",backgroundColor:e.palette.background.default},bar:{backgroundColor:e.palette.success.main,transition:"none"}})),re=e=>{var r,a;const n=Me(e),l=O(()=>Object.entries(e.progress).reduce((s,[,c])=>s+c,0),[e.progress]);if(l===0)return null;const i=(r=e.progress[N.Passed])!=null?r:0;return t.createElement(K,{arrow:!0,title:`Check passing for ${i} of ${l} ${l===1?"entity":"entities"}`,enterDelay:0,placement:"top"},t.createElement(ve,{variant:"determinate",value:((a=e.progress[N.Passed])!=null?a:0)/l*100,classes:{root:n.root,bar:n.bar}}))},Ke=f(e=>({headerWrapper:{marginTop:e.spacing(.5)},entityRefName:{fontWeight:"bold"},iconWrapper:{padding:e.spacing(1.5,.5),display:"flex",alignItems:"center",justifyContent:"center"}})),Ue=({check:{name:e,description:r},icon:a,entityRef:n})=>{const l=Ke(),i=w(n);return t.createElement(C,{spacing:1},t.createElement(C,{container:!0,direction:"row",spacing:1,wrap:"nowrap"},t.createElement("div",{className:l.iconWrapper},a),t.createElement(k,{variant:"h6",className:l.headerWrapper,noWrap:!0},e)),t.createElement(C,{item:!0,wrap:"nowrap"},t.createElement(k,{variant:"subtitle2",className:l.entityRefName},T(i,{defaultKind:i.kind}))),t.createElement(Te,{content:r}))},De=ke(e=>{const r=e.palette.type==="dark"?e.palette.common.black:e.palette.grey[300];return{tooltip:{backgroundColor:r,color:e.palette.type==="dark"?e.palette.common.white:e.palette.grey[700]},arrow:{color:r}}})(K),_e=({children:e,check:r,icon:a,entityRef:n})=>t.createElement(De,{arrow:!0,title:t.createElement(Ue,{check:r,icon:a,entityRef:n}),enterDelay:150,placement:"top"},e),Qe=f(e=>({root:{padding:0},iconWrapper:{padding:e.spacing(1.5),display:"flex",alignItems:"center",justifyContent:"center"},link:{"&:hover $iconWrapper, &:active $iconWrapper, &:focus $iconWrapper":{backgroundColor:e.palette.infoBackground}},icon:{width:"17px",height:"17px"},virtualized:{borderBottom:`1px solid ${e.palette.divider}`,borderRight:`1px solid ${e.palette.divider}`}})),ae=b(({programId:e,check:r,entityRef:a,result:n,entityRoute:l,isVirtualized:i})=>{const s=Qe();if(typeof a!="string"){const u=t.createElement("div",{className:s.iconWrapper},t.createElement("div",{className:s.icon}));return i?t.createElement("div",{className:`${s.root} ${s.virtualized}`,"aria-hidden":!0},u):t.createElement("td",{className:s.root,"aria-hidden":!0},u)}const c=t.createElement(Ce,{className:s.icon,result:n!=null?n:N.NotReported}),o=t.createElement("div",{className:s.iconWrapper},c),d=n&&n===N.NotApplicable?o:t.createElement(B,{className:s.link,to:`${l(w(a))}/soundcheck/${e}/${r.id}`},o);return i?t.createElement("div",{className:`${s.root} ${s.virtualized}`},t.createElement(_e,{check:r,icon:c,entityRef:a},d)):t.createElement("td",{className:`${s.root}`},d)}),ne=8,qe=16,R={programTitle:70,levelTitle:30,check:42,entityRefFooter:100},z={programTitle:350+qe*2,checkResult:42},Je=e=>e.reduce((r,a)=>r+a.height,0),Xe=e=>e*z.checkResult+z.programTitle,Ye=e=>e.filter(r=>r!==void 0).map(r=>{const a=w(r);return T(a,{defaultKind:a.kind})}).reduce((r,a)=>r.length>a.length?r:a,""),Ze=e=>ne*e+ne,le="NoLevel",et=e=>({name:le,badge:{options:{level:0,color:""},variant:we.Medal},entityRef:e,ordinal:0}),oe=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"},checkIndicator:{flexBasis:e.spacing(8)},checkNameCellVirtualized:{height:`${R.check}px`,lineHeight:`${R.check}px`,borderBottom:`1px solid ${e.palette.divider}`,borderRight:`1px solid ${e.palette.divider}`}})),tt=b(({programId:e,programName:r,check:a,entityRefs:n,results:l,entityRoute:i})=>{const s=oe(),c=O(()=>J(l.filter(({result:d})=>d!==N.NotApplicable),"result"),[l]),o=new Map(l.map(d=>[d.entityRef,d.result]));return t.createElement("tr",{"data-testid":"track-check-row"},t.createElement("th",{scope:"row",className:s.checkNameCell,"aria-label":`${a.name} check for ${r} track`},t.createElement("div",{className:s.checkNameContent},t.createElement(k,{className:s.checkNameTypography,variant:"subtitle2",component:"p"},a.name),t.createElement(re,{className:s.checkIndicator,progress:c}))),n.map((d,u)=>t.createElement(ae,{key:u,programId:e,check:a,entityRef:d,result:typeof d=="string"?o.get(d):void 0,entityRoute:i})))}),rt=({name:e,progress:r})=>{const a=oe();return t.createElement("div",{className:a.checkNameCell,"aria-label":`${e} check`},t.createElement("div",{className:`${a.checkNameContent} ${a.checkNameCellVirtualized}`},t.createElement(k,{variant:"subtitle2",component:"p",className:a.checkNameTypography},e),t.createElement(re,{className:a.checkIndicator,progress:r})))},at=f(e=>({virtualized:{borderRight:`1px solid ${e.palette.divider}`,height:`${R.programTitle}px`,display:"flex",justifyContent:"center",alignItems:"center"}})),nt=b(({entityRef:e,highestLevels:r})=>{const a=r.find(n=>n.entityRef===e);return t.createElement(t.Fragment,null,a!=null&&a.badge?t.createElement(_,{badge:a.badge}):t.createElement(Q,null))}),lt=({highestLevel:e})=>{const r=at();if(!(e!=null&&e.badge))return t.createElement("div",{className:r.virtualized},"\xA0");const a=e.name!==le;return t.createElement("div",{className:r.virtualized},a?t.createElement(_,{badge:e.badge}):t.createElement(Q,null))},ie=f(e=>({programNameCell:{padding:0,position:"sticky",backgroundColor:e.palette.background.paper},programNameContent:{padding:e.spacing(2)},programNameTypography:{overflow:"hidden",textOverflow:"ellipsis"},badgeCellContent:{display:"flex",justifyContent:"center",alignItems:"center"},programNameCellVirtualized:{borderRight:`1px solid ${e.palette.divider}`}})),ot=b(({program:e,entityRefs:r,highestLevels:a})=>{const n=ie();return t.createElement("tr",{"data-testid":"track-title-row"},t.createElement("th",{scope:"row",className:n.programNameCell},t.createElement("div",{className:n.programNameContent},t.createElement(k,{className:n.programNameTypography,variant:"h5",component:"p"},e.name))),r.map((l,i)=>typeof l!="string"?t.createElement("td",{key:i,"aria-hidden":!0}):t.createElement("td",{key:i,"data-testid":"track-certification-cell"},t.createElement("div",{className:n.badgeCellContent},t.createElement(nt,{entityRef:l,highestLevels:a})))))}),it=b(({name:e})=>{const r=ie();return t.createElement("div",{className:`${r.programNameCell} ${r.programNameCellVirtualized}`},t.createElement("div",{className:r.programNameContent},t.createElement(k,{className:r.programNameTypography,variant:"h5",component:"p"},e)))}),V=f(e=>{const r=e.palette.type==="dark"?e.palette.grey[700]:e.palette.grey[100];return{root:{color:M(e.palette.getContrastText(r),.8),backgroundColor:r},levelContent:{padding:`${e.spacing(.5)}px ${e.spacing(2)}px`,backgroundColor:r},levelTypography:{overflow:"hidden",textOverflow:"ellipsis"},levelHeaderCell:{padding:`${e.spacing(.5)}px ${e.spacing(2)}px`,borderRight:`1px solid ${e.palette.divider}`,height:`${R.levelTitle}px`}}}),st=b(({level:e,entityRefs:r,programName:a})=>{const n=V();return t.createElement("tr",{className:n.root,"data-testid":"track-level-row"},t.createElement("th",{scope:"row",className:n.root},t.createElement("div",{className:n.levelContent},t.createElement(k,{className:n.levelTypography,variant:"subtitle2",component:"p","aria-label":`${e.name} for ${a} track`},e.name))),r.map((l,i)=>t.createElement("td",{key:i,className:n.root,"aria-hidden":!0})))}),ct=({name:e})=>{const r=V();return t.createElement("div",{className:`${r.levelHeaderCell} ${r.root}`,"aria-label":`${e}`},t.createElement(k,{variant:"subtitle2",component:"p",className:r.levelTypography},e))},dt=()=>{const e=V();return t.createElement("div",{className:`${e.levelHeaderCell} ${e.root}`},"\xA0")},pt=({program:e,highestLevels:r,levels:a,entityRefs:n,entityRoute:l})=>t.createElement("tbody",null,t.createElement(ot,{program:e,entityRefs:n,highestLevels:r}),a.map((i,s)=>t.createElement(ge,{key:s},t.createElement(st,{entityRefs:n,level:i,programName:e.name}),i.checks.map(({check:c,results:o},d)=>t.createElement(tt,{key:d,check:c,programId:e.id,programName:e.name,entityRefs:n,results:o,entityRoute:l}))))),se=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)"}})),mt=({entityRefs:e})=>{const r=P(F),a=se();return t.createElement("tfoot",{className:a.root,"data-testid":"results-table-footer"},t.createElement("tr",{className:a.row},t.createElement("td",{className:a.cell}),e.map((n,l)=>{if(typeof n!="string")return t.createElement("th",{key:l,className:a.cell,"aria-hidden":!0});const i=w(n);return t.createElement("th",{scope:"col",key:l,className:a.cell},t.createElement("div",{className:a.cellInner},t.createElement(B,{to:r(i)},T(i,{defaultKind:i.kind}))))})))},ut=({entityRef:e})=>{const r=P(F),a=se(),n=e?w(e):void 0,l=n?t.createElement(B,{to:r(n)},T(n,{defaultKind:n.kind})):t.createElement(t.Fragment,null);return t.createElement("div",{className:a.cell},t.createElement("div",{className:a.cellInner},l))},gt=f(e=>({table:{backgroundColor:e.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap","& th, & td":{border:`1px solid ${e.palette.divider}`,borderCollapse:"collapse"},paddingBottom:e.spacing(2)},programTitle:{padding:e.spacing(2)},checkResult:{padding:e.spacing(1.5)},title:{padding:`${e.spacing(1)}px ${e.spacing(2)}px`},header:{backgroundColor:e.palette.type==="dark"?e.palette.grey[700]:e.palette.grey[100]}})),ce=()=>{const e=gt(),r=new Array(25).fill(void 0),a=new Array(5).fill(void 0),n=new Array(3).fill(void 0);return t.createElement("table",{className:e.table},t.createElement("tbody",null,t.createElement("tr",null,t.createElement("td",{className:e.programTitle},t.createElement(S,{width:180,height:40})),r.map((l,i)=>t.createElement("td",{key:i}))),n.map((l,i)=>t.createElement(t.Fragment,{key:i},t.createElement("tr",{className:e.header},t.createElement("td",{className:e.title},t.createElement(S,{width:180})),r.map((s,c)=>t.createElement("td",{key:c}))),a.map((s,c)=>t.createElement("tr",{key:c},t.createElement("td",{className:e.title},t.createElement(S,{width:240})),r.map((o,d)=>t.createElement("td",{key:d,className:e.checkResult},t.createElement(S,{width:18,height:18,variant:"rect"})))))))))},ht=f(e=>({root:{width:"100%"},table:{overflow:"auto",backgroundColor:e.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap",textAlign:"left","& th, & td":{border:`1px solid ${e.palette.divider}`,borderCollapse:"collapse"},"& th:first-of-type":{position:"sticky",left:0,zIndex:1,maxWidth:"60ch"},"& tfoot":{bottom:0,zIndex:1e3},"& tbody td:first-of-type":{border:`1px solid ${e.palette.divider}`,boxShadow:`1px 0 ${e.palette.background.default}, -1px 0 ${e.palette.background.default}`}}})),ft=b(e=>{const{setError:r,kind:a,type:n,ownerEntityRef:l}=e,i=ht(),s=P(F),{data:c,isLoading:o,isError:d}=X(l,{kind:a,type:n});if(v(()=>{r==null||r(d?new Error("Error loading track overview"):void 0)},[d,r]),o)return t.createElement(ce,null);if(!c||!l)return null;const{programs:u,entityRefs:m}=c;if(!o&&!u.length)return t.createElement(Le,{missing:"data",title:"Missing tracks",description:t.createElement(t.Fragment,null,"Looks like the group"," ",T(w(l),{defaultKind:"Group"})," ","doesn't own any ",n!=null?n:a," components that have Soundcheck tracks set up.",t.createElement("br",null),t.createElement("br",null),"If you're an administrator, you can learn more about configuring and filtering tracks in the"," ",t.createElement(B,{to:"https://www.npmjs.com/package/@spotify/backstage-plugin-soundcheck-backend#entity-filter"},"docs"),".")});if(d)return null;const p=m.length>=25?m:[...m,...Array.from({length:25-m.length},()=>{})];return t.createElement("div",{className:i.root},t.createElement("table",{className:i.table,"aria-label":"Check results"},u.map(({program:g,levels:y,highestLevels:h},L)=>t.createElement(pt,{key:L,program:g,entityRefs:p,levels:y,highestLevels:h,entityRoute:s})),t.createElement(mt,{entityRefs:p})))}),yt=e=>t.createElement(it,{name:e}),vt=e=>({type:"ProgramHeader",render:()=>yt(e)}),kt=e=>e?t.createElement(ct,{name:e}):t.createElement(dt,null),de=e=>({type:"LevelHeader",render:()=>kt(e)}),Et=(e,r)=>t.createElement(rt,{name:e,progress:r}),bt=(e,r)=>({type:"CheckTitle",render:()=>Et(e,r)}),Ct=(e,r,a,n,l)=>t.createElement(ae,{check:r,entityRef:a,entityRoute:l,programId:e,result:n,isVirtualized:!0}),wt=(e,r,a,n,l)=>({type:"CheckResult",render:()=>Ct(e,r,a,n,l)}),Nt=e=>t.createElement(ut,{entityRef:e}),pe=e=>({type:"EntityHeader",render:()=>Nt(e)}),Rt=e=>t.createElement(lt,{highestLevel:e}),$t=e=>({type:"LevelBadge",render:()=>Rt(e)}),xt=e=>r=>{const a=e[r.rowIndex].cells[r.columnIndex];return a?t.createElement("div",{style:r.style},a.render()):t.createElement("div",{style:r.style})},Tt=(e,r,a)=>{var n;const l=[];for(const{program:s,levels:c,highestLevels:o}of e){l.push({height:R.programTitle,cells:[vt(s.name),...r.map(d=>{const u=d?o.find(m=>m.entityRef===d)||et(d):void 0;return $t(u)})]});for(const d of c){l.push({height:R.levelTitle,cells:[de(d.name),...r.map(u=>de(""))]});for(const{check:u,results:m}of d.checks)l.push({height:R.check,cells:[bt(u.name,J(m.filter(({result:p})=>p!==N.NotApplicable),"result")),...r.map(p=>{var g,y;return wt(s.id,u,p,(y=(g=m.find(h=>h.entityRef===p))==null?void 0:g.result)!=null?y:N.NotApplicable,a)})]})}}const i=Ye(r!=null?r:[]);return l.push({height:Ze((n=i.length)!=null?n:1),cells:[pe(""),...r.map(s=>pe(s||""))]}),l},Lt=f(e=>({table:{backgroundColor:e.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap",textAlign:"left",overflow:"auto"}})),It=e=>{const{setError:r,kind:a,type:n,ownerEntityRef:l}=e,i=Lt(),s=P(F),{data:c,isLoading:o,isError:d}=X(l,{kind:a,type:n});if(v(()=>{r==null||r(d?new Error("Error loading program overview"):void 0)},[d,r]),o)return t.createElement(ce,null);if(!c||!l)return null;const{programs:u,entityRefs:m}=c,p=m.length>=25?m:[...m,...Array.from({length:25-m.length},()=>{})],g=Tt(u,p,s),y=xt(g);return t.createElement(C,{"aria-label":`Check results for ${n!=null?n:a}`,key:`${a}|${n!=null?n:""}`,item:!0,xs:12},t.createElement(Oe,{className:i.table,columnCount:p.length+1,columnWidth:h=>h===0?z.programTitle:z.checkResult,rowCount:g.length,rowHeight:h=>g[h].height,height:Je(g),width:Xe(p.length)},y))},Ot=({facets:e,ownerEntityRef:r,kind:a,type:n,setError:l})=>{const i=O(()=>{const s=new Map;return e.types.forEach(({kind:c,type:o})=>{const d=`${c}|${o!=null?o:""}`;s.set(d,t.createElement(It,{key:d,ownerEntityRef:r,kind:c,type:o,setError:l}))}),s},[e,r,l]);return t.createElement("div",null,i.get(`${a}|${n!=null?n:""}`))},Pt=f(()=>({scrollContainer:{overflow:"auto"}})),At=({facets:e,ownerEntityRef:r,hasError:a,kind:n,type:l,setError:i,useVirtualizedResultsTable:s,isFixedGroup:c})=>{var o,d,u;const m=Pt();if(a)return t.createElement(Ne,{severity:"error",title:a.message});const p="Use the groups drop-down list at the top-right of the page to select another group.";return e&&((d=(o=e.types)==null?void 0:o.length)!=null?d:0)>0?(u=e.types)!=null&&u.find(g=>g.count>0)?t.createElement("div",{className:m.scrollContainer},s?t.createElement(Ot,{facets:e,kind:n,type:l,setError:i,ownerEntityRef:r,hasError:a}):t.createElement(ft,{ownerEntityRef:r,kind:n,type:l,setError:i})):t.createElement(Re,{description:t.createElement(t.Fragment,null,"Looks like the group '",T(w(r),{defaultKind:"Group"}),"' doesn't own any entities that have any applicable tracks configured.",!c&&t.createElement(t.Fragment,null,t.createElement("br",null),t.createElement("br",null),p))}):t.createElement($e,{ownerEntityRef:r,selectGroupHint:c?void 0:p})},Ft=f(()=>({tableContainer:{padding:0,backgroundColor:"transparent"}})),Bt=({groupSelectorError:e,searchParams:r,setSearchParams:a,isFixedGroup:n=!1})=>{var l;const{group:i,kind:s,type:c}=r,[o,d]=I(void 0),[u,m]=I(void 0);v(()=>{((o==null?void 0:o.kind)!==s||(o==null?void 0:o.type)!==c)&&d({kind:s,type:c})},[s,c,o]);const{data:p,isLoading:g}=Ae(i),y=(l=E(be).getOptionalBoolean("soundcheck.virtualizeOverviewPage"))!=null?l:!0,h=u||e,L=($,x)=>{$&&(d({kind:$,type:x}),x?a({...r,kind:$,type:x}):(r!=null&&r.hasOwnProperty("type")&&delete r.type,a({...r,kind:$})))},H=Ft();return t.createElement(C,{container:!0,spacing:0},t.createElement(C,{item:!0,xs:12},g?t.createElement(Ge,null):t.createElement(je,{unfilteredFacets:p,kind:o==null?void 0:o.kind,type:o==null?void 0:o.type,onChange:L})),t.createElement(C,{item:!0,xs:12,className:H.tableContainer},!g&&t.createElement(At,{facets:p,kind:o==null?void 0:o.kind,type:o==null?void 0:o.type,setError:m,hasError:h,ownerEntityRef:i,useVirtualizedResultsTable:y,isFixedGroup:n})))};export{Se as G,Bt as O,He as U,Z as a,ze as b,Y as c,Fe as u};
2
- //# sourceMappingURL=OverviewPageContent-7cf86a3a.esm.js.map