TSK-456 Move taskana application into a single one with lazy modules loading

This commit is contained in:
Martin Rojas Miguel Angel 2018-04-24 15:59:00 +02:00 committed by Holger Hagen
parent 5467637c34
commit 4794ec97fc
197 changed files with 907 additions and 27835 deletions

View File

@ -8,17 +8,13 @@ cache:
timeout: 604800 #1 week
directories:
- "$HOME/.m2"
- "workplace/node_modules"
- "web/node_modules"
- "monitor/node_modules"
before_install:
- nvm install $NODE_VERSION
- npm install -g @angular/cli >/dev/null 2>&1
- lib/deployment/change_version.sh rest/ lib/ web/
install:
- (cd workplace && npm install --no-progress && ng build --environment=prod --no-progress)
&& (cd web && npm install --no-progress && npm run build:prod)
&& (cd monitor && npm install --no-progress && ng build --environment=prod --no-progress)
- (cd web && npm install --no-progress && npm run build:prod)
&& mvn clean install -q -f lib/ -DskipTests=true -Dmaven.javadoc.skip=true -B
&& mvn clean install -q -f rest/ -DskipTests=true -Dmaven.javadoc.skip=true -B
script:

View File

@ -1,58 +0,0 @@
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"project": {
"name": "monitor"
},
"apps": [
{
"root": "src",
"outDir": "dist",
"assets": [
"assets",
"favicon.ico"
],
"index": "index.html",
"main": "main.ts",
"polyfills": "polyfills.ts",
"test": "test.ts",
"tsconfig": "tsconfig.app.json",
"testTsconfig": "tsconfig.spec.json",
"prefix": "app",
"styles": [
"../node_modules/bootstrap-sass/assets/stylesheets/_bootstrap.scss",
"./assets/_site.scss"
],
"scripts": ["../node_modules/jquery/dist/jquery.min.js","../node_modules/bootstrap/dist/js/bootstrap.min.js"],
"environmentSource": "environments/environment.ts",
"environments": {
"dev": "environments/environment.ts",
"prod": "environments/environment.prod.ts"
}
}
],
"e2e": {
"protractor": {
"config": "./protractor.conf.js"
}
},
"lint": [
{
"project": "src/tsconfig.app.json"
},
{
"project": "src/tsconfig.spec.json"
},
{
"project": "e2e/tsconfig.e2e.json"
}
],
"test": {
"karma": {
"config": "./karma.conf.js"
}
},
"defaults": {
"styleExt": "scss",
"component": {}
}
}

View File

@ -1,13 +0,0 @@
# Editor configuration, see http://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
max_line_length = off
trim_trailing_whitespace = false

42
monitor/.gitignore vendored
View File

@ -1,42 +0,0 @@
# See http://help.github.com/ignore-files/ for more about ignoring files.
# compiled output
/dist
/tmp
/out-tsc
# dependencies
/node_modules
# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# misc
/.sass-cache
/connect.lock
/coverage
/libpeerconnection.log
npm-debug.log
testem.log
/typings
# e2e
/e2e/*.js
/e2e/*.map
# System Files
.DS_Store
Thumbs.db

View File

@ -1,28 +0,0 @@
# Monitor
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 1.0.3.
## Development server
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
## Code scaffolding
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|module`.
## Build
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `-prod` flag for a production build.
## Running unit tests
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Running end-to-end tests
Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).
Before running the tests make sure you are serving the app via `ng serve`.
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).

View File

@ -1,14 +0,0 @@
import { MonitorPage } from './app.po';
describe('monitor App', () => {
let page: MonitorPage;
beforeEach(() => {
page = new MonitorPage();
});
it('should display message saying app works', () => {
page.navigateTo();
expect(page.getParagraphText()).toEqual('app works!');
});
});

View File

@ -1,11 +0,0 @@
import { browser, by, element } from 'protractor';
export class MonitorPage {
navigateTo() {
return browser.get('/');
}
getParagraphText() {
return element(by.css('app-root h1')).getText();
}
}

View File

@ -1,12 +0,0 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/e2e",
"module": "commonjs",
"target": "es5",
"types": [
"jasmine",
"node"
]
}
}

View File

@ -1,44 +0,0 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/0.13/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular/cli'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular/cli/plugins/karma')
],
client:{
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
files: [
{ pattern: './src/test.ts', watched: false }
],
preprocessors: {
'./src/test.ts': ['@angular/cli']
},
mime: {
'text/x-typescript': ['ts','tsx']
},
coverageIstanbulReporter: {
reports: [ 'html', 'lcovonly' ],
fixWebpackSourcePaths: true
},
angularCli: {
environment: 'dev'
},
reporters: config.angularCli && config.angularCli.codeCoverage
? ['progress', 'coverage-istanbul']
: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false
});
};

12627
monitor/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,56 +0,0 @@
{
"name": "monitor",
"version": "0.0.0",
"license": "MIT",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"build:prod": "ng build --env=prod",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
"private": true,
"dependencies": {
"@angular/common": "5.2.1",
"@angular/compiler": "5.2.1",
"@angular/core": "5.2.1",
"@angular/forms": "5.2.1",
"@angular/http": "5.2.1",
"@angular/platform-browser": "5.2.1",
"@angular/platform-browser-dynamic": "5.2.1",
"@angular/router": "5.2.1",
"angular-svg-icon": "5.0.0",
"bootstrap": "3.3.7",
"bootstrap-sass": "3.3.7",
"core-js": "2.5.3",
"jquery": "3.3.1",
"ngx-bootstrap": "2.0.1",
"node-sass": "4.7.2",
"rxjs": "5.5.6",
"zone.js": "0.8.20",
"chart.js": "2.7.1",
"ng2-charts": "1.6.0"
},
"devDependencies": {
"@angular/cli": "1.7.3",
"@angular/compiler-cli": "5.2.8",
"@types/jasmine": "2.8.4",
"@types/node": "9.3.0",
"codelyzer": "4.1.0",
"jasmine-core": "2.9.1",
"jasmine-spec-reporter": "4.2.1",
"karma": "2.0.0",
"karma-chrome-launcher": "2.2.0",
"karma-cli": "1.0.1",
"karma-jasmine": "1.1.1",
"karma-jasmine-html-reporter": "0.2.2",
"karma-coverage-istanbul-reporter": "1.3.3",
"protractor": "5.2.2",
"ts-node": "4.1.0",
"tslint": "5.9.1",
"typescript": "2.5.3",
"moment": "2.21.0"
}
}

View File

@ -1,30 +0,0 @@
// Protractor configuration file, see link for more information
// https://github.com/angular/protractor/blob/master/lib/config.ts
const { SpecReporter } = require('jasmine-spec-reporter');
exports.config = {
allScriptsTimeout: 11000,
specs: [
'./e2e/**/*.e2e-spec.ts'
],
capabilities: {
'browserName': 'chrome'
},
directConnect: true,
baseUrl: 'http://localhost:4200/',
framework: 'jasmine',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
print: function() {}
},
beforeLaunch: function() {
require('ts-node').register({
project: 'e2e/tsconfig.e2e.json'
});
},
onPrepare() {
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
}
};

View File

@ -1,38 +0,0 @@
<nav class="navbar navbar-fixed-top">
<div class="navbar show no-border-radius navbar-inverse no-gutter">
<div class="col-xs-11 col-md-11">
<svg-icon class="logo hidden visible-xs visible-sm" src="./assets/icons/logo.svg"></svg-icon>
<ul class="nav logo">
<svg-icon class="logo hidden-xs hidden-sm" src="./assets/icons/logo.svg"></svg-icon>
<p class="navbar-brand no-margin hidden-xs hidden-sm"> <a [href]="monitorUrl">Taskana Monitor </a></p>
</ul>
</div>
<div class="col-xs-1">
<button type="button" class="navbar-toggle collapsed show" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
</div>
<div id="navbar" class="collapse pull-right navbar-inverse" data-html="false">
<ul class="nav navbar-nav navbar-right content-margin">
<li><a [href]="adminUrl">Admininistration</a></li>
<li><a [href]="workplaceUrl">Workplace</a></li>
</ul>
</div>
</nav>
<div class="container">
<tabset #staticTabs>
<tab heading="Tasks">
<tasks></tasks>
</tab>
<tab heading="Workbaskets">
<workbasket></workbasket>
</tab>
</tabset>
</div>

View File

@ -1,19 +0,0 @@
svg-icon.logo {
float: left;
width: 55px;
height: 55px;
margin: 0px 15px;
fill:white
}
.logo-container {
padding-left: 0px;
}
p.navbar-brand >a{
text-decoration: none;
color: #9d9d9d;
&:hover {
color: white;
}
}

View File

@ -1,32 +0,0 @@
import { TestBed, async } from '@angular/core/testing';
import { AppComponent } from './app.component';
describe('AppComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
AppComponent
],
}).compileComponents();
}));
it('should create the app', async(() => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.debugElement.componentInstance;
expect(app).toBeTruthy();
}));
it(`should have as title 'app works!'`, async(() => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.debugElement.componentInstance;
expect(app.title).toEqual('app works!');
}));
it('should render title in a h1 tag', async(() => {
const fixture = TestBed.createComponent(AppComponent);
fixture.detectChanges();
const compiled = fixture.debugElement.nativeElement;
expect(compiled.querySelector('h1').textContent).toContain('app works!');
}));
});

View File

@ -1,14 +0,0 @@
import { Component } from '@angular/core';
import { environment } from '../environments/environment';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
monitorUrl: string = environment.taskanaMonitorUrl;
adminUrl: string = environment.taskanaAdminUrl;
workplaceUrl: string = environment.taskanaWorkplaceUrl;
}

View File

@ -1,42 +0,0 @@
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { AlertModule } from 'ngx-bootstrap';
import { ChartsModule } from 'ng2-charts';
import { TabsModule } from 'ngx-bootstrap/tabs';
import { HttpClientModule } from '@angular/common/http';
import { AngularSvgIconModule } from 'angular-svg-icon';
import { AppComponent } from './app.component';
import { TasksComponent } from './tasks/tasks.component';
import { WorkbasketComponent } from './workbasket/workbasket.component';
import { Report } from "./report/report.component";
import { MapToIterable } from "./pipes/mapToIterable";
import { OrderBy } from "./pipes/orderBy";
@NgModule({
declarations: [
AppComponent,
TasksComponent,
WorkbasketComponent,
Report,
MapToIterable,
OrderBy
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
AlertModule.forRoot(),
ChartsModule,
TabsModule.forRoot(),
HttpClientModule,
AngularSvgIconModule
],
providers: [HttpClientModule],
bootstrap: [AppComponent]
})
export class AppModule {
}

