ninegrid2 6.175.0 → 6.177.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18243,7 +18243,7 @@ class ngFilterButton extends HTMLElement
18243
18243
  //$(panel).offset({left: l, top: t});
18244
18244
  $(panel).css({left: l, top: t});
18245
18245
 
18246
- panel.open(this.#owner, this);
18246
+ panel.open(this);
18247
18247
  }
18248
18248
  };
18249
18249
  }
@@ -18462,14 +18462,13 @@ class ngFilterPanel extends HTMLElement
18462
18462
  this.style.display = 'none';
18463
18463
  };
18464
18464
 
18465
- open = (owner, filterButton) => {
18465
+ open = (filterButton) => {
18466
+
18467
+ const owner = this.shadow.closest("nine-grid");
18466
18468
 
18467
18469
  var col = filterButton.closest('th,td').dataset.col;
18468
18470
  this.col = col;
18469
18471
 
18470
- //if (this.#target && this.#target.uuid == owner.uuid && this.#target.col == col && $(this).is(':visible')) {
18471
- if (this.#target && this.#target.col == col && $(this).is(':visible')) ;
18472
-
18473
18472
  this.#target = {
18474
18473
  owner : owner,
18475
18474
  button : filterButton,
@@ -18478,13 +18477,121 @@ class ngFilterPanel extends HTMLElement
18478
18477
  };
18479
18478
 
18480
18479
  this.style.display = 'flex';
18481
- //$(this).show();
18482
-
18483
- //console.log(document.shadow.querySelectorAll(this), ninegrid.j.querySelectorAll(this));
18484
- //ninegrid.j.querySelectorAll(this).addClass("loading");
18485
18480
  this.classList.add("loading");
18481
+
18486
18482
 
18487
- return;
18483
+ this.shadowRoot.querySelector("input[type=text]").value = "";
18484
+
18485
+ //$(this.shadowRoot).find("input[type=text]").val("");
18486
+
18487
+ setTimeout(() => {
18488
+
18489
+
18490
+ var ds = [];
18491
+ var colnms = [];
18492
+ $(owner.template).find(`[data-col=${col}]`).each((index,el) => {
18493
+ if (el.dataset.bind) colnms.push(el.dataset.bind);
18494
+ });
18495
+
18496
+ owner.activeTmpl.querySelectorAll(`[data-col=${col}]`).forEach(el => {
18497
+ if (el.dataset.bind) colnms.push(el.dataset.bind);
18498
+ });
18499
+
18500
+ console.log(colnms);
18501
+
18502
+ var data = owner.data.getValidDataNF();
18503
+ $("ng-filter-button", owner.body).each((index,el) => {
18504
+
18505
+ if (el.closest('th,td').dataset.col == col || !el.filterData) return true;
18506
+ /**
18507
+ el.filterData.forEach(o => {
18508
+ var idx = owner.fields.indexOf(o.colnm);
18509
+
18510
+ if (idx >= 0) {
18511
+ data = data.filter(m => { return o.data.nineBinarySearch(m.v[idx] || '') >= 0; });
18512
+ }
18513
+ });
18514
+ */
18515
+
18516
+ console.log(el.filterData, el.colnms, el.dataset.bind);
18517
+
18518
+ el.colnms.forEach(colnm => {
18519
+ var idx = owner.fields.indexOf(colnm);
18520
+
18521
+ console.log(idx);
18522
+
18523
+ if (idx >= 0) {
18524
+ data = data.filter(m => { return el.filterData.nineBinarySearch(m.v[idx] || '') >= 0; });
18525
+ }
18526
+ });
18527
+
18528
+ //data = data.filter(rowData => { return el.filterData.findIndex(item => (item.DATA || '') == (rowData[item.COLNM] || '') ) >= 0; });
18529
+ });
18530
+
18531
+
18532
+ colnms = [...new Set(colnms)];
18533
+ colnms.forEach((colnm,i) => {
18534
+
18535
+ ds.push({
18536
+ LVL: 1,
18537
+ CHK: 'N',
18538
+ DATA2: '<span class="group">' + $(filterButton).closest('th,td').text() + (colnms.length > 1 ? ` #${i+1} (${colnm})` : '') + '</span>',
18539
+ });
18540
+
18541
+ var filterData = [];
18542
+ if (filterButton.filterData) {
18543
+ var idx = filterButton.filterData.findIndex(item => item.colnm == colnm);
18544
+ if (idx >= 0) {
18545
+ filterData = filterButton.filterData[idx].data;
18546
+ }
18547
+ }
18548
+
18549
+ /**
18550
+ var cell = $(`[data-col=${col}][data-bind=${colnm}]`, owner.template);
18551
+ var expr = cell.attr("data-expr");
18552
+ var exprFunc = (expr) ? owner.exprFunction(expr) : null;
18553
+ */
18554
+
18555
+ const cell = ninegrid.j.querySelectorAll(`[data-col="${col}"][data-bind="${colnm}"]`, owner.tmpl).elem();
18556
+ const expr = cell.getAttribute("data-expr");
18557
+ const exprFunc = (expr) ? owner.exprFunction(expr) : null;
18558
+
18559
+ var data2 = [];
18560
+ for (var rowData of data) {
18561
+ var idx = owner.fields.indexOf(colnm);
18562
+
18563
+ if (expr) {
18564
+ var o = owner.data.conv(rowData);
18565
+ data2.push({v:o[colnm],v2:exprFunc(o, rowData.__ng.rowidx, owner.data)});
18566
+ }
18567
+ else {
18568
+ data2.push({v:rowData.v[idx],v2:rowData.v[idx]});
18569
+ }
18570
+ }
18571
+
18572
+ [...new Set(data2.sort( (a,b) => { return (a.v2||'') > (b.v2||'') ? 1 : ((a.v2||'') < (b.v2||'') ? -1 : 0); } ).map((m) => JSON.stringify(m)))].map((m) => JSON.parse(m)).forEach(o => {
18573
+ ds.push({
18574
+ LVL : 2,
18575
+ DATA : o.v,
18576
+ DATA2 : o.v2 || ` <span class="empty">(empty)</span> ${o.v}`,
18577
+ COLNM : colnm,
18578
+ CHK : filterData.length == 0 || filterData.nineBinarySearch(o.v || '') >= 0 ? "Y" : "N",
18579
+ });
18580
+ });
18581
+ });
18582
+
18583
+ var grd = this.shadowRoot.querySelector("nine-grid");
18584
+ //grd.dataSource = ds;
18585
+ grd.fields.add(["DATA","DATA2","COLNM"]);
18586
+
18587
+ grd.data.set(ds);
18588
+
18589
+ $(this.shadowRoot).find("input[type=checkbox]").prop("checked", grd.data.getValidData().filter(item => { return item.LVL == 2 && item.CHK != "Y"; }).length == 0 ? true : false);
18590
+
18591
+ this.shadowRoot.querySelector("input").focus();
18592
+
18593
+ ninegrid.j.querySelectorAll(this).removeClass("loading");
18594
+ });
18488
18595
  };
18489
18596
  }
