@nocobase/test 1.2.13-alpha → 1.3.0-alpha.20240710084543

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 (119) hide show
  1. package/package.json +3 -3
  2. package/es/client/commonSettingsChecker/blockTitle.d.ts +0 -9
  3. package/es/client/commonSettingsChecker/fieldTitle.d.ts +0 -9
  4. package/es/client/commonSettingsChecker/index.d.ts +0 -10
  5. package/es/client/formItemChecker/collectionField.d.ts +0 -13
  6. package/es/client/formItemChecker/common.d.ts +0 -21
  7. package/es/client/formItemChecker/icon.d.ts +0 -11
  8. package/es/client/formItemChecker/index.d.ts +0 -31
  9. package/es/client/formItemChecker/input.d.ts +0 -11
  10. package/es/client/formItemChecker/number.d.ts +0 -11
  11. package/es/client/formItemChecker/radio.d.ts +0 -11
  12. package/es/client/formItemChecker/textarea.d.ts +0 -11
  13. package/es/client/index.d.ts +0 -24
  14. package/es/client/index.mjs +0 -2002
  15. package/es/client/renderAppOptions.d.ts +0 -11
  16. package/es/client/renderHookWithApp.d.ts +0 -19
  17. package/es/client/renderSettings.d.ts +0 -15
  18. package/es/client/renderSingleSettings.d.ts +0 -15
  19. package/es/client/settingsChecker/delete.d.ts +0 -16
  20. package/es/client/settingsChecker/index.d.ts +0 -26
  21. package/es/client/settingsChecker/modal.d.ts +0 -16
  22. package/es/client/settingsChecker/select.d.ts +0 -18
  23. package/es/client/settingsChecker/switch.d.ts +0 -16
  24. package/es/client/utils/checkModal.d.ts +0 -21
  25. package/es/client/utils/checkSchema.d.ts +0 -9
  26. package/es/client/utils/index.d.ts +0 -11
  27. package/es/client/utils/utils.d.ts +0 -10
  28. package/es/e2e/defineConfig.d.ts +0 -10
  29. package/es/e2e/e2eUtils.d.ts +0 -341
  30. package/es/e2e/index.d.ts +0 -11
  31. package/es/e2e/index.mjs +0 -21064
  32. package/es/e2e/templatesOfCollection.d.ts +0 -49
  33. package/es/e2e/templatesOfPage.d.ts +0 -585
  34. package/es/index.d.ts +0 -9
  35. package/es/index.mjs +0 -226
  36. package/es/scripts/test-db-creator.d.ts +0 -9
  37. package/es/scripts/test-db-distributor.d.ts +0 -9
  38. package/es/server/index.d.ts +0 -26
  39. package/es/server/mockServer.d.ts +0 -83
  40. package/es/web/index.d.ts +0 -62
  41. package/es/web/index.mjs +0 -1600
  42. package/es/web/utils.d.ts +0 -9
  43. package/lib/client/commonSettingsChecker/blockTitle.d.ts +0 -9
  44. package/lib/client/commonSettingsChecker/blockTitle.js +0 -65
  45. package/lib/client/commonSettingsChecker/fieldTitle.d.ts +0 -9
  46. package/lib/client/commonSettingsChecker/fieldTitle.js +0 -65
  47. package/lib/client/commonSettingsChecker/index.d.ts +0 -10
  48. package/lib/client/commonSettingsChecker/index.js +0 -32
  49. package/lib/client/formItemChecker/collectionField.d.ts +0 -13
  50. package/lib/client/formItemChecker/collectionField.js +0 -61
  51. package/lib/client/formItemChecker/common.d.ts +0 -21
  52. package/lib/client/formItemChecker/common.js +0 -45
  53. package/lib/client/formItemChecker/icon.d.ts +0 -11
  54. package/lib/client/formItemChecker/icon.js +0 -69
  55. package/lib/client/formItemChecker/index.d.ts +0 -31
  56. package/lib/client/formItemChecker/index.js +0 -65
  57. package/lib/client/formItemChecker/input.d.ts +0 -11
  58. package/lib/client/formItemChecker/input.js +0 -61
  59. package/lib/client/formItemChecker/number.d.ts +0 -11
  60. package/lib/client/formItemChecker/number.js +0 -61
  61. package/lib/client/formItemChecker/radio.d.ts +0 -11
  62. package/lib/client/formItemChecker/radio.js +0 -66
  63. package/lib/client/formItemChecker/textarea.d.ts +0 -11
  64. package/lib/client/formItemChecker/textarea.js +0 -61
  65. package/lib/client/index.d.ts +0 -24
  66. package/lib/client/index.js +0 -97
  67. package/lib/client/renderAppOptions.d.ts +0 -11
  68. package/lib/client/renderAppOptions.js +0 -61
  69. package/lib/client/renderHookWithApp.d.ts +0 -19
  70. package/lib/client/renderHookWithApp.js +0 -58
  71. package/lib/client/renderSettings.d.ts +0 -15
  72. package/lib/client/renderSettings.js +0 -78
  73. package/lib/client/renderSingleSettings.d.ts +0 -15
  74. package/lib/client/renderSingleSettings.js +0 -49
  75. package/lib/client/settingsChecker/delete.d.ts +0 -16
  76. package/lib/client/settingsChecker/delete.js +0 -59
  77. package/lib/client/settingsChecker/index.d.ts +0 -26
  78. package/lib/client/settingsChecker/index.js +0 -73
  79. package/lib/client/settingsChecker/modal.d.ts +0 -16
  80. package/lib/client/settingsChecker/modal.js +0 -49
  81. package/lib/client/settingsChecker/select.d.ts +0 -18
  82. package/lib/client/settingsChecker/select.js +0 -85
  83. package/lib/client/settingsChecker/switch.d.ts +0 -16
  84. package/lib/client/settingsChecker/switch.js +0 -91
  85. package/lib/client/utils/checkModal.d.ts +0 -21
  86. package/lib/client/utils/checkModal.js +0 -87
  87. package/lib/client/utils/checkSchema.d.ts +0 -9
  88. package/lib/client/utils/checkSchema.js +0 -45
  89. package/lib/client/utils/index.d.ts +0 -11
  90. package/lib/client/utils/index.js +0 -34
  91. package/lib/client/utils/utils.d.ts +0 -10
  92. package/lib/client/utils/utils.js +0 -54
  93. package/lib/e2e/defineConfig.d.ts +0 -10
  94. package/lib/e2e/defineConfig.js +0 -87
  95. package/lib/e2e/e2eUtils.d.ts +0 -341
  96. package/lib/e2e/e2eUtils.js +0 -704
  97. package/lib/e2e/index.d.ts +0 -11
  98. package/lib/e2e/index.js +0 -34
  99. package/lib/e2e/templatesOfCollection.d.ts +0 -49
  100. package/lib/e2e/templatesOfCollection.js +0 -729
  101. package/lib/e2e/templatesOfPage.d.ts +0 -585
  102. package/lib/e2e/templatesOfPage.js +0 -19796
  103. package/lib/index.d.ts +0 -9
  104. package/lib/index.js +0 -30
  105. package/lib/scripts/test-db-creator.d.ts +0 -9
  106. package/lib/scripts/test-db-creator.js +0 -185
  107. package/lib/scripts/test-db-distributor.d.ts +0 -9
  108. package/lib/scripts/test-db-distributor.js +0 -243
  109. package/lib/server/index.d.ts +0 -26
  110. package/lib/server/index.js +0 -114
  111. package/lib/server/mockServer.d.ts +0 -83
  112. package/lib/server/mockServer.js +0 -221
  113. package/lib/web/dataSource2.json +0 -139
  114. package/lib/web/dataSourceMainCollections.json +0 -819
  115. package/lib/web/dataSourceMainData.json +0 -287
  116. package/lib/web/index.d.ts +0 -62
  117. package/lib/web/index.js +0 -298
  118. package/lib/web/utils.d.ts +0 -9
  119. package/lib/web/utils.js +0 -41
