From 89b95b8a37208c95a48cf3643d243f5e327756ab Mon Sep 17 00:00:00 2001 From: DanyLE Date: Fri, 17 Feb 2023 12:25:53 +0100 Subject: [PATCH] gridview: allow to update row data --- d.ts/antos.d.ts | 17 +++++++++ src/core/core.ts | 69 ++++++++++++++++++++++-------------- src/core/tags/GridViewTag.ts | 15 ++++---- 3 files changed, 66 insertions(+), 35 deletions(-) diff --git a/d.ts/antos.d.ts b/d.ts/antos.d.ts index f70f436..3d1421e 100644 --- a/d.ts/antos.d.ts +++ b/d.ts/antos.d.ts @@ -1482,6 +1482,23 @@ interface String { */ trimBy(arg: string): string; } +/** + * Extend the Array prototype with some API + * functions used by AntOS API + * + * @interface Array + * @template T + */ +interface Array { + /** + * Check if the array includes an element + * + * @param {T} element to check + * @returns {boolean} + * @memberof Array + */ + includes(element: T): boolean; +} /** * Extend the Data prototype with the * [[timestamp]] function diff --git a/src/core/core.ts b/src/core/core.ts index e894e4e..8570926 100644 --- a/src/core/core.ts +++ b/src/core/core.ts @@ -157,6 +157,25 @@ interface String { trimBy(arg: string): string; } + +/** + * Extend the Array prototype with some API + * functions used by AntOS API + * + * @interface Array + * @template T + */ +interface Array { + /** + * Check if the array includes an element + * + * @param {T} element to check + * @returns {boolean} + * @memberof Array + */ + includes(element: T): boolean; +} + /** * Extend the Data prototype with the * [[timestamp]] function @@ -505,10 +524,8 @@ namespace OS { * * @memberof Version */ - set version_string(v: string) - { - if(!v) - { + set version_string(v: string) { + if (!v) { this.string = undefined; this.major = undefined; this.minor = undefined; @@ -526,12 +543,11 @@ namespace OS { this.branch = 3; if (arr.length >= 2 && br[arr[1]]) { this.branch = br[arr[1]]; - if(arr[2]) - { + if (arr[2]) { this.build_id = arr[2]; } } - + const mt = arr[0].match(/\d+/g); if (!mt) { API.throwe( @@ -551,8 +567,7 @@ namespace OS { this.patch = Number(mt[2]); } } - get version_string(): string - { + get version_string(): string { return this.string; } @@ -807,9 +822,9 @@ namespace OS { */ export const REPOSITORY: string = "https://github.com/lxsang/antos"; - /** - * Indicate whether the current de - */ + /** + * Indicate whether the current de + */ export var mobile: boolean = false; /** * Register a model prototype to the system namespace. @@ -1266,10 +1281,10 @@ namespace OS { return new Promise(function (resolve, reject) { const q = announcer.getMID(); //insert a temporal file selector - const o = + const o = $("") - .attr("type","file") - .attr("multiple","true"); + .attr("type", "file") + .attr("multiple", "true"); o.on("change", function () { const files = (o[0] as HTMLInputElement).files; const n_files = files.length; @@ -1287,15 +1302,15 @@ namespace OS { contentType: false, processData: false, }) - .done(function (data) { - API.loaded(q, p, "OK"); - resolve(data); - }) - .fail(function (j, s, e) { - API.loaded(q, p, "FAIL"); - o.remove(); - reject(API.throwe(s)); - }); + .done(function (data) { + API.loaded(q, p, "OK"); + resolve(data); + }) + .fail(function (j, s, e) { + API.loaded(q, p, "FAIL"); + o.remove(); + reject(API.throwe(s)); + }); }); return o.trigger("click"); }); @@ -1332,7 +1347,7 @@ namespace OS { * @param {string} p message string */ export function loading(q: number, p: string): void { - const data:API.AnnouncementDataType = {} as API.AnnouncementDataType; + const data: API.AnnouncementDataType = {} as API.AnnouncementDataType; data.id = q; data.message = p; data.name = p; @@ -1352,7 +1367,7 @@ namespace OS { * @param {string} m message status (`OK` of `FAIL`) */ export function loaded(q: number, p: string, m: string): void { - const data:API.AnnouncementDataType = {} as API.AnnouncementDataType; + const data: API.AnnouncementDataType = {} as API.AnnouncementDataType; data.id = q; data.message = p; data.name = "OS"; @@ -1445,7 +1460,7 @@ namespace OS { * @returns {Promise} a promise on the result data */ export function requires(l: string, force: boolean = false): Promise { - return new Promise(async (resolve, reject) =>{ + return new Promise(async (resolve, reject) => { try { if (!API.shared[l] || force) { const libfp = l.asFileHandle(); diff --git a/src/core/tags/GridViewTag.ts b/src/core/tags/GridViewTag.ts index 16ffb92..b9e38be 100644 --- a/src/core/tags/GridViewTag.ts +++ b/src/core/tags/GridViewTag.ts @@ -101,6 +101,10 @@ namespace OS { { this.attach(v); } + for (let celi = 0; celi < this.children.length; celi++) { + const cel = (this.children[celi] as GridCellPrototype); + cel.data = v[celi]; + } } get data(): GenericObject[] { return this._data; @@ -785,10 +789,6 @@ namespace OS { for (let i = 0; i < nmin; i++) { const rowel = (this.refs.grid.children[i] as GridRowTag); rowel.data = rows[i]; - for (let celi = 0; celi < rowel.children.length; celi++) { - const cel = (rowel.children[celi] as GridCellPrototype); - cel.data = rows[i][celi]; - } } // remove existing remaining rows if (ndrows < ncrows) { @@ -930,20 +930,19 @@ namespace OS { const el = rowel[0] as GridRowTag; rowel[0].uify(this.observable); - el.data = row; - + for (let cell of row) { let tag = this.cellitem; if (cell.tag) { - ({ tag } = cell); + tag = cell.tag; } const el = $(`<${tag}>`).appendTo(rowel); const element = el[0] as GridCellPrototype; element.uify(this.observable); element.oncellselect = (e) => this.cellselect(e, false); element.oncelldbclick = (e) => this.cellselect(e, true); - element.data = cell; } + el.data = row; el.onrowselect = (e) => this.rowselect({ id: el.aid, data: { item: el }