Add more motion modules
Seperates the previously large motion module in various smaller and very small feature modules. Motion Detail, and all direct dependancies to Motion Detail is now an own module. This significantly increases the response time of openslides 3
This commit is contained in:
parent
70191ce455
commit
6a421f8f6b
@ -16,7 +16,7 @@ const routes: Routes = [
|
||||
path: 'login',
|
||||
component: LoginWrapperComponent,
|
||||
children: [
|
||||
{ path: '', component: LoginMaskComponent },
|
||||
{ path: '', component: LoginMaskComponent, pathMatch: 'full' },
|
||||
{ path: 'reset-password', component: ResetPasswordComponent },
|
||||
{ path: 'reset-password-confirm', component: ResetPasswordConfirmComponent },
|
||||
{ path: 'legalnotice', component: LoginLegalNoticeComponent },
|
||||
|
@ -61,14 +61,12 @@ export class AppComponent {
|
||||
// change default JS functions
|
||||
this.overloadArrayToString();
|
||||
|
||||
appRef.isStable.subscribe(s => console.log('is stable', s));
|
||||
appRef.isStable
|
||||
.pipe(
|
||||
filter(s => s),
|
||||
take(1)
|
||||
)
|
||||
.subscribe(() => {
|
||||
console.log('start scheduler');
|
||||
servertimeService.startScheduler();
|
||||
});
|
||||
}
|
||||
|
@ -6,7 +6,8 @@ import { FullscreenProjectorComponent } from './fullscreen-projector/fullscreen-
|
||||
const routes: Routes = [
|
||||
{
|
||||
path: '',
|
||||
component: FullscreenProjectorComponent
|
||||
component: FullscreenProjectorComponent,
|
||||
pathMatch: 'full'
|
||||
},
|
||||
{
|
||||
path: ':id',
|
||||
|
@ -16,6 +16,7 @@ import { MainMenuService } from 'app/core/core-services/main-menu.service';
|
||||
*
|
||||
* ```html
|
||||
* <os-head-bar
|
||||
* prevUrl="../.."
|
||||
* [nav]="false"
|
||||
* [goBack]="true"
|
||||
* [mainButton]="opCanEdit()"
|
||||
@ -89,6 +90,15 @@ export class HeadBarComponent {
|
||||
@Input()
|
||||
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
|
||||
*/
|
||||
@ -141,7 +151,7 @@ export class HeadBarComponent {
|
||||
if (this.goBack) {
|
||||
this.location.back();
|
||||
} else {
|
||||
this.router.navigate(['../'], { relativeTo: this.route });
|
||||
this.router.navigate([this.prevUrl], { relativeTo: this.route });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
@import '../../../../assets/styles/drag.scss';
|
||||
@import '~assets/styles/drag.scss';
|
||||
|
||||
.box {
|
||||
width: 100%;
|
||||
|
@ -8,7 +8,7 @@ import { ListOfSpeakersComponent } from './components/list-of-speakers/list-of-s
|
||||
import { TopicDetailComponent } from './components/topic-detail/topic-detail.component';
|
||||
|
||||
const routes: Routes = [
|
||||
{ path: '', component: AgendaListComponent },
|
||||
{ path: '', component: AgendaListComponent, pathMatch: 'full' },
|
||||
{ path: 'import', component: AgendaImportListComponent },
|
||||
{ path: 'topics/new', component: TopicDetailComponent },
|
||||
{ path: 'sort-agenda', component: AgendaSortComponent },
|
||||
|
@ -2,7 +2,7 @@ import { NgModule } from '@angular/core';
|
||||
import { Routes, RouterModule } from '@angular/router';
|
||||
import { AssignmentListComponent } from './assignment-list/assignment-list.component';
|
||||
|
||||
const routes: Routes = [{ path: '', component: AssignmentListComponent }];
|
||||
const routes: Routes = [{ path: '', component: AssignmentListComponent, pathMatch: 'full' }];
|
||||
|
||||
@NgModule({
|
||||
imports: [RouterModule.forChild(routes)],
|
||||
|
@ -9,7 +9,8 @@ import { SearchComponent } from './components/search/search.component';
|
||||
const routes: Routes = [
|
||||
{
|
||||
path: '',
|
||||
component: StartComponent
|
||||
component: StartComponent,
|
||||
pathMatch: 'full'
|
||||
},
|
||||
{
|
||||
path: 'legalnotice',
|
||||
|
@ -2,7 +2,7 @@ import { NgModule } from '@angular/core';
|
||||
import { Routes, RouterModule } from '@angular/router';
|
||||
import { ConfigListComponent } from './components/config-list/config-list.component';
|
||||
|
||||
const routes: Routes = [{ path: '', component: ConfigListComponent }];
|
||||
const routes: Routes = [{ path: '', component: ConfigListComponent, pathMatch: 'full' }];
|
||||
|
||||
@NgModule({
|
||||
imports: [RouterModule.forChild(routes)],
|
||||
|
@ -5,7 +5,7 @@ import { HistoryListComponent } from './components/history-list/history-list.com
|
||||
/**
|
||||
* 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
|
||||
|
@ -4,7 +4,7 @@ import { MediafileListComponent } from './components/mediafile-list/mediafile-li
|
||||
import { MediaUploadComponent } from './components/media-upload/media-upload.component';
|
||||
|
||||
const routes: Routes = [
|
||||
{ path: '', component: MediafileListComponent },
|
||||
{ path: '', component: MediafileListComponent, pathMatch: 'full' },
|
||||
{ path: 'upload', component: MediaUploadComponent }
|
||||
];
|
||||
|
||||
|
@ -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();
|
||||
});
|
||||
});
|
@ -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 {}
|
@ -1,4 +1,4 @@
|
||||
<os-head-bar [nav]="false">
|
||||
<os-head-bar prevUrl="../.." [nav]="false">
|
||||
<!-- Title -->
|
||||
<div class="title-slot">
|
||||
<h2 translate>Call list</h2>
|
@ -5,12 +5,13 @@ import { MatSnackBar } from '@angular/material';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { Observable } from 'rxjs';
|
||||
|
||||
import { BaseViewComponent } from '../../../base/base-view';
|
||||
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 { ViewMotion } from '../../models/view-motion';
|
||||
|
||||
import { BaseViewComponent } from 'app/site/base/base-view';
|
||||
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 { ViewMotion } from 'app/site/motions/models/view-motion';
|
||||
|
||||
/**
|
||||
* Sort view for the call list.
|
@ -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 {}
|
@ -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 {}
|
@ -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 {}
|
@ -1,4 +1,4 @@
|
||||
<os-head-bar [nav]="false" [mainButton]="true" (mainEvent)="onPlusButton()">
|
||||
<os-head-bar prevUrl="../.." [nav]="false" [mainButton]="true" (mainEvent)="onPlusButton()">
|
||||
<!-- Title -->
|
||||
<div class="title-slot">
|
||||
<h2 translate>Categories</h2>
|
@ -1,7 +1,7 @@
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { CategoryListComponent } from './category-list.component';
|
||||
import { E2EImportsModule } from '../../../../../e2e-imports.module';
|
||||
import { E2EImportsModule } from 'e2e-imports.module';
|
||||
|
||||
describe('CategoryListComponent', () => {
|
||||
let component: CategoryListComponent;
|
@ -5,13 +5,13 @@ import { Title } from '@angular/platform-browser';
|
||||
|
||||
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 { CategoryRepositoryService } from 'app/core/repositories/motions/category-repository.service';
|
||||
import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service';
|
||||
import { PromptService } from 'app/core/ui-services/prompt.service';
|
||||
import { ViewCategory } from '../../models/view-category';
|
||||
import { ViewMotion } from '../../models/view-motion';
|
||||
import { ViewCategory } from 'app/site/motions/models/view-category';
|
||||
import { ViewMotion } from 'app/site/motions/models/view-motion';
|
||||
|
||||
/**
|
||||
* List view for the categories.
|
@ -10,8 +10,8 @@ import { MatSnackBar } from '@angular/material';
|
||||
import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service';
|
||||
import { PromptService } from 'app/core/ui-services/prompt.service';
|
||||
import { SortingListComponent } from 'app/shared/components/sorting-list/sorting-list.component';
|
||||
import { ViewCategory } from '../../models/view-category';
|
||||
import { ViewMotion } from '../../models/view-motion';
|
||||
import { ViewCategory } from 'app/site/motions/models/view-category';
|
||||
import { ViewMotion } from 'app/site/motions/models/view-motion';
|
||||
|
||||
/**
|
||||
* View for rearranging and renumbering the motions of a category. The {@link onNumberMotions}
|
@ -24,6 +24,7 @@
|
||||
|
||||
.chip-container {
|
||||
display: block;
|
||||
min-height: 0; // default is inherit, will appear on the top edge of the cell
|
||||
}
|
||||
|
||||
.os-headed-listview-table {
|
@ -10,10 +10,10 @@ import { ListViewBaseComponent } from 'app/site/base/list-view-base';
|
||||
import { MotionBlock } from 'app/shared/models/motions/motion-block';
|
||||
import { MotionBlockRepositoryService } from 'app/core/repositories/motions/motion-block-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 { ViewMotion } from '../../models/view-motion';
|
||||
import { OperatorService } from '../../../../core/core-services/operator.service';
|
||||
import { ViewMotion } from 'app/site/motions/models/view-motion';
|
||||
import { ViewMotionBlock } from 'app/site/motions/models/view-motion-block';
|
||||
|
||||
/**
|
||||
* Detail component to display one motion block
|
@ -1,4 +1,4 @@
|
||||
<os-head-bar [nav]="false" [mainButton]="canEdit" (mainEvent)="onPlusButton()">
|
||||
<os-head-bar prevUrl="../.." [nav]="false" [mainButton]="canEdit" (mainEvent)="onPlusButton()">
|
||||
<!-- Title -->
|
||||
<div class="title-slot"><h2 translate>Motion blocks</h2></div>
|
||||
</os-head-bar>
|
@ -15,7 +15,7 @@ import { MotionBlockRepositoryService } from 'app/core/repositories/motions/moti
|
||||
import { OperatorService } from 'app/core/core-services/operator.service';
|
||||
import { PromptService } from 'app/core/ui-services/prompt.service';
|
||||
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
|
@ -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 {}
|
@ -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 {}
|
@ -1,4 +1,4 @@
|
||||
<os-head-bar [nav]="false" [mainButton]="true" (mainEvent)="onPlusButton()">
|
||||
<os-head-bar prevUrl="../.." [nav]="false" [mainButton]="true" (mainEvent)="onPlusButton()">
|
||||
<!-- Title -->
|
||||
<div class="title-slot">
|
||||
<h2 translate>Comment fields</h2>
|
||||
@ -12,19 +12,31 @@
|
||||
<form [formGroup]="createForm" (keydown)="keyDownFunction($event)">
|
||||
<p>
|
||||
<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">
|
||||
<span translate>Required</span>
|
||||
</mat-hint>
|
||||
</mat-form-field>
|
||||
</p>
|
||||
<p>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
</form>
|
||||
</mat-card-content>
|
||||
@ -38,8 +50,13 @@
|
||||
</mat-card-actions>
|
||||
</mat-card>
|
||||
<mat-accordion class="os-card">
|
||||
<mat-expansion-panel *ngFor="let section of this.commentSections" (opened)="openId = section.id" (closed)="panelClosed(section)"
|
||||
[expanded]="openId === section.id" multiple="false">
|
||||
<mat-expansion-panel
|
||||
*ngFor="let section of this.commentSections"
|
||||
(opened)="openId = section.id"
|
||||
(closed)="panelClosed(section)"
|
||||
[expanded]="openId === section.id"
|
||||
multiple="false"
|
||||
>
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title>
|
||||
<div class="header-container">
|
||||
@ -67,19 +84,31 @@
|
||||
<span translate>Edit comment field:</span>
|
||||
<p>
|
||||
<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">
|
||||
<span translate>Required</span>
|
||||
</mat-hint>
|
||||
</mat-form-field>
|
||||
</p>
|
||||
<p>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
</form>
|
||||
<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>
|
||||
</ng-container>
|
||||
<mat-action-row>
|
||||
<button *ngIf="editId !== section.id" mat-button class="on-transition-fade" (click)="onEditButton(section)"
|
||||
mat-icon-button>
|
||||
<button
|
||||
*ngIf="editId !== section.id"
|
||||
mat-button
|
||||
class="on-transition-fade"
|
||||
(click)="onEditButton(section)"
|
||||
mat-icon-button
|
||||
>
|
||||
<mat-icon>edit</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="editId === section.id" mat-button class="on-transition-fade" (click)="editId = null"
|
||||
mat-icon-button>
|
||||
<button
|
||||
*ngIf="editId === section.id"
|
||||
mat-button
|
||||
class="on-transition-fade"
|
||||
(click)="editId = null"
|
||||
mat-icon-button
|
||||
>
|
||||
<mat-icon>cancel</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="editId === section.id" mat-button class="on-transition-fade" (click)="onSaveButton(section)"
|
||||
mat-icon-button>
|
||||
<button
|
||||
*ngIf="editId === section.id"
|
||||
mat-button
|
||||
class="on-transition-fade"
|
||||
(click)="onSaveButton(section)"
|
||||
mat-icon-button
|
||||
>
|
||||
<mat-icon>save</mat-icon>
|
||||
</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>
|
||||
</button>
|
||||
</mat-action-row>
|
@ -7,12 +7,13 @@ import { BehaviorSubject } from 'rxjs';
|
||||
|
||||
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
|
||||
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 { PromptService } from 'app/core/ui-services/prompt.service';
|
||||
import { BaseViewComponent } from '../../../base/base-view';
|
||||
|
||||
import { ViewGroup } from 'app/site/users/models/view-group';
|
||||
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.
|
@ -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 {}
|
@ -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 {}
|
@ -1,7 +1,7 @@
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { AmendmentCreateWizardComponent } from './amendment-create-wizard.component';
|
||||
import { E2EImportsModule } from '../../../../../e2e-imports.module';
|
||||
import { E2EImportsModule } from 'e2e-imports.module';
|
||||
|
||||
describe('AmendmentCreateWizardComponent', () => {
|
||||
let component: AmendmentCreateWizardComponent;
|
@ -5,13 +5,13 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||
import { MatSnackBar } from '@angular/material';
|
||||
|
||||
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 { ViewMotion } from '../../models/view-motion';
|
||||
import { BaseViewComponent } from 'app/site/base/base-view';
|
||||
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 { BaseViewComponent } from '../../../base/base-view';
|
||||
import { CreateMotion } from '../../models/create-motion';
|
||||
import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service';
|
||||
import { ViewMotion } from 'app/site/motions/models/view-motion';
|
||||
|
||||
/**
|
||||
* Describes the single paragraphs from the base motion.
|
@ -3,7 +3,8 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { ManageSubmittersComponent } from './manage-submitters.component';
|
||||
import { E2EImportsModule } from 'e2e-imports.module';
|
||||
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';
|
||||
|
||||
describe('ManageSubmittersComponent', () => {
|
@ -2,18 +2,18 @@ import { Component, Input } from '@angular/core';
|
||||
import { FormGroup, FormControl } from '@angular/forms';
|
||||
import { MatSnackBar } from '@angular/material';
|
||||
import { Title } from '@angular/platform-browser';
|
||||
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { BehaviorSubject, Observable } from 'rxjs';
|
||||
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
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 { User } from 'app/shared/models/users/user';
|
||||
import { ViewMotion } from '../../models/view-motion';
|
||||
import { ViewUser } from 'app/site/users/models/view-user';
|
||||
import { ViewModelStoreService } from 'app/core/core-services/view-model-store.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
|
@ -4,10 +4,11 @@ import {
|
||||
MotionChangeRecommendationComponent,
|
||||
MotionChangeRecommendationComponentData
|
||||
} 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 { 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', () => {
|
||||
let component: MotionChangeRecommendationComponent;
|
@ -5,10 +5,10 @@ import { Title } from '@angular/platform-browser';
|
||||
|
||||
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 { ViewMotionChangeRecommendation } from '../../models/view-change-recommendation';
|
||||
import { BaseViewComponent } from '../../../base/base-view';
|
||||
import { LineRange, ModificationType } from 'app/core/ui-services/diff.service';
|
||||
import { ViewMotionChangeRecommendation } from 'app/site/motions/models/view-change-recommendation';
|
||||
|
||||
/**
|
||||
* Data that needs to be provided to the MotionChangeRecommendationComponent dialog
|
@ -1,7 +1,7 @@
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { MotionCommentsComponent } from './motion-comments.component';
|
||||
import { E2EImportsModule } from '../../../../../e2e-imports.module';
|
||||
import { E2EImportsModule } from 'e2e-imports.module';
|
||||
|
||||
describe('MotionCommentsComponent', () => {
|
||||
let component: MotionCommentsComponent;
|
@ -5,13 +5,13 @@ import { FormGroup, FormBuilder } from '@angular/forms';
|
||||
|
||||
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 { MotionPdfExportService } from '../../services/motion-pdf-export.service';
|
||||
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
|
@ -1,13 +1,13 @@
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { E2EImportsModule } from '../../../../../e2e-imports.module';
|
||||
import { Component } from '@angular/core';
|
||||
import { LineNumberingMode, ViewMotion } from '../../models/view-motion';
|
||||
|
||||
import { MotionDetailDiffComponent } from './motion-detail-diff.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 { 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({
|
||||
template: `
|
@ -4,19 +4,19 @@ import { DomSanitizer, SafeHtml, Title } from '@angular/platform-browser';
|
||||
|
||||
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 { ChangeRecommendationRepositoryService } from 'app/core/repositories/motions/change-recommendation-repository.service';
|
||||
import { DiffService, LineRange, ModificationType } from 'app/core/ui-services/diff.service';
|
||||
import { LineNumberingMode, ViewMotion } from '../../models/view-motion';
|
||||
import {
|
||||
MotionChangeRecommendationComponent,
|
||||
MotionChangeRecommendationComponentData
|
||||
} from '../motion-change-recommendation/motion-change-recommendation.component';
|
||||
import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service';
|
||||
import { PromptService } from 'app/core/ui-services/prompt.service';
|
||||
import { ViewUnifiedChange, ViewUnifiedChangeType } from '../../../../shared/models/motions/view-unified-change';
|
||||
import { ViewMotionChangeRecommendation } from '../../models/view-change-recommendation';
|
||||
import { ViewMotion, LineNumberingMode } from 'app/site/motions/models/view-motion';
|
||||
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.
|
@ -1,7 +1,7 @@
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
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';
|
||||
|
||||
@Component({
|
@ -11,8 +11,8 @@ import {
|
||||
} from '@angular/core';
|
||||
|
||||
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 { ViewMotionChangeRecommendation } from 'app/site/motions/models/view-change-recommendation';
|
||||
|
||||
/**
|
||||
* This component displays the original motion text with annotated change commendations
|
@ -1,6 +1,7 @@
|
||||
<os-head-bar
|
||||
[mainButton]="perms.isAllowed('update', motion)"
|
||||
mainButtonIcon="edit"
|
||||
prevUrl="../.."
|
||||
[nav]="false"
|
||||
[editMode]="editMotion"
|
||||
(mainEvent)="setEditMode(!editMotion)"
|
@ -1,4 +1,4 @@
|
||||
@import '../../../../../assets/styles/motion-styles-common';
|
||||
@import '~assets/styles/motion-styles-common';
|
||||
|
||||
span {
|
||||
margin: 0;
|
@ -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();
|
||||
});
|
||||
});
|
@ -7,28 +7,26 @@ import { MatDialog, MatSnackBar, MatCheckboxChange, ErrorStateMatcher } from '@a
|
||||
import { BehaviorSubject, Subscription } from 'rxjs';
|
||||
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 { ChangeRecommendationRepositoryService } from 'app/core/repositories/motions/change-recommendation-repository.service';
|
||||
import { ChangeRecoMode, LineNumberingMode, ViewMotion } from '../../models/view-motion';
|
||||
import { CreateMotion } from '../../models/create-motion';
|
||||
import { CreateMotion } from 'app/site/motions/models/create-motion';
|
||||
import { ConfigService } from 'app/core/ui-services/config.service';
|
||||
import { DataStoreService } from 'app/core/core-services/data-store.service';
|
||||
import { DiffLinesInParagraph, LineRange } from 'app/core/ui-services/diff.service';
|
||||
import { ItemRepositoryService } from 'app/core/repositories/agenda/item-repository.service';
|
||||
import { itemVisibilityChoices, Item } from 'app/shared/models/agenda/item';
|
||||
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 { Motion } from 'app/shared/models/motions/motion';
|
||||
import { MotionBlock } from 'app/shared/models/motions/motion-block';
|
||||
import {
|
||||
MotionChangeRecommendationComponent,
|
||||
MotionChangeRecommendationComponentData
|
||||
MotionChangeRecommendationComponentData,
|
||||
MotionChangeRecommendationComponent
|
||||
} 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 { NotifyService } from 'app/core/core-services/notify.service';
|
||||
import { OperatorService } from 'app/core/core-services/operator.service';
|
||||
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 { Tag } from 'app/shared/models/core/tag';
|
||||
import { UserRepositoryService } from 'app/core/repositories/users/user-repository.service';
|
||||
import { ViewMotionBlock } from '../../models/view-motion-block';
|
||||
import { ViewWorkflow } from '../../models/view-workflow';
|
||||
import { ViewMotionBlock } from 'app/site/motions/models/view-motion-block';
|
||||
import { ViewWorkflow } from 'app/site/motions/models/view-workflow';
|
||||
import { ViewUser } from 'app/site/users/models/view-user';
|
||||
import { ViewCategory } from '../../models/view-category';
|
||||
import { ViewCreateMotion } from '../../models/view-create-motion';
|
||||
import { ViewCategory } from 'app/site/motions/models/view-category';
|
||||
import { ViewCreateMotion } from 'app/site/motions/models/view-create-motion';
|
||||
import { ViewItem } from 'app/site/agenda/models/view-item';
|
||||
import { ViewportService } from 'app/core/ui-services/viewport.service';
|
||||
import { ViewMediafile } from 'app/site/mediafiles/models/view-mediafile';
|
||||
import { ViewModelStoreService } from 'app/core/core-services/view-model-store.service';
|
||||
import { ViewMotionChangeRecommendation } from '../../models/view-change-recommendation';
|
||||
import { ViewMotionNotificationEditMotion, TypeOfNotificationViewMotion } from '../../models/view-motion-notify';
|
||||
import { ViewStatuteParagraph } from '../../models/view-statute-paragraph';
|
||||
import { ViewMotionChangeRecommendation } from 'app/site/motions/models/view-change-recommendation';
|
||||
import {
|
||||
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 { ViewUnifiedChange } from 'app/shared/models/motions/view-unified-change';
|
||||
import { Workflow } from 'app/shared/models/motions/workflow';
|
||||
@ -342,7 +344,7 @@ export class MotionDetailComponent extends BaseViewComponent implements OnInit,
|
||||
private editNotificationSubscription: Subscription;
|
||||
|
||||
/**
|
||||
* Constuct the detail view.
|
||||
* Constructs the detail view.
|
||||
*
|
||||
* @param title
|
||||
* @param translate
|
||||
@ -552,44 +554,10 @@ export class MotionDetailComponent extends BaseViewComponent implements OnInit,
|
||||
* determine the motion to display using the URL
|
||||
*/
|
||||
public getMotionByUrl(): void {
|
||||
if (this.route.snapshot.url[0] && this.route.snapshot.url[0].path === 'new') {
|
||||
// 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));
|
||||
} else {
|
||||
// load existing motion
|
||||
this.route.params.subscribe(params => {
|
||||
const motionId: number = parseInt(params.id, 10);
|
||||
this.route.params.subscribe(params => {
|
||||
if (Object.keys(params).length > 0) {
|
||||
// load existing motion
|
||||
const motionId: number = +params.id;
|
||||
this.repo.getViewModelObservable(motionId).subscribe(newViewMotion => {
|
||||
if (newViewMotion) {
|
||||
this.motion = newViewMotion;
|
||||
@ -612,8 +580,42 @@ export class MotionDetailComponent extends BaseViewComponent implements OnInit,
|
||||
this.changeRecommendations = recos;
|
||||
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 {
|
||||
if (motion) {
|
||||
this.router.navigate(['../' + motion.id], { relativeTo: this.route });
|
||||
this.router.navigate(['../contacts'], { relativeTo: this.route.parent });
|
||||
// update the current motion
|
||||
this.motion = motion;
|
||||
this.setSurroundingMotions();
|
@ -3,7 +3,7 @@ import { MatDialogRef, MAT_DIALOG_DATA, MatSnackBar } from '@angular/material';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
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.
|
@ -5,13 +5,13 @@ import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
import { CalculablePollKey } from 'app/core/ui-services/poll.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 { MotionPollService } from '../../services/motion-poll.service';
|
||||
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 { 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.
|
@ -3,11 +3,11 @@ import { FormBuilder, FormGroup } from '@angular/forms';
|
||||
|
||||
import { Subscription } from 'rxjs';
|
||||
|
||||
import { BaseComponent } from '../../../../base.component';
|
||||
import { MotionPdfExportService } from '../../services/motion-pdf-export.service';
|
||||
import { BaseComponent } from 'app/base.component';
|
||||
import { MotionPdfExportService } from 'app/site/motions/services/motion-pdf-export.service';
|
||||
import { PersonalNoteContent } from 'app/shared/models/users/personal-note';
|
||||
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
|
@ -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 {}
|
@ -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 {}
|
@ -1,4 +1,4 @@
|
||||
<os-head-bar [nav]="false">
|
||||
<os-head-bar prevUrl="../.." [nav]="false">
|
||||
<!-- Title -->
|
||||
<div class="title-slot"><h2 translate>Import motions</h2></div>
|
||||
|
||||
@ -48,7 +48,7 @@
|
||||
</mat-form-field>
|
||||
<mat-form-field>
|
||||
<mat-label translate>Text separator</mat-label>
|
||||
<mat-select class="selection" (selectionChange)="selectTextSep($event)" value=""">
|
||||
<mat-select class="selection" (selectionChange)="selectTextSep($event)" value='"'>
|
||||
<mat-option *ngFor="let option of textSeparators" [value]="option.value">
|
||||
{{ option.label | translate }}
|
||||
</mat-option>
|
||||
@ -107,7 +107,6 @@
|
||||
</div>
|
||||
<div class="table-container">
|
||||
<table mat-table class="on-transition-fade" [dataSource]="dataSource" matSort>
|
||||
|
||||
<!-- Status column -->
|
||||
<ng-container matColumnDef="status" sticky>
|
||||
<mat-header-cell *matHeaderCellDef class="first-column"></mat-header-cell>
|
@ -5,9 +5,9 @@ import { Title } from '@angular/platform-browser';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
import { BaseImportListComponent } from 'app/site/base/base-import-list';
|
||||
import { MotionCsvExportService } from '../../services/motion-csv-export.service';
|
||||
import { MotionImportService } from '../../services/motion-import.service';
|
||||
import { ViewMotion } from '../../models/view-motion';
|
||||
import { MotionCsvExportService } from 'app/site/motions/services/motion-csv-export.service';
|
||||
import { MotionImportService } from 'app/site/motions/services/motion-import.service';
|
||||
import { ViewMotion } from 'app/site/motions/models/view-motion';
|
||||
|
||||
/**
|
||||
* Component for the motion import list view.
|
@ -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 {}
|
@ -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 {}
|
@ -3,10 +3,10 @@ import { FormGroup, FormBuilder } from '@angular/forms';
|
||||
import { MatDialogRef, MatButtonToggle } from '@angular/material';
|
||||
|
||||
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 { 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.
|
@ -1,7 +1,7 @@
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { MotionListComponent } from './motion-list.component';
|
||||
import { E2EImportsModule } from '../../../../../e2e-imports.module';
|
||||
import { E2EImportsModule } from 'e2e-imports.module';
|
||||
|
||||
describe('MotionListComponent', () => {
|
||||
let component: MotionListComponent;
|
@ -7,27 +7,27 @@ import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
import { CategoryRepositoryService } from 'app/core/repositories/motions/category-repository.service';
|
||||
import { ConfigService } from 'app/core/ui-services/config.service';
|
||||
import { ListViewBaseComponent } from '../../../base/list-view-base';
|
||||
import { LocalPermissionsService } from '../../services/local-permissions.service';
|
||||
import { ListViewBaseComponent } from 'app/site/base/list-view-base';
|
||||
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 { MotionSortListService } from '../../services/motion-sort-list.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 { ViewWorkflow } from '../../models/view-workflow';
|
||||
import { WorkflowState } from 'app/shared/models/motions/workflow-state';
|
||||
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 { OperatorService } from 'app/core/core-services/operator.service';
|
||||
import { ViewportService } from 'app/core/ui-services/viewport.service';
|
||||
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.
|
@ -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 {}
|
@ -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
Loading…
Reference in New Issue
Block a user