@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.
- package/README.md +7 -0
- package/esm2020/lib/auth/auth-interceptor.service.mjs +90 -0
- package/esm2020/lib/auth/auth.service.mjs +125 -0
- package/esm2020/lib/auth/jwt.mjs +21 -0
- package/esm2020/lib/data/data-backend.mjs +106 -0
- package/esm2020/lib/data/data-collection.mjs +109 -0
- package/esm2020/lib/data/data-collection.mock.mjs +39 -0
- package/esm2020/lib/data/data-model.mjs +287 -0
- package/esm2020/lib/data/data-parameters.mjs +34 -0
- package/esm2020/lib/data/data-query.mjs +147 -0
- package/esm2020/lib/data/data-query.mock.mjs +46 -0
- package/esm2020/lib/data/fields/base.mjs +142 -0
- package/esm2020/lib/data/fields/boolean.mjs +38 -0
- package/esm2020/lib/data/fields/datetime.mjs +124 -0
- package/esm2020/lib/data/fields/index.mjs +7 -0
- package/esm2020/lib/data/fields/numbers.mjs +38 -0
- package/esm2020/lib/data/fields/primaryfield.mjs +9 -0
- package/esm2020/lib/data/fields/relations.mjs +53 -0
- package/esm2020/lib/data/fields/stringfields.mjs +71 -0
- package/esm2020/lib/dispedit/choice.pipe.mjs +39 -0
- package/esm2020/lib/dispedit/dispedit/dispedit.component.mjs +475 -0
- package/esm2020/lib/dispedit/dispedit/dispedit.constants.mjs +2 -0
- package/esm2020/lib/dispedit/factor.pipe.mjs +48 -0
- package/esm2020/lib/dispedit/factorc.pipe.mjs +50 -0
- package/esm2020/lib/dispedit/fkselect/fkselect.component.mjs +142 -0
- package/esm2020/lib/dispedit/flags/flags.component.mjs +140 -0
- package/esm2020/lib/dispedit/m2mselect/m2mselect.component.mjs +318 -0
- package/esm2020/lib/dispedit/richedit/richedit.component.mjs +94 -0
- package/esm2020/lib/dispedit/sdelete/sdelete.component.mjs +46 -0
- package/esm2020/lib/messages/message-zone/message-zone.component.mjs +57 -0
- package/esm2020/lib/messages/message.service.mjs +151 -0
- package/esm2020/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.mjs +34 -0
- package/esm2020/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.mjs +63 -0
- package/esm2020/lib/modellist/model-list-fields/model-list-fields.mjs +225 -0
- package/esm2020/lib/modellist/model-list-filters/filters/filtertypes.mjs +3 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.mjs +108 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.mjs +28 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.mjs +24 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.mjs +9 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.mjs +40 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.mjs +14 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.mjs +40 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.mjs +14 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.mjs +21 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.mjs +14 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.mjs +21 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.mjs +14 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.mjs +24 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.mjs +63 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.mjs +16 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.mjs +46 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.mjs +49 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.mjs +57 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.mjs +35 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.mjs +49 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.mjs +15 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.mjs +40 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.mjs +14 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.mjs +21 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.mjs +14 -0
- package/esm2020/lib/modellist/model-list-filters/model-list-filter.mjs +145 -0
- package/esm2020/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.mjs +50 -0
- package/esm2020/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.mjs +30 -0
- package/esm2020/lib/modellist/model-list-filters/model-list-filters.mjs +80 -0
- package/esm2020/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.mjs +70 -0
- package/esm2020/lib/modellist/model-list-paginator/model-list-paginator.mjs +47 -0
- package/esm2020/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.mjs +49 -0
- package/esm2020/lib/modellist/model-list-sorter/model-list-sorter.mjs +116 -0
- package/esm2020/lib/modellist/model-list.service.mjs +135 -0
- package/esm2020/lib/routing/breadcrumb/breadcrumb.component.mjs +142 -0
- package/esm2020/lib/routing/routing.mjs +57 -0
- package/esm2020/lib/uploader/index.mjs +6 -0
- package/esm2020/lib/uploader/interfaces.mjs +8 -0
- package/esm2020/lib/uploader/ng-file-drop.directive.mjs +81 -0
- package/esm2020/lib/uploader/ng-file-select.directive.mjs +51 -0
- package/esm2020/lib/uploader/ngx-uploader.class.mjs +308 -0
- package/esm2020/lib/uploader/ngx-uploader.module.mjs +17 -0
- package/esm2020/lib/utils/slugify.mjs +16 -0
- package/esm2020/lib/utils/tab-memory.service.mjs +71 -0
- package/esm2020/public-api.mjs +51 -0
- package/esm2020/solidev-data.mjs +5 -0
- package/fesm2015/solidev-data.mjs +5411 -0
- package/fesm2015/solidev-data.mjs.map +1 -0
- package/fesm2020/solidev-data.mjs +5358 -0
- package/fesm2020/solidev-data.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/auth/auth-interceptor.service.d.ts +17 -0
- package/lib/auth/auth.service.d.ts +43 -0
- package/lib/auth/jwt.d.ts +22 -0
- package/lib/data/data-backend.d.ts +47 -0
- package/lib/data/data-collection.d.ts +87 -0
- package/lib/data/data-collection.mock.d.ts +19 -0
- package/lib/data/data-model.d.ts +93 -0
- package/lib/data/data-parameters.d.ts +26 -0
- package/lib/data/data-query.d.ts +101 -0
- package/lib/data/data-query.mock.d.ts +25 -0
- package/lib/data/fields/base.d.ts +116 -0
- package/lib/data/fields/boolean.d.ts +9 -0
- package/lib/data/fields/datetime.d.ts +39 -0
- package/lib/data/fields/index.d.ts +6 -0
- package/lib/data/fields/numbers.d.ts +35 -0
- package/lib/data/fields/primaryfield.d.ts +8 -0
- package/lib/data/fields/relations.d.ts +45 -0
- package/lib/data/fields/stringfields.d.ts +50 -0
- package/lib/dispedit/choice.pipe.d.ts +8 -0
- package/lib/dispedit/dispedit/dispedit.component.d.ts +182 -0
- package/lib/dispedit/dispedit/dispedit.constants.d.ts +6 -0
- package/lib/dispedit/factor.pipe.d.ts +12 -0
- package/lib/dispedit/factorc.pipe.d.ts +11 -0
- package/lib/dispedit/fkselect/fkselect.component.d.ts +43 -0
- package/lib/dispedit/flags/flags.component.d.ts +40 -0
- package/lib/dispedit/m2mselect/m2mselect.component.d.ts +120 -0
- package/lib/dispedit/richedit/richedit.component.d.ts +31 -0
- package/lib/dispedit/sdelete/sdelete.component.d.ts +27 -0
- package/lib/messages/message-zone/message-zone.component.d.ts +14 -0
- package/lib/messages/message.service.d.ts +59 -0
- package/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.d.ts +15 -0
- package/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.d.ts +19 -0
- package/lib/modellist/model-list-fields/model-list-fields.d.ts +67 -0
- package/lib/modellist/model-list-filters/filters/filtertypes.d.ts +1 -0
- package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.d.ts +30 -0
- package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.d.ts +22 -0
- package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.d.ts +10 -0
- package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.d.ts +8 -0
- package/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.d.ts +15 -0
- package/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.d.ts +4 -0
- package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.d.ts +15 -0
- package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.d.ts +4 -0
- package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.d.ts +11 -0
- package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.d.ts +4 -0
- package/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.d.ts +11 -0
- package/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.d.ts +4 -0
- package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.d.ts +35 -0
- package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.d.ts +25 -0
- package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.d.ts +18 -0
- package/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.d.ts +17 -0
- package/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.d.ts +19 -0
- package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.d.ts +17 -0
- package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.d.ts +16 -0
- package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.d.ts +17 -0
- package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.d.ts +6 -0
- package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.d.ts +16 -0
- package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.d.ts +4 -0
- package/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.d.ts +11 -0
- package/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.d.ts +4 -0
- package/lib/modellist/model-list-filters/model-list-filter.d.ts +52 -0
- package/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.d.ts +9 -0
- package/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.d.ts +13 -0
- package/lib/modellist/model-list-filters/model-list-filters.d.ts +15 -0
- package/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.d.ts +23 -0
- package/lib/modellist/model-list-paginator/model-list-paginator.d.ts +16 -0
- package/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.d.ts +22 -0
- package/lib/modellist/model-list-sorter/model-list-sorter.d.ts +61 -0
- package/lib/modellist/model-list.service.d.ts +83 -0
- package/lib/routing/breadcrumb/breadcrumb.component.d.ts +42 -0
- package/lib/routing/routing.d.ts +64 -0
- package/lib/uploader/index.d.ts +5 -0
- package/lib/uploader/interfaces.d.ts +67 -0
- package/lib/uploader/ng-file-drop.directive.d.ts +22 -0
- package/lib/uploader/ng-file-select.directive.d.ts +19 -0
- package/lib/uploader/ngx-uploader.class.d.ts +35 -0
- package/lib/uploader/ngx-uploader.module.d.ts +8 -0
- package/lib/utils/slugify.d.ts +1 -0
- package/lib/utils/tab-memory.service.d.ts +29 -0
- package/package.json +35 -0
- package/public-api.d.ts +47 -0
- package/src/lib/data/README.md +35 -0
package/index.d.ts
ADDED
|
@@ -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';
|