Socket
Socket
Sign inDemoInstall

@dataforsyningen/designsystem

Package Overview
Dependencies
Maintainers
2
Versions
61
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@dataforsyningen/designsystem - npm Package Compare versions

Comparing version 5.2.1 to 5.3.0

src/js/dataTable.js

165

assets/designsystem.js

@@ -683,2 +683,166 @@ // src/js/toast.js

// src/js/dataTable.js
var DSDataTable = class extends HTMLElement {
#tableHeaders = [];
#tableBody = [];
#tableBodyFiltered = [];
set data(payload) {
this.#tableHeaders = payload.headers;
this.#tableBody = payload.body;
this.#tableBodyFiltered = payload.body;
this.render();
}
constructor() {
super();
}
connectedCallback() {
this.className = "ds-data-table";
}
render() {
this.innerHTML = "";
this.append(this.renderFilterInput());
const tableElement = document.createElement("table");
tableElement.innerHTML = "<thead></thead><tbody></tbody>";
this.append(tableElement);
this.renderHeader();
this.renderBody();
}
renderFilterInput() {
const filterElement = document.createElement("input");
filterElement.type = "search";
filterElement.style.width = "auto";
filterElement.addEventListener("input", this.filterDataHandler.bind(this));
return filterElement;
}
renderHeader() {
const tableHead = this.querySelector("thead");
const tableHeaderRow = document.createElement("tr");
this.#tableHeaders.forEach((header, index) => {
tableHeaderRow.append(this.renderHeaderCell(header, index));
});
tableHead.append(tableHeaderRow);
}
renderHeaderCell(data, index) {
const headerElement = document.createElement("th");
headerElement.dataset.index = index;
if (typeof data === "object") {
if (data.type === "number") {
headerElement.style.textAlign = "right";
}
if (!data.sortable) {
headerElement.innerText = data.value;
} else {
headerElement.innerHTML = this.renderSortButtons(data.value);
headerElement.querySelector("button").addEventListener("click", this.sortHandler.bind(this));
}
} else {
headerElement.innerHTML = this.renderSortButtons(data);
headerElement.querySelector("button").addEventListener("click", this.sortHandler.bind(this));
}
return headerElement;
}
renderSortButtons(title) {
return `
<button class="quiet button-sort">
<svg class="icon-sort-ascend" width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title>Sort\xE9r stigende</title>
<path d="M6 14L12 8L18 14" stroke="var(--ds-icon-color, black)" stroke-linecap="round" stroke-linejoin="round" fill="none"></path>
</svg>
<svg class="icon-sort-descend" width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title>Sort\xE9r faldende</title>
<path d="M6 10L12 16L18 10" stroke="var(--ds-icon-color, black)" stroke-linecap="round" stroke-linejoin="round" fill="none"></path>
</svg>
${title}
</button>
`;
}
renderBody() {
const tableBody = this.querySelector("tbody");
tableBody.innerHTML = "";
this.#tableBodyFiltered.forEach((rowData) => {
tableBody.append(this.renderCells(rowData));
});
}
renderCells(rowData) {
const rowElement = document.createElement("tr");
rowData.forEach((cellData) => {
rowElement.append(this.renderCell(cellData));
});
return rowElement;
}
renderCell(data) {
const cellElement = document.createElement("td");
if (typeof data === "string") {
cellElement.innerHTML = data;
} else if (typeof data === "number") {
cellElement.innerText = data;
cellElement.style.textAlign = "right";
} else if (typeof data === "object") {
if (data.type === "number") {
cellElement.style.textAlign = "right";
}
if (data.editable && data.type === "number") {
cellElement.innerHTML = `<input type="number" value="${data.value}" style="text-align: right; width: 100%;">`;
} else if (data.editable && data.type === "string") {
cellElement.innerHTML = `<input type="text" value="${data.value}">`;
} else {
cellElement.innerHTML = data.value;
}
if (data.editCallback) {
cellElement.querySelector("input").addEventListener("input", data.editCallback);
}
}
return cellElement;
}
filterDataHandler(event) {
if (event.target.value === "" || !event.target.value) {
this.#tableBodyFiltered = this.#tableBody;
} else {
this.#tableBodyFiltered = this.filterData(this.#tableBody, event.target.value);
}
this.renderBody();
}
filterData(data, query) {
return data.filter((dataRow) => {
let match = false;
dataRow.forEach((cell) => {
if (cell.toString().includes(query)) {
match = true;
}
});
return match;
});
}
sortHandler(event) {
let target = event.target;
if (event.target.tagName === "SVG") {
target = event.target.parentElement;
}
target.classList.toggle("asc");
const sortMode = target.className.includes("asc");
const targetIndex = target.parentElement.dataset.index;
this.#tableBodyFiltered = this.sortData(this.#tableBodyFiltered, targetIndex, sortMode);
this.renderBody();
}
sortData(data, columnIndex, direction) {
return data.sort((a, b) => {
let xVal, yVal;
if (direction) {
xVal = a[columnIndex].value ? a[columnIndex].value : a[columnIndex];
yVal = b[columnIndex].value ? b[columnIndex].value : b[columnIndex];
} else {
yVal = a[columnIndex].value ? a[columnIndex].value : a[columnIndex];
xVal = b[columnIndex].value ? b[columnIndex].value : b[columnIndex];
}
if (xVal > yVal) {
return 1;
} else if (xVal > yVal) {
return -1;
} else {
return 0;
}
});
}
};
// src/js/popover.js

@@ -1227,2 +1391,3 @@ var ToggleEvent = class extends Event {

CodeView,
DSDataTable,
DSIcon,

@@ -1229,0 +1394,0 @@ DSLogo,

2

index.js

@@ -11,2 +11,3 @@ import { CodeView } from './src/js/codeview.js'

import { DSIcon } from './src/js/icon.js'
import { DSDataTable } from './src/js/dataTable.js'
import { popoverPolyfill } from './src/js/popover.js'

@@ -26,4 +27,5 @@ import { showToast } from './src/js/toast.js'

DSIcon,
DSDataTable,
popoverPolyfill,
showToast
}

2

package.json
{
"name": "@dataforsyningen/designsystem",
"version": "5.2.1",
"version": "5.3.0",
"description": "Common design system for SDFI with CSS, icons, UI components, and logo images.",

@@ -5,0 +5,0 @@ "type": "module",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc