Fix: Tag Interface Delete Button #104256

Manually merged
Sybren A. Stüvel merged 39 commits from Evelinealy/flamenco:tag-interface into main 2023-11-02 16:13:14 +01:00

View File

@ -2,12 +2,6 @@
<div class="col col-tags-list"> <div class="col col-tags-list">
<h2 class="column-title">Available Tags</h2> <h2 class="column-title">Available Tags</h2>
<div class="action-buttons btn-bar-group">
<div class="btn-bar">
<button @click="deleteTag" :disabled="!selectedTag">Delete Tag</button>
</div>
</div>
<div class="action-buttons btn-bar"> <div class="action-buttons btn-bar">
<form @submit="createTag"> <form @submit="createTag">
<div class="create-tag-container"> <div class="create-tag-container">
@ -126,12 +120,22 @@ export default {
const tag_options = { const tag_options = {
columns: [ columns: [
{ title: 'Name', field: 'name', sorter: 'string', editor: 'input' }, {
title: 'Name',
field: 'name',
sorter: 'string',
editor: 'input',
vertAlign: 'center',
widthGrow: 1,
},
{ {
title: 'Description', title: 'Description',
field: 'description', field: 'description',
sorter: 'string', sorter: 'string',
editor: 'input', editor: 'input',
vertAlign: 'center',
widthGrow: 2,
formatter(cell) { formatter(cell) {
const cellValue = cell.getData().description; const cellValue = cell.getData().description;
if (!cellValue) { if (!cellValue) {
@ -140,15 +144,33 @@ export default {
return cellValue; return cellValue;
}, },
}, },
{
title: '',
headerHozAlign: 'right',
width: 60,
formatter: (cell) => {
const button = document.createElement('button');
button.classList.add('remove-tag-button');
button.innerHTML = '❌';
button.addEventListener('click', () => {
const tag = cell.getRow().getData();
this.deleteTag(tag);
});
return button;
},
headerSort: false,
vertAlign: 'center',
},
], ],
layout: 'fitData', layout: 'fitColumns',
layoutColumnsOnNewData: true, layoutColumnsOnNewData: true,
height: '82%', height: '82%',
selectable: true, selectable: false,
}; };
this.tabulator = new Tabulator('#tag-table-container', tag_options); this.tabulator = new Tabulator('#tag-table-container', tag_options);
this.tabulator.on('rowClick', this.onRowClick);
this.tabulator.on('tableBuilt', () => { this.tabulator.on('tableBuilt', () => {
this.fetchTags(); this.fetchTags();
}); });
@ -211,17 +233,16 @@ export default {
}); });
}, },
deleteTag() { deleteTag(tag) {
if (!this.selectedTag) {
return;
}
const api = new WorkerMgtApi(getAPIClient()); const api = new WorkerMgtApi(getAPIClient());
api api
.deleteWorkerTag(this.selectedTag.id) .deleteWorkerTag(tag.id)
.then(() => { .then(() => {
this.selectedTag = null; this.tabulator.getRows().forEach((row) => {
this.tabulator.setData(this.tags); if (row.getData().id === tag.id) {
row.delete();
}
});
}) })
.catch((error) => { .catch((error) => {
const errorMsg = JSON.stringify(error); const errorMsg = JSON.stringify(error);
@ -229,17 +250,6 @@ export default {
}); });
}, },
onRowClick(event, row) {
const tag = row.getData();
const rowIndex = row.getIndex();
this.tabulator.deselectRow();
this.tabulator.selectRow(rowIndex);
this.selectedTag = tag;
this.activeRowIndex = rowIndex;
},
// SocketIO connection event handlers: // SocketIO connection event handlers:
onSIOReconnected() { onSIOReconnected() {
this.fetchTags(); this.fetchTags();