mirror of
https://github.com/WenPai-org/wpmind.git
synced 2025-08-05 21:05:13 +08:00
added better resizing of popup input field while in transitioning to fullscreen mode
This commit is contained in:
parent
6dbac0b79e
commit
d57934152b
2 changed files with 36 additions and 4 deletions
|
@ -4,7 +4,7 @@ import './style.scss';
|
||||||
* WordPress dependencies
|
* WordPress dependencies
|
||||||
*/
|
*/
|
||||||
import { __ } from '@wordpress/i18n';
|
import { __ } from '@wordpress/i18n';
|
||||||
import { useRef, useEffect } from '@wordpress/element';
|
import { useRef, useEffect, useState } from '@wordpress/element';
|
||||||
import { useSelect, useDispatch } from '@wordpress/data';
|
import { useSelect, useDispatch } from '@wordpress/data';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -13,9 +13,11 @@ import { useSelect, useDispatch } from '@wordpress/data';
|
||||||
import { ReactComponent as MindLogoIcon } from '../../../../icons/mind-logo.svg';
|
import { ReactComponent as MindLogoIcon } from '../../../../icons/mind-logo.svg';
|
||||||
|
|
||||||
export default function Input(props) {
|
export default function Input(props) {
|
||||||
const { onInsert } = props;
|
const { onInsert, isFullscreen } = props;
|
||||||
|
|
||||||
const ref = useRef();
|
const ref = useRef();
|
||||||
|
const prevIsFullscreenRef = useRef(isFullscreen);
|
||||||
|
const [isForceResize, setIsForceResize] = useState(0);
|
||||||
|
|
||||||
const { reset, setInput, setScreen, requestAI } = useDispatch('mind/popup');
|
const { reset, setInput, setScreen, requestAI } = useDispatch('mind/popup');
|
||||||
|
|
||||||
|
@ -87,7 +89,37 @@ export default function Input(props) {
|
||||||
// Trying to set this with state or a ref will product an incorrect value.
|
// Trying to set this with state or a ref will product an incorrect value.
|
||||||
ref.current.style.height = scrollHeight + 'px';
|
ref.current.style.height = scrollHeight + 'px';
|
||||||
}
|
}
|
||||||
}, [ref, input, loading, hasResponse]);
|
}, [ref, input, loading, hasResponse, isForceResize]);
|
||||||
|
|
||||||
|
// Automatic height after fullscreen transition.
|
||||||
|
// Trigger resize 3 times during fullscreen transition
|
||||||
|
useEffect(() => {
|
||||||
|
// Only run when transitioning from false to true
|
||||||
|
const allowRezise = isFullscreen && !prevIsFullscreenRef.current;
|
||||||
|
|
||||||
|
prevIsFullscreenRef.current = isFullscreen;
|
||||||
|
|
||||||
|
if (allowRezise) {
|
||||||
|
// Array of delays for the three resizes
|
||||||
|
const resizeDelays = [100, 200, 300];
|
||||||
|
const timeoutIds = [];
|
||||||
|
|
||||||
|
// Schedule the three resizes
|
||||||
|
resizeDelays.forEach((delay) => {
|
||||||
|
const timeoutId = setTimeout(() => {
|
||||||
|
// Using functional update to avoid dependency on current state
|
||||||
|
setIsForceResize((prev) => prev + 1);
|
||||||
|
}, delay);
|
||||||
|
|
||||||
|
timeoutIds.push(timeoutId);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Cleanup function to clear all timeouts
|
||||||
|
return () => {
|
||||||
|
timeoutIds.forEach((id) => clearTimeout(id));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}, [isFullscreen]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="mind-popup-input">
|
<div className="mind-popup-input">
|
||||||
|
|
|
@ -149,7 +149,7 @@ export default function Popup() {
|
||||||
>
|
>
|
||||||
{connected ? (
|
{connected ? (
|
||||||
<>
|
<>
|
||||||
<Input onInsert={onInsert} />
|
<Input onInsert={onInsert} isFullscreen={isFullscreen} />
|
||||||
{loading && <LoadingLine />}
|
{loading && <LoadingLine />}
|
||||||
<Content />
|
<Content />
|
||||||
<Footer onInsert={onInsert} />
|
<Footer onInsert={onInsert} />
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue