npm-dropdown-package 1.0.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/build/index.d.ts +8 -0
- package/build/index.js +401 -0
- package/package.json +32 -0
- package/src/index.ts +547 -0
- package/tsconfig.json +18 -0
package/build/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import FeatureLayer from "@arcgis/core/layers/FeatureLayer";
|
|
2
|
+
declare class GenerateDropdownData {
|
|
3
|
+
featureLayers: [FeatureLayer, FeatureLayer?] | any;
|
|
4
|
+
fieldNames: [string, string?, string?] | any;
|
|
5
|
+
constructor(featureLayers: any, fieldNames: any);
|
|
6
|
+
dropDownQuery: () => Promise<any>;
|
|
7
|
+
}
|
|
8
|
+
export default GenerateDropdownData;
|
package/build/index.js
ADDED
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
class GenerateDropdownData {
|
|
2
|
+
constructor(featureLayers, fieldNames) {
|
|
3
|
+
// Define method
|
|
4
|
+
this.dropDownQuery = async () => {
|
|
5
|
+
// ################### One Feature Layer ################### //
|
|
6
|
+
if (this.featureLayers.length === 1) {
|
|
7
|
+
// One dropdown (= one field):-----------------------
|
|
8
|
+
if (this.fieldNames[1] === undefined &&
|
|
9
|
+
this.fieldNames[2] === undefined) {
|
|
10
|
+
var query11 = this.featureLayers[0].createQuery();
|
|
11
|
+
query11.outFields = ["*"];
|
|
12
|
+
query11.orderByFields = [this.fieldNames[0]];
|
|
13
|
+
query11.groupByFieldsForStatistics = [this.fieldNames[0]];
|
|
14
|
+
const pairQ = this.featureLayers[0]
|
|
15
|
+
.queryFeatures(query11)
|
|
16
|
+
.then((response) => {
|
|
17
|
+
var stats = response.features;
|
|
18
|
+
const values = stats.map((result, index) => {
|
|
19
|
+
const attributes = result.attributes;
|
|
20
|
+
const field1 = attributes[this.fieldNames[0]];
|
|
21
|
+
return Object.assign({
|
|
22
|
+
field1: field1,
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
// 1. Get a pair
|
|
26
|
+
const pair = values.filter((val, index) => values.findIndex((item) => item.field1 === val.field1) ===
|
|
27
|
+
index);
|
|
28
|
+
return pair;
|
|
29
|
+
});
|
|
30
|
+
const pairs = await pairQ;
|
|
31
|
+
// 2. Unique falues for field1
|
|
32
|
+
const uniqueField1 = pairs
|
|
33
|
+
.map((item) => item.field1)
|
|
34
|
+
.filter((field1, index, emp) => emp.indexOf(field1) === index);
|
|
35
|
+
// 3. Compile for all the fields:
|
|
36
|
+
const field1Array = uniqueField1.map((field1, index) => {
|
|
37
|
+
return Object.assign({
|
|
38
|
+
field1: field1, // field1 = cp
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
return field1Array;
|
|
42
|
+
// Two dropdowns (= two fields):-----------------------
|
|
43
|
+
}
|
|
44
|
+
else if (this.fieldNames[2] === undefined) {
|
|
45
|
+
var query12 = this.featureLayers[0].createQuery();
|
|
46
|
+
query12.outFields = [this.fieldNames[0], this.fieldNames[1]];
|
|
47
|
+
query12.orderByFields = [this.fieldNames[0], this.fieldNames[1]];
|
|
48
|
+
query12.groupByFieldsForStatistics = [
|
|
49
|
+
this.fieldNames[0],
|
|
50
|
+
this.fieldNames[1],
|
|
51
|
+
];
|
|
52
|
+
const pairQ = this.featureLayers[0]
|
|
53
|
+
.queryFeatures(query12)
|
|
54
|
+
.then((response) => {
|
|
55
|
+
var stats = response.features;
|
|
56
|
+
const values = stats.map((result, index) => {
|
|
57
|
+
const attributes = result.attributes;
|
|
58
|
+
const field1 = attributes[this.fieldNames[0]];
|
|
59
|
+
const field2 = attributes[this.fieldNames[1]];
|
|
60
|
+
return Object.assign({
|
|
61
|
+
field1: field1,
|
|
62
|
+
field2: field2,
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
// 1. Get a pair
|
|
66
|
+
const pair = values.filter((val, index) => values.findIndex((item) => item.field1 === val.field1 && item.field2 === val.field2) === index);
|
|
67
|
+
return pair;
|
|
68
|
+
});
|
|
69
|
+
const pairs = await pairQ;
|
|
70
|
+
// 2. Unique falues for field1
|
|
71
|
+
const uniqueField1 = pairs
|
|
72
|
+
.map((item) => item.field1)
|
|
73
|
+
.filter((field1, index, emp) => emp.indexOf(field1) === index);
|
|
74
|
+
// 3. Compile for all the fields:
|
|
75
|
+
const field1Array = uniqueField1.map((field1, index) => {
|
|
76
|
+
const filterField1 = pairs.filter((emp) => emp.field1 === field1);
|
|
77
|
+
const uniqueField2 = filterField1
|
|
78
|
+
.map((item) => item.field2)
|
|
79
|
+
.filter((field2, index, emp) => emp.indexOf(field2) === index);
|
|
80
|
+
// 3.2. Unique values for field3 corresponding to field1 and field2
|
|
81
|
+
// eslint-disable-next-line array-callback-return
|
|
82
|
+
const field2Array = uniqueField2.map((field2, index) => {
|
|
83
|
+
return Object.assign({
|
|
84
|
+
name: field2,
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
return Object.assign({
|
|
88
|
+
field1: field1, // field1 = cp
|
|
89
|
+
field2: field2Array, // field2 = company
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
return field1Array;
|
|
93
|
+
// Three dropdowns (= three fields):-----------------------
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
// 1. Pairs for 1st feature layer
|
|
97
|
+
var query13 = this.featureLayers[0].createQuery();
|
|
98
|
+
query13.outFields = [this.fieldNames[0], this.fieldNames[1]];
|
|
99
|
+
query13.orderByFields = [this.fieldNames[0], this.fieldNames[1]];
|
|
100
|
+
query13.groupByFieldsForStatistics = [
|
|
101
|
+
this.fieldNames[0],
|
|
102
|
+
this.fieldNames[1],
|
|
103
|
+
];
|
|
104
|
+
query13.where = `${this.fieldNames[0]} IS NOT NULL`;
|
|
105
|
+
const pairQ = this.featureLayers[0]
|
|
106
|
+
.queryFeatures(query13)
|
|
107
|
+
.then((response) => {
|
|
108
|
+
var stats = response.features;
|
|
109
|
+
const values = stats.map((result, index) => {
|
|
110
|
+
const attributes = result.attributes;
|
|
111
|
+
const field1 = attributes[this.fieldNames[0]];
|
|
112
|
+
const field2 = attributes[this.fieldNames[1]];
|
|
113
|
+
const field3 = attributes[this.fieldNames[2]];
|
|
114
|
+
return Object.assign({
|
|
115
|
+
field1: field1,
|
|
116
|
+
field2: field2,
|
|
117
|
+
field3: field3,
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
// 1. Get a pair
|
|
121
|
+
const pair = values.filter((val, index) => values.findIndex((item) => item.field1 === val.field1 &&
|
|
122
|
+
item.field2 === val.field2 &&
|
|
123
|
+
item.field3 === val.field3) === index);
|
|
124
|
+
return pair;
|
|
125
|
+
});
|
|
126
|
+
const pairs = await pairQ;
|
|
127
|
+
// 2. Unique falues for field1
|
|
128
|
+
const uniqueField1 = pairs
|
|
129
|
+
.map((item) => item.field1)
|
|
130
|
+
.filter((field1, index, emp) => emp.indexOf(field1) === index);
|
|
131
|
+
// 3. Compile for all the fields:
|
|
132
|
+
const field1Array = uniqueField1.map((field1, index) => {
|
|
133
|
+
const filterField1 = pairs.filter((emp) => emp.field1 === field1);
|
|
134
|
+
const uniqueField2 = filterField1
|
|
135
|
+
.map((item) => item.field2)
|
|
136
|
+
.filter((field2, index, emp) => emp.indexOf(field2) === index);
|
|
137
|
+
// 3.2. Unique values for field3 corresponding to field1 and field2
|
|
138
|
+
// eslint-disable-next-line array-callback-return
|
|
139
|
+
const field2Array = uniqueField2.map((field2, index) => {
|
|
140
|
+
const filterField2 = pairs.filter((emp) => emp.field1 === field1 && emp.field2 === field2);
|
|
141
|
+
const uniqueField3 = filterField2
|
|
142
|
+
.map((item) => item.field3)
|
|
143
|
+
.filter((field3, index, emp) => emp.indexOf(field3) === index);
|
|
144
|
+
// eslint-disable-next-line array-callback-return
|
|
145
|
+
const field3Array = uniqueField3.map((field3, index) => {
|
|
146
|
+
return Object.assign({
|
|
147
|
+
name: field3, // field3 = typeName (name?)
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
return Object.assign({
|
|
151
|
+
name: field2,
|
|
152
|
+
field3: field3Array, // field3 = type
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
return Object.assign({
|
|
156
|
+
field1: field1, // field1 = cp
|
|
157
|
+
field2: field2Array, // field2 = company
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
return field1Array;
|
|
161
|
+
}
|
|
162
|
+
//
|
|
163
|
+
//
|
|
164
|
+
//
|
|
165
|
+
//
|
|
166
|
+
// ################### Two Feature Layers ################### //
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
// One dropdown (= one field):-----------------------
|
|
170
|
+
if (this.fieldNames[1] === undefined &&
|
|
171
|
+
this.fieldNames[2] === undefined) {
|
|
172
|
+
var query21p = this.featureLayers[0].createQuery();
|
|
173
|
+
query21p.outFields = ["*"];
|
|
174
|
+
query21p.orderByFields = [this.fieldNames[0]];
|
|
175
|
+
query21p.groupByFieldsForStatistics = [this.fieldNames[0]];
|
|
176
|
+
const pairQ = this.featureLayers[0]
|
|
177
|
+
.queryFeatures(query21p)
|
|
178
|
+
.then((response) => {
|
|
179
|
+
var stats = response.features;
|
|
180
|
+
const values = stats.map((result, index) => {
|
|
181
|
+
const attributes = result.attributes;
|
|
182
|
+
const field1 = attributes[this.fieldNames[0]];
|
|
183
|
+
return Object.assign({
|
|
184
|
+
field1: field1,
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
// 1. Get a pair
|
|
188
|
+
const pair = values.filter((val, index) => values.findIndex((item) => item.field1 === val.field1) ===
|
|
189
|
+
index);
|
|
190
|
+
return pair;
|
|
191
|
+
});
|
|
192
|
+
// 2. Pairs for 2nd feature layer
|
|
193
|
+
var query21l = this.featureLayers[1].createQuery();
|
|
194
|
+
query21l.outFields = ["*"];
|
|
195
|
+
const pairQ2 = this.featureLayers[1]
|
|
196
|
+
.queryFeatures(query21l)
|
|
197
|
+
.then((response) => {
|
|
198
|
+
var stats = response.features;
|
|
199
|
+
const values = stats.map((result, index) => {
|
|
200
|
+
const attributes = result.attributes;
|
|
201
|
+
const field1 = attributes[this.fieldNames[0]];
|
|
202
|
+
return Object.assign({
|
|
203
|
+
field1: field1,
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
// 1. Get a pair
|
|
207
|
+
const pair = values.filter((val, index) => values.findIndex((item) => item.field1 === val.field1) ===
|
|
208
|
+
index);
|
|
209
|
+
return pair;
|
|
210
|
+
});
|
|
211
|
+
// 3. Concatenate two pairs
|
|
212
|
+
const pair1 = await pairQ;
|
|
213
|
+
const pair2 = await pairQ2;
|
|
214
|
+
const pairs = pair1.concat(pair2);
|
|
215
|
+
// 2. Unique falues for field1
|
|
216
|
+
const uniqueField1 = pairs
|
|
217
|
+
.map((item) => item.field1)
|
|
218
|
+
.filter((field1, index, emp) => emp.indexOf(field1) === index);
|
|
219
|
+
// 3. Compile for all the fields:
|
|
220
|
+
const field1Array = uniqueField1.map((field1, index) => {
|
|
221
|
+
return Object.assign({
|
|
222
|
+
field1: field1, // field1 = cp
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
return field1Array;
|
|
226
|
+
// Two dropdowns (= two fields):-----------------------
|
|
227
|
+
}
|
|
228
|
+
else if (this.fieldNames[2] === undefined) {
|
|
229
|
+
var query22p = this.featureLayers[0].createQuery();
|
|
230
|
+
query22p.outFields = ["*"];
|
|
231
|
+
query22p.orderByFields = [this.fieldNames[0], this.fieldNames[1]];
|
|
232
|
+
query22p.groupByFieldsForStatistics = [
|
|
233
|
+
this.fieldNames[0],
|
|
234
|
+
this.fieldNames[1],
|
|
235
|
+
];
|
|
236
|
+
const pairQ = this.featureLayers[0]
|
|
237
|
+
.queryFeatures(query22p)
|
|
238
|
+
.then((response) => {
|
|
239
|
+
var stats = response.features;
|
|
240
|
+
const values = stats.map((result, index) => {
|
|
241
|
+
const attributes = result.attributes;
|
|
242
|
+
const field1 = attributes[this.fieldNames[0]];
|
|
243
|
+
const field2 = attributes[this.fieldNames[1]];
|
|
244
|
+
return Object.assign({
|
|
245
|
+
field1: field1,
|
|
246
|
+
field2: field2,
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
// 1. Get a pair
|
|
250
|
+
const pair = values.filter((val, index) => values.findIndex((item) => item.field1 === val.field1 && item.field2 === val.field2) === index);
|
|
251
|
+
return pair;
|
|
252
|
+
});
|
|
253
|
+
// 2. Pairs for 2nd feature layer
|
|
254
|
+
var query22l = this.featureLayers[1].createQuery();
|
|
255
|
+
query22l.outFields = ["*"];
|
|
256
|
+
const pairQ2 = this.featureLayers[1]
|
|
257
|
+
.queryFeatures(query22l)
|
|
258
|
+
.then((response) => {
|
|
259
|
+
var stats = response.features;
|
|
260
|
+
const values = stats.map((result, index) => {
|
|
261
|
+
const attributes = result.attributes;
|
|
262
|
+
const field1 = attributes[this.fieldNames[0]];
|
|
263
|
+
const field2 = attributes[this.fieldNames[1]];
|
|
264
|
+
return Object.assign({
|
|
265
|
+
field1: field1,
|
|
266
|
+
field2: field2,
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
// 1. Get a pair
|
|
270
|
+
const pair = values.filter((val, index) => values.findIndex((item) => item.field1 === val.field1 && item.field2 === val.field2) === index);
|
|
271
|
+
return pair;
|
|
272
|
+
});
|
|
273
|
+
// 3. Concatenate two pairs
|
|
274
|
+
const pair1 = await pairQ;
|
|
275
|
+
const pair2 = await pairQ2;
|
|
276
|
+
const pairs = pair1.concat(pair2);
|
|
277
|
+
// 2. Unique falues for field1
|
|
278
|
+
const uniqueField1 = pairs
|
|
279
|
+
.map((item) => item.field1)
|
|
280
|
+
.filter((field1, index, emp) => emp.indexOf(field1) === index);
|
|
281
|
+
// 3. Compile for all the fields:
|
|
282
|
+
const field1Array = uniqueField1.map((field1, index) => {
|
|
283
|
+
const filterField1 = pairs.filter((emp) => emp.field1 === field1);
|
|
284
|
+
const uniqueField2 = filterField1
|
|
285
|
+
.map((item) => item.field2)
|
|
286
|
+
.filter((field2, index, emp) => emp.indexOf(field2) === index);
|
|
287
|
+
// 3.2. Unique values for field3 corresponding to field1 and field2
|
|
288
|
+
// eslint-disable-next-line array-callback-return
|
|
289
|
+
const field2Array = uniqueField2.map((field2, index) => {
|
|
290
|
+
return Object.assign({
|
|
291
|
+
name: field2,
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
return Object.assign({
|
|
295
|
+
field1: field1, // field1 = cp
|
|
296
|
+
field2: field2Array, // field2 = company
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
return field1Array;
|
|
300
|
+
// Three dropdowns (= three fields):-----------------------
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
// 1. Pairs for 1st feature layer
|
|
304
|
+
var query23p = this.featureLayers[0].createQuery();
|
|
305
|
+
query23p.outFields = ["*"];
|
|
306
|
+
query23p.orderByFields = [this.fieldNames[0], this.fieldNames[1]];
|
|
307
|
+
query23p.groupByFieldsForStatistics = [
|
|
308
|
+
this.fieldNames[0],
|
|
309
|
+
this.fieldNames[1],
|
|
310
|
+
];
|
|
311
|
+
const pairQ = this.featureLayers[0]
|
|
312
|
+
.queryFeatures(query23p)
|
|
313
|
+
.then((response) => {
|
|
314
|
+
var stats = response.features;
|
|
315
|
+
const values = stats.map((result, index) => {
|
|
316
|
+
const attributes = result.attributes;
|
|
317
|
+
const field1 = attributes[this.fieldNames[0]];
|
|
318
|
+
const field2 = attributes[this.fieldNames[1]];
|
|
319
|
+
const field3 = attributes[this.fieldNames[2]];
|
|
320
|
+
return Object.assign({
|
|
321
|
+
field1: field1,
|
|
322
|
+
field2: field2,
|
|
323
|
+
field3: field3,
|
|
324
|
+
});
|
|
325
|
+
});
|
|
326
|
+
// 1. Get a pair
|
|
327
|
+
const pair = values.filter((val, index) => values.findIndex((item) => item.field1 === val.field1 &&
|
|
328
|
+
item.field2 === val.field2 &&
|
|
329
|
+
item.field3 === val.field3) === index);
|
|
330
|
+
return pair;
|
|
331
|
+
});
|
|
332
|
+
// 2. Pairs for 2nd feature layer
|
|
333
|
+
var query23l = this.featureLayers[1].createQuery();
|
|
334
|
+
query23l.outFields = ["*"];
|
|
335
|
+
const pairQ2 = this.featureLayers[1]
|
|
336
|
+
.queryFeatures(query23l)
|
|
337
|
+
.then((response) => {
|
|
338
|
+
var stats = response.features;
|
|
339
|
+
const values = stats.map((result, index) => {
|
|
340
|
+
const attributes = result.attributes;
|
|
341
|
+
const field1 = attributes[this.fieldNames[0]];
|
|
342
|
+
const field2 = attributes[this.fieldNames[1]];
|
|
343
|
+
const field3 = attributes[this.fieldNames[2]];
|
|
344
|
+
return Object.assign({
|
|
345
|
+
field1: field1,
|
|
346
|
+
field2: field2,
|
|
347
|
+
field3: field3,
|
|
348
|
+
});
|
|
349
|
+
});
|
|
350
|
+
// 1. Get a pair
|
|
351
|
+
const pair = values.filter((val, index) => values.findIndex((item) => item.field1 === val.field1 &&
|
|
352
|
+
item.field2 === val.field2 &&
|
|
353
|
+
item.field3 === val.field3) === index);
|
|
354
|
+
return pair;
|
|
355
|
+
});
|
|
356
|
+
// 3. Concatenate two pairs
|
|
357
|
+
const pair1 = await pairQ;
|
|
358
|
+
const pair2 = await pairQ2;
|
|
359
|
+
const pairs = pair1.concat(pair2);
|
|
360
|
+
// 2. Unique falues for field1
|
|
361
|
+
const uniqueField1 = pairs
|
|
362
|
+
.map((item) => item.field1)
|
|
363
|
+
.filter((field1, index, emp) => emp.indexOf(field1) === index);
|
|
364
|
+
// 3. Compile for all the fields:
|
|
365
|
+
const field1Array = uniqueField1.map((field1, index) => {
|
|
366
|
+
const filterField1 = pairs.filter((emp) => emp.field1 === field1);
|
|
367
|
+
const uniqueField2 = filterField1
|
|
368
|
+
.map((item) => item.field2)
|
|
369
|
+
.filter((field2, index, emp) => emp.indexOf(field2) === index);
|
|
370
|
+
// 3.2. Unique values for field3 corresponding to field1 and field2
|
|
371
|
+
// eslint-disable-next-line array-callback-return
|
|
372
|
+
const field2Array = uniqueField2.map((field2, index) => {
|
|
373
|
+
const filterField2 = pairs.filter((emp) => emp.field1 === field1 && emp.field2 === field2);
|
|
374
|
+
const uniqueField3 = filterField2
|
|
375
|
+
.map((item) => item.field3)
|
|
376
|
+
.filter((field3, index, emp) => emp.indexOf(field3) === index);
|
|
377
|
+
// eslint-disable-next-line array-callback-return
|
|
378
|
+
const field3Array = uniqueField3.map((field3, index) => {
|
|
379
|
+
return Object.assign({
|
|
380
|
+
name: field3, // field3 = typeName (name?)
|
|
381
|
+
});
|
|
382
|
+
});
|
|
383
|
+
return Object.assign({
|
|
384
|
+
name: field2,
|
|
385
|
+
field3: field3Array, // field3 = type
|
|
386
|
+
});
|
|
387
|
+
});
|
|
388
|
+
return Object.assign({
|
|
389
|
+
field1: field1, // field1 = cp
|
|
390
|
+
field2: field2Array, // field2 = company
|
|
391
|
+
});
|
|
392
|
+
});
|
|
393
|
+
return field1Array;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
}; // end of dropdown method
|
|
397
|
+
this.featureLayers = featureLayers;
|
|
398
|
+
this.fieldNames = fieldNames;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
export default GenerateDropdownData;
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "npm-dropdown-package",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A package to create an object-array using feature layers hosted in Portal for ArcGIS for react-select dropdown",
|
|
5
|
+
"main": "build/index.js",
|
|
6
|
+
"types": "build/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "npx tsc",
|
|
9
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
10
|
+
},
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "git+https://github.com/railway-sector/npm-dropdown-package.git"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"dropdown",
|
|
17
|
+
"react-select"
|
|
18
|
+
],
|
|
19
|
+
"author": "Eiji Matsuzaki",
|
|
20
|
+
"license": "ISC",
|
|
21
|
+
"bugs": {
|
|
22
|
+
"url": "https://github.com/railway-sector/npm-dropdown-package/issues"
|
|
23
|
+
},
|
|
24
|
+
"homepage": "https://github.com/railway-sector/npm-dropdown-package#readme",
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"typescript": "^5.9.3"
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
"peerDependencies": {
|
|
30
|
+
"@arcgis/core": "^4.34.6"
|
|
31
|
+
}
|
|
32
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,547 @@
|
|
|
1
|
+
import FeatureLayer from "@arcgis/core/layers/FeatureLayer";
|
|
2
|
+
|
|
3
|
+
class GenerateDropdownData {
|
|
4
|
+
featureLayers: [FeatureLayer, FeatureLayer?] | any;
|
|
5
|
+
fieldNames: [string, string?, string?] | any;
|
|
6
|
+
|
|
7
|
+
constructor(featureLayers: any, fieldNames: any) {
|
|
8
|
+
this.featureLayers = featureLayers;
|
|
9
|
+
this.fieldNames = fieldNames;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// Define method
|
|
13
|
+
dropDownQuery = async () => {
|
|
14
|
+
// ################### One Feature Layer ################### //
|
|
15
|
+
if (this.featureLayers.length === 1) {
|
|
16
|
+
// One dropdown (= one field):-----------------------
|
|
17
|
+
if (
|
|
18
|
+
this.fieldNames[1] === undefined &&
|
|
19
|
+
this.fieldNames[2] === undefined
|
|
20
|
+
) {
|
|
21
|
+
var query11 = this.featureLayers[0].createQuery();
|
|
22
|
+
query11.outFields = ["*"];
|
|
23
|
+
query11.orderByFields = [this.fieldNames[0]];
|
|
24
|
+
query11.groupByFieldsForStatistics = [this.fieldNames[0]];
|
|
25
|
+
|
|
26
|
+
const pairQ: any = this.featureLayers[0]
|
|
27
|
+
.queryFeatures(query11)
|
|
28
|
+
.then((response: any) => {
|
|
29
|
+
var stats = response.features;
|
|
30
|
+
const values = stats.map((result: any, index: any) => {
|
|
31
|
+
const attributes = result.attributes;
|
|
32
|
+
const field1 = attributes[this.fieldNames[0]];
|
|
33
|
+
return Object.assign({
|
|
34
|
+
field1: field1,
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// 1. Get a pair
|
|
39
|
+
const pair = values.filter(
|
|
40
|
+
(val: any, index: any) =>
|
|
41
|
+
values.findIndex((item: any) => item.field1 === val.field1) ===
|
|
42
|
+
index
|
|
43
|
+
);
|
|
44
|
+
return pair;
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
const pairs = await pairQ;
|
|
48
|
+
|
|
49
|
+
// 2. Unique falues for field1
|
|
50
|
+
const uniqueField1 = pairs
|
|
51
|
+
.map((item: any) => item.field1)
|
|
52
|
+
.filter(
|
|
53
|
+
(field1: any, index: any, emp: any) => emp.indexOf(field1) === index
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
// 3. Compile for all the fields:
|
|
57
|
+
const field1Array = uniqueField1.map((field1: any, index: number) => {
|
|
58
|
+
return Object.assign({
|
|
59
|
+
field1: field1, // field1 = cp
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
return field1Array;
|
|
63
|
+
|
|
64
|
+
// Two dropdowns (= two fields):-----------------------
|
|
65
|
+
} else if (this.fieldNames[2] === undefined) {
|
|
66
|
+
var query12 = this.featureLayers[0].createQuery();
|
|
67
|
+
query12.outFields = [this.fieldNames[0], this.fieldNames[1]];
|
|
68
|
+
query12.orderByFields = [this.fieldNames[0], this.fieldNames[1]];
|
|
69
|
+
query12.groupByFieldsForStatistics = [
|
|
70
|
+
this.fieldNames[0],
|
|
71
|
+
this.fieldNames[1],
|
|
72
|
+
];
|
|
73
|
+
|
|
74
|
+
const pairQ: any = this.featureLayers[0]
|
|
75
|
+
.queryFeatures(query12)
|
|
76
|
+
.then((response: any) => {
|
|
77
|
+
var stats = response.features;
|
|
78
|
+
const values = stats.map((result: any, index: any) => {
|
|
79
|
+
const attributes = result.attributes;
|
|
80
|
+
const field1 = attributes[this.fieldNames[0]];
|
|
81
|
+
const field2 = attributes[this.fieldNames[1]];
|
|
82
|
+
return Object.assign({
|
|
83
|
+
field1: field1,
|
|
84
|
+
field2: field2,
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
// 1. Get a pair
|
|
89
|
+
const pair = values.filter(
|
|
90
|
+
(val: any, index: any) =>
|
|
91
|
+
values.findIndex(
|
|
92
|
+
(item: any) =>
|
|
93
|
+
item.field1 === val.field1 && item.field2 === val.field2
|
|
94
|
+
) === index
|
|
95
|
+
);
|
|
96
|
+
return pair;
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
const pairs = await pairQ;
|
|
100
|
+
|
|
101
|
+
// 2. Unique falues for field1
|
|
102
|
+
const uniqueField1 = pairs
|
|
103
|
+
.map((item: any) => item.field1)
|
|
104
|
+
.filter(
|
|
105
|
+
(field1: any, index: any, emp: any) => emp.indexOf(field1) === index
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
// 3. Compile for all the fields:
|
|
109
|
+
const field1Array = uniqueField1.map((field1: any, index: number) => {
|
|
110
|
+
const filterField1 = pairs.filter(
|
|
111
|
+
(emp: any) => emp.field1 === field1
|
|
112
|
+
);
|
|
113
|
+
const uniqueField2 = filterField1
|
|
114
|
+
.map((item: any) => item.field2)
|
|
115
|
+
.filter(
|
|
116
|
+
(field2: any, index: any, emp: any) =>
|
|
117
|
+
emp.indexOf(field2) === index
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
// 3.2. Unique values for field3 corresponding to field1 and field2
|
|
121
|
+
// eslint-disable-next-line array-callback-return
|
|
122
|
+
const field2Array = uniqueField2.map((field2: any, index: any) => {
|
|
123
|
+
return Object.assign({
|
|
124
|
+
name: field2,
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
return Object.assign({
|
|
128
|
+
field1: field1, // field1 = cp
|
|
129
|
+
field2: field2Array, // field2 = company
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
return field1Array;
|
|
133
|
+
|
|
134
|
+
// Three dropdowns (= three fields):-----------------------
|
|
135
|
+
} else {
|
|
136
|
+
// 1. Pairs for 1st feature layer
|
|
137
|
+
var query13 = this.featureLayers[0].createQuery();
|
|
138
|
+
query13.outFields = [this.fieldNames[0], this.fieldNames[1]];
|
|
139
|
+
query13.orderByFields = [this.fieldNames[0], this.fieldNames[1]];
|
|
140
|
+
query13.groupByFieldsForStatistics = [
|
|
141
|
+
this.fieldNames[0],
|
|
142
|
+
this.fieldNames[1],
|
|
143
|
+
];
|
|
144
|
+
query13.where = `${this.fieldNames[0]} IS NOT NULL`;
|
|
145
|
+
|
|
146
|
+
const pairQ: any = this.featureLayers[0]
|
|
147
|
+
.queryFeatures(query13)
|
|
148
|
+
.then((response: any) => {
|
|
149
|
+
var stats = response.features;
|
|
150
|
+
const values = stats.map((result: any, index: any) => {
|
|
151
|
+
const attributes = result.attributes;
|
|
152
|
+
const field1 = attributes[this.fieldNames[0]];
|
|
153
|
+
const field2 = attributes[this.fieldNames[1]];
|
|
154
|
+
const field3 = attributes[this.fieldNames[2]];
|
|
155
|
+
return Object.assign({
|
|
156
|
+
field1: field1,
|
|
157
|
+
field2: field2,
|
|
158
|
+
field3: field3,
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
// 1. Get a pair
|
|
163
|
+
const pair = values.filter(
|
|
164
|
+
(val: any, index: any) =>
|
|
165
|
+
values.findIndex(
|
|
166
|
+
(item: any) =>
|
|
167
|
+
item.field1 === val.field1 &&
|
|
168
|
+
item.field2 === val.field2 &&
|
|
169
|
+
item.field3 === val.field3
|
|
170
|
+
) === index
|
|
171
|
+
);
|
|
172
|
+
return pair;
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
const pairs = await pairQ;
|
|
176
|
+
|
|
177
|
+
// 2. Unique falues for field1
|
|
178
|
+
const uniqueField1 = pairs
|
|
179
|
+
.map((item: any) => item.field1)
|
|
180
|
+
.filter(
|
|
181
|
+
(field1: any, index: any, emp: any) => emp.indexOf(field1) === index
|
|
182
|
+
);
|
|
183
|
+
|
|
184
|
+
// 3. Compile for all the fields:
|
|
185
|
+
const field1Array = uniqueField1.map((field1: any, index: number) => {
|
|
186
|
+
const filterField1 = pairs.filter(
|
|
187
|
+
(emp: any) => emp.field1 === field1
|
|
188
|
+
);
|
|
189
|
+
const uniqueField2 = filterField1
|
|
190
|
+
.map((item: any) => item.field2)
|
|
191
|
+
.filter(
|
|
192
|
+
(field2: any, index: any, emp: any) =>
|
|
193
|
+
emp.indexOf(field2) === index
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
// 3.2. Unique values for field3 corresponding to field1 and field2
|
|
197
|
+
// eslint-disable-next-line array-callback-return
|
|
198
|
+
const field2Array = uniqueField2.map((field2: any, index: any) => {
|
|
199
|
+
const filterField2 = pairs.filter(
|
|
200
|
+
(emp: any) => emp.field1 === field1 && emp.field2 === field2
|
|
201
|
+
);
|
|
202
|
+
|
|
203
|
+
const uniqueField3 = filterField2
|
|
204
|
+
.map((item: any) => item.field3)
|
|
205
|
+
.filter(
|
|
206
|
+
(field3: any, index: any, emp: any) =>
|
|
207
|
+
emp.indexOf(field3) === index
|
|
208
|
+
);
|
|
209
|
+
|
|
210
|
+
// eslint-disable-next-line array-callback-return
|
|
211
|
+
const field3Array = uniqueField3.map((field3: any, index: any) => {
|
|
212
|
+
return Object.assign({
|
|
213
|
+
name: field3, // field3 = typeName (name?)
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
return Object.assign({
|
|
218
|
+
name: field2,
|
|
219
|
+
field3: field3Array, // field3 = type
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
return Object.assign({
|
|
223
|
+
field1: field1, // field1 = cp
|
|
224
|
+
field2: field2Array, // field2 = company
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
return field1Array;
|
|
228
|
+
}
|
|
229
|
+
//
|
|
230
|
+
//
|
|
231
|
+
//
|
|
232
|
+
//
|
|
233
|
+
// ################### Two Feature Layers ################### //
|
|
234
|
+
} else {
|
|
235
|
+
// One dropdown (= one field):-----------------------
|
|
236
|
+
if (
|
|
237
|
+
this.fieldNames[1] === undefined &&
|
|
238
|
+
this.fieldNames[2] === undefined
|
|
239
|
+
) {
|
|
240
|
+
var query21p = this.featureLayers[0].createQuery();
|
|
241
|
+
query21p.outFields = ["*"];
|
|
242
|
+
query21p.orderByFields = [this.fieldNames[0]];
|
|
243
|
+
query21p.groupByFieldsForStatistics = [this.fieldNames[0]];
|
|
244
|
+
|
|
245
|
+
const pairQ: any = this.featureLayers[0]
|
|
246
|
+
.queryFeatures(query21p)
|
|
247
|
+
.then((response: any) => {
|
|
248
|
+
var stats = response.features;
|
|
249
|
+
const values = stats.map((result: any, index: any) => {
|
|
250
|
+
const attributes = result.attributes;
|
|
251
|
+
const field1 = attributes[this.fieldNames[0]];
|
|
252
|
+
return Object.assign({
|
|
253
|
+
field1: field1,
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
// 1. Get a pair
|
|
258
|
+
const pair = values.filter(
|
|
259
|
+
(val: any, index: any) =>
|
|
260
|
+
values.findIndex((item: any) => item.field1 === val.field1) ===
|
|
261
|
+
index
|
|
262
|
+
);
|
|
263
|
+
return pair;
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
// 2. Pairs for 2nd feature layer
|
|
267
|
+
var query21l = this.featureLayers[1].createQuery();
|
|
268
|
+
query21l.outFields = ["*"];
|
|
269
|
+
|
|
270
|
+
const pairQ2: any = this.featureLayers[1]
|
|
271
|
+
.queryFeatures(query21l)
|
|
272
|
+
.then((response: any) => {
|
|
273
|
+
var stats = response.features;
|
|
274
|
+
const values = stats.map((result: any, index: any) => {
|
|
275
|
+
const attributes = result.attributes;
|
|
276
|
+
const field1 = attributes[this.fieldNames[0]];
|
|
277
|
+
return Object.assign({
|
|
278
|
+
field1: field1,
|
|
279
|
+
});
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
// 1. Get a pair
|
|
283
|
+
const pair = values.filter(
|
|
284
|
+
(val: any, index: any) =>
|
|
285
|
+
values.findIndex((item: any) => item.field1 === val.field1) ===
|
|
286
|
+
index
|
|
287
|
+
);
|
|
288
|
+
return pair;
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
// 3. Concatenate two pairs
|
|
292
|
+
const pair1 = await pairQ;
|
|
293
|
+
const pair2 = await pairQ2;
|
|
294
|
+
const pairs = pair1.concat(pair2);
|
|
295
|
+
|
|
296
|
+
// 2. Unique falues for field1
|
|
297
|
+
const uniqueField1 = pairs
|
|
298
|
+
.map((item: any) => item.field1)
|
|
299
|
+
.filter(
|
|
300
|
+
(field1: any, index: any, emp: any) => emp.indexOf(field1) === index
|
|
301
|
+
);
|
|
302
|
+
|
|
303
|
+
// 3. Compile for all the fields:
|
|
304
|
+
const field1Array = uniqueField1.map((field1: any, index: number) => {
|
|
305
|
+
return Object.assign({
|
|
306
|
+
field1: field1, // field1 = cp
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
return field1Array;
|
|
310
|
+
|
|
311
|
+
// Two dropdowns (= two fields):-----------------------
|
|
312
|
+
} else if (this.fieldNames[2] === undefined) {
|
|
313
|
+
var query22p = this.featureLayers[0].createQuery();
|
|
314
|
+
query22p.outFields = ["*"];
|
|
315
|
+
query22p.orderByFields = [this.fieldNames[0], this.fieldNames[1]];
|
|
316
|
+
query22p.groupByFieldsForStatistics = [
|
|
317
|
+
this.fieldNames[0],
|
|
318
|
+
this.fieldNames[1],
|
|
319
|
+
];
|
|
320
|
+
|
|
321
|
+
const pairQ: any = this.featureLayers[0]
|
|
322
|
+
.queryFeatures(query22p)
|
|
323
|
+
.then((response: any) => {
|
|
324
|
+
var stats = response.features;
|
|
325
|
+
const values = stats.map((result: any, index: any) => {
|
|
326
|
+
const attributes = result.attributes;
|
|
327
|
+
const field1 = attributes[this.fieldNames[0]];
|
|
328
|
+
const field2 = attributes[this.fieldNames[1]];
|
|
329
|
+
return Object.assign({
|
|
330
|
+
field1: field1,
|
|
331
|
+
field2: field2,
|
|
332
|
+
});
|
|
333
|
+
});
|
|
334
|
+
|
|
335
|
+
// 1. Get a pair
|
|
336
|
+
const pair = values.filter(
|
|
337
|
+
(val: any, index: any) =>
|
|
338
|
+
values.findIndex(
|
|
339
|
+
(item: any) =>
|
|
340
|
+
item.field1 === val.field1 && item.field2 === val.field2
|
|
341
|
+
) === index
|
|
342
|
+
);
|
|
343
|
+
return pair;
|
|
344
|
+
});
|
|
345
|
+
|
|
346
|
+
// 2. Pairs for 2nd feature layer
|
|
347
|
+
var query22l = this.featureLayers[1].createQuery();
|
|
348
|
+
query22l.outFields = ["*"];
|
|
349
|
+
|
|
350
|
+
const pairQ2: any = this.featureLayers[1]
|
|
351
|
+
.queryFeatures(query22l)
|
|
352
|
+
.then((response: any) => {
|
|
353
|
+
var stats = response.features;
|
|
354
|
+
const values = stats.map((result: any, index: any) => {
|
|
355
|
+
const attributes = result.attributes;
|
|
356
|
+
const field1 = attributes[this.fieldNames[0]];
|
|
357
|
+
const field2 = attributes[this.fieldNames[1]];
|
|
358
|
+
return Object.assign({
|
|
359
|
+
field1: field1,
|
|
360
|
+
field2: field2,
|
|
361
|
+
});
|
|
362
|
+
});
|
|
363
|
+
|
|
364
|
+
// 1. Get a pair
|
|
365
|
+
const pair = values.filter(
|
|
366
|
+
(val: any, index: any) =>
|
|
367
|
+
values.findIndex(
|
|
368
|
+
(item: any) =>
|
|
369
|
+
item.field1 === val.field1 && item.field2 === val.field2
|
|
370
|
+
) === index
|
|
371
|
+
);
|
|
372
|
+
return pair;
|
|
373
|
+
});
|
|
374
|
+
|
|
375
|
+
// 3. Concatenate two pairs
|
|
376
|
+
const pair1 = await pairQ;
|
|
377
|
+
const pair2 = await pairQ2;
|
|
378
|
+
const pairs = pair1.concat(pair2);
|
|
379
|
+
|
|
380
|
+
// 2. Unique falues for field1
|
|
381
|
+
const uniqueField1 = pairs
|
|
382
|
+
.map((item: any) => item.field1)
|
|
383
|
+
.filter(
|
|
384
|
+
(field1: any, index: any, emp: any) => emp.indexOf(field1) === index
|
|
385
|
+
);
|
|
386
|
+
|
|
387
|
+
// 3. Compile for all the fields:
|
|
388
|
+
const field1Array = uniqueField1.map((field1: any, index: number) => {
|
|
389
|
+
const filterField1 = pairs.filter(
|
|
390
|
+
(emp: any) => emp.field1 === field1
|
|
391
|
+
);
|
|
392
|
+
const uniqueField2 = filterField1
|
|
393
|
+
.map((item: any) => item.field2)
|
|
394
|
+
.filter(
|
|
395
|
+
(field2: any, index: any, emp: any) =>
|
|
396
|
+
emp.indexOf(field2) === index
|
|
397
|
+
);
|
|
398
|
+
|
|
399
|
+
// 3.2. Unique values for field3 corresponding to field1 and field2
|
|
400
|
+
// eslint-disable-next-line array-callback-return
|
|
401
|
+
const field2Array = uniqueField2.map((field2: any, index: any) => {
|
|
402
|
+
return Object.assign({
|
|
403
|
+
name: field2,
|
|
404
|
+
});
|
|
405
|
+
});
|
|
406
|
+
return Object.assign({
|
|
407
|
+
field1: field1, // field1 = cp
|
|
408
|
+
field2: field2Array, // field2 = company
|
|
409
|
+
});
|
|
410
|
+
});
|
|
411
|
+
return field1Array;
|
|
412
|
+
|
|
413
|
+
// Three dropdowns (= three fields):-----------------------
|
|
414
|
+
} else {
|
|
415
|
+
// 1. Pairs for 1st feature layer
|
|
416
|
+
var query23p = this.featureLayers[0].createQuery();
|
|
417
|
+
query23p.outFields = ["*"];
|
|
418
|
+
query23p.orderByFields = [this.fieldNames[0], this.fieldNames[1]];
|
|
419
|
+
query23p.groupByFieldsForStatistics = [
|
|
420
|
+
this.fieldNames[0],
|
|
421
|
+
this.fieldNames[1],
|
|
422
|
+
];
|
|
423
|
+
|
|
424
|
+
const pairQ: any = this.featureLayers[0]
|
|
425
|
+
.queryFeatures(query23p)
|
|
426
|
+
.then((response: any) => {
|
|
427
|
+
var stats = response.features;
|
|
428
|
+
const values = stats.map((result: any, index: any) => {
|
|
429
|
+
const attributes = result.attributes;
|
|
430
|
+
const field1 = attributes[this.fieldNames[0]];
|
|
431
|
+
const field2 = attributes[this.fieldNames[1]];
|
|
432
|
+
const field3 = attributes[this.fieldNames[2]];
|
|
433
|
+
return Object.assign({
|
|
434
|
+
field1: field1,
|
|
435
|
+
field2: field2,
|
|
436
|
+
field3: field3,
|
|
437
|
+
});
|
|
438
|
+
});
|
|
439
|
+
|
|
440
|
+
// 1. Get a pair
|
|
441
|
+
const pair = values.filter(
|
|
442
|
+
(val: any, index: any) =>
|
|
443
|
+
values.findIndex(
|
|
444
|
+
(item: any) =>
|
|
445
|
+
item.field1 === val.field1 &&
|
|
446
|
+
item.field2 === val.field2 &&
|
|
447
|
+
item.field3 === val.field3
|
|
448
|
+
) === index
|
|
449
|
+
);
|
|
450
|
+
return pair;
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
// 2. Pairs for 2nd feature layer
|
|
454
|
+
var query23l = this.featureLayers[1].createQuery();
|
|
455
|
+
query23l.outFields = ["*"];
|
|
456
|
+
|
|
457
|
+
const pairQ2: any = this.featureLayers[1]
|
|
458
|
+
.queryFeatures(query23l)
|
|
459
|
+
.then((response: any) => {
|
|
460
|
+
var stats = response.features;
|
|
461
|
+
const values = stats.map((result: any, index: any) => {
|
|
462
|
+
const attributes = result.attributes;
|
|
463
|
+
const field1 = attributes[this.fieldNames[0]];
|
|
464
|
+
const field2 = attributes[this.fieldNames[1]];
|
|
465
|
+
const field3 = attributes[this.fieldNames[2]];
|
|
466
|
+
return Object.assign({
|
|
467
|
+
field1: field1,
|
|
468
|
+
field2: field2,
|
|
469
|
+
field3: field3,
|
|
470
|
+
});
|
|
471
|
+
});
|
|
472
|
+
|
|
473
|
+
// 1. Get a pair
|
|
474
|
+
const pair = values.filter(
|
|
475
|
+
(val: any, index: any) =>
|
|
476
|
+
values.findIndex(
|
|
477
|
+
(item: any) =>
|
|
478
|
+
item.field1 === val.field1 &&
|
|
479
|
+
item.field2 === val.field2 &&
|
|
480
|
+
item.field3 === val.field3
|
|
481
|
+
) === index
|
|
482
|
+
);
|
|
483
|
+
return pair;
|
|
484
|
+
});
|
|
485
|
+
|
|
486
|
+
// 3. Concatenate two pairs
|
|
487
|
+
const pair1 = await pairQ;
|
|
488
|
+
const pair2 = await pairQ2;
|
|
489
|
+
const pairs = pair1.concat(pair2);
|
|
490
|
+
|
|
491
|
+
// 2. Unique falues for field1
|
|
492
|
+
const uniqueField1 = pairs
|
|
493
|
+
.map((item: any) => item.field1)
|
|
494
|
+
.filter(
|
|
495
|
+
(field1: any, index: any, emp: any) => emp.indexOf(field1) === index
|
|
496
|
+
);
|
|
497
|
+
|
|
498
|
+
// 3. Compile for all the fields:
|
|
499
|
+
const field1Array = uniqueField1.map((field1: any, index: number) => {
|
|
500
|
+
const filterField1 = pairs.filter(
|
|
501
|
+
(emp: any) => emp.field1 === field1
|
|
502
|
+
);
|
|
503
|
+
const uniqueField2 = filterField1
|
|
504
|
+
.map((item: any) => item.field2)
|
|
505
|
+
.filter(
|
|
506
|
+
(field2: any, index: any, emp: any) =>
|
|
507
|
+
emp.indexOf(field2) === index
|
|
508
|
+
);
|
|
509
|
+
|
|
510
|
+
// 3.2. Unique values for field3 corresponding to field1 and field2
|
|
511
|
+
// eslint-disable-next-line array-callback-return
|
|
512
|
+
const field2Array = uniqueField2.map((field2: any, index: any) => {
|
|
513
|
+
const filterField2 = pairs.filter(
|
|
514
|
+
(emp: any) => emp.field1 === field1 && emp.field2 === field2
|
|
515
|
+
);
|
|
516
|
+
|
|
517
|
+
const uniqueField3 = filterField2
|
|
518
|
+
.map((item: any) => item.field3)
|
|
519
|
+
.filter(
|
|
520
|
+
(field3: any, index: any, emp: any) =>
|
|
521
|
+
emp.indexOf(field3) === index
|
|
522
|
+
);
|
|
523
|
+
|
|
524
|
+
// eslint-disable-next-line array-callback-return
|
|
525
|
+
const field3Array = uniqueField3.map((field3: any, index: any) => {
|
|
526
|
+
return Object.assign({
|
|
527
|
+
name: field3, // field3 = typeName (name?)
|
|
528
|
+
});
|
|
529
|
+
});
|
|
530
|
+
|
|
531
|
+
return Object.assign({
|
|
532
|
+
name: field2,
|
|
533
|
+
field3: field3Array, // field3 = type
|
|
534
|
+
});
|
|
535
|
+
});
|
|
536
|
+
return Object.assign({
|
|
537
|
+
field1: field1, // field1 = cp
|
|
538
|
+
field2: field2Array, // field2 = company
|
|
539
|
+
});
|
|
540
|
+
});
|
|
541
|
+
return field1Array;
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
}; // end of dropdown method
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
export default GenerateDropdownData;
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"outDir": "./build", // Or your preferred output directory
|
|
4
|
+
"rootDir": "./src", // Or the directory containing your source .ts files
|
|
5
|
+
"target": "esnext",
|
|
6
|
+
"module": "esnext",
|
|
7
|
+
"declaration": true, // Essential for generating .d.ts files
|
|
8
|
+
"strict": true,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"skipLibCheck": true,
|
|
11
|
+
"forceConsistentCasingInFileNames": true,
|
|
12
|
+
"moduleResolution": "node",
|
|
13
|
+
"experimentalDecorators": true,
|
|
14
|
+
"useDefineForClassFields": false
|
|
15
|
+
},
|
|
16
|
+
"include": ["src/**/*.ts"], // Or the path to your source .ts files
|
|
17
|
+
"exclude": ["node_modules", "build"] // Or your output directory
|
|
18
|
+
}
|