@dssp/project 0.0.9 → 0.0.11

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 (286) hide show
  1. package/client/pages/project/project-detail.ts +109 -30
  2. package/client/pages/project/project-list.ts +46 -10
  3. package/client/pages/project/project-schedule-list.ts +11 -3
  4. package/client/pages/project/project-schedule.ts +86 -339
  5. package/client/pages/project/project-setting-list.ts +11 -3
  6. package/client/pages/resource/construction-detail-type-popup.ts +201 -0
  7. package/client/pages/resource/construction-type-management.ts +40 -39
  8. package/client/pages/resource/inspection-drawing-type-management.ts +210 -0
  9. package/client/pages/resource/inspection-part-popup.ts +201 -0
  10. package/client/pages/resource/manager-management.ts +0 -27
  11. package/client/pages/{checklist/checklist-importer.ts → resource/resource-importer.ts} +11 -8
  12. package/client/pages/{checklist/checklist-list-page.ts → resource/resource-list-page.ts} +41 -25
  13. package/client/pages/resource/worker-type-management.ts +3 -37
  14. package/client/pages/task-resource/task-resource-importer.ts +97 -0
  15. package/client/pages/task-resource/task-resource-list-page.ts +356 -0
  16. package/client/route.ts +13 -1
  17. package/dist-client/pages/project/project-detail.d.ts +5 -1
  18. package/dist-client/pages/project/project-detail.js +123 -40
  19. package/dist-client/pages/project/project-detail.js.map +1 -1
  20. package/dist-client/pages/project/project-list.d.ts +33 -7
  21. package/dist-client/pages/project/project-list.js +26 -11
  22. package/dist-client/pages/project/project-list.js.map +1 -1
  23. package/dist-client/pages/project/project-schedule-list.js +11 -3
  24. package/dist-client/pages/project/project-schedule-list.js.map +1 -1
  25. package/dist-client/pages/project/project-schedule.d.ts +5 -1
  26. package/dist-client/pages/project/project-schedule.js +96 -337
  27. package/dist-client/pages/project/project-schedule.js.map +1 -1
  28. package/dist-client/pages/project/project-setting-list.js +11 -3
  29. package/dist-client/pages/project/project-setting-list.js.map +1 -1
  30. package/dist-client/pages/resource/construction-detail-type-popup.d.ts +2 -0
  31. package/dist-client/pages/resource/construction-detail-type-popup.js +197 -0
  32. package/dist-client/pages/resource/construction-detail-type-popup.js.map +1 -0
  33. package/dist-client/pages/resource/construction-type-management.d.ts +12 -0
  34. package/dist-client/pages/resource/construction-type-management.js +30 -38
  35. package/dist-client/pages/resource/construction-type-management.js.map +1 -1
  36. package/dist-client/pages/resource/inspection-drawing-type-management.d.ts +34 -0
  37. package/dist-client/pages/resource/inspection-drawing-type-management.js +198 -0
  38. package/dist-client/pages/resource/inspection-drawing-type-management.js.map +1 -0
  39. package/dist-client/pages/resource/inspection-part-popup.d.ts +2 -0
  40. package/dist-client/pages/resource/inspection-part-popup.js +197 -0
  41. package/dist-client/pages/resource/inspection-part-popup.js.map +1 -0
  42. package/dist-client/pages/resource/manager-management.js +0 -27
  43. package/dist-client/pages/resource/manager-management.js.map +1 -1
  44. package/dist-client/pages/{checklist/checklist-importer.d.ts → resource/resource-importer.d.ts} +2 -2
  45. package/dist-client/pages/{checklist/checklist-importer.js → resource/resource-importer.js} +10 -10
  46. package/dist-client/pages/resource/resource-importer.js.map +1 -0
  47. package/dist-client/pages/{checklist/checklist-list-page.d.ts → resource/resource-list-page.d.ts} +6 -6
  48. package/dist-client/pages/{checklist/checklist-list-page.js → resource/resource-list-page.js} +41 -32
  49. package/dist-client/pages/resource/resource-list-page.js.map +1 -0
  50. package/dist-client/pages/resource/worker-type-management.d.ts +7 -1
  51. package/dist-client/pages/resource/worker-type-management.js +3 -45
  52. package/dist-client/pages/resource/worker-type-management.js.map +1 -1
  53. package/dist-client/pages/task-resource/task-resource-importer.d.ts +10 -0
  54. package/dist-client/pages/task-resource/task-resource-importer.js +101 -0
  55. package/dist-client/pages/task-resource/task-resource-importer.js.map +1 -0
  56. package/dist-client/pages/task-resource/task-resource-list-page.d.ts +63 -0
  57. package/dist-client/pages/task-resource/task-resource-list-page.js +332 -0
  58. package/dist-client/pages/task-resource/task-resource-list-page.js.map +1 -0
  59. package/dist-client/route.d.ts +1 -1
  60. package/dist-client/route.js +9 -0
  61. package/dist-client/route.js.map +1 -1
  62. package/dist-client/tsconfig.tsbuildinfo +1 -1
  63. package/dist-server/controllers/import-task.d.ts +19 -0
  64. package/dist-server/controllers/import-task.js +104 -0
  65. package/dist-server/controllers/import-task.js.map +1 -0
  66. package/dist-server/index.d.ts +1 -0
  67. package/dist-server/index.js +1 -0
  68. package/dist-server/index.js.map +1 -1
  69. package/dist-server/migrations/1723861466413-seed-roles.d.ts +5 -0
  70. package/dist-server/migrations/1723861466413-seed-roles.js +117 -0
  71. package/dist-server/migrations/1723861466413-seed-roles.js.map +1 -0
  72. package/dist-server/migrations/1723861466414-seed-codes.d.ts +5 -0
  73. package/dist-server/migrations/1723861466414-seed-codes.js +132 -0
  74. package/dist-server/migrations/1723861466414-seed-codes.js.map +1 -0
  75. package/dist-server/migrations/1723861476419-seed-resources.d.ts +5 -0
  76. package/dist-server/migrations/1723861476419-seed-resources.js +57 -0
  77. package/dist-server/migrations/1723861476419-seed-resources.js.map +1 -0
  78. package/dist-server/migrations/1723861478420-seed-/bsample-project.d.ts +5 -0
  79. package/dist-server/migrations/1723861478420-seed-/bsample-project.js +68 -0
  80. package/dist-server/migrations/1723861478420-seed-/bsample-project.js.map +1 -0
  81. package/dist-server/migrations/1723861478421-seed-/bsample-tasks.d.ts +5 -0
  82. package/dist-server/migrations/1723861478421-seed-/bsample-tasks.js +189 -0
  83. package/dist-server/migrations/1723861478421-seed-/bsample-tasks.js.map +1 -0
  84. package/dist-server/migrations/index.d.ts +1 -0
  85. package/dist-server/migrations/index.js +12 -0
  86. package/dist-server/migrations/index.js.map +1 -0
  87. package/dist-server/service/construction-detail-type/construction-detail-type-mutation.d.ts +6 -0
  88. package/dist-server/service/construction-detail-type/construction-detail-type-mutation.js +56 -0
  89. package/dist-server/service/construction-detail-type/construction-detail-type-mutation.js.map +1 -0
  90. package/dist-server/service/construction-detail-type/construction-detail-type-query.d.ts +9 -0
  91. package/dist-server/service/construction-detail-type/construction-detail-type-query.js +53 -0
  92. package/dist-server/service/construction-detail-type/construction-detail-type-query.js.map +1 -0
  93. package/dist-server/service/construction-detail-type/construction-detail-type-type.d.ts +11 -0
  94. package/dist-server/service/construction-detail-type/construction-detail-type-type.js +43 -0
  95. package/dist-server/service/construction-detail-type/construction-detail-type-type.js.map +1 -0
  96. package/dist-server/service/construction-detail-type/construction-detail-type.d.ts +15 -0
  97. package/dist-server/service/construction-detail-type/construction-detail-type.js +69 -0
  98. package/dist-server/service/construction-detail-type/construction-detail-type.js.map +1 -0
  99. package/dist-server/service/construction-detail-type/index.d.ts +5 -0
  100. package/dist-server/service/construction-detail-type/index.js +9 -0
  101. package/dist-server/service/construction-detail-type/index.js.map +1 -0
  102. package/dist-server/service/construction-type/construction-type-query.d.ts +2 -0
  103. package/dist-server/service/construction-type/construction-type-query.js +14 -0
  104. package/dist-server/service/construction-type/construction-type-query.js.map +1 -1
  105. package/dist-server/service/construction-type/construction-type.d.ts +2 -0
  106. package/dist-server/service/construction-type/construction-type.js +6 -0
  107. package/dist-server/service/construction-type/construction-type.js.map +1 -1
  108. package/dist-server/service/index.d.ts +7 -5
  109. package/dist-server/service/index.js +21 -10
  110. package/dist-server/service/index.js.map +1 -1
  111. package/dist-server/service/inspection-drawing-type/index.d.ts +5 -0
  112. package/dist-server/service/inspection-drawing-type/index.js +9 -0
  113. package/dist-server/service/inspection-drawing-type/index.js.map +1 -0
  114. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-mutation.d.ts +6 -0
  115. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-mutation.js +64 -0
  116. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-mutation.js.map +1 -0
  117. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.d.ts +12 -0
  118. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js +83 -0
  119. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js.map +1 -0
  120. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-type.d.ts +10 -0
  121. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-type.js +39 -0
  122. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-type.js.map +1 -0
  123. package/dist-server/service/inspection-drawing-type/inspection-drawing-type.d.ts +16 -0
  124. package/dist-server/service/inspection-drawing-type/inspection-drawing-type.js +72 -0
  125. package/dist-server/service/inspection-drawing-type/inspection-drawing-type.js.map +1 -0
  126. package/dist-server/service/inspection-part/index.d.ts +5 -0
  127. package/dist-server/service/inspection-part/index.js +9 -0
  128. package/dist-server/service/inspection-part/index.js.map +1 -0
  129. package/dist-server/service/inspection-part/inspection-part-mutation.d.ts +6 -0
  130. package/dist-server/service/inspection-part/inspection-part-mutation.js +55 -0
  131. package/dist-server/service/inspection-part/inspection-part-mutation.js.map +1 -0
  132. package/dist-server/service/inspection-part/inspection-part-query.d.ts +10 -0
  133. package/dist-server/service/inspection-part/inspection-part-query.js +66 -0
  134. package/dist-server/service/inspection-part/inspection-part-query.js.map +1 -0
  135. package/dist-server/service/inspection-part/inspection-part-type.d.ts +11 -0
  136. package/dist-server/service/inspection-part/inspection-part-type.js +43 -0
  137. package/dist-server/service/inspection-part/inspection-part-type.js.map +1 -0
  138. package/dist-server/service/inspection-part/inspection-part.d.ts +15 -0
  139. package/dist-server/service/inspection-part/inspection-part.js +69 -0
  140. package/dist-server/service/inspection-part/inspection-part.js.map +1 -0
  141. package/dist-server/service/project/index.d.ts +0 -2
  142. package/dist-server/service/project/index.js +1 -3
  143. package/dist-server/service/project/index.js.map +1 -1
  144. package/dist-server/service/project/project-query.d.ts +7 -5
  145. package/dist-server/service/project/project-query.js +34 -38
  146. package/dist-server/service/project/project-query.js.map +1 -1
  147. package/dist-server/service/project/project-type.d.ts +3 -6
  148. package/dist-server/service/project/project-type.js +25 -35
  149. package/dist-server/service/project/project-type.js.map +1 -1
  150. package/dist-server/service/project/project.d.ts +3 -2
  151. package/dist-server/service/project/project.js +10 -10
  152. package/dist-server/service/project/project.js.map +1 -1
  153. package/dist-server/service/resource/index.d.ts +6 -0
  154. package/dist-server/service/resource/index.js +10 -0
  155. package/dist-server/service/resource/index.js.map +1 -0
  156. package/dist-server/service/resource/resource-mutation.d.ts +10 -0
  157. package/dist-server/service/resource/resource-mutation.js +132 -0
  158. package/dist-server/service/resource/resource-mutation.js.map +1 -0
  159. package/dist-server/service/resource/resource-query.d.ts +11 -0
  160. package/dist-server/service/{checklist/checklist-query.js → resource/resource-query.js} +33 -38
  161. package/dist-server/service/resource/resource-query.js.map +1 -0
  162. package/dist-server/service/resource/resource-type.d.ts +17 -0
  163. package/dist-server/service/resource/resource-type.js +65 -0
  164. package/dist-server/service/resource/resource-type.js.map +1 -0
  165. package/dist-server/service/resource/resource.d.ts +24 -0
  166. package/dist-server/service/resource/resource.js +93 -0
  167. package/dist-server/service/resource/resource.js.map +1 -0
  168. package/dist-server/service/task/task-mutation.js +6 -0
  169. package/dist-server/service/task/task-mutation.js.map +1 -1
  170. package/dist-server/service/task/task-query.d.ts +9 -1
  171. package/dist-server/service/task/task-query.js +142 -20
  172. package/dist-server/service/task/task-query.js.map +1 -1
  173. package/dist-server/service/task/task-type.d.ts +13 -0
  174. package/dist-server/service/task/task-type.js +57 -12
  175. package/dist-server/service/task/task-type.js.map +1 -1
  176. package/dist-server/service/task/task.d.ts +12 -5
  177. package/dist-server/service/task/task.js +51 -16
  178. package/dist-server/service/task/task.js.map +1 -1
  179. package/dist-server/service/task-resource/index.d.ts +6 -0
  180. package/dist-server/service/task-resource/index.js +10 -0
  181. package/dist-server/service/task-resource/index.js.map +1 -0
  182. package/dist-server/service/task-resource/task-resource-mutation.d.ts +10 -0
  183. package/dist-server/service/task-resource/task-resource-mutation.js +132 -0
  184. package/dist-server/service/task-resource/task-resource-mutation.js.map +1 -0
  185. package/dist-server/service/task-resource/task-resource-query.d.ts +7 -0
  186. package/dist-server/service/task-resource/task-resource-query.js +50 -0
  187. package/dist-server/service/task-resource/task-resource-query.js.map +1 -0
  188. package/dist-server/service/task-resource/task-resource-type.d.ts +17 -0
  189. package/dist-server/service/task-resource/task-resource-type.js +65 -0
  190. package/dist-server/service/task-resource/task-resource-type.js.map +1 -0
  191. package/dist-server/service/task-resource/task-resource.d.ts +13 -0
  192. package/dist-server/service/task-resource/task-resource.js +59 -0
  193. package/dist-server/service/task-resource/task-resource.js.map +1 -0
  194. package/dist-server/tsconfig.tsbuildinfo +1 -1
  195. package/helps/project/checklist-type-detail.md +160 -0
  196. package/helps/project/checklist-type.md +160 -0
  197. package/helps/project/task-resource.md +160 -0
  198. package/package.json +11 -7
  199. package/server/controllers/import-task.ts +140 -0
  200. package/server/index.ts +1 -0
  201. package/server/migrations/1723861466413-seed-roles.ts +128 -0
  202. package/server/migrations/1723861466414-seed-codes.ts +139 -0
  203. package/server/migrations/1723861476419-seed-resources.ts +62 -0
  204. package/server/migrations/1723861478420-seed-/bsample-project.ts +87 -0
  205. package/server/migrations/1723861478421-seed-/bsample-tasks.ts +194 -0
  206. package/server/migrations/index.ts +9 -0
  207. package/server/service/construction-detail-type/construction-detail-type-mutation.ts +57 -0
  208. package/server/service/construction-detail-type/construction-detail-type-query.ts +31 -0
  209. package/server/service/construction-detail-type/construction-detail-type-type.ts +26 -0
  210. package/server/service/construction-detail-type/construction-detail-type.ts +52 -0
  211. package/server/service/construction-detail-type/index.ts +6 -0
  212. package/server/service/construction-type/construction-type-query.ts +9 -0
  213. package/server/service/construction-type/construction-type.ts +8 -2
  214. package/server/service/index.ts +24 -11
  215. package/server/service/inspection-drawing-type/index.ts +6 -0
  216. package/server/service/inspection-drawing-type/inspection-drawing-type-mutation.ts +69 -0
  217. package/server/service/inspection-drawing-type/inspection-drawing-type-query.ts +55 -0
  218. package/server/service/inspection-drawing-type/inspection-drawing-type-type.ts +23 -0
  219. package/server/service/inspection-drawing-type/inspection-drawing-type.ts +68 -0
  220. package/server/service/inspection-part/index.ts +6 -0
  221. package/server/service/inspection-part/inspection-part-mutation.ts +52 -0
  222. package/server/service/inspection-part/inspection-part-query.ts +41 -0
  223. package/server/service/inspection-part/inspection-part-type.ts +26 -0
  224. package/server/service/inspection-part/inspection-part.ts +51 -0
  225. package/server/service/project/index.ts +0 -2
  226. package/server/service/project/project-query.ts +30 -38
  227. package/server/service/project/project-type.ts +22 -27
  228. package/server/service/project/project.ts +11 -12
  229. package/server/service/resource/index.ts +7 -0
  230. package/server/service/resource/resource-mutation.ts +137 -0
  231. package/server/service/resource/resource-query.ts +50 -0
  232. package/server/service/resource/resource-type.ts +41 -0
  233. package/server/service/resource/resource.ts +82 -0
  234. package/server/service/task/task-mutation.ts +8 -9
  235. package/server/service/task/task-query.ts +135 -22
  236. package/server/service/task/task-type.ts +41 -15
  237. package/server/service/task/task.ts +44 -15
  238. package/server/service/task-resource/index.ts +7 -0
  239. package/server/service/task-resource/task-resource-mutation.ts +140 -0
  240. package/server/service/task-resource/task-resource-query.ts +36 -0
  241. package/server/service/task-resource/task-resource-type.ts +41 -0
  242. package/server/service/task-resource/task-resource.ts +51 -0
  243. package/things-factory.config.js +1 -0
  244. package/translations/en.json +15 -1
  245. package/translations/ko.json +9 -5
  246. package/dist-client/pages/checklist/checklist-importer.js.map +0 -1
  247. package/dist-client/pages/checklist/checklist-list-page.js.map +0 -1
  248. package/dist-server/service/check-item/check-item-mutation.d.ts +0 -10
  249. package/dist-server/service/check-item/check-item-mutation.js +0 -129
  250. package/dist-server/service/check-item/check-item-mutation.js.map +0 -1
  251. package/dist-server/service/check-item/check-item-query.d.ts +0 -11
  252. package/dist-server/service/check-item/check-item-query.js +0 -86
  253. package/dist-server/service/check-item/check-item-query.js.map +0 -1
  254. package/dist-server/service/check-item/check-item-type.d.ts +0 -18
  255. package/dist-server/service/check-item/check-item-type.js +0 -69
  256. package/dist-server/service/check-item/check-item-type.js.map +0 -1
  257. package/dist-server/service/check-item/check-item.d.ts +0 -18
  258. package/dist-server/service/check-item/check-item.js +0 -84
  259. package/dist-server/service/check-item/check-item.js.map +0 -1
  260. package/dist-server/service/check-item/index.d.ts +0 -5
  261. package/dist-server/service/check-item/index.js +0 -9
  262. package/dist-server/service/check-item/index.js.map +0 -1
  263. package/dist-server/service/checklist/checklist-mutation.d.ts +0 -10
  264. package/dist-server/service/checklist/checklist-mutation.js +0 -129
  265. package/dist-server/service/checklist/checklist-mutation.js.map +0 -1
  266. package/dist-server/service/checklist/checklist-query.d.ts +0 -11
  267. package/dist-server/service/checklist/checklist-query.js.map +0 -1
  268. package/dist-server/service/checklist/checklist-type.d.ts +0 -18
  269. package/dist-server/service/checklist/checklist-type.js +0 -69
  270. package/dist-server/service/checklist/checklist-type.js.map +0 -1
  271. package/dist-server/service/checklist/checklist.d.ts +0 -26
  272. package/dist-server/service/checklist/checklist.js +0 -120
  273. package/dist-server/service/checklist/checklist.js.map +0 -1
  274. package/dist-server/service/checklist/index.d.ts +0 -5
  275. package/dist-server/service/checklist/index.js +0 -9
  276. package/dist-server/service/checklist/index.js.map +0 -1
  277. package/server/service/check-item/check-item-mutation.ts +0 -142
  278. package/server/service/check-item/check-item-query.ts +0 -56
  279. package/server/service/check-item/check-item-type.ts +0 -49
  280. package/server/service/check-item/check-item.ts +0 -74
  281. package/server/service/check-item/index.ts +0 -6
  282. package/server/service/checklist/checklist-mutation.ts +0 -142
  283. package/server/service/checklist/checklist-query.ts +0 -56
  284. package/server/service/checklist/checklist-type.ts +0 -49
  285. package/server/service/checklist/checklist.ts +0 -105
  286. package/server/service/checklist/index.ts +0 -6
