@dssp/supervision 0.0.2

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 (174) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/assets/images/hatiolab-logo.png +0 -0
  3. package/client/actions/main.ts +1 -0
  4. package/client/bootstrap.ts +8 -0
  5. package/client/index.ts +1 -0
  6. package/client/pages/action-plan/action-plan-importer.ts +96 -0
  7. package/client/pages/action-plan/action-plan-list-page.ts +355 -0
  8. package/client/pages/check-item/check-item-importer.ts +96 -0
  9. package/client/pages/check-item/check-item-list-page.ts +355 -0
  10. package/client/pages/issue/issue-importer.ts +96 -0
  11. package/client/pages/issue/issue-list-page.ts +355 -0
  12. package/client/pages/main.ts +25 -0
  13. package/client/pages/project-report/project-report-importer.ts +96 -0
  14. package/client/pages/project-report/project-report-list-page.ts +355 -0
  15. package/client/pages/supervisor/supervisor-importer.ts +96 -0
  16. package/client/pages/supervisor/supervisor-list-page.ts +355 -0
  17. package/client/reducers/main.ts +17 -0
  18. package/client/route.ts +27 -0
  19. package/client/tsconfig.json +11 -0
  20. package/dist-client/actions/main.d.ts +1 -0
  21. package/dist-client/actions/main.js +2 -0
  22. package/dist-client/actions/main.js.map +1 -0
  23. package/dist-client/bootstrap.d.ts +1 -0
  24. package/dist-client/bootstrap.js +8 -0
  25. package/dist-client/bootstrap.js.map +1 -0
  26. package/dist-client/index.d.ts +1 -0
  27. package/dist-client/index.js +2 -0
  28. package/dist-client/index.js.map +1 -0
  29. package/dist-client/pages/action-plan/action-plan-importer.d.ts +9 -0
  30. package/dist-client/pages/action-plan/action-plan-importer.js +100 -0
  31. package/dist-client/pages/action-plan/action-plan-importer.js.map +1 -0
  32. package/dist-client/pages/action-plan/action-plan-list-page.d.ts +62 -0
  33. package/dist-client/pages/action-plan/action-plan-list-page.js +331 -0
  34. package/dist-client/pages/action-plan/action-plan-list-page.js.map +1 -0
  35. package/dist-client/pages/check-item/check-item-importer.d.ts +9 -0
  36. package/dist-client/pages/check-item/check-item-importer.js +100 -0
  37. package/dist-client/pages/check-item/check-item-importer.js.map +1 -0
  38. package/dist-client/pages/check-item/check-item-list-page.d.ts +62 -0
  39. package/dist-client/pages/check-item/check-item-list-page.js +331 -0
  40. package/dist-client/pages/check-item/check-item-list-page.js.map +1 -0
  41. package/dist-client/pages/issue/issue-importer.d.ts +9 -0
  42. package/dist-client/pages/issue/issue-importer.js +100 -0
  43. package/dist-client/pages/issue/issue-importer.js.map +1 -0
  44. package/dist-client/pages/issue/issue-list-page.d.ts +62 -0
  45. package/dist-client/pages/issue/issue-list-page.js +331 -0
  46. package/dist-client/pages/issue/issue-list-page.js.map +1 -0
  47. package/dist-client/pages/main.d.ts +1 -0
  48. package/dist-client/pages/main.js +27 -0
  49. package/dist-client/pages/main.js.map +1 -0
  50. package/dist-client/pages/project-report/project-report-importer.d.ts +9 -0
  51. package/dist-client/pages/project-report/project-report-importer.js +100 -0
  52. package/dist-client/pages/project-report/project-report-importer.js.map +1 -0
  53. package/dist-client/pages/project-report/project-report-list-page.d.ts +62 -0
  54. package/dist-client/pages/project-report/project-report-list-page.js +331 -0
  55. package/dist-client/pages/project-report/project-report-list-page.js.map +1 -0
  56. package/dist-client/pages/supervisor/supervisor-importer.d.ts +9 -0
  57. package/dist-client/pages/supervisor/supervisor-importer.js +100 -0
  58. package/dist-client/pages/supervisor/supervisor-importer.js.map +1 -0
  59. package/dist-client/pages/supervisor/supervisor-list-page.d.ts +62 -0
  60. package/dist-client/pages/supervisor/supervisor-list-page.js +331 -0
  61. package/dist-client/pages/supervisor/supervisor-list-page.js.map +1 -0
  62. package/dist-client/reducers/main.d.ts +6 -0
  63. package/dist-client/reducers/main.js +14 -0
  64. package/dist-client/reducers/main.js.map +1 -0
  65. package/dist-client/route.d.ts +1 -0
  66. package/dist-client/route.js +23 -0
  67. package/dist-client/route.js.map +1 -0
  68. package/dist-client/tsconfig.tsbuildinfo +1 -0
  69. package/dist-server/controllers/index.js +1 -0
  70. package/dist-server/controllers/index.js.map +1 -0
  71. package/dist-server/index.js +7 -0
  72. package/dist-server/index.js.map +1 -0
  73. package/dist-server/middlewares/index.js +8 -0
  74. package/dist-server/middlewares/index.js.map +1 -0
  75. package/dist-server/migrations/index.js +12 -0
  76. package/dist-server/migrations/index.js.map +1 -0
  77. package/dist-server/routes.js +25 -0
  78. package/dist-server/routes.js.map +1 -0
  79. package/dist-server/service/action-plan/action-plan-mutation.js +168 -0
  80. package/dist-server/service/action-plan/action-plan-mutation.js.map +1 -0
  81. package/dist-server/service/action-plan/action-plan-query.js +97 -0
  82. package/dist-server/service/action-plan/action-plan-query.js.map +1 -0
  83. package/dist-server/service/action-plan/action-plan-type.js +86 -0
  84. package/dist-server/service/action-plan/action-plan-type.js.map +1 -0
  85. package/dist-server/service/action-plan/action-plan.js +116 -0
  86. package/dist-server/service/action-plan/action-plan.js.map +1 -0
  87. package/dist-server/service/action-plan/index.js +10 -0
  88. package/dist-server/service/action-plan/index.js.map +1 -0
  89. package/dist-server/service/check-item/check-item-mutation.js +168 -0
  90. package/dist-server/service/check-item/check-item-mutation.js.map +1 -0
  91. package/dist-server/service/check-item/check-item-query.js +97 -0
  92. package/dist-server/service/check-item/check-item-query.js.map +1 -0
  93. package/dist-server/service/check-item/check-item-type.js +86 -0
  94. package/dist-server/service/check-item/check-item-type.js.map +1 -0
  95. package/dist-server/service/check-item/check-item.js +117 -0
  96. package/dist-server/service/check-item/check-item.js.map +1 -0
  97. package/dist-server/service/check-item/index.js +10 -0
  98. package/dist-server/service/check-item/index.js.map +1 -0
  99. package/dist-server/service/index.js +43 -0
  100. package/dist-server/service/index.js.map +1 -0
  101. package/dist-server/service/issue/index.js +10 -0
  102. package/dist-server/service/issue/index.js.map +1 -0
  103. package/dist-server/service/issue/issue-mutation.js +168 -0
  104. package/dist-server/service/issue/issue-mutation.js.map +1 -0
  105. package/dist-server/service/issue/issue-query.js +97 -0
  106. package/dist-server/service/issue/issue-query.js.map +1 -0
  107. package/dist-server/service/issue/issue-type.js +86 -0
  108. package/dist-server/service/issue/issue-type.js.map +1 -0
  109. package/dist-server/service/issue/issue.js +117 -0
  110. package/dist-server/service/issue/issue.js.map +1 -0
  111. package/dist-server/service/project-report/index.js +10 -0
  112. package/dist-server/service/project-report/index.js.map +1 -0
  113. package/dist-server/service/project-report/project-report-mutation.js +168 -0
  114. package/dist-server/service/project-report/project-report-mutation.js.map +1 -0
  115. package/dist-server/service/project-report/project-report-query.js +97 -0
  116. package/dist-server/service/project-report/project-report-query.js.map +1 -0
  117. package/dist-server/service/project-report/project-report-type.js +86 -0
  118. package/dist-server/service/project-report/project-report-type.js.map +1 -0
  119. package/dist-server/service/project-report/project-report.js +128 -0
  120. package/dist-server/service/project-report/project-report.js.map +1 -0
  121. package/dist-server/service/supervisor/index.js +10 -0
  122. package/dist-server/service/supervisor/index.js.map +1 -0
  123. package/dist-server/service/supervisor/supervisor-mutation.js +168 -0
  124. package/dist-server/service/supervisor/supervisor-mutation.js.map +1 -0
  125. package/dist-server/service/supervisor/supervisor-query.js +97 -0
  126. package/dist-server/service/supervisor/supervisor-query.js.map +1 -0
  127. package/dist-server/service/supervisor/supervisor-type.js +86 -0
  128. package/dist-server/service/supervisor/supervisor-type.js.map +1 -0
  129. package/dist-server/service/supervisor/supervisor.js +127 -0
  130. package/dist-server/service/supervisor/supervisor.js.map +1 -0
  131. package/dist-server/tsconfig.tsbuildinfo +1 -0
  132. package/helps/supervision/action-plan.md +160 -0
  133. package/helps/supervision/check-item.md +160 -0
  134. package/helps/supervision/issue.md +160 -0
  135. package/helps/supervision/project-report.md +160 -0
  136. package/helps/supervision/supervisor.md +160 -0
  137. package/package.json +37 -0
  138. package/server/controllers/index.ts +0 -0
  139. package/server/index.ts +4 -0
  140. package/server/middlewares/index.ts +3 -0
  141. package/server/migrations/index.ts +9 -0
  142. package/server/routes.ts +28 -0
  143. package/server/service/action-plan/action-plan-mutation.ts +198 -0
  144. package/server/service/action-plan/action-plan-query.ts +62 -0
  145. package/server/service/action-plan/action-plan-type.ts +61 -0
  146. package/server/service/action-plan/action-plan.ts +103 -0
  147. package/server/service/action-plan/index.ts +7 -0
  148. package/server/service/check-item/check-item-mutation.ts +198 -0
  149. package/server/service/check-item/check-item-query.ts +62 -0
  150. package/server/service/check-item/check-item-type.ts +61 -0
  151. package/server/service/check-item/check-item.ts +111 -0
  152. package/server/service/check-item/index.ts +7 -0
  153. package/server/service/index.ts +42 -0
  154. package/server/service/issue/index.ts +7 -0
  155. package/server/service/issue/issue-mutation.ts +198 -0
  156. package/server/service/issue/issue-query.ts +62 -0
  157. package/server/service/issue/issue-type.ts +61 -0
  158. package/server/service/issue/issue.ts +105 -0
  159. package/server/service/project-report/index.ts +7 -0
  160. package/server/service/project-report/project-report-mutation.ts +198 -0
  161. package/server/service/project-report/project-report-query.ts +62 -0
  162. package/server/service/project-report/project-report-type.ts +61 -0
  163. package/server/service/project-report/project-report.ts +113 -0
  164. package/server/service/supervisor/index.ts +7 -0
  165. package/server/service/supervisor/supervisor-mutation.ts +198 -0
  166. package/server/service/supervisor/supervisor-query.ts +62 -0
  167. package/server/service/supervisor/supervisor-type.ts +61 -0
  168. package/server/service/supervisor/supervisor.ts +113 -0
  169. package/server/tsconfig.json +10 -0
  170. package/things-factory.config.js +15 -0
  171. package/translations/en.json +1 -0
  172. package/translations/ko.json +1 -0
  173. package/translations/ms.json +1 -0
  174. package/translations/zh.json +1 -0
