From 91d47a297008a5a21c55249b0eea3037a3417ab4 Mon Sep 17 00:00:00 2001 From: josc146 Date: Thu, 16 Mar 2023 10:18:13 +0800 Subject: [PATCH] feat: dynamic max-height and width (#1) --- src/components/ConversationCard/index.jsx | 4 +++- src/components/FloatingToolbar/index.jsx | 4 +++- src/content-script/styles.scss | 4 +--- src/hooks/use-clamp-window-size.mjs | 8 ++++++++ src/hooks/use-window-size.mjs | 16 ++++++++++++++++ src/utils/set-element-position-in-viewport.mjs | 4 ++-- 6 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 src/hooks/use-clamp-window-size.mjs create mode 100644 src/hooks/use-window-size.mjs diff --git a/src/components/ConversationCard/index.jsx b/src/components/ConversationCard/index.jsx index eaad4fc..7adf2fc 100644 --- a/src/components/ConversationCard/index.jsx +++ b/src/components/ConversationCard/index.jsx @@ -9,6 +9,7 @@ import { WindowDesktop, XLg } from 'react-bootstrap-icons' import FileSaver from 'file-saver' import { render } from 'preact' import FloatingToolbar from '../FloatingToolbar' +import { useClampWindowSize } from '../../hooks/use-clamp-window-size' const logo = Browser.runtime.getURL('logo.png') @@ -32,6 +33,7 @@ function ConversationCard(props) { const [isReady, setIsReady] = useState(!props.question) const [port, setPort] = useState(() => Browser.runtime.connect()) const [session, setSession] = useState(props.session) + const windowSize = useClampWindowSize([0, Infinity], [250, 1100]) /** * @type {[ConversationItemData[], (conversationItemData: ConversationItemData[]) => void]} */ @@ -213,7 +215,7 @@ function ConversationCard(props) {
-
+
{conversationItemData.map((data, idx) => ( { getUserConfig() @@ -68,7 +70,7 @@ function FloatingToolbar(props) { onStop={dragEvent.onStop} position={virtualPosition} > -
+
{ + function updateSize() { + setSize([window.innerWidth, window.innerHeight]) + } + window.addEventListener('resize', updateSize) + updateSize() + return () => window.removeEventListener('resize', updateSize) + }, []) + return size +} diff --git a/src/utils/set-element-position-in-viewport.mjs b/src/utils/set-element-position-in-viewport.mjs index 4f1c13b..83cceb7 100644 --- a/src/utils/set-element-position-in-viewport.mjs +++ b/src/utils/set-element-position-in-viewport.mjs @@ -1,6 +1,6 @@ export function setElementPositionInViewport(element, x = 0, y = 0) { - const retX = Math.min(window.innerWidth - element.offsetWidth, Math.max(0, x)) - const retY = Math.min(window.innerHeight - element.offsetHeight, Math.max(0, y)) + const retX = Math.min(Math.max(0, window.innerWidth - element.offsetWidth), Math.max(0, x)) + const retY = Math.min(Math.max(0, window.innerHeight - element.offsetHeight), Math.max(0, y)) element.style.left = retX + 'px' element.style.top = retY + 'px' return { x: retX, y: retY }