@@ -6,7 +6,12 @@ import { PageView, store } from '@operato/shell'
6
6
  import { css, html } from 'lit'
7
7
  import { customElement, property, query, state } from 'lit/decorators.js'
8
8
  import { ScopedElementsMixin } from '@open-wc/scoped-elements'
9
- import { ColumnConfig, DataGrist, FetchOption, SortersControl } from '@operato/data-grist'
9
+ import {
10
+ ColumnConfig,
11
+ DataGrist,
12
+ FetchOption,
13
+ SortersControl
14
+ } from '@operato/data-grist'
10
15
  import { client } from '@operato/graphql'
11
16
  import { i18next, localize } from '@operato/i18n'
12
17
  import { notify, openPopup } from '@operato/layout'
@@ -16,10 +21,11 @@ import { isMobileDevice } from '@operato/utils'
16
21
  import { connect } from 'pwa-helpers/connect-mixin'
17
22
  import gql from 'graphql-tag'
18
23
 
19
- import { ChecklistImporter } from './checklist-importer'
24
+ import { ResourceImporter } from './resource-importer'
25
+
26
+ @customElement('resource-list-page')
27
+ export class ResourceListPage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {
20
28
 
21
- @customElement('checklist-list-page')
22
- export class ChecklistListPage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {
23
29
  static styles = [
24
30
  ScrollbarStyles,
25
31
  CommonGristStyles,
@@ -37,7 +43,7 @@ export class ChecklistListPage extends connect(store)(localize(i18next)(ScopedEl
37
43
 
38
44
  static get scopedElements() {
39
45
  return {
40
- 'checklist-importer': ChecklistImporter
46
+ 'resource-importer': ResourceImporter
41
47
  }
42
48
  }
43
49
 
@@ -49,7 +55,7 @@ export class ChecklistListPage extends connect(store)(localize(i18next)(ScopedEl
49
55
 
50
56
  get context() {
51
57
  return {
52
- title: i18next.t('title.checklist list'),
58
+ title: i18next.t('title.resource list'),
53
59
  search: {
54
60
  handler: (search: string) => {
55
61
  this.grist.searchText = search
@@ -61,21 +67,21 @@ export class ChecklistListPage extends connect(store)(localize(i18next)(ScopedEl
61
67
  this.grist.toggleHeadroom()
62
68
  }
63
69
  },
64
- help: 'project/checklist',
70
+ help: 'project/resource',
65
71
  actions: [
66
72
  {
67
73
  title: i18next.t('button.save'),
68
- action: this.updateChecklist.bind(this),
74
+ action: this.updateResource.bind(this),
69
75
  ...CommonButtonStyles.save
70
76
  },
71
77
  {
72
78
  title: i18next.t('button.delete'),
73
- action: this.deleteChecklist.bind(this),
79
+ action: this.deleteResource.bind(this),
74
80
  ...CommonButtonStyles.delete
75
81
  }
76
82
  ],
77
83
  exportable: {
78
- name: i18next.t('title.checklist list'),
84
+ name: i18next.t('title.resource list'),
79
85
  data: this.exportHandler.bind(this)
80
86
  },
81
87
  importable: {
@@ -88,7 +94,11 @@ export class ChecklistListPage extends connect(store)(localize(i18next)(ScopedEl
88
94
  const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')
89
95
 
90
96
  return html`
91
- <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>
97
+ <ox-grist
98
+ .mode=${mode}
99
+ .config=${this.gristConfig}
100
+ .fetchHandler=${this.fetchHandler.bind(this)}
101
+ >
92
102
  <div slot="headroom">
93
103
  <div id="filters">
94
104
  <ox-filters-form autofocus></ox-filters-form>
@@ -207,7 +217,7 @@ export class ChecklistListPage extends connect(store)(localize(i18next)(ScopedEl
207
217
  const response = await client.query({
208
218
  query: gql`
209
219
  query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
210
- responses: checklists(filters: $filters, pagination: $pagination, sortings: $sortings) {
220
+ responses: resources(filters: $filters, pagination: $pagination, sortings: $sortings) {
211
221
  items {
212
222
  id
213
223
  name
@@ -236,7 +246,7 @@ export class ChecklistListPage extends connect(store)(localize(i18next)(ScopedEl
236
246
  }
237
247
  }
238
248
 
239
- private async deleteChecklist() {
249
+ private async deleteResource() {
240
250
  if (
241
251
  await OxPrompt.open({
242
252
  title: i18next.t('text.are_you_sure'),
@@ -250,7 +260,7 @@ export class ChecklistListPage extends connect(store)(localize(i18next)(ScopedEl
250
260
  const response = await client.mutate({
251
261
  mutation: gql`
252
262
  mutation ($ids: [String!]!) {
253
- deleteChecklists(ids: $ids)
263
+ deleteResources(ids: $ids)
254
264
  }
255
265
  `,
256
266
  variables: {
@@ -268,7 +278,7 @@ export class ChecklistListPage extends connect(store)(localize(i18next)(ScopedEl
268
278
  }
269
279
  }
270
280
 
271
- private async updateChecklist() {
281
+ private async updateResource() {
272
282
  let patches = this.grist.dirtyRecords
273
283
  if (patches && patches.length) {
274
284
  patches = patches.map(patch => {
@@ -284,8 +294,8 @@ export class ChecklistListPage extends connect(store)(localize(i18next)(ScopedEl
284
294
 
285
295
  const response = await client.mutate({
286
296
  mutation: gql`
287
- mutation ($patches: [ChecklistPatch!]!) {
288
- updateMultipleChecklist(patches: $patches) {
297
+ mutation ($patches: [ResourcePatch!]!) {
298
+ updateMultipleResource(patches: $patches) {
289
299
  name
290
300
  }
291
301
  }
@@ -303,12 +313,17 @@ export class ChecklistListPage extends connect(store)(localize(i18next)(ScopedEl
303
313
 
304
314
  private async exportHandler() {
305
315
  const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records
306
- const targetFieldSet = new Set(['id', 'name', 'description', 'active'])
316
+ const targetFieldSet = new Set([
317
+ 'id',
318
+ 'name',
319
+ 'description',
320
+ 'active'
321
+ ])
307
322
 
308
- return exportTargets.map(checklist => {
323
+ return exportTargets.map(resource => {
309
324
  let tempObj = {}
310
325
  for (const field of targetFieldSet) {
311
- tempObj[field] = checklist[field]
326
+ tempObj[field] = resource[field]
312
327
  }
313
328
 
314
329
  return tempObj
@@ -318,23 +333,24 @@ export class ChecklistListPage extends connect(store)(localize(i18next)(ScopedEl
318
333
  private async importHandler(records) {
319
334
  const popup = openPopup(
320
335
  html`
321
- <checklist-importer
322
- .checklists=${records}
336
+ <resource-importer
337
+ .resources=${records}
323
338
  @imported=${() => {
324
339
  history.back()
325
340
  this.grist.fetch()
326
341
  }}
327
- ></checklist-importer>
342
+ ></resource-importer>
328
343
  `,
329
344
  {
330
345
  backdrop: true,
331
346
  size: 'large',
332
- title: i18next.t('title.import checklist')
347
+ title: i18next.t('title.import resource')
333
348
  }
334
349
  )
335
-
350
+
336
351
  popup.onclosed = () => {
337
352
  this.grist.fetch()
338
353
  }
339
354
  }
340
355
  }
356
+
@@ -1,7 +1,7 @@
1
1
  import '@operato/data-grist'
2
2
  import '@operato/context/ox-context-page-toolbar.js'
3
3
 
4
- import { CommonGristStyles, ScrollbarStyles } from '@operato/styles'
4
+ import { CommonGristStyles, CommonButtonStyles, ScrollbarStyles } from '@operato/styles'
5
5
  import { PageView } from '@operato/shell'
6
6
  import { css, html } from 'lit'
7
7
  import { customElement, property, query } from 'lit/decorators.js'
@@ -26,32 +26,6 @@ export class WorkerTypeManagement extends PageView {
26
26
  --grid-record-emphasized-background-color: red;
27
27
  --grid-record-emphasized-color: yellow;
28
28
  }
29
-
30
- md-elevated-button {
31
- margin: 0px 3px;
32
-
33
- --md-elevated-button-container-height: 35px;
34
- --md-elevated-button-label-text-size: 16px;
35
- --md-elevated-button-container-color: #0595e5;
36
-
37
- --md-elevated-button-label-text-color: #fff;
38
- --md-elevated-button-hover-label-text-color: #fff;
39
- --md-elevated-button-pressed-label-text-color: #fff;
40
- --md-elevated-button-focus-label-text-color: #fff;
41
- --md-elevated-button-icon-color: #fff;
42
- --md-elevated-button-hover-icon-color: #fff;
43
- --md-elevated-button-pressed-icon-color: #fff;
44
- --md-elevated-button-focus-icon-color: #fff;
45
-
46
- &[red] {
47
- --md-elevated-button-container-color: #e15757;
48
- }
49
- }
50
-
51
- div[button-container] {
52
- padding: 0 5px 10px 0;
53
- text-align: right;
54
- }
55
29
  `
56
30
  ]
57
31
 
@@ -65,12 +39,12 @@ export class WorkerTypeManagement extends PageView {
65
39
  {
66
40
  title: '저장',
67
41
  action: this._updateWorkerTypes.bind(this),
68
- icon: 'save'
42
+ ...CommonButtonStyles.save
69
43
  },
70
44
  {
71
45
  title: '삭제',
72
46
  action: this._deleteWorkerTypes.bind(this),
73
- icon: 'delete'
47
+ ...CommonButtonStyles.delete
74
48
  }
75
49
  ]
76
50
  }
@@ -79,14 +53,6 @@ export class WorkerTypeManagement extends PageView {
79
53
  render() {
80
54
  return html`
81
55
  <ox-grist .mode=${'GRID'} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}> </ox-grist>
82
- <div button-container>
83
- <md-elevated-button @click=${this._updateWorkerTypes.bind(this)}>
84
- <md-icon slot="icon">save</md-icon>저장</md-elevated-button
85
- >
86
- <md-elevated-button red @click=${this._deleteWorkerTypes.bind(this)}>
87
- <md-icon slot="icon">delete</md-icon>삭제</md-elevated-button
88
- >
89
- </div>
90
56
  `
91
57
  }
92
58
 
@@ -0,0 +1,97 @@
1
+ import '@material/web/button/elevated-button.js'
2
+ import '@operato/data-grist'
3
+
4
+ import gql from 'graphql-tag'
5
+ import { css, html, LitElement } from 'lit'
6
+ import { property, state } from 'lit/decorators.js'
7
+
8
+ import { client } from '@operato/graphql'
9
+ import { i18next } from '@operato/i18n'
10
+ import { isMobileDevice } from '@operato/utils'
11
+
12
+ export class TaskResourceImporter extends LitElement {
13
+ static styles = [
14
+ css`
15
+ :host {
16
+ display: flex;
17
+ flex-direction: column;
18
+
19
+ background-color: #fff;
20
+ }
21
+
22
+ ox-grist {
23
+ flex: 1;
24
+ }
25
+
26
+ .button-container {
27
+ display: flex;
28
+ margin-left: auto;
29
+ padding: var(--padding-default);
30
+ }
31
+
32
+ md-elevated-button {
33
+ margin-left: var(--margin-default);
34
+ }
35
+ `
36
+ ]
37
+
38
+ @state() private taskResources: any[] = []
39
+ @state() private columns = {
40
+ list: { fields: ['name', 'description'] },
41
+ pagination: { infinite: true },
42
+ columns: [
43
+ {
44
+ type: 'string',
45
+ name: 'name',
46
+ header: i18next.t('field.name'),
47
+ width: 150
48
+ },
49
+ {
50
+ type: 'string',
51
+ name: 'description',
52
+ header: i18next.t('field.description'),
53
+ width: 200
54
+ },
55
+ {
56
+ type: 'checkbox',
57
+ name: 'active',
58
+ header: i18next.t('field.active'),
59
+ width: 60
60
+ }
61
+ ]
62
+ }
63
+
64
+ render() {
65
+ return html`
66
+ <ox-grist
67
+ .mode=${isMobileDevice() ? 'LIST' : 'GRID'}
68
+ .config=${this.columns}
69
+ .data=${
70
+ {
71
+ records: this.taskResources
72
+ }
73
+ }
74
+ ></ox-grist>
75
+
76
+ <div class="button-container">
77
+ <md-elevated-button raised @click="${this.save.bind(this)}">${i18next.t('button.save')}</md-elevated-button>
78
+ </div>
79
+ `
80
+ }
81
+
82
+ private async save() {
83
+ const response = await client.mutate({
84
+ mutation: gql`
85
+ mutation importTaskResources($taskResources: [TaskResourcePatch!]!) {
86
+ importTaskResources(taskResources: $taskResources)
87
+ }
88
+ `,
89
+ variables: { taskResources: this.taskResources }
90
+ })
91
+
92
+ if (response.errors?.length) return
93
+
94
+ this.dispatchEvent(new CustomEvent('imported'))
95
+ }
96
+ }
97
+
@@ -0,0 +1,356 @@
1
+ import '@material/web/icon/icon.js'
2
+ import '@operato/data-grist'
3
+
4
+ import { CommonButtonStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles'
5
+ import { PageView, store } from '@operato/shell'
6
+ import { css, html } from 'lit'
7
+ import { customElement, property, query, state } from 'lit/decorators.js'
8
+ import { ScopedElementsMixin } from '@open-wc/scoped-elements'
9
+ import {
10
+ ColumnConfig,
11
+ DataGrist,
12
+ FetchOption,
13
+ SortersControl
14
+ } from '@operato/data-grist'
15
+ import { client } from '@operato/graphql'
16
+ import { i18next, localize } from '@operato/i18n'
17
+ import { notify, openPopup } from '@operato/layout'
18
+ import { OxPopup, OxPrompt } from '@operato/popup'
19
+ import { isMobileDevice } from '@operato/utils'
20
+
21
+ import { connect } from 'pwa-helpers/connect-mixin'
22
+ import gql from 'graphql-tag'
23
+
24
+ import { TaskResourceImporter } from './task-resource-importer'
25
+
26
+ @customElement('task-resource-list-page')
27
+ export class TaskResourceListPage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {
28
+
29
+ static styles = [
30
+ ScrollbarStyles,
31
+ CommonGristStyles,
32
+ css`
33
+ :host {
34
+ display: flex;
35
+
36
+ width: 100%;
37
+
38
+ --grid-record-emphasized-background-color: red;
39
+ --grid-record-emphasized-color: yellow;
40
+ }
41
+ `
42
+ ]
43
+
44
+ static get scopedElements() {
45
+ return {
46
+ 'task-resource-importer': TaskResourceImporter
47
+ }
48
+ }
49
+
50
+ @state() private gristConfig: any
51
+ @state() private mode: 'CARD' | 'GRID' | 'LIST' = isMobileDevice() ? 'CARD' : 'GRID'
52
+
53
+ @query('ox-grist') private grist!: DataGrist
54
+ @query('#sorter-control') private sortersControl!: OxPopup
55
+
56
+ get context() {
57
+ return {
58
+ title: i18next.t('title.task-resource list'),
59
+ search: {
60
+ handler: (search: string) => {
61
+ this.grist.searchText = search
62
+ },
63
+ value: this.grist.searchText
64
+ },
65
+ filter: {
66
+ handler: () => {
67
+ this.grist.toggleHeadroom()
68
+ }
69
+ },
70
+ help: 'project/task-resource',
71
+ actions: [
72
+ {
73
+ title: i18next.t('button.save'),
74
+ action: this.updateTaskResource.bind(this),
75
+ ...CommonButtonStyles.save
76
+ },
77
+ {
78
+ title: i18next.t('button.delete'),
79
+ action: this.deleteTaskResource.bind(this),
80
+ ...CommonButtonStyles.delete
81
+ }
82
+ ],
83
+ exportable: {
84
+ name: i18next.t('title.task-resource list'),
85
+ data: this.exportHandler.bind(this)
86
+ },
87
+ importable: {
88
+ handler: this.importHandler.bind(this)
89
+ }
90
+ }
91
+ }
92
+
93
+ render() {
94
+ const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')
95
+
96
+ return html`
97
+ <ox-grist
98
+ .mode=${mode}
99
+ .config=${this.gristConfig}
100
+ .fetchHandler=${this.fetchHandler.bind(this)}
101
+ >
102
+ <div slot="headroom">
103
+ <div id="filters">
104
+ <ox-filters-form autofocus></ox-filters-form>
105
+ </div>
106
+
107
+ <div id="sorters">
108
+ Sort
109
+ <md-icon
110
+ @click=${e => {
111
+ const target = e.currentTarget
112
+ this.sortersControl.open({
113
+ right: 0,
114
+ top: target.offsetTop + target.offsetHeight
115
+ })
116
+ }}
117
+ >expand_more</md-icon
118
+ >
119
+ <ox-popup id="sorter-control">
120
+ <ox-sorters-control> </ox-sorters-control>
121
+ </ox-popup>
122
+ </div>
123
+
124
+ <div id="modes">
125
+ <md-icon @click=${() => (this.mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</md-icon>
126
+ <md-icon @click=${() => (this.mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</md-icon>
127
+ <md-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</md-icon>
128
+ </div>
129
+ </div>
130
+ </ox-grist>
131
+ `
132
+ }
133
+
134
+ async pageInitialized(lifecycle: any) {
135
+ this.gristConfig = {
136
+ list: {
137
+ fields: ['name', 'description'],
138
+ details: ['active', 'updatedAt']
139
+ },
140
+ columns: [
141
+ { type: 'gutter', gutterName: 'sequence' },
142
+ { type: 'gutter', gutterName: 'row-selector', multiple: true },
143
+ {
144
+ type: 'string',
145
+ name: 'name',
146
+ header: i18next.t('field.name'),
147
+ record: {
148
+ editable: true
149
+ },
150
+ filter: 'search',
151
+ sortable: true,
152
+ width: 150
153
+ },
154
+ {
155
+ type: 'string',
156
+ name: 'description',
157
+ header: i18next.t('field.description'),
158
+ record: {
159
+ editable: true
160
+ },
161
+ filter: 'search',
162
+ width: 200
163
+ },
164
+ {
165
+ type: 'checkbox',
166
+ name: 'active',
167
+ label: true,
168
+ header: i18next.t('field.active'),
169
+ record: {
170
+ editable: true
171
+ },
172
+ filter: true,
173
+ sortable: true,
174
+ width: 60
175
+ },
176
+ {
177
+ type: 'resource-object',
178
+ name: 'updater',
179
+ header: i18next.t('field.updater'),
180
+ record: {
181
+ editable: false
182
+ },
183
+ sortable: true,
184
+ width: 120
185
+ },
186
+ {
187
+ type: 'datetime',
188
+ name: 'updatedAt',
189
+ header: i18next.t('field.updated_at'),
190
+ record: {
191
+ editable: false
192
+ },
193
+ sortable: true,
194
+ width: 180
195
+ }
196
+ ],
197
+ rows: {
198
+ selectable: {
199
+ multiple: true
200
+ }
201
+ },
202
+ sorters: [
203
+ {
204
+ name: 'name'
205
+ }
206
+ ]
207
+ }
208
+ }
209
+
210
+ async pageUpdated(changes: any, lifecycle: any) {
211
+ if (this.active) {
212
+ // do something here when this page just became as active
213
+ }
214
+ }
215
+
216
+ async fetchHandler({ page = 1, limit = 100, sortings = [], filters = [] }: FetchOption) {
217
+ const response = await client.query({
218
+ query: gql`
219
+ query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
220
+ responses: taskResources(filters: $filters, pagination: $pagination, sortings: $sortings) {
221
+ items {
222
+ id
223
+ name
224
+ description
225
+ active
226
+ updater {
227
+ id
228
+ name
229
+ }
230
+ updatedAt
231
+ }
232
+ total
233
+ }
234
+ }
235
+ `,
236
+ variables: {
237
+ filters,
238
+ pagination: { page, limit },
239
+ sortings
240
+ }
241
+ })
242
+
243
+ return {
244
+ total: response.data.responses.total || 0,
245
+ records: response.data.responses.items || []
246
+ }
247
+ }
248
+
249
+ private async deleteTaskResource() {
250
+ if (
251
+ await OxPrompt.open({
252
+ title: i18next.t('text.are_you_sure'),
253
+ text: i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }),
254
+ confirmButton: { text: i18next.t('button.confirm') },
255
+ cancelButton: { text: i18next.t('button.cancel') }
256
+ })
257
+ ) {
258
+ const ids = this.grist.selected.map(record => record.id)
259
+ if (ids && ids.length > 0) {
260
+ const response = await client.mutate({
261
+ mutation: gql`
262
+ mutation ($ids: [String!]!) {
263
+ deleteTaskResources(ids: $ids)
264
+ }
265
+ `,
266
+ variables: {
267
+ ids
268
+ }
269
+ })
270
+
271
+ if (!response.errors) {
272
+ this.grist.fetch()
273
+ notify({
274
+ message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })
275
+ })
276
+ }
277
+ }
278
+ }
279
+ }
280
+
281
+ private async updateTaskResource() {
282
+ let patches = this.grist.dirtyRecords
283
+ if (patches && patches.length) {
284
+ patches = patches.map(patch => {
285
+ let patchField: any = patch.id ? { id: patch.id } : {}
286
+ const dirtyFields = patch.__dirtyfields__
287
+ for (let key in dirtyFields) {
288
+ patchField[key] = dirtyFields[key].after
289
+ }
290
+ patchField.cuFlag = patch.__dirty__
291
+
292
+ return patchField
293
+ })
294
+
295
+ const response = await client.mutate({
296
+ mutation: gql`
297
+ mutation ($patches: [TaskResourcePatch!]!) {
298
+ updateMultipleTaskResource(patches: $patches) {
299
+ name
300
+ }
301
+ }
302
+ `,
303
+ variables: {
304
+ patches
305
+ }
306
+ })
307
+
308
+ if (!response.errors) {
309
+ this.grist.fetch()
310
+ }
311
+ }
312
+ }
313
+
314
+ private async exportHandler() {
315
+ const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records
316
+ const targetFieldSet = new Set([
317
+ 'id',
318
+ 'name',
319
+ 'description',
320
+ 'active'
321
+ ])
322
+
323
+ return exportTargets.map(taskResource => {
324
+ let tempObj = {}
325
+ for (const field of targetFieldSet) {
326
+ tempObj[field] = taskResource[field]
327
+ }
328
+
329
+ return tempObj
330
+ })
331
+ }
332
+
333
+ private async importHandler(records) {
334
+ const popup = openPopup(
335
+ html`
336
+ <task-resource-importer
337
+ .taskResources=${records}
338
+ @imported=${() => {
339
+ history.back()
340
+ this.grist.fetch()
341
+ }}
342
+ ></task-resource-importer>
343
+ `,
344
+ {
345
+ backdrop: true,
346
+ size: 'large',
347
+ title: i18next.t('title.import task-resource')
348
+ }
349
+ )
350
+
351
+ popup.onclosed = () => {
352
+ this.grist.fetch()
353
+ }
354
+ }
355
+ }
356
+