@things-factory/dataset 6.0.25 → 6.0.27
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.
- package/README.md +26 -11
- package/assets/images/ooc.png +0 -0
- package/assets/images/oos.png +0 -0
- package/client/{bootstrap.js → bootstrap.ts} +2 -0
- package/client/components/{data-entry-form.js → data-entry-form.ts} +30 -33
- package/client/components/data-ooc-activity-view.ts +153 -0
- package/client/pages/data-archive/{data-archive-list-page.js → data-archive-list-page.ts} +67 -53
- package/client/pages/data-archive/{data-archive-request-popup.js → data-archive-request-popup.ts} +41 -39
- package/client/pages/data-entry/{data-entry-list-page.js → data-entry-list-page.ts} +41 -38
- package/client/pages/data-key-set/{data-key-item-list.js → data-key-item-list.ts} +31 -39
- package/client/pages/data-key-set/data-key-set-importer.ts +95 -0
- package/client/pages/data-key-set/{data-key-set-list-page.js → data-key-set-list-page.ts} +54 -35
- package/client/pages/data-ooc/{data-ooc-list-page.js → data-ooc-list-page.ts} +50 -36
- package/client/pages/data-ooc/{data-ooc-view.js → data-ooc-view.ts} +66 -76
- package/client/pages/data-report/{data-report-embed-page.js → data-report-embed-page.ts} +25 -34
- package/client/pages/data-report/{data-report-list-page.js → data-report-list-page.ts} +49 -43
- package/client/pages/data-report/{data-report-samples-page.js → data-report-samples-page.ts} +29 -43
- package/client/pages/data-report/{jasper-report-oocs-page.js → jasper-report-oocs-page.ts} +22 -34
- package/client/pages/data-report/{jasper-report-samples-crosstab-page.js → jasper-report-samples-crosstab-page.ts} +22 -34
- package/client/pages/data-report/{jasper-report-samples-page.js → jasper-report-samples-page.ts} +22 -34
- package/client/pages/data-sample/{data-sample-list-page.js → data-sample-list-page.ts} +49 -36
- package/client/pages/data-sample/{data-sample-search-page.js → data-sample-search-page.ts} +53 -39
- package/client/pages/data-sample/{data-sample-view.js → data-sample-view.ts} +29 -33
- package/client/pages/data-sensor/{data-sensor-list-page.js → data-sensor-list-page.ts} +41 -35
- package/client/pages/data-set/{data-item-list.js → data-item-list.ts} +31 -37
- package/client/pages/data-set/data-set-importer.ts +96 -0
- package/client/pages/data-set/{data-set-list-page.js → data-set-list-page.ts} +62 -36
- package/client/{route.js → route.ts} +1 -1
- package/client/tsconfig.json +11 -0
- package/dist-client/bootstrap.d.ts +3 -0
- package/dist-client/bootstrap.js +14 -0
- package/dist-client/bootstrap.js.map +1 -0
- package/dist-client/components/data-entry-form.d.ts +15 -0
- package/dist-client/components/data-entry-form.js +83 -0
- package/dist-client/components/data-entry-form.js.map +1 -0
- package/dist-client/components/data-ooc-activity-view.d.ts +1 -0
- package/dist-client/components/data-ooc-activity-view.js +154 -0
- package/dist-client/components/data-ooc-activity-view.js.map +1 -0
- package/dist-client/index.d.ts +1 -0
- package/dist-client/index.js +2 -0
- package/dist-client/index.js.map +1 -0
- package/dist-client/pages/data-archive/data-archive-list-page.d.ts +71 -0
- package/dist-client/pages/data-archive/data-archive-list-page.js +287 -0
- package/dist-client/pages/data-archive/data-archive-list-page.js.map +1 -0
- package/dist-client/pages/data-archive/data-archive-request-popup.d.ts +1 -0
- package/dist-client/pages/data-archive/data-archive-request-popup.js +161 -0
- package/dist-client/pages/data-archive/data-archive-request-popup.js.map +1 -0
- package/dist-client/pages/data-entry/data-entry-list-page.d.ts +36 -0
- package/dist-client/pages/data-entry/data-entry-list-page.js +383 -0
- package/dist-client/pages/data-entry/data-entry-list-page.js.map +1 -0
- package/dist-client/pages/data-key-set/data-key-item-list.d.ts +18 -0
- package/dist-client/pages/data-key-set/data-key-item-list.js +188 -0
- package/dist-client/pages/data-key-set/data-key-item-list.js.map +1 -0
- package/dist-client/pages/data-key-set/data-key-set-importer.d.ts +9 -0
- package/dist-client/pages/data-key-set/data-key-set-importer.js +100 -0
- package/dist-client/pages/data-key-set/data-key-set-importer.js.map +1 -0
- package/dist-client/pages/data-key-set/data-key-set-list-page.d.ts +60 -0
- package/dist-client/pages/data-key-set/data-key-set-list-page.js +450 -0
- package/dist-client/pages/data-key-set/data-key-set-list-page.js.map +1 -0
- package/dist-client/pages/data-ooc/data-ooc-list-page.d.ts +58 -0
- package/dist-client/pages/data-ooc/data-ooc-list-page.js +473 -0
- package/dist-client/pages/data-ooc/data-ooc-list-page.js.map +1 -0
- package/dist-client/pages/data-ooc/data-ooc-view.d.ts +1 -0
- package/dist-client/pages/data-ooc/data-ooc-view.js +179 -0
- package/dist-client/pages/data-ooc/data-ooc-view.js.map +1 -0
- package/dist-client/pages/data-report/data-report-embed-page.d.ts +36 -0
- package/dist-client/pages/data-report/data-report-embed-page.js +101 -0
- package/dist-client/pages/data-report/data-report-embed-page.js.map +1 -0
- package/dist-client/pages/data-report/data-report-list-page.d.ts +36 -0
- package/dist-client/pages/data-report/data-report-list-page.js +431 -0
- package/dist-client/pages/data-report/data-report-list-page.js.map +1 -0
- package/dist-client/pages/data-report/data-report-samples-page.d.ts +32 -0
- package/dist-client/pages/data-report/data-report-samples-page.js +164 -0
- package/dist-client/pages/data-report/data-report-samples-page.js.map +1 -0
- package/dist-client/pages/data-report/jasper-report-oocs-page.d.ts +2 -0
- package/dist-client/pages/data-report/jasper-report-oocs-page.js +101 -0
- package/dist-client/pages/data-report/jasper-report-oocs-page.js.map +1 -0
- package/dist-client/pages/data-report/jasper-report-samples-crosstab-page.d.ts +2 -0
- package/dist-client/pages/data-report/jasper-report-samples-crosstab-page.js +101 -0
- package/dist-client/pages/data-report/jasper-report-samples-crosstab-page.js.map +1 -0
- package/dist-client/pages/data-report/jasper-report-samples-page.d.ts +2 -0
- package/dist-client/pages/data-report/jasper-report-samples-page.js +101 -0
- package/dist-client/pages/data-report/jasper-report-samples-page.js.map +1 -0
- package/dist-client/pages/data-sample/data-sample-list-page.d.ts +58 -0
- package/dist-client/pages/data-sample/data-sample-list-page.js +412 -0
- package/dist-client/pages/data-sample/data-sample-list-page.js.map +1 -0
- package/dist-client/pages/data-sample/data-sample-search-page.d.ts +63 -0
- package/dist-client/pages/data-sample/data-sample-search-page.js +413 -0
- package/dist-client/pages/data-sample/data-sample-search-page.js.map +1 -0
- package/dist-client/pages/data-sample/data-sample-view.d.ts +1 -0
- package/dist-client/pages/data-sample/data-sample-view.js +109 -0
- package/dist-client/pages/data-sample/data-sample-view.js.map +1 -0
- package/dist-client/pages/data-sensor/data-sensor-list-page.d.ts +49 -0
- package/dist-client/pages/data-sensor/data-sensor-list-page.js +419 -0
- package/dist-client/pages/data-sensor/data-sensor-list-page.js.map +1 -0
- package/dist-client/pages/data-set/data-item-list.d.ts +1 -0
- package/dist-client/pages/data-set/data-item-list.js +267 -0
- package/dist-client/pages/data-set/data-item-list.js.map +1 -0
- package/dist-client/pages/data-set/data-set-importer.d.ts +10 -0
- package/dist-client/pages/data-set/data-set-importer.js +103 -0
- package/dist-client/pages/data-set/data-set-importer.js.map +1 -0
- package/dist-client/pages/data-set/data-set-list-page.d.ts +71 -0
- package/dist-client/pages/data-set/data-set-list-page.js +759 -0
- package/dist-client/pages/data-set/data-set-list-page.js.map +1 -0
- package/dist-client/route.d.ts +1 -0
- package/dist-client/route.js +47 -0
- package/dist-client/route.js.map +1 -0
- package/dist-client/tsconfig.tsbuildinfo +1 -0
- package/dist-server/controllers/activity-template/activity-ooc.js +59 -0
- package/dist-server/controllers/activity-template/activity-ooc.js.map +1 -0
- package/dist-server/controllers/create-data-sample.js +38 -1
- package/dist-server/controllers/create-data-sample.js.map +1 -1
- package/dist-server/controllers/index.js +5 -0
- package/dist-server/controllers/index.js.map +1 -1
- package/dist-server/index.js +1 -2
- package/dist-server/index.js.map +1 -1
- package/dist-server/routes.js +2 -2
- package/dist-server/routes.js.map +1 -1
- package/dist-server/service/data-set/data-set-query.js +5 -4
- package/dist-server/service/data-set/data-set-query.js.map +1 -1
- package/dist-server/service/data-set/data-set.js +3 -0
- package/dist-server/service/data-set/data-set.js.map +1 -1
- package/dist-server/service/data-set-history/data-set-history-query.js +4 -3
- package/dist-server/service/data-set-history/data-set-history-query.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +15 -12
- package/server/controllers/activity-template/activity-ooc.ts +55 -0
- package/server/controllers/create-data-sample.ts +48 -3
- package/server/controllers/index.ts +9 -0
- package/server/index.ts +1 -2
- package/server/routes.ts +2 -4
- package/server/service/data-set/data-set-query.ts +5 -4
- package/server/service/data-set/data-set.ts +3 -0
- package/server/service/data-set-history/data-set-history-query.ts +4 -3
- package/server/tsconfig.json +10 -0
- package/things-factory.config.js +2 -2
- package/translations/en.json +1 -1
- package/translations/ko.json +1 -1
- package/translations/ms.json +1 -0
- package/translations/zh.json +1 -0
- package/client/pages/data-key-set/data-key-set-importer.js +0 -105
- package/client/pages/data-set/data-set-importer.js +0 -103
- package/dist-server/middlewares/index.js +0 -8
- package/dist-server/middlewares/index.js.map +0 -1
- package/dist-server/migrations/index.js +0 -12
- package/dist-server/migrations/index.js.map +0 -1
- package/server/middlewares/index.ts +0 -3
- package/server/migrations/index.ts +0 -9
- package/tsconfig.json +0 -9
- /package/assets/{data-report.jpg → images/data-report.jpg} +0 -0
- /package/assets/{data-samples.jpg → images/data-samples.jpg} +0 -0
- /package/assets/{diagram.jpg → images/dataset-diagram.jpg} +0 -0
- /package/assets/{glue-table-indices.png → images/glue-table-indices-for-dataset.png} +0 -0
- /package/client/{index.js → index.ts} +0 -0
package/package.json
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
{
|
2
2
|
"name": "@things-factory/dataset",
|
3
|
-
"version": "6.0.
|
3
|
+
"version": "6.0.27",
|
4
4
|
"main": "dist-server/index.js",
|
5
|
-
"browser": "client/index.js",
|
5
|
+
"browser": "dist-client/index.js",
|
6
6
|
"things-factory": true,
|
7
7
|
"author": "heartyoh <heartyoh@hatiolab.com>",
|
8
8
|
"description": "module for handling data collection",
|
@@ -16,10 +16,12 @@
|
|
16
16
|
"directory": "packages/dataset"
|
17
17
|
},
|
18
18
|
"scripts": {
|
19
|
-
"build": "
|
20
|
-
"build:
|
21
|
-
"
|
22
|
-
"clean": "
|
19
|
+
"build": "npm run build:server && npm run build:client",
|
20
|
+
"build:client": "npx tsc --p ./client/tsconfig.json",
|
21
|
+
"build:server": "npx tsc --p ./server/tsconfig.json",
|
22
|
+
"clean:client": "npx rimraf dist-client",
|
23
|
+
"clean:server": "npx rimraf dist-server",
|
24
|
+
"clean": "npm run clean:server && npm run clean:client",
|
23
25
|
"migration:create": "node ../../node_modules/typeorm/cli.js migration:create -d ./server/migrations"
|
24
26
|
},
|
25
27
|
"dependencies": {
|
@@ -33,14 +35,15 @@
|
|
33
35
|
"@operato/shell": "^1.0.1",
|
34
36
|
"@operato/styles": "^1.0.0",
|
35
37
|
"@operato/utils": "^1.0.1",
|
36
|
-
"@things-factory/auth-base": "^6.0.
|
37
|
-
"@things-factory/aws-base": "^6.0.
|
38
|
-
"@things-factory/board-service": "^6.0.
|
38
|
+
"@things-factory/auth-base": "^6.0.27",
|
39
|
+
"@things-factory/aws-base": "^6.0.27",
|
40
|
+
"@things-factory/board-service": "^6.0.27",
|
39
41
|
"@things-factory/env": "^6.0.7",
|
40
|
-
"@things-factory/shell": "^6.0.
|
41
|
-
"@things-factory/work-shift": "^6.0.
|
42
|
+
"@things-factory/shell": "^6.0.27",
|
43
|
+
"@things-factory/work-shift": "^6.0.27",
|
44
|
+
"@things-factory/worklist": "^6.0.27",
|
42
45
|
"cron-parser": "^4.3.0",
|
43
46
|
"moment-timezone": "^0.5.40"
|
44
47
|
},
|
45
|
-
"gitHead": "
|
48
|
+
"gitHead": "684784a4f3e450e9ce07dcd51db70b8a2d2c2a0f"
|
46
49
|
}
|
@@ -0,0 +1,55 @@
|
|
1
|
+
export const ActivityOoc = {
|
2
|
+
name: 'OOC Review',
|
3
|
+
description: 'Task to take remedial action based on Out Of Control data',
|
4
|
+
release: '1.0.0',
|
5
|
+
provider: 'hatiolab.com',
|
6
|
+
category: 'quality',
|
7
|
+
activityType: 'user',
|
8
|
+
startable: true,
|
9
|
+
model: [
|
10
|
+
{
|
11
|
+
name: 'dataOocId',
|
12
|
+
description: 'OOC id',
|
13
|
+
tag: 'dataOocId',
|
14
|
+
hidden: true,
|
15
|
+
mandatory: true,
|
16
|
+
inout: 'in',
|
17
|
+
type: 'string',
|
18
|
+
options: {},
|
19
|
+
unit: null,
|
20
|
+
quantifier: [1],
|
21
|
+
spec: {}
|
22
|
+
},
|
23
|
+
{
|
24
|
+
name: 'Instruction',
|
25
|
+
description: 'Instructions for preventing OOC',
|
26
|
+
tag: 'instruction',
|
27
|
+
hidden: false,
|
28
|
+
mandatory: true,
|
29
|
+
inout: 'in',
|
30
|
+
type: 'textarea',
|
31
|
+
options: {},
|
32
|
+
unit: null,
|
33
|
+
quantifier: [1],
|
34
|
+
spec: {}
|
35
|
+
},
|
36
|
+
{
|
37
|
+
name: 'action',
|
38
|
+
description: 'Action Description',
|
39
|
+
tag: 'action',
|
40
|
+
hidden: false,
|
41
|
+
mandatory: true,
|
42
|
+
inout: 'out',
|
43
|
+
type: 'textarea',
|
44
|
+
options: {},
|
45
|
+
unit: null,
|
46
|
+
quantifier: [1],
|
47
|
+
spec: {}
|
48
|
+
}
|
49
|
+
],
|
50
|
+
uiType: 'custom-element',
|
51
|
+
uiSource: 'data-ooc-activity-view',
|
52
|
+
reportType: 'page',
|
53
|
+
reportSource: 'data-ooc-report-page',
|
54
|
+
thumbnail: '/assets/images/ooc.png'
|
55
|
+
}
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import moment from 'moment-timezone'
|
2
2
|
import { EntityManager } from 'typeorm'
|
3
3
|
|
4
|
-
import { User } from '@things-factory/auth-base'
|
5
|
-
import { Domain, getRedirectSubdomainPath, pubsub } from '@things-factory/shell'
|
4
|
+
import { User, Role } from '@things-factory/auth-base'
|
5
|
+
import { Domain, getRedirectSubdomainPath, getRepository, pubsub } from '@things-factory/shell'
|
6
6
|
import { getWorkDateAndShift } from '@things-factory/work-shift'
|
7
7
|
|
8
8
|
import { DataOoc, DataOocStatus } from '../service/data-ooc/data-ooc'
|
@@ -10,6 +10,9 @@ import { DataSample } from '../service/data-sample/data-sample'
|
|
10
10
|
import { NewDataSample } from '../service/data-sample/data-sample-type'
|
11
11
|
import { DataSet } from '../service/data-set/data-set'
|
12
12
|
import { DataUseCase } from './data-use-case'
|
13
|
+
import { Activity } from '@things-factory/worklist'
|
14
|
+
|
15
|
+
import { draft } from '@things-factory/worklist/dist-server/controllers/activity-instance/draft'
|
13
16
|
|
14
17
|
// See README.md at ## Data Samples
|
15
18
|
process.env.TZ = 'UTC'
|
@@ -128,6 +131,48 @@ export async function createDataSample(
|
|
128
131
|
state: DataOocStatus.CREATED
|
129
132
|
})
|
130
133
|
|
134
|
+
// 여기쯤에서, worklist로 TODO로 보낸다.
|
135
|
+
// 입력담당역할에게 assign한다.
|
136
|
+
// 결재라인은 시설관리자을 포함한다. 결재라인을 dataset에 추가한다.
|
137
|
+
// Dataset용 Installable Activity 를 만든다.
|
138
|
+
|
139
|
+
const activity = (await tx.getRepository(Activity).findOneBy({
|
140
|
+
domain: { id: domain.id },
|
141
|
+
name: 'OOC Review'
|
142
|
+
})) as Activity
|
143
|
+
|
144
|
+
if (activity) {
|
145
|
+
const assignee =
|
146
|
+
dataSet.entryRoleId &&
|
147
|
+
(await tx.getRepository(Role)).findOneBy({ domain: { id: domain.id }, id: dataSet.entryRoleId })
|
148
|
+
|
149
|
+
const approver =
|
150
|
+
dataSet.supervisoryRoleId &&
|
151
|
+
(await tx.getRepository(Role)).findOneBy({ domain: { id: domain.id }, id: dataSet.supervisoryRoleId })
|
152
|
+
|
153
|
+
const assignees = dataSet.entryRoleId ? [{ type: 'Role', value: dataSet.entryRoleId, assignee }] : []
|
154
|
+
const approvalLine = dataSet.supervisoryRoleId
|
155
|
+
? [{ type: 'Role', value: dataSet.supervisoryRoleId, approver }]
|
156
|
+
: []
|
157
|
+
|
158
|
+
const activityInstance = {
|
159
|
+
name: `[OOC] ${dataSet.name}`,
|
160
|
+
activityId: activity.id,
|
161
|
+
description: `Data OOC occurred on '${dataSet.name}'`,
|
162
|
+
dueAt: new Date(Date.now() + 24 * 60 * 60 * 1000),
|
163
|
+
input: {
|
164
|
+
dataOocId: dataOoc.id
|
165
|
+
},
|
166
|
+
assignees,
|
167
|
+
approvalLine
|
168
|
+
}
|
169
|
+
|
170
|
+
draft(activityInstance, context)
|
171
|
+
} else {
|
172
|
+
console.warn('OOC Review Activity not installed.')
|
173
|
+
}
|
174
|
+
//
|
175
|
+
|
131
176
|
pubsub.publish('data-ooc', {
|
132
177
|
dataOoc,
|
133
178
|
supervisoryRoleId: dataSet.supervisoryRoleId
|
@@ -137,7 +182,7 @@ export async function createDataSample(
|
|
137
182
|
notification: {
|
138
183
|
domain,
|
139
184
|
type: 'error',
|
140
|
-
title: `
|
185
|
+
title: `[OOC] ${dataSet.name}`,
|
141
186
|
body: `Data OOC occurred on '${dataSet.name}'`,
|
142
187
|
url: getRedirectSubdomainPath(context, domain.subdomain, `/data-ooc/${dataOoc.id}`),
|
143
188
|
timestamp: collectedAt
|
@@ -1,2 +1,11 @@
|
|
1
|
+
import { ActivityInstallations } from '@things-factory/worklist'
|
2
|
+
|
3
|
+
import { ActivityOoc } from './activity-template/activity-ooc'
|
4
|
+
|
5
|
+
/* activity templates installation */
|
6
|
+
;[ActivityOoc].forEach(template => {
|
7
|
+
ActivityInstallations.installActivityTemplate(template)
|
8
|
+
})
|
9
|
+
|
1
10
|
export * from './create-data-sample'
|
2
11
|
export * from './data-use-case'
|
package/server/index.ts
CHANGED
package/server/routes.ts
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
import {
|
2
|
-
|
1
|
+
import { getDataSource } from '@things-factory/shell'
|
3
2
|
import { User } from '@things-factory/auth-base'
|
4
3
|
|
5
4
|
import { createDataSample } from './controllers/create-data-sample'
|
@@ -23,7 +22,7 @@ process.on('bootstrap-module-global-public-route' as any, (app, globalPublicRout
|
|
23
22
|
}
|
24
23
|
|
25
24
|
// make new data-sample
|
26
|
-
await
|
25
|
+
await getDataSource().transaction(async tx => {
|
27
26
|
// find sensor through deviceId
|
28
27
|
const sensor = await tx.getRepository(DataSensor).findOne({
|
29
28
|
where: { deviceId },
|
@@ -99,5 +98,4 @@ process.on('bootstrap-module-domain-private-route' as any, (app, domainPrivateRo
|
|
99
98
|
let { reportType } = context.params
|
100
99
|
context.body = `${reportType} Not Implemented.`
|
101
100
|
})
|
102
|
-
|
103
101
|
})
|
@@ -150,9 +150,10 @@ export class DataSetQuery {
|
|
150
150
|
async dataKeySet(@Root() dataSet: DataSet) {
|
151
151
|
return (
|
152
152
|
dataSet.dataKeySet ||
|
153
|
-
(
|
154
|
-
|
155
|
-
|
153
|
+
(dataSet.dataKeySetId &&
|
154
|
+
(await getRepository(DataKeySet).findOneBy({
|
155
|
+
id: dataSet.dataKeySetId
|
156
|
+
})))
|
156
157
|
)
|
157
158
|
}
|
158
159
|
|
@@ -174,7 +175,7 @@ export class DataSetQuery {
|
|
174
175
|
@FieldResolver(type => Date, { nullable: true })
|
175
176
|
async latestCollectedAt(@Root() dataSet: DataSet): Promise<Date> {
|
176
177
|
const sample = await getRepository(DataSample).findOne({
|
177
|
-
select: ['collectedAt'],
|
178
|
+
select: ['id', 'collectedAt'],
|
178
179
|
where: { dataSet: { id: dataSet.id } },
|
179
180
|
order: { collectedAt: 'DESC' }
|
180
181
|
})
|
@@ -20,6 +20,7 @@ import { DataItem } from './data-item-type'
|
|
20
20
|
export enum DataSetEntryType {
|
21
21
|
Generated = 'generated',
|
22
22
|
Board = 'board',
|
23
|
+
CustomElement = 'custom-element',
|
23
24
|
Page = 'page',
|
24
25
|
ExternalURL = 'external',
|
25
26
|
Jasper = 'jasper',
|
@@ -34,6 +35,7 @@ registerEnumType(DataSetEntryType, {
|
|
34
35
|
export enum DataSetMonitorType {
|
35
36
|
Generated = 'generated',
|
36
37
|
Board = 'board',
|
38
|
+
CustomElement = 'custom-element',
|
37
39
|
Page = 'page',
|
38
40
|
ExternalURL = 'external'
|
39
41
|
}
|
@@ -46,6 +48,7 @@ registerEnumType(DataSetMonitorType, {
|
|
46
48
|
export enum DataSetReportType {
|
47
49
|
Generated = 'generated',
|
48
50
|
Board = 'board',
|
51
|
+
CustomElement = 'custom-element',
|
49
52
|
Page = 'page',
|
50
53
|
ExternalURL = 'external'
|
51
54
|
}
|
@@ -83,9 +83,10 @@ export class DataSetHistoryQuery {
|
|
83
83
|
async dataKeySet(@Root() dataSet: DataSet) {
|
84
84
|
return (
|
85
85
|
dataSet.dataKeySet ||
|
86
|
-
(
|
87
|
-
|
88
|
-
|
86
|
+
(dataSet.dataKeySetId &&
|
87
|
+
(await getRepository(DataKeySet).findOneBy({
|
88
|
+
id: dataSet.dataKeySetId
|
89
|
+
})))
|
89
90
|
)
|
90
91
|
}
|
91
92
|
|
package/things-factory.config.js
CHANGED
package/translations/en.json
CHANGED
package/translations/ko.json
CHANGED
package/translations/ms.json
CHANGED
package/translations/zh.json
CHANGED
@@ -1,105 +0,0 @@
|
|
1
|
-
import '@operato/data-grist'
|
2
|
-
|
3
|
-
import gql from 'graphql-tag'
|
4
|
-
import { css, html, LitElement } from 'lit'
|
5
|
-
|
6
|
-
import { client } from '@operato/graphql'
|
7
|
-
import { i18next } from '@operato/i18n'
|
8
|
-
import { isMobileDevice } from '@operato/utils'
|
9
|
-
|
10
|
-
export class DataKeySetImporter extends LitElement {
|
11
|
-
static get properties() {
|
12
|
-
return {
|
13
|
-
columns: Object,
|
14
|
-
dataKeySets: Array
|
15
|
-
}
|
16
|
-
}
|
17
|
-
|
18
|
-
constructor() {
|
19
|
-
super()
|
20
|
-
this.columns = {
|
21
|
-
list: { fields: ['name', 'description'] },
|
22
|
-
pagination: { infinite: true },
|
23
|
-
columns: [
|
24
|
-
{
|
25
|
-
type: 'string',
|
26
|
-
name: 'name',
|
27
|
-
header: i18next.t('field.name'),
|
28
|
-
width: 150
|
29
|
-
},
|
30
|
-
{
|
31
|
-
type: 'string',
|
32
|
-
name: 'description',
|
33
|
-
header: i18next.t('field.description'),
|
34
|
-
width: 200
|
35
|
-
},
|
36
|
-
{
|
37
|
-
type: 'checkbox',
|
38
|
-
name: 'active',
|
39
|
-
header: i18next.t('field.active'),
|
40
|
-
width: 60
|
41
|
-
}
|
42
|
-
]
|
43
|
-
}
|
44
|
-
}
|
45
|
-
|
46
|
-
static get styles() {
|
47
|
-
return [
|
48
|
-
css`
|
49
|
-
:host {
|
50
|
-
display: flex;
|
51
|
-
flex-direction: column;
|
52
|
-
|
53
|
-
background-color: #fff;
|
54
|
-
}
|
55
|
-
|
56
|
-
ox-grist {
|
57
|
-
flex: 1;
|
58
|
-
}
|
59
|
-
|
60
|
-
.button-container {
|
61
|
-
display: flex;
|
62
|
-
margin-left: auto;
|
63
|
-
padding: var(--padding-default);
|
64
|
-
}
|
65
|
-
|
66
|
-
mwc-button {
|
67
|
-
margin-left: var(--margin-default);
|
68
|
-
}
|
69
|
-
`
|
70
|
-
]
|
71
|
-
}
|
72
|
-
|
73
|
-
render() {
|
74
|
-
return html`
|
75
|
-
<ox-grist
|
76
|
-
.mode=${isMobileDevice() ? 'LIST' : 'GRID'}
|
77
|
-
.config=${this.columns}
|
78
|
-
.data=${{
|
79
|
-
records: this.dataKeySets
|
80
|
-
}}
|
81
|
-
></ox-grist>
|
82
|
-
|
83
|
-
<div class="button-container">
|
84
|
-
<mwc-button raised @click="${this.save.bind(this)}">${i18next.t('button.save')}</mwc-button>
|
85
|
-
</div>
|
86
|
-
`
|
87
|
-
}
|
88
|
-
|
89
|
-
async save() {
|
90
|
-
const response = await client.mutate({
|
91
|
-
mutation: gql`
|
92
|
-
mutation importDataKeySets($dataKeySets: [DataKeySetPatch!]!) {
|
93
|
-
importDataKeySets(dataKeySets: $dataKeySets)
|
94
|
-
}
|
95
|
-
`,
|
96
|
-
variables: { dataKeySets: this.dataKeySets }
|
97
|
-
})
|
98
|
-
|
99
|
-
if (response.errors?.length) return
|
100
|
-
|
101
|
-
this.dispatchEvent(new CustomEvent('imported'))
|
102
|
-
}
|
103
|
-
}
|
104
|
-
|
105
|
-
window.customElements.define('data-key-set-importer', DataKeySetImporter)
|
@@ -1,103 +0,0 @@
|
|
1
|
-
import '@operato/data-grist'
|
2
|
-
|
3
|
-
import gql from 'graphql-tag'
|
4
|
-
import { css, html, LitElement } from 'lit'
|
5
|
-
|
6
|
-
import { client } from '@operato/graphql'
|
7
|
-
import { i18next } from '@operato/i18n'
|
8
|
-
import { isMobileDevice } from '@operato/utils'
|
9
|
-
|
10
|
-
export class DataSetImporter extends LitElement {
|
11
|
-
static get properties() {
|
12
|
-
return {
|
13
|
-
columns: Object,
|
14
|
-
scenarios: Array
|
15
|
-
}
|
16
|
-
}
|
17
|
-
|
18
|
-
constructor() {
|
19
|
-
super()
|
20
|
-
this.columns = {
|
21
|
-
list: { fields: ['name', 'description'] },
|
22
|
-
pagination: { infinite: true },
|
23
|
-
columns: [
|
24
|
-
{
|
25
|
-
type: 'string',
|
26
|
-
name: 'name',
|
27
|
-
header: i18next.t('field.name'),
|
28
|
-
width: 150
|
29
|
-
},
|
30
|
-
{
|
31
|
-
type: 'string',
|
32
|
-
name: 'description',
|
33
|
-
header: i18next.t('field.description'),
|
34
|
-
width: 200
|
35
|
-
},
|
36
|
-
{
|
37
|
-
type: 'checkbox',
|
38
|
-
name: 'active',
|
39
|
-
header: i18next.t('field.active'),
|
40
|
-
width: 60
|
41
|
-
}
|
42
|
-
]
|
43
|
-
}
|
44
|
-
}
|
45
|
-
|
46
|
-
static get styles() {
|
47
|
-
return [
|
48
|
-
css`
|
49
|
-
:host {
|
50
|
-
display: flex;
|
51
|
-
flex-direction: column;
|
52
|
-
|
53
|
-
background-color: #fff;
|
54
|
-
}
|
55
|
-
|
56
|
-
ox-grist {
|
57
|
-
flex: 1;
|
58
|
-
}
|
59
|
-
|
60
|
-
.button-container {
|
61
|
-
display: flex;
|
62
|
-
margin-left: auto;
|
63
|
-
padding: var(--padding-default);
|
64
|
-
}
|
65
|
-
|
66
|
-
mwc-button {
|
67
|
-
margin-left: var(--margin-default);
|
68
|
-
}
|
69
|
-
`
|
70
|
-
]
|
71
|
-
}
|
72
|
-
|
73
|
-
render() {
|
74
|
-
return html`
|
75
|
-
<ox-grist
|
76
|
-
.mode=${isMobileDevice() ? 'LIST' : 'GRID'}
|
77
|
-
.config=${this.columns}
|
78
|
-
.data="${{ records: this.scenarios }}"
|
79
|
-
></ox-grist>
|
80
|
-
|
81
|
-
<div class="button-container">
|
82
|
-
<mwc-button raised @click="${this.save.bind(this)}">${i18next.t('button.save')}</mwc-button>
|
83
|
-
</div>
|
84
|
-
`
|
85
|
-
}
|
86
|
-
|
87
|
-
async save() {
|
88
|
-
const response = await client.mutate({
|
89
|
-
mutation: gql`
|
90
|
-
mutation importDataSets($dataSets: [DataSetPatch!]!) {
|
91
|
-
importDataSets(dataSets: $dataSets)
|
92
|
-
}
|
93
|
-
`,
|
94
|
-
variables: { dataSets: this.dataSets }
|
95
|
-
})
|
96
|
-
|
97
|
-
if (response.errors?.length) return
|
98
|
-
|
99
|
-
this.dispatchEvent(new CustomEvent('imported'))
|
100
|
-
}
|
101
|
-
}
|
102
|
-
|
103
|
-
customElements.define('data-set-importer', DataSetImporter)
|
@@ -1,8 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.initMiddlewares = void 0;
|
4
|
-
function initMiddlewares(app) {
|
5
|
-
/* can add middlewares into app */
|
6
|
-
}
|
7
|
-
exports.initMiddlewares = initMiddlewares;
|
8
|
-
//# sourceMappingURL=index.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/middlewares/index.ts"],"names":[],"mappings":";;;AAAA,SAAgB,eAAe,CAAC,GAAG;IACjC,kCAAkC;AACpC,CAAC;AAFD,0CAEC","sourcesContent":["export function initMiddlewares(app) {\n /* can add middlewares into app */\n}\n"]}
|
@@ -1,12 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.migrations = void 0;
|
4
|
-
const glob = require('glob');
|
5
|
-
const path = require('path');
|
6
|
-
exports.migrations = [];
|
7
|
-
glob.sync(path.resolve(__dirname, '.', '**', '*.js')).forEach(function (file) {
|
8
|
-
if (file.indexOf('index.js') !== -1)
|
9
|
-
return;
|
10
|
-
exports.migrations = exports.migrations.concat(Object.values(require(path.resolve(file))) || []);
|
11
|
-
});
|
12
|
-
//# sourceMappingURL=index.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/migrations/index.ts"],"names":[],"mappings":";;;AAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAEjB,QAAA,UAAU,GAAG,EAAE,CAAA;AAE1B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAS,IAAI;IACzE,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAAE,OAAM;IAC3C,kBAAU,GAAG,kBAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AAClF,CAAC,CAAC,CAAA","sourcesContent":["const glob = require('glob')\nconst path = require('path')\n\nexport var migrations = []\n\nglob.sync(path.resolve(__dirname, '.', '**', '*.js')).forEach(function(file) {\n if (file.indexOf('index.js') !== -1) return\n migrations = migrations.concat(Object.values(require(path.resolve(file))) || [])\n})\n"]}
|
@@ -1,9 +0,0 @@
|
|
1
|
-
const glob = require('glob')
|
2
|
-
const path = require('path')
|
3
|
-
|
4
|
-
export var migrations = []
|
5
|
-
|
6
|
-
glob.sync(path.resolve(__dirname, '.', '**', '*.js')).forEach(function(file) {
|
7
|
-
if (file.indexOf('index.js') !== -1) return
|
8
|
-
migrations = migrations.concat(Object.values(require(path.resolve(file))) || [])
|
9
|
-
})
|
package/tsconfig.json
DELETED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|