@kaspernj/api-maker 1.0.2053 → 1.0.2054

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 (946) hide show
  1. package/build/api.d.ts +19 -0
  2. package/build/api.d.ts.map +1 -0
  3. package/build/api.js +232 -116
  4. package/build/api.js.map +1 -0
  5. package/build/attribute-not-loaded-error.d.ts +3 -0
  6. package/build/attribute-not-loaded-error.d.ts.map +1 -0
  7. package/build/attribute-not-loaded-error.js +26 -2
  8. package/build/attribute-not-loaded-error.js.map +1 -0
  9. package/build/base-component.d.ts +4 -0
  10. package/build/base-component.d.ts.map +1 -0
  11. package/build/base-component.js +27 -5
  12. package/build/base-component.js.map +1 -0
  13. package/build/base-error.d.ts +31 -0
  14. package/build/base-error.d.ts.map +1 -0
  15. package/build/base-error.js +74 -31
  16. package/build/base-error.js.map +1 -0
  17. package/build/base-model/attribute.d.ts +45 -0
  18. package/build/base-model/attribute.d.ts.map +1 -0
  19. package/build/base-model/attribute.js +58 -24
  20. package/build/base-model/attribute.js.map +1 -0
  21. package/build/base-model/column.d.ts +17 -0
  22. package/build/base-model/column.d.ts.map +1 -0
  23. package/build/base-model/column.js +21 -10
  24. package/build/base-model/column.js.map +1 -0
  25. package/build/base-model/reflection.d.ts +22 -0
  26. package/build/base-model/reflection.d.ts.map +1 -0
  27. package/build/base-model/reflection.js +66 -14
  28. package/build/base-model/reflection.js.map +1 -0
  29. package/build/base-model/scope.d.ts +9 -0
  30. package/build/base-model/scope.d.ts.map +1 -0
  31. package/build/base-model/scope.js +51 -11
  32. package/build/base-model/scope.js.map +1 -0
  33. package/build/base-model.js +1282 -821
  34. package/build/base-model.js.map +1 -0
  35. package/build/bootstrap/attribute-row.d.ts +3 -0
  36. package/build/bootstrap/attribute-row.d.ts.map +1 -0
  37. package/build/bootstrap/attribute-row.js +178 -132
  38. package/build/bootstrap/attribute-row.js.map +1 -0
  39. package/build/bootstrap/attribute-rows.d.ts +3 -0
  40. package/build/bootstrap/attribute-rows.d.ts.map +1 -0
  41. package/build/bootstrap/attribute-rows.js +52 -31
  42. package/build/bootstrap/attribute-rows.js.map +1 -0
  43. package/build/bootstrap/card.d.ts +3 -0
  44. package/build/bootstrap/card.d.ts.map +1 -0
  45. package/build/bootstrap/card.js +163 -135
  46. package/build/bootstrap/card.js.map +1 -0
  47. package/build/bootstrap/checkbox.d.ts +3 -0
  48. package/build/bootstrap/checkbox.d.ts.map +1 -0
  49. package/build/bootstrap/checkbox.js +105 -97
  50. package/build/bootstrap/checkbox.js.map +1 -0
  51. package/build/bootstrap/checkboxes.d.ts +3 -0
  52. package/build/bootstrap/checkboxes.d.ts.map +1 -0
  53. package/build/bootstrap/checkboxes.js +206 -180
  54. package/build/bootstrap/checkboxes.js.map +1 -0
  55. package/build/bootstrap/index.d.ts +1 -0
  56. package/build/bootstrap/index.d.ts.map +1 -0
  57. package/build/bootstrap/index.js +1 -2
  58. package/build/bootstrap/index.js.map +1 -0
  59. package/build/bootstrap/input.d.ts +3 -0
  60. package/build/bootstrap/input.d.ts.map +1 -0
  61. package/build/bootstrap/input.js +135 -129
  62. package/build/bootstrap/input.js.map +1 -0
  63. package/build/bootstrap/invalid-feedback.d.ts +6 -0
  64. package/build/bootstrap/invalid-feedback.d.ts.map +1 -0
  65. package/build/bootstrap/invalid-feedback.js +51 -26
  66. package/build/bootstrap/invalid-feedback.js.map +1 -0
  67. package/build/bootstrap/paginate.d.ts +3 -0
  68. package/build/bootstrap/paginate.d.ts.map +1 -0
  69. package/build/bootstrap/paginate.js +165 -148
  70. package/build/bootstrap/paginate.js.map +1 -0
  71. package/build/bootstrap/radio-buttons.d.ts +3 -0
  72. package/build/bootstrap/radio-buttons.d.ts.map +1 -0
  73. package/build/bootstrap/radio-buttons.js +89 -72
  74. package/build/bootstrap/radio-buttons.js.map +1 -0
  75. package/build/bootstrap/select.d.ts +3 -0
  76. package/build/bootstrap/select.d.ts.map +1 -0
  77. package/build/bootstrap/select.js +103 -88
  78. package/build/bootstrap/select.js.map +1 -0
  79. package/build/bootstrap/sort-link.d.ts +3 -0
  80. package/build/bootstrap/sort-link.d.ts.map +1 -0
  81. package/build/bootstrap/sort-link.js +153 -129
  82. package/build/bootstrap/sort-link.js.map +1 -0
  83. package/build/cable-connection-pool.d.ts +27 -0
  84. package/build/cable-connection-pool.d.ts.map +1 -0
  85. package/build/cable-connection-pool.js +118 -123
  86. package/build/cable-connection-pool.js.map +1 -0
  87. package/build/cable-subscription-pool.d.ts +16 -0
  88. package/build/cable-subscription-pool.d.ts.map +1 -0
  89. package/build/cable-subscription-pool.js +211 -199
  90. package/build/cable-subscription-pool.js.map +1 -0
  91. package/build/cable-subscription.d.ts +7 -0
  92. package/build/cable-subscription.d.ts.map +1 -0
  93. package/build/cable-subscription.js +25 -20
  94. package/build/cable-subscription.js.map +1 -0
  95. package/build/cache-key-generator.d.ts +15 -0
  96. package/build/cache-key-generator.d.ts.map +1 -0
  97. package/build/cache-key-generator.js +86 -78
  98. package/build/cache-key-generator.js.map +1 -0
  99. package/build/can-can.d.ts +19 -0
  100. package/build/can-can.d.ts.map +1 -0
  101. package/build/can-can.js +243 -128
  102. package/build/can-can.js.map +1 -0
  103. package/build/channels-consumer.d.ts +3 -0
  104. package/build/channels-consumer.d.ts.map +1 -0
  105. package/build/channels-consumer.js +13 -8
  106. package/build/channels-consumer.js.map +1 -0
  107. package/build/collection-loader.d.ts +3 -0
  108. package/build/collection-loader.d.ts.map +1 -0
  109. package/build/collection-loader.js +70 -46
  110. package/build/collection-loader.js.map +1 -0
  111. package/build/collection.d.ts +213 -0
  112. package/build/collection.d.ts.map +1 -0
  113. package/build/collection.js +592 -306
  114. package/build/collection.js.map +1 -0
  115. package/build/command-submit-data.d.ts +54 -0
  116. package/build/command-submit-data.d.ts.map +1 -0
  117. package/build/command-submit-data.js +126 -80
  118. package/build/command-submit-data.js.map +1 -0
  119. package/build/commands-pool.d.ts +63 -0
  120. package/build/commands-pool.d.ts.map +1 -0
  121. package/build/commands-pool.js +281 -189
  122. package/build/commands-pool.js.map +1 -0
  123. package/build/compose.d.ts +2 -0
  124. package/build/compose.d.ts.map +1 -0
  125. package/build/compose.js +17 -8
  126. package/build/compose.js.map +1 -0
  127. package/build/config.d.ts +9 -0
  128. package/build/config.d.ts.map +1 -0
  129. package/build/config.js +105 -70
  130. package/build/config.js.map +1 -0
  131. package/build/custom-error.d.ts +8 -0
  132. package/build/custom-error.d.ts.map +1 -0
  133. package/build/custom-error.js +30 -4
  134. package/build/custom-error.js.map +1 -0
  135. package/build/data-set-to-attributes.d.ts +2 -0
  136. package/build/data-set-to-attributes.d.ts.map +1 -0
  137. package/build/data-set-to-attributes.js +45 -9
  138. package/build/data-set-to-attributes.js.map +1 -0
  139. package/build/deserializer.d.ts +4 -0
  140. package/build/deserializer.d.ts.map +1 -0
  141. package/build/deserializer.js +109 -54
  142. package/build/deserializer.js.map +1 -0
  143. package/build/destroy-error.d.ts +8 -0
  144. package/build/destroy-error.d.ts.map +1 -0
  145. package/build/destroy-error.js +30 -4
  146. package/build/destroy-error.js.map +1 -0
  147. package/build/devise.d.ts +20 -0
  148. package/build/devise.d.ts.map +1 -0
  149. package/build/devise.js +214 -123
  150. package/build/devise.js.map +1 -0
  151. package/build/draggable-sort/controller.d.ts +41 -0
  152. package/build/draggable-sort/controller.d.ts.map +1 -0
  153. package/build/draggable-sort/controller.js +130 -133
  154. package/build/draggable-sort/controller.js.map +1 -0
  155. package/build/draggable-sort/index.d.ts +3 -0
  156. package/build/draggable-sort/index.d.ts.map +1 -0
  157. package/build/draggable-sort/index.js +147 -111
  158. package/build/draggable-sort/index.js.map +1 -0
  159. package/build/draggable-sort/item.d.ts +3 -0
  160. package/build/draggable-sort/item.d.ts.map +1 -0
  161. package/build/draggable-sort/item.js +199 -183
  162. package/build/draggable-sort/item.js.map +1 -0
  163. package/build/error-logger.d.ts +20 -0
  164. package/build/error-logger.d.ts.map +1 -0
  165. package/build/error-logger.js +184 -92
  166. package/build/error-logger.js.map +1 -0
  167. package/build/error-messages.d.ts +18 -0
  168. package/build/error-messages.d.ts.map +1 -0
  169. package/build/error-messages.js +26 -13
  170. package/build/error-messages.js.map +1 -0
  171. package/build/event-connection.d.ts +12 -0
  172. package/build/event-connection.d.ts.map +1 -0
  173. package/build/event-connection.js +69 -31
  174. package/build/event-connection.js.map +1 -0
  175. package/build/event-emitter-listener.d.ts +8 -0
  176. package/build/event-emitter-listener.d.ts.map +1 -0
  177. package/build/event-emitter-listener.js +26 -14
  178. package/build/event-emitter-listener.js.map +1 -0
  179. package/build/event-model-class.d.ts +9 -0
  180. package/build/event-model-class.d.ts.map +1 -0
  181. package/build/event-model-class.js +50 -23
  182. package/build/event-model-class.js.map +1 -0
  183. package/build/events.d.ts +4 -0
  184. package/build/events.d.ts.map +1 -0
  185. package/build/events.js +9 -4
  186. package/build/events.js.map +1 -0
  187. package/build/form.d.ts +14 -0
  188. package/build/form.d.ts.map +1 -0
  189. package/build/form.js +169 -97
  190. package/build/form.js.map +1 -0
  191. package/build/history-expo.d.ts +6 -0
  192. package/build/history-expo.d.ts.map +1 -0
  193. package/build/history-expo.js +28 -19
  194. package/build/history-expo.js.map +1 -0
  195. package/build/history-react-native.d.ts +6 -0
  196. package/build/history-react-native.d.ts.map +1 -0
  197. package/build/history-react-native.js +29 -19
  198. package/build/history-react-native.js.map +1 -0
  199. package/build/history.d.ts +3 -0
  200. package/build/history.d.ts.map +1 -0
  201. package/build/history.js +5 -3
  202. package/build/history.js.map +1 -0
  203. package/build/index.d.ts +2 -0
  204. package/build/index.d.ts.map +1 -0
  205. package/build/index.js +6 -3
  206. package/build/index.js.map +1 -0
  207. package/build/inputs/attachment.d.ts +3 -0
  208. package/build/inputs/attachment.d.ts.map +1 -0
  209. package/build/inputs/attachment.js +125 -133
  210. package/build/inputs/attachment.js.map +1 -0
  211. package/build/inputs/auto-submit.d.ts +9 -0
  212. package/build/inputs/auto-submit.d.ts.map +1 -0
  213. package/build/inputs/auto-submit.js +71 -35
  214. package/build/inputs/auto-submit.js.map +1 -0
  215. package/build/inputs/checkbox.d.ts +3 -0
  216. package/build/inputs/checkbox.d.ts.map +1 -0
  217. package/build/inputs/checkbox.js +171 -136
  218. package/build/inputs/checkbox.js.map +1 -0
  219. package/build/inputs/checkboxes.d.ts +3 -0
  220. package/build/inputs/checkboxes.d.ts.map +1 -0
  221. package/build/inputs/checkboxes.js +161 -110
  222. package/build/inputs/checkboxes.js.map +1 -0
  223. package/build/inputs/id-for-component.d.ts +2 -0
  224. package/build/inputs/id-for-component.d.ts.map +1 -0
  225. package/build/inputs/id-for-component.js +53 -14
  226. package/build/inputs/id-for-component.js.map +1 -0
  227. package/build/inputs/input-wrapper.d.ts +3 -0
  228. package/build/inputs/input-wrapper.d.ts.map +1 -0
  229. package/build/inputs/input-wrapper.js +27 -18
  230. package/build/inputs/input-wrapper.js.map +1 -0
  231. package/build/inputs/input.d.ts +5 -0
  232. package/build/inputs/input.d.ts.map +1 -0
  233. package/build/inputs/input.js +250 -240
  234. package/build/inputs/input.js.map +1 -0
  235. package/build/inputs/money.d.ts +3 -0
  236. package/build/inputs/money.d.ts.map +1 -0
  237. package/build/inputs/money.js +189 -171
  238. package/build/inputs/money.js.map +1 -0
  239. package/build/inputs/name-for-component.d.ts +2 -0
  240. package/build/inputs/name-for-component.d.ts.map +1 -0
  241. package/build/inputs/name-for-component.js +48 -11
  242. package/build/inputs/name-for-component.js.map +1 -0
  243. package/build/inputs/select.d.ts +5 -0
  244. package/build/inputs/select.d.ts.map +1 -0
  245. package/build/inputs/select.js +128 -93
  246. package/build/inputs/select.js.map +1 -0
  247. package/build/instance-of-class-name.d.ts +3 -0
  248. package/build/instance-of-class-name.d.ts.map +1 -0
  249. package/build/instance-of-class-name.js +24 -21
  250. package/build/instance-of-class-name.js.map +1 -0
  251. package/build/is-expo.d.ts +3 -0
  252. package/build/is-expo.d.ts.map +1 -0
  253. package/build/is-expo.js +16 -20
  254. package/build/is-expo.js.map +1 -0
  255. package/build/key-value-store.d.ts +11 -0
  256. package/build/key-value-store.d.ts.map +1 -0
  257. package/build/key-value-store.js +133 -51
  258. package/build/key-value-store.js.map +1 -0
  259. package/build/link.d.ts +3 -0
  260. package/build/link.d.ts.map +1 -0
  261. package/build/link.js +120 -82
  262. package/build/link.js.map +1 -0
  263. package/build/logger.d.ts +13 -0
  264. package/build/logger.d.ts.map +1 -0
  265. package/build/logger.js +39 -29
  266. package/build/logger.js.map +1 -0
  267. package/build/merge-styles.d.ts +2 -0
  268. package/build/merge-styles.d.ts.map +1 -0
  269. package/build/merge-styles.js +16 -11
  270. package/build/merge-styles.js.map +1 -0
  271. package/build/modal.d.ts +3 -0
  272. package/build/modal.d.ts.map +1 -0
  273. package/build/modal.js +71 -38
  274. package/build/modal.js.map +1 -0
  275. package/build/model-class-require.d.ts +3 -0
  276. package/build/model-class-require.d.ts.map +1 -0
  277. package/build/model-class-require.js +47 -12
  278. package/build/model-class-require.js.map +1 -0
  279. package/build/model-events.d.ts +8 -0
  280. package/build/model-events.d.ts.map +1 -0
  281. package/build/model-events.js +39 -30
  282. package/build/model-events.js.map +1 -0
  283. package/build/model-name.d.ts +8 -0
  284. package/build/model-name.d.ts.map +1 -0
  285. package/build/model-name.js +66 -26
  286. package/build/model-name.js.map +1 -0
  287. package/build/model-prop-type.d.ts +21 -0
  288. package/build/model-prop-type.d.ts.map +1 -0
  289. package/build/model-prop-type.js +107 -98
  290. package/build/model-prop-type.js.map +1 -0
  291. package/build/model-recipes-loader.d.ts +10 -0
  292. package/build/model-recipes-loader.d.ts.map +1 -0
  293. package/build/model-recipes-loader.js +30 -31
  294. package/build/model-recipes-loader.js.map +1 -0
  295. package/build/model-recipes-model-loader.d.ts +202 -0
  296. package/build/model-recipes-model-loader.d.ts.map +1 -0
  297. package/build/model-recipes-model-loader.js +304 -344
  298. package/build/model-recipes-model-loader.js.map +1 -0
  299. package/build/models-response-reader.d.ts +9 -0
  300. package/build/models-response-reader.d.ts.map +1 -0
  301. package/build/models-response-reader.js +79 -39
  302. package/build/models-response-reader.js.map +1 -0
  303. package/build/models.d.ts +3 -0
  304. package/build/models.d.ts.map +1 -0
  305. package/build/models.js +11 -8
  306. package/build/models.js.map +1 -0
  307. package/build/money-formatter.d.ts +17 -0
  308. package/build/money-formatter.d.ts.map +1 -0
  309. package/build/money-formatter.js +93 -76
  310. package/build/money-formatter.js.map +1 -0
  311. package/build/not-loaded-error.d.ts +3 -0
  312. package/build/not-loaded-error.d.ts.map +1 -0
  313. package/build/not-loaded-error.js +26 -2
  314. package/build/not-loaded-error.js.map +1 -0
  315. package/build/params.d.ts +16 -0
  316. package/build/params.d.ts.map +1 -0
  317. package/build/params.js +73 -60
  318. package/build/params.js.map +1 -0
  319. package/build/preloaded.d.ts +8 -0
  320. package/build/preloaded.d.ts.map +1 -0
  321. package/build/preloaded.js +73 -36
  322. package/build/preloaded.js.map +1 -0
  323. package/build/resize-observer.d.ts +3 -0
  324. package/build/resize-observer.d.ts.map +1 -0
  325. package/build/resize-observer.js +13 -10
  326. package/build/resize-observer.js.map +1 -0
  327. package/build/rest-props-validator.d.ts +3 -0
  328. package/build/rest-props-validator.d.ts.map +1 -0
  329. package/build/rest-props-validator.js +9 -7
  330. package/build/rest-props-validator.js.map +1 -0
  331. package/build/result.d.ts +38 -0
  332. package/build/result.d.ts.map +1 -0
  333. package/build/result.js +43 -13
  334. package/build/result.js.map +1 -0
  335. package/build/router/route.d.ts +8 -0
  336. package/build/router/route.d.ts.map +1 -0
  337. package/build/router/route.js +322 -266
  338. package/build/router/route.js.map +1 -0
  339. package/build/router/switch.d.ts +4 -0
  340. package/build/router/switch.d.ts.map +1 -0
  341. package/build/router/switch.js +132 -70
  342. package/build/router/switch.js.map +1 -0
  343. package/build/router.d.ts +3 -0
  344. package/build/router.d.ts.map +1 -0
  345. package/build/router.js +94 -57
  346. package/build/router.js.map +1 -0
  347. package/build/routes-native.d.ts +24 -0
  348. package/build/routes-native.d.ts.map +1 -0
  349. package/build/routes-native.js +233 -198
  350. package/build/routes-native.js.map +1 -0
  351. package/build/routes.d.ts +10 -0
  352. package/build/routes.d.ts.map +1 -0
  353. package/build/routes.js +102 -48
  354. package/build/routes.js.map +1 -0
  355. package/build/run-last.d.ts +12 -0
  356. package/build/run-last.d.ts.map +1 -0
  357. package/build/run-last.js +40 -34
  358. package/build/run-last.js.map +1 -0
  359. package/build/serializer.d.ts +10 -0
  360. package/build/serializer.d.ts.map +1 -0
  361. package/build/serializer.js +73 -62
  362. package/build/serializer.js.map +1 -0
  363. package/build/services.d.ts +5 -0
  364. package/build/services.d.ts.map +1 -0
  365. package/build/services.js +30 -20
  366. package/build/services.js.map +1 -0
  367. package/build/session-status-updater.d.ts +21 -0
  368. package/build/session-status-updater.d.ts.map +1 -0
  369. package/build/session-status-updater.js +227 -130
  370. package/build/session-status-updater.js.map +1 -0
  371. package/build/source-maps-loader.js +279 -176
  372. package/build/source-maps-loader.js.map +1 -0
  373. package/build/super-admin/config-reader.d.ts +23 -0
  374. package/build/super-admin/config-reader.d.ts.map +1 -0
  375. package/build/super-admin/config-reader.js +116 -82
  376. package/build/super-admin/config-reader.js.map +1 -0
  377. package/build/super-admin/edit-page/edit-attribute-checkbox.d.ts +3 -0
  378. package/build/super-admin/edit-page/edit-attribute-checkbox.d.ts.map +1 -0
  379. package/build/super-admin/edit-page/edit-attribute-checkbox.js +118 -83
  380. package/build/super-admin/edit-page/edit-attribute-checkbox.js.map +1 -0
  381. package/build/super-admin/edit-page/edit-attribute-content.d.ts +3 -0
  382. package/build/super-admin/edit-page/edit-attribute-content.d.ts.map +1 -0
  383. package/build/super-admin/edit-page/edit-attribute-content.js +79 -55
  384. package/build/super-admin/edit-page/edit-attribute-content.js.map +1 -0
  385. package/build/super-admin/edit-page/edit-attribute-input.d.ts +3 -0
  386. package/build/super-admin/edit-page/edit-attribute-input.d.ts.map +1 -0
  387. package/build/super-admin/edit-page/edit-attribute-input.js +119 -77
  388. package/build/super-admin/edit-page/edit-attribute-input.js.map +1 -0
  389. package/build/super-admin/edit-page/edit-attribute.d.ts +3 -0
  390. package/build/super-admin/edit-page/edit-attribute.d.ts.map +1 -0
  391. package/build/super-admin/edit-page/edit-attribute.js +105 -76
  392. package/build/super-admin/edit-page/edit-attribute.js.map +1 -0
  393. package/build/super-admin/edit-page.d.ts +3 -0
  394. package/build/super-admin/edit-page.d.ts.map +1 -0
  395. package/build/super-admin/edit-page.js +202 -120
  396. package/build/super-admin/edit-page.js.map +1 -0
  397. package/build/super-admin/has-edit-config.d.ts +3 -0
  398. package/build/super-admin/has-edit-config.d.ts.map +1 -0
  399. package/build/super-admin/has-edit-config.js +17 -11
  400. package/build/super-admin/has-edit-config.js.map +1 -0
  401. package/build/super-admin/index-page.d.ts +3 -0
  402. package/build/super-admin/index-page.d.ts.map +1 -0
  403. package/build/super-admin/index-page.js +45 -25
  404. package/build/super-admin/index-page.js.map +1 -0
  405. package/build/super-admin/index.d.ts +3 -0
  406. package/build/super-admin/index.d.ts.map +1 -0
  407. package/build/super-admin/index.js +254 -184
  408. package/build/super-admin/index.js.map +1 -0
  409. package/build/super-admin/layout/header/index.d.ts +3 -0
  410. package/build/super-admin/layout/header/index.d.ts.map +1 -0
  411. package/build/super-admin/layout/header/index.js +154 -155
  412. package/build/super-admin/layout/header/index.js.map +1 -0
  413. package/build/super-admin/layout/index.d.ts +3 -0
  414. package/build/super-admin/layout/index.d.ts.map +1 -0
  415. package/build/super-admin/layout/index.js +183 -160
  416. package/build/super-admin/layout/index.js.map +1 -0
  417. package/build/super-admin/layout/menu/index.d.ts +3 -0
  418. package/build/super-admin/layout/menu/index.d.ts.map +1 -0
  419. package/build/super-admin/layout/menu/index.js +191 -203
  420. package/build/super-admin/layout/menu/index.js.map +1 -0
  421. package/build/super-admin/layout/menu/menu-content.d.ts +3 -0
  422. package/build/super-admin/layout/menu/menu-content.d.ts.map +1 -0
  423. package/build/super-admin/layout/menu/menu-content.js +86 -45
  424. package/build/super-admin/layout/menu/menu-content.js.map +1 -0
  425. package/build/super-admin/layout/menu/menu-item.d.ts +3 -0
  426. package/build/super-admin/layout/menu/menu-item.d.ts.map +1 -0
  427. package/build/super-admin/layout/menu/menu-item.js +104 -83
  428. package/build/super-admin/layout/menu/menu-item.js.map +1 -0
  429. package/build/super-admin/layout/no-access.d.ts +3 -0
  430. package/build/super-admin/layout/no-access.d.ts.map +1 -0
  431. package/build/super-admin/layout/no-access.js +46 -27
  432. package/build/super-admin/layout/no-access.js.map +1 -0
  433. package/build/super-admin/model-class-table.d.ts +3 -0
  434. package/build/super-admin/model-class-table.d.ts.map +1 -0
  435. package/build/super-admin/model-class-table.js +132 -60
  436. package/build/super-admin/model-class-table.js.map +1 -0
  437. package/build/super-admin/models.d.ts +3 -0
  438. package/build/super-admin/models.d.ts.map +1 -0
  439. package/build/super-admin/models.js +43 -7
  440. package/build/super-admin/models.js.map +1 -0
  441. package/build/super-admin/show-nav.d.ts +3 -0
  442. package/build/super-admin/show-nav.d.ts.map +1 -0
  443. package/build/super-admin/show-nav.js +90 -51
  444. package/build/super-admin/show-nav.js.map +1 -0
  445. package/build/super-admin/show-page/belongs-to-attribute-row.d.ts +3 -0
  446. package/build/super-admin/show-page/belongs-to-attribute-row.d.ts.map +1 -0
  447. package/build/super-admin/show-page/belongs-to-attribute-row.js +77 -28
  448. package/build/super-admin/show-page/belongs-to-attribute-row.js.map +1 -0
  449. package/build/super-admin/show-page/index.d.ts +3 -0
  450. package/build/super-admin/show-page/index.d.ts.map +1 -0
  451. package/build/super-admin/show-page/index.js +202 -137
  452. package/build/super-admin/show-page/index.js.map +1 -0
  453. package/build/super-admin/show-reflection-actions.d.ts +3 -0
  454. package/build/super-admin/show-reflection-actions.d.ts.map +1 -0
  455. package/build/super-admin/show-reflection-actions.js +100 -50
  456. package/build/super-admin/show-reflection-actions.js.map +1 -0
  457. package/build/super-admin/show-reflection-link.d.ts +3 -0
  458. package/build/super-admin/show-reflection-link.d.ts.map +1 -0
  459. package/build/super-admin/show-reflection-link.js +101 -47
  460. package/build/super-admin/show-reflection-link.js.map +1 -0
  461. package/build/super-admin/show-reflection-page.d.ts +3 -0
  462. package/build/super-admin/show-reflection-page.d.ts.map +1 -0
  463. package/build/super-admin/show-reflection-page.js +98 -49
  464. package/build/super-admin/show-reflection-page.js.map +1 -0
  465. package/build/table/column-content.d.ts +25 -0
  466. package/build/table/column-content.d.ts.map +1 -0
  467. package/build/table/column-content.js +153 -115
  468. package/build/table/column-content.js.map +1 -0
  469. package/build/table/column-identifier.d.ts +2 -0
  470. package/build/table/column-identifier.d.ts.map +1 -0
  471. package/build/table/column-identifier.js +22 -16
  472. package/build/table/column-identifier.js.map +1 -0
  473. package/build/table/column-visible.d.ts +2 -0
  474. package/build/table/column-visible.d.ts.map +1 -0
  475. package/build/table/column-visible.js +12 -6
  476. package/build/table/column-visible.js.map +1 -0
  477. package/build/table/components/column.d.ts +3 -0
  478. package/build/table/components/column.d.ts.map +1 -0
  479. package/build/table/components/column.js +61 -21
  480. package/build/table/components/column.js.map +1 -0
  481. package/build/table/components/flat-list.d.ts +3 -0
  482. package/build/table/components/flat-list.d.ts.map +1 -0
  483. package/build/table/components/flat-list.js +61 -21
  484. package/build/table/components/flat-list.js.map +1 -0
  485. package/build/table/components/header.d.ts +3 -0
  486. package/build/table/components/header.d.ts.map +1 -0
  487. package/build/table/components/header.js +63 -26
  488. package/build/table/components/header.js.map +1 -0
  489. package/build/table/components/row.d.ts +3 -0
  490. package/build/table/components/row.d.ts.map +1 -0
  491. package/build/table/components/row.js +65 -26
  492. package/build/table/components/row.js.map +1 -0
  493. package/build/table/filters/attribute-element.d.ts +3 -0
  494. package/build/table/filters/attribute-element.d.ts.map +1 -0
  495. package/build/table/filters/attribute-element.js +63 -44
  496. package/build/table/filters/attribute-element.js.map +1 -0
  497. package/build/table/filters/filter-form.d.ts +3 -0
  498. package/build/table/filters/filter-form.d.ts.map +1 -0
  499. package/build/table/filters/filter-form.js +489 -453
  500. package/build/table/filters/filter-form.js.map +1 -0
  501. package/build/table/filters/filter.d.ts +3 -0
  502. package/build/table/filters/filter.d.ts.map +1 -0
  503. package/build/table/filters/filter.js +75 -90
  504. package/build/table/filters/filter.js.map +1 -0
  505. package/build/table/filters/index.d.ts +3 -0
  506. package/build/table/filters/index.d.ts.map +1 -0
  507. package/build/table/filters/index.js +143 -188
  508. package/build/table/filters/index.js.map +1 -0
  509. package/build/table/filters/load-search-modal.d.ts +3 -0
  510. package/build/table/filters/load-search-modal.d.ts.map +1 -0
  511. package/build/table/filters/load-search-modal.js +234 -169
  512. package/build/table/filters/load-search-modal.js.map +1 -0
  513. package/build/table/filters/reflection-element.d.ts +3 -0
  514. package/build/table/filters/reflection-element.d.ts.map +1 -0
  515. package/build/table/filters/reflection-element.js +55 -37
  516. package/build/table/filters/reflection-element.js.map +1 -0
  517. package/build/table/filters/save-search-modal.d.ts +3 -0
  518. package/build/table/filters/save-search-modal.d.ts.map +1 -0
  519. package/build/table/filters/save-search-modal.js +140 -85
  520. package/build/table/filters/save-search-modal.js.map +1 -0
  521. package/build/table/filters/scope-element.d.ts +3 -0
  522. package/build/table/filters/scope-element.d.ts.map +1 -0
  523. package/build/table/filters/scope-element.js +58 -42
  524. package/build/table/filters/scope-element.js.map +1 -0
  525. package/build/table/header-column-content.d.ts +3 -0
  526. package/build/table/header-column-content.d.ts.map +1 -0
  527. package/build/table/header-column-content.js +71 -68
  528. package/build/table/header-column-content.js.map +1 -0
  529. package/build/table/header-column.d.ts +3 -0
  530. package/build/table/header-column.d.ts.map +1 -0
  531. package/build/table/header-column.js +220 -143
  532. package/build/table/header-column.js.map +1 -0
  533. package/build/table/header-select.d.ts +3 -0
  534. package/build/table/header-select.d.ts.map +1 -0
  535. package/build/table/header-select.js +77 -105
  536. package/build/table/header-select.js.map +1 -0
  537. package/build/table/model-callback-args.d.ts +4 -0
  538. package/build/table/model-callback-args.d.ts.map +1 -0
  539. package/build/table/model-callback-args.js +43 -9
  540. package/build/table/model-callback-args.js.map +1 -0
  541. package/build/table/model-column.d.ts +3 -0
  542. package/build/table/model-column.d.ts.map +1 -0
  543. package/build/table/model-column.js +145 -99
  544. package/build/table/model-column.js.map +1 -0
  545. package/build/table/model-row.d.ts +3 -0
  546. package/build/table/model-row.d.ts.map +1 -0
  547. package/build/table/model-row.js +188 -190
  548. package/build/table/model-row.js.map +1 -0
  549. package/build/table/select-calculator.d.ts +2 -0
  550. package/build/table/select-calculator.d.ts.map +1 -0
  551. package/build/table/select-calculator.js +110 -59
  552. package/build/table/select-calculator.js.map +1 -0
  553. package/build/table/settings/column-row.d.ts +3 -0
  554. package/build/table/settings/column-row.d.ts.map +1 -0
  555. package/build/table/settings/column-row.js +188 -95
  556. package/build/table/settings/column-row.js.map +1 -0
  557. package/build/table/settings/download-action.d.ts +3 -0
  558. package/build/table/settings/download-action.d.ts.map +1 -0
  559. package/build/table/settings/download-action.js +75 -85
  560. package/build/table/settings/download-action.js.map +1 -0
  561. package/build/table/settings/index.d.ts +3 -0
  562. package/build/table/settings/index.d.ts.map +1 -0
  563. package/build/table/settings/index.js +103 -95
  564. package/build/table/settings/index.js.map +1 -0
  565. package/build/table/table-settings.d.ts +35 -0
  566. package/build/table/table-settings.d.ts.map +1 -0
  567. package/build/table/table-settings.js +336 -206
  568. package/build/table/table-settings.js.map +1 -0
  569. package/build/table/table.d.ts +3 -0
  570. package/build/table/table.d.ts.map +1 -0
  571. package/build/table/table.js +801 -964
  572. package/build/table/table.js.map +1 -0
  573. package/build/table/use-sorting.d.ts +21 -0
  574. package/build/table/use-sorting.d.ts.map +1 -0
  575. package/build/table/use-sorting.js +59 -31
  576. package/build/table/use-sorting.js.map +1 -0
  577. package/build/table/widths.d.ts +18 -0
  578. package/build/table/widths.d.ts.map +1 -0
  579. package/build/table/widths.js +75 -74
  580. package/build/table/widths.js.map +1 -0
  581. package/build/table/worker-plugins-check-all-checkbox.d.ts +3 -0
  582. package/build/table/worker-plugins-check-all-checkbox.d.ts.map +1 -0
  583. package/build/table/worker-plugins-check-all-checkbox.js +230 -121
  584. package/build/table/worker-plugins-check-all-checkbox.js.map +1 -0
  585. package/build/table/worker-plugins-checkbox.d.ts +3 -0
  586. package/build/table/worker-plugins-checkbox.d.ts.map +1 -0
  587. package/build/table/worker-plugins-checkbox.js +186 -112
  588. package/build/table/worker-plugins-checkbox.js.map +1 -0
  589. package/build/translated-attributes.d.ts +2 -0
  590. package/build/translated-attributes.d.ts.map +1 -0
  591. package/build/translated-attributes.js +13 -8
  592. package/build/translated-attributes.js.map +1 -0
  593. package/build/translated-collections.d.ts +4 -0
  594. package/build/translated-collections.d.ts.map +1 -0
  595. package/build/translated-collections.js +22 -12
  596. package/build/translated-collections.js.map +1 -0
  597. package/build/updated-attribute.d.ts +15 -0
  598. package/build/updated-attribute.d.ts.map +1 -0
  599. package/build/updated-attribute.js +144 -72
  600. package/build/updated-attribute.js.map +1 -0
  601. package/build/url-encode.d.ts +6 -0
  602. package/build/url-encode.d.ts.map +1 -0
  603. package/build/url-encode.js +22 -13
  604. package/build/url-encode.js.map +1 -0
  605. package/build/use-breakpoint.d.ts +3 -0
  606. package/build/use-breakpoint.d.ts.map +1 -0
  607. package/build/use-breakpoint.js +126 -75
  608. package/build/use-breakpoint.js.map +1 -0
  609. package/build/use-can-can.d.ts +8 -0
  610. package/build/use-can-can.d.ts.map +1 -0
  611. package/build/use-can-can.js +107 -52
  612. package/build/use-can-can.js.map +1 -0
  613. package/build/use-collection.d.ts +73 -0
  614. package/build/use-collection.d.ts.map +1 -0
  615. package/build/use-collection.js +366 -215
  616. package/build/use-collection.js.map +1 -0
  617. package/build/use-created-event.d.ts +19 -0
  618. package/build/use-created-event.d.ts.map +1 -0
  619. package/build/use-created-event.js +73 -50
  620. package/build/use-created-event.js.map +1 -0
  621. package/build/use-current-user-context.d.ts +12 -0
  622. package/build/use-current-user-context.d.ts.map +1 -0
  623. package/build/use-current-user-context.js +188 -0
  624. package/build/use-current-user-context.js.map +1 -0
  625. package/build/use-current-user.d.ts +14 -0
  626. package/build/use-current-user.d.ts.map +1 -0
  627. package/build/use-current-user.js +43 -119
  628. package/build/use-current-user.js.map +1 -0
  629. package/build/use-destroyed-event.d.ts +16 -0
  630. package/build/use-destroyed-event.d.ts.map +1 -0
  631. package/build/use-destroyed-event.js +78 -58
  632. package/build/use-destroyed-event.js.map +1 -0
  633. package/build/use-event-emitter.d.ts +9 -0
  634. package/build/use-event-emitter.d.ts.map +1 -0
  635. package/build/use-event-emitter.js +32 -25
  636. package/build/use-event-emitter.js.map +1 -0
  637. package/build/use-event-listener.d.ts +9 -0
  638. package/build/use-event-listener.d.ts.map +1 -0
  639. package/build/use-event-listener.js +36 -21
  640. package/build/use-event-listener.js.map +1 -0
  641. package/build/use-input.d.ts +31 -0
  642. package/build/use-input.d.ts.map +1 -0
  643. package/build/use-input.js +166 -134
  644. package/build/use-input.js.map +1 -0
  645. package/build/use-model-event.d.ts +17 -0
  646. package/build/use-model-event.d.ts.map +1 -0
  647. package/build/use-model-event.js +79 -58
  648. package/build/use-model-event.js.map +1 -0
  649. package/build/use-model.d.ts +30 -0
  650. package/build/use-model.d.ts.map +1 -0
  651. package/build/use-model.js +259 -159
  652. package/build/use-model.js.map +1 -0
  653. package/build/use-resize-observer.d.ts +8 -0
  654. package/build/use-resize-observer.d.ts.map +1 -0
  655. package/build/use-resize-observer.js +35 -22
  656. package/build/use-resize-observer.js.map +1 -0
  657. package/build/use-router.d.ts +8 -0
  658. package/build/use-router.d.ts.map +1 -0
  659. package/build/use-router.js +133 -100
  660. package/build/use-router.js.map +1 -0
  661. package/build/use-screen-layout.d.ts +3 -0
  662. package/build/use-screen-layout.d.ts.map +1 -0
  663. package/build/use-screen-layout.js +46 -37
  664. package/build/use-screen-layout.js.map +1 -0
  665. package/build/use-styles.d.ts +2 -0
  666. package/build/use-styles.d.ts.map +1 -0
  667. package/build/use-styles.js +99 -47
  668. package/build/use-styles.js.map +1 -0
  669. package/build/use-updated-event.d.ts +16 -0
  670. package/build/use-updated-event.d.ts.map +1 -0
  671. package/build/use-updated-event.js +79 -58
  672. package/build/use-updated-event.js.map +1 -0
  673. package/build/use-validation-errors.d.ts +7 -0
  674. package/build/use-validation-errors.d.ts.map +1 -0
  675. package/build/use-validation-errors.js +35 -29
  676. package/build/use-validation-errors.js.map +1 -0
  677. package/build/utils/button.d.ts +3 -0
  678. package/build/utils/button.d.ts.map +1 -0
  679. package/build/utils/button.js +143 -123
  680. package/build/utils/button.js.map +1 -0
  681. package/build/utils/card.d.ts +3 -0
  682. package/build/utils/card.d.ts.map +1 -0
  683. package/build/utils/card.js +107 -55
  684. package/build/utils/card.js.map +1 -0
  685. package/build/utils/checkbox.d.ts +3 -0
  686. package/build/utils/checkbox.d.ts.map +1 -0
  687. package/build/utils/checkbox.js +113 -77
  688. package/build/utils/checkbox.js.map +1 -0
  689. package/build/utils/checkboxes.d.ts +3 -0
  690. package/build/utils/checkboxes.d.ts.map +1 -0
  691. package/build/utils/checkboxes.js +184 -159
  692. package/build/utils/checkboxes.js.map +1 -0
  693. package/build/utils/default-style.d.ts +7 -0
  694. package/build/utils/default-style.d.ts.map +1 -0
  695. package/build/utils/default-style.js +129 -62
  696. package/build/utils/default-style.js.map +1 -0
  697. package/build/utils/header.d.ts +3 -0
  698. package/build/utils/header.d.ts.map +1 -0
  699. package/build/utils/header.js +37 -19
  700. package/build/utils/header.js.map +1 -0
  701. package/build/utils/icon.d.ts +3 -0
  702. package/build/utils/icon.d.ts.map +1 -0
  703. package/build/utils/icon.js +158 -96
  704. package/build/utils/icon.js.map +1 -0
  705. package/build/utils/invalid-feedback.d.ts +3 -0
  706. package/build/utils/invalid-feedback.d.ts.map +1 -0
  707. package/build/utils/invalid-feedback.js +43 -19
  708. package/build/utils/invalid-feedback.js.map +1 -0
  709. package/build/utils/modal.d.ts +3 -0
  710. package/build/utils/modal.d.ts.map +1 -0
  711. package/build/utils/modal.js +118 -61
  712. package/build/utils/modal.js.map +1 -0
  713. package/build/utils/text.d.ts +3 -0
  714. package/build/utils/text.d.ts.map +1 -0
  715. package/build/utils/text.js +37 -20
  716. package/build/utils/text.js.map +1 -0
  717. package/build/validation-error.d.ts +18 -0
  718. package/build/validation-error.d.ts.map +1 -0
  719. package/build/validation-error.js +94 -27
  720. package/build/validation-error.js.map +1 -0
  721. package/build/validation-errors.d.ts +58 -0
  722. package/build/validation-errors.d.ts.map +1 -0
  723. package/build/validation-errors.js +164 -94
  724. package/build/validation-errors.js.map +1 -0
  725. package/build/with-api-maker.d.ts +3 -0
  726. package/build/with-api-maker.d.ts.map +1 -0
  727. package/build/with-api-maker.js +73 -27
  728. package/build/with-api-maker.js.map +1 -0
  729. package/build/with-collection.d.ts +3 -0
  730. package/build/with-collection.d.ts.map +1 -0
  731. package/build/with-collection.js +64 -13
  732. package/build/with-collection.js.map +1 -0
  733. package/build/with-current-user.d.ts +3 -0
  734. package/build/with-current-user.d.ts.map +1 -0
  735. package/build/with-current-user.js +23 -9
  736. package/build/with-current-user.js.map +1 -0
  737. package/build/with-model.d.ts +3 -0
  738. package/build/with-model.d.ts.map +1 -0
  739. package/build/with-model.js +28 -14
  740. package/build/with-model.js.map +1 -0
  741. package/build/with-router.d.ts +3 -0
  742. package/build/with-router.d.ts.map +1 -0
  743. package/build/with-router.js +35 -21
  744. package/build/with-router.js.map +1 -0
  745. package/package.json +14 -8
  746. package/.eslintrc.js +0 -357
  747. package/android/build.gradle +0 -43
  748. package/android/src/main/AndroidManifest.xml +0 -2
  749. package/android/src/main/java/expo/modules/api_maker/ApiMakerModule.kt +0 -50
  750. package/android/src/main/java/expo/modules/api_maker/ApiMakerView.kt +0 -30
  751. package/expo-module.config.json +0 -17
  752. package/ios/ApiMaker.podspec +0 -29
  753. package/ios/ApiMakerModule.swift +0 -48
  754. package/ios/ApiMakerView.swift +0 -38
  755. package/src/api.js +0 -109
  756. package/src/attribute-not-loaded-error.js +0 -1
  757. package/src/base-component.jsx +0 -5
  758. package/src/base-error.js +0 -38
  759. package/src/base-model/attribute.js +0 -33
  760. package/src/base-model/column.js +0 -13
  761. package/src/base-model/reflection.js +0 -15
  762. package/src/base-model/scope.js +0 -12
  763. package/src/base-model.js +0 -1001
  764. package/src/bootstrap/attribute-row.jsx +0 -134
  765. package/src/bootstrap/attribute-rows.jsx +0 -27
  766. package/src/bootstrap/card.jsx +0 -149
  767. package/src/bootstrap/checkbox.jsx +0 -86
  768. package/src/bootstrap/checkboxes.jsx +0 -185
  769. package/src/bootstrap/index.js +0 -0
  770. package/src/bootstrap/input.jsx +0 -173
  771. package/src/bootstrap/invalid-feedback.jsx +0 -31
  772. package/src/bootstrap/paginate.jsx +0 -187
  773. package/src/bootstrap/radio-buttons.jsx +0 -87
  774. package/src/bootstrap/select.jsx +0 -110
  775. package/src/bootstrap/sort-link.jsx +0 -106
  776. package/src/cable-connection-pool.js +0 -127
  777. package/src/cable-subscription-pool.js +0 -189
  778. package/src/cable-subscription.js +0 -23
  779. package/src/cache-key-generator.js +0 -100
  780. package/src/can-can.js +0 -158
  781. package/src/channels-consumer.js +0 -10
  782. package/src/collection-loader.jsx +0 -60
  783. package/src/collection.js +0 -346
  784. package/src/command-submit-data.js +0 -103
  785. package/src/commands-pool.js +0 -212
  786. package/src/compose.js +0 -11
  787. package/src/config.js +0 -71
  788. package/src/custom-error.js +0 -7
  789. package/src/data-set-to-attributes.js +0 -13
  790. package/src/deserializer.js +0 -60
  791. package/src/destroy-error.js +0 -7
  792. package/src/devise.js +0 -151
  793. package/src/draggable-sort/controller.js +0 -137
  794. package/src/draggable-sort/index.jsx +0 -107
  795. package/src/draggable-sort/item.jsx +0 -171
  796. package/src/error-logger.js +0 -111
  797. package/src/error-messages.js +0 -15
  798. package/src/event-connection.jsx +0 -37
  799. package/src/event-emitter-listener.jsx +0 -13
  800. package/src/event-model-class.jsx +0 -28
  801. package/src/events.js +0 -7
  802. package/src/form.jsx +0 -110
  803. package/src/history-expo.js +0 -23
  804. package/src/history-react-native.js +0 -25
  805. package/src/history.js +0 -3
  806. package/src/index.js +0 -3
  807. package/src/inputs/attachment.jsx +0 -108
  808. package/src/inputs/auto-submit.js +0 -37
  809. package/src/inputs/checkbox.jsx +0 -125
  810. package/src/inputs/checkboxes.jsx +0 -116
  811. package/src/inputs/id-for-component.js +0 -15
  812. package/src/inputs/input-wrapper.jsx +0 -16
  813. package/src/inputs/input.jsx +0 -260
  814. package/src/inputs/money.jsx +0 -179
  815. package/src/inputs/name-for-component.js +0 -15
  816. package/src/inputs/select.jsx +0 -104
  817. package/src/instance-of-class-name.js +0 -29
  818. package/src/is-expo.js +0 -18
  819. package/src/key-value-store.js +0 -68
  820. package/src/link.jsx +0 -77
  821. package/src/logger.js +0 -38
  822. package/src/merge-styles.js +0 -15
  823. package/src/modal.jsx +0 -37
  824. package/src/model-class-require.js +0 -17
  825. package/src/model-events.js +0 -39
  826. package/src/model-name.js +0 -33
  827. package/src/model-prop-type.js +0 -124
  828. package/src/model-recipes-loader.js +0 -28
  829. package/src/model-recipes-model-loader.js +0 -350
  830. package/src/models-response-reader.js +0 -48
  831. package/src/models.js +0 -7
  832. package/src/models.js.erb +0 -19
  833. package/src/money-formatter.js +0 -100
  834. package/src/not-loaded-error.js +0 -1
  835. package/src/params.js +0 -66
  836. package/src/preloaded.js +0 -43
  837. package/src/resize-observer.jsx +0 -10
  838. package/src/rest-props-validator.js +0 -9
  839. package/src/result.js +0 -13
  840. package/src/router/route.jsx +0 -246
  841. package/src/router/switch.jsx +0 -76
  842. package/src/router.jsx +0 -47
  843. package/src/routes-native.js +0 -173
  844. package/src/routes.js +0 -58
  845. package/src/run-last.js +0 -39
  846. package/src/serializer.js +0 -76
  847. package/src/services.js +0 -23
  848. package/src/session-status-updater.js +0 -172
  849. package/src/source-maps-loader.js +0 -203
  850. package/src/super-admin/config-reader.jsx +0 -93
  851. package/src/super-admin/edit-page/edit-attribute-checkbox.jsx +0 -84
  852. package/src/super-admin/edit-page/edit-attribute-content.jsx +0 -57
  853. package/src/super-admin/edit-page/edit-attribute-input.jsx +0 -79
  854. package/src/super-admin/edit-page/edit-attribute.jsx +0 -84
  855. package/src/super-admin/edit-page.jsx +0 -117
  856. package/src/super-admin/has-edit-config.js +0 -15
  857. package/src/super-admin/index-page.jsx +0 -23
  858. package/src/super-admin/index.jsx +0 -219
  859. package/src/super-admin/layout/header/index.jsx +0 -144
  860. package/src/super-admin/layout/header/style.scss +0 -45
  861. package/src/super-admin/layout/index.jsx +0 -154
  862. package/src/super-admin/layout/menu/index.jsx +0 -173
  863. package/src/super-admin/layout/menu/menu-content.jsx +0 -43
  864. package/src/super-admin/layout/menu/menu-item.jsx +0 -70
  865. package/src/super-admin/layout/menu/style.scss +0 -11
  866. package/src/super-admin/layout/no-access.jsx +0 -26
  867. package/src/super-admin/model-class-table.jsx +0 -66
  868. package/src/super-admin/models.js +0 -11
  869. package/src/super-admin/show-nav.jsx +0 -45
  870. package/src/super-admin/show-page/belongs-to-attribute-row.jsx +0 -30
  871. package/src/super-admin/show-page/index.jsx +0 -141
  872. package/src/super-admin/show-reflection-actions.jsx +0 -55
  873. package/src/super-admin/show-reflection-link.jsx +0 -40
  874. package/src/super-admin/show-reflection-page.jsx +0 -50
  875. package/src/super-admin/stylesheets/variables.scss +0 -11
  876. package/src/table/column-content.jsx +0 -122
  877. package/src/table/column-identifier.js +0 -23
  878. package/src/table/column-visible.js +0 -7
  879. package/src/table/components/column.jsx +0 -19
  880. package/src/table/components/flat-list.jsx +0 -19
  881. package/src/table/components/header.jsx +0 -21
  882. package/src/table/components/row.jsx +0 -23
  883. package/src/table/filters/attribute-element.jsx +0 -47
  884. package/src/table/filters/filter-form.jsx +0 -448
  885. package/src/table/filters/filter.jsx +0 -74
  886. package/src/table/filters/index.jsx +0 -171
  887. package/src/table/filters/load-search-modal.jsx +0 -157
  888. package/src/table/filters/reflection-element.jsx +0 -38
  889. package/src/table/filters/save-search-modal.jsx +0 -74
  890. package/src/table/filters/scope-element.jsx +0 -44
  891. package/src/table/header-column-content.jsx +0 -55
  892. package/src/table/header-column.jsx +0 -129
  893. package/src/table/header-select.jsx +0 -78
  894. package/src/table/model-callback-args.js +0 -10
  895. package/src/table/model-column.jsx +0 -86
  896. package/src/table/model-row.jsx +0 -140
  897. package/src/table/select-calculator.js +0 -65
  898. package/src/table/settings/column-row.jsx +0 -93
  899. package/src/table/settings/download-action.jsx +0 -73
  900. package/src/table/settings/index.jsx +0 -66
  901. package/src/table/table-settings.js +0 -262
  902. package/src/table/table.jsx +0 -957
  903. package/src/table/use-sorting.js +0 -35
  904. package/src/table/variables.scss +0 -11
  905. package/src/table/widths.jsx +0 -87
  906. package/src/table/worker-plugins-check-all-checkbox.jsx +0 -112
  907. package/src/table/worker-plugins-checkbox.jsx +0 -104
  908. package/src/translated-attributes.js +0 -11
  909. package/src/translated-collections-data.js.erb +0 -5
  910. package/src/translated-collections.js +0 -13
  911. package/src/updated-attribute.jsx +0 -93
  912. package/src/url-encode.js +0 -18
  913. package/src/use-breakpoint.js +0 -100
  914. package/src/use-can-can.js +0 -55
  915. package/src/use-collection.js +0 -280
  916. package/src/use-created-event.js +0 -55
  917. package/src/use-current-user.js +0 -133
  918. package/src/use-destroyed-event.js +0 -60
  919. package/src/use-event-emitter.js +0 -25
  920. package/src/use-event-listener.js +0 -23
  921. package/src/use-input.js +0 -159
  922. package/src/use-model-event.js +0 -60
  923. package/src/use-model.js +0 -189
  924. package/src/use-resize-observer.js +0 -24
  925. package/src/use-router.jsx +0 -128
  926. package/src/use-screen-layout.js +0 -49
  927. package/src/use-styles.js +0 -66
  928. package/src/use-updated-event.js +0 -60
  929. package/src/use-validation-errors.js +0 -33
  930. package/src/utils/button.jsx +0 -127
  931. package/src/utils/card.jsx +0 -58
  932. package/src/utils/checkbox.jsx +0 -73
  933. package/src/utils/checkboxes.jsx +0 -157
  934. package/src/utils/default-style.jsx +0 -80
  935. package/src/utils/header.jsx +0 -14
  936. package/src/utils/icon.jsx +0 -81
  937. package/src/utils/invalid-feedback.jsx +0 -20
  938. package/src/utils/modal.jsx +0 -64
  939. package/src/utils/text.jsx +0 -15
  940. package/src/validation-error.js +0 -35
  941. package/src/validation-errors.js +0 -121
  942. package/src/with-api-maker.jsx +0 -31
  943. package/src/with-collection.jsx +0 -17
  944. package/src/with-current-user.jsx +0 -10
  945. package/src/with-model.jsx +0 -16
  946. package/src/with-router.jsx +0 -11
