@yelon/util 17.3.2 → 18.0.1

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