@bootkit/ng0 0.0.0-alpha.2 → 0.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/form-field/index.d.ts +72 -0
- package/fesm2022/bootkit-ng0-components-form-field.mjs +147 -0
- package/fesm2022/bootkit-ng0-components-form-field.mjs.map +1 -0
- package/fesm2022/bootkit-ng0-http.mjs +25 -27
- package/fesm2022/bootkit-ng0-http.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-localization.mjs +301 -0
- package/fesm2022/bootkit-ng0-localization.mjs.map +1 -0
- package/http/index.d.ts +4 -4
- package/localization/index.d.ts +178 -0
- package/package.json +12 -4
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { OnInit, AfterContentInit, OnDestroy, Renderer2, DestroyRef } from '@angular/core';
|
|
3
|
+
import { NgForm } from '@angular/forms';
|
|
4
|
+
import { LocalizationService } from '@bootkit/ng0/localization';
|
|
5
|
+
import * as i1 from '@angular/common';
|
|
6
|
+
|
|
7
|
+
declare class FormFieldComponent implements OnInit, AfterContentInit, OnDestroy {
|
|
8
|
+
private _renderer;
|
|
9
|
+
private _destroyRef;
|
|
10
|
+
private _form;
|
|
11
|
+
private _ls;
|
|
12
|
+
/**
|
|
13
|
+
* The label text for the form field.
|
|
14
|
+
*/
|
|
15
|
+
label: _angular_core.InputSignal<string>;
|
|
16
|
+
/**
|
|
17
|
+
* The hint text to display below the form field.
|
|
18
|
+
* This is typically used to provide additional information or instructions to the user.
|
|
19
|
+
*/
|
|
20
|
+
hint: _angular_core.InputSignal<string>;
|
|
21
|
+
/**
|
|
22
|
+
* If true, the form-field will show validation errors.
|
|
23
|
+
* This is useful for displaying validation messages when the form control is invalid.
|
|
24
|
+
*/
|
|
25
|
+
showErrors: _angular_core.InputSignal<boolean>;
|
|
26
|
+
/**
|
|
27
|
+
* If true, the form-field will show a red asterisk for required fields.
|
|
28
|
+
* This is only a visual indicator and does not enforce validation.
|
|
29
|
+
*/
|
|
30
|
+
showRequiredIndicator: _angular_core.InputSignal<boolean>;
|
|
31
|
+
/**
|
|
32
|
+
* If true, the form-field will show subscripts (e.g. hints, errors) for the field label.
|
|
33
|
+
* This is useful for displaying additional information or validation messages.
|
|
34
|
+
*/
|
|
35
|
+
showSubscripts: _angular_core.InputSignal<boolean>;
|
|
36
|
+
/**
|
|
37
|
+
* If true, the form-field will be rendered inside a ".input-group" element.
|
|
38
|
+
*/
|
|
39
|
+
inputGroup: _angular_core.InputSignal<boolean>;
|
|
40
|
+
/**
|
|
41
|
+
* Returns the first localized error of the control
|
|
42
|
+
*/
|
|
43
|
+
get errorText(): string;
|
|
44
|
+
/** Reports whether the control is touched. */
|
|
45
|
+
get touched(): boolean | null | undefined;
|
|
46
|
+
/** Reports whether the control is dirty. */
|
|
47
|
+
get dirty(): boolean | null | undefined;
|
|
48
|
+
/** Returns true if this form-field is required, otherwise returns false. */
|
|
49
|
+
get isRequired(): boolean;
|
|
50
|
+
private _onFocusOut;
|
|
51
|
+
private _ngControl?;
|
|
52
|
+
private _ngControlElement?;
|
|
53
|
+
private _isRequired;
|
|
54
|
+
private _locale?;
|
|
55
|
+
private _errorText?;
|
|
56
|
+
constructor(_renderer: Renderer2, _destroyRef: DestroyRef, _form: NgForm, _ls: LocalizationService);
|
|
57
|
+
ngOnInit(): void;
|
|
58
|
+
ngAfterContentInit(): void;
|
|
59
|
+
private _validate;
|
|
60
|
+
private _isRequiredField;
|
|
61
|
+
ngOnDestroy(): void;
|
|
62
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormFieldComponent, [null, null, { optional: true; }, null]>;
|
|
63
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormFieldComponent, "ng0-form-field, ng0-field", ["ng0FormField"], { "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "showErrors": { "alias": "showErrors"; "required": false; "isSignal": true; }; "showRequiredIndicator": { "alias": "showRequiredIndicator"; "required": false; "isSignal": true; }; "showSubscripts": { "alias": "showSubscripts"; "required": false; "isSignal": true; }; "inputGroup": { "alias": "inputGroup"; "required": false; "isSignal": true; }; }, {}, ["_ngControl", "_ngControlElement"], ["*"], true, never>;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
declare class FormFieldModule {
|
|
67
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormFieldModule, never>;
|
|
68
|
+
static ɵmod: _angular_core.ɵɵNgModuleDeclaration<FormFieldModule, never, [typeof i1.CommonModule, typeof FormFieldComponent], [typeof FormFieldComponent]>;
|
|
69
|
+
static ɵinj: _angular_core.ɵɵInjectorDeclaration<FormFieldModule>;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export { FormFieldComponent, FormFieldModule };
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import * as i3 from '@angular/common';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
4
|
+
import { input, ElementRef, ContentChild, HostListener, HostBinding, Optional, Component, NgModule } from '@angular/core';
|
|
5
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
6
|
+
import * as i1 from '@angular/forms';
|
|
7
|
+
import { FormControl, NgControl } from '@angular/forms';
|
|
8
|
+
import * as i2 from '@bootkit/ng0/localization';
|
|
9
|
+
|
|
10
|
+
class FormFieldComponent {
|
|
11
|
+
_renderer;
|
|
12
|
+
_destroyRef;
|
|
13
|
+
_form;
|
|
14
|
+
_ls;
|
|
15
|
+
/**
|
|
16
|
+
* The label text for the form field.
|
|
17
|
+
*/
|
|
18
|
+
label = input();
|
|
19
|
+
/**
|
|
20
|
+
* The hint text to display below the form field.
|
|
21
|
+
* This is typically used to provide additional information or instructions to the user.
|
|
22
|
+
*/
|
|
23
|
+
hint = input();
|
|
24
|
+
/**
|
|
25
|
+
* If true, the form-field will show validation errors.
|
|
26
|
+
* This is useful for displaying validation messages when the form control is invalid.
|
|
27
|
+
*/
|
|
28
|
+
showErrors = input(true);
|
|
29
|
+
/**
|
|
30
|
+
* If true, the form-field will show a red asterisk for required fields.
|
|
31
|
+
* This is only a visual indicator and does not enforce validation.
|
|
32
|
+
*/
|
|
33
|
+
showRequiredIndicator = input(true);
|
|
34
|
+
/**
|
|
35
|
+
* If true, the form-field will show subscripts (e.g. hints, errors) for the field label.
|
|
36
|
+
* This is useful for displaying additional information or validation messages.
|
|
37
|
+
*/
|
|
38
|
+
showSubscripts = input(true);
|
|
39
|
+
/**
|
|
40
|
+
* If true, the form-field will be rendered inside a ".input-group" element.
|
|
41
|
+
*/
|
|
42
|
+
inputGroup = input(true);
|
|
43
|
+
/**
|
|
44
|
+
* Returns the first localized error of the control
|
|
45
|
+
*/
|
|
46
|
+
get errorText() { return this._errorText; }
|
|
47
|
+
/** Reports whether the control is touched. */
|
|
48
|
+
get touched() { return this._ngControl?.touched; }
|
|
49
|
+
/** Reports whether the control is dirty. */
|
|
50
|
+
get dirty() { return this._ngControl?.dirty; }
|
|
51
|
+
/** Returns true if this form-field is required, otherwise returns false. */
|
|
52
|
+
get isRequired() { return this._isRequired; }
|
|
53
|
+
_onFocusOut() { this._validate(); }
|
|
54
|
+
_ngControl;
|
|
55
|
+
_ngControlElement;
|
|
56
|
+
_isRequired = false;
|
|
57
|
+
_locale;
|
|
58
|
+
_errorText;
|
|
59
|
+
constructor(_renderer, _destroyRef, _form, _ls) {
|
|
60
|
+
this._renderer = _renderer;
|
|
61
|
+
this._destroyRef = _destroyRef;
|
|
62
|
+
this._form = _form;
|
|
63
|
+
this._ls = _ls;
|
|
64
|
+
this._locale = this._ls.get();
|
|
65
|
+
this._ls.change.pipe(takeUntilDestroyed()).subscribe(e => this._locale = e.new);
|
|
66
|
+
}
|
|
67
|
+
ngOnInit() {
|
|
68
|
+
}
|
|
69
|
+
ngAfterContentInit() {
|
|
70
|
+
this._isRequired = this._isRequiredField();
|
|
71
|
+
if (this._ngControl) {
|
|
72
|
+
this._ngControl?.statusChanges?.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(change => {
|
|
73
|
+
this._validate();
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
_validate() {
|
|
78
|
+
if (!this._ngControl || !this.dirty || !this.touched) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const invalid = this._ngControl.status === 'INVALID';
|
|
82
|
+
if (invalid) {
|
|
83
|
+
this._errorText = this._locale?.translateFirstError(this._ngControl.errors, 'Invalid').text;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
this._errorText = undefined;
|
|
87
|
+
}
|
|
88
|
+
this._renderer.addClass(this._ngControlElement.nativeElement, invalid ? 'is-invalid' : 'is-valid');
|
|
89
|
+
this._renderer.removeClass(this._ngControlElement.nativeElement, invalid ? 'is-valid' : 'is-invalid');
|
|
90
|
+
}
|
|
91
|
+
_isRequiredField() {
|
|
92
|
+
const validator = this._ngControl?.validator;
|
|
93
|
+
const errors = validator && validator(new FormControl(null));
|
|
94
|
+
return errors != null && errors['required'] === true;
|
|
95
|
+
}
|
|
96
|
+
ngOnDestroy() {
|
|
97
|
+
}
|
|
98
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: FormFieldComponent, deps: [{ token: i0.Renderer2 }, { token: i0.DestroyRef }, { token: i1.NgForm, optional: true }, { token: i2.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
99
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: FormFieldComponent, isStandalone: true, selector: "ng0-form-field, ng0-field", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, showErrors: { classPropertyName: "showErrors", publicName: "showErrors", isSignal: true, isRequired: false, transformFunction: null }, showRequiredIndicator: { classPropertyName: "showRequiredIndicator", publicName: "showRequiredIndicator", isSignal: true, isRequired: false, transformFunction: null }, showSubscripts: { classPropertyName: "showSubscripts", publicName: "showSubscripts", isSignal: true, isRequired: false, transformFunction: null }, inputGroup: { classPropertyName: "inputGroup", publicName: "inputGroup", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "focusout": "_onFocusOut()" }, properties: { "class.required-form-field": "this.isRequired" } }, queries: [{ propertyName: "_ngControl", first: true, predicate: NgControl, descendants: true, static: true }, { propertyName: "_ngControlElement", first: true, predicate: NgControl, descendants: true, read: ElementRef, static: true }], exportAs: ["ng0FormField"], ngImport: i0, template: "@if(label()) {\r\n<label class=\"form-field-label\">\r\n {{label()}}\r\n <span *ngIf=\"isRequired && showRequiredIndicator()\" class=\"isc-form-field-required-marker\">*</span>\r\n</label>\r\n}\r\n\r\n@if(inputGroup()) {\r\n<div class=\"input-group\">\r\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n</div>\r\n}@else {\r\n<ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n}\r\n\r\n<ng-template #contentTemplate>\r\n <ng-content></ng-content>\r\n</ng-template>\r\n\r\n@if(showSubscripts()) {\r\n<div class=\"form-field-subscript-wrapper\">\r\n @if(showErrors() && errorText && (touched || dirty)) {\r\n <span class=\"form-field-error text-danger\">\r\n {{errorText}}\r\n </span>\r\n }@if(hint()) {\r\n <span class=\"form-field-hint\">\r\n {{hint()}}\r\n </span>\r\n }\r\n</div>\r\n}", styles: [":host{display:block}.form-field-subscript-wrapper{margin-top:.2rem;min-height:1.5em;line-height:1.5em;text-align:justify}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
100
|
+
}
|
|
101
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: FormFieldComponent, decorators: [{
|
|
102
|
+
type: Component,
|
|
103
|
+
args: [{ selector: 'ng0-form-field, ng0-field', exportAs: 'ng0FormField', standalone: true, imports: [
|
|
104
|
+
CommonModule
|
|
105
|
+
], template: "@if(label()) {\r\n<label class=\"form-field-label\">\r\n {{label()}}\r\n <span *ngIf=\"isRequired && showRequiredIndicator()\" class=\"isc-form-field-required-marker\">*</span>\r\n</label>\r\n}\r\n\r\n@if(inputGroup()) {\r\n<div class=\"input-group\">\r\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n</div>\r\n}@else {\r\n<ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n}\r\n\r\n<ng-template #contentTemplate>\r\n <ng-content></ng-content>\r\n</ng-template>\r\n\r\n@if(showSubscripts()) {\r\n<div class=\"form-field-subscript-wrapper\">\r\n @if(showErrors() && errorText && (touched || dirty)) {\r\n <span class=\"form-field-error text-danger\">\r\n {{errorText}}\r\n </span>\r\n }@if(hint()) {\r\n <span class=\"form-field-hint\">\r\n {{hint()}}\r\n </span>\r\n }\r\n</div>\r\n}", styles: [":host{display:block}.form-field-subscript-wrapper{margin-top:.2rem;min-height:1.5em;line-height:1.5em;text-align:justify}\n"] }]
|
|
106
|
+
}], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.DestroyRef }, { type: i1.NgForm, decorators: [{
|
|
107
|
+
type: Optional
|
|
108
|
+
}] }, { type: i2.LocalizationService }], propDecorators: { isRequired: [{
|
|
109
|
+
type: HostBinding,
|
|
110
|
+
args: ['class.required-form-field']
|
|
111
|
+
}], _onFocusOut: [{
|
|
112
|
+
type: HostListener,
|
|
113
|
+
args: ['focusout']
|
|
114
|
+
}], _ngControl: [{
|
|
115
|
+
type: ContentChild,
|
|
116
|
+
args: [NgControl, { static: true }]
|
|
117
|
+
}], _ngControlElement: [{
|
|
118
|
+
type: ContentChild,
|
|
119
|
+
args: [NgControl, { static: true, read: ElementRef }]
|
|
120
|
+
}] } });
|
|
121
|
+
|
|
122
|
+
class FormFieldModule {
|
|
123
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: FormFieldModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
124
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.6", ngImport: i0, type: FormFieldModule, imports: [CommonModule,
|
|
125
|
+
FormFieldComponent], exports: [FormFieldComponent] });
|
|
126
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: FormFieldModule, imports: [CommonModule,
|
|
127
|
+
FormFieldComponent] });
|
|
128
|
+
}
|
|
129
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: FormFieldModule, decorators: [{
|
|
130
|
+
type: NgModule,
|
|
131
|
+
args: [{
|
|
132
|
+
imports: [
|
|
133
|
+
CommonModule,
|
|
134
|
+
FormFieldComponent,
|
|
135
|
+
],
|
|
136
|
+
exports: [
|
|
137
|
+
FormFieldComponent,
|
|
138
|
+
]
|
|
139
|
+
}]
|
|
140
|
+
}] });
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Generated bundle index. Do not edit.
|
|
144
|
+
*/
|
|
145
|
+
|
|
146
|
+
export { FormFieldComponent, FormFieldModule };
|
|
147
|
+
//# sourceMappingURL=bootkit-ng0-components-form-field.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-components-form-field.mjs","sources":["../../../projects/ng0/components/form-field/form-field.component.ts","../../../projects/ng0/components/form-field/form-field.component.html","../../../projects/ng0/components/form-field/form-field.module.ts","../../../projects/ng0/components/form-field/bootkit-ng0-components-form-field.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { DestroyRef, HostListener, input, signal } from '@angular/core';\r\nimport { Component, Input, ContentChild, AfterContentInit, Optional, HostBinding, OnInit, OnDestroy, ElementRef, Renderer2 } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FormControl, NgControl, NgForm } from '@angular/forms';\r\nimport { Locale, LocalizationService } from '@bootkit/ng0/localization';\r\n\r\n@Component({\r\n selector: 'ng0-form-field, ng0-field',\r\n exportAs: 'ng0FormField',\r\n templateUrl: './form-field.component.html',\r\n styleUrls: ['./form-field.component.scss'],\r\n standalone: true,\r\n imports: [\r\n CommonModule\r\n ],\r\n})\r\nexport class FormFieldComponent implements OnInit, AfterContentInit, OnDestroy {\r\n\r\n /**\r\n * The label text for the form field.\r\n */\r\n public label = input<string>();\r\n\r\n /**\r\n * The hint text to display below the form field.\r\n * This is typically used to provide additional information or instructions to the user.\r\n */\r\n public hint = input<string>();\r\n\r\n /**\r\n * If true, the form-field will show validation errors.\r\n * This is useful for displaying validation messages when the form control is invalid.\r\n */\r\n public showErrors = input(true);\r\n\r\n /**\r\n * If true, the form-field will show a red asterisk for required fields.\r\n * This is only a visual indicator and does not enforce validation.\r\n */\r\n public showRequiredIndicator = input(true);\r\n\r\n /**\r\n * If true, the form-field will show subscripts (e.g. hints, errors) for the field label.\r\n * This is useful for displaying additional information or validation messages.\r\n */\r\n public showSubscripts = input(true);\r\n\r\n /**\r\n * If true, the form-field will be rendered inside a \".input-group\" element.\r\n */\r\n public inputGroup = input(true);\r\n\r\n /**\r\n * Returns the first localized error of the control \r\n */\r\n public get errorText() { return this._errorText; }\r\n\r\n /** Reports whether the control is touched. */\r\n public get touched(): boolean | null | undefined { return this._ngControl?.touched; }\r\n\r\n /** Reports whether the control is dirty. */\r\n public get dirty(): boolean | null | undefined { return this._ngControl?.dirty; }\r\n\r\n /** Returns true if this form-field is required, otherwise returns false. */\r\n @HostBinding('class.required-form-field')\r\n public get isRequired(): boolean { return this._isRequired; }\r\n\r\n @HostListener('focusout')\r\n private _onFocusOut() { this._validate(); }\r\n\r\n @ContentChild(NgControl, { static: true })\r\n private _ngControl?: NgControl;\r\n\r\n @ContentChild(NgControl, { static: true, read: ElementRef })\r\n private _ngControlElement?: ElementRef;\r\n\r\n private _isRequired = false;\r\n private _locale?: Locale;\r\n private _errorText?: string;\r\n\r\n constructor(\r\n private _renderer: Renderer2,\r\n private _destroyRef: DestroyRef,\r\n @Optional() private _form: NgForm,\r\n private _ls: LocalizationService,\r\n ) {\r\n this._locale = this._ls.get();\r\n this._ls.change.pipe(takeUntilDestroyed()).subscribe(e => this._locale = e.new);\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this._isRequired = this._isRequiredField();\r\n\r\n if (this._ngControl) {\r\n this._ngControl?.statusChanges?.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(change => {\r\n this._validate();\r\n });\r\n }\r\n }\r\n\r\n private _validate() {\r\n if (!this._ngControl || !this.dirty || !this.touched) {\r\n return;\r\n }\r\n\r\n const invalid = this._ngControl.status === 'INVALID';\r\n if (invalid) {\r\n this._errorText = this._locale?.translateFirstError(this._ngControl.errors, 'Invalid').text;\r\n } else {\r\n this._errorText = undefined;\r\n }\r\n this._renderer.addClass(this._ngControlElement!.nativeElement, invalid ? 'is-invalid' : 'is-valid');\r\n this._renderer.removeClass(this._ngControlElement!.nativeElement, invalid ? 'is-valid' : 'is-invalid');\r\n }\r\n\r\n private _isRequiredField(): boolean {\r\n const validator = this._ngControl?.validator;\r\n const errors = validator && validator(new FormControl(null));\r\n return errors != null && errors['required'] === true;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n}\r\n","@if(label()) {\r\n<label class=\"form-field-label\">\r\n {{label()}}\r\n <span *ngIf=\"isRequired && showRequiredIndicator()\" class=\"isc-form-field-required-marker\">*</span>\r\n</label>\r\n}\r\n\r\n@if(inputGroup()) {\r\n<div class=\"input-group\">\r\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n</div>\r\n}@else {\r\n<ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n}\r\n\r\n<ng-template #contentTemplate>\r\n <ng-content></ng-content>\r\n</ng-template>\r\n\r\n@if(showSubscripts()) {\r\n<div class=\"form-field-subscript-wrapper\">\r\n @if(showErrors() && errorText && (touched || dirty)) {\r\n <span class=\"form-field-error text-danger\">\r\n {{errorText}}\r\n </span>\r\n }@if(hint()) {\r\n <span class=\"form-field-hint\">\r\n {{hint()}}\r\n </span>\r\n }\r\n</div>\r\n}","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormFieldComponent } from './form-field.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormFieldComponent,\r\n ],\r\n exports: [\r\n FormFieldComponent,\r\n ]\r\n})\r\nexport class FormFieldModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i1 from '@angular/common/http';
|
|
2
2
|
import { HttpParams } from '@angular/common/http';
|
|
3
|
-
import { Subject,
|
|
3
|
+
import { Subject, map, tap, of } from 'rxjs';
|
|
4
4
|
import * as i0 from '@angular/core';
|
|
5
5
|
import { InjectionToken, makeStateKey, PLATFORM_ID, Inject, Optional, Injectable } from '@angular/core';
|
|
6
6
|
import { isPlatformServer } from '@angular/common';
|
|
@@ -53,30 +53,6 @@ class HttpService {
|
|
|
53
53
|
obs = this._handleTransferState(obs, options);
|
|
54
54
|
return obs;
|
|
55
55
|
}
|
|
56
|
-
_handleTransferState(obs, options) {
|
|
57
|
-
if (!options?.transferState) {
|
|
58
|
-
return obs;
|
|
59
|
-
}
|
|
60
|
-
if (!options.id) {
|
|
61
|
-
throw Error('To use transferState, set request id');
|
|
62
|
-
}
|
|
63
|
-
let key = makeStateKey(options.id);
|
|
64
|
-
// Check if data exists in TransferState (to avoid refetching)
|
|
65
|
-
if (this.transferState.hasKey(key)) {
|
|
66
|
-
const data = this.transferState.get(key, null);
|
|
67
|
-
if (options.transferState.clearAfterUse || true) {
|
|
68
|
-
this.transferState.remove(key); // Free memory
|
|
69
|
-
}
|
|
70
|
-
return of(data);
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
return obs.pipe(tap((d) => {
|
|
74
|
-
if (isPlatformServer(this.platformId)) {
|
|
75
|
-
this.transferState.set(key, d);
|
|
76
|
-
}
|
|
77
|
-
}));
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
56
|
getResult(url, request, options) {
|
|
81
57
|
this._eventsSubject.next(new HttpRequestSendEvent(url, options));
|
|
82
58
|
const URL = this.makeUrl(url, options);
|
|
@@ -144,8 +120,6 @@ class HttpService {
|
|
|
144
120
|
// if (options.responseType) {
|
|
145
121
|
ngOptions.responseType = options.responseType;
|
|
146
122
|
// }
|
|
147
|
-
if (!options.sendAuthToken) {
|
|
148
|
-
}
|
|
149
123
|
ngOptions.headers = this.defaultHeaders;
|
|
150
124
|
ngOptions.reportProgress = options.reportProgress;
|
|
151
125
|
ngOptions.observe = options.observe;
|
|
@@ -205,6 +179,30 @@ class HttpService {
|
|
|
205
179
|
}
|
|
206
180
|
return result;
|
|
207
181
|
}
|
|
182
|
+
_handleTransferState(obs, options) {
|
|
183
|
+
if (!options?.transferState) {
|
|
184
|
+
return obs;
|
|
185
|
+
}
|
|
186
|
+
if (!options.id) {
|
|
187
|
+
throw Error('To use transferState, set request id');
|
|
188
|
+
}
|
|
189
|
+
let key = makeStateKey(options.id);
|
|
190
|
+
// Check if data exists in TransferState (to avoid refetching)
|
|
191
|
+
if (this.transferState.hasKey(key)) {
|
|
192
|
+
const data = this.transferState.get(key, null);
|
|
193
|
+
if (options.transferState.clearAfterUse || true) {
|
|
194
|
+
this.transferState.remove(key); // Free memory
|
|
195
|
+
}
|
|
196
|
+
return of(data);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
return obs.pipe(tap((d) => {
|
|
200
|
+
if (isPlatformServer(this.platformId)) {
|
|
201
|
+
this.transferState.set(key, d);
|
|
202
|
+
}
|
|
203
|
+
}));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
208
206
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: HttpService, deps: [{ token: i1.HttpClient }, { token: i0.TransferState }, { token: PLATFORM_ID }, { token: HttpServiceBaseUrl, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
209
207
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: HttpService, providedIn: 'root' });
|
|
210
208
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-http.mjs","sources":["../../../projects/ng0/http/types.ts","../../../projects/ng0/http/http.service.ts","../../../projects/ng0/http/bootkit-ng0-http.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport const HttpServiceBaseUrl = new InjectionToken('HttpServiceBaseUrl');\r\n\r\nexport interface HttpOptions {\r\n /** Http request ID */\r\n id?: string;\r\n query?: any;\r\n pathType?: 'relative' | 'absolute';\r\n responseType?: 'json' | 'blob' | 'text';\r\n contentType?: 'json' | 'multipart/form-data';\r\n reportProgress?: boolean;\r\n observe?: 'response' | 'body' | 'events';\r\n displayServerErrors?: boolean;\r\n sendAuthToken?: boolean;\r\n\r\n /** Save response in transfer state */\r\n transferState?: {\r\n enable: boolean,\r\n clearAfterUse?: boolean; \r\n };\r\n}\r\n\r\nexport abstract class HttpEvent {\r\n constructor(public readonly url: string, public readonly options?: HttpOptions) {\r\n }\r\n}\r\n\r\nexport class HttpRequestSendEvent extends HttpEvent {\r\n constructor(url: string, options?: HttpOptions) {\r\n super(url, options);\r\n }\r\n}\r\n\r\nexport class HttpResponseEvent extends HttpEvent {\r\n constructor(url: string, options?: HttpOptions) {\r\n super(url, options);\r\n }\r\n}\r\n\r\nexport class HttpErrorEvent extends HttpEvent {\r\n constructor(url: string, options?: HttpOptions) {\r\n super(url, options);\r\n }\r\n}\r\n","import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';\r\nimport { map, Observable, of, Subject, tap } from 'rxjs';\r\nimport { HttpErrorEvent, HttpEvent, HttpOptions, HttpRequestSendEvent, HttpResponseEvent, HttpServiceBaseUrl } from './types';\r\nimport { Inject, Injectable, makeStateKey, Optional, PLATFORM_ID, TransferState } from '@angular/core';\r\nimport { isPlatformServer } from '@angular/common';\r\nimport { DataRequest, DataResult } from '@bootkit/ng0/data';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HttpService {\r\n private _eventsSubject = new Subject<HttpEvent>();\r\n private _baseUrl?: string;\r\n\r\n public events = this._eventsSubject.asObservable();\r\n public defaultHeaders?: HttpHeaders;\r\n\r\n constructor(\r\n private _http: HttpClient,\r\n private transferState: TransferState,\r\n @Inject(PLATFORM_ID) private platformId: object,\r\n @Optional() @Inject(HttpServiceBaseUrl) baseUrl?: string\r\n ) {\r\n this._baseUrl = typeof baseUrl == 'string' ? baseUrl : '';\r\n }\r\n\r\n public get<T>(url: string, options?: HttpOptions): Observable<T> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n let obs = this.tap<T>(this._http.get<T>(URL, OPTIONS), url, options);\r\n obs = this._handleTransferState(obs, options);\r\n return obs;\r\n }\r\n\r\n private _handleTransferState<T>(obs: Observable<T>, options: HttpOptions | undefined): Observable<T> {\r\n if (!options?.transferState) {\r\n return obs;\r\n }\r\n\r\n if (!options.id) {\r\n throw Error('To use transferState, set request id')\r\n }\r\n\r\n let key = makeStateKey<T>(options.id!);\r\n\r\n // Check if data exists in TransferState (to avoid refetching)\r\n if (this.transferState.hasKey(key)) {\r\n const data = this.transferState.get<T>(key, null!);\r\n\r\n if(options.transferState.clearAfterUse || true) { \r\n this.transferState.remove(key); // Free memory\r\n }\r\n \r\n return of<T>(data);\r\n } else {\r\n return obs.pipe(\r\n tap((d) => {\r\n if (isPlatformServer(this.platformId)) {\r\n this.transferState.set(key, d);\r\n }\r\n })\r\n )\r\n }\r\n }\r\n\r\n public getResult<T>(url: string, request: DataRequest, options?: HttpOptions): Observable<DataResult<T>> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n options = options || {};\r\n options.query = { ...options.query, ...this.mapDataRequesToQueryObject(request) };\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n var o = this._http.get<{ data: any[], total: number }>(URL, OPTIONS)\r\n .pipe(\r\n map((x: any) => new DataResult(request, x.data, x.total))\r\n );\r\n\r\n return this.tap(o, url, options);\r\n }\r\n\r\n public post<T>(url: string, body: any, options?: HttpOptions): Observable<T> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n const BODY = this.makeBody(body, options);\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n return this.tap<T>(this._http.post(URL, BODY, OPTIONS), url, options);\r\n }\r\n\r\n public put<T>(url: string, body: any, options?: HttpOptions): Observable<T> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n const BODY = this.makeBody(body, options);\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n return this.tap<T>(this._http.put(URL, BODY, OPTIONS), url, options);\r\n }\r\n\r\n public delete<T>(url: string, options?: HttpOptions): Observable<T> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n return this.tap<T>(this._http.delete(URL, OPTIONS), url, options);\r\n }\r\n\r\n private tap<T>(o: Observable<any>, url: string, options?: HttpOptions): Observable<T> {\r\n return o.pipe(\r\n tap({\r\n next: r => {\r\n this._eventsSubject.next(new HttpResponseEvent(url, options));\r\n },\r\n error: e => {\r\n this._eventsSubject.next(new HttpErrorEvent(url, options))\r\n }\r\n })\r\n )\r\n }\r\n\r\n private makeUrl(url: string, options?: HttpOptions) {\r\n return (options?.pathType === 'absolute') ? url : (this._baseUrl + url);\r\n }\r\n\r\n private makeHttpClientOptions(options?: HttpOptions) {\r\n if (!options) {\r\n return undefined;\r\n }\r\n\r\n const ngOptions: any = {};\r\n\r\n // Query String\r\n const query = options.query;\r\n if (typeof query === 'object') {\r\n let params = new HttpParams();\r\n for (const key in query) {\r\n if (query.hasOwnProperty(key)) {\r\n const value = query[key];\r\n const type = typeof value;\r\n if (type === 'string' || type === 'number' || type === 'boolean') {\r\n params = params.set(key, value);\r\n }\r\n }\r\n }\r\n ngOptions.params = params;\r\n }\r\n\r\n // Response Type\r\n // if (options.responseType) {\r\n ngOptions.responseType = options.responseType;\r\n // }\r\n\r\n if (!options.sendAuthToken) {\r\n }\r\n\r\n ngOptions.headers = this.defaultHeaders;\r\n ngOptions.reportProgress = options.reportProgress;\r\n ngOptions.observe = options.observe;\r\n\r\n return ngOptions;\r\n }\r\n\r\n private makeBody(body: any, options?: HttpOptions) {\r\n body = this.processBodyFields(body);\r\n if (!options || !options.contentType || options.contentType !== 'multipart/form-data') {\r\n return body;\r\n }\r\n\r\n // contentType is multipart/form-data\r\n const formData = new FormData();\r\n for (const key in body) {\r\n if (body.hasOwnProperty(key)) {\r\n const field = body[key];\r\n let value;\r\n\r\n if (typeof field === 'string' || field instanceof File) {\r\n value = field;\r\n } else if (typeof field === 'number') {\r\n value = field.toString();\r\n } else if (typeof field === 'object') {\r\n value = JSON.stringify(field);\r\n }\r\n\r\n if (value) {\r\n formData.append(key, value);\r\n }\r\n }\r\n }\r\n return formData;\r\n }\r\n\r\n private processBodyFields(body: any) {\r\n return body;\r\n }\r\n\r\n private mapDataRequesToQueryObject(request: DataRequest) {\r\n var result: { [key: string]: any } = {};\r\n\r\n if (!request) {\r\n return result;\r\n }\r\n\r\n if (Number.isInteger(request.pageIndex) && Number.isInteger(request.pageSize)) {\r\n result['page.size'] = request.pageSize;\r\n result['page.index'] = request.pageIndex;\r\n }\r\n\r\n if (request.sort) {\r\n result['sort[field]'] = request.sort.field;\r\n result['sort[asc]'] = request.sort.asc;\r\n }\r\n\r\n for (let i = 0; i < request.filters.length; i++) {\r\n const filter = request.filters[i];\r\n result[`filters[${i}].field`] = filter.field;\r\n result[`filters[${i}].operator`] = filter.operator;\r\n result[`filters[${i}].value`] = filter.value;\r\n }\r\n\r\n if (typeof request.computeTotal == 'boolean') {\r\n result['ct'] = request.computeTotal;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-http.mjs","sources":["../../../projects/ng0/http/types.ts","../../../projects/ng0/http/http.service.ts","../../../projects/ng0/http/bootkit-ng0-http.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport const HttpServiceBaseUrl = new InjectionToken('HttpServiceBaseUrl');\r\n\r\nexport interface HttpOptions {\r\n /** Http request ID */\r\n id?: string;\r\n query?: any;\r\n pathType?: 'relative' | 'absolute';\r\n responseType?: 'json' | 'blob' | 'text';\r\n contentType?: 'json' | 'multipart/form-data';\r\n reportProgress?: boolean;\r\n observe?: 'response' | 'body' | 'events';\r\n\r\n /** \r\n * Save response in transfer state \r\n */\r\n transferState?: {\r\n enable: boolean,\r\n clearAfterUse?: boolean; \r\n };\r\n}\r\n\r\nexport abstract class HttpEvent {\r\n constructor(public readonly url: string, public readonly options?: HttpOptions) {\r\n }\r\n}\r\n\r\nexport class HttpRequestSendEvent extends HttpEvent {\r\n constructor(url: string, options?: HttpOptions) {\r\n super(url, options);\r\n }\r\n}\r\n\r\nexport class HttpResponseEvent extends HttpEvent {\r\n constructor(url: string, options?: HttpOptions) {\r\n super(url, options);\r\n }\r\n}\r\n\r\nexport class HttpErrorEvent extends HttpEvent {\r\n constructor(url: string, options?: HttpOptions) {\r\n super(url, options);\r\n }\r\n}\r\n","import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';\r\nimport { map, Observable, of, Subject, tap } from 'rxjs';\r\nimport { HttpErrorEvent, HttpEvent, HttpOptions, HttpRequestSendEvent, HttpResponseEvent, HttpServiceBaseUrl } from './types';\r\nimport { Inject, Injectable, makeStateKey, Optional, PLATFORM_ID, TransferState } from '@angular/core';\r\nimport { isPlatformServer } from '@angular/common';\r\nimport { DataRequest, DataResult } from '@bootkit/ng0/data';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HttpService {\r\n private _eventsSubject = new Subject<HttpEvent>();\r\n private _baseUrl?: string;\r\n\r\n public events = this._eventsSubject.asObservable();\r\n public defaultHeaders?: HttpHeaders;\r\n\r\n constructor(\r\n private _http: HttpClient,\r\n private transferState: TransferState,\r\n @Inject(PLATFORM_ID) private platformId: object,\r\n @Optional() @Inject(HttpServiceBaseUrl) baseUrl?: string\r\n ) {\r\n this._baseUrl = typeof baseUrl == 'string' ? baseUrl : '';\r\n }\r\n\r\n public get<T>(url: string, options?: HttpOptions): Observable<T> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n let obs = this.tap<T>(this._http.get<T>(URL, OPTIONS), url, options);\r\n obs = this._handleTransferState(obs, options);\r\n return obs;\r\n }\r\n\r\n public getResult<T>(url: string, request: DataRequest, options?: HttpOptions): Observable<DataResult<T>> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n options = options || {};\r\n options.query = { ...options.query, ...this.mapDataRequesToQueryObject(request) };\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n var o = this._http.get<{ data: any[], total: number }>(URL, OPTIONS)\r\n .pipe(\r\n map((x: any) => new DataResult(request, x.data, x.total))\r\n );\r\n\r\n return this.tap(o, url, options);\r\n }\r\n\r\n public post<T>(url: string, body: any, options?: HttpOptions): Observable<T> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n const BODY = this.makeBody(body, options);\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n return this.tap<T>(this._http.post(URL, BODY, OPTIONS), url, options);\r\n }\r\n\r\n public put<T>(url: string, body: any, options?: HttpOptions): Observable<T> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n const BODY = this.makeBody(body, options);\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n return this.tap<T>(this._http.put(URL, BODY, OPTIONS), url, options);\r\n }\r\n\r\n public delete<T>(url: string, options?: HttpOptions): Observable<T> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n return this.tap<T>(this._http.delete(URL, OPTIONS), url, options);\r\n }\r\n\r\n private tap<T>(o: Observable<any>, url: string, options?: HttpOptions): Observable<T> {\r\n return o.pipe(\r\n tap({\r\n next: r => {\r\n this._eventsSubject.next(new HttpResponseEvent(url, options));\r\n },\r\n error: e => {\r\n this._eventsSubject.next(new HttpErrorEvent(url, options))\r\n }\r\n })\r\n )\r\n }\r\n\r\n private makeUrl(url: string, options?: HttpOptions) {\r\n return (options?.pathType === 'absolute') ? url : (this._baseUrl + url);\r\n }\r\n\r\n private makeHttpClientOptions(options?: HttpOptions) {\r\n if (!options) {\r\n return undefined;\r\n }\r\n\r\n const ngOptions: any = {};\r\n\r\n // Query String\r\n const query = options.query;\r\n if (typeof query === 'object') {\r\n let params = new HttpParams();\r\n for (const key in query) {\r\n if (query.hasOwnProperty(key)) {\r\n const value = query[key];\r\n const type = typeof value;\r\n if (type === 'string' || type === 'number' || type === 'boolean') {\r\n params = params.set(key, value);\r\n }\r\n }\r\n }\r\n ngOptions.params = params;\r\n }\r\n\r\n // Response Type\r\n // if (options.responseType) {\r\n ngOptions.responseType = options.responseType;\r\n // }\r\n\r\n ngOptions.headers = this.defaultHeaders;\r\n ngOptions.reportProgress = options.reportProgress;\r\n ngOptions.observe = options.observe;\r\n\r\n return ngOptions;\r\n }\r\n\r\n private makeBody(body: any, options?: HttpOptions) {\r\n body = this.processBodyFields(body);\r\n if (!options || !options.contentType || options.contentType !== 'multipart/form-data') {\r\n return body;\r\n }\r\n\r\n // contentType is multipart/form-data\r\n const formData = new FormData();\r\n for (const key in body) {\r\n if (body.hasOwnProperty(key)) {\r\n const field = body[key];\r\n let value;\r\n\r\n if (typeof field === 'string' || field instanceof File) {\r\n value = field;\r\n } else if (typeof field === 'number') {\r\n value = field.toString();\r\n } else if (typeof field === 'object') {\r\n value = JSON.stringify(field);\r\n }\r\n\r\n if (value) {\r\n formData.append(key, value);\r\n }\r\n }\r\n }\r\n return formData;\r\n }\r\n\r\n private processBodyFields(body: any) {\r\n return body;\r\n }\r\n\r\n private mapDataRequesToQueryObject(request: DataRequest) {\r\n var result: { [key: string]: any } = {};\r\n\r\n if (!request) {\r\n return result;\r\n }\r\n\r\n if (Number.isInteger(request.pageIndex) && Number.isInteger(request.pageSize)) {\r\n result['page.size'] = request.pageSize;\r\n result['page.index'] = request.pageIndex;\r\n }\r\n\r\n if (request.sort) {\r\n result['sort[field]'] = request.sort.field;\r\n result['sort[asc]'] = request.sort.asc;\r\n }\r\n\r\n for (let i = 0; i < request.filters.length; i++) {\r\n const filter = request.filters[i];\r\n result[`filters[${i}].field`] = filter.field;\r\n result[`filters[${i}].operator`] = filter.operator;\r\n result[`filters[${i}].value`] = filter.value;\r\n }\r\n\r\n if (typeof request.computeTotal == 'boolean') {\r\n result['ct'] = request.computeTotal;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private _handleTransferState<T>(obs: Observable<T>, options: HttpOptions | undefined): Observable<T> {\r\n if (!options?.transferState) {\r\n return obs;\r\n }\r\n\r\n if (!options.id) {\r\n throw Error('To use transferState, set request id')\r\n }\r\n\r\n let key = makeStateKey<T>(options.id!);\r\n\r\n // Check if data exists in TransferState (to avoid refetching)\r\n if (this.transferState.hasKey(key)) {\r\n const data = this.transferState.get<T>(key, null!);\r\n\r\n if(options.transferState.clearAfterUse || true) { \r\n this.transferState.remove(key); // Free memory\r\n }\r\n \r\n return of<T>(data);\r\n } else {\r\n return obs.pipe(\r\n tap((d) => {\r\n if (isPlatformServer(this.platformId)) {\r\n this.transferState.set(key, d);\r\n }\r\n })\r\n )\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Injectable, Pipe, NgModule, InjectionToken } from '@angular/core';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { CommonModule } from '@angular/common';
|
|
5
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
6
|
+
|
|
7
|
+
/** Locale */
|
|
8
|
+
class Locale {
|
|
9
|
+
definition;
|
|
10
|
+
constructor(definition) {
|
|
11
|
+
this.definition = definition;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Returns the name of the locale
|
|
15
|
+
* @returns The name of the locale
|
|
16
|
+
*/
|
|
17
|
+
get name() {
|
|
18
|
+
return this.definition.name;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Translates a key in the dictionary
|
|
22
|
+
* @param key The key to look up
|
|
23
|
+
* @returns The translated string or the key itself if not found
|
|
24
|
+
*/
|
|
25
|
+
translate(key) {
|
|
26
|
+
return this.definition.dictionary[key] ?? key;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Translates an enum value
|
|
30
|
+
* @param enumName The name of the enum
|
|
31
|
+
* @param enumValue The value of the enum to translate
|
|
32
|
+
* @returns The translated string or the enum value itself if not found
|
|
33
|
+
*/
|
|
34
|
+
translateEnum(enumName, enumValue) {
|
|
35
|
+
if (this.definition?.enums && this.definition.enums[enumName])
|
|
36
|
+
return this.definition.enums[enumName][enumValue];
|
|
37
|
+
else
|
|
38
|
+
return enumValue;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Translates a form validation error
|
|
42
|
+
* @param errorKey The key of the error to translate
|
|
43
|
+
* @param error The error object
|
|
44
|
+
*/
|
|
45
|
+
translateError(errorKey, error, fallbackMessage = undefined) {
|
|
46
|
+
const errors = this.definition?.form?.validation?.errors;
|
|
47
|
+
if (!errors) {
|
|
48
|
+
return fallbackMessage;
|
|
49
|
+
}
|
|
50
|
+
const translatorFunc = errors[errorKey] ?? errors['*'];
|
|
51
|
+
return typeof translatorFunc === 'function' ? translatorFunc(error) : fallbackMessage;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Translates validation errors
|
|
55
|
+
* @param errors Validation errors object
|
|
56
|
+
* @returns Array of translated validation errors
|
|
57
|
+
*/
|
|
58
|
+
translateErrors(errors) {
|
|
59
|
+
const result = [];
|
|
60
|
+
for (const key in errors) {
|
|
61
|
+
if (Object.prototype.hasOwnProperty.call(errors, key)) {
|
|
62
|
+
result.push({
|
|
63
|
+
key: key,
|
|
64
|
+
value: errors[key],
|
|
65
|
+
text: this.translateError(key, errors[key])
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Translates the first error in the validation errors object
|
|
73
|
+
* @param errors Validation errors object
|
|
74
|
+
* @returns TranslatedValidationError or undefined if no errors
|
|
75
|
+
*/
|
|
76
|
+
translateFirstError(errors, fallbackMessage = undefined) {
|
|
77
|
+
const keys = Object.keys(errors);
|
|
78
|
+
if (keys.length === 0) {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
const key = keys[0];
|
|
82
|
+
const value = errors[key];
|
|
83
|
+
return {
|
|
84
|
+
key,
|
|
85
|
+
value,
|
|
86
|
+
text: this.translateError(key, value, fallbackMessage)
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Clones and extends this object and returns a new Locale (without modifying this object).
|
|
91
|
+
*/
|
|
92
|
+
extend(values) {
|
|
93
|
+
return new Locale({
|
|
94
|
+
name: this.definition.name,
|
|
95
|
+
rtl: this.definition.rtl,
|
|
96
|
+
dictionary: { ...this.definition.dictionary, ...values?.dictionary },
|
|
97
|
+
enums: { ...this.definition.enums, ...values?.enums },
|
|
98
|
+
form: {
|
|
99
|
+
validation: {
|
|
100
|
+
errors: { ...this.definition?.form?.validation?.errors, ...values?.form?.validation?.errors }
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
*
|
|
107
|
+
* @param date Date string or timestamp
|
|
108
|
+
* @returns Formatted date string based on the locale
|
|
109
|
+
*/
|
|
110
|
+
formatDate(date, format) {
|
|
111
|
+
return date ? new Date(date).toLocaleDateString(this.definition.name, { hour: '2-digit', minute: '2-digit' }) : '';
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
class LocalizationService {
|
|
116
|
+
_locales = [];
|
|
117
|
+
_activeLocale;
|
|
118
|
+
_changeSubject = new Subject();
|
|
119
|
+
change = this._changeSubject.asObservable();
|
|
120
|
+
constructor() {
|
|
121
|
+
}
|
|
122
|
+
add(l) {
|
|
123
|
+
if (l instanceof Locale) {
|
|
124
|
+
this._locales.push(l);
|
|
125
|
+
}
|
|
126
|
+
else if (Array.isArray(l)) {
|
|
127
|
+
l.forEach(x => this.add(x));
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
throw Error('Invalid locale');
|
|
131
|
+
}
|
|
132
|
+
if (this._locales.length == 1) {
|
|
133
|
+
this._activeLocale = this._locales[0];
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/** Changes the active locale */
|
|
137
|
+
set(localeName) {
|
|
138
|
+
const locale = this._locales.find(x => x.name === localeName);
|
|
139
|
+
if (locale) {
|
|
140
|
+
this._changeSubject.next({ old: this._activeLocale, new: locale });
|
|
141
|
+
this._activeLocale = locale;
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
throw Error('Locale not found.');
|
|
145
|
+
}
|
|
146
|
+
/** Gets the active locale */
|
|
147
|
+
get() {
|
|
148
|
+
return this._activeLocale;
|
|
149
|
+
}
|
|
150
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: LocalizationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
151
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: LocalizationService, providedIn: 'root' });
|
|
152
|
+
}
|
|
153
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: LocalizationService, decorators: [{
|
|
154
|
+
type: Injectable,
|
|
155
|
+
args: [{
|
|
156
|
+
providedIn: 'root'
|
|
157
|
+
}]
|
|
158
|
+
}], ctorParameters: () => [] });
|
|
159
|
+
|
|
160
|
+
class TranslatePipe {
|
|
161
|
+
_locale;
|
|
162
|
+
_recompute = true;
|
|
163
|
+
_value;
|
|
164
|
+
constructor(localizationService) {
|
|
165
|
+
this._locale = localizationService.get();
|
|
166
|
+
localizationService.change.pipe(takeUntilDestroyed()).subscribe(x => {
|
|
167
|
+
this._locale = x.new;
|
|
168
|
+
this._recompute = true;
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
transform(dictionaryKey, ...args) {
|
|
172
|
+
if (this._recompute) {
|
|
173
|
+
this._value = this._locale.translate(dictionaryKey);
|
|
174
|
+
this._recompute = false;
|
|
175
|
+
}
|
|
176
|
+
return this._value;
|
|
177
|
+
}
|
|
178
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TranslatePipe, deps: [{ token: LocalizationService }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
179
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.6", ngImport: i0, type: TranslatePipe, isStandalone: true, name: "ng0Translate", pure: false });
|
|
180
|
+
}
|
|
181
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TranslatePipe, decorators: [{
|
|
182
|
+
type: Pipe,
|
|
183
|
+
args: [{
|
|
184
|
+
name: 'ng0Translate',
|
|
185
|
+
standalone: true,
|
|
186
|
+
pure: false
|
|
187
|
+
}]
|
|
188
|
+
}], ctorParameters: () => [{ type: LocalizationService }] });
|
|
189
|
+
|
|
190
|
+
class EnumPipe {
|
|
191
|
+
_locale;
|
|
192
|
+
_recompute = true;
|
|
193
|
+
_value;
|
|
194
|
+
constructor(localeProvider) {
|
|
195
|
+
this._locale = localeProvider.get();
|
|
196
|
+
localeProvider.change.pipe(takeUntilDestroyed()).subscribe(x => {
|
|
197
|
+
this._locale = x.new;
|
|
198
|
+
this._recompute = true;
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
transform(enumValue, ...args) {
|
|
202
|
+
if (this._recompute) {
|
|
203
|
+
var enumName = args[0];
|
|
204
|
+
var nullDictionaryKey = args[1];
|
|
205
|
+
this._value = enumValue ?
|
|
206
|
+
(this._locale.translateEnum(enumName, enumValue) ?? enumValue) :
|
|
207
|
+
(nullDictionaryKey ? this._locale.translate(nullDictionaryKey) : '');
|
|
208
|
+
this._recompute = false;
|
|
209
|
+
}
|
|
210
|
+
return this._value;
|
|
211
|
+
}
|
|
212
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: EnumPipe, deps: [{ token: LocalizationService }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
213
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.6", ngImport: i0, type: EnumPipe, isStandalone: true, name: "ng0Enum", pure: false });
|
|
214
|
+
}
|
|
215
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: EnumPipe, decorators: [{
|
|
216
|
+
type: Pipe,
|
|
217
|
+
args: [{
|
|
218
|
+
name: 'ng0Enum',
|
|
219
|
+
standalone: true,
|
|
220
|
+
pure: false
|
|
221
|
+
}]
|
|
222
|
+
}], ctorParameters: () => [{ type: LocalizationService }] });
|
|
223
|
+
|
|
224
|
+
class BooleanPipe {
|
|
225
|
+
localeProvider;
|
|
226
|
+
constructor(localeProvider) {
|
|
227
|
+
this.localeProvider = localeProvider;
|
|
228
|
+
}
|
|
229
|
+
transform(value, falseKey = 'true', trueKey) {
|
|
230
|
+
return this.localeProvider.get().translate(value ? trueKey : falseKey);
|
|
231
|
+
}
|
|
232
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: BooleanPipe, deps: [{ token: LocalizationService }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
233
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.6", ngImport: i0, type: BooleanPipe, isStandalone: true, name: "ng0Bool" });
|
|
234
|
+
}
|
|
235
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: BooleanPipe, decorators: [{
|
|
236
|
+
type: Pipe,
|
|
237
|
+
args: [{
|
|
238
|
+
name: 'ng0Bool',
|
|
239
|
+
standalone: true,
|
|
240
|
+
}]
|
|
241
|
+
}], ctorParameters: () => [{ type: LocalizationService }] });
|
|
242
|
+
|
|
243
|
+
class DatePipe {
|
|
244
|
+
_locale;
|
|
245
|
+
_value;
|
|
246
|
+
constructor(localeProvider) {
|
|
247
|
+
this._locale = localeProvider.get();
|
|
248
|
+
localeProvider.change.pipe(takeUntilDestroyed()).subscribe(x => {
|
|
249
|
+
this._locale = x.new;
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
transform(value) {
|
|
253
|
+
return this._locale.formatDate(value, '');
|
|
254
|
+
}
|
|
255
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: DatePipe, deps: [{ token: LocalizationService }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
256
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.6", ngImport: i0, type: DatePipe, isStandalone: true, name: "ng0Date" });
|
|
257
|
+
}
|
|
258
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: DatePipe, decorators: [{
|
|
259
|
+
type: Pipe,
|
|
260
|
+
args: [{
|
|
261
|
+
name: 'ng0Date',
|
|
262
|
+
standalone: true
|
|
263
|
+
}]
|
|
264
|
+
}], ctorParameters: () => [{ type: LocalizationService }] });
|
|
265
|
+
|
|
266
|
+
const Declarables = [
|
|
267
|
+
TranslatePipe,
|
|
268
|
+
EnumPipe,
|
|
269
|
+
BooleanPipe,
|
|
270
|
+
DatePipe
|
|
271
|
+
];
|
|
272
|
+
class LocalizationModule {
|
|
273
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: LocalizationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
274
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.6", ngImport: i0, type: LocalizationModule, imports: [CommonModule, TranslatePipe,
|
|
275
|
+
EnumPipe,
|
|
276
|
+
BooleanPipe,
|
|
277
|
+
DatePipe], exports: [TranslatePipe,
|
|
278
|
+
EnumPipe,
|
|
279
|
+
BooleanPipe,
|
|
280
|
+
DatePipe] });
|
|
281
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: LocalizationModule, imports: [CommonModule] });
|
|
282
|
+
}
|
|
283
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: LocalizationModule, decorators: [{
|
|
284
|
+
type: NgModule,
|
|
285
|
+
args: [{
|
|
286
|
+
imports: [
|
|
287
|
+
CommonModule,
|
|
288
|
+
Declarables
|
|
289
|
+
],
|
|
290
|
+
exports: Declarables
|
|
291
|
+
}]
|
|
292
|
+
}] });
|
|
293
|
+
|
|
294
|
+
const LOCALE = new InjectionToken('LOCALE');
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Generated bundle index. Do not edit.
|
|
298
|
+
*/
|
|
299
|
+
|
|
300
|
+
export { BooleanPipe, DatePipe, EnumPipe, LOCALE, Locale, LocalizationModule, LocalizationService, TranslatePipe };
|
|
301
|
+
//# sourceMappingURL=bootkit-ng0-localization.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-localization.mjs","sources":["../../../projects/ng0/localization/locale.ts","../../../projects/ng0/localization/localization.service.ts","../../../projects/ng0/localization/translate.pipe.ts","../../../projects/ng0/localization/enum.pipe.ts","../../../projects/ng0/localization/boolean-pipe.ts","../../../projects/ng0/localization/date.pipe.ts","../../../projects/ng0/localization/localization.module.ts","../../../projects/ng0/localization/types.ts","../../../projects/ng0/localization/bootkit-ng0-localization.ts"],"sourcesContent":["import { LocaleDefinitionExtend, LocaleDefinition } from \"./locale-definition\";\r\nimport { TranslatedValidationError } from \"./types\";\r\n\r\n/** Locale */\r\nexport class Locale {\r\n\r\n constructor(public readonly definition: LocaleDefinition) {\r\n }\r\n\r\n /** \r\n * Returns the name of the locale\r\n * @returns The name of the locale\r\n */\r\n get name(): string {\r\n return this.definition.name;\r\n }\r\n\r\n /** \r\n * Translates a key in the dictionary\r\n * @param key The key to look up\r\n * @returns The translated string or the key itself if not found\r\n */\r\n translate(key: string): string {\r\n return this.definition.dictionary[key] ?? key;\r\n }\r\n\r\n /**\r\n * Translates an enum value \r\n * @param enumName The name of the enum \r\n * @param enumValue The value of the enum to translate \r\n * @returns The translated string or the enum value itself if not found \r\n */\r\n translateEnum(enumName: string, enumValue: any): string | undefined {\r\n if (this.definition?.enums && this.definition.enums[enumName])\r\n return this.definition.enums[enumName][enumValue];\r\n else\r\n return enumValue;\r\n }\r\n\r\n /** \r\n * Translates a form validation error\r\n * @param errorKey The key of the error to translate\r\n * @param error The error object\r\n */\r\n translateError(errorKey: string, error: any, fallbackMessage: string | undefined = undefined): string | undefined {\r\n const errors = this.definition?.form?.validation?.errors;\r\n\r\n if (!errors) {\r\n return fallbackMessage;\r\n }\r\n\r\n const translatorFunc = errors[errorKey] ?? errors['*'];\r\n return typeof translatorFunc === 'function' ? translatorFunc(error) : fallbackMessage;\r\n }\r\n\r\n /** \r\n * Translates validation errors \r\n * @param errors Validation errors object\r\n * @returns Array of translated validation errors\r\n */\r\n translateErrors(errors: any): TranslatedValidationError[] {\r\n const result: TranslatedValidationError[] = [];\r\n for (const key in errors) {\r\n if (Object.prototype.hasOwnProperty.call(errors, key)) {\r\n result.push({\r\n key: key,\r\n value: errors[key],\r\n text: this.translateError(key, errors[key])\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /** \r\n * Translates the first error in the validation errors object \r\n * @param errors Validation errors object\r\n * @returns TranslatedValidationError or undefined if no errors\r\n */\r\n translateFirstError(errors: any, fallbackMessage: string | undefined = undefined): TranslatedValidationError | undefined {\r\n const keys = Object.keys(errors);\r\n if (keys.length === 0) {\r\n return undefined;\r\n }\r\n\r\n const key = keys[0];\r\n const value = errors[key];\r\n return {\r\n key,\r\n value,\r\n text: this.translateError(key, value, fallbackMessage)\r\n };\r\n }\r\n\r\n /**\r\n * Clones and extends this object and returns a new Locale (without modifying this object).\r\n */\r\n extend(values?: LocaleDefinitionExtend): Locale {\r\n return new Locale({\r\n name: this.definition.name,\r\n rtl: this.definition.rtl,\r\n dictionary: { ...this.definition.dictionary, ...values?.dictionary },\r\n enums: { ...this.definition.enums, ...values?.enums },\r\n form: {\r\n validation: {\r\n errors: { ...this.definition?.form?.validation?.errors, ...values?.form?.validation?.errors }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * \r\n * @param date Date string or timestamp\r\n * @returns Formatted date string based on the locale \r\n */\r\n formatDate(date: string | number, format: string): string {\r\n return date ? new Date(date).toLocaleDateString(this.definition.name, { hour: '2-digit', minute: '2-digit' }) : '';\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { Locale } from './locale';\r\nimport { LocaleChangeEvent } from './types';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalizationService {\r\n private _locales: Locale[] = [];\r\n private _activeLocale?: Locale;\r\n private _changeSubject = new Subject<LocaleChangeEvent>();\r\n readonly change = this._changeSubject.asObservable();\r\n\r\n constructor() {\r\n }\r\n\r\n /** Adds a Locale */\r\n add(locale: Locale): void;\r\n /** Adds an array of Locales to this LocaleProvider */\r\n add(locales: Locale[]): void;\r\n add(l: any): void {\r\n if (l instanceof Locale) {\r\n this._locales.push(l);\r\n } else if (Array.isArray(l)) {\r\n l.forEach(x => this.add(x));\r\n } else {\r\n throw Error('Invalid locale');\r\n }\r\n\r\n if (this._locales.length == 1) {\r\n this._activeLocale = this._locales[0];\r\n }\r\n }\r\n\r\n /** Changes the active locale */\r\n set(localeName: string): void {\r\n const locale = this._locales.find(x => x.name === localeName);\r\n if (locale) {\r\n this._changeSubject.next({ old: this._activeLocale, new: locale });\r\n this._activeLocale = locale;\r\n return;\r\n }\r\n\r\n throw Error('Locale not found.');\r\n }\r\n\r\n /** Gets the active locale */\r\n get(): Locale | undefined {\r\n return this._activeLocale;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\nimport { Locale } from './locale';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\n@Pipe({\r\n name: 'ng0Translate',\r\n standalone: true,\r\n pure: false\r\n})\r\nexport class TranslatePipe implements PipeTransform {\r\n private _locale: Locale;\r\n private _recompute = true;\r\n private _value!: string;\r\n\r\n constructor(localizationService: LocalizationService) {\r\n this._locale = localizationService.get();\r\n\r\n localizationService.change.pipe(takeUntilDestroyed()).subscribe(x => {\r\n this._locale = x.new;\r\n this._recompute = true;\r\n });\r\n }\r\n\r\n transform(dictionaryKey: string, ...args: unknown[]): string {\r\n if (this._recompute) {\r\n this._value = this._locale.translate(dictionaryKey);\r\n this._recompute = false;\r\n }\r\n\r\n return this._value;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\nimport { Locale } from './locale';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\n@Pipe({\r\n name: 'ng0Enum',\r\n standalone: true,\r\n pure: false\r\n})\r\nexport class EnumPipe implements PipeTransform {\r\n private _locale: Locale;\r\n private _recompute = true;\r\n private _value!: string;\r\n\r\n constructor(localeProvider: LocalizationService) {\r\n this._locale = localeProvider.get();\r\n\r\n localeProvider.change.pipe(takeUntilDestroyed()).subscribe(x => {\r\n this._locale = x.new;\r\n this._recompute = true;\r\n });\r\n }\r\n\r\n transform(enumValue?: string | null, ...args: string[]): string {\r\n if (this._recompute) {\r\n var enumName = args[0];\r\n var nullDictionaryKey = args[1];\r\n this._value = enumValue ?\r\n (this._locale.translateEnum(enumName, enumValue) ?? enumValue) :\r\n (nullDictionaryKey ? this._locale.translate(nullDictionaryKey) : '');\r\n\r\n this._recompute = false;\r\n }\r\n\r\n return this._value;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\n\r\n@Pipe({\r\n name: 'ng0Bool',\r\n standalone: true,\r\n})\r\nexport class BooleanPipe implements PipeTransform {\r\n\r\n constructor(private localeProvider: LocalizationService) {\r\n }\r\n\r\n transform(value: any, falseKey = 'true', trueKey: 'false') {\r\n return this.localeProvider.get().translate(value ? trueKey : falseKey);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Locale } from './locale';\r\nimport { LocalizationService } from './localization.service';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\n@Pipe({\r\n name: 'ng0Date',\r\n standalone: true\r\n})\r\nexport class DatePipe implements PipeTransform {\r\n private _locale: Locale;\r\n private _value!: string;\r\n\r\n constructor(localeProvider: LocalizationService) {\r\n this._locale = localeProvider.get();\r\n\r\n localeProvider.change.pipe(takeUntilDestroyed()).subscribe(x => {\r\n this._locale = x.new;\r\n });\r\n }\r\n\r\n transform(value: number | string): string {\r\n return this._locale.formatDate(value, '');\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { TranslatePipe } from './translate.pipe';\r\nimport { EnumPipe } from './enum.pipe';\r\nimport { BooleanPipe } from './boolean-pipe';\r\nimport { DatePipe } from './date.pipe';\r\n\r\nconst Declarables = [\r\n TranslatePipe,\r\n EnumPipe,\r\n BooleanPipe,\r\n DatePipe\r\n];\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n Declarables\r\n ],\r\n exports: Declarables\r\n})\r\nexport class LocalizationModule {\r\n}\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\nimport { Locale } from './locale';\r\n\r\nexport const LOCALE = new InjectionToken<Locale | LocalizationService>('LOCALE');\r\n\r\nexport interface TranslatedValidationError {\r\n /** Error key */\r\n key: string;\r\n \r\n /** Error object */\r\n value: any;\r\n \r\n /** localized error text */\r\n text?: string;\r\n }\r\n \r\n export interface LocaleChangeEvent {\r\n old?: Locale;\r\n new: Locale;\r\n }\r\n ","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.LocalizationService"],"mappings":"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"}
|
package/http/index.d.ts
CHANGED
|
@@ -14,9 +14,9 @@ interface HttpOptions {
|
|
|
14
14
|
contentType?: 'json' | 'multipart/form-data';
|
|
15
15
|
reportProgress?: boolean;
|
|
16
16
|
observe?: 'response' | 'body' | 'events';
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Save response in transfer state
|
|
19
|
+
*/
|
|
20
20
|
transferState?: {
|
|
21
21
|
enable: boolean;
|
|
22
22
|
clearAfterUse?: boolean;
|
|
@@ -47,7 +47,6 @@ declare class HttpService {
|
|
|
47
47
|
defaultHeaders?: HttpHeaders;
|
|
48
48
|
constructor(_http: HttpClient, transferState: TransferState, platformId: object, baseUrl?: string);
|
|
49
49
|
get<T>(url: string, options?: HttpOptions): Observable<T>;
|
|
50
|
-
private _handleTransferState;
|
|
51
50
|
getResult<T>(url: string, request: DataRequest, options?: HttpOptions): Observable<DataResult<T>>;
|
|
52
51
|
post<T>(url: string, body: any, options?: HttpOptions): Observable<T>;
|
|
53
52
|
put<T>(url: string, body: any, options?: HttpOptions): Observable<T>;
|
|
@@ -58,6 +57,7 @@ declare class HttpService {
|
|
|
58
57
|
private makeBody;
|
|
59
58
|
private processBodyFields;
|
|
60
59
|
private mapDataRequesToQueryObject;
|
|
60
|
+
private _handleTransferState;
|
|
61
61
|
static ɵfac: i0.ɵɵFactoryDeclaration<HttpService, [null, null, null, { optional: true; }]>;
|
|
62
62
|
static ɵprov: i0.ɵɵInjectableDeclaration<HttpService>;
|
|
63
63
|
}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, PipeTransform } from '@angular/core';
|
|
3
|
+
import * as rxjs from 'rxjs';
|
|
4
|
+
import * as i1 from '@angular/common';
|
|
5
|
+
|
|
6
|
+
/** Locale dictionary */
|
|
7
|
+
type LocaleDictionary = {
|
|
8
|
+
[key: string]: string;
|
|
9
|
+
};
|
|
10
|
+
type LocaleEnums = {
|
|
11
|
+
[enumName: string]: {
|
|
12
|
+
[enumValue: string]: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
/** Locale Error Translator */
|
|
16
|
+
type LocaleValidationErrorTranslator = (error: any) => string;
|
|
17
|
+
/** Locale validation error translator functions */
|
|
18
|
+
type LocaleValidationErrorTranslators = {
|
|
19
|
+
[key: string]: LocaleValidationErrorTranslator;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Locale definition
|
|
23
|
+
*/
|
|
24
|
+
interface LocaleDefinition {
|
|
25
|
+
/** Locale name */
|
|
26
|
+
readonly name: string;
|
|
27
|
+
/** Does this locale belongs to a RTL language */
|
|
28
|
+
readonly rtl?: boolean;
|
|
29
|
+
/** Locale dictionary */
|
|
30
|
+
dictionary?: LocaleDictionary;
|
|
31
|
+
enums?: LocaleEnums;
|
|
32
|
+
form?: {
|
|
33
|
+
validation?: {
|
|
34
|
+
/** Form validation error translators. */
|
|
35
|
+
errors?: LocaleValidationErrorTranslators;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
type LocaleDefinitionExtend = {
|
|
40
|
+
dictionary?: LocaleDictionary;
|
|
41
|
+
enums?: LocaleEnums;
|
|
42
|
+
form?: {
|
|
43
|
+
validation?: {
|
|
44
|
+
/** Form validation error translators. */
|
|
45
|
+
errors?: LocaleValidationErrorTranslators;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
declare class LocalizationService {
|
|
51
|
+
private _locales;
|
|
52
|
+
private _activeLocale?;
|
|
53
|
+
private _changeSubject;
|
|
54
|
+
readonly change: rxjs.Observable<LocaleChangeEvent>;
|
|
55
|
+
constructor();
|
|
56
|
+
/** Adds a Locale */
|
|
57
|
+
add(locale: Locale): void;
|
|
58
|
+
/** Adds an array of Locales to this LocaleProvider */
|
|
59
|
+
add(locales: Locale[]): void;
|
|
60
|
+
/** Changes the active locale */
|
|
61
|
+
set(localeName: string): void;
|
|
62
|
+
/** Gets the active locale */
|
|
63
|
+
get(): Locale | undefined;
|
|
64
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LocalizationService, never>;
|
|
65
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<LocalizationService>;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
declare const LOCALE: InjectionToken<LocalizationService | Locale>;
|
|
69
|
+
interface TranslatedValidationError {
|
|
70
|
+
/** Error key */
|
|
71
|
+
key: string;
|
|
72
|
+
/** Error object */
|
|
73
|
+
value: any;
|
|
74
|
+
/** localized error text */
|
|
75
|
+
text?: string;
|
|
76
|
+
}
|
|
77
|
+
interface LocaleChangeEvent {
|
|
78
|
+
old?: Locale;
|
|
79
|
+
new: Locale;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** Locale */
|
|
83
|
+
declare class Locale {
|
|
84
|
+
readonly definition: LocaleDefinition;
|
|
85
|
+
constructor(definition: LocaleDefinition);
|
|
86
|
+
/**
|
|
87
|
+
* Returns the name of the locale
|
|
88
|
+
* @returns The name of the locale
|
|
89
|
+
*/
|
|
90
|
+
get name(): string;
|
|
91
|
+
/**
|
|
92
|
+
* Translates a key in the dictionary
|
|
93
|
+
* @param key The key to look up
|
|
94
|
+
* @returns The translated string or the key itself if not found
|
|
95
|
+
*/
|
|
96
|
+
translate(key: string): string;
|
|
97
|
+
/**
|
|
98
|
+
* Translates an enum value
|
|
99
|
+
* @param enumName The name of the enum
|
|
100
|
+
* @param enumValue The value of the enum to translate
|
|
101
|
+
* @returns The translated string or the enum value itself if not found
|
|
102
|
+
*/
|
|
103
|
+
translateEnum(enumName: string, enumValue: any): string | undefined;
|
|
104
|
+
/**
|
|
105
|
+
* Translates a form validation error
|
|
106
|
+
* @param errorKey The key of the error to translate
|
|
107
|
+
* @param error The error object
|
|
108
|
+
*/
|
|
109
|
+
translateError(errorKey: string, error: any, fallbackMessage?: string | undefined): string | undefined;
|
|
110
|
+
/**
|
|
111
|
+
* Translates validation errors
|
|
112
|
+
* @param errors Validation errors object
|
|
113
|
+
* @returns Array of translated validation errors
|
|
114
|
+
*/
|
|
115
|
+
translateErrors(errors: any): TranslatedValidationError[];
|
|
116
|
+
/**
|
|
117
|
+
* Translates the first error in the validation errors object
|
|
118
|
+
* @param errors Validation errors object
|
|
119
|
+
* @returns TranslatedValidationError or undefined if no errors
|
|
120
|
+
*/
|
|
121
|
+
translateFirstError(errors: any, fallbackMessage?: string | undefined): TranslatedValidationError | undefined;
|
|
122
|
+
/**
|
|
123
|
+
* Clones and extends this object and returns a new Locale (without modifying this object).
|
|
124
|
+
*/
|
|
125
|
+
extend(values?: LocaleDefinitionExtend): Locale;
|
|
126
|
+
/**
|
|
127
|
+
*
|
|
128
|
+
* @param date Date string or timestamp
|
|
129
|
+
* @returns Formatted date string based on the locale
|
|
130
|
+
*/
|
|
131
|
+
formatDate(date: string | number, format: string): string;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
declare class TranslatePipe implements PipeTransform {
|
|
135
|
+
private _locale;
|
|
136
|
+
private _recompute;
|
|
137
|
+
private _value;
|
|
138
|
+
constructor(localizationService: LocalizationService);
|
|
139
|
+
transform(dictionaryKey: string, ...args: unknown[]): string;
|
|
140
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TranslatePipe, never>;
|
|
141
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<TranslatePipe, "ng0Translate", true>;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
declare class EnumPipe implements PipeTransform {
|
|
145
|
+
private _locale;
|
|
146
|
+
private _recompute;
|
|
147
|
+
private _value;
|
|
148
|
+
constructor(localeProvider: LocalizationService);
|
|
149
|
+
transform(enumValue?: string | null, ...args: string[]): string;
|
|
150
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<EnumPipe, never>;
|
|
151
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<EnumPipe, "ng0Enum", true>;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
declare class BooleanPipe implements PipeTransform {
|
|
155
|
+
private localeProvider;
|
|
156
|
+
constructor(localeProvider: LocalizationService);
|
|
157
|
+
transform(value: any, falseKey: string, trueKey: 'false'): string;
|
|
158
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BooleanPipe, never>;
|
|
159
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<BooleanPipe, "ng0Bool", true>;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
declare class DatePipe implements PipeTransform {
|
|
163
|
+
private _locale;
|
|
164
|
+
private _value;
|
|
165
|
+
constructor(localeProvider: LocalizationService);
|
|
166
|
+
transform(value: number | string): string;
|
|
167
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DatePipe, never>;
|
|
168
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<DatePipe, "ng0Date", true>;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
declare class LocalizationModule {
|
|
172
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LocalizationModule, never>;
|
|
173
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<LocalizationModule, never, [typeof i1.CommonModule, typeof TranslatePipe, typeof EnumPipe, typeof BooleanPipe, typeof DatePipe], [typeof TranslatePipe, typeof EnumPipe, typeof BooleanPipe, typeof DatePipe]>;
|
|
174
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<LocalizationModule>;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export { BooleanPipe, DatePipe, EnumPipe, LOCALE, Locale, LocalizationModule, LocalizationService, TranslatePipe };
|
|
178
|
+
export type { LocaleChangeEvent, TranslatedValidationError };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bootkit/ng0",
|
|
3
|
-
"version": "0.0.0-alpha.
|
|
3
|
+
"version": "0.0.0-alpha.3",
|
|
4
4
|
"description": "Angular+Bootstrap Component Library",
|
|
5
5
|
"homepage": "https://bootkitlib.github.io/",
|
|
6
6
|
"author": "BootKit",
|
|
@@ -47,10 +47,18 @@
|
|
|
47
47
|
"types": "./data/index.d.ts",
|
|
48
48
|
"default": "./fesm2022/bootkit-ng0-data.mjs"
|
|
49
49
|
},
|
|
50
|
+
"./localization": {
|
|
51
|
+
"types": "./localization/index.d.ts",
|
|
52
|
+
"default": "./fesm2022/bootkit-ng0-localization.mjs"
|
|
53
|
+
},
|
|
50
54
|
"./security": {
|
|
51
55
|
"types": "./security/index.d.ts",
|
|
52
56
|
"default": "./fesm2022/bootkit-ng0-security.mjs"
|
|
53
57
|
},
|
|
58
|
+
"./components/collapse": {
|
|
59
|
+
"types": "./components/collapse/index.d.ts",
|
|
60
|
+
"default": "./fesm2022/bootkit-ng0-components-collapse.mjs"
|
|
61
|
+
},
|
|
54
62
|
"./components/accordion": {
|
|
55
63
|
"types": "./components/accordion/index.d.ts",
|
|
56
64
|
"default": "./fesm2022/bootkit-ng0-components-accordion.mjs"
|
|
@@ -59,9 +67,9 @@
|
|
|
59
67
|
"types": "./components/modal/index.d.ts",
|
|
60
68
|
"default": "./fesm2022/bootkit-ng0-components-modal.mjs"
|
|
61
69
|
},
|
|
62
|
-
"./components/
|
|
63
|
-
"types": "./components/
|
|
64
|
-
"default": "./fesm2022/bootkit-ng0-components-
|
|
70
|
+
"./components/form-field": {
|
|
71
|
+
"types": "./components/form-field/index.d.ts",
|
|
72
|
+
"default": "./fesm2022/bootkit-ng0-components-form-field.mjs"
|
|
65
73
|
},
|
|
66
74
|
"./components/nav": {
|
|
67
75
|
"types": "./components/nav/index.d.ts",
|