fix: enhance flickering

This commit is contained in:
Mohamed Marrouchi 2025-05-29 07:14:10 +01:00
parent 2cfff18cb5
commit 7c4c2a2448
5 changed files with 63 additions and 70 deletions

View File

@ -1,59 +1,40 @@
/* /*
* Copyright © 2024 Hexastack. All rights reserved. * Copyright © 2025 Hexastack. All rights reserved.
* *
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms: * Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission. * 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
* 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file). * 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file).
*/ */
import React, { FC, SVGProps } from "react"; import { FC, SVGProps } from "react";
const NoDataIcon: FC<SVGProps<SVGSVGElement>> = ({ ...props }) => { const NoDataIcon: FC<SVGProps<SVGSVGElement>> = ({ width = 96, ...props }) => {
return ( return (
<svg <svg
height="150"
viewBox="0 0 184 152"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
fill="none"
width={width}
viewBox="0 0 452 257"
aria-hidden
focusable="false"
{...props} {...props}
> >
<title>No data</title> <path
<g fill="none" fillRule="evenodd"> className="no-rows-primary"
<g transform="translate(24 31.67)"> d="M348 69c-46.392 0-84 37.608-84 84s37.608 84 84 84 84-37.608 84-84-37.608-84-84-84Zm-104 84c0-57.438 46.562-104 104-104s104 46.562 104 104-46.562 104-104 104-104-46.562-104-104Z"
<ellipse />
fillOpacity=".8" <path
fill="#F5F5F7" className="no-rows-primary"
cx="67.797" d="M308.929 113.929c3.905-3.905 10.237-3.905 14.142 0l63.64 63.64c3.905 3.905 3.905 10.236 0 14.142-3.906 3.905-10.237 3.905-14.142 0l-63.64-63.64c-3.905-3.905-3.905-10.237 0-14.142Z"
cy="106.89" />
rx="67.797" <path
ry="12.668" className="no-rows-primary"
/> d="M308.929 191.711c-3.905-3.906-3.905-10.237 0-14.142l63.64-63.64c3.905-3.905 10.236-3.905 14.142 0 3.905 3.905 3.905 10.237 0 14.142l-63.64 63.64c-3.905 3.905-10.237 3.905-14.142 0Z"
<path />
d="M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z" <path
fill="#AEB8C2" className="no-rows-secondary"
/> d="M0 10C0 4.477 4.477 0 10 0h380c5.523 0 10 4.477 10 10s-4.477 10-10 10H10C4.477 20 0 15.523 0 10ZM0 59c0-5.523 4.477-10 10-10h231c5.523 0 10 4.477 10 10s-4.477 10-10 10H10C4.477 69 0 64.523 0 59ZM0 106c0-5.523 4.477-10 10-10h203c5.523 0 10 4.477 10 10s-4.477 10-10 10H10c-5.523 0-10-4.477-10-10ZM0 153c0-5.523 4.477-10 10-10h195.5c5.523 0 10 4.477 10 10s-4.477 10-10 10H10c-5.523 0-10-4.477-10-10ZM0 200c0-5.523 4.477-10 10-10h203c5.523 0 10 4.477 10 10s-4.477 10-10 10H10c-5.523 0-10-4.477-10-10ZM0 247c0-5.523 4.477-10 10-10h231c5.523 0 10 4.477 10 10s-4.477 10-10 10H10c-5.523 0-10-4.477-10-10Z"
<path />
d="M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z"
fill="url(#linearGradient-1)"
transform="translate(13.56)"
/>
<path
d="M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z"
fill="#F5F5F7"
/>
<path
d="M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z"
fill="#DCE0E6"
/>
</g>
<path
d="M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z"
fill="#DCE0E6"
/>
<g transform="translate(149.65 15.383)" fill="#FFF">
<ellipse cx="20.654" cy="3.167" rx="2.849" ry="2.815" />
<path d="M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z" />
</g>
</g>
</svg> </svg>
); );
}; };