@@ -1,2002 +0,0 @@
1
- import { waitFor, screen, render } from "@testing-library/react";
2
- export * from "@testing-library/react";
3
- import { observer, useForm, useFieldSchema } from "@formily/react";
4
- import MockAdapter from "axios-mock-adapter";
5
- import _, { pick, get } from "lodash";
6
- import React, { Fragment } from "react";
7
- import { Application, AntdSchemaComponentPlugin, SchemaSettingsPlugin, CollectionPlugin, LocalDataSource, SchemaSettings, SchemaComponent, DataBlockProvider } from "@nocobase/client";
8
- import { expect as expect$1 } from "vitest";
9
- import userEvent from "@testing-library/user-event";
10
- import { default as default2 } from "@testing-library/user-event";
11
- import { renderHook } from "@testing-library/react-hooks";
12
- import { renderHook as renderHook2 } from "@testing-library/react-hooks";
13
- const key = "data-source2";
14
- const displayName = "Data Source 2";
15
- const status = "loaded";
16
- const type = "postgres";
17
- const isDBInstance = true;
18
- const collections = [
19
- {
20
- name: "test",
21
- title: "test",
22
- tableName: "test",
23
- timestamps: false,
24
- autoGenId: false,
25
- filterTargetKey: "id",
26
- fields: [
27
- {
28
- name: "id",
29
- type: "integer",
30
- allowNull: false,
31
- primaryKey: false,
32
- unique: false,
33
- autoIncrement: true,
34
- possibleTypes: [
35
- "integer",
36
- "sort"
37
- ],
38
- rawType: "INTEGER",
39
- "interface": "integer",
40
- uiSchema: {
41
- type: "number",
42
- "x-component": "InputNumber",
43
- "x-component-props": {
44
- stringMode: true,
45
- step: "1"
46
- },
47
- "x-validator": "integer",
48
- title: "id"
49
- }
50
- },
51
- {
52
- name: "title",
53
- type: "string",
54
- allowNull: false,
55
- primaryKey: false,
56
- unique: false,
57
- possibleTypes: [
58
- "string",
59
- "uuid",
60
- "nanoid"
61
- ],
62
- rawType: "CHARACTER VARYING(255)",
63
- "interface": "input",
64
- uiSchema: {
65
- "x-component": "Input",
66
- "x-component-props": {
67
- style: {
68
- width: "100%"
69
- }
70
- },
71
- title: "title"
72
- }
73
- },
74
- {
75
- name: "content",
76
- type: "text",
77
- allowNull: true,
78
- primaryKey: false,
79
- unique: false,
80
- rawType: "TEXT",
81
- "interface": "textarea",
82
- uiSchema: {
83
- type: "string",
84
- "x-component": "Input.TextArea",
85
- title: "content"
86
- }
87
- }
88
- ],
89
- introspected: true
90
- },
91
- {
92
- name: "test2",
93
- title: "test2",
94
- tableName: "test2",
95
- timestamps: false,
96
- autoGenId: false,
97
- filterTargetKey: "id",
98
- fields: [
99
- {
100
- name: "id",
101
- type: "integer",
102
- allowNull: false,
103
- primaryKey: true,
104
- unique: false,
105
- autoIncrement: true,
106
- possibleTypes: [
107
- "integer",
108
- "sort"
109
- ],
110
- rawType: "INTEGER",
111
- "interface": "integer",
112
- uiSchema: {
113
- type: "number",
114
- "x-component": "InputNumber",
115
- "x-component-props": {
116
- stringMode: true,
117
- step: "1"
118
- },
119
- "x-validator": "integer",
120
- title: "id"
121
- }
122
- },
123
- {
124
- name: "title",
125
- type: "string",
126
- allowNull: true,
127
- primaryKey: false,
128
- unique: false,
129
- possibleTypes: [
130
- "string",
131
- "uuid",
132
- "nanoid"
133
- ],
134
- rawType: "CHARACTER VARYING(255)",
135
- "interface": "input",
136
- uiSchema: {
137
- "x-component": "Input",
138
- "x-component-props": {
139
- style: {
140
- width: "100%"
141
- }
142
- },
143
- title: "title"
144
- }
145
- },
146
- {
147
- name: "content",
148
- type: "text",
149
- allowNull: true,
150
- primaryKey: false,
151
- unique: false,
152
- rawType: "TEXT",
153
- "interface": "textarea",
154
- uiSchema: {
155
- type: "string",
156
- "x-component": "Input.TextArea",
157
- title: "content"
158
- }
159
- }
160
- ],
161
- introspected: true
162
- }
163
- ];
164
- const dataSource2 = {
165
- key,
166
- displayName,
167
- status,
168
- type,
169
- isDBInstance,
170
- collections
171
- };
172
- const dataSourceMainCollections = [
173
- {
174
- key: "yzowed2vee0",
175
- name: "users",
176
- title: '{{t("Users")}}',
177
- inherit: false,
178
- hidden: false,
179
- description: null,
180
- fields: [
181
- {
182
- key: "6m3kn2pytkc",
183
- name: "id",
184
- type: "bigInt",
185
- "interface": "id",
186
- description: null,
187
- collectionName: "users",
188
- parentKey: null,
189
- reverseKey: null,
190
- autoIncrement: true,
191
- primaryKey: true,
192
- allowNull: false,
193
- uiSchema: {
194
- type: "number",
195
- title: '{{t("ID")}}',
196
- "x-component": "InputNumber",
197
- "x-read-pretty": true
198
- }
199
- },
200
- {
201
- key: "8douy9r69x5",
202
- name: "nickname",
203
- type: "string",
204
- "interface": "input",
205
- description: null,
206
- collectionName: "users",
207
- parentKey: null,
208
- reverseKey: null,
209
- uiSchema: {
210
- type: "string",
211
- title: '{{t("Nickname")}}',
212
- "x-component": "Input"
213
- }
214
- },
215
- {
216
- key: "vp191ptc0d7",
217
- name: "username",
218
- type: "string",
219
- "interface": "input",
220
- description: null,
221
- collectionName: "users",
222
- parentKey: null,
223
- reverseKey: null,
224
- unique: true,
225
- uiSchema: {
226
- type: "string",
227
- title: '{{t("Username")}}',
228
- "x-component": "Input",
229
- "x-validator": {
230
- username: true
231
- },
232
- required: true
233
- }
234
- },
235
- {
236
- key: "47o82qhkvdm",
237
- name: "email",
238
- type: "string",
239
- "interface": "email",
240
- description: null,
241
- collectionName: "users",
242
- parentKey: null,
243
- reverseKey: null,
244
- unique: true,
245
- uiSchema: {
246
- type: "string",
247
- title: '{{t("Email")}}',
248
- "x-component": "Input",
249
- "x-validator": "email",
250
- required: true
251
- }
252
- },
253
- {
254
- key: "q5i9ynhq325",
255
- name: "phone",
256
- type: "string",
257
- "interface": "phone",
258
- description: null,
259
- collectionName: "users",
260
- parentKey: null,
261
- reverseKey: null,
262
- unique: true,
263
- uiSchema: {
264
- type: "string",
265
- title: '{{t("Phone")}}',
266
- "x-component": "Input",
267
- "x-validator": "phone",
268
- required: true
269
- }
270
- },
271
- {
272
- key: "cc4aslvh9dv",
273
- name: "password",
274
- type: "password",
275
- "interface": "password",
276
- description: null,
277
- collectionName: "users",
278
- parentKey: null,
279
- reverseKey: null,
280
- hidden: true,
281
- uiSchema: {
282
- type: "string",
283
- title: '{{t("Password")}}',
284
- "x-component": "Password"
285
- }
286
- },
287
- {
288
- key: "e87ndyttazh",
289
- name: "appLang",
290
- type: "string",
291
- "interface": null,
292
- description: null,
293
- collectionName: "users",
294
- parentKey: null,
295
- reverseKey: null
296
- },
297
- {
298
- key: "snfbet0pe49",
299
- name: "resetToken",
300
- type: "string",
301
- "interface": null,
302
- description: null,
303
- collectionName: "users",
304
- parentKey: null,
305
- reverseKey: null,
306
- unique: true,
307
- hidden: true
308
- },
309
- {
310
- key: "j78yhz6wifd",
311
- name: "systemSettings",
312
- type: "json",
313
- "interface": null,
314
- description: null,
315
- collectionName: "users",
316
- parentKey: null,
317
- reverseKey: null,
318
- defaultValue: {}
319
- },
320
- {
321
- key: "lkxqml8gchd",
322
- name: "sort",
323
- type: "sort",
324
- "interface": null,
325
- description: null,
326
- collectionName: "users",
327
- parentKey: null,
328
- reverseKey: null,
329
- hidden: true
330
- },
331
- {
332
- key: "lt3pcrjngzc",
333
- name: "createdById",
334
- type: "context",
335
- "interface": null,
336
- description: null,
337
- collectionName: "users",
338
- parentKey: null,
339
- reverseKey: null,
340
- dataType: "bigInt",
341
- dataIndex: "state.currentUser.id",
342
- createOnly: true,
343
- visible: true,
344
- index: true
345
- },
346
- {
347
- key: "lcfaf27uxyz",
348
- name: "createdBy",
349
- type: "belongsTo",
350
- "interface": null,
351
- description: null,
352
- collectionName: "users",
353
- parentKey: null,
354
- reverseKey: null,
355
- target: "users",
356
- foreignKey: "createdById",
357
- targetKey: "id"
358
- },
359
- {
360
- key: "y6lwdb31r5t",
361
- name: "updatedById",
362
- type: "context",
363
- "interface": null,
364
- description: null,
365
- collectionName: "users",
366
- parentKey: null,
367
- reverseKey: null,
368
- dataType: "bigInt",
369
- dataIndex: "state.currentUser.id",
370
- visible: true,
371
- index: true
372
- },
373
- {
374
- key: "exhbmthsin0",
375
- name: "updatedBy",
376
- type: "belongsTo",
377
- "interface": null,
378
- description: null,
379
- collectionName: "users",
380
- parentKey: null,
381
- reverseKey: null,
382
- target: "users",
383
- foreignKey: "updatedById",
384
- targetKey: "id"
385
- },
386
- {
387
- key: "s921nnlzdwi",
388
- name: "roles",
389
- type: "belongsToMany",
390
- "interface": "m2m",
391
- description: null,
392
- collectionName: "users",
393
- parentKey: null,
394
- reverseKey: null,
395
- target: "roles",
396
- foreignKey: "userId",
397
- otherKey: "roleName",
398
- onDelete: "CASCADE",
399
- sourceKey: "id",
400
- targetKey: "name",
401
- through: "rolesUsers",
402
- uiSchema: {
403
- type: "array",
404
- title: '{{t("Roles")}}',
405
- "x-component": "AssociationField",
406
- "x-component-props": {
407
- multiple: true,
408
- fieldNames: {
409
- label: "title",
410
- value: "name"
411
- }
412
- }
413
- }
414
- },
415
- {
416
- key: "qe7b1rsct5h",
417
- name: "jobs",
418
- type: "belongsToMany",
419
- "interface": null,
420
- description: null,
421
- collectionName: "users",
422
- parentKey: null,
423
- reverseKey: null,
424
- through: "users_jobs",
425
- foreignKey: "userId",
426
- sourceKey: "id",
427
- otherKey: "jobId",
428
- targetKey: "id",
429
- target: "jobs"
430
- },
431
- {
432
- key: "vt0n1l1ruyz",
433
- name: "usersJobs",
434
- type: "hasMany",
435
- "interface": null,
436
- description: null,
437
- collectionName: "users",
438
- parentKey: null,
439
- reverseKey: null,
440
- target: "users_jobs",
441
- foreignKey: "userId",
442
- sourceKey: "id",
443
- targetKey: "id"
444
- },
445
- {
446
- key: "ekol7p60nry",
447
- name: "sortName",
448
- type: "sort",
449
- "interface": "sort",
450
- description: null,
451
- collectionName: "users",
452
- parentKey: null,
453
- reverseKey: null,
454
- uiSchema: {
455
- type: "number",
456
- "x-component": "InputNumber",
457
- "x-component-props": {
458
- stringMode: true,
459
- step: "1"
460
- },
461
- "x-validator": "integer",
462
- title: "sort"
463
- }
464
- }
465
- ],
466
- category: [],
467
- origin: "@nocobase/plugin-users",
468
- dumpRules: {
469
- group: "user"
470
- },
471
- sortable: "sort",
472
- model: "UserModel",
473
- createdBy: true,
474
- updatedBy: true,
475
- logging: true,
476
- shared: true,
477
- from: "db2cm",
478
- filterTargetKey: "id"
479
- },
480
- {
481
- key: "rmx938ttbue",
482
- name: "roles",
483
- title: '{{t("Roles")}}',
484
- inherit: false,
485
- hidden: false,
486
- description: null,
487
- fields: [
488
- {
489
- key: "l6thu4n5u6x",
490
- name: "name",
491
- type: "uid",
492
- "interface": "input",
493
- description: null,
494
- collectionName: "roles",
495
- parentKey: null,
496
- reverseKey: null,
497
- prefix: "r_",
498
- primaryKey: true,
499
- uiSchema: {
500
- type: "string",
501
- title: '{{t("Role UID")}}',
502
- "x-component": "Input"
503
- }
504
- },
505
- {
506
- key: "yhfq9yv8z0p",
507
- name: "title",
508
- type: "string",
509
- "interface": "input",
510
- description: null,
511
- collectionName: "roles",
512
- parentKey: null,
513
- reverseKey: null,
514
- unique: true,
515
- uiSchema: {
516
- type: "string",
517
- title: '{{t("Role name")}}',
518
- "x-component": "Input"
519
- },
520
- translation: true
521
- },
522
- {
523
- key: "vnhjlmopfuz",
524
- name: "description",
525
- type: "string",
526
- "interface": null,
527
- description: null,
528
- collectionName: "roles",
529
- parentKey: null,
530
- reverseKey: null
531
- },
532
- {
533
- key: "s4iqsehgxo6",
534
- name: "strategy",
535
- type: "json",
536
- "interface": null,
537
- description: null,
538
- collectionName: "roles",
539
- parentKey: null,
540
- reverseKey: null
541
- },
542
- {
543
- key: "75e4wnv873m",
544
- name: "default",
545
- type: "boolean",
546
- "interface": null,
547
- description: null,
548
- collectionName: "roles",
549
- parentKey: null,
550
- reverseKey: null,
551
- defaultValue: false
552
- },
553
- {
554
- key: "nofdv0gte68",
555
- name: "hidden",
556
- type: "boolean",
557
- "interface": null,
558
- description: null,
559
- collectionName: "roles",
560
- parentKey: null,
561
- reverseKey: null,
562
- defaultValue: false
563
- },
564
- {
565
- key: "bogzo1uvk84",
566
- name: "allowConfigure",
567
- type: "boolean",
568
- "interface": null,
569
- description: null,
570
- collectionName: "roles",
571
- parentKey: null,
572
- reverseKey: null
573
- },
574
- {
575
- key: "k3fvj8ddpp9",
576
- name: "allowNewMenu",
577
- type: "boolean",
578
- "interface": null,
579
- description: null,
580
- collectionName: "roles",
581
- parentKey: null,
582
- reverseKey: null
583
- },
584
- {
585
- key: "v1ditqsv1uk",
586
- name: "menuUiSchemas",
587
- type: "belongsToMany",
588
- "interface": null,
589
- description: null,
590
- collectionName: "roles",
591
- parentKey: null,
592
- reverseKey: null,
593
- target: "uiSchemas",
594
- targetKey: "x-uid",
595
- foreignKey: "roleName",
596
- sourceKey: "name",
597
- otherKey: "uiSchemaXUid",
598
- through: "rolesUischemas"
599
- },
600
- {
601
- key: "ccqhlcvgnz8",
602
- name: "resources",
603
- type: "hasMany",
604
- "interface": null,
605
- description: null,
606
- collectionName: "roles",
607
- parentKey: null,
608
- reverseKey: null,
609
- target: "dataSourcesRolesResources",
610
- sourceKey: "name",
611
- foreignKey: "roleName",
612
- targetKey: "id"
613
- },
614
- {
615
- key: "s4fshtx7oxv",
616
- name: "snippets",
617
- type: "set",
618
- "interface": null,
619
- description: null,
620
- collectionName: "roles",
621
- parentKey: null,
622
- reverseKey: null,
623
- defaultValue: [
624
- "!ui.*",
625
- "!pm",
626
- "!pm.*"
627
- ]
628
- },
629
- {
630
- key: "oyzvbhc60mp",
631
- name: "users",
632
- type: "belongsToMany",
633
- "interface": null,
634
- description: null,
635
- collectionName: "roles",
636
- parentKey: null,
637
- reverseKey: null,
638
- target: "users",
639
- foreignKey: "roleName",
640
- otherKey: "userId",
641
- onDelete: "CASCADE",
642
- sourceKey: "name",
643
- targetKey: "id",
644
- through: "rolesUsers"
645
- },
646
- {
647
- key: "89yklh7lm3p",
648
- name: "sort",
649
- type: "sort",
650
- "interface": null,
651
- description: null,
652
- collectionName: "roles",
653
- parentKey: null,
654
- reverseKey: null,
655
- hidden: true
656
- },
657
- {
658
- key: "iz5s22dinui",
659
- name: "color",
660
- type: "string",
661
- "interface": "color",
662
- description: null,
663
- collectionName: "roles",
664
- parentKey: null,
665
- reverseKey: null,
666
- defaultValue: "#1677FF",
667
- uiSchema: {
668
- type: "string",
669
- "x-component": "ColorPicker",
670
- "default": "#1677FF",
671
- title: "color"
672
- }
673
- },
674
- {
675
- key: "o5nyb6isl62",
676
- name: "long-text",
677
- type: "text",
678
- "interface": "textarea",
679
- description: null,
680
- collectionName: "roles",
681
- parentKey: null,
682
- reverseKey: null,
683
- uiSchema: {
684
- type: "string",
685
- "x-component": "Input.TextArea",
686
- title: "Long text"
687
- }
688
- }
689
- ],
690
- category: [],
691
- origin: "@nocobase/plugin-acl",
692
- dumpRules: "required",
693
- autoGenId: false,
694
- model: "RoleModel",
695
- filterTargetKey: "name",
696
- sortable: true,
697
- from: "db2cm"
698
- },
699
- {
700
- key: "24gntrrr5a6",
701
- name: "tree",
702
- title: "TreeCollection",
703
- inherit: false,
704
- hidden: false,
705
- description: null,
706
- fields: [
707
- {
708
- key: "pcea3h3ivkg",
709
- name: "parentId",
710
- type: "bigInt",
711
- "interface": "integer",
712
- description: null,
713
- collectionName: "t_4uamm7v51dj",
714
- parentKey: null,
715
- reverseKey: null,
716
- isForeignKey: true,
717
- uiSchema: {
718
- type: "number",
719
- title: '{{t("Parent ID")}}',
720
- "x-component": "InputNumber",
721
- "x-read-pretty": true
722
- },
723
- target: "t_4uamm7v51dj"
724
- },
725
- {
726
- key: "185j2rf7o68",
727
- name: "parent",
728
- type: "belongsTo",
729
- "interface": "m2o",
730
- description: null,
731
- collectionName: "t_4uamm7v51dj",
732
- parentKey: null,
733
- reverseKey: null,
734
- foreignKey: "parentId",
735
- treeParent: true,
736
- onDelete: "CASCADE",
737
- uiSchema: {
738
- title: '{{t("Parent")}}',
739
- "x-component": "AssociationField",
740
- "x-component-props": {
741
- multiple: false,
742
- fieldNames: {
743
- label: "id",
744
- value: "id"
745
- }
746
- }
747
- },
748
- target: "t_4uamm7v51dj",
749
- targetKey: "id"
750
- },
751
- {
752
- key: "gjvso3p9sjn",
753
- name: "children",
754
- type: "hasMany",
755
- "interface": "o2m",
756
- description: null,
757
- collectionName: "t_4uamm7v51dj",
758
- parentKey: null,
759
- reverseKey: null,
760
- foreignKey: "parentId",
761
- treeChildren: true,
762
- onDelete: "CASCADE",
763
- uiSchema: {
764
- title: '{{t("Children")}}',
765
- "x-component": "AssociationField",
766
- "x-component-props": {
767
- multiple: true,
768
- fieldNames: {
769
- label: "id",
770
- value: "id"
771
- }
772
- }
773
- },
774
- target: "t_4uamm7v51dj",
775
- targetKey: "id",
776
- sourceKey: "id"
777
- },
778
- {
779
- key: "j50f3am3c88",
780
- name: "id",
781
- type: "bigInt",
782
- "interface": "integer",
783
- description: null,
784
- collectionName: "t_4uamm7v51dj",
785
- parentKey: null,
786
- reverseKey: null,
787
- autoIncrement: true,
788
- primaryKey: true,
789
- allowNull: false,
790
- uiSchema: {
791
- type: "number",
792
- title: '{{t("ID")}}',
793
- "x-component": "InputNumber",
794
- "x-read-pretty": true
795
- },
796
- target: "t_4uamm7v51dj"
797
- },
798
- {
799
- key: "9szmn2ecqgs",
800
- name: "f_y99u3pyj0bt",
801
- type: "string",
802
- "interface": "input",
803
- description: null,
804
- collectionName: "t_4uamm7v51dj",
805
- parentKey: null,
806
- reverseKey: null,
807
- uiSchema: {
808
- type: "string",
809
- "x-component": "Input",
810
- title: "Single line text"
811
- }
812
- }
813
- ],
814
- category: [],
815
- logging: true,
816
- autoGenId: true,
817
- createdAt: false,
818
- createdBy: false,
819
- updatedAt: false,
820
- updatedBy: false,
821
- template: "tree",
822
- view: false,
823
- tree: "adjacencyList",
824
- filterTargetKey: "id"
825
- },
826
- {
827
- key: "16ocj2rsg3t",
828
- name: "interfaces",
829
- title: "Interfaces",
830
- inherit: false,
831
- hidden: false,
832
- description: null,
833
- fields: [
834
- {
835
- key: "k2v39l19inp",
836
- name: "id",
837
- type: "bigInt",
838
- "interface": "integer",
839
- description: null,
840
- collectionName: "interfaces",
841
- parentKey: null,
842
- reverseKey: null,
843
- autoIncrement: true,
844
- primaryKey: true,
845
- allowNull: false,
846
- uiSchema: {
847
- type: "number",
848
- title: '{{t("ID")}}',
849
- "x-component": "InputNumber",
850
- "x-read-pretty": true
851
- }
852
- },
853
- {
854
- key: "gfnqdj8sd01",
855
- name: "createdAt",
856
- type: "date",
857
- "interface": "createdAt",
858
- description: null,
859
- collectionName: "interfaces",
860
- parentKey: null,
861
- reverseKey: null,
862
- field: "createdAt",
863
- uiSchema: {
864
- type: "datetime",
865
- title: '{{t("Created at")}}',
866
- "x-component": "DatePicker",
867
- "x-component-props": {},
868
- "x-read-pretty": true
869
- }
870
- },
871
- {
872
- key: "3ddqrb1lle5",
873
- name: "createdBy",
874
- type: "belongsTo",
875
- "interface": "createdBy",
876
- description: null,
877
- collectionName: "interfaces",
878
- parentKey: null,
879
- reverseKey: null,
880
- target: "users",
881
- foreignKey: "createdById",
882
- uiSchema: {
883
- type: "object",
884
- title: '{{t("Created by")}}',
885
- "x-component": "AssociationField",
886
- "x-component-props": {
887
- fieldNames: {
888
- value: "id",
889
- label: "nickname"
890
- }
891
- },
892
- "x-read-pretty": true
893
- },
894
- targetKey: "id"
895
- },
896
- {
897
- key: "9nc7gqqw0ht",
898
- name: "updatedAt",
899
- type: "date",
900
- "interface": "updatedAt",
901
- description: null,
902
- collectionName: "interfaces",
903
- parentKey: null,
904
- reverseKey: null,
905
- field: "updatedAt",
906
- uiSchema: {
907
- type: "string",
908
- title: '{{t("Last updated at")}}',
909
- "x-component": "DatePicker",
910
- "x-component-props": {},
911
- "x-read-pretty": true
912
- }
913
- },
914
- {
915
- key: "06wr4f2qi4w",
916
- name: "updatedBy",
917
- type: "belongsTo",
918
- "interface": "updatedBy",
919
- description: null,
920
- collectionName: "interfaces",
921
- parentKey: null,
922
- reverseKey: null,
923
- target: "users",
924
- foreignKey: "updatedById",
925
- uiSchema: {
926
- type: "object",
927
- title: '{{t("Last updated by")}}',
928
- "x-component": "AssociationField",
929
- "x-component-props": {
930
- fieldNames: {
931
- value: "id",
932
- label: "nickname"
933
- }
934
- },
935
- "x-read-pretty": true
936
- },
937
- targetKey: "id"
938
- },
939
- {
940
- key: "g5beggm3aln",
941
- name: "nano-iD",
942
- type: "nanoid",
943
- "interface": "nanoid",
944
- description: null,
945
- collectionName: "interfaces",
946
- parentKey: null,
947
- reverseKey: null,
948
- customAlphabet: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
949
- size: 21,
950
- autoFill: true,
951
- uiSchema: {
952
- type: "string",
953
- "x-component": "NanoIDInput",
954
- title: "Nano ID"
955
- }
956
- },
957
- {
958
- key: "wchbz23orvg",
959
- name: "attachment",
960
- type: "belongsToMany",
961
- "interface": "attachment",
962
- description: null,
963
- collectionName: "interfaces",
964
- parentKey: null,
965
- reverseKey: null,
966
- uiSchema: {
967
- "x-component-props": {
968
- accept: "image/*",
969
- multiple: true
970
- },
971
- type: "array",
972
- "x-component": "Upload.Attachment",
973
- title: "Attachment"
974
- },
975
- target: "attachments",
976
- through: "t_zj0zu7maytd",
977
- foreignKey: "f_iek1e32gsq0",
978
- otherKey: "f_dtc6w8dzyoo",
979
- targetKey: "id",
980
- sourceKey: "id"
981
- }
982
- ],
983
- category: [],
984
- logging: true,
985
- autoGenId: true,
986
- createdAt: true,
987
- createdBy: true,
988
- updatedAt: true,
989
- updatedBy: true,
990
- template: "general",
991
- view: false,
992
- filterTargetKey: "id"
993
- }
994
- ];
995
- const dataSourceMainData = {
996
- "users:list": {
997
- data: [
998
- {
999
- createdAt: "2024-04-07T06:50:37.797Z",
1000
- updatedAt: "2024-04-07T06:50:37.797Z",
1001
- appLang: null,
1002
- createdById: null,
1003
- email: "admin@nocobase.com",
1004
- f_1gx8uyn3wva: 1,
1005
- id: 1,
1006
- nickname: "Super Admin",
1007
- phone: null,
1008
- systemSettings: {},
1009
- updatedById: null,
1010
- username: "nocobase",
1011
- roles: [
1012
- {
1013
- createdAt: "2024-04-07T06:50:37.700Z",
1014
- updatedAt: "2024-04-07T06:50:37.700Z",
1015
- allowConfigure: null,
1016
- allowNewMenu: true,
1017
- "default": true,
1018
- description: null,
1019
- hidden: false,
1020
- color: "#1677FF",
1021
- name: "member",
1022
- snippets: [
1023
- "!pm",
1024
- "!pm.*",
1025
- "!ui.*"
1026
- ],
1027
- strategy: {
1028
- actions: [
1029
- "view",
1030
- "update:own",
1031
- "destroy:own",
1032
- "create"
1033
- ]
1034
- },
1035
- title: '{{t("Member")}}',
1036
- rolesUsers: {
1037
- createdAt: "2024-04-07T06:50:37.854Z",
1038
- updatedAt: "2024-04-07T06:50:37.854Z",
1039
- "default": null,
1040
- roleName: "member",
1041
- userId: 1
1042
- }
1043
- },
1044
- {
1045
- createdAt: "2024-04-07T06:50:37.622Z",
1046
- updatedAt: "2024-04-07T06:50:37.622Z",
1047
- allowConfigure: null,
1048
- allowNewMenu: null,
1049
- "default": false,
1050
- description: null,
1051
- hidden: true,
1052
- color: "#1677FF",
1053
- name: "root",
1054
- snippets: [
1055
- "pm",
1056
- "pm.*",
1057
- "ui.*"
1058
- ],
1059
- strategy: null,
1060
- title: '{{t("Root")}}',
1061
- rolesUsers: {
1062
- createdAt: "2024-04-07T06:50:38.152Z",
1063
- updatedAt: "2024-04-07T06:50:38.186Z",
1064
- "default": true,
1065
- roleName: "root",
1066
- userId: 1
1067
- }
1068
- },
1069
- {
1070
- createdAt: "2024-04-07T06:50:37.657Z",
1071
- updatedAt: "2024-04-07T06:50:37.657Z",
1072
- allowConfigure: true,
1073
- allowNewMenu: true,
1074
- "default": false,
1075
- description: null,
1076
- hidden: false,
1077
- name: "admin",
1078
- color: "#1677FF",
1079
- snippets: [
1080
- "pm",
1081
- "pm.*",
1082
- "ui.*"
1083
- ],
1084
- strategy: {
1085
- actions: [
1086
- "create",
1087
- "view",
1088
- "update",
1089
- "destroy"
1090
- ]
1091
- },
1092
- title: '{{t("Admin")}}',
1093
- rolesUsers: {
1094
- createdAt: "2024-04-07T06:50:38.152Z",
1095
- updatedAt: "2024-04-07T06:50:38.152Z",
1096
- "default": null,
1097
- roleName: "admin",
1098
- userId: 1
1099
- }
1100
- }
1101
- ]
1102
- }
1103
- ],
1104
- meta: {
1105
- count: 1,
1106
- page: 1,
1107
- pageSize: 20,
1108
- totalPage: 1,
1109
- allowedActions: {
1110
- view: [
1111
- 1
1112
- ],
1113
- update: [
1114
- 1
1115
- ],
1116
- destroy: []
1117
- }
1118
- }
1119
- },
1120
- "users:get": {
1121
- data: {
1122
- createdAt: "2024-04-07T06:50:37.797Z",
1123
- updatedAt: "2024-04-07T06:50:37.797Z",
1124
- appLang: null,
1125
- createdById: null,
1126
- email: "admin@nocobase.com",
1127
- f_1gx8uyn3wva: 1,
1128
- id: 1,
1129
- nickname: "Super Admin",
1130
- phone: null,
1131
- systemSettings: {},
1132
- updatedById: null,
1133
- username: "nocobase",
1134
- roles: [
1135
- {
1136
- createdAt: "2024-04-07T06:50:37.700Z",
1137
- updatedAt: "2024-04-07T06:50:37.700Z",
1138
- allowConfigure: null,
1139
- allowNewMenu: true,
1140
- "default": true,
1141
- description: null,
1142
- hidden: false,
1143
- color: "#1677FF",
1144
- name: "member",
1145
- snippets: [
1146
- "!pm",
1147
- "!pm.*",
1148
- "!ui.*"
1149
- ],
1150
- strategy: {
1151
- actions: [
1152
- "view",
1153
- "update:own",
1154
- "destroy:own",
1155
- "create"
1156
- ]
1157
- },
1158
- title: '{{t("Member")}}',
1159
- rolesUsers: {
1160
- createdAt: "2024-04-07T06:50:37.854Z",
1161
- updatedAt: "2024-04-07T06:50:37.854Z",
1162
- "default": null,
1163
- roleName: "member",
1164
- userId: 1
1165
- }
1166
- },
1167
- {
1168
- createdAt: "2024-04-07T06:50:37.622Z",
1169
- updatedAt: "2024-04-07T06:50:37.622Z",
1170
- allowConfigure: null,
1171
- allowNewMenu: null,
1172
- "default": false,
1173
- description: null,
1174
- hidden: true,
1175
- color: "#1677FF",
1176
- name: "root",
1177
- snippets: [
1178
- "pm",
1179
- "pm.*",
1180
- "ui.*"
1181
- ],
1182
- strategy: null,
1183
- title: '{{t("Root")}}',
1184
- rolesUsers: {
1185
- createdAt: "2024-04-07T06:50:38.152Z",
1186
- updatedAt: "2024-04-07T06:50:38.186Z",
1187
- "default": true,
1188
- roleName: "root",
1189
- userId: 1
1190
- }
1191
- },
1192
- {
1193
- createdAt: "2024-04-07T06:50:37.657Z",
1194
- updatedAt: "2024-04-07T06:50:37.657Z",
1195
- allowConfigure: true,
1196
- allowNewMenu: true,
1197
- "default": false,
1198
- description: null,
1199
- hidden: false,
1200
- name: "admin",
1201
- color: "#1677FF",
1202
- snippets: [
1203
- "pm",
1204
- "pm.*",
1205
- "ui.*"
1206
- ],
1207
- strategy: {
1208
- actions: [
1209
- "create",
1210
- "view",
1211
- "update",
1212
- "destroy"
1213
- ]
1214
- },
1215
- title: '{{t("Admin")}}',
1216
- rolesUsers: {
1217
- createdAt: "2024-04-07T06:50:38.152Z",
1218
- updatedAt: "2024-04-07T06:50:38.152Z",
1219
- "default": null,
1220
- roleName: "admin",
1221
- userId: 1
1222
- }
1223
- }
1224
- ]
1225
- }
1226
- },
1227
- "roles:list": {
1228
- data: [
1229
- {
1230
- createdAt: "2024-04-07T06:50:37.622Z",
1231
- updatedAt: "2024-04-07T06:50:37.622Z",
1232
- allowConfigure: null,
1233
- allowNewMenu: null,
1234
- "default": false,
1235
- description: null,
1236
- hidden: true,
1237
- name: "root",
1238
- color: "#1677FF",
1239
- snippets: [
1240
- "pm",
1241
- "pm.*",
1242
- "ui.*"
1243
- ],
1244
- strategy: null,
1245
- title: '{{t("Root")}}'
1246
- },
1247
- {
1248
- createdAt: "2024-04-07T06:50:37.657Z",
1249
- updatedAt: "2024-04-07T06:50:37.657Z",
1250
- allowConfigure: true,
1251
- allowNewMenu: true,
1252
- "default": false,
1253
- description: null,
1254
- hidden: false,
1255
- color: "#1677FF",
1256
- name: "admin",
1257
- snippets: [
1258
- "pm",
1259
- "pm.*",
1260
- "ui.*"
1261
- ],
1262
- strategy: {
1263
- actions: [
1264
- "create",
1265
- "view",
1266
- "update",
1267
- "destroy"
1268
- ]
1269
- },
1270
- title: '{{t("Admin")}}'
1271
- },
1272
- {
1273
- createdAt: "2024-04-07T06:50:37.700Z",
1274
- updatedAt: "2024-04-07T06:50:37.700Z",
1275
- allowConfigure: null,
1276
- allowNewMenu: true,
1277
- "default": true,
1278
- description: null,
1279
- color: "#1677FF",
1280
- hidden: false,
1281
- name: "member",
1282
- snippets: [
1283
- "!pm",
1284
- "!pm.*",
1285
- "!ui.*"
1286
- ],
1287
- strategy: {
1288
- actions: [
1289
- "view",
1290
- "update:own",
1291
- "destroy:own",
1292
- "create"
1293
- ]
1294
- },
1295
- title: '{{t("Member")}}'
1296
- }
1297
- ],
1298
- meta: {
1299
- count: 3,
1300
- page: 1,
1301
- pageSize: 20,
1302
- totalPage: 1,
1303
- allowedActions: {
1304
- view: [
1305
- "root",
1306
- "admin",
1307
- "member"
1308
- ],
1309
- update: [
1310
- "root",
1311
- "admin",
1312
- "member"
1313
- ],
1314
- destroy: []
1315
- }
1316
- }
1317
- },
1318
- "roles:get": {
1319
- data: {
1320
- createdAt: "2024-04-07T06:50:37.622Z",
1321
- updatedAt: "2024-04-07T06:50:37.622Z",
1322
- allowConfigure: null,
1323
- allowNewMenu: null,
1324
- "default": false,
1325
- description: null,
1326
- hidden: true,
1327
- name: "root",
1328
- color: "#1677FF",
1329
- snippets: [
1330
- "pm",
1331
- "pm.*",
1332
- "ui.*"
1333
- ],
1334
- strategy: null,
1335
- title: '{{t("Root")}}'
1336
- }
1337
- },
1338
- "tree:list": {
1339
- data: [
1340
- {
1341
- id: 1,
1342
- parentId: null,
1343
- f_y99u3pyj0bt: "1"
1344
- },
1345
- {
1346
- id: 2,
1347
- parentId: 1,
1348
- f_y99u3pyj0bt: "2"
1349
- }
1350
- ],
1351
- meta: {
1352
- count: 2,
1353
- page: 1,
1354
- pageSize: 20,
1355
- totalPage: 1,
1356
- allowedActions: {
1357
- view: [
1358
- 1,
1359
- 2
1360
- ],
1361
- update: [
1362
- 1,
1363
- 2
1364
- ],
1365
- destroy: [
1366
- 1,
1367
- 2
1368
- ]
1369
- }
1370
- }
1371
- }
1372
- };
1373
- const sleep = async (timeout = 0) => {
1374
- return new Promise((resolve) => {
1375
- setTimeout(resolve, timeout);
1376
- });
1377
- };
1378
- const defaultApis = {
1379
- "uiSchemas:patch": { data: { result: "ok" } },
1380
- "uiSchemas:batchPatch": { data: { result: "ok" } },
1381
- "uiSchemas:saveAsTemplate": { data: { result: "ok" } },
1382
- "users:update": { data: { result: "ok" } },
1383
- "roles:update": { data: { result: "ok" } },
1384
- ...dataSourceMainData
1385
- };
1386
- function getProcessMockData(apis, key2) {
1387
- if (typeof apis[key2] === "function") {
1388
- return apis[key2];
1389
- }
1390
- return (config) => {
1391
- var _a, _b;
1392
- if (!apis[key2])
1393
- return [404, { data: { message: "mock data not found" } }];
1394
- if (((_a = config == null ? void 0 : config.params) == null ? void 0 : _a.pageSize) || ((_b = config == null ? void 0 : config.params) == null ? void 0 : _b.page)) {
1395
- const { data, meta } = apis[key2];
1396
- const pageSize = config.params.pageSize || (meta == null ? void 0 : meta.pageSize) || 20;
1397
- const page = config.params.page || (meta == null ? void 0 : meta.page) || 1;
1398
- return [
1399
- 200,
1400
- {
1401
- data: data.slice(pageSize * (page - 1), pageSize * page),
1402
- meta: {
1403
- ...meta,
1404
- page,
1405
- pageSize,
1406
- count: data.length,
1407
- totalPage: Math.ceil(data.length / pageSize)
1408
- }
1409
- }
1410
- ];
1411
- }
1412
- return [200, apis[key2]];
1413
- };
1414
- }
1415
- const mockApi = (axiosInstance, apis = {}, delayResponse) => {
1416
- const mock = new MockAdapter(axiosInstance, { delayResponse });
1417
- Object.keys(apis).forEach((key2) => {
1418
- mock.onAny(key2).reply(getProcessMockData(apis, key2));
1419
- });
1420
- return (apis2 = {}) => {
1421
- Object.keys(apis2).forEach((key2) => {
1422
- mock.onAny(key2).reply(getProcessMockData(apis2, key2));
1423
- });
1424
- };
1425
- };
1426
- const mockAppApi = (app, apis = {}, delayResponse) => {
1427
- const mock = mockApi(app.apiClient.axios, apis, delayResponse);
1428
- return mock;
1429
- };
1430
- const ShowFormData = observer(({ children }) => {
1431
- const form = useForm();
1432
- return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("pre", { style: { marginBottom: 20 }, "data-testid": "form-data" }, JSON.stringify(form.values, null, 2)), children);
1433
- });
1434
- const getApp = (options) => {
1435
- const {
1436
- appOptions = {},
1437
- schemaSettings,
1438
- providers,
1439
- disableAcl = true,
1440
- apis: optionsApis = {},
1441
- enableMultipleDataSource,
1442
- designable,
1443
- delayResponse
1444
- } = options;
1445
- const app = appOptions instanceof Application ? appOptions : new Application({
1446
- ...appOptions,
1447
- disableAcl: appOptions.disableAcl || disableAcl,
1448
- designable: appOptions.designable || designable
1449
- });
1450
- if (providers) {
1451
- app.addProviders(providers);
1452
- }
1453
- if (schemaSettings) {
1454
- app.schemaSettingsManager.add(schemaSettings);
1455
- }
1456
- app.addComponents({ CommonSchemaComponent, ShowFormData });
1457
- app.pluginManager.add(AntdSchemaComponentPlugin);
1458
- app.pluginManager.add(SchemaSettingsPlugin);
1459
- app.pluginManager.add(CollectionPlugin, { config: { enableRemoteDataSource: false } });
1460
- const apis = Object.assign({}, defaultApis, optionsApis);
1461
- app.getCollectionManager().addCollections(dataSourceMainCollections);
1462
- if (enableMultipleDataSource) {
1463
- app.dataSourceManager.addDataSource(LocalDataSource, dataSource2);
1464
- }
1465
- mockAppApi(app, apis, delayResponse);
1466
- const App = app.getRootComponent();
1467
- return {
1468
- App,
1469
- app
1470
- };
1471
- };
1472
- const getAppComponent = (options) => {
1473
- const {
1474
- schema: optionsSchema = {},
1475
- Component,
1476
- value,
1477
- props,
1478
- onChange,
1479
- noWrapperSchema,
1480
- enableUserListDataBlock,
1481
- ...otherOptions
1482
- } = options;
1483
- if (noWrapperSchema) {
1484
- const { App: App2 } = getApp(options);
1485
- return App2;
1486
- }
1487
- const schema = {
1488
- type: "object",
1489
- name: "test",
1490
- default: value,
1491
- "x-component": Component,
1492
- "x-component-props": {
1493
- onChange,
1494
- ...props
1495
- },
1496
- ...optionsSchema
1497
- };
1498
- if (!schema.name) {
1499
- schema.name = "test";
1500
- }
1501
- if (!schema["x-uid"]) {
1502
- schema["x-uid"] = "test";
1503
- }
1504
- if (!schema.type) {
1505
- schema.type = "void";
1506
- }
1507
- const TestDemo = () => {
1508
- if (!enableUserListDataBlock) {
1509
- return /* @__PURE__ */ React.createElement(SchemaComponent, { schema });
1510
- }
1511
- return /* @__PURE__ */ React.createElement(DataBlockProvider, { collection: "users", action: "list" }, /* @__PURE__ */ React.createElement(SchemaComponent, { schema }));
1512
- };
1513
- const { App } = getApp({
1514
- ...otherOptions,
1515
- providers: [TestDemo]
1516
- });
1517
- return App;
1518
- };
1519
- function addXReadPrettyToEachLayer(obj = {}) {
1520
- obj["x-read-pretty"] = true;
1521
- _.forOwn(obj, (value, key2) => {
1522
- if (_.isObject(value)) {
1523
- addXReadPrettyToEachLayer(value);
1524
- }
1525
- });
1526
- return obj;
1527
- }
1528
- function setSchemaWithSettings(options) {
1529
- const { Component, settingPath } = options;
1530
- const SINGLE_SETTINGS_NAME = "testSettings";
1531
- const testSettings = new SchemaSettings({
1532
- name: SINGLE_SETTINGS_NAME,
1533
- items: [
1534
- {
1535
- name: "test",
1536
- Component
1537
- }
1538
- ]
1539
- });
1540
- if (!options.schema) {
1541
- options.schema = {};
1542
- }
1543
- if (settingPath) {
1544
- const schema = get(options.schema, settingPath);
1545
- schema["x-settings"] = SINGLE_SETTINGS_NAME;
1546
- } else {
1547
- options.schema["x-settings"] = SINGLE_SETTINGS_NAME;
1548
- }
1549
- if (!options.appOptions) {
1550
- options.appOptions = {};
1551
- }
1552
- if (options.appOptions instanceof Application) {
1553
- options.appOptions.schemaSettingsManager.add(testSettings);
1554
- } else {
1555
- if (!options.appOptions.schemaSettings) {
1556
- options.appOptions.schemaSettings = [];
1557
- }
1558
- options.appOptions.schemaSettings.push(testSettings);
1559
- }
1560
- }
1561
- function withSchema(Component, name) {
1562
- const ComponentValue = observer((props) => {
1563
- const schema = useFieldSchema();
1564
- const schemaValue = pick(schema.toJSON(), [
1565
- "title",
1566
- "description",
1567
- "enum",
1568
- "x-component-props",
1569
- "x-decorator-props",
1570
- "x-linkage-rules"
1571
- ]);
1572
- return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("pre", { "data-testid": name ? `test-schema-${name}` : `test-schema` }, JSON.stringify(schemaValue, void 0, 2)), /* @__PURE__ */ React.createElement(Component, { ...props }));
1573
- });
1574
- ComponentValue.displayName = `withSchema(${Component.displayName || Component.name})`;
1575
- return ComponentValue;
1576
- }
1577
- const CommonSchemaComponent = withSchema(function CommonSchemaComponent2(props) {
1578
- return /* @__PURE__ */ React.createElement(React.Fragment, null, props.children);
1579
- });
1580
- const expectNoTsError = expect$1;
1581
- const WaitApp = async () => {
1582
- await waitFor(() => {
1583
- expectNoTsError(screen.queryByText("Loading...")).not.toBeInTheDocument();
1584
- });
1585
- const loadError = screen.queryByText("App Error");
1586
- if (loadError) {
1587
- expectNoTsError(screen.queryByText("App Error")).not.toBeInTheDocument();
1588
- }
1589
- const renderError = screen.queryByText("Render Failed");
1590
- if (renderError) {
1591
- expectNoTsError(screen.queryByText("Render Failed")).not.toBeInTheDocument();
1592
- }
1593
- };
1594
- function getFormItemElement({ container = document.body, Component, label }) {
1595
- const preSelector = `div[aria-label^="block-item-${Component}-"]`;
1596
- const selector = label ? `${preSelector}[aria-label$="${label}"]` : preSelector;
1597
- const formItem = container.querySelector(selector);
1598
- expectNoTsError(formItem).toBeInTheDocument();
1599
- return formItem;
1600
- }
1601
- async function iconChecker(options) {
1602
- const formItem = getFormItemElement({ Component: "IconPicker", ...options });
1603
- if (options.oldValue) {
1604
- expectNoTsError(formItem.querySelector("span[role=img]")).toHaveAttribute("aria-label", options.oldValue);
1605
- }
1606
- if (options.newValue) {
1607
- await userEvent.click(formItem.querySelector("span[role=img]") || formItem.querySelector("button"));
1608
- await waitFor(() => {
1609
- expectNoTsError(screen.queryByRole("tooltip")).toBeInTheDocument();
1610
- expectNoTsError(screen.getByRole("tooltip").querySelector(".ant-popover-title")).toHaveTextContent("Icon");
1611
- });
1612
- await userEvent.click(screen.getByRole("tooltip").querySelector(`span[aria-label="${options.newValue}"]`));
1613
- await waitFor(() => {
1614
- expectNoTsError(screen.queryByRole("tooltip")).not.toBeInTheDocument();
1615
- });
1616
- expectNoTsError(formItem.querySelector("span[role=img]")).toHaveAttribute("aria-label", options.newValue);
1617
- }
1618
- }
1619
- async function radioChecker(options) {
1620
- const formItem = getFormItemElement({ Component: "Radio.Group", ...options });
1621
- const radioGroup = formItem.querySelector(".ant-radio-group");
1622
- if (options.oldValue) {
1623
- expectNoTsError(radioGroup.querySelector(".ant-radio-wrapper-checked")).toHaveTextContent(options.oldValue);
1624
- }
1625
- if (options.newValue) {
1626
- const el = [...radioGroup.querySelectorAll(".ant-radio-wrapper")].find((el2) => el2.textContent === options.newValue);
1627
- expectNoTsError(el).toBeInTheDocument();
1628
- await userEvent.click(el);
1629
- await waitFor(() => {
1630
- expectNoTsError(radioGroup.querySelector(".ant-radio-wrapper-checked")).toHaveTextContent(options.newValue);
1631
- });
1632
- }
1633
- }
1634
- async function inputChecker(options) {
1635
- const formItem = getFormItemElement({ Component: "Input", ...options });
1636
- const input = formItem.querySelector("input");
1637
- if (options.oldValue) {
1638
- expectNoTsError(input).toHaveValue(options.oldValue);
1639
- }
1640
- if (options.newValue) {
1641
- await userEvent.clear(input);
1642
- await userEvent.type(input, options.newValue);
1643
- }
1644
- }
1645
- async function numberChecker(options) {
1646
- const formItem = getFormItemElement({ Component: "InputNumber", ...options });
1647
- const input = formItem.querySelector("input");
1648
- if (options.oldValue) {
1649
- expectNoTsError(input).toHaveValue(options.oldValue);
1650
- }
1651
- if (options.newValue) {
1652
- await userEvent.clear(input);
1653
- await userEvent.type(input, String(options.newValue));
1654
- }
1655
- }
1656
- async function textareaChecker(options) {
1657
- const formItem = getFormItemElement({ Component: "Input.TextArea", ...options });
1658
- const textarea = formItem.querySelector("textarea");
1659
- if (options.oldValue) {
1660
- expectNoTsError(textarea).toHaveValue(options.oldValue);
1661
- }
1662
- if (options.newValue) {
1663
- await userEvent.clear(textarea);
1664
- await userEvent.type(textarea, options.newValue);
1665
- }
1666
- }
1667
- async function collectionFieldChecker(options) {
1668
- const formItem = getFormItemElement({ Component: "CollectionField", label: options.field, ...options });
1669
- const input = formItem.querySelector("input");
1670
- if (options.oldValue) {
1671
- expectNoTsError(input).toHaveValue(options.oldValue);
1672
- }
1673
- if (options.newValue) {
1674
- await userEvent.clear(input);
1675
- await userEvent.type(input, options.newValue);
1676
- }
1677
- }
1678
- const checkers = {
1679
- icon: iconChecker,
1680
- radio: radioChecker,
1681
- input: inputChecker,
1682
- collectionField: collectionFieldChecker,
1683
- number: numberChecker,
1684
- textarea: textareaChecker
1685
- };
1686
- async function checkFormItems(list) {
1687
- for (const item of list) {
1688
- const type2 = item.type;
1689
- const checker = checkers[type2];
1690
- await checker(item);
1691
- }
1692
- }
1693
- async function checkModal(options) {
1694
- const { triggerText, modalTitle, confirmTitle, submitText = "OK", formItems = [] } = options;
1695
- await waitFor(() => {
1696
- expectNoTsError(screen.queryByText(triggerText)).toBeInTheDocument();
1697
- });
1698
- await userEvent.click(screen.getByText(triggerText));
1699
- await waitFor(() => {
1700
- expectNoTsError(screen.queryByRole("dialog")).toBeInTheDocument();
1701
- });
1702
- const dialog = screen.getByRole("dialog");
1703
- if (modalTitle) {
1704
- expectNoTsError(dialog.querySelector(".ant-modal-title")).toHaveTextContent(modalTitle);
1705
- }
1706
- if (confirmTitle) {
1707
- expectNoTsError(dialog.querySelector(".ant-modal-confirm-title")).toHaveTextContent(confirmTitle);
1708
- }
1709
- if (options.contentText) {
1710
- expectNoTsError(dialog).toHaveTextContent(options.contentText);
1711
- }
1712
- if (options.beforeCheck) {
1713
- await options.beforeCheck();
1714
- }
1715
- if (options.customCheck) {
1716
- await options.customCheck();
1717
- }
1718
- await checkFormItems(formItems);
1719
- await userEvent.click(screen.getByText(submitText));
1720
- await waitFor(() => {
1721
- expectNoTsError(screen.queryByRole("dialog")).not.toBeInTheDocument();
1722
- });
1723
- if (options.afterSubmit) {
1724
- await sleep(100);
1725
- await options.afterSubmit();
1726
- }
1727
- }
1728
- async function checkSchema(matchObj, name) {
1729
- const objText = screen.queryByTestId(name ? `test-schema-${name}` : `test-schema`);
1730
- await waitFor(() => {
1731
- expect$1(JSON.parse(objText.textContent)).toMatchObject(matchObj);
1732
- });
1733
- }
1734
- const renderAppOptions = async (options) => {
1735
- const App = getAppComponent(options);
1736
- const res = render(/* @__PURE__ */ React.createElement(App, null));
1737
- await WaitApp();
1738
- return res;
1739
- };
1740
- const renderReadPrettyApp = (options) => {
1741
- return renderAppOptions({ ...options, schema: addXReadPrettyToEachLayer(options.schema) });
1742
- };
1743
- const renderHookWithApp = async (options) => {
1744
- const { hook: useHook, props, Wrapper = Fragment, ...otherOptions } = options;
1745
- const { App } = getApp(otherOptions);
1746
- const WrapperValue = ({ children }) => /* @__PURE__ */ React.createElement(App, null, /* @__PURE__ */ React.createElement(Wrapper, null, children));
1747
- const res = renderHook(() => useHook(), { wrapper: WrapperValue, initialProps: props });
1748
- await WaitApp();
1749
- return res;
1750
- };
1751
- async function showSettingsMenu(container = document) {
1752
- await waitFor(() => {
1753
- expectNoTsError(container.querySelector('[aria-label^="designer-schema-settings-"]')).toBeInTheDocument();
1754
- });
1755
- await userEvent.hover(container.querySelector('[aria-label^="designer-schema-settings-"]'));
1756
- await waitFor(() => {
1757
- expectNoTsError(screen.queryByTestId("schema-settings-menu")).toBeInTheDocument();
1758
- });
1759
- }
1760
- const renderSettings = async (options = {}) => {
1761
- const { container = () => document, ...appOptions } = options;
1762
- const result = await renderAppOptions({ ...appOptions, designable: true });
1763
- const containerElement = container();
1764
- await showSettingsMenu(containerElement);
1765
- return result;
1766
- };
1767
- const renderReadPrettySettings = async (options = {}) => {
1768
- const { container = () => document, ...appOptions } = options;
1769
- const result = await renderReadPrettyApp({ ...appOptions, designable: true });
1770
- const containerElement = container();
1771
- await showSettingsMenu(containerElement);
1772
- return result;
1773
- };
1774
- const renderSingleSettings = (options) => {
1775
- setSchemaWithSettings(options);
1776
- return renderSettings(options);
1777
- };
1778
- const renderReadPrettySingleSettings = (options) => {
1779
- setSchemaWithSettings(options);
1780
- options.schema = addXReadPrettyToEachLayer(options.schema);
1781
- return renderSettings(options);
1782
- };
1783
- async function checkDeleteSetting(options) {
1784
- if (options.modalChecker) {
1785
- await checkModal({
1786
- triggerText: options.title,
1787
- contentText: "Are you sure you want to delete it?",
1788
- ...options.modalChecker,
1789
- async afterSubmit() {
1790
- if (options.modalChecker.afterSubmit) {
1791
- await options.modalChecker.afterSubmit();
1792
- }
1793
- if (options.deletedText) {
1794
- expectNoTsError(screen.queryByText(options.deletedText)).not.toBeInTheDocument();
1795
- }
1796
- }
1797
- });
1798
- }
1799
- if (options.afterClick) {
1800
- await options.afterClick();
1801
- }
1802
- }
1803
- async function checkModalSetting(options) {
1804
- if (options.modalChecker) {
1805
- await checkModal({
1806
- triggerText: options.title,
1807
- ...options.modalChecker
1808
- });
1809
- }
1810
- if (options.afterClick) {
1811
- await options.afterClick();
1812
- }
1813
- }
1814
- async function checkSwitchSetting(options) {
1815
- if (options.beforeClick) {
1816
- await options.beforeClick();
1817
- }
1818
- const formItem = screen.getByTitle(options.title);
1819
- const switchElement = formItem.querySelector("button[role=switch]");
1820
- let oldChecked = switchElement.getAttribute("aria-checked");
1821
- const afterClick = async () => {
1822
- const formItem2 = screen.queryByTitle(options.title);
1823
- if (formItem2) {
1824
- const switchElement2 = formItem2.querySelector("button[role=switch]");
1825
- const newChecked = switchElement2.getAttribute("aria-checked");
1826
- expect$1(newChecked).not.toBe(oldChecked);
1827
- oldChecked = newChecked;
1828
- } else {
1829
- await showSettingsMenu();
1830
- }
1831
- };
1832
- if (options.afterFirstClick) {
1833
- await userEvent.click(formItem.querySelector("button[role=switch]"));
1834
- await waitFor(async () => {
1835
- await afterClick();
1836
- });
1837
- await options.afterFirstClick();
1838
- }
1839
- if (options.afterSecondClick) {
1840
- await userEvent.click(screen.getByText(options.title));
1841
- await waitFor(async () => {
1842
- await afterClick();
1843
- });
1844
- await options.afterSecondClick();
1845
- }
1846
- if (options.afterThirdClick) {
1847
- await userEvent.click(screen.getByText(options.title));
1848
- await waitFor(async () => {
1849
- await afterClick();
1850
- });
1851
- await options.afterThirdClick();
1852
- }
1853
- }
1854
- async function checkSelectSetting(options) {
1855
- if (options.beforeSelect) {
1856
- await options.beforeSelect();
1857
- }
1858
- const formItem = screen.getByTitle(options.title);
1859
- if (options.oldValue) {
1860
- expectNoTsError(formItem).toHaveTextContent(options.oldValue);
1861
- }
1862
- if (options.options) {
1863
- const getListbox = () => document.querySelector(`.select-popup-${options.title.replaceAll(" ", "-")}`);
1864
- expectNoTsError(formItem.querySelector(".ant-select-selector")).toBeInTheDocument();
1865
- await userEvent.click(formItem.querySelector(".ant-select-selector"));
1866
- await waitFor(() => {
1867
- expectNoTsError(getListbox()).toBeInTheDocument();
1868
- });
1869
- for (const option of options.options) {
1870
- const listbox = getListbox();
1871
- expectNoTsError(listbox).toHaveTextContent(option.label);
1872
- if (option.checker) {
1873
- const item = [...listbox.querySelectorAll(".ant-select-item-option-content")].find(
1874
- (item2) => item2.textContent === option.label
1875
- );
1876
- await userEvent.click(item);
1877
- await waitFor(() => {
1878
- expectNoTsError(screen.getByTitle(options.title)).toHaveTextContent(option.label);
1879
- });
1880
- await option.checker();
1881
- await userEvent.click(screen.getByTitle(options.title).querySelector(".ant-select-selection-item"));
1882
- await waitFor(() => {
1883
- expectNoTsError(getListbox()).toBeInTheDocument();
1884
- });
1885
- }
1886
- }
1887
- }
1888
- }
1889
- const types = {
1890
- switch: checkSwitchSetting,
1891
- modal: checkModalSetting,
1892
- delete: checkDeleteSetting,
1893
- select: checkSelectSetting
1894
- };
1895
- async function checkSettings(list, checkLength = false) {
1896
- if (checkLength) {
1897
- const menuList = screen.getByTestId("schema-settings-menu");
1898
- expect$1(menuList.querySelectorAll('li[role="menuitem"]')).toHaveLength(list.length);
1899
- }
1900
- for (const item of list) {
1901
- if (!screen.queryByTestId("schema-settings-menu")) {
1902
- await showSettingsMenu();
1903
- }
1904
- const type2 = item.type;
1905
- const checker = types[type2];
1906
- await checker(item);
1907
- }
1908
- }
1909
- async function checkBlockTitle(oldValue) {
1910
- const newValue = "new test";
1911
- await checkSettings([
1912
- {
1913
- type: "modal",
1914
- title: "Edit block title",
1915
- modalChecker: {
1916
- modalTitle: "Edit block title",
1917
- formItems: [
1918
- {
1919
- type: "input",
1920
- label: "Block title",
1921
- oldValue,
1922
- newValue
1923
- }
1924
- ],
1925
- async afterSubmit() {
1926
- await waitFor(() => {
1927
- expectNoTsError(screen.queryByText(newValue)).toBeInTheDocument();
1928
- });
1929
- }
1930
- }
1931
- }
1932
- ]);
1933
- }
1934
- async function checkFieldTitle(oldValue) {
1935
- const newValue = "new test";
1936
- await checkSettings([
1937
- {
1938
- type: "modal",
1939
- title: "Edit field title",
1940
- modalChecker: {
1941
- modalTitle: "Edit field title",
1942
- formItems: [
1943
- {
1944
- type: "input",
1945
- label: "Field title",
1946
- oldValue,
1947
- newValue
1948
- }
1949
- ],
1950
- async afterSubmit() {
1951
- await waitFor(() => {
1952
- expectNoTsError(screen.queryByText(newValue)).toBeInTheDocument();
1953
- });
1954
- }
1955
- }
1956
- }
1957
- ]);
1958
- }
1959
- function customRender(ui, options = {}) {
1960
- return render(ui, {
1961
- // wrap provider(s) here if needed
1962
- wrapper: ({ children }) => children,
1963
- ...options
1964
- });
1965
- }
1966
- async function waitForApp() {
1967
- return waitFor(() => {
1968
- expect(screen.queryByText("Loading...")).not.toBeInTheDocument();
1969
- });
1970
- }
1971
- async function renderApp(element) {
1972
- const res = render(element);
1973
- await waitForApp();
1974
- return res;
1975
- }
1976
- export {
1977
- WaitApp,
1978
- checkBlockTitle,
1979
- checkDeleteSetting,
1980
- checkFieldTitle,
1981
- checkModal,
1982
- checkModalSetting,
1983
- checkSchema,
1984
- checkSelectSetting,
1985
- checkSettings,
1986
- checkSwitchSetting,
1987
- expectNoTsError,
1988
- customRender as render,
1989
- renderApp,
1990
- renderAppOptions,
1991
- renderHook2 as renderHook,
1992
- renderHookWithApp,
1993
- renderReadPrettyApp,
1994
- renderReadPrettySettings,
1995
- renderReadPrettySingleSettings,
1996
- renderSettings,
1997
- renderSingleSettings,
1998
- showSettingsMenu,
1999
- sleep,
2000
- default2 as userEvent,
2001
- waitForApp
2002
- };