Skip to content

Commit

Permalink
feat(): clear evaluation & transform refs BRICK_STORE-1486
Browse files Browse the repository at this point in the history
  • Loading branch information
morance committed May 27, 2020
1 parent 3c284d4 commit 3b29d1f
Show file tree
Hide file tree
Showing 7 changed files with 103 additions and 6 deletions.
14 changes: 13 additions & 1 deletion src/panel/components/EvaluationsPanel.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { PropItem } from "./PropList";

jest.mock("../libs/EvaluationsContext");
const setEvaluations = jest.fn();
const savePreserveLogs = jest.fn();
(useEvaluationsContext as jest.Mock).mockReturnValue({
evaluations: [
{
Expand All @@ -29,6 +30,7 @@ const setEvaluations = jest.fn();
},
],
setEvaluations,
savePreserveLogs,
});

describe("EvaluationsPanel", () => {
Expand All @@ -44,7 +46,7 @@ describe("EvaluationsPanel", () => {
it("should toggle string-wrap", () => {
const wrapper = shallow(<EvaluationsPanel />);
expect(wrapper.hasClass("string-wrap")).toBe(false);
wrapper.find(Switch).invoke("onChange")({
wrapper.find("[label='String Wrap']").invoke("onChange")({
target: {
checked: true,
},
Expand All @@ -58,6 +60,16 @@ describe("EvaluationsPanel", () => {
expect(setEvaluations).toBeCalledWith([]);
});

it("should toggle preserveLogs", () => {
const wrapper = shallow(<EvaluationsPanel />);
wrapper.find("[label='Preserve logs']").invoke("onChange")({
target: {
checked: true,
},
} as any);
expect(savePreserveLogs).toBeCalledWith(true);
});

it("should handle filter", () => {
const wrapper = shallow(<EvaluationsPanel />);
wrapper.find(InputGroup).invoke("onChange")({
Expand Down
24 changes: 23 additions & 1 deletion src/panel/components/EvaluationsPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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<string>();

Expand Down Expand Up @@ -43,6 +49,17 @@ export function EvaluationsPanel(): React.ReactElement {
[]
);

const handleToggleLogs = React.useCallback(
(event: React.FormEvent<HTMLInputElement>) => {
savePreserveLogs((event.target as HTMLInputElement).checked);
Storage.setItem(
"preserveLogs",
(event.target as HTMLInputElement).checked
);
},
[]
);

return (
<div
className={classNames("panel evaluations-panel", {
Expand All @@ -65,6 +82,11 @@ export function EvaluationsPanel(): React.ReactElement {
/>
</div>
<div className="toolbar-group">
<Switch
checked={preserveLogs}
label="Preserve logs"
onChange={handleToggleLogs}
/>
<Switch
checked={stringWrap}
label="String Wrap"
Expand Down
29 changes: 27 additions & 2 deletions src/panel/components/Layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ export function Layout(): React.ReactElement {
Storage.getItem("selectedPanel") ?? "Bricks"
);
const [evaluations, setEvaluations] = React.useState<Evaluation[]>([]);
const [preserveLogs, savePreserveLogs] = React.useState<boolean>(
Storage.getItem("preserveLogs") ?? true
);
const [transformations, setTransformations] = React.useState<
Transformation[]
>([]);
Expand All @@ -33,6 +36,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);
Expand All @@ -49,6 +58,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);
Expand All @@ -73,13 +88,23 @@ export function Layout(): React.ReactElement {
>
{selectedPanel === "Evaluations" ? (
<EvaluationsContext.Provider
value={{ evaluations, setEvaluations }}
value={{
evaluations,
setEvaluations,
preserveLogs,
savePreserveLogs,
}}
>
<EvaluationsPanel />
</EvaluationsContext.Provider>
) : selectedPanel === "Transformations" ? (
<TransformationsContext.Provider
value={{ transformations, setTransformations }}
value={{
transformations,
setTransformations,
preserveLogs,
savePreserveLogs,
}}
>
<TransformationsPanel />
</TransformationsContext.Provider>
Expand Down
14 changes: 13 additions & 1 deletion src/panel/components/TransformationsPanel.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { useTransformationsContext } from "../libs/TransformationsContext";

jest.mock("../libs/TransformationsContext");
const setTransformations = jest.fn();
const savePreserveLogs = jest.fn();
(useTransformationsContext as jest.Mock).mockReturnValue({
transformations: [
{
Expand All @@ -21,6 +22,7 @@ const setTransformations = jest.fn();
},
],
setTransformations,
savePreserveLogs,
});

describe("TransformationsPanel", () => {
Expand All @@ -36,14 +38,24 @@ describe("TransformationsPanel", () => {
it("should toggle string-wrap", () => {
const wrapper = shallow(<TransformationsPanel />);
expect(wrapper.hasClass("string-wrap")).toBe(false);
wrapper.find(Switch).invoke("onChange")({
wrapper.find("[label='String Wrap']").invoke("onChange")({
target: {
checked: true,
},
} as any);
expect(wrapper.hasClass("string-wrap")).toBe(true);
});

it("should toggle preserveLogs", () => {
const wrapper = shallow(<TransformationsPanel />);
wrapper.find("[label='Preserve logs']").invoke("onChange")({
target: {
checked: true,
},
} as any);
expect(savePreserveLogs).toBeCalledWith(true);
});

it("should handle clear", () => {
const wrapper = shallow(<TransformationsPanel />);
wrapper.find(Button).invoke("onClick")(null);
Expand Down
24 changes: 23 additions & 1 deletion src/panel/components/TransformationsPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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(() => {
Expand All @@ -20,6 +26,17 @@ export function TransformationsPanel(): React.ReactElement {
[]
);

const handleToggleLogs = React.useCallback(
(event: React.FormEvent<HTMLInputElement>) => {
savePreserveLogs((event.target as HTMLInputElement).checked);
Storage.setItem(
"preserveLogs",
(event.target as HTMLInputElement).checked
);
},
[]
);

return (
<div
className={classNames("panel transformations-panel", {
Expand All @@ -36,6 +53,11 @@ export function TransformationsPanel(): React.ReactElement {
</ButtonGroup>
</div>
<div className="toolbar-group">
<Switch
checked={preserveLogs}
label="Preserve logs"
onChange={handleToggleLogs}
/>
<Switch
checked={stringWrap}
label="String Wrap"
Expand Down
2 changes: 2 additions & 0 deletions src/panel/libs/EvaluationsContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import { Evaluation } from "../../shared/interfaces";
export interface ContextOfEvaluations {
evaluations?: Evaluation[];
setEvaluations?: React.Dispatch<React.SetStateAction<Evaluation[]>>;
preserveLogs?: boolean;
savePreserveLogs?: React.Dispatch<React.SetStateAction<boolean>>;
}

export const EvaluationsContext = React.createContext<ContextOfEvaluations>({});
Expand Down
2 changes: 2 additions & 0 deletions src/panel/libs/TransformationsContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import { Transformation } from "../../shared/interfaces";
export interface ContextOfTransformations {
transformations?: Transformation[];
setTransformations?: React.Dispatch<React.SetStateAction<Transformation[]>>;
preserveLogs?: boolean;
savePreserveLogs?: React.Dispatch<React.SetStateAction<boolean>>;
}

export const TransformationsContext = React.createContext<
Expand Down

0 comments on commit 3b29d1f

Please sign in to comment.