View File

@ -1,5 +1,5 @@
/* /*
* Copyright © 2024 Hexastack. All rights reserved. * Copyright © 2025 Hexastack. All rights reserved.
* *
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms: * Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission. * 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
@ -73,6 +73,12 @@ export const DataGrid = <T extends GridValidRowModel = any>({
autoHeight={autoHeight} autoHeight={autoHeight}
disableRowSelectionOnClick={disableRowSelectionOnClick} disableRowSelectionOnClick={disableRowSelectionOnClick}
slots={slots} slots={slots}
slotProps={{
loadingOverlay: {
variant: "linear-progress",
noRowsVariant: "skeleton",
},
}}
showCellVerticalBorder={showCellVerticalBorder} showCellVerticalBorder={showCellVerticalBorder}
showColumnVerticalBorder={showColumnVerticalBorder} showColumnVerticalBorder={showColumnVerticalBorder}
sx={sx} sx={sx}

View File

@ -1,42 +1,46 @@
/* /*
* Copyright © 2024 Hexastack. All rights reserved. * Copyright © 2025 Hexastack. All rights reserved.
* *
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms: * Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission. * 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
* 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file). * 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file).
*/ */
import { Grid, Typography } from "@mui/material"; import Box from "@mui/material/Box";
import { styled } from "@mui/material/styles";
import { useTranslate } from "@/hooks/useTranslate"; import { useTranslate } from "@/hooks/useTranslate";
import NoDataIcon from "../svg/NoDataIcon"; import NoDataIcon from "../svg/NoDataIcon";
const StyledGridOverlay = styled("div")(({ theme }) => ({
display: "flex",
flexDirection: "column",
alignItems: "center",
justifyContent: "center",
height: "100%",
minHeight: "200px",
"& .no-rows-primary": {
fill: "#3D4751",
...theme.applyStyles("light", {
fill: "#AEB8C2",
}),
},
"& .no-rows-secondary": {
fill: "#1D2126",
...theme.applyStyles("light", {
fill: "#E8EAED",
}),
},
}));
export const NoDataOverlay = () => { export const NoDataOverlay = () => {
const { t } = useTranslate(); const { t } = useTranslate();
return ( return (
<Grid <StyledGridOverlay>
sx={{
display: "flex",
flexDirection: "column",
alignItems: "center",
height: "fit-content",
gap: 1,
opacity: 0.5,
paddingY: 1,
}}
>
<NoDataIcon /> <NoDataIcon />
<Grid item> <Box sx={{ mt: 2 }}>{t("label.no_data")}</Box>
<Typography </StyledGridOverlay>
style={{
color: "text.secondary",
}}
>
{t("label.no_data")}
</Typography>
</Grid>
</Grid>
); );
}; };

View File

@ -1,5 +1,5 @@
/* /*
* Copyright © 2024 Hexastack. All rights reserved. * Copyright © 2025 Hexastack. All rights reserved.
* *
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms: * Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission. * 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
@ -86,6 +86,7 @@ export const useFind = <
); );
} }
}, },
keepPreviousData: true,
...otherOptions, ...otherOptions,
}); });
const data = (ids || []) const data = (ids || [])
@ -99,7 +100,7 @@ export const useFind = <
dataGridProps: { dataGridProps: {
...dataGridPaginationProps, ...dataGridPaginationProps,
rows: data || [], rows: data || [],
loading: normalizedQuery.isLoading, loading: normalizedQuery.isLoading || normalizedQuery.isFetching,
}, },
}; };
}; };

View File

@ -1,5 +1,5 @@
/* /*
* Copyright © 2024 Hexastack. All rights reserved. * Copyright © 2025 Hexastack. All rights reserved.
* *
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms: * Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission. * 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
@ -74,6 +74,7 @@ export const useInfiniteFind = <
return result; return result;
}, },
keepPreviousData: true,
...(otherOptions || {}), ...(otherOptions || {}),
}); });