@rucken/todo-web
Version:
Base components and ui for todo application maked on Angular7+ and based on Rucken template
215 lines • 17.4 kB
JavaScript
import * as tslib_1 from "tslib";
var ProjectUsersGridComponent_1;
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ChangeDetectionStrategy, Component, forwardRef, Inject, Input } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { TranslateService } from '@ngx-translate/core';
import { ErrorsExtractor, ModalsService, translate, USERS_CONFIG_TOKEN } from '@rucken/core';
import { Project } from '@rucken/todo-core';
import { UsersGridComponent, UsersGridModalComponent } from '@rucken/web';
import { BindIoInner } from 'ngx-bind-io';
import { BsModalService } from 'ngx-bootstrap/modal';
import { DynamicRepository, ProviderActionEnum } from 'ngx-repository';
import { ProjectUserModalComponent } from '../project-user-modal/project-user-modal.component';
let ProjectUsersGridComponent = ProjectUsersGridComponent_1 = class ProjectUsersGridComponent extends UsersGridComponent {
/**
* @param {?} modalsService
* @param {?} errorsExtractor
* @param {?} translateService
* @param {?} dynamicRepository
* @param {?} modalService
* @param {?} usersConfig
*/
constructor(modalsService, errorsExtractor, translateService, dynamicRepository, modalService, usersConfig) {
super(modalsService, errorsExtractor, translateService, dynamicRepository, usersConfig);
this.errorsExtractor = errorsExtractor;
this.translateService = translateService;
this.dynamicRepository = dynamicRepository;
this.modalService = modalService;
this.usersConfig = usersConfig;
this.modalItem = {
component: ProjectUserModalComponent,
initialState: {
simpleMode: true
}
};
this.modalDelete = {
initialState: {
title: translate('Delete user'),
message: translate('Do you really want to delete user "{{fullName}}" from project?')
}
};
this.modalAppendFromGrid = {
component: UsersGridModalComponent,
initialState: {
title: translate('Select user for append to project'),
simpleMode: true
}
};
this.project = undefined;
this._onChange = (/**
* @param {?} value
* @return {?}
*/
(value) => { });
this._onTouched = (/**
* @return {?}
*/
() => { });
}
/**
* @param {?=} overrided
* @return {?}
*/
ngOnInit(overrided) {
if (!overrided) {
return;
}
if (!this.mockedItems) {
this.useRest(Object.assign({ apiUrl: this.apiUrl + '/project/' + this.project.id, autoload: !!this.project.id }, this.usersConfig, { globalEventResolver: (/**
* @param {?} data
* @param {?} action
* @return {?}
*/
(data, action) => {
return action !== ProviderActionEnum.Create && action !== ProviderActionEnum.Delete;
}) }));
}
if (this.mockedItems) {
this.useMock(Object.assign({ items: this.mockedItems, autoload: true }, this.usersConfig, { globalEventResolver: (/**
* @param {?} data
* @param {?} action
* @return {?}
*/
(data, action) => {
return action !== ProviderActionEnum.Create && action !== ProviderActionEnum.Delete;
}) }));
}
if (this.mockedItemsChangeSubscription) {
this.mockedItemsChangeSubscription.unsubscribe();
}
this.mockedItemsChange.subscribe((/**
* @param {?} permissions
* @return {?}
*/
permissions => this._onChange(permissions)));
}
/**
* @return {?}
*/
ngOnDestroy() {
if (this.mockedItemsChangeSubscription) {
this.mockedItemsChangeSubscription.unsubscribe();
}
}
/**
* @param {?} users
* @return {?}
*/
writeValue(users) {
this.mockedItems = users || [];
this.ngOnInit(true);
}
/**
* @param {?} fn
* @return {?}
*/
registerOnChange(fn) {
this._onChange = fn;
}
/**
* @param {?} fn
* @return {?}
*/
registerOnTouched(fn) {
this._onTouched = fn;
}
/**
* @param {?} isDisabled
* @return {?}
*/
setDisabledState(isDisabled) { }
};
ProjectUsersGridComponent.decorators = [
{ type: Component, args: [{
selector: 'project-users-grid',
template: "<entity-grid\n [bindIO]\n [columns]=\"['fullName', 'action']\"\n [enableCreate]=\"'change_project' | perm:false | async\"\n [enableUpdate]=\"false\"\n [enableDelete]=\"'change_project' | perm:false | async\">\n</entity-grid>\n",
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
() => ProjectUsersGridComponent_1)),
multi: true
}
],
changeDetection: ChangeDetectionStrategy.OnPush
}] }
];
/** @nocollapse */
ProjectUsersGridComponent.ctorParameters = () => [
{ type: ModalsService },
{ type: ErrorsExtractor },
{ type: TranslateService },
{ type: DynamicRepository },
{ type: BsModalService },
{ type: undefined, decorators: [{ type: Inject, args: [USERS_CONFIG_TOKEN,] }] }
];
ProjectUsersGridComponent.propDecorators = {
modalItem: [{ type: Input }],
modalDelete: [{ type: Input }],
modalAppendFromGrid: [{ type: Input }],
project: [{ type: Input }]
};
ProjectUsersGridComponent = ProjectUsersGridComponent_1 = tslib_1.__decorate([
BindIoInner(),
tslib_1.__metadata("design:paramtypes", [ModalsService,
ErrorsExtractor,
TranslateService,
DynamicRepository,
BsModalService, Object])
], ProjectUsersGridComponent);
export { ProjectUsersGridComponent };
if (false) {
/** @type {?} */
ProjectUsersGridComponent.prototype.modalItem;
/** @type {?} */
ProjectUsersGridComponent.prototype.modalDelete;
/** @type {?} */
ProjectUsersGridComponent.prototype.modalAppendFromGrid;
/** @type {?} */
ProjectUsersGridComponent.prototype.project;
/** @type {?} */
ProjectUsersGridComponent.prototype.mockedItemsChangeSubscription;
/** @type {?} */
ProjectUsersGridComponent.prototype._onChange;
/** @type {?} */
ProjectUsersGridComponent.prototype._onTouched;
/**
* @type {?}
* @protected
*/
ProjectUsersGridComponent.prototype.errorsExtractor;
/**
* @type {?}
* @protected
*/
ProjectUsersGridComponent.prototype.translateService;
/**
* @type {?}
* @protected
*/
ProjectUsersGridComponent.prototype.dynamicRepository;
/** @type {?} */
ProjectUsersGridComponent.prototype.modalService;
/**
* @type {?}
* @protected
*/
ProjectUsersGridComponent.prototype.usersConfig;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC11c2Vycy1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BydWNrZW4vdG9kby13ZWIvIiwic291cmNlcyI6WyJsaWIvZW50aXRpZXMvcHJvamVjdHMvcHJvamVjdC11c2Vycy1ncmlkL3Byb2plY3QtdXNlcnMtZ3JpZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxlQUFlLEVBRWYsYUFBYSxFQUNiLFNBQVMsRUFFVCxrQkFBa0IsRUFDbkIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQXdCLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7SUFlbEYseUJBQXlCLHVDQUF6Qix5QkFBMEIsU0FBUSxrQkFBa0I7Ozs7Ozs7OztJQTJCL0QsWUFDRSxhQUE0QixFQUNsQixlQUFnQyxFQUNoQyxnQkFBa0MsRUFDbEMsaUJBQW9DLEVBQ3ZDLFlBQTRCLEVBRXpCLFdBQXVDO1FBRWpELEtBQUssQ0FBQyxhQUFhLEVBQUUsZUFBZSxF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eSwgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgRXJyb3JzRXh0cmFjdG9yLFxuICBJQmFzZUVudGl0eU1vZGFsT3B0aW9ucyxcbiAgTW9kYWxzU2VydmljZSxcbiAgdHJhbnNsYXRlLFxuICBVc2VyLFxuICBVU0VSU19DT05GSUdfVE9LRU5cbn0gZnJvbSAnQHJ1Y2tlbi9jb3JlJztcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICdAcnVja2VuL3RvZG8tY29yZSc7XG5pbXBvcnQgeyBVc2Vyc0dyaWRDb21wb25lbnQsIFVzZXJzR3JpZE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnQHJ1Y2tlbi93ZWInO1xuaW1wb3J0IHsgQmluZElvSW5uZXIgfSBmcm9tICduZ3gtYmluZC1pbyc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgRHluYW1pY1JlcG9zaXRvcnksIElSZXN0UHJvdmlkZXJPcHRpb25zLCBQcm92aWRlckFjdGlvbkVudW0gfSBmcm9tICduZ3gtcmVwb3NpdG9yeSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFByb2plY3RVc2VyTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9wcm9qZWN0LXVzZXItbW9kYWwvcHJvamVjdC11c2VyLW1vZGFsLmNvbXBvbmVudCc7XG5cbkBCaW5kSW9Jbm5lcigpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcm9qZWN0LXVzZXJzLWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvamVjdC11c2Vycy1ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQcm9qZWN0VXNlcnNHcmlkQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQcm9qZWN0VXNlcnNHcmlkQ29tcG9uZW50IGV4dGVuZHMgVXNlcnNHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KClcbiAgbW9kYWxJdGVtOiBJQmFzZUVudGl0eU1vZGFsT3B0aW9ucyA9IHtcbiAgICBjb21wb25lbnQ6IFByb2plY3RVc2VyTW9kYWxDb21wb25lbnQsXG4gICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICBzaW1wbGVNb2RlOiB0cnVlXG4gICAgfVxuICB9O1xuICBASW5wdXQoKVxuICBtb2RhbERlbGV0ZSA9IHtcbiAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0RlbGV0ZSB1c2VyJyksXG4gICAgICBtZXNzYWdlOiB0cmFuc2xhdGUoJ0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdXNlciBcInt7ZnVsbE5hbWV9fVwiIGZyb20gcHJvamVjdD8nKVxuICAgIH1cbiAgfTtcbiAgQElucHV0KClcbiAgbW9kYWxBcHBlbmRGcm9tR3JpZCA9IHtcbiAgICBjb21wb25lbnQ6IFVzZXJzR3JpZE1vZGFsQ29tcG9uZW50LFxuICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnU2VsZWN0IHVzZXIgZm9yIGFwcGVuZCB0byBwcm9qZWN0JyksXG4gICAgICBzaW1wbGVNb2RlOiB0cnVlXG4gICAgfVxuICB9O1xuICBASW5wdXQoKVxuICBwcm9qZWN0OiBQcm9qZWN0ID0gdW5kZWZpbmVkO1xuICBtb2NrZWRJdGVtc0NoYW5nZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1vZGFsc1NlcnZpY2U6IE1vZGFsc1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGVycm9yc0V4dHJhY3RvcjogRXJyb3JzRXh0cmFjdG9yLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBkeW5hbWljUmVwb3NpdG9yeTogRHluYW1pY1JlcG9zaXRvcnksXG4gICAgcHVibGljIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgQEluamVjdChVU0VSU19DT05GSUdfVE9LRU4pXG4gICAgcHJvdGVjdGVkIHVzZXJzQ29uZmlnOiBJUmVzdFByb3ZpZGVyT3B0aW9uczxVc2VyPlxuICApIHtcbiAgICBzdXBlcihtb2RhbHNTZXJ2aWNlLCBlcnJvcnNFeHRyYWN0b3IsIHRyYW5zbGF0ZVNlcnZpY2UsIGR5bmFtaWNSZXBvc2l0b3J5LCB1c2Vyc0NvbmZpZyk7XG4gIH1cbiAgbmdPbkluaXQob3ZlcnJpZGVkPzogYm9vbGVhbikge1xuICAgIGlmICghb3ZlcnJpZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5tb2NrZWRJdGVtcykge1xuICAgICAgdGhpcy51c2VSZXN0KHtcbiAgICAgICAgYXBpVXJsOiB0aGlzLmFwaVVybCArICcvcHJvamVjdC8nICsgdGhpcy5wcm9qZWN0LmlkLFxuICAgICAgICBhdXRvbG9hZDogISF0aGlzLnByb2plY3QuaWQsXG4gICAgICAgIC4uLnRoaXMudXNlcnNDb25maWcsXG4gICAgICAgIGdsb2JhbEV2ZW50UmVzb2x2ZXI6IChkYXRhOiBhbnksIGFjdGlvbjogUHJvdmlkZXJBY3Rpb25FbnVtKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFjdGlvbiAhPT0gUHJvdmlkZXJBY3Rpb25FbnVtLkNyZWF0ZSAmJiBhY3Rpb24gIT09IFByb3ZpZGVyQWN0aW9uRW51bS5EZWxldGU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5tb2NrZWRJdGVtcykge1xuICAgICAgdGhpcy51c2VNb2NrKHtcbiAgICAgICAgaXRlbXM6IHRoaXMubW9ja2VkSXRlbXMsXG4gICAgICAgIGF1dG9sb2FkOiB0cnVlLFxuICAgICAgICAuLi50aGlzLnVzZXJzQ29uZmlnLFxuICAgICAgICBnbG9iYWxFdmVudFJlc29sdmVyOiAoZGF0YTogYW55LCBhY3Rpb246IFByb3ZpZGVyQWN0aW9uRW51bSkgPT4ge1xuICAgICAgICAgIHJldHVybiBhY3Rpb24gIT09IFByb3ZpZGVyQWN0aW9uRW51bS5DcmVhdGUgJiYgYWN0aW9uICE9PSBQcm92aWRlckFjdGlvbkVudW0uRGVsZXRlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMubW9ja2VkSXRlbXNDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMubW9ja2VkSXRlbXNDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5tb2NrZWRJdGVtc0NoYW5nZS5zdWJzY3JpYmUocGVybWlzc2lvbnMgPT4gdGhpcy5fb25DaGFuZ2UocGVybWlzc2lvbnMpKTtcbiAgfVxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5tb2NrZWRJdGVtc0NoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5tb2NrZWRJdGVtc0NoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuICB3cml0ZVZhbHVlKHVzZXJzOiBVc2VyW10pOiB2b2lkIHtcbiAgICB0aGlzLm1vY2tlZEl0ZW1zID0gdXNlcnMgfHwgW107XG4gICAgdGhpcy5uZ09uSW5pdCh0cnVlKTtcbiAgfVxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgfVxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7fVxuICBfb25DaGFuZ2UgPSAodmFsdWU6IFVzZXIpID0+IHt9O1xuICBfb25Ub3VjaGVkID0gKCkgPT4ge307XG59XG4iXX0=