feat: hlasenie pod polom s URL obrazka (zmensene / v poriadku / za prihlasenim)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Jakub_HostacnyandClaude Opus 5.5 committed 2026-10-21 13:48:37 +02:00
1 parent 6100a7af57
commit 48fd82a77d
3 files changed
+48 -13

No files matched your search

+30 -6
View File
@@ -49,19 +49,31 @@ export const ImageUploadInput: React.FC<ImageUploadInputProps> = ({
// Vložená URL: príliš veľký obrázok sa zmenší a uloží k nám (posledná spracovaná adresa, aby sa nerobilo dvakrát)
const lastCheckedUrl = useRef('');
const [urlNote, setUrlNote] = useState<{ tone: 'ok' | 'warn'; text: string } | null>(null);
const checkUrl = async (url: string) => {
url = url.trim();
if (!url || url === lastCheckedUrl.current) return;
lastCheckedUrl.current = url;
setIsUploading(true);
setUrlNote(null);
try {
const smaller = await shrinkRemoteImage(url);
if (smaller) {
lastCheckedUrl.current = smaller;
onChange(smaller);
const result = await shrinkRemoteImage(url);
if (result.status === 'shrunk') {
lastCheckedUrl.current = result.url;
onChange(result.url);
setUrlNote({ tone: 'ok', text: 'Obrázok bol väčší ako 1000 px – zmenšili sme ho a uložili k nám.' });
} else if (result.status === 'small') {
setUrlNote({ tone: 'ok', text: 'Obrázok je v poriadku (najviac 1000 px), adresa ostáva.' });
} else if (result.status === 'login') {
setUrlNote({
tone: 'warn',
text: 'Obrázok je za prihlásením – v e-maile sa nezobrazí. Otvorte ho v prehliadači, pravým klikom „Kopírovať obrázok“ a sem vložte Ctrl+V.'
});
} else if (result.status === 'failed') {
setUrlNote({ tone: 'warn', text: `Obrázok sa nepodarilo stiahnuť (${result.error}). Skontrolujte adresu, prípadne obrázok skopírujte a vložte Ctrl+V.` });
}
} catch (err) {
console.warn('Obrázok z URL sa nepodarilo zmenšiť:', err);
setUrlNote({ tone: 'warn', text: `Obrázok sa nepodarilo spracovať: ${(err as Error).message}` });
} finally {
setIsUploading(false);
}
@@ -104,7 +116,13 @@ export const ImageUploadInput: React.FC<ImageUploadInputProps> = ({
<input
type="text"
value={value || ''}
onChange={(e) => onChange(e.target.value)}
onChange={(e) => {
setUrlNote(null);
onChange(e.target.value);
}}
onKeyDown={(e) => {
if (e.key === 'Enter') checkUrl(e.currentTarget.value);
}}
onPaste={handlePaste}
onBlur={(e) => checkUrl(e.target.value)}
placeholder={placeholder}
@@ -140,6 +158,12 @@ export const ImageUploadInput: React.FC<ImageUploadInputProps> = ({
</button>
</div>
{urlNote && (
<p className={`text-[10px] leading-snug ${urlNote.tone === 'warn' ? 'text-amber-700 bg-amber-50 border border-amber-200 rounded-md px-2 py-1' : 'text-emerald-700'}`}>
{urlNote.text}
</p>
)}
{onAltChange && (
<input
type="text"