Fix certificate regeneration, svg files encrypting, and file manager being able to be dragged off screen.
This commit is contained in:
@@ -495,19 +495,14 @@ function FileManagerContent({ initialHost, onClose }: FileManagerProps) {
|
||||
async function handleUploadFile(file: File) {
|
||||
if (!sshSessionId) return;
|
||||
|
||||
// Show progress for large files (>10MB)
|
||||
const isLargeFile = file.size > 10 * 1024 * 1024;
|
||||
let progressToast: any = null;
|
||||
|
||||
if (isLargeFile) {
|
||||
progressToast = toast.loading(
|
||||
t("fileManager.uploadingLargeFile", {
|
||||
name: file.name,
|
||||
size: formatFileSize(file.size)
|
||||
}),
|
||||
{ duration: Infinity }
|
||||
);
|
||||
}
|
||||
// Show progress for all file uploads
|
||||
const progressToast = toast.loading(
|
||||
t("fileManager.uploadingFile", {
|
||||
name: file.name,
|
||||
size: formatFileSize(file.size)
|
||||
}),
|
||||
{ duration: Infinity }
|
||||
);
|
||||
|
||||
try {
|
||||
// Ensure SSH connection is valid
|
||||
@@ -565,20 +560,16 @@ function FileManagerContent({ initialHost, onClose }: FileManagerProps) {
|
||||
undefined, // userId - will be handled by backend
|
||||
);
|
||||
|
||||
// Dismiss progress toast if it exists
|
||||
if (progressToast) {
|
||||
toast.dismiss(progressToast);
|
||||
}
|
||||
// Dismiss progress toast
|
||||
toast.dismiss(progressToast);
|
||||
|
||||
toast.success(
|
||||
t("fileManager.fileUploadedSuccessfully", { name: file.name }),
|
||||
);
|
||||
handleRefreshDirectory();
|
||||
} catch (error: any) {
|
||||
// Dismiss progress toast if it exists
|
||||
if (progressToast) {
|
||||
toast.dismiss(progressToast);
|
||||
}
|
||||
// Dismiss progress toast
|
||||
toast.dismiss(progressToast);
|
||||
|
||||
if (
|
||||
error.message?.includes("connection") ||
|
||||
|
||||
@@ -116,15 +116,53 @@ export function DraggableWindow({
|
||||
const deltaX = e.clientX - dragStart.x;
|
||||
const deltaY = e.clientY - dragStart.y;
|
||||
|
||||
const newX = windowStart.x + deltaX;
|
||||
const newY = windowStart.y + deltaY;
|
||||
|
||||
// Find the positioning container by checking parent hierarchy
|
||||
const windowElement = windowRef.current;
|
||||
let positioningContainer = null;
|
||||
let currentElement = windowElement?.parentElement;
|
||||
|
||||
while (currentElement && currentElement !== document.body) {
|
||||
const computedStyle = window.getComputedStyle(currentElement);
|
||||
const position = computedStyle.position;
|
||||
const transform = computedStyle.transform;
|
||||
|
||||
if (position === 'relative' || position === 'absolute' || position === 'fixed' || transform !== 'none') {
|
||||
positioningContainer = currentElement;
|
||||
break;
|
||||
}
|
||||
|
||||
currentElement = currentElement.parentElement;
|
||||
}
|
||||
|
||||
// Calculate boundaries based on the actual positioning context
|
||||
let maxX, maxY, minX, minY;
|
||||
|
||||
if (positioningContainer) {
|
||||
const containerRect = positioningContainer.getBoundingClientRect();
|
||||
|
||||
// Window is positioned relative to a positioning container
|
||||
maxX = containerRect.width - size.width;
|
||||
maxY = containerRect.height - size.height;
|
||||
minX = 0;
|
||||
minY = 0;
|
||||
} else {
|
||||
// Window is positioned relative to viewport
|
||||
maxX = window.innerWidth - size.width;
|
||||
maxY = window.innerHeight - size.height;
|
||||
minX = 0;
|
||||
minY = 0;
|
||||
}
|
||||
|
||||
// Ensure window stays within boundaries
|
||||
const constrainedX = Math.max(minX, Math.min(maxX, newX));
|
||||
const constrainedY = Math.max(minY, Math.min(maxY, newY));
|
||||
|
||||
setPosition({
|
||||
x: Math.max(
|
||||
0,
|
||||
Math.min(window.innerWidth - size.width, windowStart.x + deltaX),
|
||||
),
|
||||
y: Math.max(
|
||||
0,
|
||||
Math.min(window.innerHeight - 40, windowStart.y + deltaY),
|
||||
), // Keep title bar visible
|
||||
x: constrainedX,
|
||||
y: constrainedY,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user