230 lines
8.6 KiB
TypeScript
230 lines
8.6 KiB
TypeScript
import { DetailsRadioOption } from '@iqser/common-ui';
|
|
import { AnnotationWrapper } from '@models/file/annotation.wrapper';
|
|
import { Dossier } from '@red/domain';
|
|
import { addHintTranslations } from '@translations/add-hint-translations';
|
|
import { editRedactionTranslations, redactTextTranslations } from '@translations/redact-text-translations';
|
|
import { removeAnnotationTranslations } from '@translations/remove-annotation-translations';
|
|
import { removeRedactionTranslations } from '@translations/remove-redaction-translations';
|
|
import { resizeRedactionTranslations } from '@translations/resize-redaction-translations';
|
|
import { RemoveRedactionData } from './dialog-types';
|
|
|
|
const PIN_ICON = 'red:push-pin';
|
|
const FOLDER_ICON = 'red:folder';
|
|
const REMOVE_FROM_DICT_ICON = 'red:remove-from-dict';
|
|
|
|
export const RedactOrHintOptions = {
|
|
ONLY_HERE: 'ONLY_HERE',
|
|
IN_DOSSIER: 'IN_DOSSIER',
|
|
} as const;
|
|
|
|
export type RedactOrHintOption = keyof typeof RedactOrHintOptions;
|
|
|
|
export const ResizeOptions = RedactOrHintOptions;
|
|
export type ResizeRedactionOption = RedactOrHintOption;
|
|
|
|
export const RemoveRedactionOptions = {
|
|
ONLY_HERE: 'ONLY_HERE',
|
|
IN_DOSSIER: 'IN_DOSSIER',
|
|
FALSE_POSITIVE: 'FALSE_POSITIVE',
|
|
DO_NOT_RECOMMEND: 'DO_NOT_RECOMMEND',
|
|
} as const;
|
|
export const RemoveAnnotationOptions = RemoveRedactionOptions;
|
|
|
|
export type RemoveRedactionOption = keyof typeof RemoveRedactionOptions;
|
|
export type RemoveAnnotationOption = RemoveRedactionOption;
|
|
|
|
export const getEditRedactionOptions = (
|
|
dossierName: string,
|
|
applyToAllDossiers: boolean,
|
|
dossierDictionaryOnly: boolean,
|
|
isModifyDictionary: boolean,
|
|
): DetailsRadioOption<RedactOrHintOption>[] => {
|
|
const options: DetailsRadioOption<RedactOrHintOption>[] = [
|
|
{
|
|
label: editRedactionTranslations.onlyHere.label,
|
|
description: editRedactionTranslations.onlyHere.description,
|
|
icon: PIN_ICON,
|
|
value: ResizeOptions.ONLY_HERE,
|
|
},
|
|
];
|
|
if (isModifyDictionary) {
|
|
options.push({
|
|
label: editRedactionTranslations.inDossier.label,
|
|
description: editRedactionTranslations.inDossier.description,
|
|
descriptionParams: { dossierName: dossierName },
|
|
icon: FOLDER_ICON,
|
|
value: ResizeOptions.IN_DOSSIER,
|
|
extraOption: {
|
|
label: editRedactionTranslations.inDossier.extraOptionLabel,
|
|
checked: applyToAllDossiers,
|
|
hidden: dossierDictionaryOnly,
|
|
disabled: true,
|
|
},
|
|
});
|
|
}
|
|
return options;
|
|
};
|
|
|
|
export const getRedactOrHintOptions = (
|
|
dossier: Dossier,
|
|
applyToAllDossiers: boolean,
|
|
isApprover: boolean,
|
|
isPageExcluded = false,
|
|
isRecommendation = false,
|
|
isHint = false,
|
|
isRss = false,
|
|
): DetailsRadioOption<RedactOrHintOption>[] => {
|
|
const translations = isHint ? addHintTranslations : redactTextTranslations;
|
|
const options: DetailsRadioOption<RedactOrHintOption>[] = [];
|
|
|
|
if (!isRecommendation) {
|
|
options.push({
|
|
label: translations.onlyHere.label,
|
|
description: translations.onlyHere.description,
|
|
icon: PIN_ICON,
|
|
value: ResizeOptions.ONLY_HERE,
|
|
});
|
|
}
|
|
|
|
if (isRss) {
|
|
return options;
|
|
}
|
|
|
|
options.push({
|
|
label: translations.inDossier.label,
|
|
description: translations.inDossier.description,
|
|
descriptionParams: { dossierName: dossier.dossierName },
|
|
icon: FOLDER_ICON,
|
|
value: ResizeOptions.IN_DOSSIER,
|
|
disabled: isPageExcluded,
|
|
extraOption: {
|
|
label: translations.inDossier.extraOptionLabel,
|
|
checked: applyToAllDossiers,
|
|
hidden: !isApprover,
|
|
},
|
|
});
|
|
|
|
return options;
|
|
};
|
|
|
|
export const getResizeRedactionOptions = (
|
|
redaction: AnnotationWrapper,
|
|
dossier: Dossier,
|
|
isRss: boolean,
|
|
applyToAllDossiers: boolean,
|
|
isApprover: boolean,
|
|
): DetailsRadioOption<ResizeRedactionOption>[] => {
|
|
const translations = resizeRedactionTranslations;
|
|
const options: DetailsRadioOption<ResizeRedactionOption>[] = [
|
|
{
|
|
label: translations.onlyHere.label,
|
|
description: translations.onlyHere.description,
|
|
icon: PIN_ICON,
|
|
value: RedactOrHintOptions.ONLY_HERE,
|
|
},
|
|
];
|
|
|
|
if (isRss) {
|
|
return options;
|
|
}
|
|
|
|
const dictBasedType = redaction.isModifyDictionary;
|
|
options.push({
|
|
label: translations.inDossier.label,
|
|
description: translations.inDossier.description,
|
|
descriptionParams: { dossierName: dossier.dossierName },
|
|
disabled: !dictBasedType || redaction.hasBeenRecategorized || redaction.hasBeenForced,
|
|
tooltip: !dictBasedType ? translations.inDossier.tooltip : null,
|
|
icon: FOLDER_ICON,
|
|
value: RedactOrHintOptions.IN_DOSSIER,
|
|
extraOption: {
|
|
label: translations.inDossier.extraOptionLabel,
|
|
checked: applyToAllDossiers,
|
|
hidden: !isApprover,
|
|
},
|
|
});
|
|
return options;
|
|
};
|
|
|
|
export const getRemoveRedactionOptions = (
|
|
data: RemoveRedactionData,
|
|
isDocumine: boolean = false,
|
|
): DetailsRadioOption<RemoveRedactionOption>[] => {
|
|
const translations = isDocumine ? removeAnnotationTranslations : removeRedactionTranslations;
|
|
const { permissions, redactions, applyToAllDossiers, isApprover, falsePositiveContext } = data;
|
|
const isBulk = redactions.length > 1;
|
|
|
|
const options: DetailsRadioOption<RemoveRedactionOption>[] = [];
|
|
if (permissions.canRemoveOnlyHere) {
|
|
options.push({
|
|
label: translations.ONLY_HERE.label,
|
|
description: isBulk ? translations.ONLY_HERE.descriptionBulk : translations.ONLY_HERE.description,
|
|
descriptionParams: {
|
|
value: redactions[0].value,
|
|
type: redactions[0].HINT ? 'hint' : redactions[0].typeLabel,
|
|
},
|
|
icon: PIN_ICON,
|
|
value: RemoveRedactionOptions.ONLY_HERE,
|
|
});
|
|
}
|
|
if (permissions.canRemoveFromDictionary) {
|
|
options.push({
|
|
label: isBulk ? translations.IN_DOSSIER.labelBulk : translations.IN_DOSSIER.label,
|
|
description: isBulk ? translations.IN_DOSSIER.descriptionBulk : translations.IN_DOSSIER.description,
|
|
descriptionParams: { value: redactions[0].value, type: redactions[0].HINT ? 'hint' : redactions[0].typeLabel },
|
|
icon: FOLDER_ICON,
|
|
value: RemoveRedactionOptions.IN_DOSSIER,
|
|
extraOption: !isDocumine
|
|
? {
|
|
label: translations.IN_DOSSIER.extraOptionLabel,
|
|
checked: redactions[0].isRecommendation && applyToAllDossiers,
|
|
hidden: !isApprover,
|
|
}
|
|
: null,
|
|
});
|
|
}
|
|
if (permissions.canMarkAsFalsePositive) {
|
|
if (redactions[0].isRecommendation) {
|
|
options.push({
|
|
label: translations.DO_NOT_RECOMMEND.label,
|
|
description: isBulk ? translations.DO_NOT_RECOMMEND.descriptionBulk : translations.DO_NOT_RECOMMEND.description,
|
|
descriptionParams: {
|
|
value: redactions[0].value,
|
|
type: redactions[0].typeLabel,
|
|
context: falsePositiveContext[0],
|
|
},
|
|
icon: FOLDER_ICON,
|
|
value: RemoveRedactionOptions.DO_NOT_RECOMMEND,
|
|
extraOption: !isDocumine
|
|
? {
|
|
label: translations.DO_NOT_RECOMMEND.extraOptionLabel,
|
|
checked: applyToAllDossiers,
|
|
hidden: !isApprover,
|
|
}
|
|
: null,
|
|
});
|
|
} else {
|
|
options.push({
|
|
label: translations.FALSE_POSITIVE.label,
|
|
description: isBulk ? translations.FALSE_POSITIVE.descriptionBulk : translations.FALSE_POSITIVE.description,
|
|
descriptionParams: {
|
|
value: redactions[0].value,
|
|
type: redactions[0].typeLabel,
|
|
context: falsePositiveContext[0],
|
|
},
|
|
icon: REMOVE_FROM_DICT_ICON,
|
|
value: RemoveRedactionOptions.FALSE_POSITIVE,
|
|
extraOption: !isDocumine
|
|
? {
|
|
label: translations.FALSE_POSITIVE.extraOptionLabel,
|
|
checked: false,
|
|
hidden: !isApprover,
|
|
description: translations.FALSE_POSITIVE.extraOptionDescription,
|
|
}
|
|
: null,
|
|
});
|
|
}
|
|
}
|
|
return options;
|
|
};
|