6.6.0: Извлечение ссылки из текста в желании
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 1m5s

This commit is contained in:
poignatov
2026-03-10 15:41:34 +03:00
parent a693d3fa4b
commit 7957776f53
3 changed files with 23 additions and 9 deletions

View File

@@ -1 +1 @@
6.5.0
6.6.0

View File

@@ -1,6 +1,6 @@
{
"name": "play-life-web",
"version": "6.5.0",
"version": "6.6.0",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -4,6 +4,13 @@ import { useAuth } from './auth/AuthContext'
import Toast from './Toast'
import './WishlistForm.css'
// Извлекает первый URL из текста
function extractUrl(text) {
if (!text) return ''
const match = text.match(/https?:\/\/[^\s<>"'`,;!)\]]+/i)
return match ? match[0] : text
}
const API_URL = '/api/wishlist'
const TASKS_API_URL = '/api/tasks'
const PROJECTS_API_URL = '/projects'
@@ -359,15 +366,18 @@ function WishlistForm({ onNavigate, wishlistId, editConditionIndex, newTaskId: n
setToastMessage({ text: 'Введите ссылку', type: 'error' })
return
}
const extracted = extractUrl(link)
setLink(extracted)
// Проверяем валидность URL
try {
new URL(link)
new URL(extracted)
} catch {
setToastMessage({ text: 'Некорректная ссылка', type: 'error' })
return
}
setFetchingMetadata(true)
try {
const response = await authFetch(`${API_URL}/metadata`, {
@@ -375,7 +385,7 @@ function WishlistForm({ onNavigate, wishlistId, editConditionIndex, newTaskId: n
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ url: link.trim() }),
body: JSON.stringify({ url: extracted.trim() }),
})
if (response.ok) {
@@ -477,7 +487,9 @@ function WishlistForm({ onNavigate, wishlistId, editConditionIndex, newTaskId: n
// Загрузка картинки по ссылке с последующим кропом
const loadImageFromUrl = async () => {
const url = imageUrlInput?.trim()
const extracted = extractUrl(imageUrlInput)
setImageUrlInput(extracted)
const url = extracted?.trim()
if (!url) {
setToastMessage({ text: 'Введите ссылку на картинку', type: 'error' })
return
@@ -800,9 +812,10 @@ function WishlistForm({ onNavigate, wishlistId, editConditionIndex, newTaskId: n
<div className="link-input-wrapper">
<input
id="link"
type="url"
type="text"
value={link}
onChange={(e) => setLink(e.target.value)}
onBlur={() => setLink(extractUrl(link))}
placeholder="https://..."
className="form-input"
disabled={fetchingMetadata}
@@ -907,9 +920,10 @@ function WishlistForm({ onNavigate, wishlistId, editConditionIndex, newTaskId: n
<div className="image-url-row">
<span className="image-url-label">Ссылка:</span>
<input
type="url"
type="text"
value={imageUrlInput}
onChange={(e) => setImageUrlInput(e.target.value)}
onBlur={() => setImageUrlInput(extractUrl(imageUrlInput))}
placeholder="https://..."
className="form-input image-url-input"
disabled={loadingImageFromUrl}