diff --git a/src/pages/Scenes/ExpanderCard.tsx b/src/pages/Scenes/ExpanderCard.tsx new file mode 100644 index 00000000..03a23366 --- /dev/null +++ b/src/pages/Scenes/ExpanderCard.tsx @@ -0,0 +1,98 @@ +import { useState } from 'react' +import Box from '@mui/material/Box' +import { + Card, + Collapse, + IconButton, + IconButtonProps, + styled, + Typography, + useTheme +} from '@mui/material' +import useStore from '../../store/useStore' +import ExpandMoreIcon from '@mui/icons-material/ExpandMore' + +interface ExpandMoreProps extends IconButtonProps { + expand: boolean +} + +const ExpandMore = styled((props: ExpandMoreProps) => { + const { expand, ...other } = props + return +})(({ theme }) => ({ + marginLeft: 'auto', + transition: theme.transitions.create('transform', { + duration: theme.transitions.duration.shortest + }), + variants: [ + { + props: ({ expand }) => !expand, + style: { + transform: 'rotate(0deg)' + } + }, + { + props: ({ expand }) => !!expand, + style: { + transform: 'rotate(180deg)' + } + } + ] +})) + +const ExpanderCard = ({ + title, + cardKey, + children +}: { + title: string + cardKey: string + children: React.ReactNode +}) => { + const theme = useTheme() + const setExpander = useStore((state) => state.setExpander) + const expander = useStore((state) => state.uiPersist.expander) + + const handleExpandClick = () => { + setExpander(cardKey, !expander[cardKey]) + } + + return ( + + + {title} + + + + + + + {children} + + + + ) +} + +export default ExpanderCard diff --git a/src/pages/Scenes/ScenesMostUsed.tsx b/src/pages/Scenes/ScenesMostUsed.tsx index 884f4ffd..41611133 100644 --- a/src/pages/Scenes/ScenesMostUsed.tsx +++ b/src/pages/Scenes/ScenesMostUsed.tsx @@ -1,14 +1,14 @@ import { useEffect } from 'react' -import Box from '@mui/material/Box' import { DataGrid, GridColDef, GridEventListener, GridRenderCellParams } from '@mui/x-data-grid' -import { Card, Typography, useMediaQuery, useTheme } from '@mui/material' +import { useMediaQuery, useTheme } from '@mui/material' import useStore from '../../store/useStore' import SceneImage from './ScenesImage' +import ExpanderCard from './ExpanderCard' export default function ScenesMostUsed({ scenes, @@ -62,78 +62,47 @@ export default function ScenesMostUsed({ ] return ( - - + c.field !== 'used') : columns} + hideFooter + // headerHeight={1} + pageSizeOptions={[5]} + disableColumnSorting={xsmallScreen} + disableColumnMenu={xsmallScreen} + disableRowSelectionOnClick + rows={Object.values(mostUsedScenes) + .filter((scene: any) => sceneBlenderFilter(scene.name)) + .map((v: any, i: number) => ({ + id: i + 1, + ...v + }))} + initialState={{ + // pagination: { + // pageSize: 100, + // }, + sorting: { + sortModel: [{ field: 'used', sort: 'desc' }] + }, + columns: { + columnVisibilityModel: { + id: false, + scene_tags: false + } + } + }} sx={{ - height: db ? 301 : 293, - width: '100%', - maxWidth: xsmallScreen ? 'unset' : '470px', - m: '0 auto' + borderColor: db ? 'transparent' : theme.palette.divider, + '&.MuiDataGrid-root .MuiDataGrid-cell:focus-within': { + outline: 'none !important' + }, + '& .MuiDataGrid-row:hover': { + cursor: 'pointer' + } }} - > - {!db && ( - - {title} - - )} - c.field !== 'used') : columns} - hideFooter - // headerHeight={1} - pageSizeOptions={[5]} - disableColumnSorting={xsmallScreen} - disableColumnMenu={xsmallScreen} - disableRowSelectionOnClick - rows={Object.values(mostUsedScenes) - .filter((scene: any) => sceneBlenderFilter(scene.name)) - .map((v: any, i: number) => ({ - id: i + 1, - ...v - }))} - initialState={{ - // pagination: { - // pageSize: 100, - // }, - sorting: { - sortModel: [{ field: 'used', sort: 'desc' }] - }, - columns: { - columnVisibilityModel: { - id: false, - scene_tags: false - } - } - }} - sx={{ - borderColor: db ? 'transparent' : theme.palette.divider, - '&.MuiDataGrid-root .MuiDataGrid-cell:focus-within': { - outline: 'none !important' - }, - '& .MuiDataGrid-row:hover': { - cursor: 'pointer' - } - }} - /> - - + /> + ) } diff --git a/src/pages/Scenes/ScenesRecent.tsx b/src/pages/Scenes/ScenesRecent.tsx index 5482b7d1..b9a357d9 100644 --- a/src/pages/Scenes/ScenesRecent.tsx +++ b/src/pages/Scenes/ScenesRecent.tsx @@ -1,17 +1,16 @@ import { useEffect, useState } from 'react' -import Box from '@mui/material/Box' import { DataGrid, GridColDef, GridEventListener, GridRenderCellParams } from '@mui/x-data-grid' -import { Card, Typography, useMediaQuery, useTheme } from '@mui/material' +import { useMediaQuery } from '@mui/material' import useStore from '../../store/useStore' import SceneImage from './ScenesImage' +import ExpanderCard from './ExpanderCard' export default function ScenesRecent({ scenes, activateScene, title }: any) { - const theme = useTheme() const recentScenes = useStore((state) => state.recentScenes) const [theScenes, setTheScenes] = useState({}) const xsmallScreen = useMediaQuery('(max-width: 475px)') @@ -57,57 +56,41 @@ export default function ScenesRecent({ scenes, activateScene, title }: any) { }, [scenes, recentScenes]) return ( - - - - {title} - - ({ - id: i + 1, - ...v - }))} - initialState={{ - // pagination: { - // pageSize: 100, - // }, - sorting: { - sortModel: [{ field: 'used', sort: 'asc' }] - }, - columns: { - columnVisibilityModel: { - id: false, - scene_tags: false - } + + ({ + id: i + 1, + ...v + }))} + initialState={{ + // pagination: { + // pageSize: 100, + // }, + sorting: { + sortModel: [{ field: 'used', sort: 'asc' }] + }, + columns: { + columnVisibilityModel: { + id: false, + scene_tags: false } - }} - sx={{ - '&.MuiDataGrid-root .MuiDataGrid-cell:focus-within': { - outline: 'none !important' - } - }} - /> - - + } + }} + sx={{ + '&.MuiDataGrid-root .MuiDataGrid-cell:focus-within': { + outline: 'none !important' + } + }} + /> + ) } diff --git a/src/store/ui-persist/storeUIpersist.tsx b/src/store/ui-persist/storeUIpersist.tsx index aacab7ea..63d42432 100644 --- a/src/store/ui-persist/storeUIpersist.tsx +++ b/src/store/ui-persist/storeUIpersist.tsx @@ -18,6 +18,10 @@ const storeUIPersist = (set: any) => ({ matrixGroups: true, pixelMode: true }, + expander: { + scenesRecent: false, + scenesMostUsed: false + } as Record, warnings: { lessPixels: true }, diff --git a/src/store/ui-persist/storeUIpersistActions.tsx b/src/store/ui-persist/storeUIpersistActions.tsx index 7b21ead1..cc8ddb76 100644 --- a/src/store/ui-persist/storeUIpersistActions.tsx +++ b/src/store/ui-persist/storeUIpersistActions.tsx @@ -55,6 +55,14 @@ const storeUIPersistActions = (set: any) => ({ }), false, 'uiPersist/setPixelGraphSettings' + ), + setExpander: (key: string, val: boolean): void => + set( + produce((state: IStore) => { + state.uiPersist.expander[key] = val + }), + false, + 'uiPersist/setExpander' ) })