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
Showing only changes of commit 3173a0aa26 - Show all commits

View File

@ -2,12 +2,6 @@
<div class="col col-tags-list">
<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">
<form @submit="createTag">
<div class="create-tag-container">
@ -126,12 +120,37 @@ export default {
const tag_options = {
columns: [
{ title: 'Name', field: 'name', sorter: 'string', editor: 'input' },
{
title: "",
headerHozAlign: "right",
formatter: (cell) => {
const button = document.createElement("button");
button.classList.add("remove-tag-button");
button.innerHTML = "X";
button.addEventListener("click", () => {
const tag = cell.getRow().getData();
this.deleteTag(tag);
});
return button;
},
headerSort: false,
dr.sybren marked this conversation as resolved Outdated

Add this column to the end, so that it has the same layout as the job blocklist (there the is on the right as well).

Add this column to the end, so that it has the same layout as the job blocklist (there the ❌ is on the right as well).
vertAlign: "center",
},
{
title: "Name",
field: "name",
sorter: "string",
editor: "input",
vertAlign: "center",
},
{
title: 'Description',
field: 'description',
sorter: 'string',
editor: 'input',
vertAlign: "center",
formatter(cell) {
const cellValue = cell.getData().description;
if (!cellValue) {
@ -144,11 +163,10 @@ export default {
layout: 'fitData',
layoutColumnsOnNewData: true,
height: '82%',
selectable: true,
selectable: false,
};
dr.sybren marked this conversation as resolved Outdated

Not sure if a fixed width is going to work well here, especially when the window gets resized.

Not sure if a fixed width is going to work well here, especially when the window gets resized.
this.tabulator = new Tabulator('#tag-table-container', tag_options);
this.tabulator.on('rowClick', this.onRowClick);
this.tabulator.on('tableBuilt', () => {
this.fetchTags();
});
@ -211,17 +229,16 @@ export default {
});
},
deleteTag() {
if (!this.selectedTag) {
return;
}
deleteTag(tag) {
const api = new WorkerMgtApi(getAPIClient());
api
.deleteWorkerTag(this.selectedTag.id)
.deleteWorkerTag(tag.id)
.then(() => {
this.selectedTag = null;
this.tabulator.setData(this.tags);
this.tabulator.getRows().forEach((row) => {
if (row.getData().id === tag.id) {
row.delete();
}
});
})
.catch((error) => {
const errorMsg = JSON.stringify(error);
@ -229,17 +246,6 @@ export default {
});
},
dr.sybren marked this conversation as resolved Outdated

This shouldn't happen anyway, so you can just remove the entire conditional return here. Better to raise an error that you can see & debug (because of the tag.id access failing) than to silently ignore mistakes.

This shouldn't happen anyway, so you can just remove the entire conditional return here. Better to raise an error that you can see & debug (because of the `tag.id` access failing) than to silently ignore mistakes.
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:
onSIOReconnected() {
this.fetchTags();