@things-factory/dataset 8.0.40 → 9.0.0-9.0.0-beta.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/dist-client/bootstrap.d.ts +8 -8
  2. package/dist-client/bootstrap.js +8 -8
  3. package/dist-client/bootstrap.js.map +1 -1
  4. package/dist-client/components/data-entry-form.js.map +1 -1
  5. package/dist-client/pages/data-archive/data-archive-list-page.d.ts +1 -1
  6. package/dist-client/pages/data-archive/data-archive-list-page.js +1 -1
  7. package/dist-client/pages/data-archive/data-archive-list-page.js.map +1 -1
  8. package/dist-client/pages/data-entry/data-entry-list-page.js +2 -2
  9. package/dist-client/pages/data-entry/data-entry-list-page.js.map +1 -1
  10. package/dist-client/pages/data-key-set/data-key-set-list-page.d.ts +1 -1
  11. package/dist-client/pages/data-key-set/data-key-set-list-page.js +1 -1
  12. package/dist-client/pages/data-key-set/data-key-set-list-page.js.map +1 -1
  13. package/dist-client/pages/data-report/data-report-list-page.js +1 -1
  14. package/dist-client/pages/data-report/data-report-list-page.js.map +1 -1
  15. package/dist-client/pages/data-set/data-set-list-page.js +2 -5
  16. package/dist-client/pages/data-set/data-set-list-page.js.map +1 -1
  17. package/dist-client/pages/data-summary/data-summary-period-page.js +53 -37
  18. package/dist-client/pages/data-summary/data-summary-period-page.js.map +1 -1
  19. package/dist-client/tsconfig.tsbuildinfo +1 -1
  20. package/dist-server/activities/activity-data-review.js +9 -9
  21. package/dist-server/activities/activity-data-review.js.map +1 -1
  22. package/dist-server/activities/activity-ooc-resolve.js +3 -3
  23. package/dist-server/activities/activity-ooc-resolve.js.map +1 -1
  24. package/dist-server/activities/activity-ooc-review.js +5 -5
  25. package/dist-server/activities/activity-ooc-review.js.map +1 -1
  26. package/dist-server/activities/index.js +5 -5
  27. package/dist-server/activities/index.js.map +1 -1
  28. package/dist-server/controllers/create-data-ooc.d.ts +3 -3
  29. package/dist-server/controllers/create-data-ooc.js +4 -6
  30. package/dist-server/controllers/create-data-ooc.js.map +1 -1
  31. package/dist-server/controllers/create-data-sample.d.ts +2 -2
  32. package/dist-server/controllers/create-data-sample.js +13 -13
  33. package/dist-server/controllers/create-data-sample.js.map +1 -1
  34. package/dist-server/controllers/data-use-case.d.ts +2 -2
  35. package/dist-server/controllers/data-use-case.js.map +1 -1
  36. package/dist-server/controllers/finalize-data-collection.d.ts +1 -1
  37. package/dist-server/controllers/finalize-data-collection.js +21 -21
  38. package/dist-server/controllers/finalize-data-collection.js.map +1 -1
  39. package/dist-server/controllers/index.d.ts +6 -6
  40. package/dist-server/controllers/index.js +6 -6
  41. package/dist-server/controllers/index.js.map +1 -1
  42. package/dist-server/controllers/issue-data-collection-task.js +3 -3
  43. package/dist-server/controllers/issue-data-collection-task.js.map +1 -1
  44. package/dist-server/controllers/issue-ooc-review.d.ts +2 -2
  45. package/dist-server/controllers/issue-ooc-review.js +2 -2
  46. package/dist-server/controllers/issue-ooc-review.js.map +1 -1
  47. package/dist-server/controllers/jasper-report.js +2 -2
  48. package/dist-server/controllers/jasper-report.js.map +1 -1
  49. package/dist-server/controllers/query-data-summary-by-period.d.ts +2 -2
  50. package/dist-server/controllers/query-data-summary-by-period.js +23 -17
  51. package/dist-server/controllers/query-data-summary-by-period.js.map +1 -1
  52. package/dist-server/controllers/shiny-report.js +2 -2
  53. package/dist-server/controllers/shiny-report.js.map +1 -1
  54. package/dist-server/engine/index.d.ts +1 -1
  55. package/dist-server/engine/index.js +1 -1
  56. package/dist-server/engine/index.js.map +1 -1
  57. package/dist-server/engine/task/create-data-sample.js +4 -4
  58. package/dist-server/engine/task/create-data-sample.js.map +1 -1
  59. package/dist-server/engine/task/index.d.ts +2 -2
  60. package/dist-server/engine/task/index.js +2 -2
  61. package/dist-server/engine/task/index.js.map +1 -1
  62. package/dist-server/engine/task/issue-collect-data.js +2 -2
  63. package/dist-server/engine/task/issue-collect-data.js.map +1 -1
  64. package/dist-server/index.d.ts +6 -6
  65. package/dist-server/index.js +6 -6
  66. package/dist-server/index.js.map +1 -1
  67. package/dist-server/routes.js +12 -12
  68. package/dist-server/routes.js.map +1 -1
  69. package/dist-server/service/data-archive/data-archive-mutation.d.ts +2 -2
  70. package/dist-server/service/data-archive/data-archive-mutation.js +22 -22
  71. package/dist-server/service/data-archive/data-archive-mutation.js.map +1 -1
  72. package/dist-server/service/data-archive/data-archive-query.d.ts +2 -2
  73. package/dist-server/service/data-archive/data-archive-query.js +10 -10
  74. package/dist-server/service/data-archive/data-archive-query.js.map +1 -1
  75. package/dist-server/service/data-archive/data-archive-type.d.ts +1 -1
  76. package/dist-server/service/data-archive/data-archive-type.js +2 -2
  77. package/dist-server/service/data-archive/data-archive-type.js.map +1 -1
  78. package/dist-server/service/data-archive/index.d.ts +3 -3
  79. package/dist-server/service/data-archive/index.js +5 -5
  80. package/dist-server/service/data-archive/index.js.map +1 -1
  81. package/dist-server/service/data-key-set/data-key-set-mutation.d.ts +2 -2
  82. package/dist-server/service/data-key-set/data-key-set-mutation.js +20 -20
  83. package/dist-server/service/data-key-set/data-key-set-mutation.js.map +1 -1
  84. package/dist-server/service/data-key-set/data-key-set-query.d.ts +2 -2
  85. package/dist-server/service/data-key-set/data-key-set-query.js +12 -12
  86. package/dist-server/service/data-key-set/data-key-set-query.js.map +1 -1
  87. package/dist-server/service/data-key-set/data-key-set-type.d.ts +3 -3
  88. package/dist-server/service/data-key-set/data-key-set-type.js +6 -6
  89. package/dist-server/service/data-key-set/data-key-set-type.js.map +1 -1
  90. package/dist-server/service/data-key-set/data-key-set.d.ts +2 -2
  91. package/dist-server/service/data-key-set/data-key-set.js +3 -3
  92. package/dist-server/service/data-key-set/data-key-set.js.map +1 -1
  93. package/dist-server/service/data-key-set/index.d.ts +3 -3
  94. package/dist-server/service/data-key-set/index.js +5 -5
  95. package/dist-server/service/data-key-set/index.js.map +1 -1
  96. package/dist-server/service/data-ooc/data-ooc-mutation.d.ts +2 -2
  97. package/dist-server/service/data-ooc/data-ooc-mutation.js +11 -11
  98. package/dist-server/service/data-ooc/data-ooc-mutation.js.map +1 -1
  99. package/dist-server/service/data-ooc/data-ooc-query.d.ts +5 -5
  100. package/dist-server/service/data-ooc/data-ooc-query.js +27 -27
  101. package/dist-server/service/data-ooc/data-ooc-query.js.map +1 -1
  102. package/dist-server/service/data-ooc/data-ooc-subscription.d.ts +1 -1
  103. package/dist-server/service/data-ooc/data-ooc-subscription.js +3 -3
  104. package/dist-server/service/data-ooc/data-ooc-subscription.js.map +1 -1
  105. package/dist-server/service/data-ooc/data-ooc-type.d.ts +1 -1
  106. package/dist-server/service/data-ooc/data-ooc-type.js +4 -4
  107. package/dist-server/service/data-ooc/data-ooc-type.js.map +1 -1
  108. package/dist-server/service/data-ooc/data-ooc.d.ts +3 -3
  109. package/dist-server/service/data-ooc/data-ooc.js +10 -10
  110. package/dist-server/service/data-ooc/data-ooc.js.map +1 -1
  111. package/dist-server/service/data-ooc/index.d.ts +4 -4
  112. package/dist-server/service/data-ooc/index.js +6 -6
  113. package/dist-server/service/data-ooc/index.js.map +1 -1
  114. package/dist-server/service/data-sample/data-sample-mutation.d.ts +2 -2
  115. package/dist-server/service/data-sample/data-sample-mutation.js +7 -7
  116. package/dist-server/service/data-sample/data-sample-mutation.js.map +1 -1
  117. package/dist-server/service/data-sample/data-sample-query.d.ts +6 -6
  118. package/dist-server/service/data-sample/data-sample-query.js +44 -37
  119. package/dist-server/service/data-sample/data-sample-query.js.map +1 -1
  120. package/dist-server/service/data-sample/data-sample-type.d.ts +1 -1
  121. package/dist-server/service/data-sample/data-sample-type.js +2 -2
  122. package/dist-server/service/data-sample/data-sample-type.js.map +1 -1
  123. package/dist-server/service/data-sample/data-sample.d.ts +3 -3
  124. package/dist-server/service/data-sample/data-sample.js +10 -10
  125. package/dist-server/service/data-sample/data-sample.js.map +1 -1
  126. package/dist-server/service/data-sample/index.d.ts +3 -3
  127. package/dist-server/service/data-sample/index.js +5 -5
  128. package/dist-server/service/data-sample/index.js.map +1 -1
  129. package/dist-server/service/data-sensor/data-sensor-mutation.d.ts +2 -2
  130. package/dist-server/service/data-sensor/data-sensor-mutation.js +14 -14
  131. package/dist-server/service/data-sensor/data-sensor-mutation.js.map +1 -1
  132. package/dist-server/service/data-sensor/data-sensor-query.d.ts +3 -3
  133. package/dist-server/service/data-sensor/data-sensor-query.js +16 -16
  134. package/dist-server/service/data-sensor/data-sensor-query.js.map +1 -1
  135. package/dist-server/service/data-sensor/data-sensor-type.d.ts +1 -1
  136. package/dist-server/service/data-sensor/data-sensor-type.js +2 -2
  137. package/dist-server/service/data-sensor/data-sensor-type.js.map +1 -1
  138. package/dist-server/service/data-sensor/data-sensor.d.ts +1 -1
  139. package/dist-server/service/data-sensor/data-sensor.js +3 -3
  140. package/dist-server/service/data-sensor/data-sensor.js.map +1 -1
  141. package/dist-server/service/data-sensor/index.d.ts +3 -3
  142. package/dist-server/service/data-sensor/index.js +5 -5
  143. package/dist-server/service/data-sensor/index.js.map +1 -1
  144. package/dist-server/service/data-set/data-set-mutation.d.ts +2 -2
  145. package/dist-server/service/data-set/data-set-mutation.js +32 -32
  146. package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
  147. package/dist-server/service/data-set/data-set-query.d.ts +4 -4
  148. package/dist-server/service/data-set/data-set-query.js +44 -44
  149. package/dist-server/service/data-set/data-set-query.js.map +1 -1
  150. package/dist-server/service/data-set/data-set-type.d.ts +2 -2
  151. package/dist-server/service/data-set/data-set-type.js +5 -5
  152. package/dist-server/service/data-set/data-set-type.js.map +1 -1
  153. package/dist-server/service/data-set/data-set.d.ts +2 -2
  154. package/dist-server/service/data-set/data-set.js +6 -6
  155. package/dist-server/service/data-set/data-set.js.map +1 -1
  156. package/dist-server/service/data-set/index.d.ts +3 -3
  157. package/dist-server/service/data-set/index.js +5 -5
  158. package/dist-server/service/data-set/index.js.map +1 -1
  159. package/dist-server/service/data-set-history/data-set-history-query.d.ts +4 -4
  160. package/dist-server/service/data-set-history/data-set-history-query.js +22 -22
  161. package/dist-server/service/data-set-history/data-set-history-query.js.map +1 -1
  162. package/dist-server/service/data-set-history/data-set-history-type.d.ts +1 -1
  163. package/dist-server/service/data-set-history/data-set-history-type.js +2 -2
  164. package/dist-server/service/data-set-history/data-set-history-type.js.map +1 -1
  165. package/dist-server/service/data-set-history/data-set-history.d.ts +2 -2
  166. package/dist-server/service/data-set-history/data-set-history.js +3 -3
  167. package/dist-server/service/data-set-history/data-set-history.js.map +1 -1
  168. package/dist-server/service/data-set-history/event-subscriber.d.ts +2 -2
  169. package/dist-server/service/data-set-history/event-subscriber.js +4 -4
  170. package/dist-server/service/data-set-history/event-subscriber.js.map +1 -1
  171. package/dist-server/service/data-set-history/index.d.ts +3 -3
  172. package/dist-server/service/data-set-history/index.js +6 -6
  173. package/dist-server/service/data-set-history/index.js.map +1 -1
  174. package/dist-server/service/data-spec/data-spec-manager.d.ts +1 -1
  175. package/dist-server/service/data-spec/data-spec-manager.js.map +1 -1
  176. package/dist-server/service/data-spec/data-spec-query.d.ts +1 -1
  177. package/dist-server/service/data-spec/data-spec-query.js +9 -9
  178. package/dist-server/service/data-spec/data-spec-query.js.map +1 -1
  179. package/dist-server/service/data-spec/index.d.ts +2 -2
  180. package/dist-server/service/data-spec/index.js +4 -4
  181. package/dist-server/service/data-spec/index.js.map +1 -1
  182. package/dist-server/service/data-summary/data-summary-mutation.js +11 -8
  183. package/dist-server/service/data-summary/data-summary-mutation.js.map +1 -1
  184. package/dist-server/service/data-summary/data-summary-query.d.ts +5 -5
  185. package/dist-server/service/data-summary/data-summary-query.js +31 -31
  186. package/dist-server/service/data-summary/data-summary-query.js.map +1 -1
  187. package/dist-server/service/data-summary/data-summary-type.d.ts +1 -1
  188. package/dist-server/service/data-summary/data-summary-type.js +2 -2
  189. package/dist-server/service/data-summary/data-summary-type.js.map +1 -1
  190. package/dist-server/service/data-summary/data-summary.d.ts +2 -2
  191. package/dist-server/service/data-summary/data-summary.js +6 -6
  192. package/dist-server/service/data-summary/data-summary.js.map +1 -1
  193. package/dist-server/service/data-summary/index.d.ts +3 -3
  194. package/dist-server/service/data-summary/index.js +5 -5
  195. package/dist-server/service/data-summary/index.js.map +1 -1
  196. package/dist-server/service/index.d.ts +12 -12
  197. package/dist-server/service/index.js +37 -37
  198. package/dist-server/service/index.js.map +1 -1
  199. package/dist-server/tsconfig.tsbuildinfo +1 -1
  200. package/dist-server/utils/index.d.ts +1 -1
  201. package/dist-server/utils/index.js +1 -1
  202. package/dist-server/utils/index.js.map +1 -1
  203. package/package.json +26 -26
  204. package/translations/en.json +2 -0
  205. package/translations/ja.json +2 -0
  206. package/translations/ko.json +2 -0
  207. package/translations/ms.json +2 -0
  208. package/translations/zh.json +2 -0
  209. package/client/activities/activity-data-collect-edit.ts +0 -158
  210. package/client/activities/activity-data-collect-view.ts +0 -91
  211. package/client/activities/activity-data-review-edit.ts +0 -299
  212. package/client/activities/activity-data-review-view.ts +0 -249
  213. package/client/activities/activity-ooc-resolve-edit.ts +0 -202
  214. package/client/activities/activity-ooc-resolve-view.ts +0 -150
  215. package/client/activities/activity-ooc-review-edit.ts +0 -197
  216. package/client/activities/activity-ooc-review-view.ts +0 -136
  217. package/client/bootstrap.ts +0 -35
  218. package/client/components/checklist-entry-form.ts +0 -109
  219. package/client/components/data-entry-form.ts +0 -109
  220. package/client/index.ts +0 -1
  221. package/client/pages/data-archive/data-archive-list-page.ts +0 -277
  222. package/client/pages/data-archive/data-archive-request-popup.ts +0 -177
  223. package/client/pages/data-entry/data-entry-list-page.ts +0 -477
  224. package/client/pages/data-key-set/data-key-item-list.ts +0 -183
  225. package/client/pages/data-key-set/data-key-set-importer.ts +0 -89
  226. package/client/pages/data-key-set/data-key-set-list-page.ts +0 -413
  227. package/client/pages/data-ooc/data-ooc-list-page.ts +0 -549
  228. package/client/pages/data-ooc/data-ooc-page.ts +0 -167
  229. package/client/pages/data-ooc/data-ooc-view.ts +0 -239
  230. package/client/pages/data-ooc/data-oocs-page.ts +0 -200
  231. package/client/pages/data-report/data-report-embed-page.ts +0 -108
  232. package/client/pages/data-report/data-report-list-page.ts +0 -454
  233. package/client/pages/data-report/data-report-samples-page.ts +0 -174
  234. package/client/pages/data-report/jasper-report-oocs-page.ts +0 -110
  235. package/client/pages/data-report/jasper-report-samples-crosstab-page.ts +0 -110
  236. package/client/pages/data-report/jasper-report-samples-page.ts +0 -110
  237. package/client/pages/data-sample/data-sample-list-page.ts +0 -442
  238. package/client/pages/data-sample/data-sample-page.ts +0 -55
  239. package/client/pages/data-sample/data-sample-search-page.ts +0 -424
  240. package/client/pages/data-sample/data-sample-view.ts +0 -319
  241. package/client/pages/data-sample/data-samples-page.ts +0 -249
  242. package/client/pages/data-sensor/data-sensor-list-page.ts +0 -480
  243. package/client/pages/data-set/data-item-list.ts +0 -313
  244. package/client/pages/data-set/data-set-importer.ts +0 -89
  245. package/client/pages/data-set/data-set-list-page.ts +0 -1135
  246. package/client/pages/data-summary/data-summary-list-page.ts +0 -363
  247. package/client/pages/data-summary/data-summary-period-page.ts +0 -439
  248. package/client/pages/data-summary/data-summary-search-page.ts +0 -426
  249. package/client/pages/data-summary/data-summary-view.ts +0 -133
  250. package/client/route.ts +0 -91
  251. package/client/tsconfig.json +0 -13
  252. package/server/activities/activity-data-collect.ts +0 -100
  253. package/server/activities/activity-data-review.ts +0 -109
  254. package/server/activities/activity-ooc-resolve.ts +0 -123
  255. package/server/activities/activity-ooc-review.ts +0 -95
  256. package/server/activities/index.ts +0 -11
  257. package/server/controllers/create-data-ooc.ts +0 -80
  258. package/server/controllers/create-data-sample.ts +0 -323
  259. package/server/controllers/data-use-case.ts +0 -98
  260. package/server/controllers/finalize-data-collection.ts +0 -420
  261. package/server/controllers/index.ts +0 -6
  262. package/server/controllers/issue-data-collection-task.ts +0 -70
  263. package/server/controllers/issue-ooc-resolve.ts +0 -58
  264. package/server/controllers/issue-ooc-review.ts +0 -52
  265. package/server/controllers/jasper-report.ts +0 -186
  266. package/server/controllers/query-data-summary-by-period.ts +0 -178
  267. package/server/controllers/shiny-report.ts +0 -54
  268. package/server/engine/index.ts +0 -1
  269. package/server/engine/task/create-data-sample.ts +0 -100
  270. package/server/engine/task/index.ts +0 -2
  271. package/server/engine/task/issue-collect-data.ts +0 -45
  272. package/server/index.ts +0 -8
  273. package/server/routes.ts +0 -188
  274. package/server/service/data-archive/data-archive-mutation.ts +0 -273
  275. package/server/service/data-archive/data-archive-query.ts +0 -58
  276. package/server/service/data-archive/data-archive-type.ts +0 -48
  277. package/server/service/data-archive/data-archive.ts +0 -69
  278. package/server/service/data-archive/index.ts +0 -6
  279. package/server/service/data-key-set/data-key-item-type.ts +0 -31
  280. package/server/service/data-key-set/data-key-set-mutation.ts +0 -201
  281. package/server/service/data-key-set/data-key-set-query.ts +0 -68
  282. package/server/service/data-key-set/data-key-set-type.ts +0 -70
  283. package/server/service/data-key-set/data-key-set.ts +0 -86
  284. package/server/service/data-key-set/index.ts +0 -6
  285. package/server/service/data-ooc/data-ooc-mutation.ts +0 -154
  286. package/server/service/data-ooc/data-ooc-query.ts +0 -106
  287. package/server/service/data-ooc/data-ooc-subscription.ts +0 -48
  288. package/server/service/data-ooc/data-ooc-type.ts +0 -71
  289. package/server/service/data-ooc/data-ooc.ts +0 -259
  290. package/server/service/data-ooc/index.ts +0 -7
  291. package/server/service/data-sample/data-sample-mutation.ts +0 -18
  292. package/server/service/data-sample/data-sample-query.ts +0 -215
  293. package/server/service/data-sample/data-sample-type.ts +0 -47
  294. package/server/service/data-sample/data-sample.ts +0 -193
  295. package/server/service/data-sample/index.ts +0 -6
  296. package/server/service/data-sensor/data-sensor-mutation.ts +0 -116
  297. package/server/service/data-sensor/data-sensor-query.ts +0 -76
  298. package/server/service/data-sensor/data-sensor-type.ts +0 -116
  299. package/server/service/data-sensor/data-sensor.ts +0 -134
  300. package/server/service/data-sensor/index.ts +0 -6
  301. package/server/service/data-set/data-item-type.ts +0 -169
  302. package/server/service/data-set/data-set-mutation.ts +0 -552
  303. package/server/service/data-set/data-set-query.ts +0 -461
  304. package/server/service/data-set/data-set-type.ts +0 -204
  305. package/server/service/data-set/data-set.ts +0 -331
  306. package/server/service/data-set/index.ts +0 -6
  307. package/server/service/data-set-history/data-set-history-query.ts +0 -126
  308. package/server/service/data-set-history/data-set-history-type.ts +0 -12
  309. package/server/service/data-set-history/data-set-history.ts +0 -217
  310. package/server/service/data-set-history/event-subscriber.ts +0 -17
  311. package/server/service/data-set-history/index.ts +0 -7
  312. package/server/service/data-spec/data-spec-manager.ts +0 -21
  313. package/server/service/data-spec/data-spec-query.ts +0 -21
  314. package/server/service/data-spec/data-spec.ts +0 -45
  315. package/server/service/data-spec/index.ts +0 -5
  316. package/server/service/data-summary/data-summary-mutation.ts +0 -45
  317. package/server/service/data-summary/data-summary-query.ts +0 -179
  318. package/server/service/data-summary/data-summary-type.ts +0 -86
  319. package/server/service/data-summary/data-summary.ts +0 -170
  320. package/server/service/data-summary/index.ts +0 -7
  321. package/server/service/index.ts +0 -57
  322. package/server/tsconfig.json +0 -10
  323. package/server/utils/config-resolver.ts +0 -29
  324. package/server/utils/index.ts +0 -1
