remult 0.22.3 → 0.22.4

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 (253) hide show
  1. package/esm/angular/interfaces/index.d.ts +1 -0
  2. package/esm/angular/interfaces/index.js +1 -0
  3. package/esm/angular/interfaces/src/column-collection.d.ts +70 -0
  4. package/esm/angular/interfaces/src/column-collection.js +341 -0
  5. package/esm/angular/interfaces/src/data-area-settings.d.ts +15 -0
  6. package/esm/angular/interfaces/src/data-area-settings.js +35 -0
  7. package/esm/angular/interfaces/src/data-control-interfaces.d.ts +36 -0
  8. package/esm/angular/interfaces/src/data-control-interfaces.js +57 -0
  9. package/esm/angular/interfaces/src/dataList.d.ts +13 -0
  10. package/esm/angular/interfaces/src/dataList.js +42 -0
  11. package/esm/angular/interfaces/src/filter-helper.d.ts +13 -0
  12. package/esm/angular/interfaces/src/filter-helper.js +59 -0
  13. package/esm/angular/interfaces/src/grid-settings.d.ts +145 -0
  14. package/esm/angular/interfaces/src/grid-settings.js +387 -0
  15. package/esm/angular/interfaces/src/public_api.d.ts +4 -0
  16. package/esm/angular/interfaces/src/public_api.js +4 -0
  17. package/esm/angular/src/angular/RemultAngularPluginsService.d.ts +4 -0
  18. package/esm/angular/src/angular/RemultAngularPluginsService.js +3 -0
  19. package/esm/angular/src/angular/data-control/data-control2.component.d.ts +49 -0
  20. package/esm/angular/src/angular/data-control/data-control2.component.js +138 -0
  21. package/esm/core/SseSubscriptionServer.d.ts +33 -0
  22. package/esm/core/SseSubscriptionServer.js +107 -0
  23. package/esm/core/assign.d.ts +1 -0
  24. package/esm/core/assign.js +5 -0
  25. package/esm/core/classType.d.ts +3 -0
  26. package/esm/core/classType.js +1 -0
  27. package/esm/core/index.d.ts +27 -0
  28. package/esm/core/index.js +25 -0
  29. package/esm/core/inputTypes.d.ts +9 -0
  30. package/esm/core/inputTypes.js +9 -0
  31. package/esm/core/live-query/data-provider-live-query-storage.d.ts +22 -0
  32. package/esm/core/live-query/data-provider-live-query-storage.js +71 -0
  33. package/esm/core/postgres/index.d.ts +2 -0
  34. package/esm/core/postgres/index.js +2 -0
  35. package/esm/core/postgres/postgres-data-provider.d.ts +36 -0
  36. package/esm/core/postgres/postgres-data-provider.js +120 -0
  37. package/esm/core/postgres/schema-builder.d.ts +17 -0
  38. package/esm/core/postgres/schema-builder.js +153 -0
  39. package/esm/core/remult-fresh.d.ts +17 -0
  40. package/esm/core/remult-fresh.js +29 -0
  41. package/esm/core/remult-knex/index.d.ts +30 -0
  42. package/esm/core/remult-knex/index.js +446 -0
  43. package/esm/core/remult-mongo.d.ts +24 -0
  44. package/esm/core/remult-mongo.js +254 -0
  45. package/esm/core/server/JsonEntityFileStorage.d.ts +10 -0
  46. package/esm/core/server/JsonEntityFileStorage.js +25 -0
  47. package/esm/core/server/core.d.ts +4 -0
  48. package/esm/core/server/core.js +4 -0
  49. package/esm/core/server/expressBridge.d.ts +182 -0
  50. package/esm/core/server/expressBridge.js +938 -0
  51. package/esm/core/server/index.d.ts +6 -0
  52. package/esm/core/server/index.js +9 -0
  53. package/esm/core/server/initAsyncHooks.d.ts +1 -0
  54. package/esm/core/server/initAsyncHooks.js +9 -0
  55. package/esm/core/server/initDataProvider.d.ts +2 -0
  56. package/esm/core/server/initDataProvider.js +14 -0
  57. package/esm/core/src/__EntityValueProvider.d.ts +11 -0
  58. package/esm/core/src/__EntityValueProvider.js +1 -0
  59. package/esm/core/src/__RowsOfDataForTesting.d.ts +3 -0
  60. package/esm/core/src/__RowsOfDataForTesting.js +1 -0
  61. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +6 -0
  62. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.js +147 -0
  63. package/{src → esm/core/src}/backend-tests/my-test.backend-spec.d.ts +1 -1
  64. package/esm/core/src/backend-tests/my-test.backend-spec.js +197 -0
  65. package/esm/core/src/backend-tests/test-http-server.backend-spec.d.ts +1 -0
  66. package/esm/core/src/backend-tests/test-http-server.backend-spec.js +167 -0
  67. package/esm/core/src/buildRestDataProvider.d.ts +31 -0
  68. package/esm/core/src/buildRestDataProvider.js +113 -0
  69. package/esm/core/src/column-interfaces.d.ts +154 -0
  70. package/esm/core/src/column-interfaces.js +7 -0
  71. package/esm/core/src/column.d.ts +58 -0
  72. package/esm/core/src/column.js +174 -0
  73. package/esm/core/src/context.d.ts +134 -0
  74. package/esm/core/src/context.js +286 -0
  75. package/esm/core/src/data-api.d.ts +39 -0
  76. package/esm/core/src/data-api.js +279 -0
  77. package/esm/core/src/data-interfaces.d.ts +41 -0
  78. package/esm/core/src/data-interfaces.js +12 -0
  79. package/esm/core/src/data-providers/array-entity-data-provider.d.ts +22 -0
  80. package/esm/core/src/data-providers/array-entity-data-provider.js +252 -0
  81. package/esm/core/src/data-providers/in-memory-database.d.ts +9 -0
  82. package/esm/core/src/data-providers/in-memory-database.js +14 -0
  83. package/esm/core/src/data-providers/json-data-provider.d.ts +12 -0
  84. package/esm/core/src/data-providers/json-data-provider.js +55 -0
  85. package/esm/core/src/data-providers/rest-data-provider.d.ts +49 -0
  86. package/esm/core/src/data-providers/rest-data-provider.js +256 -0
  87. package/esm/core/src/data-providers/sql-database.d.ts +33 -0
  88. package/esm/core/src/data-providers/sql-database.js +384 -0
  89. package/esm/core/src/data-providers/web-sql-data-provider.d.ts +24 -0
  90. package/esm/core/src/data-providers/web-sql-data-provider.js +143 -0
  91. package/esm/core/src/entity.d.ts +91 -0
  92. package/esm/core/src/entity.js +1 -0
  93. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.d.ts +50 -0
  94. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.js +150 -0
  95. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.d.ts +1 -0
  96. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.js +1 -0
  97. package/esm/core/src/filter/filter-interfaces.d.ts +85 -0
  98. package/esm/core/src/filter/filter-interfaces.js +477 -0
  99. package/esm/core/src/live-query/LiveQueryClient.d.ts +20 -0
  100. package/esm/core/src/live-query/LiveQueryClient.js +188 -0
  101. package/esm/core/src/live-query/SseSubscriptionClient.d.ts +5 -0
  102. package/esm/core/src/live-query/SseSubscriptionClient.js +86 -0
  103. package/esm/core/src/live-query/SubscriptionChannel.d.ts +72 -0
  104. package/esm/core/src/live-query/SubscriptionChannel.js +123 -0
  105. package/esm/core/src/live-query/SubscriptionServer.d.ts +53 -0
  106. package/esm/core/src/live-query/SubscriptionServer.js +111 -0
  107. package/esm/core/src/live-query/live-query-tests.spec.d.ts +6 -0
  108. package/esm/core/src/live-query/live-query-tests.spec.js +952 -0
  109. package/esm/core/src/remult-proxy.d.ts +35 -0
  110. package/esm/core/src/remult-proxy.js +113 -0
  111. package/esm/core/src/remult3/DecoratorReplacer.d.ts +10 -0
  112. package/esm/core/src/remult3/DecoratorReplacer.js +20 -0
  113. package/esm/core/src/remult3/RepositoryImplementation.d.ts +355 -0
  114. package/esm/core/src/remult3/RepositoryImplementation.js +2109 -0
  115. package/esm/core/src/remult3/index.d.ts +2 -0
  116. package/esm/core/src/remult3/index.js +2 -0
  117. package/esm/core/src/remult3/remult3.d.ts +395 -0
  118. package/esm/core/src/remult3/remult3.js +2 -0
  119. package/esm/core/src/server-action.d.ts +81 -0
  120. package/esm/core/src/server-action.js +394 -0
  121. package/esm/core/src/shared-tests/db-tests-setup.d.ts +32 -0
  122. package/esm/core/src/shared-tests/db-tests-setup.js +78 -0
  123. package/esm/core/src/shared-tests/db-tests.db-tests.d.ts +25 -0
  124. package/esm/core/src/shared-tests/db-tests.db-tests.js +810 -0
  125. package/esm/core/src/shared-tests/deleteAll.d.ts +2 -0
  126. package/esm/core/src/shared-tests/deleteAll.js +4 -0
  127. package/esm/core/src/shared-tests/entityWithValidations.d.ts +14 -0
  128. package/esm/core/src/shared-tests/entityWithValidations.js +43 -0
  129. package/esm/core/src/shared-tests/index.d.ts +4 -0
  130. package/esm/core/src/shared-tests/index.js +4 -0
  131. package/esm/core/src/shared-tests/test-custom-id-column.spec.d.ts +1 -0
  132. package/esm/core/src/shared-tests/test-custom-id-column.spec.js +67 -0
  133. package/esm/core/src/shared-tests/test-special-value.spec.d.ts +10 -0
  134. package/esm/core/src/shared-tests/test-special-value.spec.js +73 -0
  135. package/esm/core/src/shared-tests/test-update-with-null.spec.d.ts +1 -0
  136. package/esm/core/src/shared-tests/test-update-with-null.spec.js +31 -0
  137. package/esm/core/src/sort.d.ts +16 -0
  138. package/esm/core/src/sort.js +103 -0
  139. package/esm/core/src/sql-command.d.ts +19 -0
  140. package/esm/core/src/sql-command.js +1 -0
  141. package/esm/core/src/test.d.ts +3 -0
  142. package/esm/core/src/test.js +12 -0
  143. package/esm/core/src/tests/Done.d.ts +5 -0
  144. package/esm/core/src/tests/Done.js +9 -0
  145. package/esm/core/src/tests/RowProvider.spec.d.ts +16 -0
  146. package/esm/core/src/tests/RowProvider.spec.js +631 -0
  147. package/esm/core/src/tests/TestDataApiResponse.d.ts +10 -0
  148. package/esm/core/src/tests/TestDataApiResponse.js +22 -0
  149. package/esm/core/src/tests/basicRowFunctionality.spec.d.ts +8 -0
  150. package/esm/core/src/tests/basicRowFunctionality.spec.js +2103 -0
  151. package/esm/core/src/tests/c.d.ts +8 -0
  152. package/esm/core/src/tests/c.js +13 -0
  153. package/esm/core/src/tests/createData.d.ts +7 -0
  154. package/esm/core/src/tests/createData.js +22 -0
  155. package/esm/core/src/tests/d.d.ts +6 -0
  156. package/esm/core/src/tests/d.js +11 -0
  157. package/esm/core/src/tests/dWithPrefilter.d.ts +7 -0
  158. package/esm/core/src/tests/dWithPrefilter.js +18 -0
  159. package/esm/core/src/tests/entityForCustomFilter.d.ts +16 -0
  160. package/esm/core/src/tests/entityForCustomFilter.js +33 -0
  161. package/esm/core/src/tests/entityWithValidationsOnColumn.d.ts +5 -0
  162. package/esm/core/src/tests/entityWithValidationsOnColumn.js +13 -0
  163. package/esm/core/src/tests/frontend-database-tests-setup.spec.d.ts +4 -0
  164. package/esm/core/src/tests/frontend-database-tests-setup.spec.js +37 -0
  165. package/esm/core/src/tests/h.d.ts +6 -0
  166. package/esm/core/src/tests/h.js +24 -0
  167. package/esm/core/src/tests/remult-3-basic-tests.spec.d.ts +1 -0
  168. package/esm/core/src/tests/remult-3-basic-tests.spec.js +236 -0
  169. package/esm/core/src/tests/remult-3-entities.d.ts +23 -0
  170. package/esm/core/src/tests/remult-3-entities.js +39 -0
  171. package/esm/core/src/tests/tasks.d.ts +6 -0
  172. package/esm/core/src/tests/tasks.js +10 -0
  173. package/esm/core/src/tests/test-context-as-storage.spec.d.ts +0 -0
  174. package/esm/core/src/tests/test-context-as-storage.spec.js +1 -0
  175. package/esm/core/src/tests/test-data-api/predefined-filter.spec.d.ts +1 -0
  176. package/esm/core/src/tests/test-data-api/predefined-filter.spec.js +389 -0
  177. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.d.ts +5 -0
  178. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.js +152 -0
  179. package/esm/core/src/tests/test-decorator-precedence.spec.d.ts +1 -0
  180. package/esm/core/src/tests/test-decorator-precedence.spec.js +38 -0
  181. package/esm/core/src/tests/test-default-value.spec.d.ts +1 -0
  182. package/esm/core/src/tests/test-default-value.spec.js +33 -0
  183. package/esm/core/src/tests/test-entity-inheritance.spec.d.ts +14 -0
  184. package/esm/core/src/tests/test-entity-inheritance.spec.js +82 -0
  185. package/esm/core/src/tests/test-exceptions.spec.d.ts +1 -0
  186. package/esm/core/src/tests/test-exceptions.spec.js +375 -0
  187. package/esm/core/src/tests/test-json.spec.d.ts +1 -0
  188. package/esm/core/src/tests/test-json.spec.js +115 -0
  189. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.d.ts +9 -0
  190. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.js +809 -0
  191. package/esm/core/src/tests/test-non-active-record.spec.d.ts +1 -0
  192. package/esm/core/src/tests/test-non-active-record.spec.js +66 -0
  193. package/esm/core/src/tests/test-object-column.spec.d.ts +1 -0
  194. package/esm/core/src/tests/test-object-column.spec.js +189 -0
  195. package/esm/core/src/tests/test-paged-foreach.spec.d.ts +1 -0
  196. package/esm/core/src/tests/test-paged-foreach.spec.js +328 -0
  197. package/esm/core/src/tests/test-remult-angular.spec.d.ts +1 -0
  198. package/esm/core/src/tests/test-remult-angular.spec.js +23 -0
  199. package/esm/core/src/tests/test-server-controller.spec.d.ts +7 -0
  200. package/esm/core/src/tests/test-server-controller.spec.js +489 -0
  201. package/esm/core/src/tests/test-server-expressions.spec.d.ts +1 -0
  202. package/esm/core/src/tests/test-server-expressions.spec.js +178 -0
  203. package/esm/core/src/tests/test-server-method-on-entity.spec.d.ts +1 -0
  204. package/esm/core/src/tests/test-server-method-on-entity.spec.js +306 -0
  205. package/esm/core/src/tests/test-sql-expression.spec.d.ts +5 -0
  206. package/esm/core/src/tests/test-sql-expression.spec.js +205 -0
  207. package/esm/core/src/tests/test-sql.spec.d.ts +1 -0
  208. package/esm/core/src/tests/test-sql.spec.js +170 -0
  209. package/esm/core/src/tests/test-subscribe.spec.d.ts +1 -0
  210. package/esm/core/src/tests/test-subscribe.spec.js +135 -0
  211. package/esm/core/src/tests/test-type-recovery.spec.d.ts +1 -0
  212. package/esm/core/src/tests/test-type-recovery.spec.js +49 -0
  213. package/esm/core/src/tests/test-where-api.spec.d.ts +1 -0
  214. package/esm/core/src/tests/test-where-api.spec.js +434 -0
  215. package/esm/core/src/tests/testHelper.spec.d.ts +36 -0
  216. package/esm/core/src/tests/testHelper.spec.js +226 -0
  217. package/esm/core/src/tests/testModel/models.d.ts +16 -0
  218. package/esm/core/src/tests/testModel/models.js +25 -0
  219. package/esm/core/src/validators.d.ts +14 -0
  220. package/esm/core/src/validators.js +33 -0
  221. package/{valueConverters.d.ts → esm/core/src/valueConverters.d.ts} +13 -12
  222. package/esm/core/src/valueConverters.js +197 -0
  223. package/esm/core/urlBuilder.d.ts +6 -0
  224. package/esm/core/urlBuilder.js +20 -0
  225. package/esm/graphql.js +27 -27
  226. package/esm/postgres/schema-builder.js +4 -4
  227. package/esm/src/remult3/RepositoryImplementation.d.ts +1 -1
  228. package/esm/src/remult3/RepositoryImplementation.js +27 -4
  229. package/esm/src/shared-tests/db-tests.db-tests.js +57 -0
  230. package/esm/test-servers/shared/Task.d.ts +9 -0
  231. package/esm/test-servers/shared/Task.js +32 -0
  232. package/esm/test.d.ts +5 -0
  233. package/esm/test.js +6 -0
  234. package/package.json +1 -1
  235. package/src/remult3/RepositoryImplementation.d.ts +1 -1
  236. package/src/remult3/RepositoryImplementation.js +88 -63
  237. package/src/shared-tests/db-tests.db-tests.js +97 -0
  238. package/esm/src/id-entity.d.ts +0 -4
  239. package/esm/src/id-entity.js +0 -8
  240. package/postgres/postgresColumnSyntax.d.ts +0 -2
  241. package/postgres/postgresColumnSyntax.js +0 -34
  242. package/remult-middleware.d.ts +0 -2
  243. package/remult-middleware.js +0 -70
  244. package/server/register-actions-on-server.d.ts +0 -3
  245. package/server/register-actions-on-server.js +0 -50
  246. package/server/register-entities-on-server.d.ts +0 -3
  247. package/server/register-entities-on-server.js +0 -19
  248. package/src/backend-tests/my-test.backend-spec.js +0 -217
  249. package/src/backend-tests/test-http-server.backend-spec.d.ts +0 -6
  250. package/src/backend-tests/test-http-server.backend-spec.js +0 -342
  251. package/src/id-entity.d.ts +0 -4
  252. package/src/id-entity.js +0 -17
  253. package/valueConverters.js +0 -168
