@rucken/todo-core
Version:
Core with base class and entities for todo application maked on Angular7+ and based on Rucken template
160 lines • 15.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { serializeModel, transformDateToString, transformStringToDate, transformStringToObject, translate, User } from '@rucken/core';
import { Transform, Type } from 'class-transformer';
import { IsNotEmpty } from 'class-validator';
import { DateTime } from 'luxon';
import { Project } from './project';
import { Status } from './status';
export class Task {
constructor() {
this.id = undefined;
this.project = undefined;
this.title = undefined;
this.description = undefined;
this.status = undefined;
this.openAt = undefined;
this.closeAt = undefined;
this.createdAt = undefined;
this.updatedAt = undefined;
this.createdUser = undefined;
this.updatedUser = undefined;
this.assignedUser = undefined;
}
/**
* @return {?}
*/
toString() {
return this.title;
}
/**
* @return {?}
*/
get range() {
/** @type {?} */
const arr = [];
if (this.openAt) {
if (!this.closeAt) {
arr.push(' >= ');
}
arr.push((typeof this.openAt === 'string'
? DateTime.fromISO(String(this.openAt))
: DateTime.fromJSDate((/** @type {?} */ (this.openAt)))).toLocaleString());
}
if (this.openAt && this.closeAt) {
arr.push(' - ');
}
if (this.closeAt) {
if (!this.openAt) {
arr.push(' <= ');
}
arr.push((typeof this.closeAt === 'string'
? DateTime.fromISO(String(this.closeAt))
: DateTime.fromJSDate((/** @type {?} */ (this.closeAt)))).toLocaleString());
}
return arr.join('');
}
}
Task.strings = {
id: translate('Id'),
project: translate('Project'),
title: translate('Title'),
description: translate('Description'),
status: translate('Status'),
openAt: translate('Open at'),
closeAt: translate('Close at'),
createdAt: translate('Created at'),
updatedAt: translate('Updated at'),
range: translate('Task time'),
createdUser: translate('Created user'),
updatedUser: translate('Updated user'),
assignedUser: translate('Assigned user'),
createTitle: translate('Add new task'),
viewTitle: translate('Task #{{id}}'),
updateTitle: translate('Update task #{{id}}'),
deleteTitle: translate('Delete task #{{id}}'),
deleteMessage: translate('Do you really want to delete task?')
};
tslib_1.__decorate([
IsNotEmpty(),
Type(serializeModel(Project)),
Transform(transformStringToObject, { toPlainOnly: true }),
tslib_1.__metadata("design:type", Project)
], Task.prototype, "project", void 0);
tslib_1.__decorate([
IsNotEmpty(),
tslib_1.__metadata("design:type", String)
], Task.prototype, "title", void 0);
tslib_1.__decorate([
IsNotEmpty(),
Type(serializeModel(Status)),
Transform(transformStringToObject, { toPlainOnly: true }),
tslib_1.__metadata("design:type", Status)
], Task.prototype, "status", void 0);
tslib_1.__decorate([
Transform(transformStringToDate, { toClassOnly: true }),
Transform(transformDateToString, { toPlainOnly: true }),
tslib_1.__metadata("design:type", Object)
], Task.prototype, "openAt", void 0);
tslib_1.__decorate([
Transform(transformStringToDate, { toClassOnly: true }),
Transform(transformDateToString, { toPlainOnly: true }),
tslib_1.__metadata("design:type", Object)
], Task.prototype, "closeAt", void 0);
tslib_1.__decorate([
Transform(transformStringToDate, { toClassOnly: true }),
Transform(transformDateToString, { toPlainOnly: true }),
tslib_1.__metadata("design:type", Object)
], Task.prototype, "createdAt", void 0);
tslib_1.__decorate([
Transform(transformStringToDate, { toClassOnly: true }),
Transform(transformDateToString, { toPlainOnly: true }),
tslib_1.__metadata("design:type", Object)
], Task.prototype, "updatedAt", void 0);
tslib_1.__decorate([
Type(serializeModel(User)),
Transform(transformStringToObject, { toPlainOnly: true }),
tslib_1.__metadata("design:type", User)
], Task.prototype, "createdUser", void 0);
tslib_1.__decorate([
Type(serializeModel(User)),
Transform(transformStringToObject, { toPlainOnly: true }),
tslib_1.__metadata("design:type", User)
], Task.prototype, "updatedUser", void 0);
tslib_1.__decorate([
Type(serializeModel(User)),
Transform(transformStringToObject, { toPlainOnly: true }),
tslib_1.__metadata("design:type", User)
], Task.prototype, "assignedUser", void 0);
if (false) {
/** @type {?} */
Task.strings;
/** @type {?} */
Task.prototype.id;
/** @type {?} */
Task.prototype.project;
/** @type {?} */
Task.prototype.title;
/** @type {?} */
Task.prototype.description;
/** @type {?} */
Task.prototype.status;
/** @type {?} */
Task.prototype.openAt;
/** @type {?} */
Task.prototype.closeAt;
/** @type {?} */
Task.prototype.createdAt;
/** @type {?} */
Task.prototype.updatedAt;
/** @type {?} */
Task.prototype.createdUser;
/** @type {?} */
Task.prototype.updatedUser;
/** @type {?} */
Task.prototype.assignedUser;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BydWNrZW4vdG9kby1jb3JlLyIsInNvdXJjZXMiOlsibGliL21vZGVscy90YXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsSUFBSSxFQUNMLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWxDLE1BQU0sT0FBTyxJQUFJO0lBQWpCO1FBdUJFLE9BQUUsR0FBVyxTQUFTLENBQUM7UUFLdkIsWUFBTyxHQUFZLFNBQVMsQ0FBQztRQUc3QixVQUFLLEdBQVcsU0FBUyxDQUFDO1FBRTFCLGdCQUFXLEdBQVcsU0FBUyxDQUFDO1FBS2hDLFdBQU0sR0FBVyxTQUFTLENBQUM7UUFJM0IsV0FBTSxHQUFrQixTQUFTLENBQUM7UUFJbEMsWUFBTyxHQUFrQixTQUFTLENBQUM7UUFJbkMsY0FBUyxHQUFrQixTQUFTLENBQUM7UUFJckMsY0FBUyxHQUFrQixTQUFTLENBQUM7UUFJckMsZ0JBQVcsR0FBUyxTQUFTLENBQUM7UUFJOUIsZ0JBQVcsR0FBUyxTQUFTLENBQUM7UUFJOUIsaUJBQVksR0FBUyxTQUFTLENBQUM7SUFtQ2pDLENBQUM7Ozs7SUFqQ0MsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDOzs7O0lBRUQsSUFBSSxLQUFLOztjQUNELEdBQUcsR0FBYSxFQUFF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QztzQ0FDNUMsSUFBSTswQ0FBYTs7O0lBakUvQixhQW9CRTs7SUFFRixrQkFBdUI7O0lBRXZCLHVCQUc2Qjs7SUFFN0IscUJBQzBCOztJQUUxQiwyQkFBZ0M7O0lBRWhDLHNCQUcyQjs7SUFFM0Isc0JBRWtDOztJQUVsQyx1QkFFbUM7O0lBRW5DLHlCQUVxQzs7SUFFckMseUJBRXFDOztJQUVyQywyQkFFOEI7O0lBRTlCLDJCQUU4Qjs7SUFFOUIsNEJBRStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgc2VyaWFsaXplTW9kZWwsXG4gIHRyYW5zZm9ybURhdGVUb1N0cmluZyxcbiAgdHJhbnNmb3JtU3RyaW5nVG9EYXRlLFxuICB0cmFuc2Zvcm1TdHJpbmdUb09iamVjdCxcbiAgdHJhbnNsYXRlLFxuICBVc2VyXG59IGZyb20gJ0BydWNrZW4vY29yZSc7XG5pbXBvcnQgeyBUcmFuc2Zvcm0sIFR5cGUgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBJc05vdEVtcHR5IH0gZnJvbSAnY2xhc3MtdmFsaWRhdG9yJztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHsgSU1vZGVsIH0gZnJvbSAnbmd4LXJlcG9zaXRvcnknO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4vcHJvamVjdCc7XG5pbXBvcnQgeyBTdGF0dXMgfSBmcm9tICcuL3N0YXR1cyc7XG5cbmV4cG9ydCBjbGFzcyBUYXNrIGltcGxlbWVudHMgSU1vZGVsIHtcbiAgc3RhdGljIHN0cmluZ3MgPSB7XG4gICAgaWQ6IHRyYW5zbGF0ZSgnSWQnKSxcbiAgICBwcm9qZWN0OiB0cmFuc2xhdGUoJ1Byb2plY3QnKSxcbiAgICB0aXRsZTogdHJhbnNsYXRlKCdUaXRsZScpLFxuICAgIGRlc2NyaXB0aW9uOiB0cmFuc2xhdGUoJ0Rlc2NyaXB0aW9uJyksXG4gICAgc3RhdHVzOiB0cmFuc2xhdGUoJ1N0YXR1cycpLFxuICAgIG9wZW5BdDogdHJhbnNsYXRlKCdPcGVuIGF0JyksXG4gICAgY2xvc2VBdDogdHJhbnNsYXRlKCdDbG9zZSBhdCcpLFxuICAgIGNyZWF0ZWRBdDogdHJhbnNsYXRlKCdDcmVhdGVkIGF0JyksXG4gICAgdXBkYXRlZEF0OiB0cmFuc2xhdGUoJ1VwZGF0ZWQgYXQnKSxcbiAgICByYW5nZTogdHJhbnNsYXRlKCdUYXNrIHRpbWUnKSxcbiAgICBjcmVhdGVkVXNlcjogdHJhbnNsYXRlKCdDcmVhdGVkIHVzZXInKSxcbiAgICB1cGRhdGVkVXNlcjogdHJhbnNsYXRlKCdVcGRhdGVkIHVzZXInKSxcbiAgICBhc3NpZ25lZFVzZXI6IHRyYW5zbGF0ZSgnQXNzaWduZWQgdXNlcicpLFxuXG4gICAgY3JlYXRlVGl0bGU6IHRyYW5zbGF0ZSgnQWRkIG5ldyB0YXNrJyksXG4gICAgdmlld1RpdGxlOiB0cmFuc2xhdGUoJ1Rhc2sgI3t7aWR9fScpLFxuICAgIHVwZGF0ZVRpdGxlOiB0cmFuc2xhdGUoJ1VwZGF0ZSB0YXNrICN7e2lkfX0nKSxcbiAgICBkZWxldGVUaXRsZTogdHJhbnNsYXRlKCdEZWxldGUgdGFzayAje3tpZH19JyksXG4gICAgZGVsZXRlTWVzc2FnZTogdHJhbnNsYXRlKCdEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRhc2s/JylcbiAgfTtcblxuICBpZDogbnVtYmVyID0gdW5kZWZpbmVkO1xuXG4gIEBJc05vdEVtcHR5KClcbiAgQFR5cGUoc2VyaWFsaXplTW9kZWwoUHJvamVjdCkpXG4gIEBUcmFuc2Zvcm0odHJhbnNmb3JtU3RyaW5nVG9PYmplY3QsIHsgdG9QbGFpbk9ubHk6IHRydWUgfSlcbiAgcHJvamVjdDogUHJvamVjdCA9IHVuZGVmaW5lZDtcblxuICBASXNOb3RFbXB0eSgpXG4gIHRpdGxlOiBzdHJpbmcgPSB1bmRlZmluZWQ7XG5cbiAgZGVzY3JpcHRpb246IHN0cmluZyA9IHVuZGVmaW5lZDtcblxuICBASXNOb3RFbXB0eSgpXG4gIEBUeXBlKHNlcmlhbGl6ZU1vZGVsKFN0YXR1cykpXG4gIEBUcmFuc2Zvcm0odHJhbnNmb3JtU3RyaW5nVG9PYmplY3QsIHsgdG9QbGFpbk9ubHk6IHRydWUgfSlcbiAgc3RhdHVzOiBTdGF0dXMgPSB1bmRlZmluZWQ7XG5cbiAgQFRyYW5zZm9ybSh0cmFuc2Zvcm1TdHJpbmdUb0RhdGUsIHsgdG9DbGFzc09ubHk6IHRydWUgfSlcbiAgQFRyYW5zZm9ybSh0cmFuc2Zvcm1EYXRlVG9TdHJpbmcsIHsgdG9QbGFpbk9ubHk6IHRydWUgfSlcbiAgb3BlbkF0OiBEYXRlIHwgc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gIEBUcmFuc2Zvcm0odHJhbnNmb3JtU3RyaW5nVG9EYXRlLCB7IHRvQ2xhc3NPbmx5OiB0cnVlIH0pXG4gIEBUcmFuc2Zvcm0odHJhbnNmb3JtRGF0ZVRvU3RyaW5nLCB7IHRvUGxhaW5Pbmx5OiB0cnVlIH0pXG4gIGNsb3NlQXQ6IERhdGUgfCBzdHJpbmcgPSB1bmRlZmluZWQ7XG5cbiAgQFRyYW5zZm9ybSh0cmFuc2Zvcm1TdHJpbmdUb0RhdGUsIHsgdG9DbGFzc09ubHk6IHRydWUgfSlcbiAgQFRyYW5zZm9ybSh0cmFuc2Zvcm1EYXRlVG9TdHJpbmcsIHsgdG9QbGFpbk9ubHk6IHRydWUgfSlcbiAgY3JlYXRlZEF0OiBEYXRlIHwgc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gIEBUcmFuc2Zvcm0odHJhbnNmb3JtU3RyaW5nVG9EYXRlLCB7IHRvQ2xhc3NPbmx5OiB0cnVlIH0pXG4gIEBUcmFuc2Zvcm0odHJhbnNmb3JtRGF0ZVRvU3RyaW5nLCB7IHRvUGxhaW5Pbmx5OiB0cnVlIH0pXG4gIHVwZGF0ZWRBdDogRGF0ZSB8IHN0cmluZyA9IHVuZGVmaW5lZDtcblxuICBAVHlwZShzZXJpYWxpemVNb2RlbChVc2VyKSlcbiAgQFRyYW5zZm9ybSh0cmFuc2Zvcm1TdHJpbmdUb09iamVjdCwgeyB0b1BsYWluT25seTogdHJ1ZSB9KVxuICBjcmVhdGVkVXNlcjogVXNlciA9IHVuZGVmaW5lZDtcblxuICBAVHlwZShzZXJpYWxpemVNb2RlbChVc2VyKSlcbiAgQFRyYW5zZm9ybSh0cmFuc2Zvcm1TdHJpbmdUb09iamVjdCwgeyB0b1BsYWluT25seTogdHJ1ZSB9KVxuICB1cGRhdGVkVXNlcjogVXNlciA9IHVuZGVmaW5lZDtcblxuICBAVHlwZShzZXJpYWxpemVNb2RlbChVc2VyKSlcbiAgQFRyYW5zZm9ybSh0cmFuc2Zvcm1TdHJpbmdUb09iamVjdCwgeyB0b1BsYWluT25seTogdHJ1ZSB9KVxuICBhc3NpZ25lZFVzZXI6IFVzZXIgPSB1bmRlZmluZWQ7XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMudGl0bGU7XG4gIH1cblxuICBnZXQgcmFuZ2UoKSB7XG4gICAgY29uc3QgYXJyOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICh0aGlzLm9wZW5BdCkge1xuICAgICAgaWYgKCF0aGlzLmNsb3NlQXQpIHtcbiAgICAgICAgYXJyLnB1c2goJyA+PSAnKTtcbiAgICAgIH1cbiAgICAgIGFyci5wdXNoKFxuICAgICAgICAodHlwZW9mIHRoaXMub3BlbkF0ID09PSAnc3RyaW5nJ1xuICAgICAgICAgID8gRGF0ZVRpbWUuZnJvbUlTTyhTdHJpbmcodGhpcy5vcGVuQXQpKVxuICAgICAgICAgIDogRGF0ZVRpbWUuZnJvbUpTRGF0ZSh0aGlzLm9wZW5BdCBhcyBEYXRlKVxuICAgICAgICApLnRvTG9jYWxlU3RyaW5nKClcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wZW5BdCAmJiB0aGlzLmNsb3NlQXQpIHtcbiAgICAgIGFyci5wdXNoKCcgLSAnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2xvc2VBdCkge1xuICAgICAgaWYgKCF0aGlzLm9wZW5BdCkge1xuICAgICAgICBhcnIucHVzaCgnIDw9ICcpO1xuICAgICAgfVxuICAgICAgYXJyLnB1c2goXG4gICAgICAgICh0eXBlb2YgdGhpcy5jbG9zZUF0ID09PSAnc3RyaW5nJ1xuICAgICAgICAgID8gRGF0ZVRpbWUuZnJvbUlTTyhTdHJpbmcodGhpcy5jbG9zZUF0KSlcbiAgICAgICAgICA6IERhdGVUaW1lLmZyb21KU0RhdGUodGhpcy5jbG9zZUF0IGFzIERhdGUpXG4gICAgICAgICkudG9Mb2NhbGVTdHJpbmcoKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyci5qb2luKCcnKTtcbiAgfVxufVxuIl19