@@ -1,1135 +0,0 @@
1
- import '@material/web/icon/icon.js'
2
- import '@operato/data-grist'
3
- import '@operato/context/ox-context-page-toolbar.js'
4
- import './data-item-list.js'
5
- import './data-set-importer.js'
6
- import '../../components/data-entry-form.js'
7
- import '../../components/checklist-entry-form.js'
8
-
9
- import gql from 'graphql-tag'
10
- import { css, html } from 'lit'
11
- import { customElement, query, state } from 'lit/decorators.js'
12
- import { asyncReplace } from 'lit/directives/async-replace.js'
13
- import moment from '@operato/moment-timezone-es'
14
- import { connect } from 'pwa-helpers/connect-mixin'
15
-
16
- import { DataGrist, FetchOption, getEditor, getRenderer, ImexConfig } from '@operato/data-grist'
17
- import { OxDataUseCase } from '@operato/dataset'
18
- import { client } from '@operato/graphql'
19
- import { i18next, localize } from '@operato/i18n'
20
- import { notify, openPopup } from '@operato/layout'
21
- import { PageView, store, navigate } from '@operato/shell'
22
- import { CommonGristStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'
23
- import { isMobileDevice, sleep, adjustFilters } from '@operato/utils'
24
-
25
- import { p13n } from '@operato/p13n'
26
- import { provider } from '@things-factory/board-ui/dist-client'
27
-
28
- const MIN = 60
29
- const HOUR = 60 * MIN
30
- const DAY = 24 * HOUR
31
-
32
- function getSystemTimeZone(): string {
33
- try {
34
- const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone
35
- if (!timeZone) {
36
- throw new Error('Unable to resolve timeZone')
37
- }
38
- return timeZone
39
- } catch (e) {
40
- console.warn('Failed to get system timeZone, falling back to UTC.', e)
41
- return 'UTC'
42
- }
43
- }
44
-
45
- const DEFAULT_TZ = getSystemTimeZone()
46
- const TIMEZONE_OPTIONS = ['', DEFAULT_TZ, ...moment.tz.names().filter(tz => tz !== DEFAULT_TZ)]
47
-
48
- const ENTRY_TYPES = [
49
- { display: '', value: '' },
50
- { display: 'Generated', value: 'generated' },
51
- { display: 'Checklist', value: 'checklist' },
52
- { display: 'Board', value: 'board' },
53
- { display: 'CustomElement', value: 'custom-element' },
54
- { display: 'Page', value: 'page' },
55
- { display: 'External URL', value: 'external' }
56
- ]
57
-
58
- const MONITOR_TYPES = [
59
- { display: '', value: '' },
60
- { display: 'Generated', value: 'generated' },
61
- { display: 'Checklist', value: 'checklist' },
62
- { display: 'Board', value: 'board' },
63
- { display: 'CustomElement', value: 'custom-element' },
64
- { display: 'Page', value: 'page' },
65
- { display: 'External URL', value: 'external' }
66
- ]
67
-
68
- const REPORT_TYPES = [
69
- { display: '', value: '' },
70
- { display: 'Generated', value: 'generated' },
71
- { display: 'Embed', value: 'embed' },
72
- { display: 'CustomElement', value: 'custom-element' },
73
- { display: 'Page', value: 'page' },
74
- { display: 'External URL', value: 'external' },
75
- { display: 'Jasper', value: 'jasper' },
76
- { display: 'Shiny', value: 'shiny' }
77
- ]
78
-
79
- const SUMMARY_PERIOD_TYPES = [
80
- { display: '', value: '' },
81
- { display: 'Hour', value: 'hour' },
82
- { display: 'WorkShift', value: 'work-shift' },
83
- { display: 'WorkDate', value: 'work-date' },
84
- { display: 'Day', value: 'day' }
85
- ]
86
-
87
- const USECASE_OPTIONS = () => {
88
- return ['', ...OxDataUseCase.getUseCaseNames()].map(name => {
89
- return {
90
- display: name,
91
- value: name
92
- }
93
- })
94
- }
95
-
96
- export const showEntryView = async (columns, data, column, record, rowIndex) => {
97
- const { name, entryType, entryView } = record
98
- const title = `${name} - ${i18next.t('title.data-entry-form')}`
99
-
100
- switch (entryType) {
101
- case 'generated':
102
- openPopup(html` <data-entry-form .dataSet=${record} style="background-color: white;"></data-entry-form> `, {
103
- closable: true,
104
- backdrop: true,
105
- size: 'large',
106
- title
107
- })
108
- break
109
- case 'checklist':
110
- openPopup(
111
- html` <checklist-entry-form .dataSet=${record} style="background-color: white;"></checklist-entry-form> `,
112
- {
113
- closable: true,
114
- backdrop: true,
115
- size: 'large',
116
- title
117
- }
118
- )
119
- break
120
-
121
- case 'board':
122
- const board = {
123
- id: entryView
124
- }
125
- openPopup(
126
- html`
127
- <ox-board-viewer
128
- style="background-color: white;"
129
- .board=${board}
130
- .provider=${provider}
131
- hide-fullscreen
132
- hide-navigation
133
- ></ox-board-viewer>
134
- `,
135
- {
136
- closable: true,
137
- backdrop: true,
138
- size: 'large',
139
- title
140
- }
141
- )
142
-
143
- // navigate(`board-viewer/${entryView}?interactive=true&title=${title}`)
144
- break
145
- case 'page':
146
- navigate(`${entryView}/${record.id}`)
147
- break
148
-
149
- case 'external':
150
- window.open(entryView, '_blank')
151
- break
152
- }
153
- }
154
-
155
- @customElement('data-set-list-page')
156
- export class DataSetListPage extends connect(store)(p13n(localize(i18next)(PageView))) {
157
- static styles = [
158
- ScrollbarStyles,
159
- CommonGristStyles,
160
- CommonHeaderStyles,
161
- css`
162
- :host {
163
- display: flex;
164
-
165
- width: 100%;
166
-
167
- --grid-record-emphasized-background-color: #8b0000;
168
- --grid-record-emphasized-color: #ff6b6b;
169
-
170
- --grid-header-padding: 2px 0 2px 9px;
171
- }
172
-
173
- ox-grist {
174
- overflow-y: auto;
175
- flex: 1;
176
- }
177
-
178
- .header {
179
- grid-template-areas: 'filters actions';
180
- }
181
- `
182
- ]
183
-
184
- @state() gristConfig: any
185
-
186
- @state() mode: 'CARD' | 'GRID' | 'LIST' = isMobileDevice() ? 'CARD' : 'GRID'
187
-
188
- @query('ox-grist') private grist!: DataGrist
189
-
190
- get context() {
191
- return {
192
- title: i18next.t('title.data-set list'),
193
- search: {
194
- handler: (search: string) => {
195
- this.grist.searchText = search
196
- },
197
- value: this.grist?.searchText || ''
198
- },
199
- filter: {
200
- handler: () => {
201
- this.grist.toggleHeadroom()
202
- }
203
- },
204
- help: 'dataset/data-set',
205
- exportable: {
206
- name: i18next.t('title.data-set list'),
207
- data: this.exportHandler.bind(this)
208
- },
209
- importable: {
210
- handler: this.importHandler.bind(this)
211
- },
212
- actions: [
213
- {
214
- title: i18next.t('button.save'),
215
- action: this._updateDataSet.bind(this),
216
- icon: 'save'
217
- },
218
- {
219
- title: i18next.t('button.copy'),
220
- action: this._copyDataSet.bind(this),
221
- icon: 'content_copy'
222
- },
223
- {
224
- title: i18next.t('button.delete'),
225
- action: this._deleteDataSet.bind(this),
226
- icon: 'delete',
227
- emphasis: {
228
- danger: true
229
- }
230
- }
231
- ],
232
- toolbar: false
233
- }
234
- }
235
-
236
- render() {
237
- const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')
238
-
239
- return html`
240
- <ox-grist
241
- .mode=${mode}
242
- .config=${this.gristConfig}
243
- .personalConfigProvider=${this.getPagePreferenceProvider('ox-grist')!}
244
- .fetchHandler=${this.fetchHandler.bind(this)}
245
- >
246
- <div slot="headroom" class="header">
247
- <div class="filters">
248
- <ox-filters-form autofocus without-search></ox-filters-form>
249
- </div>
250
-
251
- <ox-context-page-toolbar class="actions" .context=${this.context}> </ox-context-page-toolbar>
252
- </div>
253
-
254
- <ox-grist-personalizer slot="setting"></ox-grist-personalizer>
255
- </ox-grist>
256
- `
257
- }
258
-
259
- async pageInitialized(lifecycle) {
260
- this.gristConfig = {
261
- list: {
262
- fields: ['name', 'description'],
263
- details: ['schedule', 'active', 'tag']
264
- },
265
- columns: [
266
- { type: 'gutter', gutterName: 'sequence', fixed: true },
267
- { type: 'gutter', gutterName: 'row-selector', multiple: true, fixed: true },
268
- {
269
- type: 'gutter',
270
- gutterName: 'button',
271
- icon: record => (!record ? 'calendar_add_on' : !record.id || !record.scheduleId ? '' : 'event_available'),
272
- title: i18next.t('button.schedule-task'),
273
- handlers: {
274
- click: (columns, data, column, record, rowIndex) => {
275
- if (!record || !record.id || (!record.scheduleId && !record.schedule)) {
276
- return
277
- }
278
- if (record.scheduleId) {
279
- this.stopDataCollectionSchedule(record)
280
- } else {
281
- this.startDataCollectionSchedule(record)
282
- }
283
- }
284
- }
285
- },
286
- {
287
- type: 'gutter',
288
- gutterName: 'button',
289
- title: record =>
290
- !record ? i18next.t('button.edit-model') : !record.id ? '' : i18next.t('button.edit-model'),
291
- icon: record => (!record ? 'reorder' : !record.id ? '' : 'reorder'),
292
- iconOnly: false,
293
- width: 96,
294
- fixed: true,
295
- handlers: {
296
- click: (columns, data, column, record, rowIndex) => {
297
- if (!record.id) return
298
- const popup = openPopup(html` <data-item-list .dataSet=${record}></data-item-list> `, {
299
- backdrop: true,
300
- help: 'dataset/ui/data-item-list',
301
- size: 'large',
302
- title: i18next.t('title.data-item list')
303
- })
304
- popup.onclosed = () => {
305
- this.grist.fetch()
306
- }
307
- }
308
- }
309
- },
310
- {
311
- type: 'gutter',
312
- gutterName: 'button',
313
- icon: record => (!record ? 'fact_check' : !record.id ? '' : 'fact_check'),
314
- iconOnly: false,
315
- width: 96,
316
- fixed: true,
317
- title: record =>
318
- !record ? i18next.t('button.enter-data') : !record.id ? '' : i18next.t('button.enter-data'),
319
- handlers: {
320
- click: showEntryView
321
- }
322
- },
323
- {
324
- type: 'string',
325
- name: 'name',
326
- header: i18next.t('field.name'),
327
- record: {
328
- editable: true
329
- },
330
- filter: 'search',
331
- sortable: true,
332
- fixed: true,
333
- width: 150,
334
- imex: {
335
- width: 25,
336
- header: i18next.t('field.name'),
337
- type: 'string',
338
- key: 'name'
339
- }
340
- },
341
- {
342
- type: 'string',
343
- name: 'description',
344
- header: i18next.t('field.description'),
345
- record: {
346
- editable: true
347
- },
348
- filter: 'search',
349
- width: 200,
350
- imex: {
351
- width: 33,
352
- header: i18next.t('field.description'),
353
- type: 'string',
354
- key: 'description'
355
- }
356
- },
357
- {
358
- type: 'varname',
359
- name: 'tag',
360
- header: i18next.t('field.tag'),
361
- record: {
362
- editable: true
363
- },
364
- filter: 'search',
365
- width: 120,
366
- imex: {
367
- width: 25,
368
- header: i18next.t('field.tag'),
369
- type: 'string',
370
- key: 'tag'
371
- }
372
- },
373
- {
374
- type: 'checkbox',
375
- name: 'active',
376
- label: true,
377
- header: i18next.t('field.active'),
378
- record: {
379
- editable: true
380
- },
381
- filter: {
382
- type: 'boolean',
383
- value: true
384
- },
385
- sortable: true,
386
- width: 60,
387
- imex: {
388
- width: 10,
389
- header: i18next.t('field.active'),
390
- type: 'checkbox',
391
- key: 'active'
392
- }
393
- },
394
- {
395
- type: 'select',
396
- name: 'type',
397
- label: true,
398
- header: i18next.t('field.type'),
399
- record: {
400
- editable: true,
401
- options: [
402
- {},
403
- {
404
- display: i18next.t('text.manually collected'),
405
- value: 'manual'
406
- },
407
- {
408
- display: i18next.t('text.automatically collected'),
409
- value: 'automatic'
410
- }
411
- ]
412
- },
413
- sortable: true,
414
- filter: true,
415
- width: 60,
416
- imex: {
417
- width: 10,
418
- header: i18next.t('field.type'),
419
- type: 'select',
420
- key: 'type'
421
- }
422
- },
423
- {
424
- type: 'select',
425
- name: 'useCase',
426
- label: true,
427
- header: i18next.t('field.use-case'),
428
- record: {
429
- editable: true,
430
- options: USECASE_OPTIONS
431
- },
432
- sortable: true,
433
- filter: true,
434
- width: 80
435
- },
436
- {
437
- type: 'resource-object',
438
- name: 'dataKeySet',
439
- header: i18next.t('field.data-key-set'),
440
- record: {
441
- editable: true,
442
- options: {
443
- queryName: 'dataKeySets'
444
- }
445
- },
446
- filter: false,
447
- width: 120
448
- },
449
- {
450
- type: 'partition-keys',
451
- name: 'partitionKeys',
452
- header: i18next.t('field.partition-keys'),
453
- record: {
454
- editable: true,
455
- options: {
456
- objectified: true /* transfered as a object type */
457
- }
458
- },
459
- width: 80
460
- },
461
- {
462
- type: 'select',
463
- name: 'timezone',
464
- header: i18next.t('field.timezone'),
465
- record: {
466
- editable: true,
467
- options: TIMEZONE_OPTIONS
468
- },
469
- width: 120,
470
- imex: {
471
- width: 13,
472
- header: i18next.t('field.timezone'),
473
- type: 'select',
474
- key: 'timezone'
475
- }
476
- },
477
- {
478
- type: 'crontab',
479
- name: 'schedule',
480
- label: true,
481
- header: i18next.t('field.schedule'),
482
- record: {
483
- editable: true,
484
- options: {
485
- objectified: true
486
- }
487
- },
488
- width: 80,
489
- imex: {
490
- width: 13,
491
- header: i18next.t('field.schedule'),
492
- type: 'string',
493
- key: 'schedule'
494
- }
495
- },
496
- {
497
- type: 'select',
498
- name: 'summaryPeriod',
499
- label: true,
500
- header: i18next.t('field.summary-period'),
501
- record: {
502
- editable: true,
503
- options: SUMMARY_PERIOD_TYPES
504
- },
505
- width: 80
506
- },
507
- {
508
- type: 'string',
509
- name: 'nextSummarySchedule',
510
- header: i18next.t('field.next-summary-schedule'),
511
- record: {
512
- editable: false,
513
- renderer: (value, column, record, rowIndex, field) => {
514
- return html` <span>${asyncReplace(this.summaryScheduleTimer(record.dueAt))}</span>`
515
- }
516
- },
517
- sortable: false,
518
- width: 140
519
- },
520
- {
521
- type: 'duration',
522
- name: 'timeLimit',
523
- header: i18next.t('field.time-limit'),
524
- record: {
525
- editable: true
526
- },
527
- width: 80
528
- },
529
- {
530
- type: 'resource-object',
531
- name: 'normalScenario',
532
- header: {
533
- renderer: i18next.t('field.normal-scenario'),
534
- group: i18next.t('text.scenario')
535
- },
536
- record: {
537
- editable: true,
538
- options: {
539
- title: i18next.t('title.lookup scenario'),
540
- queryName: 'scenarios',
541
- columns: [
542
- { name: 'id', hidden: true },
543
- { name: 'name', header: i18next.t('field.name'), filter: 'search' },
544
- { name: 'description', header: i18next.t('field.description'), filter: 'search' }
545
- ],
546
- list: { fields: ['name', 'description'] }
547
- }
548
- },
549
- sortable: true,
550
- filter: false,
551
- width: 120
552
- },
553
- {
554
- type: 'resource-object',
555
- name: 'outlierScenario',
556
- header: {
557
- renderer: i18next.t('field.outlier-scenario'),
558
- group: i18next.t('text.scenario')
559
- },
560
- record: {
561
- editable: true,
562
- options: {
563
- title: i18next.t('title.lookup scenario'),
564
- queryName: 'scenarios',
565
- columns: [
566
- { name: 'id', hidden: true },
567
- { name: 'name', header: i18next.t('field.name'), filter: 'search' },
568
- { name: 'description', header: i18next.t('field.description'), filter: 'search' }
569
- ],
570
- list: { fields: ['name', 'description'] }
571
- }
572
- },
573
- sortable: true,
574
- filter: false,
575
- width: 120
576
- },
577
- {
578
- type: 'resource-object',
579
- name: 'supervisoryRole',
580
- header: {
581
- renderer: i18next.t('field.supervisory-role'),
582
- group: i18next.t('field.role')
583
- },
584
- record: {
585
- editable: true,
586
- options: {
587
- title: i18next.t('title.lookup role'),
588
- queryName: 'roles'
589
- }
590
- },
591
- filter: false,
592
- width: 120
593
- },
594
- {
595
- type: 'resource-object',
596
- name: 'entryRole',
597
- header: {
598
- renderer: i18next.t('field.entry-role'),
599
- group: i18next.t('field.role')
600
- },
601
- record: {
602
- editable: true,
603
- options: {
604
- title: i18next.t('title.lookup role'),
605
- queryName: 'roles'
606
- }
607
- },
608
- width: 120
609
- },
610
- {
611
- type: 'resource-object',
612
- name: 'resolverRole',
613
- header: {
614
- renderer: i18next.t('field.resolver-role'),
615
- group: i18next.t('field.role')
616
- },
617
- record: {
618
- editable: true,
619
- options: {
620
- title: i18next.t('title.lookup role'),
621
- queryName: 'roles'
622
- }
623
- },
624
- filter: false,
625
- width: 120
626
- },
627
- {
628
- type: 'approval-line',
629
- name: 'reviewApprovalLine',
630
- header: {
631
- renderer: i18next.t('field.review-approval-line'),
632
- group: i18next.t('field.role')
633
- },
634
- record: {
635
- editable: true
636
- },
637
- width: 80
638
- },
639
- {
640
- type: 'approval-line',
641
- name: 'outlierApprovalLine',
642
- header: {
643
- renderer: i18next.t('field.outlier-approval-line'),
644
- group: i18next.t('field.role')
645
- },
646
- record: {
647
- editable: true
648
- },
649
- width: 80
650
- },
651
- {
652
- type: 'checkbox',
653
- name: 'requiresReview',
654
- label: true,
655
- header: {
656
- renderer: i18next.t('field.requires-review'),
657
- group: i18next.t('field.role')
658
- },
659
- record: {
660
- editable: true
661
- },
662
- filter: true,
663
- width: 60,
664
- imex: {
665
- width: 10,
666
- header: i18next.t('field.requires-review'),
667
- type: 'checkbox',
668
- key: 'requiresReview'
669
- }
670
- },
671
- {
672
- type: 'select',
673
- name: 'entryType',
674
- label: true,
675
- header: {
676
- renderer: i18next.t('field.entry-type'),
677
- group: i18next.t('field.view')
678
- },
679
- record: {
680
- editable: true,
681
- options: ENTRY_TYPES
682
- },
683
- width: 80
684
- },
685
- {
686
- type: 'string',
687
- name: 'entryView',
688
- header: {
689
- renderer: i18next.t('field.entry-view'),
690
- group: i18next.t('field.view')
691
- },
692
- record: {
693
- editable: true,
694
- editor: function (value, column, record, rowIndex, field) {
695
- var type = record.entryType !== 'board' ? 'string' : 'board'
696
- return getEditor(type)(value, column, record, rowIndex, field)
697
- },
698
- renderer: function (value, column, record, rowIndex, field) {
699
- var type = record.entryType !== 'board' ? 'string' : 'board'
700
- return getRenderer(type)(value, column, record, rowIndex, field)
701
- }
702
- },
703
- width: 140
704
- },
705
- {
706
- type: 'select',
707
- name: 'monitorType',
708
- label: true,
709
- header: {
710
- renderer: i18next.t('field.monitor-type'),
711
- group: i18next.t('field.view')
712
- },
713
- record: {
714
- editable: true,
715
- options: MONITOR_TYPES
716
- },
717
- width: 80
718
- },
719
- {
720
- type: 'string',
721
- name: 'monitorView',
722
- header: {
723
- renderer: i18next.t('field.monitor-view'),
724
- group: i18next.t('field.view')
725
- },
726
- record: {
727
- editable: true,
728
- editor: function (value, column, record, rowIndex, field) {
729
- var type = record.monitorType !== 'board' ? 'string' : 'board'
730
- return getEditor(type)(value, column, record, rowIndex, field)
731
- },
732
- renderer: function (value, column, record, rowIndex, field) {
733
- var type = record.monitorType !== 'board' ? 'string' : 'board'
734
- return getRenderer(type)(value, column, record, rowIndex, field)
735
- }
736
- },
737
- width: 140
738
- },
739
- {
740
- type: 'select',
741
- name: 'reportType',
742
- label: true,
743
- header: {
744
- renderer: i18next.t('field.report-type'),
745
- group: i18next.t('field.view')
746
- },
747
- record: {
748
- editable: true,
749
- options: REPORT_TYPES
750
- },
751
- width: 80
752
- },
753
- {
754
- type: 'string',
755
- name: 'reportView',
756
- header: {
757
- renderer: i18next.t('field.report-view'),
758
- group: i18next.t('field.view')
759
- },
760
- record: {
761
- editable: true,
762
- editor: function (value, column, record, rowIndex, field) {
763
- var type = record.reportType !== 'custom' ? 'string' : 'script'
764
- return getEditor(type)(value, column, record, rowIndex, field)
765
- },
766
- renderer: function (value, column, record, rowIndex, field) {
767
- var type = record.reportType !== 'custom' ? 'string' : 'string'
768
- return getRenderer(type)(value, column, record, rowIndex, field)
769
- }
770
- },
771
- width: 140
772
- },
773
- {
774
- type: 'file',
775
- name: 'reportTemplate',
776
- header: {
777
- renderer: i18next.t('field.report-template'),
778
- group: i18next.t('field.view')
779
- },
780
- record: {
781
- editable: true
782
- },
783
- width: 80
784
- },
785
- {
786
- type: 'resource-object',
787
- name: 'updater',
788
- header: i18next.t('field.updater'),
789
- record: {
790
- editable: false
791
- },
792
- width: 120
793
- },
794
- {
795
- type: 'datetime',
796
- name: 'updatedAt',
797
- header: i18next.t('field.updated_at'),
798
- record: {
799
- editable: false
800
- },
801
- sortable: true,
802
- width: 180
803
- }
804
- ],
805
- rows: {
806
- selectable: {
807
- multiple: true
808
- }
809
- },
810
- sorters: [
811
- {
812
- name: 'name'
813
- }
814
- ]
815
- }
816
- }
817
-
818
- async fetchHandler({ page, limit, sortings = [], filters = [] }: FetchOption) {
819
- const response = await client.query({
820
- query: gql`
821
- query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
822
- responses: dataSets(filters: $filters, pagination: $pagination, sortings: $sortings) {
823
- items {
824
- id
825
- name
826
- description
827
- tag
828
- partitionKeys
829
- active
830
- type
831
- useCase
832
- schedule
833
- timezone
834
- scheduleId
835
- summaryPeriod
836
- summaryScheduleId
837
- timeLimit
838
- dataKeySet {
839
- id
840
- name
841
- }
842
- entryRole {
843
- id
844
- name
845
- }
846
- supervisoryRole {
847
- id
848
- name
849
- }
850
- resolverRole {
851
- id
852
- name
853
- }
854
- normalScenario {
855
- id
856
- name
857
- }
858
- outlierScenario {
859
- id
860
- name
861
- }
862
- reviewApprovalLine {
863
- type
864
- value
865
- approver {
866
- id
867
- name
868
- description
869
- controlNo
870
- }
871
- }
872
- outlierApprovalLine {
873
- type
874
- value
875
- approver {
876
- id
877
- name
878
- description
879
- controlNo
880
- }
881
- }
882
- requiresReview
883
- entryType
884
- entryView
885
- monitorType
886
- monitorView
887
- reportType
888
- reportView
889
- reportTemplate
890
- updater {
891
- id
892
- name
893
- }
894
- updatedAt
895
- dataItems {
896
- name
897
- description
898
- active
899
- hidden
900
- tag
901
- group
902
- subgroup
903
- type
904
- unit
905
- options
906
- quota
907
- spec
908
- stat
909
- agg
910
- }
911
- }
912
- total
913
- }
914
- }
915
- `,
916
- variables: {
917
- filters,
918
- pagination: { page, limit },
919
- sortings
920
- }
921
- })
922
-
923
- return {
924
- total: response.data.responses.total || 0,
925
- records: response.data.responses.items || []
926
- }
927
- }
928
-
929
- async _deleteDataSet() {
930
- if (confirm(i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }))) {
931
- const ids = this.grist.selected.map(record => record.id)
932
- if (ids && ids.length > 0) {
933
- const response = await client.mutate({
934
- mutation: gql`
935
- mutation ($ids: [String!]!) {
936
- deleteDataSets(ids: $ids)
937
- }
938
- `,
939
- variables: {
940
- ids
941
- }
942
- })
943
-
944
- if (!response.errors) {
945
- this.grist.fetch()
946
- notify({
947
- message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })
948
- })
949
- }
950
- }
951
- }
952
- }
953
-
954
- async _copyDataSet() {
955
- var selected = this.grist.selected
956
- if (selected.length == 0) return
957
-
958
- if (!confirm(i18next.t('text.sure_to_x', { x: i18next.t('text.copy') }))) return
959
- var response = await client.mutate({
960
- mutation: gql`
961
- mutation ($ids: [String!]!) {
962
- copyDataSets(ids: $ids) {
963
- id
964
- }
965
- }
966
- `,
967
- variables: {
968
- ids: selected.map(r => r.id)
969
- }
970
- })
971
-
972
- if (!response.errors) {
973
- this.grist.fetch()
974
- }
975
- }
976
-
977
- async _updateDataSet() {
978
- let patches = this.grist.dirtyRecords
979
- if (patches && patches.length) {
980
- patches = patches.map(patch => {
981
- let patchField: any = patch.id ? { id: patch.id } : {}
982
- const dirtyFields = patch.__dirtyfields__
983
- for (let key in dirtyFields) {
984
- patchField[key] = dirtyFields[key].after
985
- }
986
- if (patchField['reportTemplate'] instanceof FileList) {
987
- patchField['reportTemplate'] = patchField['reportTemplate'][0]
988
- }
989
- patchField.cuFlag = patch.__dirty__
990
-
991
- return patchField
992
- })
993
-
994
- const response = await client.mutate({
995
- mutation: gql`
996
- mutation ($patches: [DataSetPatch!]!) {
997
- updateMultipleDataSet(patches: $patches) {
998
- name
999
- }
1000
- }
1001
- `,
1002
- variables: {
1003
- patches
1004
- },
1005
- context: {
1006
- hasUpload: true
1007
- }
1008
- })
1009
-
1010
- if (!response.errors) {
1011
- this.grist.fetch()
1012
- }
1013
- }
1014
- }
1015
-
1016
- async startDataCollectionSchedule(record) {
1017
- var response = await client.mutate({
1018
- mutation: gql`
1019
- mutation ($dataSetId: String!) {
1020
- startDataCollectionSchedule(dataSetId: $dataSetId) {
1021
- scheduleId
1022
- }
1023
- }
1024
- `,
1025
- variables: {
1026
- dataSetId: record.id
1027
- }
1028
- })
1029
-
1030
- const scheduleId = response.data.startDataCollectionSchedule.scheduleId
1031
- record.scheduleId = scheduleId
1032
-
1033
- notify({
1034
- level: 'info',
1035
- message: `${record.scheduleId ? 'success' : 'fail'} to start data collection schedule : ${record.name}`
1036
- })
1037
-
1038
- this.grist.fetch()
1039
- }
1040
-
1041
- async stopDataCollectionSchedule(record) {
1042
- var response = await client.mutate({
1043
- mutation: gql`
1044
- mutation ($dataSetId: String!) {
1045
- stopDataCollectionSchedule(dataSetId: $dataSetId) {
1046
- scheduleId
1047
- }
1048
- }
1049
- `,
1050
- variables: {
1051
- dataSetId: record.id
1052
- }
1053
- })
1054
-
1055
- if (!response.errors) {
1056
- notify({
1057
- level: 'info',
1058
- message: `success to stop data collection schedule : ${record.name}`
1059
- })
1060
- } else {
1061
- notify({
1062
- level: 'error',
1063
- message: `${response.errors.map(error => error.message).join('\n')}`
1064
- })
1065
- }
1066
-
1067
- this.grist.fetch()
1068
- }
1069
-
1070
- async exportHandler() {
1071
- var headerSetting = this.grist._config.columns
1072
- .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)
1073
- .map(column => {
1074
- return column.imex
1075
- })
1076
-
1077
- let records = this.grist.data.records
1078
-
1079
- var data = records.map(item => {
1080
- return {
1081
- id: item.id,
1082
- ...this.grist._config.columns
1083
- .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)
1084
- .reduce((record, column) => {
1085
- var imexKey = (column.imex as ImexConfig)!.key
1086
- record[imexKey] = imexKey
1087
- .split('.')
1088
- .reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)
1089
- return record
1090
- }, {})
1091
- }
1092
- })
1093
- return { header: headerSetting, data: data }
1094
- }
1095
-
1096
- async importHandler(records) {
1097
- openPopup(
1098
- html`
1099
- <data-set-importer
1100
- .dataSets=${records}
1101
- @imported=${() => {
1102
- history.back()
1103
- this.grist.fetch()
1104
- }}
1105
- ></data-set-importer>
1106
- `,
1107
- {
1108
- backdrop: true,
1109
- size: 'large',
1110
- title: i18next.t('title.import data-set')
1111
- }
1112
- )
1113
- }
1114
-
1115
- async *summaryScheduleTimer(exp) {
1116
- while (exp && this.active) {
1117
- var secs = Math.round((Number(exp) - Date.now()) / 1000)
1118
- var positive = secs >= 0
1119
-
1120
- secs = Math.abs(secs)
1121
- const days = Math.floor(secs / DAY)
1122
- secs -= days * DAY
1123
- const hours = Math.floor(secs / HOUR)
1124
- secs -= hours * HOUR
1125
- const minutes = Math.floor(secs / MIN)
1126
- const seconds = secs - minutes * MIN
1127
-
1128
- yield `${positive ? '' : '- '}${days ? `${days}${i18next.t('label.days')} ` : ''}${hours ? `${hours}${i18next.t('label.hours')} ` : ''}${
1129
- minutes ? `${minutes}${i18next.t('label.minutes')} ` : ''
1130
- }`
1131
-
1132
- await sleep(60 * 1000)
1133
- }
1134
- }
1135
- }