Merge pull request #4456 from tsiegleauq/motion-modules

Add more motion modules
This commit is contained in:
Sean 2019-03-08 11:01:19 +01:00 committed by GitHub
commit 83ff758977
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
126 changed files with 628 additions and 323 deletions

View File

@ -16,7 +16,7 @@ const routes: Routes = [
path: 'login', path: 'login',
component: LoginWrapperComponent, component: LoginWrapperComponent,
children: [ children: [
{ path: '', component: LoginMaskComponent }, { path: '', component: LoginMaskComponent, pathMatch: 'full' },
{ path: 'reset-password', component: ResetPasswordComponent }, { path: 'reset-password', component: ResetPasswordComponent },
{ path: 'reset-password-confirm', component: ResetPasswordConfirmComponent }, { path: 'reset-password-confirm', component: ResetPasswordConfirmComponent },
{ path: 'legalnotice', component: LoginLegalNoticeComponent }, { path: 'legalnotice', component: LoginLegalNoticeComponent },

View File

@ -61,14 +61,12 @@ export class AppComponent {
// change default JS functions // change default JS functions
this.overloadArrayToString(); this.overloadArrayToString();
appRef.isStable.subscribe(s => console.log('is stable', s));
appRef.isStable appRef.isStable
.pipe( .pipe(
filter(s => s), filter(s => s),
take(1) take(1)
) )
.subscribe(() => { .subscribe(() => {
console.log('start scheduler');
servertimeService.startScheduler(); servertimeService.startScheduler();
}); });
} }

View File

@ -6,7 +6,8 @@ import { FullscreenProjectorComponent } from './fullscreen-projector/fullscreen-
const routes: Routes = [ const routes: Routes = [
{ {
path: '', path: '',
component: FullscreenProjectorComponent component: FullscreenProjectorComponent,
pathMatch: 'full'
}, },
{ {
path: ':id', path: ':id',

View File

@ -16,6 +16,7 @@ import { MainMenuService } from 'app/core/core-services/main-menu.service';
* *
* ```html * ```html
* <os-head-bar * <os-head-bar
* prevUrl="../.."
* [nav]="false" * [nav]="false"
* [goBack]="true" * [goBack]="true"
* [mainButton]="opCanEdit()" * [mainButton]="opCanEdit()"
@ -89,6 +90,15 @@ export class HeadBarComponent {
@Input() @Input()
public goBack = false; public goBack = false;
/**
* Determine the back URL. Default is ".." (previous parent page)
* Lazy Loaded modules sometimes have different routing events or require
* special "back" logic.
* Has only an effect if goBack is set to false
*/
@Input()
public prevUrl = '../';
/** /**
* Emit a signal to the parent component if the main button was clicked * Emit a signal to the parent component if the main button was clicked
*/ */
@ -141,7 +151,7 @@ export class HeadBarComponent {
if (this.goBack) { if (this.goBack) {
this.location.back(); this.location.back();
} else { } else {
this.router.navigate(['../'], { relativeTo: this.route }); this.router.navigate([this.prevUrl], { relativeTo: this.route });
} }
} }
} }

View File

@ -1,4 +1,4 @@
@import '../../../../assets/styles/drag.scss'; @import '~assets/styles/drag.scss';
.box { .box {
width: 100%; width: 100%;

View File

@ -8,7 +8,7 @@ import { ListOfSpeakersComponent } from './components/list-of-speakers/list-of-s
import { TopicDetailComponent } from './components/topic-detail/topic-detail.component'; import { TopicDetailComponent } from './components/topic-detail/topic-detail.component';
const routes: Routes = [ const routes: Routes = [
{ path: '', component: AgendaListComponent }, { path: '', component: AgendaListComponent, pathMatch: 'full' },
{ path: 'import', component: AgendaImportListComponent }, { path: 'import', component: AgendaImportListComponent },
{ path: 'topics/new', component: TopicDetailComponent }, { path: 'topics/new', component: TopicDetailComponent },
{ path: 'sort-agenda', component: AgendaSortComponent }, { path: 'sort-agenda', component: AgendaSortComponent },

View File

@ -2,7 +2,7 @@ import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router'; import { Routes, RouterModule } from '@angular/router';
import { AssignmentListComponent } from './assignment-list/assignment-list.component'; import { AssignmentListComponent } from './assignment-list/assignment-list.component';
const routes: Routes = [{ path: '', component: AssignmentListComponent }]; const routes: Routes = [{ path: '', component: AssignmentListComponent, pathMatch: 'full' }];
@NgModule({ @NgModule({
imports: [RouterModule.forChild(routes)], imports: [RouterModule.forChild(routes)],

View File

@ -9,7 +9,8 @@ import { SearchComponent } from './components/search/search.component';
const routes: Routes = [ const routes: Routes = [
{ {
path: '', path: '',
component: StartComponent component: StartComponent,
pathMatch: 'full'
}, },
{ {
path: 'legalnotice', path: 'legalnotice',

View File

@ -2,7 +2,7 @@ import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router'; import { Routes, RouterModule } from '@angular/router';
import { ConfigListComponent } from './components/config-list/config-list.component'; import { ConfigListComponent } from './components/config-list/config-list.component';
const routes: Routes = [{ path: '', component: ConfigListComponent }]; const routes: Routes = [{ path: '', component: ConfigListComponent, pathMatch: 'full' }];
@NgModule({ @NgModule({
imports: [RouterModule.forChild(routes)], imports: [RouterModule.forChild(routes)],

View File

@ -5,7 +5,7 @@ import { HistoryListComponent } from './components/history-list/history-list.com
/** /**
* Define the routes for the history module * Define the routes for the history module
*/ */
const routes: Routes = [{ path: '', component: HistoryListComponent }]; const routes: Routes = [{ path: '', component: HistoryListComponent, pathMatch: 'full' }];
/** /**
* Define the routing component and setup the routes * Define the routing component and setup the routes

View File

@ -4,7 +4,7 @@ import { MediafileListComponent } from './components/mediafile-list/mediafile-li
import { MediaUploadComponent } from './components/media-upload/media-upload.component'; import { MediaUploadComponent } from './components/media-upload/media-upload.component';
const routes: Routes = [ const routes: Routes = [
{ path: '', component: MediafileListComponent }, { path: '', component: MediafileListComponent, pathMatch: 'full' },
{ path: 'upload', component: MediaUploadComponent } { path: 'upload', component: MediaUploadComponent }
]; ];

View File

@ -1,27 +0,0 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { MotionDetailComponent } from './motion-detail.component';
import { E2EImportsModule } from '../../../../../e2e-imports.module';
import { MotionsModule } from '../../motions.module';
describe('MotionDetailComponent', () => {
let component: MotionDetailComponent;
let fixture: ComponentFixture<MotionDetailComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule, MotionsModule],
declarations: []
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(MotionDetailComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,12 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { CallListComponent } from './call-list.component';
const routes: Routes = [{ path: '', component: CallListComponent, pathMatch: 'full' }];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class CallListRoutingModule {}

View File

@ -1,4 +1,4 @@
<os-head-bar [nav]="false"> <os-head-bar prevUrl="../.." [nav]="false">
<!-- Title --> <!-- Title -->
<div class="title-slot"> <div class="title-slot">
<h2 translate>Call list</h2> <h2 translate>Call list</h2>

View File

@ -5,12 +5,13 @@ import { MatSnackBar } from '@angular/material';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { BaseViewComponent } from '../../../base/base-view';
import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service'; import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service';
import { MotionCsvExportService } from '../../services/motion-csv-export.service';
import { MotionPdfExportService } from '../../services/motion-pdf-export.service'; import { BaseViewComponent } from 'app/site/base/base-view';
import { ViewMotion } from '../../models/view-motion'; import { MotionCsvExportService } from 'app/site/motions/services/motion-csv-export.service';
import { MotionPdfExportService } from 'app/site/motions/services/motion-pdf-export.service';
import { OSTreeSortEvent } from 'app/shared/components/sorting-tree/sorting-tree.component'; import { OSTreeSortEvent } from 'app/shared/components/sorting-tree/sorting-tree.component';
import { ViewMotion } from 'app/site/motions/models/view-motion';
/** /**
* Sort view for the call list. * Sort view for the call list.

View File

@ -0,0 +1,12 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { CallListRoutingModule } from './call-list-routing.module';
import { CallListComponent } from './call-list.component';
import { SharedModule } from 'app/shared/shared.module';
@NgModule({
declarations: [CallListComponent],
imports: [CommonModule, CallListRoutingModule, SharedModule]
})
export class CallListModule {}

View File

@ -0,0 +1,15 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { CategoryListComponent } from './components/category-list/category-list.component';
import { CategorySortComponent } from './components/category-sort/category-sort.component';
const routes: Routes = [
{ path: '', component: CategoryListComponent, pathMatch: 'full' },
{ path: ':id', component: CategorySortComponent }
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class CategoryRoutingModule {}

View File

@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { CategoryRoutingModule } from './category-routing.module';
import { SharedModule } from 'app/shared/shared.module';
import { CategoryListComponent } from './components/category-list/category-list.component';
import { CategorySortComponent } from './components/category-sort/category-sort.component';
@NgModule({
declarations: [CategoryListComponent, CategorySortComponent],
imports: [CommonModule, CategoryRoutingModule, SharedModule]
})
export class CategoryModule {}

View File

@ -1,4 +1,4 @@
<os-head-bar [nav]="false" [mainButton]="true" (mainEvent)="onPlusButton()"> <os-head-bar prevUrl="../.." [nav]="false" [mainButton]="true" (mainEvent)="onPlusButton()">
<!-- Title --> <!-- Title -->
<div class="title-slot"> <div class="title-slot">
<h2 translate>Categories</h2> <h2 translate>Categories</h2>

View File

@ -1,7 +1,7 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { CategoryListComponent } from './category-list.component'; import { CategoryListComponent } from './category-list.component';
import { E2EImportsModule } from '../../../../../e2e-imports.module'; import { E2EImportsModule } from 'e2e-imports.module';
describe('CategoryListComponent', () => { describe('CategoryListComponent', () => {
let component: CategoryListComponent; let component: CategoryListComponent;

View File

@ -5,13 +5,13 @@ import { Title } from '@angular/platform-browser';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { BaseViewComponent } from '../../../base/base-view'; import { BaseViewComponent } from 'app/site/base/base-view';
import { Category } from 'app/shared/models/motions/category'; import { Category } from 'app/shared/models/motions/category';
import { CategoryRepositoryService } from 'app/core/repositories/motions/category-repository.service'; import { CategoryRepositoryService } from 'app/core/repositories/motions/category-repository.service';
import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service'; import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service';
import { PromptService } from 'app/core/ui-services/prompt.service'; import { PromptService } from 'app/core/ui-services/prompt.service';
import { ViewCategory } from '../../models/view-category'; import { ViewCategory } from 'app/site/motions/models/view-category';
import { ViewMotion } from '../../models/view-motion'; import { ViewMotion } from 'app/site/motions/models/view-motion';
/** /**
* List view for the categories. * List view for the categories.

View File

@ -10,8 +10,8 @@ import { MatSnackBar } from '@angular/material';
import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service'; import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service';
import { PromptService } from 'app/core/ui-services/prompt.service'; import { PromptService } from 'app/core/ui-services/prompt.service';
import { SortingListComponent } from 'app/shared/components/sorting-list/sorting-list.component'; import { SortingListComponent } from 'app/shared/components/sorting-list/sorting-list.component';
import { ViewCategory } from '../../models/view-category'; import { ViewCategory } from 'app/site/motions/models/view-category';
import { ViewMotion } from '../../models/view-motion'; import { ViewMotion } from 'app/site/motions/models/view-motion';
/** /**
* View for rearranging and renumbering the motions of a category. The {@link onNumberMotions} * View for rearranging and renumbering the motions of a category. The {@link onNumberMotions}

View File

@ -24,6 +24,7 @@
.chip-container { .chip-container {
display: block; display: block;
min-height: 0; // default is inherit, will appear on the top edge of the cell
} }
.os-headed-listview-table { .os-headed-listview-table {

View File

@ -10,10 +10,10 @@ import { ListViewBaseComponent } from 'app/site/base/list-view-base';
import { MotionBlock } from 'app/shared/models/motions/motion-block'; import { MotionBlock } from 'app/shared/models/motions/motion-block';
import { MotionBlockRepositoryService } from 'app/core/repositories/motions/motion-block-repository.service'; import { MotionBlockRepositoryService } from 'app/core/repositories/motions/motion-block-repository.service';
import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service'; import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service';
import { ViewMotionBlock } from '../../models/view-motion-block'; import { OperatorService } from 'app/core/core-services/operator.service';
import { PromptService } from 'app/core/ui-services/prompt.service'; import { PromptService } from 'app/core/ui-services/prompt.service';
import { ViewMotion } from '../../models/view-motion'; import { ViewMotion } from 'app/site/motions/models/view-motion';
import { OperatorService } from '../../../../core/core-services/operator.service'; import { ViewMotionBlock } from 'app/site/motions/models/view-motion-block';
/** /**
* Detail component to display one motion block * Detail component to display one motion block

View File

@ -1,4 +1,4 @@
<os-head-bar [nav]="false" [mainButton]="canEdit" (mainEvent)="onPlusButton()"> <os-head-bar prevUrl="../.." [nav]="false" [mainButton]="canEdit" (mainEvent)="onPlusButton()">
<!-- Title --> <!-- Title -->
<div class="title-slot"><h2 translate>Motion blocks</h2></div> <div class="title-slot"><h2 translate>Motion blocks</h2></div>
</os-head-bar> </os-head-bar>

View File

@ -15,7 +15,7 @@ import { MotionBlockRepositoryService } from 'app/core/repositories/motions/moti
import { OperatorService } from 'app/core/core-services/operator.service'; import { OperatorService } from 'app/core/core-services/operator.service';
import { PromptService } from 'app/core/ui-services/prompt.service'; import { PromptService } from 'app/core/ui-services/prompt.service';
import { ViewItem } from 'app/site/agenda/models/view-item'; import { ViewItem } from 'app/site/agenda/models/view-item';
import { ViewMotionBlock } from '../../models/view-motion-block'; import { ViewMotionBlock } from 'app/site/motions/models/view-motion-block';
/** /**
* Table for the motion blocks * Table for the motion blocks

View File

@ -0,0 +1,15 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { MotionBlockDetailComponent } from './components/motion-block-detail/motion-block-detail.component';
import { MotionBlockListComponent } from './components/motion-block-list/motion-block-list.component';
const routes: Routes = [
{ path: '', component: MotionBlockListComponent, pathMatch: 'full' },
{ path: ':id', component: MotionBlockDetailComponent }
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class MotionBlockRoutingModule {}

View File

@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MotionBlockRoutingModule } from './motion-block-routing.module';
import { MotionBlockListComponent } from './components/motion-block-list/motion-block-list.component';
import { MotionBlockDetailComponent } from './components/motion-block-detail/motion-block-detail.component';
import { SharedModule } from 'app/shared/shared.module';
@NgModule({
declarations: [MotionBlockListComponent, MotionBlockDetailComponent],
imports: [CommonModule, MotionBlockRoutingModule, SharedModule]
})
export class MotionBlockModule {}

View File

@ -1,4 +1,4 @@
<os-head-bar [nav]="false" [mainButton]="true" (mainEvent)="onPlusButton()"> <os-head-bar prevUrl="../.." [nav]="false" [mainButton]="true" (mainEvent)="onPlusButton()">
<!-- Title --> <!-- Title -->
<div class="title-slot"> <div class="title-slot">
<h2 translate>Comment fields</h2> <h2 translate>Comment fields</h2>
@ -12,19 +12,31 @@
<form [formGroup]="createForm" (keydown)="keyDownFunction($event)"> <form [formGroup]="createForm" (keydown)="keyDownFunction($event)">
<p> <p>
<mat-form-field> <mat-form-field>
<input formControlName="name" matInput placeholder="{{'Name' | translate}}" required> <input formControlName="name" matInput placeholder="{{ 'Name' | translate }}" required />
<mat-hint *ngIf="!createForm.controls.name.valid"> <mat-hint *ngIf="!createForm.controls.name.valid">
<span translate>Required</span> <span translate>Required</span>
</mat-hint> </mat-hint>
</mat-form-field> </mat-form-field>
</p> </p>
<p> <p>
<os-search-value-selector ngDefaultControl [form]="createForm" [formControl]="this.createForm.get('read_groups_id')" <os-search-value-selector
[multiple]="true" listname="Groups with read permissions" [InputListValues]="this.groups"></os-search-value-selector> ngDefaultControl
[form]="createForm"
[formControl]="this.createForm.get('read_groups_id')"
[multiple]="true"
listname="Groups with read permissions"
[InputListValues]="this.groups"
></os-search-value-selector>
</p> </p>
<p> <p>
<os-search-value-selector ngDefaultControl [form]="createForm" [formControl]="this.createForm.get('write_groups_id')" <os-search-value-selector
[multiple]="true" listname="Groups with write permissions" [InputListValues]="this.groups"></os-search-value-selector> ngDefaultControl
[form]="createForm"
[formControl]="this.createForm.get('write_groups_id')"
[multiple]="true"
listname="Groups with write permissions"
[InputListValues]="this.groups"
></os-search-value-selector>
</p> </p>
</form> </form>
</mat-card-content> </mat-card-content>
@ -38,8 +50,13 @@
</mat-card-actions> </mat-card-actions>
</mat-card> </mat-card>
<mat-accordion class="os-card"> <mat-accordion class="os-card">
<mat-expansion-panel *ngFor="let section of this.commentSections" (opened)="openId = section.id" (closed)="panelClosed(section)" <mat-expansion-panel
[expanded]="openId === section.id" multiple="false"> *ngFor="let section of this.commentSections"
(opened)="openId = section.id"
(closed)="panelClosed(section)"
[expanded]="openId === section.id"
multiple="false"
>
<mat-expansion-panel-header> <mat-expansion-panel-header>
<mat-panel-title> <mat-panel-title>
<div class="header-container"> <div class="header-container">
@ -67,19 +84,31 @@
<span translate>Edit comment field:</span> <span translate>Edit comment field:</span>
<p> <p>
<mat-form-field> <mat-form-field>
<input formControlName="name" matInput placeholder="{{'Name' | translate}}" required> <input formControlName="name" matInput placeholder="{{ 'Name' | translate }}" required />
<mat-hint *ngIf="!updateForm.controls.name.valid"> <mat-hint *ngIf="!updateForm.controls.name.valid">
<span translate>Required</span> <span translate>Required</span>
</mat-hint> </mat-hint>
</mat-form-field> </mat-form-field>
</p> </p>
<p> <p>
<os-search-value-selector ngDefaultControl [form]="updateForm" [formControl]="this.updateForm.get('read_groups_id')" <os-search-value-selector
[multiple]="true" listname="Groups with read permissions" [InputListValues]="this.groups"></os-search-value-selector> ngDefaultControl
[form]="updateForm"
[formControl]="this.updateForm.get('read_groups_id')"
[multiple]="true"
listname="Groups with read permissions"
[InputListValues]="this.groups"
></os-search-value-selector>
</p> </p>
<p> <p>
<os-search-value-selector ngDefaultControl [form]="updateForm" [formControl]="this.updateForm.get('write_groups_id')" <os-search-value-selector
[multiple]="true" listname="Groups with write permissions" [InputListValues]="this.groups"></os-search-value-selector> ngDefaultControl
[form]="updateForm"
[formControl]="this.updateForm.get('write_groups_id')"
[multiple]="true"
listname="Groups with write permissions"
[InputListValues]="this.groups"
></os-search-value-selector>
</p> </p>
</form> </form>
<ng-container *ngIf="editId !== section.id"> <ng-container *ngIf="editId !== section.id">
@ -97,19 +126,34 @@
<div class="spacer-left" *ngIf="section.write_groups.length === 0" translate>No groups selected</div> <div class="spacer-left" *ngIf="section.write_groups.length === 0" translate>No groups selected</div>
</ng-container> </ng-container>
<mat-action-row> <mat-action-row>
<button *ngIf="editId !== section.id" mat-button class="on-transition-fade" (click)="onEditButton(section)" <button
mat-icon-button> *ngIf="editId !== section.id"
mat-button
class="on-transition-fade"
(click)="onEditButton(section)"
mat-icon-button
>
<mat-icon>edit</mat-icon> <mat-icon>edit</mat-icon>
</button> </button>
<button *ngIf="editId === section.id" mat-button class="on-transition-fade" (click)="editId = null" <button
mat-icon-button> *ngIf="editId === section.id"
mat-button
class="on-transition-fade"
(click)="editId = null"
mat-icon-button
>
<mat-icon>cancel</mat-icon> <mat-icon>cancel</mat-icon>
</button> </button>
<button *ngIf="editId === section.id" mat-button class="on-transition-fade" (click)="onSaveButton(section)" <button
mat-icon-button> *ngIf="editId === section.id"
mat-button
class="on-transition-fade"
(click)="onSaveButton(section)"
mat-icon-button
>
<mat-icon>save</mat-icon> <mat-icon>save</mat-icon>
</button> </button>
<button mat-button class='on-transition-fade' (click)=onDeleteButton(section) mat-icon-button> <button mat-button class="on-transition-fade" (click)="onDeleteButton(section)" mat-icon-button>
<mat-icon>delete</mat-icon> <mat-icon>delete</mat-icon>
</button> </button>
</mat-action-row> </mat-action-row>

View File

@ -7,12 +7,13 @@ import { BehaviorSubject } from 'rxjs';
import { FormGroup, FormBuilder, Validators } from '@angular/forms'; import { FormGroup, FormBuilder, Validators } from '@angular/forms';
import { MotionCommentSection } from 'app/shared/models/motions/motion-comment-section'; import { MotionCommentSection } from 'app/shared/models/motions/motion-comment-section';
import { ViewMotionCommentSection } from '../../models/view-motion-comment-section'; import { BaseViewComponent } from 'app/site/base/base-view';
import { MotionCommentSectionRepositoryService } from 'app/core/repositories/motions/motion-comment-section-repository.service'; import { MotionCommentSectionRepositoryService } from 'app/core/repositories/motions/motion-comment-section-repository.service';
import { PromptService } from 'app/core/ui-services/prompt.service'; import { PromptService } from 'app/core/ui-services/prompt.service';
import { BaseViewComponent } from '../../../base/base-view';
import { ViewGroup } from 'app/site/users/models/view-group'; import { ViewGroup } from 'app/site/users/models/view-group';
import { GroupRepositoryService } from 'app/core/repositories/users/group-repository.service'; import { GroupRepositoryService } from 'app/core/repositories/users/group-repository.service';
import { ViewMotionCommentSection } from 'app/site/motions/models/view-motion-comment-section';
/** /**
* List view for the comment sections. * List view for the comment sections.

View File

@ -0,0 +1,12 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { MotionCommentSectionListComponent } from './motion-comment-section-list.component';
const routes: Routes = [{ path: '', component: MotionCommentSectionListComponent, pathMatch: 'full' }];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class MotionCommentSectionRoutingModule {}

View File

@ -0,0 +1,12 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MotionCommentSectionRoutingModule } from './motion-comment-section-routing.module';
import { SharedModule } from 'app/shared/shared.module';
import { MotionCommentSectionListComponent } from './motion-comment-section-list.component';
@NgModule({
declarations: [MotionCommentSectionListComponent],
imports: [CommonModule, MotionCommentSectionRoutingModule, SharedModule]
})
export class MotionCommentSectionModule {}

View File

@ -1,7 +1,7 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AmendmentCreateWizardComponent } from './amendment-create-wizard.component'; import { AmendmentCreateWizardComponent } from './amendment-create-wizard.component';
import { E2EImportsModule } from '../../../../../e2e-imports.module'; import { E2EImportsModule } from 'e2e-imports.module';
describe('AmendmentCreateWizardComponent', () => { describe('AmendmentCreateWizardComponent', () => {
let component: AmendmentCreateWizardComponent; let component: AmendmentCreateWizardComponent;

View File

@ -5,13 +5,13 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { MatSnackBar } from '@angular/material'; import { MatSnackBar } from '@angular/material';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { ConfigService } from 'app/core/ui-services/config.service';
import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service'; import { BaseViewComponent } from 'app/site/base/base-view';
import { ViewMotion } from '../../models/view-motion'; import { ConfigService } from 'app/core/ui-services/config.service';
import { CreateMotion } from 'app/site/motions/models/create-motion';
import { LinenumberingService } from 'app/core/ui-services/linenumbering.service'; import { LinenumberingService } from 'app/core/ui-services/linenumbering.service';
import { BaseViewComponent } from '../../../base/base-view'; import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service';
import { CreateMotion } from '../../models/create-motion'; import { ViewMotion } from 'app/site/motions/models/view-motion';
/** /**
* Describes the single paragraphs from the base motion. * Describes the single paragraphs from the base motion.

View File

@ -3,7 +3,8 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ManageSubmittersComponent } from './manage-submitters.component'; import { ManageSubmittersComponent } from './manage-submitters.component';
import { E2EImportsModule } from 'e2e-imports.module'; import { E2EImportsModule } from 'e2e-imports.module';
import { ViewChild, Component } from '@angular/core'; import { ViewChild, Component } from '@angular/core';
import { ViewMotion } from '../../models/view-motion';
import { ViewMotion } from 'app/site/motions/models/view-motion';
import { Motion } from 'app/shared/models/motions/motion'; import { Motion } from 'app/shared/models/motions/motion';
describe('ManageSubmittersComponent', () => { describe('ManageSubmittersComponent', () => {

View File

@ -2,18 +2,18 @@ import { Component, Input } from '@angular/core';
import { FormGroup, FormControl } from '@angular/forms'; import { FormGroup, FormControl } from '@angular/forms';
import { MatSnackBar } from '@angular/material'; import { MatSnackBar } from '@angular/material';
import { Title } from '@angular/platform-browser'; import { Title } from '@angular/platform-browser';
import { TranslateService } from '@ngx-translate/core';
import { BehaviorSubject, Observable } from 'rxjs'; import { BehaviorSubject, Observable } from 'rxjs';
import { TranslateService } from '@ngx-translate/core';
import { BaseViewComponent } from 'app/site/base/base-view'; import { BaseViewComponent } from 'app/site/base/base-view';
import { LocalPermissionsService } from '../../services/local-permissions.service'; import { LocalPermissionsService } from 'app/site/motions/services/local-permissions.service';
import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service'; import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service';
import { User } from 'app/shared/models/users/user'; import { User } from 'app/shared/models/users/user';
import { ViewMotion } from '../../models/view-motion';
import { ViewUser } from 'app/site/users/models/view-user'; import { ViewUser } from 'app/site/users/models/view-user';
import { ViewModelStoreService } from 'app/core/core-services/view-model-store.service'; import { ViewModelStoreService } from 'app/core/core-services/view-model-store.service';
import { UserRepositoryService } from 'app/core/repositories/users/user-repository.service'; import { UserRepositoryService } from 'app/core/repositories/users/user-repository.service';
import { ViewMotion } from 'app/site/motions/models/view-motion';
/** /**
* Component for the motion comments view * Component for the motion comments view

View File

@ -4,10 +4,11 @@ import {
MotionChangeRecommendationComponent, MotionChangeRecommendationComponent,
MotionChangeRecommendationComponentData MotionChangeRecommendationComponentData
} from './motion-change-recommendation.component'; } from './motion-change-recommendation.component';
import { E2EImportsModule } from '../../../../../e2e-imports.module';
import { E2EImportsModule } from 'e2e-imports.module';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
import { ModificationType } from 'app/core/ui-services/diff.service'; import { ModificationType } from 'app/core/ui-services/diff.service';
import { ViewMotionChangeRecommendation } from '../../models/view-change-recommendation'; import { ViewMotionChangeRecommendation } from 'app/site/motions/models/view-change-recommendation';
describe('MotionChangeRecommendationComponent', () => { describe('MotionChangeRecommendationComponent', () => {
let component: MotionChangeRecommendationComponent; let component: MotionChangeRecommendationComponent;

View File

@ -5,10 +5,10 @@ import { Title } from '@angular/platform-browser';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { LineRange, ModificationType } from 'app/core/ui-services/diff.service'; import { BaseViewComponent } from 'app/site/base/base-view';
import { ChangeRecommendationRepositoryService } from 'app/core/repositories/motions/change-recommendation-repository.service'; import { ChangeRecommendationRepositoryService } from 'app/core/repositories/motions/change-recommendation-repository.service';
import { ViewMotionChangeRecommendation } from '../../models/view-change-recommendation'; import { LineRange, ModificationType } from 'app/core/ui-services/diff.service';
import { BaseViewComponent } from '../../../base/base-view'; import { ViewMotionChangeRecommendation } from 'app/site/motions/models/view-change-recommendation';
/** /**
* Data that needs to be provided to the MotionChangeRecommendationComponent dialog * Data that needs to be provided to the MotionChangeRecommendationComponent dialog

View File

@ -1,7 +1,7 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { MotionCommentsComponent } from './motion-comments.component'; import { MotionCommentsComponent } from './motion-comments.component';
import { E2EImportsModule } from '../../../../../e2e-imports.module'; import { E2EImportsModule } from 'e2e-imports.module';
describe('MotionCommentsComponent', () => { describe('MotionCommentsComponent', () => {
let component: MotionCommentsComponent; let component: MotionCommentsComponent;

View File

@ -5,13 +5,13 @@ import { FormGroup, FormBuilder } from '@angular/forms';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { MotionCommentSectionRepositoryService } from 'app/core/repositories/motions/motion-comment-section-repository.service';
import { ViewMotionCommentSection } from '../../models/view-motion-comment-section';
import { OperatorService } from 'app/core/core-services/operator.service';
import { ViewMotion } from '../../models/view-motion';
import { BaseViewComponent } from 'app/site/base/base-view'; import { BaseViewComponent } from 'app/site/base/base-view';
import { MotionPdfExportService } from '../../services/motion-pdf-export.service';
import { MotionComment } from 'app/shared/models/motions/motion'; import { MotionComment } from 'app/shared/models/motions/motion';
import { MotionCommentSectionRepositoryService } from 'app/core/repositories/motions/motion-comment-section-repository.service';
import { MotionPdfExportService } from 'app/site/motions/services/motion-pdf-export.service';
import { OperatorService } from 'app/core/core-services/operator.service';
import { ViewMotion } from 'app/site/motions/models/view-motion';
import { ViewMotionCommentSection } from 'app/site/motions/models/view-motion-comment-section';
/** /**
* Component for the motion comments view * Component for the motion comments view

View File

@ -1,13 +1,13 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { E2EImportsModule } from '../../../../../e2e-imports.module';
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { LineNumberingMode, ViewMotion } from '../../models/view-motion';
import { MotionDetailDiffComponent } from './motion-detail-diff.component'; import { MotionDetailDiffComponent } from './motion-detail-diff.component';
import { MotionDetailOriginalChangeRecommendationsComponent } from '../motion-detail-original-change-recommendations/motion-detail-original-change-recommendations.component'; import { MotionDetailOriginalChangeRecommendationsComponent } from '../motion-detail-original-change-recommendations/motion-detail-original-change-recommendations.component';
import { ViewUnifiedChange } from '../../../../shared/models/motions/view-unified-change';
import { Motion } from 'app/shared/models/motions/motion'; import { Motion } from 'app/shared/models/motions/motion';
import { ViewMotionChangeRecommendation } from '../../models/view-change-recommendation'; import { ViewMotion, LineNumberingMode } from 'app/site/motions/models/view-motion';
import { ViewMotionChangeRecommendation } from 'app/site/motions/models/view-change-recommendation';
import { ViewUnifiedChange } from 'app/shared/models/motions/view-unified-change';
import { E2EImportsModule } from 'e2e-imports.module';
@Component({ @Component({
template: ` template: `

View File

@ -4,19 +4,19 @@ import { DomSanitizer, SafeHtml, Title } from '@angular/platform-browser';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { BaseViewComponent } from '../../../base/base-view'; import { BaseViewComponent } from 'app/site/base/base-view';
import { ConfigService } from 'app/core/ui-services/config.service'; import { ConfigService } from 'app/core/ui-services/config.service';
import { ChangeRecommendationRepositoryService } from 'app/core/repositories/motions/change-recommendation-repository.service'; import { ChangeRecommendationRepositoryService } from 'app/core/repositories/motions/change-recommendation-repository.service';
import { DiffService, LineRange, ModificationType } from 'app/core/ui-services/diff.service'; import { DiffService, LineRange, ModificationType } from 'app/core/ui-services/diff.service';
import { LineNumberingMode, ViewMotion } from '../../models/view-motion';
import { import {
MotionChangeRecommendationComponent, MotionChangeRecommendationComponent,
MotionChangeRecommendationComponentData MotionChangeRecommendationComponentData
} from '../motion-change-recommendation/motion-change-recommendation.component'; } from '../motion-change-recommendation/motion-change-recommendation.component';
import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service'; import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service';
import { PromptService } from 'app/core/ui-services/prompt.service'; import { PromptService } from 'app/core/ui-services/prompt.service';
import { ViewUnifiedChange, ViewUnifiedChangeType } from '../../../../shared/models/motions/view-unified-change'; import { ViewMotion, LineNumberingMode } from 'app/site/motions/models/view-motion';
import { ViewMotionChangeRecommendation } from '../../models/view-change-recommendation'; import { ViewUnifiedChange, ViewUnifiedChangeType } from 'app/shared/models/motions/view-unified-change';
import { ViewMotionChangeRecommendation } from 'app/site/motions/models/view-change-recommendation';
/** /**
* This component displays the original motion text with the change blocks inside. * This component displays the original motion text with the change blocks inside.

View File

@ -1,7 +1,7 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { MotionDetailOriginalChangeRecommendationsComponent } from './motion-detail-original-change-recommendations.component'; import { MotionDetailOriginalChangeRecommendationsComponent } from './motion-detail-original-change-recommendations.component';
import { E2EImportsModule } from '../../../../../e2e-imports.module'; import { E2EImportsModule } from 'e2e-imports.module';
import { Component } from '@angular/core'; import { Component } from '@angular/core';
@Component({ @Component({

View File

@ -11,8 +11,8 @@ import {
} from '@angular/core'; } from '@angular/core';
import { LineRange, ModificationType } from 'app/core/ui-services/diff.service'; import { LineRange, ModificationType } from 'app/core/ui-services/diff.service';
import { ViewMotionChangeRecommendation } from '../../models/view-change-recommendation';
import { OperatorService } from 'app/core/core-services/operator.service'; import { OperatorService } from 'app/core/core-services/operator.service';
import { ViewMotionChangeRecommendation } from 'app/site/motions/models/view-change-recommendation';
/** /**
* This component displays the original motion text with annotated change commendations * This component displays the original motion text with annotated change commendations

View File

@ -1,6 +1,7 @@
<os-head-bar <os-head-bar
[mainButton]="perms.isAllowed('update', motion)" [mainButton]="perms.isAllowed('update', motion)"
mainButtonIcon="edit" mainButtonIcon="edit"
prevUrl="../.."
[nav]="false" [nav]="false"
[editMode]="editMotion" [editMode]="editMotion"
(mainEvent)="setEditMode(!editMotion)" (mainEvent)="setEditMode(!editMotion)"

View File

@ -1,4 +1,4 @@
@import '../../../../../assets/styles/motion-styles-common'; @import '~assets/styles/motion-styles-common';
span { span {
margin: 0; margin: 0;

View File

@ -0,0 +1,40 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { MotionDetailComponent } from './motion-detail.component';
import { E2EImportsModule } from 'e2e-imports.module';
import { MotionCommentsComponent } from '../motion-comments/motion-comments.component';
import { PersonalNoteComponent } from '../personal-note/personal-note.component';
import { ManageSubmittersComponent } from '../manage-submitters/manage-submitters.component';
import { MotionPollComponent } from '../motion-poll/motion-poll.component';
import { MotionDetailOriginalChangeRecommendationsComponent } from '../motion-detail-original-change-recommendations/motion-detail-original-change-recommendations.component';
import { MotionDetailDiffComponent } from '../motion-detail-diff/motion-detail-diff.component';
describe('MotionDetailComponent', () => {
let component: MotionDetailComponent;
let fixture: ComponentFixture<MotionDetailComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
declarations: [
MotionDetailComponent,
MotionCommentsComponent,
PersonalNoteComponent,
ManageSubmittersComponent,
MotionPollComponent,
MotionDetailOriginalChangeRecommendationsComponent,
MotionDetailDiffComponent
]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(MotionDetailComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -7,28 +7,26 @@ import { MatDialog, MatSnackBar, MatCheckboxChange, ErrorStateMatcher } from '@a
import { BehaviorSubject, Subscription } from 'rxjs'; import { BehaviorSubject, Subscription } from 'rxjs';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { BaseViewComponent } from '../../../base/base-view'; import { BaseViewComponent } from 'app/site/base/base-view';
import { CategoryRepositoryService } from 'app/core/repositories/motions/category-repository.service'; import { CategoryRepositoryService } from 'app/core/repositories/motions/category-repository.service';
import { ChangeRecommendationRepositoryService } from 'app/core/repositories/motions/change-recommendation-repository.service'; import { ChangeRecommendationRepositoryService } from 'app/core/repositories/motions/change-recommendation-repository.service';
import { ChangeRecoMode, LineNumberingMode, ViewMotion } from '../../models/view-motion'; import { CreateMotion } from 'app/site/motions/models/create-motion';
import { CreateMotion } from '../../models/create-motion';
import { ConfigService } from 'app/core/ui-services/config.service'; import { ConfigService } from 'app/core/ui-services/config.service';
import { DataStoreService } from 'app/core/core-services/data-store.service'; import { DataStoreService } from 'app/core/core-services/data-store.service';
import { DiffLinesInParagraph, LineRange } from 'app/core/ui-services/diff.service'; import { DiffLinesInParagraph, LineRange } from 'app/core/ui-services/diff.service';
import { ItemRepositoryService } from 'app/core/repositories/agenda/item-repository.service'; import { ItemRepositoryService } from 'app/core/repositories/agenda/item-repository.service';
import { itemVisibilityChoices, Item } from 'app/shared/models/agenda/item'; import { itemVisibilityChoices, Item } from 'app/shared/models/agenda/item';
import { LinenumberingService } from 'app/core/ui-services/linenumbering.service'; import { LinenumberingService } from 'app/core/ui-services/linenumbering.service';
import { LocalPermissionsService } from '../../services/local-permissions.service'; import { LocalPermissionsService } from 'app/site/motions/services/local-permissions.service';
import { Mediafile } from 'app/shared/models/mediafiles/mediafile'; import { Mediafile } from 'app/shared/models/mediafiles/mediafile';
import { Motion } from 'app/shared/models/motions/motion'; import { Motion } from 'app/shared/models/motions/motion';
import { MotionBlock } from 'app/shared/models/motions/motion-block'; import { MotionBlock } from 'app/shared/models/motions/motion-block';
import { import {
MotionChangeRecommendationComponent, MotionChangeRecommendationComponentData,
MotionChangeRecommendationComponentData MotionChangeRecommendationComponent
} from '../motion-change-recommendation/motion-change-recommendation.component'; } from '../motion-change-recommendation/motion-change-recommendation.component';
import { MotionPdfExportService } from '../../services/motion-pdf-export.service'; import { MotionPdfExportService } from 'app/site/motions/services/motion-pdf-export.service';
import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service'; import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service';
import { NotifyService } from 'app/core/core-services/notify.service'; import { NotifyService } from 'app/core/core-services/notify.service';
import { OperatorService } from 'app/core/core-services/operator.service'; import { OperatorService } from 'app/core/core-services/operator.service';
import { PersonalNoteContent } from 'app/shared/models/users/personal-note'; import { PersonalNoteContent } from 'app/shared/models/users/personal-note';
@ -37,18 +35,22 @@ import { PromptService } from 'app/core/ui-services/prompt.service';
import { StatuteParagraphRepositoryService } from 'app/core/repositories/motions/statute-paragraph-repository.service'; import { StatuteParagraphRepositoryService } from 'app/core/repositories/motions/statute-paragraph-repository.service';
import { Tag } from 'app/shared/models/core/tag'; import { Tag } from 'app/shared/models/core/tag';
import { UserRepositoryService } from 'app/core/repositories/users/user-repository.service'; import { UserRepositoryService } from 'app/core/repositories/users/user-repository.service';
import { ViewMotionBlock } from '../../models/view-motion-block'; import { ViewMotionBlock } from 'app/site/motions/models/view-motion-block';
import { ViewWorkflow } from '../../models/view-workflow'; import { ViewWorkflow } from 'app/site/motions/models/view-workflow';
import { ViewUser } from 'app/site/users/models/view-user'; import { ViewUser } from 'app/site/users/models/view-user';
import { ViewCategory } from '../../models/view-category'; import { ViewCategory } from 'app/site/motions/models/view-category';
import { ViewCreateMotion } from '../../models/view-create-motion'; import { ViewCreateMotion } from 'app/site/motions/models/view-create-motion';
import { ViewItem } from 'app/site/agenda/models/view-item'; import { ViewItem } from 'app/site/agenda/models/view-item';
import { ViewportService } from 'app/core/ui-services/viewport.service'; import { ViewportService } from 'app/core/ui-services/viewport.service';
import { ViewMediafile } from 'app/site/mediafiles/models/view-mediafile'; import { ViewMediafile } from 'app/site/mediafiles/models/view-mediafile';
import { ViewModelStoreService } from 'app/core/core-services/view-model-store.service'; import { ViewModelStoreService } from 'app/core/core-services/view-model-store.service';
import { ViewMotionChangeRecommendation } from '../../models/view-change-recommendation'; import { ViewMotionChangeRecommendation } from 'app/site/motions/models/view-change-recommendation';
import { ViewMotionNotificationEditMotion, TypeOfNotificationViewMotion } from '../../models/view-motion-notify'; import {
import { ViewStatuteParagraph } from '../../models/view-statute-paragraph'; ViewMotionNotificationEditMotion,
TypeOfNotificationViewMotion
} from 'app/site/motions/models/view-motion-notify';
import { ViewMotion, ChangeRecoMode, LineNumberingMode } from 'app/site/motions/models/view-motion';
import { ViewStatuteParagraph } from 'app/site/motions/models/view-statute-paragraph';
import { ViewTag } from 'app/site/tags/models/view-tag'; import { ViewTag } from 'app/site/tags/models/view-tag';
import { ViewUnifiedChange } from 'app/shared/models/motions/view-unified-change'; import { ViewUnifiedChange } from 'app/shared/models/motions/view-unified-change';
import { Workflow } from 'app/shared/models/motions/workflow'; import { Workflow } from 'app/shared/models/motions/workflow';
@ -342,7 +344,7 @@ export class MotionDetailComponent extends BaseViewComponent implements OnInit,
private editNotificationSubscription: Subscription; private editNotificationSubscription: Subscription;
/** /**
* Constuct the detail view. * Constructs the detail view.
* *
* @param title * @param title
* @param translate * @param translate
@ -552,44 +554,10 @@ export class MotionDetailComponent extends BaseViewComponent implements OnInit,
* determine the motion to display using the URL * determine the motion to display using the URL
*/ */
public getMotionByUrl(): void { public getMotionByUrl(): void {
if (this.route.snapshot.url[0] && this.route.snapshot.url[0].path === 'new') { this.route.params.subscribe(params => {
// creates a new motion if (Object.keys(params).length > 0) {
this.newMotion = true; // load existing motion
this.editMotion = true; const motionId: number = +params.id;
// prevent 'undefined' to appear in the ui
const defaultMotion: Partial<CreateMotion> = {
title: '',
origin: '',
identifier: ''
};
if (this.route.snapshot.queryParams.parent) {
this.amendmentEdit = true;
const parentMotion = this.repo.getViewModel(this.route.snapshot.queryParams.parent);
const defaultTitle = `${this.translate.instant('Amendment to')} ${parentMotion.identifierOrTitle}`;
const mode = this.configService.instant<string>('motions_amendments_text_mode');
if (mode === 'freestyle' || mode === 'fulltext') {
defaultMotion.title = defaultTitle;
defaultMotion.parent_id = parentMotion.id;
defaultMotion.category_id = parentMotion.category_id;
defaultMotion.motion_block_id = parentMotion.motion_block_id;
this.contentForm.patchValue({
title: defaultTitle,
category_id: parentMotion.category_id,
motion_block_id: parentMotion.motion_block_id,
parent_id: parentMotion.id
});
}
if (mode === 'fulltext') {
defaultMotion.text = parentMotion.text;
this.contentForm.patchValue({ text: parentMotion.text });
}
}
this.motion = new ViewCreateMotion(new CreateMotion(defaultMotion));
this.motionCopy = new ViewCreateMotion(new CreateMotion(defaultMotion));
} else {
// load existing motion
this.route.params.subscribe(params => {
const motionId: number = parseInt(params.id, 10);
this.repo.getViewModelObservable(motionId).subscribe(newViewMotion => { this.repo.getViewModelObservable(motionId).subscribe(newViewMotion => {
if (newViewMotion) { if (newViewMotion) {
this.motion = newViewMotion; this.motion = newViewMotion;
@ -612,8 +580,42 @@ export class MotionDetailComponent extends BaseViewComponent implements OnInit,
this.changeRecommendations = recos; this.changeRecommendations = recos;
this.recalcUnifiedChanges(); this.recalcUnifiedChanges();
}); });
}); } else {
} // creates a new motion
this.newMotion = true;
this.editMotion = true;
// prevent 'undefined' to appear in the ui
const defaultMotion: Partial<CreateMotion> = {
title: '',
origin: '',
identifier: ''
};
if (this.route.snapshot.queryParams.parent) {
this.amendmentEdit = true;
const parentMotion = this.repo.getViewModel(this.route.snapshot.queryParams.parent);
const defaultTitle = `${this.translate.instant('Amendment to')} ${parentMotion.identifierOrTitle}`;
const mode = this.configService.instant<string>('motions_amendments_text_mode');
if (mode === 'freestyle' || mode === 'fulltext') {
defaultMotion.title = defaultTitle;
defaultMotion.parent_id = parentMotion.id;
defaultMotion.category_id = parentMotion.category_id;
defaultMotion.motion_block_id = parentMotion.motion_block_id;
this.contentForm.patchValue({
title: defaultTitle,
category_id: parentMotion.category_id,
motion_block_id: parentMotion.motion_block_id,
parent_id: parentMotion.id
});
}
if (mode === 'fulltext') {
defaultMotion.text = parentMotion.text;
this.contentForm.patchValue({ text: parentMotion.text });
}
}
this.motion = new ViewCreateMotion(new CreateMotion(defaultMotion));
this.motionCopy = new ViewCreateMotion(new CreateMotion(defaultMotion));
}
});
} }
/** /**
@ -1080,7 +1082,7 @@ export class MotionDetailComponent extends BaseViewComponent implements OnInit,
*/ */
public navigateToMotion(motion: ViewMotion): void { public navigateToMotion(motion: ViewMotion): void {
if (motion) { if (motion) {
this.router.navigate(['../' + motion.id], { relativeTo: this.route }); this.router.navigate(['../contacts'], { relativeTo: this.route.parent });
// update the current motion // update the current motion
this.motion = motion; this.motion = motion;
this.setSurroundingMotions(); this.setSurroundingMotions();

View File

@ -3,7 +3,7 @@ import { MatDialogRef, MAT_DIALOG_DATA, MatSnackBar } from '@angular/material';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { MotionPoll } from 'app/shared/models/motions/motion-poll'; import { MotionPoll } from 'app/shared/models/motions/motion-poll';
import { MotionPollService, CalculablePollKey } from '../../services/motion-poll.service'; import { MotionPollService, CalculablePollKey } from 'app/site/motions/services/motion-poll.service';
/** /**
* A dialog for updating the values of a poll. * A dialog for updating the values of a poll.

View File

@ -5,13 +5,13 @@ import { TranslateService } from '@ngx-translate/core';
import { CalculablePollKey } from 'app/core/ui-services/poll.service'; import { CalculablePollKey } from 'app/core/ui-services/poll.service';
import { ConstantsService } from 'app/core/ui-services/constants.service'; import { ConstantsService } from 'app/core/ui-services/constants.service';
import { LocalPermissionsService } from '../../services/local-permissions.service'; import { LocalPermissionsService } from 'app/site/motions/services/local-permissions.service';
import { MotionPoll } from 'app/shared/models/motions/motion-poll'; import { MotionPoll } from 'app/shared/models/motions/motion-poll';
import { MotionPollService } from '../../services/motion-poll.service';
import { MotionPollDialogComponent } from './motion-poll-dialog.component'; import { MotionPollDialogComponent } from './motion-poll-dialog.component';
import { MotionPollPdfService } from 'app/site/motions/services/motion-poll-pdf.service';
import { MotionPollService } from 'app/site/motions/services/motion-poll.service';
import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service'; import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service';
import { PromptService } from 'app/core/ui-services/prompt.service'; import { PromptService } from 'app/core/ui-services/prompt.service';
import { MotionPollPdfService } from '../../services/motion-poll-pdf.service';
/** /**
* A component used to display and edit polls of a motion. * A component used to display and edit polls of a motion.

View File

@ -3,11 +3,11 @@ import { FormBuilder, FormGroup } from '@angular/forms';
import { Subscription } from 'rxjs'; import { Subscription } from 'rxjs';
import { BaseComponent } from '../../../../base.component'; import { BaseComponent } from 'app/base.component';
import { MotionPdfExportService } from '../../services/motion-pdf-export.service'; import { MotionPdfExportService } from 'app/site/motions/services/motion-pdf-export.service';
import { PersonalNoteContent } from 'app/shared/models/users/personal-note'; import { PersonalNoteContent } from 'app/shared/models/users/personal-note';
import { PersonalNoteService } from 'app/core/ui-services/personal-note.service'; import { PersonalNoteService } from 'app/core/ui-services/personal-note.service';
import { ViewMotion } from '../../models/view-motion'; import { ViewMotion } from 'app/site/motions/models/view-motion';
/** /**
* Component for the motion comments view * Component for the motion comments view

View File

@ -0,0 +1,16 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { MotionDetailComponent } from './components/motion-detail/motion-detail.component';
import { AmendmentCreateWizardComponent } from './components/amendment-create-wizard/amendment-create-wizard.component';
const routes: Routes = [
{ path: '', component: MotionDetailComponent, pathMatch: 'full' },
{ path: 'create-amendment', component: AmendmentCreateWizardComponent }
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class MotionDetailRoutingModule {}

View File

@ -0,0 +1,39 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MotionDetailRoutingModule } from './motion-detail-routing.module';
import { SharedModule } from 'app/shared/shared.module';
import { MotionDetailComponent } from './components/motion-detail/motion-detail.component';
import { AmendmentCreateWizardComponent } from './components/amendment-create-wizard/amendment-create-wizard.component';
import { MotionCommentsComponent } from './components/motion-comments/motion-comments.component';
import { PersonalNoteComponent } from './components/personal-note/personal-note.component';
import { ManageSubmittersComponent } from './components/manage-submitters/manage-submitters.component';
import { MotionPollDialogComponent } from './components/motion-poll/motion-poll-dialog.component';
import { MotionPollComponent } from './components/motion-poll/motion-poll.component';
import { MotionDetailOriginalChangeRecommendationsComponent } from './components/motion-detail-original-change-recommendations/motion-detail-original-change-recommendations.component';
import { MotionDetailDiffComponent } from './components/motion-detail-diff/motion-detail-diff.component';
import { MotionChangeRecommendationComponent } from './components/motion-change-recommendation/motion-change-recommendation.component';
@NgModule({
imports: [CommonModule, MotionDetailRoutingModule, SharedModule],
declarations: [
MotionDetailComponent,
AmendmentCreateWizardComponent,
MotionCommentsComponent,
PersonalNoteComponent,
ManageSubmittersComponent,
MotionPollComponent,
MotionPollDialogComponent,
MotionDetailDiffComponent,
MotionDetailOriginalChangeRecommendationsComponent,
MotionChangeRecommendationComponent
],
entryComponents: [
MotionCommentsComponent,
PersonalNoteComponent,
ManageSubmittersComponent,
MotionPollDialogComponent,
MotionChangeRecommendationComponent
]
})
export class MotionDetailModule {}

View File

@ -1,4 +1,4 @@
<os-head-bar [nav]="false"> <os-head-bar prevUrl="../.." [nav]="false">
<!-- Title --> <!-- Title -->
<div class="title-slot"><h2 translate>Import motions</h2></div> <div class="title-slot"><h2 translate>Import motions</h2></div>
@ -48,7 +48,7 @@
</mat-form-field> </mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label translate>Text separator</mat-label> <mat-label translate>Text separator</mat-label>
<mat-select class="selection" (selectionChange)="selectTextSep($event)" value="&quot;"> <mat-select class="selection" (selectionChange)="selectTextSep($event)" value='"'>
<mat-option *ngFor="let option of textSeparators" [value]="option.value"> <mat-option *ngFor="let option of textSeparators" [value]="option.value">
{{ option.label | translate }} {{ option.label | translate }}
</mat-option> </mat-option>
@ -107,7 +107,6 @@
</div> </div>
<div class="table-container"> <div class="table-container">
<table mat-table class="on-transition-fade" [dataSource]="dataSource" matSort> <table mat-table class="on-transition-fade" [dataSource]="dataSource" matSort>
<!-- Status column --> <!-- Status column -->
<ng-container matColumnDef="status" sticky> <ng-container matColumnDef="status" sticky>
<mat-header-cell *matHeaderCellDef class="first-column"></mat-header-cell> <mat-header-cell *matHeaderCellDef class="first-column"></mat-header-cell>

View File

@ -5,9 +5,9 @@ import { Title } from '@angular/platform-browser';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { BaseImportListComponent } from 'app/site/base/base-import-list'; import { BaseImportListComponent } from 'app/site/base/base-import-list';
import { MotionCsvExportService } from '../../services/motion-csv-export.service'; import { MotionCsvExportService } from 'app/site/motions/services/motion-csv-export.service';
import { MotionImportService } from '../../services/motion-import.service'; import { MotionImportService } from 'app/site/motions/services/motion-import.service';
import { ViewMotion } from '../../models/view-motion'; import { ViewMotion } from 'app/site/motions/models/view-motion';
/** /**
* Component for the motion import list view. * Component for the motion import list view.

View File

@ -0,0 +1,12 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { MotionImportListComponent } from './motion-import-list.component';
const routes: Routes = [{ path: '', component: MotionImportListComponent, pathMatch: 'full' }];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class MotionImportRoutingModule {}

View File

@ -0,0 +1,12 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MotionImportListComponent } from './motion-import-list.component';
import { MotionImportRoutingModule } from './motion-import-routing.module';
import { SharedModule } from 'app/shared/shared.module';
@NgModule({
declarations: [MotionImportListComponent],
imports: [CommonModule, MotionImportRoutingModule, SharedModule]
})
export class MotionImportModule {}

View File

@ -3,10 +3,10 @@ import { FormGroup, FormBuilder } from '@angular/forms';
import { MatDialogRef, MatButtonToggle } from '@angular/material'; import { MatDialogRef, MatButtonToggle } from '@angular/material';
import { ConfigService } from 'app/core/ui-services/config.service'; import { ConfigService } from 'app/core/ui-services/config.service';
import { LineNumberingMode, ChangeRecoMode } from '../../models/view-motion';
import { InfoToExport } from '../../services/motion-pdf.service';
import { MotionCommentSectionRepositoryService } from 'app/core/repositories/motions/motion-comment-section-repository.service'; import { MotionCommentSectionRepositoryService } from 'app/core/repositories/motions/motion-comment-section-repository.service';
import { ViewMotionCommentSection } from '../../models/view-motion-comment-section'; import { LineNumberingMode, ChangeRecoMode } from 'app/site/motions/models/view-motion';
import { InfoToExport } from 'app/site/motions/services/motion-pdf.service';
import { ViewMotionCommentSection } from 'app/site/motions/models/view-motion-comment-section';
/** /**
* Dialog component to determine exporting. * Dialog component to determine exporting.

View File

@ -1,7 +1,7 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { MotionListComponent } from './motion-list.component'; import { MotionListComponent } from './motion-list.component';
import { E2EImportsModule } from '../../../../../e2e-imports.module'; import { E2EImportsModule } from 'e2e-imports.module';
describe('MotionListComponent', () => { describe('MotionListComponent', () => {
let component: MotionListComponent; let component: MotionListComponent;

View File

@ -7,27 +7,27 @@ import { TranslateService } from '@ngx-translate/core';
import { CategoryRepositoryService } from 'app/core/repositories/motions/category-repository.service'; import { CategoryRepositoryService } from 'app/core/repositories/motions/category-repository.service';
import { ConfigService } from 'app/core/ui-services/config.service'; import { ConfigService } from 'app/core/ui-services/config.service';
import { ListViewBaseComponent } from '../../../base/list-view-base'; import { ListViewBaseComponent } from 'app/site/base/list-view-base';
import { LocalPermissionsService } from '../../services/local-permissions.service';
import { MotionBlockRepositoryService } from 'app/core/repositories/motions/motion-block-repository.service'; import { MotionBlockRepositoryService } from 'app/core/repositories/motions/motion-block-repository.service';
import { MotionCsvExportService } from '../../services/motion-csv-export.service';
import { MotionFilterListService } from '../../services/motion-filter-list.service';
import { MotionMultiselectService } from '../../services/motion-multiselect.service';
import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service'; import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service';
import { MotionSortListService } from '../../services/motion-sort-list.service';
import { TagRepositoryService } from 'app/core/repositories/tags/tag-repository.service'; import { TagRepositoryService } from 'app/core/repositories/tags/tag-repository.service';
import { ViewCategory } from '../../models/view-category';
import { ViewMotion, LineNumberingMode, ChangeRecoMode } from '../../models/view-motion';
import { ViewMotionBlock } from '../../models/view-motion-block';
import { ViewTag } from 'app/site/tags/models/view-tag'; import { ViewTag } from 'app/site/tags/models/view-tag';
import { ViewWorkflow } from '../../models/view-workflow';
import { WorkflowState } from 'app/shared/models/motions/workflow-state'; import { WorkflowState } from 'app/shared/models/motions/workflow-state';
import { WorkflowRepositoryService } from 'app/core/repositories/motions/workflow-repository.service'; import { WorkflowRepositoryService } from 'app/core/repositories/motions/workflow-repository.service';
import { MotionPdfExportService } from '../../services/motion-pdf-export.service';
import { MotionExportDialogComponent } from '../motion-export-dialog/motion-export-dialog.component'; import { MotionExportDialogComponent } from '../motion-export-dialog/motion-export-dialog.component';
import { OperatorService } from 'app/core/core-services/operator.service'; import { OperatorService } from 'app/core/core-services/operator.service';
import { ViewportService } from 'app/core/ui-services/viewport.service'; import { ViewportService } from 'app/core/ui-services/viewport.service';
import { Motion } from 'app/shared/models/motions/motion'; import { Motion } from 'app/shared/models/motions/motion';
import { ViewMotion, LineNumberingMode, ChangeRecoMode } from 'app/site/motions/models/view-motion';
import { ViewWorkflow } from 'app/site/motions/models/view-workflow';
import { ViewCategory } from 'app/site/motions/models/view-category';
import { ViewMotionBlock } from 'app/site/motions/models/view-motion-block';
import { MotionSortListService } from 'app/site/motions/services/motion-sort-list.service';
import { MotionFilterListService } from 'app/site/motions/services/motion-filter-list.service';
import { MotionCsvExportService } from 'app/site/motions/services/motion-csv-export.service';
import { MotionPdfExportService } from 'app/site/motions/services/motion-pdf-export.service';
import { MotionMultiselectService } from 'app/site/motions/services/motion-multiselect.service';
import { LocalPermissionsService } from 'app/site/motions/services/local-permissions.service';
/** /**
* Component that displays all the motions in a Table using DataSource. * Component that displays all the motions in a Table using DataSource.

View File

@ -0,0 +1,11 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { MotionListComponent } from './components/motion-list/motion-list.component';
const routes: Routes = [{ path: '', component: MotionListComponent, pathMatch: 'full' }];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class MotionListRoutingModule {}

View File

@ -0,0 +1,14 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MotionListRoutingModule } from './motion-list-routing.module';
import { SharedModule } from 'app/shared/shared.module';
import { MotionExportDialogComponent } from './components/motion-export-dialog/motion-export-dialog.component';
import { MotionListComponent } from './components/motion-list/motion-list.component';
@NgModule({
imports: [CommonModule, MotionListRoutingModule, SharedModule],
declarations: [MotionListComponent, MotionExportDialogComponent],
entryComponents: [MotionExportDialogComponent]
})
export class MotionListModule {}

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