@solidev/data 0.0.1-alpha.0

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 (167) hide show
  1. package/README.md +7 -0
  2. package/esm2020/lib/auth/auth-interceptor.service.mjs +90 -0
  3. package/esm2020/lib/auth/auth.service.mjs +125 -0
  4. package/esm2020/lib/auth/jwt.mjs +21 -0
  5. package/esm2020/lib/data/data-backend.mjs +106 -0
  6. package/esm2020/lib/data/data-collection.mjs +109 -0
  7. package/esm2020/lib/data/data-collection.mock.mjs +39 -0
  8. package/esm2020/lib/data/data-model.mjs +287 -0
  9. package/esm2020/lib/data/data-parameters.mjs +34 -0
  10. package/esm2020/lib/data/data-query.mjs +147 -0
  11. package/esm2020/lib/data/data-query.mock.mjs +46 -0
  12. package/esm2020/lib/data/fields/base.mjs +142 -0
  13. package/esm2020/lib/data/fields/boolean.mjs +38 -0
  14. package/esm2020/lib/data/fields/datetime.mjs +124 -0
  15. package/esm2020/lib/data/fields/index.mjs +7 -0
  16. package/esm2020/lib/data/fields/numbers.mjs +38 -0
  17. package/esm2020/lib/data/fields/primaryfield.mjs +9 -0
  18. package/esm2020/lib/data/fields/relations.mjs +53 -0
  19. package/esm2020/lib/data/fields/stringfields.mjs +71 -0
  20. package/esm2020/lib/dispedit/choice.pipe.mjs +39 -0
  21. package/esm2020/lib/dispedit/dispedit/dispedit.component.mjs +475 -0
  22. package/esm2020/lib/dispedit/dispedit/dispedit.constants.mjs +2 -0
  23. package/esm2020/lib/dispedit/factor.pipe.mjs +48 -0
  24. package/esm2020/lib/dispedit/factorc.pipe.mjs +50 -0
  25. package/esm2020/lib/dispedit/fkselect/fkselect.component.mjs +142 -0
  26. package/esm2020/lib/dispedit/flags/flags.component.mjs +140 -0
  27. package/esm2020/lib/dispedit/m2mselect/m2mselect.component.mjs +318 -0
  28. package/esm2020/lib/dispedit/richedit/richedit.component.mjs +94 -0
  29. package/esm2020/lib/dispedit/sdelete/sdelete.component.mjs +46 -0
  30. package/esm2020/lib/messages/message-zone/message-zone.component.mjs +57 -0
  31. package/esm2020/lib/messages/message.service.mjs +151 -0
  32. package/esm2020/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.mjs +34 -0
  33. package/esm2020/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.mjs +63 -0
  34. package/esm2020/lib/modellist/model-list-fields/model-list-fields.mjs +225 -0
  35. package/esm2020/lib/modellist/model-list-filters/filters/filtertypes.mjs +3 -0
  36. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.mjs +108 -0
  37. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.mjs +28 -0
  38. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.mjs +24 -0
  39. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.mjs +9 -0
  40. package/esm2020/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.mjs +40 -0
  41. package/esm2020/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.mjs +14 -0
  42. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.mjs +40 -0
  43. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.mjs +14 -0
  44. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.mjs +21 -0
  45. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.mjs +14 -0
  46. package/esm2020/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.mjs +21 -0
  47. package/esm2020/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.mjs +14 -0
  48. package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.mjs +24 -0
  49. package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.mjs +63 -0
  50. package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.mjs +16 -0
  51. package/esm2020/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.mjs +46 -0
  52. package/esm2020/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.mjs +49 -0
  53. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.mjs +57 -0
  54. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.mjs +35 -0
  55. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.mjs +49 -0
  56. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.mjs +15 -0
  57. package/esm2020/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.mjs +40 -0
  58. package/esm2020/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.mjs +14 -0
  59. package/esm2020/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.mjs +21 -0
  60. package/esm2020/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.mjs +14 -0
  61. package/esm2020/lib/modellist/model-list-filters/model-list-filter.mjs +145 -0
  62. package/esm2020/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.mjs +50 -0
  63. package/esm2020/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.mjs +30 -0
  64. package/esm2020/lib/modellist/model-list-filters/model-list-filters.mjs +80 -0
  65. package/esm2020/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.mjs +70 -0
  66. package/esm2020/lib/modellist/model-list-paginator/model-list-paginator.mjs +47 -0
  67. package/esm2020/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.mjs +49 -0
  68. package/esm2020/lib/modellist/model-list-sorter/model-list-sorter.mjs +116 -0
  69. package/esm2020/lib/modellist/model-list.service.mjs +135 -0
  70. package/esm2020/lib/routing/breadcrumb/breadcrumb.component.mjs +142 -0
  71. package/esm2020/lib/routing/routing.mjs +57 -0
  72. package/esm2020/lib/uploader/index.mjs +6 -0
  73. package/esm2020/lib/uploader/interfaces.mjs +8 -0
  74. package/esm2020/lib/uploader/ng-file-drop.directive.mjs +81 -0
  75. package/esm2020/lib/uploader/ng-file-select.directive.mjs +51 -0
  76. package/esm2020/lib/uploader/ngx-uploader.class.mjs +308 -0
  77. package/esm2020/lib/uploader/ngx-uploader.module.mjs +17 -0
  78. package/esm2020/lib/utils/slugify.mjs +16 -0
  79. package/esm2020/lib/utils/tab-memory.service.mjs +71 -0
  80. package/esm2020/public-api.mjs +51 -0
  81. package/esm2020/solidev-data.mjs +5 -0
  82. package/fesm2015/solidev-data.mjs +5411 -0
  83. package/fesm2015/solidev-data.mjs.map +1 -0
  84. package/fesm2020/solidev-data.mjs +5358 -0
  85. package/fesm2020/solidev-data.mjs.map +1 -0
  86. package/index.d.ts +5 -0
  87. package/lib/auth/auth-interceptor.service.d.ts +17 -0
  88. package/lib/auth/auth.service.d.ts +43 -0
  89. package/lib/auth/jwt.d.ts +22 -0
  90. package/lib/data/data-backend.d.ts +47 -0
  91. package/lib/data/data-collection.d.ts +87 -0
  92. package/lib/data/data-collection.mock.d.ts +19 -0
  93. package/lib/data/data-model.d.ts +93 -0
  94. package/lib/data/data-parameters.d.ts +26 -0
  95. package/lib/data/data-query.d.ts +101 -0
  96. package/lib/data/data-query.mock.d.ts +25 -0
  97. package/lib/data/fields/base.d.ts +116 -0
  98. package/lib/data/fields/boolean.d.ts +9 -0
  99. package/lib/data/fields/datetime.d.ts +39 -0
  100. package/lib/data/fields/index.d.ts +6 -0
  101. package/lib/data/fields/numbers.d.ts +35 -0
  102. package/lib/data/fields/primaryfield.d.ts +8 -0
  103. package/lib/data/fields/relations.d.ts +45 -0
  104. package/lib/data/fields/stringfields.d.ts +50 -0
  105. package/lib/dispedit/choice.pipe.d.ts +8 -0
  106. package/lib/dispedit/dispedit/dispedit.component.d.ts +182 -0
  107. package/lib/dispedit/dispedit/dispedit.constants.d.ts +6 -0
  108. package/lib/dispedit/factor.pipe.d.ts +12 -0
  109. package/lib/dispedit/factorc.pipe.d.ts +11 -0
  110. package/lib/dispedit/fkselect/fkselect.component.d.ts +43 -0
  111. package/lib/dispedit/flags/flags.component.d.ts +40 -0
  112. package/lib/dispedit/m2mselect/m2mselect.component.d.ts +120 -0
  113. package/lib/dispedit/richedit/richedit.component.d.ts +31 -0
  114. package/lib/dispedit/sdelete/sdelete.component.d.ts +27 -0
  115. package/lib/messages/message-zone/message-zone.component.d.ts +14 -0
  116. package/lib/messages/message.service.d.ts +59 -0
  117. package/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.d.ts +15 -0
  118. package/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.d.ts +19 -0
  119. package/lib/modellist/model-list-fields/model-list-fields.d.ts +67 -0
  120. package/lib/modellist/model-list-filters/filters/filtertypes.d.ts +1 -0
  121. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.d.ts +30 -0
  122. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.d.ts +22 -0
  123. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.d.ts +10 -0
  124. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.d.ts +8 -0
  125. package/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.d.ts +15 -0
  126. package/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.d.ts +4 -0
  127. package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.d.ts +15 -0
  128. package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.d.ts +4 -0
  129. package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.d.ts +11 -0
  130. package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.d.ts +4 -0
  131. package/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.d.ts +11 -0
  132. package/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.d.ts +4 -0
  133. package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.d.ts +35 -0
  134. package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.d.ts +25 -0
  135. package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.d.ts +18 -0
  136. package/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.d.ts +17 -0
  137. package/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.d.ts +19 -0
  138. package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.d.ts +17 -0
  139. package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.d.ts +16 -0
  140. package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.d.ts +17 -0
  141. package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.d.ts +6 -0
  142. package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.d.ts +16 -0
  143. package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.d.ts +4 -0
  144. package/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.d.ts +11 -0
  145. package/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.d.ts +4 -0
  146. package/lib/modellist/model-list-filters/model-list-filter.d.ts +52 -0
  147. package/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.d.ts +9 -0
  148. package/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.d.ts +13 -0
  149. package/lib/modellist/model-list-filters/model-list-filters.d.ts +15 -0
  150. package/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.d.ts +23 -0
  151. package/lib/modellist/model-list-paginator/model-list-paginator.d.ts +16 -0
  152. package/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.d.ts +22 -0
  153. package/lib/modellist/model-list-sorter/model-list-sorter.d.ts +61 -0
  154. package/lib/modellist/model-list.service.d.ts +83 -0
  155. package/lib/routing/breadcrumb/breadcrumb.component.d.ts +42 -0
  156. package/lib/routing/routing.d.ts +64 -0
  157. package/lib/uploader/index.d.ts +5 -0
  158. package/lib/uploader/interfaces.d.ts +67 -0
  159. package/lib/uploader/ng-file-drop.directive.d.ts +22 -0
  160. package/lib/uploader/ng-file-select.directive.d.ts +19 -0
  161. package/lib/uploader/ngx-uploader.class.d.ts +35 -0
  162. package/lib/uploader/ngx-uploader.module.d.ts +8 -0
  163. package/lib/utils/slugify.d.ts +1 -0
  164. package/lib/utils/tab-memory.service.d.ts +29 -0
  165. package/package.json +35 -0
  166. package/public-api.d.ts +47 -0
  167. package/src/lib/data/README.md +35 -0
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@solidev/data" />
5
+ export * from './public-api';
@@ -0,0 +1,17 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
3
+ import { AuthServiceBase } from './auth.service';
4
+ import * as i0 from "@angular/core";
5
+ export declare const DATA_AUTH_SERVICE: InjectionToken<AuthServiceBase<any, any, any>>;
6
+ export declare class AuthInterceptor implements HttpInterceptor {
7
+ private _auth;
8
+ private _apiUrl;
9
+ private _isRefreshing;
10
+ private _refreshTokenSubject;
11
+ constructor(_auth: AuthServiceBase<any, any, any>, _apiUrl: string);
12
+ intercept(req: HttpRequest<any>, next: HttpHandler): import("rxjs").Observable<import("@angular/common/http").HttpEvent<any>>;
13
+ private _handle401Error;
14
+ private _addToken;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<AuthInterceptor, never>;
16
+ static ɵprov: i0.ɵɵInjectableDeclaration<AuthInterceptor>;
17
+ }
@@ -0,0 +1,43 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { IJwtBaseData, IJwtRefreshResponseJson } from './jwt';
3
+ import { HttpClient } from '@angular/common/http';
4
+ import { Observable } from 'rxjs';
5
+ import { DataModel } from '../data/data-model';
6
+ import { Collection } from '../data/data-collection';
7
+ import { Router } from '@angular/router';
8
+ import { DataMessageService } from '../messages/message.service';
9
+ export interface AuthParams {
10
+ tokenUrl: string;
11
+ tokenRefreshUrl: string;
12
+ loginField: string;
13
+ passwordField: string;
14
+ loginRoute: string[];
15
+ }
16
+ /**
17
+ * DATA_API_URL: stores data api base url
18
+ */
19
+ export declare const DATA_AUTH_PARAMS: InjectionToken<AuthParams>;
20
+ export declare const DATA_AUTH_USER_SERVICE: InjectionToken<Collection<any>>;
21
+ export declare class AuthServiceBase<User extends DataModel, UserService extends Collection<User>, UserData extends IJwtBaseData> {
22
+ userService: UserService;
23
+ private _params;
24
+ private _router;
25
+ private _http;
26
+ private _msgs;
27
+ private _user;
28
+ private _user$;
29
+ private _token;
30
+ constructor(userService: UserService, _params: AuthParams, _router: Router, _http: HttpClient, _msgs: DataMessageService);
31
+ get isAnonymous(): boolean;
32
+ get accessToken(): string | null;
33
+ get refreshToken(): string | null;
34
+ get currentUser(): User | null;
35
+ get currentUser$(): Observable<User | null>;
36
+ get refreshUrl(): string;
37
+ get loginUrl(): string;
38
+ logout(): void;
39
+ autoLogin(): void;
40
+ login(username: string, password: string): Observable<boolean>;
41
+ saveAuth(): void;
42
+ refresh(): Observable<IJwtRefreshResponseJson | null>;
43
+ }
@@ -0,0 +1,22 @@
1
+ export interface IJwtResponseJson {
2
+ access: string;
3
+ refresh: string;
4
+ }
5
+ export interface IJwtRefreshResponseJson {
6
+ access: string;
7
+ }
8
+ export interface IJwtBaseData {
9
+ token_type: 'access' | 'refresh';
10
+ user_id: number;
11
+ }
12
+ export declare class Jwt<UserJwtData extends IJwtBaseData> {
13
+ readonly access?: string;
14
+ readonly refresh?: string;
15
+ private readonly _data;
16
+ constructor(response?: IJwtResponseJson);
17
+ get data(): UserJwtData | null;
18
+ toJson(): {
19
+ access: string | undefined;
20
+ refresh: string | undefined;
21
+ };
22
+ }
@@ -0,0 +1,47 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { TransferState } from '@angular/platform-browser';
3
+ import { Observable } from 'rxjs';
4
+ import { Collection, IActionParams } from './data-collection';
5
+ import { DataModel } from './data-model';
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * DataBackend provides CRUD operations to a REST api.
9
+ * TransferState can be used if DATA_MAX_TRANSFERSTATE_TIME is set and > 0
10
+ */
11
+ export declare class DataBackend {
12
+ private _http;
13
+ private _transferState;
14
+ private _platform;
15
+ private _apiUrl;
16
+ private _maxTransferstateTime;
17
+ private _created;
18
+ constructor(_http: HttpClient, _transferState: TransferState, _platform: any, _apiUrl: string, _maxTransferstateTime?: number);
19
+ /**
20
+ * Return api url for this backend.
21
+ */
22
+ get apiUrl(): string;
23
+ /**
24
+ * Launch an action on collection.
25
+ * If method is GET and collection.useTranserState & transferState are enabled,
26
+ * result is stored / retrieved from transferState.
27
+ *
28
+ * @param collection Collection reference
29
+ * @param method HTTP method
30
+ * @param url full URL for action
31
+ * @param body JSON body
32
+ * @param params query parameters
33
+ * @param headers query headers
34
+ *
35
+ * @return an observable of response body
36
+ */
37
+ action<T extends DataModel, RT>(collection: Collection<T>, method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE', url: string, { body, params, headers }?: IActionParams): Observable<RT>;
38
+ put<T extends DataModel>(collection: Collection<T>, url: string, { body, params, headers }?: IActionParams): Observable<T>;
39
+ post<T extends DataModel>(collection: Collection<T>, url: string, { body, params, headers }?: IActionParams): Observable<Partial<T>>;
40
+ patch<T extends DataModel>(collection: Collection<T>, url: string, { body, params, headers }?: IActionParams): Observable<Partial<T>>;
41
+ delete<T extends DataModel, R>(collection: Collection<T>, url: string, { params, headers }?: IActionParams): Observable<R>;
42
+ _cachedGet<T extends DataModel, RT>(collection: Collection<T>, url: string, { params, headers }?: IActionParams): Observable<RT>;
43
+ get<T extends DataModel>(collection: Collection<T>, url: string, { params, headers }?: IActionParams): Observable<Partial<T>>;
44
+ list<T extends DataModel>(collection: Collection<T>, url: string, { params, headers }?: IActionParams): Observable<any>;
45
+ static ɵfac: i0.ɵɵFactoryDeclaration<DataBackend, [null, null, null, null, { optional: true; }]>;
46
+ static ɵprov: i0.ɵɵInjectableDeclaration<DataBackend>;
47
+ }
@@ -0,0 +1,87 @@
1
+ import { DataModel } from './data-model';
2
+ import { DataBackend } from './data-backend';
3
+ import { Observable } from 'rxjs';
4
+ import { FilterData, IQuerysetOptions, Queryset } from './data-query';
5
+ export declare type IHttpMethod = 'POST' | 'GET' | 'DELETE' | 'PUT' | 'PATCH';
6
+ export interface IActionParams {
7
+ body?: any;
8
+ headers?: {
9
+ [index: string]: string;
10
+ };
11
+ params?: {
12
+ [index: string]: string;
13
+ };
14
+ }
15
+ export interface ICollectionCacheParams {
16
+ transferState?: {
17
+ enabled: boolean;
18
+ maxTime: number;
19
+ maxCount: number;
20
+ };
21
+ }
22
+ export declare type DataModelType<T extends DataModel> = new (_coll?: Collection<T>) => T;
23
+ export declare class Collection<T extends DataModel> {
24
+ protected backend: DataBackend;
25
+ protected path: string;
26
+ model: DataModelType<T>;
27
+ useTransferState: boolean;
28
+ constructor(backend: DataBackend, path: string, model: DataModelType<T>);
29
+ create(data?: Partial<T>): T;
30
+ fromJson(data: Partial<T>): T;
31
+ fromJson(data: Partial<T>[]): T[];
32
+ queryset(options?: IQuerysetOptions): Queryset<T>;
33
+ fetch(id: number, { prefix, suffix, params, headers, }?: {
34
+ prefix?: string;
35
+ suffix?: string;
36
+ params?: {
37
+ [_index: string]: string;
38
+ };
39
+ headers?: {
40
+ [_index: string]: string;
41
+ };
42
+ }): Observable<T>;
43
+ action<RT>(model: T | null, method: IHttpMethod, action: string, { body, params, headers }?: IActionParams): Observable<RT>;
44
+ save(model: T, { updateModel }?: {
45
+ updateModel?: boolean;
46
+ }): Observable<T>;
47
+ update(model: T, fields?: string[], { updateModel }?: {
48
+ updateModel?: boolean;
49
+ }): Observable<T>;
50
+ delete(model: T, { params, headers }?: IActionParams): Observable<any>;
51
+ list(query?: FilterData, { prefix, suffix, params, headers, }?: {
52
+ prefix?: string;
53
+ suffix?: string;
54
+ params?: {
55
+ [_index: string]: string;
56
+ };
57
+ headers?: {
58
+ [_index: string]: string;
59
+ };
60
+ }): Observable<T[]>;
61
+ /**
62
+ * Calls *method* endpoint for this collection and returns raw results.
63
+ *
64
+ * @param method GET/POST/...
65
+ * @param prefix collection_urlPREFIXSUFFIX
66
+ * @param suffix collection_urlPREFIXSUFFIX
67
+ * @param params query paremeters
68
+ * @param body body as json
69
+ * @param headers headers
70
+ */
71
+ raw<RT>({ method, prefix, suffix, params, body, headers, }?: {
72
+ method?: IHttpMethod;
73
+ prefix?: string;
74
+ suffix?: string;
75
+ body?: any;
76
+ params?: {
77
+ [_index: string]: string;
78
+ };
79
+ headers?: {
80
+ [_index: string]: string;
81
+ };
82
+ }): Observable<RT>;
83
+ getUrl(id?: number | null, { prefix, suffix }?: {
84
+ prefix?: string;
85
+ suffix?: string;
86
+ }): string;
87
+ }
@@ -0,0 +1,19 @@
1
+ import { DataModel } from "./data-model";
2
+ import { Observable } from "rxjs";
3
+ import { IQuerysetOptions } from "./data-query";
4
+ import { QuerysetMock } from "./data-query.mock";
5
+ import { Collection, IActionParams, IHttpMethod } from "./data-collection";
6
+ export declare class CollectionMock<T extends DataModel> {
7
+ protected model: new (coll: Collection<T>) => T;
8
+ mockValue?: T;
9
+ mockValues?: T[];
10
+ actionValue: any;
11
+ constructor(model: new (coll: Collection<T>) => T);
12
+ fetch(id: number, suffix?: string): Observable<T>;
13
+ action(model: T | null, method: IHttpMethod, action: string, params: IActionParams): Observable<any>;
14
+ queryset(options?: IQuerysetOptions): QuerysetMock<T>;
15
+ list(query?: {
16
+ [index: string]: string;
17
+ }, suffix?: string): Observable<any>;
18
+ fromJson(data: any, many?: boolean): T | any;
19
+ }
@@ -0,0 +1,93 @@
1
+ import { BaseFieldManager, IFieldStoredMetadata } from './fields/base';
2
+ import { FormControl, FormGroup, ValidationErrors } from '@angular/forms';
3
+ import { Collection } from './data-collection';
4
+ import { Observable } from 'rxjs';
5
+ export declare type DataModelFields = Readonly<Map<string, IFieldStoredMetadata<any>>>;
6
+ /**
7
+ * Base class for data model.
8
+ *
9
+ * Each class must have a static __name
10
+ * primary field is given with id field.
11
+ *
12
+ * Some methods are provided to be used with a collection, mostly for CRUD operations.
13
+ *
14
+ */
15
+ export declare class DataModel {
16
+ protected _coll?: Collection<any> | undefined;
17
+ /**
18
+ * data model name
19
+ * this need to be given because class name is not fully available because of minification.
20
+ */
21
+ protected static readonly __name: string;
22
+ /**
23
+ * Primary field; readonly; must be created and auto incremented on db side.
24
+ */
25
+ id: number;
26
+ private readonly _F;
27
+ /**
28
+ * Constructor for data model instance.
29
+ * A matching collection can be provided.
30
+ * ___fields readonly property is also populated from Reflected metadata
31
+ *
32
+ * @param _coll collection used for CRUD, etc..
33
+ */
34
+ constructor(_coll?: Collection<any> | undefined);
35
+ get _collection(): Collection<any>;
36
+ set _collection(coll: Collection<any>);
37
+ /**
38
+ * HashMap of fields metadata (type, name, manager, etc...)
39
+ */
40
+ get F(): DataModelFields;
41
+ get FN(): IterableIterator<string>;
42
+ /**
43
+ * Loads model data from json.
44
+ * If partial is true, only fields with matching data keys will be loaded
45
+ * @param data
46
+ * @param options
47
+ */
48
+ fromJson(data: {
49
+ [index: string]: any;
50
+ }, { partial, check }?: {
51
+ partial?: boolean;
52
+ check?: boolean;
53
+ }): null | ValidationErrors;
54
+ toJson(fields?: string | string[]): any;
55
+ action<T, RT extends {
56
+ [index: string]: any;
57
+ }>(method: 'POST' | 'PATCH' | 'GET' | 'DELETE' | 'PUT', name: string, { body, update, updatePartial, updateCheck, params, headers, }?: {
58
+ body?: {
59
+ [_index: string]: any;
60
+ };
61
+ update?: boolean;
62
+ updatePartial?: boolean;
63
+ updateCheck?: boolean;
64
+ params?: {
65
+ [_index: string]: string;
66
+ };
67
+ headers?: {
68
+ [_index: string]: string;
69
+ };
70
+ }): Observable<RT>;
71
+ FM<FT>(field: string): BaseFieldManager<FT>;
72
+ FV<FT>(field: string): FT;
73
+ /**
74
+ * Set field value. If check is true, only set value if all validators pass.
75
+ *
76
+ * The validation result is returned.
77
+ *
78
+ * @param field field name
79
+ * @param value field valued
80
+ * @param check default false
81
+ * @return null or ValidationError
82
+ */
83
+ setFV<FT>(field: string, value: FT, check?: boolean): null | ValidationErrors;
84
+ FC(): FormGroup;
85
+ FC(field: string): FormControl;
86
+ FC(field: string[]): FormGroup;
87
+ save({ updateModel }?: {
88
+ updateModel?: boolean;
89
+ }): Observable<this>;
90
+ update(fields?: string[], { updateModel }?: {
91
+ updateModel?: boolean;
92
+ }): Observable<this>;
93
+ }
@@ -0,0 +1,26 @@
1
+ import { InjectionToken } from "@angular/core";
2
+ /**
3
+ * DATA_API_URL: stores data api base url
4
+ */
5
+ export declare const DATA_API_URL: InjectionToken<string>;
6
+ /**
7
+ * DATA_MAX_TRANSFERSTATE_TIME: max duration to use transferstate time
8
+ * If DATA_MAX_TRANSFERSTATE_TIME is zero, TransferState is not used
9
+ */
10
+ export declare const DATA_MAX_TRANSFERSTATE_TIME: InjectionToken<number>;
11
+ /**
12
+ * DataDisplayConfig interface provides default values for display classes
13
+ */
14
+ export interface DataDisplayConfig {
15
+ dispEdit: {
16
+ defaultMode: "inline" | "dd";
17
+ inputClasses: {
18
+ [index: string]: string;
19
+ };
20
+ };
21
+ }
22
+ export declare const BootstrapDataDisplayConfig: DataDisplayConfig;
23
+ /**
24
+ * DATA_DISPLAY_CONFIG: display config & default classes injection token
25
+ */
26
+ export declare const DATA_DISPLAY_CONFIG: InjectionToken<DataDisplayConfig>;
@@ -0,0 +1,101 @@
1
+ import { Collection } from './data-collection';
2
+ import { DataModel } from './data-model';
3
+ import { Observable } from 'rxjs';
4
+ import { ActivatedRoute, Router } from '@angular/router';
5
+ export interface FilterData {
6
+ [index: string]: string | number | boolean | undefined | null;
7
+ }
8
+ export declare type SortData = string;
9
+ /**
10
+ * Queryset parameters
11
+ */
12
+ export interface IQuerysetOptions {
13
+ /** Emit fields list */
14
+ emitFields?: boolean;
15
+ /** Queryset name */
16
+ name?: string;
17
+ /** TODO: see usage */
18
+ route?: ActivatedRoute;
19
+ /** TODO: see usage */
20
+ router?: Router;
21
+ /** TODO: see usage */
22
+ hash?: string;
23
+ }
24
+ export interface IQueryNav {
25
+ page: number;
26
+ page_size: number;
27
+ }
28
+ export interface IQueryMetaNav {
29
+ count: number;
30
+ next: number | null;
31
+ page: number;
32
+ pages: number;
33
+ prev: number | null;
34
+ size: number;
35
+ }
36
+ export interface IQueryMetaNavParams {
37
+ page: string;
38
+ page_size: string;
39
+ }
40
+ export interface IQueryMeta {
41
+ nav: IQueryMetaNav;
42
+ parameters: IQueryMetaNavParams;
43
+ }
44
+ export interface IQueryFullResponse<T> extends IQueryMeta {
45
+ results: T[];
46
+ }
47
+ export declare class Queryset<T extends DataModel> {
48
+ protected _coll: Collection<T>;
49
+ /** Current filter data */
50
+ filterData: FilterData;
51
+ /** Current sorter data */
52
+ sortData: SortData[];
53
+ /** Current fields */
54
+ fields: string[];
55
+ /** Current page size */
56
+ pageSize: number;
57
+ /** Current page number */
58
+ page: number;
59
+ options: IQuerysetOptions;
60
+ constructor(_coll: Collection<T>, options?: IQuerysetOptions);
61
+ private _pristine;
62
+ /** Pristine status (true if it has not collected results yet) */
63
+ get pristine(): boolean;
64
+ private _loading;
65
+ /** Loading status (true if currently fetching data) */
66
+ get loading(): Observable<boolean>;
67
+ private _meta;
68
+ /** Results meta part observable */
69
+ get meta(): Observable<IQueryMeta>;
70
+ private _results;
71
+ /** Results data part observable */
72
+ get results(): Observable<T[]>;
73
+ private _full?;
74
+ /** Full results observable (results, loading, meta) */
75
+ get full(): Observable<[T[], boolean, IQueryMeta]>;
76
+ /**
77
+ * Update current filter data. Null or undefined values are removed from filter data.
78
+ * @param params filter data
79
+ * @param update boolean to update filter data instead of recreating it from scratch
80
+ */
81
+ filter(params?: FilterData, update?: boolean): Queryset<T>;
82
+ /**
83
+ * Update sorting parameters, list of strings giving sort parameters e.g. sort("+name", "-id").
84
+ * @param sorting strings of sort parameters
85
+ */
86
+ sort(...sorting: string[]): Queryset<T>;
87
+ /**
88
+ * Update page size.
89
+ * @param pageSize required page size
90
+ */
91
+ paginateBy(pageSize?: number): Queryset<T>;
92
+ /**
93
+ * Update current page number.
94
+ * @param page required pqge
95
+ * @param fragment TODO: fragment usage for router usage
96
+ */
97
+ setPage(page?: number, fragment?: string): Queryset<T>;
98
+ setFields(fields: string[]): Queryset<T>;
99
+ getQueryParams(): FilterData;
100
+ get(refresh?: boolean): Observable<T[]>;
101
+ }
@@ -0,0 +1,25 @@
1
+ import { DataModel } from "./data-model";
2
+ import { CollectionMock } from "./data-collection.mock";
3
+ import { FilterData, IQueryMeta, IQuerysetOptions, SortData } from "./data-query";
4
+ import { Observable } from "rxjs";
5
+ export declare class QuerysetMock<T extends DataModel> {
6
+ protected _coll: CollectionMock<T>;
7
+ options: IQuerysetOptions;
8
+ mockData: T[];
9
+ filterData: FilterData;
10
+ sortData: SortData[];
11
+ pageSize: number;
12
+ page: number;
13
+ pristine: boolean;
14
+ loading: Observable<boolean>;
15
+ constructor(_coll: CollectionMock<T>, options?: IQuerysetOptions);
16
+ get results(): Observable<T[]>;
17
+ get meta(): Observable<IQueryMeta>;
18
+ get full(): Observable<[T[], boolean, IQueryMeta]>;
19
+ filter(params?: FilterData): QuerysetMock<T>;
20
+ sort(...sorting: string[]): QuerysetMock<T>;
21
+ paginateBy(pageSize?: number): QuerysetMock<T>;
22
+ setPage(page: number): QuerysetMock<T>;
23
+ getQueryParams(): FilterData;
24
+ get(): Observable<T[]>;
25
+ }
@@ -0,0 +1,116 @@
1
+ import 'reflect-metadata';
2
+ import { FormControl, ValidatorFn } from '@angular/forms';
3
+ import { DataModel } from '../data-model';
4
+ import { DISPEDIT_DISPLAY_TYPES, DISPEDIT_EDITOR_TYPES } from '../../dispedit/dispedit/dispedit.constants';
5
+ export declare const PROPERTY_METADATA_KEY: unique symbol;
6
+ /**
7
+ * Descriptive info for all fields.
8
+ * All are optional.
9
+ */
10
+ export interface IFieldMetadata<FT> {
11
+ /** Field name (for display, column title, etc..) */
12
+ name?: string;
13
+ /** Field help text (for input) */
14
+ help?: string;
15
+ /** Field description (for details on hover etc..) */
16
+ description?: string;
17
+ /** Field required : no undefined allowed on save ? */
18
+ required?: boolean;
19
+ /** Field cannot be updated */
20
+ readonly?: boolean;
21
+ /** Default value */
22
+ defaultValue?: FT | ((args: any) => FT) | null;
23
+ }
24
+ /**
25
+ * Base field manager, stores metadata and provides common field utilities
26
+ *
27
+ * - name : field name, should be the same in data structure and model
28
+ * - help : field help text, blank by default
29
+ * - description : field name for humans
30
+ * - readonly : field is readonly (cannot be changed / pushed to api)
31
+ * - default : default value for field
32
+ *
33
+ * - editor_type : editor type
34
+ * - display_type : display type
35
+ *
36
+ * - fromJson(data) : deserializer
37
+ * - toJson(data) : serialiser
38
+ * - toString(data,format) : to string, for display
39
+ *
40
+ * - formControl : returns field form control
41
+ * - validators : returns field validator
42
+ */
43
+ export declare class BaseFieldManager<FT> implements IFieldMetadata<FT> {
44
+ /** Name is mandatory in a field manager. It is given by
45
+ * field decorator if not directly given in field manager. */
46
+ name: string;
47
+ description: string;
48
+ help: string;
49
+ required: boolean;
50
+ readonly: boolean;
51
+ defaultValue?: FT | ((args: any) => FT);
52
+ editorType: DISPEDIT_EDITOR_TYPES;
53
+ displayType: DISPEDIT_DISPLAY_TYPES;
54
+ constructor(params: IFieldMetadata<FT>);
55
+ /** Return field validators */
56
+ get validators(): ValidatorFn[];
57
+ /** Returns current field name */
58
+ get fname(): string;
59
+ /** Create a new typed formControl for this field. */
60
+ formControl(instance: DataModel): FormControl<FT | null>;
61
+ /** JSON deserializer base method. */
62
+ fromJson(data: any): FT;
63
+ /** JSON serializer base method. */
64
+ toJson(data: FT): any;
65
+ /**
66
+ * Display value (as string)
67
+ * @param data
68
+ * @param format (not used)
69
+ */
70
+ toString(data: FT, format?: string): string;
71
+ /** Return validators
72
+ *
73
+ * @protected
74
+ */
75
+ protected getValidators(): ValidatorFn[];
76
+ /**
77
+ * Returns default value for model, using args if needed.
78
+ * @param args
79
+ */
80
+ default(args?: any): FT | undefined;
81
+ /**
82
+ * Returns default value for model, using args if needed.
83
+ * @param args
84
+ * @protected
85
+ */
86
+ protected getDefaultValue(args?: any): FT | undefined;
87
+ }
88
+ /**
89
+ * Field data stored on reflected metadata.
90
+ */
91
+ export interface IFieldStoredMetadata<FT> extends IFieldMetadata<FT> {
92
+ self: string;
93
+ name: string;
94
+ type: string;
95
+ manager: BaseFieldManager<FT>;
96
+ }
97
+ /** Manager constructor
98
+ * FT is js field type;
99
+ * T is manager type
100
+ * */
101
+ declare type BaseFieldManagerConstructor<FT, T extends BaseFieldManager<FT>> = new (params: any) => T;
102
+ /**
103
+ * Field decorator function
104
+ */
105
+ export declare type FieldDecoratorFn = (target: any, propertyKey: string | symbol) => void;
106
+ /**
107
+ * Creates a field decorator that can only be applied within
108
+ * an object containing a static __name property.
109
+ *
110
+ *
111
+ * @param meta field metadata
112
+ * @param type field type code
113
+ * @param manager field manager
114
+ */
115
+ export declare function genericDataField<FT, MD extends IFieldMetadata<FT>, MG extends BaseFieldManager<FT>>(meta: MD, type: string, manager: BaseFieldManagerConstructor<FT, MG>): FieldDecoratorFn;
116
+ export {};
@@ -0,0 +1,9 @@
1
+ import { BaseFieldManager, IFieldMetadata } from './base';
2
+ import { DISPEDIT_DISPLAY_TYPES, DISPEDIT_EDITOR_TYPES } from '../../dispedit/dispedit/dispedit.constants';
3
+ export declare type IBooleanFieldMetadata = IFieldMetadata<boolean | null>;
4
+ export declare class BooleanFieldManager extends BaseFieldManager<boolean | null> implements IBooleanFieldMetadata {
5
+ editorType: DISPEDIT_EDITOR_TYPES;
6
+ displayType: DISPEDIT_DISPLAY_TYPES;
7
+ fromJson(data: any): boolean | null;
8
+ }
9
+ export declare const booleanField: (updates?: IBooleanFieldMetadata) => import("./base").FieldDecoratorFn;
@@ -0,0 +1,39 @@
1
+ import { BaseFieldManager, IFieldMetadata } from './base';
2
+ import { DISPEDIT_DISPLAY_TYPES, DISPEDIT_EDITOR_TYPES } from '../../dispedit/dispedit/dispedit.constants';
3
+ import { ValidatorFn } from '@angular/forms';
4
+ export interface IDateFieldMetadata extends IFieldMetadata<Date | null> {
5
+ autoNow?: boolean;
6
+ autoNowAdd?: boolean;
7
+ min?: Date;
8
+ max?: Date;
9
+ }
10
+ export declare const dateMinimum: (date: Date) => ValidatorFn;
11
+ export declare const dateMaximum: (date: Date) => ValidatorFn;
12
+ export interface IDatetimeFieldMetadata extends IDateFieldMetadata {
13
+ timezone?: string;
14
+ }
15
+ export declare class DateFieldManager extends BaseFieldManager<Date | null> {
16
+ autoNow: boolean;
17
+ autoNowAdd: boolean;
18
+ min?: Date;
19
+ max?: Date;
20
+ editorType: DISPEDIT_EDITOR_TYPES;
21
+ displayType: DISPEDIT_DISPLAY_TYPES;
22
+ get validators(): ValidatorFn[];
23
+ fromJson(data: any): Date | null;
24
+ toJson(data: Date | string | null): null | string;
25
+ /**
26
+ * Returns default value for model, using args if needed.
27
+ * @param args
28
+ * @protected
29
+ */
30
+ protected getDefaultValue(args?: any): Date | null | undefined;
31
+ }
32
+ export declare class DatetimeFieldManager extends DateFieldManager implements IDatetimeFieldMetadata {
33
+ timezone: string;
34
+ editorType: DISPEDIT_EDITOR_TYPES;
35
+ displayType: DISPEDIT_DISPLAY_TYPES;
36
+ toJson(data: Date): string | null;
37
+ }
38
+ export declare const dateField: (updates?: IDateFieldMetadata) => import("./base").FieldDecoratorFn;
39
+ export declare const datetimeField: (updates?: IDatetimeFieldMetadata) => import("./base").FieldDecoratorFn;
@@ -0,0 +1,6 @@
1
+ export { charField, emailField, textField, passwordField, } from './stringfields';
2
+ export { primaryField } from './primaryfield';
3
+ export { dateField, datetimeField } from './datetime';
4
+ export { foreignKeyField, manyToManyField, reverseForeignKeyField, detailsField, } from './relations';
5
+ export { booleanField } from './boolean';
6
+ export { decimalField, integerField, floatField } from './numbers';