@@ -1,973 +1,810 @@
1
- function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
- import { digg, digs } from "diggerize";
3
- import React, { createContext, useContext, useMemo, useRef } from "react";
4
- import { Animated, Platform, Pressable, View } from "react-native";
5
- import BaseComponent from "../base-component";
6
- import Card from "../bootstrap/card";
7
- import classNames from "classnames";
8
- import Collection from "../collection";
9
- import columnVisible from "./column-visible";
10
- import debounce from "debounce";
11
- import DraggableSort from "../draggable-sort/index";
12
- import EventEmitter from "events";
13
- import Filters from "./filters";
14
- import FlatList from "./components/flat-list";
15
- import { Form } from "../form";
16
- import Header from "./components/header";
17
- import HeaderColumn from "./header-column";
18
- import HeaderSelect from "./header-select";
19
- import Icon from "../utils/icon";
20
- import { incorporate } from "incorporator";
21
- import * as inflection from "inflection";
22
- import memo from "set-state-compare/src/memo";
23
- import modelClassRequire from "../model-class-require";
24
- import ModelRow from "./model-row";
25
- import Paginate from "../bootstrap/paginate";
26
- import Params from "../params";
27
- import PropTypes from "prop-types";
28
- import Row from "./components/row";
29
- import selectCalculator from "./select-calculator";
30
- import Select from "../inputs/select";
31
- import Settings from "./settings/index";
32
- import { shapeComponent } from "set-state-compare/src/shape-component";
33
- import TableSettings from "./table-settings";
34
- import Text from "../utils/text";
35
- import uniqunize from "uniqunize";
36
- import useBreakpoint from "../use-breakpoint";
37
- import useCollection from "../use-collection";
38
- import useI18n from "i18n-on-steroids/src/use-i18n";
39
- import useEventEmitter from "../use-event-emitter";
40
- import useModelEvent from "../use-model-event";
41
- import useQueryParams from "on-location-changed/build/use-query-params";
42
- import Widths from "./widths";
43
- const paginationOptions = [30, 60, 90, ["All", "all"]];
44
- const WorkerPluginsCheckAllCheckbox = /*#__PURE__*/React.lazy(() => import("./worker-plugins-check-all-checkbox"));
45
- const TableContext = /*#__PURE__*/createContext();
46
- const ListHeaderComponent = memo(shapeComponent(class ListHeaderComponent extends BaseComponent {
47
- setup() {
48
- this.useStates({
49
- lastUpdate: new Date()
50
- });
51
- }
52
- render() {
53
- const {
54
- mdUp
55
- } = useBreakpoint();
56
- const tableContextValue = useContext(TableContext);
57
- const table = tableContextValue.table;
58
- const {
59
- collection,
60
- events,
61
- queryWithoutPagination,
62
- t
63
- } = table.tt;
64
- const {
65
- query
66
- } = digs(collection, "query");
67
- useEventEmitter(events, "columnVisibilityUpdated", this.tt.onColumnVisibilityUpdated);
68
- return /*#__PURE__*/React.createElement(Row, {
69
- dataSet: {
70
- class: "api-maker/table/header-row"
71
- },
72
- style: table.styleForRowHeader()
73
- }, table.p.workplace && table.s.currentWorkplace && /*#__PURE__*/React.createElement(Header, {
74
- style: table.styleForHeader({
75
- style: {
76
- width: mdUp ? 41 : undefined
77
- }
78
- })
79
- }, /*#__PURE__*/React.createElement(WorkerPluginsCheckAllCheckbox, {
80
- currentWorkplace: table.s.currentWorkplace,
81
- query: queryWithoutPagination,
82
- style: this.workerPlguinsCheckAllCheckboxStyle ||= {
83
- marginHorizontal: "auto"
84
- }
85
- }), !mdUp && /*#__PURE__*/React.createElement(Text, {
86
- style: this.selectAllFoundTextStyle ||= {
87
- marginLeft: 3
88
- }
89
- }, t(".select_all_found", {
90
- defaultValue: "Select all found"
91
- }))), !mdUp && /*#__PURE__*/React.createElement(Header, {
92
- style: table.styleForHeader({
93
- style: {}
94
- })
95
- }, /*#__PURE__*/React.createElement(HeaderSelect, {
96
- preparedColumns: table.s.preparedColumns,
97
- query: query,
98
- table: table
99
- })), mdUp && /*#__PURE__*/React.createElement(React.Fragment, null, table.headersContentFromColumns(), /*#__PURE__*/React.createElement(Header, {
100
- style: table.styleForHeader({
101
- style: {},
102
- type: "actions"
103
- })
104
- })));
105
- }
106
- onColumnVisibilityUpdated = () => this.setState({
107
- lastUpdate: new Date()
108
- });
109
- }));
110
- export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
111
- static defaultProps = {
112
- card: true,
113
- currentUser: null,
114
- destroyEnabled: true,
115
- filterCard: true,
116
- filterSubmitButton: true,
117
- noRecordsAvailableContent: undefined,
118
- noRecordsFoundContent: undefined,
119
- preloads: [],
120
- select: {},
121
- styleUI: true,
122
- workplace: false
123
- };
124
- static propTypes = {
125
- abilities: PropTypes.object,
126
- actionsContent: PropTypes.func,
127
- appHistory: PropTypes.object,
128
- card: PropTypes.bool.isRequired,
129
- className: PropTypes.string,
130
- collection: PropTypes.instanceOf(Collection),
131
- columns: PropTypes.oneOfType([PropTypes.array, PropTypes.func]),
132
- controls: PropTypes.func,
133
- currentUser: PropTypes.object,
134
- defaultDateFormatName: PropTypes.string,
135
- defaultDateTimeFormatName: PropTypes.string,
136
- defaultParams: PropTypes.object,
137
- destroyEnabled: PropTypes.bool.isRequired,
138
- destroyMessage: PropTypes.string,
139
- editModelPath: PropTypes.func,
140
- filterCard: PropTypes.bool.isRequired,
141
- filterContent: PropTypes.func,
142
- filterSubmitLabel: PropTypes.any,
143
- groupBy: PropTypes.array,
144
- header: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
145
- identifier: PropTypes.string,
146
- modelClass: PropTypes.func.isRequired,
147
- noRecordsAvailableContent: PropTypes.func,
148
- noRecordsFoundContent: PropTypes.func,
149
- onModelsLoaded: PropTypes.func,
150
- paginateContent: PropTypes.func,
151
- paginationComponent: PropTypes.func,
152
- preloads: PropTypes.array.isRequired,
153
- queryMethod: PropTypes.func,
154
- queryName: PropTypes.string,
155
- select: PropTypes.object,
156
- selectColumns: PropTypes.object,
157
- styles: PropTypes.object,
158
- styleUI: PropTypes.bool.isRequired,
159
- viewModelPath: PropTypes.func,
160
- workplace: PropTypes.bool.isRequired
161
- };
162
- draggableSortEvents = new EventEmitter();
163
- events = new EventEmitter();
164
- tableSettings = null;
165
- setup() {
166
- const {
167
- t
168
- } = useI18n({
169
- namespace: "js.api_maker.table"
170
- });
171
- const {
172
- name: breakpoint,
173
- mdUp
174
- } = useBreakpoint();
175
- const queryParams = useQueryParams();
176
- this.setInstance({
177
- breakpoint,
178
- filterFormRef: useRef(),
179
- mdUp,
180
- t
181
- });
182
- const collectionKey = digg(this.p.modelClass.modelClassData(), "collectionKey");
183
- let queryName = this.props.queryName;
184
- if (!queryName) queryName = collectionKey;
185
- const querySName = `${queryName}_s`;
186
- this.useStates({
187
- columns: () => this.columnsAsArray(),
188
- currentWorkplace: undefined,
189
- currentWorkplaceCount: null,
190
- filterForm: null,
191
- columnsToShow: null,
192
- draggedColumn: null,
193
- identifier: () => this.props.identifier || `${collectionKey}-default`,
194
- lastUpdate: () => new Date(),
195
- preload: undefined,
196
- preparedColumns: undefined,
197
- queryName,
198
- queryQName: () => `${queryName}_q`,
199
- queryPageName: () => `${queryName}_page`,
200
- querySName,
201
- resizing: false,
202
- showFilters: () => Boolean(queryParams[querySName]),
203
- showSettings: false,
204
- tableSetting: undefined,
205
- tableSettingLoaded: false,
206
- tableSettingFullCacheKey: undefined,
207
- width: undefined,
208
- widths: null
209
- });
210
- this.tableContextValue = useMemo(() => ({
211
- cacheKey: this.s.tableSettingFullCacheKey,
212
- lastUpdate: this.s.lastUpdate,
213
- resizing: this.s.resizing,
214
- table: this
215
- }), [this.s.lastUpdate, this.s.resizing, this.s.tableSettingFullCacheKey]);
216
- useMemo(() => {
217
- if (this.props.workplace) {
218
- this.loadCurrentWorkplace().then(() => {
219
- this.loadCurrentWorkplaceCount();
220
- });
221
- }
222
- }, [this.p.currentUser?.id()]);
223
- useMemo(() => {
224
- if (!this.tt.tableSettings && this.s.width) {
225
- this.loadTableSetting();
226
- }
227
- }, [this.p.currentUser?.id(), this.s.width]);
228
- useModelEvent(this.s.currentWorkplace, "workplace_links_created", this.tt.onLinksCreated);
229
- useModelEvent(this.s.currentWorkplace, "workplace_links_destroyed", this.tt.onLinksDestroyed);
230
- let collectionReady = true;
231
- let select;
232
- if (!this.s.preparedColumns) {
233
- collectionReady = false;
234
- }
235
- if (collectionReady) {
236
- select = selectCalculator({
237
- table: this
238
- });
239
- }
240
- this.collection = useCollection({
241
- abilities: this.abilitiesToLoad(),
242
- defaultParams: this.props.defaultParams,
243
- collection: this.props.collection,
244
- groupBy: this.props.groupBy,
245
- ifCondition: collectionReady,
246
- modelClass: this.props.modelClass,
247
- onModelsLoaded: this.props.onModelsLoaded,
248
- noRecordsAvailableContent: this.props.noRecordsAvailableContent,
249
- noRecordsFoundContent: this.props.noRecordsFoundContent,
250
- pagination: true,
251
- preloads: this.state.preload,
252
- queryMethod: this.props.queryMethod,
253
- queryName,
254
- select,
255
- selectColumns: this.props.selectColumns
256
- });
257
- this.queryWithoutPagination = useMemo(() => this.collection?.query?.clone()?.except("page"), [this.collection.query]);
258
- useEventEmitter(this.tt.draggableSortEvents, "onDragStart", this.tt.onDragStart);
259
- useEventEmitter(this.tt.draggableSortEvents, "onDragEndAnimation", this.tt.onDragEndAnimation);
260
- useEventEmitter(this.tt.events, "columnVisibilityUpdated", this.tt.onColumnVisibilityUpdated);
261
- }
262
- onColumnVisibilityUpdated = () => this.setState({
263
- columnsToShow: this.getColumnsToShow(this.s.columns),
264
- lastUpdate: new Date()
265
- });
266
- onDragStart = ({
267
- item
268
- }) => item.animatedZIndex.setValue(9999);
269
- onDragEndAnimation = ({
270
- item
271
- }) => item.animatedZIndex.setValue(0);
272
- async loadCurrentWorkplace() {
273
- const Workplace = modelClassRequire("Workplace");
274
- const result = await Workplace.current();
275
- const currentWorkplace = digg(result, "current", 0);
276
- this.setState({
277
- currentWorkplace
278
- });
279
- }
280
- async loadCurrentWorkplaceCount() {
281
- const WorkplaceLink = modelClassRequire("WorkplaceLink");
282
- const currentWorkplaceCount = await WorkplaceLink.ransack({
283
- resource_type_eq: this.p.modelClass.modelClassData().name,
284
- workplace_id_eq: this.s.currentWorkplace.id()
285
- }).count();
286
- this.setState({
287
- currentWorkplaceCount
288
- });
289
- }
290
- getColumnsToShow(columns) {
291
- return columns.filter(({
292
- column,
293
- tableSettingColumn
294
- }) => columnVisible(column, tableSettingColumn)).sort((a, b) => a.tableSettingColumn.position() - b.tableSettingColumn.position());
295
- }
296
- async loadTableSetting() {
297
- this.tableSettings = new TableSettings({
298
- table: this
299
- });
300
- const tableSetting = await this.tableSettings.loadExistingOrCreateTableSettings();
301
- const {
302
- columns,
303
- preload
304
- } = this.tableSettings.preparedColumns(tableSetting);
305
- const {
306
- width
307
- } = this.s;
308
- const widths = new Widths({
309
- columns,
310
- table: this,
311
- width
312
- });
313
- const columnsToShow = this.getColumnsToShow(columns);
314
- this.setState({
315
- columns,
316
- columnsToShow,
317
- preparedColumns: columns,
318
- preload: this.mergedPreloads(preload),
319
- tableSetting,
320
- tableSettingLoaded: true,
321
- tableSettingFullCacheKey: tableSetting.fullCacheKey(),
322
- widths
323
- });
324
- }
325
- updateSettingsFullCacheKey = () => this.setState({
326
- tableSettingFullCacheKey: this.state.tableSetting.fullCacheKey()
327
- });
328
- columnsAsArray = () => {
329
- if (typeof this.props.columns == "function") {
330
- return this.props.columns();
331
- }
332
- return this.props.columns;
333
- };
334
- mergedPreloads(preload) {
335
- const {
336
- preloads
337
- } = this.props;
338
- let mergedPreloads = [];
339
- if (preloads) mergedPreloads = mergedPreloads.concat(preloads);
340
- if (preload) mergedPreloads = mergedPreloads.concat(preload);
341
- return uniqunize(mergedPreloads);
342
- }
343
- render() {
344
- const {
345
- modelClass,
346
- noRecordsAvailableContent,
347
- noRecordsFoundContent
348
- } = this.p;
349
- const {
350
- collection,
351
- currentUser
352
- } = this.props;
353
- const {
354
- queryName,
355
- querySName,
356
- showFilters
357
- } = this.s;
358
- const {
359
- models,
360
- overallCount,
361
- qParams,
362
- query,
363
- result,
364
- showNoRecordsAvailableContent,
365
- showNoRecordsFoundContent
366
- } = digs(this.collection, "models", "overallCount", "qParams", "query", "result", "showNoRecordsAvailableContent", "showNoRecordsFoundContent");
367
- if (collection && collection.args.modelClass.modelClassData().name != modelClass.modelClassData().name) {
368
- throw new Error(`Model class from collection '${collection.args.modelClass.modelClassData().name}' ` + `didn't match model class on table: '${modelClass.modelClassData().name}'`);
369
- }
370
- return /*#__PURE__*/React.createElement(View, {
371
- dataSet: {
372
- class: this.className()
373
- },
374
- onLayout: this.tt.onContainerLayout,
375
- style: this.props.styles?.container
376
- }, showNoRecordsAvailableContent && /*#__PURE__*/React.createElement("div", {
377
- className: "live-table--no-records-available-content"
378
- }, noRecordsAvailableContent({
379
- models,
380
- qParams,
381
- overallCount
382
- })), showNoRecordsFoundContent && /*#__PURE__*/React.createElement("div", {
383
- className: "live-table--no-records-found-content"
384
- }, noRecordsFoundContent({
385
- models,
386
- qParams,
387
- overallCount
388
- })), showFilters && /*#__PURE__*/React.createElement(Filters, {
389
- currentUser: currentUser,
390
- modelClass: modelClass,
391
- queryName: queryName,
392
- querySName: querySName
393
- }), qParams && query && result && models && !showNoRecordsAvailableContent && !showNoRecordsFoundContent && this.cardOrTable());
394
- }
395
- abilitiesToLoad() {
396
- const abilitiesToLoad = {};
397
- const {
398
- abilities,
399
- modelClass
400
- } = this.props;
401
- const ownAbilities = [];
402
- if (this.props.destroyEnabled) ownAbilities.push("destroy");
403
- if (this.props.editModelPath) ownAbilities.push("edit");
404
- if (this.props.viewModelPath) ownAbilities.push("show");
405
- if (ownAbilities.length > 0) {
406
- const modelClassName = digg(modelClass.modelClassData(), "name");
407
- abilitiesToLoad[modelClassName] = ownAbilities;
408
- }
409
- if (abilities) {
410
- for (const modelName in abilities) {
411
- if (!(modelName in abilitiesToLoad)) {
412
- abilitiesToLoad[modelName] = [];
413
- }
414
- for (const ability of abilities[modelName]) {
415
- abilitiesToLoad[modelName].push(ability);
416
- }
417
- }
418
- }
419
- return abilitiesToLoad;
420
- }
421
- cardOrTable() {
422
- const {
423
- abilities,
424
- actionsContent,
425
- appHistory,
426
- card,
427
- className,
428
- collection,
429
- columns,
430
- controls,
431
- currentUser,
432
- defaultDateFormatName,
433
- defaultDateTimeFormatName,
434
- defaultParams,
435
- destroyEnabled,
436
- destroyMessage,
437
- editModelPath,
438
- filterCard,
439
- filterContent,
440
- filterSubmitButton,
441
- filterSubmitLabel,
442
- groupBy,
443
- header,
444
- identifier,
445
- modelClass,
446
- noRecordsAvailableContent,
447
- noRecordsFoundContent,
448
- onModelsLoaded,
449
- paginateContent,
450
- paginationComponent,
451
- preloads,
452
- queryMethod,
453
- queryName,
454
- select,
455
- selectColumns,
456
- styleUI,
457
- viewModelPath,
458
- workplace,
459
- ...restProps
460
- } = this.props;
461
- const {
462
- models,
463
- qParams,
464
- query,
465
- result
466
- } = digs(this.collection, "models", "qParams", "query", "result");
467
- let headerContent, PaginationComponent;
468
- if (typeof header == "function") {
469
- headerContent = header({
470
- models,
471
- qParams,
472
- query,
473
- result
474
- });
475
- } else if (header) {
476
- headerContent = header;
477
- } else {
478
- headerContent = modelClass.modelName().human({
479
- count: 2
480
- });
481
- }
482
- if (!paginateContent) {
483
- if (paginationComponent) {
484
- PaginationComponent = paginationComponent;
485
- } else {
486
- PaginationComponent = Paginate;
487
- }
488
- }
489
- const flatListStyle = {
490
- overflowX: "auto"
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
491
8
  };
492
- if (styleUI) {
493
- flatListStyle.border = "1px solid #dbdbdb";
494
- flatListStyle.borderRadius = 5;
495
- }
496
- const flatList = /*#__PURE__*/React.createElement(TableContext.Provider, {
497
- value: this.tt.tableContextValue
498
- }, /*#__PURE__*/React.createElement(FlatList, _extends({
499
- data: models,
500
- dataSet: {
501
- class: classNames("api-maker--table", className),
502
- cacheKey: this.s.tableSettingFullCacheKey,
503
- lastUpdate: this.s.lastUpdate
504
- },
505
- extraData: this.s.lastUpdate,
506
- keyExtractor: this.tt.keyExtrator,
507
- ListHeaderComponent: ListHeaderComponent,
508
- renderItem: this.tt.renderItem,
509
- showsHorizontalScrollIndicator: true,
510
- style: flatListStyle
511
- }, restProps)));
512
- return /*#__PURE__*/React.createElement(React.Fragment, null, filterContent && filterCard && /*#__PURE__*/React.createElement(Card, {
513
- className: "live-table--filter-card mb-4"
514
- }, this.filterForm()), filterContent && !filterCard && this.filterForm(), card && /*#__PURE__*/React.createElement(Card, _extends({
515
- className: classNames("live-table--table-card", "mb-4", className),
516
- controls: this.tableControls(),
517
- header: headerContent,
518
- footer: this.tableFooter()
519
- }, restProps), flatList), !card && flatList, result && PaginationComponent && /*#__PURE__*/React.createElement(PaginationComponent, {
520
- result: result
521
- }), result && paginateContent && paginateContent({
522
- result
523
- }));
524
- }
525
- onContainerLayout = e => {
526
- const {
527
- width
528
- } = e.nativeEvent.layout;
529
- const {
530
- widths
531
- } = this.s;
532
- this.setState({
533
- width
534
- });
535
- if (widths) widths.tableWidth = width;
536
- };
537
- onLinksCreated = ({
538
- args
539
- }) => {
540
- const modelClassName = this.p.modelClass.modelClassData().name;
541
- if (args.created[modelClassName]) {
542
- const amountCreated = args.created[modelClassName].length;
543
- this.setState(prevState => ({
544
- currentWorkplaceCount: prevState.currentWorkplaceCount + amountCreated
545
- }));
546
- }
547
- };
548
- onLinksDestroyed = ({
549
- args
550
- }) => {
551
- const modelClassName = this.p.modelClass.modelClassData().name;
552
- if (args.destroyed[modelClassName]) {
553
- const amountDestroyed = args.destroyed[modelClassName].length;
554
- this.setState(prevState => ({
555
- currentWorkplaceCount: prevState.currentWorkplaceCount - amountDestroyed
556
- }));
557
- }
558
- };
559
- keyExtrator = model => `${this.s.tableSettingFullCacheKey}-${model.id()}`;
560
- filterForm = () => {
561
- const {
562
- filterFormRef,
563
- submitFilter,
564
- submitFilterDebounce
565
- } = this.tt;
566
- const {
567
- filterContent,
568
- filterSubmitButton
569
- } = this.p;
570
- const {
571
- queryQName
572
- } = this.s;
573
- const {
574
- filterSubmitLabel
575
- } = this.props;
576
- const {
577
- qParams
578
- } = digs(this.collection, "qParams");
579
- return /*#__PURE__*/React.createElement(Form, {
580
- className: "live-table--filter-form",
581
- formRef: filterFormRef,
582
- onSubmit: this.tt.onFilterFormSubmit,
583
- setForm: this.setStates.filterForm
584
- }, "s" in qParams && /*#__PURE__*/React.createElement("input", {
585
- name: "s",
586
- type: "hidden",
587
- value: qParams.s
588
- }), filterContent({
589
- onFilterChanged: submitFilter,
590
- onFilterChangedWithDelay: submitFilterDebounce,
591
- qParams,
592
- queryQName
593
- }), filterSubmitButton && /*#__PURE__*/React.createElement("input", {
594
- className: "btn btn-primary live-table--submit-filter-button",
595
- type: "submit",
596
- style: {
597
- marginTop: "8px"
598
- },
599
- value: filterSubmitLabel || this.t(".filter", {
600
- defaultValue: "Filter"
601
- })
602
- }));
603
- };
604
- onFilterClicked = e => {
605
- e.preventDefault();
606
- this.setState({
607
- showFilters: !this.state.showFilters
608
- });
609
- };
610
- onPerPageChanged = e => {
611
- const {
612
- queryName
613
- } = this.s;
614
- const newPerPageValue = digg(e, "target", "value");
615
- const perKey = `${queryName}_per`;
616
- const paramsChange = {};
617
- paramsChange[perKey] = newPerPageValue;
618
- Params.changeParams(paramsChange);
619
- };
620
- renderItem = ({
621
- index,
622
- item: model
623
- }) => {
624
- if (!this.s.tableSettingLoaded) {
625
- return /*#__PURE__*/React.createElement(View, null, /*#__PURE__*/React.createElement(Text, null, this.t(".loading_dot_dot_dot", {
626
- defaultValue: "Loading..."
627
- })));
628
- }
629
- return /*#__PURE__*/React.createElement(ModelRow, {
630
- cacheKey: model.cacheKey(),
631
- columns: this.s.columnsToShow,
632
- columnWidths: this.columnWidths(),
633
- events: this.tt.events,
634
- index: index,
635
- key: model.id(),
636
- model: model,
637
- table: this,
638
- tableSettingFullCacheKey: this.s.tableSettingFullCacheKey
639
- });
640
- };
641
- styleForColumn = ({
642
- column,
643
- columnIndex,
644
- even,
645
- style,
646
- type
647
- }) => {
648
- const {
649
- styleUI
650
- } = this.p;
651
- const defaultStyle = {
652
- justifyContent: "center",
653
- padding: 8,
654
- overflow: "hidden"
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
655
15
  };
656
- if (styleUI) {
657
- Object.assign(defaultStyle, {
658
- backgroundColor: even ? "#f5f5f5" : "#fff"
659
- });
660
- }
661
- if (type == "actions") {
662
- defaultStyle.flexDirection = "row";
663
- defaultStyle.alignItems = "center";
664
- if (this.tt.mdUp) {
665
- defaultStyle.marginLeft = "auto";
666
- } else {
667
- defaultStyle.marginRight = "auto";
668
- }
669
- } else if (this.tt.mdUp && styleUI) {
670
- defaultStyle.borderRight = "1px solid #dbdbdb";
671
- }
672
- const actualStyle = Object.assign(defaultStyle, style);
673
- return actualStyle;
674
- };
675
- styleForHeader = ({
676
- column,
677
- columnIndex,
678
- style,
679
- type
680
- }) => {
681
- const {
682
- mdUp
683
- } = this.tt;
684
- const defaultStyle = {
685
- flexDirection: "row",
686
- alignItems: "center",
687
- padding: 8
16
+ })();
17
+ var __assign = (this && this.__assign) || function () {
18
+ __assign = Object.assign || function(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
+ t[p] = s[p];
23
+ }
24
+ return t;
688
25
  };
