@yelon/util 15.1.2 → 15.2.1

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.
Files changed (220) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +22 -22
  3. package/array/array-type.service.d.ts +68 -68
  4. package/array/array.service.d.ts +78 -78
  5. package/array/index.d.ts +2 -2
  6. package/browser/cookie.service.d.ts +67 -67
  7. package/browser/copy.d.ts +6 -6
  8. package/browser/index.d.ts +5 -5
  9. package/browser/is-empty.d.ts +6 -6
  10. package/browser/scroll.service.d.ts +37 -37
  11. package/browser/style.d.ts +21 -21
  12. package/config/abc/date-picker.type.d.ts +52 -52
  13. package/config/abc/error-collect.type.d.ts +10 -10
  14. package/config/abc/exception.type.d.ts +9 -9
  15. package/config/abc/image.type.d.ts +15 -15
  16. package/config/abc/index.d.ts +17 -17
  17. package/config/abc/loading.type.d.ts +31 -31
  18. package/config/abc/lodop.type.d.ts +33 -33
  19. package/config/abc/media.type.d.ts +11 -11
  20. package/config/abc/onboarding.type.d.ts +4 -4
  21. package/config/abc/page-header.type.d.ts +39 -39
  22. package/config/abc/pdf.type.d.ts +35 -35
  23. package/config/abc/qr.type.d.ts +25 -25
  24. package/config/abc/se.type.d.ts +32 -32
  25. package/config/abc/sg.type.d.ts +10 -10
  26. package/config/abc/st.type.d.ts +465 -465
  27. package/config/abc/sv.type.d.ts +14 -14
  28. package/config/abc/xlsx.type.d.ts +12 -12
  29. package/config/abc/zip.type.d.ts +10 -10
  30. package/config/acl/acl.type.d.ts +32 -32
  31. package/config/auth/auth.type.d.ts +55 -55
  32. package/config/bis/bis.type.d.ts +7 -7
  33. package/config/cache/cache.type.d.ts +40 -40
  34. package/config/chart/chart.type.d.ts +33 -33
  35. package/config/config.service.d.ts +13 -13
  36. package/config/config.types.d.ts +48 -48
  37. package/config/index.d.ts +14 -14
  38. package/config/mock/mock.type.d.ts +18 -18
  39. package/config/sf/sf.type.d.ts +133 -133
  40. package/config/socket/socket.type.d.ts +4 -4
  41. package/config/theme/http.type.d.ts +14 -14
  42. package/config/theme/i18n.type.d.ts +14 -14
  43. package/config/theme/index.d.ts +3 -3
  44. package/config/theme/responsive.type.d.ts +12 -12
  45. package/config/util/array.type.d.ts +22 -22
  46. package/config/util/currency.type.d.ts +39 -39
  47. package/date-time/index.d.ts +2 -2
  48. package/date-time/picker.d.ts +68 -68
  49. package/date-time/time.d.ts +29 -29
  50. package/decorator/convert.d.ts +24 -24
  51. package/decorator/index.d.ts +2 -2
  52. package/decorator/zone-outside.d.ts +35 -35
  53. package/esm2020/array/array-type.service.mjs +1 -1
  54. package/esm2020/array/array.mjs +4 -4
  55. package/esm2020/array/array.service.mjs +276 -276
  56. package/esm2020/array/index.mjs +2 -2
  57. package/esm2020/browser/browser.mjs +4 -4
  58. package/esm2020/browser/cookie.service.mjs +102 -102
  59. package/esm2020/browser/copy.mjs +27 -27
  60. package/esm2020/browser/index.mjs +5 -5
  61. package/esm2020/browser/is-empty.mjs +18 -18
  62. package/esm2020/browser/scroll.service.mjs +87 -87
  63. package/esm2020/browser/style.mjs +37 -37
  64. package/esm2020/config/abc/date-picker.type.mjs +1 -1
  65. package/esm2020/config/abc/error-collect.type.mjs +1 -1
  66. package/esm2020/config/abc/exception.type.mjs +1 -1
  67. package/esm2020/config/abc/image.type.mjs +1 -1
  68. package/esm2020/config/abc/index.mjs +17 -17
  69. package/esm2020/config/abc/loading.type.mjs +1 -1
  70. package/esm2020/config/abc/lodop.type.mjs +1 -1
  71. package/esm2020/config/abc/media.type.mjs +1 -1
  72. package/esm2020/config/abc/onboarding.type.mjs +1 -1
  73. package/esm2020/config/abc/page-header.type.mjs +1 -1
  74. package/esm2020/config/abc/pdf.type.mjs +1 -1
  75. package/esm2020/config/abc/qr.type.mjs +1 -1
  76. package/esm2020/config/abc/se.type.mjs +1 -1
  77. package/esm2020/config/abc/sg.type.mjs +1 -1
  78. package/esm2020/config/abc/st.type.mjs +1 -1
  79. package/esm2020/config/abc/sv.type.mjs +2 -2
  80. package/esm2020/config/abc/xlsx.type.mjs +1 -1
  81. package/esm2020/config/abc/zip.type.mjs +1 -1
  82. package/esm2020/config/acl/acl.type.mjs +1 -1
  83. package/esm2020/config/auth/auth.type.mjs +1 -1
  84. package/esm2020/config/bis/bis.type.mjs +1 -1
  85. package/esm2020/config/cache/cache.type.mjs +1 -1
  86. package/esm2020/config/chart/chart.type.mjs +1 -1
  87. package/esm2020/config/config.mjs +4 -4
  88. package/esm2020/config/config.service.mjs +36 -36
  89. package/esm2020/config/config.types.mjs +8 -8
  90. package/esm2020/config/index.mjs +14 -14
  91. package/esm2020/config/mock/mock.type.mjs +1 -1
  92. package/esm2020/config/sf/sf.type.mjs +1 -1
  93. package/esm2020/config/socket/socket.type.mjs +1 -1
  94. package/esm2020/config/theme/http.type.mjs +1 -1
  95. package/esm2020/config/theme/i18n.type.mjs +1 -1
  96. package/esm2020/config/theme/index.mjs +3 -3
  97. package/esm2020/config/theme/responsive.type.mjs +1 -1
  98. package/esm2020/config/util/array.type.mjs +1 -1
  99. package/esm2020/config/util/currency.type.mjs +1 -1
  100. package/esm2020/date-time/date-time.mjs +4 -4
  101. package/esm2020/date-time/index.mjs +2 -2
  102. package/esm2020/date-time/picker.mjs +115 -115
  103. package/esm2020/date-time/time.mjs +88 -88
  104. package/esm2020/decorator/convert.mjs +57 -57
  105. package/esm2020/decorator/decorator.mjs +4 -4
  106. package/esm2020/decorator/index.mjs +2 -2
  107. package/esm2020/decorator/zone-outside.mjs +56 -56
  108. package/esm2020/form/form.mjs +4 -4
  109. package/esm2020/form/index.mjs +2 -2
  110. package/esm2020/form/match-control.mjs +29 -29
  111. package/esm2020/form/validators.mjs +80 -80
  112. package/esm2020/format/currency.service.mjs +237 -237
  113. package/esm2020/format/currency.types.mjs +7 -7
  114. package/esm2020/format/format.mjs +4 -4
  115. package/esm2020/format/index.mjs +4 -4
  116. package/esm2020/format/string.mjs +84 -84
  117. package/esm2020/format/validate.mjs +93 -93
  118. package/esm2020/index.mjs +11 -11
  119. package/esm2020/math/in-range.mjs +24 -24
  120. package/esm2020/math/index.mjs +2 -2
  121. package/esm2020/math/math.mjs +4 -4
  122. package/esm2020/math/round.mjs +52 -52
  123. package/esm2020/other/assert.mjs +66 -66
  124. package/esm2020/other/deep.mjs +78 -76
  125. package/esm2020/other/favicon.mjs +28 -28
  126. package/esm2020/other/index.mjs +7 -7
  127. package/esm2020/other/lazy.service.mjs +131 -131
  128. package/esm2020/other/logger.mjs +32 -32
  129. package/esm2020/other/other.mjs +4 -4
  130. package/esm2020/other/path-to-regexp.service.mjs +238 -238
  131. package/esm2020/other/resize.mjs +3 -3
  132. package/esm2020/pipes/currency/cny.pipe.mjs +22 -22
  133. package/esm2020/pipes/currency/index.mjs +4 -4
  134. package/esm2020/pipes/currency/mega.pipe.mjs +28 -28
  135. package/esm2020/pipes/currency/module.mjs +18 -18
  136. package/esm2020/pipes/currency/pipe-currency.mjs +4 -4
  137. package/esm2020/pipes/currency/price.pipe.mjs +26 -26
  138. package/esm2020/pipes/filter/filter.pipe.mjs +18 -18
  139. package/esm2020/pipes/filter/index.mjs +2 -2
  140. package/esm2020/pipes/filter/module.mjs +16 -16
  141. package/esm2020/pipes/filter/pipe-filter.mjs +4 -4
  142. package/esm2020/pipes/format/index.mjs +2 -2
  143. package/esm2020/pipes/format/mask.pipe.mjs +33 -33
  144. package/esm2020/pipes/format/module.mjs +16 -16
  145. package/esm2020/pipes/format/pipe-format.mjs +4 -4
  146. package/esm2020/pipes/index.mjs +3 -3
  147. package/esm2020/pipes/pipes.mjs +4 -4
  148. package/esm2020/token/index.mjs +2 -2
  149. package/esm2020/token/page-visibility.mjs +14 -14
  150. package/esm2020/token/token.mjs +4 -4
  151. package/esm2020/token/window.mjs +16 -16
  152. package/esm2020/yelon-util.mjs +4 -4
  153. package/fesm2015/array.mjs +254 -254
  154. package/fesm2015/browser.mjs +283 -283
  155. package/fesm2015/config.mjs +56 -56
  156. package/fesm2015/date-time.mjs +207 -207
  157. package/fesm2015/decorator.mjs +121 -121
  158. package/fesm2015/form.mjs +118 -118
  159. package/fesm2015/format.mjs +413 -413
  160. package/fesm2015/math.mjs +85 -85
  161. package/fesm2015/other.mjs +589 -587
  162. package/fesm2015/other.mjs.map +1 -1
  163. package/fesm2015/pipe-currency.mjs +96 -96
  164. package/fesm2015/pipe-filter.mjs +40 -40
  165. package/fesm2015/pipe-format.mjs +55 -55
  166. package/fesm2015/pipes.mjs +8 -8
  167. package/fesm2015/token.mjs +37 -37
  168. package/fesm2015/yelon-util.mjs +16 -16
  169. package/fesm2020/array.mjs +284 -284
  170. package/fesm2020/browser.mjs +279 -279
  171. package/fesm2020/config.mjs +54 -54
  172. package/fesm2020/date-time.mjs +211 -211
  173. package/fesm2020/decorator.mjs +121 -121
  174. package/fesm2020/form.mjs +118 -118
  175. package/fesm2020/format.mjs +431 -431
  176. package/fesm2020/math.mjs +85 -85
  177. package/fesm2020/other.mjs +586 -584
  178. package/fesm2020/other.mjs.map +1 -1
  179. package/fesm2020/pipe-currency.mjs +94 -94
  180. package/fesm2020/pipe-filter.mjs +40 -40
  181. package/fesm2020/pipe-format.mjs +55 -55
  182. package/fesm2020/pipes.mjs +8 -8
  183. package/fesm2020/token.mjs +37 -37
  184. package/fesm2020/yelon-util.mjs +16 -16
  185. package/form/index.d.ts +2 -2
  186. package/form/match-control.d.ts +15 -15
  187. package/form/validators.d.ts +62 -62
  188. package/format/currency.service.d.ts +37 -37
  189. package/format/currency.types.d.ts +77 -77
  190. package/format/index.d.ts +4 -4
  191. package/format/string.d.ts +44 -44
  192. package/format/validate.d.ts +72 -72
  193. package/index.d.ts +11 -11
  194. package/math/in-range.d.ts +14 -14
  195. package/math/index.d.ts +2 -2
  196. package/math/round.d.ts +33 -33
  197. package/other/assert.d.ts +36 -36
  198. package/other/deep.d.ts +35 -33
  199. package/other/favicon.d.ts +2 -2
  200. package/other/index.d.ts +7 -7
  201. package/other/lazy.service.d.ts +48 -48
  202. package/other/logger.d.ts +5 -5
  203. package/other/path-to-regexp.service.d.ts +26 -26
  204. package/other/resize.d.ts +1 -1
  205. package/package.json +157 -157
  206. package/pipes/currency/cny.pipe.d.ts +15 -15
  207. package/pipes/currency/index.d.ts +4 -4
  208. package/pipes/currency/mega.pipe.d.ts +16 -16
  209. package/pipes/currency/module.d.ts +9 -9
  210. package/pipes/currency/price.pipe.d.ts +19 -19
  211. package/pipes/filter/filter.pipe.d.ts +13 -13
  212. package/pipes/filter/index.d.ts +2 -2
  213. package/pipes/filter/module.d.ts +7 -7
  214. package/pipes/format/index.d.ts +2 -2
  215. package/pipes/format/mask.pipe.d.ts +27 -27
  216. package/pipes/format/module.d.ts +7 -7
  217. package/pipes/index.d.ts +3 -3
  218. package/token/index.d.ts +2 -2
  219. package/token/page-visibility.d.ts +8 -8
  220. package/token/window.d.ts +7 -7
