From d56dd02e6eb6b798a65c1aafbdc35ea4b1d5456e Mon Sep 17 00:00:00 2001 From: Koshevarov Sergey Date: Fri, 22 Oct 2021 13:35:07 +0300 Subject: [PATCH] Add ignoring of unused drafts --- src/sdk/lsf-sdk.js | 60 +++++++++++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/src/sdk/lsf-sdk.js b/src/sdk/lsf-sdk.js index d52832be..a51e1108 100644 --- a/src/sdk/lsf-sdk.js +++ b/src/sdk/lsf-sdk.js @@ -210,38 +210,50 @@ export class LSFWrapper { let { annotationStore: cs } = this.lsf; let annotation; const activeDrafts = cs.annotations.map(a => a.draftId).filter(Boolean); + const applyDraft = (c, draft) => { + cs.selectAnnotation(c.id); + c.deserializeResults(draft.result); + c.setDraftId(draft.id); + }; if (this.task.drafts) { + const draftsByAnnotationId = {}; + const separatedDrafts = []; + for (const draft of this.task.drafts) { if (activeDrafts.includes(draft.id)) continue; - let c; - if (draft.annotation) { - // Annotation existed - add draft to existed annotation - const draftAnnotationPk = String(draft.annotation); - - c = cs.annotations.find(c => c.pk === draftAnnotationPk); - if (c) { - c.addVersions({ draft: draft.result }); - c.deleteAllRegions({ deleteReadOnly: true }); - } else { - // that shouldn't happen - console.error(`No annotation found for pk=${draftAnnotationPk}`); - continue; - } + draftsByAnnotationId[String(draft.annotation)] = draft; + } else { + separatedDrafts.push(draft); + } + } + + for (const [draftAnnotationPk, draft] of Object.entries(draftsByAnnotationId)) { + let c = cs.annotations.find(c => c.pk === draftAnnotationPk); + + if (c) { + c.addVersions({ draft: draft.result }); + c.deleteAllRegions({ deleteReadOnly: true }); + applyDraft(c, draft); } else { - // Annotation not found - create new annotation from draft - c = cs.addAnnotation({ - draft: draft.result, - userGenerate: true, - createdBy: draft.created_username, - createdAgo: draft.created_ago, - }); + // that shouldn't happen + console.error(`No annotation found for pk=${draftAnnotationPk}`); + continue; } - cs.selectAnnotation(c.id); - c.deserializeResults(draft.result); - c.setDraftId(draft.id); } + for (const draft of separatedDrafts) { + // Annotation not found - create new annotation from draft + const c = cs.addAnnotation({ + draft: draft.result, + userGenerate: true, + createdBy: draft.created_username, + createdAgo: draft.created_ago, + }); + + applyDraft(c, draft); + } + } const first = this.annotations[0];