689
- if (type != "actions" && mdUp && this.p.styleUI) {
690
- defaultStyle.borderRight = "1px solid #dbdbdb";
26
+ return __assign.apply(this, arguments);
27
+ };
28
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
29
+ if (k2 === undefined) k2 = k;
30
+ var desc = Object.getOwnPropertyDescriptor(m, k);
31
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
32
+ desc = { enumerable: true, get: function() { return m[k]; } };
691
33
  }
692
- const actualStyle = Object.assign(defaultStyle, style);
693
- return actualStyle;
694
- };
695
- styleForHeaderText() {
696
- const actualStyle = {
697
- fontWeight: "bold"
698
- };
699
- return actualStyle;
700
- }
701
- styleForRow = ({
702
- even
703
- } = {}) => {
704
- const actualStyle = {
705
- flex: 1,
706
- alignItems: "stretch"
34
+ Object.defineProperty(o, k2, desc);
35
+ }) : (function(o, m, k, k2) {
36
+ if (k2 === undefined) k2 = k;
37
+ o[k2] = m[k];
38
+ }));
39
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
40
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
41
+ }) : function(o, v) {
42
+ o["default"] = v;
43
+ });
44
+ var __importStar = (this && this.__importStar) || (function () {
45
+ var ownKeys = function(o) {
46
+ ownKeys = Object.getOwnPropertyNames || function (o) {
47
+ var ar = [];
48
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
49
+ return ar;
50
+ };
51
+ return ownKeys(o);
707
52
  };
708
- if (even && this.p.styleUI) {
709
- actualStyle.backgroundColor = "#f5f5f5";
710
- }
711
- return actualStyle;
712
- };
713
- styleForRowHeader = () => {
714
- const actualStyle = {
715
- flex: 1,
716
- alignItems: "stretch"
53
+ return function (mod) {
54
+ if (mod && mod.__esModule) return mod;
55
+ var result = {};
56
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
57
+ __setModuleDefault(result, mod);
58
+ return result;
717
59
  };
718
- return actualStyle;
719
- };
720
- tableControls() {
721
- const {
722
- controls
723
- } = this.props;
724
- const {
725
- showSettings
726
- } = this.s;
727
- const {
728
- models,
729
- qParams,
730
- query,
731
- result
732
- } = digs(this.collection, "models", "qParams", "query", "result");
733
- return /*#__PURE__*/React.createElement(View, {
734
- style: this.rootViewStyle ||= {
735
- flexDirection: "row"
736
- }
737
- }, controls && controls({
738
- models,
739
- qParams,
740
- query,
741
- result
742
- }), /*#__PURE__*/React.createElement(Pressable, {
743
- dataSet: {
744
- class: "filter-button"
745
- },
746
- onPress: this.tt.onFilterClicked
747
- }, /*#__PURE__*/React.createElement(Icon, {
748
- name: "search",
749
- size: 20
750
- })), /*#__PURE__*/React.createElement(View, null, showSettings && /*#__PURE__*/React.createElement(Settings, {
751
- onRequestClose: this.tt.onRequestCloseSettings,
752
- table: this
753
- }), /*#__PURE__*/React.createElement(Pressable, {
754
- dataSet: this.settingsButtonDataSet ||= {
755
- class: "settings-button"
756
- },
757
- onPress: this.tt.onSettingsClicked
758
- }, /*#__PURE__*/React.createElement(Icon, {
759
- name: "gear",
760
- size: 20
761
- }))));
762
- }
763
- tableFooter() {
764
- const {
765
- result
766
- } = digs(this.collection, "result");
767
- const currentPage = result.currentPage();
768
- const totalCount = result.totalCount();
769
- const perPage = result.perPage();
770
- const to = Math.min(currentPage * perPage, totalCount);
771
- const defaultValue = "Showing %{from} to %{to} out of %{total_count} total.";
772
- let from = (currentPage - 1) * perPage + 1;
773
- if (to === 0) from = 0;
774
- return /*#__PURE__*/React.createElement(View, {
775
- style: this.rootViewStyle ||= {
776
- flexDirection: "row",
777
- justifyContent: "space-between",
778
- marginTop: 10
779
- }
780
- }, /*#__PURE__*/React.createElement(View, {
781
- dataSet: this.showingCountsDataSet ||= {
782
- class: "showing-counts"
783
- },
784
- style: this.showingCountsStyle ||= {
785
- flexDirection: "row"
786
- }
787
- }, /*#__PURE__*/React.createElement(Text, null, this.t(".showing_from_to_out_of_total", {
788
- defaultValue,
789
- from,
790
- to,
791
- total_count: totalCount
792
- })), this.p.workplace && this.s.currentWorkplaceCount !== null && /*#__PURE__*/React.createElement(Text, {
793
- style: this.xSelectedTextStyle ||= {
794
- marginLeft: 3
795
- }
796
- }, this.t(".x_selected", {
797
- defaultValue: "%{selected} selected.",
798
- selected: this.s.currentWorkplaceCount
799
- }))), /*#__PURE__*/React.createElement(View, null, /*#__PURE__*/React.createElement(Select, {
800
- className: "per-page-select",
801
- defaultValue: perPage,
802
- onChange: this.tt.onPerPageChanged,
803
- options: paginationOptions
804
- })));
805
- }
806
- className() {
807
- const classNames = ["api-maker--table"];
808
- if (this.props.className) {
809
- classNames.push(this.props.className);
810
- }
811
- return classNames.join(" ");
812
- }
813
- columnProps(column) {
814
- const props = {};
815
- if (column.textCenter) {
816
- props.style ||= {};
817
- props.style.textAlign = "center";
818
- }
819
- if (column.textRight) {
820
- props.style ||= {};
821
- props.style.textAlign = "right";
822
- }
823
- return props;
824
- }
825
- headerProps(column) {
826
- const props = {};
827
- if (column.textCenter) {
828
- props.style ||= {};
829
- props.style.justifyContent = "center";
830
- }
831
- if (column.textRight) {
832
- props.style ||= {};
833
- props.style.justifyContent = "end";
834
- }
835
- return props;
836
- }
837
- columnWidths() {
838
- const columnWidths = {};
839
- for (const column of this.s.preparedColumns) {
840
- columnWidths[column.tableSettingColumn.identifier()] = column.width;
841
- }
842
- return columnWidths;
843
- }
844
- headersContentFromColumns = () => {
845
- return /*#__PURE__*/React.createElement(DraggableSort, {
846
- data: this.s.columnsToShow,
847
- events: this.tt.draggableSortEvents,
848
- horizontal: true,
849
- keyExtractor: this.tt.dragListkeyExtractor,
850
- onItemMoved: this.tt.onItemMoved,
851
- onReordered: this.tt.onReordered,
852
- renderItem: this.tt.dragListRenderItemContent
853
- });
854
- };
855
- dragListCacheKeyExtractor = item => `${item.tableSettingColumn.identifier()}-${this.s.resizing}`;
856
- dragListkeyExtractor = item => item.tableSettingColumn.identifier();
857
- onItemMoved = ({
858
- animationArgs,
859
- itemIndex,
860
- x,
861
- y
862
- }) => {
863
- const animatedPosition = digg(this, "s", "columnsToShow", itemIndex, "animatedPosition");
864
- if (animationArgs) {
865
- Animated.timing(animatedPosition, animationArgs).start();
866
- } else {
867
- animatedPosition.setValue({
868
- x,
869
- y
870
- });
871
- }
872
- };
873
- onReordered = async ({
874
- fromItem,
875
- fromPosition,
876
- toItem,
877
- toPosition
878
- }) => {
879
- if (fromPosition == toPosition) return; // Only do requests and queries if changed
880
-
881
- const TableSettingColumn = fromItem.tableSettingColumn.constructor;
882
- const toColumn = await TableSettingColumn.find(toItem.tableSettingColumn.id()); // Need to load latest position because ActsAsList might have changed it
883
-
884
- await fromItem.tableSettingColumn.update({
885
- position: toColumn.position()
886
- });
887
- };
888
- dragListRenderItemContent = ({
889
- isActive,
890
- item,
891
- touchProps
892
- }) => {
893
- const {
894
- animatedWidth,
895
- animatedZIndex,
896
- column,
897
- tableSettingColumn
898
- } = item;
899
- return /*#__PURE__*/React.createElement(HeaderColumn, {
900
- active: isActive,
901
- animatedWidth: animatedWidth,
902
- animatedZIndex: animatedZIndex,
903
- column: column,
904
- key: tableSettingColumn.identifier(),
905
- resizing: this.s.resizing,
906
- table: this,
907
- tableSettingColumn: tableSettingColumn,
908
- touchProps: touchProps,
909
- widths: this.s.widths
60
+ })();
61
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
62
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
63
+ return new (P || (P = Promise))(function (resolve, reject) {
64
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
65
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
66
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
67
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
910
68
  });
911
- };
912
- headerClassNameForColumn(column) {
913
- const classNames = [];
914
- if (column.commonProps && column.commonProps.className) classNames.push(column.commonProps.className);
915
- if (column.headerProps && column.headerProps.className) classNames.push(column.headerProps.className);
916
- return classNames;
917
- }
918
- headerLabelForColumn(column) {
919
- const {
920
- modelClass
921
- } = this.p;
922
- if ("label" in column) {
923
- if (typeof column.label == "function") {
924
- return column.label();
925
- } else {
926
- return column.label;
927
- }
69
+ };
70
+ var __generator = (this && this.__generator) || function (thisArg, body) {
71
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
72
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
73
+ function verb(n) { return function (v) { return step([n, v]); }; }
74
+ function step(op) {
75
+ if (f) throw new TypeError("Generator is already executing.");
76
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
77
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
78
+ if (y = 0, t) op = [op[0] & 2, t.value];
79
+ switch (op[0]) {
80
+ case 0: case 1: t = op; break;
81
+ case 4: _.label++; return { value: op[1], done: false };
82
+ case 5: _.label++; y = op[1]; op = [0]; continue;
83
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
84
+ default:
85
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
86
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
87
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
88
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
89
+ if (t[2]) _.ops.pop();
90
+ _.trys.pop(); continue;
91
+ }
92
+ op = body.call(thisArg, _);
93
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
94
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
928
95
  }
929
- let currentModelClass = modelClass;
930
-
931
- // Calculate current model class through path
932
- if (column.path) {
933
- for (const pathPart of column.path) {
934
- const relationships = digg(currentModelClass.modelClassData(), "relationships");
935
- const relationship = relationships.find(relationshipInArray => relationshipInArray.name == inflection.underscore(pathPart));
936
- currentModelClass = modelClassRequire(digg(relationship, "resource_name"));
937
- }
938
- }
939
- if (column.attribute) return currentModelClass.humanAttributeName(column.attribute);
940
- throw new Error("No 'label' or 'attribute' was given");
941
- }
942
- onFilterFormSubmit = () => this.submitFilter();
943
- onRequestCloseSettings = () => this.setState({
944
- showSettings: false
945
- });
946
- onSettingsClicked = e => {
947
- e.preventDefault();
948
- this.setState({
949
- showSettings: !this.s.showSettings
950
- });
951
- };
952
- submitFilter = () => {
953
- const {
954
- appHistory
955
- } = this.props;
956
- const {
957
- queryQName
958
- } = this.s;
959
- const changeParamsParams = {};
960
- const qParams = this.s.filterForm.asObject();
961
- if (Platform.OS == "web") {
962
- const filterForm = digg(this.tt.filterFormRef, "current");
963
- const navtiveFormParams = Params.serializeForm(filterForm);
964
- incorporate(qParams, navtiveFormParams);
96
+ };
97
+ var __rest = (this && this.__rest) || function (s, e) {
98
+ var t = {};
99
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
100
+ t[p] = s[p];
101
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
102
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
103
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
104
+ t[p[i]] = s[p[i]];
105
+ }
106
+ return t;
107
+ };
108
+ var __importDefault = (this && this.__importDefault) || function (mod) {
109
+ return (mod && mod.__esModule) ? mod : { "default": mod };
110
+ };
111
+ var _a;
112
+ Object.defineProperty(exports, "__esModule", { value: true });
113
+ var jsx_runtime_1 = require("react/jsx-runtime");
114
+ var diggerize_1 = require("diggerize");
115
+ var react_1 = __importStar(require("react"));
116
+ var react_native_1 = require("react-native");
117
+ var base_component_js_1 = __importDefault(require("../base-component.js"));
118
+ var card_1 = __importDefault(require("../bootstrap/card"));
119
+ var classnames_1 = __importDefault(require("classnames"));
120
+ var collection_js_1 = __importDefault(require("../collection.js"));
121
+ var column_visible_js_1 = __importDefault(require("./column-visible.js"));
122
+ var debounce_1 = __importDefault(require("debounce"));
123
+ var index_1 = __importDefault(require("../draggable-sort/index"));
124
+ var events_1 = __importDefault(require("events"));
125
+ var index_2 = __importDefault(require("./filters/index"));
126
+ var flat_list_1 = __importDefault(require("./components/flat-list"));
127
+ var form_1 = require("../form");
128
+ var header_1 = __importDefault(require("./components/header"));
129
+ var header_column_1 = __importDefault(require("./header-column"));
130
+ var header_select_1 = __importDefault(require("./header-select"));
131
+ var icon_1 = __importDefault(require("../utils/icon"));
132
+ var incorporator_1 = require("incorporator");
133
+ var inflection = __importStar(require("inflection"));
134
+ var memo_js_1 = __importDefault(require("set-state-compare/build/memo.js"));
135
+ var model_class_require_js_1 = __importDefault(require("../model-class-require.js"));
136
+ var model_row_1 = __importDefault(require("./model-row"));
137
+ var paginate_1 = __importDefault(require("../bootstrap/paginate"));
138
+ var params_js_1 = __importDefault(require("../params.js"));
139
+ var prop_types_1 = __importDefault(require("prop-types"));
140
+ var row_1 = __importDefault(require("./components/row"));
141
+ var select_calculator_js_1 = __importDefault(require("./select-calculator.js"));
142
+ var select_1 = __importDefault(require("../inputs/select"));
143
+ var index_3 = __importDefault(require("./settings/index"));
144
+ var shape_component_js_1 = require("set-state-compare/build/shape-component.js");
145
+ var table_settings_js_1 = __importDefault(require("./table-settings.js"));
146
+ var text_1 = __importDefault(require("../utils/text"));
147
+ var uniqunize_1 = __importDefault(require("uniqunize"));
148
+ var use_breakpoint_js_1 = __importDefault(require("../use-breakpoint.js"));
149
+ var use_collection_js_1 = __importDefault(require("../use-collection.js"));
150
+ var use_i18n_mjs_1 = __importDefault(require("i18n-on-steroids/src/use-i18n.mjs"));
151
+ var use_event_emitter_js_1 = __importDefault(require("../use-event-emitter.js"));
152
+ var use_model_event_js_1 = __importDefault(require("../use-model-event.js"));
153
+ var use_query_params_js_1 = __importDefault(require("on-location-changed/build/use-query-params.js"));
154
+ var widths_js_1 = __importDefault(require("./widths.js"));
155
+ var worker_plugins_check_all_checkbox_1 = __importDefault(require("./worker-plugins-check-all-checkbox"));
156
+ var paginationOptions = [30, 60, 90, ["All", "all"]];
157
+ var TableContext = (0, react_1.createContext)();
158
+ var ListHeaderComponent = (0, memo_js_1.default)((0, shape_component_js_1.shapeComponent)(/** @class */ (function (_super) {
159
+ __extends(ListHeaderComponent, _super);
160
+ function ListHeaderComponent() {
161
+ var _this = _super !== null && _super.apply(this, arguments) || this;
162
+ _this.onColumnVisibilityUpdated = function () { return _this.setState({ lastUpdate: new Date() }); };
163
+ return _this;
965
164
  }
966
- changeParamsParams[queryQName] = JSON.stringify(qParams);
967
- Params.changeParams(changeParamsParams, {
968
- appHistory
969
- });
970
- };
971
- submitFilterDebounce = debounce(this.tt.submitFilter);
972
- }));
973
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkaWdnIiwiZGlncyIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VNZW1vIiwidXNlUmVmIiwiQW5pbWF0ZWQiLCJQbGF0Zm9ybSIsIlByZXNzYWJsZSIsIlZpZXciLCJCYXNlQ29tcG9uZW50IiwiQ2FyZCIsImNsYXNzTmFtZXMiLCJDb2xsZWN0aW9uIiwiY29sdW1uVmlzaWJsZSIsImRlYm91bmNlIiwiRHJhZ2dhYmxlU29ydCIsIkV2ZW50RW1pdHRlciIsIkZpbHRlcnMiLCJGbGF0TGlzdCIsIkZvcm0iLCJIZWFkZXIiLCJIZWFkZXJDb2x1bW4iLCJIZWFkZXJTZWxlY3QiLCJJY29uIiwiaW5jb3Jwb3JhdGUiLCJpbmZsZWN0aW9uIiwibWVtbyIsIm1vZGVsQ2xhc3NSZXF1aXJlIiwiTW9kZWxSb3ciLCJQYWdpbmF0ZSIsIlBhcmFtcyIsIlByb3BUeXBlcyIsIlJvdyIsInNlbGVjdENhbGN1bGF0b3IiLCJTZWxlY3QiLCJTZXR0aW5ncyIsInNoYXBlQ29tcG9uZW50IiwiVGFibGVTZXR0aW5ncyIsIlRleHQiLCJ1bmlxdW5pemUiLCJ1c2VCcmVha3BvaW50IiwidXNlQ29sbGVjdGlvbiIsInVzZUkxOG4iLCJ1c2VFdmVudEVtaXR0ZXIiLCJ1c2VNb2RlbEV2ZW50IiwidXNlUXVlcnlQYXJhbXMiLCJXaWR0aHMiLCJwYWdpbmF0aW9uT3B0aW9ucyIsIldvcmtlclBsdWdpbnNDaGVja0FsbENoZWNrYm94IiwibGF6eSIsIlRhYmxlQ29udGV4dCIsIkxpc3RIZWFkZXJDb21wb25lbnQiLCJzZXR1cCIsInVzZVN0YXRlcyIsImxhc3RVcGRhdGUiLCJEYXRlIiwicmVuZGVyIiwibWRVcCIsInRhYmxlQ29udGV4dFZhbHVlIiwidGFibGUiLCJjb2xsZWN0aW9uIiwiZXZlbnRzIiwicXVlcnlXaXRob3V0UGFnaW5hdGlvbiIsInQiLCJ0dCIsInF1ZXJ5Iiwib25Db2x1bW5WaXNpYmlsaXR5VXBkYXRlZCIsImNyZWF0ZUVsZW1lbnQiLCJkYXRhU2V0IiwiY2xhc3MiLCJzdHlsZSIsInN0eWxlRm9yUm93SGVhZGVyIiwicCIsIndvcmtwbGFjZSIsInMiLCJjdXJyZW50V29ya3BsYWNlIiwic3R5bGVGb3JIZWFkZXIiLCJ3aWR0aCIsInVuZGVmaW5lZCIsIndvcmtlclBsZ3VpbnNDaGVja0FsbENoZWNrYm94U3R5bGUiLCJtYXJnaW5Ib3Jpem9udGFsIiwic2VsZWN0QWxsRm91bmRUZXh0U3R5bGUiLCJtYXJnaW5MZWZ0IiwiZGVmYXVsdFZhbHVlIiwicHJlcGFyZWRDb2x1bW5zIiwiRnJhZ21lbnQiLCJoZWFkZXJzQ29udGVudEZyb21Db2x1bW5zIiwidHlwZSIsInNldFN0YXRlIiwiQXBpTWFrZXJUYWJsZSIsImRlZmF1bHRQcm9wcyIsImNhcmQiLCJjdXJyZW50VXNlciIsImRlc3Ryb3lFbmFibGVkIiwiZmlsdGVyQ2FyZCIsImZpbHRlclN1Ym1pdEJ1dHRvbiIsIm5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQiLCJub1JlY29yZHNGb3VuZENvbnRlbnQiLCJwcmVsb2FkcyIsInNlbGVjdCIsInN0eWxlVUkiLCJwcm9wVHlwZXMiLCJhYmlsaXRpZXMiLCJvYmplY3QiLCJhY3Rpb25zQ29udGVudCIsImZ1bmMiLCJhcHBIaXN0b3J5IiwiYm9vbCIsImlzUmVxdWlyZWQiLCJjbGFzc05hbWUiLCJzdHJpbmciLCJpbnN0YW5jZU9mIiwiY29sdW1ucyIsIm9uZU9mVHlwZSIsImFycmF5IiwiY29udHJvbHMiLCJkZWZhdWx0RGF0ZUZvcm1hdE5hbWUiLCJkZWZhdWx0RGF0ZVRpbWVGb3JtYXROYW1lIiwiZGVmYXVsdFBhcmFtcyIsImRlc3Ryb3lNZXNzYWdlIiwiZWRpdE1vZGVsUGF0aCIsImZpbHRlckNvbnRlbnQiLCJmaWx0ZXJTdWJtaXRMYWJlbCIsImFueSIsImdyb3VwQnkiLCJoZWFkZXIiLCJpZGVudGlmaWVyIiwibW9kZWxDbGFzcyIsIm9uTW9kZWxzTG9hZGVkIiwicGFnaW5hdGVDb250ZW50IiwicGFnaW5hdGlvbkNvbXBvbmVudCIsInF1ZXJ5TWV0aG9kIiwicXVlcnlOYW1lIiwic2VsZWN0Q29sdW1ucyIsInN0eWxlcyIsInZpZXdNb2RlbFBhdGgiLCJkcmFnZ2FibGVTb3J0RXZlbnRzIiwidGFibGVTZXR0aW5ncyIsIm5hbWVzcGFjZSIsIm5hbWUiLCJicmVha3BvaW50IiwicXVlcnlQYXJhbXMiLCJzZXRJbnN0YW5jZSIsImZpbHRlckZvcm1SZWYiLCJjb2xsZWN0aW9uS2V5IiwibW9kZWxDbGFzc0RhdGEiLCJwcm9wcyIsInF1ZXJ5U05hbWUiLCJjb2x1bW5zQXNBcnJheSIsImN1cnJlbnRXb3JrcGxhY2VDb3VudCIsImZpbHRlckZvcm0iLCJjb2x1bW5zVG9TaG93IiwiZHJhZ2dlZENvbHVtbiIsInByZWxvYWQiLCJxdWVyeVFOYW1lIiwicXVlcnlQYWdlTmFtZSIsInJlc2l6aW5nIiwic2hvd0ZpbHRlcnMiLCJCb29sZWFuIiwic2hvd1NldHRpbmdzIiwidGFibGVTZXR0aW5nIiwidGFibGVTZXR0aW5nTG9hZGVkIiwidGFibGVTZXR0aW5nRnVsbENhY2hlS2V5Iiwid2lkdGhzIiwiY2FjaGVLZXkiLCJsb2FkQ3VycmVudFdvcmtwbGFjZSIsInRoZW4iLCJsb2FkQ3VycmVudFdvcmtwbGFjZUNvdW50IiwiaWQiLCJsb2FkVGFibGVTZXR0aW5nIiwib25MaW5rc0NyZWF0ZWQiLCJvbkxpbmtzRGVzdHJveWVkIiwiY29sbGVjdGlvblJlYWR5IiwiYWJpbGl0aWVzVG9Mb2FkIiwiaWZDb25kaXRpb24iLCJwYWdpbmF0aW9uIiwic3RhdGUiLCJjbG9uZSIsImV4Y2VwdCIsIm9uRHJhZ1N0YXJ0Iiwib25EcmFnRW5kQW5pbWF0aW9uIiwiZ2V0Q29sdW1uc1RvU2hvdyIsIml0ZW0iLCJhbmltYXRlZFpJbmRleCIsInNldFZhbHVlIiwiV29ya3BsYWNlIiwicmVzdWx0IiwiY3VycmVudCIsIldvcmtwbGFjZUxpbmsiLCJyYW5zYWNrIiwicmVzb3VyY2VfdHlwZV9lcSIsIndvcmtwbGFjZV9pZF9lcSIsImNvdW50IiwiZmlsdGVyIiwiY29sdW1uIiwidGFibGVTZXR0aW5nQ29sdW1uIiwic29ydCIsImEiLCJiIiwicG9zaXRpb24iLCJsb2FkRXhpc3RpbmdPckNyZWF0ZVRhYmxlU2V0dGluZ3MiLCJtZXJnZWRQcmVsb2FkcyIsImZ1bGxDYWNoZUtleSIsInVwZGF0ZVNldHRpbmdzRnVsbENhY2hlS2V5IiwiY29uY2F0IiwibW9kZWxzIiwib3ZlcmFsbENvdW50IiwicVBhcmFtcyIsInNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50Iiwic2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudCIsImFyZ3MiLCJFcnJvciIsIm9uTGF5b3V0Iiwib25Db250YWluZXJMYXlvdXQiLCJjb250YWluZXIiLCJjYXJkT3JUYWJsZSIsIm93bkFiaWxpdGllcyIsInB1c2giLCJsZW5ndGgiLCJtb2RlbENsYXNzTmFtZSIsIm1vZGVsTmFtZSIsImFiaWxpdHkiLCJyZXN0UHJvcHMiLCJoZWFkZXJDb250ZW50IiwiUGFnaW5hdGlvbkNvbXBvbmVudCIsImh1bWFuIiwiZmxhdExpc3RTdHlsZSIsIm92ZXJmbG93WCIsImJvcmRlciIsImJvcmRlclJhZGl1cyIsImZsYXRMaXN0IiwiUHJvdmlkZXIiLCJ2YWx1ZSIsIl9leHRlbmRzIiwiZGF0YSIsImV4dHJhRGF0YSIsImtleUV4dHJhY3RvciIsImtleUV4dHJhdG9yIiwicmVuZGVySXRlbSIsInNob3dzSG9yaXpvbnRhbFNjcm9sbEluZGljYXRvciIsInRhYmxlQ29udHJvbHMiLCJmb290ZXIiLCJ0YWJsZUZvb3RlciIsImUiLCJuYXRpdmVFdmVudCIsImxheW91dCIsInRhYmxlV2lkdGgiLCJjcmVhdGVkIiwiYW1vdW50Q3JlYXRlZCIsInByZXZTdGF0ZSIsImRlc3Ryb3llZCIsImFtb3VudERlc3Ryb3llZCIsIm1vZGVsIiwic3VibWl0RmlsdGVyIiwic3VibWl0RmlsdGVyRGVib3VuY2UiLCJmb3JtUmVmIiwib25TdWJtaXQiLCJvbkZpbHRlckZvcm1TdWJtaXQiLCJzZXRGb3JtIiwic2V0U3RhdGVzIiwib25GaWx0ZXJDaGFuZ2VkIiwib25GaWx0ZXJDaGFuZ2VkV2l0aERlbGF5IiwibWFyZ2luVG9wIiwib25GaWx0ZXJDbGlja2VkIiwicHJldmVudERlZmF1bHQiLCJvblBlclBhZ2VDaGFuZ2VkIiwibmV3UGVyUGFnZVZhbHVlIiwicGVyS2V5IiwicGFyYW1zQ2hhbmdlIiwiY2hhbmdlUGFyYW1zIiwiaW5kZXgiLCJjb2x1bW5XaWR0aHMiLCJrZXkiLCJzdHlsZUZvckNvbHVtbiIsImNvbHVtbkluZGV4IiwiZXZlbiIsImRlZmF1bHRTdHlsZSIsImp1c3RpZnlDb250ZW50IiwicGFkZGluZyIsIm92ZXJmbG93IiwiT2JqZWN0IiwiYXNzaWduIiwiYmFja2dyb3VuZENvbG9yIiwiZmxleERpcmVjdGlvbiIsImFsaWduSXRlbXMiLCJtYXJnaW5SaWdodCIsImJvcmRlclJpZ2h0IiwiYWN0dWFsU3R5bGUiLCJzdHlsZUZvckhlYWRlclRleHQiLCJmb250V2VpZ2h0Iiwic3R5bGVGb3JSb3ciLCJmbGV4Iiwicm9vdFZpZXdTdHlsZSIsIm9uUHJlc3MiLCJzaXplIiwib25SZXF1ZXN0Q2xvc2UiLCJvblJlcXVlc3RDbG9zZVNldHRpbmdzIiwic2V0dGluZ3NCdXR0b25EYXRhU2V0Iiwib25TZXR0aW5nc0NsaWNrZWQiLCJjdXJyZW50UGFnZSIsInRvdGFsQ291bnQiLCJwZXJQYWdlIiwidG8iLCJNYXRoIiwibWluIiwiZnJvbSIsInNob3dpbmdDb3VudHNEYXRhU2V0Iiwic2hvd2luZ0NvdW50c1N0eWxlIiwidG90YWxfY291bnQiLCJ4U2VsZWN0ZWRUZXh0U3R5bGUiLCJzZWxlY3RlZCIsIm9uQ2hhbmdlIiwib3B0aW9ucyIsImpvaW4iLCJjb2x1bW5Qcm9wcyIsInRleHRDZW50ZXIiLCJ0ZXh0QWxpZ24iLCJ0ZXh0UmlnaHQiLCJoZWFkZXJQcm9wcyIsImhvcml6b250YWwiLCJkcmFnTGlzdGtleUV4dHJhY3RvciIsIm9uSXRlbU1vdmVkIiwib25SZW9yZGVyZWQiLCJkcmFnTGlzdFJlbmRlckl0ZW1Db250ZW50IiwiZHJhZ0xpc3RDYWNoZUtleUV4dHJhY3RvciIsImFuaW1hdGlvbkFyZ3MiLCJpdGVtSW5kZXgiLCJ4IiwieSIsImFuaW1hdGVkUG9zaXRpb24iLCJ0aW1pbmciLCJzdGFydCIsImZyb21JdGVtIiwiZnJvbVBvc2l0aW9uIiwidG9JdGVtIiwidG9Qb3NpdGlvbiIsIlRhYmxlU2V0dGluZ0NvbHVtbiIsImNvbnN0cnVjdG9yIiwidG9Db2x1bW4iLCJmaW5kIiwidXBkYXRlIiwiaXNBY3RpdmUiLCJ0b3VjaFByb3BzIiwiYW5pbWF0ZWRXaWR0aCIsImFjdGl2ZSIsImhlYWRlckNsYXNzTmFtZUZvckNvbHVtbiIsImNvbW1vblByb3BzIiwiaGVhZGVyTGFiZWxGb3JDb2x1bW4iLCJsYWJlbCIsImN1cnJlbnRNb2RlbENsYXNzIiwicGF0aCIsInBhdGhQYXJ0IiwicmVsYXRpb25zaGlwcyIsInJlbGF0aW9uc2hpcCIsInJlbGF0aW9uc2hpcEluQXJyYXkiLCJ1bmRlcnNjb3JlIiwiYXR0cmlidXRlIiwiaHVtYW5BdHRyaWJ1dGVOYW1lIiwiY2hhbmdlUGFyYW1zUGFyYW1zIiwiYXNPYmplY3QiLCJPUyIsIm5hdnRpdmVGb3JtUGFyYW1zIiwic2VyaWFsaXplRm9ybSIsIkpTT04iLCJzdHJpbmdpZnkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGFibGUvdGFibGUuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZGlnZywgZGlnc30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgUmVhY3QsIHtjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VSZWZ9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge0FuaW1hdGVkLCBQbGF0Zm9ybSwgUHJlc3NhYmxlLCBWaWV3fSBmcm9tIFwicmVhY3QtbmF0aXZlXCJcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gXCIuLi9iYXNlLWNvbXBvbmVudFwiXG5pbXBvcnQgQ2FyZCBmcm9tIFwiLi4vYm9vdHN0cmFwL2NhcmRcIlxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIlxuaW1wb3J0IENvbGxlY3Rpb24gZnJvbSBcIi4uL2NvbGxlY3Rpb25cIlxuaW1wb3J0IGNvbHVtblZpc2libGUgZnJvbSBcIi4vY29sdW1uLXZpc2libGVcIlxuaW1wb3J0IGRlYm91bmNlIGZyb20gXCJkZWJvdW5jZVwiXG5pbXBvcnQgRHJhZ2dhYmxlU29ydCBmcm9tIFwiLi4vZHJhZ2dhYmxlLXNvcnQvaW5kZXhcIlxuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRzXCJcbmltcG9ydCBGaWx0ZXJzIGZyb20gXCIuL2ZpbHRlcnNcIlxuaW1wb3J0IEZsYXRMaXN0IGZyb20gXCIuL2NvbXBvbmVudHMvZmxhdC1saXN0XCJcbmltcG9ydCB7Rm9ybX0gZnJvbSBcIi4uL2Zvcm1cIlxuaW1wb3J0IEhlYWRlciBmcm9tIFwiLi9jb21wb25lbnRzL2hlYWRlclwiXG5pbXBvcnQgSGVhZGVyQ29sdW1uIGZyb20gXCIuL2hlYWRlci1jb2x1bW5cIlxuaW1wb3J0IEhlYWRlclNlbGVjdCBmcm9tIFwiLi9oZWFkZXItc2VsZWN0XCJcbmltcG9ydCBJY29uIGZyb20gXCIuLi91dGlscy9pY29uXCJcbmltcG9ydCB7aW5jb3Jwb3JhdGV9IGZyb20gXCJpbmNvcnBvcmF0b3JcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQgbWVtbyBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL21lbW9cIlxuaW1wb3J0IG1vZGVsQ2xhc3NSZXF1aXJlIGZyb20gXCIuLi9tb2RlbC1jbGFzcy1yZXF1aXJlXCJcbmltcG9ydCBNb2RlbFJvdyBmcm9tIFwiLi9tb2RlbC1yb3dcIlxuaW1wb3J0IFBhZ2luYXRlIGZyb20gXCIuLi9ib290c3RyYXAvcGFnaW5hdGVcIlxuaW1wb3J0IFBhcmFtcyBmcm9tIFwiLi4vcGFyYW1zXCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IFJvdyBmcm9tIFwiLi9jb21wb25lbnRzL3Jvd1wiXG5pbXBvcnQgc2VsZWN0Q2FsY3VsYXRvciBmcm9tIFwiLi9zZWxlY3QtY2FsY3VsYXRvclwiXG5pbXBvcnQgU2VsZWN0IGZyb20gXCIuLi9pbnB1dHMvc2VsZWN0XCJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5ncy9pbmRleFwiXG5pbXBvcnQge3NoYXBlQ29tcG9uZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL3NoYXBlLWNvbXBvbmVudFwiXG5pbXBvcnQgVGFibGVTZXR0aW5ncyBmcm9tIFwiLi90YWJsZS1zZXR0aW5nc1wiXG5pbXBvcnQgVGV4dCBmcm9tIFwiLi4vdXRpbHMvdGV4dFwiXG5pbXBvcnQgdW5pcXVuaXplIGZyb20gXCJ1bmlxdW5pemVcIlxuaW1wb3J0IHVzZUJyZWFrcG9pbnQgZnJvbSBcIi4uL3VzZS1icmVha3BvaW50XCJcbmltcG9ydCB1c2VDb2xsZWN0aW9uIGZyb20gXCIuLi91c2UtY29sbGVjdGlvblwiXG5pbXBvcnQgdXNlSTE4biBmcm9tIFwiaTE4bi1vbi1zdGVyb2lkcy9zcmMvdXNlLWkxOG5cIlxuaW1wb3J0IHVzZUV2ZW50RW1pdHRlciBmcm9tIFwiLi4vdXNlLWV2ZW50LWVtaXR0ZXJcIlxuaW1wb3J0IHVzZU1vZGVsRXZlbnQgZnJvbSBcIi4uL3VzZS1tb2RlbC1ldmVudFwiXG5pbXBvcnQgdXNlUXVlcnlQYXJhbXMgZnJvbSBcIm9uLWxvY2F0aW9uLWNoYW5nZWQvYnVpbGQvdXNlLXF1ZXJ5LXBhcmFtc1wiXG5pbXBvcnQgV2lkdGhzIGZyb20gXCIuL3dpZHRoc1wiXG5cbmNvbnN0IHBhZ2luYXRpb25PcHRpb25zID0gWzMwLCA2MCwgOTAsIFtcIkFsbFwiLCBcImFsbFwiXV1cbmNvbnN0IFdvcmtlclBsdWdpbnNDaGVja0FsbENoZWNrYm94ID0gUmVhY3QubGF6eSgoKSA9PiBpbXBvcnQoXCIuL3dvcmtlci1wbHVnaW5zLWNoZWNrLWFsbC1jaGVja2JveFwiKSlcbmNvbnN0IFRhYmxlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoKVxuXG5jb25zdCBMaXN0SGVhZGVyQ29tcG9uZW50ID0gbWVtbyhzaGFwZUNvbXBvbmVudChjbGFzcyBMaXN0SGVhZGVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIHNldHVwKCkge1xuICAgIHRoaXMudXNlU3RhdGVzKHtcbiAgICAgIGxhc3RVcGRhdGU6IG5ldyBEYXRlKClcbiAgICB9KVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHttZFVwfSA9IHVzZUJyZWFrcG9pbnQoKVxuICAgIGNvbnN0IHRhYmxlQ29udGV4dFZhbHVlID0gdXNlQ29udGV4dChUYWJsZUNvbnRleHQpXG4gICAgY29uc3QgdGFibGUgPSB0YWJsZUNvbnRleHRWYWx1ZS50YWJsZVxuICAgIGNvbnN0IHtjb2xsZWN0aW9uLCBldmVudHMsIHF1ZXJ5V2l0aG91dFBhZ2luYXRpb24sIHR9ID0gdGFibGUudHRcbiAgICBjb25zdCB7cXVlcnl9ID0gZGlncyhjb2xsZWN0aW9uLCBcInF1ZXJ5XCIpXG5cbiAgICB1c2VFdmVudEVtaXR0ZXIoZXZlbnRzLCBcImNvbHVtblZpc2liaWxpdHlVcGRhdGVkXCIsIHRoaXMudHQub25Db2x1bW5WaXNpYmlsaXR5VXBkYXRlZClcblxuICAgIHJldHVybiAoXG4gICAgICA8Um93IGRhdGFTZXQ9e3tjbGFzczogXCJhcGktbWFrZXIvdGFibGUvaGVhZGVyLXJvd1wifX0gc3R5bGU9e3RhYmxlLnN0eWxlRm9yUm93SGVhZGVyKCl9PlxuICAgICAgICB7dGFibGUucC53b3JrcGxhY2UgJiYgdGFibGUucy5jdXJyZW50V29ya3BsYWNlICYmXG4gICAgICAgICAgPEhlYWRlciBzdHlsZT17dGFibGUuc3R5bGVGb3JIZWFkZXIoe3N0eWxlOiB7d2lkdGg6IG1kVXAgPyA0MSA6IHVuZGVmaW5lZH19KX0+XG4gICAgICAgICAgICA8V29ya2VyUGx1Z2luc0NoZWNrQWxsQ2hlY2tib3hcbiAgICAgICAgICAgICAgY3VycmVudFdvcmtwbGFjZT17dGFibGUucy5jdXJyZW50V29ya3BsYWNlfVxuICAgICAgICAgICAgICBxdWVyeT17cXVlcnlXaXRob3V0UGFnaW5hdGlvbn1cbiAgICAgICAgICAgICAgc3R5bGU9e3RoaXMud29ya2VyUGxndWluc0NoZWNrQWxsQ2hlY2tib3hTdHlsZSB8fD0ge21hcmdpbkhvcml6b250YWw6IFwiYXV0b1wifX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7IW1kVXAgJiZcbiAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3RoaXMuc2VsZWN0QWxsRm91bmRUZXh0U3R5bGUgfHw9IHttYXJnaW5MZWZ0OiAzfX0+XG4gICAgICAgICAgICAgICAge3QoXCIuc2VsZWN0X2FsbF9mb3VuZFwiLCB7ZGVmYXVsdFZhbHVlOiBcIlNlbGVjdCBhbGwgZm91bmRcIn0pfVxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgIH1cbiAgICAgICAgeyFtZFVwICYmXG4gICAgICAgICAgPEhlYWRlciBzdHlsZT17dGFibGUuc3R5bGVGb3JIZWFkZXIoe3N0eWxlOiB7fX0pfT5cbiAgICAgICAgICAgIDxIZWFkZXJTZWxlY3QgcHJlcGFyZWRDb2x1bW5zPXt0YWJsZS5zLnByZXBhcmVkQ29sdW1uc30gcXVlcnk9e3F1ZXJ5fSB0YWJsZT17dGFibGV9IC8+XG4gICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgIH1cbiAgICAgICAge21kVXAgJiZcbiAgICAgICAgICA8PlxuICAgICAgICAgICAge3RhYmxlLmhlYWRlcnNDb250ZW50RnJvbUNvbHVtbnMoKX1cbiAgICAgICAgICAgIDxIZWFkZXIgc3R5bGU9e3RhYmxlLnN0eWxlRm9ySGVhZGVyKHtzdHlsZToge30sIHR5cGU6IFwiYWN0aW9uc1wifSl9IC8+XG4gICAgICAgICAgPC8+XG4gICAgICAgIH1cbiAgICAgIDwvUm93PlxuICAgIClcbiAgfVxuXG4gIG9uQ29sdW1uVmlzaWJpbGl0eVVwZGF0ZWQgPSAoKSA9PiB0aGlzLnNldFN0YXRlKHtsYXN0VXBkYXRlOiBuZXcgRGF0ZSgpfSlcbn0pKVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vKHNoYXBlQ29tcG9uZW50KGNsYXNzIEFwaU1ha2VyVGFibGUgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBjYXJkOiB0cnVlLFxuICAgIGN1cnJlbnRVc2VyOiBudWxsLFxuICAgIGRlc3Ryb3lFbmFibGVkOiB0cnVlLFxuICAgIGZpbHRlckNhcmQ6IHRydWUsXG4gICAgZmlsdGVyU3VibWl0QnV0dG9uOiB0cnVlLFxuICAgIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQ6IHVuZGVmaW5lZCxcbiAgICBub1JlY29yZHNGb3VuZENvbnRlbnQ6IHVuZGVmaW5lZCxcbiAgICBwcmVsb2FkczogW10sXG4gICAgc2VsZWN0OiB7fSxcbiAgICBzdHlsZVVJOiB0cnVlLFxuICAgIHdvcmtwbGFjZTogZmFsc2VcbiAgfVxuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgYWJpbGl0aWVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGFjdGlvbnNDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBhcHBIaXN0b3J5OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGNhcmQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbGxlY3Rpb246IFByb3BUeXBlcy5pbnN0YW5jZU9mKENvbGxlY3Rpb24pLFxuICAgIGNvbHVtbnM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBjb250cm9sczogUHJvcFR5cGVzLmZ1bmMsXG4gICAgY3VycmVudFVzZXI6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZGVmYXVsdERhdGVGb3JtYXROYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRlZmF1bHREYXRlVGltZUZvcm1hdE5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGVmYXVsdFBhcmFtczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBkZXN0cm95RW5hYmxlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBkZXN0cm95TWVzc2FnZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBlZGl0TW9kZWxQYXRoOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBmaWx0ZXJDYXJkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGZpbHRlckNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGZpbHRlclN1Ym1pdExhYmVsOiBQcm9wVHlwZXMuYW55LFxuICAgIGdyb3VwQnk6IFByb3BUeXBlcy5hcnJheSxcbiAgICBoZWFkZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gICAgaWRlbnRpZmllcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBtb2RlbENsYXNzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG5vUmVjb3Jkc0ZvdW5kQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Nb2RlbHNMb2FkZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIHBhZ2luYXRlQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcGFnaW5hdGlvbkNvbXBvbmVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcHJlbG9hZHM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgIHF1ZXJ5TWV0aG9kOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBxdWVyeU5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VsZWN0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHNlbGVjdENvbHVtbnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc3R5bGVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHN0eWxlVUk6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgdmlld01vZGVsUGF0aDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgd29ya3BsYWNlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXG4gIH1cblxuICBkcmFnZ2FibGVTb3J0RXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICB0YWJsZVNldHRpbmdzID0gbnVsbFxuXG4gIHNldHVwKCkge1xuICAgIGNvbnN0IHt0fSA9IHVzZUkxOG4oe25hbWVzcGFjZTogXCJqcy5hcGlfbWFrZXIudGFibGVcIn0pXG4gICAgY29uc3Qge25hbWU6IGJyZWFrcG9pbnQsIG1kVXB9ID0gdXNlQnJlYWtwb2ludCgpXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB1c2VRdWVyeVBhcmFtcygpXG5cbiAgICB0aGlzLnNldEluc3RhbmNlKHtcbiAgICAgIGJyZWFrcG9pbnQsXG4gICAgICBmaWx0ZXJGb3JtUmVmOiB1c2VSZWYoKSxcbiAgICAgIG1kVXAsXG4gICAgICB0XG4gICAgfSlcblxuICAgIGNvbnN0IGNvbGxlY3Rpb25LZXkgPSBkaWdnKHRoaXMucC5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCksIFwiY29sbGVjdGlvbktleVwiKVxuICAgIGxldCBxdWVyeU5hbWUgPSB0aGlzLnByb3BzLnF1ZXJ5TmFtZVxuXG4gICAgaWYgKCFxdWVyeU5hbWUpIHF1ZXJ5TmFtZSA9IGNvbGxlY3Rpb25LZXlcblxuICAgIGNvbnN0IHF1ZXJ5U05hbWUgPSBgJHtxdWVyeU5hbWV9X3NgXG5cbiAgICB0aGlzLnVzZVN0YXRlcyh7XG4gICAgICBjb2x1bW5zOiAoKSA9PiB0aGlzLmNvbHVtbnNBc0FycmF5KCksXG4gICAgICBjdXJyZW50V29ya3BsYWNlOiB1bmRlZmluZWQsXG4gICAgICBjdXJyZW50V29ya3BsYWNlQ291bnQ6IG51bGwsXG4gICAgICBmaWx0ZXJGb3JtOiBudWxsLFxuICAgICAgY29sdW1uc1RvU2hvdzogbnVsbCxcbiAgICAgIGRyYWdnZWRDb2x1bW46IG51bGwsXG4gICAgICBpZGVudGlmaWVyOiAoKSA9PiB0aGlzLnByb3BzLmlkZW50aWZpZXIgfHwgYCR7Y29sbGVjdGlvbktleX0tZGVmYXVsdGAsXG4gICAgICBsYXN0VXBkYXRlOiAoKSA9PiBuZXcgRGF0ZSgpLFxuICAgICAgcHJlbG9hZDogdW5kZWZpbmVkLFxuICAgICAgcHJlcGFyZWRDb2x1bW5zOiB1bmRlZmluZWQsXG4gICAgICBxdWVyeU5hbWUsXG4gICAgICBxdWVyeVFOYW1lOiAoKSA9PiBgJHtxdWVyeU5hbWV9X3FgLFxuICAgICAgcXVlcnlQYWdlTmFtZTogKCkgPT4gYCR7cXVlcnlOYW1lfV9wYWdlYCxcbiAgICAgIHF1ZXJ5U05hbWUsXG4gICAgICByZXNpemluZzogZmFsc2UsXG4gICAgICBzaG93RmlsdGVyczogKCkgPT4gQm9vbGVhbihxdWVyeVBhcmFtc1txdWVyeVNOYW1lXSksXG4gICAgICBzaG93U2V0dGluZ3M6IGZhbHNlLFxuICAgICAgdGFibGVTZXR0aW5nOiB1bmRlZmluZWQsXG4gICAgICB0YWJsZVNldHRpbmdMb2FkZWQ6IGZhbHNlLFxuICAgICAgdGFibGVTZXR0aW5nRnVsbENhY2hlS2V5OiB1bmRlZmluZWQsXG4gICAgICB3aWR0aDogdW5kZWZpbmVkLFxuICAgICAgd2lkdGhzOiBudWxsXG4gICAgfSlcblxuICAgIHRoaXMudGFibGVDb250ZXh0VmFsdWUgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4gKHtcbiAgICAgICAgY2FjaGVLZXk6IHRoaXMucy50YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXksXG4gICAgICAgIGxhc3RVcGRhdGU6IHRoaXMucy5sYXN0VXBkYXRlLFxuICAgICAgICByZXNpemluZzogdGhpcy5zLnJlc2l6aW5nLFxuICAgICAgICB0YWJsZTogdGhpc1xuICAgICAgfSksXG4gICAgICBbdGhpcy5zLmxhc3RVcGRhdGUsIHRoaXMucy5yZXNpemluZywgdGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleV1cbiAgICApXG5cbiAgICB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnByb3BzLndvcmtwbGFjZSkge1xuICAgICAgICB0aGlzLmxvYWRDdXJyZW50V29ya3BsYWNlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkQ3VycmVudFdvcmtwbGFjZUNvdW50KClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LCBbdGhpcy5wLmN1cnJlbnRVc2VyPy5pZCgpXSlcblxuICAgIHVzZU1lbW8oKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnR0LnRhYmxlU2V0dGluZ3MgJiYgdGhpcy5zLndpZHRoKSB7XG4gICAgICAgIHRoaXMubG9hZFRhYmxlU2V0dGluZygpXG4gICAgICB9XG4gICAgfSwgW3RoaXMucC5jdXJyZW50VXNlcj8uaWQoKSwgdGhpcy5zLndpZHRoXSlcblxuICAgIHVzZU1vZGVsRXZlbnQodGhpcy5zLmN1cnJlbnRXb3JrcGxhY2UsIFwid29ya3BsYWNlX2xpbmtzX2NyZWF0ZWRcIiwgdGhpcy50dC5vbkxpbmtzQ3JlYXRlZClcbiAgICB1c2VNb2RlbEV2ZW50KHRoaXMucy5jdXJyZW50V29ya3BsYWNlLCBcIndvcmtwbGFjZV9saW5rc19kZXN0cm95ZWRcIiwgdGhpcy50dC5vbkxpbmtzRGVzdHJveWVkKVxuXG4gICAgbGV0IGNvbGxlY3Rpb25SZWFkeSA9IHRydWVcbiAgICBsZXQgc2VsZWN0XG5cbiAgICBpZiAoIXRoaXMucy5wcmVwYXJlZENvbHVtbnMpIHtcbiAgICAgIGNvbGxlY3Rpb25SZWFkeSA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKGNvbGxlY3Rpb25SZWFkeSkge1xuICAgICAgc2VsZWN0ID0gc2VsZWN0Q2FsY3VsYXRvcih7dGFibGU6IHRoaXN9KVxuICAgIH1cblxuICAgIHRoaXMuY29sbGVjdGlvbiA9IHVzZUNvbGxlY3Rpb24oe1xuICAgICAgYWJpbGl0aWVzOiB0aGlzLmFiaWxpdGllc1RvTG9hZCgpLFxuICAgICAgZGVmYXVsdFBhcmFtczogdGhpcy5wcm9wcy5kZWZhdWx0UGFyYW1zLFxuICAgICAgY29sbGVjdGlvbjogdGhpcy5wcm9wcy5jb2xsZWN0aW9uLFxuICAgICAgZ3JvdXBCeTogdGhpcy5wcm9wcy5ncm91cEJ5LFxuICAgICAgaWZDb25kaXRpb246IGNvbGxlY3Rpb25SZWFkeSxcbiAgICAgIG1vZGVsQ2xhc3M6IHRoaXMucHJvcHMubW9kZWxDbGFzcyxcbiAgICAgIG9uTW9kZWxzTG9hZGVkOiB0aGlzLnByb3BzLm9uTW9kZWxzTG9hZGVkLFxuICAgICAgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudDogdGhpcy5wcm9wcy5ub1JlY29yZHNBdmFpbGFibGVDb250ZW50LFxuICAgICAgbm9SZWNvcmRzRm91bmRDb250ZW50OiB0aGlzLnByb3BzLm5vUmVjb3Jkc0ZvdW5kQ29udGVudCxcbiAgICAgIHBhZ2luYXRpb246IHRydWUsXG4gICAgICBwcmVsb2FkczogdGhpcy5zdGF0ZS5wcmVsb2FkLFxuICAgICAgcXVlcnlNZXRob2Q6IHRoaXMucHJvcHMucXVlcnlNZXRob2QsXG4gICAgICBxdWVyeU5hbWUsXG4gICAgICBzZWxlY3QsXG4gICAgICBzZWxlY3RDb2x1bW5zOiB0aGlzLnByb3BzLnNlbGVjdENvbHVtbnNcbiAgICB9KVxuICAgIHRoaXMucXVlcnlXaXRob3V0UGFnaW5hdGlvbiA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiB0aGlzLmNvbGxlY3Rpb24/LnF1ZXJ5Py5jbG9uZSgpPy5leGNlcHQoXCJwYWdlXCIpLFxuICAgICAgW3RoaXMuY29sbGVjdGlvbi5xdWVyeV1cbiAgICApXG5cbiAgICB1c2VFdmVudEVtaXR0ZXIodGhpcy50dC5kcmFnZ2FibGVTb3J0RXZlbnRzLCBcIm9uRHJhZ1N0YXJ0XCIsIHRoaXMudHQub25EcmFnU3RhcnQpXG4gICAgdXNlRXZlbnRFbWl0dGVyKHRoaXMudHQuZHJhZ2dhYmxlU29ydEV2ZW50cywgXCJvbkRyYWdFbmRBbmltYXRpb25cIiwgdGhpcy50dC5vbkRyYWdFbmRBbmltYXRpb24pXG4gICAgdXNlRXZlbnRFbWl0dGVyKHRoaXMudHQuZXZlbnRzLCBcImNvbHVtblZpc2liaWxpdHlVcGRhdGVkXCIsIHRoaXMudHQub25Db2x1bW5WaXNpYmlsaXR5VXBkYXRlZClcbiAgfVxuXG4gIG9uQ29sdW1uVmlzaWJpbGl0eVVwZGF0ZWQgPSAoKSA9PiB0aGlzLnNldFN0YXRlKHtjb2x1bW5zVG9TaG93OiB0aGlzLmdldENvbHVtbnNUb1Nob3codGhpcy5zLmNvbHVtbnMpLCBsYXN0VXBkYXRlOiBuZXcgRGF0ZSgpfSlcbiAgb25EcmFnU3RhcnQgPSAoe2l0ZW19KSA9PiBpdGVtLmFuaW1hdGVkWkluZGV4LnNldFZhbHVlKDk5OTkpXG4gIG9uRHJhZ0VuZEFuaW1hdGlvbiA9ICh7aXRlbX0pID0+IGl0ZW0uYW5pbWF0ZWRaSW5kZXguc2V0VmFsdWUoMClcblxuICBhc3luYyBsb2FkQ3VycmVudFdvcmtwbGFjZSgpIHtcbiAgICBjb25zdCBXb3JrcGxhY2UgPSBtb2RlbENsYXNzUmVxdWlyZShcIldvcmtwbGFjZVwiKVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFdvcmtwbGFjZS5jdXJyZW50KClcbiAgICBjb25zdCBjdXJyZW50V29ya3BsYWNlID0gZGlnZyhyZXN1bHQsIFwiY3VycmVudFwiLCAwKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7Y3VycmVudFdvcmtwbGFjZX0pXG4gIH1cblxuICBhc3luYyBsb2FkQ3VycmVudFdvcmtwbGFjZUNvdW50KCkge1xuICAgIGNvbnN0IFdvcmtwbGFjZUxpbmsgPSBtb2RlbENsYXNzUmVxdWlyZShcIldvcmtwbGFjZUxpbmtcIilcbiAgICBjb25zdCBjdXJyZW50V29ya3BsYWNlQ291bnQgPSBhd2FpdCBXb3JrcGxhY2VMaW5rXG4gICAgICAucmFuc2Fjayh7XG4gICAgICAgIHJlc291cmNlX3R5cGVfZXE6IHRoaXMucC5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZSxcbiAgICAgICAgd29ya3BsYWNlX2lkX2VxOiB0aGlzLnMuY3VycmVudFdvcmtwbGFjZS5pZCgpXG4gICAgICB9KVxuICAgICAgLmNvdW50KClcblxuICAgIHRoaXMuc2V0U3RhdGUoe2N1cnJlbnRXb3JrcGxhY2VDb3VudH0pXG4gIH1cblxuICBnZXRDb2x1bW5zVG9TaG93KGNvbHVtbnMpIHtcbiAgICByZXR1cm4gY29sdW1uc1xuICAgICAgLmZpbHRlcigoe2NvbHVtbiwgdGFibGVTZXR0aW5nQ29sdW1ufSkgPT4gY29sdW1uVmlzaWJsZShjb2x1bW4sIHRhYmxlU2V0dGluZ0NvbHVtbikpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS50YWJsZVNldHRpbmdDb2x1bW4ucG9zaXRpb24oKSAtIGIudGFibGVTZXR0aW5nQ29sdW1uLnBvc2l0aW9uKCkpXG4gIH1cblxuICBhc3luYyBsb2FkVGFibGVTZXR0aW5nKCkge1xuICAgIHRoaXMudGFibGVTZXR0aW5ncyA9IG5ldyBUYWJsZVNldHRpbmdzKHt0YWJsZTogdGhpc30pXG5cbiAgICBjb25zdCB0YWJsZVNldHRpbmcgPSBhd2FpdCB0aGlzLnRhYmxlU2V0dGluZ3MubG9hZEV4aXN0aW5nT3JDcmVhdGVUYWJsZVNldHRpbmdzKClcbiAgICBjb25zdCB7Y29sdW1ucywgcHJlbG9hZH0gPSB0aGlzLnRhYmxlU2V0dGluZ3MucHJlcGFyZWRDb2x1bW5zKHRhYmxlU2V0dGluZylcbiAgICBjb25zdCB7d2lkdGh9ID0gdGhpcy5zXG4gICAgY29uc3Qgd2lkdGhzID0gbmV3IFdpZHRocyh7Y29sdW1ucywgdGFibGU6IHRoaXMsIHdpZHRofSlcbiAgICBjb25zdCBjb2x1bW5zVG9TaG93ID0gdGhpcy5nZXRDb2x1bW5zVG9TaG93KGNvbHVtbnMpXG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGNvbHVtbnMsXG4gICAgICBjb2x1bW5zVG9TaG93LFxuICAgICAgcHJlcGFyZWRDb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgcHJlbG9hZDogdGhpcy5tZXJnZWRQcmVsb2FkcyhwcmVsb2FkKSxcbiAgICAgIHRhYmxlU2V0dGluZyxcbiAgICAgIHRhYmxlU2V0dGluZ0xvYWRlZDogdHJ1ZSxcbiAgICAgIHRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleTogdGFibGVTZXR0aW5nLmZ1bGxDYWNoZUtleSgpLFxuICAgICAgd2lkdGhzXG4gICAgfSlcbiAgfVxuXG4gIHVwZGF0ZVNldHRpbmdzRnVsbENhY2hlS2V5ID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSh7dGFibGVTZXR0aW5nRnVsbENhY2hlS2V5OiB0aGlzLnN0YXRlLnRhYmxlU2V0dGluZy5mdWxsQ2FjaGVLZXkoKX0pXG5cbiAgY29sdW1uc0FzQXJyYXkgPSAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLmNvbHVtbnMgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5jb2x1bW5zKClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jb2x1bW5zXG4gIH1cblxuICBtZXJnZWRQcmVsb2FkcyhwcmVsb2FkKSB7XG4gICAgY29uc3Qge3ByZWxvYWRzfSA9IHRoaXMucHJvcHNcbiAgICBsZXQgbWVyZ2VkUHJlbG9hZHMgPSBbXVxuXG4gICAgaWYgKHByZWxvYWRzKSBtZXJnZWRQcmVsb2FkcyA9IG1lcmdlZFByZWxvYWRzLmNvbmNhdChwcmVsb2FkcylcbiAgICBpZiAocHJlbG9hZCkgbWVyZ2VkUHJlbG9hZHMgPSBtZXJnZWRQcmVsb2Fkcy5jb25jYXQocHJlbG9hZClcblxuICAgIHJldHVybiB1bmlxdW5pemUobWVyZ2VkUHJlbG9hZHMpXG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHttb2RlbENsYXNzLCBub1JlY29yZHNBdmFpbGFibGVDb250ZW50LCBub1JlY29yZHNGb3VuZENvbnRlbnR9ID0gdGhpcy5wXG4gICAgY29uc3Qge2NvbGxlY3Rpb24sIGN1cnJlbnRVc2VyfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7cXVlcnlOYW1lLCBxdWVyeVNOYW1lLCBzaG93RmlsdGVyc30gPSB0aGlzLnNcbiAgICBjb25zdCB7XG4gICAgICBtb2RlbHMsXG4gICAgICBvdmVyYWxsQ291bnQsXG4gICAgICBxUGFyYW1zLFxuICAgICAgcXVlcnksXG4gICAgICByZXN1bHQsXG4gICAgICBzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCxcbiAgICAgIHNob3dOb1JlY29yZHNGb3VuZENvbnRlbnRcbiAgICB9ID0gZGlncyhcbiAgICAgIHRoaXMuY29sbGVjdGlvbixcbiAgICAgIFwibW9kZWxzXCIsXG4gICAgICBcIm92ZXJhbGxDb3VudFwiLFxuICAgICAgXCJxUGFyYW1zXCIsXG4gICAgICBcInF1ZXJ5XCIsXG4gICAgICBcInJlc3VsdFwiLFxuICAgICAgXCJzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudFwiLFxuICAgICAgXCJzaG93Tm9SZWNvcmRzRm91bmRDb250ZW50XCJcbiAgICApXG5cbiAgICBpZiAoY29sbGVjdGlvbiAmJiBjb2xsZWN0aW9uLmFyZ3MubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWUgIT0gbW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1vZGVsIGNsYXNzIGZyb20gY29sbGVjdGlvbiAnJHtjb2xsZWN0aW9uLmFyZ3MubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWV9JyBgICtcbiAgICAgICAgYGRpZG4ndCBtYXRjaCBtb2RlbCBjbGFzcyBvbiB0YWJsZTogJyR7bW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWV9J2BcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgZGF0YVNldD17e2NsYXNzOiB0aGlzLmNsYXNzTmFtZSgpfX0gb25MYXlvdXQ9e3RoaXMudHQub25Db250YWluZXJMYXlvdXR9IHN0eWxlPXt0aGlzLnByb3BzLnN0eWxlcz8uY29udGFpbmVyfT5cbiAgICAgICAge3Nob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50ICYmXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsaXZlLXRhYmxlLS1uby1yZWNvcmRzLWF2YWlsYWJsZS1jb250ZW50XCI+XG4gICAgICAgICAgICB7bm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCh7bW9kZWxzLCBxUGFyYW1zLCBvdmVyYWxsQ291bnR9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICB7c2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudCAmJlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGl2ZS10YWJsZS0tbm8tcmVjb3Jkcy1mb3VuZC1jb250ZW50XCI+XG4gICAgICAgICAgICB7bm9SZWNvcmRzRm91bmRDb250ZW50KHttb2RlbHMsIHFQYXJhbXMsIG92ZXJhbGxDb3VudH0pfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIHtzaG93RmlsdGVycyAmJlxuICAgICAgICAgIDxGaWx0ZXJzIGN1cnJlbnRVc2VyPXtjdXJyZW50VXNlcn0gbW9kZWxDbGFzcz17bW9kZWxDbGFzc30gcXVlcnlOYW1lPXtxdWVyeU5hbWV9IHF1ZXJ5U05hbWU9e3F1ZXJ5U05hbWV9IC8+XG4gICAgICAgIH1cbiAgICAgICAge3FQYXJhbXMgJiYgcXVlcnkgJiYgcmVzdWx0ICYmIG1vZGVscyAmJiAhc2hvd05vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQgJiYgIXNob3dOb1JlY29yZHNGb3VuZENvbnRlbnQgJiZcbiAgICAgICAgICB0aGlzLmNhcmRPclRhYmxlKClcbiAgICAgICAgfVxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIGFiaWxpdGllc1RvTG9hZCAoKSB7XG4gICAgY29uc3QgYWJpbGl0aWVzVG9Mb2FkID0ge31cbiAgICBjb25zdCB7YWJpbGl0aWVzLCBtb2RlbENsYXNzfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCBvd25BYmlsaXRpZXMgPSBbXVxuXG4gICAgaWYgKHRoaXMucHJvcHMuZGVzdHJveUVuYWJsZWQpIG93bkFiaWxpdGllcy5wdXNoKFwiZGVzdHJveVwiKVxuICAgIGlmICh0aGlzLnByb3BzLmVkaXRNb2RlbFBhdGgpIG93bkFiaWxpdGllcy5wdXNoKFwiZWRpdFwiKVxuICAgIGlmICh0aGlzLnByb3BzLnZpZXdNb2RlbFBhdGgpIG93bkFiaWxpdGllcy5wdXNoKFwic2hvd1wiKVxuXG4gICAgaWYgKG93bkFiaWxpdGllcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtb2RlbENsYXNzTmFtZSA9IGRpZ2cobW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLCBcIm5hbWVcIilcblxuICAgICAgYWJpbGl0aWVzVG9Mb2FkW21vZGVsQ2xhc3NOYW1lXSA9IG93bkFiaWxpdGllc1xuICAgIH1cblxuICAgIGlmIChhYmlsaXRpZXMpIHtcbiAgICAgIGZvciAoY29uc3QgbW9kZWxOYW1lIGluIGFiaWxpdGllcykge1xuICAgICAgICBpZiAoIShtb2RlbE5hbWUgaW4gYWJpbGl0aWVzVG9Mb2FkKSkge1xuICAgICAgICAgIGFiaWxpdGllc1RvTG9hZFttb2RlbE5hbWVdID0gW11cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgYWJpbGl0eSBvZiBhYmlsaXRpZXNbbW9kZWxOYW1lXSkge1xuICAgICAgICAgIGFiaWxpdGllc1RvTG9hZFttb2RlbE5hbWVdLnB1c2goYWJpbGl0eSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhYmlsaXRpZXNUb0xvYWRcbiAgfVxuXG4gIGNhcmRPclRhYmxlICgpIHtcbiAgICBjb25zdCB7XG4gICAgICBhYmlsaXRpZXMsXG4gICAgICBhY3Rpb25zQ29udGVudCxcbiAgICAgIGFwcEhpc3RvcnksXG4gICAgICBjYXJkLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sbGVjdGlvbixcbiAgICAgIGNvbHVtbnMsXG4gICAgICBjb250cm9scyxcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgZGVmYXVsdERhdGVGb3JtYXROYW1lLFxuICAgICAgZGVmYXVsdERhdGVUaW1lRm9ybWF0TmFtZSxcbiAgICAgIGRlZmF1bHRQYXJhbXMsXG4gICAgICBkZXN0cm95RW5hYmxlZCxcbiAgICAgIGRlc3Ryb3lNZXNzYWdlLFxuICAgICAgZWRpdE1vZGVsUGF0aCxcbiAgICAgIGZpbHRlckNhcmQsXG4gICAgICBmaWx0ZXJDb250ZW50LFxuICAgICAgZmlsdGVyU3VibWl0QnV0dG9uLFxuICAgICAgZmlsdGVyU3VibWl0TGFiZWwsXG4gICAgICBncm91cEJ5LFxuICAgICAgaGVhZGVyLFxuICAgICAgaWRlbnRpZmllcixcbiAgICAgIG1vZGVsQ2xhc3MsXG4gICAgICBub1JlY29yZHNBdmFpbGFibGVDb250ZW50LFxuICAgICAgbm9SZWNvcmRzRm91bmRDb250ZW50LFxuICAgICAgb25Nb2RlbHNMb2FkZWQsXG4gICAgICBwYWdpbmF0ZUNvbnRlbnQsXG4gICAgICBwYWdpbmF0aW9uQ29tcG9uZW50LFxuICAgICAgcHJlbG9hZHMsXG4gICAgICBxdWVyeU1ldGhvZCxcbiAgICAgIHF1ZXJ5TmFtZSxcbiAgICAgIHNlbGVjdCxcbiAgICAgIHNlbGVjdENvbHVtbnMsXG4gICAgICBzdHlsZVVJLFxuICAgICAgdmlld01vZGVsUGF0aCxcbiAgICAgIHdvcmtwbGFjZSxcbiAgICAgIC4uLnJlc3RQcm9wc1xuICAgIH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge21vZGVscywgcVBhcmFtcywgcXVlcnksIHJlc3VsdH0gPSBkaWdzKHRoaXMuY29sbGVjdGlvbiwgXCJtb2RlbHNcIiwgXCJxUGFyYW1zXCIsIFwicXVlcnlcIiwgXCJyZXN1bHRcIilcblxuICAgIGxldCBoZWFkZXJDb250ZW50LCBQYWdpbmF0aW9uQ29tcG9uZW50XG5cbiAgICBpZiAodHlwZW9mIGhlYWRlciA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGhlYWRlckNvbnRlbnQgPSBoZWFkZXIoe21vZGVscywgcVBhcmFtcywgcXVlcnksIHJlc3VsdH0pXG4gICAgfSBlbHNlIGlmIChoZWFkZXIpIHtcbiAgICAgIGhlYWRlckNvbnRlbnQgPSBoZWFkZXJcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyQ29udGVudCA9IG1vZGVsQ2xhc3MubW9kZWxOYW1lKCkuaHVtYW4oe2NvdW50OiAyfSlcbiAgICB9XG5cbiAgICBpZiAoIXBhZ2luYXRlQ29udGVudCkge1xuICAgICAgaWYgKHBhZ2luYXRpb25Db21wb25lbnQpIHtcbiAgICAgICAgUGFnaW5hdGlvbkNvbXBvbmVudCA9IHBhZ2luYXRpb25Db21wb25lbnRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFBhZ2luYXRpb25Db21wb25lbnQgPSBQYWdpbmF0ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZsYXRMaXN0U3R5bGUgPSB7XG4gICAgICBvdmVyZmxvd1g6IFwiYXV0b1wiXG4gICAgfVxuXG4gICAgaWYgKHN0eWxlVUkpIHtcbiAgICAgIGZsYXRMaXN0U3R5bGUuYm9yZGVyID0gXCIxcHggc29saWQgI2RiZGJkYlwiXG4gICAgICBmbGF0TGlzdFN0eWxlLmJvcmRlclJhZGl1cyA9IDVcbiAgICB9XG5cbiAgICBjb25zdCBmbGF0TGlzdCA9IChcbiAgICAgIDxUYWJsZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3RoaXMudHQudGFibGVDb250ZXh0VmFsdWV9PlxuICAgICAgICA8RmxhdExpc3RcbiAgICAgICAgICBkYXRhPXttb2RlbHN9XG4gICAgICAgICAgZGF0YVNldD17e1xuICAgICAgICAgICAgY2xhc3M6IGNsYXNzTmFtZXMoXCJhcGktbWFrZXItLXRhYmxlXCIsIGNsYXNzTmFtZSksXG4gICAgICAgICAgICBjYWNoZUtleTogdGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleSxcbiAgICAgICAgICAgIGxhc3RVcGRhdGU6IHRoaXMucy5sYXN0VXBkYXRlXG4gICAgICAgICAgfX1cbiAgICAgICAgICBleHRyYURhdGE9e3RoaXMucy5sYXN0VXBkYXRlfVxuICAgICAgICAgIGtleUV4dHJhY3Rvcj17dGhpcy50dC5rZXlFeHRyYXRvcn1cbiAgICAgICAgICBMaXN0SGVhZGVyQ29tcG9uZW50PXtMaXN0SGVhZGVyQ29tcG9uZW50fVxuICAgICAgICAgIHJlbmRlckl0ZW09e3RoaXMudHQucmVuZGVySXRlbX1cbiAgICAgICAgICBzaG93c0hvcml6b250YWxTY3JvbGxJbmRpY2F0b3JcbiAgICAgICAgICBzdHlsZT17ZmxhdExpc3RTdHlsZX1cbiAgICAgICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgICAvPlxuICAgICAgPC9UYWJsZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtmaWx0ZXJDb250ZW50ICYmIGZpbHRlckNhcmQgJiZcbiAgICAgICAgICA8Q2FyZCBjbGFzc05hbWU9XCJsaXZlLXRhYmxlLS1maWx0ZXItY2FyZCBtYi00XCI+XG4gICAgICAgICAgICB7dGhpcy5maWx0ZXJGb3JtKCl9XG4gICAgICAgICAgPC9DYXJkPlxuICAgICAgICB9XG4gICAgICAgIHtmaWx0ZXJDb250ZW50ICYmICFmaWx0ZXJDYXJkICYmXG4gICAgICAgICAgdGhpcy5maWx0ZXJGb3JtKClcbiAgICAgICAgfVxuICAgICAgICB7Y2FyZCAmJlxuICAgICAgICAgIDxDYXJkXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXCJsaXZlLXRhYmxlLS10YWJsZS1jYXJkXCIsIFwibWItNFwiLCBjbGFzc05hbWUpfVxuICAgICAgICAgICAgY29udHJvbHM9e3RoaXMudGFibGVDb250cm9scygpfVxuICAgICAgICAgICAgaGVhZGVyPXtoZWFkZXJDb250ZW50fVxuICAgICAgICAgICAgZm9vdGVyPXt0aGlzLnRhYmxlRm9vdGVyKCl9XG4gICAgICAgICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtmbGF0TGlzdH1cbiAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgIH1cbiAgICAgICAgeyFjYXJkICYmIGZsYXRMaXN0fVxuICAgICAgICB7cmVzdWx0ICYmIFBhZ2luYXRpb25Db21wb25lbnQgJiZcbiAgICAgICAgICA8UGFnaW5hdGlvbkNvbXBvbmVudCByZXN1bHQ9e3Jlc3VsdH0gLz5cbiAgICAgICAgfVxuICAgICAgICB7cmVzdWx0ICYmIHBhZ2luYXRlQ29udGVudCAmJlxuICAgICAgICAgIHBhZ2luYXRlQ29udGVudCh7cmVzdWx0fSlcbiAgICAgICAgfVxuICAgICAgPC8+XG4gICAgKVxuICB9XG5cbiAgb25Db250YWluZXJMYXlvdXQgPSAoZSkgPT4ge1xuICAgIGNvbnN0IHt3aWR0aH0gPSBlLm5hdGl2ZUV2ZW50LmxheW91dFxuICAgIGNvbnN0IHt3aWR0aHN9ID0gdGhpcy5zXG5cbiAgICB0aGlzLnNldFN0YXRlKHt3aWR0aH0pXG4gICAgaWYgKHdpZHRocykgd2lkdGhzLnRhYmxlV2lkdGggPSB3aWR0aFxuICB9XG5cbiAgb25MaW5rc0NyZWF0ZWQgPSAoe2FyZ3N9KSA9PiB7XG4gICAgY29uc3QgbW9kZWxDbGFzc05hbWUgPSB0aGlzLnAubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWVcblxuICAgIGlmIChhcmdzLmNyZWF0ZWRbbW9kZWxDbGFzc05hbWVdKSB7XG4gICAgICBjb25zdCBhbW91bnRDcmVhdGVkID0gYXJncy5jcmVhdGVkW21vZGVsQ2xhc3NOYW1lXS5sZW5ndGhcblxuICAgICAgdGhpcy5zZXRTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICBjdXJyZW50V29ya3BsYWNlQ291bnQ6IHByZXZTdGF0ZS5jdXJyZW50V29ya3BsYWNlQ291bnQgKyBhbW91bnRDcmVhdGVkXG4gICAgICB9KSlcbiAgICB9XG4gIH1cblxuICBvbkxpbmtzRGVzdHJveWVkID0gKHthcmdzfSkgPT4ge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3NOYW1lID0gdGhpcy5wLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKS5uYW1lXG5cbiAgICBpZiAoYXJncy5kZXN0cm95ZWRbbW9kZWxDbGFzc05hbWVdKSB7XG4gICAgICBjb25zdCBhbW91bnREZXN0cm95ZWQgPSBhcmdzLmRlc3Ryb3llZFttb2RlbENsYXNzTmFtZV0ubGVuZ3RoXG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgY3VycmVudFdvcmtwbGFjZUNvdW50OiBwcmV2U3RhdGUuY3VycmVudFdvcmtwbGFjZUNvdW50IC0gYW1vdW50RGVzdHJveWVkXG4gICAgICB9KSlcbiAgICB9XG4gIH1cblxuICBrZXlFeHRyYXRvciA9IChtb2RlbCkgPT4gYCR7dGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleX0tJHttb2RlbC5pZCgpfWBcblxuICBmaWx0ZXJGb3JtID0gKCkgPT4ge1xuICAgIGNvbnN0IHtmaWx0ZXJGb3JtUmVmLCBzdWJtaXRGaWx0ZXIsIHN1Ym1pdEZpbHRlckRlYm91bmNlfSA9IHRoaXMudHRcbiAgICBjb25zdCB7ZmlsdGVyQ29udGVudCwgZmlsdGVyU3VibWl0QnV0dG9ufSA9IHRoaXMucFxuICAgIGNvbnN0IHtxdWVyeVFOYW1lfSA9IHRoaXMuc1xuICAgIGNvbnN0IHtmaWx0ZXJTdWJtaXRMYWJlbH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge3FQYXJhbXN9ID0gZGlncyh0aGlzLmNvbGxlY3Rpb24sIFwicVBhcmFtc1wiKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxGb3JtIGNsYXNzTmFtZT1cImxpdmUtdGFibGUtLWZpbHRlci1mb3JtXCIgZm9ybVJlZj17ZmlsdGVyRm9ybVJlZn0gb25TdWJtaXQ9e3RoaXMudHQub25GaWx0ZXJGb3JtU3VibWl0fSBzZXRGb3JtPXt0aGlzLnNldFN0YXRlcy5maWx0ZXJGb3JtfT5cbiAgICAgICAge1wic1wiIGluIHFQYXJhbXMgJiZcbiAgICAgICAgICA8aW5wdXQgbmFtZT1cInNcIiB0eXBlPVwiaGlkZGVuXCIgdmFsdWU9e3FQYXJhbXMuc30gLz5cbiAgICAgICAgfVxuICAgICAgICB7ZmlsdGVyQ29udGVudCh7XG4gICAgICAgICAgb25GaWx0ZXJDaGFuZ2VkOiBzdWJtaXRGaWx0ZXIsXG4gICAgICAgICAgb25GaWx0ZXJDaGFuZ2VkV2l0aERlbGF5OiBzdWJtaXRGaWx0ZXJEZWJvdW5jZSxcbiAgICAgICAgICBxUGFyYW1zLFxuICAgICAgICAgIHF1ZXJ5UU5hbWVcbiAgICAgICAgfSl9XG4gICAgICAgIHtmaWx0ZXJTdWJtaXRCdXR0b24gJiZcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeSBsaXZlLXRhYmxlLS1zdWJtaXQtZmlsdGVyLWJ1dHRvblwiXG4gICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgIHN0eWxlPXt7bWFyZ2luVG9wOiBcIjhweFwifX1cbiAgICAgICAgICAgIHZhbHVlPXtmaWx0ZXJTdWJtaXRMYWJlbCB8fCB0aGlzLnQoXCIuZmlsdGVyXCIsIHtkZWZhdWx0VmFsdWU6IFwiRmlsdGVyXCJ9KX1cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICA8L0Zvcm0+XG4gICAgKVxuICB9XG5cbiAgb25GaWx0ZXJDbGlja2VkID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICB0aGlzLnNldFN0YXRlKHtzaG93RmlsdGVyczogIXRoaXMuc3RhdGUuc2hvd0ZpbHRlcnN9KVxuICB9XG5cbiAgb25QZXJQYWdlQ2hhbmdlZCA9IChlKSA9PiB7XG4gICAgY29uc3Qge3F1ZXJ5TmFtZX0gPSB0aGlzLnNcbiAgICBjb25zdCBuZXdQZXJQYWdlVmFsdWUgPSBkaWdnKGUsIFwidGFyZ2V0XCIsIFwidmFsdWVcIilcbiAgICBjb25zdCBwZXJLZXkgPSBgJHtxdWVyeU5hbWV9X3BlcmBcbiAgICBjb25zdCBwYXJhbXNDaGFuZ2UgPSB7fVxuXG4gICAgcGFyYW1zQ2hhbmdlW3BlcktleV0gPSBuZXdQZXJQYWdlVmFsdWVcblxuICAgIFBhcmFtcy5jaGFuZ2VQYXJhbXMocGFyYW1zQ2hhbmdlKVxuICB9XG5cbiAgcmVuZGVySXRlbSA9ICh7aW5kZXgsIGl0ZW06IG1vZGVsfSkgPT4ge1xuICAgIGlmICghdGhpcy5zLnRhYmxlU2V0dGluZ0xvYWRlZCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICB7dGhpcy50KFwiLmxvYWRpbmdfZG90X2RvdF9kb3RcIiwge2RlZmF1bHRWYWx1ZTogXCJMb2FkaW5nLi4uXCJ9KX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPE1vZGVsUm93XG4gICAgICAgIGNhY2hlS2V5PXttb2RlbC5jYWNoZUtleSgpfVxuICAgICAgICBjb2x1bW5zPXt0aGlzLnMuY29sdW1uc1RvU2hvd31cbiAgICAgICAgY29sdW1uV2lkdGhzPXt0aGlzLmNvbHVtbldpZHRocygpfVxuICAgICAgICBldmVudHM9e3RoaXMudHQuZXZlbnRzfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17bW9kZWwuaWQoKX1cbiAgICAgICAgbW9kZWw9e21vZGVsfVxuICAgICAgICB0YWJsZT17dGhpc31cbiAgICAgICAgdGFibGVTZXR0aW5nRnVsbENhY2hlS2V5PXt0aGlzLnMudGFibGVTZXR0aW5nRnVsbENhY2hlS2V5fVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBzdHlsZUZvckNvbHVtbiA9ICh7Y29sdW1uLCBjb2x1bW5JbmRleCwgZXZlbiwgc3R5bGUsIHR5cGV9KSA9PiB7XG4gICAgY29uc3Qge3N0eWxlVUl9ID0gdGhpcy5wXG4gICAgY29uc3QgZGVmYXVsdFN0eWxlID0ge1xuICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICBwYWRkaW5nOiA4LFxuICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCJcbiAgICB9XG5cbiAgICBpZiAoc3R5bGVVSSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihkZWZhdWx0U3R5bGUsIHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBldmVuID8gXCIjZjVmNWY1XCIgOiBcIiNmZmZcIlxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PSBcImFjdGlvbnNcIikge1xuICAgICAgZGVmYXVsdFN0eWxlLmZsZXhEaXJlY3Rpb24gPSBcInJvd1wiXG4gICAgICBkZWZhdWx0U3R5bGUuYWxpZ25JdGVtcyA9IFwiY2VudGVyXCJcblxuICAgICAgaWYgKHRoaXMudHQubWRVcCkge1xuICAgICAgICBkZWZhdWx0U3R5bGUubWFyZ2luTGVmdCA9IFwiYXV0b1wiXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0U3R5bGUubWFyZ2luUmlnaHQgPSBcImF1dG9cIlxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy50dC5tZFVwICYmIHN0eWxlVUkpIHtcbiAgICAgIGRlZmF1bHRTdHlsZS5ib3JkZXJSaWdodCA9IFwiMXB4IHNvbGlkICNkYmRiZGJcIlxuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbFN0eWxlID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIGRlZmF1bHRTdHlsZSxcbiAgICAgIHN0eWxlXG4gICAgKVxuXG4gICAgcmV0dXJuIGFjdHVhbFN0eWxlXG4gIH1cblxuICBzdHlsZUZvckhlYWRlciA9ICh7Y29sdW1uLCBjb2x1bW5JbmRleCwgc3R5bGUsIHR5cGV9KSA9PiB7XG4gICAgY29uc3Qge21kVXB9ID0gdGhpcy50dFxuICAgIGNvbnN0IGRlZmF1bHRTdHlsZSA9IHtcbiAgICAgIGZsZXhEaXJlY3Rpb246IFwicm93XCIsXG4gICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgcGFkZGluZzogOFxuICAgIH1cblxuICAgIGlmICh0eXBlICE9IFwiYWN0aW9uc1wiICYmIG1kVXAgJiYgdGhpcy5wLnN0eWxlVUkpIHtcbiAgICAgIGRlZmF1bHRTdHlsZS5ib3JkZXJSaWdodCA9IFwiMXB4IHNvbGlkICNkYmRiZGJcIlxuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbFN0eWxlID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIGRlZmF1bHRTdHlsZSxcbiAgICAgIHN0eWxlXG4gICAgKVxuXG4gICAgcmV0dXJuIGFjdHVhbFN0eWxlXG4gIH1cblxuICBzdHlsZUZvckhlYWRlclRleHQoKSB7XG4gICAgY29uc3QgYWN0dWFsU3R5bGUgPSB7Zm9udFdlaWdodDogXCJib2xkXCJ9XG5cbiAgICByZXR1cm4gYWN0dWFsU3R5bGVcbiAgfVxuXG4gIHN0eWxlRm9yUm93ID0gKHtldmVufSA9IHt9KSA9PiB7XG4gICAgY29uc3QgYWN0dWFsU3R5bGUgPSB7XG4gICAgICBmbGV4OiAxLFxuICAgICAgYWxpZ25JdGVtczogXCJzdHJldGNoXCJcbiAgICB9XG5cbiAgICBpZiAoZXZlbiAmJiB0aGlzLnAuc3R5bGVVSSkge1xuICAgICAgYWN0dWFsU3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCIjZjVmNWY1XCJcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0dWFsU3R5bGVcbiAgfVxuXG4gIHN0eWxlRm9yUm93SGVhZGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IGFjdHVhbFN0eWxlID0ge1xuICAgICAgZmxleDogMSxcbiAgICAgIGFsaWduSXRlbXM6IFwic3RyZXRjaFwiXG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdHVhbFN0eWxlXG4gIH1cblxuICB0YWJsZUNvbnRyb2xzKCkge1xuICAgIGNvbnN0IHtjb250cm9sc30gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge3Nob3dTZXR0aW5nc30gPSB0aGlzLnNcbiAgICBjb25zdCB7bW9kZWxzLCBxUGFyYW1zLCBxdWVyeSwgcmVzdWx0fSA9IGRpZ3ModGhpcy5jb2xsZWN0aW9uLCBcIm1vZGVsc1wiLCBcInFQYXJhbXNcIiwgXCJxdWVyeVwiLCBcInJlc3VsdFwiKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXt0aGlzLnJvb3RWaWV3U3R5bGUgfHw9IHtmbGV4RGlyZWN0aW9uOiBcInJvd1wifX0+XG4gICAgICAgIHtjb250cm9scyAmJiBjb250cm9scyh7bW9kZWxzLCBxUGFyYW1zLCBxdWVyeSwgcmVzdWx0fSl9XG4gICAgICAgIDxQcmVzc2FibGUgZGF0YVNldD17e2NsYXNzOiBcImZpbHRlci1idXR0b25cIn19IG9uUHJlc3M9e3RoaXMudHQub25GaWx0ZXJDbGlja2VkfT5cbiAgICAgICAgICA8SWNvbiBuYW1lPVwic2VhcmNoXCIgc2l6ZT17MjB9IC8+XG4gICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICB7c2hvd1NldHRpbmdzICYmXG4gICAgICAgICAgICA8U2V0dGluZ3Mgb25SZXF1ZXN0Q2xvc2U9e3RoaXMudHQub25SZXF1ZXN0Q2xvc2VTZXR0aW5nc30gdGFibGU9e3RoaXN9IC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxQcmVzc2FibGUgZGF0YVNldD17dGhpcy5zZXR0aW5nc0J1dHRvbkRhdGFTZXQgfHw9IHtjbGFzczogXCJzZXR0aW5ncy1idXR0b25cIn19IG9uUHJlc3M9e3RoaXMudHQub25TZXR0aW5nc0NsaWNrZWR9PlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImdlYXJcIiBzaXplPXsyMH0gLz5cbiAgICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIHRhYmxlRm9vdGVyKCkge1xuICAgIGNvbnN0IHtyZXN1bHR9ID0gZGlncyh0aGlzLmNvbGxlY3Rpb24sIFwicmVzdWx0XCIpXG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSByZXN1bHQuY3VycmVudFBhZ2UoKVxuICAgIGNvbnN0IHRvdGFsQ291bnQgPSByZXN1bHQudG90YWxDb3VudCgpXG4gICAgY29uc3QgcGVyUGFnZSA9IHJlc3VsdC5wZXJQYWdlKClcbiAgICBjb25zdCB0byA9IE1hdGgubWluKGN1cnJlbnRQYWdlICogcGVyUGFnZSwgdG90YWxDb3VudClcbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBcIlNob3dpbmcgJXtmcm9tfSB0byAle3RvfSBvdXQgb2YgJXt0b3RhbF9jb3VudH0gdG90YWwuXCJcbiAgICBsZXQgZnJvbSA9ICgoY3VycmVudFBhZ2UgLSAxKSAqIHBlclBhZ2UpICsgMVxuXG4gICAgaWYgKHRvID09PSAwKSBmcm9tID0gMFxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXt0aGlzLnJvb3RWaWV3U3R5bGUgfHw9IHtmbGV4RGlyZWN0aW9uOiBcInJvd1wiLCBqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCIsIG1hcmdpblRvcDogMTB9fT5cbiAgICAgICAgPFZpZXcgZGF0YVNldD17dGhpcy5zaG93aW5nQ291bnRzRGF0YVNldCB8fD0ge2NsYXNzOiBcInNob3dpbmctY291bnRzXCJ9fSBzdHlsZT17dGhpcy5zaG93aW5nQ291bnRzU3R5bGUgfHw9IHtmbGV4RGlyZWN0aW9uOiBcInJvd1wifX0+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICB7dGhpcy50KFwiLnNob3dpbmdfZnJvbV90b19vdXRfb2ZfdG90YWxcIiwge2RlZmF1bHRWYWx1ZSwgZnJvbSwgdG8sIHRvdGFsX2NvdW50OiB0b3RhbENvdW50fSl9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIHt0aGlzLnAud29ya3BsYWNlICYmIHRoaXMucy5jdXJyZW50V29ya3BsYWNlQ291bnQgIT09IG51bGwgJiZcbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt0aGlzLnhTZWxlY3RlZFRleHRTdHlsZSB8fD0ge21hcmdpbkxlZnQ6IDN9fT5cbiAgICAgICAgICAgICAge3RoaXMudChcIi54X3NlbGVjdGVkXCIsIHtkZWZhdWx0VmFsdWU6IFwiJXtzZWxlY3RlZH0gc2VsZWN0ZWQuXCIsIHNlbGVjdGVkOiB0aGlzLnMuY3VycmVudFdvcmtwbGFjZUNvdW50fSl9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgfVxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInBlci1wYWdlLXNlbGVjdFwiXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3BlclBhZ2V9XG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy50dC5vblBlclBhZ2VDaGFuZ2VkfVxuICAgICAgICAgICAgb3B0aW9ucz17cGFnaW5hdGlvbk9wdGlvbnN9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIGNsYXNzTmFtZSgpIHtcbiAgICBjb25zdCBjbGFzc05hbWVzID0gW1wiYXBpLW1ha2VyLS10YWJsZVwiXVxuXG4gICAgaWYgKHRoaXMucHJvcHMuY2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWVzLnB1c2godGhpcy5wcm9wcy5jbGFzc05hbWUpXG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzTmFtZXMuam9pbihcIiBcIilcbiAgfVxuXG4gIGNvbHVtblByb3BzKGNvbHVtbikge1xuICAgIGNvbnN0IHByb3BzID0ge31cblxuICAgIGlmIChjb2x1bW4udGV4dENlbnRlcikge1xuICAgICAgcHJvcHMuc3R5bGUgfHw9IHt9XG4gICAgICBwcm9wcy5zdHlsZS50ZXh0QWxpZ24gPSBcImNlbnRlclwiXG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbi50ZXh0UmlnaHQpIHtcbiAgICAgIHByb3BzLnN0eWxlIHx8PSB7fVxuICAgICAgcHJvcHMuc3R5bGUudGV4dEFsaWduID0gXCJyaWdodFwiXG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BzXG4gIH1cblxuICBoZWFkZXJQcm9wcyhjb2x1bW4pIHtcbiAgICBjb25zdCBwcm9wcyA9IHt9XG5cbiAgICBpZiAoY29sdW1uLnRleHRDZW50ZXIpIHtcbiAgICAgIHByb3BzLnN0eWxlIHx8PSB7fVxuICAgICAgcHJvcHMuc3R5bGUuanVzdGlmeUNvbnRlbnQgPSBcImNlbnRlclwiXG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbi50ZXh0UmlnaHQpIHtcbiAgICAgIHByb3BzLnN0eWxlIHx8PSB7fVxuICAgICAgcHJvcHMuc3R5bGUuanVzdGlmeUNvbnRlbnQgPSBcImVuZFwiXG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BzXG4gIH1cblxuICBjb2x1bW5XaWR0aHMoKSB7XG4gICAgY29uc3QgY29sdW1uV2lkdGhzID0ge31cblxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRoaXMucy5wcmVwYXJlZENvbHVtbnMpIHtcbiAgICAgIGNvbHVtbldpZHRoc1tjb2x1bW4udGFibGVTZXR0aW5nQ29sdW1uLmlkZW50aWZpZXIoKV0gPSBjb2x1bW4ud2lkdGhcbiAgICB9XG5cbiAgICByZXR1cm4gY29sdW1uV2lkdGhzXG4gIH1cblxuICBoZWFkZXJzQ29udGVudEZyb21Db2x1bW5zID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8RHJhZ2dhYmxlU29ydFxuICAgICAgICBkYXRhPXt0aGlzLnMuY29sdW1uc1RvU2hvd31cbiAgICAgICAgZXZlbnRzPXt0aGlzLnR0LmRyYWdnYWJsZVNvcnRFdmVudHN9XG4gICAgICAgIGhvcml6b250YWxcbiAgICAgICAga2V5RXh0cmFjdG9yPXt0aGlzLnR0LmRyYWdMaXN0a2V5RXh0cmFjdG9yfVxuICAgICAgICBvbkl0ZW1Nb3ZlZD17dGhpcy50dC5vbkl0ZW1Nb3ZlZH1cbiAgICAgICAgb25SZW9yZGVyZWQ9e3RoaXMudHQub25SZW9yZGVyZWR9XG4gICAgICAgIHJlbmRlckl0ZW09e3RoaXMudHQuZHJhZ0xpc3RSZW5kZXJJdGVtQ29udGVudH1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgZHJhZ0xpc3RDYWNoZUtleUV4dHJhY3RvciA9IChpdGVtKSA9PiBgJHtpdGVtLnRhYmxlU2V0dGluZ0NvbHVtbi5pZGVudGlmaWVyKCl9LSR7dGhpcy5zLnJlc2l6aW5nfWBcbiAgZHJhZ0xpc3RrZXlFeHRyYWN0b3IgPSAoaXRlbSkgPT4gaXRlbS50YWJsZVNldHRpbmdDb2x1bW4uaWRlbnRpZmllcigpXG5cbiAgb25JdGVtTW92ZWQgPSAoe2FuaW1hdGlvbkFyZ3MsIGl0ZW1JbmRleCwgeCwgeX0pID0+IHtcbiAgICBjb25zdCBhbmltYXRlZFBvc2l0aW9uID0gZGlnZyh0aGlzLCBcInNcIiwgXCJjb2x1bW5zVG9TaG93XCIsIGl0ZW1JbmRleCwgXCJhbmltYXRlZFBvc2l0aW9uXCIpXG5cbiAgICBpZiAoYW5pbWF0aW9uQXJncykge1xuICAgICAgQW5pbWF0ZWQudGltaW5nKGFuaW1hdGVkUG9zaXRpb24sIGFuaW1hdGlvbkFyZ3MpLnN0YXJ0KClcbiAgICB9IGVsc2Uge1xuICAgICAgYW5pbWF0ZWRQb3NpdGlvbi5zZXRWYWx1ZSh7eCwgeX0pXG4gICAgfVxuICB9XG5cbiAgb25SZW9yZGVyZWQgPSBhc3luYyAoe2Zyb21JdGVtLCBmcm9tUG9zaXRpb24sIHRvSXRlbSwgdG9Qb3NpdGlvbn0pID0+IHtcbiAgICBpZiAoZnJvbVBvc2l0aW9uID09IHRvUG9zaXRpb24pIHJldHVybiAvLyBPbmx5IGRvIHJlcXVlc3RzIGFuZCBxdWVyaWVzIGlmIGNoYW5nZWRcblxuICAgIGNvbnN0IFRhYmxlU2V0dGluZ0NvbHVtbiA9IGZyb21JdGVtLnRhYmxlU2V0dGluZ0NvbHVtbi5jb25zdHJ1Y3RvclxuICAgIGNvbnN0IHRvQ29sdW1uID0gYXdhaXQgVGFibGVTZXR0aW5nQ29sdW1uLmZpbmQodG9JdGVtLnRhYmxlU2V0dGluZ0NvbHVtbi5pZCgpKSAvLyBOZWVkIHRvIGxvYWQgbGF0ZXN0IHBvc2l0aW9uIGJlY2F1c2UgQWN0c0FzTGlzdCBtaWdodCBoYXZlIGNoYW5nZWQgaXRcblxuICAgIGF3YWl0IGZyb21JdGVtLnRhYmxlU2V0dGluZ0NvbHVtbi51cGRhdGUoe3Bvc2l0aW9uOiB0b0NvbHVtbi5wb3NpdGlvbigpfSlcbiAgfVxuXG4gIGRyYWdMaXN0UmVuZGVySXRlbUNvbnRlbnQgPSAoe2lzQWN0aXZlLCBpdGVtLCB0b3VjaFByb3BzfSkgPT4ge1xuICAgIGNvbnN0IHthbmltYXRlZFdpZHRoLCBhbmltYXRlZFpJbmRleCwgY29sdW1uLCB0YWJsZVNldHRpbmdDb2x1bW59ID0gaXRlbVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxIZWFkZXJDb2x1bW5cbiAgICAgICAgYWN0aXZlPXtpc0FjdGl2ZX1cbiAgICAgICAgYW5pbWF0ZWRXaWR0aD17YW5pbWF0ZWRXaWR0aH1cbiAgICAgICAgYW5pbWF0ZWRaSW5kZXg9e2FuaW1hdGVkWkluZGV4fVxuICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAga2V5PXt0YWJsZVNldHRpbmdDb2x1bW4uaWRlbnRpZmllcigpfVxuICAgICAgICByZXNpemluZz17dGhpcy5zLnJlc2l6aW5nfVxuICAgICAgICB0YWJsZT17dGhpc31cbiAgICAgICAgdGFibGVTZXR0aW5nQ29sdW1uPXt0YWJsZVNldHRpbmdDb2x1bW59XG4gICAgICAgIHRvdWNoUHJvcHM9e3RvdWNoUHJvcHN9XG4gICAgICAgIHdpZHRocz17dGhpcy5zLndpZHRoc31cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaGVhZGVyQ2xhc3NOYW1lRm9yQ29sdW1uKGNvbHVtbikge1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbXVxuXG4gICAgaWYgKGNvbHVtbi5jb21tb25Qcm9wcyAmJiBjb2x1bW4uY29tbW9uUHJvcHMuY2xhc3NOYW1lKSBjbGFzc05hbWVzLnB1c2goY29sdW1uLmNvbW1vblByb3BzLmNsYXNzTmFtZSlcbiAgICBpZiAoY29sdW1uLmhlYWRlclByb3BzICYmIGNvbHVtbi5oZWFkZXJQcm9wcy5jbGFzc05hbWUpIGNsYXNzTmFtZXMucHVzaChjb2x1bW4uaGVhZGVyUHJvcHMuY2xhc3NOYW1lKVxuXG4gICAgcmV0dXJuIGNsYXNzTmFtZXNcbiAgfVxuXG4gIGhlYWRlckxhYmVsRm9yQ29sdW1uKGNvbHVtbikge1xuICAgIGNvbnN0IHttb2RlbENsYXNzfSA9IHRoaXMucFxuXG4gICAgaWYgKFwibGFiZWxcIiBpbiBjb2x1bW4pIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uLmxhYmVsID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gY29sdW1uLmxhYmVsKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4ubGFiZWxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY3VycmVudE1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzXG5cbiAgICAvLyBDYWxjdWxhdGUgY3VycmVudCBtb2RlbCBjbGFzcyB0aHJvdWdoIHBhdGhcbiAgICBpZiAoY29sdW1uLnBhdGgpIHtcbiAgICAgIGZvciAoY29uc3QgcGF0aFBhcnQgb2YgY29sdW1uLnBhdGgpIHtcbiAgICAgICAgY29uc3QgcmVsYXRpb25zaGlwcyA9IGRpZ2coY3VycmVudE1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKSwgXCJyZWxhdGlvbnNoaXBzXCIpXG4gICAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IHJlbGF0aW9uc2hpcHMuZmluZCgocmVsYXRpb25zaGlwSW5BcnJheSkgPT4gcmVsYXRpb25zaGlwSW5BcnJheS5uYW1lID09IGluZmxlY3Rpb24udW5kZXJzY29yZShwYXRoUGFydCkpXG5cbiAgICAgICAgY3VycmVudE1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzUmVxdWlyZShkaWdnKHJlbGF0aW9uc2hpcCwgXCJyZXNvdXJjZV9uYW1lXCIpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2x1bW4uYXR0cmlidXRlKSByZXR1cm4gY3VycmVudE1vZGVsQ2xhc3MuaHVtYW5BdHRyaWJ1dGVOYW1lKGNvbHVtbi5hdHRyaWJ1dGUpXG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyAnbGFiZWwnIG9yICdhdHRyaWJ1dGUnIHdhcyBnaXZlblwiKVxuICB9XG5cbiAgb25GaWx0ZXJGb3JtU3VibWl0ID0gKCkgPT4gdGhpcy5zdWJtaXRGaWx0ZXIoKVxuICBvblJlcXVlc3RDbG9zZVNldHRpbmdzID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSh7c2hvd1NldHRpbmdzOiBmYWxzZX0pXG5cbiAgb25TZXR0aW5nc0NsaWNrZWQgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7c2hvd1NldHRpbmdzOiAhdGhpcy5zLnNob3dTZXR0aW5nc30pXG4gIH1cblxuICBzdWJtaXRGaWx0ZXIgPSAoKSA9PiB7XG4gICAgY29uc3Qge2FwcEhpc3Rvcnl9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtxdWVyeVFOYW1lfSA9IHRoaXMuc1xuICAgIGNvbnN0IGNoYW5nZVBhcmFtc1BhcmFtcyA9IHt9XG4gICAgY29uc3QgcVBhcmFtcyA9IHRoaXMucy5maWx0ZXJGb3JtLmFzT2JqZWN0KClcblxuICAgIGlmIChQbGF0Zm9ybS5PUyA9PSBcIndlYlwiKSB7XG4gICAgICBjb25zdCBmaWx0ZXJGb3JtID0gZGlnZyh0aGlzLnR0LmZpbHRlckZvcm1SZWYsIFwiY3VycmVudFwiKVxuICAgICAgY29uc3QgbmF2dGl2ZUZvcm1QYXJhbXMgPSBQYXJhbXMuc2VyaWFsaXplRm9ybShmaWx0ZXJGb3JtKVxuXG4gICAgICBpbmNvcnBvcmF0ZShxUGFyYW1zLCBuYXZ0aXZlRm9ybVBhcmFtcylcbiAgICB9XG5cbiAgICBjaGFuZ2VQYXJhbXNQYXJhbXNbcXVlcnlRTmFtZV0gPSBKU09OLnN0cmluZ2lmeShxUGFyYW1zKVxuXG4gICAgUGFyYW1zLmNoYW5nZVBhcmFtcyhjaGFuZ2VQYXJhbXNQYXJhbXMsIHthcHBIaXN0b3J5fSlcbiAgfVxuXG4gIHN1Ym1pdEZpbHRlckRlYm91bmNlID0gZGVib3VuY2UodGhpcy50dC5zdWJtaXRGaWx0ZXIpXG59KSlcbiJdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVFBLElBQUksRUFBRUMsSUFBSSxRQUFPLFdBQVc7QUFDcEMsT0FBT0MsS0FBSyxJQUFHQyxhQUFhLEVBQUVDLFVBQVUsRUFBRUMsT0FBTyxFQUFFQyxNQUFN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
165
+ ListHeaderComponent.prototype.setup = function () {
166
+ this.useStates({
167
+ lastUpdate: new Date()
168
+ });
169
+ };
170
+ ListHeaderComponent.prototype.render = function () {
171
+ var mdUp = (0, use_breakpoint_js_1.default)().mdUp;
172
+ var tableContextValue = (0, react_1.useContext)(TableContext);
173
+ var table = tableContextValue.table;
174
+ var _b = table.tt, collection = _b.collection, events = _b.events, queryWithoutPagination = _b.queryWithoutPagination, t = _b.t;
175
+ var query = (0, diggerize_1.digs)(collection, "query").query;
176
+ (0, use_event_emitter_js_1.default)(events, "columnVisibilityUpdated", this.tt.onColumnVisibilityUpdated);
177
+ return ((0, jsx_runtime_1.jsxs)(row_1.default, { style: table.styleForRowHeader(), testID: "api-maker/table/header-row", children: [table.p.workplace && table.s.currentWorkplace &&
178
+ (0, jsx_runtime_1.jsxs)(header_1.default, { style: table.styleForHeader({ style: { width: mdUp ? 41 : undefined } }), children: [(0, jsx_runtime_1.jsx)(worker_plugins_check_all_checkbox_1.default, { currentWorkplace: table.s.currentWorkplace, query: queryWithoutPagination, style: this.workerPlguinsCheckAllCheckboxStyle || (this.workerPlguinsCheckAllCheckboxStyle = { marginHorizontal: "auto" }) }), !mdUp &&
179
+ (0, jsx_runtime_1.jsx)(text_1.default, { style: this.selectAllFoundTextStyle || (this.selectAllFoundTextStyle = { marginLeft: 3 }), children: t(".select_all_found", { defaultValue: "Select all found" }) })] }), !mdUp &&
180
+ (0, jsx_runtime_1.jsx)(header_1.default, { style: table.styleForHeader({ style: {} }), children: (0, jsx_runtime_1.jsx)(header_select_1.default, { preparedColumns: table.s.preparedColumns, query: query, table: table }) }), mdUp &&
181
+ (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [table.headersContentFromColumns(), (0, jsx_runtime_1.jsx)(header_1.default, { style: table.styleForHeader({ style: {}, type: "actions" }) })] })] }));
182
+ };
183
+ return ListHeaderComponent;
184
+ }(base_component_js_1.default))));
185
+ exports.default = (0, memo_js_1.default)((0, shape_component_js_1.shapeComponent)((_a = /** @class */ (function (_super) {
186
+ __extends(ApiMakerTable, _super);
187
+ function ApiMakerTable() {
188
+ var _this = _super !== null && _super.apply(this, arguments) || this;
189
+ _this.draggableSortEvents = new events_1.default();
190
+ _this.events = new events_1.default();
191
+ _this.tableSettings = null;
192
+ _this.onColumnVisibilityUpdated = function () { return _this.setState({ columnsToShow: _this.getColumnsToShow(_this.s.columns), lastUpdate: new Date() }); };
193
+ _this.onDragStart = function (_b) {
194
+ var item = _b.item;
195
+ return item.animatedZIndex.setValue(9999);
196
+ };
197
+ _this.onDragEndAnimation = function (_b) {
198
+ var item = _b.item;
199
+ return item.animatedZIndex.setValue(0);
200
+ };
201
+ _this.updateSettingsFullCacheKey = function () { return _this.setState({ tableSettingFullCacheKey: _this.state.tableSetting.fullCacheKey() }); };
202
+ _this.columnsAsArray = function () {
203
+ if (typeof _this.props.columns == "function") {
204
+ return _this.props.columns();
205
+ }
206
+ return _this.props.columns;
207
+ };
208
+ _this.onContainerLayout = function (e) {
209
+ var width = e.nativeEvent.layout.width;
210
+ var widths = _this.s.widths;
211
+ _this.setState({ width: width });
212
+ if (widths)
213
+ widths.tableWidth = width;
214
+ };
215
+ _this.onLinksCreated = function (_b) {
216
+ var args = _b.args;
217
+ var modelClassName = _this.p.modelClass.modelClassData().name;
218
+ if (args.created[modelClassName]) {
219
+ var amountCreated_1 = args.created[modelClassName].length;
220
+ _this.setState(function (prevState) { return ({
221
+ currentWorkplaceCount: prevState.currentWorkplaceCount + amountCreated_1
222
+ }); });
223
+ }
224
+ };
225
+ _this.onLinksDestroyed = function (_b) {
226
+ var args = _b.args;
227
+ var modelClassName = _this.p.modelClass.modelClassData().name;
228
+ if (args.destroyed[modelClassName]) {
229
+ var amountDestroyed_1 = args.destroyed[modelClassName].length;
230
+ _this.setState(function (prevState) { return ({
231
+ currentWorkplaceCount: prevState.currentWorkplaceCount - amountDestroyed_1
232
+ }); });
233
+ }
234
+ };
235
+ _this.keyExtrator = function (model) { return "".concat(_this.s.tableSettingFullCacheKey, "-").concat(model.id()); };
236
+ _this.filterForm = function () {
237
+ var _b = _this.tt, filterFormRef = _b.filterFormRef, submitFilter = _b.submitFilter, submitFilterDebounce = _b.submitFilterDebounce;
238
+ var _c = _this.p, filterContent = _c.filterContent, filterSubmitButton = _c.filterSubmitButton;
239
+ var queryQName = _this.s.queryQName;
240
+ var filterSubmitLabel = _this.props.filterSubmitLabel;
241
+ var qParams = (0, diggerize_1.digs)(_this.collection, "qParams").qParams;
242
+ return ((0, jsx_runtime_1.jsxs)(form_1.Form, { className: "live-table--filter-form", formRef: filterFormRef, onSubmit: _this.tt.onFilterFormSubmit, setForm: _this.setStates.filterForm, children: ["s" in qParams &&
243
+ (0, jsx_runtime_1.jsx)("input", { name: "s", type: "hidden", value: qParams.s }), filterContent({
244
+ onFilterChanged: submitFilter,
245
+ onFilterChangedWithDelay: submitFilterDebounce,
246
+ qParams: qParams,
247
+ queryQName: queryQName
248
+ }), filterSubmitButton &&
249
+ (0, jsx_runtime_1.jsx)("input", { className: "btn btn-primary live-table--submit-filter-button", type: "submit", style: { marginTop: "8px" }, value: filterSubmitLabel || _this.t(".filter", { defaultValue: "Filter" }) })] }));
250
+ };
251
+ _this.onFilterClicked = function (e) {
252
+ e.preventDefault();
253
+ _this.setState({ showFilters: !_this.state.showFilters });
254
+ };
255
+ _this.onPerPageChanged = function (e) {
256
+ var queryName = _this.s.queryName;
257
+ var newPerPageValue = (0, diggerize_1.digg)(e, "target", "value");
258
+ var perKey = "".concat(queryName, "_per");
259
+ var paramsChange = {};
260
+ paramsChange[perKey] = newPerPageValue;
261
+ params_js_1.default.changeParams(paramsChange);
262
+ };
263
+ _this.renderItem = function (_b) {
264
+ var index = _b.index, model = _b.item;
265
+ if (!_this.s.tableSettingLoaded) {
266
+ return ((0, jsx_runtime_1.jsx)(react_native_1.View, { children: (0, jsx_runtime_1.jsx)(text_1.default, { children: _this.t(".loading_dot_dot_dot", { defaultValue: "Loading..." }) }) }));
267
+ }
268
+ return ((0, jsx_runtime_1.jsx)(model_row_1.default, { cacheKey: model.cacheKey(), columns: _this.s.columnsToShow, columnWidths: _this.columnWidths(), events: _this.tt.events, index: index, model: model, table: _this, tableSettingFullCacheKey: _this.s.tableSettingFullCacheKey }, model.id()));
269
+ };
270
+ _this.styleForColumn = function (_b) {
271
+ var column = _b.column, columnIndex = _b.columnIndex, even = _b.even, style = _b.style, type = _b.type;
272
+ var styleUI = _this.p.styleUI;
273
+ var defaultStyle = {
274
+ justifyContent: "center",
275
+ padding: 8,
276
+ overflow: "hidden"
277
+ };
278
+ if (styleUI) {
279
+ Object.assign(defaultStyle, {
280
+ backgroundColor: even ? "#f5f5f5" : "#fff"
281
+ });
282
+ }
283
+ if (type == "actions") {
284
+ defaultStyle.flexDirection = "row";
285
+ defaultStyle.alignItems = "center";
286
+ if (_this.tt.mdUp) {
287
+ defaultStyle.marginLeft = "auto";
288
+ }
289
+ else {
290
+ defaultStyle.marginRight = "auto";
291
+ }
292
+ }
293
+ else if (_this.tt.mdUp && styleUI) {
294
+ defaultStyle.borderRight = "1px solid #dbdbdb";
295
+ }
296
+ var actualStyle = Object.assign(defaultStyle, style);
297
+ return actualStyle;
298
+ };
299
+ _this.styleForHeader = function (_b) {
300
+ var column = _b.column, columnIndex = _b.columnIndex, style = _b.style, type = _b.type;
301
+ var mdUp = _this.tt.mdUp;
302
+ var defaultStyle = {
303
+ flexDirection: "row",
304
+ alignItems: "center",
305
+ padding: 8
306
+ };
307
+ if (type != "actions" && mdUp && _this.p.styleUI) {
308
+ defaultStyle.borderRight = "1px solid #dbdbdb";
309
+ }
310
+ var actualStyle = Object.assign(defaultStyle, style);
311
+ return actualStyle;
312
+ };
313
+ _this.styleForRow = function (_b) {
314
+ var _c = _b === void 0 ? {} : _b, even = _c.even;
315
+ var actualStyle = {
316
+ flex: 1,
317
+ alignItems: "stretch"
318
+ };
319
+ if (even && _this.p.styleUI) {
320
+ actualStyle.backgroundColor = "#f5f5f5";
321
+ }
322
+ return actualStyle;
323
+ };
324
+ _this.styleForRowHeader = function () {
325
+ var actualStyle = {
326
+ flex: 1,
327
+ alignItems: "stretch"
328
+ };
329
+ return actualStyle;
330
+ };
331
+ _this.headersContentFromColumns = function () {
332
+ return ((0, jsx_runtime_1.jsx)(index_1.default, { data: _this.s.columnsToShow, events: _this.tt.draggableSortEvents, horizontal: true, keyExtractor: _this.tt.dragListkeyExtractor, onItemMoved: _this.tt.onItemMoved, onReordered: _this.tt.onReordered, renderItem: _this.tt.dragListRenderItemContent }));
333
+ };
334
+ _this.dragListCacheKeyExtractor = function (item) { return "".concat(item.tableSettingColumn.identifier(), "-").concat(_this.s.resizing); };
335
+ _this.dragListkeyExtractor = function (item) { return item.tableSettingColumn.identifier(); };
336
+ _this.onItemMoved = function (_b) {
337
+ var animationArgs = _b.animationArgs, itemIndex = _b.itemIndex, x = _b.x, y = _b.y;
338
+ var animatedPosition = (0, diggerize_1.digg)(_this, "s", "columnsToShow", itemIndex, "animatedPosition");
339
+ if (animationArgs) {
340
+ react_native_1.Animated.timing(animatedPosition, animationArgs).start();
341
+ }
342
+ else {
343
+ animatedPosition.setValue({ x: x, y: y });
344
+ }
345
+ };
346
+ _this.onReordered = function (_b) { return __awaiter(_this, [_b], void 0, function (_c) {
347
+ var TableSettingColumn, toColumn;
348
+ var fromItem = _c.fromItem, fromPosition = _c.fromPosition, toItem = _c.toItem, toPosition = _c.toPosition;
349
+ return __generator(this, function (_d) {
350
+ switch (_d.label) {
351
+ case 0:
352
+ if (fromPosition == toPosition)
353
+ return [2 /*return*/]; // Only do requests and queries if changed
354
+ TableSettingColumn = fromItem.tableSettingColumn.constructor;
355
+ return [4 /*yield*/, TableSettingColumn.find(toItem.tableSettingColumn.id())]; // Need to load latest position because ActsAsList might have changed it
356
+ case 1:
357
+ toColumn = _d.sent() // Need to load latest position because ActsAsList might have changed it
358
+ ;
359
+ return [4 /*yield*/, fromItem.tableSettingColumn.update({ position: toColumn.position() })];
360
+ case 2:
361
+ _d.sent();
362
+ return [2 /*return*/];
363
+ }
364
+ });
365
+ }); };
366
+ _this.dragListRenderItemContent = function (_b) {
367
+ var isActive = _b.isActive, item = _b.item, touchProps = _b.touchProps;
368
+ var animatedWidth = item.animatedWidth, animatedZIndex = item.animatedZIndex, column = item.column, tableSettingColumn = item.tableSettingColumn;
369
+ return ((0, jsx_runtime_1.jsx)(header_column_1.default, { active: isActive, animatedWidth: animatedWidth, animatedZIndex: animatedZIndex, column: column, resizing: _this.s.resizing, table: _this, tableSettingColumn: tableSettingColumn, touchProps: touchProps, widths: _this.s.widths }, tableSettingColumn.identifier()));
370
+ };
371
+ _this.onFilterFormSubmit = function () { return _this.submitFilter(); };
372
+ _this.onRequestCloseSettings = function () { return _this.setState({ showSettings: false }); };
373
+ _this.onSettingsClicked = function (e) {
374
+ e.preventDefault();
375
+ _this.setState({ showSettings: !_this.s.showSettings });
376
+ };
377
+ _this.submitFilter = function () {
378
+ var appHistory = _this.props.appHistory;
379
+ var queryQName = _this.s.queryQName;
380
+ var changeParamsParams = {};
381
+ var qParams = _this.s.filterForm.asObject();
382
+ if (react_native_1.Platform.OS == "web") {
383
+ var filterForm = (0, diggerize_1.digg)(_this.tt.filterFormRef, "current");
384
+ var navtiveFormParams = params_js_1.default.serializeForm(filterForm);
385
+ (0, incorporator_1.incorporate)(qParams, navtiveFormParams);
386
+ }
387
+ changeParamsParams[queryQName] = JSON.stringify(qParams);
388
+ params_js_1.default.changeParams(changeParamsParams, { appHistory: appHistory });
389
+ };
390
+ _this.submitFilterDebounce = (0, debounce_1.default)(_this.tt.submitFilter);
391
+ return _this;
392
+ }
393
+ ApiMakerTable.prototype.setup = function () {
394
+ var _this = this;
395
+ var _b, _c;
396
+ var t = (0, use_i18n_mjs_1.default)({ namespace: "js.api_maker.table" }).t;
397
+ var _d = (0, use_breakpoint_js_1.default)(), breakpoint = _d.name, mdUp = _d.mdUp;
398
+ var queryParams = (0, use_query_params_js_1.default)();
399
+ this.setInstance({
400
+ breakpoint: breakpoint,
401
+ filterFormRef: (0, react_1.useRef)(),
402
+ mdUp: mdUp,
403
+ t: t
404
+ });
405
+ var collectionKey = (0, diggerize_1.digg)(this.p.modelClass.modelClassData(), "collectionKey");
406
+ var queryName = this.props.queryName;
407
+ if (!queryName)
408
+ queryName = collectionKey;
409
+ var querySName = "".concat(queryName, "_s");
410
+ this.useStates({
411
+ columns: function () { return _this.columnsAsArray(); },
412
+ currentWorkplace: undefined,
413
+ currentWorkplaceCount: null,
414
+ filterForm: null,
415
+ columnsToShow: null,
416
+ draggedColumn: null,
417
+ identifier: function () { return _this.props.identifier || "".concat(collectionKey, "-default"); },
418
+ lastUpdate: function () { return new Date(); },
419
+ preload: undefined,
420
+ preparedColumns: undefined,
421
+ queryName: queryName,
422
+ queryQName: function () { return "".concat(queryName, "_q"); },
423
+ queryPageName: function () { return "".concat(queryName, "_page"); },
424
+ querySName: querySName,
425
+ resizing: false,
426
+ showFilters: function () { return Boolean(queryParams[querySName]); },
427
+ showSettings: false,
428
+ tableSetting: undefined,
429
+ tableSettingLoaded: false,
430
+ tableSettingFullCacheKey: undefined,
431
+ width: undefined,
432
+ widths: null
433
+ });
434
+ this.tableContextValue = (0, react_1.useMemo)(function () { return ({
435
+ cacheKey: _this.s.tableSettingFullCacheKey,
436
+ lastUpdate: _this.s.lastUpdate,
437
+ resizing: _this.s.resizing,
438
+ table: _this
439
+ }); }, [this.s.lastUpdate, this.s.resizing, this.s.tableSettingFullCacheKey]);
440
+ (0, react_1.useMemo)(function () {
441
+ if (_this.props.workplace) {
442
+ _this.loadCurrentWorkplace().then(function () {
443
+ _this.loadCurrentWorkplaceCount();
444
+ });
445
+ }
446
+ }, [(_b = this.p.currentUser) === null || _b === void 0 ? void 0 : _b.id()]);
447
+ (0, react_1.useMemo)(function () {
448
+ if (!_this.tt.tableSettings && _this.s.width) {
449
+ _this.loadTableSetting();
450
+ }
451
+ }, [(_c = this.p.currentUser) === null || _c === void 0 ? void 0 : _c.id(), this.s.width]);
452
+ (0, use_model_event_js_1.default)(this.s.currentWorkplace, "workplace_links_created", this.tt.onLinksCreated);
453
+ (0, use_model_event_js_1.default)(this.s.currentWorkplace, "workplace_links_destroyed", this.tt.onLinksDestroyed);
454
+ var collectionReady = true;
455
+ var select;
456
+ if (!this.s.preparedColumns) {
457
+ collectionReady = false;
458
+ }
459
+ if (collectionReady) {
460
+ select = (0, select_calculator_js_1.default)({ table: this });
461
+ }
462
+ this.collection = (0, use_collection_js_1.default)({
463
+ abilities: this.abilitiesToLoad(),
464
+ defaultParams: this.props.defaultParams,
465
+ collection: this.props.collection,
466
+ groupBy: this.props.groupBy,
467
+ ifCondition: collectionReady,
468
+ modelClass: this.props.modelClass,
469
+ onModelsLoaded: this.props.onModelsLoaded,
470
+ noRecordsAvailableContent: this.props.noRecordsAvailableContent,
471
+ noRecordsFoundContent: this.props.noRecordsFoundContent,
472
+ pagination: true,
473
+ preloads: this.state.preload,
474
+ queryMethod: this.props.queryMethod,
475
+ queryName: queryName,
476
+ select: select,
477
+ selectColumns: this.props.selectColumns
478
+ });
479
+ this.queryWithoutPagination = (0, react_1.useMemo)(function () { var _b, _c, _d; return (_d = (_c = (_b = _this.collection) === null || _b === void 0 ? void 0 : _b.query) === null || _c === void 0 ? void 0 : _c.clone()) === null || _d === void 0 ? void 0 : _d.except("page"); }, [this.collection.query]);
480
+ (0, use_event_emitter_js_1.default)(this.tt.draggableSortEvents, "onDragStart", this.tt.onDragStart);
481
+ (0, use_event_emitter_js_1.default)(this.tt.draggableSortEvents, "onDragEndAnimation", this.tt.onDragEndAnimation);
482
+ (0, use_event_emitter_js_1.default)(this.tt.events, "columnVisibilityUpdated", this.tt.onColumnVisibilityUpdated);
483
+ };
484
+ ApiMakerTable.prototype.loadCurrentWorkplace = function () {
485
+ return __awaiter(this, void 0, void 0, function () {
486
+ var Workplace, result, currentWorkplace;
487
+ return __generator(this, function (_b) {
488
+ switch (_b.label) {
489
+ case 0:
490
+ Workplace = (0, model_class_require_js_1.default)("Workplace");
491
+ return [4 /*yield*/, Workplace.current()];
492
+ case 1:
493
+ result = _b.sent();
494
+ currentWorkplace = (0, diggerize_1.digg)(result, "current", 0);
495
+ this.setState({ currentWorkplace: currentWorkplace });
496
+ return [2 /*return*/];
497
+ }
498
+ });
499
+ });
500
+ };
501
+ ApiMakerTable.prototype.loadCurrentWorkplaceCount = function () {
502
+ return __awaiter(this, void 0, void 0, function () {
503
+ var WorkplaceLink, currentWorkplaceCount;
504
+ return __generator(this, function (_b) {
505
+ switch (_b.label) {
506
+ case 0:
507
+ WorkplaceLink = (0, model_class_require_js_1.default)("WorkplaceLink");
508
+ return [4 /*yield*/, WorkplaceLink
509
+ .ransack({
510
+ resource_type_eq: this.p.modelClass.modelClassData().name,
511
+ workplace_id_eq: this.s.currentWorkplace.id()
512
+ })
513
+ .count()];
514
+ case 1:
515
+ currentWorkplaceCount = _b.sent();
516
+ this.setState({ currentWorkplaceCount: currentWorkplaceCount });
517
+ return [2 /*return*/];
518
+ }
519
+ });
520
+ });
521
+ };
522
+ ApiMakerTable.prototype.getColumnsToShow = function (columns) {
523
+ return columns
524
+ .filter(function (_b) {
525
+ var column = _b.column, tableSettingColumn = _b.tableSettingColumn;
526
+ return (0, column_visible_js_1.default)(column, tableSettingColumn);
527
+ })
528
+ .sort(function (a, b) { return a.tableSettingColumn.position() - b.tableSettingColumn.position(); });
529
+ };
530
+ ApiMakerTable.prototype.loadTableSetting = function () {
531
+ return __awaiter(this, void 0, void 0, function () {
532
+ var tableSetting, _b, columns, preload, width, widths, columnsToShow;
533
+ return __generator(this, function (_c) {
534
+ switch (_c.label) {
535
+ case 0:
536
+ this.tableSettings = new table_settings_js_1.default({ table: this });
537
+ return [4 /*yield*/, this.tableSettings.loadExistingOrCreateTableSettings()];
538
+ case 1:
539
+ tableSetting = _c.sent();
540
+ _b = this.tableSettings.preparedColumns(tableSetting), columns = _b.columns, preload = _b.preload;
541
+ width = this.s.width;
542
+ widths = new widths_js_1.default({ columns: columns, table: this, width: width });
543
+ columnsToShow = this.getColumnsToShow(columns);
544
+ this.setState({
545
+ columns: columns,
546
+ columnsToShow: columnsToShow,
547
+ preparedColumns: columns,
548
+ preload: this.mergedPreloads(preload),
549
+ tableSetting: tableSetting,
550
+ tableSettingLoaded: true,
551
+ tableSettingFullCacheKey: tableSetting.fullCacheKey(),
552
+ widths: widths
553
+ });
554
+ return [2 /*return*/];
555
+ }
556
+ });
557
+ });
558
+ };
559
+ ApiMakerTable.prototype.mergedPreloads = function (preload) {
560
+ var preloads = this.props.preloads;
561
+ var mergedPreloads = [];
562
+ if (preloads)
563
+ mergedPreloads = mergedPreloads.concat(preloads);
564
+ if (preload)
565
+ mergedPreloads = mergedPreloads.concat(preload);
566
+ return (0, uniqunize_1.default)(mergedPreloads);
567
+ };
568
+ ApiMakerTable.prototype.render = function () {
569
+ var _this = this;
570
+ var _b;
571
+ var _c = this.p, modelClass = _c.modelClass, noRecordsAvailableContent = _c.noRecordsAvailableContent, noRecordsFoundContent = _c.noRecordsFoundContent;
572
+ var _d = this.props, collection = _d.collection, currentUser = _d.currentUser;
573
+ var _e = this.s, queryName = _e.queryName, querySName = _e.querySName, showFilters = _e.showFilters;
574
+ var _f = (0, diggerize_1.digs)(this.collection, "models", "overallCount", "qParams", "query", "result", "showNoRecordsAvailableContent", "showNoRecordsFoundContent"), models = _f.models, overallCount = _f.overallCount, qParams = _f.qParams, query = _f.query, result = _f.result, showNoRecordsAvailableContent = _f.showNoRecordsAvailableContent, showNoRecordsFoundContent = _f.showNoRecordsFoundContent;
575
+ if (collection && collection.args.modelClass.modelClassData().name != modelClass.modelClassData().name) {
576
+ throw new Error("Model class from collection '".concat(collection.args.modelClass.modelClassData().name, "' ") +
577
+ "didn't match model class on table: '".concat(modelClass.modelClassData().name, "'"));
578
+ }
579
+ return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { dataSet: this.cache("rootViewDataSet", { class: this.className() }, [this.className()]), onLayout: this.tt.onContainerLayout, style: (_b = this.props.styles) === null || _b === void 0 ? void 0 : _b.container, children: [showNoRecordsAvailableContent &&
580
+ (0, jsx_runtime_1.jsx)("div", { className: "live-table--no-records-available-content", children: noRecordsAvailableContent({ models: models, qParams: qParams, overallCount: overallCount }) }), showNoRecordsFoundContent &&
581
+ (0, jsx_runtime_1.jsx)("div", { className: "live-table--no-records-found-content", children: noRecordsFoundContent({ models: models, qParams: qParams, overallCount: overallCount }) }), showFilters &&
582
+ (0, jsx_runtime_1.jsx)(index_2.default, { currentUser: currentUser, modelClass: modelClass, queryName: queryName, querySName: querySName }), (function () {
583
+ if (qParams && query && result && models && !showNoRecordsAvailableContent && !showNoRecordsFoundContent) {
584
+ return _this.cardOrTable();
585
+ }
586
+ else {
587
+ return ((0, jsx_runtime_1.jsx)(react_native_1.View, { children: (0, jsx_runtime_1.jsx)(text_1.default, { children: _this.t(".loading_dot_dot_dit", { defaultValue: "Loading..." }) }) }));
588
+ }
589
+ })()] }));
590
+ };
591
+ ApiMakerTable.prototype.abilitiesToLoad = function () {
592
+ var abilitiesToLoad = {};
593
+ var _b = this.props, abilities = _b.abilities, modelClass = _b.modelClass;
594
+ var ownAbilities = [];
595
+ if (this.props.destroyEnabled)
596
+ ownAbilities.push("destroy");
597
+ if (this.props.editModelPath)
598
+ ownAbilities.push("edit");
599
+ if (this.props.viewModelPath)
600
+ ownAbilities.push("show");
601
+ if (ownAbilities.length > 0) {
602
+ var modelClassName = (0, diggerize_1.digg)(modelClass.modelClassData(), "name");
603
+ abilitiesToLoad[modelClassName] = ownAbilities;
604
+ }
605
+ if (abilities) {
606
+ for (var modelName in abilities) {
607
+ if (!(modelName in abilitiesToLoad)) {
608
+ abilitiesToLoad[modelName] = [];
609
+ }
610
+ for (var _i = 0, _c = abilities[modelName]; _i < _c.length; _i++) {
611
+ var ability = _c[_i];
612
+ abilitiesToLoad[modelName].push(ability);
613
+ }
614
+ }
615
+ }
616
+ return abilitiesToLoad;
617
+ };
618
+ ApiMakerTable.prototype.cardOrTable = function () {
619
+ var _b = this.props, abilities = _b.abilities, actionsContent = _b.actionsContent, appHistory = _b.appHistory, card = _b.card, className = _b.className, collection = _b.collection, columns = _b.columns, controls = _b.controls, currentUser = _b.currentUser, defaultDateFormatName = _b.defaultDateFormatName, defaultDateTimeFormatName = _b.defaultDateTimeFormatName, defaultParams = _b.defaultParams, destroyEnabled = _b.destroyEnabled, destroyMessage = _b.destroyMessage, editModelPath = _b.editModelPath, filterCard = _b.filterCard, filterContent = _b.filterContent, filterSubmitButton = _b.filterSubmitButton, filterSubmitLabel = _b.filterSubmitLabel, groupBy = _b.groupBy, header = _b.header, identifier = _b.identifier, modelClass = _b.modelClass, noRecordsAvailableContent = _b.noRecordsAvailableContent, noRecordsFoundContent = _b.noRecordsFoundContent, onModelsLoaded = _b.onModelsLoaded, paginateContent = _b.paginateContent, paginationComponent = _b.paginationComponent, preloads = _b.preloads, queryMethod = _b.queryMethod, queryName = _b.queryName, select = _b.select, selectColumns = _b.selectColumns, styleUI = _b.styleUI, viewModelPath = _b.viewModelPath, workplace = _b.workplace, restProps = __rest(_b, ["abilities", "actionsContent", "appHistory", "card", "className", "collection", "columns", "controls", "currentUser", "defaultDateFormatName", "defaultDateTimeFormatName", "defaultParams", "destroyEnabled", "destroyMessage", "editModelPath", "filterCard", "filterContent", "filterSubmitButton", "filterSubmitLabel", "groupBy", "header", "identifier", "modelClass", "noRecordsAvailableContent", "noRecordsFoundContent", "onModelsLoaded", "paginateContent", "paginationComponent", "preloads", "queryMethod", "queryName", "select", "selectColumns", "styleUI", "viewModelPath", "workplace"]);
620
+ var _c = (0, diggerize_1.digs)(this.collection, "models", "qParams", "query", "result"), models = _c.models, qParams = _c.qParams, query = _c.query, result = _c.result;
621
+ var headerContent, PaginationComponent;
622
+ if (typeof header == "function") {
623
+ headerContent = header({ models: models, qParams: qParams, query: query, result: result });
624
+ }
625
+ else if (header) {
626
+ headerContent = header;
627
+ }
628
+ else {
629
+ headerContent = modelClass.modelName().human({ count: 2 });
630
+ }
631
+ if (!paginateContent) {
632
+ if (paginationComponent) {
633
+ PaginationComponent = paginationComponent;
634
+ }
635
+ else {
636
+ PaginationComponent = paginate_1.default;
637
+ }
638
+ }
639
+ var flatListStyle = {
640
+ overflowX: "auto"
641
+ };
642
+ if (styleUI) {
643
+ flatListStyle.border = "1px solid #dbdbdb";
644
+ flatListStyle.borderRadius = 5;
645
+ }
646
+ var flatList = ((0, jsx_runtime_1.jsx)(TableContext.Provider, { value: this.tt.tableContextValue, children: (0, jsx_runtime_1.jsx)(flat_list_1.default, __assign({ data: models, dataSet: {
647
+ class: (0, classnames_1.default)("api-maker--table", className),
648
+ cacheKey: this.s.tableSettingFullCacheKey,
649
+ lastUpdate: this.s.lastUpdate
650
+ }, extraData: this.s.lastUpdate, keyExtractor: this.tt.keyExtrator, ListHeaderComponent: ListHeaderComponent, renderItem: this.tt.renderItem, showsHorizontalScrollIndicator: true, style: flatListStyle }, restProps)) }));
651
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [filterContent && filterCard &&
652
+ (0, jsx_runtime_1.jsx)(card_1.default, { className: "live-table--filter-card mb-4", children: this.filterForm() }), filterContent && !filterCard &&
653
+ this.filterForm(), card &&
654
+ (0, jsx_runtime_1.jsx)(card_1.default, __assign({ className: (0, classnames_1.default)("live-table--table-card", "mb-4", className), controls: this.tableControls(), header: headerContent, footer: this.tableFooter() }, restProps, { children: flatList })), !card && flatList, result && PaginationComponent &&
655
+ (0, jsx_runtime_1.jsx)(PaginationComponent, { result: result }), result && paginateContent &&
656
+ paginateContent({ result: result })] }));
657
+ };
658
+ ApiMakerTable.prototype.styleForHeaderText = function () {
659
+ var actualStyle = { fontWeight: "bold" };
660
+ return actualStyle;
661
+ };
662
+ ApiMakerTable.prototype.tableControls = function () {
663
+ var controls = this.props.controls;
664
+ var showSettings = this.s.showSettings;
665
+ var _b = (0, diggerize_1.digs)(this.collection, "models", "qParams", "query", "result"), models = _b.models, qParams = _b.qParams, query = _b.query, result = _b.result;
666
+ return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: this.rootViewStyle || (this.rootViewStyle = { flexDirection: "row" }), children: [controls && controls({ models: models, qParams: qParams, query: query, result: result }), (0, jsx_runtime_1.jsx)(react_native_1.Pressable, { dataSet: { class: "filter-button" }, onPress: this.tt.onFilterClicked, children: (0, jsx_runtime_1.jsx)(icon_1.default, { name: "search", size: 20 }) }), (0, jsx_runtime_1.jsxs)(react_native_1.View, { children: [showSettings &&
667
+ (0, jsx_runtime_1.jsx)(index_3.default, { onRequestClose: this.tt.onRequestCloseSettings, table: this }), (0, jsx_runtime_1.jsx)(react_native_1.Pressable, { dataSet: this.settingsButtonDataSet || (this.settingsButtonDataSet = { class: "settings-button" }), onPress: this.tt.onSettingsClicked, children: (0, jsx_runtime_1.jsx)(icon_1.default, { name: "gear", size: 20 }) })] })] }));
668
+ };
669
+ ApiMakerTable.prototype.tableFooter = function () {
670
+ var result = (0, diggerize_1.digs)(this.collection, "result").result;
671
+ var currentPage = result.currentPage();
672
+ var totalCount = result.totalCount();
673
+ var perPage = result.perPage();
674
+ var to = Math.min(currentPage * perPage, totalCount);
675
+ var defaultValue = "Showing %{from} to %{to} out of %{total_count} total.";
676
+ var from = ((currentPage - 1) * perPage) + 1;
677
+ if (to === 0)
678
+ from = 0;
679
+ return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: this.rootViewStyle || (this.rootViewStyle = { flexDirection: "row", justifyContent: "space-between", marginTop: 10 }), children: [(0, jsx_runtime_1.jsxs)(react_native_1.View, { dataSet: this.showingCountsDataSet || (this.showingCountsDataSet = { class: "showing-counts" }), style: this.showingCountsStyle || (this.showingCountsStyle = { flexDirection: "row" }), children: [(0, jsx_runtime_1.jsx)(text_1.default, { children: this.t(".showing_from_to_out_of_total", { defaultValue: defaultValue, from: from, to: to, total_count: totalCount }) }), this.p.workplace && this.s.currentWorkplaceCount !== null &&
680
+ (0, jsx_runtime_1.jsx)(text_1.default, { style: this.xSelectedTextStyle || (this.xSelectedTextStyle = { marginLeft: 3 }), children: this.t(".x_selected", { defaultValue: "%{selected} selected.", selected: this.s.currentWorkplaceCount }) })] }), (0, jsx_runtime_1.jsx)(react_native_1.View, { children: (0, jsx_runtime_1.jsx)(select_1.default, { className: "per-page-select", defaultValue: perPage, onChange: this.tt.onPerPageChanged, options: paginationOptions }) })] }));
681
+ };
682
+ ApiMakerTable.prototype.className = function () {
683
+ var classNames = ["api-maker--table"];
684
+ if (this.props.className) {
685
+ classNames.push(this.props.className);
686
+ }
687
+ return classNames.join(" ");
688
+ };
689
+ ApiMakerTable.prototype.columnProps = function (column) {
690
+ var props = {};
691
+ if (column.textCenter) {
692
+ props.style || (props.style = {});
693
+ props.style.textAlign = "center";
694
+ }
695
+ if (column.textRight) {
696
+ props.style || (props.style = {});
697
+ props.style.textAlign = "right";
698
+ }
699
+ return props;
700
+ };
701
+ ApiMakerTable.prototype.headerProps = function (column) {
702
+ var props = {};
703
+ if (column.textCenter) {
704
+ props.style || (props.style = {});
705
+ props.style.justifyContent = "center";
706
+ }
707
+ if (column.textRight) {
708
+ props.style || (props.style = {});
709
+ props.style.justifyContent = "end";
710
+ }
711
+ return props;
712
+ };
713
+ ApiMakerTable.prototype.columnWidths = function () {
714
+ var columnWidths = {};
715
+ for (var _i = 0, _b = this.s.preparedColumns; _i < _b.length; _i++) {
716
+ var column = _b[_i];
717
+ columnWidths[column.tableSettingColumn.identifier()] = column.width;
718
+ }
719
+ return columnWidths;
720
+ };
721
+ ApiMakerTable.prototype.headerClassNameForColumn = function (column) {
722
+ var classNames = [];
723
+ if (column.commonProps && column.commonProps.className)
724
+ classNames.push(column.commonProps.className);
725
+ if (column.headerProps && column.headerProps.className)
726
+ classNames.push(column.headerProps.className);
727
+ return classNames;
728
+ };
729
+ ApiMakerTable.prototype.headerLabelForColumn = function (column) {
730
+ var modelClass = this.p.modelClass;
731
+ if ("label" in column) {
732
+ if (typeof column.label == "function") {
733
+ return column.label();
734
+ }
735
+ else {
736
+ return column.label;
737
+ }
738
+ }
739
+ var currentModelClass = modelClass;
740
+ // Calculate current model class through path
741
+ if (column.path) {
742
+ var _loop_1 = function (pathPart) {
743
+ var relationships = (0, diggerize_1.digg)(currentModelClass.modelClassData(), "relationships");
744
+ var relationship = relationships.find(function (relationshipInArray) { return relationshipInArray.name == inflection.underscore(pathPart); });
745
+ currentModelClass = (0, model_class_require_js_1.default)((0, diggerize_1.digg)(relationship, "resource_name"));
746
+ };
747
+ for (var _i = 0, _b = column.path; _i < _b.length; _i++) {
748
+ var pathPart = _b[_i];
749
+ _loop_1(pathPart);
750
+ }
751
+ }
752
+ if (column.attribute)
753
+ return currentModelClass.humanAttributeName(column.attribute);
754
+ throw new Error("No 'label' or 'attribute' was given");
755
+ };
756
+ return ApiMakerTable;
757
+ }(base_component_js_1.default)),
758
+ _a.defaultProps = {
759
+ card: true,
760
+ currentUser: null,
761
+ destroyEnabled: true,
762
+ filterCard: true,
763
+ filterSubmitButton: true,
764
+ noRecordsAvailableContent: undefined,
765
+ noRecordsFoundContent: undefined,
766
+ preloads: [],
767
+ select: {},
768
+ styleUI: true,
769
+ workplace: false
770
+ },
771
+ _a.propTypes = {
772
+ abilities: prop_types_1.default.object,
773
+ actionsContent: prop_types_1.default.func,
774
+ appHistory: prop_types_1.default.object,
775
+ card: prop_types_1.default.bool.isRequired,
776
+ className: prop_types_1.default.string,
777
+ collection: prop_types_1.default.instanceOf(collection_js_1.default),
778
+ columns: prop_types_1.default.oneOfType([prop_types_1.default.array, prop_types_1.default.func]),
779
+ controls: prop_types_1.default.func,
780
+ currentUser: prop_types_1.default.object,
781
+ defaultDateFormatName: prop_types_1.default.string,
782
+ defaultDateTimeFormatName: prop_types_1.default.string,
783
+ defaultParams: prop_types_1.default.object,
784
+ destroyEnabled: prop_types_1.default.bool.isRequired,
785
+ destroyMessage: prop_types_1.default.string,
786
+ editModelPath: prop_types_1.default.func,
787
+ filterCard: prop_types_1.default.bool.isRequired,
788
+ filterContent: prop_types_1.default.func,
789
+ filterSubmitLabel: prop_types_1.default.any,
790
+ groupBy: prop_types_1.default.array,
791
+ header: prop_types_1.default.oneOfType([prop_types_1.default.func, prop_types_1.default.string]),
792
+ identifier: prop_types_1.default.string,
793
+ modelClass: prop_types_1.default.func.isRequired,
794
+ noRecordsAvailableContent: prop_types_1.default.func,
795
+ noRecordsFoundContent: prop_types_1.default.func,
796
+ onModelsLoaded: prop_types_1.default.func,
797
+ paginateContent: prop_types_1.default.func,
798
+ paginationComponent: prop_types_1.default.func,
799
+ preloads: prop_types_1.default.array.isRequired,
800
+ queryMethod: prop_types_1.default.func,
801
+ queryName: prop_types_1.default.string,
802
+ select: prop_types_1.default.object,
803
+ selectColumns: prop_types_1.default.object,
804
+ styles: prop_types_1.default.object,
805
+ styleUI: prop_types_1.default.bool.isRequired,
806
+ viewModelPath: prop_types_1.default.func,
807
+ workplace: prop_types_1.default.bool.isRequired
808
+ },
809
+ _a)));
810
+ //# sourceMappingURL=table.js.map