diff --git a/src/components/ColumnModals/ColumnConfigModal/ColumnConfig.tsx b/src/components/ColumnModals/ColumnConfigModal/ColumnConfig.tsx index 6621cde7..9db9ce7c 100644 --- a/src/components/ColumnModals/ColumnConfigModal/ColumnConfig.tsx +++ b/src/components/ColumnModals/ColumnConfigModal/ColumnConfig.tsx @@ -83,7 +83,7 @@ export default function ColumnConfigModal({ (row._rowy_outOfOrder ? "out-of-order" : ""); export default function Table() { const [userRoles] = useAtom(userRolesAtom, globalScope); const [userSettings] = useAtom(userSettingsAtom, globalScope); + const [navPinned] = useAtom(navPinnedAtom, globalScope); const [tableId] = useAtom(tableIdAtom, tableScope); const [tableSettings] = useAtom(tableSettingsAtom, tableScope); @@ -157,15 +158,18 @@ export default function Table() { // ); }, [tableRows]) ?? []; - const rowsContainerRef = useRef(null); - const [selectedRowsSet, setSelectedRowsSet] = useState>(); - const [selectedRows, setSelectedRows] = useState([]); + // const [selectedRowsSet, setSelectedRowsSet] = useState>(); + // const [selectedRows, setSelectedRows] = useState([]); // Gets more rows when scrolled down. // https://github.com/adazzle/react-data-grid/blob/ead05032da79d7e2b86e37cdb9af27f2a4d80b90/stories/demos/AllFeatures.tsx#L60 const handleScroll = useThrottledCallback( (event: React.UIEvent) => { const target = event.target as HTMLDivElement; + + if (navPinned && !columns[0].fixed) + setShowLeftScrollDivider(target.scrollLeft > 16); + const offset = 800; const isAtBottom = target.clientHeight + target.scrollTop >= target.scrollHeight - offset; @@ -176,6 +180,8 @@ export default function Table() { 250 ); + const [showLeftScrollDivider, setShowLeftScrollDivider] = useState(false); + const rowHeight = tableSchema.rowHeight ?? DEFAULT_ROW_HEIGHT; const handleResize = useDebouncedCallback( (colIndex: number, width: number) => { @@ -191,12 +197,13 @@ export default function Table() { {/* }> */} - + + {showLeftScrollDivider &&
} + { - const newSelectedArray = newSelectedSet - ? [...newSelectedSet] - : []; - const prevSelectedRowsArray = selectedRowsSet - ? [...selectedRowsSet] - : []; - const addedSelections = difference( - newSelectedArray, - prevSelectedRowsArray - ); - const removedSelections = difference( - prevSelectedRowsArray, - newSelectedArray - ); - addedSelections.forEach((id) => { - const newRow = find(rows, { id }); - setSelectedRows([...selectedRows, newRow]); - }); - removedSelections.forEach((rowId) => { - setSelectedRows(selectedRows.filter((row) => row.id !== rowId)); - }); - setSelectedRowsSet(newSelectedSet); - }} + // selectedRows={selectedRowsSet} + // onSelectedRowsChange={(newSelectedSet) => { + // const newSelectedArray = newSelectedSet + // ? [...newSelectedSet] + // : []; + // const prevSelectedRowsArray = selectedRowsSet + // ? [...selectedRowsSet] + // : []; + // const addedSelections = difference( + // newSelectedArray, + // prevSelectedRowsArray + // ); + // const removedSelections = difference( + // prevSelectedRowsArray, + // newSelectedArray + // ); + // addedSelections.forEach((id) => { + // const newRow = find(rows, { id }); + // setSelectedRows([...selectedRows, newRow]); + // }); + // removedSelections.forEach((rowId) => { + // setSelectedRows(selectedRows.filter((row) => row.id !== rowId)); + // }); + // setSelectedRowsSet(newSelectedSet); + // }} // onRowsChange={() => { //console.log('onRowsChange',rows) // }} diff --git a/src/components/Table/TableContainer.tsx b/src/components/Table/TableContainer.tsx index 7b939a0c..d7ee23d8 100644 --- a/src/components/Table/TableContainer.tsx +++ b/src/components/Table/TableContainer.tsx @@ -17,6 +17,20 @@ export const TableContainer = styled("div", { flexDirection: "column", height: `calc(100vh - ${APP_BAR_HEIGHT}px - ${TABLE_TOOLBAR_HEIGHT}px)`, + "& .left-scroll-divider": { + position: "absolute", + top: 0, + bottom: 0, + left: 0, + width: 1, + zIndex: 1, + + backgroundColor: colord(theme.palette.background.paper) + .mix(theme.palette.divider, 0.12) + .alpha(1) + .toHslString(), + }, + "& > .rdg": { // FIXME: // width: `calc(100% - ${DRAWER_COLLAPSED_WIDTH}px)`, diff --git a/src/layouts/Navigation/NavDrawer.tsx b/src/layouts/Navigation/NavDrawer.tsx index 88ddc78a..c88006df 100644 --- a/src/layouts/Navigation/NavDrawer.tsx +++ b/src/layouts/Navigation/NavDrawer.tsx @@ -43,6 +43,7 @@ export interface INavDrawerProps extends DrawerProps { pinned: boolean; setPinned: React.Dispatch>; canPin: boolean; + scrollTrigger: boolean; } export default function NavDrawer({ @@ -50,6 +51,7 @@ export default function NavDrawer({ pinned, setPinned, canPin, + scrollTrigger, ...props }: INavDrawerProps) { const [tables] = useAtom(tablesAtom, globalScope); @@ -96,6 +98,7 @@ export default function NavDrawer({ "& .MuiDrawer-paper": { minWidth: NAV_DRAWER_WIDTH, + borderRight: "none", bgcolor: pinned ? "background.default" : "background.paper", }, }} @@ -111,8 +114,44 @@ export default function NavDrawer({ position: "sticky", top: 0, zIndex: "appBar", - backgroundColor: "inherit", - backgroundImage: "inherit", + backgroundColor: + pinned && scrollTrigger ? "background.paper" : "inherit", + backgroundImage: pinned + ? "linear-gradient(rgba(255, 255, 255, 0.09), rgba(255, 255, 255, 0.09))" // Elevation 8 + : "inherit", + + "&::before": { + content: "''", + display: "block", + position: "absolute", + inset: 0, + + bgcolor: "background.default", + opacity: pinned ? (scrollTrigger ? 0 : 1) : 0, + transition: (theme) => + theme.transitions.create("opacity", { + easing: + canPin && pinned + ? theme.transitions.easing.easeOut + : theme.transitions.easing.sharp, + duration: + canPin && pinned + ? theme.transitions.duration.enteringScreen + : theme.transitions.duration.leavingScreen, + }), + }, + boxShadow: pinned && scrollTrigger ? 1 : 0, + transition: (theme) => + theme.transitions.create(["background-color", "box-shadow"], { + easing: + canPin && pinned + ? theme.transitions.easing.easeOut + : theme.transitions.easing.sharp, + duration: + canPin && pinned + ? theme.transitions.duration.enteringScreen + : theme.transitions.duration.leavingScreen, + }), }} > - + {canPin && (