fix: logs viewer do not scroll after opened

This commit is contained in:
jialin
2024-10-22 15:36:53 +08:00
parent a0a1b8b3e8
commit 902bb06353
7 changed files with 80 additions and 18 deletions
+31 -10
View File
@@ -15,10 +15,16 @@ interface LogsViewerProps {
}
const LogsViewer: React.FC<LogsViewerProps> = (props) => {
const { height, url } = props;
const { initialize, updateScrollerPosition, scrollEventElement } =
useOverlayScroller({
theme: 'os-theme-light'
});
const {
initialize,
updateScrollerPosition,
generateInstance,
scrollEventElement,
instance,
initialized
} = useOverlayScroller({
theme: 'os-theme-light'
});
const { isClean, parseAnsi } = useParseAnsi();
const { setChunkFetch } = useSetChunkFetch();
const chunkRequedtRef = useRef<any>(null);
@@ -62,11 +68,12 @@ const LogsViewer: React.FC<LogsViewerProps> = (props) => {
const debounceResetStopScroll = _.debounce(() => {
stopScroll.current = false;
}, 30000);
const handleOnWheel = useCallback(
(e: any) => {
const scrollTop = scrollEventElement.scrollTop;
const scrollHeight = scrollEventElement.scrollHeight;
const clientHeight = scrollEventElement.clientHeight;
const scrollTop = scrollEventElement?.scrollTop;
const scrollHeight = scrollEventElement?.scrollHeight;
const clientHeight = scrollEventElement?.clientHeight;
if (scrollTop + clientHeight >= scrollHeight) {
stopScroll.current = false;
} else {
@@ -74,9 +81,14 @@ const LogsViewer: React.FC<LogsViewerProps> = (props) => {
}
debounceResetStopScroll();
},
[debounceResetStopScroll]
[debounceResetStopScroll, scrollEventElement]
);
const debounceUpdateScrollerPosition = _.debounce(() => {
generateInstance();
updateScrollerPosition(0);
}, 200);
useEffect(() => {
createChunkConnection();
return () => {
@@ -91,10 +103,19 @@ const LogsViewer: React.FC<LogsViewerProps> = (props) => {
}, [scroller.current, initialize]);
useEffect(() => {
if (logs.length && !stopScroll.current) {
if (logs.length && !stopScroll.current && instance) {
updateScrollerPosition(0);
} else if (logs.length && !stopScroll.current && scroller.current) {
if (!initialized) {
initialize(scroller.current);
}
if (!instance) {
debounceUpdateScrollerPosition();
} else {
updateScrollerPosition(0);
}
}
}, [logs, stopScroll.current]);
}, [logs, stopScroll.current, instance, scroller.current]);
return (
<div className="logs-viewer-wrap-w2">
+4 -3
View File
@@ -10,8 +10,7 @@ const VersionInfo: React.FC<{ intl: any }> = ({ intl }) => {
const latestVersion = getAtomStorage(UpdateCheckAtom).latest_version;
const currentVersion = getAtomStorage(GPUStackVersionAtom)?.version;
const isProd =
document.documentElement.getAttribute('data-env') === 'production';
const isProd = currentVersion !== '0.0.0';
const uiVersion = document.documentElement.getAttribute('data-version');
@@ -51,7 +50,9 @@ const VersionInfo: React.FC<{ intl: any }> = ({ intl }) => {
{getAtomStorage(userAtom)?.is_admin && (
<div className="upgrade">
<span className="m-l-5">
{latestVersion && latestVersion !== currentVersion
{latestVersion &&
latestVersion !== currentVersion &&
latestVersion !== '0.0.0'
? intl.formatMessage(
{ id: 'users.version.update' },
{ version: latestVersion }