위젯 추가팝업 수정
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import './forceServerApi';
|
||||
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
||||
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
||||
import ReactDOM from 'react-dom/client';
|
||||
import { getCurrentWindow } from '@tauri-apps/api/window';
|
||||
import { LogicalSize } from '@tauri-apps/api/dpi';
|
||||
@@ -8,6 +8,7 @@ import { ensureDesktopApiBase } from './ensureDesktopApiBase';
|
||||
import FloatingWidgetWindow from '@frontend/components/floatingWidgets/FloatingWidgetWindow';
|
||||
import {
|
||||
defaultGridFr,
|
||||
NATIVE_WIDGET_PICKER_WINDOW,
|
||||
type FloatingWidgetInstance,
|
||||
} from '@frontend/types/floatingWidget';
|
||||
import type { Theme } from '@frontend/types';
|
||||
@@ -134,6 +135,27 @@ const WidgetApp: React.FC = () => {
|
||||
void getCurrentWindow().close();
|
||||
}, []);
|
||||
|
||||
const sizeBeforePickerRef = useRef<{ width: number; height: number } | null>(null);
|
||||
|
||||
const handlePickerOpenChange = useCallback(async (open: boolean) => {
|
||||
const win = getCurrentWindow();
|
||||
if (open) {
|
||||
const size = await win.innerSize();
|
||||
sizeBeforePickerRef.current = { width: size.width, height: size.height };
|
||||
const maxW = Math.max(480, window.screen.availWidth - 48);
|
||||
const maxH = Math.max(520, window.screen.availHeight - 48);
|
||||
const w = Math.min(NATIVE_WIDGET_PICKER_WINDOW.width, maxW);
|
||||
const h = Math.min(NATIVE_WIDGET_PICKER_WINDOW.height, maxH);
|
||||
await win.setSize(new LogicalSize(w, h));
|
||||
await win.center();
|
||||
return;
|
||||
}
|
||||
const prev = sizeBeforePickerRef.current;
|
||||
if (!prev) return;
|
||||
sizeBeforePickerRef.current = null;
|
||||
await win.setSize(new LogicalSize(prev.width, prev.height));
|
||||
}, []);
|
||||
|
||||
if (!instance) {
|
||||
return <p className="wd-widget-empty">위젯 정보를 불러올 수 없습니다.</p>;
|
||||
}
|
||||
@@ -161,6 +183,7 @@ const WidgetApp: React.FC = () => {
|
||||
nativeShell
|
||||
onClose={handleClose}
|
||||
onFocus={() => {}}
|
||||
onPickerOpenChange={open => { void handlePickerOpenChange(open); }}
|
||||
onUpdateSlots={slots => setInstance(prev => (prev ? { ...prev, slots } : prev))}
|
||||
onUpdateSize={(width, height) => {
|
||||
setInstance(prev => (prev ? { ...prev, width, height } : prev));
|
||||
|
||||
Reference in New Issue
Block a user