From 98d93b63a8fadb6335c8f6a17fc81d4349748a14 Mon Sep 17 00:00:00 2001 From: morance Date: Wed, 27 May 2020 16:00:29 +0800 Subject: [PATCH] feat(): clear evaluation & transform refs BRICK_STORE-1486 --- src/hook/emit.ts | 1 + src/panel/components/EvaluationsPanel.tsx | 24 ++++++++++++++- src/panel/components/Layout.tsx | 30 +++++++++++++++++-- src/panel/components/TransformationsPanel.tsx | 24 ++++++++++++++- src/panel/libs/EvaluationsContext.ts | 2 ++ src/panel/libs/TransformationsContext.ts | 2 ++ 6 files changed, 79 insertions(+), 4 deletions(-) diff --git a/src/hook/emit.ts b/src/hook/emit.ts index e3381e5..fcb78ee 100644 --- a/src/hook/emit.ts +++ b/src/hook/emit.ts @@ -6,6 +6,7 @@ export function emit(data: EmitData): void { try { const repo: any[] = []; const payload = dehydrate(data.payload, repo); + console.log(data); window.postMessage( { source: MESSAGE_SOURCE_HOOK, diff --git a/src/panel/components/EvaluationsPanel.tsx b/src/panel/components/EvaluationsPanel.tsx index 339aa80..defdc19 100644 --- a/src/panel/components/EvaluationsPanel.tsx +++ b/src/panel/components/EvaluationsPanel.tsx @@ -10,9 +10,15 @@ import classNames from "classnames"; import { PanelSelector } from "./PanelSelector"; import { useEvaluationsContext } from "../libs/EvaluationsContext"; import { PropList, PropItem } from "./PropList"; +import { Storage } from "../libs/Storage"; export function EvaluationsPanel(): React.ReactElement { - const { evaluations, setEvaluations } = useEvaluationsContext(); + const { + evaluations, + setEvaluations, + preserveLogs, + savePreserveLogs, + } = useEvaluationsContext(); const [stringWrap, setStringWrap] = React.useState(false); const [q, setQ] = React.useState(); @@ -43,6 +49,17 @@ export function EvaluationsPanel(): React.ReactElement { [] ); + const handleToggleLogs = React.useCallback( + (event: React.FormEvent) => { + savePreserveLogs((event.target as HTMLInputElement).checked); + Storage.setItem( + "preserveLogs", + (event.target as HTMLInputElement).checked + ); + }, + [] + ); + return (
+ ([]); + const [preserveLogs, savePreserveLogs] = React.useState( + Storage.getItem("preserveLogs") ?? true + ); const [transformations, setTransformations] = React.useState< Transformation[] >([]); + console.log(preserveLogs); React.useEffect(() => { function onMessage(event: MessageEvent): void { let data: DehydratedPayload; @@ -33,6 +37,12 @@ export function Layout(): React.ReactElement { ((data = event.data.payload), data?.type === "evaluation") ) { setEvaluations((prev) => prev.concat(hydrate(data.payload, data.repo))); + } else if ( + event.data?.source === MESSAGE_SOURCE_HOOK && + ((data = event.data.payload), data?.type === "locationChange") && + !(Storage.getItem("preserveLogs") ?? true) + ) { + setEvaluations([]); } } window.addEventListener("message", onMessage); @@ -49,6 +59,12 @@ export function Layout(): React.ReactElement { setTransformations((prev) => prev.concat(hydrate(data.payload, data.repo)) ); + } else if ( + event.data?.source === MESSAGE_SOURCE_HOOK && + ((data = event.data.payload), data?.type === "locationChange") && + !(Storage.getItem("preserveLogs") ?? true) + ) { + setTransformations([]); } } window.addEventListener("message", onMessage); @@ -73,13 +89,23 @@ export function Layout(): React.ReactElement { > {selectedPanel === "Evaluations" ? ( ) : selectedPanel === "Transformations" ? ( diff --git a/src/panel/components/TransformationsPanel.tsx b/src/panel/components/TransformationsPanel.tsx index 45549b6..99ea12f 100644 --- a/src/panel/components/TransformationsPanel.tsx +++ b/src/panel/components/TransformationsPanel.tsx @@ -4,9 +4,15 @@ import classNames from "classnames"; import { PanelSelector } from "./PanelSelector"; import { useTransformationsContext } from "../libs/TransformationsContext"; import { PropItem } from "./PropList"; +import { Storage } from "../libs/Storage"; export function TransformationsPanel(): React.ReactElement { - const { transformations, setTransformations } = useTransformationsContext(); + const { + transformations, + setTransformations, + preserveLogs, + savePreserveLogs, + } = useTransformationsContext(); const [stringWrap, setStringWrap] = React.useState(false); const handleClear = React.useCallback(() => { @@ -20,6 +26,17 @@ export function TransformationsPanel(): React.ReactElement { [] ); + const handleToggleLogs = React.useCallback( + (event: React.FormEvent) => { + savePreserveLogs((event.target as HTMLInputElement).checked); + Storage.setItem( + "preserveLogs", + (event.target as HTMLInputElement).checked + ); + }, + [] + ); + return (
+ >; + preserveLogs?: boolean; + savePreserveLogs?: React.Dispatch>; } export const EvaluationsContext = React.createContext({}); diff --git a/src/panel/libs/TransformationsContext.ts b/src/panel/libs/TransformationsContext.ts index ad996cb..f9ddba4 100644 --- a/src/panel/libs/TransformationsContext.ts +++ b/src/panel/libs/TransformationsContext.ts @@ -4,6 +4,8 @@ import { Transformation } from "../../shared/interfaces"; export interface ContextOfTransformations { transformations?: Transformation[]; setTransformations?: React.Dispatch>; + preserveLogs?: boolean; + savePreserveLogs?: React.Dispatch>; } export const TransformationsContext = React.createContext<