remult 0.22.1 → 0.22.3

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 (257) hide show
  1. package/esm/graphql.js +27 -27
  2. package/esm/postgres/schema-builder.js +4 -4
  3. package/esm/remult-knex/index.js +2 -2
  4. package/esm/remult-mongo.js +6 -6
  5. package/esm/src/backend-tests/backend-database-test-setup.backend-spec.js +30 -0
  6. package/esm/src/id-entity.d.ts +4 -0
  7. package/esm/src/id-entity.js +8 -0
  8. package/esm/src/remult3/RepositoryImplementation.js +7 -5
  9. package/esm/src/shared-tests/db-tests.db-tests.js +35 -0
  10. package/package.json +1 -1
  11. package/postgres/postgresColumnSyntax.d.ts +2 -0
  12. package/postgres/postgresColumnSyntax.js +34 -0
  13. package/remult-knex/index.js +2 -2
  14. package/remult-middleware.d.ts +2 -0
  15. package/remult-middleware.js +70 -0
  16. package/remult-mongo.js +6 -6
  17. package/server/register-actions-on-server.d.ts +3 -0
  18. package/server/register-actions-on-server.js +50 -0
  19. package/server/register-entities-on-server.d.ts +3 -0
  20. package/server/register-entities-on-server.js +19 -0
  21. package/src/backend-tests/backend-database-test-setup.backend-spec.js +60 -0
  22. package/{esm/core/src → src}/backend-tests/my-test.backend-spec.d.ts +1 -1
  23. package/src/backend-tests/my-test.backend-spec.js +217 -0
  24. package/src/backend-tests/test-http-server.backend-spec.d.ts +6 -0
  25. package/src/backend-tests/test-http-server.backend-spec.js +342 -0
  26. package/src/id-entity.d.ts +4 -0
  27. package/src/id-entity.js +17 -0
  28. package/src/remult3/RepositoryImplementation.js +15 -13
  29. package/src/shared-tests/db-tests.db-tests.js +64 -0
  30. package/{esm/core/src/valueConverters.d.ts → valueConverters.d.ts} +12 -13
  31. package/valueConverters.js +168 -0
  32. package/esm/angular/interfaces/index.d.ts +0 -1
  33. package/esm/angular/interfaces/index.js +0 -1
  34. package/esm/angular/interfaces/src/column-collection.d.ts +0 -70
  35. package/esm/angular/interfaces/src/column-collection.js +0 -341
  36. package/esm/angular/interfaces/src/data-area-settings.d.ts +0 -15
  37. package/esm/angular/interfaces/src/data-area-settings.js +0 -35
  38. package/esm/angular/interfaces/src/data-control-interfaces.d.ts +0 -36
  39. package/esm/angular/interfaces/src/data-control-interfaces.js +0 -57
  40. package/esm/angular/interfaces/src/dataList.d.ts +0 -13
  41. package/esm/angular/interfaces/src/dataList.js +0 -42
  42. package/esm/angular/interfaces/src/filter-helper.d.ts +0 -13
  43. package/esm/angular/interfaces/src/filter-helper.js +0 -59
  44. package/esm/angular/interfaces/src/grid-settings.d.ts +0 -145
  45. package/esm/angular/interfaces/src/grid-settings.js +0 -387
  46. package/esm/angular/interfaces/src/public_api.d.ts +0 -4
  47. package/esm/angular/interfaces/src/public_api.js +0 -4
  48. package/esm/angular/src/angular/RemultAngularPluginsService.d.ts +0 -4
  49. package/esm/angular/src/angular/RemultAngularPluginsService.js +0 -3
  50. package/esm/angular/src/angular/data-control/data-control2.component.d.ts +0 -49
  51. package/esm/angular/src/angular/data-control/data-control2.component.js +0 -138
  52. package/esm/core/SseSubscriptionServer.d.ts +0 -33
  53. package/esm/core/SseSubscriptionServer.js +0 -107
  54. package/esm/core/assign.d.ts +0 -1
  55. package/esm/core/assign.js +0 -5
  56. package/esm/core/classType.d.ts +0 -3
  57. package/esm/core/classType.js +0 -1
  58. package/esm/core/index.d.ts +0 -27
  59. package/esm/core/index.js +0 -25
  60. package/esm/core/inputTypes.d.ts +0 -9
  61. package/esm/core/inputTypes.js +0 -9
  62. package/esm/core/live-query/data-provider-live-query-storage.d.ts +0 -22
  63. package/esm/core/live-query/data-provider-live-query-storage.js +0 -71
  64. package/esm/core/postgres/index.d.ts +0 -2
  65. package/esm/core/postgres/index.js +0 -2
  66. package/esm/core/postgres/postgres-data-provider.d.ts +0 -36
  67. package/esm/core/postgres/postgres-data-provider.js +0 -120
  68. package/esm/core/postgres/schema-builder.d.ts +0 -17
  69. package/esm/core/postgres/schema-builder.js +0 -153
  70. package/esm/core/remult-fresh.d.ts +0 -17
  71. package/esm/core/remult-fresh.js +0 -29
  72. package/esm/core/remult-knex/index.d.ts +0 -30
  73. package/esm/core/remult-knex/index.js +0 -446
  74. package/esm/core/remult-mongo.d.ts +0 -24
  75. package/esm/core/remult-mongo.js +0 -254
  76. package/esm/core/server/JsonEntityFileStorage.d.ts +0 -10
  77. package/esm/core/server/JsonEntityFileStorage.js +0 -25
  78. package/esm/core/server/core.d.ts +0 -4
  79. package/esm/core/server/core.js +0 -4
  80. package/esm/core/server/expressBridge.d.ts +0 -182
  81. package/esm/core/server/expressBridge.js +0 -938
  82. package/esm/core/server/index.d.ts +0 -6
  83. package/esm/core/server/index.js +0 -9
  84. package/esm/core/server/initAsyncHooks.d.ts +0 -1
  85. package/esm/core/server/initAsyncHooks.js +0 -9
  86. package/esm/core/server/initDataProvider.d.ts +0 -2
  87. package/esm/core/server/initDataProvider.js +0 -14
  88. package/esm/core/src/__EntityValueProvider.d.ts +0 -11
  89. package/esm/core/src/__EntityValueProvider.js +0 -1
  90. package/esm/core/src/__RowsOfDataForTesting.d.ts +0 -3
  91. package/esm/core/src/__RowsOfDataForTesting.js +0 -1
  92. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +0 -6
  93. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.js +0 -147
  94. package/esm/core/src/backend-tests/my-test.backend-spec.js +0 -197
  95. package/esm/core/src/backend-tests/test-http-server.backend-spec.d.ts +0 -1
  96. package/esm/core/src/backend-tests/test-http-server.backend-spec.js +0 -167
  97. package/esm/core/src/buildRestDataProvider.d.ts +0 -31
  98. package/esm/core/src/buildRestDataProvider.js +0 -113
  99. package/esm/core/src/column-interfaces.d.ts +0 -154
  100. package/esm/core/src/column-interfaces.js +0 -7
  101. package/esm/core/src/column.d.ts +0 -58
  102. package/esm/core/src/column.js +0 -174
  103. package/esm/core/src/context.d.ts +0 -134
  104. package/esm/core/src/context.js +0 -286
  105. package/esm/core/src/data-api.d.ts +0 -39
  106. package/esm/core/src/data-api.js +0 -279
  107. package/esm/core/src/data-interfaces.d.ts +0 -41
  108. package/esm/core/src/data-interfaces.js +0 -12
  109. package/esm/core/src/data-providers/array-entity-data-provider.d.ts +0 -22
  110. package/esm/core/src/data-providers/array-entity-data-provider.js +0 -252
  111. package/esm/core/src/data-providers/in-memory-database.d.ts +0 -9
  112. package/esm/core/src/data-providers/in-memory-database.js +0 -14
  113. package/esm/core/src/data-providers/json-data-provider.d.ts +0 -12
  114. package/esm/core/src/data-providers/json-data-provider.js +0 -55
  115. package/esm/core/src/data-providers/rest-data-provider.d.ts +0 -49
  116. package/esm/core/src/data-providers/rest-data-provider.js +0 -256
  117. package/esm/core/src/data-providers/sql-database.d.ts +0 -33
  118. package/esm/core/src/data-providers/sql-database.js +0 -384
  119. package/esm/core/src/data-providers/web-sql-data-provider.d.ts +0 -24
  120. package/esm/core/src/data-providers/web-sql-data-provider.js +0 -143
  121. package/esm/core/src/entity.d.ts +0 -91
  122. package/esm/core/src/entity.js +0 -1
  123. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.d.ts +0 -50
  124. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.js +0 -150
  125. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.d.ts +0 -1
  126. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.js +0 -1
  127. package/esm/core/src/filter/filter-interfaces.d.ts +0 -85
  128. package/esm/core/src/filter/filter-interfaces.js +0 -477
  129. package/esm/core/src/live-query/LiveQueryClient.d.ts +0 -20
  130. package/esm/core/src/live-query/LiveQueryClient.js +0 -188
  131. package/esm/core/src/live-query/SseSubscriptionClient.d.ts +0 -5
  132. package/esm/core/src/live-query/SseSubscriptionClient.js +0 -86
  133. package/esm/core/src/live-query/SubscriptionChannel.d.ts +0 -72
  134. package/esm/core/src/live-query/SubscriptionChannel.js +0 -123
  135. package/esm/core/src/live-query/SubscriptionServer.d.ts +0 -53
  136. package/esm/core/src/live-query/SubscriptionServer.js +0 -111
  137. package/esm/core/src/live-query/live-query-tests.spec.d.ts +0 -6
  138. package/esm/core/src/live-query/live-query-tests.spec.js +0 -952
  139. package/esm/core/src/remult-proxy.d.ts +0 -35
  140. package/esm/core/src/remult-proxy.js +0 -113
  141. package/esm/core/src/remult3/DecoratorReplacer.d.ts +0 -10
  142. package/esm/core/src/remult3/DecoratorReplacer.js +0 -20
  143. package/esm/core/src/remult3/RepositoryImplementation.d.ts +0 -355
  144. package/esm/core/src/remult3/RepositoryImplementation.js +0 -2109
  145. package/esm/core/src/remult3/index.d.ts +0 -2
  146. package/esm/core/src/remult3/index.js +0 -2
  147. package/esm/core/src/remult3/remult3.d.ts +0 -395
  148. package/esm/core/src/remult3/remult3.js +0 -2
  149. package/esm/core/src/server-action.d.ts +0 -81
  150. package/esm/core/src/server-action.js +0 -394
  151. package/esm/core/src/shared-tests/db-tests-setup.d.ts +0 -32
  152. package/esm/core/src/shared-tests/db-tests-setup.js +0 -78
  153. package/esm/core/src/shared-tests/db-tests.db-tests.d.ts +0 -25
  154. package/esm/core/src/shared-tests/db-tests.db-tests.js +0 -810
  155. package/esm/core/src/shared-tests/deleteAll.d.ts +0 -2
  156. package/esm/core/src/shared-tests/deleteAll.js +0 -4
  157. package/esm/core/src/shared-tests/entityWithValidations.d.ts +0 -14
  158. package/esm/core/src/shared-tests/entityWithValidations.js +0 -43
  159. package/esm/core/src/shared-tests/index.d.ts +0 -4
  160. package/esm/core/src/shared-tests/index.js +0 -4
  161. package/esm/core/src/shared-tests/test-custom-id-column.spec.d.ts +0 -1
  162. package/esm/core/src/shared-tests/test-custom-id-column.spec.js +0 -67
  163. package/esm/core/src/shared-tests/test-special-value.spec.d.ts +0 -10
  164. package/esm/core/src/shared-tests/test-special-value.spec.js +0 -73
  165. package/esm/core/src/shared-tests/test-update-with-null.spec.d.ts +0 -1
  166. package/esm/core/src/shared-tests/test-update-with-null.spec.js +0 -31
  167. package/esm/core/src/sort.d.ts +0 -16
  168. package/esm/core/src/sort.js +0 -103
  169. package/esm/core/src/sql-command.d.ts +0 -19
  170. package/esm/core/src/sql-command.js +0 -1
  171. package/esm/core/src/test.d.ts +0 -3
  172. package/esm/core/src/test.js +0 -12
  173. package/esm/core/src/tests/Done.d.ts +0 -5
  174. package/esm/core/src/tests/Done.js +0 -9
  175. package/esm/core/src/tests/RowProvider.spec.d.ts +0 -16
  176. package/esm/core/src/tests/RowProvider.spec.js +0 -631
  177. package/esm/core/src/tests/TestDataApiResponse.d.ts +0 -10
  178. package/esm/core/src/tests/TestDataApiResponse.js +0 -22
  179. package/esm/core/src/tests/basicRowFunctionality.spec.d.ts +0 -8
  180. package/esm/core/src/tests/basicRowFunctionality.spec.js +0 -2103
  181. package/esm/core/src/tests/c.d.ts +0 -8
  182. package/esm/core/src/tests/c.js +0 -13
  183. package/esm/core/src/tests/createData.d.ts +0 -7
  184. package/esm/core/src/tests/createData.js +0 -22
  185. package/esm/core/src/tests/d.d.ts +0 -6
  186. package/esm/core/src/tests/d.js +0 -11
  187. package/esm/core/src/tests/dWithPrefilter.d.ts +0 -7
  188. package/esm/core/src/tests/dWithPrefilter.js +0 -18
  189. package/esm/core/src/tests/entityForCustomFilter.d.ts +0 -16
  190. package/esm/core/src/tests/entityForCustomFilter.js +0 -33
  191. package/esm/core/src/tests/entityWithValidationsOnColumn.d.ts +0 -5
  192. package/esm/core/src/tests/entityWithValidationsOnColumn.js +0 -13
  193. package/esm/core/src/tests/frontend-database-tests-setup.spec.d.ts +0 -4
  194. package/esm/core/src/tests/frontend-database-tests-setup.spec.js +0 -37
  195. package/esm/core/src/tests/h.d.ts +0 -6
  196. package/esm/core/src/tests/h.js +0 -24
  197. package/esm/core/src/tests/remult-3-basic-tests.spec.d.ts +0 -1
  198. package/esm/core/src/tests/remult-3-basic-tests.spec.js +0 -236
  199. package/esm/core/src/tests/remult-3-entities.d.ts +0 -23
  200. package/esm/core/src/tests/remult-3-entities.js +0 -39
  201. package/esm/core/src/tests/tasks.d.ts +0 -6
  202. package/esm/core/src/tests/tasks.js +0 -10
  203. package/esm/core/src/tests/test-context-as-storage.spec.d.ts +0 -0
  204. package/esm/core/src/tests/test-context-as-storage.spec.js +0 -1
  205. package/esm/core/src/tests/test-data-api/predefined-filter.spec.d.ts +0 -1
  206. package/esm/core/src/tests/test-data-api/predefined-filter.spec.js +0 -389
  207. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.d.ts +0 -5
  208. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.js +0 -152
  209. package/esm/core/src/tests/test-decorator-precedence.spec.d.ts +0 -1
  210. package/esm/core/src/tests/test-decorator-precedence.spec.js +0 -38
  211. package/esm/core/src/tests/test-default-value.spec.d.ts +0 -1
  212. package/esm/core/src/tests/test-default-value.spec.js +0 -33
  213. package/esm/core/src/tests/test-entity-inheritance.spec.d.ts +0 -14
  214. package/esm/core/src/tests/test-entity-inheritance.spec.js +0 -82
  215. package/esm/core/src/tests/test-exceptions.spec.d.ts +0 -1
  216. package/esm/core/src/tests/test-exceptions.spec.js +0 -375
  217. package/esm/core/src/tests/test-json.spec.d.ts +0 -1
  218. package/esm/core/src/tests/test-json.spec.js +0 -115
  219. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.d.ts +0 -9
  220. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.js +0 -809
  221. package/esm/core/src/tests/test-non-active-record.spec.d.ts +0 -1
  222. package/esm/core/src/tests/test-non-active-record.spec.js +0 -66
  223. package/esm/core/src/tests/test-object-column.spec.d.ts +0 -1
  224. package/esm/core/src/tests/test-object-column.spec.js +0 -189
  225. package/esm/core/src/tests/test-paged-foreach.spec.d.ts +0 -1
  226. package/esm/core/src/tests/test-paged-foreach.spec.js +0 -328
  227. package/esm/core/src/tests/test-remult-angular.spec.d.ts +0 -1
  228. package/esm/core/src/tests/test-remult-angular.spec.js +0 -23
  229. package/esm/core/src/tests/test-server-controller.spec.d.ts +0 -7
  230. package/esm/core/src/tests/test-server-controller.spec.js +0 -489
  231. package/esm/core/src/tests/test-server-expressions.spec.d.ts +0 -1
  232. package/esm/core/src/tests/test-server-expressions.spec.js +0 -178
  233. package/esm/core/src/tests/test-server-method-on-entity.spec.d.ts +0 -1
  234. package/esm/core/src/tests/test-server-method-on-entity.spec.js +0 -306
  235. package/esm/core/src/tests/test-sql-expression.spec.d.ts +0 -5
  236. package/esm/core/src/tests/test-sql-expression.spec.js +0 -205
  237. package/esm/core/src/tests/test-sql.spec.d.ts +0 -1
  238. package/esm/core/src/tests/test-sql.spec.js +0 -170
  239. package/esm/core/src/tests/test-subscribe.spec.d.ts +0 -1
  240. package/esm/core/src/tests/test-subscribe.spec.js +0 -135
  241. package/esm/core/src/tests/test-type-recovery.spec.d.ts +0 -1
  242. package/esm/core/src/tests/test-type-recovery.spec.js +0 -49
  243. package/esm/core/src/tests/test-where-api.spec.d.ts +0 -1
  244. package/esm/core/src/tests/test-where-api.spec.js +0 -434
  245. package/esm/core/src/tests/testHelper.spec.d.ts +0 -36
  246. package/esm/core/src/tests/testHelper.spec.js +0 -226
  247. package/esm/core/src/tests/testModel/models.d.ts +0 -16
  248. package/esm/core/src/tests/testModel/models.js +0 -25
  249. package/esm/core/src/validators.d.ts +0 -14
  250. package/esm/core/src/validators.js +0 -33
  251. package/esm/core/src/valueConverters.js +0 -197
  252. package/esm/core/urlBuilder.d.ts +0 -6
  253. package/esm/core/urlBuilder.js +0 -20
  254. package/esm/test-servers/shared/Task.d.ts +0 -9
  255. package/esm/test-servers/shared/Task.js +0 -32
  256. package/esm/test.d.ts +0 -5
  257. package/esm/test.js +0 -6