@@ -1,284 +1,284 @@
1
- import * as i0 from '@angular/core';
2
- import { Injectable } from '@angular/core';
3
- import { NzTreeNode } from 'ng-zorro-antd/core/tree';
4
- import * as i1 from '@yelon/util/config';
5
-
6
- class ArrayService {
7
- constructor(cog) {
8
- this.c = cog.merge('utilArray', {
9
- deepMapName: 'deep',
10
- parentMapName: 'parent',
11
- idMapName: 'id',
12
- parentIdMapName: 'parent_id',
13
- childrenMapName: 'children',
14
- titleMapName: 'title',
15
- checkedMapname: 'checked',
16
- selectedMapname: 'selected',
17
- expandedMapname: 'expanded',
18
- disabledMapname: 'disabled'
19
- });
20
- }
21
- /**
22
- * Convert tree structure to array structure
23
- *
24
- * 将树结构转换成数组结构
25
- */
26
- treeToArr(tree, options) {
27
- const opt = {
28
- deepMapName: this.c.deepMapName,
29
- parentMapName: this.c.parentMapName,
30
- childrenMapName: this.c.childrenMapName,
31
- clearChildren: true,
32
- cb: null,
33
- ...options
34
- };
35
- const result = [];
36
- const inFn = (list, parent, deep = 0) => {
37
- for (const i of list) {
38
- i[opt.deepMapName] = deep;
39
- i[opt.parentMapName] = parent;
40
- if (opt.cb) {
41
- opt.cb(i, parent, deep);
42
- }
43
- result.push(i);
44
- const children = i[opt.childrenMapName];
45
- if (children != null && Array.isArray(children) && children.length > 0) {
46
- inFn(children, i, deep + 1);
47
- }
48
- if (opt.clearChildren) {
49
- delete i[opt.childrenMapName];
50
- }
51
- }
52
- };
53
- inFn(tree, null);
54
- return result;
55
- }
56
- /**
57
- * Convert array structure to tree structure
58
- *
59
- * 数组转换成树数据
60
- */
61
- arrToTree(arr, options) {
62
- if (!Array.isArray(arr) || arr.length === 0) {
63
- return [];
64
- }
65
- const opt = {
66
- idMapName: this.c.idMapName,
67
- parentIdMapName: this.c.parentIdMapName,
68
- childrenMapName: this.c.childrenMapName,
69
- cb: null,
70
- ...options
71
- };
72
- const tree = [];
73
- const childrenOf = {};
74
- let rootPid = opt.rootParentIdValue;
75
- const arrType = arr;
76
- if (!rootPid) {
77
- const pids = arrType.map(i => i[opt.parentIdMapName]);
78
- const emptyPid = pids.findIndex(w => w == null);
79
- rootPid = emptyPid !== -1 ? pids[emptyPid] : pids.sort()[0];
80
- }
81
- for (const item of arrType) {
82
- const id = item[opt.idMapName];
83
- const pid = item[opt.parentIdMapName];
84
- childrenOf[id] = childrenOf[id] || [];
85
- item[opt.childrenMapName] = childrenOf[id];
86
- if (opt.cb) {
87
- opt.cb(item);
88
- }
89
- if (pid !== rootPid) {
90
- childrenOf[pid] = childrenOf[pid] || [];
91
- childrenOf[pid].push(item);
92
- }
93
- else {
94
- tree.push(item);
95
- }
96
- }
97
- return tree;
98
- }
99
- /**
100
- * 数组转换成 `nz-tree` 数据源,通过 `options` 转化项名,也可以使用 `options.cb` 更高级决定数据项
101
- */
102
- arrToTreeNode(arr, options) {
103
- const opt = {
104
- idMapName: this.c.idMapName,
105
- parentIdMapName: this.c.parentIdMapName,
106
- titleMapName: this.c.titleMapName,
107
- isLeafMapName: 'isLeaf',
108
- checkedMapname: this.c.checkedMapname,
109
- selectedMapname: this.c.selectedMapname,
110
- expandedMapname: this.c.expandedMapname,
111
- disabledMapname: this.c.disabledMapname,
112
- cb: null,
113
- ...options
114
- };
115
- const tree = this.arrToTree(arr, {
116
- idMapName: opt.idMapName,
117
- parentIdMapName: opt.parentIdMapName,
118
- childrenMapName: 'children'
119
- });
120
- this.visitTree(tree, (item, parent, deep) => {
121
- item.key = item[opt.idMapName];
122
- item.title = item[opt.titleMapName];
123
- item.checked = item[opt.checkedMapname];
124
- item.selected = item[opt.selectedMapname];
125
- item.expanded = item[opt.expandedMapname];
126
- item.disabled = item[opt.disabledMapname];
127
- if (item[opt.isLeafMapName] == null) {
128
- item.isLeaf = item.children.length === 0;
129
- }
130
- else {
131
- item.isLeaf = item[opt.isLeafMapName];
132
- }
133
- if (opt.cb) {
134
- opt.cb(item, parent, deep);
135
- }
136
- });
137
- return tree.map(node => new NzTreeNode(node));
138
- }
139
- /**
140
- * 递归访问整个树
141
- */
142
- visitTree(tree, cb, options) {
143
- options = {
144
- childrenMapName: this.c.childrenMapName,
145
- ...options
146
- };
147
- const inFn = (data, parent, deep) => {
148
- for (const item of data) {
149
- cb(item, parent, deep);
150
- const childrenVal = item[options.childrenMapName];
151
- if (Array.isArray(childrenVal) && childrenVal.length > 0) {
152
- inFn(childrenVal, item, deep + 1);
153
- }
154
- }
155
- };
156
- inFn(tree, null, 1);
157
- }
158
- /**
159
- * Return the value of the first tree value in the tree where predicate is true, and `undefined` otherwise
160
- *
161
- * 根据条件返回树的第一个值,否则返回 `undefined`
162
- */
163
- findTree(tree, predicate, options) {
164
- let res;
165
- this.visitTree(tree, item => {
166
- if (res === undefined && predicate(item)) {
167
- res = item;
168
- }
169
- }, options);
170
- return res;
171
- }
172
- /**
173
- * 获取所有已经选中的 `key` 值
174
- */
175
- getKeysByTreeNode(tree, options) {
176
- const opt = {
177
- includeHalfChecked: true,
178
- ...options
179
- };
180
- const keys = [];
181
- this.visitTree(tree, (item, parent, deep) => {
182
- if (item.isChecked || (opt.includeHalfChecked && item.isHalfChecked)) {
183
- keys.push(opt.cb ? opt.cb(item, parent, deep) : opt.keyMapName ? item.origin[opt.keyMapName] : item.key);
184
- }
185
- });
186
- return keys;
187
- }
188
- baseFlat(array, depth, result = []) {
189
- let index = -1;
190
- while (++index < array.length) {
191
- const value = array[index];
192
- if (depth > 0 && Array.isArray(value)) {
193
- if (depth > 1) {
194
- this.baseFlat(value, depth - 1, result);
195
- }
196
- else {
197
- let pushIndex = -1;
198
- const offset = result.length;
199
- while (++pushIndex < value.length) {
200
- result[offset + pushIndex] = value[pushIndex];
201
- }
202
- }
203
- }
204
- else {
205
- result[result.length] = value;
206
- }
207
- }
208
- return result;
209
- }
210
- /**
211
- * Recursively flattens array
212
- *
213
- * 递归扁平数组
214
- * ```ts
215
- * srv.flat([1, [2, 3, [4, 5, [6]]]]) => [1,2,3,4,5,6]
216
- * srv.flat([1, [2, 3, [4, 5, [6]]]], 1) => [1,2,3,[4, 5, [6]]]
217
- * ```
218
- */
219
- flat(array, depth = 1 / 0) {
220
- return Array.isArray(array) ? this.baseFlat(array, depth) : array;
221
- }
222
- /**
223
- * Group the array
224
- *
225
- * 对数组进行分组
226
- * ```ts
227
- * srv.groupBy([6.1, 4.2, 6.3], Math.floor) => {"4":[4.2],"6":[6.1,6.3]}
228
- * srv.groupBy(['one', 'two', 'three'], v => v.length) => {"3":["one","two"],"5":["three"]}
229
- * ```
230
- */
231
- groupBy(array, iteratee) {
232
- if (!Array.isArray(array)) {
233
- return {};
234
- }
235
- return array.reduce((result, value) => {
236
- const key = iteratee(value);
237
- if (Object.prototype.hasOwnProperty.call(result, key)) {
238
- result[key].push(value);
239
- }
240
- else {
241
- result[key] = [value];
242
- }
243
- return result;
244
- }, {});
245
- }
246
- /**
247
- * Creates a duplicate-free version of an array
248
- *
249
- * 创建去重后的数组
250
- * ```ts
251
- * uniq([1, 2, 2, 3, 1]) => [1,2,3]
252
- * uniq([{ a: 1 }, { a: 1 }, { a: 2 }], 'a') => [{"a":1},{"a":2}]
253
- * uniq([{ a: 1 }, { a: 1 }, { a: 2 }], i => (i.a === 1 ? 'a' : 'b')) => [{"a":1},{"a":2}]
254
- * ```
255
- */
256
- uniq(array, predicate) {
257
- return Array.from(array
258
- .reduce((map, value) => {
259
- const key = predicate
260
- ? typeof predicate === 'string'
261
- ? value[predicate]
262
- : predicate(value)
263
- : value;
264
- if (!map.has(key)) {
265
- map.set(key, value);
266
- }
267
- return map;
268
- }, new Map())
269
- .values());
270
- }
271
- }
272
- ArrayService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: ArrayService, deps: [{ token: i1.YunzaiConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
273
- ArrayService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: ArrayService, providedIn: 'root' });
274
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: ArrayService, decorators: [{
275
- type: Injectable,
276
- args: [{ providedIn: 'root' }]
277
- }], ctorParameters: function () { return [{ type: i1.YunzaiConfigService }]; } });
278
-
279
- /**
280
- * Generated bundle index. Do not edit.
281
- */
282
-
283
- export { ArrayService };
284
- //# sourceMappingURL=array.mjs.map
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable } from '@angular/core';
3
+ import { NzTreeNode } from 'ng-zorro-antd/core/tree';
4
+ import * as i1 from '@yelon/util/config';
5
+
6
+ class ArrayService {
7
+ constructor(cog) {
8
+ this.c = cog.merge('utilArray', {
9
+ deepMapName: 'deep',
10
+ parentMapName: 'parent',
11
+ idMapName: 'id',
12
+ parentIdMapName: 'parent_id',
13
+ childrenMapName: 'children',
14
+ titleMapName: 'title',
15
+ checkedMapname: 'checked',
16
+ selectedMapname: 'selected',
17
+ expandedMapname: 'expanded',
18
+ disabledMapname: 'disabled'
19
+ });
20
+ }
21
+ /**
22
+ * Convert tree structure to array structure
23
+ *
24
+ * 将树结构转换成数组结构
25
+ */
26
+ treeToArr(tree, options) {
27
+ const opt = {
28
+ deepMapName: this.c.deepMapName,
29
+ parentMapName: this.c.parentMapName,
30
+ childrenMapName: this.c.childrenMapName,
31
+ clearChildren: true,
32
+ cb: null,
33
+ ...options
34
+ };
35
+ const result = [];
36
+ const inFn = (list, parent, deep = 0) => {
37
+ for (const i of list) {
38
+ i[opt.deepMapName] = deep;
39
+ i[opt.parentMapName] = parent;
40
+ if (opt.cb) {
41
+ opt.cb(i, parent, deep);
42
+ }
43
+ result.push(i);
44
+ const children = i[opt.childrenMapName];
45
+ if (children != null && Array.isArray(children) && children.length > 0) {
46
+ inFn(children, i, deep + 1);
47
+ }
48
+ if (opt.clearChildren) {
49
+ delete i[opt.childrenMapName];
50
+ }
51
+ }
52
+ };
53
+ inFn(tree, null);
54
+ return result;
55
+ }
56
+ /**
57
+ * Convert array structure to tree structure
58
+ *
59
+ * 数组转换成树数据
60
+ */
61
+ arrToTree(arr, options) {
62
+ if (!Array.isArray(arr) || arr.length === 0) {
63
+ return [];
64
+ }
65
+ const opt = {
66
+ idMapName: this.c.idMapName,
67
+ parentIdMapName: this.c.parentIdMapName,
68
+ childrenMapName: this.c.childrenMapName,
69
+ cb: null,
70
+ ...options
71
+ };
72
+ const tree = [];
73
+ const childrenOf = {};
74
+ let rootPid = opt.rootParentIdValue;
75
+ const arrType = arr;
76
+ if (!rootPid) {
77
+ const pids = arrType.map(i => i[opt.parentIdMapName]);
78
+ const emptyPid = pids.findIndex(w => w == null);
79
+ rootPid = emptyPid !== -1 ? pids[emptyPid] : pids.sort()[0];
80
+ }
81
+ for (const item of arrType) {
82
+ const id = item[opt.idMapName];
83
+ const pid = item[opt.parentIdMapName];
84
+ childrenOf[id] = childrenOf[id] || [];
85
+ item[opt.childrenMapName] = childrenOf[id];
86
+ if (opt.cb) {
87
+ opt.cb(item);
88
+ }
89
+ if (pid !== rootPid) {
90
+ childrenOf[pid] = childrenOf[pid] || [];
91
+ childrenOf[pid].push(item);
92
+ }
93
+ else {
94
+ tree.push(item);
95
+ }
96
+ }
97
+ return tree;
98
+ }
99
+ /**
100
+ * 数组转换成 `nz-tree` 数据源,通过 `options` 转化项名,也可以使用 `options.cb` 更高级决定数据项
101
+ */
102
+ arrToTreeNode(arr, options) {
103
+ const opt = {
104
+ idMapName: this.c.idMapName,
105
+ parentIdMapName: this.c.parentIdMapName,
106
+ titleMapName: this.c.titleMapName,
107
+ isLeafMapName: 'isLeaf',
108
+ checkedMapname: this.c.checkedMapname,
109
+ selectedMapname: this.c.selectedMapname,
110
+ expandedMapname: this.c.expandedMapname,
111
+ disabledMapname: this.c.disabledMapname,
112
+ cb: null,
113
+ ...options
114
+ };
115
+ const tree = this.arrToTree(arr, {
116
+ idMapName: opt.idMapName,
117
+ parentIdMapName: opt.parentIdMapName,
118
+ childrenMapName: 'children'
119
+ });
120
+ this.visitTree(tree, (item, parent, deep) => {
121
+ item.key = item[opt.idMapName];
122
+ item.title = item[opt.titleMapName];
123
+ item.checked = item[opt.checkedMapname];
124
+ item.selected = item[opt.selectedMapname];
125
+ item.expanded = item[opt.expandedMapname];
126
+ item.disabled = item[opt.disabledMapname];
127
+ if (item[opt.isLeafMapName] == null) {
128
+ item.isLeaf = item.children.length === 0;
129
+ }
130
+ else {
131
+ item.isLeaf = item[opt.isLeafMapName];
132
+ }
133
+ if (opt.cb) {
134
+ opt.cb(item, parent, deep);
135
+ }
136
+ });
137
+ return tree.map(node => new NzTreeNode(node));
138
+ }
139
+ /**
140
+ * 递归访问整个树
141
+ */
142
+ visitTree(tree, cb, options) {
143
+ options = {
144
+ childrenMapName: this.c.childrenMapName,
145
+ ...options
146
+ };
147
+ const inFn = (data, parent, deep) => {
148
+ for (const item of data) {
149
+ cb(item, parent, deep);
150
+ const childrenVal = item[options.childrenMapName];
151
+ if (Array.isArray(childrenVal) && childrenVal.length > 0) {
152
+ inFn(childrenVal, item, deep + 1);
153
+ }
154
+ }
155
+ };
156
+ inFn(tree, null, 1);
157
+ }
158
+ /**
159
+ * Return the value of the first tree value in the tree where predicate is true, and `undefined` otherwise
160
+ *
161
+ * 根据条件返回树的第一个值,否则返回 `undefined`
162
+ */
163
+ findTree(tree, predicate, options) {
164
+ let res;
165
+ this.visitTree(tree, item => {
166
+ if (res === undefined && predicate(item)) {
167
+ res = item;
168
+ }
169
+ }, options);
170
+ return res;
171
+ }
172
+ /**
173
+ * 获取所有已经选中的 `key` 值
174
+ */
175
+ getKeysByTreeNode(tree, options) {
176
+ const opt = {
177
+ includeHalfChecked: true,
178
+ ...options
179
+ };
180
+ const keys = [];
181
+ this.visitTree(tree, (item, parent, deep) => {
182
+ if (item.isChecked || (opt.includeHalfChecked && item.isHalfChecked)) {
183
+ keys.push(opt.cb ? opt.cb(item, parent, deep) : opt.keyMapName ? item.origin[opt.keyMapName] : item.key);
184
+ }
185
+ });
186
+ return keys;
187
+ }
188
+ baseFlat(array, depth, result = []) {
189
+ let index = -1;
190
+ while (++index < array.length) {
191
+ const value = array[index];
192
+ if (depth > 0 && Array.isArray(value)) {
193
+ if (depth > 1) {
194
+ this.baseFlat(value, depth - 1, result);
195
+ }
196
+ else {
197
+ let pushIndex = -1;
198
+ const offset = result.length;
199
+ while (++pushIndex < value.length) {
200
+ result[offset + pushIndex] = value[pushIndex];
201
+ }
202
+ }
203
+ }
204
+ else {
205
+ result[result.length] = value;
206
+ }
207
+ }
208
+ return result;
209
+ }
210
+ /**
211
+ * Recursively flattens array
212
+ *
213
+ * 递归扁平数组
214
+ * ```ts
215
+ * srv.flat([1, [2, 3, [4, 5, [6]]]]) => [1,2,3,4,5,6]
216
+ * srv.flat([1, [2, 3, [4, 5, [6]]]], 1) => [1,2,3,[4, 5, [6]]]
217
+ * ```
218
+ */
219
+ flat(array, depth = 1 / 0) {
220
+ return Array.isArray(array) ? this.baseFlat(array, depth) : array;
221
+ }
222
+ /**
223
+ * Group the array
224
+ *
225
+ * 对数组进行分组
226
+ * ```ts
227
+ * srv.groupBy([6.1, 4.2, 6.3], Math.floor) => {"4":[4.2],"6":[6.1,6.3]}
228
+ * srv.groupBy(['one', 'two', 'three'], v => v.length) => {"3":["one","two"],"5":["three"]}
229
+ * ```
230
+ */
231
+ groupBy(array, iteratee) {
232
+ if (!Array.isArray(array)) {
233
+ return {};
234
+ }
235
+ return array.reduce((result, value) => {
236
+ const key = iteratee(value);
237
+ if (Object.prototype.hasOwnProperty.call(result, key)) {
238
+ result[key].push(value);
239
+ }
240
+ else {
241
+ result[key] = [value];
242
+ }
243
+ return result;
244
+ }, {});
245
+ }
246
+ /**
247
+ * Creates a duplicate-free version of an array
248
+ *
249
+ * 创建去重后的数组
250
+ * ```ts
251
+ * uniq([1, 2, 2, 3, 1]) => [1,2,3]
252
+ * uniq([{ a: 1 }, { a: 1 }, { a: 2 }], 'a') => [{"a":1},{"a":2}]
253
+ * uniq([{ a: 1 }, { a: 1 }, { a: 2 }], i => (i.a === 1 ? 'a' : 'b')) => [{"a":1},{"a":2}]
254
+ * ```
255
+ */
256
+ uniq(array, predicate) {
257
+ return Array.from(array
258
+ .reduce((map, value) => {
259
+ const key = predicate
260
+ ? typeof predicate === 'string'
261
+ ? value[predicate]
262
+ : predicate(value)
263
+ : value;
264
+ if (!map.has(key)) {
265
+ map.set(key, value);
266
+ }
267
+ return map;
268
+ }, new Map())
269
+ .values());
270
+ }
271
+ }
272
+ ArrayService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ArrayService, deps: [{ token: i1.YunzaiConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
273
+ ArrayService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ArrayService, providedIn: 'root' });
274
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ArrayService, decorators: [{
275
+ type: Injectable,
276
+ args: [{ providedIn: 'root' }]
277
+ }], ctorParameters: function () { return [{ type: i1.YunzaiConfigService }]; } });
278
+
279
+ /**
280
+ * Generated bundle index. Do not edit.
281
+ */
282
+
283
+ export { ArrayService };
284
+ //# sourceMappingURL=array.mjs.map