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"> <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,37 @@ export default {
const tag_options = { const tag_options = {
columns: [ 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,
vertAlign: "center",
},
{
title: "Name",
field: "name",
sorter: "string",
editor: "input",
vertAlign: "center",
},
{ {
title: 'Description', title: 'Description',
field: 'description', field: 'description',
sorter: 'string', sorter: 'string',
editor: 'input', editor: 'input',
vertAlign: "center",
formatter(cell) { formatter(cell) {
const cellValue = cell.getData().description; const cellValue = cell.getData().description;
if (!cellValue) { if (!cellValue) {
@ -144,11 +163,10 @@ export default {
layout: 'fitData', layout: 'fitData',
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 +229,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 +246,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();