From c91b298ea19e7c52087a2140c9d747ce1223522e Mon Sep 17 00:00:00 2001 From: Lars Reimann Date: Thu, 22 Jul 2021 20:34:04 +0200 Subject: [PATCH 1/2] fix: revive enum annotations --- .../Dialog/ImportAnnotationFileDialog.tsx | 18 ++++++++++++++---- .../src/model/annotation/AnnotationStore.tsx | 4 ++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/client/src/Components/Dialog/ImportAnnotationFileDialog.tsx b/client/src/Components/Dialog/ImportAnnotationFileDialog.tsx index 62edfa46b..58e3d3b10 100644 --- a/client/src/Components/Dialog/ImportAnnotationFileDialog.tsx +++ b/client/src/Components/Dialog/ImportAnnotationFileDialog.tsx @@ -1,11 +1,13 @@ import React, {useState} from "react"; import {Button, Form, Modal} from "react-bootstrap"; +import EnumPair from "../../model/EnumPair"; +import PythonEnum from "../../model/python/PythonEnum"; import {Setter} from "../../util/types"; import "../SelectionView/SelectionView.css"; import Dropzone from 'react-dropzone'; import {isValidJsonFile} from "../../util/validation"; import DialogCSS from "./dialog.module.css"; -import AnnotationStore from "../../model/annotation/AnnotationStore"; +import AnnotationStore, {AnnotationJson} from "../../model/annotation/AnnotationStore"; interface ImportAnnotationFileDialogProps { isVisible: boolean @@ -38,9 +40,17 @@ export default function ImportAnnotationFileDialog(props: ImportAnnotationFileDi const reader = new FileReader(); reader.onload = () => { if (typeof reader.result === 'string') { - const readAnnotationJson = JSON.parse(reader.result); - readAnnotationJson["renamings"] = new Map(Object.entries(readAnnotationJson["renamings"])); - readAnnotationJson["enums"] = new Map(Object.entries(readAnnotationJson["enums"])); + const readAnnotationJson = JSON.parse(reader.result) as AnnotationJson; + + readAnnotationJson.renamings = new Map(Object.entries(readAnnotationJson.renamings)); + + const enumEntries: [string, PythonEnum][] = Object.entries(readAnnotationJson.enums); + readAnnotationJson.enums = new Map(enumEntries + .map(([key, value]) => [key, new PythonEnum( + value.enumName, + value.enumPairs.map(pair => new EnumPair(pair.key, pair.value)) + )])); + setNewAnnotationStore(AnnotationStore.fromJson(readAnnotationJson)); } }; diff --git a/client/src/model/annotation/AnnotationStore.tsx b/client/src/model/annotation/AnnotationStore.tsx index 6d0862883..8b880331a 100644 --- a/client/src/model/annotation/AnnotationStore.tsx +++ b/client/src/model/annotation/AnnotationStore.tsx @@ -3,7 +3,7 @@ import {Nullable} from "../../util/types"; import PythonDeclaration from "../python/PythonDeclaration"; import PythonEnum from "../python/PythonEnum"; -interface annotationsJson { +export interface AnnotationJson { // These are deliberately normal ES6 maps renamings: Map, enums: Map @@ -74,7 +74,7 @@ export default class AnnotationStore { a.click(); } - static fromJson(annotations: annotationsJson): AnnotationStore { + static fromJson(annotations: AnnotationJson): AnnotationStore { return new AnnotationStore( Immutable.Map(annotations.renamings), Immutable.Map(annotations.enums) From 4bfb79b202bb98655aef58c63ac3d653bd0790de Mon Sep 17 00:00:00 2001 From: Lars Reimann Date: Thu, 22 Jul 2021 20:41:22 +0200 Subject: [PATCH 2/2] fix: imports --- .../MenuDialogs/ImportAnnotationFileDialog.tsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/client/src/Components/Dialogs/MenuDialogs/ImportAnnotationFileDialog.tsx b/client/src/Components/Dialogs/MenuDialogs/ImportAnnotationFileDialog.tsx index 58e3d3b10..8a0bd2514 100644 --- a/client/src/Components/Dialogs/MenuDialogs/ImportAnnotationFileDialog.tsx +++ b/client/src/Components/Dialogs/MenuDialogs/ImportAnnotationFileDialog.tsx @@ -1,13 +1,13 @@ import React, {useState} from "react"; import {Button, Form, Modal} from "react-bootstrap"; -import EnumPair from "../../model/EnumPair"; -import PythonEnum from "../../model/python/PythonEnum"; -import {Setter} from "../../util/types"; -import "../SelectionView/SelectionView.css"; import Dropzone from 'react-dropzone'; -import {isValidJsonFile} from "../../util/validation"; -import DialogCSS from "./dialog.module.css"; -import AnnotationStore, {AnnotationJson} from "../../model/annotation/AnnotationStore"; +import AnnotationStore, {AnnotationJson} from "../../../model/annotation/AnnotationStore"; +import EnumPair from "../../../model/EnumPair"; +import PythonEnum from "../../../model/python/PythonEnum"; +import {Setter} from "../../../util/types"; +import {isValidJsonFile} from "../../../util/validation"; +import "../../SelectionView/SelectionView.css"; +import DialogCSS from "../dialogs.module.css"; interface ImportAnnotationFileDialogProps { isVisible: boolean