Skip to content

Commit 1f8114a

Browse files
authored
Merge pull request #534 from bklvsky/add_errata_bulk_releases
Add bulk releases to Errata Feed
2 parents af43a20 + b60fc04 commit 1f8114a

File tree

1 file changed

+133
-9
lines changed

1 file changed

+133
-9
lines changed

src/pages/ErrataFeed.vue

Lines changed: 133 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,32 @@
6161
color="primary"
6262
:loading="loadingTable"
6363
:rows-per-page-options="[10]"
64+
row-key="complexId"
6465
hide-pagination
6566
binary-state-sort
6667
wrap-cells
68+
:selection="userAuthenticated() ? 'multiple' : null"
69+
v-model:selected="selectedAdvisories"
6770
>
6871
<template v-slot:top-right v-if="userAuthenticated()">
6972
<div class="q-gutter-md">
73+
<q-btn
74+
size="80%"
75+
square
76+
v-if="selectedAdvisories.length"
77+
@click="
78+
selectionHasSkippedPackages()
79+
? (confirm = true)
80+
: bulkReleaseErratas()
81+
"
82+
no-caps
83+
icon="backup"
84+
color="primary"
85+
:loading="loadingRelease"
86+
>
87+
<q-tooltip> Release selected Advisories </q-tooltip>
88+
</q-btn>
89+
7090
<q-btn
7191
size="80%"
7292
square
@@ -89,13 +109,37 @@
89109
</q-btn>
90110
</div>
91111
</template>
112+
<template v-slot:header="props">
113+
<q-tr :props="props">
114+
<q-th v-for="col in props.cols" :key="col.name" :props="props">
115+
<q-checkbox
116+
v-if="col.name === 'id' && userAuthenticated()"
117+
v-model="props.selected"
118+
:disable="loadingTable"
119+
size="xs"
120+
/>
121+
{{ col.label }}
122+
</q-th>
123+
</q-tr>
124+
</template>
92125
<template v-slot:body="props">
93126
<q-tr
94127
:props="props"
95128
class="cursor-pointer"
96129
:class="markAdvisory(props.row.id)"
97130
@click="loadAdvisory(props.row.id, props.row.platform_id)"
98131
>
132+
<q-td key="id" :props="props">
133+
<div class="row">
134+
<q-checkbox
135+
v-if="userAuthenticated()"
136+
size="xs"
137+
v-model="props.selected"
138+
class="col"
139+
/>
140+
<span class="col">{{ props.row.id }} </span>
141+
</div>
142+
</q-td>
99143
<q-td key="release_status" :props="props">
100144
<q-chip
101145
:color="statusColor(props.row)"
@@ -120,7 +164,6 @@
120164
<q-td key="updated_date" :props="props">{{
121165
formatDate(props.row.updated_date)
122166
}}</q-td>
123-
<q-td key="id" :props="props">{{ props.row.id }}</q-td>
124167
<q-td key="platform" :props="props">{{
125168
platformName(props.row.platform_id)
126169
}}</q-td>
@@ -168,6 +211,27 @@
168211
</q-card-actions>
169212
</q-card>
170213
</q-dialog>
214+
215+
<q-dialog v-model="confirm" persistent>
216+
<q-card style="width: 50%">
217+
<q-card-section>
218+
<div class="text-h6">Warning</div>
219+
</q-card-section>
220+
<q-card-section>
221+
Are you sure you want to release the record with skipped packages?
222+
</q-card-section>
223+
<q-card-actions align="right">
224+
<q-btn
225+
flat
226+
label="Ok"
227+
color="primary"
228+
@click="bulkReleaseErratas(true)"
229+
:loading="loadingRelease"
230+
/>
231+
<q-btn flat text-color="negative" label="Cancel" v-close-popup />
232+
</q-card-actions>
233+
</q-card>
234+
</q-dialog>
171235
</template>
172236

173237
<script>
@@ -187,10 +251,18 @@
187251
loading: false,
188252
loadingReset: false,
189253
loadingTable: false,
254+
loadingRelease: false,
190255
totalPages: ref(1),
191256
selectedAdvisory: null,
192257
showDialogAdvisories: false,
193258
columns: [
259+
{
260+
name: 'id',
261+
required: true,
262+
align: 'left',
263+
label: 'ID',
264+
field: 'id',
265+
},
194266
{
195267
name: 'release_status',
196268
required: true,
@@ -206,13 +278,7 @@
206278
field: 'updated_date',
207279
headerStyle: 'width: 120px',
208280
},
209-
{
210-
name: 'id',
211-
required: true,
212-
align: 'left',
213-
label: 'ID',
214-
field: 'id',
215-
},
281+
216282
{
217283
name: 'platform',
218284
required: true,
@@ -230,6 +296,8 @@
230296
],
231297
errataStatuses: ErrataReleaseStatus,
232298
advisors: [],
299+
selectedAdvisories: [],
300+
confirm: false,
233301
}
234302
},
235303
created() {
@@ -270,6 +338,59 @@
270338
this.loading = true
271339
this.currentPage = 1
272340
},
341+
bulkReleaseErratas(force = false) {
342+
this.loadingRelease = true
343+
let records_ids = this.selectedAdvisories.map((advisory) => advisory.id)
344+
this.$api
345+
.post(`/errata/bulk_release_records/?force=${force}`, records_ids)
346+
.then((response) => {
347+
this.loadingRelease = false
348+
Notify.create({
349+
message: `${response.data.message}`,
350+
type: 'positive',
351+
actions: [{label: 'Dismiss', color: 'white', handler: () => {}}],
352+
})
353+
this.loadAdvisories()
354+
})
355+
.catch((error) => {
356+
this.loadingRelease = false
357+
Notify.create({
358+
message: `${error.response.status}: ${error.response.statusText}`,
359+
type: 'negative',
360+
actions: [{label: 'Dismiss', color: 'white', handler: () => {}}],
361+
})
362+
})
363+
this.confirm = false
364+
},
365+
selectionHasSkippedPackages() {
366+
for (const advisory of this.selectedAdvisories) {
367+
if (this.advisoryHasSkippedPackages(advisory)) {
368+
return true
369+
}
370+
}
371+
return false
372+
},
373+
advisoryHasSkippedPackages(advisory) {
374+
let packages = {}
375+
let arch_list = this.platforms.find(
376+
(platform) => platform.value == advisory.platform_id
377+
).arch_list
378+
advisory.packages.forEach((pack) => {
379+
if (arch_list.includes(pack.arch)) {
380+
packages[pack.source_srpm]
381+
? packages[pack.source_srpm].push(pack)
382+
: (packages[pack.source_srpm] = [pack])
383+
}
384+
})
385+
for (const src in packages) {
386+
for (const pack of packages[src]) {
387+
if (pack.albs_packages.length === 0) {
388+
return true
389+
}
390+
}
391+
}
392+
return false
393+
},
273394
statusColor(record) {
274395
let col = ''
275396
switch (record.release_status) {
@@ -303,7 +424,10 @@
303424
.then((response) => {
304425
this.loading = false
305426
this.loadingTable = false
306-
this.advisors = response.data.records
427+
this.advisors = response.data.records.map((advisory) => ({
428+
...advisory,
429+
complexId: `${advisory.platform_id}-${advisory.id}`,
430+
}))
307431
this.totalPages = Math.ceil(response.data['total_records'] / 10)
308432
})
309433
.catch((error) => {

0 commit comments

Comments
 (0)