81 lines
2.4 KiB
TypeScript
81 lines
2.4 KiB
TypeScript
|
import { ViewUnifiedChange, ViewUnifiedChangeType } from './view-unified-change';
|
||
|
import { ViewMotion } from './view-motion';
|
||
|
import { LineRange } from '../services/diff.service';
|
||
|
import { MergeAmendment } from '../../../shared/models/motions/workflow-state';
|
||
|
|
||
|
/**
|
||
|
* This represents the Unified Diff part of an amendments.
|
||
|
*
|
||
|
* Hint: As we will probably support multiple affected paragraphs in one amendment in the future,
|
||
|
* Amendments <-> ViewMotionAmendedParagraph is potentially a 1:n-relation
|
||
|
*/
|
||
|
export class ViewMotionAmendedParagraph implements ViewUnifiedChange {
|
||
|
public constructor(
|
||
|
private amendment: ViewMotion,
|
||
|
private paragraphNo: number,
|
||
|
private newText: string,
|
||
|
private lineRange: LineRange
|
||
|
) {}
|
||
|
|
||
|
public getChangeId(): string {
|
||
|
return 'amendment-' + this.amendment.id.toString(10) + '-' + this.paragraphNo.toString(10);
|
||
|
}
|
||
|
|
||
|
public getChangeType(): ViewUnifiedChangeType {
|
||
|
return ViewUnifiedChangeType.TYPE_AMENDMENT;
|
||
|
}
|
||
|
|
||
|
public getLineFrom(): number {
|
||
|
return this.lineRange.from;
|
||
|
}
|
||
|
|
||
|
public getLineTo(): number {
|
||
|
return this.lineRange.to;
|
||
|
}
|
||
|
|
||
|
public getChangeNewText(): string {
|
||
|
return this.newText;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* The state and recommendation of this amendment is considered.
|
||
|
* The state takes precedence.
|
||
|
*
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
public isAccepted(): boolean {
|
||
|
const mergeState = this.amendment.state
|
||
|
? this.amendment.state.merge_amendment_into_final
|
||
|
: MergeAmendment.UNDEFINED;
|
||
|
switch (mergeState) {
|
||
|
case MergeAmendment.YES:
|
||
|
return true;
|
||
|
case MergeAmendment.NO:
|
||
|
return false;
|
||
|
default:
|
||
|
const mergeRecommendation = this.amendment.recommendation
|
||
|
? this.amendment.recommendation.merge_amendment_into_final
|
||
|
: MergeAmendment.UNDEFINED;
|
||
|
switch (mergeRecommendation) {
|
||
|
case MergeAmendment.YES:
|
||
|
return true;
|
||
|
case MergeAmendment.NO:
|
||
|
return false;
|
||
|
default:
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
public isRejected(): boolean {
|
||
|
return !this.isAccepted();
|
||
|
}
|
||
|
|
||
|
public getIdentifier(): string {
|
||
|
return this.amendment.identifier;
|
||
|
}
|
||
|
}
|