|
|
|
|
@@ -117,9 +117,10 @@ async function prepare(root: string, files: ProjectFile[], rules: ProjectRule[],
|
|
|
|
|
for (const file of files) {
|
|
|
|
|
const data = await fs.readFile(file.absPath);
|
|
|
|
|
const hash = digest(data);
|
|
|
|
|
const recheckCommentAuthors = entityTypes.includes("PERSON") && file.kind === "document"
|
|
|
|
|
&& extname(file.relPath).toLowerCase() === ".docx" && !latest?.commentAuthorCoverage;
|
|
|
|
|
if (!recheckCommentAuthors && previousDirectory && previousOutputs.has(file.relPath)
|
|
|
|
|
const recheckWordReviews = entityTypes.includes("PERSON") && file.kind === "document"
|
|
|
|
|
&& extname(file.relPath).toLowerCase() === ".docx"
|
|
|
|
|
&& (!latest?.commentAuthorCoverage || !latest?.reviewAuthorCoverage);
|
|
|
|
|
if (!recheckWordReviews && previousDirectory && previousOutputs.has(file.relPath)
|
|
|
|
|
&& await matchesPreviousOutput(previousDirectory, file.relPath, hash)) {
|
|
|
|
|
retained.push({ file, hash });
|
|
|
|
|
continue;
|
|
|
|
|
@@ -291,6 +292,7 @@ function HitReview(props: { root: string; rules: ProjectRule[]; whitelist: Proje
|
|
|
|
|
run.mapping = mappingForSelection(props.preview.mapping, props.preview.previousMapping,
|
|
|
|
|
acceptedHits, activeMerges);
|
|
|
|
|
run.commentAuthorCoverage = props.preview.entityTypes.includes("PERSON");
|
|
|
|
|
run.reviewAuthorCoverage = props.preview.entityTypes.includes("PERSON");
|
|
|
|
|
run.matchModes = props.preview.matchModes;
|
|
|
|
|
run.sourceInPlace = props.preview.sourceInPlace || inPlace;
|
|
|
|
|
const usedPaths = new Set<string>();
|
|
|
|
|
@@ -432,7 +434,8 @@ function HitReview(props: { root: string; rules: ProjectRule[]; whitelist: Proje
|
|
|
|
|
tintColor: selectedGroups.has(group.key) ? Color.Green : Color.SecondaryText }}
|
|
|
|
|
title={group.original} subtitle={`→ ${group.placeholder}`}
|
|
|
|
|
accessories={[{ text: `${group.hits.length} Vorkommen` },
|
|
|
|
|
...(group.hits.some((hit) => hit.source === "Kommentarautor") ? [{ text: "Word-Kommentator" }] : [])]}
|
|
|
|
|
...(group.hits.some((hit) => hit.source === "Kommentarautor") ? [{ text: "Word-Kommentator" }] : []),
|
|
|
|
|
...(group.hits.some((hit) => hit.source === "Änderungsautor") ? [{ text: "Word-Bearbeiter" }] : [])]}
|
|
|
|
|
keywords={[type, labelForType(type)]}
|
|
|
|
|
actions={<ActionPanel>
|
|
|
|
|
<Action title={selectedGroups.has(group.key) ? "Zuordnung abwählen" : "Zuordnung auswählen"}
|
|
|
|
|
@@ -583,7 +586,7 @@ export default function Command() {
|
|
|
|
|
onChange={setRules} placeholder={"BEGRIFF: KundenSuite\nPERSON: Max Mustermann"}
|
|
|
|
|
info="Ein Begriff pro Zeile. Ohne Typ wird BEGRIFF verwendet. Diese Regeln werden nur für dieses Projekt gespeichert und bei der Velum-Anfrage mitgesendet." />
|
|
|
|
|
<Form.TagPicker id="entityTypes" title="Kategorien pseudonymisieren" value={selectedTypes}
|
|
|
|
|
onChange={setSelectedTypes} info="Die Auswahl wird beim Prüfen für diesen Projektordner gespeichert. Word-Kommentatoren werden nur mit der Kategorie Personen maskiert. Bei neuen Projekten sind Orte zunächst abgewählt.">
|
|
|
|
|
onChange={setSelectedTypes} info="Die Auswahl wird beim Prüfen für diesen Projektordner gespeichert. Word-Kommentatoren und Bearbeiter von Änderungen werden mit der Kategorie Personen maskiert. Bei neuen Projekten sind Orte zunächst abgewählt.">
|
|
|
|
|
{availableTypes.map((type) => <Form.TagPicker.Item key={type} value={type} title={labelForType(type)} />)}
|
|
|
|
|
</Form.TagPicker>
|
|
|
|
|
<Form.Description title="Projekt-Whitelist" text={`${whitelist.length} Begriffe werden bei diesem Ordner nicht mehr vorgeschlagen. Über die Aktionen kannst du sie wieder freigeben.`} />
|
|
|
|
|
|