@@ -0,0 +1,355 @@
1
+ import '@operato/data-grist'
2
+
3
+ import { CommonButtonStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles'
4
+ import { PageView, store } from '@operato/shell'
5
+ import { css, html } from 'lit'
6
+ import { customElement, property, query, state } from 'lit/decorators.js'
7
+ import { ScopedElementsMixin } from '@open-wc/scoped-elements'
8
+ import {
9
+ ColumnConfig,
10
+ DataGrist,
11
+ FetchOption,
12
+ SortersControl
13
+ } from '@operato/data-grist'
14
+ import { client } from '@operato/graphql'
15
+ import { i18next, localize } from '@operato/i18n'
16
+ import { notify, openPopup } from '@operato/layout'
17
+ import { OxPopup, OxPrompt } from '@operato/popup'
18
+ import { isMobileDevice } from '@operato/utils'
19
+
20
+ import { connect } from 'pwa-helpers/connect-mixin'
21
+ import gql from 'graphql-tag'
22
+
23
+ import { SupervisorImporter } from './supervisor-importer'
24
+
25
+ @customElement('supervisor-list-page')
26
+ export class SupervisorListPage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {
27
+
28
+ static styles = [
29
+ ScrollbarStyles,
30
+ CommonGristStyles,
31
+ css`
32
+ :host {
33
+ display: flex;
34
+
35
+ width: 100%;
36
+
37
+ --grid-record-emphasized-background-color: red;
38
+ --grid-record-emphasized-color: yellow;
39
+ }
40
+ `
41
+ ]
42
+
43
+ static get scopedElements() {
44
+ return {
45
+ 'supervisor-importer': SupervisorImporter
46
+ }
47
+ }
48
+
49
+ @state() private gristConfig: any
50
+ @state() private mode: 'CARD' | 'GRID' | 'LIST' = isMobileDevice() ? 'CARD' : 'GRID'
51
+
52
+ @query('ox-grist') private grist!: DataGrist
53
+ @query('#sorter-control') private sortersControl!: OxPopup
54
+
55
+ get context() {
56
+ return {
57
+ title: i18next.t('title.supervisor list'),
58
+ search: {
59
+ handler: (search: string) => {
60
+ this.grist.searchText = search
61
+ },
62
+ value: this.grist.searchText
63
+ },
64
+ filter: {
65
+ handler: () => {
66
+ this.grist.toggleHeadroom()
67
+ }
68
+ },
69
+ help: 'supervision/supervisor',
70
+ actions: [
71
+ {
72
+ title: i18next.t('button.save'),
73
+ action: this.updateSupervisor.bind(this),
74
+ ...CommonButtonStyles.save
75
+ },
76
+ {
77
+ title: i18next.t('button.delete'),
78
+ action: this.deleteSupervisor.bind(this),
79
+ ...CommonButtonStyles.delete
80
+ }
81
+ ],
82
+ exportable: {
83
+ name: i18next.t('title.supervisor list'),
84
+ data: this.exportHandler.bind(this)
85
+ },
86
+ importable: {
87
+ handler: this.importHandler.bind(this)
88
+ }
89
+ }
90
+ }
91
+
92
+ render() {
93
+ const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')
94
+
95
+ return html`
96
+ <ox-grist
97
+ .mode=${mode}
98
+ .config=${this.gristConfig}
99
+ .fetchHandler=${this.fetchHandler.bind(this)}
100
+ >
101
+ <div slot="headroom">
102
+ <div id="filters">
103
+ <ox-filters-form autofocus></ox-filters-form>
104
+ </div>
105
+
106
+ <div id="sorters">
107
+ Sort
108
+ <mwc-icon
109
+ @click=${e => {
110
+ const target = e.currentTarget
111
+ this.sortersControl.open({
112
+ right: 0,
113
+ top: target.offsetTop + target.offsetHeight
114
+ })
115
+ }}
116
+ >expand_more</mwc-icon
117
+ >
118
+ <ox-popup id="sorter-control">
119
+ <ox-sorters-control> </ox-sorters-control>
120
+ </ox-popup>
121
+ </div>
122
+
123
+ <div id="modes">
124
+ <mwc-icon @click=${() => (this.mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</mwc-icon>
125
+ <mwc-icon @click=${() => (this.mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</mwc-icon>
126
+ <mwc-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</mwc-icon>
127
+ </div>
128
+ </div>
129
+ </ox-grist>
130
+ `
131
+ }
132
+
133
+ async pageInitialized(lifecycle: any) {
134
+ this.gristConfig = {
135
+ list: {
136
+ fields: ['name', 'description'],
137
+ details: ['active', 'updatedAt']
138
+ },
139
+ columns: [
140
+ { type: 'gutter', gutterName: 'sequence' },
141
+ { type: 'gutter', gutterName: 'row-selector', multiple: true },
142
+ {
143
+ type: 'string',
144
+ name: 'name',
145
+ header: i18next.t('field.name'),
146
+ record: {
147
+ editable: true
148
+ },
149
+ filter: 'search',
150
+ sortable: true,
151
+ width: 150
152
+ },
153
+ {
154
+ type: 'string',
155
+ name: 'description',
156
+ header: i18next.t('field.description'),
157
+ record: {
158
+ editable: true
159
+ },
160
+ filter: 'search',
161
+ width: 200
162
+ },
163
+ {
164
+ type: 'checkbox',
165
+ name: 'active',
166
+ label: true,
167
+ header: i18next.t('field.active'),
168
+ record: {
169
+ editable: true
170
+ },
171
+ filter: true,
172
+ sortable: true,
173
+ width: 60
174
+ },
175
+ {
176
+ type: 'resource-object',
177
+ name: 'updater',
178
+ header: i18next.t('field.updater'),
179
+ record: {
180
+ editable: false
181
+ },
182
+ sortable: true,
183
+ width: 120
184
+ },
185
+ {
186
+ type: 'datetime',
187
+ name: 'updatedAt',
188
+ header: i18next.t('field.updated_at'),
189
+ record: {
190
+ editable: false
191
+ },
192
+ sortable: true,
193
+ width: 180
194
+ }
195
+ ],
196
+ rows: {
197
+ selectable: {
198
+ multiple: true
199
+ }
200
+ },
201
+ sorters: [
202
+ {
203
+ name: 'name'
204
+ }
205
+ ]
206
+ }
207
+ }
208
+
209
+ async pageUpdated(changes: any, lifecycle: any) {
210
+ if (this.active) {
211
+ // do something here when this page just became as active
212
+ }
213
+ }
214
+
215
+ async fetchHandler({ page = 1, limit = 100, sortings = [], filters = [] }: FetchOption) {
216
+ const response = await client.query({
217
+ query: gql`
218
+ query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
219
+ responses: supervisors(filters: $filters, pagination: $pagination, sortings: $sortings) {
220
+ items {
221
+ id
222
+ name
223
+ description
224
+ active
225
+ updater {
226
+ id
227
+ name
228
+ }
229
+ updatedAt
230
+ }
231
+ total
232
+ }
233
+ }
234
+ `,
235
+ variables: {
236
+ filters,
237
+ pagination: { page, limit },
238
+ sortings
239
+ }
240
+ })
241
+
242
+ return {
243
+ total: response.data.responses.total || 0,
244
+ records: response.data.responses.items || []
245
+ }
246
+ }
247
+
248
+ private async deleteSupervisor() {
249
+ if (
250
+ await OxPrompt.open({
251
+ title: i18next.t('text.are_you_sure'),
252
+ text: i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }),
253
+ confirmButton: { text: i18next.t('button.confirm') },
254
+ cancelButton: { text: i18next.t('button.cancel') }
255
+ })
256
+ ) {
257
+ const ids = this.grist.selected.map(record => record.id)
258
+ if (ids && ids.length > 0) {
259
+ const response = await client.mutate({
260
+ mutation: gql`
261
+ mutation ($ids: [String!]!) {
262
+ deleteSupervisors(ids: $ids)
263
+ }
264
+ `,
265
+ variables: {
266
+ ids
267
+ }
268
+ })
269
+
270
+ if (!response.errors) {
271
+ this.grist.fetch()
272
+ notify({
273
+ message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })
274
+ })
275
+ }
276
+ }
277
+ }
278
+ }
279
+
280
+ private async updateSupervisor() {
281
+ let patches = this.grist.dirtyRecords
282
+ if (patches && patches.length) {
283
+ patches = patches.map(patch => {
284
+ let patchField: any = patch.id ? { id: patch.id } : {}
285
+ const dirtyFields = patch.__dirtyfields__
286
+ for (let key in dirtyFields) {
287
+ patchField[key] = dirtyFields[key].after
288
+ }
289
+ patchField.cuFlag = patch.__dirty__
290
+
291
+ return patchField
292
+ })
293
+
294
+ const response = await client.mutate({
295
+ mutation: gql`
296
+ mutation ($patches: [SupervisorPatch!]!) {
297
+ updateMultipleSupervisor(patches: $patches) {
298
+ name
299
+ }
300
+ }
301
+ `,
302
+ variables: {
303
+ patches
304
+ }
305
+ })
306
+
307
+ if (!response.errors) {
308
+ this.grist.fetch()
309
+ }
310
+ }
311
+ }
312
+
313
+ private async exportHandler() {
314
+ const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records
315
+ const targetFieldSet = new Set([
316
+ 'id',
317
+ 'name',
318
+ 'description',
319
+ 'active'
320
+ ])
321
+
322
+ return exportTargets.map(supervisor => {
323
+ let tempObj = {}
324
+ for (const field of targetFieldSet) {
325
+ tempObj[field] = supervisor[field]
326
+ }
327
+
328
+ return tempObj
329
+ })
330
+ }
331
+
332
+ private async importHandler(records) {
333
+ const popup = openPopup(
334
+ html`
335
+ <supervisor-importer
336
+ .supervisors=${records}
337
+ @imported=${() => {
338
+ history.back()
339
+ this.grist.fetch()
340
+ }}
341
+ ></supervisor-importer>
342
+ `,
343
+ {
344
+ backdrop: true,
345
+ size: 'large',
346
+ title: i18next.t('title.import supervisor')
347
+ }
348
+ )
349
+
350
+ popup.onclosed = () => {
351
+ this.grist.fetch()
352
+ }
353
+ }
354
+ }
355
+
@@ -0,0 +1,17 @@
1
+ import { UPDATE_SUPERVISION } from '../actions/main'
2
+
3
+ const INITIAL_STATE = {
4
+ supervision: 'ABC'
5
+ }
6
+
7
+ const supervision = (state = INITIAL_STATE, action) => {
8
+ switch (action.type) {
9
+ case UPDATE_SUPERVISION:
10
+ return { ...state }
11
+
12
+ default:
13
+ return state
14
+ }
15
+ }
16
+
17
+ export default supervision
@@ -0,0 +1,27 @@
1
+ export default function route(page: string) {
2
+ switch (page) {
3
+ case 'supervision-main':
4
+ import('./pages/main')
5
+ return page
6
+
7
+ case 'supervisor-list':
8
+ import('./pages/supervisor/supervisor-list-page')
9
+ return page
10
+
11
+ case 'project-report-list':
12
+ import('./pages/project-report/project-report-list-page')
13
+ return page
14
+
15
+ case 'check-item-list':
16
+ import('./pages/check-item/check-item-list-page')
17
+ return page
18
+
19
+ case 'issue-list':
20
+ import('./pages/issue/issue-list-page')
21
+ return page
22
+
23
+ case 'action-plan-list':
24
+ import('./pages/action-plan/action-plan-list-page')
25
+ return page
26
+ }
27
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "extends": "../../tsconfig-base.json",
3
+ "compilerOptions": {
4
+ "strict": true,
5
+ "declaration": true,
6
+ "module": "esnext",
7
+ "outDir": "../dist-client",
8
+ "baseUrl": "./"
9
+ },
10
+ "include": ["./**/*"]
11
+ }
@@ -0,0 +1 @@
1
+ export declare const UPDATE_SUPERVISION = "UPDATE_SUPERVISION";
@@ -0,0 +1,2 @@
1
+ export const UPDATE_SUPERVISION = 'UPDATE_SUPERVISION';
2
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../client/actions/main.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAA","sourcesContent":["export const UPDATE_SUPERVISION = 'UPDATE_SUPERVISION'\n"]}
@@ -0,0 +1 @@
1
+ export default function bootstrap(): void;
@@ -0,0 +1,8 @@
1
+ import { store } from '@operato/shell';
2
+ import supervision from './reducers/main';
3
+ export default function bootstrap() {
4
+ store.addReducers({
5
+ supervision
6
+ });
7
+ }
8
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../client/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,WAAW,MAAM,iBAAiB,CAAA;AAEzC,MAAM,CAAC,OAAO,UAAU,SAAS;IAC/B,KAAK,CAAC,WAAW,CAAC;QAChB,WAAW;KACZ,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { store } from '@operato/shell'\nimport supervision from './reducers/main'\n\nexport default function bootstrap() {\n store.addReducers({\n supervision\n })\n}\n"]}
@@ -0,0 +1 @@
1
+ export * from './actions/main';
@@ -0,0 +1,2 @@
1
+ export * from './actions/main';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA","sourcesContent":["export * from './actions/main'"]}
@@ -0,0 +1,9 @@
1
+ import '@operato/data-grist';
2
+ import { LitElement } from 'lit';
3
+ export declare class ActionPlanImporter extends LitElement {
4
+ static styles: import("lit").CSSResult[];
5
+ private actionPlans;
6
+ private columns;
7
+ render(): import("lit-html").TemplateResult<1>;
8
+ private save;
9
+ }
@@ -0,0 +1,100 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import '@operato/data-grist';
3
+ import gql from 'graphql-tag';
4
+ import { css, html, LitElement } from 'lit';
5
+ import { state } from 'lit/decorators.js';
6
+ import { client } from '@operato/graphql';
7
+ import { i18next } from '@operato/i18n';
8
+ import { isMobileDevice } from '@operato/utils';
9
+ export class ActionPlanImporter extends LitElement {
10
+ constructor() {
11
+ super(...arguments);
12
+ this.actionPlans = [];
13
+ this.columns = {
14
+ list: { fields: ['name', 'description'] },
15
+ pagination: { infinite: true },
16
+ columns: [
17
+ {
18
+ type: 'string',
19
+ name: 'name',
20
+ header: i18next.t('field.name'),
21
+ width: 150
22
+ },
23
+ {
24
+ type: 'string',
25
+ name: 'description',
26
+ header: i18next.t('field.description'),
27
+ width: 200
28
+ },
29
+ {
30
+ type: 'checkbox',
31
+ name: 'active',
32
+ header: i18next.t('field.active'),
33
+ width: 60
34
+ }
35
+ ]
36
+ };
37
+ }
38
+ render() {
39
+ return html `
40
+ <ox-grist
41
+ .mode=${isMobileDevice() ? 'LIST' : 'GRID'}
42
+ .config=${this.columns}
43
+ .data=${{
44
+ records: this.actionPlans
45
+ }}
46
+ ></ox-grist>
47
+
48
+ <div class="button-container">
49
+ <mwc-button raised @click="${this.save.bind(this)}">${i18next.t('button.save')}</mwc-button>
50
+ </div>
51
+ `;
52
+ }
53
+ async save() {
54
+ var _a;
55
+ const response = await client.mutate({
56
+ mutation: gql `
57
+ mutation importActionPlans($actionPlans: [ActionPlanPatch!]!) {
58
+ importActionPlans(actionPlans: $actionPlans)
59
+ }
60
+ `,
61
+ variables: { actionPlans: this.actionPlans }
62
+ });
63
+ if ((_a = response.errors) === null || _a === void 0 ? void 0 : _a.length)
64
+ return;
65
+ this.dispatchEvent(new CustomEvent('imported'));
66
+ }
67
+ }
68
+ ActionPlanImporter.styles = [
69
+ css `
70
+ :host {
71
+ display: flex;
72
+ flex-direction: column;
73
+
74
+ background-color: #fff;
75
+ }
76
+
77
+ ox-grist {
78
+ flex: 1;
79
+ }
80
+
81
+ .button-container {
82
+ display: flex;
83
+ margin-left: auto;
84
+ padding: var(--padding-default);
85
+ }
86
+
87
+ mwc-button {
88
+ margin-left: var(--margin-default);
89
+ }
90
+ `
91
+ ];
92
+ __decorate([
93
+ state(),
94
+ __metadata("design:type", Array)
95
+ ], ActionPlanImporter.prototype, "actionPlans", void 0);
96
+ __decorate([
97
+ state(),
98
+ __metadata("design:type", Object)
99
+ ], ActionPlanImporter.prototype, "columns", void 0);
100
+ //# sourceMappingURL=action-plan-importer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-plan-importer.js","sourceRoot":"","sources":["../../../client/pages/action-plan/action-plan-importer.ts"],"names":[],"mappings":";AAAA,OAAO,qBAAqB,CAAA;AAE5B,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAY,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAAlD;;QA0BmB,gBAAW,GAAU,EAAE,CAAA;QACvB,YAAO,GAAG;YACzB,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE;YACzC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9B,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;oBAC/B,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,aAAa;oBACnB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;oBACtC,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;oBACjC,KAAK,EAAE,EAAE;iBACV;aACF;SACF,CAAA;IAkCH,CAAC;IAhCC,MAAM;QACJ,OAAO,IAAI,CAAA;;gBAEC,cAAc,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;kBAChC,IAAI,CAAC,OAAO;gBAEpB;YACE,OAAO,EAAE,IAAI,CAAC,WAAW;SAE7B;;;;qCAI6B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;;KAEjF,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,IAAI;;QAChB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,GAAG,CAAA;;;;OAIZ;YACD,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;SAC7C,CAAC,CAAA;QAEF,IAAI,MAAA,QAAQ,CAAC,MAAM,0CAAE,MAAM;YAAE,OAAM;QAEnC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAA;IACjD,CAAC;;AAlFM,yBAAM,GAAG;IACd,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;KAqBF;CACF,CAAA;AAED;IAAC,KAAK,EAAE;;uDAAgC;AACxC;IAAC,KAAK,EAAE;;mDAuBP","sourcesContent":["import '@operato/data-grist'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { property, state } from 'lit/decorators.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next } from '@operato/i18n'\nimport { isMobileDevice } from '@operato/utils'\n\nexport class ActionPlanImporter extends LitElement {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n background-color: #fff;\n }\n\n ox-grist {\n flex: 1;\n }\n\n .button-container {\n display: flex;\n margin-left: auto;\n padding: var(--padding-default);\n }\n\n mwc-button {\n margin-left: var(--margin-default);\n }\n `\n ]\n\n @state() private actionPlans: any[] = []\n @state() private columns = {\n list: { fields: ['name', 'description'] },\n pagination: { infinite: true },\n columns: [\n {\n type: 'string',\n name: 'name',\n header: i18next.t('field.name'),\n width: 150\n },\n {\n type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n width: 200\n },\n {\n type: 'checkbox',\n name: 'active',\n header: i18next.t('field.active'),\n width: 60\n }\n ]\n }\n\n render() {\n return html`\n <ox-grist\n .mode=${isMobileDevice() ? 'LIST' : 'GRID'}\n .config=${this.columns}\n .data=${\n { \n records: this.actionPlans \n }\n }\n ></ox-grist>\n\n <div class=\"button-container\">\n <mwc-button raised @click=\"${this.save.bind(this)}\">${i18next.t('button.save')}</mwc-button>\n </div>\n `\n }\n\n private async save() {\n const response = await client.mutate({\n mutation: gql`\n mutation importActionPlans($actionPlans: [ActionPlanPatch!]!) {\n importActionPlans(actionPlans: $actionPlans)\n }\n `,\n variables: { actionPlans: this.actionPlans }\n })\n\n if (response.errors?.length) return\n\n this.dispatchEvent(new CustomEvent('imported'))\n }\n}\n\n"]}
@@ -0,0 +1,62 @@
1
+ import '@operato/data-grist';
2
+ import { PageView } from '@operato/shell';
3
+ import { FetchOption } from '@operato/data-grist';
4
+ import { ActionPlanImporter } from './action-plan-importer';
5
+ declare const ActionPlanListPage_base: (new (...args: any[]) => {
6
+ _storeUnsubscribe: import("redux").Unsubscribe;
7
+ connectedCallback(): void;
8
+ disconnectedCallback(): void;
9
+ stateChanged(_state: unknown): void;
10
+ readonly isConnected: boolean;
11
+ }) & (new (...args: any[]) => import("lit").LitElement) & typeof PageView & import("@open-wc/dedupe-mixin").Constructor<import("@open-wc/scoped-elements/types/src/types").ScopedElementsHost>;
12
+ export declare class ActionPlanListPage extends ActionPlanListPage_base {
13
+ static styles: import("lit").CSSResult[];
14
+ static get scopedElements(): {
15
+ 'action-plan-importer': typeof ActionPlanImporter;
16
+ };
17
+ private gristConfig;
18
+ private mode;
19
+ private grist;
20
+ private sortersControl;
21
+ get context(): {
22
+ title: string;
23
+ search: {
24
+ handler: (search: string) => void;
25
+ value: string;
26
+ };
27
+ filter: {
28
+ handler: () => void;
29
+ };
30
+ help: string;
31
+ actions: {
32
+ icon: string;
33
+ emphasis: {
34
+ raised: boolean;
35
+ outlined: boolean;
36
+ dense: boolean;
37
+ danger: boolean;
38
+ };
39
+ title: string;
40
+ action: () => Promise<void>;
41
+ }[];
42
+ exportable: {
43
+ name: string;
44
+ data: () => Promise<{}[]>;
45
+ };
46
+ importable: {
47
+ handler: (records: any) => Promise<void>;
48
+ };
49
+ };
50
+ render(): import("lit-html").TemplateResult<1>;
51
+ pageInitialized(lifecycle: any): Promise<void>;
52
+ pageUpdated(changes: any, lifecycle: any): Promise<void>;
53
+ fetchHandler({ page, limit, sortings, filters }: FetchOption): Promise<{
54
+ total: any;
55
+ records: any;
56
+ }>;
57
+ private deleteActionPlan;
58
+ private updateActionPlan;
59
+ private exportHandler;
60
+ private importHandler;
61
+ }
62
+ export {};