@saltcorn/data 0.6.2-beta.1 → 0.6.2-beta.5

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 (555) hide show
  1. package/dist/base-plugin/actions.d.ts +141 -0
  2. package/dist/base-plugin/actions.d.ts.map +1 -0
  3. package/dist/base-plugin/actions.js +551 -0
  4. package/dist/base-plugin/actions.js.map +1 -0
  5. package/dist/base-plugin/base.test.d.ts +2 -0
  6. package/dist/base-plugin/base.test.d.ts.map +1 -0
  7. package/dist/base-plugin/base.test.js +15 -0
  8. package/dist/base-plugin/base.test.js.map +1 -0
  9. package/dist/base-plugin/fieldviews.d.ts +25 -0
  10. package/dist/base-plugin/fieldviews.d.ts.map +1 -0
  11. package/dist/base-plugin/fieldviews.js +159 -0
  12. package/dist/base-plugin/fieldviews.js.map +1 -0
  13. package/dist/base-plugin/fileviews.d.ts +52 -0
  14. package/dist/base-plugin/fileviews.d.ts.map +1 -0
  15. package/dist/base-plugin/fileviews.js +59 -0
  16. package/dist/base-plugin/fileviews.js.map +1 -0
  17. package/dist/base-plugin/index.d.ts +524 -0
  18. package/dist/base-plugin/index.d.ts.map +1 -0
  19. package/{base-plugin → dist/base-plugin}/index.js +22 -24
  20. package/dist/base-plugin/index.js.map +1 -0
  21. package/dist/base-plugin/types.d.ts +383 -0
  22. package/dist/base-plugin/types.d.ts.map +1 -0
  23. package/dist/base-plugin/types.js +1080 -0
  24. package/dist/base-plugin/types.js.map +1 -0
  25. package/dist/base-plugin/viewtemplates/edit.d.ts +116 -0
  26. package/dist/base-plugin/viewtemplates/edit.d.ts.map +1 -0
  27. package/dist/base-plugin/viewtemplates/edit.js +561 -0
  28. package/dist/base-plugin/viewtemplates/edit.js.map +1 -0
  29. package/dist/base-plugin/viewtemplates/feed.d.ts +73 -0
  30. package/dist/base-plugin/viewtemplates/feed.d.ts.map +1 -0
  31. package/dist/base-plugin/viewtemplates/feed.js +348 -0
  32. package/dist/base-plugin/viewtemplates/feed.js.map +1 -0
  33. package/dist/base-plugin/viewtemplates/filter.d.ts +46 -0
  34. package/dist/base-plugin/viewtemplates/filter.d.ts.map +1 -0
  35. package/dist/base-plugin/viewtemplates/filter.js +267 -0
  36. package/dist/base-plugin/viewtemplates/filter.js.map +1 -0
  37. package/dist/base-plugin/viewtemplates/list.d.ts +99 -0
  38. package/dist/base-plugin/viewtemplates/list.d.ts.map +1 -0
  39. package/dist/base-plugin/viewtemplates/list.js +471 -0
  40. package/dist/base-plugin/viewtemplates/list.js.map +1 -0
  41. package/dist/base-plugin/viewtemplates/listshowlist.d.ts +41 -0
  42. package/dist/base-plugin/viewtemplates/listshowlist.d.ts.map +1 -0
  43. package/dist/base-plugin/viewtemplates/listshowlist.js +248 -0
  44. package/dist/base-plugin/viewtemplates/listshowlist.js.map +1 -0
  45. package/dist/base-plugin/viewtemplates/room.d.ts +140 -0
  46. package/dist/base-plugin/viewtemplates/room.d.ts.map +1 -0
  47. package/dist/base-plugin/viewtemplates/room.js +469 -0
  48. package/dist/base-plugin/viewtemplates/room.js.map +1 -0
  49. package/dist/base-plugin/viewtemplates/show.d.ts +101 -0
  50. package/dist/base-plugin/viewtemplates/show.d.ts.map +1 -0
  51. package/dist/base-plugin/viewtemplates/show.js +562 -0
  52. package/dist/base-plugin/viewtemplates/show.js.map +1 -0
  53. package/dist/base-plugin/viewtemplates/viewable_fields.d.ts +108 -0
  54. package/dist/base-plugin/viewtemplates/viewable_fields.d.ts.map +1 -0
  55. package/dist/base-plugin/viewtemplates/viewable_fields.js +563 -0
  56. package/dist/base-plugin/viewtemplates/viewable_fields.js.map +1 -0
  57. package/dist/contracts.d.ts +49 -0
  58. package/dist/contracts.d.ts.map +1 -0
  59. package/dist/contracts.js +212 -0
  60. package/dist/contracts.js.map +1 -0
  61. package/dist/coverage/lcov-report/block-navigation.d.ts +2 -0
  62. package/dist/coverage/lcov-report/block-navigation.d.ts.map +1 -0
  63. package/dist/coverage/lcov-report/block-navigation.js +66 -0
  64. package/dist/coverage/lcov-report/block-navigation.js.map +1 -0
  65. package/dist/coverage/lcov-report/prettify.d.ts +1 -0
  66. package/dist/coverage/lcov-report/prettify.d.ts.map +1 -0
  67. package/dist/coverage/lcov-report/prettify.js +478 -0
  68. package/dist/coverage/lcov-report/prettify.js.map +1 -0
  69. package/dist/coverage/lcov-report/sorter.d.ts +2 -0
  70. package/dist/coverage/lcov-report/sorter.d.ts.map +1 -0
  71. package/dist/coverage/lcov-report/sorter.js +141 -0
  72. package/dist/coverage/lcov-report/sorter.js.map +1 -0
  73. package/dist/db/connect.d.ts +40 -0
  74. package/dist/db/connect.d.ts.map +1 -0
  75. package/dist/db/connect.js +150 -0
  76. package/dist/db/connect.js.map +1 -0
  77. package/dist/db/db.test.d.ts +2 -0
  78. package/dist/db/db.test.d.ts.map +1 -0
  79. package/dist/db/db.test.js +28 -0
  80. package/dist/db/db.test.js.map +1 -0
  81. package/dist/db/fixtures.d.ts +8 -0
  82. package/dist/db/fixtures.d.ts.map +1 -0
  83. package/dist/db/fixtures.js +300 -0
  84. package/dist/db/fixtures.js.map +1 -0
  85. package/dist/db/index.d.ts +3 -0
  86. package/dist/db/index.d.ts.map +1 -0
  87. package/dist/db/index.js +41 -0
  88. package/dist/db/index.js.map +1 -0
  89. package/dist/db/reset_schema.d.ts +13 -0
  90. package/dist/db/reset_schema.d.ts.map +1 -0
  91. package/{db → dist/db}/reset_schema.js +45 -55
  92. package/dist/db/reset_schema.js.map +1 -0
  93. package/dist/db/state.d.ts +56 -0
  94. package/dist/db/state.d.ts.map +1 -0
  95. package/dist/db/state.js +610 -0
  96. package/dist/db/state.js.map +1 -0
  97. package/dist/index.d.ts +2 -0
  98. package/dist/index.d.ts.map +1 -0
  99. package/{index.js → dist/index.js} +2 -1
  100. package/dist/index.js.map +1 -0
  101. package/dist/migrate.d.ts +12 -0
  102. package/dist/migrate.d.ts.map +1 -0
  103. package/dist/migrate.js +94 -0
  104. package/dist/migrate.js.map +1 -0
  105. package/dist/migrations/202005141503.d.ts +2 -0
  106. package/dist/migrations/202005141503.d.ts.map +1 -0
  107. package/{migrations → dist/migrations}/202005141503.js +2 -1
  108. package/dist/migrations/202005141503.js.map +1 -0
  109. package/dist/migrations/202005241712.d.ts +2 -0
  110. package/dist/migrations/202005241712.d.ts.map +1 -0
  111. package/{migrations → dist/migrations}/202005241712.js +2 -1
  112. package/dist/migrations/202005241712.js.map +1 -0
  113. package/dist/migrations/202005251037.d.ts +2 -0
  114. package/dist/migrations/202005251037.d.ts.map +1 -0
  115. package/{migrations → dist/migrations}/202005251037.js +2 -1
  116. package/dist/migrations/202005251037.js.map +1 -0
  117. package/dist/migrations/202005282134.d.ts +2 -0
  118. package/dist/migrations/202005282134.d.ts.map +1 -0
  119. package/{migrations → dist/migrations}/202005282134.js +2 -1
  120. package/dist/migrations/202005282134.js.map +1 -0
  121. package/dist/migrations/202006022156.d.ts +2 -0
  122. package/dist/migrations/202006022156.d.ts.map +1 -0
  123. package/{migrations → dist/migrations}/202006022156.js +2 -1
  124. package/dist/migrations/202006022156.js.map +1 -0
  125. package/dist/migrations/202006051507.d.ts +2 -0
  126. package/dist/migrations/202006051507.d.ts.map +1 -0
  127. package/{migrations → dist/migrations}/202006051507.js +2 -1
  128. package/dist/migrations/202006051507.js.map +1 -0
  129. package/dist/migrations/202006240906.d.ts +2 -0
  130. package/dist/migrations/202006240906.d.ts.map +1 -0
  131. package/{migrations → dist/migrations}/202006240906.js +2 -1
  132. package/dist/migrations/202006240906.js.map +1 -0
  133. package/dist/migrations/202007091707.d.ts +2 -0
  134. package/dist/migrations/202007091707.d.ts.map +1 -0
  135. package/{migrations → dist/migrations}/202007091707.js +2 -1
  136. package/dist/migrations/202007091707.js.map +1 -0
  137. package/dist/migrations/202007202144.d.ts +2 -0
  138. package/dist/migrations/202007202144.d.ts.map +1 -0
  139. package/{migrations → dist/migrations}/202007202144.js +2 -1
  140. package/dist/migrations/202007202144.js.map +1 -0
  141. package/dist/migrations/202008031500.d.ts +2 -0
  142. package/dist/migrations/202008031500.d.ts.map +1 -0
  143. package/dist/migrations/202008031500.js +4 -0
  144. package/dist/migrations/202008031500.js.map +1 -0
  145. package/dist/migrations/202008051415.d.ts +2 -0
  146. package/dist/migrations/202008051415.d.ts.map +1 -0
  147. package/{migrations → dist/migrations}/202008051415.js +2 -1
  148. package/dist/migrations/202008051415.js.map +1 -0
  149. package/dist/migrations/202008121149.d.ts +3 -0
  150. package/dist/migrations/202008121149.d.ts.map +1 -0
  151. package/{migrations → dist/migrations}/202008121149.js +2 -2
  152. package/dist/migrations/202008121149.js.map +1 -0
  153. package/dist/migrations/202009112140.d.ts +3 -0
  154. package/dist/migrations/202009112140.d.ts.map +1 -0
  155. package/{migrations → dist/migrations}/202009112140.js +2 -2
  156. package/dist/migrations/202009112140.js.map +1 -0
  157. package/dist/migrations/202009181655.d.ts +2 -0
  158. package/dist/migrations/202009181655.d.ts.map +1 -0
  159. package/dist/migrations/202009181655.js +7 -0
  160. package/dist/migrations/202009181655.js.map +1 -0
  161. package/dist/migrations/202009221105.d.ts +2 -0
  162. package/dist/migrations/202009221105.d.ts.map +1 -0
  163. package/dist/migrations/202009221105.js +4 -0
  164. package/dist/migrations/202009221105.js.map +1 -0
  165. package/dist/migrations/202009231331.d.ts +2 -0
  166. package/dist/migrations/202009231331.d.ts.map +1 -0
  167. package/{migrations → dist/migrations}/202009231331.js +2 -1
  168. package/dist/migrations/202009231331.js.map +1 -0
  169. package/dist/migrations/202009301531.d.ts +2 -0
  170. package/dist/migrations/202009301531.d.ts.map +1 -0
  171. package/dist/migrations/202009301531.js +8 -0
  172. package/dist/migrations/202009301531.js.map +1 -0
  173. package/dist/migrations/202010231444.d.ts +2 -0
  174. package/dist/migrations/202010231444.d.ts.map +1 -0
  175. package/dist/migrations/202010231444.js +4 -0
  176. package/dist/migrations/202010231444.js.map +1 -0
  177. package/dist/migrations/202010251412.d.ts +2 -0
  178. package/dist/migrations/202010251412.d.ts.map +1 -0
  179. package/dist/migrations/202010251412.js +10 -0
  180. package/dist/migrations/202010251412.js.map +1 -0
  181. package/dist/migrations/202011021749.d.ts +2 -0
  182. package/dist/migrations/202011021749.d.ts.map +1 -0
  183. package/{migrations → dist/migrations}/202011021749.js +2 -1
  184. package/dist/migrations/202011021749.js.map +1 -0
  185. package/dist/migrations/202011051353.d.ts +2 -0
  186. package/dist/migrations/202011051353.d.ts.map +1 -0
  187. package/{migrations → dist/migrations}/202011051353.js +2 -1
  188. package/dist/migrations/202011051353.js.map +1 -0
  189. package/dist/migrations/202011111127.d.ts +2 -0
  190. package/dist/migrations/202011111127.d.ts.map +1 -0
  191. package/{migrations → dist/migrations}/202011111127.js +2 -1
  192. package/dist/migrations/202011111127.js.map +1 -0
  193. package/dist/migrations/202012011203.d.ts +2 -0
  194. package/dist/migrations/202012011203.d.ts.map +1 -0
  195. package/{migrations → dist/migrations}/202012011203.js +2 -1
  196. package/dist/migrations/202012011203.js.map +1 -0
  197. package/dist/migrations/202012100841.d.ts +2 -0
  198. package/dist/migrations/202012100841.d.ts.map +1 -0
  199. package/{migrations → dist/migrations}/202012100841.js +2 -1
  200. package/dist/migrations/202012100841.js.map +1 -0
  201. package/dist/migrations/202012281835.d.ts +2 -0
  202. package/dist/migrations/202012281835.d.ts.map +1 -0
  203. package/{migrations → dist/migrations}/202012281835.js +2 -1
  204. package/dist/migrations/202012281835.js.map +1 -0
  205. package/dist/migrations/202101061051.d.ts +2 -0
  206. package/dist/migrations/202101061051.d.ts.map +1 -0
  207. package/{migrations → dist/migrations}/202101061051.js +2 -1
  208. package/dist/migrations/202101061051.js.map +1 -0
  209. package/dist/migrations/202101141128.d.ts +2 -0
  210. package/dist/migrations/202101141128.d.ts.map +1 -0
  211. package/dist/migrations/202101141128.js +4 -0
  212. package/dist/migrations/202101141128.js.map +1 -0
  213. package/dist/migrations/202102091312.d.ts +3 -0
  214. package/dist/migrations/202102091312.d.ts.map +1 -0
  215. package/dist/migrations/202102091312.js +19 -0
  216. package/dist/migrations/202102091312.js.map +1 -0
  217. package/dist/migrations/202102101624.d.ts +2 -0
  218. package/dist/migrations/202102101624.d.ts.map +1 -0
  219. package/dist/migrations/202102101624.js +7 -0
  220. package/dist/migrations/202102101624.js.map +1 -0
  221. package/dist/migrations/202102172148.d.ts +2 -0
  222. package/dist/migrations/202102172148.d.ts.map +1 -0
  223. package/{migrations → dist/migrations}/202102172148.js +2 -2
  224. package/dist/migrations/202102172148.js.map +1 -0
  225. package/dist/migrations/202102261650.d.ts +2 -0
  226. package/dist/migrations/202102261650.d.ts.map +1 -0
  227. package/dist/migrations/202102261650.js +7 -0
  228. package/dist/migrations/202102261650.js.map +1 -0
  229. package/dist/migrations/202106102347.d.ts +2 -0
  230. package/dist/migrations/202106102347.d.ts.map +1 -0
  231. package/{migrations → dist/migrations}/202106102347.js +2 -3
  232. package/dist/migrations/202106102347.js.map +1 -0
  233. package/dist/migrations/202106112120.d.ts +2 -0
  234. package/dist/migrations/202106112120.d.ts.map +1 -0
  235. package/{migrations → dist/migrations}/202106112120.js +2 -3
  236. package/dist/migrations/202106112120.js.map +1 -0
  237. package/dist/migrations/202106120012.d.ts +2 -0
  238. package/dist/migrations/202106120012.d.ts.map +1 -0
  239. package/{migrations → dist/migrations}/202106120012.js +2 -3
  240. package/dist/migrations/202106120012.js.map +1 -0
  241. package/dist/migrations/202106120220.d.ts +2 -0
  242. package/dist/migrations/202106120220.d.ts.map +1 -0
  243. package/{migrations → dist/migrations}/202106120220.js +2 -4
  244. package/dist/migrations/202106120220.js.map +1 -0
  245. package/dist/migrations/202106121701.d.ts +2 -0
  246. package/dist/migrations/202106121701.d.ts.map +1 -0
  247. package/{migrations → dist/migrations}/202106121701.js +2 -3
  248. package/dist/migrations/202106121701.js.map +1 -0
  249. package/dist/migrations/202106121703.d.ts +3 -0
  250. package/dist/migrations/202106121703.d.ts.map +1 -0
  251. package/{migrations → dist/migrations}/202106121703.js +2 -3
  252. package/dist/migrations/202106121703.js.map +1 -0
  253. package/dist/migrations/202106251126.d.ts +2 -0
  254. package/dist/migrations/202106251126.d.ts.map +1 -0
  255. package/dist/migrations/202106251126.js +6 -0
  256. package/dist/migrations/202106251126.js.map +1 -0
  257. package/dist/migrations/202107281619.d.ts +2 -0
  258. package/dist/migrations/202107281619.d.ts.map +1 -0
  259. package/{migrations → dist/migrations}/202107281619.js +2 -1
  260. package/dist/migrations/202107281619.js.map +1 -0
  261. package/dist/migrations/202107302158.d.ts +3 -0
  262. package/dist/migrations/202107302158.d.ts.map +1 -0
  263. package/{migrations → dist/migrations}/202107302158.js +2 -3
  264. package/dist/migrations/202107302158.js.map +1 -0
  265. package/dist/migrations/202108022257.d.ts +2 -0
  266. package/dist/migrations/202108022257.d.ts.map +1 -0
  267. package/{migrations → dist/migrations}/202108022257.js +3 -4
  268. package/dist/migrations/202108022257.js.map +1 -0
  269. package/dist/migrations/202109201624.d.ts +2 -0
  270. package/dist/migrations/202109201624.d.ts.map +1 -0
  271. package/{migrations → dist/migrations}/202109201624.js +2 -1
  272. package/dist/migrations/202109201624.js.map +1 -0
  273. package/dist/migrations/202109301031.d.ts +3 -0
  274. package/dist/migrations/202109301031.d.ts.map +1 -0
  275. package/{migrations → dist/migrations}/202109301031.js +2 -2
  276. package/dist/migrations/202109301031.js.map +1 -0
  277. package/dist/migrations/202111290253.d.ts +3 -0
  278. package/dist/migrations/202111290253.d.ts.map +1 -0
  279. package/dist/migrations/202111290253.js +5 -0
  280. package/dist/migrations/202111290253.js.map +1 -0
  281. package/dist/models/backup.d.ts +22 -0
  282. package/dist/models/backup.d.ts.map +1 -0
  283. package/{models → dist/models}/backup.js +95 -192
  284. package/dist/models/backup.js.map +1 -0
  285. package/dist/models/config.d.ts +180 -0
  286. package/dist/models/config.d.ts.map +1 -0
  287. package/dist/models/config.js +758 -0
  288. package/dist/models/config.js.map +1 -0
  289. package/dist/models/crash.d.ts +74 -0
  290. package/dist/models/crash.d.ts.map +1 -0
  291. package/dist/models/crash.js +118 -0
  292. package/dist/models/crash.js.map +1 -0
  293. package/dist/models/discovery.d.ts +28 -0
  294. package/dist/models/discovery.d.ts.map +1 -0
  295. package/dist/models/discovery.js +163 -0
  296. package/dist/models/discovery.js.map +1 -0
  297. package/dist/models/email.d.ts +16 -0
  298. package/dist/models/email.d.ts.map +1 -0
  299. package/dist/models/email.js +90 -0
  300. package/dist/models/email.js.map +1 -0
  301. package/dist/models/eventlog.d.ts +77 -0
  302. package/dist/models/eventlog.d.ts.map +1 -0
  303. package/dist/models/eventlog.js +132 -0
  304. package/dist/models/eventlog.js.map +1 -0
  305. package/dist/models/expression.d.ts +54 -0
  306. package/dist/models/expression.d.ts.map +1 -0
  307. package/dist/models/expression.js +274 -0
  308. package/dist/models/expression.js.map +1 -0
  309. package/dist/models/field.d.ts +217 -0
  310. package/dist/models/field.d.ts.map +1 -0
  311. package/dist/models/field.js +619 -0
  312. package/dist/models/field.js.map +1 -0
  313. package/dist/models/fieldrepeat.d.ts +49 -0
  314. package/dist/models/fieldrepeat.d.ts.map +1 -0
  315. package/dist/models/fieldrepeat.js +88 -0
  316. package/dist/models/fieldrepeat.js.map +1 -0
  317. package/dist/models/file.d.ts +122 -0
  318. package/dist/models/file.d.ts.map +1 -0
  319. package/dist/models/file.js +224 -0
  320. package/dist/models/file.js.map +1 -0
  321. package/dist/models/form.d.ts +82 -0
  322. package/dist/models/form.d.ts.map +1 -0
  323. package/dist/models/form.js +163 -0
  324. package/dist/models/form.js.map +1 -0
  325. package/dist/models/index.d.ts +1 -0
  326. package/dist/models/index.d.ts.map +1 -0
  327. package/{models → dist/models}/index.js +42 -42
  328. package/dist/models/index.js.map +1 -0
  329. package/dist/models/layout.d.ts +34 -0
  330. package/dist/models/layout.d.ts.map +1 -0
  331. package/dist/models/layout.js +153 -0
  332. package/dist/models/layout.js.map +1 -0
  333. package/dist/models/library.d.ts +50 -0
  334. package/dist/models/library.d.ts.map +1 -0
  335. package/dist/models/library.js +129 -0
  336. package/dist/models/library.js.map +1 -0
  337. package/dist/models/pack.d.ts +89 -0
  338. package/dist/models/pack.d.ts.map +1 -0
  339. package/dist/models/pack.js +390 -0
  340. package/dist/models/pack.js.map +1 -0
  341. package/dist/models/page.d.ts +101 -0
  342. package/dist/models/page.d.ts.map +1 -0
  343. package/dist/models/page.js +223 -0
  344. package/dist/models/page.js.map +1 -0
  345. package/dist/models/plugin.d.ts +100 -0
  346. package/dist/models/plugin.d.ts.map +1 -0
  347. package/dist/models/plugin.js +204 -0
  348. package/dist/models/plugin.js.map +1 -0
  349. package/dist/models/random.d.ts +24 -0
  350. package/dist/models/random.d.ts.map +1 -0
  351. package/dist/models/random.js +186 -0
  352. package/dist/models/random.js.map +1 -0
  353. package/dist/models/role.d.ts +42 -0
  354. package/dist/models/role.d.ts.map +1 -0
  355. package/dist/models/role.js +64 -0
  356. package/dist/models/role.js.map +1 -0
  357. package/dist/models/scheduler.d.ts +18 -0
  358. package/dist/models/scheduler.d.ts.map +1 -0
  359. package/dist/models/scheduler.js +159 -0
  360. package/dist/models/scheduler.js.map +1 -0
  361. package/dist/models/table.d.ts +326 -0
  362. package/dist/models/table.d.ts.map +1 -0
  363. package/dist/models/table.js +1006 -0
  364. package/dist/models/table.js.map +1 -0
  365. package/dist/models/table_constraints.d.ts +69 -0
  366. package/dist/models/table_constraints.d.ts.map +1 -0
  367. package/dist/models/table_constraints.js +118 -0
  368. package/dist/models/table_constraints.js.map +1 -0
  369. package/dist/models/tenant.d.ts +55 -0
  370. package/dist/models/tenant.d.ts.map +1 -0
  371. package/{models → dist/models}/tenant.js +40 -63
  372. package/dist/models/tenant.js.map +1 -0
  373. package/dist/models/trigger.d.ts +133 -0
  374. package/dist/models/trigger.d.ts.map +1 -0
  375. package/dist/models/trigger.js +292 -0
  376. package/dist/models/trigger.js.map +1 -0
  377. package/dist/models/user.d.ts +235 -0
  378. package/dist/models/user.d.ts.map +1 -0
  379. package/dist/models/user.js +434 -0
  380. package/dist/models/user.js.map +1 -0
  381. package/dist/models/view.d.ts +204 -0
  382. package/dist/models/view.d.ts.map +1 -0
  383. package/dist/models/view.js +497 -0
  384. package/dist/models/view.js.map +1 -0
  385. package/dist/models/workflow.d.ts +48 -0
  386. package/dist/models/workflow.d.ts.map +1 -0
  387. package/dist/models/workflow.js +190 -0
  388. package/dist/models/workflow.js.map +1 -0
  389. package/dist/plugin-helper.d.ts +145 -0
  390. package/dist/plugin-helper.d.ts.map +1 -0
  391. package/dist/plugin-helper.js +1158 -0
  392. package/dist/plugin-helper.js.map +1 -0
  393. package/dist/plugin-testing.d.ts +3 -0
  394. package/dist/plugin-testing.d.ts.map +1 -0
  395. package/dist/plugin-testing.js +120 -0
  396. package/dist/plugin-testing.js.map +1 -0
  397. package/dist/tests/actions.test.d.ts +2 -0
  398. package/dist/tests/actions.test.d.ts.map +1 -0
  399. package/dist/tests/actions.test.js +205 -0
  400. package/dist/tests/actions.test.js.map +1 -0
  401. package/dist/tests/auxtest.test.d.ts +2 -0
  402. package/dist/tests/auxtest.test.d.ts.map +1 -0
  403. package/dist/tests/auxtest.test.js +48 -0
  404. package/dist/tests/auxtest.test.js.map +1 -0
  405. package/dist/tests/backup.test.d.ts +2 -0
  406. package/dist/tests/backup.test.d.ts.map +1 -0
  407. package/dist/tests/backup.test.js +88 -0
  408. package/dist/tests/backup.test.js.map +1 -0
  409. package/dist/tests/calc.test.d.ts +2 -0
  410. package/dist/tests/calc.test.d.ts.map +1 -0
  411. package/dist/tests/calc.test.js +231 -0
  412. package/dist/tests/calc.test.js.map +1 -0
  413. package/dist/tests/config.test.d.ts +2 -0
  414. package/dist/tests/config.test.d.ts.map +1 -0
  415. package/dist/tests/config.test.js +83 -0
  416. package/dist/tests/config.test.js.map +1 -0
  417. package/dist/tests/discover.test.d.ts +2 -0
  418. package/dist/tests/discover.test.d.ts.map +1 -0
  419. package/dist/tests/discover.test.js +106 -0
  420. package/dist/tests/discover.test.js.map +1 -0
  421. package/dist/tests/exact_views.test.d.ts +2 -0
  422. package/dist/tests/exact_views.test.d.ts.map +1 -0
  423. package/dist/tests/exact_views.test.js +511 -0
  424. package/dist/tests/exact_views.test.js.map +1 -0
  425. package/dist/tests/field.test.d.ts +2 -0
  426. package/dist/tests/field.test.d.ts.map +1 -0
  427. package/dist/tests/field.test.js +237 -0
  428. package/dist/tests/field.test.js.map +1 -0
  429. package/dist/tests/form.test.d.ts +2 -0
  430. package/dist/tests/form.test.d.ts.map +1 -0
  431. package/dist/tests/form.test.js +191 -0
  432. package/dist/tests/form.test.js.map +1 -0
  433. package/dist/tests/mocks.d.ts +111 -0
  434. package/dist/tests/mocks.d.ts.map +1 -0
  435. package/dist/tests/mocks.js +165 -0
  436. package/dist/tests/mocks.js.map +1 -0
  437. package/dist/tests/models.test.d.ts +2 -0
  438. package/dist/tests/models.test.d.ts.map +1 -0
  439. package/dist/tests/models.test.js +210 -0
  440. package/dist/tests/models.test.js.map +1 -0
  441. package/dist/tests/pack.test.d.ts +2 -0
  442. package/dist/tests/pack.test.d.ts.map +1 -0
  443. package/dist/tests/pack.test.js +331 -0
  444. package/dist/tests/pack.test.js.map +1 -0
  445. package/dist/tests/plugin.test.d.ts +2 -0
  446. package/dist/tests/plugin.test.d.ts.map +1 -0
  447. package/dist/tests/plugin.test.js +53 -0
  448. package/dist/tests/plugin.test.js.map +1 -0
  449. package/dist/tests/random.test.d.ts +2 -0
  450. package/dist/tests/random.test.d.ts.map +1 -0
  451. package/dist/tests/random.test.js +138 -0
  452. package/dist/tests/random.test.js.map +1 -0
  453. package/dist/tests/table.test.d.ts +2 -0
  454. package/dist/tests/table.test.d.ts.map +1 -0
  455. package/dist/tests/table.test.js +1048 -0
  456. package/dist/tests/table.test.js.map +1 -0
  457. package/dist/tests/tenant.test.d.ts +2 -0
  458. package/dist/tests/tenant.test.d.ts.map +1 -0
  459. package/dist/tests/tenant.test.js +45 -0
  460. package/dist/tests/tenant.test.js.map +1 -0
  461. package/dist/tests/user.test.d.ts +2 -0
  462. package/dist/tests/user.test.d.ts.map +1 -0
  463. package/dist/tests/user.test.js +190 -0
  464. package/dist/tests/user.test.js.map +1 -0
  465. package/dist/tests/view.test.d.ts +2 -0
  466. package/dist/tests/view.test.d.ts.map +1 -0
  467. package/dist/tests/view.test.js +238 -0
  468. package/dist/tests/view.test.js.map +1 -0
  469. package/dist/tests/workflow.test.d.ts +2 -0
  470. package/dist/tests/workflow.test.d.ts.map +1 -0
  471. package/dist/tests/workflow.test.js +115 -0
  472. package/dist/tests/workflow.test.js.map +1 -0
  473. package/dist/tsconfig.ref.tsbuildinfo +1 -0
  474. package/dist/utils.d.ts +26 -0
  475. package/dist/utils.d.ts.map +1 -0
  476. package/dist/utils.js +124 -0
  477. package/dist/utils.js.map +1 -0
  478. package/package.json +34 -8
  479. package/base-plugin/actions.js +0 -629
  480. package/base-plugin/base.test.js +0 -15
  481. package/base-plugin/fieldviews.js +0 -197
  482. package/base-plugin/fileviews.js +0 -65
  483. package/base-plugin/types.js +0 -1154
  484. package/base-plugin/viewtemplates/edit.js +0 -672
  485. package/base-plugin/viewtemplates/feed.js +0 -434
  486. package/base-plugin/viewtemplates/filter.js +0 -358
  487. package/base-plugin/viewtemplates/list.js +0 -575
  488. package/base-plugin/viewtemplates/listshowlist.js +0 -292
  489. package/base-plugin/viewtemplates/room.js +0 -652
  490. package/base-plugin/viewtemplates/show.js +0 -689
  491. package/base-plugin/viewtemplates/viewable_fields.js +0 -714
  492. package/contracts.js +0 -311
  493. package/db/connect.js +0 -151
  494. package/db/db.test.js +0 -33
  495. package/db/fixtures.js +0 -303
  496. package/db/index.js +0 -63
  497. package/db/state.js +0 -674
  498. package/migrate.js +0 -99
  499. package/migrations/202008031500.js +0 -4
  500. package/migrations/202009181655.js +0 -6
  501. package/migrations/202009221105.js +0 -4
  502. package/migrations/202009301531.js +0 -7
  503. package/migrations/202010231444.js +0 -4
  504. package/migrations/202010251412.js +0 -9
  505. package/migrations/202101141128.js +0 -4
  506. package/migrations/202102091312.js +0 -19
  507. package/migrations/202102101624.js +0 -5
  508. package/migrations/202102261650.js +0 -6
  509. package/migrations/202106251126.js +0 -5
  510. package/models/config.js +0 -680
  511. package/models/crash.js +0 -126
  512. package/models/discovery.js +0 -195
  513. package/models/email.js +0 -92
  514. package/models/eventlog.js +0 -146
  515. package/models/expression.js +0 -276
  516. package/models/field.js +0 -746
  517. package/models/fieldrepeat.js +0 -96
  518. package/models/file.js +0 -234
  519. package/models/form.js +0 -169
  520. package/models/layout.js +0 -146
  521. package/models/library.js +0 -135
  522. package/models/pack.js +0 -466
  523. package/models/page.js +0 -255
  524. package/models/plugin.js +0 -219
  525. package/models/random.js +0 -206
  526. package/models/role.js +0 -94
  527. package/models/scheduler.js +0 -163
  528. package/models/table.js +0 -1211
  529. package/models/table_constraints.js +0 -133
  530. package/models/trigger.js +0 -327
  531. package/models/user.js +0 -503
  532. package/models/view.js +0 -622
  533. package/models/workflow.js +0 -205
  534. package/plugin-helper.js +0 -1311
  535. package/plugin-testing.js +0 -124
  536. package/tests/actions.test.js +0 -232
  537. package/tests/auxtest.test.js +0 -52
  538. package/tests/backup.test.js +0 -92
  539. package/tests/calc.test.js +0 -243
  540. package/tests/config.test.js +0 -91
  541. package/tests/discover.test.js +0 -114
  542. package/tests/exact_views.test.js +0 -526
  543. package/tests/field.test.js +0 -253
  544. package/tests/form.test.js +0 -198
  545. package/tests/mocks.js +0 -173
  546. package/tests/models.test.js +0 -221
  547. package/tests/pack.test.js +0 -350
  548. package/tests/plugin.test.js +0 -59
  549. package/tests/random.test.js +0 -154
  550. package/tests/table.test.js +0 -1091
  551. package/tests/tenant.test.js +0 -56
  552. package/tests/user.test.js +0 -196
  553. package/tests/view.test.js +0 -251
  554. package/tests/workflow.test.js +0 -119
  555. package/utils.js +0 -137