View File

@ -1,36 +0,0 @@
import { Injectable } from '@angular/core';
import { Headers, Http, RequestOptions } from '@angular/http';
import { environment } from '../../environments/environment';
import { Observable } from 'rxjs/Observable';
import { State } from '../model/state';
import { WorkbasketCounter } from '../model/workbasket-counter';
@Injectable()
export class RestConnectorService {
constructor(private http: Http) {
}
getTaskStatistics(): Observable<State[]> {
return this.http.get(environment.taskanaRestUrl + "/v1/monitor/countByState?states=READY,CLAIMED,COMPLETED", this.createAuthorizationHeader())
.map(res => res.json());
}
getWorkbasketStatistics(): Observable<WorkbasketCounter> {
return this.http.get(environment.taskanaRestUrl + "/v1/monitor/taskcountByWorkbasketDaysAndState?daysInPast=5&states=READY,CLAIMED,COMPLETED", this.createAuthorizationHeader())
.map(res => res.json());
}
getTaskStatusReport(): Observable<Object> {
return this.http.get(environment.taskanaRestUrl + "/v1/monitor/taskStatusReport", this.createAuthorizationHeader())
.map(res => res.json());
}
private createAuthorizationHeader() {
let headers: Headers = new Headers();
headers.append("Authorization", "Basic dXNlcl8xXzE6dXNlcl8xXzE=");
return new RequestOptions({ headers: headers });
}
}

View File

@ -1,76 +0,0 @@
/*
* Base structure
*/
/* Move down content because we have a fixed navbar that is 55px tall */
body {
padding-top: 55px;
}
/*
* All side bar links styling.
*/
.nav-sidebar > li > a {
padding-right: 20px;
padding-left: 20px;
}
.nav-sidebar > .active > a,
.nav-sidebar > .active > a:hover,
.nav-sidebar > .active > a:focus {
color: #fff;
background-color: #428bca;
}
.nav.nav-tabs {
& > li {
& > a{
min-height: 56px;
padding-top: 17px;
}
&:first-child > a{
border-left: none;
}
}
& > p{
margin: 0px;
}
}
.navbar-brand {
float: none;
}
.navbar-inverse {
border: none;
}
.navbar {
margin-bottom: 0px;
}
.no-margin {
margin: 0px;
}
.content-margin {
margin: 0px 10px 0px 10px;
}
.no-border-radius {
border-radius: 0px;
}
.container-main {
overflow-y: hidden;
/*Min mobile view size*/
min-width: 420px;
}
.container-scrollable {
max-height: calc(100vh - 52px);
height: calc(100vh - 52px);
overflow-y: auto;
overflow-x: hidden;
}

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 333.333 333.333"><defs><linearGradient id="b"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient><linearGradient id="a"><stop offset="0"/><stop offset="1" stop-opacity="0"/></linearGradient></defs><path d="M43.833 255.275c-20.93-33.066-38.055-61.759-38.055-63.763 0-5.608 17.891-32.476 21.625-32.476 3.905 0 79.417 118.13 79.417 124.238 0 5.927-17.542 32.12-21.511 32.12-2.18 0-17.224-21.805-41.476-60.119zm79.634 1.345C100.08 219.668 86.269 195.86 86.269 192.5c0-6.12 16.822-33.465 20.586-33.465 1.373 0 15.027 19.697 30.341 43.77l27.845 43.772 73.263-115.211C278.599 68 312.194 16.156 312.96 16.156c3.129 0 20.048 25.464 21.036 31.66.952 5.972-7.666 20.42-81.794 137.127-65.74 103.501-83.756 130.452-87.199 130.452-3.374 0-12.614-13.075-41.536-58.775zm29.963-79.472c-4.913-7.831-8.933-16.05-8.933-18.266 0-4.024 87.157-142.726 89.686-142.726 2.129 0 21.632 30.162 21.632 33.454 0 4.613-87.881 141.776-90.837 141.776-1.439 0-6.635-6.407-11.548-14.238z"/><text x="5.34" y="58.027" transform="scale(.7329 1.36446)" font-size="63.778" stroke-width="5.315"><tspan x="5.34" y="58.027">Taskana</tspan></text><flowRoot xml:space="preserve"><flowRegion><path d="M-64.918-13.229H514.35v435.45H-64.918z"/></flowRegion><flowPara/></flowRoot></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -1,7 +0,0 @@
export const environment = {
production: true,
taskanaAdminUrl: 'http://taskana-admin.mybluemix.net',
taskanaWorkplaceUrl: 'http://taskana-workplace.mybluemix.net',
taskanaMonitorUrl: 'http://taskana-monitor.mybluemix.net',
taskanaRestUrl: 'http://taskana-rest.mybluemix.net'
};

View File

@ -1,12 +0,0 @@
// The file contents for the current environment will overwrite these during build.
// The build system defaults to the dev environment which uses `environment.ts`, but if you do
// `ng build --env=prod` then `environment.prod.ts` will be used instead.
// The list of which env maps to which file can be found in `.angular-cli.json`.
export const environment = {
production: false,
taskanaWorkplaceUrl: 'http://localhost:4200',
taskanaAdminUrl: 'http://localhost:4201',
taskanaMonitorUrl: 'http://localhost:4202',
taskanaRestUrl: 'http://localhost:8080'
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -1,19 +0,0 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Monitor</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body class ="container-main">
<app-root></app-root>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.3/Chart.bundle.min.js"></script>
</body>
</html>

View File

@ -1,11 +0,0 @@
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic().bootstrapModule(AppModule);

View File

@ -1,72 +0,0 @@
/**
* This file includes polyfills needed by Angular and is loaded before the app.
* You can add your own extra polyfills to this file.
*
* This file is divided into 2 sections:
* 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
* 2. Application imports. Files imported after ZoneJS that should be loaded before your main
* file.
*
* The current setup is for so-called "evergreen" browsers; the last versions of browsers that
* automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
* Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
*
* Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html
*/
/***************************************************************************************************
* BROWSER POLYFILLS
*/
/** IE9, IE10 and IE11 requires all of the following polyfills. **/
// import 'core-js/es6/symbol';
// import 'core-js/es6/object';
// import 'core-js/es6/function';
// import 'core-js/es6/parse-int';
// import 'core-js/es6/parse-float';
// import 'core-js/es6/number';
// import 'core-js/es6/math';
// import 'core-js/es6/string';
// import 'core-js/es6/date';
// import 'core-js/es6/array';
// import 'core-js/es6/regexp';
// import 'core-js/es6/map';
// import 'core-js/es6/set';
/** IE10 and IE11 requires the following for NgClass support on SVG elements */
// import 'classlist.js'; // Run `npm install --save classlist.js`.
/** IE10 and IE11 requires the following to support `@angular/animation`. */
// import 'web-animations-js'; // Run `npm install --save web-animations-js`.
/** Evergreen browsers require these. **/
import 'core-js/es6/reflect';
import 'core-js/es7/reflect';
/** ALL Firefox browsers require the following to support `@angular/animation`. **/
// import 'web-animations-js'; // Run `npm install --save web-animations-js`.
/***************************************************************************************************
* Zone JS is required by Angular itself.
*/
import 'zone.js/dist/zone'; // Included with Angular CLI.
/***************************************************************************************************
* APPLICATION IMPORTS
*/
/**
* Date, currency, decimal and percent pipes.
* Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10
*/
// import 'intl'; // Run `npm install --save intl`.
/**
* Need to import at least one locale-data with intl.
*/
// import 'intl/locale-data/jsonp/en';

View File

@ -1 +0,0 @@
/* You can add global styles to this file, and also import other style files */

View File

@ -1,32 +0,0 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/dist/long-stack-trace-zone';
import 'zone.js/dist/proxy.js';
import 'zone.js/dist/sync-test';
import 'zone.js/dist/jasmine-patch';
import 'zone.js/dist/async-test';
import 'zone.js/dist/fake-async-test';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
// Unfortunately there's no typing for the `__karma__` variable. Just declare it as any.
declare var __karma__: any;
declare var require: any;
// Prevent Karma from running prematurely.
__karma__.loaded = function () {};
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting()
);
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);
// Finally, start Karma to run the tests.
__karma__.start();

View File

@ -1,13 +0,0 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"module": "es2015",
"baseUrl": "",
"types": []
},
"exclude": [
"test.ts",
"**/*.spec.ts"
]
}

View File

@ -1,20 +0,0 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/spec",
"module": "commonjs",
"target": "es5",
"baseUrl": "",
"types": [
"jasmine",
"node"
]
},
"files": [
"test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

View File

@ -1,5 +0,0 @@
/* SystemJS module definition */
declare var module: NodeModule;
interface NodeModule {
id: string;
}

View File

@ -1,20 +0,0 @@
{
"compileOnSave": false,
"compilerOptions": {
"outDir": "./dist/out-tsc",
"baseUrl": "src",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2016",
"dom"
]
}
}

View File

@ -1,130 +0,0 @@
{
"rulesDirectory": [
"node_modules/codelyzer"
],
"rules": {
"callable-types": true,
"class-name": true,
"comment-format": [
true,
"check-space"
],
"curly": true,
"eofline": true,
"forin": true,
"import-blacklist": [
true,
"rxjs"
],
"import-spacing": true,
"indent": [
true,
"spaces"
],
"interface-over-type-literal": true,
"label-position": true,
"max-line-length": [
true,
140
],
"member-access": false,
"member-ordering": [
true,
"static-before-instance",
"variables-before-functions"
],
"no-arg": true,
"no-bitwise": true,
"no-console": [
true,
"debug",
"info",
"time",
"timeEnd",
"trace"
],
"no-construct": true,
"no-debugger": true,
"no-empty": false,
"no-empty-interface": true,
"no-eval": true,
"no-inferrable-types": [
true,
"ignore-params"
],
"no-shadowed-variable": true,
"no-string-literal": false,
"no-string-throw": true,
"no-switch-case-fall-through": true,
"no-trailing-whitespace": true,
"no-unused-expression": true,
"no-use-before-declare": true,
"no-var-keyword": true,
"object-literal-sort-keys": false,
"one-line": [
true,
"check-open-brace",
"check-catch",
"check-else",
"check-whitespace"
],
"prefer-const": true,
"quotemark": [
true,
"single"
],
"radix": true,
"semicolon": [
"always"
],
"triple-equals": [
true,
"allow-null-check"
],
"typedef-whitespace": [
true,
{
"call-signature": "nospace",
"index-signature": "nospace",
"parameter": "nospace",
"property-declaration": "nospace",
"variable-declaration": "nospace"
}
],
"typeof-compare": true,
"unified-signatures": true,
"variable-name": false,
"whitespace": [
true,
"check-branch",
"check-decl",
"check-operator",
"check-separator",
"check-type"
],
"directive-selector": [
true,
"attribute",
"app",
"camelCase"
],
"component-selector": [
true,
"element",
"app",
"kebab-case"
],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"use-life-cycle-interface": true,
"use-pipe-transform-interface": true,
"component-class-suffix": true,
"directive-class-suffix": true,
"no-access-missing-member": true,
"templates-use-public": true,
"invoke-injectable": true
}
}

