Fix issue with saving images from new sample viewer
This commit is contained in:
@@ -125,6 +125,30 @@ export default function SampleImageViewer({
|
|||||||
setImageAtIndex(nextIdx);
|
setImageAtIndex(nextIdx);
|
||||||
}, [sampleImages, currentIndex, imgInfo.promptIdx, setImageAtIndex]);
|
}, [sampleImages, currentIndex, imgInfo.promptIdx, setImageAtIndex]);
|
||||||
|
|
||||||
|
const handleDelete = useCallback(() => {
|
||||||
|
if (!imgPath) return;
|
||||||
|
openConfirm({
|
||||||
|
title: 'Delete Sample',
|
||||||
|
message: `Are you sure you want to delete this sample? This action cannot be undone.`,
|
||||||
|
type: 'warning',
|
||||||
|
confirmText: 'Delete',
|
||||||
|
onConfirm: () => {
|
||||||
|
apiClient
|
||||||
|
.post('/api/img/delete', { imgPath: imgPath })
|
||||||
|
.then(() => {
|
||||||
|
console.log('Image deleted:', imgPath);
|
||||||
|
onChange(null);
|
||||||
|
if (refreshSampleImages) {
|
||||||
|
refreshSampleImages();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error('Error deleting image:', error);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}, [imgPath, onChange, refreshSampleImages]);
|
||||||
|
|
||||||
const sampleItem = useMemo<SampleItem | null>(() => {
|
const sampleItem = useMemo<SampleItem | null>(() => {
|
||||||
if (!sampleConfig) return null;
|
if (!sampleConfig) return null;
|
||||||
if (imgInfo.promptIdx < 0) return null;
|
if (imgInfo.promptIdx < 0) return null;
|
||||||
@@ -192,13 +216,17 @@ export default function SampleImageViewer({
|
|||||||
case 'ArrowRight':
|
case 'ArrowRight':
|
||||||
handleArrowRight();
|
handleArrowRight();
|
||||||
break;
|
break;
|
||||||
|
case 'Delete':
|
||||||
|
case 'Backspace':
|
||||||
|
handleDelete();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
window.addEventListener('keydown', handleKeyDown);
|
window.addEventListener('keydown', handleKeyDown);
|
||||||
return () => window.removeEventListener('keydown', handleKeyDown);
|
return () => window.removeEventListener('keydown', handleKeyDown);
|
||||||
}, [isOpen, onCancel, handleArrowUp, handleArrowDown, handleArrowLeft, handleArrowRight]);
|
}, [isOpen, onCancel, handleArrowUp, handleArrowDown, handleArrowLeft, handleArrowRight, handleDelete]);
|
||||||
|
|
||||||
// Touch swipe navigation
|
// Touch swipe navigation
|
||||||
const touchStartRef = useRef<{ x: number; y: number } | null>(null);
|
const touchStartRef = useRef<{ x: number; y: number } | null>(null);
|
||||||
@@ -292,17 +320,17 @@ export default function SampleImageViewer({
|
|||||||
maxScale={6}
|
maxScale={6}
|
||||||
doubleClick={{ mode: 'toggle', step: 2 }}
|
doubleClick={{ mode: 'toggle', step: 2 }}
|
||||||
wheel={{ step: 0.2 }}
|
wheel={{ step: 0.2 }}
|
||||||
panning={{ disabled: false }}
|
panning={{ disabled: false, allowRightClickPan: false }}
|
||||||
onTransform={(_ref, state) => {
|
onTransform={(_ref, state) => {
|
||||||
zoomedRef.current = state.scale > 1.01;
|
zoomedRef.current = state.scale > 1.01;
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<TransformComponent wrapperClass="!w-full !h-auto" contentClass="!w-full !h-auto">
|
<TransformComponent>
|
||||||
<img
|
<img
|
||||||
src={`/api/img/${encodeURIComponent(displayedImgPath)}`}
|
src={`/api/img/${encodeURIComponent(displayedImgPath)}`}
|
||||||
alt="Sample Image"
|
alt="Sample Image"
|
||||||
draggable={false}
|
draggable={false}
|
||||||
className="w-auto h-auto max-w-full sm:max-w-[95vw] max-h-[82vh] object-contain select-none"
|
className="w-auto h-auto max-w-full sm:max-w-[95vw] max-h-[82vh] object-contain select-none !pointer-events-auto"
|
||||||
/>
|
/>
|
||||||
</TransformComponent>
|
</TransformComponent>
|
||||||
</TransformWrapper>
|
</TransformWrapper>
|
||||||
@@ -379,32 +407,7 @@ export default function SampleImageViewer({
|
|||||||
</MenuItem>
|
</MenuItem>
|
||||||
)}
|
)}
|
||||||
<MenuItem>
|
<MenuItem>
|
||||||
<div
|
<div className="cursor-pointer px-4 py-1 hover:bg-gray-800 rounded" onClick={handleDelete}>
|
||||||
className="cursor-pointer px-4 py-1 hover:bg-gray-800 rounded"
|
|
||||||
onClick={() => {
|
|
||||||
let message = `Are you sure you want to delete this sample? This action cannot be undone.`;
|
|
||||||
openConfirm({
|
|
||||||
title: 'Delete Sample',
|
|
||||||
message: message,
|
|
||||||
type: 'warning',
|
|
||||||
confirmText: 'Delete',
|
|
||||||
onConfirm: () => {
|
|
||||||
apiClient
|
|
||||||
.post('/api/img/delete', { imgPath: imgPath })
|
|
||||||
.then(() => {
|
|
||||||
console.log('Image deleted:', imgPath);
|
|
||||||
onChange(null);
|
|
||||||
if (refreshSampleImages) {
|
|
||||||
refreshSampleImages();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.error('Error deleting image:', error);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
Delete Sample
|
Delete Sample
|
||||||
</div>
|
</div>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
|||||||
Reference in New Issue
Block a user