@spotify/backstage-plugin-soundcheck 0.7.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +63 -0
- package/README.md +132 -7
- package/dist/esm/{EntitySoundcheckContent-52a2a214.esm.js → EntitySoundcheckContent-592fa779.esm.js} +2 -2
- package/dist/esm/OverviewPageContent-7cf86a3a.esm.js +2 -0
- package/dist/esm/{RefetchingIndicator-7160bb11.esm.js → RefetchingIndicator-b042ec49.esm.js} +2 -2
- package/dist/esm/index-100619e3.esm.js +2 -0
- package/dist/esm/{index-0024f6e1.esm.js → index-540b325c.esm.js} +2 -2
- package/dist/esm/index-95ae147b.esm.js +388 -0
- package/dist/esm/{index-829d0670.esm.js → index-fcd50c7d.esm.js} +2 -2
- package/dist/index.esm.js +1 -1
- package/package.json +23 -17
- package/dist/esm/OverviewPageContent-dbbba0be.esm.js +0 -2
- package/dist/esm/index-37aedac7.esm.js +0 -299
- package/dist/esm/index-c29fd0e9.esm.js +0 -2
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
import{createApiRef as Oe,createRouteRef as $,createSubRouteRef as R,createPlugin as Ne,createApiFactory as qe,discoveryApiRef as Te,fetchApiRef as Ge,createRoutableExtension as b,createComponentExtension as Le,useApi as x,errorApiRef as Ae,useRouteRef as j}from"@backstage/core-plugin-api";import{GraphQLClient as xe}from"graphql-request";import c from"graphql-tag";import a,{createContext as V,useState as S,useCallback as C,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 m,Modal as je,Box as J,Button as X,Fade as Ve,alpha as E,Tooltip as Ke,withStyles as I,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 re,parseEntityRef as et}from"@backstage/catalog-model";import{Alert as tt,Skeleton as f}from"@material-ui/lab";import{Link as rt}from"react-router-dom";import F from"classnames";import at from"@material-ui/icons/Schedule";import{DateTime as ae}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||{}),g=(e=>(e.Failed="FAILED",e.NotApplicable="NOT_APPLICABLE",e.NotReported="NOT_REPORTED",e.Passed="PASSED",e))(g||{});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}`,ut=c`
|
|
39
|
+
fragment CheckResultSummary on CheckResult {
|
|
40
|
+
id
|
|
41
|
+
name
|
|
42
|
+
result
|
|
43
|
+
timestamp
|
|
44
|
+
}
|
|
45
|
+
`,mt=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
|
+
${ut}`,pt=c`
|
|
65
|
+
fragment CheckResultDetails on CheckResult {
|
|
66
|
+
id
|
|
67
|
+
name
|
|
68
|
+
description
|
|
69
|
+
result
|
|
70
|
+
timestamp
|
|
71
|
+
notes
|
|
72
|
+
}
|
|
73
|
+
`,ht=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
|
+
`,gt=c`
|
|
106
|
+
mutation createCheck($input: CheckerInput!) {
|
|
107
|
+
check: createChecker(input: $input) {
|
|
108
|
+
id
|
|
109
|
+
filter
|
|
110
|
+
name
|
|
111
|
+
description
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
`,ft=c`
|
|
115
|
+
mutation createProgram($input: ProgramInput!) {
|
|
116
|
+
program: createProgram(input: $input) {
|
|
117
|
+
id
|
|
118
|
+
ownerEntityRef
|
|
119
|
+
name
|
|
120
|
+
description
|
|
121
|
+
documentationURL
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
`,yt=c`
|
|
125
|
+
mutation deleteChecker($checkerId: String!) {
|
|
126
|
+
deleteChecker(checkerId: $checkerId)
|
|
127
|
+
}
|
|
128
|
+
`,kt=c`
|
|
129
|
+
mutation deleteProgram($programId: String!) {
|
|
130
|
+
programDeleted: deleteProgram(programId: $programId)
|
|
131
|
+
}
|
|
132
|
+
`,vt=c`
|
|
133
|
+
mutation updateCheck($input: CheckerInput!) {
|
|
134
|
+
check: updateChecker(input: $input) {
|
|
135
|
+
id
|
|
136
|
+
filter
|
|
137
|
+
name
|
|
138
|
+
description
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
`,Rt=c`
|
|
142
|
+
mutation updateCollectorConfig($input: CollectorConfigInput!) {
|
|
143
|
+
collector: setCollectorConfig(input: $input) {
|
|
144
|
+
id
|
|
145
|
+
factNames
|
|
146
|
+
collectionConfigs {
|
|
147
|
+
factRefs
|
|
148
|
+
filter
|
|
149
|
+
frequency
|
|
150
|
+
cache
|
|
151
|
+
}
|
|
152
|
+
config
|
|
153
|
+
configSchema
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
`,Ct=c`
|
|
157
|
+
mutation updateProgram($input: ProgramInput!) {
|
|
158
|
+
program: updateProgram(input: $input) {
|
|
159
|
+
id
|
|
160
|
+
ownerEntityRef
|
|
161
|
+
name
|
|
162
|
+
description
|
|
163
|
+
documentationURL
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
`,Et=c`
|
|
167
|
+
query getAllCertifications($entityRef: String!) {
|
|
168
|
+
certifications(entityRef: $entityRef, includeFilteredChecks: false) {
|
|
169
|
+
...CertificationSummary
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
${ot}`,Pt=c`
|
|
173
|
+
query getAllPrograms($programIds: [String!], $first: Int, $after: String) {
|
|
174
|
+
programs(programIds: $programIds, first: $first, after: $after) {
|
|
175
|
+
totalCount
|
|
176
|
+
endCursor
|
|
177
|
+
hasNextPage
|
|
178
|
+
edges {
|
|
179
|
+
cursor
|
|
180
|
+
program {
|
|
181
|
+
id
|
|
182
|
+
ownerEntityRef
|
|
183
|
+
name
|
|
184
|
+
description
|
|
185
|
+
documentationURL
|
|
186
|
+
filter
|
|
187
|
+
levels {
|
|
188
|
+
...level
|
|
189
|
+
}
|
|
190
|
+
isEditable
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
${dt}`,wt=c`
|
|
196
|
+
query getCertificationDetails($entityRef: String!, $programId: String!) {
|
|
197
|
+
programCertification(
|
|
198
|
+
entityRef: $entityRef
|
|
199
|
+
programId: $programId
|
|
200
|
+
includeFilteredChecks: false
|
|
201
|
+
) {
|
|
202
|
+
program {
|
|
203
|
+
id
|
|
204
|
+
name
|
|
205
|
+
description
|
|
206
|
+
documentationURL
|
|
207
|
+
}
|
|
208
|
+
highestLevel {
|
|
209
|
+
...HighestLevel
|
|
210
|
+
}
|
|
211
|
+
levels {
|
|
212
|
+
...LevelResultDetails
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
${ie}
|
|
217
|
+
${mt}`,$t=c`
|
|
218
|
+
query getCheckResultDetails($entityRef: String!, $programId: String!, $checkId: String!) {
|
|
219
|
+
checkResult(entityRef: $entityRef, programId: $programId, checkId: $checkId) {
|
|
220
|
+
...CheckResultDetails
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
${pt}`,bt=c`
|
|
224
|
+
query getCheckers($ids: [String!], $first: Int, $after: String, $orderAlphabetical: String, $searchByOwner: String, $searchByName: String) {
|
|
225
|
+
checkers(
|
|
226
|
+
ids: $ids
|
|
227
|
+
first: $first
|
|
228
|
+
after: $after
|
|
229
|
+
orderAlphabetical: $orderAlphabetical
|
|
230
|
+
searchByOwner: $searchByOwner
|
|
231
|
+
searchByName: $searchByName
|
|
232
|
+
) {
|
|
233
|
+
totalCount
|
|
234
|
+
endCursor
|
|
235
|
+
hasNextPage
|
|
236
|
+
edges {
|
|
237
|
+
cursor
|
|
238
|
+
checker {
|
|
239
|
+
id
|
|
240
|
+
ownerEntityRef
|
|
241
|
+
supportChannel
|
|
242
|
+
name
|
|
243
|
+
description
|
|
244
|
+
rule
|
|
245
|
+
passedMessage
|
|
246
|
+
failedMessage
|
|
247
|
+
filter
|
|
248
|
+
isEditable
|
|
249
|
+
schedule
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
`,St=c`
|
|
255
|
+
query getEntityRefsForTechHealthFilter($ownerEntityRef: String) {
|
|
256
|
+
entityRefsForTechHealthFilter(ownerEntityRef: $ownerEntityRef)
|
|
257
|
+
}
|
|
258
|
+
`,It=c`
|
|
259
|
+
query getFacetsForOwner($ownerEntityRef: String!) {
|
|
260
|
+
facetsForOwner(ownerEntityRef: $ownerEntityRef) {
|
|
261
|
+
types {
|
|
262
|
+
kind
|
|
263
|
+
type
|
|
264
|
+
count
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
`,Ft=c`
|
|
269
|
+
query getCollectors($ids: [String!]) {
|
|
270
|
+
collectors(ids: $ids) {
|
|
271
|
+
id
|
|
272
|
+
name
|
|
273
|
+
description
|
|
274
|
+
factNames
|
|
275
|
+
config
|
|
276
|
+
isConfigurable
|
|
277
|
+
isEditable
|
|
278
|
+
collectionConfigs {
|
|
279
|
+
factRefs
|
|
280
|
+
filter
|
|
281
|
+
frequency
|
|
282
|
+
cache
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
`,Dt=c`
|
|
287
|
+
query getFactSchemas($collectorId: String!, $factName: String!) {
|
|
288
|
+
factSchema(collectorId: $collectorId, factName: $factName) {
|
|
289
|
+
schema
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
`,Ot=c`
|
|
293
|
+
query getIndividualCheckPassRates($filter: Filter) {
|
|
294
|
+
individualCheckPassRates(filter: $filter) {
|
|
295
|
+
id
|
|
296
|
+
checkName
|
|
297
|
+
checkDescription
|
|
298
|
+
checkOwnerRef
|
|
299
|
+
snapshotPassRate
|
|
300
|
+
trendPassRates
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
`,Nt=c`
|
|
304
|
+
query getIndividualEntityPassRates($filter: Filter) {
|
|
305
|
+
individualEntityPassRates(filter: $filter) {
|
|
306
|
+
id
|
|
307
|
+
entityDescription
|
|
308
|
+
entityOwnerRef
|
|
309
|
+
snapshotPassRate
|
|
310
|
+
trendPassRates
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
`,qt=c`
|
|
314
|
+
query getIndividualGroupPassRates($filter: Filter) {
|
|
315
|
+
groupPassRates(filter: $filter) {
|
|
316
|
+
id
|
|
317
|
+
groupTitle
|
|
318
|
+
memberRefs
|
|
319
|
+
snapshotPassRate
|
|
320
|
+
trendPassRates
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
`,Tt=c`
|
|
324
|
+
query getIndividualTrackPassRate($filter: Filter) {
|
|
325
|
+
individualTrackPassRate(filter: $filter) {
|
|
326
|
+
id
|
|
327
|
+
trackName
|
|
328
|
+
trackDescription
|
|
329
|
+
trackOwnerRef
|
|
330
|
+
levels {
|
|
331
|
+
levelOrdinal
|
|
332
|
+
snapshotPassRate
|
|
333
|
+
trendPassRates
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
`,Gt=c`
|
|
338
|
+
query getOverallCheckPassRates($filter: Filter) {
|
|
339
|
+
overallCheckPassRates(filter: $filter)
|
|
340
|
+
}
|
|
341
|
+
`,Lt=c`
|
|
342
|
+
query getOverallEntityPassRates($filter: Filter) {
|
|
343
|
+
overallEntityPassRates(filter: $filter) {
|
|
344
|
+
id
|
|
345
|
+
trendPassRates
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
`,At=c`
|
|
349
|
+
query getOverallGroupPassRates($filter: Filter) {
|
|
350
|
+
groupPassRates(filter: $filter, limit: 5) {
|
|
351
|
+
id
|
|
352
|
+
groupTitle
|
|
353
|
+
snapshotPassRate
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
`,xt=c`
|
|
357
|
+
query getOverallTrackPassRate($filter: Filter) {
|
|
358
|
+
overallTrackPassRate(filter: $filter) {
|
|
359
|
+
levelOrdinal
|
|
360
|
+
snapshotPassRate
|
|
361
|
+
trendPassRates
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
`,Bt=c`
|
|
365
|
+
query getProgramOverviewForOwner($ownerEntityRef: String!, $facet: FacetInput) {
|
|
366
|
+
programOverviewForOwner(
|
|
367
|
+
ownerEntityRef: $ownerEntityRef
|
|
368
|
+
facet: $facet
|
|
369
|
+
includeFilteredChecks: false
|
|
370
|
+
) {
|
|
371
|
+
programs {
|
|
372
|
+
program {
|
|
373
|
+
id
|
|
374
|
+
name
|
|
375
|
+
}
|
|
376
|
+
highestLevels {
|
|
377
|
+
...HighestLevel
|
|
378
|
+
}
|
|
379
|
+
levels {
|
|
380
|
+
...OverviewLevelResult
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
entityRefs
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
${ie}
|
|
387
|
+
${ht}`,Mt=(e,t,r)=>e();function zt(e,t=Mt){return{createCheck(r,n){return t(i=>e.request(gt,r,{...n,...i}),"createCheck","mutation")},createProgram(r,n){return t(i=>e.request(ft,r,{...n,...i}),"createProgram","mutation")},deleteChecker(r,n){return t(i=>e.request(yt,r,{...n,...i}),"deleteChecker","mutation")},deleteProgram(r,n){return t(i=>e.request(kt,r,{...n,...i}),"deleteProgram","mutation")},updateCheck(r,n){return t(i=>e.request(vt,r,{...n,...i}),"updateCheck","mutation")},updateCollectorConfig(r,n){return t(i=>e.request(Rt,r,{...n,...i}),"updateCollectorConfig","mutation")},updateProgram(r,n){return t(i=>e.request(Ct,r,{...n,...i}),"updateProgram","mutation")},getAllCertifications(r,n){return t(i=>e.request(Et,r,{...n,...i}),"getAllCertifications","query")},getAllPrograms(r,n){return t(i=>e.request(Pt,r,{...n,...i}),"getAllPrograms","query")},getCertificationDetails(r,n){return t(i=>e.request(wt,r,{...n,...i}),"getCertificationDetails","query")},getCheckResultDetails(r,n){return t(i=>e.request($t,r,{...n,...i}),"getCheckResultDetails","query")},getCheckers(r,n){return t(i=>e.request(bt,r,{...n,...i}),"getCheckers","query")},getEntityRefsForTechHealthFilter(r,n){return t(i=>e.request(St,r,{...n,...i}),"getEntityRefsForTechHealthFilter","query")},getFacetsForOwner(r,n){return t(i=>e.request(It,r,{...n,...i}),"getFacetsForOwner","query")},getCollectors(r,n){return t(i=>e.request(Ft,r,{...n,...i}),"getCollectors","query")},getFactSchemas(r,n){return t(i=>e.request(Dt,r,{...n,...i}),"getFactSchemas","query")},getIndividualCheckPassRates(r,n){return t(i=>e.request(Ot,r,{...n,...i}),"getIndividualCheckPassRates","query")},getIndividualEntityPassRates(r,n){return t(i=>e.request(Nt,r,{...n,...i}),"getIndividualEntityPassRates","query")},getIndividualGroupPassRates(r,n){return t(i=>e.request(qt,r,{...n,...i}),"getIndividualGroupPassRates","query")},getIndividualTrackPassRate(r,n){return t(i=>e.request(Tt,r,{...n,...i}),"getIndividualTrackPassRate","query")},getOverallCheckPassRates(r,n){return t(i=>e.request(Gt,r,{...n,...i}),"getOverallCheckPassRates","query")},getOverallEntityPassRates(r,n){return t(i=>e.request(Lt,r,{...n,...i}),"getOverallEntityPassRates","query")},getOverallGroupPassRates(r,n){return t(i=>e.request(At,r,{...n,...i}),"getOverallGroupPassRates","query")},getOverallTrackPassRate(r,n){return t(i=>e.request(xt,r,{...n,...i}),"getOverallTrackPassRate","query")},getProgramOverviewForOwner(r,n){return t(i=>e.request(Bt,r,{...n,...i}),"getProgramOverviewForOwner","query")}}}var se=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)},s=(e,t,r)=>(se(e,t,"read from private field"),r?r.call(e):t.get(e)),P=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r)},B=(e,t,r,n)=>(se(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r),D,O,o,M,l;const N=Oe({id:"plugin.soundcheck"}),Ut=e=>"response"in e&&"errors"in e.response,Ht=e=>"response"in e&&"message"in e.response;class Wt{constructor(t){P(this,D,void 0),P(this,O,void 0),P(this,o,void 0),P(this,M,n=>{var i,d,u;return Ut(n)?(u=(d=(i=n.response)==null?void 0:i.errors)==null?void 0:d[0].message)!=null?u:`${n}`:Ht(n)?n.response.message:`${n}`}),P(this,l,async n=>{try{return await n()}catch(i){throw new Error(`Error from Soundcheck backend: ${s(this,M).call(this,i)}`)}}),B(this,D,t.fetchApi),B(this,O,t.discoveryApi);const r=new xe("/graphql",{fetch:async(n,i)=>{const d=`${await s(this,O).getBaseUrl("soundcheck")}${n}`;return s(this,D).fetch(d,i)}});B(this,o,zt(r))}async getAllCertifications(t){return s(this,l).call(this,async()=>{const{certifications:r}=await s(this,o).getAllCertifications({entityRef:t});return r})}async getCertificationDetails(t,r){return s(this,l).call(this,async()=>{const{programCertification:n}=await s(this,o).getCertificationDetails({entityRef:t,programId:r});return n})}async getCheckResultDetails(t,r,n){return s(this,l).call(this,async()=>{const{checkResult:i}=await s(this,o).getCheckResultDetails({entityRef:t,programId:r,checkId:n});return i})}async getFacetsForOwner(t){return s(this,l).call(this,async()=>{const{facetsForOwner:r}=await s(this,o).getFacetsForOwner({ownerEntityRef:t});return r})}async getProgramOverviewForOwner(t,r){return s(this,l).call(this,async()=>{const{programOverviewForOwner:n}=await s(this,o).getProgramOverviewForOwner({ownerEntityRef:t,facet:r});return n})}async getAllPrograms(t,r,n){return s(this,l).call(this,async()=>{const{programs:i}=await s(this,o).getAllPrograms({programIds:t,first:r,after:n});return i})}async createProgram(t){return s(this,l).call(this,async()=>{const{program:r}=await s(this,o).createProgram({input:t});return r})}async updateProgram(t){return s(this,l).call(this,async()=>{const{program:r}=await s(this,o).updateProgram({input:t});return r})}async deleteProgram(t){return s(this,l).call(this,async()=>{const{programDeleted:r}=await s(this,o).deleteProgram({programId:t});return r})}async getChecks(t,r,n){return s(this,l).call(this,async()=>{const{checkers:i}=await s(this,o).getCheckers({ids:t,first:r,after:n});return i})}async createCheck(t){return s(this,l).call(this,async()=>{const{check:r}=await s(this,o).createCheck({input:t});return r})}async updateCheck(t){return s(this,l).call(this,async()=>{const{check:r}=await s(this,o).updateCheck({input:t});return r})}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:r}=await s(this,o).getCollectors({ids:t});return r})}async getFactSchema(t,r){if(!(!t||!r))return s(this,l).call(this,async()=>{const{factSchema:n}=await s(this,o).getFactSchemas({collectorId:t,factName:r});return n})}async updateCollectorConfig(t){return s(this,l).call(this,async()=>{const{collector:r}=await s(this,o).updateCollectorConfig({input:t});return r})}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}))}}D=new WeakMap,O=new WeakMap,o=new WeakMap,M=new WeakMap,l=new WeakMap;const q=$({id:"soundcheck-entity"}),Qt=$({id:"soundcheck-group"}),ce=R({id:"soundcheck-entity-certification-track-redirect",parent:q,path:"/:trackId"}),oe=R({id:"soundcheck-entity-certification",parent:q,path:"/:trackId/:checkId"}),jt=$({id:"soundcheck-overview"}),T=$({id:"soundcheck"}),Vt=R({id:"soundcheck-checks",parent:T,path:"/checks"});R({id:"soundcheck-tracks",parent:T,path:"/tracks"});const Kt=R({id:"soundcheck-track-details",parent:T,path:"/tracks/:trackId"}),k=Ne({id:"soundcheck",apis:[qe({api:N,deps:{discoveryApi:Te,fetchApi:Ge},factory:e=>new Wt(e)})],routes:{entityContent:q}}),_t=k.provide(b({name:"EntitySoundcheckContent",component:()=>import("./EntitySoundcheckContent-592fa779.esm.js").then(e=>e.EntitySoundcheckContent),mountPoint:q})),Jt=k.provide(Le({name:"EntitySoundcheckCard",component:{lazy:()=>import("./index-540b325c.esm.js").then(e=>e.EntitySoundcheckCard)}})),Xt=k.provide(b({name:"GroupSoundcheckContent",component:()=>import("./index-fcd50c7d.esm.js").then(e=>e.FixedGroupOverviewPage),mountPoint:Qt})),Yt=k.provide(b({name:"SoundcheckOverviewPage",component:()=>import("./index-fcd50c7d.esm.js").then(e=>e.OverviewPage),mountPoint:jt})),Zt=k.provide(b({name:"SoundcheckRoutingPage",component:()=>import("./index-100619e3.esm.js").then(e=>e.RoutingPage),mountPoint:T})),er=We(e=>new Ue({defaultOptions:{queries:{refetchInterval:6e4,refetchIntervalInBackground:!1,refetchOnWindowFocus:"always",retry:2,retryDelay:t=>{const r=450+Math.ceil(Math.random()*100);return Math.min(r*2**t,3e4)},onError:t=>e.post(t)}}})),tr=e=>{const t=x(Ae),r=er(t);return a.createElement(He,{client:r},e.children)};function le(e){const t=x(N),r=re(e);return _(["soundcheck/certifications",r],async()=>t.getAllCertifications(r))}function de(e,t){const r=x(N),n=re(e);return _(["soundcheck/certifications",n,t],async()=>r.getCertificationDetails(n,t),{enabled:!!t})}var ue=(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.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))(ue||{}),me=(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))(me||{});const rr=p(e=>({root:{padding:e.spacing(3)},icon:{display:"none"},message:{padding:0},type:{fontWeight:700,lineHeight:1.75}})),G=e=>{const{type:t,...r}=rr();return a.createElement(tt,{severity:e.severity,elevation:1,classes:r,onClose:e.onClose},a.createElement(m,{classes:{root:t}},e.title),e.children)},pe=V({}),ar=e=>{const[t,r]=S(),n=C(d=>{r(d)},[]),i=C(()=>{r(null)},[]);return a.createElement(pe.Provider,{value:{showAlert:n,clearAlert:i}},t&&a.createElement(G,{severity:t.severity,title:t.title,onClose:i},t.message),e.children)},nr=()=>K(pe),ir=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"}})),he=V({}),sr=e=>{const t=ir(),[r,n]=S(!1),[i,d]=S(),u=Be(),h=C(({title:w,message:Ie,error:Fe})=>(d({title:w,message:Ie,error:Fe}),n(!0),new Promise(De=>{u.current=De})),[]),v=C(()=>{u.current&&u.current(!0),n(!1)},[]),y=C(()=>{u.current&&u.current(!1),n(!1)},[]);return a.createElement(he.Provider,{value:{showModal:h}},e.children,i&&a.createElement(je,{open:r,onClose:y,"aria-labelledby":"confirmation-modal-title","aria-describedby":"confirmation-modal-description"},a.createElement(J,{className:t.modalContent},a.createElement(m,{id:"confirmation-modal-title",variant:"h6"},i.title),a.createElement(m,{className:t.modalMessage,id:"confirmation-modal-description",variant:"body1"},i.message),a.createElement("div",{className:t.modalButtons},!i.error&&a.createElement(X,{onClick:y,variant:"contained","aria-label":"cancel"},"Cancel"),a.createElement(X,{color:"primary",onClick:v,variant:"contained","aria-label":"confirm"},i.error?"Ok":"Confirm")))))},cr=()=>K(he),ge=24,or=11,z=e=>e==="small"?1:2,lr=p({root:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",borderRadius:"50%",borderWidth:"2px",fontWeight:700,width:({size:e})=>`${ge*z(e)}px`,height:({size:e})=>`${ge*z(e)}px`,fontSize:({size:e})=>`${or*z(e)}px`}}),fe=({className:e,label:t,size:r="small"})=>{const n=lr({size:r});return a.createElement("span",{className:F(e,n.root),role:"img","aria-label":`${t} badge`},t)},dr=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:r="small"})=>{const n=dr({color:t.options.color,size:r});return a.createElement(fe,{className:F(e,n.root),size:r,label:`L${t.options.level}`})},ur=p({root:{borderColor:"currentColor",borderStyle:"dashed"}}),ye=({className:e,size:t="small"})=>{const r=ur();return a.createElement(fe,{className:F(e,r.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 mr({description:e,documentationUrl:t}){const r=H();return t?a.createElement("div",{className:r.description},a.createElement(Y,{content:e}),a.createElement(Z,{to:t},"Learn more")):a.createElement("div",{className:r.description},a.createElement(Y,{content:e}))}const ke=({name:e,level:t,badge:r,description:n,documentationUrl:i})=>{const d=H();return a.createElement("div",{className:d.root},r?a.createElement(U,{size:"large",badge:r}):a.createElement(ye,{size:"large"}),a.createElement("div",null,a.createElement(m,{variant:"caption",className:d.level},t!=null?t:"No Level"),a.createElement(m,{className:d.title},e),n&&a.createElement(mr,{description:n,documentationUrl:i})))},L=({children:e})=>{const[t,r]=S(!1);return Me(()=>{const n=setTimeout(()=>{r(!0)},250);return()=>clearTimeout(n)},[]),a.createElement(Ve,{in:t,timeout:250},e)},W=({hideDescription:e=!1})=>{const t=H();return a.createElement(L,null,a.createElement("div",{className:t.root},a.createElement(f,{width:44,height:44}),a.createElement("div",null,a.createElement(m,{variant:"caption",className:t.level},a.createElement(f,{width:100})),a.createElement(m,{variant:"h4",className:t.title},a.createElement(f,{width:300})),!e&&a.createElement(m,{variant:"body2"},a.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:E(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:r})=>[`"${r?"badge":"title"} title"`,`"${r?".":"description"} description"`].join(" "),gridTemplateColumns:"auto 1fr"},title:{gridArea:"title",textTransform:"uppercase",fontWeight:"bold",color:E(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:E(e.palette.getContrastText(t),.8),fontSize:e.typography.subtitle2.fontSize,marginTop:e.spacing(1)}}}),pr=e=>{const t=ve({badge:e.badge});return a.createElement("div",{className:t.wrapper},e.badge?a.createElement(U,{className:t.badge,badge:e.badge}):null,a.createElement(m,{className:t.title},e.title),e.description?a.createElement(m,{className:t.description},e.description):null)},hr=()=>{const e=ve({});return a.createElement(L,null,a.createElement("div",{className:e.wrapper},a.createElement(f,{className:e.title}),a.createElement(m,{className:e.description},a.createElement(f,null))))},gr=p(e=>({root:{display:"inline-flex",alignItems:"center",gap:e.spacing(1)}})),Re=({timestamp:e,description:t})=>{const r=gr(),n=ae.fromISO(e).toLocaleString(ae.DATETIME_FULL),i=Ye(e),d=t?`${t}: ${i}`:void 0;return a.createElement("div",{className:r.root},a.createElement(Ke,{title:n},a.createElement(m,{variant:"caption","aria-label":d},i)),a.createElement(at,null))},fr=e=>({[g.Passed]:"Check passed",[g.NotReported]:"Check not reported",[g.Failed]:"Check failed",[g.NotApplicable]:"Check not applicable"})[e],yr=I(e=>({root:{color:e.palette.success.main}}))(nt),kr=I(e=>({root:{color:e.palette.error.main}}))(it),vr=I(e=>({root:{color:e.palette.info.main}}))(ct),Rr=I(e=>({root:{color:e.palette.text.disabled}}))(st),Ce=({result:e,className:t})=>{const r={className:t,"aria-label":fr(e),"aria-hidden":!1};return e===g.Passed?a.createElement(yr,{...r}):e===g.NotReported?a.createElement(vr,{...r}):e===g.Failed?a.createElement(kr,{...r}):e===g.NotApplicable?a.createElement(Rr,{...r}):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:E(e.palette.primary[e.palette.type],.2)},"&:hover, &:active, &:focus":{backgroundColor:E(e.palette.primary[e.palette.type],.3)}}})),Cr=({className:e,href:t,children:r})=>t?a.createElement(rt,{to:t,className:e},r):a.createElement("div",{className:e},r),Er=({result:e,name:t,timestamp:r,selected:n=!1,href:i})=>{const d=Ee(),u=F(d.root,{selected:n});return a.createElement(Cr,{href:i,className:u},a.createElement(Ce,{result:e}),a.createElement(m,{variant:"body2"},t),r?a.createElement(Re,{timestamp:r}):null)},Q=()=>{const e=Ee();return a.createElement(L,null,a.createElement("div",{className:e.root},a.createElement(f,{width:24,height:24}),a.createElement(m,{variant:"body2"},a.createElement(f,null)),a.createElement(f,{width:100,height:24})))},Pr=()=>{const e=Pe();return a.createElement("div",{className:e.root},a.createElement(W,null),new Array(3).fill(null).map((t,r)=>a.createElement(a.Fragment,{key:`skeleton-level-${r}`},a.createElement(hr,null),a.createElement("ul",{className:e.checks},a.createElement(Q,null),a.createElement(Q,null),a.createElement(Q,null)))))},wr=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"}}})),$r=({checks:e,trackId:t,checkId:r})=>{const n=wr(),i=j(oe);return e.length?a.createElement("ul",{className:n.checks},e.map(d=>a.createElement("li",{key:d.id,className:n.checkItem},a.createElement(Er,{...d,selected:d.id===r,href:i({trackId:t,checkId:d.id})})))):a.createElement(m,{variant:"body2",className:n.noChecks},"No applicable checks at this level.")},br=({level:e,checkId:t,trackId:r})=>{var n;return a.createElement(a.Fragment,null,a.createElement(pr,{badge:e.badge,title:e.name,description:e.description}),a.createElement($r,{checks:(n=e.checks)!=null?n:[],trackId:r,checkId:t}))},Pe=p(e=>({root:{borderRight:`1px solid ${e.palette.divider}`},checks:{padding:0,margin:0,flex:1,listStyle:"none"}})),Sr=({trackId:e,checkId:t})=>{var r,n;const i=Pe(),{entity:d}=te(),{data:u,isLoading:h,isError:v}=de(d,e);return v?a.createElement("div",{className:i.root},a.createElement(J,{padding:2},a.createElement(G,{severity:"error",title:"Error loading certification"}))):h||!e?a.createElement(Pr,null):u?a.createElement("div",{className:i.root},a.createElement(ke,{name:u.program.name,level:(r=u.highestLevel)==null?void 0:r.name,badge:(n=u.highestLevel)==null?void 0:n.badge,description:u.program.description,documentationUrl:u.program.documentationURL}),u==null?void 0:u.levels.map(y=>a.createElement(br,{key:y.ordinal,level:y,checkId:t,trackId:e}))):null},Ir=()=>a.createElement(a.Fragment,null,a.createElement(W,{hideDescription:!0}),a.createElement(W,{hideDescription:!0})),we=({className:e,description:t="There are no tracks configured that apply to this entity."})=>a.createElement("div",{className:e},a.createElement(ee,{title:"No certifications available",missing:"data",description:t})),Fr=({ownerEntityRef:e,selectGroupHint:t})=>e?a.createElement(ee,{missing:"data",title:"Missing entities",description:a.createElement(a.Fragment,null,"The group '",Xe(et(e),{defaultKind:"Group"}),"' doesn't own any entities.",t&&a.createElement(a.Fragment,null,a.createElement("br",null),a.createElement("br",null),t))}):null,$e="soundcheck",be="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}}})),A=({children:e,title:t})=>{const r=Se();return a.createElement(Je,{title:t},a.createElement("div",{className:r.infoCard},a.createElement(Ze,{inline:!0,backend:$e,invalidLicenseMessage:be}),e))},Dr=({title:e="Soundcheck"})=>{const{entity:t}=te(),r=Se(),{data:n,isError:i,isLoading:d}=le(t),u=j(ce);return i?a.createElement(A,{title:e},a.createElement(G,{severity:"error",title:"Error loading certifications"})):d||!n?a.createElement(A,{title:e},a.createElement(Ir,null)):n.length===0?a.createElement(A,{title:e},a.createElement(we,{className:r.emptyState})):a.createElement(A,{title:e},n.map((h,v)=>{var y,w;return a.createElement(ze,{key:h.program.name},a.createElement("div",{className:r.certificationWrapper,"data-testid":"soundcheck-track-row"},a.createElement(ke,{key:h.program.id,name:h.program.name,badge:(y=h.highestLevel)==null?void 0:y.badge,level:(w=h.highestLevel)==null?void 0:w.name}),a.createElement(Z,{to:u({trackId:h.program.id})},"View Details")),v<n.length-1?a.createElement(_e,null):null)}))};export{G as A,ne as B,Sr as C,_t as E,L as F,Xt as G,U as L,me as M,ye as N,ue as Q,g as R,tr as S,Re as a,le as b,ce as c,we as d,$e as e,oe as f,Dr as g,Ce as h,be as i,Fr as j,nr as k,cr as l,Vt as m,ar as n,k as o,Jt as p,Yt as q,Zt as r,N as s,Kt as t,de as u,sr as w};
|
|
388
|
+
//# sourceMappingURL=index-95ae147b.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-
|
|
2
|
-
//# sourceMappingURL=index-
|
|
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
|
package/dist/index.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
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};
|
|
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.
|
|
4
|
+
"version": "0.8.1",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"homepage": "https://backstage.spotify.com",
|
|
7
7
|
"main": "dist/index.esm.js",
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"backstage": {
|
|
14
14
|
"role": "frontend-plugin"
|
|
15
15
|
},
|
|
16
|
+
"sideEffects": false,
|
|
16
17
|
"scripts": {
|
|
17
18
|
"start": "backstage-cli package start",
|
|
18
19
|
"build": "backstage-cli package build --minify",
|
|
@@ -26,32 +27,35 @@
|
|
|
26
27
|
"prepare": "yarn generate"
|
|
27
28
|
},
|
|
28
29
|
"dependencies": {
|
|
29
|
-
"@backstage/catalog-
|
|
30
|
-
"@backstage/
|
|
31
|
-
"@backstage/core-
|
|
32
|
-
"@backstage/plugin-
|
|
33
|
-
"@backstage/plugin-
|
|
34
|
-
"@backstage/
|
|
35
|
-
"@backstage/
|
|
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",
|
|
37
|
+
"@backstage/types": "^1.1.1",
|
|
36
38
|
"@material-ui/core": "^4.12.2",
|
|
37
39
|
"@material-ui/icons": "^4.9.1",
|
|
38
40
|
"@material-ui/lab": "4.0.0-alpha.61",
|
|
39
|
-
"@spotify/backstage-plugin-core": "^0.5.
|
|
40
|
-
"@spotify/backstage-plugin-soundcheck-common": "^0.
|
|
41
|
+
"@spotify/backstage-plugin-core": "^0.5.6",
|
|
42
|
+
"@spotify/backstage-plugin-soundcheck-common": "^0.8.1",
|
|
41
43
|
"@tanstack/react-query": "^4.6.1",
|
|
42
44
|
"classnames": "^2.3.2",
|
|
43
45
|
"cron-validate": "^1.4.5",
|
|
44
46
|
"cronstrue": "^2.28.0",
|
|
47
|
+
"framer-motion": "^6.0.0",
|
|
45
48
|
"graphql-request": "6.1.0",
|
|
46
49
|
"lodash": "^4.17.21",
|
|
47
50
|
"luxon": "^3.1.1",
|
|
51
|
+
"react-circular-progressbar": "^2.1.0",
|
|
48
52
|
"react-confetti": "^6.1.0",
|
|
49
53
|
"react-dnd": "^16.0.1",
|
|
50
54
|
"react-dnd-html5-backend": "^16.0.1",
|
|
51
55
|
"react-hook-form": "^7.19.5",
|
|
52
56
|
"react-use": "^17.2.4",
|
|
53
57
|
"react-window": "^1.8.8",
|
|
54
|
-
"recharts": "2.
|
|
58
|
+
"recharts": "^2.8.0",
|
|
55
59
|
"uuid": "^9.0.0"
|
|
56
60
|
},
|
|
57
61
|
"peerDependencies": {
|
|
@@ -59,16 +63,18 @@
|
|
|
59
63
|
"react-router-dom": "6.0.0-beta.0 || ^6.3.0"
|
|
60
64
|
},
|
|
61
65
|
"devDependencies": {
|
|
62
|
-
"@backstage/cli": "^0.22.
|
|
63
|
-
"@backstage/core-app-api": "^1.
|
|
64
|
-
"@backstage/dev-utils": "^1.0.
|
|
65
|
-
"@backstage/test-utils": "^1.4.
|
|
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",
|
|
66
70
|
"@graphql-codegen/cli": "^5.0.0",
|
|
67
71
|
"@graphql-codegen/typescript": "^4.0.0",
|
|
68
72
|
"@graphql-codegen/typescript-graphql-request": "^5.0.0",
|
|
69
73
|
"@graphql-codegen/typescript-operations": "^4.0.0",
|
|
70
|
-
"@
|
|
71
|
-
"@
|
|
74
|
+
"@playwright/test": "^1.32.3",
|
|
75
|
+
"@sp4b-dev/e2e-test-utils": "^0.0.0",
|
|
76
|
+
"@spotify/backstage-plugin-core-common": "^0.5.6",
|
|
77
|
+
"@testing-library/jest-dom": "^6.0.0",
|
|
72
78
|
"@testing-library/react": "^12.1.5",
|
|
73
79
|
"@testing-library/react-hooks": "^8.0.1",
|
|
74
80
|
"@testing-library/user-event": "^14.0.0",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import t,{useState as I,useEffect as k,useMemo as P,useCallback as j,createContext as pe,useContext as me,memo as b,Fragment as ue}from"react";import{useSearchParams as ge}from"react-router-dom";import{makeStyles as f,alpha as M,TextField as he,CircularProgress as fe,Tooltip as K,LinearProgress as ye,withStyles as ve,Grid as C,Typography as v}from"@material-ui/core";import ke from"@material-ui/lab/Autocomplete";import{stringifyEntityRef as H,parseEntityRef as w}from"@backstage/catalog-model";import{useApi as E,identityApiRef as U,useRouteRef as O,configApiRef as Ee}from"@backstage/core-plugin-api";import{useQuery as A}from"@tanstack/react-query";import{s as D,R as N,h as be,B as Ce,L as _,N as Q,A as we,d as Ne,j as Re}from"./index-37aedac7.esm.js";import{catalogApiRef as W,humanizeEntityRef as x,entityRouteRef as B}from"@backstage/plugin-catalog-react";import $e from"react-use/lib/useAsync";import{HeaderTabs as q,Link as S,EmptyState as xe}from"@backstage/core-components";import{R as Te}from"./RefetchingIndicator-7160bb11.esm.js";import{countBy as J}from"lodash";import{Skeleton as F}from"@material-ui/lab";import{VariableSizeGrid as Le}from"react-window";function Ie(){const e=E(W);return A(["soundcheck/all-groups"],async()=>{const{items:r}=await e.getEntities({filter:{kind:"Group"}});return r.filter(a=>(a==null?void 0:a.kind)==="Group").map(a=>{var n,l,o,i;return{name:(i=(o=(l=(n=a.spec)==null?void 0:n.profile)==null?void 0:l.displayName)!=null?o:a.metadata.title)!=null?i:a.metadata.name,ref:H(a)}})})}function Pe(e){const r=E(D);return A(["soundcheck/facets-for-owner",e],async()=>r.getFacetsForOwner(e),{enabled:!!e})}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 Oe(){const e=E(U),r=E(W);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,o,i,s;return{name:(s=(i=(o=(l=n.spec)==null?void 0:l.profile)==null?void 0:o.displayName)!=null?i:n.metadata.title)!=null?s:n.metadata.name,ref:H(n)}})})}const Ae=()=>{const[e,r]=ge(),a=Object.fromEntries(e.entries()),[n,l]=I(a);return k(()=>{r(n,{replace:!0})},[n]),[n,l]},Y=()=>{const{data:e,isLoading:r,isError:a}=Oe(),{data:n,isLoading:l,isError:o}=Ie();return{options:P(()=>{const i=[];return e&&i.push(...e.map(({name:s,ref:c})=>({name:s,ref:c,key:"My Groups"}))),n&&i.push(...n.map(({name:s,ref:c})=>({name:s,ref:c,key:"All Groups"}))),i},[e,n]),isLoading:r||l,isError:a||o}},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:o,isError:i}=Y(),s=Be(),[c,d]=I(null);k(()=>{if(!o&&l!=null&&l.length&&!c){const p=a?l.find(m=>m.ref===a):l[0];p&&(d(p),r==null||r(p.ref))}},[o,l,c,r,a]);const u=j((p,m)=>{d(m),r==null||r(m==null?void 0:m.ref)},[r,d]);return k(()=>{n==null||n(i?new Error("Error loading groups"):void 0)},[i,n]),i?null:t.createElement(ke,{"aria-label":"Current group",className:s.root,classes:{clearIndicator:s.clearIndicator,popupIndicator:s.popupIndicator},disableClearable:!0,options:l!=null?l:[],loading:o,groupBy:p=>p.key,value:c,freeSolo:!1,onChange:u,getOptionLabel:p=>p.name,renderInput:p=>t.createElement(he,{...p,variant:"outlined",placeholder:o?"Loading":"Select a group",className:s.textField,InputProps:{...p.InputProps,className:s.input,classes:{notchedOutline:s.notchedOutline},endAdornment:t.createElement(t.Fragment,null,o?t.createElement(fe,{color:"inherit",size:20}):null,p.InputProps.endAdornment)}})})},Z={loading:!1},ee=pe(Z),Fe=()=>me(ee),ze=({children:e})=>{const[r,a]=I(Z),n=E(W),l=E(U),{value:o,loading:i,error:s}=$e(async()=>{const[{token:c},d]=await Promise.all([l.getCredentials(),l.getBackstageIdentity()]);return c?await n.getEntityByRef(d.userEntityRef):null},[n,l]);return k(()=>{if(o){const c=H(o);a({user:o,userEntityRef:c,loading:i,error:s})}else a({loading:i,error:s})},[o,i,s]),t.createElement(ee.Provider,{value:r},e)},He=e=>({key:`skeleton${e}`,label:"",id:`skeleton${e}`}),We=()=>{const e=Array.from({length:4},(r,a)=>He(a));return t.createElement(q,{tabs:e})},Ge=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)}})),Ve=({unfilteredFacets:e,onChange:r,kind:a,type:n})=>{var l,o,i;const s=Ge(),c={types:(l=e==null?void 0:e.types.filter(({count:m})=>m>0))!=null?l:[]},d=j(m=>{var g;r((g=c==null?void 0:c.types[m].kind)!=null?g:"",c==null?void 0:c.types[m].type)},[c==null?void 0:c.types,r]);k(()=>{var m,g,y;const h=(c==null?void 0:c.types)&&c.types.length>=0,T=!a&&h,$=a&&h&&!(c!=null&&c.types.find(({kind:L,type:V})=>a===L&&(!n&&!V||n===V)));(T||$)&&r((g=(m=c==null?void 0:c.types[0])==null?void 0:m.kind)!=null?g:"",(y=c==null?void 0:c.types[0])==null?void 0:y.type)},[a,n,c==null?void 0:c.types,r]);const u=(o=c==null?void 0:c.types.map(({kind:m,type:g,count:y})=>{const h=`${m}|${g!=null?g:""}`;return{key:h,label:`${g!=null?g:m} (${y>50?"50+":y})`,id:h,tabProps:{className:s.tab}}}))!=null?o:[];if(!u.length)return null;const p=(i=c==null?void 0:c.types.findIndex(m=>m.kind===a&&(!m.type&&!n||m.type===n)))!=null?i:-1;return t.createElement(t.Fragment,null,t.createElement(Te,null),t.createElement(q,{onChange:d,tabs:u,selectedIndex:p>-1?p:void 0}))},je=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"}})),te=e=>{var r,a;const n=je(e),l=P(()=>Object.entries(e.progress).reduce((i,[,s])=>i+s,0),[e.progress]);if(l===0)return null;const o=(r=e.progress[N.Passed])!=null?r:0;return t.createElement(K,{arrow:!0,title:`Check passing for ${o} of ${l} ${l===1?"entity":"entities"}`,enterDelay:0,placement:"top"},t.createElement(ye,{variant:"determinate",value:((a=e.progress[N.Passed])!=null?a:0)/l*100,classes:{root:n.root,bar:n.bar}}))},Me=f(e=>({headerWrapper:{marginTop:e.spacing(.5)},entityRefName:{fontWeight:"bold"},iconWrapper:{padding:e.spacing(1.5,.5),display:"flex",alignItems:"center",justifyContent:"center"}})),Ke=({check:{name:e,description:r},icon:a,entityRef:n})=>{const l=Me(),o=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(v,{variant:"h6",className:l.headerWrapper,noWrap:!0},e)),t.createElement(C,{item:!0,wrap:"nowrap"},t.createElement(v,{variant:"subtitle2",className:l.entityRefName},x(o,{defaultKind:o.kind}))),t.createElement(v,{variant:"caption"},r))},Ue=ve(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),De=({children:e,check:r,icon:a,entityRef:n})=>t.createElement(Ue,{arrow:!0,title:t.createElement(Ke,{check:r,icon:a,entityRef:n}),enterDelay:150,placement:"top"},e),_e=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}`}})),re=b(({programId:e,check:r,entityRef:a,result:n,entityRoute:l,isVirtualized:o})=>{const i=_e();if(typeof a!="string"){const u=t.createElement("div",{className:i.iconWrapper},t.createElement("div",{className:i.icon}));return o?t.createElement("div",{className:`${i.root} ${i.virtualized}`,"aria-hidden":!0},u):t.createElement("td",{className:i.root,"aria-hidden":!0},u)}const s=t.createElement(be,{className:i.icon,result:n!=null?n:N.NotReported}),c=t.createElement("div",{className:i.iconWrapper},s),d=n&&n===N.NotApplicable?c:t.createElement(S,{className:i.link,to:`${l(w(a))}/soundcheck/${e}/${r.id}`},c);return o?t.createElement("div",{className:`${i.root} ${i.virtualized}`},t.createElement(De,{check:r,icon:s,entityRef:a},d)):t.createElement("td",{className:`${i.root}`},d)}),ae=8,Qe=16,R={programTitle:70,levelTitle:30,check:42,entityRefFooter:100},z={programTitle:350+Qe*2,checkResult:42},qe=e=>e.reduce((r,a)=>r+a.height,0),Je=e=>e*z.checkResult+z.programTitle,Xe=e=>e.filter(r=>r!==void 0).map(r=>{const a=w(r);return x(a,{defaultKind:a.kind})}).reduce((r,a)=>r.length>a.length?r:a,""),Ye=e=>ae*e+ae,ne="NoLevel",Ze=e=>({name:ne,badge:{options:{level:0,color:""},variant:Ce.Medal},entityRef:e,ordinal:0}),le=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}`}})),et=b(({programId:e,programName:r,check:a,entityRefs:n,results:l,entityRoute:o})=>{const i=le(),s=P(()=>J(l.filter(({result:d})=>d!==N.NotApplicable),"result"),[l]),c=new Map(l.map(d=>[d.entityRef,d.result]));return t.createElement("tr",{"data-testid":"track-check-row"},t.createElement("th",{scope:"row",className:i.checkNameCell,"aria-label":`${a.name} check for ${r} track`},t.createElement("div",{className:i.checkNameContent},t.createElement(v,{className:i.checkNameTypography,variant:"subtitle2",component:"p"},a.name),t.createElement(te,{className:i.checkIndicator,progress:s}))),n.map((d,u)=>t.createElement(re,{key:u,programId:e,check:a,entityRef:d,result:typeof d=="string"?c.get(d):void 0,entityRoute:o})))}),tt=({name:e,progress:r})=>{const a=le();return t.createElement("div",{className:a.checkNameCell,"aria-label":`${e} check`},t.createElement("div",{className:`${a.checkNameContent} ${a.checkNameCellVirtualized}`},t.createElement(v,{variant:"subtitle2",component:"p",className:a.checkNameTypography},e),t.createElement(te,{className:a.checkIndicator,progress:r})))},rt=f(e=>({virtualized:{borderRight:`1px solid ${e.palette.divider}`,height:`${R.programTitle}px`,display:"flex",justifyContent:"center",alignItems:"center"}})),at=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))}),nt=({highestLevel:e})=>{const r=rt();if(!(e!=null&&e.badge))return t.createElement("div",{className:r.virtualized},"\xA0");const a=e.name!==ne;return t.createElement("div",{className:r.virtualized},a?t.createElement(_,{badge:e.badge}):t.createElement(Q,null))},oe=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}`}})),lt=b(({program:e,entityRefs:r,highestLevels:a})=>{const n=oe();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(v,{className:n.programNameTypography,variant:"h5",component:"p"},e.name))),r.map((l,o)=>typeof l!="string"?t.createElement("td",{key:o,"aria-hidden":!0}):t.createElement("td",{key:o,"data-testid":"track-certification-cell"},t.createElement("div",{className:n.badgeCellContent},t.createElement(at,{entityRef:l,highestLevels:a})))))}),ot=b(({name:e})=>{const r=oe();return t.createElement("div",{className:`${r.programNameCell} ${r.programNameCellVirtualized}`},t.createElement("div",{className:r.programNameContent},t.createElement(v,{className:r.programNameTypography,variant:"h5",component:"p"},e)))}),G=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`}}}),it=b(({level:e,entityRefs:r,programName:a})=>{const n=G();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(v,{className:n.levelTypography,variant:"subtitle2",component:"p","aria-label":`${e.name} for ${a} track`},e.name))),r.map((l,o)=>t.createElement("td",{key:o,className:n.root,"aria-hidden":!0})))}),st=({name:e})=>{const r=G();return t.createElement("div",{className:`${r.levelHeaderCell} ${r.root}`,"aria-label":`${e}`},t.createElement(v,{variant:"subtitle2",component:"p",className:r.levelTypography},e))},ct=()=>{const e=G();return t.createElement("div",{className:`${e.levelHeaderCell} ${e.root}`},"\xA0")},dt=({program:e,highestLevels:r,levels:a,entityRefs:n,entityRoute:l})=>t.createElement("tbody",null,t.createElement(lt,{program:e,entityRefs:n,highestLevels:r}),a.map((o,i)=>t.createElement(ue,{key:i},t.createElement(it,{entityRefs:n,level:o,programName:e.name}),o.checks.map(({check:s,results:c},d)=>t.createElement(et,{key:d,check:s,programId:e.id,programName:e.name,entityRefs:n,results:c,entityRoute:l}))))),ie=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)"}})),pt=({entityRefs:e})=>{const r=O(B),a=ie();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 o=w(n);return t.createElement("th",{scope:"col",key:l,className:a.cell},t.createElement("div",{className:a.cellInner},t.createElement(S,{to:r(o)},x(o,{defaultKind:o.kind}))))})))},mt=({entityRef:e})=>{const r=O(B),a=ie(),n=e?w(e):void 0,l=n?t.createElement(S,{to:r(n)},x(n,{defaultKind:n.kind})):t.createElement(t.Fragment,null);return t.createElement("div",{className:a.cell},t.createElement("div",{className:a.cellInner},l))},ut=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]}})),se=()=>{const e=ut(),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(F,{width:180,height:40})),r.map((l,o)=>t.createElement("td",{key:o}))),n.map((l,o)=>t.createElement(t.Fragment,{key:o},t.createElement("tr",{className:e.header},t.createElement("td",{className:e.title},t.createElement(F,{width:180})),r.map((i,s)=>t.createElement("td",{key:s}))),a.map((i,s)=>t.createElement("tr",{key:s},t.createElement("td",{className:e.title},t.createElement(F,{width:240})),r.map((c,d)=>t.createElement("td",{key:d,className:e.checkResult},t.createElement(F,{width:18,height:18,variant:"rect"})))))))))},gt=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}`}}})),ht=b(e=>{const{setError:r,kind:a,type:n,ownerEntityRef:l}=e,o=gt(),i=O(B),{data:s,isLoading:c,isError:d}=X(l,{kind:a,type:n});if(k(()=>{r==null||r(d?new Error("Error loading track overview"):void 0)},[d,r]),c)return t.createElement(se,null);if(!s||!l)return null;const{programs:u,entityRefs:p}=s;if(!c&&!u.length)return t.createElement(xe,{missing:"data",title:"Missing tracks",description:t.createElement(t.Fragment,null,"Looks like the group"," ",x(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(S,{to:"https://www.npmjs.com/package/@spotify/backstage-plugin-soundcheck-backend#entity-filter"},"docs"),".")});if(d)return null;const m=p.length>=25?p:[...p,...Array.from({length:25-p.length},()=>{})];return t.createElement("div",{className:o.root},t.createElement("table",{className:o.table,"aria-label":"Check results"},u.map(({program:g,levels:y,highestLevels:h},T)=>t.createElement(dt,{key:T,program:g,entityRefs:m,levels:y,highestLevels:h,entityRoute:i})),t.createElement(pt,{entityRefs:m})))}),ft=e=>t.createElement(ot,{name:e}),yt=e=>({type:"ProgramHeader",render:()=>ft(e)}),vt=e=>e?t.createElement(st,{name:e}):t.createElement(ct,null),ce=e=>({type:"LevelHeader",render:()=>vt(e)}),kt=(e,r)=>t.createElement(tt,{name:e,progress:r}),Et=(e,r)=>({type:"CheckTitle",render:()=>kt(e,r)}),bt=(e,r,a,n,l)=>t.createElement(re,{check:r,entityRef:a,entityRoute:l,programId:e,result:n,isVirtualized:!0}),Ct=(e,r,a,n,l)=>({type:"CheckResult",render:()=>bt(e,r,a,n,l)}),wt=e=>t.createElement(mt,{entityRef:e}),de=e=>({type:"EntityHeader",render:()=>wt(e)}),Nt=e=>t.createElement(nt,{highestLevel:e}),Rt=e=>({type:"LevelBadge",render:()=>Nt(e)}),$t=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})},xt=(e,r,a)=>{var n;const l=[];for(const{program:i,levels:s,highestLevels:c}of e){l.push({height:R.programTitle,cells:[yt(i.name),...r.map(d=>{const u=d?c.find(p=>p.entityRef===d)||Ze(d):void 0;return Rt(u)})]});for(const d of s){l.push({height:R.levelTitle,cells:[ce(d.name),...r.map(u=>ce(""))]});for(const{check:u,results:p}of d.checks)l.push({height:R.check,cells:[Et(u.name,J(p.filter(({result:m})=>m!==N.NotApplicable),"result")),...r.map(m=>{var g,y;return Ct(i.id,u,m,(y=(g=p.find(h=>h.entityRef===m))==null?void 0:g.result)!=null?y:N.NotApplicable,a)})]})}}const o=Xe(r!=null?r:[]);return l.push({height:Ye((n=o.length)!=null?n:1),cells:[de(""),...r.map(i=>de(i||""))]}),l},Tt=f(e=>({table:{backgroundColor:e.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap",textAlign:"left",overflow:"auto"}})),Lt=e=>{const{setError:r,kind:a,type:n,ownerEntityRef:l}=e,o=Tt(),i=O(B),{data:s,isLoading:c,isError:d}=X(l,{kind:a,type:n});if(k(()=>{r==null||r(d?new Error("Error loading program overview"):void 0)},[d,r]),c)return t.createElement(se,null);if(!s||!l)return null;const{programs:u,entityRefs:p}=s,m=p.length>=25?p:[...p,...Array.from({length:25-p.length},()=>{})],g=xt(u,m,i),y=$t(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(Le,{className:o.table,columnCount:m.length+1,columnWidth:h=>h===0?z.programTitle:z.checkResult,rowCount:g.length,rowHeight:h=>g[h].height,height:qe(g),width:Je(m.length)},y))},It=({facets:e,ownerEntityRef:r,kind:a,type:n,setError:l})=>{const o=P(()=>{const i=new Map;return e.types.forEach(({kind:s,type:c})=>{const d=`${s}|${c!=null?c:""}`;i.set(d,t.createElement(Lt,{key:d,ownerEntityRef:r,kind:s,type:c,setError:l}))}),i},[e,r,l]);return t.createElement("div",null,o.get(`${a}|${n!=null?n:""}`))},Pt=f(()=>({scrollContainer:{overflow:"auto"}})),Ot=({facets:e,ownerEntityRef:r,hasError:a,kind:n,type:l,setError:o,useVirtualizedResultsTable:i})=>{var s,c,d;const u=Pt();return a?t.createElement(we,{severity:"error",title:a.message}):e&&((c=(s=e.types)==null?void 0:s.length)!=null?c:0)>0?(d=e.types)!=null&&d.find(p=>p.count>0)?t.createElement("div",{className:u.scrollContainer},i?t.createElement(It,{facets:e,kind:n,type:l,setError:o,ownerEntityRef:r,hasError:a}):t.createElement(ht,{ownerEntityRef:r,kind:n,type:l,setError:o})):t.createElement(Ne,{description:t.createElement(t.Fragment,null,"Looks like the group"," ",x(w(r),{defaultKind:"Group"})," ","doesn't own any entities that have any applicable tracks configured.",t.createElement("br",null),t.createElement("br",null),"Please select another group from the dropdown in the corner of the header.")}):t.createElement(Re,{ownerEntityRef:r})},At=f(()=>({tableContainer:{padding:0,backgroundColor:"transparent"}})),Bt=({groupSelectorError:e,searchParams:r,setSearchParams:a})=>{var n;const{group:l,kind:o,type:i}=r,[s,c]=I(void 0),[d,u]=I(void 0);k(()=>{((s==null?void 0:s.kind)!==o||(s==null?void 0:s.type)!==i)&&c({kind:o,type:i})},[o,i,s]);const{data:p,isLoading:m}=Pe(l),g=(n=E(Ee).getOptionalBoolean("soundcheck.virtualizeOverviewPage"))!=null?n:!0,y=d||e,h=($,L)=>{$&&(c({kind:$,type:L}),L?a({...r,kind:$,type:L}):(r!=null&&r.hasOwnProperty("type")&&delete r.type,a({...r,kind:$})))},T=At();return t.createElement(C,{container:!0,spacing:0},t.createElement(C,{item:!0,xs:12},m?t.createElement(We,null):t.createElement(Ve,{unfilteredFacets:p,kind:s==null?void 0:s.kind,type:s==null?void 0:s.type,onChange:h})),t.createElement(C,{item:!0,xs:12,className:T.tableContainer},!m&&t.createElement(Ot,{facets:p,kind:s==null?void 0:s.kind,type:s==null?void 0:s.type,setError:u,hasError:y,ownerEntityRef:l,useVirtualizedResultsTable:g})))};export{Se as G,Bt as O,ze as U,Y as a,Fe as b,Ae as u};
|
|
2
|
-
//# sourceMappingURL=OverviewPageContent-dbbba0be.esm.js.map
|