mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-25 08:34:29 +00:00
add definable tag column in modified helpers
This commit is contained in:
@@ -331,6 +331,7 @@ class StudentListLib
|
||||
nt.style,
|
||||
n.erledigt AS done,
|
||||
nt.prioritaet AS prioritaet,
|
||||
nt.automatisiert AS automatisiert,
|
||||
nz.prestudent_id,
|
||||
n.start,
|
||||
n.ende
|
||||
|
||||
@@ -729,7 +729,8 @@ EOSQL;
|
||||
style,
|
||||
erledigt AS done,
|
||||
lehreinheit_id,
|
||||
prioritaet
|
||||
prioritaet,
|
||||
automatisiert
|
||||
FROM public.tbl_notizzuordnung
|
||||
JOIN public.tbl_notiz ON tbl_notizzuordnung.notiz_id = tbl_notiz.notiz_id
|
||||
JOIN public.tbl_notiz_typ ON tbl_notiz.typ = tbl_notiz_typ.typ_kurzbz
|
||||
|
||||
@@ -81,8 +81,8 @@ export default {
|
||||
buildTagHeaderFilterExpression(selectedOptions);
|
||||
|
||||
setTagHeaderFilterValue(
|
||||
this.$refs.table.tabulator,
|
||||
combinedFilterStatement,
|
||||
this.$refs.table.tabulator
|
||||
);
|
||||
},
|
||||
deep: true,
|
||||
|
||||
@@ -494,7 +494,6 @@ export default {
|
||||
count: 0,
|
||||
filteredcount: 0,
|
||||
selectedcount: 0,
|
||||
//tags
|
||||
expanded: [],
|
||||
tagEndpoint: ApiTag,
|
||||
currentEndpoint: null,
|
||||
@@ -598,8 +597,8 @@ export default {
|
||||
buildTagHeaderFilterExpression(selectedOptions);
|
||||
|
||||
setTagHeaderFilterValue(
|
||||
this.$refs.table.tabulator,
|
||||
combinedFilterStatement,
|
||||
this.$refs.table.tabulator,
|
||||
);
|
||||
},
|
||||
deep: true,
|
||||
@@ -869,7 +868,6 @@ export default {
|
||||
this.lastSelected = [];
|
||||
this.$emit("update:selected", []);
|
||||
},
|
||||
//methods tags
|
||||
addedTag(addedTag) {
|
||||
addTagInTable(addedTag, this.allRows, "prestudent_id");
|
||||
syncTagHeaderFilterOptions(
|
||||
|
||||
@@ -29,11 +29,11 @@ function getConnectorLabel(connector, labels) {
|
||||
return labels?.connectors?.[connector.key] || connector.label;
|
||||
}
|
||||
|
||||
export function setTagHeaderFilterValue(tabulator, value) {
|
||||
tabulator?.setHeaderFilterValue("tags", value);
|
||||
export function setTagHeaderFilterValue(value, tabulator, columnField = "tags") {
|
||||
tabulator?.setHeaderFilterValue(columnField, value);
|
||||
|
||||
const input = tabulator
|
||||
?.getColumn("tags")
|
||||
?.getColumn(columnField)
|
||||
?.getElement()
|
||||
?.querySelector(".tabulator-header-filter input");
|
||||
|
||||
@@ -63,12 +63,12 @@ export function buildTagHeaderFilterExpression(selectedTagOptions) {
|
||||
return expression;
|
||||
}
|
||||
|
||||
export function buildTagOptionsFromRows(rows = []) {
|
||||
export function buildTagOptionsFromRows(rows, field = "tags") {
|
||||
let options = [];
|
||||
|
||||
let tags = [
|
||||
let parsedTags = [
|
||||
...new Map(
|
||||
getRawTagValuesFromRows(rows)
|
||||
getRawTagValuesFromRows(rows, field)
|
||||
.filter((tag) => tag && tag.done !== true)
|
||||
.sort((a, b) => {
|
||||
return a.prioritaet - b.prioritaet;
|
||||
@@ -78,22 +78,25 @@ export function buildTagOptionsFromRows(rows = []) {
|
||||
label: tag.beschreibung || tag.typ_kurzbz,
|
||||
value: tag.beschreibung || tag.typ_kurzbz,
|
||||
style: tag.style,
|
||||
automatisiert: tag.automatisiert,
|
||||
done: tag.done,
|
||||
};
|
||||
})
|
||||
.map((obj) => [JSON.stringify(obj), obj]),
|
||||
).values(),
|
||||
];
|
||||
if (!Array.isArray(tags)) return;
|
||||
if (!Array.isArray(parsedTags)) return;
|
||||
|
||||
return tags;
|
||||
return parsedTags;
|
||||
}
|
||||
|
||||
export function syncTagHeaderFilterOptions(
|
||||
rows = [],
|
||||
initialOptions = [],
|
||||
selectedOptions = [],
|
||||
field = "tags"
|
||||
) {
|
||||
const options = buildTagOptionsFromRows(rows) || [];
|
||||
const options = buildTagOptionsFromRows(rows, field) || [];
|
||||
|
||||
if (Array.isArray(initialOptions)) {
|
||||
initialOptions.splice(0, initialOptions.length, ...options);
|
||||
@@ -143,15 +146,15 @@ export function syncSelectedTagOptionsWithHeaderFilters(
|
||||
return true;
|
||||
}
|
||||
|
||||
export function getRawTagValuesFromRows(rows = []) {
|
||||
let tags = [];
|
||||
export function getRawTagValuesFromRows(rows = [], field = "tags") {
|
||||
let parsedTags = [];
|
||||
|
||||
rows.forEach((row) => {
|
||||
if (!row || (!row.tags?.length && !row._children?.length)) return;
|
||||
if (!row || (!row[field]?.length && !row._children?.length)) return;
|
||||
|
||||
let newTags = row.tags?.length
|
||||
? [row.tags]
|
||||
: getRawTagValuesFromRows(row._children);
|
||||
let newTags = row[field]?.length
|
||||
? [row[field]]
|
||||
: getRawTagValuesFromRows(row._children, field);
|
||||
|
||||
newTags = newTags
|
||||
.map((newTag) => {
|
||||
@@ -167,10 +170,10 @@ export function getRawTagValuesFromRows(rows = []) {
|
||||
})
|
||||
.filter((newTag) => newTag !== null);
|
||||
|
||||
tags = tags.concat(newTags);
|
||||
parsedTags = parsedTags.concat(newTags);
|
||||
});
|
||||
|
||||
return tags.flat();
|
||||
return parsedTags.flat();
|
||||
}
|
||||
|
||||
export function customTagFilter(cell, onRendered, success, cancel, params) {
|
||||
@@ -380,6 +383,12 @@ function generateDropdownTable(options, selectedTagOptions, labels) {
|
||||
const label = document.createElement("span");
|
||||
label.className = "tag " + option.style;
|
||||
label.innerText = option.label;
|
||||
|
||||
if (option.automatisiert) {
|
||||
label.innerHTML = "<i class='fa-solid fa-lock'></i> " + option.label;
|
||||
label.className += " tag_auto";
|
||||
}
|
||||
|
||||
labelTd.appendChild(label);
|
||||
row.appendChild(labelTd);
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
export function tagFormatter(cell, tagComponent, onRendered) {
|
||||
const mappedData = tagComponent.tags.map((tag) => ({
|
||||
export function tagFormatter(cell, tagComponent, onRendered, tagKey = "tags") {
|
||||
const mappedData = tagComponent[tagKey]?.map((tag) => ({
|
||||
typ_kurzbz: tag.tag_typ_kurzbz,
|
||||
automatisiert: tag.automatisiert,
|
||||
}));
|
||||
@@ -49,7 +49,7 @@ export function tagFormatter(cell, tagComponent, onRendered) {
|
||||
tagElement.className = "tag " + tag.style;
|
||||
if (tag.done) tagElement.className += " tag_done";
|
||||
|
||||
const tagDef = mappedData.find((t) => t.typ_kurzbz === tag.typ_kurzbz);
|
||||
const tagDef = mappedData?.find((t) => t.typ_kurzbz === tag.typ_kurzbz);
|
||||
|
||||
if (
|
||||
(!tagDef && tag.typ_kurzbz?.includes("_auto")) ||
|
||||
|
||||
Reference in New Issue
Block a user