52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import { Deserializer } from '../deserializer.model';
|
|
import { Workflow } from './workflow';
|
|
|
|
/**
|
|
* Representation of a workflow state
|
|
*
|
|
* Part of the 'states'-array in motion/workflow
|
|
* @ignore
|
|
*/
|
|
export class WorkflowState extends Deserializer {
|
|
public id: number;
|
|
public name: string;
|
|
public action_word: string;
|
|
public recommendation_label: string;
|
|
public css_class: string;
|
|
public required_permission_to_see: string;
|
|
public allow_support: boolean;
|
|
public allow_create_poll: boolean;
|
|
public allow_submitter_edit: boolean;
|
|
public dont_set_identifier: boolean;
|
|
public show_state_extension_field: boolean;
|
|
public show_recommendation_extension_field: boolean;
|
|
public next_states_id: number[];
|
|
public workflow_id: number;
|
|
|
|
/**
|
|
* Needs to be completely optional because Workflow has (yet) the optional parameter 'states'
|
|
* @param input If given, it will be deserialized
|
|
*/
|
|
public constructor(input?: any) {
|
|
super(input);
|
|
}
|
|
|
|
/**
|
|
* return a list of the next possible states.
|
|
* Also adds the current state.
|
|
*/
|
|
public getNextStates(workflow: Workflow): WorkflowState[] {
|
|
const nextStates = [];
|
|
workflow.states.forEach(state => {
|
|
if (this.next_states_id.includes(state.id)) {
|
|
nextStates.push(state as WorkflowState);
|
|
}
|
|
});
|
|
return nextStates;
|
|
}
|
|
|
|
public toString = (): string => {
|
|
return this.name;
|
|
};
|
|
}
|