package/plugin-helper.js DELETED
@@ -1,1311 +0,0 @@
1
- /**
2
- * Plugin-helper
3
- * @category saltcorn-data
4
- * @module plugin-helper
5
- */
6
- const View = require("./models/view");
7
- const Field = require("./models/field");
8
- const Table = require("./models/table");
9
- const Trigger = require("./models/trigger");
10
-
11
- const { getState } = require("./db/state");
12
- const db = require("./db");
13
- const { contract, is } = require("contractis");
14
- const {
15
- fieldlike,
16
- is_table_query,
17
- is_column,
18
- is_tablely,
19
- } = require("./contracts");
20
- const { link } = require("@saltcorn/markup");
21
- const { button, a, label, text, i } = require("@saltcorn/markup/tags");
22
- const { applyAsync, InvalidConfiguration } = require("./utils");
23
- const { jsexprToSQL } = require("./models/expression");
24
- /**
25
- *
26
- * @param {string} url
27
- * @param {string} label
28
- * @param {boolean} [popup]
29
- * @param {string} [link_style = ""]
30
- * @param {string} [link_size = ""]
31
- * @param {string} [link_icon = ""]
32
- * @param {string} [textStyle = ""]
33
- * @param {string} [link_bgcol]
34
- * @param {string} [link_bordercol]
35
- * @param {string} [link_textcol]
36
- * @returns {button|a}
37
- */
38
- const link_view = (
39
- url,
40
- label,
41
- popup,
42
- link_style = "",
43
- link_size = "",
44
- link_icon = "",
45
- textStyle = "",
46
- link_bgcol,
47
- link_bordercol,
48
- link_textcol
49
- ) => {
50
- let style =
51
- link_style === "btn btn-custom-color"
52
- ? `background-color: ${link_bgcol || "#000000"};border-color: ${
53
- link_bordercol || "#000000"
54
- }; color: ${link_textcol || "#000000"}`
55
- : null;
56
- if (popup) {
57
- return button(
58
- {
59
- class: [
60
- textStyle,
61
- link_style,
62
- link_size,
63
- !link_style && "btn btn-link",
64
- ],
65
- onClick: `ajax_modal('${url}')`,
66
- style,
67
- },
68
- link_icon ? i({ class: link_icon }) + " " : "",
69
- label
70
- );
71
- } else
72
- return a(
73
- {
74
- href: url,
75
- class: [textStyle, link_style, link_size],
76
- style,
77
- },
78
- link_icon ? i({ class: link_icon }) + " " : "",
79
- text(label)
80
- );
81
- };
82
-
83
- /**
84
- * @function
85
- * @param {object} [state]
86
- * @returns {string}
87
- */
88
- const stateToQueryString = contract(
89
- is.fun(is.maybe(is.obj()), is.str),
90
- (state) => {
91
- if (!state || Object.keys(state).length === 0) return "";
92
-
93
- return (
94
- "?" +
95
- Object.entries(state)
96
- .map(([k, v]) =>
97
- k === "id"
98
- ? null
99
- : `${encodeURIComponent(k)}=${encodeURIComponent(v)}`
100
- )
101
- .filter((s) => !!s)
102
- .join("&")
103
- );
104
- }
105
- );
106
-
107
- /**
108
- * @function
109
- * @param {Field[]} fields
110
- * @param {boolean}
111
- * @returns {object}
112
- */
113
- const calcfldViewOptions = contract(
114
- is.fun(
115
- [is.array(is.class("Field")), is.str],
116
- is.obj({ field_view_options: is.objVals(is.array(is.str)) })
117
- ),
118
- (fields, mode) => {
119
- const isEdit = mode === "edit";
120
- const isFilter = mode === "filter";
121
- let fvs = {};
122
- const handlesTextStyle = {};
123
- fields.forEach((f) => {
124
- handlesTextStyle[f.name] = [];
125
- if (f.type === "File") {
126
- if (!isEdit && !isFilter)
127
- fvs[f.name] = Object.keys(getState().fileviews);
128
- else fvs[f.name] = ["upload"];
129
- } else if (f.type === "Key") {
130
- if (isEdit) fvs[f.name] = Object.keys(getState().keyFieldviews);
131
- else {
132
- if (f.reftable && f.reftable.fields) {
133
- const { field_view_options } = calcfldViewOptions(
134
- f.reftable.fields,
135
- mode
136
- );
137
- for (const jf of f.reftable.fields) {
138
- fvs[`${f.name}.${jf.name}`] = field_view_options[jf.name];
139
- }
140
- }
141
- fvs[f.name] = ["show"];
142
- }
143
- Object.entries(getState().keyFieldviews).forEach(([k, v]) => {
144
- if (v && v.handlesTextStyle) handlesTextStyle[f.name].push(k);
145
- });
146
- } else if (f.type && f.type.fieldviews) {
147
- const tfvs = Object.entries(f.type.fieldviews).filter(([k, fv]) =>
148
- f.calculated ? !fv.isEdit : !fv.isEdit || isEdit || isFilter
149
- );
150
- let tfvs_ordered = [];
151
- if (isEdit) {
152
- tfvs_ordered = [
153
- ...tfvs.filter(([k, fv]) => fv.isEdit),
154
- ...tfvs.filter(([k, fv]) => !fv.isEdit && !fv.isFilter),
155
- ];
156
- } else if (isFilter) {
157
- tfvs_ordered = [
158
- ...tfvs.filter(([k, fv]) => fv.isFilter),
159
- ...tfvs.filter(([k, fv]) => fv.isEdit),
160
- ];
161
- } else tfvs_ordered = tfvs.filter(([k, fv]) => !fv.isFilter);
162
- fvs[f.name] = tfvs_ordered.map(([k, fv]) => {
163
- if (fv && fv.handlesTextStyle) handlesTextStyle[f.name].push(k);
164
- return k;
165
- });
166
- }
167
- });
168
- return { field_view_options: fvs, handlesTextStyle };
169
- }
170
- );
171
-
172
- /**
173
- * @function
174
- * @param {Field[]} fields
175
- * @param {boolean}
176
- * @returns {Promise<object>}
177
- */
178
- const calcfldViewConfig = contract(
179
- is.fun([is.array(is.class("Field")), is.bool], is.promise(is.obj())),
180
- async (fields, isEdit) => {
181
- const fieldViewConfigForms = {};
182
- for (const f of fields) {
183
- fieldViewConfigForms[f.name] = {};
184
- const fieldviews =
185
- f.type === "Key"
186
- ? getState().keyFieldviews
187
- : (f.type && f.type.fieldviews) || {};
188
- for (const [nm, fv] of Object.entries(fieldviews)) {
189
- if (fv.configFields)
190
- fieldViewConfigForms[f.name][nm] = await applyAsync(
191
- fv.configFields,
192
- f
193
- );
194
- }
195
- }
196
- return fieldViewConfigForms;
197
- }
198
- );
199
-
200
- /**
201
- * @function
202
- * @param {Table|object} table
203
- * @param {string} viewname
204
- * @param {boolean}
205
- * @returns {Promise<object[]>}
206
- */
207
- const get_link_view_opts = contract(
208
- is.fun(
209
- [is_tablely, is.str],
210
- is.promise(is.array(is.obj({ label: is.str, name: is.str })))
211
- ),
212
- async (table, viewname) => {
213
- const own_link_views = await View.find_possible_links_to_table(table);
214
- const link_view_opts = own_link_views
215
- .filter((v) => v.name !== viewname)
216
- .map((v) => ({
217
- label: `${v.name} [${v.viewtemplate} ${table.name}]`,
218
- name: `Own:${v.name}`,
219
- }));
220
- const link_view_names = new Set();
221
- const child_views = await get_child_views(table, viewname);
222
- for (const { relation, related_table, views } of child_views) {
223
- for (const view of views) {
224
- const name = `${view.name}.${related_table.name}.${relation.name}`;
225
- link_view_names.add(name);
226
- link_view_opts.push({
227
- name: `ChildList:${view.name}.${related_table.name}.${relation.name}`,
228
- label: `${view.name} [${view.viewtemplate} ${related_table.name}.${relation.label}]`,
229
- });
230
- }
231
- }
232
-
233
- const parent_views = await get_parent_views(table, viewname);
234
- for (const { relation, related_table, views } of parent_views) {
235
- for (const view of views) {
236
- link_view_opts.push({
237
- name: `ParentShow:${view.name}.${related_table.name}.${relation.name}`,
238
- label: `${view.name} [${view.viewtemplate} ${relation.name}.${related_table.name}]`,
239
- });
240
- }
241
- }
242
- const onetoone_views = await get_onetoone_views(table, viewname);
243
- for (const { relation, related_table, views } of onetoone_views) {
244
- for (const view of views) {
245
- const name = `${view.name}.${related_table.name}.${relation.name}`;
246
- if (!link_view_names.has(name))
247
- link_view_opts.push({
248
- name: `OneToOneShow:${view.name}.${related_table.name}.${relation.name}`,
249
- label: `${view.name} [${view.viewtemplate} ${related_table.name}.${relation.label}]`,
250
- });
251
- }
252
- }
253
- const independent_views = await View.find_all_views_where(
254
- ({ state_fields }) => !state_fields.some((sf) => sf.required)
255
- );
256
- independent_views.forEach((view) => {
257
- link_view_opts.push({
258
- label: `${view.name} [${view.viewtemplate}]`,
259
- name: `Independent:${view.name}`,
260
- });
261
- });
262
- return link_view_opts;
263
- }
264
- );
265
-
266
- /**
267
- * Get Action configuration fields
268
- * @param {object} action
269
- * @param {object} table
270
- * @returns {Promise<object[]>}
271
- */
272
- const getActionConfigFields = async (action, table) =>
273
- typeof action.configFields === "function"
274
- ? await action.configFields({ table })
275
- : action.configFields || [];
276
-
277
- /**
278
- * @function
279
- * @param {Table|object} table
280
- * @param {string} viewname
281
- * @param {object} req
282
- * @returns {Promise<object[]>}
283
- */
284
- const field_picker_fields = contract(
285
- is.fun(
286
- is.obj({ table: is_tablely, viewname: is.str }),
287
- is.promise(is.array(fieldlike))
288
- ),
289
- async ({ table, viewname, req }) => {
290
- const __ = (...s) => (req ? req.__(...s) : s.join(""));
291
- const fields = await table.getFields();
292
- for (const field of fields) {
293
- if (field.type === "Key") {
294
- field.reftable = await Table.findOne({ name: field.reftable_name });
295
- if (field.reftable) await field.reftable.getFields();
296
- }
297
- }
298
- const boolfields = fields.filter((f) => f.type && f.type.name === "Bool");
299
-
300
- const stateActions = getState().actions;
301
- const stateActionKeys = Object.entries(stateActions)
302
- .filter(([k, v]) => !v.requireRow && !v.disableInList)
303
- .map(([k, v]) => k);
304
- const actions = [
305
- "Delete",
306
- ...boolfields.map((f) => `Toggle ${f.name}`),
307
- ...stateActionKeys,
308
- ];
309
- const triggers = await Trigger.find({
310
- when_trigger: { or: ["API call", "Never"] },
311
- });
312
- triggers.forEach((tr) => {
313
- actions.push(tr.name);
314
- });
315
- const actionConfigFields = [];
316
- for (const [name, action] of Object.entries(stateActions)) {
317
- if (!stateActionKeys.includes(name)) continue;
318
- const cfgFields = await getActionConfigFields(action, table);
319
-
320
- for (const field of cfgFields) {
321
- const cfgFld = {
322
- ...field,
323
- showIf: {
324
- action_name: name,
325
- type: "Action",
326
- ...(field.showIf || {}),
327
- },
328
- };
329
- if (cfgFld.input_type === "code") cfgFld.input_type = "textarea";
330
- actionConfigFields.push(cfgFld);
331
- }
332
- }
333
- const fldOptions = fields.map((f) => f.name);
334
- const { field_view_options } = calcfldViewOptions(fields, "show");
335
- const fieldViewConfigForms = await calcfldViewConfig(fields, false);
336
- const fvConfigFields = [];
337
- for (const [field_name, fvOptFields] of Object.entries(
338
- fieldViewConfigForms
339
- )) {
340
- for (const [fieldview, formFields] of Object.entries(fvOptFields)) {
341
- for (const formField of formFields) {
342
- fvConfigFields.push({
343
- ...formField,
344
- showIf: {
345
- type: "Field",
346
- field_name,
347
- fieldview,
348
- },
349
- });
350
- }
351
- }
352
- }
353
- const link_view_opts = await get_link_view_opts(table, viewname);
354
-
355
- const { parent_field_list } = await table.get_parent_relations(true);
356
- const {
357
- child_field_list,
358
- child_relations,
359
- } = await table.get_child_relations();
360
- const aggStatOptions = {};
361
- const agg_field_opts = child_relations.map(({ table, key_field }) => {
362
- aggStatOptions[`${table.name}.${key_field.name}`] = [
363
- "Count",
364
- "Avg",
365
- "Sum",
366
- "Max",
367
- "Min",
368
- ];
369
- table.fields.forEach((f) => {
370
- if (f.type && f.type.name === "Date") {
371
- aggStatOptions[`${table.name}.${key_field.name}`].push(
372
- `Latest ${f.name}`
373
- );
374
- }
375
- });
376
- return {
377
- name: `agg_field`,
378
- label: __("On Field"),
379
- type: "String",
380
- required: true,
381
- attributes: {
382
- options: table.fields
383
- .filter((f) => !f.calculated || f.stored)
384
- .map((f) => f.name),
385
- },
386
- showIf: {
387
- agg_relation: `${table.name}.${key_field.name}`,
388
- type: "Aggregation",
389
- },
390
- };
391
- });
392
- return [
393
- {
394
- name: "type",
395
- label: __("Type"),
396
- type: "String",
397
- required: true,
398
- attributes: {
399
- //TODO omit when no options
400
- options: [
401
- {
402
- name: "Field",
403
- label: __(`Field in %s table`, table.name),
404
- },
405
- { name: "Action", label: __("Action on row") },
406
-
407
- ...(link_view_opts.length > 0
408
- ? [{ name: "ViewLink", label: __("Link to other view") }]
409
- : []),
410
- { name: "Link", label: __("Link to anywhere") },
411
- ...(parent_field_list.length > 0
412
- ? [{ name: "JoinField", label: __("Join Field") }]
413
- : []),
414
- ...(child_field_list.length > 0
415
- ? [{ name: "Aggregation", label: __("Aggregation") }]
416
- : []),
417
- ],
418
- },
419
- },
420
- {
421
- name: "field_name",
422
- label: __("Field"),
423
- type: "String",
424
- required: true,
425
- attributes: {
426
- options: fldOptions,
427
- },
428
- showIf: { type: "Field" },
429
- },
430
- {
431
- name: "fieldview",
432
- label: __("Field view"),
433
- type: "String",
434
- required: false,
435
- attributes: {
436
- calcOptions: ["field_name", field_view_options],
437
- },
438
- showIf: { type: "Field" },
439
- },
440
- ...fvConfigFields,
441
- {
442
- name: "action_name",
443
- label: __("Action"),
444
- type: "String",
445
- required: true,
446
- attributes: {
447
- options: actions,
448
- },
449
- showIf: { type: "Action" },
450
- },
451
- {
452
- name: "action_label",
453
- label: __("Action Label"),
454
- type: "String",
455
- showIf: { type: "Action" },
456
- },
457
- {
458
- name: "action_label_formula",
459
- label: __("Action label is a formula?"),
460
- type: "Bool",
461
- required: false,
462
- showIf: { type: "Action" },
463
- },
464
- {
465
- name: "action_style",
466
- label: __("Action Style"),
467
- type: "String",
468
- required: true,
469
- attributes: {
470
- options: [
471
- { name: "btn-primary", label: "Primary button" },
472
- { name: "btn-secondary", label: "Secondary button" },
473
- { name: "btn-success", label: "Success button" },
474
- { name: "btn-danger", label: "Danger button" },
475
- { name: "btn-outline-primary", label: "Primary outline button" },
476
- {
477
- name: "btn-outline-secondary",
478
- label: "Secondary outline button",
479
- },
480
- { name: "btn-link", label: "Link" },
481
- ],
482
- },
483
-
484
- showIf: { type: "Action" },
485
- },
486
- {
487
- name: "action_size",
488
- label: __("Button size"),
489
- type: "String",
490
- required: true,
491
- attributes: {
492
- options: [
493
- { name: "", label: "Standard" },
494
- { name: "btn-lg", label: "Large" },
495
- { name: "btn-sm", label: "Small" },
496
- { name: "btn-block", label: "Block" },
497
- { name: "btn-block btn-lg", label: "Large block" },
498
- ],
499
- },
500
- showIf: { type: "Action" },
501
- },
502
- {
503
- name: "confirm",
504
- label: __("User confirmation?"),
505
- type: "Bool",
506
- showIf: { type: "Action" },
507
- },
508
- ...actionConfigFields,
509
- {
510
- name: "view",
511
- label: __("View"),
512
- type: "String",
513
- required: true,
514
- attributes: {
515
- options: link_view_opts,
516
- },
517
- showIf: { type: "ViewLink" },
518
- },
519
- {
520
- name: "view_label",
521
- label: __("View label"),
522
- sublabel: __("Leave blank for default label."),
523
- type: "String",
524
- required: false,
525
- showIf: { type: "ViewLink" },
526
- },
527
- {
528
- name: "view_label_formula",
529
- label: __("View label is a formula?"),
530
- type: "Bool",
531
- required: false,
532
- showIf: { type: "ViewLink" },
533
- },
534
- {
535
- name: "in_modal",
536
- label: __("Open in popup modal?"),
537
- type: "Bool",
538
- required: false,
539
- showIf: { type: "ViewLink" },
540
- },
541
- {
542
- name: "link_style",
543
- label: __("Link Style"),
544
- type: "String",
545
- required: true,
546
- attributes: {
547
- options: [
548
- { name: "", label: "Link" },
549
- { name: "btn btn-primary", label: "Primary button" },
550
- { name: "btn btn-secondary", label: "Secondary button" },
551
- { name: "btn btn-success", label: "Success button" },
552
- { name: "btn btn-danger", label: "Danger button" },
553
- {
554
- name: "btn btn-outline-primary",
555
- label: "Primary outline button",
556
- },
557
- {
558
- name: "btn btn-outline-secondary",
559
- label: "Secondary outline button",
560
- },
561
- ],
562
- },
563
-
564
- showIf: { type: "ViewLink" },
565
- },
566
- {
567
- name: "link_size",
568
- label: __("Link size"),
569
- type: "String",
570
- required: true,
571
- attributes: {
572
- options: [
573
- { name: "", label: "Standard" },
574
- { name: "btn-lg", label: "Large" },
575
- { name: "btn-sm", label: "Small" },
576
- { name: "btn-block", label: "Block" },
577
- { name: "btn-block btn-lg", label: "Large block" },
578
- ],
579
- },
580
- showIf: { type: "ViewLink" },
581
- },
582
- {
583
- name: "link_text",
584
- label: __("Link text"),
585
- type: "String",
586
- required: true,
587
- showIf: { type: "Link" },
588
- },
589
- {
590
- name: "link_text_formula",
591
- label: __("Link text is a formula?"),
592
- type: "Bool",
593
- required: false,
594
- showIf: { type: "Link" },
595
- },
596
- {
597
- name: "link_url",
598
- label: __("Link URL"),
599
- type: "String",
600
- required: true,
601
- showIf: { type: "Link" },
602
- },
603
- {
604
- name: "link_url_formula",
605
- label: __("Link URL is a formula?"),
606
- type: "Bool",
607
- required: false,
608
- showIf: { type: "Link" },
609
- },
610
- {
611
- name: "link_target_blank",
612
- label: __("Open in new tab"),
613
- type: "Bool",
614
- required: false,
615
- showIf: { type: "Link" },
616
- },
617
- {
618
- name: "join_field",
619
- label: __("Join Field"),
620
- type: "String",
621
- required: true,
622
- attributes: {
623
- options: parent_field_list,
624
- },
625
- showIf: { type: "JoinField" },
626
- },
627
- {
628
- name: "agg_relation",
629
- label: __("Relation"),
630
- type: "String",
631
- required: true,
632
- attributes: {
633
- options: child_field_list,
634
- },
635
- showIf: { type: "Aggregation" },
636
- },
637
- ...agg_field_opts,
638
- {
639
- name: "stat",
640
- label: __("Statistic"),
641
- type: "String",
642
- required: true,
643
- attributes: {
644
- calcOptions: ["agg_relation", aggStatOptions],
645
- },
646
-
647
- showIf: { type: "Aggregation" },
648
- },
649
- {
650
- name: "aggwhere",
651
- label: __("Where"),
652
- sublabel: __("Formula"),
653
- type: "String",
654
- required: false,
655
- showIf: { type: "Aggregation" },
656
- },
657
- {
658
- name: "state_field",
659
- label: __("In search form"),
660
- type: "Bool",
661
- showIf: { type: "Field" },
662
- },
663
- {
664
- name: "header_label",
665
- label: __("Header label"),
666
- type: "String",
667
- },
668
- {
669
- name: "col_width",
670
- label: __("Column width"),
671
- type: "Integer",
672
- },
673
- {
674
- name: "col_width_units",
675
- label: __("Column width units"),
676
- type: "String",
677
- required: true,
678
- fieldview: "radio_group",
679
- attributes: {
680
- inline: true,
681
- options: ["px", "%", "vw", "em", "rem"],
682
- },
683
- },
684
- ];
685
- }
686
- );
687
-
688
- /**
689
- * get_child_views Contract
690
- * @function
691
- * @param {Table|object} table
692
- * @param {string} viewname
693
- * @returns {Promise<object[]>}
694
- */
695
- const get_child_views = contract(
696
- is.fun(
697
- [is_tablely, is.str],
698
- is.promise(
699
- is.array(
700
- is.obj({
701
- relation: is.class("Field"),
702
- related_table: is.class("Table"),
703
- views: is.array(is.class("View")),
704
- })
705
- )
706
- )
707
- ),
708
- async (table, viewname) => {
709
- const rels = await Field.find({ reftable_name: table.name });
710
- var child_views = [];
711
- for (const relation of rels) {
712
- const related_table = await Table.findOne({ id: relation.table_id });
713
- const views = await View.find_table_views_where(
714
- related_table.id,
715
- ({ state_fields, viewrow }) =>
716
- viewrow.name !== viewname && state_fields.every((sf) => !sf.required)
717
- );
718
- child_views.push({ relation, related_table, views });
719
- }
720
- return child_views;
721
- }
722
- );
723
-
724
- /**
725
- * get_parent_views Contract
726
- * @function
727
- * @param {Table|object} table
728
- * @param {string} viewname
729
- * @returns {Promise<object[]>}
730
- */
731
- const get_parent_views = contract(
732
- is.fun(
733
- [is_tablely, is.str],
734
- is.promise(
735
- is.array(
736
- is.obj({
737
- relation: is.class("Field"),
738
- related_table: is.class("Table"),
739
- views: is.array(is.class("View")),
740
- })
741
- )
742
- )
743
- ),
744
- async (table, viewname) => {
745
- var parent_views = [];
746
- const parentrels = (await table.getFields()).filter(
747
- (f) => f.is_fkey && f.type !== "File"
748
- );
749
- for (const relation of parentrels) {
750
- const related_table = await Table.findOne({
751
- name: relation.reftable_name,
752
- });
753
- const views = await View.find_table_views_where(
754
- related_table,
755
- ({ state_fields, viewrow }) =>
756
- viewrow.name !== viewname &&
757
- state_fields.some((sf) => sf.name === "id")
758
- );
759
-
760
- parent_views.push({ relation, related_table, views });
761
- }
762
- return parent_views;
763
- }
764
- );
765
-
766
- /**
767
- * get_onetoone_views Contract
768
- * @function
769
- * @param {Table|is_tablely} table
770
- * @param {string} viewname
771
- * @returns {Promise<object[]>}
772
- */
773
- const get_onetoone_views = contract(
774
- is.fun(
775
- [is_tablely, is.str],
776
- is.promise(
777
- is.array(
778
- is.obj({
779
- relation: is.class("Field"),
780
- related_table: is.class("Table"),
781
- views: is.array(is.class("View")),
782
- })
783
- )
784
- )
785
- ),
786
- async (table, viewname) => {
787
- const rels = await Field.find({
788
- reftable_name: table.name,
789
- is_unique: true,
790
- });
791
- var child_views = [];
792
- for (const relation of rels) {
793
- const related_table = await Table.findOne({ id: relation.table_id });
794
- const views = await View.find_table_views_where(
795
- related_table.id,
796
- ({ state_fields, viewrow }) =>
797
- viewrow.name !== viewname &&
798
- state_fields.some((sf) => sf.name === "id")
799
- );
800
- child_views.push({ relation, related_table, views });
801
- }
802
- return child_views;
803
- }
804
- );
805
-
806
- /**
807
- * picked_fields_to_query Contract
808
- * @function
809
- * @param {object[]} columns
810
- * @param {Field[]} fields
811
- * @throws {InvalidConfiguration}
812
- * @returns {object}
813
- */
814
- const picked_fields_to_query = contract(
815
- is.fun([is.array(is_column), is.array(is.class("Field"))], is_table_query),
816
- (columns, fields) => {
817
- var joinFields = {};
818
- var aggregations = {};
819
- (columns || []).forEach((column) => {
820
- if (column.type === "JoinField") {
821
- if (column.join_field && column.join_field.split) {
822
- const kpath = column.join_field.split(".");
823
- if (kpath.length === 2) {
824
- const [refNm, targetNm] = kpath;
825
- joinFields[`${refNm}_${targetNm}`] = {
826
- ref: refNm,
827
- target: targetNm,
828
- };
829
- } else {
830
- const [refNm, through, targetNm] = kpath;
831
- joinFields[`${refNm}_${through}_${targetNm}`] = {
832
- ref: refNm,
833
- target: targetNm,
834
- through,
835
- };
836
- }
837
- } else {
838
- throw new InvalidConfiguration(
839
- `Join field is specified as column but no join field is chosen`
840
- );
841
- }
842
- } else if (column.type === "ViewLink") {
843
- if (column.view && column.view.split) {
844
- const [vtype, vrest] = column.view.split(":");
845
- if (vtype === "ParentShow") {
846
- const [pviewnm, ptbl, pfld] = vrest.split(".");
847
- const field = fields.find((f) => f.name === pfld);
848
- if (field && field.attributes.summary_field)
849
- joinFields[`summary_field_${ptbl.toLowerCase()}`] = {
850
- ref: pfld,
851
- target: field.attributes.summary_field,
852
- };
853
- }
854
- }
855
- } else if (column.type === "Aggregation") {
856
- //console.log(column)
857
- if (column.agg_relation && column.agg_relation.split) {
858
- const [table, fld] = column.agg_relation.split(".");
859
- const field = column.agg_field;
860
- const targetNm = (
861
- column.stat.replace(" ", "") +
862
- "_" +
863
- table +
864
- "_" +
865
- fld +
866
- db.sqlsanitize(column.aggwhere || "")
867
- ).toLowerCase();
868
- aggregations[targetNm] = {
869
- table,
870
- ref: fld,
871
- where: jsexprToSQL(column.aggwhere),
872
- field,
873
- aggregate: column.stat,
874
- };
875
- }
876
- }
877
- });
878
-
879
- return { joinFields, aggregations };
880
- }
881
- );
882
-
883
- /**
884
- * @function
885
- * @param {object}
886
- * @param {object}
887
- * @param {string} - missing in contract
888
- * @returns {object}
889
- */
890
- const stateFieldsToQuery = contract(
891
- is.fun(is.obj(), is.obj()),
892
- ({ state, fields, prefix = "" }) => {
893
- let q = {};
894
- const stateKeys = Object.keys(state);
895
- if (state._sortby) {
896
- const field = fields.find((f) => f.name === state._sortby);
897
- //this is ok because it has to match fieldname
898
- if (field) q.orderBy = state._sortby;
899
- if (state._sortdesc) q.orderDesc = true;
900
- }
901
- if (state._pagesize) q.limit = parseInt(state._pagesize);
902
- if (state._pagesize && state._page)
903
- q.offset = (parseInt(state._page) - 1) * parseInt(state._pagesize);
904
- const latNear = stateKeys.find((k) => k.startsWith("_near_lat_"));
905
- const longNear = stateKeys.find((k) => k.startsWith("_near_long_"));
906
- if (latNear && longNear) {
907
- const latField =
908
- prefix + db.sqlsanitize(latNear.replace("_near_lat_", ""));
909
- const longField =
910
- prefix + db.sqlsanitize(longNear.replace("_near_long_", ""));
911
- const lat = parseFloat(state[latNear]);
912
- const long = parseFloat(state[longNear]);
913
- q.orderBy = { distance: { lat, long, latField, longField } };
914
- }
915
- return q;
916
- }
917
- );
918
-
919
- /**
920
- *
921
- * @param {object} container
922
- * @param {string} key
923
- * @param {object} x
924
- * @returns {void}
925
- */
926
- const addOrCreateList = (container, key, x) => {
927
- if (container[key]) container[key].push(x);
928
- else container[key] = [x];
929
- };
930
-
931
- /**
932
- * @function
933
- * @param {object} opts
934
- * @param {Field[]} opts.fields
935
- * @param {object} opts.state missing in contract
936
- * @param {boolean} [opts.approximate = true]
937
- * @returns {object}
938
- */
939
- const stateFieldsToWhere = contract(
940
- is.fun(
941
- is.obj({
942
- fields: is.array(is.class("Field")),
943
- approximate: is.maybe(is.bool),
944
- }),
945
- is.obj()
946
- ),
947
- ({ fields, state, approximate = true }) => {
948
- var qstate = {};
949
- Object.entries(state).forEach(([k, v]) => {
950
- if (k === "_fts") {
951
- qstate[k] = { searchTerm: v.replace(/\0/g, ""), fields };
952
- return;
953
- }
954
- const field = fields.find((fld) => fld.name == k);
955
- if (k.startsWith("_fromdate_")) {
956
- const datefield = db.sqlsanitize(k.replace("_fromdate_", ""));
957
- const dfield = fields.find((fld) => fld.name == datefield);
958
- if (dfield)
959
- addOrCreateList(qstate, datefield, { gt: new Date(v), equal: true });
960
- } else if (k.startsWith("_todate_")) {
961
- const datefield = db.sqlsanitize(k.replace("_todate_", ""));
962
- const dfield = fields.find((fld) => fld.name == datefield);
963
- if (dfield)
964
- addOrCreateList(qstate, datefield, { lt: new Date(v), equal: true });
965
- } else if (k.startsWith("_gte_")) {
966
- const datefield = db.sqlsanitize(k.replace("_gte_", ""));
967
- const dfield = fields.find((fld) => fld.name == datefield);
968
- if (dfield) addOrCreateList(qstate, datefield, { gt: v, equal: true });
969
- } else if (k.startsWith("_lte_")) {
970
- const datefield = db.sqlsanitize(k.replace("_lte_", ""));
971
- const dfield = fields.find((fld) => fld.name == datefield);
972
- if (dfield) addOrCreateList(qstate, datefield, { lt: v, equal: true });
973
- } else if (
974
- field &&
975
- field.type.name === "String" &&
976
- !(field.attributes && field.attributes.options) &&
977
- approximate
978
- ) {
979
- qstate[k] = { ilike: v };
980
- } else if (field && field.type.name === "Bool" && state[k] === "?") {
981
- // omit
982
- } else if (field && field.type && field.type.read)
983
- qstate[k] = Array.isArray(v)
984
- ? { or: v.map(field.type.read) }
985
- : field.type.read(v);
986
- else if (field) qstate[k] = v;
987
- else if (k.includes(".")) {
988
- const kpath = k.split(".");
989
- if (kpath.length === 3) {
990
- const [jtNm, jFieldNm, lblField] = kpath;
991
- qstate.id = [
992
- ...(qstate.id ? [qstate.id] : []),
993
- {
994
- // where id in (select jFieldNm from jtnm where lblField=v)
995
- inSelect: {
996
- table: `${db.getTenantSchemaPrefix()}"${db.sqlsanitize(jtNm)}"`,
997
- field: db.sqlsanitize(jFieldNm),
998
- where: { [db.sqlsanitize(lblField)]: v },
999
- },
1000
- },
1001
- ];
1002
- }
1003
- }
1004
- });
1005
- return qstate;
1006
- }
1007
- );
1008
-
1009
- /**
1010
- * initial_config_all_fields Contract
1011
- * @function
1012
- * @param {boolean}
1013
- * @returns {function}
1014
- */
1015
- const initial_config_all_fields = contract(
1016
- is.fun(
1017
- is.bool,
1018
- is.fun(
1019
- is.obj({ table_id: is.posint }),
1020
- is.promise(is.obj({ columns: is.array(is.obj()), layout: is.obj() }))
1021
- )
1022
- ),
1023
- (isEdit) => async ({ table_id, exttable_name }) => {
1024
- const table = await Table.findOne(
1025
- table_id ? { id: table_id } : { name: exttable_name }
1026
- );
1027
-
1028
- const fields = (await table.getFields()).filter(
1029
- (f) => !f.primary_key && (!isEdit || !f.calculated)
1030
- );
1031
- var cfg = { columns: [] };
1032
- var aboves = [null];
1033
- fields.forEach((f) => {
1034
- if (!f.type) return;
1035
- const flabel = {
1036
- above: [
1037
- null,
1038
- {
1039
- type: "blank",
1040
- block: false,
1041
- contents: f.label,
1042
- textStyle: "",
1043
- ...(isEdit ? { labelFor: f.name } : {}),
1044
- },
1045
- ],
1046
- };
1047
- if (
1048
- f.is_fkey &&
1049
- f.type !== "File" &&
1050
- f.reftable_name !== "users" &&
1051
- !isEdit
1052
- ) {
1053
- cfg.columns.push({
1054
- type: "JoinField",
1055
- join_field: `${f.name}.${f.attributes.summary_field}`,
1056
- });
1057
- aboves.push({
1058
- widths: [2, 10],
1059
- besides: [
1060
- flabel,
1061
- {
1062
- above: [
1063
- null,
1064
- {
1065
- type: "join_field",
1066
- block: false,
1067
- textStyle: "",
1068
- join_field: `${f.name}.${f.attributes.summary_field}`,
1069
- },
1070
- ],
1071
- },
1072
- ],
1073
- });
1074
- } else if (f.reftable_name !== "users") {
1075
- const fvNm = f.type.fieldviews
1076
- ? Object.entries(f.type.fieldviews).find(
1077
- ([nm, fv]) => fv.isEdit === isEdit
1078
- )[0]
1079
- : f.type === "File" && !isEdit
1080
- ? Object.keys(getState().fileviews)[0]
1081
- : f.type === "File" && isEdit
1082
- ? "upload"
1083
- : f.type === "Key"
1084
- ? "select"
1085
- : undefined;
1086
- cfg.columns.push({
1087
- field_name: f.name,
1088
- type: "Field",
1089
- fieldview: fvNm,
1090
- state_field: true,
1091
- });
1092
- aboves.push({
1093
- widths: [2, 10],
1094
- besides: [
1095
- flabel,
1096
- {
1097
- above: [
1098
- null,
1099
- {
1100
- type: "field",
1101
- block: false,
1102
- fieldview: fvNm,
1103
- textStyle: "",
1104
- field_name: f.name,
1105
- },
1106
- ],
1107
- },
1108
- ],
1109
- });
1110
- }
1111
- aboves.push({ type: "line_break" });
1112
- });
1113
- if (isEdit)
1114
- aboves.push({
1115
- type: "action",
1116
- block: false,
1117
- minRole: 10,
1118
- action_name: "Save",
1119
- });
1120
- cfg.layout = { above: aboves };
1121
- return cfg;
1122
- }
1123
- );
1124
-
1125
- /**
1126
- *
1127
- * @param {string} x
1128
- * @returns {number|undefined}
1129
- */
1130
- const strictParseInt = (x) => {
1131
- const y = +x;
1132
- return !isNaN(y) && y ? y : undefined;
1133
- };
1134
-
1135
- /**
1136
- *
1137
- * @param {object} state
1138
- * @param {object[]} fields
1139
- * @returns {object}
1140
- */
1141
- const readState = (state, fields, req) => {
1142
- fields.forEach((f) => {
1143
- const current = state[f.name];
1144
- if (typeof current !== "undefined") {
1145
- if (Array.isArray(current) && f.type.read) {
1146
- state[f.name] = current.map(f.type.read);
1147
- } else if (f.type.read) state[f.name] = f.type.read(current);
1148
- else if (typeof current === "string" && current.startsWith("Preset:")) {
1149
- const preset = f.presets[current.replace("Preset:", "")];
1150
- state[f.name] = preset(req);
1151
- } else if (f.type === "Key" || f.type === "File")
1152
- state[f.name] =
1153
- current === "null" || current === "" || current === null
1154
- ? null
1155
- : getState().types[f.reftype].read(current);
1156
- }
1157
- });
1158
- return state;
1159
- };
1160
-
1161
- /**
1162
- *
1163
- * @param {object} state
1164
- * @param {object[]} fields
1165
- * @returns {boolean|*}
1166
- */
1167
- const readStateStrict = (state, fields) => {
1168
- let hasErrors = false;
1169
- fields.forEach((f) => {
1170
- const current = state[f.name];
1171
- //console.log(f.name, current, typeof current);
1172
-
1173
- if (typeof current !== "undefined") {
1174
- if (f.type.read) {
1175
- const readval = f.type.read(current);
1176
- if (typeof readval === "undefined") {
1177
- if (current === "" && !f.required) delete state[f.name];
1178
- else hasErrors = true;
1179
- }
1180
- if (f.type && f.type.validate) {
1181
- const vres = f.type.validate(f.attributes || {})(readval);
1182
- if (vres.error) hasErrors = true;
1183
- }
1184
- state[f.name] = readval;
1185
- } else if (f.type === "Key" || f.type === "File")
1186
- state[f.name] =
1187
- current === "null" || current === "" || current === null
1188
- ? null
1189
- : +current;
1190
- } else if (f.required && !f.primary_key) hasErrors = true;
1191
- });
1192
- return hasErrors ? false : state;
1193
- };
1194
- /**
1195
- *
1196
- * @param {function} get_json_list
1197
- * @param {object[]} fields0
1198
- * @returns {object}
1199
- */
1200
- const json_list_to_external_table = (get_json_list, fields0) => {
1201
- const fields = fields0.map((f) =>
1202
- f.constructor.name === Object.name ? new Field(f) : f
1203
- );
1204
- const getRows = async (where = {}, selopts = {}) => {
1205
- let data_in = await get_json_list({ where, ...selopts });
1206
- const restricts = Object.entries(where);
1207
- const data_filtered =
1208
- restricts.length === 0
1209
- ? data_in
1210
- : data_in.filter((x) => restricts.every(([k, v]) => x[k] === v));
1211
- if (selopts.orderBy) {
1212
- const cmp = selopts.orderDesc
1213
- ? new Function(
1214
- "a,b",
1215
- `return b.${selopts.orderBy}-a.${selopts.orderBy}`
1216
- )
1217
- : new Function(
1218
- "a,b",
1219
- `return a.${selopts.orderBy}-b.${selopts.orderBy}`
1220
- );
1221
- data_filtered.sort(cmp);
1222
- }
1223
- if (selopts.limit)
1224
- return data_filtered.slice(
1225
- selopts.offset || 0,
1226
- (selopts.offset || 0) + selopts.limit
1227
- );
1228
- else return data_filtered;
1229
- };
1230
- const tbl = {
1231
- getFields() {
1232
- return fields;
1233
- },
1234
- fields,
1235
- getRows,
1236
- get min_role_read() {
1237
- const roles = getState().getConfig("exttables_min_role_read", {});
1238
- return roles[tbl.name] || 10;
1239
- },
1240
- getJoinedRows(opts = {}) {
1241
- const { where, ...rest } = opts;
1242
- return getRows(where || {}, rest || {});
1243
- },
1244
- async countRows(where) {
1245
- let data_in = await get_json_list({ where });
1246
- return data_in.length;
1247
- },
1248
- get_child_relations() {
1249
- return { child_relations: [], child_field_list: [] };
1250
- },
1251
- get_parent_relations() {
1252
- return { parent_relations: [], parent_field_list: [] };
1253
- },
1254
- external: true,
1255
- owner_fieldname() {
1256
- return null;
1257
- },
1258
- async distinctValues(fldNm) {
1259
- let data_in = await get_json_list({});
1260
- const s = new Set(data_in.map((x) => x[fldNm]));
1261
- return [...s];
1262
- },
1263
- };
1264
- return tbl;
1265
- };
1266
-
1267
- /**
1268
- *
1269
- * @param {object} col
1270
- * @param {object} req
1271
- * @param {...*} rest
1272
- * @returns {Promise<*>}
1273
- */
1274
- const run_action_column = async ({ col, req, ...rest }) => {
1275
- let state_action = getState().actions[col.action_name];
1276
- let configuration;
1277
- if (state_action) configuration = col.configuration;
1278
- else {
1279
- const trigger = await Trigger.findOne({ name: col.action_name });
1280
- state_action = getState().actions[trigger.action];
1281
- configuration = trigger.configuration;
1282
- }
1283
- return await state_action.run({
1284
- configuration,
1285
- user: req.user,
1286
- req,
1287
- ...rest,
1288
- });
1289
- };
1290
-
1291
- module.exports = {
1292
- field_picker_fields,
1293
- picked_fields_to_query,
1294
- get_child_views,
1295
- get_parent_views,
1296
- stateFieldsToWhere,
1297
- stateFieldsToQuery,
1298
- initial_config_all_fields,
1299
- calcfldViewOptions,
1300
- get_link_view_opts,
1301
- is_column,
1302
- readState,
1303
- readStateStrict,
1304
- stateToQueryString,
1305
- link_view,
1306
- getActionConfigFields,
1307
- calcfldViewConfig,
1308
- strictParseInt,
1309
- run_action_column,
1310
- json_list_to_external_table,
1311
- };