From 621dc9b53f8d0b13c4f1175bdae6c35053d9f524 Mon Sep 17 00:00:00 2001 From: Eric NGUYEN Date: Mon, 17 Oct 2022 16:13:34 +0200 Subject: [PATCH] Deprecate GetCircularReplacer and make GetCircularReplacer dotnet by default. Format of the save is now incompatible with old versions. --- public/workers/worker.js | 6 ++-- src/Components/API/api.ts | 4 +-- src/Components/Messages/Messages.tsx | 2 +- src/Components/UI/UseWorker.tsx | 4 +-- src/utils/default.ts | 2 +- src/utils/saveload.ts | 44 ++++++---------------------- 6 files changed, 19 insertions(+), 43 deletions(-) diff --git a/public/workers/worker.js b/public/workers/worker.js index 11246a0..a933fc2 100644 --- a/public/workers/worker.js +++ b/public/workers/worker.js @@ -10,11 +10,13 @@ const getCircularReplacer = () => { } if (key === 'containers') { - return Array.from(value.entries()); + return [...value.entries()] + .map(([Key, Value]) => ({ Key, Value })); } if (key === 'symbols') { - return Array.from(value.entries()); + return [...value.entries()] + .map(([Key, Value]) => ({ Key, Value })); } if (key === 'linkedContainers') { diff --git a/src/Components/API/api.ts b/src/Components/API/api.ts index 6d5ac3b..fd91133 100644 --- a/src/Components/API/api.ts +++ b/src/Components/API/api.ts @@ -1,7 +1,7 @@ import { IConfiguration } from '../../Interfaces/IConfiguration'; import { ISetContainerListRequest } from '../../Interfaces/ISetContainerListRequest'; import { ISetContainerListResponse } from '../../Interfaces/ISetContainerListResponse'; -import { GetCircularReplacerToDotnet } from '../../utils/saveload'; +import { GetCircularReplacer } from '../../utils/saveload'; /** * Fetch the configuration from the API @@ -35,7 +35,7 @@ export async function FetchConfiguration(): Promise { export async function SetContainerList(request: ISetContainerListRequest, configurationUrl?: string): Promise { const url = configurationUrl ?? import.meta.env.VITE_API_SET_CONTAINER_LIST_URL; - const dataParsed = JSON.stringify(request, GetCircularReplacerToDotnet()); + const dataParsed = JSON.stringify(request, GetCircularReplacer()); // The test library cannot use the Fetch API // @ts-expect-error // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions diff --git a/src/Components/Messages/Messages.tsx b/src/Components/Messages/Messages.tsx index 9e04670..4fe95ce 100644 --- a/src/Components/Messages/Messages.tsx +++ b/src/Components/Messages/Messages.tsx @@ -5,7 +5,7 @@ import { MessageType } from '../../Enums/MessageType'; import { IHistoryState } from '../../Interfaces/IHistoryState'; import { IMessage } from '../../Interfaces/IMessage'; import { DISABLE_API } from '../../utils/default'; -import { GetCircularReplacerToDotnet } from '../../utils/saveload'; +import { GetCircularReplacer } from '../../utils/saveload'; import { TITLE_BAR_HEIGHT } from '../Sidebar/Sidebar'; interface IMessagesProps { diff --git a/src/Components/UI/UseWorker.tsx b/src/Components/UI/UseWorker.tsx index 7a6a8f0..c231f07 100644 --- a/src/Components/UI/UseWorker.tsx +++ b/src/Components/UI/UseWorker.tsx @@ -3,7 +3,7 @@ import { IHistoryState } from '../../Interfaces/IHistoryState'; import { IGetFeedbackRequest } from '../../Interfaces/IGetFeedbackRequest'; import { IGetFeedbackResponse } from '../../Interfaces/IGetFeedbackResponse'; import { IMessage } from '../../Interfaces/IMessage'; -import { GetCircularReplacerToDotnet } from '../../utils/saveload'; +import { GetCircularReplacer } from '../../utils/saveload'; // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions const myWorker = window.Worker && new Worker('workers/message_worker.js'); @@ -38,7 +38,7 @@ export function UseAsync( // eslint-disable-next-line @typescript-eslint/naming-convention ApplicationState: state }; - const dataParsed = JSON.stringify(request, GetCircularReplacerToDotnet()); + const dataParsed = JSON.stringify(request, GetCircularReplacer()); fetch(import.meta.env.VITE_API_GET_FEEDBACK_URL, { method: 'POST', headers: new Headers({ diff --git a/src/utils/default.ts b/src/utils/default.ts index 253610b..1264b95 100644 --- a/src/utils/default.ts +++ b/src/utils/default.ts @@ -12,7 +12,7 @@ import { Position } from '../Enums/Position'; /// EDITOR DEFAULTS /// /** Enable fast boot and disable main menu (default = false) */ -export const FAST_BOOT = true; +export const FAST_BOOT = false; /** Disable any call to the API (default = false) */ export const DISABLE_API = false; diff --git a/src/utils/saveload.ts b/src/utils/saveload.ts index ed1f57c..5033fab 100644 --- a/src/utils/saveload.ts +++ b/src/utils/saveload.ts @@ -1,6 +1,8 @@ +/* eslint-disable @typescript-eslint/naming-convention */ import { FindContainerById, MakeDFSIterator } from './itertools'; import { IEditorState } from '../Interfaces/IEditorState'; import { IHistoryState } from '../Interfaces/IHistoryState'; +import { IContainerModel } from '../Interfaces/IContainerModel'; /** * Revive the Editor state @@ -32,7 +34,9 @@ export function ReviveState(state: IHistoryState): void { for (const symbol of state.symbols.values()) { symbol.linkedContainers = new Set(symbol.linkedContainers); } - state.containers = new Map(state.containers); + + const containers: Array<{ Key: string, Value: IContainerModel }> = (state.containers) as any; + state.containers = new Map(containers.map(({ Key, Value }: {Key: string, Value: IContainerModel}) => [Key, Value])); const root = FindContainerById(state.containers, state.mainContainer); @@ -64,43 +68,13 @@ export function GetCircularReplacer(): (key: any, value: object | Map).entries()); + return [...(value as Map).entries()] + .map(([Key, Value]: [string, any]) => ({ Key, Value })); } if (key === 'symbols') { - return Array.from((value as Map).entries()); - } - - if (key === 'linkedContainers') { - return Array.from(value as Set); - } - - return value; - }; -} - -export function GetCircularReplacerToDotnet(): (key: any, value: object | Map | null) => object | null | undefined { - return (key: any, value: object | null) => { - if (key === 'parent') { - return; - } - - if (key === 'containers') { - return [...(value as Map).entries()].map((keyPair: [string, any]) => { - return { - Key: keyPair[0], - Value: keyPair[1] - }; - }); - } - - if (key === 'symbols') { - return [...(value as Map).entries()].map((keyPair: [string, any]) => { - return { - Key: keyPair[0], - Value: keyPair[1] - }; - }); + return [...(value as Map).entries()] + .map(([Key, Value]: [string, any]) => ({ Key, Value })); } if (key === 'linkedContainers') {