@@ -0,0 +1,59 @@
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
+ }
@@ -0,0 +1,145 @@
1
+ import { FieldMetadata, Sort, FieldsMetadata, EntityOrderBy, EntityFilter, FindOptions, Repository } from "remult";
2
+ import { FieldCollection } from "./column-collection";
3
+ import { DataAreaSettings, IDataAreaSettings } from "./data-area-settings";
4
+ import { DataControlInfo, DataControlSettings } from "./data-control-interfaces";
5
+ import { FilterHelper } from "./filter-helper";
6
+ export declare class GridSettings<rowType> {
7
+ private repository;
8
+ settings?: IDataSettings<rowType> | undefined;
9
+ undoChanges(r: rowType): void;
10
+ constructor(repository: Repository<rowType>, settings?: IDataSettings<rowType> | undefined);
11
+ currList: DataControlSettings[];
12
+ origList: DataControlSettings[];
13
+ origNumOfColumns: number;
14
+ showSelectColumn: boolean;
15
+ initOrigList(): void;
16
+ userChooseColumns(): void;
17
+ resetColumns(): void;
18
+ deleteCol(c: DataControlSettings): void;
19
+ addNewRow(): void;
20
+ noam: string;
21
+ addArea(settings: IDataAreaSettings<rowType>): DataAreaSettings<rowType>;
22
+ currentRow: rowType;
23
+ setCurrentRow(row: rowType): void;
24
+ nextRow(): void;
25
+ previousRowAllowed(): boolean;
26
+ previousRow(): void;
27
+ deleteCurentRow(): void;
28
+ currentRowAsRestListItemRow(): undefined;
29
+ getRowHelper(item: rowType): any;
30
+ cancelCurrentRowChanges(): void;
31
+ deleteCurrentRowAllowed(): undefined;
32
+ currentRowChanged(): undefined;
33
+ saveCurrentRow(): void;
34
+ allowUpdate: boolean;
35
+ allowInsert: boolean;
36
+ allowDelete: boolean;
37
+ showDataArea: boolean;
38
+ _buttons: RowButton<any>[];
39
+ rowClass?: (row: any) => string;
40
+ onSavingRow?: (row: any) => Promise<any> | any;
41
+ onValidate?: (row: rowType) => Promise<any> | any;
42
+ onEnterRow: (row: rowType) => void;
43
+ onNewRow: (row: rowType) => void;
44
+ _doSavingRow(s: rowType): any;
45
+ caption: string;
46
+ filterHelper: FilterHelper<rowType>;
47
+ columns: FieldCollection<rowType>;
48
+ page: number;
49
+ nextPage(): Promise<any>;
50
+ previousPage(): Promise<any> | undefined;
51
+ firstPage(): Promise<any>;
52
+ selectedRows: rowType[];
53
+ selectedChanged(row: rowType): void;
54
+ lastSelectedRowWithShift: rowType;
55
+ clickOnselectCheckboxFor(row: rowType, shift: boolean): void;
56
+ isSelected(row: rowType): boolean;
57
+ selectAllIntermitent(): boolean;
58
+ selectAllChecked(): boolean;
59
+ private _selectedAll;
60
+ selectAllChanged(e: {
61
+ checked: boolean;
62
+ }): void;
63
+ rowsPerPage: number;
64
+ rowsPerPageOptions: number[];
65
+ get(options: FindOptions<rowType>): Promise<any>;
66
+ _currentOrderBy: Sort;
67
+ sort(column: FieldMetadata): void;
68
+ sortedAscending(column: FieldMetadata): boolean;
69
+ sortedDescending(column: FieldMetadata): boolean;
70
+ totalRows: number;
71
+ reloadData(): Promise<any>;
72
+ private restList;
73
+ _internalBuildFindOptions(): Promise<FindOptions<rowType>>;
74
+ getFilterWithSelectedRows(): Promise<FindOptions<rowType>>;
75
+ get items(): rowType[];
76
+ }
77
+ export interface IDataSettings<rowType> {
78
+ rowsLoaded?: (items: rowType[]) => void;
79
+ allowUpdate?: boolean;
80
+ allowInsert?: boolean;
81
+ allowDelete?: boolean;
82
+ allowCrud?: boolean;
83
+ showDataArea?: boolean;
84
+ showPagination?: boolean;
85
+ allowSelection?: boolean;
86
+ confirmDelete?: (r: rowType) => Promise<boolean>;
87
+ columnSettings?: (row: FieldsMetadata<rowType>) => DataControlInfo<rowType>[];
88
+ areas?: {
89
+ [areaKey: string]: DataControlInfo<rowType>[];
90
+ };
91
+ rowCssClass?: (row: rowType) => string;
92
+ rowButtons?: RowButton<rowType>[];
93
+ gridButtons?: GridButton[];
94
+ /** filters the data
95
+ * @example
96
+ * await taskRepo.find({where: { completed:false }})
97
+ * @see For more usage examples see [EntityFilter](https://remult.dev/docs/entityFilter.html)
98
+ */
99
+ where?: EntityFilter<rowType> | (() => EntityFilter<rowType> | Promise<EntityFilter<rowType>>);
100
+ /** Determines the order in which the result will be sorted in
101
+ * @see See [EntityOrderBy](https://remult-ts.github.io/guide/ref__entityorderby) for more examples on how to sort
102
+ */
103
+ orderBy?: EntityOrderBy<rowType>;
104
+ /** Determines the number of rows returned by the request, on the browser the default is 25 rows
105
+ * @example
106
+ * this.products = await this.remult.repo(Products).gridSettings({
107
+ * rowsInPage:10,
108
+ * page:2
109
+ * })
110
+ */
111
+ rowsInPage?: number;
112
+ /** Determines the page number that will be used to extract the data
113
+ * @example
114
+ * this.products = await this.remult.repo(Products).gridSettings({
115
+ * rowsInPage:10,
116
+ * page:2
117
+ * })
118
+ */
119
+ page?: number;
120
+ __customFindData?: any;
121
+ knowTotalRows?: boolean;
122
+ saving?: (r: rowType) => void;
123
+ validation?: (r: rowType) => void;
124
+ enterRow?: (r: rowType) => void;
125
+ newRow?: (r: rowType) => void;
126
+ numOfColumnsInGrid?: number;
127
+ caption?: string;
128
+ }
129
+ export interface RowButton<rowType> {
130
+ name?: string;
131
+ visible?: (r: rowType) => boolean;
132
+ click?: (r: rowType) => void;
133
+ showInLine?: boolean;
134
+ textInMenu?: (string | ((row: rowType) => string));
135
+ icon?: string;
136
+ cssClass?: (string | ((row: rowType) => string));
137
+ }
138
+ export interface GridButton {
139
+ name?: string;
140
+ visible?: () => boolean;
141
+ click?: () => void;
142
+ textInMenu?: () => string;
143
+ icon?: string;
144
+ cssClass?: (string | (() => string));
145
+ }
@@ -0,0 +1,387 @@
1
+ import { Sort, getEntityRef, Filter } from "remult";
2
+ import { FieldCollection } from "./column-collection";
3
+ import { DataAreaSettings } from "./data-area-settings";
4
+ import { DataList } from "./dataList";
5
+ import { FilterHelper } from "./filter-helper";
6
+ export class GridSettings {
7
+ repository;
8
+ settings;
9
+ undoChanges(r) {
10
+ let helper = this.getRowHelper(r);
11
+ helper.undoChanges();
12
+ if (helper.isNew())
13
+ this.restList.removeItem(r);
14
+ }
15
+ constructor(repository, settings) {
16
+ this.repository = repository;
17
+ this.settings = settings;
18
+ if (!settings)
19
+ this.settings = settings = {};
20
+ this.restList = new DataList(repository);
21
+ if (repository) {
22
+ this.filterHelper.filterRow = repository.create();
23
+ repository.addEventListener({
24
+ validating: async (entity) => {
25
+ if (this.onValidate)
26
+ await this.onValidate(entity);
27
+ if (this.onSavingRow)
28
+ await this.onSavingRow(entity);
29
+ }
30
+ });
31
+ }
32
+ this.columns = new FieldCollection(() => this.currentRow, () => this.allowUpdate, this.filterHelper, () => this.currentRow ? true : false, (a, b) => this.repository.getEntityRef(a).fields.find(b));
33
+ if (settings) {
34
+ if (settings.columnSettings) {
35
+ let x = settings.columnSettings(repository.metadata.fields);
36
+ this.columns.add(...x);
37
+ }
38
+ if (settings.allowCrud !== undefined) {
39
+ if (settings.allowUpdate === undefined)
40
+ settings.allowUpdate = settings.allowCrud;
41
+ if (settings.allowDelete === undefined)
42
+ settings.allowDelete = settings.allowCrud;
43
+ if (settings.allowInsert === undefined)
44
+ settings.allowInsert = settings.allowCrud;
45
+ }
46
+ if (settings.allowUpdate)
47
+ this.allowUpdate = true;
48
+ if (settings.allowDelete)
49
+ this.allowDelete = true;
50
+ if (settings.allowInsert)
51
+ this.allowInsert = true;
52
+ if (settings.showDataArea)
53
+ this.showDataArea = settings.showDataArea;
54
+ if (settings.showPagination === undefined)
55
+ settings.showPagination = true;
56
+ if (settings.numOfColumnsInGrid != undefined)
57
+ this.columns.numOfColumnsInGrid = settings.numOfColumnsInGrid;
58
+ if (settings.rowButtons)
59
+ this._buttons = settings.rowButtons;
60
+ if (settings.rowCssClass)
61
+ this.rowClass = settings.rowCssClass;
62
+ if (settings.saving)
63
+ this.onSavingRow = settings.saving;
64
+ if (settings.enterRow)
65
+ this.onEnterRow = settings.enterRow;
66
+ if (settings.newRow)
67
+ this.onNewRow = settings.newRow;
68
+ if (settings.validation)
69
+ this.onValidate = settings.validation;
70
+ if (settings.caption)
71
+ this.caption = settings.caption;
72
+ if (!this.caption && repository) {
73
+ this.caption = repository.metadata.caption;
74
+ }
75
+ if (settings.page)
76
+ this.page = settings.page;
77
+ if (settings.rowsInPage)
78
+ this.rowsPerPage = settings.rowsInPage;
79
+ else
80
+ this.rowsPerPage = 25;
81
+ if (this.rowsPerPageOptions.indexOf(this.rowsPerPage) < 0) {
82
+ this.rowsPerPageOptions.push(this.rowsPerPage);
83
+ this.rowsPerPageOptions.sort((a, b) => +a - +b);
84
+ }
85
+ if (settings.orderBy)
86
+ this._currentOrderBy = Sort.translateOrderByToSort(this.repository.metadata, this.settings.orderBy);
87
+ }
88
+ }
89
+ currList;
90
+ origList;
91
+ origNumOfColumns;
92
+ showSelectColumn = false;
93
+ initOrigList() {
94
+ if (!this.origList) {
95
+ this.origList = [];
96
+ this.origNumOfColumns = this.columns.numOfColumnsInGrid;
97
+ this.origList.push(...this.columns.items);
98
+ }
99
+ }
100
+ userChooseColumns() {
101
+ this.initOrigList();
102
+ if (!this.currList) {
103
+ this.resetColumns();
104
+ }
105
+ this.showSelectColumn = !this.showSelectColumn;
106
+ }
107
+ resetColumns() {
108
+ this.currList = [];
109
+ this.columns.items = this.currList;
110
+ this.columns.numOfColumnsInGrid = this.origNumOfColumns;
111
+ for (let i = 0; i < this.origList.length; i++) {
112
+ // if (i < this.columns.numOfColumnsInGrid)
113
+ this.currList.push(this.origList[i]);
114
+ }
115
+ }
116
+ deleteCol(c) {
117
+ this.columns.deleteCol(c);
118
+ this.columns.numOfColumnsInGrid--;
119
+ }
120
+ addNewRow() {
121
+ let r = this.restList.add();
122
+ if (this.onNewRow)
123
+ this.onNewRow(r);
124
+ this.setCurrentRow(r);
125
+ }
126
+ noam;
127
+ addArea(settings) {
128
+ let col = new FieldCollection(() => this.currentRow, () => this.allowUpdate, this.filterHelper, () => this.currentRow ? true : false, (a, b) => this.repository.getEntityRef(a).fields.find(b));
129
+ col.numOfColumnsInGrid = 0;
130
+ return new DataAreaSettings(settings, col, this.repository.metadata.fields);
131
+ }
132
+ currentRow;
133
+ setCurrentRow(row) {
134
+ if (this.currentRow != row) {
135
+ this.currentRow = row;
136
+ if (this.onEnterRow && row) {
137
+ this.onEnterRow(row);
138
+ }
139
+ }
140
+ }
141
+ nextRow() {
142
+ if (!this.currentRow && this.items.length > 0)
143
+ this.setCurrentRow(this.items[0]);
144
+ if (this.currentRow) {
145
+ let currentRowPosition = this.items.indexOf(this.currentRow);
146
+ if (currentRowPosition < this.items.length - 1)
147
+ this.setCurrentRow(this.items[currentRowPosition + 1]);
148
+ else
149
+ this.nextPage().then(() => {
150
+ if (this.items.length > 0)
151
+ this.setCurrentRow(this.items[0]);
152
+ });
153
+ }
154
+ }
155
+ previousRowAllowed() {
156
+ return this.currentRow && this.items.indexOf(this.currentRow) > 0 || this.page > 1;
157
+ }
158
+ previousRow() {
159
+ if (!this.previousRowAllowed())
160
+ return;
161
+ let currentRowPosition = this.items.indexOf(this.currentRow);
162
+ if (currentRowPosition > 0)
163
+ this.setCurrentRow(this.items[currentRowPosition - 1]);
164
+ else {
165
+ if (this.page > 1)
166
+ this.previousPage().then(() => {
167
+ if (this.items.length > 0)
168
+ this.setCurrentRow(this.items[this.items.length - 1]);
169
+ });
170
+ }
171
+ }
172
+ deleteCurentRow() {
173
+ if (!this.deleteCurrentRowAllowed)
174
+ return;
175
+ this.currentRowAsRestListItemRow().delete();
176
+ }
177
+ currentRowAsRestListItemRow() {
178
+ if (!this.currentRow)
179
+ return undefined;
180
+ this.getRowHelper(this.currentRow);
181
+ }
182
+ getRowHelper(item) {
183
+ return this.repository.getEntityRef(item);
184
+ }
185
+ cancelCurrentRowChanges() {
186
+ if (this.currentRowAsRestListItemRow() && this.currentRowAsRestListItemRow())
187
+ this.currentRowAsRestListItemRow().undoChanges();
188
+ }
189
+ deleteCurrentRowAllowed() {
190
+ return this.currentRowAsRestListItemRow() && this.currentRowAsRestListItemRow().delete && this.allowDelete && !this.currentRowAsRestListItemRow().isNew();
191
+ }
192
+ currentRowChanged() {
193
+ return this.currentRowAsRestListItemRow() && this.currentRowAsRestListItemRow().wasChanged();
194
+ }
195
+ saveCurrentRow() {
196
+ if (this.currentRowAsRestListItemRow() && this.currentRowAsRestListItemRow().save)
197
+ this.currentRowAsRestListItemRow().save();
198
+ }
199
+ allowUpdate = false;
200
+ allowInsert = false;
201
+ allowDelete = false;
202
+ showDataArea = false;
203
+ _buttons = [];
204
+ rowClass;
205
+ onSavingRow;
206
+ onValidate;
207
+ onEnterRow;
208
+ onNewRow;
209
+ _doSavingRow(s) {
210
+ return getEntityRef(s).save();
211
+ }
212
+ caption;
213
+ filterHelper = new FilterHelper(() => {
214
+ this.page = 1;
215
+ this.reloadData();
216
+ }, this.repository);
217
+ columns;
218
+ page = 1;
219
+ nextPage() {
220
+ this.page++;
221
+ return this.reloadData();
222
+ }
223
+ previousPage() {
224
+ if (this.page <= 1)
225
+ return;
226
+ this.page--;
227
+ return this.reloadData();
228
+ }
229
+ firstPage() {
230
+ this.page = 1;
231
+ return this.reloadData();
232
+ }
233
+ selectedRows = [];
234
+ selectedChanged(row) {
235
+ if (this.isSelected(row)) {
236
+ this.selectedRows.splice(this.selectedRows.indexOf(row), 1);
237
+ this._selectedAll = false;
238
+ }
239
+ else {
240
+ this.selectedRows.push(row);
241
+ this._selectedAll = this.selectedRows.length == this.totalRows;
242
+ }
243
+ }
244
+ lastSelectedRowWithShift;
245
+ clickOnselectCheckboxFor(row, shift) {
246
+ if (shift) {
247
+ if (!this.lastSelectedRowWithShift) {
248
+ this.lastSelectedRowWithShift = row;
249
+ }
250
+ else {
251
+ let found = false;
252
+ for (const rule of this.items) {
253
+ if (found) {
254
+ if (rule == row || rule == this.lastSelectedRowWithShift) {
255
+ this.lastSelectedRowWithShift = undefined;
256
+ return;
257
+ }
258
+ else
259
+ this.selectedChanged(rule);
260
+ }
261
+ else
262
+ found = rule == row || rule == this.lastSelectedRowWithShift;
263
+ }
264
+ }
265
+ }
266
+ this.lastSelectedRowWithShift = row;
267
+ }
268
+ isSelected(row) {
269
+ return this.selectedRows.indexOf(row) >= 0;
270
+ }
271
+ selectAllIntermitent() {
272
+ return this.selectedRows.length > 0 && (this.selectedRows.length != this.items.length || !this._selectedAll);
273
+ }
274
+ selectAllChecked() {
275
+ return this.selectedRows.length > 0 && this.selectedRows.length == this.items.length && this._selectedAll;
276
+ }
277
+ _selectedAll = false;
278
+ selectAllChanged(e) {
279
+ this.selectedRows.splice(0);
280
+ if (e.checked) {
281
+ this.selectedRows.push(...this.items);
282
+ this._selectedAll = true;
283
+ }
284
+ else
285
+ this._selectedAll = false;
286
+ }
287
+ rowsPerPage;
288
+ rowsPerPageOptions = [10, 25, 50, 100];
289
+ get(options) {
290
+ if (options.where)
291
+ this.settings.where = () => options.where;
292
+ if (options.orderBy)
293
+ this._currentOrderBy = Sort.translateOrderByToSort(this.repository.metadata, options.orderBy);
294
+ this.page = 1;
295
+ return this.reloadData();
296
+ }
297
+ _currentOrderBy;
298
+ sort(column) {
299
+ let done = false;
300
+ if (this._currentOrderBy && this._currentOrderBy.Segments.length > 0) {
301
+ if (this._currentOrderBy.Segments[0].field.key == column.key) {
302
+ this._currentOrderBy.Segments[0].isDescending = !this._currentOrderBy.Segments[0].isDescending;
303
+ done = true;
304
+ }
305
+ }
306
+ if (!done)
307
+ this._currentOrderBy = new Sort({ field: column });
308
+ this.reloadData();
309
+ }
310
+ sortedAscending(column) {
311
+ if (!this._currentOrderBy)
312
+ return false;
313
+ if (!column)
314
+ return false;
315
+ return this._currentOrderBy.Segments.length > 0 &&
316
+ this._currentOrderBy.Segments[0].field.key == column.key &&
317
+ !this._currentOrderBy.Segments[0].isDescending;
318
+ }
319
+ sortedDescending(column) {
320
+ if (!this._currentOrderBy)
321
+ return false;
322
+ if (!column)
323
+ return false;
324
+ return this._currentOrderBy.Segments.length > 0 &&
325
+ this._currentOrderBy.Segments[0].field.key == column.key &&
326
+ !!this._currentOrderBy.Segments[0].isDescending;
327
+ }
328
+ totalRows;
329
+ async reloadData() {
330
+ let opt = await this._internalBuildFindOptions();
331
+ this.columns.autoGenerateColumnsBasedOnData(this.repository.metadata);
332
+ let result = this.restList.get(opt).then((rows) => {
333
+ this.selectedRows = this.selectedRows.map(s => {
334
+ let id = getEntityRef(s).getId();
335
+ let r = rows.find(r => getEntityRef(r).getId() == id);
336
+ if (r !== undefined)
337
+ return r;
338
+ return s;
339
+ });
340
+ if (this.restList.items.length == 0) {
341
+ this.setCurrentRow(undefined);
342
+ }
343
+ else {
344
+ this.setCurrentRow(this.restList.items[0]);
345
+ }
346
+ if (this.settings?.rowsLoaded) {
347
+ this.settings?.rowsLoaded(this.restList.items);
348
+ }
349
+ return this.restList;
350
+ });
351
+ if (this.settings && this.settings.knowTotalRows) {
352
+ this.restList.count(opt.where).then(x => {
353
+ this.totalRows = x;
354
+ });
355
+ }
356
+ return result;
357
+ }
358
+ ;
359
+ restList;
360
+ async _internalBuildFindOptions() {
361
+ let opt = {};
362
+ if (this.settings.where) {
363
+ opt.where = await Filter.resolve(this.settings.where);
364
+ }
365
+ if (this.settings.orderBy)
366
+ opt.orderBy = this.settings.orderBy;
367
+ if (this._currentOrderBy)
368
+ opt.orderBy = this._currentOrderBy.toEntityOrderBy();
369
+ opt.limit = this.rowsPerPage;
370
+ if (this.page > 1)
371
+ opt.page = this.page;
372
+ this.filterHelper.addToFindOptions(opt);
373
+ return opt;
374
+ }
375
+ async getFilterWithSelectedRows() {
376
+ let r = await this._internalBuildFindOptions();
377
+ if (this.selectedRows.length > 0 && !this._selectedAll) {
378
+ r.where = { $and: [r.where, this.repository.metadata.idMetadata.createIdInFilter(this.selectedRows)] };
379
+ }
380
+ return r;
381
+ }
382
+ get items() {
383
+ if (this.restList)
384
+ return this.restList.items;
385
+ return undefined;
386
+ }
387
+ }
@@ -0,0 +1,4 @@
1
+ export * from './data-control-interfaces';
2
+ export * from './data-area-settings';
3
+ export * from './grid-settings';
4
+ export * from './column-collection';
@@ -0,0 +1,4 @@
1
+ export * from './data-control-interfaces';
2
+ export * from './data-area-settings';
3
+ export * from './grid-settings';
4
+ export * from './column-collection';
@@ -0,0 +1,4 @@
1
+ import { dataControlAugmenter } from '../../interfaces';
2
+ export declare class RemultAngularPluginsService {
3
+ dataControlAugmenter: dataControlAugmenter;
4
+ }
@@ -0,0 +1,3 @@
1
+ export class RemultAngularPluginsService {
2
+ dataControlAugmenter = () => { };
3
+ }
@@ -0,0 +1,49 @@
1
+ import { ComponentFactoryResolver, ViewContainerRef } from '@angular/core';
2
+ import { FloatLabelType } from '@angular/material/form-field';
3
+ import { ValueListItem, FieldMetadata, FieldRef } from 'remult';
4
+ import { DataControlSettings, FieldCollection } from '../../../interfaces';
5
+ import { RemultAngularPluginsService } from '../RemultAngularPluginsService';
6
+ export declare class DataControl2Component {
7
+ private plugin;
8
+ private componentFactoryResolver;
9
+ map: DataControlSettings;
10
+ set field(value: FieldMetadata | FieldRef<any, any>);
11
+ constructor(plugin: RemultAngularPluginsService, componentFactoryResolver: ComponentFactoryResolver);
12
+ theId: ViewContainerRef;
13
+ done: boolean;
14
+ initCustomComponent(): void;
15
+ record: any;
16
+ notReadonly: boolean;
17
+ settings: FieldCollection;
18
+ showDescription(): any;
19
+ getDropDown(): ValueListItem[];
20
+ showClick(): boolean;
21
+ click(): void;
22
+ getClickIcon(): string;
23
+ dataControlStyle(): string;
24
+ dummy: {
25
+ inputValue: string;
26
+ };
27
+ _getColumn(): any;
28
+ _getEditable(): boolean;
29
+ ngOnChanges(): void;
30
+ isSelect(): boolean;
31
+ showTextBox(): boolean;
32
+ showCheckbox(): boolean;
33
+ getError(): any;
34
+ getStyle(): {
35
+ display: string;
36
+ width?: undefined;
37
+ } | {
38
+ width: string;
39
+ display?: undefined;
40
+ } | {
41
+ display?: undefined;
42
+ width?: undefined;
43
+ };
44
+ getFloatLabel(): FloatLabelType;
45
+ ngErrorStateMatches: {
46
+ parent: DataControl2Component;
47
+ isErrorState(): boolean;
48
+ };
49
+ }