@steedos/objectql 2.2.51-beta.1 → 2.2.51-beta.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 (134) hide show
  1. package/package.json +10 -10
  2. package/src/actions/field_updates.ts +0 -118
  3. package/src/actions/index.ts +0 -3
  4. package/src/actions/types/field_update_target.ts +0 -7
  5. package/src/actions/types/workflow_notification.ts +0 -9
  6. package/src/actions/types/workflow_rule.ts +0 -11
  7. package/src/actions/workflow_notifications.ts +0 -81
  8. package/src/actions/workflow_rule.ts +0 -136
  9. package/src/driver/driver.ts +0 -102
  10. package/src/driver/field-encrytion/index.ts +0 -8
  11. package/src/driver/field-encrytion/sharedconst.ts +0 -34
  12. package/src/driver/fieldDBType.ts +0 -14
  13. package/src/driver/format.ts +0 -36
  14. package/src/driver/index.ts +0 -20
  15. package/src/driver/metadata.ts +0 -226
  16. package/src/driver/meteorMongo.ts +0 -639
  17. package/src/driver/mongo.ts +0 -416
  18. package/src/driver/mysql.ts +0 -47
  19. package/src/driver/oracle.ts +0 -60
  20. package/src/driver/postgres.ts +0 -46
  21. package/src/driver/sqlite3.ts +0 -40
  22. package/src/driver/sqlserver.ts +0 -52
  23. package/src/dynamic-load/actions.ts +0 -146
  24. package/src/dynamic-load/approval_process.ts +0 -73
  25. package/src/dynamic-load/button.ts +0 -75
  26. package/src/dynamic-load/chart.ts +0 -22
  27. package/src/dynamic-load/client_script.ts +0 -65
  28. package/src/dynamic-load/field.ts +0 -77
  29. package/src/dynamic-load/flow_role.ts +0 -46
  30. package/src/dynamic-load/index.ts +0 -21
  31. package/src/dynamic-load/layout.ts +0 -53
  32. package/src/dynamic-load/listview.ts +0 -57
  33. package/src/dynamic-load/method.ts +0 -63
  34. package/src/dynamic-load/object_translations.ts +0 -61
  35. package/src/dynamic-load/originalObject.ts +0 -8
  36. package/src/dynamic-load/package.ts +0 -312
  37. package/src/dynamic-load/page.ts +0 -23
  38. package/src/dynamic-load/permission.ts +0 -71
  39. package/src/dynamic-load/permissionset.ts +0 -78
  40. package/src/dynamic-load/preload_data.ts +0 -104
  41. package/src/dynamic-load/profile.ts +0 -90
  42. package/src/dynamic-load/query.ts +0 -22
  43. package/src/dynamic-load/restrictionRules.ts +0 -23
  44. package/src/dynamic-load/role.ts +0 -46
  45. package/src/dynamic-load/shareRules.ts +0 -23
  46. package/src/dynamic-load/tab.ts +0 -17
  47. package/src/dynamic-load/tabs.ts +0 -13
  48. package/src/dynamic-load/translations.ts +0 -54
  49. package/src/dynamic-load/trigger.ts +0 -236
  50. package/src/dynamic-load/validation_rule.ts +0 -77
  51. package/src/dynamic-load/workflow.ts +0 -114
  52. package/src/errors/index.ts +0 -111
  53. package/src/formula/core.ts +0 -490
  54. package/src/formula/field_formula.ts +0 -107
  55. package/src/formula/index.ts +0 -81
  56. package/src/formula/params.ts +0 -197
  57. package/src/formula/recompute.ts +0 -65
  58. package/src/formula/simple_params.ts +0 -92
  59. package/src/formula/type.ts +0 -107
  60. package/src/formula/util.ts +0 -207
  61. package/src/index.ts +0 -24
  62. package/src/metadata-register/_base.ts +0 -85
  63. package/src/metadata-register/app.ts +0 -30
  64. package/src/metadata-register/chart.ts +0 -9
  65. package/src/metadata-register/index.ts +0 -123
  66. package/src/metadata-register/layout.ts +0 -38
  67. package/src/metadata-register/object.ts +0 -68
  68. package/src/metadata-register/page.ts +0 -9
  69. package/src/metadata-register/permissionFields.ts +0 -13
  70. package/src/metadata-register/permissionset.ts +0 -25
  71. package/src/metadata-register/process.ts +0 -16
  72. package/src/metadata-register/processTrigger.ts +0 -24
  73. package/src/metadata-register/profile.ts +0 -25
  74. package/src/metadata-register/query.ts +0 -9
  75. package/src/metadata-register/restrictionRules.ts +0 -12
  76. package/src/metadata-register/shareRules.ts +0 -13
  77. package/src/metadata-register/tab.ts +0 -9
  78. package/src/metadata-register/tabs.ts +0 -43
  79. package/src/services/datasourceServiceFactory.ts +0 -55
  80. package/src/services/helpers/graphql/consts.ts +0 -25
  81. package/src/services/helpers/graphql/getPrimaryFieldType.ts +0 -48
  82. package/src/services/helpers/graphql/getQueryFields.ts +0 -51
  83. package/src/services/helpers/graphql/index.ts +0 -666
  84. package/src/services/helpers/rest.ts +0 -57
  85. package/src/services/index.ts +0 -13
  86. package/src/services/objectService.ts +0 -846
  87. package/src/services/objectServiceDispatcher.ts +0 -209
  88. package/src/services/objectServiceFactory.ts +0 -29
  89. package/src/summary/core.ts +0 -263
  90. package/src/summary/field_summary.ts +0 -71
  91. package/src/summary/index.ts +0 -96
  92. package/src/summary/recompute.ts +0 -31
  93. package/src/summary/type.ts +0 -60
  94. package/src/ts-types/index.ts +0 -3
  95. package/src/ts-types/permissionset.ts +0 -8
  96. package/src/ts-types/profile.ts +0 -11
  97. package/src/ts-types/triggerActionParams.ts +0 -22
  98. package/src/typeorm/driver.ts +0 -379
  99. package/src/typeorm/index.ts +0 -3
  100. package/src/typeorm/util.ts +0 -147
  101. package/src/types/action.ts +0 -52
  102. package/src/types/app.ts +0 -280
  103. package/src/types/config.ts +0 -152
  104. package/src/types/connection.ts +0 -87
  105. package/src/types/dashboard.ts +0 -91
  106. package/src/types/datasource.ts +0 -570
  107. package/src/types/field.ts +0 -370
  108. package/src/types/field_permission.ts +0 -42
  109. package/src/types/field_types.ts +0 -1
  110. package/src/types/index.ts +0 -21
  111. package/src/types/list_view.ts +0 -56
  112. package/src/types/listeners.ts +0 -18
  113. package/src/types/object.ts +0 -2076
  114. package/src/types/object_dynamic_load.ts +0 -426
  115. package/src/types/object_events.ts +0 -43
  116. package/src/types/object_layouts.ts +0 -20
  117. package/src/types/object_permission.ts +0 -134
  118. package/src/types/query.ts +0 -28
  119. package/src/types/report.ts +0 -128
  120. package/src/types/restrictionRule.ts +0 -57
  121. package/src/types/schema.ts +0 -273
  122. package/src/types/shareRule.ts +0 -57
  123. package/src/types/trigger.ts +0 -88
  124. package/src/types/userSession.ts +0 -45
  125. package/src/types/validation_rules.ts +0 -29
  126. package/src/util/convert.ts +0 -131
  127. package/src/util/field.ts +0 -93
  128. package/src/util/function_expression.ts +0 -63
  129. package/src/util/index.ts +0 -1066
  130. package/src/util/locale.ts +0 -24
  131. package/src/util/permission_shares.ts +0 -25
  132. package/src/util/suffix.ts +0 -78
  133. package/src/util/transform.ts +0 -239
  134. package/src/validators/index.ts +0 -36