18490
18597
 
@@ -18241,7 +18241,7 @@ class ngFilterButton extends HTMLElement
18241
18241
  //$(panel).offset({left: l, top: t});
18242
18242
  $(panel).css({left: l, top: t});
18243
18243
 
18244
- panel.open(this.#owner, this);
18244
+ panel.open(this);
18245
18245
  }
18246
18246
  };
18247
18247
  }
@@ -18460,14 +18460,13 @@ class ngFilterPanel extends HTMLElement
18460
18460
  this.style.display = 'none';
18461
18461
  };
18462
18462
 
18463
- open = (owner, filterButton) => {
18463
+ open = (filterButton) => {
18464
+
18465
+ const owner = this.shadow.closest("nine-grid");
18464
18466
 
18465
18467
  var col = filterButton.closest('th,td').dataset.col;
18466
18468
  this.col = col;
18467
18469
 
18468
- //if (this.#target && this.#target.uuid == owner.uuid && this.#target.col == col && $(this).is(':visible')) {
18469
- if (this.#target && this.#target.col == col && $(this).is(':visible')) ;
18470
-
18471
18470
  this.#target = {
18472
18471
  owner : owner,
18473
18472
  button : filterButton,
@@ -18476,13 +18475,121 @@ class ngFilterPanel extends HTMLElement
18476
18475
  };
18477
18476
 
18478
18477
  this.style.display = 'flex';
18479
- //$(this).show();
18480
-
18481
- //console.log(document.shadow.querySelectorAll(this), ninegrid.j.querySelectorAll(this));
18482
- //ninegrid.j.querySelectorAll(this).addClass("loading");
18483
18478
  this.classList.add("loading");
18479
+
18484
18480
 
18485
- return;
18481
+ this.shadowRoot.querySelector("input[type=text]").value = "";
18482
+
18483
+ //$(this.shadowRoot).find("input[type=text]").val("");
18484
+
18485
+ setTimeout(() => {
18486
+
18487
+
18488
+ var ds = [];
18489
+ var colnms = [];
18490
+ $(owner.template).find(`[data-col=${col}]`).each((index,el) => {
18491
+ if (el.dataset.bind) colnms.push(el.dataset.bind);
18492
+ });
18493
+
18494
+ owner.activeTmpl.querySelectorAll(`[data-col=${col}]`).forEach(el => {
18495
+ if (el.dataset.bind) colnms.push(el.dataset.bind);
18496
+ });
18497
+
18498
+ console.log(colnms);
18499
+
18500
+ var data = owner.data.getValidDataNF();
18501
+ $("ng-filter-button", owner.body).each((index,el) => {
18502
+
18503
+ if (el.closest('th,td').dataset.col == col || !el.filterData) return true;
18504
+ /**
18505
+ el.filterData.forEach(o => {
18506
+ var idx = owner.fields.indexOf(o.colnm);
18507
+
18508
+ if (idx >= 0) {
18509
+ data = data.filter(m => { return o.data.nineBinarySearch(m.v[idx] || '') >= 0; });
18510
+ }
18511
+ });
18512
+ */
18513
+
18514
+ console.log(el.filterData, el.colnms, el.dataset.bind);
18515
+
18516
+ el.colnms.forEach(colnm => {
18517
+ var idx = owner.fields.indexOf(colnm);
18518
+
18519
+ console.log(idx);
18520
+
18521
+ if (idx >= 0) {
18522
+ data = data.filter(m => { return el.filterData.nineBinarySearch(m.v[idx] || '') >= 0; });
18523
+ }
18524
+ });
18525
+
18526
+ //data = data.filter(rowData => { return el.filterData.findIndex(item => (item.DATA || '') == (rowData[item.COLNM] || '') ) >= 0; });
18527
+ });
18528
+
18529
+
18530
+ colnms = [...new Set(colnms)];
18531
+ colnms.forEach((colnm,i) => {
18532
+
18533
+ ds.push({
18534
+ LVL: 1,
18535
+ CHK: 'N',
18536
+ DATA2: '<span class="group">' + $(filterButton).closest('th,td').text() + (colnms.length > 1 ? ` #${i+1} (${colnm})` : '') + '</span>',
18537
+ });
18538
+
18539
+ var filterData = [];
18540
+ if (filterButton.filterData) {
18541
+ var idx = filterButton.filterData.findIndex(item => item.colnm == colnm);
18542
+ if (idx >= 0) {
18543
+ filterData = filterButton.filterData[idx].data;
18544
+ }
18545
+ }
18546
+
18547
+ /**
18548
+ var cell = $(`[data-col=${col}][data-bind=${colnm}]`, owner.template);
18549
+ var expr = cell.attr("data-expr");
18550
+ var exprFunc = (expr) ? owner.exprFunction(expr) : null;
18551
+ */
18552
+
18553
+ const cell = ninegrid.j.querySelectorAll(`[data-col="${col}"][data-bind="${colnm}"]`, owner.tmpl).elem();
18554
+ const expr = cell.getAttribute("data-expr");
18555
+ const exprFunc = (expr) ? owner.exprFunction(expr) : null;
18556
+
18557
+ var data2 = [];
18558
+ for (var rowData of data) {
18559
+ var idx = owner.fields.indexOf(colnm);
18560
+
18561
+ if (expr) {
18562
+ var o = owner.data.conv(rowData);
18563
+ data2.push({v:o[colnm],v2:exprFunc(o, rowData.__ng.rowidx, owner.data)});
18564
+ }
18565
+ else {
18566
+ data2.push({v:rowData.v[idx],v2:rowData.v[idx]});
18567
+ }
18568
+ }
18569
+
18570
+ [...new Set(data2.sort( (a,b) => { return (a.v2||'') > (b.v2||'') ? 1 : ((a.v2||'') < (b.v2||'') ? -1 : 0); } ).map((m) => JSON.stringify(m)))].map((m) => JSON.parse(m)).forEach(o => {
18571
+ ds.push({
18572
+ LVL : 2,
18573
+ DATA : o.v,
18574
+ DATA2 : o.v2 || ` <span class="empty">(empty)</span> ${o.v}`,
18575
+ COLNM : colnm,
18576
+ CHK : filterData.length == 0 || filterData.nineBinarySearch(o.v || '') >= 0 ? "Y" : "N",
18577
+ });
18578
+ });
18579
+ });
18580
+
18581
+ var grd = this.shadowRoot.querySelector("nine-grid");
18582
+ //grd.dataSource = ds;
18583
+ grd.fields.add(["DATA","DATA2","COLNM"]);
18584
+
18585
+ grd.data.set(ds);
18586
+
18587
+ $(this.shadowRoot).find("input[type=checkbox]").prop("checked", grd.data.getValidData().filter(item => { return item.LVL == 2 && item.CHK != "Y"; }).length == 0 ? true : false);
18588
+
18589
+ this.shadowRoot.querySelector("input").focus();
18590
+
18591
+ ninegrid.j.querySelectorAll(this).removeClass("loading");
18592
+ });
18486
18593
  };
18487
18594
  }
