From 33877a1fc57c5771c99b67adeac41a694b32b395 Mon Sep 17 00:00:00 2001 From: Sidney Alcantara Date: Mon, 30 May 2022 13:26:57 +1000 Subject: [PATCH] improve HiddenFields state ui --- src/components/IconSlash.tsx | 41 +++++++++++++++++ src/components/Table/Column.tsx | 2 +- .../Table/ColumnHeader/ColumnHeaderSort.tsx | 45 +++++-------------- src/components/TableToolbar/HiddenFields.tsx | 35 +++++++++------ .../TableToolbar/LoadedRowsStatus.tsx | 3 +- 5 files changed, 76 insertions(+), 50 deletions(-) create mode 100644 src/components/IconSlash.tsx diff --git a/src/components/IconSlash.tsx b/src/components/IconSlash.tsx new file mode 100644 index 00000000..c82a7084 --- /dev/null +++ b/src/components/IconSlash.tsx @@ -0,0 +1,41 @@ +import { styled } from "@mui/material"; + +export const ICON_SLASH_STROKE_DASHOFFSET = 27.9; + +const StyledSvg = styled("svg")(({ theme }) => ({ + stroke: "currentColor", + strokeWidth: 2, + position: "absolute", + inset: 0, + + transition: theme.transitions.create("stroke-dashoffset", { + duration: theme.transitions.duration.short, + }), + strokeDasharray: ICON_SLASH_STROKE_DASHOFFSET, + strokeDashoffset: ICON_SLASH_STROKE_DASHOFFSET, + + "& .icon-slash-mask": { stroke: theme.palette.background.default }, +})); + +export default function IconSlash(props: React.SVGProps) { + return ( + + + + + + + ); +} diff --git a/src/components/Table/Column.tsx b/src/components/Table/Column.tsx index 11996145..71c73894 100644 --- a/src/components/Table/Column.tsx +++ b/src/components/Table/Column.tsx @@ -100,7 +100,7 @@ export default function Column({ {secondaryItem && ( - + {secondaryItem} )} diff --git a/src/components/Table/ColumnHeader/ColumnHeaderSort.tsx b/src/components/Table/ColumnHeader/ColumnHeaderSort.tsx index 481c7784..6937b461 100644 --- a/src/components/Table/ColumnHeader/ColumnHeaderSort.tsx +++ b/src/components/Table/ColumnHeader/ColumnHeaderSort.tsx @@ -2,6 +2,9 @@ import { useAtom } from "jotai"; import { Tooltip, IconButton } from "@mui/material"; import SortDescIcon from "@mui/icons-material/ArrowDownward"; +import IconSlash, { + ICON_SLASH_STROKE_DASHOFFSET, +} from "@src/components/IconSlash"; import { tableScope, tableOrdersAtom } from "@src/atoms/tableScope"; import { FieldType } from "@src/constants/fields"; @@ -50,9 +53,6 @@ export default function ColumnHeaderSort({ column }: IColumnHeaderSortProps) { color="inherit" sx={{ bgcolor: "background.default", - "& .slash-mask": { - stroke: (theme) => theme.palette.background.default, - }, "&:hover": { backgroundColor: (theme) => colord(theme.palette.background.default) @@ -63,7 +63,7 @@ export default function ColumnHeaderSort({ column }: IColumnHeaderSortProps) { .alpha(1) .toHslString(), - "& .slash-mask": { + "& .icon-slash-mask": { stroke: (theme) => colord(theme.palette.background.default) .mix( @@ -99,41 +99,18 @@ export default function ColumnHeaderSort({ column }: IColumnHeaderSortProps) { : "none", }, - "& .slash": { - transition: (theme) => - theme.transitions.create("stroke-dashoffset", { - duration: theme.transitions.duration.short, - }), - strokeDasharray: 27.9, - strokeDashoffset: currentSort === "none" ? 0 : 27.9, + "& .icon-slash": { + strokeDashoffset: + currentSort === "none" ? 0 : ICON_SLASH_STROKE_DASHOFFSET, }, - "&:hover .slash": { - strokeDashoffset: nextSort === "none" ? 0 : 27.9, + "&:hover .icon-slash": { + strokeDashoffset: + nextSort === "none" ? 0 : ICON_SLASH_STROKE_DASHOFFSET, }, }} > - - - - - - + ); diff --git a/src/components/TableToolbar/HiddenFields.tsx b/src/components/TableToolbar/HiddenFields.tsx index 2cb656a7..e2ad1427 100644 --- a/src/components/TableToolbar/HiddenFields.tsx +++ b/src/components/TableToolbar/HiddenFields.tsx @@ -3,7 +3,11 @@ import { useAtom } from "jotai"; import { isEqual } from "lodash-es"; import { AutocompleteProps } from "@mui/material"; +import VisibilityIcon from "@mui/icons-material/VisibilityOutlined"; import VisibilityOffIcon from "@mui/icons-material/VisibilityOffOutlined"; +import IconSlash, { + ICON_SLASH_STROKE_DASHOFFSET, +} from "@src/components/IconSlash"; import MultiSelect from "@rowy/multiselect"; import ButtonWithStatus from "@src/components/ButtonWithStatus"; @@ -72,8 +76,16 @@ export default function HiddenFields() { } - active={selected} + secondaryItem={ +
+ + +
+ } + // active={selected} /> ); @@ -106,10 +118,9 @@ export default function HiddenFields() { marginBottom: "-1px", "&::after": { content: "none" }, + "& .icon-container": { opacity: 0 }, "&:hover, &.Mui-focused, &.Mui-focusVisible": { - backgroundColor: "transparent", - position: "relative", zIndex: 2, @@ -119,18 +130,16 @@ export default function HiddenFields() { boxShadow: (theme: any) => `0 0 0 1px ${theme.palette.text.primary} inset`, }, - "& .hiddenIcon": { opacity: 0.5 }, + "& .icon-container": { opacity: 0.5 }, }, - '&[aria-selected="true"], &[aria-selected="true"].Mui-focused, &[aria-selected="true"].Mui-focusVisible': - { - backgroundColor: "transparent", - - position: "relative", - zIndex: 1, - - "& .hiddenIcon": { opacity: 1 }, + "&:hover .icon-slash": { strokeDashoffset: 0 }, + '&[aria-selected="true"]:hover': { + "& .icon-slash": { + strokeDashoffset: + ICON_SLASH_STROKE_DASHOFFSET + " !important", }, + }, }, }, }, diff --git a/src/components/TableToolbar/LoadedRowsStatus.tsx b/src/components/TableToolbar/LoadedRowsStatus.tsx index 76db9bda..04f619bd 100644 --- a/src/components/TableToolbar/LoadedRowsStatus.tsx +++ b/src/components/TableToolbar/LoadedRowsStatus.tsx @@ -7,7 +7,6 @@ import { tableScope, tableRowsAtom, tableNextPageAtom, - tablePageAtom, } from "@src/atoms/tableScope"; const StatusText = forwardRef(function StatusText( @@ -29,7 +28,6 @@ const StatusText = forwardRef(function StatusText( function LoadedRowsStatus() { const [tableRows] = useAtom(tableRowsAtom, tableScope); const [tableNextPage] = useAtom(tableNextPageAtom, tableScope); - const [tablePage] = useAtom(tablePageAtom, tableScope); if (tableNextPage.loading) return Loading more…; @@ -40,6 +38,7 @@ function LoadedRowsStatus() { ? "Scroll to the bottom to load more rows" : "All rows have been loaded in this table" } + describeChild > Loaded {!tableNextPage.available && "all "}