ninegrid2 6.244.0 → 6.246.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.
- package/dist/bundle.cjs.js +37 -63
- package/dist/bundle.esm.js +37 -63
- package/dist/etc/ngFiltering.js +37 -63
- package/package.json +1 -1
- package/src/etc/ngFiltering.js +37 -63
package/dist/bundle.cjs.js
CHANGED
|
@@ -18002,7 +18002,6 @@ class ngFilterPanel extends HTMLElement
|
|
|
18002
18002
|
connectedCallback() {
|
|
18003
18003
|
|
|
18004
18004
|
this.#owner = this.getRootNode().host;
|
|
18005
|
-
console.log("========================", this.#owner);
|
|
18006
18005
|
|
|
18007
18006
|
const cssPath = this.getRootNode().host.closest("nine-grid").getAttribute("css-path") || "";
|
|
18008
18007
|
|
|
@@ -18041,114 +18040,89 @@ class ngFilterPanel extends HTMLElement
|
|
|
18041
18040
|
</div>
|
|
18042
18041
|
`;
|
|
18043
18042
|
|
|
18044
|
-
|
|
18045
|
-
|
|
18046
|
-
|
|
18047
|
-
|
|
18048
|
-
|
|
18049
|
-
//$(this).on("mousedown", e => { e.preventDefault(); e.stopPropagation(); });
|
|
18050
|
-
//$(this).on("mousedown", e => { e.stopPropagation(); });
|
|
18043
|
+
this.shadowRoot.querySelector("input[type=text]").addEventListener("input", this.#onInput);
|
|
18044
|
+
this.shadowRoot.querySelector("input[type=checkbox]").addEventListener("change", this.#onSelectAll);
|
|
18045
|
+
this.shadowRoot.querySelector("#btnOk").addEventListener("click", this.#onOk);
|
|
18046
|
+
this.shadowRoot.querySelector("#btnCancel").addEventListener("click", this.#onCancel);
|
|
18051
18047
|
};
|
|
18052
18048
|
|
|
18053
18049
|
#onOk = (e) => {
|
|
18054
18050
|
|
|
18055
18051
|
const grd = this.shadowRoot.querySelector("nine-grid");
|
|
18056
18052
|
|
|
18057
|
-
//ninegrid.j.querySelectorAll(grd).addClass("loading");
|
|
18058
|
-
//ninegrid.j.querySelectorAll(this.#target.owner).addClass("loading");
|
|
18059
18053
|
this.classList.add("loading");
|
|
18060
18054
|
|
|
18061
18055
|
setTimeout(() => {
|
|
18062
|
-
|
|
18063
|
-
const
|
|
18064
|
-
const
|
|
18065
|
-
|
|
18066
|
-
|
|
18067
|
-
|
|
18068
|
-
const checked = grd.data.getValidDataNF().filter(m => { return m.v[LVL_IDX] == 2 && m.v[CHK_IDX] == "Y"; });
|
|
18069
|
-
//const unchecked = grd.data.getValidDataNF().filter(m => { return m.v[LVL_IDX] == 2 && m.v[CHK_IDX] != "Y"; });
|
|
18070
|
-
|
|
18071
|
-
var filterOptions = [];
|
|
18072
|
-
if (checked.length > 0) {
|
|
18073
|
-
|
|
18074
|
-
[...new Set(checked.map(m => { return m.v[COLNM_IDX] }))].forEach(v => {
|
|
18075
|
-
filterOptions.push({
|
|
18076
|
-
colnm : v,
|
|
18077
|
-
data : [...new Set(grd.data.getValidData().filter(m => { return m.v[CHK_IDX] == "Y" && m.v[COLNM_IDX] == v; }).map(m => { return m.v[DATA_IDX] || ''; }))].sort((a,b) => { return a > b ? 1 : -1; }),
|
|
18078
|
-
});
|
|
18079
|
-
});
|
|
18080
|
-
}
|
|
18056
|
+
const [LVL_IDX, CHK_IDX, COLNM_IDX, DATA_IDX] = ["LVL", "CHK", "COLNM", "DATA"].map(k => grd.fields.indexOf(k));
|
|
18057
|
+
const checked = grd.data.getValidDataNF().filter(m => m.v[LVL_IDX] === 2 && m.v[CHK_IDX] === "Y");
|
|
18058
|
+
const filterOptions = checked.length > 0 ? [...new Set(checked.map(m => m.v[COLNM_IDX]))].map(v => ({
|
|
18059
|
+
colnm: v,
|
|
18060
|
+
data: [...new Set(grd.data.getValidData().filter(m => m.v[CHK_IDX] === "Y" && m.v[COLNM_IDX] === v).map(m => m.v[DATA_IDX] || ''))].sort()
|
|
18061
|
+
})) : [];
|
|
18081
18062
|
|
|
18082
|
-
//console.log(filterOptions);
|
|
18083
|
-
//console.log(this.#target, this.#target.button, filterOptions)
|
|
18084
18063
|
|
|
18085
18064
|
this.#button.filterOptions = filterOptions;
|
|
18086
|
-
|
|
18087
|
-
var oParam = {};
|
|
18088
|
-
|
|
18089
|
-
this.#owner.body.querySelectorAll("ng-filter-button").forEach(el => {
|
|
18090
|
-
|
|
18091
|
-
//if (!el.filterOptions) return true;
|
|
18092
18065
|
|
|
18093
|
-
|
|
18094
|
-
|
|
18095
|
-
|
|
18096
|
-
|
|
18066
|
+
const oParam = Object.fromEntries(
|
|
18067
|
+
[...this.#owner.body.querySelectorAll("ng-filter-button")]
|
|
18068
|
+
.flatMap(el => el.filterOptions)
|
|
18069
|
+
.filter(opt => opt.data.length > 0)
|
|
18070
|
+
.map(opt => [opt.colnm, opt.data])
|
|
18071
|
+
);
|
|
18097
18072
|
|
|
18098
18073
|
this.#owner.filtering.set(oParam);
|
|
18099
18074
|
|
|
18100
18075
|
this.classList.remove("loading");
|
|
18076
|
+
this.style.display = 'none';
|
|
18101
18077
|
});
|
|
18102
|
-
|
|
18103
|
-
$(this).hide();
|
|
18104
18078
|
};
|
|
18105
18079
|
|
|
18106
18080
|
|
|
18107
18081
|
|
|
18108
18082
|
#onCancel = (e) => {
|
|
18109
|
-
|
|
18083
|
+
this.style.display = 'none';
|
|
18110
18084
|
};
|
|
18111
18085
|
|
|
18112
18086
|
#onSelectAll = (e) => {
|
|
18113
|
-
|
|
18114
|
-
|
|
18087
|
+
const grd = this.shadowRoot.querySelector("nine-grid");
|
|
18088
|
+
const idx = grd.fields.indexOf("CHK");
|
|
18089
|
+
const isChecked = e.target.checked; // ✅ jQuery 없이 `checked` 값 가져오기
|
|
18090
|
+
|
|
18091
|
+
grd.data.getValidData().forEach(m => {
|
|
18092
|
+
m.v[idx] = isChecked ? "Y" : "N"; // ✅ `Y` 또는 `N` 값 설정
|
|
18093
|
+
});
|
|
18115
18094
|
|
|
18116
|
-
grd.data.getValidData().map(m => { m.v[idx] = $(e.target).prop("checked") ? "Y" : "N"; });
|
|
18117
|
-
|
|
18118
18095
|
grd.refreshData();
|
|
18119
18096
|
};
|
|
18097
|
+
|
|
18120
18098
|
|
|
18121
18099
|
|
|
18122
18100
|
#onInput = (e) => {
|
|
18123
|
-
|
|
18124
|
-
|
|
18101
|
+
const grd = this.shadowRoot.querySelector("nine-grid");
|
|
18125
18102
|
|
|
18126
|
-
|
|
18127
|
-
|
|
18103
|
+
grd.classList.add("loading");
|
|
18128
18104
|
|
|
18129
|
-
|
|
18105
|
+
const data = grd.dataManager.rawRecords;
|
|
18106
|
+
data.forEach(m => { m.__ng.filtered = false; });
|
|
18130
18107
|
|
|
18131
|
-
|
|
18108
|
+
const v = e.target.value.toLowerCase(); // ✅ jQuery 없이 값 가져오기
|
|
18109
|
+
const [LVL_IDX, DATA_IDX] = ["LVL", "DATA"].map(field => grd.fields.indexOf(field));
|
|
18132
18110
|
|
|
18133
|
-
|
|
18134
|
-
|
|
18135
|
-
|
|
18111
|
+
data.forEach(m => {
|
|
18112
|
+
m.__ng.filtered = m.v[LVL_IDX] === 2 && !String(m.v[DATA_IDX] || "").toLowerCase().includes(v);
|
|
18113
|
+
});
|
|
18136
18114
|
|
|
18137
|
-
const LVL_IDX = grd.fields.indexOf("LVL");
|
|
18138
|
-
const DATA_IDX = grd.fields.indexOf("DATA");
|
|
18139
|
-
|
|
18140
|
-
data.filter(m => { return m.v[LVL_IDX] == 2 && String(m.v[DATA_IDX] || '').toLowerCase().indexOf(v) < 0; }).map(m => { m.__ng.filtered = true; });
|
|
18141
|
-
|
|
18142
18115
|
grd.data.resetRecords();
|
|
18143
18116
|
|
|
18144
18117
|
if (this.#timer) {
|
|
18118
|
+
console.log("-------------", this.#timer);
|
|
18145
18119
|
clearTimeout(this.#timer);
|
|
18120
|
+
console.log("===============", this.#timer);
|
|
18146
18121
|
this.#timer = null;
|
|
18147
18122
|
}
|
|
18148
18123
|
this.#timer = setTimeout(() => {
|
|
18149
18124
|
grd.dataManager.viewRecords.reset();
|
|
18150
18125
|
grd.dataManager.viewRecords.touch();
|
|
18151
|
-
//ninegrid.j.querySelectorAll(grd).removeClass("loading");
|
|
18152
18126
|
}, 200);
|
|
18153
18127
|
};
|
|
18154
18128
|
|
package/dist/bundle.esm.js
CHANGED
|
@@ -18000,7 +18000,6 @@ class ngFilterPanel extends HTMLElement
|
|
|
18000
18000
|
connectedCallback() {
|
|
18001
18001
|
|
|
18002
18002
|
this.#owner = this.getRootNode().host;
|
|
18003
|
-
console.log("========================", this.#owner);
|
|
18004
18003
|
|
|
18005
18004
|
const cssPath = this.getRootNode().host.closest("nine-grid").getAttribute("css-path") || "";
|
|
18006
18005
|
|
|
@@ -18039,114 +18038,89 @@ class ngFilterPanel extends HTMLElement
|
|
|
18039
18038
|
</div>
|
|
18040
18039
|
`;
|
|
18041
18040
|
|
|
18042
|
-
|
|
18043
|
-
|
|
18044
|
-
|
|
18045
|
-
|
|
18046
|
-
|
|
18047
|
-
//$(this).on("mousedown", e => { e.preventDefault(); e.stopPropagation(); });
|
|
18048
|
-
//$(this).on("mousedown", e => { e.stopPropagation(); });
|
|
18041
|
+
this.shadowRoot.querySelector("input[type=text]").addEventListener("input", this.#onInput);
|
|
18042
|
+
this.shadowRoot.querySelector("input[type=checkbox]").addEventListener("change", this.#onSelectAll);
|
|
18043
|
+
this.shadowRoot.querySelector("#btnOk").addEventListener("click", this.#onOk);
|
|
18044
|
+
this.shadowRoot.querySelector("#btnCancel").addEventListener("click", this.#onCancel);
|
|
18049
18045
|
};
|
|
18050
18046
|
|
|
18051
18047
|
#onOk = (e) => {
|
|
18052
18048
|
|
|
18053
18049
|
const grd = this.shadowRoot.querySelector("nine-grid");
|
|
18054
18050
|
|
|
18055
|
-
//ninegrid.j.querySelectorAll(grd).addClass("loading");
|
|
18056
|
-
//ninegrid.j.querySelectorAll(this.#target.owner).addClass("loading");
|
|
18057
18051
|
this.classList.add("loading");
|
|
18058
18052
|
|
|
18059
18053
|
setTimeout(() => {
|
|
18060
|
-
|
|
18061
|
-
const
|
|
18062
|
-
const
|
|
18063
|
-
|
|
18064
|
-
|
|
18065
|
-
|
|
18066
|
-
const checked = grd.data.getValidDataNF().filter(m => { return m.v[LVL_IDX] == 2 && m.v[CHK_IDX] == "Y"; });
|
|
18067
|
-
//const unchecked = grd.data.getValidDataNF().filter(m => { return m.v[LVL_IDX] == 2 && m.v[CHK_IDX] != "Y"; });
|
|
18068
|
-
|
|
18069
|
-
var filterOptions = [];
|
|
18070
|
-
if (checked.length > 0) {
|
|
18071
|
-
|
|
18072
|
-
[...new Set(checked.map(m => { return m.v[COLNM_IDX] }))].forEach(v => {
|
|
18073
|
-
filterOptions.push({
|
|
18074
|
-
colnm : v,
|
|
18075
|
-
data : [...new Set(grd.data.getValidData().filter(m => { return m.v[CHK_IDX] == "Y" && m.v[COLNM_IDX] == v; }).map(m => { return m.v[DATA_IDX] || ''; }))].sort((a,b) => { return a > b ? 1 : -1; }),
|
|
18076
|
-
});
|
|
18077
|
-
});
|
|
18078
|
-
}
|
|
18054
|
+
const [LVL_IDX, CHK_IDX, COLNM_IDX, DATA_IDX] = ["LVL", "CHK", "COLNM", "DATA"].map(k => grd.fields.indexOf(k));
|
|
18055
|
+
const checked = grd.data.getValidDataNF().filter(m => m.v[LVL_IDX] === 2 && m.v[CHK_IDX] === "Y");
|
|
18056
|
+
const filterOptions = checked.length > 0 ? [...new Set(checked.map(m => m.v[COLNM_IDX]))].map(v => ({
|
|
18057
|
+
colnm: v,
|
|
18058
|
+
data: [...new Set(grd.data.getValidData().filter(m => m.v[CHK_IDX] === "Y" && m.v[COLNM_IDX] === v).map(m => m.v[DATA_IDX] || ''))].sort()
|
|
18059
|
+
})) : [];
|
|
18079
18060
|
|
|
18080
|
-
//console.log(filterOptions);
|
|
18081
|
-
//console.log(this.#target, this.#target.button, filterOptions)
|
|
18082
18061
|
|
|
18083
18062
|
this.#button.filterOptions = filterOptions;
|
|
18084
|
-
|
|
18085
|
-
var oParam = {};
|
|
18086
|
-
|
|
18087
|
-
this.#owner.body.querySelectorAll("ng-filter-button").forEach(el => {
|
|
18088
|
-
|
|
18089
|
-
//if (!el.filterOptions) return true;
|
|
18090
18063
|
|
|
18091
|
-
|
|
18092
|
-
|
|
18093
|
-
|
|
18094
|
-
|
|
18064
|
+
const oParam = Object.fromEntries(
|
|
18065
|
+
[...this.#owner.body.querySelectorAll("ng-filter-button")]
|
|
18066
|
+
.flatMap(el => el.filterOptions)
|
|
18067
|
+
.filter(opt => opt.data.length > 0)
|
|
18068
|
+
.map(opt => [opt.colnm, opt.data])
|
|
18069
|
+
);
|
|
18095
18070
|
|
|
18096
18071
|
this.#owner.filtering.set(oParam);
|
|
18097
18072
|
|
|
18098
18073
|
this.classList.remove("loading");
|
|
18074
|
+
this.style.display = 'none';
|
|
18099
18075
|
});
|
|
18100
|
-
|
|
18101
|
-
$(this).hide();
|
|
18102
18076
|
};
|
|
18103
18077
|
|
|
18104
18078
|
|
|
18105
18079
|
|
|
18106
18080
|
#onCancel = (e) => {
|
|
18107
|
-
|
|
18081
|
+
this.style.display = 'none';
|
|
18108
18082
|
};
|
|
18109
18083
|
|
|
18110
18084
|
#onSelectAll = (e) => {
|
|
18111
|
-
|
|
18112
|
-
|
|
18085
|
+
const grd = this.shadowRoot.querySelector("nine-grid");
|
|
18086
|
+
const idx = grd.fields.indexOf("CHK");
|
|
18087
|
+
const isChecked = e.target.checked; // ✅ jQuery 없이 `checked` 값 가져오기
|
|
18088
|
+
|
|
18089
|
+
grd.data.getValidData().forEach(m => {
|
|
18090
|
+
m.v[idx] = isChecked ? "Y" : "N"; // ✅ `Y` 또는 `N` 값 설정
|
|
18091
|
+
});
|
|
18113
18092
|
|
|
18114
|
-
grd.data.getValidData().map(m => { m.v[idx] = $(e.target).prop("checked") ? "Y" : "N"; });
|
|
18115
|
-
|
|
18116
18093
|
grd.refreshData();
|
|
18117
18094
|
};
|
|
18095
|
+
|
|
18118
18096
|
|
|
18119
18097
|
|
|
18120
18098
|
#onInput = (e) => {
|
|
18121
|
-
|
|
18122
|
-
|
|
18099
|
+
const grd = this.shadowRoot.querySelector("nine-grid");
|
|
18123
18100
|
|
|
18124
|
-
|
|
18125
|
-
|
|
18101
|
+
grd.classList.add("loading");
|
|
18126
18102
|
|
|
18127
|
-
|
|
18103
|
+
const data = grd.dataManager.rawRecords;
|
|
18104
|
+
data.forEach(m => { m.__ng.filtered = false; });
|
|
18128
18105
|
|
|
18129
|
-
|
|
18106
|
+
const v = e.target.value.toLowerCase(); // ✅ jQuery 없이 값 가져오기
|
|
18107
|
+
const [LVL_IDX, DATA_IDX] = ["LVL", "DATA"].map(field => grd.fields.indexOf(field));
|
|
18130
18108
|
|
|
18131
|
-
|
|
18132
|
-
|
|
18133
|
-
|
|
18109
|
+
data.forEach(m => {
|
|
18110
|
+
m.__ng.filtered = m.v[LVL_IDX] === 2 && !String(m.v[DATA_IDX] || "").toLowerCase().includes(v);
|
|
18111
|
+
});
|
|
18134
18112
|
|
|
18135
|
-
const LVL_IDX = grd.fields.indexOf("LVL");
|
|
18136
|
-
const DATA_IDX = grd.fields.indexOf("DATA");
|
|
18137
|
-
|
|
18138
|
-
data.filter(m => { return m.v[LVL_IDX] == 2 && String(m.v[DATA_IDX] || '').toLowerCase().indexOf(v) < 0; }).map(m => { m.__ng.filtered = true; });
|
|
18139
|
-
|
|
18140
18113
|
grd.data.resetRecords();
|
|
18141
18114
|
|
|
18142
18115
|
if (this.#timer) {
|
|
18116
|
+
console.log("-------------", this.#timer);
|
|
18143
18117
|
clearTimeout(this.#timer);
|
|
18118
|
+
console.log("===============", this.#timer);
|
|
18144
18119
|
this.#timer = null;
|
|
18145
18120
|
}
|
|
18146
18121
|
this.#timer = setTimeout(() => {
|
|
18147
18122
|
grd.dataManager.viewRecords.reset();
|
|
18148
18123
|
grd.dataManager.viewRecords.touch();
|
|
18149
|
-
//ninegrid.j.querySelectorAll(grd).removeClass("loading");
|
|
18150
18124
|
}, 200);
|
|
18151
18125
|
};
|
|
18152
18126
|
|
package/dist/etc/ngFiltering.js
CHANGED
|
@@ -179,7 +179,6 @@ class ngFilterPanel extends HTMLElement
|
|
|
179
179
|
connectedCallback() {
|
|
180
180
|
|
|
181
181
|
this.#owner = this.getRootNode().host;
|
|
182
|
-
console.log("========================", this.#owner)
|
|
183
182
|
|
|
184
183
|
const cssPath = this.getRootNode().host.closest("nine-grid").getAttribute("css-path") || "";
|
|
185
184
|
|
|
@@ -218,114 +217,89 @@ class ngFilterPanel extends HTMLElement
|
|
|
218
217
|
</div>
|
|
219
218
|
`;
|
|
220
219
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
//$(this).on("mousedown", e => { e.preventDefault(); e.stopPropagation(); });
|
|
227
|
-
//$(this).on("mousedown", e => { e.stopPropagation(); });
|
|
220
|
+
this.shadowRoot.querySelector("input[type=text]").addEventListener("input", this.#onInput);
|
|
221
|
+
this.shadowRoot.querySelector("input[type=checkbox]").addEventListener("change", this.#onSelectAll);
|
|
222
|
+
this.shadowRoot.querySelector("#btnOk").addEventListener("click", this.#onOk);
|
|
223
|
+
this.shadowRoot.querySelector("#btnCancel").addEventListener("click", this.#onCancel);
|
|
228
224
|
};
|
|
229
225
|
|
|
230
226
|
#onOk = (e) => {
|
|
231
227
|
|
|
232
228
|
const grd = this.shadowRoot.querySelector("nine-grid");
|
|
233
229
|
|
|
234
|
-
//ninegrid.j.querySelectorAll(grd).addClass("loading");
|
|
235
|
-
//ninegrid.j.querySelectorAll(this.#target.owner).addClass("loading");
|
|
236
230
|
this.classList.add("loading");
|
|
237
231
|
|
|
238
232
|
setTimeout(() => {
|
|
239
|
-
|
|
240
|
-
const
|
|
241
|
-
const
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
const checked = grd.data.getValidDataNF().filter(m => { return m.v[LVL_IDX] == 2 && m.v[CHK_IDX] == "Y"; });
|
|
246
|
-
//const unchecked = grd.data.getValidDataNF().filter(m => { return m.v[LVL_IDX] == 2 && m.v[CHK_IDX] != "Y"; });
|
|
247
|
-
|
|
248
|
-
var filterOptions = [];
|
|
249
|
-
if (checked.length > 0) {
|
|
250
|
-
|
|
251
|
-
[...new Set(checked.map(m => { return m.v[COLNM_IDX] }))].forEach(v => {
|
|
252
|
-
filterOptions.push({
|
|
253
|
-
colnm : v,
|
|
254
|
-
data : [...new Set(grd.data.getValidData().filter(m => { return m.v[CHK_IDX] == "Y" && m.v[COLNM_IDX] == v; }).map(m => { return m.v[DATA_IDX] || ''; }))].sort((a,b) => { return a > b ? 1 : -1; }),
|
|
255
|
-
});
|
|
256
|
-
});
|
|
257
|
-
}
|
|
233
|
+
const [LVL_IDX, CHK_IDX, COLNM_IDX, DATA_IDX] = ["LVL", "CHK", "COLNM", "DATA"].map(k => grd.fields.indexOf(k));
|
|
234
|
+
const checked = grd.data.getValidDataNF().filter(m => m.v[LVL_IDX] === 2 && m.v[CHK_IDX] === "Y");
|
|
235
|
+
const filterOptions = checked.length > 0 ? [...new Set(checked.map(m => m.v[COLNM_IDX]))].map(v => ({
|
|
236
|
+
colnm: v,
|
|
237
|
+
data: [...new Set(grd.data.getValidData().filter(m => m.v[CHK_IDX] === "Y" && m.v[COLNM_IDX] === v).map(m => m.v[DATA_IDX] || ''))].sort()
|
|
238
|
+
})) : [];
|
|
258
239
|
|
|
259
|
-
//console.log(filterOptions);
|
|
260
|
-
//console.log(this.#target, this.#target.button, filterOptions)
|
|
261
240
|
|
|
262
241
|
this.#button.filterOptions = filterOptions;
|
|
263
|
-
|
|
264
|
-
var oParam = {};
|
|
265
|
-
|
|
266
|
-
this.#owner.body.querySelectorAll("ng-filter-button").forEach(el => {
|
|
267
|
-
|
|
268
|
-
//if (!el.filterOptions) return true;
|
|
269
242
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
243
|
+
const oParam = Object.fromEntries(
|
|
244
|
+
[...this.#owner.body.querySelectorAll("ng-filter-button")]
|
|
245
|
+
.flatMap(el => el.filterOptions)
|
|
246
|
+
.filter(opt => opt.data.length > 0)
|
|
247
|
+
.map(opt => [opt.colnm, opt.data])
|
|
248
|
+
);
|
|
274
249
|
|
|
275
250
|
this.#owner.filtering.set(oParam);
|
|
276
251
|
|
|
277
252
|
this.classList.remove("loading");
|
|
253
|
+
this.style.display = 'none';
|
|
278
254
|
});
|
|
279
|
-
|
|
280
|
-
$(this).hide();
|
|
281
255
|
};
|
|
282
256
|
|
|
283
257
|
|
|
284
258
|
|
|
285
259
|
#onCancel = (e) => {
|
|
286
|
-
|
|
260
|
+
this.style.display = 'none';
|
|
287
261
|
};
|
|
288
262
|
|
|
289
263
|
#onSelectAll = (e) => {
|
|
290
|
-
|
|
291
|
-
|
|
264
|
+
const grd = this.shadowRoot.querySelector("nine-grid");
|
|
265
|
+
const idx = grd.fields.indexOf("CHK");
|
|
266
|
+
const isChecked = e.target.checked; // ✅ jQuery 없이 `checked` 값 가져오기
|
|
267
|
+
|
|
268
|
+
grd.data.getValidData().forEach(m => {
|
|
269
|
+
m.v[idx] = isChecked ? "Y" : "N"; // ✅ `Y` 또는 `N` 값 설정
|
|
270
|
+
});
|
|
292
271
|
|
|
293
|
-
grd.data.getValidData().map(m => { m.v[idx] = $(e.target).prop("checked") ? "Y" : "N"; });
|
|
294
|
-
|
|
295
272
|
grd.refreshData();
|
|
296
273
|
};
|
|
274
|
+
|
|
297
275
|
|
|
298
276
|
|
|
299
277
|
#onInput = (e) => {
|
|
300
|
-
|
|
301
|
-
|
|
278
|
+
const grd = this.shadowRoot.querySelector("nine-grid");
|
|
302
279
|
|
|
303
|
-
|
|
304
|
-
|
|
280
|
+
grd.classList.add("loading");
|
|
305
281
|
|
|
306
|
-
|
|
282
|
+
const data = grd.dataManager.rawRecords;
|
|
283
|
+
data.forEach(m => { m.__ng.filtered = false; });
|
|
307
284
|
|
|
308
|
-
|
|
285
|
+
const v = e.target.value.toLowerCase(); // ✅ jQuery 없이 값 가져오기
|
|
286
|
+
const [LVL_IDX, DATA_IDX] = ["LVL", "DATA"].map(field => grd.fields.indexOf(field));
|
|
309
287
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
288
|
+
data.forEach(m => {
|
|
289
|
+
m.__ng.filtered = m.v[LVL_IDX] === 2 && !String(m.v[DATA_IDX] || "").toLowerCase().includes(v);
|
|
290
|
+
});
|
|
313
291
|
|
|
314
|
-
const LVL_IDX = grd.fields.indexOf("LVL");
|
|
315
|
-
const DATA_IDX = grd.fields.indexOf("DATA");
|
|
316
|
-
|
|
317
|
-
data.filter(m => { return m.v[LVL_IDX] == 2 && String(m.v[DATA_IDX] || '').toLowerCase().indexOf(v) < 0; }).map(m => { m.__ng.filtered = true; });
|
|
318
|
-
|
|
319
292
|
grd.data.resetRecords();
|
|
320
293
|
|
|
321
294
|
if (this.#timer) {
|
|
295
|
+
console.log("-------------", this.#timer);
|
|
322
296
|
clearTimeout(this.#timer);
|
|
297
|
+
console.log("===============", this.#timer);
|
|
323
298
|
this.#timer = null;
|
|
324
299
|
}
|
|
325
300
|
this.#timer = setTimeout(() => {
|
|
326
301
|
grd.dataManager.viewRecords.reset();
|
|
327
302
|
grd.dataManager.viewRecords.touch();
|
|
328
|
-
//ninegrid.j.querySelectorAll(grd).removeClass("loading");
|
|
329
303
|
}, 200)
|
|
330
304
|
};
|
|
331
305
|
|
package/package.json
CHANGED
package/src/etc/ngFiltering.js
CHANGED
|
@@ -179,7 +179,6 @@ class ngFilterPanel extends HTMLElement
|
|
|
179
179
|
connectedCallback() {
|
|
180
180
|
|
|
181
181
|
this.#owner = this.getRootNode().host;
|
|
182
|
-
console.log("========================", this.#owner)
|
|
183
182
|
|
|
184
183
|
const cssPath = this.getRootNode().host.closest("nine-grid").getAttribute("css-path") || "";
|
|
185
184
|
|
|
@@ -218,114 +217,89 @@ class ngFilterPanel extends HTMLElement
|
|
|
218
217
|
</div>
|
|
219
218
|
`;
|
|
220
219
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
//$(this).on("mousedown", e => { e.preventDefault(); e.stopPropagation(); });
|
|
227
|
-
//$(this).on("mousedown", e => { e.stopPropagation(); });
|
|
220
|
+
this.shadowRoot.querySelector("input[type=text]").addEventListener("input", this.#onInput);
|
|
221
|
+
this.shadowRoot.querySelector("input[type=checkbox]").addEventListener("change", this.#onSelectAll);
|
|
222
|
+
this.shadowRoot.querySelector("#btnOk").addEventListener("click", this.#onOk);
|
|
223
|
+
this.shadowRoot.querySelector("#btnCancel").addEventListener("click", this.#onCancel);
|
|
228
224
|
};
|
|
229
225
|
|
|
230
226
|
#onOk = (e) => {
|
|
231
227
|
|
|
232
228
|
const grd = this.shadowRoot.querySelector("nine-grid");
|
|
233
229
|
|
|
234
|
-
//ninegrid.j.querySelectorAll(grd).addClass("loading");
|
|
235
|
-
//ninegrid.j.querySelectorAll(this.#target.owner).addClass("loading");
|
|
236
230
|
this.classList.add("loading");
|
|
237
231
|
|
|
238
232
|
setTimeout(() => {
|
|
239
|
-
|
|
240
|
-
const
|
|
241
|
-
const
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
const checked = grd.data.getValidDataNF().filter(m => { return m.v[LVL_IDX] == 2 && m.v[CHK_IDX] == "Y"; });
|
|
246
|
-
//const unchecked = grd.data.getValidDataNF().filter(m => { return m.v[LVL_IDX] == 2 && m.v[CHK_IDX] != "Y"; });
|
|
247
|
-
|
|
248
|
-
var filterOptions = [];
|
|
249
|
-
if (checked.length > 0) {
|
|
250
|
-
|
|
251
|
-
[...new Set(checked.map(m => { return m.v[COLNM_IDX] }))].forEach(v => {
|
|
252
|
-
filterOptions.push({
|
|
253
|
-
colnm : v,
|
|
254
|
-
data : [...new Set(grd.data.getValidData().filter(m => { return m.v[CHK_IDX] == "Y" && m.v[COLNM_IDX] == v; }).map(m => { return m.v[DATA_IDX] || ''; }))].sort((a,b) => { return a > b ? 1 : -1; }),
|
|
255
|
-
});
|
|
256
|
-
});
|
|
257
|
-
}
|
|
233
|
+
const [LVL_IDX, CHK_IDX, COLNM_IDX, DATA_IDX] = ["LVL", "CHK", "COLNM", "DATA"].map(k => grd.fields.indexOf(k));
|
|
234
|
+
const checked = grd.data.getValidDataNF().filter(m => m.v[LVL_IDX] === 2 && m.v[CHK_IDX] === "Y");
|
|
235
|
+
const filterOptions = checked.length > 0 ? [...new Set(checked.map(m => m.v[COLNM_IDX]))].map(v => ({
|
|
236
|
+
colnm: v,
|
|
237
|
+
data: [...new Set(grd.data.getValidData().filter(m => m.v[CHK_IDX] === "Y" && m.v[COLNM_IDX] === v).map(m => m.v[DATA_IDX] || ''))].sort()
|
|
238
|
+
})) : [];
|
|
258
239
|
|
|
259
|
-
//console.log(filterOptions);
|
|
260
|
-
//console.log(this.#target, this.#target.button, filterOptions)
|
|
261
240
|
|
|
262
241
|
this.#button.filterOptions = filterOptions;
|
|
263
|
-
|
|
264
|
-
var oParam = {};
|
|
265
|
-
|
|
266
|
-
this.#owner.body.querySelectorAll("ng-filter-button").forEach(el => {
|
|
267
|
-
|
|
268
|
-
//if (!el.filterOptions) return true;
|
|
269
242
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
243
|
+
const oParam = Object.fromEntries(
|
|
244
|
+
[...this.#owner.body.querySelectorAll("ng-filter-button")]
|
|
245
|
+
.flatMap(el => el.filterOptions)
|
|
246
|
+
.filter(opt => opt.data.length > 0)
|
|
247
|
+
.map(opt => [opt.colnm, opt.data])
|
|
248
|
+
);
|
|
274
249
|
|
|
275
250
|
this.#owner.filtering.set(oParam);
|
|
276
251
|
|
|
277
252
|
this.classList.remove("loading");
|
|
253
|
+
this.style.display = 'none';
|
|
278
254
|
});
|
|
279
|
-
|
|
280
|
-
$(this).hide();
|
|
281
255
|
};
|
|
282
256
|
|
|
283
257
|
|
|
284
258
|
|
|
285
259
|
#onCancel = (e) => {
|
|
286
|
-
|
|
260
|
+
this.style.display = 'none';
|
|
287
261
|
};
|
|
288
262
|
|
|
289
263
|
#onSelectAll = (e) => {
|
|
290
|
-
|
|
291
|
-
|
|
264
|
+
const grd = this.shadowRoot.querySelector("nine-grid");
|
|
265
|
+
const idx = grd.fields.indexOf("CHK");
|
|
266
|
+
const isChecked = e.target.checked; // ✅ jQuery 없이 `checked` 값 가져오기
|
|
267
|
+
|
|
268
|
+
grd.data.getValidData().forEach(m => {
|
|
269
|
+
m.v[idx] = isChecked ? "Y" : "N"; // ✅ `Y` 또는 `N` 값 설정
|
|
270
|
+
});
|
|
292
271
|
|
|
293
|
-
grd.data.getValidData().map(m => { m.v[idx] = $(e.target).prop("checked") ? "Y" : "N"; });
|
|
294
|
-
|
|
295
272
|
grd.refreshData();
|
|
296
273
|
};
|
|
274
|
+
|
|
297
275
|
|
|
298
276
|
|
|
299
277
|
#onInput = (e) => {
|
|
300
|
-
|
|
301
|
-
|
|
278
|
+
const grd = this.shadowRoot.querySelector("nine-grid");
|
|
302
279
|
|
|
303
|
-
|
|
304
|
-
|
|
280
|
+
grd.classList.add("loading");
|
|
305
281
|
|
|
306
|
-
|
|
282
|
+
const data = grd.dataManager.rawRecords;
|
|
283
|
+
data.forEach(m => { m.__ng.filtered = false; });
|
|
307
284
|
|
|
308
|
-
|
|
285
|
+
const v = e.target.value.toLowerCase(); // ✅ jQuery 없이 값 가져오기
|
|
286
|
+
const [LVL_IDX, DATA_IDX] = ["LVL", "DATA"].map(field => grd.fields.indexOf(field));
|
|
309
287
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
288
|
+
data.forEach(m => {
|
|
289
|
+
m.__ng.filtered = m.v[LVL_IDX] === 2 && !String(m.v[DATA_IDX] || "").toLowerCase().includes(v);
|
|
290
|
+
});
|
|
313
291
|
|
|
314
|
-
const LVL_IDX = grd.fields.indexOf("LVL");
|
|
315
|
-
const DATA_IDX = grd.fields.indexOf("DATA");
|
|
316
|
-
|
|
317
|
-
data.filter(m => { return m.v[LVL_IDX] == 2 && String(m.v[DATA_IDX] || '').toLowerCase().indexOf(v) < 0; }).map(m => { m.__ng.filtered = true; });
|
|
318
|
-
|
|
319
292
|
grd.data.resetRecords();
|
|
320
293
|
|
|
321
294
|
if (this.#timer) {
|
|
295
|
+
console.log("-------------", this.#timer);
|
|
322
296
|
clearTimeout(this.#timer);
|
|
297
|
+
console.log("===============", this.#timer);
|
|
323
298
|
this.#timer = null;
|
|
324
299
|
}
|
|
325
300
|
this.#timer = setTimeout(() => {
|
|
326
301
|
grd.dataManager.viewRecords.reset();
|
|
327
302
|
grd.dataManager.viewRecords.touch();
|
|
328
|
-
//ninegrid.j.querySelectorAll(grd).removeClass("loading");
|
|
329
303
|
}, 200)
|
|
330
304
|
};
|
|
331
305
|
|