@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
JavaScript
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]=\