diff --git a/README.md b/README.md index 67d8487..135fd57 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ npm install npm start ``` -Follow [Official Tutorial](https://developer.chrome.com/extensions/getstarted), when loading unpacked extension, choose the `brick-next-devtools/extension` directory. +Follow [official tutorial](https://developer.chrome.com/extensions/getstarted), when loading unpacked extension, choose the `brick-next-devtools/extension` directory. ## Testing @@ -32,7 +32,7 @@ npm test src/some-file.spec.ts -- --watch To test a specified file and collect coverage from related files only: ``` -npm test src/some-file.spec.ts -- no-collect-coverage-from +npm test src/some-file.spec.ts -- --no-collect-coverage-from ``` ## Publish diff --git a/src/components/BricksPanel.tsx b/src/components/BricksPanel.tsx new file mode 100644 index 0000000..b496389 --- /dev/null +++ b/src/components/BricksPanel.tsx @@ -0,0 +1,49 @@ +import React from "react"; +import { TreeWrapper } from "./TreeWrapper"; +import { SelectedBrickWrapper } from "./SelectedBrickWrapper"; +import { BrickTreeContext } from "../libs/BrickTreeContext"; +import { BrickData, BricksByMountPoint } from "../libs/interfaces"; +import { SelectedBrickContext } from "../libs/SelectedBrickContext"; +import { CollapsedBrickIdsContext } from "../libs/CollapsedBrickIdsContext"; +import { ShowFullNameContext } from "../libs/ShowFullNameContext"; + +export function BricksPanel(): React.ReactElement { + const [tree, setTree] = React.useState(); + const [collapsedBrickIds, setCollapsedBrickIds] = React.useState( + [] + ); + const [showFullName, setShowFullName] = React.useState(false); + const [selectedBrick, setSelectedBrick] = React.useState(); + + return ( +
+ + + + + + + + + + +
+ ); +} diff --git a/src/components/EvaluationsPanel.tsx b/src/components/EvaluationsPanel.tsx new file mode 100644 index 0000000..9f232c4 --- /dev/null +++ b/src/components/EvaluationsPanel.tsx @@ -0,0 +1,69 @@ +import React from "react"; +import { PanelSelector } from "./PanelSelector"; +import { PropTree, StandaloneValue } from "./PropTree"; + +export function EvaluationsPanel(): React.ReactElement { + return ( +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + +
ExpressionContextResult
+ + {/* {'"'} + {'<% EVENT.detail %>'} + {'"'} */} + + + + +
+ + + + + +
+
+
+ ); +} diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index a8d6479..0e3e472 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -1,21 +1,14 @@ import React from "react"; import classNames from "classnames"; -import { TreeWrapper } from "./TreeWrapper"; -import { SelectedBrickWrapper } from "./SelectedBrickWrapper"; -import { BrickTreeContext } from "../libs/BrickTreeContext"; -import { BrickData, BricksByMountPoint } from "../libs/interfaces"; -import { SelectedBrickContext } from "../libs/SelectedBrickContext"; import { BrowserThemeContext } from "../libs/BrowserThemeContext"; -import { CollapsedBrickIdsContext } from "../libs/CollapsedBrickIdsContext"; -import { ShowFullNameContext } from "../libs/ShowFullNameContext"; +import { BricksPanel } from "./BricksPanel"; +import { SelectedPanelContext } from "../libs/SelectedPanelContext"; +import { EvaluationsPanel } from "./EvaluationsPanel"; +import { TransformationsPanel } from "./TransformationsPanel"; export function Layout(): React.ReactElement { - const [tree, setTree] = React.useState(); - const [collapsedBrickIds, setCollapsedBrickIds] = React.useState( - [] - ); - const [showFullName, setShowFullName] = React.useState(false); - const [selectedBrick, setSelectedBrick] = React.useState(); + const [selectedPanel, setSelectedPanel] = React.useState("Bricks"); + const theme = chrome.devtools.panels.themeName === "dark" ? "dark" : "light"; return ( @@ -25,33 +18,17 @@ export function Layout(): React.ReactElement { })} > - - - - - - - - - - + {selectedPanel === "Evaluations" ? ( + + ) : selectedPanel === "Transformations" ? ( + + ) : ( + + )} + ); diff --git a/src/components/PanelSelector.tsx b/src/components/PanelSelector.tsx new file mode 100644 index 0000000..3eacdef --- /dev/null +++ b/src/components/PanelSelector.tsx @@ -0,0 +1,24 @@ +import React from "react"; +import { HTMLSelect } from "@blueprintjs/core"; +import { useSelectedPanelContext } from "../libs/SelectedPanelContext"; + +export function PanelSelector(): React.ReactElement { + const { selectedPanel, setSelectedPanel } = useSelectedPanelContext(); + + const handleChange = (event: React.ChangeEvent): void => { + setSelectedPanel(event.target.value); + }; + + return ( +
+ { + + } +
+ ); +} diff --git a/src/components/PropTree.tsx b/src/components/PropTree.tsx index 3033d36..b083395 100644 --- a/src/components/PropTree.tsx +++ b/src/components/PropTree.tsx @@ -64,6 +64,33 @@ export function PropItem({ ); } +export function StandaloneValue({ value }: { value: any }): React.ReactElement { + const [expanded, setExpanded] = React.useState(false); + + const handleClick = React.useCallback(() => { + setExpanded(!expanded); + }, [expanded]); + + const hasChildren = isObject(value); + + return ( +
+
+ {hasChildren && ( + + )} + + + +
+ {isObject(value) && expanded && } +
+ ); +} + interface ValueStringifyProps { value: any; expanded?: boolean; diff --git a/src/components/TransformationsPanel.tsx b/src/components/TransformationsPanel.tsx new file mode 100644 index 0000000..4dae1a7 --- /dev/null +++ b/src/components/TransformationsPanel.tsx @@ -0,0 +1,13 @@ +import React from "react"; +import { PanelSelector } from "./PanelSelector"; + +export function TransformationsPanel(): React.ReactElement { + return ( +
+
+ +
+
TransformationsPanel
+
+ ); +} diff --git a/src/components/TreeToolbar.tsx b/src/components/TreeToolbar.tsx index d9ba500..063688e 100644 --- a/src/components/TreeToolbar.tsx +++ b/src/components/TreeToolbar.tsx @@ -6,6 +6,7 @@ import { useSelectedBrickContext } from "../libs/SelectedBrickContext"; import { BricksByMountPoint } from "../libs/interfaces"; import { useCollapsedBrickIdsContext } from "../libs/CollapsedBrickIdsContext"; import { useShowFullNameContext } from "../libs/ShowFullNameContext"; +import { PanelSelector } from "./PanelSelector"; export function TreeToolbar(): React.ReactElement { const { setTree } = useBrickTreeContext(); @@ -55,6 +56,7 @@ export function TreeToolbar(): React.ReactElement { return (
+