Files
dspace-angular/src/app/shared/form/builder/parsers/parser-factory.ts

128 lines
3.4 KiB
TypeScript

import { StaticProvider } from '@angular/core';
import { ParserType } from './parser-type';
import {
CONFIG_DATA,
FieldParser,
INIT_FORM_VALUES,
PARSER_OPTIONS,
SUBMISSION_ID
} from './field-parser';
import { DateFieldParser } from './date-field-parser';
import { DropdownFieldParser } from './dropdown-field-parser';
import { RelationGroupFieldParser } from './relation-group-field-parser';
import { ListFieldParser } from './list-field-parser';
import { LookupFieldParser } from './lookup-field-parser';
import { LookupNameFieldParser } from './lookup-name-field-parser';
import { OneboxFieldParser } from './onebox-field-parser';
import { NameFieldParser } from './name-field-parser';
import { SeriesFieldParser } from './series-field-parser';
import { TagFieldParser } from './tag-field-parser';
import { TextareaFieldParser } from './textarea-field-parser';
import { DisabledFieldParser } from './disabled-field-parser';
import { TranslateService } from '@ngx-translate/core';
const fieldParserDeps = [
SUBMISSION_ID,
CONFIG_DATA,
INIT_FORM_VALUES,
PARSER_OPTIONS,
TranslateService
];
/**
* Method to retrieve a field parder with its providers based on the input type
*/
export class ParserFactory {
public static getProvider(type: ParserType): StaticProvider {
switch (type) {
case ParserType.Date: {
return {
provide: FieldParser,
useClass: DateFieldParser,
deps: [...fieldParserDeps]
};
}
case ParserType.Dropdown: {
return {
provide: FieldParser,
useClass: DropdownFieldParser,
deps: [...fieldParserDeps]
};
}
case ParserType.RelationGroup: {
return {
provide: FieldParser,
useClass: RelationGroupFieldParser,
deps: [...fieldParserDeps]
};
}
case ParserType.List: {
return {
provide: FieldParser,
useClass: ListFieldParser,
deps: [...fieldParserDeps]
};
}
case ParserType.Lookup: {
return {
provide: FieldParser,
useClass: LookupFieldParser,
deps: [...fieldParserDeps]
};
}
case ParserType.LookupName: {
return {
provide: FieldParser,
useClass: LookupNameFieldParser,
deps: [...fieldParserDeps]
};
}
case ParserType.Onebox: {
return {
provide: FieldParser,
useClass: OneboxFieldParser,
deps: [...fieldParserDeps]
};
}
case ParserType.Name: {
return {
provide: FieldParser,
useClass: NameFieldParser,
deps: [...fieldParserDeps]
};
}
case ParserType.Series: {
return {
provide: FieldParser,
useClass: SeriesFieldParser,
deps: [...fieldParserDeps]
};
}
case ParserType.Tag: {
return {
provide: FieldParser,
useClass: TagFieldParser,
deps: [...fieldParserDeps]
};
}
case ParserType.Textarea: {
return {
provide: FieldParser,
useClass: TextareaFieldParser,
deps: [...fieldParserDeps]
};
}
case undefined: {
return {
provide: FieldParser,
useClass: DisabledFieldParser,
deps: [...fieldParserDeps]
};
}
default: {
return undefined;
}
}
}
}