@@ -1,666 +0,0 @@
1
- /*
2
- * @Author: sunhaolin@hotoa.com
3
- * @Date: 2022-06-15 15:49:44
4
- * @LastEditors: sunhaolin@hotoa.com
5
- * @LastEditTime: 2022-06-20 19:04:27
6
- * @Description:
7
- */
8
-
9
- import _ = require("underscore");
10
- import moment = require('moment');
11
- import { getObjectServiceName } from "../..";
12
- import { SteedosObjectTypeConfig } from "../../..";
13
- // const clone = require("clone");
14
- import { translationObject } from '@steedos/i18n';
15
- const { moleculerGql: gql } = require("moleculer-apollo-server");
16
- import { getSteedosSchema, getUserLocale } from '../../..';
17
- import { getQueryFields } from "./getQueryFields";
18
- import { getPrimaryFieldType } from "./getPrimaryFieldType";
19
-
20
- import { BASIC_TYPE_MAPPING, EXPAND_SUFFIX, DISPLAY_PREFIX, RELATED_PREFIX, GRAPHQL_ACTION_PREFIX } from "./consts";
21
-
22
- export function generateActionGraphqlProp(actionName: string, objectConfig: SteedosObjectTypeConfig) {
23
- let gplObj: any = {};
24
- let objectName = objectConfig.name;
25
- if (objectName == 'users') {
26
- return gplObj;
27
- }
28
- switch (actionName) {
29
- case 'graphqlCount':
30
- gplObj.query = gql`
31
- type Query {
32
- ${objectName}__count(fields: JSON, filters: JSON, top: Int, skip: Int, sort: String): Int
33
- }
34
- `;
35
- break;
36
- case 'graphqlFind':
37
- gplObj.query = gql`
38
- type Query {
39
- ${objectName}(fields: JSON, filters: JSON, top: Int, skip: Int, sort: String): [${objectName}]
40
- }
41
- `;
42
- break;
43
- case 'findOne':
44
- gplObj.query = gql`
45
- type Query {
46
- ${objectName}__${actionName}(id: JSON): ${objectName}
47
- }
48
- `;
49
- break;
50
- case 'insert':
51
- gplObj.mutation = gql`
52
- type Mutation {
53
- ${objectName}__${actionName}(doc: JSON): ${objectName}
54
- }
55
- `;
56
- break;
57
- case 'update':
58
- gplObj.mutation = gql`
59
- type Mutation {
60
- ${objectName}__${actionName}(id: JSON, doc: JSON): ${objectName}
61
- }
62
- `;
63
- break;
64
- case 'delete':
65
- gplObj.mutation = gql`
66
- type Mutation {
67
- ${objectName}__${actionName}(id: JSON): JSON
68
- }
69
- `;
70
- break;
71
- default:
72
- // console.error(`need to handle action: ${actionName}`);
73
- break;
74
- }
75
- // console.log(gplObj);
76
- return gplObj;
77
- }
78
-
79
- export function generateSettingsGraphql(objectConfig: SteedosObjectTypeConfig) {
80
- let objectName = objectConfig.name;
81
- let fields = objectConfig.fields;
82
- const primaryFieldType = getPrimaryFieldType(objectConfig);
83
- let type = `type ${objectName} { ${primaryFieldType} `;
84
- let resolvers = {};
85
- resolvers[objectName] = {};
86
- _.each(fields, (field, name) => {
87
- if (name.indexOf(".") > -1) {
88
- return;
89
- }
90
- if (!field.type) {
91
- // console.error(`The field ${name} of ${objectName} has no type property.`);
92
- type += `${name}: JSON `;
93
- return;
94
- }
95
- if (BASIC_TYPE_MAPPING[field.type]) {
96
- type += `${name}: ${BASIC_TYPE_MAPPING[field.type]} `;
97
- } else if (
98
- (field.type == "lookup" || field.type == "master_detail") &&
99
- field.reference_to &&
100
- _.isString(field.reference_to)
101
- ) {
102
- let refTo = field.reference_to;
103
- // 判断能否根据refTo找到对象,如果找到则说明对象已加载,否则return
104
- let objMetaData = getLocalService(refTo);
105
- if (refTo != objectName && (!objMetaData || objMetaData.settings.deleted)) {
106
- return;
107
- }
108
- if (field.multiple) {
109
- type += `${name}: [String] `;
110
- type += `${name}${EXPAND_SUFFIX}: [${refTo}] `;
111
- resolvers[objectName][`${name}${EXPAND_SUFFIX}`] = {
112
- action: `${getObjectServiceName(
113
- refTo
114
- )}.${GRAPHQL_ACTION_PREFIX}${EXPAND_SUFFIX}_multiple`,
115
- rootParams: {
116
- [name]: "ids",
117
- },
118
- params: {
119
- objectName: refTo,
120
- },
121
- };
122
- } else {
123
- type += `${name}: String `;
124
- type += `${name}${EXPAND_SUFFIX}: ${refTo} `;
125
- resolvers[objectName][`${name}${EXPAND_SUFFIX}`] = {
126
- action: `${getObjectServiceName(
127
- refTo
128
- )}.${GRAPHQL_ACTION_PREFIX}${EXPAND_SUFFIX}`,
129
- rootParams: {
130
- [name]: "id",
131
- },
132
- params: {
133
- objectName: refTo,
134
- },
135
- };
136
- }
137
- } else {
138
- type += `${name}: JSON `;
139
- }
140
- });
141
-
142
- // _display
143
- let _display_type_name = `${DISPLAY_PREFIX}_${objectName}`;
144
- type += `${DISPLAY_PREFIX}(fields: [String]): ${_display_type_name} `;
145
- // resolvers[objectName][DISPLAY_PREFIX] = async function (parent, args, context, info) {
146
- // let userSession = context.ctx.meta.user;
147
- // return await translateToDisplay(objectName, fields, parent, userSession);
148
- // }
149
- resolvers[objectName][DISPLAY_PREFIX] = {
150
- action: `${getObjectServiceName(
151
- objectName
152
- )}.${GRAPHQL_ACTION_PREFIX}${DISPLAY_PREFIX}`,
153
- rootParams: {
154
- _id: "_id",
155
- },
156
- params: {
157
- objectName: objectName,
158
- },
159
- };
160
- // define _display type
161
- let _display_type = _getDisplayType(_display_type_name, fields);
162
- type = gql`
163
- ${_display_type}
164
- ${type}
165
- `;
166
-
167
- // _related
168
- if (objectConfig.enable_files) {
169
- let relatedObjName = "cms_files";
170
- let relatedFieldName = `${RELATED_PREFIX}_files`;
171
- type += _getRelatedType(relatedFieldName, relatedObjName);
172
- resolvers[objectName][
173
- relatedFieldName
174
- ] = _getRelatedResolverForEnableProperty(
175
- objectName,
176
- relatedObjName,
177
- "parent"
178
- );
179
- }
180
- if (objectConfig.enable_tasks) {
181
- let relatedObjName = "tasks";
182
- let relatedFieldName = `${RELATED_PREFIX}_${relatedObjName}`;
183
- type += _getRelatedType(relatedFieldName, relatedObjName);
184
- resolvers[objectName][
185
- relatedFieldName
186
- ] = _getRelatedResolverForEnableProperty(
187
- objectName,
188
- relatedObjName,
189
- "related_to"
190
- );
191
- }
192
- if (objectConfig.enable_notes) {
193
- let relatedObjName = "notes";
194
- let relatedFieldName = `${RELATED_PREFIX}_${relatedObjName}`;
195
- type += _getRelatedType(relatedFieldName, relatedObjName);
196
- resolvers[objectName][
197
- relatedFieldName
198
- ] = _getRelatedResolverForEnableProperty(
199
- objectName,
200
- relatedObjName,
201
- "related_to"
202
- );
203
- }
204
- if (objectConfig.enable_events) {
205
- let relatedObjName = "events";
206
- let relatedFieldName = `${RELATED_PREFIX}_${relatedObjName}`;
207
- type += _getRelatedType(relatedFieldName, relatedObjName);
208
- resolvers[objectName][
209
- relatedFieldName
210
- ] = _getRelatedResolverForEnableProperty(
211
- objectName,
212
- relatedObjName,
213
- "related_to"
214
- );
215
- }
216
- if (objectConfig.enable_audit) {
217
- let relatedObjName = "audit_records";
218
- let relatedFieldName = `${RELATED_PREFIX}_${relatedObjName}`;
219
- type += _getRelatedType(relatedFieldName, relatedObjName);
220
- resolvers[objectName][
221
- relatedFieldName
222
- ] = _getRelatedResolverForEnableProperty(
223
- objectName,
224
- relatedObjName,
225
- "related_to"
226
- );
227
- }
228
- if (objectConfig.enable_instances) {
229
- let relatedObjName = "instances";
230
- let relatedFieldName = `${RELATED_PREFIX}_${relatedObjName}`;
231
- type += _getRelatedType(relatedFieldName, relatedObjName);
232
- resolvers[objectName][
233
- relatedFieldName
234
- ] = _getRelatedResolverForEnableProperty(
235
- objectName,
236
- relatedObjName,
237
- "record_ids"
238
- );
239
- }
240
- if (objectConfig.enable_approvals) {
241
- let relatedObjName = "approvals";
242
- let relatedFieldName = `${RELATED_PREFIX}_${relatedObjName}`;
243
- type += _getRelatedType(relatedFieldName, relatedObjName);
244
- resolvers[objectName][
245
- relatedFieldName
246
- ] = _getRelatedResolverForEnableProperty(
247
- objectName,
248
- relatedObjName,
249
- "related_to"
250
- );
251
- }
252
-
253
- type += "}";
254
- return {
255
- type: type,
256
- resolvers: resolvers,
257
- };
258
- }
259
-
260
- export async function dealWithRelatedFields(
261
- objectConfig: SteedosObjectTypeConfig,
262
- graphql
263
- ) {
264
- let steedosSchema = getSteedosSchema();
265
- let objectName = objectConfig.name;
266
- let obj = steedosSchema.getObject(objectName);
267
-
268
- const relationsInfo = await obj.getRelationsInfo();
269
- let detailsInfo = relationsInfo.details || [];
270
- let lookupsInfo = relationsInfo.lookup_details || [];
271
-
272
- let relatedInfos = detailsInfo.concat(lookupsInfo);
273
- for (const info of relatedInfos) {
274
- if (!info.startsWith("__")) {
275
- let infos = info.split(".");
276
- let detailObjectApiName = infos[0];
277
- let detailFieldName = infos[1];
278
- let relatedFieldName = correctName(
279
- `${RELATED_PREFIX}_${detailObjectApiName}_${detailFieldName}`
280
- );
281
- let relatedType = _getRelatedType(relatedFieldName, detailObjectApiName);
282
- if (graphql.type.indexOf(relatedType) > -1) {
283
- // 防止重复定义field
284
- continue;
285
- }
286
- graphql.type =
287
- graphql.type.substring(0, graphql.type.length - 1) + relatedType + "}";
288
- graphql.resolvers[objectName][relatedFieldName] = getRelatedResolver(
289
- objectName,
290
- detailObjectApiName,
291
- detailFieldName,
292
- ""
293
- );
294
- }
295
- }
296
- }
297
-
298
- export function correctName(name: string) {
299
- return name.replace(/\./g, "_").replace(/\$/g, "_");
300
- }
301
-
302
- export function _getRelatedType(relatedFieldName, relatedObjName) {
303
- return `${relatedFieldName}(fields: [String], filters: JSON, top: Int, skip: Int, sort: String): [${relatedObjName}] `;
304
- }
305
-
306
- export function getGraphqlActions(objectConfig: SteedosObjectTypeConfig) {
307
- let actions = {};
308
- let objName = objectConfig.name;
309
-
310
- actions[`${GRAPHQL_ACTION_PREFIX}${EXPAND_SUFFIX}_multiple`] = {
311
- handler: async function (ctx) {
312
- let { ids, objectName } = ctx.params;
313
- if (_.isEmpty(ids)) {
314
- return null;
315
- }
316
- let filters = [["_id", "in", ids]];
317
- const selector: any = { filters: filters };
318
- let steedosSchema = getSteedosSchema();
319
- let obj = steedosSchema.getObject(objectName);
320
-
321
- const { resolveInfo } = ctx.meta;
322
- const fieldNames = getQueryFields(resolveInfo);
323
- if (!_.isEmpty(fieldNames)) {
324
- selector.fields = fieldNames;
325
- }
326
-
327
- return obj.directFind(selector);
328
- },
329
- };
330
- actions[`${GRAPHQL_ACTION_PREFIX}${EXPAND_SUFFIX}`] = {
331
- handler: async function (ctx) {
332
- let { id, objectName } = ctx.params;
333
- if (!id) {
334
- return;
335
- }
336
- let steedosSchema = getSteedosSchema();
337
- let obj = steedosSchema.getObject(objectName);
338
-
339
- const selector: any = { filters: [["_id", "=", id]] };
340
- const { resolveInfo } = ctx.meta;
341
- const fieldNames = getQueryFields(resolveInfo);
342
- if (!_.isEmpty(fieldNames)) {
343
- selector.fields = fieldNames;
344
- }
345
-
346
- return (await obj.directFind(selector))[0];
347
- },
348
- };
349
-
350
- if (
351
- [
352
- "cms_files",
353
- "tasks",
354
- "notes",
355
- "events",
356
- "audit_records",
357
- "instances",
358
- "approvals",
359
- ].includes(objName)
360
- ) {
361
- actions[`${GRAPHQL_ACTION_PREFIX}${RELATED_PREFIX}_enabled`] = {
362
- handler: async function (ctx) {
363
- let params = ctx.params;
364
- let { _parentId, _related_params } = params;
365
- let { objectName, parentObjectName, foreignKey } = _related_params;
366
- let userSession = ctx.meta.user;
367
- let steedosSchema = getSteedosSchema();
368
- let object = steedosSchema.getObject(objectName);
369
- let filters = [];
370
- filters = [
371
- [`${foreignKey}.o`, "=", parentObjectName],
372
- [`${foreignKey}.ids`, "=", _parentId],
373
- ];
374
- if (params.filters) {
375
- filters.push(params.filters);
376
- }
377
- params.filters = filters;
378
- return await object.find(params, userSession);
379
- },
380
- };
381
- }
382
-
383
- actions[`${GRAPHQL_ACTION_PREFIX}${RELATED_PREFIX}`] = {
384
- handler: async function (ctx) {
385
- let params = ctx.params;
386
- let { _parentId, _related_params } = params;
387
- let {
388
- objectName,
389
- parentObjectName,
390
- fieldName,
391
- referenceToParentFieldName,
392
- } = _related_params;
393
- let userSession = ctx.meta.user;
394
- let steedosSchema = getSteedosSchema();
395
- let object = steedosSchema.getObject(objectName);
396
- let parentObj = steedosSchema.getObject(parentObjectName);
397
- let parent = await parentObj.findOne(_parentId);
398
- let filters = [];
399
- let _idValue = parent._id;
400
- if (referenceToParentFieldName) {
401
- _idValue = parent[referenceToParentFieldName];
402
- }
403
- filters = [[fieldName, "=", _idValue]];
404
- if (params.filters) {
405
- filters.push(params.filters);
406
- }
407
- params.filters = filters;
408
-
409
- const { resolveInfo } = ctx.meta;
410
- const fieldNames = getQueryFields(resolveInfo);
411
- if (!_.isEmpty(fieldNames)) {
412
- params.fields = fieldNames;
413
- }
414
- return await object.find(params, userSession);
415
- },
416
- };
417
-
418
- actions[`${GRAPHQL_ACTION_PREFIX}${DISPLAY_PREFIX}`] = {
419
- handler: async function (ctx) {
420
- let params = ctx.params;
421
- let { _id, objectName, fields } = params;
422
- let userSession = ctx.meta.user;
423
- let steedosSchema = getSteedosSchema();
424
- let obj = steedosSchema.getObject(objectName);
425
- let selector: any = { filters: [["_id", "=", _id]] };
426
- if (fields && fields.length > 0) {
427
- selector.fields = fields;
428
- } else {
429
- const { resolveInfo } = ctx.meta;
430
- const fieldNames = getQueryFields(resolveInfo);
431
- if (!_.isEmpty(fieldNames)) {
432
- selector.fields = fieldNames;
433
- }
434
- }
435
- let doc = (await obj.directFind(selector))[0];
436
- let result = await translateToDisplay(objectName, doc, userSession);
437
- return result;
438
- },
439
- };
440
-
441
- return actions;
442
- }
443
-
444
- function _getRelatedResolverForEnableProperty(
445
- parentObjectName,
446
- relatedObjName,
447
- foreignKey
448
- ) {
449
- return {
450
- action: `${getObjectServiceName(
451
- relatedObjName
452
- )}.${GRAPHQL_ACTION_PREFIX}${RELATED_PREFIX}_enabled`,
453
- rootParams: {
454
- _id: "_parentId",
455
- },
456
- params: {
457
- _related_params: {
458
- objectName: relatedObjName,
459
- parentObjectName: parentObjectName,
460
- foreignKey: foreignKey,
461
- },
462
- },
463
- };
464
- }
465
-
466
- export function getRelatedResolver(
467
- objectApiName,
468
- detailObjectApiName,
469
- detailFieldName,
470
- detailFieldReferenceToFieldName
471
- ) {
472
- return {
473
- action: `${getObjectServiceName(
474
- detailObjectApiName
475
- )}.${GRAPHQL_ACTION_PREFIX}${RELATED_PREFIX}`,
476
- rootParams: {
477
- _id: "_parentId",
478
- },
479
- params: {
480
- _related_params: {
481
- objectName: detailObjectApiName,
482
- parentObjectName: objectApiName,
483
- fieldName: detailFieldName,
484
- referenceToParentFieldName: detailFieldReferenceToFieldName,
485
- },
486
- },
487
- };
488
- }
489
-
490
- function getTranslatedFieldConfig(translatedObject: any, name: string) {
491
- return translatedObject.fields[name.replace(/__label$/, "")];
492
- }
493
-
494
- async function translateToDisplay(objectName, doc, userSession: any) {
495
- const lng = getUserLocale(userSession);
496
- let steedosSchema = getSteedosSchema();
497
- let object = steedosSchema.getObject(objectName);
498
- let objConfig = await object.toConfig();
499
- let fields = objConfig.fields;
500
- // let _object = clone(objConfig);
501
- translationObject(lng, objConfig.name, objConfig);
502
- let displayObj = { _id: doc._id };
503
- let utcOffset = userSession.utcOffset;
504
- for (const name in fields) {
505
- if (Object.prototype.hasOwnProperty.call(fields, name)) {
506
- const field = fields[name];
507
- if (_.has(doc, name)) {
508
- const fType = field.type;
509
- if (fType == "text") {
510
- displayObj[name] = doc[name] || "";
511
- } else if (fType == "textarea") {
512
- displayObj[name] = doc[name] || "";
513
- } else if (fType == "html_text") {
514
- displayObj[name] = doc[name] || "";
515
- } else if (fType == "html") {
516
- displayObj[name] = doc[name] || "";
517
- } else if (fType == "select") {
518
- let label = "";
519
- let map = {};
520
- let value = doc[name];
521
- let translatedField = getTranslatedFieldConfig(objConfig, name);
522
- let translatedFieldOptions =
523
- translatedField && translatedField.options;
524
- _.forEach(translatedFieldOptions, function (o) {
525
- map[o.value] = o.label;
526
- });
527
- if (field.multiple) {
528
- let labels = [];
529
- _.forEach(value, function (v) {
530
- labels.push(map[v]);
531
- });
532
- label = labels.join(",");
533
- } else {
534
- label = map[value];
535
- }
536
- displayObj[name] = label;
537
- } else if (fType == "boolean") {
538
- if (doc[name]) {
539
- displayObj[name] = "√";
540
- } else {
541
- displayObj[name] = "";
542
- }
543
- } else if (fType == "date") {
544
- displayObj[name] = moment(doc[name])
545
- .utcOffset(utcOffset)
546
- .format("YYYY-MM-DD");
547
- } else if (fType == "datetime") {
548
- displayObj[name] = moment(doc[name])
549
- .utcOffset(utcOffset)
550
- .format("YYYY-MM-DD H:mm");
551
- } else if (fType == "number") {
552
- displayObj[name] = doc[name] || "";
553
- } else if (fType == "currency") {
554
- displayObj[name] = doc[name] || "";
555
- } else if (fType == "percent") {
556
- displayObj[name] = `${doc[name] * 100}%`;
557
- } else if (fType == "password") {
558
- displayObj[name] = "";
559
- if (_.isString(doc[name])) {
560
- for (let i = 0; i < doc[name].length; i++) {
561
- displayObj[name] += "*";
562
- }
563
- }
564
- } else if (fType == "lookup" && _.isString(field.reference_to)) {
565
- let lookupLabel = "";
566
- let refTo = field.reference_to;
567
- let refValue = doc[name];
568
- if (!refValue) {
569
- continue;
570
- }
571
- let refObj = steedosSchema.getObject(refTo);
572
- let nameFieldKey = await refObj.getNameFieldKey();
573
- if (field.multiple) {
574
- let refRecords = await refObj.directFind({
575
- filters: [`_id`, "in", refValue],
576
- fields: [nameFieldKey],
577
- });
578
- lookupLabel = _.pluck(refRecords, nameFieldKey).join(",");
579
- } else {
580
- let refRecord = (
581
- await refObj.directFind({
582
- filters: [`_id`, "=", refValue],
583
- fields: [nameFieldKey],
584
- })
585
- )[0];
586
- if (refRecord) {
587
- lookupLabel = refRecord[nameFieldKey];
588
- }
589
- }
590
- displayObj[name] = lookupLabel;
591
- } else if (fType == "master_detail" && _.isString(field.reference_to)) {
592
- let masterDetailLabel = "";
593
- let refTo = field.reference_to;
594
- let refValue = doc[name];
595
- if (!refValue) {
596
- continue;
597
- }
598
- let refObj = steedosSchema.getObject(refTo);
599
- let nameFieldKey = await refObj.getNameFieldKey();
600
- if (field.multiple) {
601
- let refRecords = await refObj.directFind({
602
- filters: [`_id`, "in", refValue],
603
- fields: [nameFieldKey],
604
- });
605
- masterDetailLabel = _.pluck(refRecords, nameFieldKey).join(",");
606
- } else {
607
- let refRecord = (
608
- await refObj.directFind({
609
- filters: [`_id`, "=", refValue],
610
- fields: [nameFieldKey],
611
- })
612
- )[0];
613
- if (refRecord) {
614
- masterDetailLabel = refRecord[nameFieldKey];
615
- }
616
- }
617
- displayObj[name] = masterDetailLabel;
618
- } else if (fType == "autonumber") {
619
- displayObj[name] = doc[name] || "";
620
- } else if (fType == "url") {
621
- displayObj[name] = doc[name] || "";
622
- } else if (fType == "email") {
623
- displayObj[name] = doc[name] || "";
624
- } else if (fType == "formula") {
625
- displayObj[name] = doc[name] || "";
626
- } else if (fType == "summary") {
627
- displayObj[name] = doc[name] || "";
628
- } else if (fType == "image") {
629
- displayObj[name] = doc[name] || "";
630
- } else {
631
- console.error(
632
- `Graphql Display: need to handle new field type ${field.type} for ${objectName}.`
633
- );
634
- displayObj[name] = doc[name] || "";
635
- }
636
- } else {
637
- displayObj[name] = ""; // 如果值为空,均返回空字符串
638
- }
639
- }
640
- }
641
- return displayObj;
642
- }
643
-
644
- function _getDisplayType(typeName, fields) {
645
- let type = `type ${typeName} { _id: String `;
646
- if (_.has(fields, "_id")) {
647
- type = `type ${typeName} { `;
648
- }
649
- _.each(fields, (field, name) => {
650
- if (name.indexOf(".") > -1) {
651
- return;
652
- }
653
- type += `${name}: JSON `;
654
- });
655
- type += "}";
656
- return type;
657
- }
658
-
659
- // 获取object元数据
660
- export function getLocalService(objectApiName: string) {
661
- let steedosSchema = getSteedosSchema();
662
- return steedosSchema.broker.getLocalService(getObjectServiceName(objectApiName));
663
- }
664
-
665
- export * from './getQueryFields';
666
- export * from './consts';