18488
18595
 
@@ -307,7 +307,7 @@ class ngFilterButton extends HTMLElement
307
307
  //$(panel).offset({left: l, top: t});
308
308
  $(panel).css({left: l, top: t});
309
309
 
310
- panel.open(this.#owner, this);
310
+ panel.open(this);
311
311
  }
312
312
  };
313
313
  }
@@ -528,17 +528,13 @@ class ngFilterPanel extends HTMLElement
528
528
  this.style.display = 'none';
529
529
  };
530
530
 
531
- open = (owner, filterButton) => {
531
+ open = (filterButton) => {
532
+
533
+ const owner = this.shadow.closest("nine-grid");
532
534
 
533
535
  var col = filterButton.closest('th,td').dataset.col;
534
536
  this.col = col;
535
537
 
536
- //if (this.#target && this.#target.uuid == owner.uuid && this.#target.col == col && $(this).is(':visible')) {
537
- if (this.#target && this.#target.col == col && $(this).is(':visible')) {
538
- //$(this).hide();
539
- //return;
540
- }
541
-
542
538
  this.#target = {
543
539
  owner : owner,
544
540
  button : filterButton,
@@ -547,23 +543,27 @@ class ngFilterPanel extends HTMLElement
547
543
  }
548
544
 
549
545
  this.style.display = 'flex';
550
- //$(this).show();
551
-
552
- //console.log(document.shadow.querySelectorAll(this), ninegrid.j.querySelectorAll(this));
553
- //ninegrid.j.querySelectorAll(this).addClass("loading");
554
546
  this.classList.add("loading");
547
+
555
548
 
556
- return;
549
+ this.shadowRoot.querySelector("input[type=text]").value = "";
557
550
 
558
- $(this.shadowRoot).find("input[type=text]").val("");
551
+ //$(this.shadowRoot).find("input[type=text]").val("");
559
552
 
560
553
  setTimeout(() => {
561
554
 
555
+
562
556
  var ds = [];
563
557
  var colnms = [];
564
558
  $(owner.template).find(`[data-col=${col}]`).each((index,el) => {
565
559
  if (el.dataset.bind) colnms.push(el.dataset.bind);
566
560
  });
561
+
562
+ owner.activeTmpl.querySelectorAll(`[data-col=${col}]`).forEach(el => {
563
+ if (el.dataset.bind) colnms.push(el.dataset.bind);
564
+ });
565
+
566
+ console.log(colnms);
567
567
 
568
568
  var data = owner.data.getValidDataNF();
569
569
  $("ng-filter-button", owner.body).each((index,el) => {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ninegrid2",
3
3
  "type": "module",
4
- "version": "6.175.0",
4
+ "version": "6.177.0",
5
5
  "main": "dist/index.js",
6
6
  "exports": {
7
7
  "import": "./dist/index.js",
@@ -307,7 +307,7 @@ class ngFilterButton extends HTMLElement
307
307
  //$(panel).offset({left: l, top: t});
308
308
  $(panel).css({left: l, top: t});
309
309
 
310
- panel.open(this.#owner, this);
310
+ panel.open(this);
311
311
  }
312
312
  };
313
313
  }
@@ -528,17 +528,13 @@ class ngFilterPanel extends HTMLElement
528
528
  this.style.display = 'none';
529
529
  };
530
530
 
531
- open = (owner, filterButton) => {
531
+ open = (filterButton) => {
532
+
533
+ const owner = this.shadow.closest("nine-grid");
532
534
 
533
535
  var col = filterButton.closest('th,td').dataset.col;
534
536
  this.col = col;
535
537
 
536
- //if (this.#target && this.#target.uuid == owner.uuid && this.#target.col == col && $(this).is(':visible')) {
537
- if (this.#target && this.#target.col == col && $(this).is(':visible')) {
538
- //$(this).hide();
539
- //return;
540
- }
541
-
542
538
  this.#target = {
543
539
  owner : owner,
544
540
  button : filterButton,
@@ -547,23 +543,27 @@ class ngFilterPanel extends HTMLElement
547
543
  }
548
544
 
549
545
  this.style.display = 'flex';
550
- //$(this).show();
551
-
552
- //console.log(document.shadow.querySelectorAll(this), ninegrid.j.querySelectorAll(this));
553
- //ninegrid.j.querySelectorAll(this).addClass("loading");
554
546
  this.classList.add("loading");
547
+
555
548
 
556
- return;
549
+ this.shadowRoot.querySelector("input[type=text]").value = "";
557
550
 
558
- $(this.shadowRoot).find("input[type=text]").val("");
551
+ //$(this.shadowRoot).find("input[type=text]").val("");
559
552
 
560
553
  setTimeout(() => {
561
554
 
555
+
562
556
  var ds = [];
563
557
  var colnms = [];
564
558
  $(owner.template).find(`[data-col=${col}]`).each((index,el) => {
565
559
  if (el.dataset.bind) colnms.push(el.dataset.bind);
566
560
  });
561
+
562
+ owner.activeTmpl.querySelectorAll(`[data-col=${col}]`).forEach(el => {
563
+ if (el.dataset.bind) colnms.push(el.dataset.bind);
564
+ });
565
+
566
+ console.log(colnms);
567
567
 
568
568
  var data = owner.data.getValidDataNF();
569
569
  $("ng-filter-button", owner.body).each((index,el) => {