mirror of
https://github.com/esiur/iui.git
synced 2026-04-04 06:58:22 +00:00
Table
This commit is contained in:
73
src/Data/If.js
Normal file
73
src/Data/If.js
Normal file
@@ -0,0 +1,73 @@
|
||||
import IUIElement from "../Core/IUIElement.js";
|
||||
import { IUI } from "../Core/IUI.js";
|
||||
|
||||
export default IUI.module(class If extends IUIElement {
|
||||
constructor() {
|
||||
super();
|
||||
this._condition = false;
|
||||
this._template = [];
|
||||
this._prepared = false;
|
||||
this._updating = false;
|
||||
}
|
||||
|
||||
get condition() {
|
||||
return this._condition;
|
||||
}
|
||||
|
||||
set condition(value) {
|
||||
const next = !!value;
|
||||
if (this._condition === next)
|
||||
return;
|
||||
this._condition = next;
|
||||
this._updateVisibility();
|
||||
}
|
||||
|
||||
create() {
|
||||
if (this._created)
|
||||
return;
|
||||
this._created = true;
|
||||
this._stashChildren();
|
||||
}
|
||||
|
||||
_stashChildren() {
|
||||
this._template = Array.from(this.childNodes);
|
||||
for (let i = 0; i < this._template.length; i++)
|
||||
this.removeChild(this._template[i]);
|
||||
}
|
||||
|
||||
_restoreChildren() {
|
||||
if (this.childNodes.length !== 0 || this._template.length === 0)
|
||||
return;
|
||||
for (let i = 0; i < this._template.length; i++)
|
||||
this.appendChild(this._template[i]);
|
||||
}
|
||||
|
||||
async _updateVisibility() {
|
||||
if (this._updating)
|
||||
return;
|
||||
this._updating = true;
|
||||
|
||||
try {
|
||||
if (this._condition) {
|
||||
this._restoreChildren();
|
||||
|
||||
if (!this._prepared) {
|
||||
await IUI.create(this);
|
||||
IUI.bind(this, true, "if", this.__i_bindings?.scope);
|
||||
this.__i_bindings?.scope?.refs?._build();
|
||||
await IUI.created(this);
|
||||
this._prepared = true;
|
||||
}
|
||||
|
||||
await IUI.render(this, this._data, false, this._radix);
|
||||
}
|
||||
else if (this.childNodes.length > 0) {
|
||||
this._template = Array.from(this.childNodes);
|
||||
for (let i = 0; i < this._template.length; i++)
|
||||
this.removeChild(this._template[i]);
|
||||
}
|
||||
} finally {
|
||||
this._updating = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -185,23 +185,26 @@ export default IUI.module(class Multiselect extends IUIElement {
|
||||
chip.appendChild(chipRemove);
|
||||
this.chips.appendChild(chip);
|
||||
|
||||
this.wrap = document.createElement("div");
|
||||
this.wrap.className = this.cssClass + "-input";
|
||||
this.wrap.appendChild(this.chips);
|
||||
this.wrap.appendChild(this.textbox);
|
||||
//this.wrap = document.createElement("div");
|
||||
//this.wrap.className = this.cssClass + "-input";
|
||||
|
||||
this.header = document.createElement("div");
|
||||
this.header.className = this.cssClass + "-autocomplete-header";
|
||||
this.header.appendChild(this.wrap);
|
||||
//this.header = document.createElement("div");
|
||||
//this.header.className = this.cssClass + "-autocomplete-header";
|
||||
//this.header.appendChild(this.wrap);
|
||||
//this.header.appendChild(this.chips);
|
||||
|
||||
this.appendChild(this.header);
|
||||
this.append(this.chips);
|
||||
|
||||
this.chips.appendChild(this.textbox);
|
||||
|
||||
this.wrap.addEventListener("click", function (e) {
|
||||
if (e.target && e.target.classList.contains(self.cssClass + "-chip-remove"))
|
||||
return;
|
||||
self.textbox.focus();
|
||||
self.show();
|
||||
});
|
||||
//this.appendChild(this.header);
|
||||
|
||||
// this.header.addEventListener("click", function (e) {
|
||||
// if (e.target && e.target.classList.contains(self.cssClass + "-chip-remove"))
|
||||
// return;
|
||||
// self.textbox.focus();
|
||||
// self.show();
|
||||
// });
|
||||
|
||||
this.chips.addEventListener("click", function (e) {
|
||||
let remove = e.target?.closest("." + self.cssClass + "-chip-remove");
|
||||
@@ -222,7 +225,7 @@ export default IUI.module(class Multiselect extends IUIElement {
|
||||
if (this.hasArrow) {
|
||||
this.arrow = document.createElement("div");
|
||||
this.arrow.className = this.cssClass + "-autocomplete-arrow";
|
||||
this.wrap.appendChild(this.arrow);
|
||||
this.chips.appendChild(this.arrow);
|
||||
|
||||
this.arrow.addEventListener("click", function () {
|
||||
if (self.visible)
|
||||
|
||||
@@ -810,7 +810,7 @@ export default IUI.module(class Table extends IUIElement {
|
||||
row.cells[0].insertAdjacentElement("afterbegin", button);
|
||||
}
|
||||
|
||||
add(item, dynamicLoading)//fast)
|
||||
async add(item, dynamicLoading)//fast)
|
||||
{
|
||||
|
||||
this.list.push(item);
|
||||
@@ -835,11 +835,11 @@ export default IUI.module(class Table extends IUIElement {
|
||||
if (treeButton.length == 0)
|
||||
{
|
||||
this._createTreeButton(parentRow);
|
||||
newRow = this._addRow(item, parseInt(parentRow.getAttribute("data-level")) + 1, false, parentRow.rowIndex);
|
||||
newRow = await this._addRow(item, parseInt(parentRow.getAttribute("data-level")) + 1, false, parentRow.rowIndex);
|
||||
}
|
||||
else
|
||||
{
|
||||
newRow = this._addRow(item, parseInt(parentRow.getAttribute("data-level")) + 1, treeButton[0].getAttribute("data-expand") == '1', parentRow.rowIndex);
|
||||
newRow = await this._addRow(item, parseInt(parentRow.getAttribute("data-level")) + 1, treeButton[0].getAttribute("data-expand") == '1', parentRow.rowIndex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -849,7 +849,7 @@ export default IUI.module(class Table extends IUIElement {
|
||||
}
|
||||
else
|
||||
{
|
||||
newRow = this._addRow(item, 0, true);
|
||||
newRow = await this._addRow(item, 0, true);
|
||||
}
|
||||
|
||||
if (dynamicLoading)
|
||||
@@ -888,7 +888,7 @@ export default IUI.module(class Table extends IUIElement {
|
||||
return rt;
|
||||
};
|
||||
|
||||
_addRow(item, level, visible, index)
|
||||
async _addRow(item, level, visible, index)
|
||||
{
|
||||
var self = this;
|
||||
// add item
|
||||
@@ -909,16 +909,25 @@ export default IUI.module(class Table extends IUIElement {
|
||||
|
||||
//this._make_bindings(cl)
|
||||
|
||||
IUI.bind(cl, false, "table",
|
||||
IUI.extend(this.__i_bindings, {index: i}, true));
|
||||
const scope = IUI.extend(this.__i_bindings?.scope, { index: i }, true);
|
||||
|
||||
tr.appendChild(cl);
|
||||
|
||||
if (cl.dataMap != null)
|
||||
cl.dataMap.render(item).then(() => self._renderElement(cl, cl.data));
|
||||
try {
|
||||
await IUI.create(cl, true);
|
||||
IUI.bind(cl, false, "table", scope);
|
||||
await IUI.created(cl, true);
|
||||
} catch (ex) {
|
||||
console.log(ex);
|
||||
}
|
||||
|
||||
if (cl.dataMap != null) {
|
||||
await cl.dataMap.render(item);
|
||||
await IUI.render(cl, cl.data, false, item);
|
||||
}
|
||||
else {
|
||||
cl.data = item;
|
||||
this._renderElement(cl, cl.data);
|
||||
await IUI.render(cl, cl.data, false, item);
|
||||
}
|
||||
//if (column.formatter)
|
||||
//{
|
||||
@@ -1288,7 +1297,7 @@ export default IUI.module(class Table extends IUIElement {
|
||||
}
|
||||
}
|
||||
|
||||
_renderItem(item, propertyName = null)
|
||||
async _renderItem(item, propertyName = null)
|
||||
{
|
||||
var rows = this.getRows(this.indexer(item));
|
||||
var removedRows = [];
|
||||
@@ -1343,11 +1352,11 @@ export default IUI.module(class Table extends IUIElement {
|
||||
if (treeButton.length == 0)
|
||||
{
|
||||
this._createTreeButton(parentRow);
|
||||
this._addRow(item, parseInt(parentRow.getAttribute("data-level")) + 1, false, parentRow.rowIndex);
|
||||
await this._addRow(item, parseInt(parentRow.getAttribute("data-level")) + 1, false, parentRow.rowIndex);
|
||||
}
|
||||
else
|
||||
{
|
||||
this._addRow(item, parseInt(parentRow.getAttribute("data-level")) + 1, treeButton[0].getAttribute("data-expand") == '1', parentRow.rowIndex);
|
||||
await this._addRow(item, parseInt(parentRow.getAttribute("data-level")) + 1, treeButton[0].getAttribute("data-expand") == '1', parentRow.rowIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1391,6 +1400,9 @@ export default IUI.module(class Table extends IUIElement {
|
||||
|
||||
async setData(value, radix)
|
||||
{
|
||||
if (!Array.isArray(value))
|
||||
return;
|
||||
|
||||
await super.setData(value, radix);
|
||||
|
||||
this.clear();
|
||||
@@ -1398,14 +1410,14 @@ export default IUI.module(class Table extends IUIElement {
|
||||
if (this.tree)
|
||||
{
|
||||
var self = this;
|
||||
var loadFunction = function(items, level)
|
||||
var loadFunction = async function(items, level)
|
||||
{
|
||||
for(var i = 0; i < items.length; i++)
|
||||
{
|
||||
var item = items[i];
|
||||
self.list.push(item);
|
||||
|
||||
var row = self._addRow(item, level, level==0);
|
||||
var row = await self._addRow(item, level, level==0);
|
||||
if (item.children && item.children.length > 0)
|
||||
{
|
||||
self._createTreeButton(row);
|
||||
@@ -1416,12 +1428,12 @@ export default IUI.module(class Table extends IUIElement {
|
||||
}
|
||||
|
||||
// recursively load items
|
||||
loadFunction(value, 0);
|
||||
await loadFunction(value, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (var i = 0; i < value.length; i++)
|
||||
this.add(value[i]);
|
||||
await this.add(value[i]);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -10,6 +10,7 @@ import "./Router/Target.js";
|
||||
|
||||
import "./Data/Repeat.js";
|
||||
import "./Data/Include.js";
|
||||
import "./Data/If.js";
|
||||
import "./Data/Form.js";
|
||||
import "./UI/Login.js";
|
||||
import "./UI/Window.js";
|
||||
|
||||
Reference in New Issue
Block a user