UNPKG

@rucken/todo-web

Version:

Base components and ui for todo application maked on Angular7+ and based on Rucken template

1,207 lines (1,178 loc) 65.7 kB
import { CommonModule } from '@angular/common'; import { NgModule, Component, ChangeDetectionStrategy, Input, Inject, ViewChild, EventEmitter, Output, forwardRef } from '@angular/core'; import { translate, LANGUAGES_ITEM_CONFIG_TOKEN, BasePromptFormModalComponent, BaseEntityListComponent, ModalsService, ErrorsExtractor, UserPermPipe, BaseEntityListModalComponent, User, USERS_CONFIG_TOKEN } from '@rucken/core'; import { __decorate, __metadata } from 'tslib'; import { TranslateService, TranslateModule } from '@ngx-translate/core'; import { Project, PROJECTS_CONFIG_TOKEN, StatusWithProject, STATUSES_CONFIG_TOKEN, Task, TASKS_CONFIG_TOKEN } from '@rucken/todo-core'; import { DynamicRepository, ProviderActionEnum } from 'ngx-repository'; import { BindIoInner, NgxBindIOModule } from 'ngx-bind-io'; import { PromptFormModalModule, WebModalsModule, EntityGridModule, EntityGridModalModule, UsersGridComponent, UsersGridModalComponent, UsersGridModalModule, UserModalModule, EntityInputModule, EntitySelectModule } from '@rucken/web'; import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; import { NG_VALUE_ACCESSOR, FormControl } from '@angular/forms'; import { BsModalService } from 'ngx-bootstrap/modal'; import { map } from 'rxjs/operators'; import { BsDatepickerModule } from 'ngx-bootstrap/datepicker'; import { TypeaheadModule } from 'ngx-bootstrap/typeahead'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** @type {?} */ const RuI18n = { 'Select project': 'Выберите проект', Select: 'Выбрать', 'Delete status': 'Удалить статус', 'Do you really want to delete status "{{title}}" from project?': 'Вы действительно хотите удалить статус "{{title}}" у проекта?', 'Select status for append to project': 'Выберите статус для добавления в проект', 'Delete user': 'Закрыть доступ', 'Do you really want to delete user "{{fullName}}" from project?': 'Вы действительно хотите закрыть доступ к проекту пользователю "{{fullName}}"?', 'Select user for append to project': 'Выберите пользователя для добавления в проект', Projects: 'Проекты', 'Select status': 'Выберите статус', Statuses: 'Статусы', 'Select task': 'Выберите задачу', Tasks: 'Задачи', Russian: 'Русский', English: 'Английский', Delete: 'Удалить', Append: 'Добавить', Save: 'Сохранить', Create: 'Создать', Close: 'Закрыть' }; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ const ɵ0 = { title: translate('Russian'), code: 'ru', translations: [RuI18n] }, ɵ1 = { title: translate('English'), code: 'en', translations: [] }; class RuckenTodoWebModule { } RuckenTodoWebModule.decorators = [ { type: NgModule, args: [{ imports: [CommonModule], providers: [ { provide: LANGUAGES_ITEM_CONFIG_TOKEN, useValue: ɵ0, multi: true }, { provide: LANGUAGES_ITEM_CONFIG_TOKEN, useValue: ɵ1, multi: true } ] },] } ]; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ let ProjectModalComponent = class ProjectModalComponent extends BasePromptFormModalComponent { constructor() { super(); this.apiUrl = undefined; this.group(Project); } }; ProjectModalComponent.decorators = [ { type: Component, args: [{ selector: 'project-modal', template: "<form\n [formGroup]=\"form\"\n novalidate>\n <prompt-form-modal [bindIO]>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <form-group\n [bindIO]\n name=\"title\"\n [title]=\"strings.title\"\n focus>\n <input\n formControlName=\"title\"\n [readonly]=\"readonly\">\n </form-group>\n <form-group\n [bindIO]\n name=\"isPublic\"\n [title]=\"false\">\n <label>\n <input\n formControlName=\"isPublic\"\n type=\"checkbox\"\n [readonly]=\"readonly\"\n [disableControl]=\"readonly\">\n {{strings.isPublic | translate}}\n </label>\n </form-group>\n </div>\n <div class=\"col-md-6\">\n <form-group\n [bindIO]\n name=\"description\"\n [title]=\"strings.description\">\n <textarea\n formControlName=\"description\"\n [readonly]=\"readonly\">\n </textarea>\n </form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <h4 *ngIf=\"!readonly\">{{strings.statuses | translate}}</h4>\n <project-statuses-grid\n formControlName=\"statuses\"\n [project]=\"data\"\n [readonly]=\"readonly\"\n [title]=\"strings.statuses\"\n [apiUrl]=\"apiUrl\"></project-statuses-grid>\n </div>\n <div class=\"col-md-6\">\n <h4 *ngIf=\"!readonly\">{{strings.users | translate}}</h4>\n <project-users-grid\n formControlName=\"users\"\n [readonly]=\"readonly\"\n [title]=\"strings.users\"\n [apiUrl]=\"apiUrl\"></project-users-grid>\n </div>\n </div>\n </prompt-form-modal>\n</form>\n", changeDetection: ChangeDetectionStrategy.OnPush }] } ]; /** @nocollapse */ ProjectModalComponent.ctorParameters = () => []; ProjectModalComponent.propDecorators = { apiUrl: [{ type: Input }] }; ProjectModalComponent = __decorate([ BindIoInner(), __metadata("design:paramtypes", []) ], ProjectModalComponent); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ let ProjectsGridComponent = class ProjectsGridComponent extends BaseEntityListComponent { /** * @param {?} modalsService * @param {?} errorsExtractor * @param {?} translateService * @param {?} dynamicRepository * @param {?} projectsConfig * @param {?=} userPermPipe */ constructor(modalsService, errorsExtractor, translateService, dynamicRepository, projectsConfig, userPermPipe) { super(dynamicRepository.fork(Project), modalsService, Project); this.errorsExtractor = errorsExtractor; this.translateService = translateService; this.dynamicRepository = dynamicRepository; this.projectsConfig = projectsConfig; this.userPermPipe = userPermPipe; this.autoload = false; this.modalItem = { component: ProjectModalComponent, class: 'modal-lg' }; this.modalDelete = { class: 'modal-md' }; this.title = translate('Projects'); } /** * @return {?} */ ngOnInit() { if (!this.mockedItems) { this.useRest(Object.assign({ apiUrl: this.apiUrl }, this.projectsConfig, { autoload: this.autoload })); } if (this.mockedItems) { this.useMock(Object.assign({ items: this.mockedItems }, this.projectsConfig, { autoload: this.autoload })); } } /** * @param {?} item * @return {?} */ onDblClick(item) { if (this.userPermPipe.transform(item)) { this.onUpdateClick(item); } else { this.onViewClick(item); } } }; ProjectsGridComponent.decorators = [ { type: Component, args: [{ selector: 'projects-grid', template: "<entity-grid\n [bindIO]\n [columns]=\"'change_project'|perm:false:['title','users','isPublic','action']:['title','users']|async\"\n [translatedCells]=\"['isPublic']\"\n [enableCreate]=\"'add_project' | perm:false | async\"\n [enableUpdate]=\"'change_project' | perm:false | async\"\n [enableDelete]=\"'delete_project' | perm:false | async\"\n [gridCellActionContent]=\"gridCellActionContent\"\n #grid>\n</entity-grid>\n<ng-template\n #gridCellActionContent\n let-ctx>\n <button\n type=\"button\"\n class=\"btn btn-default btn-sm\"\n (click)=\"grid.onUpdate(ctx.item)\"\n *ngIf=\"(grid.notReadonlyAndEnableUpdate$ | async) && (ctx.item|userPerm)\">\n <fa-icon [icon]=\"['fas', 'edit']\"></fa-icon>\n </button>\n <button\n type=\"button\"\n class=\"btn btn-default btn-sm\"\n (click)=\"grid.onDelete(ctx.item)\"\n *ngIf=\"(grid.notReadonlyAndEnableDelete$ | async) && (ctx.item|userPerm)\">\n <fa-icon [icon]=\"['fas', 'trash']\"></fa-icon>\n </button>\n <button\n type=\"button\"\n class=\"btn btn-default btn-sm\"\n (click)=\"grid.onView(ctx.item)\"\n *ngIf=\"!(ctx.item|userPerm)\">\n <fa-icon [icon]=\"['fas', 'eye']\"></fa-icon>\n </button>\n</ng-template>\n", changeDetection: ChangeDetectionStrategy.OnPush }] } ]; /** @nocollapse */ ProjectsGridComponent.ctorParameters = () => [ { type: ModalsService }, { type: ErrorsExtractor }, { type: TranslateService }, { type: DynamicRepository }, { type: undefined, decorators: [{ type: Inject, args: [PROJECTS_CONFIG_TOKEN,] }] }, { type: UserPermPipe } ]; ProjectsGridComponent.propDecorators = { autoload: [{ type: Input }], modalItem: [{ type: Input }], modalDelete: [{ type: Input }], title: [{ type: Input }] }; ProjectsGridComponent = __decorate([ BindIoInner(), __metadata("design:paramtypes", [ModalsService, ErrorsExtractor, TranslateService, DynamicRepository, Object, UserPermPipe]) ], ProjectsGridComponent); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ let ProjectsGridModalComponent = class ProjectsGridModalComponent extends BaseEntityListModalComponent { constructor() { super(); this.apiUrl = undefined; } }; ProjectsGridModalComponent.decorators = [ { type: Component, args: [{ selector: 'projects-grid-modal', template: "<entity-grid-modal [bindIO]>\n <projects-grid\n [apiUrl]=\"apiUrl\"\n #grid>\n </projects-grid>\n</entity-grid-modal>\n", changeDetection: ChangeDetectionStrategy.OnPush }] } ]; /** @nocollapse */ ProjectsGridModalComponent.ctorParameters = () => []; ProjectsGridModalComponent.propDecorators = { grid: [{ type: ViewChild, args: ['grid',] }], apiUrl: [{ type: Input }] }; ProjectsGridModalComponent = __decorate([ BindIoInner(), __metadata("design:paramtypes", []) ], ProjectsGridModalComponent); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ let ProjectInputComponent = class ProjectInputComponent extends ProjectsGridComponent { /** * @param {?} modalsService * @param {?} errorsExtractor * @param {?} translateService * @param {?} dynamicRepository * @param {?} projectsConfig */ constructor(modalsService, errorsExtractor, translateService, dynamicRepository, projectsConfig) { super(modalsService, errorsExtractor, translateService, dynamicRepository, projectsConfig); this.errorsExtractor = errorsExtractor; this.translateService = translateService; this.dynamicRepository = dynamicRepository; this.projectsConfig = projectsConfig; this.select = new EventEmitter(); this.modalAppendFromGrid = { component: ProjectsGridModalComponent, initialState: { title: translate('Select project'), yesTitle: translate('Select') } }; } /** * @return {?} */ ngOnInit() { this.mockedItems = []; this.useMock(Object.assign({ items: this.mockedItems }, this.projectsConfig)); this.mockedItemsChange.subscribe((/** * @param {?} items * @return {?} */ items => this.onSelect(items[0]))); } /** * @param {?} item * @return {?} */ onSelect(item) { this.select.emit(item); } }; ProjectInputComponent.decorators = [ { type: Component, args: [{ selector: 'project-input', template: "<entity-input\n [bindIO]\n (select)=\"onAppendFromGridClick($event)\">\n <ng-content></ng-content>\n</entity-input>\n", changeDetection: ChangeDetectionStrategy.OnPush }] } ]; /** @nocollapse */ ProjectInputComponent.ctorParameters = () => [ { type: ModalsService }, { type: ErrorsExtractor }, { type: TranslateService }, { type: DynamicRepository }, { type: undefined, decorators: [{ type: Inject, args: [PROJECTS_CONFIG_TOKEN,] }] } ]; ProjectInputComponent.propDecorators = { select: [{ type: Output }], modalAppendFromGrid: [{ type: Input }] }; ProjectInputComponent = __decorate([ BindIoInner(), __metadata("design:paramtypes", [ModalsService, ErrorsExtractor, TranslateService, DynamicRepository, Object]) ], ProjectInputComponent); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ let StatusModalComponent = class StatusModalComponent extends BasePromptFormModalComponent { constructor() { super(); this.group(StatusWithProject); } }; StatusModalComponent.decorators = [ { type: Component, args: [{ selector: 'status-modal', template: "<form\n [formGroup]=\"form\"\n novalidate>\n <prompt-form-modal [bindIO]>\n <form-group\n [bindIO]\n name=\"name\"\n [title]=\"strings.name\"\n focus>\n <input\n formControlName=\"name\"\n [readonly]=\"readonly\">\n </form-group>\n <form-group\n [bindIO]\n name=\"title\"\n [title]=\"strings.title\">\n <input\n formControlName=\"title\"\n [readonly]=\"readonly\">\n </form-group>\n </prompt-form-modal>\n</form>\n", changeDetection: ChangeDetectionStrategy.OnPush }] } ]; /** @nocollapse */ StatusModalComponent.ctorParameters = () => []; StatusModalComponent = __decorate([ BindIoInner(), __metadata("design:paramtypes", []) ], StatusModalComponent); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class StatusModalModule { } StatusModalModule.decorators = [ { type: NgModule, args: [{ imports: [CommonModule, PromptFormModalModule, NgxBindIOModule], declarations: [StatusModalComponent], entryComponents: [StatusModalComponent], exports: [StatusModalComponent, PromptFormModalModule] },] } ]; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ let StatusesGridComponent = class StatusesGridComponent extends BaseEntityListComponent { /** * @param {?} modalsService * @param {?} errorsExtractor * @param {?} translateService * @param {?} dynamicRepository * @param {?} statusesConfig */ constructor(modalsService, errorsExtractor, translateService, dynamicRepository, statusesConfig) { super(dynamicRepository.fork(StatusWithProject), modalsService, StatusWithProject); this.errorsExtractor = errorsExtractor; this.translateService = translateService; this.dynamicRepository = dynamicRepository; this.statusesConfig = statusesConfig; this.autoload = false; this.modalItem = { component: StatusModalComponent }; this.title = translate('Statuses'); this.project = undefined; } /** * @return {?} */ ngOnInit() { if (!this.mockedItems) { this.useRest(Object.assign({ apiUrl: this.apiUrl }, this.statusesConfig, { autoload: this.autoload })); } if (this.mockedItems) { this.useMock(Object.assign({ items: this.mockedItems }, this.statusesConfig, { autoload: this.autoload })); } this.onChangeFilter(); } /** * @param {?=} filter * @return {?} */ onChangeFilter(filter) { filter = filter ? filter : {}; if (this.project) { filter.project = this.project.id; } else { filter.project = -1; } super.onChangeFilter(filter); } /** * @param {?=} item * @return {?} */ defaultCreateCreateModal(item) { item = item || new StatusWithProject(); item.project = this.project; this.modalCreate = Object.assign({}, this.modalCreate, { initialState: Object.assign({}, this.modalCreate.initialState, { data: item }) }); return super.defaultCreateCreateModal(item); } /** * @param {?=} item * @return {?} */ defaultCreateUpdateModal(item) { item.project = this.project; this.modalUpdate = Object.assign({}, this.modalUpdate, { initialState: Object.assign({}, this.modalUpdate.initialState, { data: item }) }); return super.defaultCreateUpdateModal(item); } }; StatusesGridComponent.decorators = [ { type: Component, args: [{ selector: 'statuses-grid', template: "<entity-grid\n [bindIO]\n [columns]=\"['title','action']\"\n [enableCreate]=\"'add_status' | perm:false | async\"\n [enableUpdate]=\"'change_status' | perm:false | async\"\n [enableDelete]=\"'delete_status' | perm:false | async\">\n</entity-grid>\n", changeDetection: ChangeDetectionStrategy.OnPush }] } ]; /** @nocollapse */ StatusesGridComponent.ctorParameters = () => [ { type: ModalsService }, { type: ErrorsExtractor }, { type: TranslateService }, { type: DynamicRepository }, { type: undefined, decorators: [{ type: Inject, args: [STATUSES_CONFIG_TOKEN,] }] } ]; StatusesGridComponent.propDecorators = { autoload: [{ type: Input }], modalItem: [{ type: Input }], title: [{ type: Input }], project: [{ type: Input }] }; StatusesGridComponent = __decorate([ BindIoInner(), __metadata("design:paramtypes", [ModalsService, ErrorsExtractor, TranslateService, DynamicRepository, Object]) ], StatusesGridComponent); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class StatusesGridModule { } StatusesGridModule.decorators = [ { type: NgModule, args: [{ imports: [CommonModule, WebModalsModule, EntityGridModule, StatusModalModule, NgxBindIOModule], declarations: [StatusesGridComponent], exports: [StatusesGridComponent, EntityGridModule, StatusModalModule] },] } ]; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ let StatusesGridModalComponent = class StatusesGridModalComponent extends BaseEntityListModalComponent { constructor() { super(); this.apiUrl = undefined; this.project = undefined; } }; StatusesGridModalComponent.decorators = [ { type: Component, args: [{ selector: 'statuses-grid-modal', template: "<entity-grid-modal [bindIO]>\n <statuses-grid\n [apiUrl]=\"apiUrl\"\n [project]=\"project\"\n #grid>\n </statuses-grid>\n</entity-grid-modal>\n", changeDetection: ChangeDetectionStrategy.OnPush }] } ]; /** @nocollapse */ StatusesGridModalComponent.ctorParameters = () => []; StatusesGridModalComponent.propDecorators = { grid: [{ type: ViewChild, args: ['grid',] }], apiUrl: [{ type: Input }], project: [{ type: Input }] }; StatusesGridModalComponent = __decorate([ BindIoInner(), __metadata("design:paramtypes", []) ], StatusesGridModalComponent); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class StatusesGridModalModule { } StatusesGridModalModule.decorators = [ { type: NgModule, args: [{ imports: [CommonModule, EntityGridModalModule, StatusesGridModule, NgxBindIOModule], declarations: [StatusesGridModalComponent], entryComponents: [StatusesGridModalComponent], exports: [StatusesGridModalComponent, EntityGridModalModule, StatusesGridModule] },] } ]; var ProjectStatusesGridComponent_1; let ProjectStatusesGridComponent = ProjectStatusesGridComponent_1 = class ProjectStatusesGridComponent extends StatusesGridComponent { /** * @param {?} modalsService * @param {?} errorsExtractor * @param {?} translateService * @param {?} dynamicRepository * @param {?} statusesConfig */ constructor(modalsService, errorsExtractor, translateService, dynamicRepository, statusesConfig) { super(modalsService, errorsExtractor, translateService, dynamicRepository, statusesConfig); this.errorsExtractor = errorsExtractor; this.translateService = translateService; this.dynamicRepository = dynamicRepository; this.statusesConfig = statusesConfig; this.modalDelete = { initialState: { title: translate('Delete status'), message: translate('Do you really want to delete status "{{title}}" from project?') } }; this.modalAppendFromGrid = { component: StatusesGridModalComponent, initialState: { title: translate('Select status for append to project') } }; 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.statusesConfig, { 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.statusesConfig, { 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 {?} statuses * @return {?} */ writeValue(statuses) { this.mockedItems = statuses || []; this.ngOnInit(true); } /** * @param {?} fn * @return {?} */ registerOnChange(fn) { this._onChange = fn; } /** * @param {?} fn * @return {?} */ registerOnTouched(fn) { this._onTouched = fn; } /** * @param {?} isDisabled * @return {?} */ setDisabledState(isDisabled) { } }; ProjectStatusesGridComponent.decorators = [ { type: Component, args: [{ selector: 'project-statuses-grid', template: "<entity-grid\n [bindIO]\n [columns]=\"['title', 'action']\"\n (appendFromGrid)=\"onCreateClick()\"\n [enableCreate]=\"'add_status' | perm:false | async\"\n [enableUpdate]=\"'change_status' | perm:false | async\"\n [enableDelete]=\"'delete_status' | perm:false | async\">\n</entity-grid>\n", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ () => ProjectStatusesGridComponent_1)), multi: true } ], changeDetection: ChangeDetectionStrategy.OnPush }] } ]; /** @nocollapse */ ProjectStatusesGridComponent.ctorParameters = () => [ { type: ModalsService }, { type: ErrorsExtractor }, { type: TranslateService }, { type: DynamicRepository }, { type: undefined, decorators: [{ type: Inject, args: [STATUSES_CONFIG_TOKEN,] }] } ]; ProjectStatusesGridComponent.propDecorators = { modalDelete: [{ type: Input }], modalAppendFromGrid: [{ type: Input }], project: [{ type: Input }] }; ProjectStatusesGridComponent = ProjectStatusesGridComponent_1 = __decorate([ BindIoInner(), __metadata("design:paramtypes", [ModalsService, ErrorsExtractor, TranslateService, DynamicRepository, Object]) ], ProjectStatusesGridComponent); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class ProjectStatusesGridModule { } ProjectStatusesGridModule.decorators = [ { type: NgModule, args: [{ imports: [CommonModule, EntityGridModule, StatusModalModule, StatusesGridModalModule, NgxBindIOModule], declarations: [ProjectStatusesGridComponent], exports: [ProjectStatusesGridComponent, EntityGridModule, StatusModalModule, StatusesGridModalModule] },] } ]; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ let ProjectUserModalComponent = class ProjectUserModalComponent extends BasePromptFormModalComponent { constructor() { super(); this.apiUrl = undefined; this.group(User); } }; ProjectUserModalComponent.decorators = [ { type: Component, args: [{ selector: 'project-user-modal', template: "<form\n [formGroup]=\"form\"\n novalidate>\n <prompt-form-modal [bindIO]>\n <form-group\n [bindIO]\n name=\"username\"\n [title]=\"strings.username\"\n focus>\n <input\n formControlName=\"username\"\n [readonly]=\"readonly\">\n </form-group>\n <form-group\n [bindIO]\n name=\"email\"\n [title]=\"strings.email\">\n <input\n formControlName=\"email\"\n [readonly]=\"readonly\">\n </form-group>\n <form-group\n [bindIO]\n name=\"firstName\"\n [title]=\"strings.firstName\">\n <input\n formControlName=\"firstName\"\n [readonly]=\"readonly\">\n </form-group>\n <form-group\n [bindIO]\n name=\"lastName\"\n [title]=\"strings.lastName\">\n <input\n formControlName=\"lastName\"\n [readonly]=\"readonly\">\n </form-group>\n </prompt-form-modal>\n</form>\n", changeDetection: ChangeDetectionStrategy.OnPush }] } ]; /** @nocollapse */ ProjectUserModalComponent.ctorParameters = () => []; ProjectUserModalComponent.propDecorators = { apiUrl: [{ type: Input }] }; ProjectUserModalComponent = __decorate([ BindIoInner(), __metadata("design:paramtypes", []) ], ProjectUserModalComponent); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class ProjectUserModalModule { } ProjectUserModalModule.decorators = [ { type: NgModule, args: [{ imports: [CommonModule, PromptFormModalModule, TranslateModule.forChild(), NgxBindIOModule], declarations: [ProjectUserModalComponent], entryComponents: [ProjectUserModalComponent], exports: [ProjectUserModalComponent, PromptFormModalModule] },] } ]; var ProjectUsersGridComponent_1; 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 = __decorate([ BindIoInner(), __metadata("design:paramtypes", [ModalsService, ErrorsExtractor, TranslateService, DynamicRepository, BsModalService, Object]) ], ProjectUsersGridComponent); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class ProjectUsersGridModule { } ProjectUsersGridModule.decorators = [ { type: NgModule, args: [{ imports: [CommonModule, UsersGridModalModule, UserModalModule, ProjectUserModalModule, NgxBindIOModule], declarations: [ProjectUsersGridComponent], exports: [ProjectUsersGridComponent, UsersGridModalModule, UserModalModule, ProjectUserModalModule] },] } ]; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class ProjectModalModule { } ProjectModalModule.decorators = [ { type: NgModule, args: [{ imports: [ CommonModule, PromptFormModalModule, ProjectStatusesGridModule, ProjectUsersGridModule, TranslateModule.forChild(), NgxBindIOModule ], declarations: [ProjectModalComponent], entryComponents: [ProjectModalComponent], exports: [ProjectModalComponent, PromptFormModalModule, ProjectStatusesGridModule, ProjectUsersGridModule] },] } ]; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class ProjectsGridModule { } ProjectsGridModule.decorators = [ { type: NgModule, args: [{ imports: [CommonModule, WebModalsModule, EntityGridModule, ProjectModalModule, FontAwesomeModule, NgxBindIOModule], declarations: [ProjectsGridComponent], exports: [ProjectsGridComponent, EntityGridModule, ProjectModalModule] },] } ]; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class ProjectsGridModalModule { } ProjectsGridModalModule.decorators = [ { type: NgModule, args: [{ imports: [CommonModule, EntityGridModalModule, ProjectsGridModule, NgxBindIOModule], declarations: [ProjectsGridModalComponent], entryComponents: [ProjectsGridModalComponent], exports: [ProjectsGridModalComponent, EntityGridModalModule, ProjectsGridModule] },] } ]; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class ProjectInputModule { } ProjectInputModule.decorators = [ { type: NgModule, args: [{ imports: [CommonModule, EntityInputModule, ProjectsGridModalModule, NgxBindIOModule], declarations: [ProjectInputComponent], exports: [ProjectInputComponent, EntityInputModule, ProjectsGridModalModule] },] } ]; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ let ProjectSelectComponent = class ProjectSelectComponent extends ProjectsGridComponent { /** * @param {?} modalsService * @param {?} errorsExtractor * @param {?} translateService * @param {?} dynamicRepository * @param {?} projectsConfig */ constructor(modalsService, errorsExtractor, translateService, dynamicRepository, projectsConfig) { super(modalsService, errorsExtractor, translateService, dynamicRepository, projectsConfig); this.errorsExtractor = errorsExtractor; this.translateService = translateService; this.dynamicRepository = dynamicRepository; this.projectsConfig = projectsConfig; this.searchField = new FormControl(); this.nameField = 'title'; } /** * @return {?} */ ngOnInit() { if (!this.mockedItems) { this.useRest(Object.assign({ apiUrl: this.apiUrl }, this.projectsConfig, { paginationMeta: { perPage: 1000 } })); } if (this.mockedItems) { this.useMock(Object.assign({ items: this.mockedItems }, this.projectsConfig)); } } /** * @param {?} value * @param {?} item * @return {?} */ checkChange(value, item) { return item instanceof Project; } }; ProjectSelectComponent.decorators = [ { type: Component, args: [{ selector: 'project-select', template: "<entity-select [bindIO]>\n <ng-content></ng-content>\n</entity-select>\n", changeDetection: ChangeDetectionStrategy.OnPush }] } ]; /** @nocollapse */ ProjectSelectComponent.ctorParameters = () => [ { type: ModalsService }, { type: ErrorsExtractor }, { type: TranslateService }, { type: DynamicRepository }, { type: undefined, decorators: [{ type: Inject, args: [PROJECTS_CONFIG_TOKEN,] }] } ]; ProjectSelectComponent.propDecorators = { searchField: [{ type: Input }] }; ProjectSelectComponent = __decorate([ BindIoInner(), __metadata("design:paramtypes", [ModalsService, ErrorsExtractor, TranslateService, DynamicRepository, Object]) ], ProjectSelectComponent); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class ProjectSelectModule { } ProjectSelectModule.decorators = [ { type: NgModule, args: [{ imports: [CommonModule, EntitySelectModule, ProjectsGridModalModule, NgxBindIOModule], declarations: [ProjectSelectComponent], exports: [ProjectSelectComponent, EntitySelectModule, ProjectsGridModalModule] },] } ]; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ let StatusInputComponent = class StatusInputComponent extends StatusesGridComponent { /** * @param {?} modalsService * @param {?} errorsExtractor * @param {?} translateService * @param {?} dynamicRepository * @param {?} statusesConfig */ constructor(modalsService, errorsExtractor, translateService, dynamicRepository, statusesConfig) { super(modalsService, errorsExtractor, translateService, dynamicRepository, statusesConfig); this.errorsExtractor = errorsExtractor; this.translateService = translateService; this.dynamicRepository = dynamicRepository; this.statusesConfig = statusesConfig; this.modalAppendFromGrid = { component: StatusesGridModalComponent, initialState: { title: translate('Select status'), yesTitle: translate('Select') } }; this.select = new EventEmitter(); } /** * @return {?} */ ngOnInit() { this.mockedItems = []; this.useMock(Object.assign({ items: this.mockedItems }, this.statusesConfig)); this.mockedItemsChange.subscribe((/** * @param {?} items * @return {?} */ items => this.onSelect(items[0]))); } /** * @return {?} */ defaultAppendFromGridModal() { this.modalAppendFromGrid = Object.assign({}, this.modalAppendFromGrid, { initialState: Object.assign({}, this.modalAppendFromGrid.initialState, { project: this.project }) }); return super.defaultAppendFromGridModal(); } /** * @param {?} item * @return {?} */ onSelect(item) { this.select.emit(item); } }; StatusInputComponent.decorators = [ { type: Component, args: [{ selector: 'status-input', template: "<entity-input\n [readonly]=\"readonly\"\n (select)=\"onAppendFromGridClick($event)\">\n <ng-content></ng-content>\n</entity-input>\n", changeDetection: ChangeDetectionStrategy.OnPush }] } ]; /** @nocollapse */ StatusInputComponent.ctorParameters = () => [ { type: ModalsService }, { type: ErrorsExtractor }, { type: TranslateService }, { type: DynamicRepository }, { type: undefined, decorators: [{ type: Inject, args: [STATUSES_CONFIG_TOKEN,] }] } ]; StatusInputComponent.propDecorators = { modalAppendFromGrid: [{ type: Input }], select: [{ type: Output }] }; StatusInputComponent = __decorate([ BindIoInner(), __metadata("design:paramtypes", [ModalsService, ErrorsExtractor, TranslateService, DynamicRepository, Object]) ], StatusInputComponent); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class StatusInputModule { } StatusInputModule.decorators = [ { type: NgModule, args: [{ imports: [CommonModule, EntityInputModule, StatusesGridModalModule, NgxBindIOModule], declarations: [StatusInputComponent], exports: [StatusInputComponent, EntityInputModule, StatusesGridModalModule] },] } ]; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ let StatusSelectComponent = class StatusSelectComponent extends StatusesGridComponent { /** * @param {?} modalsService * @param {?} errorsExtractor * @param {?} translateService * @param {?} dynamicRepository * @param {?} statusesConfig */ constructor(modalsService, errorsExtractor, translateService, dynamicRepository, statusesConfig) { super(modalsService, errorsExtractor, translateService, dynamicRepository, statusesConfig); this.errorsExtractor = errorsExtractor; this.translateService = translateService; this.dynamicRepository = dynamicRepository; this.statusesConfig = statusesConfig; this.searchField = new FormControl(); this.nameField = 'name'; } /** * @return {?} */ ngOnInit() { if (!this.mockedItems) { this.useRest(Object.assign({ apiUrl: this.apiUrl }, this.statusesConfig, { paginationMeta: { perPage: 1000 } })); } if (this.mockedItems) { this.useMock(Object.assign({ items: this.mockedItems }, this.statusesConfig)); } } /** * @param {?} value * @param {?} item * @return {?} */ checkChange(value, item) { return item instanceof StatusWithProject; } }; StatusSelectComponent.decorators = [ { type: Component, args: [{ selector: 'status-select', template: "<entity-select [bindIO]>\n <ng-content></ng-content>\n</entity-select>\n", changeDetection: ChangeDetectionStrategy.OnPush }] } ]; /** @nocollapse */ StatusSelectComponent.ctorParameters = () => [ { type: ModalsService }, { type: ErrorsExtractor }, { type: TranslateService }, { type: DynamicRepository }, { type: undefined, decorators: [{ type: Inject, args: [STATUSES_CONFIG_TOKEN,] }] } ]; StatusSelectComponent.propDecorators = { searchField: [{ type: Input }] }; StatusSelectComponent = __decorate([ BindIoInner(), __metadata("design:paramtypes", [ModalsService, ErrorsExtractor, TranslateService, DynamicRepository, Object]) ], StatusSelectComponent); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class StatusSelectModule { } StatusSelectModule.decorators = [ { type: NgModule, args: [{ imports: [CommonModule, EntitySelectModule, StatusesGridModalModule, NgxBindIOModule], declarations: [StatusSelectComponent], exports: [StatusSelectComponent, EntitySelectModule, StatusesGridModalModule] },] } ]; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ let TaskModalComponent = class TaskModalComponent extends BasePromptFormModalComponent { constructor() { super(); this.apiUrl = undefined; this.group(Task); } }; TaskModalComponent.decorators = [ { type: Component, args: [{ selector: 'task-modal', template: "<form\n [formGroup]=\"form\"\n novalidate>\n <prompt-form-modal [bindIO]>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <form-group\n [bindIO]\n name=\"title\"\n [title]=\"strings.title\"\n focus>\n <input\n formControlName=\"title\"\n [readonly]=\"readonly\">\n </form-group>\n </div>\n <div class=\"col-md-12\">\n <form-group\n [bindIO]\n name=\"description\"\n [title]=\"strings.description\">\n <textarea\n formControlName=\"description\"\n [readonly]=\"readonly\">\n </textarea>\n </form-group>\n </div>\n <div class=\"col-md-4\">\n <form-group\n [bindIO]\n name=\"status\"\n [title]=\"strings.status\">\n <status-input\n (select)=\"form.get('status').setValue($event)\"\n [project]=\"data.project\"\n [readonly]=\"readonly\"\n [apiUrl]=\"apiUrl\">\n <input\n formControlName=\"status\"\n [readonly]=\