134
web/package-lock.json generated
View File

@ -1,6 +1,6 @@
{
"name": "admin",
"version": "0.0.0",
"name": "taskana",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -61,9 +61,9 @@
}
},
"@angular/animations": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-5.2.3.tgz",
"integrity": "sha512-K9rOsRGwt7Zmp/rNdvBmgBKqvEdgCyZF0kvwxrmZfq1Zj0GAkfTAKPL007493O6XFd+icfu/+kmYeqXBGB4gKA==",
"version": "5.2.10",
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-5.2.10.tgz",
"integrity": "sha512-QNYXqnti8BeFriNaZ/juLnO6l0MVlVNUmLycC9ma+pdTiEJl8rtgZ0WXxgOCjScyKpInkWn2J+m9FI/78SYFpw==",
"requires": {
"tslib": "1.9.0"
}
@ -188,77 +188,77 @@
}
},
"@angular/common": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-5.2.1.tgz",
"integrity": "sha512-O7FA4Qpcu6GYMzlsNTHtUsAl6W0SXepP7qEMx83fC1Xje2GEtulp/99Pg6bvpFKiZYdCjJDhjbUZhIO5x0UncQ==",
"version": "5.2.10",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-5.2.10.tgz",
"integrity": "sha512-4zgI/Q6bo/KCvrDPf8gc2IpTJ3PFKgd9RF4jZuh1uc+uEYTAj396tDF8o412AJ/iwtYOHWUx+YgzAvT8dHXZ5Q==",
"requires": {
"tslib": "1.9.0"
}
},
"@angular/compiler": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-5.2.1.tgz",
"integrity": "sha512-c/HDfbDr8yDUCoVCbGHgoae3YCoWG3EuM/l7jfHflE8sbdppiFVxCRd3VkygkwfPGpUZbZaW2x/OK4Z1dQa34g==",
"version": "5.2.10",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-5.2.10.tgz",
"integrity": "sha512-FI9ip+aWGpKQB+VfNbFQ+wyh0K4Th8Q/MrHxW6CN4BYVAfFtfORRohvyyYk0sRxuQO8JFN3W/FFfdXjuL+cZKw==",
"requires": {
"tslib": "1.9.0"
}
},
"@angular/compiler-cli": {
"version": "5.2.8",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-5.2.8.tgz",
"integrity": "sha512-u0cUfpbU2VNmRfkSS/tlsAzF24/LdlXqv8RFFLReJhwZTv4mKl1DzSjvOf6kfALGHDqCdHsVWcx2YJ8f6CeCMg==",
"version": "5.2.10",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-5.2.10.tgz",
"integrity": "sha512-RhI26rVALRn3LrU0CAIEj56m60vLyCd8e2Ah79yRP6vlXL8k6SylXytUljTeXIBtiVu2Bi1qKGf2s1X674GzCw==",
"dev": true,
"requires": {
"chokidar": "1.7.0",
"minimist": "1.2.0",
"reflect-metadata": "0.1.12",
"tsickle": "0.27.2"
"tsickle": "0.27.5"
}
},
"@angular/core": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-5.2.1.tgz",
"integrity": "sha512-2kyXVl+OK/LRUisSfILkRyWiD2BGXysQkN2dwxfwYZwDciH7o8wGSlDDZw0lXIBt0Ly0stYiorIIJGVs5TffaA==",
"version": "5.2.10",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-5.2.10.tgz",
"integrity": "sha512-glDuTtHTcAVhfU3NVewxz/W+Iweq5IaeW2tnMa+RKLopYk9fRs8eR5iTixTGvegwKR770vfXg/gR7P6Ii5cYGQ==",
"requires": {
"tslib": "1.9.0"
}
},
"@angular/forms": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-5.2.1.tgz",
"integrity": "sha512-DeTpReZcK93FBxTdXqtmuzuW5blMu4fWe7JtmDXWD9UhTw7DwRbPO+7yFRbbfSDd3UzfGfqYBqOlSOdPh9dLbg==",
"version": "5.2.10",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-5.2.10.tgz",
"integrity": "sha512-XQR4cd1Eey9aDT3CxQ6pbBWSBEg1408ZV/EUblKgMgt4k8PfDiuLSbF+MI/TOYAg3UkcVAxN1no4hWtkou8Rpw==",
"requires": {
"tslib": "1.9.0"
}
},
"@angular/http": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/@angular/http/-/http-5.2.1.tgz",
"integrity": "sha512-wMX7rnZcanYT2uVeqr1V9k9lduxZprVjvgetUlj6IuO7kbr22SAJN7phuubI0uAd7MUb7uDXBG8cJ00Q/NH6zw==",
"version": "5.2.10",
"resolved": "https://registry.npmjs.org/@angular/http/-/http-5.2.10.tgz",
"integrity": "sha512-euEJbxpH+pKBAwGUSo7XvNdods/kY6I4s8OUaJPUMtraQkhE6TJ0OMYvnqmGbdLimsg3ZMxqm54jCOjj9saEOQ==",
"requires": {
"tslib": "1.9.0"
}
},
"@angular/platform-browser": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-5.2.1.tgz",
"integrity": "sha512-+cE7FM6/WIMZWpxf+LxYhfTPBbxSvLNZv5+RnGcOeg4nEG3x0Ny1dr14r5HyudvKfu/A+xTlVCNY7RjZ6HsWVw==",
"version": "5.2.10",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-5.2.10.tgz",
"integrity": "sha512-oF1A0BS1wpTlxfv6YytkFCkztvvtVllnh5IUnoyV+siVT3qogKat9ZmzCmcDJ5SvIDYkY+rXBhumyFzBZ5ufFg==",
"requires": {
"tslib": "1.9.0"
}
},
"@angular/platform-browser-dynamic": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-5.2.1.tgz",
"integrity": "sha512-S73suoYfGIj7eQlOBXvj3BO8mW8TUUZEUZ/nvFgB/jsb6PtYk1ByIVIWjcV5yttd4TXf7ZhaEYZPm1vBjIN0pA==",
"version": "5.2.10",
"resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-5.2.10.tgz",
"integrity": "sha512-TquhIkyR6uXfmzk6RiEl5+8Kk653Wqe4F+pKn5gFi+Z6cDm4nkDlT9kgT3e6c08JHw9fGGAvNmsalq7oS+PnNg==",
"requires": {
"tslib": "1.9.0"
}
},
"@angular/router": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-5.2.1.tgz",
"integrity": "sha512-NS8ttrfpjETfIt8Wn4oCP5KQ55UKuj6g3iG/yduoDMWel19KOINUYqz5ujL1gHha4A4Tgs1tBZKQKr0LmapTdA==",
"version": "5.2.10",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-5.2.10.tgz",
"integrity": "sha512-63op4yExVsm+Ng4dlCeexQdXKYMnzxtmX116V3hY/mHi1MPTR20uPCx55U8xR0kQvxs0ea8tmJxHdMpz76edqA==",
"requires": {
"tslib": "1.9.0"
}
@ -1687,6 +1687,39 @@
"supports-color": "2.0.0"
}
},
"chart.js": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.7.1.tgz",
"integrity": "sha512-pX1oQAY86MiuyZ2hY593Acbl4MLHKrBBhhmZ1YqSadzQbbsBE2rnd6WISoHjIsdf0WDeC0hbePYCz2ZxkV8L+g==",
"requires": {
"chartjs-color": "2.2.0",
"moment": "2.18.1"
}
},
"chartjs-color": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.2.0.tgz",
"integrity": "sha1-hKL7dVeH7YXDndbdjHsdiEKbrq4=",
"requires": {
"chartjs-color-string": "0.5.0",
"color-convert": "0.5.3"
},
"dependencies": {
"color-convert": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz",
"integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0="
}
}
},
"chartjs-color-string": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.5.0.tgz",
"integrity": "sha512-amWNvCOXlOUYxZVDSa0YOab5K/lmEhbFNKI55PWc4mlv28BDzA7zaoQTGxSBgJMHIW+hGX8YUrvw/FH4LyhwSQ==",
"requires": {
"color-name": "1.1.3"
}
},
"chokidar": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
@ -1935,8 +1968,7 @@
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
},
"colors": {
"version": "1.1.2",
@ -7333,6 +7365,11 @@
}
}
},
"moment": {
"version": "2.18.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz",
"integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8="
},
"move-concurrently": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
@ -7442,6 +7479,19 @@
"dev": true,
"optional": true
},
"ng2-auto-complete": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/ng2-auto-complete/-/ng2-auto-complete-0.12.0.tgz",
"integrity": "sha1-mnjDnFASQE57yDZcA4Fat/aM6j0="
},
"ng2-charts": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-1.6.0.tgz",
"integrity": "sha512-9w0WH69x5/nuqC1og2WaY39NbaBqTGIP1+5gZaH7/KPN6UEPonNg/pYnsIVklLj1DWPWXKa8+XXIJZ1jy5nLxg==",
"requires": {
"chart.js": "2.7.1"
}
},
"ngx-bootstrap": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ngx-bootstrap/-/ngx-bootstrap-2.0.1.tgz",
@ -10833,15 +10883,15 @@
}
},
"tsickle": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.27.2.tgz",
"integrity": "sha512-KW+ZgY0t2cq2Qib1sfdgMiRnk+cr3brUtzZoVWjv+Ot3jNxVorFBUH+6In6hl8Dg7BI2AAFf69NHkwvZNMSFwA==",
"version": "0.27.5",
"resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.27.5.tgz",
"integrity": "sha512-NP+CjM1EXza/M8mOXBLH3vkFEJiu1zfEAlC5WdJxHPn8l96QPz5eooP6uAgYtw1CcKfuSyIiheNUdKxtDWCNeg==",
"dev": true,
"requires": {
"minimist": "1.2.0",
"mkdirp": "0.5.1",
"source-map": "0.6.1",
"source-map-support": "0.5.3"
"source-map-support": "0.5.4"
},
"dependencies": {
"source-map": {
@ -10851,9 +10901,9 @@
"dev": true
},
"source-map-support": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.3.tgz",
"integrity": "sha512-eKkTgWYeBOQqFGXRfKabMFdnWepo51vWqEdoeikaEPFiJC7MCU5j2h4+6Q8npkZTeLGbSyecZvRxiSoWl3rh+w==",
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.4.tgz",
"integrity": "sha512-PETSPG6BjY1AHs2t64vS2aqAgu6dMIMXJULWFBGbh2Gr8nVLbCFDo6i/RMMvviIQ2h1Z8+5gQhVKSn2je9nmdg==",
"dev": true,
"requires": {
"source-map": "0.6.1"

View File

@ -1,7 +1,7 @@
{
"name": "admin",
"version": "0.0.0",
"license": "MIT",
"name": "taskana",
"version": "1.0.0",
"license": "Novatec gmbh",
"scripts": {
"ng": "ng",
"start": "ng serve",
@ -14,15 +14,15 @@
},
"private": true,
"dependencies": {
"@angular/animations": "5.2.3",
"@angular/common": "5.2.1",
"@angular/compiler": "5.2.1",
"@angular/core": "5.2.1",
"@angular/forms": "5.2.1",
"@angular/http": "5.2.1",
"@angular/platform-browser": "5.2.1",
"@angular/platform-browser-dynamic": "5.2.1",
"@angular/router": "5.2.1",
"@angular/animations": "5.2.10",
"@angular/common": "5.2.10",
"@angular/compiler": "5.2.10",
"@angular/core": "5.2.10",
"@angular/forms": "5.2.10",
"@angular/http": "5.2.10",
"@angular/platform-browser": "5.2.10",
"@angular/platform-browser-dynamic": "5.2.10",
"@angular/router": "5.2.10",
"file-saver": "1.3.3",
"angular-svg-icon": "5.0.0",
"angular-tree-component": "7.1.0",
@ -34,11 +34,14 @@
"ngx-bootstrap": "2.0.1",
"node-sass": "4.7.2",
"rxjs": "5.5.6",
"zone.js": "0.8.20"
"zone.js": "0.8.20",
"chart.js": "2.7.1",
"ng2-charts": "1.6.0",
"ng2-auto-complete": "0.12.0"
},
"devDependencies": {
"@angular/cli": "1.7.3",
"@angular/compiler-cli": "5.2.8",
"@angular/compiler-cli": "5.2.10",
"@types/jasmine": "2.8.4",
"@types/node": "9.3.0",
"codelyzer": "4.1.0",

View File

@ -0,0 +1,69 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { WorkbasketListComponent } from 'app/administration/workbasket/master/list/workbasket-list.component';
import { WorkbasketDetailsComponent } from 'app/administration/workbasket/details/workbasket-details.component';
import { MasterAndDetailComponent } from 'app/shared/master-and-detail/master-and-detail.component';
import { NoAccessComponent } from 'app/administration/workbasket/details/noAccess/no-access.component';
import { ClassificationListComponent } from 'app/administration/classification/master/list/classification-list.component';
import { ClassificationDetailsComponent } from 'app/administration/classification/details/classification-details.component';
import { DomainGuard } from 'app/guards/domain-guard';
const routes: Routes = [
{
path: 'workbaskets',
component: MasterAndDetailComponent,
canActivate: [DomainGuard],
children: [
{
path: '',
component: WorkbasketListComponent,
outlet: 'master'
},
{
path: 'noaccess',
component: NoAccessComponent,
outlet: 'detail'
},
{
path: 'new-classification/:id',
component: WorkbasketDetailsComponent,
outlet: 'detail'
},
{
path: ':id',
component: WorkbasketDetailsComponent,
outlet: 'detail'
}
]
},
{
path: 'classifications',
component: MasterAndDetailComponent,
canActivate: [DomainGuard],
children: [
{
path: '',
component: ClassificationListComponent,
outlet: 'master'
},
{
path: ':id',
component: ClassificationDetailsComponent,
outlet: 'detail'
}
]
},
{
path: '',
redirectTo: 'workbaskets',
pathMatch: 'full'
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class AdministrationRoutingModule { }

View File

@ -0,0 +1,89 @@
// tslint:enable:max-line-length
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { Ng2AutoCompleteModule } from 'ng2-auto-complete';
import { HttpClientModule } from '@angular/common/http';
import { AngularSvgIconModule } from 'angular-svg-icon';
import { AlertModule } from 'ngx-bootstrap';
import { SharedModule } from 'app/shared/shared.module';
import { AdministrationRoutingModule } from './administration-routing.module';
/**
* Components
*/
import { WorkbasketListComponent } from './workbasket/master/list/workbasket-list.component';
import { WorkbasketListToolbarComponent } from './workbasket/master/list/workbasket-list-toolbar/workbasket-list-toolbar.component'
import { WorkbasketDetailsComponent } from './workbasket/details/workbasket-details.component';
import { WorkbasketInformationComponent } from './workbasket/details/information/workbasket-information.component';
import { DistributionTargetsComponent } from './workbasket/details/distribution-targets/distribution-targets.component';
import { DualListComponent } from './workbasket/details/distribution-targets/dual-list/dual-list.component';
import { AccessItemsComponent } from './workbasket/details/access-items/access-items.component';
import { NoAccessComponent } from './workbasket/details/noAccess/no-access.component';
import { FilterComponent } from './components/filter/filter.component';
import { IconTypeComponent } from './components/type-icon/icon-type.component';
import { PaginationComponent } from './workbasket/master/list/pagination/pagination.component';
import { ClassificationListComponent } from './classification/master/list/classification-list.component';
import { ClassificationDetailsComponent } from './classification/details/classification-details.component';
import { ImportExportComponent } from './components/import-export/import-export.component';
import { ClassificationTypesSelectorComponent } from 'app/shared/classification-types-selector/classification-types-selector.component';
import { SortComponent } from './components/sort/sort.component';
/**
* Services
*/
import { WorkbasketService } from './services/workbasket/workbasket.service';
import { SavingWorkbasketService } from './services/saving-workbaskets/saving-workbaskets.service';
import { ClassificationDefinitionService } from './services/classification-definition/classification-definition.service';
import { WorkbasketDefinitionService } from './services/workbasket-definition/workbasket-definition.service';
import { ClassificationsService } from './services/classifications/classifications.service';
import { ClassificationTypesService } from './services/classification-types/classification-types.service';
import { ClassificationCategoriesService } from './services/classification-categories-service/classification-categories.service';
const MODULES = [
CommonModule,
FormsModule,
Ng2AutoCompleteModule,
HttpClientModule,
AngularSvgIconModule,
AlertModule,
SharedModule,
AdministrationRoutingModule,
];
const DECLARATIONS = [
WorkbasketListComponent,
WorkbasketListToolbarComponent,
AccessItemsComponent,
WorkbasketDetailsComponent,
WorkbasketInformationComponent,
NoAccessComponent,
FilterComponent,
IconTypeComponent,
DistributionTargetsComponent,
DualListComponent,
PaginationComponent,
ClassificationListComponent,
ImportExportComponent,
ClassificationTypesSelectorComponent,
ClassificationDetailsComponent,
SortComponent
];
@NgModule({
declarations: DECLARATIONS,
imports: MODULES,
providers: [
WorkbasketService,
ClassificationDefinitionService,
WorkbasketDefinitionService,
SavingWorkbasketService,
ClassificationsService,
ClassificationTypesService,
ClassificationCategoriesService,
]
})
export class AdministrationModule {
}
// tslint:enable:max-line-length

View File

@ -14,13 +14,15 @@ import { LinksClassification } from 'app/models/links-classfication';
import { MasterAndDetailService } from 'app/services/masterAndDetail/master-and-detail.service';
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';
import { ClassificationsService } from 'app/services/classifications/classifications.service';
import { ClassificationsService } from 'app/administration/services/classifications/classifications.service';
import { TreeNodeModel } from 'app/models/tree-node';
import { ErrorModalService } from 'app/services/errorModal/error-modal.service';
import { AlertService } from 'app/services/alert/alert.service';
import { TreeService } from 'app/services/tree/tree.service';
import { ClassificationTypesService } from 'app/services/classification-types/classification-types.service';
import { ClassificationCategoriesService } from 'app/services/classification-categories-service/classification-categories.service';
import { ClassificationTypesService } from 'app/administration/services/classification-types/classification-types.service';
// tslint:disable:max-line-length
import { ClassificationCategoriesService } from 'app/administration/services/classification-categories-service/classification-categories.service';
// tslint:enable:max-line-length
import { DomainServiceMock } from 'app/services/domain/domain.service.mock';
import { DomainService } from 'app/services/domain/domain.service';
@ -50,7 +52,7 @@ describe('ClassificationDetailsComponent', () => {
imports: [FormsModule, HttpClientModule, RouterTestingModule.withRoutes(routes), AngularSvgIconModule],
declarations: [ClassificationDetailsComponent, SpinnerComponent, DummyDetailComponent],
providers: [MasterAndDetailService, RequestInProgressService, ClassificationsService, HttpClient, ErrorModalService, AlertService,
TreeService, ClassificationTypesService, ClassificationCategoriesService, {
TreeService, ClassificationTypesService, ClassificationCategoriesService, {
provide: DomainService,
useClass: DomainServiceMock
}]

View File

@ -10,14 +10,16 @@ import { AlertModel, AlertType } from 'app/models/alert';
import { TaskanaDate } from 'app/shared/util/taskana.date';
import { ClassificationsService } from 'app/services/classifications/classifications.service';
import { ClassificationsService } from 'app/administration/services/classifications/classifications.service';
import { MasterAndDetailService } from 'app/services/masterAndDetail/master-and-detail.service';
import { ErrorModalService } from 'app/services/errorModal/error-modal.service';
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';
import { AlertService } from 'app/services/alert/alert.service';
import { TreeService } from 'app/services/tree/tree.service';
import { ClassificationTypesService } from 'app/services/classification-types/classification-types.service';
import { ClassificationCategoriesService } from 'app/services/classification-categories-service/classification-categories.service';
import { ClassificationTypesService } from 'app/administration/services/classification-types/classification-types.service';
// tslint:disable:max-line-length
import { ClassificationCategoriesService } from 'app/administration/services/classification-categories-service/classification-categories.service';
// tslint:enable:max-line-length
import { DomainService } from 'app/services/domain/domain.service';
@Component({

View File

@ -8,18 +8,18 @@ import { RouterTestingModule } from '@angular/router/testing';
import { TreeNodeModel } from 'app/models/tree-node';
import { ClassificationListComponent } from './classification-list.component';
import { ImportExportComponent } from 'app/shared/import-export/import-export.component';
import { ImportExportComponent } from 'app/administration/components/import-export/import-export.component';
import { SpinnerComponent } from 'app/shared/spinner/spinner.component';
import { ClassificationTypesSelectorComponent } from 'app/shared/classification-types-selector/classification-types-selector.component';
import { WorkbasketService } from 'app/services/workbasket/workbasket.service';
import { WorkbasketDefinitionService } from 'app/services/workbasket-definition/workbasket-definition.service';
import { WorkbasketService } from 'app/administration/services/workbasket/workbasket.service';
import { WorkbasketDefinitionService } from 'app/administration/services/workbasket-definition/workbasket-definition.service';
import { AlertService } from 'app/services/alert/alert.service';
import { ClassificationsService } from 'app/services/classifications/classifications.service';
import { ClassificationDefinitionService } from 'app/services/classification-definition/classification-definition.service';
import { ClassificationsService } from 'app/administration/services/classifications/classifications.service';
import { ClassificationDefinitionService } from 'app/administration/services/classification-definition/classification-definition.service';
import { DomainService } from 'app/services/domain/domain.service';
import { ErrorModalService } from 'app/services/errorModal/error-modal.service';
import { ClassificationTypesService } from 'app/services/classification-types/classification-types.service';
import { ClassificationTypesService } from 'app/administration/services/classification-types/classification-types.service';
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';
@Component({

View File

@ -6,8 +6,8 @@ import { ImportType } from 'app/models/import-type';
import { Classification } from 'app/models/classification';
import { TreeNodeModel } from 'app/models/tree-node';
import { ClassificationsService } from 'app/services/classifications/classifications.service';
import { ClassificationTypesService } from 'app/services/classification-types/classification-types.service';
import { ClassificationsService } from 'app/administration/services/classifications/classifications.service';
import { ClassificationTypesService } from 'app/administration/services/classification-types/classification-types.service';
@Component({
selector: 'taskana-classification-list',

View File

@ -7,7 +7,7 @@ import { HttpModule } from '@angular/http';
import { FilterModel } from 'app/models/filter';
import { IconTypeComponent } from '../type-icon/icon-type.component';
import { FilterComponent } from './filter.component';
import { MapValuesPipe } from 'app/pipes/mapValues/map-values.pipe';
import { MapValuesPipe } from 'app/shared/pipes/mapValues/map-values.pipe';
describe('FilterComponent', () => {
let component: FilterComponent,

View File

@ -2,13 +2,13 @@ import {async, ComponentFixture, TestBed} from '@angular/core/testing';
import {ImportExportComponent} from './import-export.component';
import {WorkbasketService} from '../../services/workbasket/workbasket.service';
import {ClassificationDefinitionService} from '../../services/classification-definition/classification-definition.service';
import {ClassificationDefinitionService} from 'app/administration/services/classification-definition/classification-definition.service';
import {WorkbasketDefinitionService} from '../../services/workbasket-definition/workbasket-definition.service';
import {AlertService} from '../../services/alert/alert.service';
import {AlertService} from 'app/services/alert/alert.service';
import {HttpClientModule} from '@angular/common/http';
import {DomainService} from 'app/services/domain/domain.service';
import {Observable} from 'rxjs/Observable';
import {ErrorModalService} from '../../services/errorModal/error-modal.service';
import {ErrorModalService} from 'app/services/errorModal/error-modal.service';
import { DomainServiceMock } from 'app/services/domain/domain.service.mock';
describe('ImportExportComponent', () => {

View File

@ -1,6 +1,6 @@
import { Component, Input, OnInit } from '@angular/core';
import { ClassificationDefinitionService } from 'app/services/classification-definition/classification-definition.service';
import { WorkbasketDefinitionService } from 'app/services/workbasket-definition/workbasket-definition.service';
import { ClassificationDefinitionService } from 'app/administration/services/classification-definition/classification-definition.service';
import { WorkbasketDefinitionService } from 'app/administration/services/workbasket-definition/workbasket-definition.service';
import { DomainService } from 'app/services/domain/domain.service';
import { ImportType } from 'app/models/import-type';

View File

@ -1,5 +1,5 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { MapValuesPipe } from 'app/pipes/mapValues/map-values.pipe';
import { MapValuesPipe } from 'app/shared/pipes/mapValues/map-values.pipe';
import { SortComponent } from './sort.component';
import { Direction } from 'app/models/sorting';

View File

@ -1,11 +1,11 @@
import {Injectable} from '@angular/core';
import {HttpClient, HttpHeaders} from '@angular/common/http';
import {environment} from '../../../environments/environment';
import {AlertService} from '../alert/alert.service';
import {ClassificationDefinition} from '../../models/classification-definition';
import {AlertModel, AlertType} from '../../models/alert';
import {saveAs} from 'file-saver/FileSaver';
import {TaskanaDate} from '../../shared/util/taskana.date';
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { environment } from 'app/../environments/environment';
import { AlertService } from 'app/services/alert/alert.service';
import { ClassificationDefinition } from 'app/models/classification-definition';
import { AlertModel, AlertType } from 'app/models/alert';
import { saveAs } from 'file-saver/FileSaver';
import { TaskanaDate } from 'app/shared/util/taskana.date';
@Injectable()
export class ClassificationDefinitionService {
@ -27,7 +27,7 @@ export class ClassificationDefinitionService {
domain = (domain === '' ? '' : '?domain=' + domain);
this.httpClient.get<ClassificationDefinition[]>(this.url + domain, this.httpOptions)
.subscribe(
response => saveAs(new Blob([JSON.stringify(response)], {type: 'text/plain;charset=utf-8'}),
response => saveAs(new Blob([JSON.stringify(response)], { type: 'text/plain;charset=utf-8' }),
'Classifications_' + TaskanaDate.getDate() + '.json')
);
}
@ -37,8 +37,8 @@ export class ClassificationDefinitionService {
importClassifications(classifications: any) {
this.httpClient.post(this.url + '/import',
JSON.parse(classifications), this.httpOptions).subscribe(
classificationsUpdated => this.alertService.triggerAlert(new AlertModel(AlertType.SUCCESS, 'Import was successful')),
error => this.alertService.triggerAlert(new AlertModel(AlertType.DANGER, 'Import was not successful'))
);
classificationsUpdated => this.alertService.triggerAlert(new AlertModel(AlertType.SUCCESS, 'Import was successful')),
error => this.alertService.triggerAlert(new AlertModel(AlertType.DANGER, 'Import was not successful'))
);
}
}

View File

@ -11,9 +11,9 @@ import { Classification } from 'app/models/classification';
import { TreeNodeModel } from 'app/models/tree-node';
import { ClassificationDefinition } from 'app/models/classification-definition';
import { ClassificationResource } from '../../models/classification-resource';
import { ClassificationResource } from 'app/models/classification-resource';
import { ClassificationTypesService } from '../classification-types/classification-types.service';
import { DomainService } from '../domain/domain.service';
import { DomainService } from 'app/services/domain/domain.service';
@Injectable()
export class ClassificationsService {

View File

@ -1,13 +1,13 @@
import {Injectable} from '@angular/core';
import {HttpClient, HttpHeaders} from '@angular/common/http';
import {environment} from '../../../environments/environment';
import {environment} from 'app/../environments/environment';
import {saveAs} from 'file-saver/FileSaver';
import {AlertService} from '../alert/alert.service';
import {WorkbasketDefinition} from '../../models/workbasket-definition';
import {AlertModel, AlertType} from '../../models/alert';
import {TaskanaDate} from '../../shared/util/taskana.date';
import {ErrorModel} from '../../models/modal-error';
import {ErrorModalService} from '../errorModal/error-modal.service';
import {AlertService} from 'app/services/alert/alert.service';
import {WorkbasketDefinition} from 'app/models/workbasket-definition';
import {AlertModel, AlertType} from 'app/models/alert';
import {TaskanaDate} from 'app/shared/util/taskana.date';
import {ErrorModel} from 'app/models/modal-error';
import {ErrorModalService} from 'app/services/errorModal/error-modal.service';
@Injectable()

View File

@ -11,7 +11,7 @@ import { WorkbasketDistributionTargetsResource } from 'app/models/workbasket-dis
import { Direction } from 'app/models/sorting';
import { DomainService } from 'app/services/domain/domain.service';
import { RequestInProgressService } from '../requestInProgress/request-in-progress.service';
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';
@Injectable()
export class WorkbasketService {

View File

@ -18,8 +18,8 @@ import { SpinnerComponent } from 'app/shared/spinner/spinner.component';
import { GeneralMessageModalComponent } from 'app/shared/general-message-modal/general-message-modal.component';
import { ErrorModalService } from 'app/services/errorModal/error-modal.service';
import { SavingWorkbasketService, SavingInformation } from 'app/services/saving-workbaskets/saving-workbaskets.service';
import { WorkbasketService } from 'app/services/workbasket/workbasket.service';
import { SavingWorkbasketService, SavingInformation } from 'app/administration/services/saving-workbaskets/saving-workbaskets.service';
import { WorkbasketService } from 'app/administration/services/workbasket/workbasket.service';
import { AlertService } from 'app/services/alert/alert.service';
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';
import { DomainService } from 'app/services/domain/domain.service';

View File

@ -8,9 +8,9 @@ import { ErrorModel } from 'app/models/modal-error';
import { ACTION } from 'app/models/action';
import { AlertModel, AlertType } from 'app/models/alert';
import { SavingWorkbasketService, SavingInformation } from 'app/services/saving-workbaskets/saving-workbaskets.service';
import { SavingWorkbasketService, SavingInformation } from 'app/administration/services/saving-workbaskets/saving-workbaskets.service';
import { ErrorModalService } from 'app/services/errorModal/error-modal.service';
import { WorkbasketService } from 'app/services/workbasket/workbasket.service';
import { WorkbasketService } from 'app/administration/services/workbasket/workbasket.service';
import { AlertService } from 'app/services/alert/alert.service';
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';

View File

@ -13,19 +13,19 @@ import { FilterModel } from 'app/models/filter';
import { Workbasket } from 'app/models/workbasket';
import { WorkbasketDistributionTargetsResource } from 'app/models/workbasket-distribution-targets-resource';
import { WorkbasketService } from 'app/services/workbasket/workbasket.service';
import { WorkbasketService } from 'app/administration/services/workbasket/workbasket.service';
import { AlertService } from 'app/services/alert/alert.service';
import { ErrorModalService } from 'app/services/errorModal/error-modal.service';
import { SavingWorkbasketService, SavingInformation } from 'app/services/saving-workbaskets/saving-workbaskets.service';
import { SavingWorkbasketService, SavingInformation } from 'app/administration/services/saving-workbaskets/saving-workbaskets.service';
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';
import { DualListComponent } from './dual-list/dual-list.component';
import { DistributionTargetsComponent, Side } from './distribution-targets.component';
import { SpinnerComponent } from 'app/shared/spinner/spinner.component';
import { GeneralMessageModalComponent } from 'app/shared/general-message-modal/general-message-modal.component';
import { IconTypeComponent } from 'app/shared/type-icon/icon-type.component';
import { SelectWorkBasketPipe } from 'app/pipes/selectedWorkbasket/seleted-workbasket.pipe';
import { LinksWorkbasketSummary } from '../../../../models/links-workbasket-summary';
import { IconTypeComponent } from 'app/administration/components/type-icon/icon-type.component';
import { SelectWorkBasketPipe } from 'app/shared/pipes/selectedWorkbasket/seleted-workbasket.pipe';
import { LinksWorkbasketSummary } from 'app/models/links-workbasket-summary';
import { DomainService } from 'app/services/domain/domain.service';
import { DomainServiceMock } from 'app/services/domain/domain.service.mock';

View File

@ -10,9 +10,9 @@ import { ErrorModel } from 'app/models/modal-error';
import { ACTION } from 'app/models/action';
import { AlertModel, AlertType } from 'app/models/alert';
import { WorkbasketService } from 'app/services/workbasket/workbasket.service';
import { WorkbasketService } from 'app/administration/services/workbasket/workbasket.service';
import { AlertService } from 'app/services/alert/alert.service';
import { SavingWorkbasketService, SavingInformation } from 'app/services/saving-workbaskets/saving-workbaskets.service';
import { SavingWorkbasketService, SavingInformation } from 'app/administration/services/saving-workbaskets/saving-workbaskets.service';
import { ErrorModalService } from 'app/services/errorModal/error-modal.service';
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';

View File

@ -1,5 +1,5 @@
import { async, ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing';
import { WorkbasketService } from 'app/services/workbasket/workbasket.service';
import { WorkbasketService } from 'app/administration/services/workbasket/workbasket.service';
import { WorkbasketInformationComponent } from './workbasket-information.component';
import { FormsModule } from '@angular/forms';
import { AngularSvgIconModule } from 'angular-svg-icon';
@ -15,14 +15,14 @@ import { ICONTYPES } from 'app/models/type';
import { ACTION } from 'app/models/action';
import { Links } from 'app/models/links';
import { IconTypeComponent } from 'app/shared/type-icon/icon-type.component';
import { IconTypeComponent } from 'app/administration/components/type-icon/icon-type.component';
import { SpinnerComponent } from 'app/shared/spinner/spinner.component';
import { GeneralMessageModalComponent } from 'app/shared/general-message-modal/general-message-modal.component';
import { MapValuesPipe } from 'app/pipes/mapValues/map-values.pipe';
import { RemoveNoneTypePipe } from 'app/pipes/removeNoneType/remove-none-type.pipe';
import { MapValuesPipe } from 'app/shared/pipes/mapValues/map-values.pipe';
import { RemoveNoneTypePipe } from 'app/shared/pipes/removeNoneType/remove-none-type.pipe';
import { ErrorModalService } from 'app/services/errorModal/error-modal.service';
import { SavingWorkbasketService, SavingInformation } from 'app/services/saving-workbaskets/saving-workbaskets.service';
import { SavingWorkbasketService, SavingInformation } from 'app/administration/services/saving-workbaskets/saving-workbaskets.service';
import { AlertService } from 'app/services/alert/alert.service';
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';
import { DomainService } from 'app/services/domain/domain.service';

View File

@ -3,7 +3,7 @@ import { FormGroup } from '@angular/forms';
import { ActivatedRoute, Params, Router, NavigationStart } from '@angular/router';
import { Subscription } from 'rxjs/Subscription';
import { IconTypeComponent } from 'app/shared/type-icon/icon-type.component';
import { IconTypeComponent } from 'app/administration/components/type-icon/icon-type.component';
import { ICONTYPES } from 'app/models/type';
import { ErrorModel } from 'app/models/modal-error';
import { ACTION } from 'app/models/action';
@ -13,8 +13,8 @@ import { TaskanaDate } from 'app/shared/util/taskana.date';
import { AlertService } from 'app/services/alert/alert.service';
import { ErrorModalService } from 'app/services/errorModal/error-modal.service';
import { SavingWorkbasketService, SavingInformation } from 'app/services/saving-workbaskets/saving-workbaskets.service';
import { WorkbasketService } from 'app/services/workbasket/workbasket.service';
import { SavingWorkbasketService, SavingInformation } from 'app/administration/services/saving-workbaskets/saving-workbaskets.service';
import { WorkbasketService } from 'app/administration/services/workbasket/workbasket.service';
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';
@Component({

View File

@ -18,11 +18,11 @@ import { Links } from 'app/models/links';
import { WorkbasketAccessItems } from 'app/models/workbasket-access-items';
import { LinksWorkbasketSummary } from 'app/models/links-workbasket-summary';
import { WorkbasketService } from 'app/services/workbasket/workbasket.service';
import { WorkbasketService } from 'app/administration/services/workbasket/workbasket.service';
import { MasterAndDetailService } from 'app/services/masterAndDetail/master-and-detail.service';
import { PermissionService } from 'app/services/permission/permission.service';
import { AlertService } from 'app/services/alert/alert.service';
import { SavingWorkbasketService } from 'app/services/saving-workbaskets/saving-workbaskets.service';
import { SavingWorkbasketService } from 'app/administration/services/saving-workbaskets/saving-workbaskets.service';
import { WorkbasketDetailsComponent } from './workbasket-details.component';
import { NoAccessComponent } from './noAccess/no-access.component';
@ -31,12 +31,12 @@ import { AccessItemsComponent } from './access-items/access-items.component';
import { DistributionTargetsComponent } from './distribution-targets/distribution-targets.component';
import { DualListComponent } from './distribution-targets//dual-list/dual-list.component';
import { SpinnerComponent } from 'app/shared/spinner/spinner.component';
import { IconTypeComponent } from 'app/shared/type-icon/icon-type.component';
import { IconTypeComponent } from 'app/administration/components/type-icon/icon-type.component';
import { AlertComponent } from 'app/shared/alert/alert.component';
import { GeneralMessageModalComponent } from 'app/shared/general-message-modal/general-message-modal.component';
import { MapValuesPipe } from 'app/pipes/mapValues/map-values.pipe';
import { RemoveNoneTypePipe } from 'app/pipes/removeNoneType/remove-none-type.pipe';
import { SelectWorkBasketPipe } from 'app/pipes/selectedWorkbasket/seleted-workbasket.pipe';
import { MapValuesPipe } from 'app/shared/pipes/mapValues/map-values.pipe';
import { RemoveNoneTypePipe } from 'app/shared/pipes/removeNoneType/remove-none-type.pipe';
import { SelectWorkBasketPipe } from 'app/shared/pipes/selectedWorkbasket/seleted-workbasket.pipe';
import { ErrorModalService } from 'app/services/errorModal/error-modal.service';
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';
import { DomainService } from 'app/services/domain/domain.service';

View File

@ -10,7 +10,7 @@ import { ErrorModel } from 'app/models/modal-error';
import { ACTION } from 'app/models/action';
import { ErrorModalService } from 'app/services/errorModal/error-modal.service';
import { WorkbasketService } from 'app/services/workbasket/workbasket.service'
import { WorkbasketService } from 'app/administration/services/workbasket/workbasket.service'
import { PermissionService } from 'app/services/permission/permission.service';
import { MasterAndDetailService } from 'app/services/masterAndDetail/master-and-detail.service'
import { DomainService } from 'app/services/domain/domain.service';

View File

@ -1,7 +1,7 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { FormsModule } from '@angular/forms';
import { PaginationComponent } from './pagination.component';
import { SpreadNumberPipe } from 'app/pipes/spreadNumber/spread-number';
import { SpreadNumberPipe } from 'app/shared/pipes/spreadNumber/spread-number';
import { WorkbasketSummaryResource } from '../../../../../models/workbasket-summary-resource';
import { Page } from '../../../../../models/page';

View File

@ -14,20 +14,20 @@ import { Links } from 'app/models/links';
import { FilterModel } from 'app/models/filter';
import { SortingModel } from 'app/models/sorting';
import { SortComponent } from 'app/shared/sort/sort.component';
import { FilterComponent } from 'app/shared/filter/filter.component';
import { IconTypeComponent } from 'app/shared/type-icon/icon-type.component';
import { SortComponent } from 'app/administration/components/sort/sort.component';
import { FilterComponent } from 'app/administration/components/filter/filter.component';
import { IconTypeComponent } from 'app/administration/components/type-icon/icon-type.component';
import { WorkbasketListToolbarComponent } from './workbasket-list-toolbar.component';
import { ImportExportComponent } from 'app/shared/import-export/import-export.component';
import { ImportExportComponent } from 'app/administration/components/import-export/import-export.component';
import { MapValuesPipe } from 'app/pipes/mapValues/map-values.pipe';
import { MapValuesPipe } from 'app/shared/pipes/mapValues/map-values.pipe';
import { ErrorModalService } from 'app/services/errorModal/error-modal.service';
import { WorkbasketService } from 'app/services/workbasket/workbasket.service';
import { WorkbasketService } from 'app/administration/services/workbasket/workbasket.service';
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';
import { AlertService } from 'app/services/alert/alert.service';
import { ClassificationDefinitionService } from 'app/services/classification-definition/classification-definition.service';
import { WorkbasketDefinitionService } from 'app/services/workbasket-definition/workbasket-definition.service';
import { ClassificationDefinitionService } from 'app/administration/services/classification-definition/classification-definition.service';
import { WorkbasketDefinitionService } from 'app/administration/services/workbasket-definition/workbasket-definition.service';
import { DomainService } from 'app/services/domain/domain.service';
import { DomainServiceMock } from 'app/services/domain/domain.service.mock';

View File

@ -11,7 +11,7 @@ import { AlertModel, AlertType } from 'app/models/alert';
import { ErrorModalService } from 'app/services/errorModal/error-modal.service';
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';
import { WorkbasketService } from 'app/services/workbasket/workbasket.service';
import { WorkbasketService } from 'app/administration/services/workbasket/workbasket.service';
import { AlertService } from 'app/services/alert/alert.service';
import { ImportType } from 'app/models/import-type';

View File

@ -16,20 +16,20 @@ import { LinksWorkbasketSummary } from 'app/models/links-workbasket-summary';
import { ErrorModalService } from 'app/services/errorModal/error-modal.service';
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';
import { AlertService } from 'app/services/alert/alert.service';
import { WorkbasketService } from 'app/services/workbasket/workbasket.service';
import { WorkbasketService } from 'app/administration/services/workbasket/workbasket.service';
import { OrientationService } from 'app/services/orientation/orientation.service';
import { WorkbasketListComponent } from './workbasket-list.component';
import { WorkbasketListToolbarComponent } from './workbasket-list-toolbar/workbasket-list-toolbar.component';
import { IconTypeComponent } from 'app/shared/type-icon/icon-type.component';
import { IconTypeComponent } from 'app/administration/components/type-icon/icon-type.component';
import { SpinnerComponent } from 'app/shared/spinner/spinner.component';
import { SortComponent } from 'app/shared/sort/sort.component';
import { ImportExportComponent } from 'app/shared/import-export/import-export.component';
import { SortComponent } from 'app/administration/components/sort/sort.component';
import { ImportExportComponent } from 'app/administration/components/import-export/import-export.component';
import { RemoveNoneTypePipe } from 'app/pipes/removeNoneType/remove-none-type.pipe';
import { MapValuesPipe } from 'app/pipes/mapValues/map-values.pipe';
import { WorkbasketDefinitionService } from 'app/services/workbasket-definition/workbasket-definition.service';
import { ClassificationDefinitionService } from 'app/services/classification-definition/classification-definition.service';
import { RemoveNoneTypePipe } from 'app/shared/pipes/removeNoneType/remove-none-type.pipe';
import { MapValuesPipe } from 'app/shared/pipes/mapValues/map-values.pipe';
import { WorkbasketDefinitionService } from 'app/administration/services/workbasket-definition/workbasket-definition.service';
import { ClassificationDefinitionService } from 'app/administration/services/classification-definition/classification-definition.service';
import { DomainService } from 'app/services/domain/domain.service';
import { DomainServiceMock } from 'app/services/domain/domain.service.mock';

View File

@ -11,7 +11,7 @@ import { FilterModel } from 'app/models/filter'
import { SortingModel } from 'app/models/sorting';
import { Orientation } from 'app/models/orientation';
import { WorkbasketService } from 'app/services/workbasket/workbasket.service'
import { WorkbasketService } from 'app/administration/services/workbasket/workbasket.service'
import { OrientationService } from 'app/services/orientation/orientation.service';
@Component({

View File

@ -2,68 +2,30 @@ import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { AppComponent } from './app.component';
import { WorkbasketListComponent } from './administration/workbasket/master/list/workbasket-list.component';
import { WorkbasketDetailsComponent } from './administration/workbasket/details/workbasket-details.component';
import { MasterAndDetailComponent } from './shared/master-and-detail/master-and-detail.component';
import { NoAccessComponent } from './administration/workbasket/details/noAccess/no-access.component';
import { ClassificationListComponent } from './administration/classification/master/list/classification-list.component';
import { ClassificationDetailsComponent } from 'app/administration/classification/details/classification-details.component';
import { DomainGuard } from 'app/guards/domain-guard';
const appRoutes: Routes = [
{
path: 'administration/workbaskets',
component: MasterAndDetailComponent,
canActivate: [DomainGuard],
children: [
{
path: '',
component: WorkbasketListComponent,
outlet: 'master'
},
{
path: 'noaccess',
component: NoAccessComponent,
outlet: 'detail'
},
{
path: 'new-classification/:id',
component: WorkbasketDetailsComponent,
outlet: 'detail'
},
{
path: ':id',
component: WorkbasketDetailsComponent,
outlet: 'detail'
}
]
path: 'administration',
loadChildren: './administration/administration.module#AdministrationModule',
},
{
path: 'administration/classifications',
component: MasterAndDetailComponent,
canActivate: [DomainGuard],
children: [
{
path: '',
component: ClassificationListComponent,
outlet: 'master'
},
{
path: ':id',
component: ClassificationDetailsComponent,
outlet: 'detail'
}
]
path: 'monitor',
loadChildren: './monitor/monitor.module#MonitorModule',
},
{
path: 'workplace',
loadChildren: './workplace/workplace.module#WorkplaceModule'
},
{
path: '',
redirectTo: 'administration/workbaskets',
redirectTo: 'workplace',
pathMatch: 'full'
},
{
path: 'administration',
redirectTo: 'administration/workbaskets',
}
];
@NgModule({
imports: [

View File

@ -4,6 +4,7 @@ import { AppComponent } from './app.component';
import { AngularSvgIconModule } from 'angular-svg-icon';
import { RouterTestingModule } from '@angular/router/testing';
import { HttpClientModule } from '@angular/common/http';
import { SharedModule } from 'app/shared/shared.module';
import { ErrorModalService } from './services/errorModal/error-modal.service';
import { RequestInProgressService } from './services/requestInProgress/request-in-progress.service';
@ -11,10 +12,7 @@ import { AlertService } from './services/alert/alert.service';
import { OrientationService } from './services/orientation/orientation.service';
import { SelectedRouteService } from './services/selected-route/selected-route';
import { GeneralMessageModalComponent } from './shared/general-message-modal/general-message-modal.component'
import { SpinnerComponent } from './shared/spinner/spinner.component'
import { AlertComponent } from './shared/alert/alert.component';
import { NavBarComponent } from './shared/nav-bar/nav-bar.component';
import { NavBarComponent } from './components/nav-bar/nav-bar.component';
import { DomainServiceMock } from 'app/services/domain/domain.service.mock';
import { DomainService } from 'app/services/domain/domain.service';
@ -30,12 +28,13 @@ describe('AppComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
AppComponent, GeneralMessageModalComponent, SpinnerComponent, AlertComponent, NavBarComponent
AppComponent, NavBarComponent
],
imports: [
AngularSvgIconModule,
RouterTestingModule.withRoutes(routes),
HttpClientModule
HttpClientModule,
SharedModule
],
providers: [ErrorModalService, RequestInProgressService, AlertService, OrientationService, SelectedRouteService,
{

View File

@ -10,112 +10,58 @@ import { AppRoutingModule } from './app-routing.module';
import { AlertModule } from 'ngx-bootstrap';
import { AngularSvgIconModule } from 'angular-svg-icon';
import { TabsModule } from 'ngx-bootstrap/tabs';
import { TreeModule } from 'angular-tree-component';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
/**
* Components
*/
import { AppComponent } from './app.component';
import { WorkbasketListComponent } from './administration/workbasket/master/list/workbasket-list.component';
import { WorkbasketListToolbarComponent } from './administration/workbasket/master/list/workbasket-list-toolbar/workbasket-list-toolbar.component'
import { WorkbasketDetailsComponent } from './administration/workbasket/details/workbasket-details.component';
import { WorkbasketInformationComponent } from './administration/workbasket/details/information/workbasket-information.component';
import { DistributionTargetsComponent } from './administration/workbasket/details/distribution-targets/distribution-targets.component';
import { DualListComponent } from './administration/workbasket/details/distribution-targets/dual-list/dual-list.component';
import { AccessItemsComponent } from './administration/workbasket/details/access-items/access-items.component';
import { NoAccessComponent } from './administration/workbasket/details/noAccess/no-access.component';
import { SpinnerComponent } from './shared/spinner/spinner.component';
import { FilterComponent } from './shared/filter/filter.component';
import { IconTypeComponent } from './shared/type-icon/icon-type.component';
import { AlertComponent } from './shared/alert/alert.component';
import { SortComponent } from './shared/sort/sort.component';
import { GeneralMessageModalComponent } from './shared/general-message-modal/general-message-modal.component';
import { PaginationComponent } from './administration/workbasket/master/list/pagination/pagination.component';
import { ClassificationListComponent } from './administration/classification/master/list/classification-list.component';
import { ClassificationDetailsComponent } from './administration/classification/details/classification-details.component';
import { ImportExportComponent } from './shared/import-export/import-export.component';
import { MasterAndDetailComponent } from './shared/master-and-detail/master-and-detail.component';
import { ClassificationTypesSelectorComponent } from './shared/classification-types-selector/classification-types-selector.component';
import { TaskanaTreeComponent } from './shared/tree/tree.component';
import { NavBarComponent } from './shared/nav-bar/nav-bar.component';
import { TreeModule } from 'angular-tree-component';
import { SharedModule } from 'app/shared/shared.module';
/**
* Services
*/
import { WorkbasketService } from './services/workbasket/workbasket.service';
import { MasterAndDetailService } from './services/masterAndDetail/master-and-detail.service';
import { HttpClientInterceptor } from './services/httpClientInterceptor/http-client-interceptor.service';
import { PermissionService } from './services/permission/permission.service';
import { AlertService } from './services/alert/alert.service';
import { ErrorModalService } from './services/errorModal/error-modal.service';
import { RequestInProgressService } from './services/requestInProgress/request-in-progress.service';
import { SavingWorkbasketService } from './services/saving-workbaskets/saving-workbaskets.service';
import { OrientationService } from './services/orientation/orientation.service';
import { ClassificationDefinitionService } from './services/classification-definition/classification-definition.service';
import { WorkbasketDefinitionService } from './services/workbasket-definition/workbasket-definition.service';
import { SelectedRouteService } from './services/selected-route/selected-route';
import { ClassificationsService } from './services/classifications/classifications.service';
import { TreeService } from './services/tree/tree.service';
import { ClassificationTypesService } from './services/classification-types/classification-types.service';
import { ClassificationCategoriesService } from 'app/services/classification-categories-service/classification-categories.service';
import { HttpClientInterceptor } from 'app/services/httpClientInterceptor/http-client-interceptor.service';
import { PermissionService } from 'app/services/permission/permission.service';
import { ErrorModalService } from 'app/services/errorModal/error-modal.service';
import { RequestInProgressService } from 'app/services/requestInProgress/request-in-progress.service';
import { OrientationService } from 'app/services/orientation/orientation.service';
import { SelectedRouteService } from 'app/services/selected-route/selected-route';
import { DomainService } from 'app/services/domain/domain.service';
import { StartupService } from 'app/services/startup-service/startup.service';
import { AlertService } from 'app/services/alert/alert.service';
import { MasterAndDetailService } from 'app/services/masterAndDetail/master-and-detail.service';
import { TreeService } from 'app/services/tree/tree.service';
/**
* Pipes
* Components
*/
import { MapValuesPipe } from './pipes/mapValues/map-values.pipe';
import { RemoveNoneTypePipe } from './pipes/removeNoneType/remove-none-type.pipe';
import { SelectWorkBasketPipe } from './pipes/selectedWorkbasket/seleted-workbasket.pipe';
import { SpreadNumberPipe } from './pipes/spreadNumber/spread-number';
import { DomainService } from './services/domain/domain.service';
import { AppComponent } from './app.component';
import { NavBarComponent } from 'app/components/nav-bar/nav-bar.component';
/**
* Guards
*/
import { DomainGuard } from './guards/domain-guard';
const MODULES = [
BrowserModule,
FormsModule,
TabsModule.forRoot(),
TreeModule,
AppRoutingModule,
AlertModule.forRoot(),
AngularSvgIconModule,
HttpClientModule,
BrowserAnimationsModule,
ReactiveFormsModule
ReactiveFormsModule,
TreeModule,
SharedModule
];
const DECLARATIONS = [
AppComponent,
WorkbasketListComponent,
WorkbasketListToolbarComponent,
AccessItemsComponent,
WorkbasketDetailsComponent,
MasterAndDetailComponent,
WorkbasketInformationComponent,
NoAccessComponent,
SpinnerComponent,
FilterComponent,
IconTypeComponent,
AlertComponent,
GeneralMessageModalComponent,
DistributionTargetsComponent,
SortComponent,
DualListComponent,
PaginationComponent,
ClassificationListComponent,
ImportExportComponent,
TaskanaTreeComponent,
ClassificationTypesSelectorComponent,
ClassificationDetailsComponent,
NavBarComponent,
MapValuesPipe,
RemoveNoneTypePipe,
SelectWorkBasketPipe,
SpreadNumberPipe
NavBarComponent
];
export function startupServiceFactory(startupService: StartupService): Function {
@ -126,27 +72,16 @@ export function startupServiceFactory(startupService: StartupService): Function
declarations: DECLARATIONS,
imports: MODULES,
providers: [
WorkbasketService,
MasterAndDetailService,
PermissionService,
ClassificationDefinitionService,
WorkbasketDefinitionService,
DomainService,
{
provide: HTTP_INTERCEPTORS,
useClass: HttpClientInterceptor,
multi: true
},
AlertService,
ErrorModalService,
RequestInProgressService,
SavingWorkbasketService,
OrientationService,
SelectedRouteService,
ClassificationsService,
TreeService,
ClassificationTypesService,
ClassificationCategoriesService,
DomainGuard,
StartupService,
{
@ -154,7 +89,11 @@ export function startupServiceFactory(startupService: StartupService): Function
useFactory: startupServiceFactory,
deps: [StartupService],
multi: true
}
},
AlertService,
PermissionService,
MasterAndDetailService,
TreeService
],
bootstrap: [AppComponent]
})

View File

@ -15,7 +15,7 @@
</p>
</ul>
</div>
<div class="pull-right domain-form">
<div *ngIf="selectedRoute.indexOf('workbaskets') !== -1 || selectedRoute.indexOf('classifications') !== -1"class="pull-right domain-form">
<div class="dropdown clearfix btn-group">
<label class="control-label hidden-xs">Working on </label>
<button type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
@ -41,30 +41,26 @@
<a [href]="adminUrl">{{title}}</a>
</p>
<button type="button" *ngIf="showNavbar" class="btn btn-default navbar-toggle show pull-right" (click)="toogleNavBar();"
aria-expanded="true" aria-controls="navbar">
<span class="glyphicon glyphicon-arrow-left white"></span>
</button>
aria-expanded="true" aria-controls="navbar">
<span class="glyphicon glyphicon-arrow-left white"></span>
</button>
</ul>
</div>
<div class="nav-content">
<div class="row menu">
<span routerLink="administration/workbaskets" aria-controls="administration" routerLinkActive="active">Administration</span>
<div class="row submenu" [ngClass]="{'selected': (selectedRoute.indexOf('workbaskets') !== -1 || selectedRoute === '')}">
<div class="row submenu" [ngClass]="{'selected': selectedRoute.indexOf('workbaskets') !== -1 }">
<span class="col-xs-6" routerLink="administration/workbaskets" aria-controls="Workbaskets" routerLinkActive="active">Workbaskets</span>
</div>
<div class="row submenu" [ngClass]="{'selected': selectedRoute.indexOf('classifications') !== -1}">
<span class="col-xs-6" routerLink="administration/classifications" aria-controls="Classifications" routerLinkActive="active">Classifications</span>
</div>
</div>
<div class="row menu">
<span>
<a [href]="monitorUrl"> Monitor</a>
</span>
<div class="row menu" [ngClass]="{'selected': selectedRoute.indexOf('monitor') !== -1}">
<span routerLink="{{monitorUrl}}" aria-controls="Monitor" routerLinkActive="active">Monitor</span>
</div>
<div class="row menu">
<span>
<a [href]="workplaceUrl"> Workplace</a>
</span>
<div class="row menu" [ngClass]="{'selected': selectedRoute.indexOf('workplace') !== -1 || selectedRoute === ''}">
<span routerLink="{{workplaceUrl}}" aria-controls="Workplace" routerLinkActive="active">Workplace</span>
</div>
</div>
</div>

View File

@ -26,14 +26,17 @@ export class NavBarComponent implements OnInit, OnDestroy {
selectedRoute = '';
route: string;
titleAdministration = 'Taskana administration';
titleMonitor = 'Taskana monitor';
titleWorkplace = 'Taskana workplace';
title = 'Taskana administration';
showNavbar = false;
domains: Array<string> = [];
selectedDomain: string;
adminUrl: string = environment.taskanaAdminUrl;
monitorUrl: string = environment.taskanaMonitorUrl;
workplaceUrl: string = environment.taskanaWorkplaceUrl;
adminUrl = './administration';
monitorUrl = './monitor';
workplaceUrl = './workplace';
selectedRouteSubscription: Subscription;
@ -44,6 +47,7 @@ export class NavBarComponent implements OnInit, OnDestroy {
ngOnInit() {
this.selectedRouteSubscription = this.selectedRouteService.getSelectedRoute().subscribe((value: string) => {
this.selectedRoute = value;
this.setTitle(value);
});
this.domainService.getDomains().subscribe(domains => {
this.domains = domains;
@ -61,6 +65,15 @@ export class NavBarComponent implements OnInit, OnDestroy {
toogleNavBar() {
this.showNavbar = !this.showNavbar;
}
private setTitle(value: string = 'workbaskets') {
if (value.indexOf('workbaskets') === 0 || value.indexOf('classifications') === 0) {
this.title = this.titleAdministration;
} else if (value.indexOf('monitor') === 0) {
this.title = this.titleMonitor;
} else if (value.indexOf('workplace') === 0) {
this.title = this.titleWorkplace;
}
}
ngOnDestroy(): void {
if (this.selectedRouteSubscription) { this.selectedRouteSubscription.unsubscribe(); }

View File

@ -1,4 +1,4 @@
export class State {
state: string;
counter: number;
}
}

View File

@ -1,4 +1,4 @@
export class WorkbasketCounterData {
data: Array<number>;
label: string;
}
}

View File

@ -3,4 +3,4 @@ import { WorkbasketCounterData } from './workbasket-counter-data';
export class WorkbasketCounter {
dates: Array<string>[];
data: Array<WorkbasketCounterData>;
}
}

View File

@ -0,0 +1,16 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { MonitorComponent } from './monitor.component'
const routes: Routes = [
{
path: '',
component: MonitorComponent
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class MonitorRoutingModule { }

View File

@ -0,0 +1,10 @@
<div class="container">
<tabset #staticTabs>
<tab heading="Tasks">
<taskana-tasks></taskana-tasks>
</tab>
<tab heading="Workbaskets">
<taskana-workbasket></taskana-workbasket>
</tab>
</tabset>
</div>

View File

@ -0,0 +1,15 @@
import { Component, OnInit, HostListener, OnDestroy } from '@angular/core';
@Component({
selector: 'taskana-monitor',
templateUrl: './monitor.component.html',
styleUrls: ['./monitor.component.scss']
})
export class MonitorComponent implements OnInit, OnDestroy {
ngOnInit(): void {
}
ngOnDestroy(): void {
}
}

View File

@ -0,0 +1,45 @@
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { AlertModule } from 'ngx-bootstrap';
import { ChartsModule } from 'ng2-charts';
import { TabsModule } from 'ngx-bootstrap/tabs';
import { HttpClientModule } from '@angular/common/http';
import { AngularSvgIconModule } from 'angular-svg-icon';
import { MonitorRoutingModule } from './monitor-routing.module';
import { SharedModule } from 'app/shared/shared.module';
import { TasksComponent } from './tasks/tasks.component';
import { WorkbasketComponent } from './workbasket/workbasket.component';
import { ReportComponent } from './report/report.component';
import { MonitorComponent } from './monitor.component';
import { RestConnectorService } from './services/restConnector/rest-connector.service';
const MODULES = [
CommonModule,
MonitorRoutingModule,
FormsModule,
HttpModule,
AlertModule.forRoot(),
ChartsModule,
TabsModule.forRoot(),
HttpClientModule,
AngularSvgIconModule,
SharedModule
]
const DECLARATIONS = [
TasksComponent,
WorkbasketComponent,
ReportComponent,
MonitorComponent
];
@NgModule({
declarations: DECLARATIONS,
imports: MODULES,
providers: [RestConnectorService]
})
export class MonitorModule {
}

View File

@ -1,13 +1,13 @@
import { Component, Input, OnInit } from "@angular/core";
import { RestConnectorService } from "../service/rest-connector.service";
import { error } from "util";
import { ReportType } from "./reportType";
import { Component, Input, OnInit } from '@angular/core';
import { RestConnectorService } from 'app/monitor/services/restConnector/rest-connector.service';
import { error } from 'util';
import { ReportType } from './reportType';
@Component({
selector: 'report',
selector: 'taskana-report',
templateUrl: './report.component.html'
})
export class Report implements OnInit {
export class ReportComponent implements OnInit {
@Input()
type: ReportType;
@ -23,7 +23,7 @@ export class Report implements OnInit {
sumRow: Object;
private isDataAvailable: boolean = false;
isDataAvailable = false;
constructor(private restConnector: RestConnectorService) {
}
@ -39,7 +39,7 @@ export class Report implements OnInit {
});
break;
default:
error("unknown ReportType '" + this.type + "'");
error(`unknown ReportType ${this.type}`);
}
}

Some files were not shown because too many files have changed in this diff Show More