Skip to content

Commit e48df50

Browse files
committed
feat: add duplicate URL detection in link editor #299
Introduces a shared LinkSearchItem type and a dedicated search store to manage link search state globally, replacing per-component local fetching. When editing or creating a link, the URL field now checks against existing links and displays a hint with a direct reference to the conflicting short link, helping users avoid unintentional duplicates. The search store stays in sync with create, edit, and delete operations so duplicate detection remains accurate without requiring additional API calls. Also strips query parameters from URLs during search indexing to improve duplicate matching accuracy, and adds the duplicate_url_hint i18n key across all supported locales.
1 parent df4e36b commit e48df50

17 files changed

Lines changed: 176 additions & 37 deletions

File tree

i18n/locales/de-DE.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,8 @@
279279
"utm_apply": "Anwenden",
280280
"utm_clear": "Löschen",
281281
"utm_invalid_url": "Gib eine gültige URL ein, um UTM-Parameter in der Vorschau zu sehen und anzuwenden.",
282-
"ai_og_generate": "KI-OpenGraph generieren"
282+
"ai_og_generate": "KI-OpenGraph generieren",
283+
"duplicate_url_hint": "Diese URL existiert bereits als {shortLink}"
283284
},
284285
"sort": {
285286
"newest": "Neueste zuerst",

i18n/locales/en-US.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,8 @@
279279
"utm_apply": "Apply",
280280
"utm_clear": "Clear",
281281
"utm_invalid_url": "Enter a valid URL to preview and apply UTM parameters.",
282-
"ai_og_generate": "Generate AI OpenGraph"
282+
"ai_og_generate": "Generate AI OpenGraph",
283+
"duplicate_url_hint": "This URL already exists as {shortLink}"
283284
},
284285
"sort": {
285286
"newest": "Newest First",

i18n/locales/fr-FR.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,8 @@
279279
"utm_apply": "Appliquer",
280280
"utm_clear": "Effacer",
281281
"utm_invalid_url": "Saisissez une URL valide pour prévisualiser et appliquer les paramètres UTM.",
282-
"ai_og_generate": "Générer l'OpenGraph IA"
282+
"ai_og_generate": "Générer l'OpenGraph IA",
283+
"duplicate_url_hint": "Cette URL existe déjà sous {shortLink}"
283284
},
284285
"sort": {
285286
"newest": "Les plus récents",

i18n/locales/id-ID.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,8 @@
279279
"utm_apply": "Terapkan",
280280
"utm_clear": "Bersihkan",
281281
"utm_invalid_url": "Masukkan URL valid untuk melihat pratinjau dan menerapkan parameter UTM.",
282-
"ai_og_generate": "Buat OpenGraph AI"
282+
"ai_og_generate": "Buat OpenGraph AI",
283+
"duplicate_url_hint": "URL ini sudah ada sebagai {shortLink}"
283284
},
284285
"sort": {
285286
"newest": "Terbaru",

i18n/locales/it-IT.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,8 @@
279279
"utm_apply": "Applica",
280280
"utm_clear": "Cancella",
281281
"utm_invalid_url": "Inserisci un URL valido per visualizzare l'anteprima e applicare i parametri UTM.",
282-
"ai_og_generate": "Genera OpenGraph AI"
282+
"ai_og_generate": "Genera OpenGraph AI",
283+
"duplicate_url_hint": "Questo URL esiste già come {shortLink}"
283284
},
284285
"sort": {
285286
"newest": "Più Recenti",

i18n/locales/pt-BR.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,8 @@
279279
"utm_apply": "Aplicar",
280280
"utm_clear": "Limpar",
281281
"utm_invalid_url": "Insira uma URL válida para visualizar e aplicar os parâmetros UTM.",
282-
"ai_og_generate": "Gerar OpenGraph da IA"
282+
"ai_og_generate": "Gerar OpenGraph da IA",
283+
"duplicate_url_hint": "Esta URL já existe como {shortLink}"
283284
},
284285
"sort": {
285286
"newest": "Mais recentes primeiro",

i18n/locales/pt-PT.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,8 @@
279279
"utm_apply": "Aplicar",
280280
"utm_clear": "Limpar",
281281
"utm_invalid_url": "Introduza um URL válido para pré-visualizar e aplicar os parâmetros UTM.",
282-
"ai_og_generate": "Gerar OpenGraph da IA"
282+
"ai_og_generate": "Gerar OpenGraph da IA",
283+
"duplicate_url_hint": "Este URL já existe como {shortLink}"
283284
},
284285
"sort": {
285286
"newest": "Mais recentes primeiro",

i18n/locales/vi-VN.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,8 @@
279279
"utm_apply": "Áp dụng",
280280
"utm_clear": "Xóa",
281281
"utm_invalid_url": "Nhập URL hợp lệ để xem trước và áp dụng tham số UTM.",
282-
"ai_og_generate": "Tạo AI OpenGraph"
282+
"ai_og_generate": "Tạo AI OpenGraph",
283+
"duplicate_url_hint": "URL này đã tồn tại dưới dạng {shortLink}"
283284
},
284285
"sort": {
285286
"newest": "Mới nhất trước",

i18n/locales/zh-CN.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,8 @@
279279
"utm_apply": "应用",
280280
"utm_clear": "清空",
281281
"utm_invalid_url": "请输入有效 URL 以预览并应用 UTM 参数。",
282-
"ai_og_generate": "生成 AI OpenGraph"
282+
"ai_og_generate": "生成 AI OpenGraph",
283+
"duplicate_url_hint": "该 URL 已存在为 {shortLink}"
283284
},
284285
"sort": {
285286
"newest": "最新",

i18n/locales/zh-TW.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,8 @@
279279
"utm_apply": "套用",
280280
"utm_clear": "清除",
281281
"utm_invalid_url": "請輸入有效的 URL 以預覽並套用 UTM 參數。",
282-
"ai_og_generate": "生成 AI OpenGraph"
282+
"ai_og_generate": "生成 AI OpenGraph",
283+
"duplicate_url_hint": "此 URL 已存在為 {shortLink}"
283284
},
284285
"sort": {
285286
"newest": "最新",

0 commit comments

Comments
 (0)