2020-04-10 15:47:29 +02:00
|
|
|
import dayjs from 'dayjs';
|
|
|
|
|
|
|
|
|
|
export default function (el, binding)
|
|
|
|
|
{
|
|
|
|
|
const item = binding.value.item;
|
|
|
|
|
const column = binding.value.column;
|
|
|
|
|
const value = item[column.field];
|
|
|
|
|
const isEmpty = typeof value === 'undefined' || value === null;
|
|
|
|
|
|
|
|
|
|
let render = (value, asHtml) =>
|
|
|
|
|
{
|
|
|
|
|
if (asHtml)
|
|
|
|
|
{
|
|
|
|
|
el.innerHTML = value;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
el.innerText = value;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2020-04-11 16:34:24 +02:00
|
|
|
// set multiline for cell
|
|
|
|
|
el.classList.toggle('is-multiline', column.multiline === true);
|
2020-04-10 15:47:29 +02:00
|
|
|
|
|
|
|
|
// render empty
|
2020-04-10 19:12:10 +02:00
|
|
|
//if (isEmpty)
|
|
|
|
|
//{
|
|
|
|
|
// render(column.default || value);
|
|
|
|
|
//}
|
2020-04-10 15:47:29 +02:00
|
|
|
// output text string or HTML
|
2020-04-10 19:12:10 +02:00
|
|
|
if (!column.as || column.as === 'text' || column.as === 'html')
|
2020-04-10 15:47:29 +02:00
|
|
|
{
|
|
|
|
|
const hasFunc = typeof column.render === 'function';
|
|
|
|
|
render(hasFunc ? column.render(item, column) : value, column.as === 'html');
|
|
|
|
|
}
|
|
|
|
|
// formatted date with optional time
|
|
|
|
|
else if (column.as === 'date' || column.as === 'datetime')
|
|
|
|
|
{
|
|
|
|
|
let format = column.as === 'datetime' ? 'DD.MM.YY HH:mm' : 'DD.MM.YY';
|
|
|
|
|
render(dayjs(value).format(format));
|
|
|
|
|
}
|
|
|
|
|
// render formatted price
|
|
|
|
|
else if (column.as === 'price')
|
|
|
|
|
{
|
|
|
|
|
let price = isNaN(value) ? 0 : value;
|
|
|
|
|
let hasDecimals = ~~price !== price;
|
|
|
|
|
|
|
|
|
|
price = hasDecimals ? (price / 1).toFixed(2) : ~~price;
|
|
|
|
|
|
|
|
|
|
render(price.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ") + " €", true);
|
|
|
|
|
}
|
2020-04-10 19:12:10 +02:00
|
|
|
else if (column.as === 'bool')
|
|
|
|
|
{
|
|
|
|
|
render('<span class="ui-table-field-bool' + (value === true ? ' is-checked' : '') + (column.colored ? ' is-colored' : '') + '"></span>', true);
|
|
|
|
|
}
|
2020-04-10 15:47:29 +02:00
|
|
|
else
|
|
|
|
|
{
|
2020-04-10 19:12:10 +02:00
|
|
|
console.warn(`ui-table: Column display type ("${column.as}") is not supported`);
|
2020-04-10 15:47:29 +02:00
|
|
|
}
|
|
|
|
|
}
|