@@ -1,341 +0,0 @@
1
- import { getEntityRef } from "remult";
2
- import { decorateDataSettings, getFieldDefinition } from "./data-control-interfaces";
3
- import { getEntitySettings } from 'remult/src/remult3';
4
- export class FieldCollection {
5
- currentRow;
6
- allowUpdate;
7
- filterHelper;
8
- showArea;
9
- _getRowColumn;
10
- constructor(currentRow, allowUpdate, filterHelper, showArea, _getRowColumn) {
11
- this.currentRow = currentRow;
12
- this.allowUpdate = allowUpdate;
13
- this.filterHelper = filterHelper;
14
- this.showArea = showArea;
15
- this._getRowColumn = _getRowColumn;
16
- }
17
- __showArea() {
18
- return this.showArea();
19
- }
20
- __getColumn(map, record) {
21
- if (!map.field)
22
- return undefined;
23
- let result;
24
- if (record)
25
- result = getEntityRef(record).fields.find(getFieldDefinition(map.field));
26
- if (!result)
27
- result = map.field;
28
- return result;
29
- }
30
- __visible(col, row) {
31
- if (col.visible === undefined)
32
- return true;
33
- return this.getRowColumn({ col, row }, (c, row) => col.visible(row, c));
34
- }
35
- allowClick(col, row) {
36
- if (!col.click)
37
- return false;
38
- if (!this._getEditable(col, row))
39
- return false;
40
- if (col.allowClick === undefined) {
41
- return true;
42
- }
43
- return this.getRowColumn({ col, row }, (c, row) => col.allowClick(row, c));
44
- }
45
- getRowColumn(args, what) {
46
- let field;
47
- let row = args.row;
48
- if (this._getRowColumn && args.col.field && row) {
49
- field = this._getRowColumn(row, getFieldDefinition(args.col.field));
50
- }
51
- if (!field)
52
- field = args.col.field;
53
- if (!row && field)
54
- row = field.container;
55
- return what(field, row);
56
- }
57
- __dataControlStyle(map) {
58
- if (map.width && map.width.trim().length > 0) {
59
- if ((+map.width).toString() == map.width)
60
- return map.width + "px";
61
- return map.width;
62
- }
63
- return undefined;
64
- }
65
- settingsByKey = {};
66
- allowDesignMode;
67
- async add(...columns) {
68
- var promises = [];
69
- for (let c of columns) {
70
- if (!c)
71
- continue;
72
- let s;
73
- let x = c;
74
- let col = c;
75
- let ecol = c;
76
- if (!x.field && col.valueConverter || ecol.metadata) {
77
- x = {
78
- field: c,
79
- };
80
- }
81
- if (x.field) {
82
- decorateDataSettings(x.field, x);
83
- }
84
- if (x.getValue) {
85
- s = x;
86
- }
87
- {
88
- promises.push(this.buildDropDown(x));
89
- }
90
- this.items.push(x);
91
- }
92
- await Promise.all(promises);
93
- return Promise.resolve();
94
- }
95
- doWhenWeHaveContext = [];
96
- remult;
97
- setContext(remult) {
98
- this.remult = remult;
99
- for (const what of this.doWhenWeHaveContext) {
100
- what(remult);
101
- }
102
- }
103
- async buildDropDown(s) {
104
- if (s.valueList) {
105
- let orig = s.valueList;
106
- let result = [];
107
- s.valueList = result;
108
- if (orig instanceof Array) {
109
- for (let item of orig) {
110
- let type = typeof (item);
111
- if (type == "string" || type == "number")
112
- result.push({ id: item, caption: item });
113
- else {
114
- let x = item;
115
- if (x && x.id != undefined) {
116
- result.push(x);
117
- }
118
- }
119
- }
120
- }
121
- else if (typeof orig === "function") {
122
- let theFunc = orig;
123
- let todo = async (remult) => {
124
- let x = await theFunc(remult);
125
- if (x === undefined)
126
- s.valueList = undefined;
127
- else
128
- result.push(...x);
129
- fixResult(result, s.field);
130
- };
131
- if (this.remult) {
132
- todo(this.remult);
133
- }
134
- else
135
- this.doWhenWeHaveContext.push(async (remult) => todo(remult));
136
- }
137
- else {
138
- result.push(...(await orig));
139
- }
140
- fixResult(result, s.field);
141
- }
142
- return Promise.resolve();
143
- }
144
- designMode = false;
145
- colListChanged() {
146
- this._lastNumOfColumnsInGrid = -1;
147
- this._colListChangeListeners.forEach(x => x());
148
- }
149
- ;
150
- _colListChangeListeners = [];
151
- onColListChange(action) {
152
- this._colListChangeListeners.push(action);
153
- }
154
- moveCol(col, move) {
155
- let currentIndex = this.items.indexOf(col);
156
- let newIndex = currentIndex + move;
157
- if (newIndex < 0 || newIndex >= this.items.length)
158
- return;
159
- this.items.splice(currentIndex, 1);
160
- this.items.splice(newIndex, 0, col);
161
- this.colListChanged();
162
- }
163
- filterRows(col) {
164
- if (col.valueList)
165
- col.useContainsFilter = false;
166
- this.filterHelper.filterColumn(col.field, false, col.useContainsFilter);
167
- }
168
- clearFilter(col) {
169
- this.filterHelper.filterColumn(col.field, true, false);
170
- }
171
- _shouldShowFilterDialog(col) {
172
- return false;
173
- }
174
- deleteCol(col) {
175
- this.items.splice(this.items.indexOf(col), 1);
176
- this.colListChanged();
177
- }
178
- addCol(col, newCol) {
179
- this.items.splice(this.items.indexOf(col) + 1, 0, newCol);
180
- this.colListChanged();
181
- }
182
- _getEditable(col, row) {
183
- if (!this.allowUpdate())
184
- return false;
185
- if (!col.field)
186
- return false;
187
- if (col.readonly !== undefined)
188
- return !valueOrEntityExpressionToValue(col.readonly, row);
189
- return true;
190
- }
191
- _click(col, row) {
192
- this.getRowColumn({ col, row }, (c, r) => { col.click(r, c); });
193
- }
194
- _getColDisplayValue(col, row) {
195
- let r;
196
- if (col.getValue) {
197
- r = this.getRowColumn({ row, col }, (c, r) => col.getValue(r, c));
198
- }
199
- else if (col.field) {
200
- if (col.valueList) {
201
- for (let x of col.valueList) {
202
- if (x.id == this.__getColumn(col, row).value)
203
- return x.caption;
204
- }
205
- }
206
- r = this.__getColumn(col, row).displayValue;
207
- }
208
- return r;
209
- }
210
- _getColDataType(col) {
211
- if (col.inputType)
212
- return col.inputType;
213
- return "text";
214
- }
215
- _getColumnClass(col, row) {
216
- if (col.cssClass)
217
- if (typeof col.cssClass === 'function') {
218
- let anyFunc = col.cssClass;
219
- return anyFunc(row);
220
- }
221
- else
222
- return col.cssClass;
223
- return '';
224
- }
225
- _getError(col, r) {
226
- if (!col.field)
227
- return undefined;
228
- return this.__getColumn(col, r).error;
229
- }
230
- autoGenerateColumnsBasedOnData(defs) {
231
- if (this.items.length == 0) {
232
- if (defs) {
233
- for (const c of defs.fields) {
234
- if (!(c.key == 'id' && c.valueType === String))
235
- this.add(c);
236
- }
237
- }
238
- }
239
- }
240
- __changeWidth(col, what) {
241
- let width = col.width;
242
- if (!width)
243
- width = '50';
244
- width = ((+width) + what).toString();
245
- col.width = width;
246
- }
247
- _colValueChanged(col, row) {
248
- return this.getRowColumn({ col, row }, (c, row) => {
249
- if (col.valueList) {
250
- let item = col.valueList.find(x => x.id == c.inputValue);
251
- if (item?.entity) {
252
- if (getEntitySettings(getFieldDefinition(col.field).valueType, false))
253
- c.value = item.entity;
254
- }
255
- }
256
- if (!col.valueChange)
257
- return false;
258
- col.valueChange(row, c);
259
- });
260
- }
261
- items = [];
262
- gridColumns;
263
- nonGridColumns;
264
- numOfColumnsInGrid = 5;
265
- _lastColumnCount;
266
- _lastNumOfColumnsInGrid;
267
- augmented = new Map();
268
- augment(augmenter, s) {
269
- if (this.augmented.get(s))
270
- return;
271
- augmenter(getFieldDefinition(s.field), s);
272
- this.augmented.set(s, true);
273
- }
274
- _initColumnsArrays(augmenter) {
275
- if (this._lastColumnCount != this.items.length || this._lastNumOfColumnsInGrid != this.numOfColumnsInGrid) {
276
- this._lastNumOfColumnsInGrid = this.numOfColumnsInGrid;
277
- this._lastColumnCount = this.items.length;
278
- this.gridColumns = [];
279
- this.nonGridColumns = [];
280
- let i = 0;
281
- for (let c of this.items) {
282
- this.augment(augmenter, c);
283
- if (i++ < this._lastNumOfColumnsInGrid)
284
- this.gridColumns.push(c);
285
- else
286
- this.nonGridColumns.push(c);
287
- }
288
- }
289
- }
290
- getGridColumns(augmenter) {
291
- this._initColumnsArrays(augmenter);
292
- return this.gridColumns;
293
- }
294
- getNonGridColumns(augmenter) {
295
- this._initColumnsArrays(augmenter);
296
- return this.nonGridColumns;
297
- }
298
- }
299
- export function valueOrEntityExpressionToValue(f, e) {
300
- if (typeof f === 'function') {
301
- let x = f;
302
- return x(e);
303
- }
304
- return f;
305
- }
306
- function fixResult(result, inField) {
307
- let field = getFieldDefinition(inField);
308
- if (field?.valueType === Number) {
309
- result.splice(0, result.length, ...result.map(x => ({ ...x, id: x.id?.toString() })));
310
- }
311
- }
312
- /** returns an array of values that can be used in the value list property of a data control object */
313
- export async function getEntityValueList(repository, args) {
314
- if (!args) {
315
- args = {};
316
- }
317
- if (!args.idField) {
318
- args.idField = x => x.idMetadata.field;
319
- }
320
- if (!args.captionField) {
321
- let idCol = args.idField(repository.metadata);
322
- for (const keyInItem of repository.metadata.fields) {
323
- if (keyInItem != idCol) {
324
- args.captionField = x => x.fields.find(keyInItem);
325
- break;
326
- }
327
- }
328
- }
329
- let r = (await repository.find({
330
- where: args.where,
331
- orderBy: args.orderBy,
332
- limit: 1000
333
- })).map(x => {
334
- return {
335
- id: repository.getEntityRef(x).fields.find(args.idField(repository.metadata)).value,
336
- caption: repository.getEntityRef(x).fields.find(args.captionField(repository.metadata)).value,
337
- entity: x
338
- };
339
- });
340
- return r;
341
- }
@@ -1,15 +0,0 @@
1
- import { FieldsMetadata } from "remult";
2
- import { FieldCollection } from "./column-collection";
3
- import { DataControlInfo, DataControlSettings } from "./data-control-interfaces";
4
- export interface IDataAreaSettings<rowType = any> {
5
- fields?: (rowType: FieldsMetadata<rowType>) => DataAreaFieldsSetting<rowType>[];
6
- numberOfColumnAreas?: number;
7
- labelWidth?: number;
8
- }
9
- export declare class DataAreaSettings<rowType = any> {
10
- settings?: IDataAreaSettings<rowType> | undefined;
11
- fields?: FieldCollection<rowType> | undefined;
12
- lines: DataControlSettings[][];
13
- constructor(settings?: IDataAreaSettings<rowType> | undefined, fields?: FieldCollection<rowType> | undefined, entity?: FieldsMetadata<rowType>);
14
- }
15
- export type DataAreaFieldsSetting<rowType = any> = DataControlInfo<rowType> | DataControlInfo<rowType>[];
@@ -1,35 +0,0 @@
1
- import { FieldCollection } from "./column-collection";
2
- export class DataAreaSettings {
3
- settings;
4
- fields;
5
- lines = [];
6
- constructor(settings, fields, entity) {
7
- this.settings = settings;
8
- this.fields = fields;
9
- if (fields == undefined) {
10
- fields = new FieldCollection(() => undefined, () => true, undefined, () => true, () => undefined);
11
- fields.numOfColumnsInGrid = 0;
12
- this.fields = fields;
13
- }
14
- if (settings && settings.fields) {
15
- for (const colSettings of settings.fields(entity)) {
16
- if (Array.isArray(colSettings)) {
17
- let x = fields.items.length;
18
- //@ts-ignore
19
- fields.add(...colSettings);
20
- let line = [];
21
- for (let index = x; index < fields.items.length; index++) {
22
- line.push(fields.items[index]);
23
- }
24
- this.lines.push(line);
25
- }
26
- else {
27
- fields.add(colSettings);
28
- let x = fields.items[fields.items.length - 1];
29
- x.width = '';
30
- this.lines.push([x]);
31
- }
32
- }
33
- }
34
- }
35
- }
@@ -1,36 +0,0 @@
1
- import { FieldRef, FieldMetadata, ValueListItem, Remult } from "remult";
2
- export type DataControlInfo<rowType> = DataControlSettings<rowType> | FieldRef<any, any>;
3
- export interface DataControlSettings<entityType = any, valueType = any> {
4
- field?: FieldMetadata | FieldRef<any, any>;
5
- getValue?: (row: entityType, val: FieldRef<entityType, valueType>) => any;
6
- readonly?: ValueOrEntityExpression<boolean, entityType>;
7
- cssClass?: (string | ((row: entityType) => string));
8
- caption?: string;
9
- visible?: (row: entityType, val: FieldRef<entityType, valueType>) => boolean;
10
- click?: (row: entityType, val: FieldRef<entityType, valueType>) => void;
11
- valueChange?: (row: entityType, val: FieldRef<entityType, valueType>) => void;
12
- allowClick?: (row: entityType, val: FieldRef<entityType, valueType>) => boolean;
13
- clickIcon?: string;
14
- valueList?: ValueListItem[] | string[] | any[] | Promise<ValueListItem[]> | ((remult: Remult) => Promise<ValueListItem[]>) | ((remult: any) => ValueListItem[]);
15
- inputType?: string;
16
- hideDataOnInput?: boolean;
17
- useContainsFilter?: boolean;
18
- width?: string;
19
- customComponent?: {
20
- component: any;
21
- args?: any;
22
- };
23
- }
24
- export interface CustomDataComponent<argsType = any> {
25
- args: CustomComponentArgs<argsType>;
26
- }
27
- export declare type CustomComponentArgs<argsType = any> = {
28
- fieldRef: FieldRef;
29
- settings: DataControlSettings;
30
- args?: argsType;
31
- };
32
- export declare const configDataControlField: unique symbol;
33
- export declare function getFieldDefinition(col: FieldMetadata | FieldRef<any, any>): any;
34
- export declare function decorateDataSettings(colInput: FieldMetadata | FieldRef<any, any>, x: DataControlSettings): void;
35
- export declare type ValueOrEntityExpression<valueType, entityType> = valueType | ((e: entityType) => valueType);
36
- export declare function DataControl<entityType = any, colType = any>(settings: DataControlSettings<entityType, colType>): (target: any, key?: any) => any;
@@ -1,57 +0,0 @@
1
- import { ValueListInfo } from "remult";
2
- export const configDataControlField = Symbol('configDataControlField');
3
- export function getFieldDefinition(col) {
4
- if (!col)
5
- return undefined;
6
- let r = col;
7
- let c = col;
8
- if (c.metadata)
9
- r = c.metadata;
10
- return r;
11
- }
12
- export function decorateDataSettings(colInput, x) {
13
- let col = getFieldDefinition(colInput);
14
- if (col.target) {
15
- let settingsOnColumnLevel = Reflect.getMetadata(configDataControlField, col.target, col.key);
16
- if (settingsOnColumnLevel) {
17
- for (const key in settingsOnColumnLevel) {
18
- if (Object.prototype.hasOwnProperty.call(settingsOnColumnLevel, key)) {
19
- const element = settingsOnColumnLevel[key];
20
- if (x[key] === undefined)
21
- x[key] = element;
22
- }
23
- }
24
- }
25
- }
26
- if (col.valueType) {
27
- let settingsOnColumnLevel = Reflect.getMetadata(configDataControlField, col.valueType);
28
- if (settingsOnColumnLevel) {
29
- for (const key in settingsOnColumnLevel) {
30
- if (Object.prototype.hasOwnProperty.call(settingsOnColumnLevel, key)) {
31
- const element = settingsOnColumnLevel[key];
32
- if (x[key] === undefined)
33
- x[key] = element;
34
- }
35
- }
36
- }
37
- }
38
- if (x.valueList === undefined && col && col.valueConverter instanceof ValueListInfo)
39
- x.valueList = col.valueConverter.getValues();
40
- if (!x.caption && col.caption)
41
- x.caption = col.caption;
42
- if (!x.inputType && col.inputType)
43
- x.inputType = col.inputType;
44
- if (x.readonly == undefined) {
45
- if (col.dbReadOnly)
46
- x.readonly = true;
47
- if (typeof col.options?.allowApiUpdate === 'boolean')
48
- x.readonly = !col.options.allowApiUpdate;
49
- }
50
- }
51
- export function DataControl(settings) {
52
- return (target, key) => {
53
- Reflect.defineMetadata(configDataControlField, settings, target, key);
54
- if (key === undefined)
55
- return target;
56
- };
57
- }
@@ -1,13 +0,0 @@
1
- import { EntityFilter, FindOptions, Repository } from "remult/src/remult3";
2
- export declare class DataList<T> implements Iterable<T> {
3
- private repository;
4
- [Symbol.iterator](): Iterator<T>;
5
- items: T[];
6
- constructor(repository: Repository<T>);
7
- removeItem(item: T): void;
8
- private map;
9
- lastGetId: number;
10
- count(where?: EntityFilter<T>): any;
11
- get(options?: FindOptions<T>): any;
12
- add(): T;
13
- }
@@ -1,42 +0,0 @@
1
- export class DataList {
2
- repository;
3
- [Symbol.iterator]() {
4
- return this.items[Symbol.iterator]();
5
- }
6
- items = [];
7
- constructor(repository) {
8
- this.repository = repository;
9
- repository.addEventListener({
10
- deleted: entity => {
11
- this.removeItem(entity);
12
- }
13
- });
14
- }
15
- removeItem(item) {
16
- let i = this.items.indexOf(item);
17
- if (i >= 0)
18
- this.items.splice(i, 1);
19
- }
20
- map(item) {
21
- return item;
22
- }
23
- lastGetId = 0;
24
- count(where) {
25
- return this.repository.count(where);
26
- }
27
- get(options) {
28
- let getId = ++this.lastGetId;
29
- return this.repository.find(options).then(r => {
30
- let x = r;
31
- let result = r.map((x) => this.map(x));
32
- if (getId == this.lastGetId)
33
- this.items = result;
34
- return result;
35
- });
36
- }
37
- add() {
38
- let x = this.map(this.repository.create());
39
- this.items.push(x);
40
- return x;
41
- }
42
- }
@@ -1,13 +0,0 @@
1
- import { FieldRef, FindOptions, Repository } from "remult";
2
- import { FieldMetadata } from "remult";
3
- export declare class FilterHelper<rowType> {
4
- private reloadData;
5
- private repository;
6
- filterRow: rowType;
7
- filterColumns: FieldMetadata[];
8
- forceEqual: FieldMetadata[];
9
- constructor(reloadData: () => void, repository: Repository<rowType>);
10
- isFiltered(columnInput: FieldMetadata | FieldRef<any, any>): boolean;
11
- filterColumn(columnInput: FieldMetadata | FieldRef<any, any>, clearFilter: boolean, useContainsFilter: boolean): void;
12
- addToFindOptions(opt: FindOptions<rowType>): void;
13
- }
@@ -1,59 +0,0 @@
1
- import { getEntityRef } from "remult";
2
- import { getEntitySettings } from 'remult/src/remult3';
3
- import { getFieldDefinition } from "./data-control-interfaces";
4
- export class FilterHelper {
5
- reloadData;
6
- repository;
7
- filterRow;
8
- filterColumns = [];
9
- forceEqual = [];
10
- constructor(reloadData, repository) {
11
- this.reloadData = reloadData;
12
- this.repository = repository;
13
- }
14
- isFiltered(columnInput) {
15
- return this.filterColumns.indexOf(getFieldDefinition(columnInput)) >= 0;
16
- }
17
- filterColumn(columnInput, clearFilter, useContainsFilter) {
18
- let column = getFieldDefinition(columnInput);
19
- if (!column)
20
- return;
21
- if (clearFilter) {
22
- this.filterColumns.splice(this.filterColumns.indexOf(column, 1), 1);
23
- this.forceEqual.splice(this.forceEqual.indexOf(column, 1), 1);
24
- }
25
- else if (this.filterColumns.indexOf(column) < 0) {
26
- this.filterColumns.push(column);
27
- if (useContainsFilter === false)
28
- this.forceEqual.push(column);
29
- }
30
- this.reloadData();
31
- }
32
- addToFindOptions(opt) {
33
- this.filterColumns.forEach(c => {
34
- //@ts-ignore
35
- let val = this.filterRow[c.key];
36
- let f = val;
37
- if (c.valueType != Number &&
38
- c.valueType != Date &&
39
- c.valueType != Boolean &&
40
- getEntitySettings(c.valueType, false) == undefined &&
41
- !this.forceEqual.find(x => c.key == x.key))
42
- f = { $contains: getEntityRef(this.filterRow).fields[c.key].inputValue };
43
- else if (c.valueType == Date) {
44
- if (val) {
45
- let v = val;
46
- v = new Date(v.getFullYear(), v.getMonth(), v.getDate());
47
- f = { $gte: v, $lt: (new Date(v.getFullYear(), v.getMonth(), v.getDate() + 1)) };
48
- }
49
- }
50
- let w = { [c.key]: f };
51
- if (opt.where) {
52
- let x = opt.where;
53
- opt.where = { $and: [x, w] };
54
- }
55
- else
56
- opt.where = w;
57
- });
58
- }
59
- }