@abp/ng.theme.shared 6.0.0-rc.3 → 6.0.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/extensions/lib/components/extensible-form/extensible-form-prop.component.mjs +33 -10
- package/esm2020/extensions/lib/components/extensible-form/extensible-form.component.mjs +3 -3
- package/esm2020/extensions/lib/components/extensible-table/extensible-table.component.mjs +10 -7
- package/esm2020/extensions/lib/models/form-props.mjs +2 -2
- package/esm2020/extensions/lib/models/props.mjs +4 -2
- package/esm2020/extensions/lib/tokens/extensible-form-view-provider.token.mjs +3 -0
- package/esm2020/extensions/lib/tokens/extensions.token.mjs +3 -1
- package/esm2020/extensions/public-api.mjs +2 -1
- package/esm2020/lib/constants/validation.mjs +2 -1
- package/extensions/lib/components/extensible-form/extensible-form-prop.component.d.ts +7 -5
- package/extensions/lib/models/form-props.d.ts +2 -0
- package/extensions/lib/models/props.d.ts +3 -1
- package/extensions/lib/tokens/extensible-form-view-provider.token.d.ts +5 -0
- package/extensions/lib/tokens/extensions.token.d.ts +3 -0
- package/extensions/public-api.d.ts +1 -0
- package/fesm2015/abp-ng.theme.shared-extensions.mjs +62 -30
- package/fesm2015/abp-ng.theme.shared-extensions.mjs.map +1 -1
- package/fesm2015/abp-ng.theme.shared.mjs +1 -0
- package/fesm2015/abp-ng.theme.shared.mjs.map +1 -1
- package/fesm2020/abp-ng.theme.shared-extensions.mjs +61 -30
- package/fesm2020/abp-ng.theme.shared-extensions.mjs.map +1 -1
- package/fesm2020/abp-ng.theme.shared.mjs +1 -0
- package/fesm2020/abp-ng.theme.shared.mjs.map +1 -1
- package/lib/constants/validation.d.ts +1 -0
- package/package.json +2 -2
|
@@ -21,9 +21,10 @@ export { ToolbarAction, ToolbarActionList, ToolbarActions, ToolbarActionsFactory
|
|
|
21
21
|
export * from './lib/pipes/create-injector.pipe';
|
|
22
22
|
export * from './lib/services/extensions.service';
|
|
23
23
|
export * from './lib/tokens/extensions.token';
|
|
24
|
+
export * from './lib/tokens/extensible-form-view-provider.token';
|
|
24
25
|
export * from './lib/ui-extensions.module';
|
|
25
26
|
export * from './lib/utils/actions.util';
|
|
26
27
|
export * from './lib/utils/form-props.util';
|
|
27
28
|
export * from './lib/utils/props.util';
|
|
28
29
|
export * from './lib/utils/state.util';
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLXNoYXJlZC9leHRlbnNpb25zL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYyxpRUFBaUUsQ0FBQztBQUNoRixjQUFjLDREQUE0RCxDQUFDO0FBQzNFLGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYyxzREFBc0QsQ0FBQztBQUNyRSxjQUFjLHNEQUFzRCxDQUFDO0FBQ3JFLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsT0FBTyxFQUVMLFVBQVUsR0FHWCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxZQUFZLEVBRVosZ0JBQWdCLEVBRWhCLGFBQWEsRUFDYixvQkFBb0IsR0FDckIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsVUFBVSxFQUVWLGNBQWMsRUFFZCxXQUFXLEVBQ1gsa0JBQWtCLEdBQ25CLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUVMLHNCQUFzQixFQUV0QixvQkFBb0IsRUFDcEIsUUFBUSxFQUNSLFlBQVksRUFDWixZQUFZLEVBRVosU0FBUyxHQUNWLE1BQU0seUJBQXlCLENBQUM7QUFDakMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxPQUFPLEVBRUwsUUFBUSxHQUdULE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUNMLGFBQWEsRUFFYixpQkFBaUIsRUFFakIsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixnQkFBZ0IsR0FFakIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2FkYXB0ZXJzL2RhdGUtdGltZS5hZGFwdGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvYWRhcHRlcnMvZGF0ZS5hZGFwdGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvYWRhcHRlcnMvdGltZS5hZGFwdGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRlLXRpbWUtcGlja2VyL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9leHRlbnNpYmxlLWZvcm0vZXh0ZW5zaWJsZS1mb3JtLXByb3AuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9leHRlbnNpYmxlLWZvcm0vZXh0ZW5zaWJsZS1mb3JtLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZXh0ZW5zaWJsZS10YWJsZS9leHRlbnNpYmxlLXRhYmxlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZ3JpZC1hY3Rpb25zL2dyaWQtYWN0aW9ucy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3BhZ2UtdG9vbGJhci9wYWdlLXRvb2xiYXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29uc3RhbnRzL2V4dHJhLXByb3BlcnRpZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2Rpc2FibGVkLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvcHJvcC1kYXRhLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VudW1zL3Byb3BzLmVudW0nO1xyXG5leHBvcnQge1xyXG4gIEFjdGlvbkNhbGxiYWNrLFxyXG4gIEFjdGlvbkxpc3QsXHJcbiAgQWN0aW9uUHJlZGljYXRlLFxyXG4gIFJlYWRvbmx5QWN0aW9uRGF0YSBhcyBBY3Rpb25EYXRhLFxyXG59IGZyb20gJy4vbGliL21vZGVscy9hY3Rpb25zJztcclxuZXhwb3J0IHtcclxuICBFbnRpdHlBY3Rpb24sXHJcbiAgRW50aXR5QWN0aW9uQ29udHJpYnV0b3JDYWxsYmFjayxcclxuICBFbnRpdHlBY3Rpb25MaXN0LFxyXG4gIEVudGl0eUFjdGlvbk9wdGlvbnMsXHJcbiAgRW50aXR5QWN0aW9ucyxcclxuICBFbnRpdHlBY3Rpb25zRmFjdG9yeSxcclxufSBmcm9tICcuL2xpYi9tb2RlbHMvZW50aXR5LWFjdGlvbnMnO1xyXG5leHBvcnQge1xyXG4gIEVudGl0eVByb3AsXHJcbiAgRW50aXR5UHJvcENvbnRyaWJ1dG9yQ2FsbGJhY2ssXHJcbiAgRW50aXR5UHJvcExpc3QsXHJcbiAgRW50aXR5UHJvcE9wdGlvbnMsXHJcbiAgRW50aXR5UHJvcHMsXHJcbiAgRW50aXR5UHJvcHNGYWN0b3J5LFxyXG59IGZyb20gJy4vbGliL21vZGVscy9lbnRpdHktcHJvcHMnO1xyXG5leHBvcnQge1xyXG4gIENyZWF0ZUZvcm1Qcm9wQ29udHJpYnV0b3JDYWxsYmFjayxcclxuICBDcmVhdGVGb3JtUHJvcHNGYWN0b3J5LFxyXG4gIEVkaXRGb3JtUHJvcENvbnRyaWJ1dG9yQ2FsbGJhY2ssXHJcbiAgRWRpdEZvcm1Qcm9wc0ZhY3RvcnksXHJcbiAgRm9ybVByb3AsXHJcbiAgRm9ybVByb3BEYXRhLFxyXG4gIEZvcm1Qcm9wTGlzdCxcclxuICBGb3JtUHJvcE9wdGlvbnMsXHJcbiAgRm9ybVByb3BzLFxyXG59IGZyb20gJy4vbGliL21vZGVscy9mb3JtLXByb3BzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL29iamVjdC1leHRlbnNpb25zJztcclxuZXhwb3J0IHtcclxuICBQcm9wQ2FsbGJhY2ssXHJcbiAgUHJvcExpc3QsXHJcbiAgUHJvcFByZWRpY2F0ZSxcclxuICBSZWFkb25seVByb3BEYXRhIGFzIFByb3BEYXRhLFxyXG59IGZyb20gJy4vbGliL21vZGVscy9wcm9wcyc7XHJcbmV4cG9ydCB7XHJcbiAgVG9vbGJhckFjdGlvbixcclxuICBUb29sYmFyQWN0aW9uQ29udHJpYnV0b3JDYWxsYmFjayxcclxuICBUb29sYmFyQWN0aW9uTGlzdCxcclxuICBUb29sYmFyQWN0aW9uT3B0aW9ucyxcclxuICBUb29sYmFyQWN0aW9ucyxcclxuICBUb29sYmFyQWN0aW9uc0ZhY3RvcnksXHJcbiAgVG9vbGJhckNvbXBvbmVudCxcclxuICBUb29sYmFyQ29tcG9uZW50T3B0aW9ucyxcclxufSBmcm9tICcuL2xpYi9tb2RlbHMvdG9vbGJhci1hY3Rpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMvY3JlYXRlLWluamVjdG9yLnBpcGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9leHRlbnNpb25zLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi90b2tlbnMvZXh0ZW5zaW9ucy50b2tlbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Rva2Vucy9leHRlbnNpYmxlLWZvcm0tdmlldy1wcm92aWRlci50b2tlbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3VpLWV4dGVuc2lvbnMubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvYWN0aW9ucy51dGlsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvZm9ybS1wcm9wcy51dGlsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvcHJvcHMudXRpbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL3N0YXRlLnV0aWwnO1xyXG4iXX0=
|
|
@@ -15,5 +15,6 @@ export const DEFAULT_VALIDATION_BLUEPRINTS = {
|
|
|
15
15
|
passwordRequiresUpper: 'AbpIdentity::Volo.Abp.Identity:PasswordRequiresUpper',
|
|
16
16
|
passwordRequiresDigit: 'AbpIdentity::Volo.Abp.Identity:PasswordRequiresDigit',
|
|
17
17
|
passwordRequiresNonAlphanumeric: 'AbpIdentity::Volo.Abp.Identity:PasswordRequiresNonAlphanumeric',
|
|
18
|
+
usernamePattern: 'AbpIdentity::Volo.Abp.Identity:InvalidUserName[{{ actualValue }}]',
|
|
18
19
|
};
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLXNoYXJlZC9zcmMvbGliL2NvbnN0YW50cy92YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHO0lBQzNDLFVBQVUsRUFBRSxzREFBc0Q7SUFDbEUsS0FBSyxFQUFFLGtEQUFrRDtJQUN6RCxPQUFPLEVBQUUscUNBQXFDO0lBQzlDLEdBQUcsRUFBRSx5REFBeUQ7SUFDOUQsU0FBUyxFQUNQLCtGQUErRjtJQUNqRyxHQUFHLEVBQUUsZ0VBQWdFO0lBQ3JFLFNBQVMsRUFDUCwrRkFBK0Y7SUFDakcsT0FBTyxFQUFFLHFDQUFxQztJQUM5QyxnQkFBZ0IsRUFBRSwyREFBMkQ7SUFDN0UsS0FBSyxFQUFFLHFFQUFxRTtJQUM1RSxRQUFRLEVBQUUscUNBQXFDO0lBQy9DLEdBQUcsRUFBRSxvRUFBb0U7SUFDekUscUJBQXFCLEVBQUUsc0RBQXNEO0lBQzdFLHFCQUFxQixFQUFFLHNEQUFzRDtJQUM3RSxxQkFBcUIsRUFBRSxzREFBc0Q7SUFDN0UsK0JBQStCLEVBQUUsZ0VBQWdFO0lBQ2pHLGVBQWUsRUFBRSxtRUFBbUU7Q0FDckYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBERUZBVUxUX1ZBTElEQVRJT05fQkxVRVBSSU5UUyA9IHtcclxuICBjcmVkaXRDYXJkOiAnQWJwVmFsaWRhdGlvbjo6VGhpc0ZpZWxkSXNOb3RBVmFsaWRDcmVkaXRDYXJkTnVtYmVyLicsXHJcbiAgZW1haWw6ICdBYnBWYWxpZGF0aW9uOjpUaGlzRmllbGRJc05vdEFWYWxpZEVtYWlsQWRkcmVzcy4nLFxyXG4gIGludmFsaWQ6ICdBYnBWYWxpZGF0aW9uOjpUaGlzRmllbGRJc05vdFZhbGlkLicsXHJcbiAgbWF4OiAnQWJwVmFsaWRhdGlvbjo6VGhpc0ZpZWxkTXVzdEJlTGVzc09yRXF1YWx7MH1be3sgbWF4IH19XScsXHJcbiAgbWF4bGVuZ3RoOlxyXG4gICAgJ0FicFZhbGlkYXRpb246OlRoaXNGaWVsZE11c3RCZUFTdHJpbmdPckFycmF5VHlwZVdpdGhBTWF4aW11bUxlbmd0aE9mezB9W3t7IHJlcXVpcmVkTGVuZ3RoIH19XScsXHJcbiAgbWluOiAnQWJwVmFsaWRhdGlvbjo6VGhpc0ZpZWxkTXVzdEJlR3JlYXRlclRoYW5PckVxdWFsezB9W3t7IG1pbiB9fV0nLFxyXG4gIG1pbmxlbmd0aDpcclxuICAgICdBYnBWYWxpZGF0aW9uOjpUaGlzRmllbGRNdXN0QmVBU3RyaW5nT3JBcnJheVR5cGVXaXRoQU1pbmltdW1MZW5ndGhPZnswfVt7eyByZXF1aXJlZExlbmd0aCB9fV0nLFxyXG4gIG5nYkRhdGU6ICdBYnBWYWxpZGF0aW9uOjpUaGlzRmllbGRJc05vdFZhbGlkLicsXHJcbiAgcGFzc3dvcmRNaXNtYXRjaDogJ0FicElkZW50aXR5OjpWb2xvLkFicC5JZGVudGl0eTpQYXNzd29yZENvbmZpcm1hdGlvbkZhaWxlZCcsXHJcbiAgcmFuZ2U6ICdBYnBWYWxpZGF0aW9uOjpUaGlzRmllbGRNdXN0QmVCZXR3ZWVuezB9QW5kezF9W3t7IG1pbiB9fSx7eyBtYXggfX1dJyxcclxuICByZXF1aXJlZDogJ0FicFZhbGlkYXRpb246OlRoaXNGaWVsZElzUmVxdWlyZWQuJyxcclxuICB1cmw6ICdBYnBWYWxpZGF0aW9uOjpUaGlzRmllbGRJc05vdEFWYWxpZEZ1bGx5UXVhbGlmaWVkSHR0cEh0dHBzT3JGdHBVcmwnLFxyXG4gIHBhc3N3b3JkUmVxdWlyZXNMb3dlcjogJ0FicElkZW50aXR5OjpWb2xvLkFicC5JZGVudGl0eTpQYXNzd29yZFJlcXVpcmVzTG93ZXInLFxyXG4gIHBhc3N3b3JkUmVxdWlyZXNVcHBlcjogJ0FicElkZW50aXR5OjpWb2xvLkFicC5JZGVudGl0eTpQYXNzd29yZFJlcXVpcmVzVXBwZXInLFxyXG4gIHBhc3N3b3JkUmVxdWlyZXNEaWdpdDogJ0FicElkZW50aXR5OjpWb2xvLkFicC5JZGVudGl0eTpQYXNzd29yZFJlcXVpcmVzRGlnaXQnLFxyXG4gIHBhc3N3b3JkUmVxdWlyZXNOb25BbHBoYW51bWVyaWM6ICdBYnBJZGVudGl0eTo6Vm9sby5BYnAuSWRlbnRpdHk6UGFzc3dvcmRSZXF1aXJlc05vbkFscGhhbnVtZXJpYycsXHJcbiAgdXNlcm5hbWVQYXR0ZXJuOiAnQWJwSWRlbnRpdHk6OlZvbG8uQWJwLklkZW50aXR5OkludmFsaWRVc2VyTmFtZVt7eyBhY3R1YWxWYWx1ZSB9fV0nLFxyXG59O1xyXG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ABP, ConfigStateService, TrackByService } from '@abp/ng.core';
|
|
2
|
-
import { AfterViewInit, ChangeDetectorRef, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import { AfterViewInit, ChangeDetectorRef, Injector, OnChanges, SimpleChanges } from '@angular/core';
|
|
3
3
|
import { FormGroupDirective, ValidatorFn } from '@angular/forms';
|
|
4
4
|
import { Observable } from 'rxjs';
|
|
5
5
|
import { FormProp } from '../../models/form-props';
|
|
@@ -9,30 +9,32 @@ export declare class ExtensibleFormPropComponent implements OnChanges, AfterView
|
|
|
9
9
|
readonly cdRef: ChangeDetectorRef;
|
|
10
10
|
readonly track: TrackByService;
|
|
11
11
|
protected configState: ConfigStateService;
|
|
12
|
+
private injector;
|
|
12
13
|
data: PropData;
|
|
13
14
|
prop: FormProp;
|
|
14
15
|
first?: boolean;
|
|
15
16
|
private fieldRef;
|
|
17
|
+
injectorForCustomComponent: Injector;
|
|
16
18
|
asterisk: string;
|
|
17
19
|
options$: Observable<ABP.Option<any>[]>;
|
|
18
20
|
validators: ValidatorFn[];
|
|
19
21
|
readonly: boolean;
|
|
22
|
+
typeaheadModel: any;
|
|
23
|
+
private readonly form;
|
|
20
24
|
disabledFn: (data: PropData) => boolean;
|
|
21
25
|
get disabled(): boolean;
|
|
22
|
-
private readonly form;
|
|
23
|
-
typeaheadModel: any;
|
|
24
26
|
setTypeaheadValue(selectedOption: ABP.Option<string>): void;
|
|
25
27
|
search: (text$: Observable<string>) => Observable<any[]>;
|
|
26
28
|
typeaheadFormatter: (option: ABP.Option<any>) => string;
|
|
27
29
|
get meridian(): any;
|
|
28
30
|
get isInvalid(): boolean;
|
|
29
|
-
constructor(cdRef: ChangeDetectorRef, track: TrackByService, configState: ConfigStateService, groupDirective: FormGroupDirective);
|
|
31
|
+
constructor(cdRef: ChangeDetectorRef, track: TrackByService, configState: ConfigStateService, groupDirective: FormGroupDirective, injector: Injector);
|
|
30
32
|
private getTypeaheadControls;
|
|
31
33
|
private setAsterisk;
|
|
32
34
|
ngAfterViewInit(): void;
|
|
33
35
|
getComponent(prop: FormProp): string;
|
|
34
36
|
getType(prop: FormProp): string;
|
|
35
|
-
ngOnChanges({ prop }: SimpleChanges): void;
|
|
37
|
+
ngOnChanges({ prop, data }: SimpleChanges): void;
|
|
36
38
|
static ɵfac: i0.ɵɵFactoryDeclaration<ExtensibleFormPropComponent, never>;
|
|
37
39
|
static ɵcmp: i0.ɵɵComponentDeclaration<ExtensibleFormPropComponent, "abp-extensible-form-prop", never, { "data": "data"; "prop": "prop"; "first": "first"; }, {}, never, never>;
|
|
38
40
|
}
|
|
@@ -24,6 +24,8 @@ export declare class FormProp<R = any> extends Prop<R> {
|
|
|
24
24
|
readonly defaultValue: boolean | number | string | Date;
|
|
25
25
|
readonly options: PropCallback<R, Observable<ABP.Option<any>[]>> | undefined;
|
|
26
26
|
readonly id: string | undefined;
|
|
27
|
+
readonly template?: Type<any>;
|
|
28
|
+
readonly className?: string;
|
|
27
29
|
constructor(options: FormPropOptions<R>);
|
|
28
30
|
static create<R = any>(options: FormPropOptions<R>): FormProp<R>;
|
|
29
31
|
static createMany<R = any>(arrayOfOptions: FormPropOptions<R>[]): FormProp<R>[];
|
|
@@ -18,7 +18,9 @@ export declare abstract class Prop<R = any> {
|
|
|
18
18
|
readonly permission: string;
|
|
19
19
|
readonly visible: PropPredicate<R>;
|
|
20
20
|
readonly isExtra: boolean;
|
|
21
|
-
|
|
21
|
+
readonly template?: Type<any>;
|
|
22
|
+
readonly className?: string;
|
|
23
|
+
constructor(type: ePropType, name: string, displayName: string, permission: string, visible?: PropPredicate<R>, isExtra?: boolean, template?: Type<any>, className?: string);
|
|
22
24
|
}
|
|
23
25
|
export declare type PropCallback<T, R = any> = (data: Omit<PropData<T>, 'data'>, auxData?: any) => R;
|
|
24
26
|
export declare type PropPredicate<T> = (data?: Omit<PropData<T>, 'data'>, auxData?: any) => boolean;
|
|
@@ -3,6 +3,7 @@ import { ActionCallback } from '../models/actions';
|
|
|
3
3
|
import { ExtensionsService } from '../services/extensions.service';
|
|
4
4
|
import { Observable } from 'rxjs';
|
|
5
5
|
import { ePropType } from '../enums/props.enum';
|
|
6
|
+
import { FormProp } from '../models/form-props';
|
|
6
7
|
export declare const EXTENSIONS_IDENTIFIER: InjectionToken<string>;
|
|
7
8
|
export declare type ActionKeys = Extract<'entityActions' | 'toolbarActions', keyof ExtensionsService>;
|
|
8
9
|
export declare const EXTENSIONS_ACTION_TYPE: InjectionToken<ActionKeys>;
|
|
@@ -18,4 +19,6 @@ declare type EntityPropTypeClassMap = {
|
|
|
18
19
|
};
|
|
19
20
|
export declare type EntityPropTypeClass = Partial<EntityPropTypeClassMap>;
|
|
20
21
|
export declare const ENTITY_PROP_TYPE_CLASSES: InjectionToken<Partial<EntityPropTypeClassMap>>;
|
|
22
|
+
export declare const EXTENSIONS_FORM_PROP: InjectionToken<FormProp<any>>;
|
|
23
|
+
export declare const EXTENSIONS_FORM_PROP_DATA: InjectionToken<unknown>;
|
|
21
24
|
export {};
|
|
@@ -21,6 +21,7 @@ export { ToolbarAction, ToolbarActionContributorCallback, ToolbarActionList, Too
|
|
|
21
21
|
export * from './lib/pipes/create-injector.pipe';
|
|
22
22
|
export * from './lib/services/extensions.service';
|
|
23
23
|
export * from './lib/tokens/extensions.token';
|
|
24
|
+
export * from './lib/tokens/extensible-form-view-provider.token';
|
|
24
25
|
export * from './lib/ui-extensions.module';
|
|
25
26
|
export * from './lib/utils/actions.util';
|
|
26
27
|
export * from './lib/utils/form-props.util';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, Optional, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, Host,
|
|
2
|
+
import { Injectable, Optional, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, InjectionToken, Directive, Host, Injector, Inject, ViewChildren, LOCALE_ID, Pipe, NgModule } from '@angular/core';
|
|
3
3
|
import * as i5 from '@angular/common';
|
|
4
4
|
import { formatDate } from '@angular/common';
|
|
5
5
|
import * as i2 from '@ng-bootstrap/ng-bootstrap';
|
|
6
6
|
import { NgbDateAdapter, NgbTimeAdapter, NgbInputDatepicker, NgbTimepicker, NgbDatepickerModule, NgbDropdownModule, NgbTimepickerModule, NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';
|
|
7
7
|
import * as i2$1 from '@angular/forms';
|
|
8
|
-
import { ControlContainer, Validators, FormGroup, FormControl } from '@angular/forms';
|
|
8
|
+
import { ControlContainer, FormGroupDirective, Validators, FormGroup, FormControl } from '@angular/forms';
|
|
9
9
|
import * as i6 from '@ngx-validate/core';
|
|
10
10
|
import { NgxValidateCoreModule } from '@ngx-validate/core';
|
|
11
11
|
import * as i1 from '@abp/ng.core';
|
|
@@ -223,6 +223,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.6", ngImpor
|
|
|
223
223
|
args: [NgbTimepicker]
|
|
224
224
|
}] } });
|
|
225
225
|
|
|
226
|
+
const EXTENSIONS_IDENTIFIER = new InjectionToken('EXTENSIONS_IDENTIFIER');
|
|
227
|
+
const EXTENSIONS_ACTION_TYPE = new InjectionToken('EXTENSIONS_ACTION_TYPE');
|
|
228
|
+
const EXTENSIONS_ACTION_DATA = new InjectionToken('EXTENSIONS_ACTION_DATA');
|
|
229
|
+
const EXTENSIONS_ACTION_CALLBACK = new InjectionToken('EXTENSIONS_ACTION_DATA');
|
|
230
|
+
const PROP_DATA_STREAM = new InjectionToken('PROP_DATA_STREAM');
|
|
231
|
+
const ENTITY_PROP_TYPE_CLASSES = new InjectionToken('ENTITY_PROP_TYPE_CLASSES', {
|
|
232
|
+
factory: () => ({}),
|
|
233
|
+
});
|
|
234
|
+
const EXTENSIONS_FORM_PROP = new InjectionToken('EXTENSIONS_FORM_PROP');
|
|
235
|
+
const EXTENSIONS_FORM_PROP_DATA = new InjectionToken('EXTENSIONS_FORM_PROP_DATA');
|
|
236
|
+
|
|
226
237
|
const EXTRA_PROPERTIES_KEY = 'extraProperties';
|
|
227
238
|
|
|
228
239
|
const TYPEAHEAD_TEXT_SUFFIX = '_Text';
|
|
@@ -302,10 +313,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.6", ngImpor
|
|
|
302
313
|
}] } });
|
|
303
314
|
|
|
304
315
|
class ExtensibleFormPropComponent {
|
|
305
|
-
constructor(cdRef, track, configState, groupDirective) {
|
|
316
|
+
constructor(cdRef, track, configState, groupDirective, injector) {
|
|
306
317
|
this.cdRef = cdRef;
|
|
307
318
|
this.track = track;
|
|
308
319
|
this.configState = configState;
|
|
320
|
+
this.injector = injector;
|
|
309
321
|
this.asterisk = '';
|
|
310
322
|
this.options$ = of([]);
|
|
311
323
|
this.validators = [];
|
|
@@ -352,6 +364,9 @@ class ExtensibleFormPropComponent {
|
|
|
352
364
|
}
|
|
353
365
|
}
|
|
354
366
|
getComponent(prop) {
|
|
367
|
+
if (prop.template) {
|
|
368
|
+
return 'template';
|
|
369
|
+
}
|
|
355
370
|
switch (prop.type) {
|
|
356
371
|
case "boolean" /* Boolean */:
|
|
357
372
|
return 'checkbox';
|
|
@@ -390,9 +405,26 @@ class ExtensibleFormPropComponent {
|
|
|
390
405
|
return 'hidden';
|
|
391
406
|
}
|
|
392
407
|
}
|
|
393
|
-
ngOnChanges({ prop }) {
|
|
408
|
+
ngOnChanges({ prop, data }) {
|
|
409
|
+
var _a;
|
|
394
410
|
const currentProp = prop === null || prop === void 0 ? void 0 : prop.currentValue;
|
|
395
|
-
const { options, readonly, disabled, validators } = currentProp || {};
|
|
411
|
+
const { options, readonly, disabled, validators, template } = currentProp || {};
|
|
412
|
+
if (template) {
|
|
413
|
+
this.injectorForCustomComponent = Injector.create({
|
|
414
|
+
providers: [
|
|
415
|
+
{
|
|
416
|
+
provide: EXTENSIONS_FORM_PROP,
|
|
417
|
+
useValue: currentProp,
|
|
418
|
+
},
|
|
419
|
+
{
|
|
420
|
+
provide: EXTENSIONS_FORM_PROP_DATA,
|
|
421
|
+
useValue: (_a = data === null || data === void 0 ? void 0 : data.currentValue) === null || _a === void 0 ? void 0 : _a.record,
|
|
422
|
+
},
|
|
423
|
+
{ provide: ControlContainer, useExisting: FormGroupDirective },
|
|
424
|
+
],
|
|
425
|
+
parent: this.injector,
|
|
426
|
+
});
|
|
427
|
+
}
|
|
396
428
|
if (options)
|
|
397
429
|
this.options$ = options(this.data);
|
|
398
430
|
if (readonly)
|
|
@@ -409,8 +441,8 @@ class ExtensibleFormPropComponent {
|
|
|
409
441
|
this.typeaheadModel = { key: keyControl.value, value: valueControl.value };
|
|
410
442
|
}
|
|
411
443
|
}
|
|
412
|
-
ExtensibleFormPropComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.6", ngImport: i0, type: ExtensibleFormPropComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TrackByService }, { token: i1.ConfigStateService }, { token: i2$1.FormGroupDirective }], target: i0.ɵɵFactoryTarget.Component });
|
|
413
|
-
ExtensibleFormPropComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.6", type: ExtensibleFormPropComponent, selector: "abp-extensible-form-prop", inputs: { data: "data", prop: "prop", first: "first" }, viewQueries: [{ propertyName: "fieldRef", first: true, predicate: ["field"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<
|
|
444
|
+
ExtensibleFormPropComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.6", ngImport: i0, type: ExtensibleFormPropComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TrackByService }, { token: i1.ConfigStateService }, { token: i2$1.FormGroupDirective }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
445
|
+
ExtensibleFormPropComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.6", type: ExtensibleFormPropComponent, selector: "abp-extensible-form-prop", inputs: { data: "data", prop: "prop", first: "first" }, viewQueries: [{ propertyName: "fieldRef", first: true, predicate: ["field"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container [ngSwitch]=\"getComponent(prop)\"\r\n *abpPermission=\"prop.permission; runChangeDetection: false\">\r\n\r\n <ng-template ngSwitchCase=\"template\">\r\n <ng-container\r\n *ngComponentOutlet=\"prop.template;injector:injectorForCustomComponent\">\r\n </ng-container>\r\n </ng-template>\r\n\r\n <div\r\n class=\"mb-3 form-group\"\r\n >\r\n\r\n <ng-template ngSwitchCase=\"input\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [autocomplete]=\"prop.autocomplete\"\r\n [type]=\"getType(prop)\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"hidden\">\r\n <input [formControlName]=\"prop.name\" type=\"hidden\"/>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"checkbox\">\r\n <div class=\"form-check\" validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n type=\"checkbox\"\r\n class=\"form-check-input\"\r\n />\r\n <ng-template\r\n [ngTemplateOutlet]=\"label\"\r\n [ngTemplateOutletContext]=\"{ $implicit: 'form-check-label' }\"\r\n ></ng-template>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"select\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <select\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n class=\"form-select form-control\"\r\n >\r\n <option\r\n *ngFor=\"let option of options$ | async; trackBy: track.by('value')\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.key }}\r\n </option>\r\n </select>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"multiselect\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <select\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n multiple=\"multiple\"\r\n class=\"form-select form-control\"\r\n >\r\n <option\r\n *ngFor=\"let option of options$ | async; trackBy: track.by('value')\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.key }}\r\n </option>\r\n </select>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"typeahead\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <div #typeahead class=\"position-relative\" validationStyle validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [autocomplete]=\"prop.autocomplete\"\r\n [abpDisabled]=\"disabled\"\r\n [ngbTypeahead]=\"search\"\r\n [editable]=\"false\"\r\n [inputFormatter]=\"typeaheadFormatter\"\r\n [resultFormatter]=\"typeaheadFormatter\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n [(ngModel)]=\"typeaheadModel\"\r\n (selectItem)=\"setTypeaheadValue($event.item)\"\r\n (blur)=\"setTypeaheadValue(typeaheadModel)\"\r\n [class.is-invalid]=\"typeahead.classList.contains('is-invalid')\"\r\n class=\"form-control\"\r\n />\r\n <input [formControlName]=\"prop.name\" type=\"hidden\"/>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"date\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <input\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n (click)=\"datepicker.open()\"\r\n (keyup.space)=\"datepicker.open()\"\r\n ngbDatepicker\r\n #datepicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"time\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <ngb-timepicker [formControlName]=\"prop.name\"></ngb-timepicker>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"dateTime\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <abp-date-time-picker [prop]=\"prop\" [meridian]=\"meridian\"></abp-date-time-picker>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"textarea\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <textarea\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n ></textarea>\r\n </ng-template>\r\n </div>\r\n\r\n</ng-container>\r\n\r\n<ng-template #label let-classes>\r\n <label [htmlFor]=\"prop.id\" [ngClass]=\"classes || 'form-label'\" x\r\n >{{ prop.displayName | abpLocalization }} {{ asterisk }}</label\r\n >\r\n</ng-template>\r\n", components: [{ type: i2.NgbTimepicker, selector: "ngb-timepicker", inputs: ["meridian", "spinners", "seconds", "hourStep", "minuteStep", "secondStep", "readonlyInputs", "size"] }, { type: DateTimePickerComponent, selector: "abp-date-time-picker", inputs: ["prop", "meridian"], exportAs: ["abpDateTimePicker"] }], directives: [{ type: i1.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i5.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModuleFactory"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i6.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { type: DisabledDirective, selector: "[abpDisabled]", inputs: ["abpDisabled"] }, { type: i6.ValidationTargetDirective, selector: "[validationTarget]", exportAs: ["validationTarget"] }, { type: i2$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i2$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i2$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i2$1.SelectMultipleControlValueAccessor, selector: "select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]", inputs: ["compareWith"] }, { type: i6.ValidationStyleDirective, selector: "[validationStyle]", exportAs: ["validationStyle"] }, { type: i2.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "container", "editable", "focusFirst", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate", "showHint", "placement", "popupClass"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i2.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "async": i5.AsyncPipe, "abpLocalization": i1.LocalizationPipe }, viewProviders: [
|
|
414
446
|
{
|
|
415
447
|
provide: ControlContainer,
|
|
416
448
|
useFactory: selfFactory,
|
|
@@ -429,8 +461,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.6", ngImpor
|
|
|
429
461
|
},
|
|
430
462
|
{ provide: NgbDateAdapter, useClass: DateAdapter },
|
|
431
463
|
{ provide: NgbTimeAdapter, useClass: TimeAdapter },
|
|
432
|
-
], template: "<
|
|
433
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.TrackByService }, { type: i1.ConfigStateService }, { type: i2$1.FormGroupDirective }]; }, propDecorators: { data: [{
|
|
464
|
+
], template: "<ng-container [ngSwitch]=\"getComponent(prop)\"\r\n *abpPermission=\"prop.permission; runChangeDetection: false\">\r\n\r\n <ng-template ngSwitchCase=\"template\">\r\n <ng-container\r\n *ngComponentOutlet=\"prop.template;injector:injectorForCustomComponent\">\r\n </ng-container>\r\n </ng-template>\r\n\r\n <div\r\n class=\"mb-3 form-group\"\r\n >\r\n\r\n <ng-template ngSwitchCase=\"input\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [autocomplete]=\"prop.autocomplete\"\r\n [type]=\"getType(prop)\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"hidden\">\r\n <input [formControlName]=\"prop.name\" type=\"hidden\"/>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"checkbox\">\r\n <div class=\"form-check\" validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n type=\"checkbox\"\r\n class=\"form-check-input\"\r\n />\r\n <ng-template\r\n [ngTemplateOutlet]=\"label\"\r\n [ngTemplateOutletContext]=\"{ $implicit: 'form-check-label' }\"\r\n ></ng-template>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"select\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <select\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n class=\"form-select form-control\"\r\n >\r\n <option\r\n *ngFor=\"let option of options$ | async; trackBy: track.by('value')\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.key }}\r\n </option>\r\n </select>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"multiselect\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <select\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n multiple=\"multiple\"\r\n class=\"form-select form-control\"\r\n >\r\n <option\r\n *ngFor=\"let option of options$ | async; trackBy: track.by('value')\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.key }}\r\n </option>\r\n </select>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"typeahead\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <div #typeahead class=\"position-relative\" validationStyle validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [autocomplete]=\"prop.autocomplete\"\r\n [abpDisabled]=\"disabled\"\r\n [ngbTypeahead]=\"search\"\r\n [editable]=\"false\"\r\n [inputFormatter]=\"typeaheadFormatter\"\r\n [resultFormatter]=\"typeaheadFormatter\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n [(ngModel)]=\"typeaheadModel\"\r\n (selectItem)=\"setTypeaheadValue($event.item)\"\r\n (blur)=\"setTypeaheadValue(typeaheadModel)\"\r\n [class.is-invalid]=\"typeahead.classList.contains('is-invalid')\"\r\n class=\"form-control\"\r\n />\r\n <input [formControlName]=\"prop.name\" type=\"hidden\"/>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"date\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <input\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n (click)=\"datepicker.open()\"\r\n (keyup.space)=\"datepicker.open()\"\r\n ngbDatepicker\r\n #datepicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"time\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <ngb-timepicker [formControlName]=\"prop.name\"></ngb-timepicker>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"dateTime\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <abp-date-time-picker [prop]=\"prop\" [meridian]=\"meridian\"></abp-date-time-picker>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"textarea\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <textarea\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n ></textarea>\r\n </ng-template>\r\n </div>\r\n\r\n</ng-container>\r\n\r\n<ng-template #label let-classes>\r\n <label [htmlFor]=\"prop.id\" [ngClass]=\"classes || 'form-label'\" x\r\n >{{ prop.displayName | abpLocalization }} {{ asterisk }}</label\r\n >\r\n</ng-template>\r\n" }]
|
|
465
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.TrackByService }, { type: i1.ConfigStateService }, { type: i2$1.FormGroupDirective }, { type: i0.Injector }]; }, propDecorators: { data: [{
|
|
434
466
|
type: Input
|
|
435
467
|
}], prop: [{
|
|
436
468
|
type: Input
|
|
@@ -441,18 +473,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.6", ngImpor
|
|
|
441
473
|
args: ['field']
|
|
442
474
|
}] } });
|
|
443
475
|
function isRequired(validator) {
|
|
444
|
-
return validator === Validators.required ||
|
|
476
|
+
return (validator === Validators.required ||
|
|
477
|
+
validator === AbpValidators.required ||
|
|
478
|
+
validator.name === 'required');
|
|
445
479
|
}
|
|
446
480
|
|
|
447
|
-
const EXTENSIONS_IDENTIFIER = new InjectionToken('EXTENSIONS_IDENTIFIER');
|
|
448
|
-
const EXTENSIONS_ACTION_TYPE = new InjectionToken('EXTENSIONS_ACTION_TYPE');
|
|
449
|
-
const EXTENSIONS_ACTION_DATA = new InjectionToken('EXTENSIONS_ACTION_DATA');
|
|
450
|
-
const EXTENSIONS_ACTION_CALLBACK = new InjectionToken('EXTENSIONS_ACTION_DATA');
|
|
451
|
-
const PROP_DATA_STREAM = new InjectionToken('PROP_DATA_STREAM');
|
|
452
|
-
const ENTITY_PROP_TYPE_CLASSES = new InjectionToken('ENTITY_PROP_TYPE_CLASSES', {
|
|
453
|
-
factory: () => ({}),
|
|
454
|
-
});
|
|
455
|
-
|
|
456
481
|
class ActionList extends LinkedList {
|
|
457
482
|
}
|
|
458
483
|
class ActionData {
|
|
@@ -538,13 +563,15 @@ class PropData {
|
|
|
538
563
|
}
|
|
539
564
|
}
|
|
540
565
|
class Prop {
|
|
541
|
-
constructor(type, name, displayName, permission, visible = _ => true, isExtra = false) {
|
|
566
|
+
constructor(type, name, displayName, permission, visible = _ => true, isExtra = false, template, className) {
|
|
542
567
|
this.type = type;
|
|
543
568
|
this.name = name;
|
|
544
569
|
this.displayName = displayName;
|
|
545
570
|
this.permission = permission;
|
|
546
571
|
this.visible = visible;
|
|
547
572
|
this.isExtra = isExtra;
|
|
573
|
+
this.template = template;
|
|
574
|
+
this.className = className;
|
|
548
575
|
this.displayName = this.displayName || this.name;
|
|
549
576
|
}
|
|
550
577
|
}
|
|
@@ -630,7 +657,7 @@ class EditFormPropsFactory extends PropsFactory {
|
|
|
630
657
|
}
|
|
631
658
|
class FormProp extends Prop {
|
|
632
659
|
constructor(options) {
|
|
633
|
-
super(options.type, options.name, options.displayName, options.permission, options.visible, options.isExtra);
|
|
660
|
+
super(options.type, options.name, options.displayName, options.permission, options.visible, options.isExtra, options.template, options.className);
|
|
634
661
|
this.asyncValidators = options.asyncValidators || (_ => []);
|
|
635
662
|
this.validators = options.validators || (_ => []);
|
|
636
663
|
this.disabled = options.disabled || (_ => false);
|
|
@@ -780,7 +807,7 @@ class ExtensibleFormComponent {
|
|
|
780
807
|
}
|
|
781
808
|
}
|
|
782
809
|
ExtensibleFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.6", ngImport: i0, type: ExtensibleFormComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TrackByService }, { token: i2$1.ControlContainer }, { token: ExtensionsService }, { token: EXTENSIONS_IDENTIFIER }], target: i0.ɵɵFactoryTarget.Component });
|
|
783
|
-
ExtensibleFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.6", type: ExtensibleFormComponent, selector: "abp-extensible-form", inputs: { selectedRecord: "selectedRecord" }, viewQueries: [{ propertyName: "formProps", predicate: ExtensibleFormPropComponent, descendants: true }], exportAs: ["abpExtensibleForm"], ngImport: i0, template: "<ng-container *ngIf=\"form\">\r\n <ng-container *abpPropData=\"let data; fromList: propList; withRecord: record\">\r\n <ng-container *ngFor=\"let prop of propList; let first = first; trackBy: track.by('name')\">\r\n <ng-container *ngIf=\"prop.visible(data)\">\r\n <ng-container\r\n [formGroupName]=\"extraPropertiesKey\"\r\n *ngIf=\"extraProperties.controls[prop.name]; else tempDefault\"\r\n >\r\n <abp-extensible-form-prop [prop]=\"prop\" [data]=\"data\"></abp-extensible-form-prop>\r\n </ng-container>\r\n\r\n <ng-template #tempDefault>\r\n <abp-extensible-form-prop\r\n *ngIf=\"form.get(prop.name)\"\r\n [prop]=\"prop\"\r\n [data]=\"data\"\r\n [first]=\"first\"\r\n ></abp-extensible-form-prop>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>\r\n", components: [{ type: ExtensibleFormPropComponent, selector: "abp-extensible-form-prop", inputs: ["data", "prop", "first"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: PropDataDirective, selector: "[abpPropData]", inputs: ["abpPropDataFromList", "abpPropDataWithRecord", "abpPropDataAtIndex"], exportAs: ["abpPropData"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2$1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i6.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }], viewProviders: [
|
|
810
|
+
ExtensibleFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.6", type: ExtensibleFormComponent, selector: "abp-extensible-form", inputs: { selectedRecord: "selectedRecord" }, viewQueries: [{ propertyName: "formProps", predicate: ExtensibleFormPropComponent, descendants: true }], exportAs: ["abpExtensibleForm"], ngImport: i0, template: "<ng-container *ngIf=\"form\">\r\n <ng-container *abpPropData=\"let data; fromList: propList; withRecord: record\">\r\n <ng-container *ngFor=\"let prop of propList; let first = first; trackBy: track.by('name')\">\r\n <ng-container *ngIf=\"prop.visible(data)\">\r\n <ng-container\r\n [formGroupName]=\"extraPropertiesKey\"\r\n *ngIf=\"extraProperties.controls[prop.name]; else tempDefault\"\r\n >\r\n <abp-extensible-form-prop [class]=\"prop.className\" [prop]=\"prop\" [data]=\"data\"></abp-extensible-form-prop>\r\n </ng-container>\r\n\r\n <ng-template #tempDefault>\r\n <abp-extensible-form-prop [class]=\"prop.className\"\r\n *ngIf=\"form.get(prop.name)\"\r\n [prop]=\"prop\"\r\n [data]=\"data\"\r\n [first]=\"first\"\r\n ></abp-extensible-form-prop>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>\r\n", components: [{ type: ExtensibleFormPropComponent, selector: "abp-extensible-form-prop", inputs: ["data", "prop", "first"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: PropDataDirective, selector: "[abpPropData]", inputs: ["abpPropDataFromList", "abpPropDataWithRecord", "abpPropDataAtIndex"], exportAs: ["abpPropData"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2$1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i6.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }], viewProviders: [
|
|
784
811
|
{
|
|
785
812
|
provide: ControlContainer,
|
|
786
813
|
useFactory: selfFactory,
|
|
@@ -795,7 +822,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.6", ngImpor
|
|
|
795
822
|
useFactory: selfFactory,
|
|
796
823
|
deps: [[new Optional(), new SkipSelf(), ControlContainer]],
|
|
797
824
|
},
|
|
798
|
-
], template: "<ng-container *ngIf=\"form\">\r\n <ng-container *abpPropData=\"let data; fromList: propList; withRecord: record\">\r\n <ng-container *ngFor=\"let prop of propList; let first = first; trackBy: track.by('name')\">\r\n <ng-container *ngIf=\"prop.visible(data)\">\r\n <ng-container\r\n [formGroupName]=\"extraPropertiesKey\"\r\n *ngIf=\"extraProperties.controls[prop.name]; else tempDefault\"\r\n >\r\n <abp-extensible-form-prop [prop]=\"prop\" [data]=\"data\"></abp-extensible-form-prop>\r\n </ng-container>\r\n\r\n <ng-template #tempDefault>\r\n <abp-extensible-form-prop\r\n *ngIf=\"form.get(prop.name)\"\r\n [prop]=\"prop\"\r\n [data]=\"data\"\r\n [first]=\"first\"\r\n ></abp-extensible-form-prop>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>\r\n" }]
|
|
825
|
+
], template: "<ng-container *ngIf=\"form\">\r\n <ng-container *abpPropData=\"let data; fromList: propList; withRecord: record\">\r\n <ng-container *ngFor=\"let prop of propList; let first = first; trackBy: track.by('name')\">\r\n <ng-container *ngIf=\"prop.visible(data)\">\r\n <ng-container\r\n [formGroupName]=\"extraPropertiesKey\"\r\n *ngIf=\"extraProperties.controls[prop.name]; else tempDefault\"\r\n >\r\n <abp-extensible-form-prop [class]=\"prop.className\" [prop]=\"prop\" [data]=\"data\"></abp-extensible-form-prop>\r\n </ng-container>\r\n\r\n <ng-template #tempDefault>\r\n <abp-extensible-form-prop [class]=\"prop.className\"\r\n *ngIf=\"form.get(prop.name)\"\r\n [prop]=\"prop\"\r\n [data]=\"data\"\r\n [first]=\"first\"\r\n ></abp-extensible-form-prop>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>\r\n" }]
|
|
799
826
|
}], ctorParameters: function () {
|
|
800
827
|
return [{ type: i0.ChangeDetectorRef }, { type: i1.TrackByService }, { type: i2$1.ControlContainer }, { type: ExtensionsService }, { type: undefined, decorators: [{
|
|
801
828
|
type: Inject,
|
|
@@ -941,12 +968,15 @@ class ExtensibleTableComponent {
|
|
|
941
968
|
value,
|
|
942
969
|
};
|
|
943
970
|
if (prop.value.component) {
|
|
944
|
-
const injector = Injector.create(
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
971
|
+
const injector = Injector.create({
|
|
972
|
+
providers: [
|
|
973
|
+
{
|
|
974
|
+
provide: PROP_DATA_STREAM,
|
|
975
|
+
useValue: value,
|
|
976
|
+
},
|
|
977
|
+
],
|
|
978
|
+
parent: this.injector,
|
|
979
|
+
});
|
|
950
980
|
record[propKey].injector = injector;
|
|
951
981
|
record[propKey].component = prop.value.component;
|
|
952
982
|
}
|
|
@@ -1042,6 +1072,8 @@ var objectExtensions = /*#__PURE__*/Object.freeze({
|
|
|
1042
1072
|
__proto__: null
|
|
1043
1073
|
});
|
|
1044
1074
|
|
|
1075
|
+
const EXTENSIBLE_FORM_VIEW_PROVIDER = { provide: ControlContainer, useExisting: FormGroupDirective };
|
|
1076
|
+
|
|
1045
1077
|
class BaseUiExtensionsModule {
|
|
1046
1078
|
}
|
|
1047
1079
|
BaseUiExtensionsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.6", ngImport: i0, type: BaseUiExtensionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
@@ -1368,5 +1400,5 @@ function isUndefined(obj) {
|
|
|
1368
1400
|
* Generated bundle index. Do not edit.
|
|
1369
1401
|
*/
|
|
1370
1402
|
|
|
1371
|
-
export { ActionList, BaseUiExtensionsModule, CreateFormPropsFactory, CreateInjectorPipe, DateAdapter, DateTimeAdapter, DateTimePickerComponent, DisabledDirective, ENTITY_PROP_TYPE_CLASSES, EXTENSIONS_ACTION_CALLBACK, EXTENSIONS_ACTION_DATA, EXTENSIONS_ACTION_TYPE, EXTENSIONS_IDENTIFIER, EXTRA_PROPERTIES_KEY, EditFormPropsFactory, EntityAction, EntityActionList, EntityActions, EntityActionsFactory, EntityProp, EntityPropList, EntityProps, EntityPropsFactory, ExtensibleFormComponent, ExtensibleFormPropComponent, ExtensibleTableComponent, ExtensionsService, FormProp, FormPropData, FormPropList, FormProps, GridActionsComponent, objectExtensions as ObjectExtensions, PROP_DATA_STREAM, PageToolbarComponent, PropDataDirective, PropList, TimeAdapter, ToolbarAction, ToolbarActionList, ToolbarActions, ToolbarActionsFactory, ToolbarComponent, UiExtensionsModule, createExtraPropertyValueResolver, generateFormFromProps, getObjectExtensionEntitiesFromStore, mapEntitiesToContributors, mergeWithDefaultActions, mergeWithDefaultProps };
|
|
1403
|
+
export { ActionList, BaseUiExtensionsModule, CreateFormPropsFactory, CreateInjectorPipe, DateAdapter, DateTimeAdapter, DateTimePickerComponent, DisabledDirective, ENTITY_PROP_TYPE_CLASSES, EXTENSIBLE_FORM_VIEW_PROVIDER, EXTENSIONS_ACTION_CALLBACK, EXTENSIONS_ACTION_DATA, EXTENSIONS_ACTION_TYPE, EXTENSIONS_FORM_PROP, EXTENSIONS_FORM_PROP_DATA, EXTENSIONS_IDENTIFIER, EXTRA_PROPERTIES_KEY, EditFormPropsFactory, EntityAction, EntityActionList, EntityActions, EntityActionsFactory, EntityProp, EntityPropList, EntityProps, EntityPropsFactory, ExtensibleFormComponent, ExtensibleFormPropComponent, ExtensibleTableComponent, ExtensionsService, FormProp, FormPropData, FormPropList, FormProps, GridActionsComponent, objectExtensions as ObjectExtensions, PROP_DATA_STREAM, PageToolbarComponent, PropDataDirective, PropList, TimeAdapter, ToolbarAction, ToolbarActionList, ToolbarActions, ToolbarActionsFactory, ToolbarComponent, UiExtensionsModule, createExtraPropertyValueResolver, generateFormFromProps, getObjectExtensionEntitiesFromStore, mapEntitiesToContributors, mergeWithDefaultActions, mergeWithDefaultProps };
|
|
1372
1404
|
//# sourceMappingURL=abp-ng.theme.shared-extensions.mjs.map
|