🔧 fix(Shared Links): Handling Shared Link Errors (#3118)

* refactor: add error handling in Share model

* refactor: add error handing to API routers

* refactor: display error message when API response is an error

* chore: remove unneccesary JSON.stringify

* chore: revert unintended changes

---------

Co-authored-by: Danny Avila <danny@librechat.ai>
This commit is contained in:
Yuichi Oneda 2024-06-21 07:12:37 -07:00 committed by GitHub
parent 3172381bad
commit 4e4de88faa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
23 changed files with 323 additions and 75 deletions

View file

@ -22,7 +22,7 @@ module.exports = {
return share;
} catch (error) {
logger.error('[getShare] Error getting share link', error);
return { message: 'Error getting share link' };
throw new Error('Error getting share link');
}
},
@ -41,17 +41,17 @@ module.exports = {
return { sharedLinks: shares, pages: totalPages, pageNumber, pageSize };
} catch (error) {
logger.error('[getShareByPage] Error getting shares', error);
return { message: 'Error getting shares' };
throw new Error('Error getting shares');
}
},
createSharedLink: async (user, { conversationId, ...shareData }) => {
try {
const share = await SharedLink.findOne({ conversationId }).select('-_id -__v -user').lean();
if (share) {
return share;
}
try {
const shareId = crypto.randomUUID();
const messages = await getMessages({ conversationId });
const update = { ...shareData, shareId, messages, user };
@ -60,16 +60,18 @@ module.exports = {
upsert: true,
});
} catch (error) {
logger.error('[saveShareMessage] Error saving conversation', error);
return { message: 'Error saving conversation' };
logger.error('[createSharedLink] Error creating shared link', error);
throw new Error('Error creating shared link');
}
},
updateSharedLink: async (user, { conversationId, ...shareData }) => {
try {
const share = await SharedLink.findOne({ conversationId }).select('-_id -__v -user').lean();
if (!share) {
return { message: 'Share not found' };
}
// update messages to the latest
const messages = await getMessages({ conversationId });
const update = { ...shareData, messages, user };
@ -77,14 +79,23 @@ module.exports = {
new: true,
upsert: false,
});
} catch (error) {
logger.error('[updateSharedLink] Error updating shared link', error);
throw new Error('Error updating shared link');
}
},
deleteSharedLink: async (user, { shareId }) => {
try {
const share = await SharedLink.findOne({ shareId, user });
if (!share) {
return { message: 'Share not found' };
}
return await SharedLink.findOneAndDelete({ shareId, user });
} catch (error) {
logger.error('[deleteSharedLink] Error deleting shared link', error);
throw new Error('Error deleting shared link');
}
},
/**
* Deletes all shared links for a specific user.
@ -100,7 +111,7 @@ module.exports = {
};
} catch (error) {
logger.error('[deleteAllSharedLinks] Error deleting shared links', error);
return { message: 'Error deleting shared links' };
throw new Error('Error deleting shared links');
}
},
};

View file

@ -25,6 +25,7 @@ if (allowSharedLinks) {
'/:shareId',
allowSharedLinksPublic ? (req, res, next) => next() : requireJwtAuth,
async (req, res) => {
try {
const share = await getSharedMessages(req.params.shareId);
if (share) {
@ -32,6 +33,9 @@ if (allowSharedLinks) {
} else {
res.status(404).end();
}
} catch (error) {
res.status(500).json({ message: 'Error getting shared messages' });
}
},
);
}
@ -40,6 +44,7 @@ if (allowSharedLinks) {
* Shared links
*/
router.get('/', requireJwtAuth, async (req, res) => {
try {
let pageNumber = req.query.pageNumber || 1;
pageNumber = parseInt(pageNumber, 10);
@ -55,33 +60,48 @@ router.get('/', requireJwtAuth, async (req, res) => {
}
const isPublic = req.query.isPublic === 'true';
res.status(200).send(await getSharedLinks(req.user.id, pageNumber, pageSize, isPublic));
} catch (error) {
res.status(500).json({ message: 'Error getting shared links' });
}
});
router.post('/', requireJwtAuth, async (req, res) => {
try {
const created = await createSharedLink(req.user.id, req.body);
if (created) {
res.status(200).json(created);
} else {
res.status(404).end();
}
} catch (error) {
res.status(500).json({ message: 'Error creating shared link' });
}
});
router.patch('/', requireJwtAuth, async (req, res) => {
try {
const updated = await updateSharedLink(req.user.id, req.body);
if (updated) {
res.status(200).json(updated);
} else {
res.status(404).end();
}
} catch (error) {
res.status(500).json({ message: 'Error updating shared link' });
}
});
router.delete('/:shareId', requireJwtAuth, async (req, res) => {
try {
const deleted = await deleteSharedLink(req.user.id, { shareId: req.params.shareId });
if (deleted) {
res.status(200).json(deleted);
} else {
res.status(404).end();
}
} catch (error) {
res.status(500).json({ message: 'Error deleting shared link' });
}
});
module.exports = router;

View file

@ -1,8 +1,10 @@
import { useState } from 'react';
import copy from 'copy-to-clipboard';
import { Copy, Link } from 'lucide-react';
import { useUpdateSharedLinkMutation } from '~/data-provider';
import type { TSharedLink } from 'librechat-data-provider';
import { useUpdateSharedLinkMutation } from '~/data-provider';
import { NotificationSeverity } from '~/common';
import { useToastContext } from '~/Providers';
import { Spinner } from '~/components/svg';
import { Button } from '~/components/ui';
import { useLocalize } from '~/hooks';
@ -21,8 +23,18 @@ export default function SharedLinkButton({
setIsUpdated: (isUpdated: boolean) => void;
}) {
const localize = useLocalize();
const { showToast } = useToastContext();
const [isCopying, setIsCopying] = useState(false);
const { mutateAsync, isLoading } = useUpdateSharedLinkMutation();
const { mutateAsync, isLoading } = useUpdateSharedLinkMutation({
onError: () => {
showToast({
message: localize('com_ui_share_error'),
severity: NotificationSeverity.ERROR,
showIcon: true,
});
},
});
const copyLink = () => {
if (!share) {

View file

@ -1,8 +1,11 @@
import { useAuthContext, useLocalize, useNavScrolling } from '~/hooks';
import { MessageSquare, Link as LinkIcon } from 'lucide-react';
import { useMemo, useState, MouseEvent } from 'react';
import { Link } from 'react-router-dom';
import { MessageSquare, Link as LinkIcon } from 'lucide-react';
import type { SharedLinksResponse, TSharedLink } from 'librechat-data-provider';
import { useDeleteSharedLinkMutation, useSharedLinksInfiniteQuery } from '~/data-provider';
import { useAuthContext, useLocalize, useNavScrolling } from '~/hooks';
import { NotificationSeverity } from '~/common';
import { useToastContext } from '~/Providers';
import { cn } from '~/utils';
import {
Spinner,
@ -12,8 +15,6 @@ import {
TooltipTrigger,
TrashIcon,
} from '~/components';
import { SharedLinksResponse, TSharedLink } from 'librechat-data-provider';
import { Link } from 'react-router-dom';
function SharedLinkDeleteButton({
shareId,
@ -23,7 +24,17 @@ function SharedLinkDeleteButton({
setIsDeleting: (isDeleting: boolean) => void;
}) {
const localize = useLocalize();
const mutation = useDeleteSharedLinkMutation();
const { showToast } = useToastContext();
const mutation = useDeleteSharedLinkMutation({
onError: () => {
showToast({
message: localize('com_ui_share_delete_error'),
severity: NotificationSeverity.ERROR,
showIcon: true,
});
setIsDeleting(false);
},
});
const handleDelete = async (e: MouseEvent<HTMLButtonElement>) => {
e.preventDefault();
@ -124,10 +135,8 @@ export default function ShareLinkTable({ className }: { className?: string }) {
const { isAuthenticated } = useAuthContext();
const [showLoading, setShowLoading] = useState(false);
const { data, fetchNextPage, hasNextPage, isFetchingNextPage } = useSharedLinksInfiniteQuery(
{ pageNumber: '1', isPublic: true },
{ enabled: isAuthenticated },
);
const { data, fetchNextPage, hasNextPage, isFetchingNextPage, isError, isLoading } =
useSharedLinksInfiniteQuery({ pageNumber: '1', isPublic: true }, { enabled: isAuthenticated });
const { containerRef } = useNavScrolling<SharedLinksResponse>({
setShowLoading,
@ -144,6 +153,17 @@ export default function ShareLinkTable({ className }: { className?: string }) {
classProp.className = className;
}
if (isLoading) {
return <Spinner className="m-1 mx-auto mb-4 h-4 w-4 text-black dark:text-white" />;
}
if (isError) {
return (
<div className="rounded-md border border-red-500 bg-red-500/10 px-3 py-2 text-sm text-gray-600 dark:text-gray-200">
{localize('com_ui_share_retrieve_error')}
</div>
);
}
if (!sharedLinks || sharedLinks.length === 0) {
return <div className="text-gray-300">{localize('com_nav_shared_links_empty')}</div>;
}

View file

@ -56,6 +56,8 @@ export default {
com_ui_create_link: 'إنشاء رابط',
com_ui_share_link_to_chat: 'شارك الرابط في الدردشة',
com_ui_share_error: 'حدث خطأ أثناء مشاركة رابط الدردشة',
com_ui_share_retrieve_error: 'حدث خطأ أثناء حذف الرابط المشترك.',
com_ui_share_delete_error: 'حدث خطأ أثناء حذف الرابط المشترك.',
com_ui_share_create_message: 'سيظل اسمك وأي رسائل تضيفها بعد المشاركة خاصة.',
com_ui_share_created_message:
'تم إنشاء رابط مشترك للدردشة الخاصة بك. يمكنك إدارة الدردشات المشتركة مسبقًا في أي وقت عبر الإعدادات.',
@ -783,6 +785,14 @@ export const comparisons = {
english: 'Share link to chat',
translated: 'شارك الرابط في الدردشة',
},
com_ui_share_retrieve_error: {
english: 'There was an error deleting the shared link.',
translated: 'حدث خطأ أثناء حذف الرابط المشترك.',
},
com_ui_share_delete_error: {
english: 'There was an error deleting the shared link.',
translated: 'حدث خطأ أثناء حذف الرابط المشترك.',
},
com_ui_share_error: {
english: 'There was an error sharing the chat link',
translated: 'حدث خطأ أثناء مشاركة رابط الدردشة',

View file

@ -140,6 +140,8 @@ export default {
com_ui_create_link: 'Criar link',
com_ui_share_link_to_chat: 'Compartilhar link no chat',
com_ui_share_error: 'Ocorreu um erro ao compartilhar o link do chat',
com_ui_share_retrieve_error: 'Ocorreu um erro ao excluir o link compartilhado.',
com_ui_share_delete_error: 'Ocorreu um erro ao excluir o link compartilhado.',
com_ui_share_create_message:
'Seu nome e quaisquer mensagens que você adicionar após o compartilhamento permanecem privadas.',
com_ui_share_created_message:
@ -1000,6 +1002,14 @@ export const comparisons = {
english: 'Share link to chat',
translated: 'Compartilhar link no chat',
},
com_ui_share_retrieve_error: {
english: 'There was an error deleting the shared link.',
translated: 'Ocorreu um erro ao excluir o link compartilhado.',
},
com_ui_share_delete_error: {
english: 'There was an error deleting the shared link.',
translated: 'Ocorreu um erro ao excluir o link compartilhado.',
},
com_ui_share_error: {
english: 'There was an error sharing the chat link',
translated: 'Ocorreu um erro ao compartilhar o link do chat',

View file

@ -152,6 +152,8 @@ export default {
com_ui_create_link: 'Link erstellen',
com_ui_share_link_to_chat: 'Link zum Chat teilen',
com_ui_share_error: 'Beim Teilen des Chat-Links ist ein Fehler aufgetreten',
com_ui_share_retrieve_error: 'Beim Löschen des Freigabelinks ist ein Fehler aufgetreten.',
com_ui_share_delete_error: 'Beim Löschen des Freigabelinks ist ein Fehler aufgetreten.',
com_ui_share_create_message:
'Ihr Name und alle Nachrichten, die Sie nach dem Teilen hinzufügen, bleiben privat.',
com_ui_share_created_message:
@ -1151,6 +1153,14 @@ export const comparisons = {
english: 'Share link to chat',
translated: 'Link zum Chat teilen',
},
com_ui_share_retrieve_error: {
english: 'There was an error deleting the shared link.',
translated: 'Beim Löschen des Freigabelinks ist ein Fehler aufgetreten.',
},
com_ui_share_delete_error: {
english: 'There was an error deleting the shared link.',
translated: 'Beim Löschen des Freigabelinks ist ein Fehler aufgetreten.',
},
com_ui_share_error: {
english: 'There was an error sharing the chat link',
translated: 'Beim Teilen des Chat-Links ist ein Fehler aufgetreten',

View file

@ -248,6 +248,8 @@ export default {
com_ui_no_prompt_description: 'No description found.',
com_ui_share_link_to_chat: 'Share link to chat',
com_ui_share_error: 'There was an error sharing the chat link',
com_ui_share_retrieve_error: 'There was an error retrieving the shared links',
com_ui_share_delete_error: 'There was an error deleting the shared link',
com_ui_share_create_message: 'Your name and any messages you add after sharing stay private.',
com_ui_share_created_message:
'A shared link to your chat has been created. Manage previously shared chats at any time via Settings.',

View file

@ -142,6 +142,8 @@ export default {
com_ui_create_link: 'Crear enlace',
com_ui_share_link_to_chat: 'Compartir enlace en el chat',
com_ui_share_error: 'Hubo un error al compartir el enlace del chat',
com_ui_share_retrieve_error: 'Hubo un error al eliminar el enlace compartido.',
com_ui_share_delete_error: 'Hubo un error al eliminar el enlace compartido.',
com_ui_share_create_message:
'Tu nombre y cualquier mensaje que agregues después de compartir se mantendrán privados.',
com_ui_share_created_message:
@ -1124,6 +1126,14 @@ export const comparisons = {
english: 'Share link to chat',
translated: 'Compartir enlace en el chat',
},
com_ui_share_retrieve_error: {
english: 'There was an error deleting the shared link.',
translated: 'Hubo un error al eliminar el enlace compartido.',
},
com_ui_share_delete_error: {
english: 'There was an error deleting the shared link.',
translated: 'Hubo un error al eliminar el enlace compartido.',
},
com_ui_share_error: {
english: 'There was an error sharing the chat link',
translated: 'Hubo un error al compartir el enlace del chat',

View file

@ -66,6 +66,8 @@ export default {
com_ui_share: 'Share',
com_ui_share_link_to_chat: 'Share link to chat',
com_ui_share_error: 'There was an error sharing the chat link',
com_ui_share_retrieve_error: 'Une erreur est survenue lors de la suppression du lien partagé.',
com_ui_share_delete_error: 'Une erreur est survenue lors de la suppression du lien partagé.',
com_ui_share_create_message: 'Your name and any messages you add after sharing stay private.',
com_ui_share_created_message:
'A shared link to your chat has been created. Manage previously shared chats at any time via Settings.',
@ -824,6 +826,14 @@ export const comparisons = {
english: 'Share link to chat',
translated: 'Share link to chat',
},
com_ui_share_retrieve_error: {
english: 'There was an error deleting the shared link.',
translated: 'Une erreur est survenue lors de la suppression du lien partagé.',
},
com_ui_share_delete_error: {
english: 'There was an error deleting the shared link.',
translated: 'Une erreur est survenue lors de la suppression du lien partagé.',
},
com_ui_share_error: {
english: 'There was an error sharing the chat link',
translated: 'There was an error sharing the chat link',

View file

@ -96,6 +96,8 @@ export default {
com_ui_create_link: 'צור קישור',
com_ui_share_link_to_chat: 'שתף קישור בצ\'אט',
com_ui_share_error: 'אירעה שגיאה בעת שיתוף קישור הצ\'אט',
com_ui_share_retrieve_error: 'אירעה שגיאה בעת מחיקת הקישור המשותף.',
com_ui_share_delete_error: 'אירעה שגיאה בעת מחיקת הקישור המשותף.',
com_ui_share_create_message: 'שמך וכל הודעה שתוסיף לאחר השיתוף יישארו פרטיים.',
com_ui_share_created_message:
'A shared link to your chat has been created. Manage previously shared chats at any time via Settings.',
@ -759,6 +761,14 @@ export const comparisons = {
english: 'Share link to chat',
translated: 'שתף קישור בצ\'אט',
},
com_ui_share_retrieve_error: {
english: 'There was an error deleting the shared link.',
translated: 'אירעה שגיאה בעת מחיקת הקישור המשותף.',
},
com_ui_share_delete_error: {
english: 'There was an error deleting the shared link.',
translated: 'אירעה שגיאה בעת מחיקת הקישור המשותף.',
},
com_ui_share_error: {
english: 'There was an error sharing the chat link',
translated: 'אירעה שגיאה בעת שיתוף קישור הצ\'אט',

View file

@ -65,6 +65,8 @@ export default {
com_ui_create_link: 'Buat tautan',
com_ui_share_link_to_chat: 'Bagikan tautan ke chat',
com_ui_share_error: 'Terjadi kesalahan saat membagikan tautan chat',
com_ui_share_retrieve_error: 'Terjadi kesalahan saat menghapus tautan yang dibagikan.',
com_ui_share_delete_error: 'Terjadi kesalahan saat menghapus tautan yang dibagikan.',
com_ui_share_create_message:
'Nama Anda dan pesan apa pun yang Anda tambahkan setelah berbagi tetap pribadi.',
com_ui_share_created_message:
@ -616,6 +618,14 @@ export const comparisons = {
english: 'Share link to chat',
translated: 'Bagikan tautan ke chat',
},
com_ui_share_retrieve_error: {
english: 'There was an error deleting the shared link.',
translated: 'Terjadi kesalahan saat menghapus tautan yang dibagikan.',
},
com_ui_share_delete_error: {
english: 'There was an error deleting the shared link.',
translated: 'Terjadi kesalahan saat menghapus tautan yang dibagikan.',
},
com_ui_share_error: {
english: 'There was an error sharing the chat link',
translated: 'Terjadi kesalahan saat membagikan tautan chat',

View file

@ -192,6 +192,9 @@ export default {
com_ui_create_link: 'Crea link',
com_ui_share_link_to_chat: 'Condividi link a chat',
com_ui_share_error: 'Si è verificato un errore durante la condivisione del link della chat',
com_ui_share_retrieve_error:
'Si è verificato un errore durante l\'eliminazione del link condiviso.',
com_ui_share_delete_error: 'Si è verificato un errore durante l\'eliminazione del link condiviso.',
com_ui_share_create_message:
'Il tuo nome e qualsiasi messaggio aggiunto dopo la condivisione rimarranno privati.',
com_ui_share_created_message:
@ -1286,6 +1289,14 @@ export const comparisons = {
english: 'Share link to chat',
translated: 'Condividi link a chat',
},
com_ui_share_retrieve_error: {
english: 'There was an error deleting the shared link.',
translated: 'Si è verificato un errore durante l\'eliminazione del link condiviso.',
},
com_ui_share_delete_error: {
english: 'There was an error deleting the shared link.',
translated: 'Si è verificato un errore durante l\'eliminazione del link condiviso.',
},
com_ui_share_error: {
english: 'There was an error sharing the chat link',
translated: 'Si è verificato un errore durante la condivisione del link della chat',

View file

@ -152,6 +152,8 @@ export default {
com_ui_create_link: 'リンクを作成する',
com_ui_share_link_to_chat: 'チャットへの共有リンク',
com_ui_share_error: 'チャットの共有リンクの共有中にエラーが発生しました',
com_ui_share_retrieve_error: '共有リンクの削除中にエラーが発生しました。',
com_ui_share_delete_error: '共有リンクの削除中にエラーが発生しました。',
com_ui_share_create_message:
'あなたの名前と共有リンクを作成した後のメッセージは、共有されません。',
com_ui_share_created_message:
@ -1140,6 +1142,14 @@ export const comparisons = {
english: 'Share link to chat',
translated: 'チャットへの共有リンク',
},
com_ui_share_retrieve_error: {
english: 'There was an error deleting the shared link.',
translated: '共有リンクの削除中にエラーが発生しました。',
},
com_ui_share_delete_error: {
english: 'There was an error deleting the shared link.',
translated: '共有リンクの削除中にエラーが発生しました。',
},
com_ui_share_error: {
english: 'There was an error sharing the chat link',
translated: 'チャットの共有リンクの共有中にエラーが発生しました',

View file

@ -55,6 +55,8 @@ export default {
com_ui_create_link: '링크 만들기',
com_ui_share_link_to_chat: '채팅으로 링크 공유하기',
com_ui_share_error: '채팅 링크를 공유하는 동안 오류가 발생했습니다',
com_ui_share_retrieve_error: '공유 링크를 삭제하는 중에 오류가 발생했습니다.',
com_ui_share_delete_error: '공유 링크를 삭제하는 중에 오류가 발생했습니다.',
com_ui_share_create_message: '이름과 공유 후에 추가하는 메시지는 비공개로 유지됩니다.',
com_ui_share_created_message:
'귀하의 채팅에 대한 공유 링크가 생성되었습니다. 설정을 통해 언제든지 이전에 공유한 채팅을 관리할 수 있습니다.',
@ -781,6 +783,14 @@ export const comparisons = {
english: 'Share link to chat',
translated: '채팅으로 링크 공유하기',
},
com_ui_share_retrieve_error: {
english: 'There was an error deleting the shared link.',
translated: '공유 링크를 삭제하는 중에 오류가 발생했습니다.',
},
com_ui_share_delete_error: {
english: 'There was an error deleting the shared link.',
translated: '공유 링크를 삭제하는 중에 오류가 발생했습니다.',
},
com_ui_share_error: {
english: 'There was an error sharing the chat link',
translated: '채팅 링크를 공유하는 동안 오류가 발생했습니다',

View file

@ -59,6 +59,9 @@ export default {
com_ui_create_link: 'Link aanmaken',
com_ui_share_link_to_chat: 'Deel link naar chat',
com_ui_share_error: 'Er is een fout opgetreden bij het delen van de chatlink',
com_ui_share_retrieve_error:
'Er is een fout opgetreden bij het verwijderen van de gedeelde link.',
com_ui_share_delete_error: 'Er is een fout opgetreden bij het verwijderen van de gedeelde link.',
com_ui_share_create_message:
'Uw naam en alle berichten die u na het delen toevoegt, blijven privé.',
com_ui_share_created_message:
@ -534,6 +537,14 @@ export const comparisons = {
english: 'Share link to chat',
translated: 'Deel link naar chat',
},
com_ui_share_retrieve_error: {
english: 'There was an error deleting the shared link.',
translated: 'Er is een fout opgetreden bij het verwijderen van de gedeelde link.',
},
com_ui_share_delete_error: {
english: 'There was an error deleting the shared link.',
translated: 'Er is een fout opgetreden bij het verwijderen van de gedeelde link.',
},
com_ui_share_error: {
english: 'There was an error sharing the chat link',
translated: 'Er is een fout opgetreden bij het delen van de chatlink',

View file

@ -36,7 +36,10 @@ export default {
com_ui_create_link: 'Utwórz link',
com_ui_share_link_to_chat: 'Udostępnij link w czacie',
com_ui_share_error: 'Wystąpił błąd podczas udostępniania linku do czatu',
com_ui_share_create_message: 'Twoje imię i jakiekolwiek wiadomości dodane po udostępnieniu pozostaną prywatne.',
com_ui_share_retrieve_error: 'Wystąpił błąd podczas usuwania udostępnionego linku.',
com_ui_share_delete_error: 'Wystąpił błąd podczas usuwania udostępnionego linku.',
com_ui_share_create_message:
'Twoje imię i jakiekolwiek wiadomości dodane po udostępnieniu pozostaną prywatne.',
com_ui_share_created_message:
'Utworzono link udostępniony do Twojego czatu. Zarządzaj wcześniej udostępnionymi czatami w dowolnym momencie za pomocą Ustawień.',
com_ui_share_update_message:
@ -360,6 +363,14 @@ export const comparisons = {
english: 'Share link to chat',
translated: 'Udostępnij link w czacie',
},
com_ui_share_retrieve_error: {
english: 'There was an error deleting the shared link.',
translated: 'Wystąpił błąd podczas usuwania udostępnionego linku.',
},
com_ui_share_delete_error: {
english: 'There was an error deleting the shared link.',
translated: 'Wystąpił błąd podczas usuwania udostępnionego linku.',
},
com_ui_share_error: {
english: 'There was an error sharing the chat link',
translated: 'Wystąpił błąd podczas udostępniania linku do czatu',

View file

@ -71,6 +71,8 @@ export default {
com_ui_create_link: 'Создать ссылку',
com_ui_share_link_to_chat: 'Поделиться ссылкой в чате',
com_ui_share_error: 'Произошла ошибка при попытке поделиться ссылкой на чат',
com_ui_share_retrieve_error: 'Произошла ошибка при удалении общей ссылки.',
com_ui_share_delete_error: 'Произошла ошибка при удалении общей ссылки.',
com_ui_share_create_message:
'Ваше имя и любые сообщения, которые вы добавите после обмена, останутся конфиденциальными.',
com_ui_share_created_message:
@ -854,6 +856,14 @@ export const comparisons = {
english: 'Share link to chat',
translated: 'Поделиться ссылкой в чате',
},
com_ui_share_retrieve_error: {
english: 'There was an error deleting the shared link.',
translated: 'Произошла ошибка при удалении общей ссылки.',
},
com_ui_share_delete_error: {
english: 'There was an error deleting the shared link.',
translated: 'Произошла ошибка при удалении общей ссылки.',
},
com_ui_share_error: {
english: 'There was an error sharing the chat link',
translated: 'Произошла ошибка при попытке поделиться ссылкой на чат',

View file

@ -56,6 +56,8 @@ export default {
com_ui_create_link: 'Skapa länk',
com_ui_share_link_to_chat: 'Dela länk till chatt',
com_ui_share_error: 'Ett fel uppstod vid delning av chattlänken',
com_ui_share_retrieve_error: 'Ett fel uppstod vid borttagningen av den delade länken.',
com_ui_share_delete_error: 'Ett fel uppstod vid borttagningen av den delade länken.',
com_ui_share_create_message:
'Ditt namn och alla meddelanden du lägger till efter delningen förblir privata.',
com_ui_share_created_message:
@ -514,6 +516,14 @@ export const comparisons = {
english: 'Share link to chat',
translated: 'Dela länk till chatt',
},
com_ui_share_retrieve_error: {
english: 'There was an error deleting the shared link.',
translated: 'Ett fel uppstod vid borttagningen av den delade länken.',
},
com_ui_share_delete_error: {
english: 'There was an error deleting the shared link.',
translated: 'Ett fel uppstod vid borttagningen av den delade länken.',
},
com_ui_share_error: {
english: 'There was an error sharing the chat link',
translated: 'Ett fel uppstod vid delning av chattlänken',

View file

@ -58,6 +58,8 @@ export default {
com_ui_create_link: 'Bağlantı oluştur',
com_ui_share_link_to_chat: 'Bağlantıyı sohbete paylaş',
com_ui_share_error: 'Sohbet bağlantısını paylaşırken bir hata oluştu',
com_ui_share_retrieve_error: 'Paylaşılan bağlantıyı silerken bir hata oluştu.',
com_ui_share_delete_error: 'Paylaşılan bağlantıyı silerken bir hata oluştu.',
com_ui_share_create_message:
'Adınız ve paylaşım sonrasında eklediğiniz herhangi bir mesaj özel kalır.',
com_ui_share_created_message:
@ -550,6 +552,14 @@ export const comparisons = {
english: 'Share link to chat',
translated: 'Bağlantıyı sohbete paylaş',
},
com_ui_share_retrieve_error: {
english: 'There was an error deleting the shared link.',
translated: 'Paylaşılan bağlantıyı silerken bir hata oluştu.',
},
com_ui_share_delete_error: {
english: 'There was an error deleting the shared link.',
translated: 'Paylaşılan bağlantıyı silerken bir hata oluştu.',
},
com_ui_share_error: {
english: 'There was an error sharing the chat link',
translated: 'Sohbet bağlantısını paylaşırken bir hata oluştu',

View file

@ -58,6 +58,8 @@ export default {
com_ui_create_link: 'Tạo liên kết',
com_ui_share_link_to_chat: 'Chia sẻ liên kết đến cuộc trò chuyện',
com_ui_share_error: 'Có lỗi xảy ra khi chia sẻ liên kết trò chuyện',
com_ui_share_retrieve_error: 'Đã xảy ra lỗi khi xóa liên kết được chia sẻ.',
com_ui_share_delete_error: 'Đã xảy ra lỗi khi xóa liên kết được chia sẻ.',
com_ui_share_create_message:
'Tên của bạn và bất kỳ tin nhắn nào bạn thêm sau khi chia sẻ sẽ được giữ kín.',
com_ui_share_created_message:
@ -513,6 +515,14 @@ export const comparisons = {
english: 'Share link to chat',
translated: 'Chia sẻ liên kết đến cuộc trò chuyện',
},
com_ui_share_retrieve_error: {
english: 'There was an error deleting the shared link.',
translated: 'Đã xảy ra lỗi khi xóa liên kết được chia sẻ.',
},
com_ui_share_delete_error: {
english: 'There was an error deleting the shared link.',
translated: 'Đã xảy ra lỗi khi xóa liên kết được chia sẻ.',
},
com_ui_share_error: {
english: 'There was an error sharing the chat link',
translated: 'Có lỗi xảy ra khi chia sẻ liên kết trò chuyện',

View file

@ -137,6 +137,8 @@ export default {
com_ui_create_link: '创建链接',
com_ui_share_link_to_chat: '分享链接到聊天',
com_ui_share_error: '分享聊天链接时发生错误',
com_ui_share_retrieve_error: '删除共享链接时出错。',
com_ui_share_delete_error: '删除共享链接时出错。',
com_ui_share_create_message: '您的名字及您在分享后添加的任何消息将保持私密。',
com_ui_share_created_message: '已创建到您聊天的共享链接。可以通过设置随时管理以前共享的聊天。',
com_ui_share_update_message: '您的名字、定制指令及您在分享后添加的任何消息将保持私密。',
@ -1073,6 +1075,14 @@ export const comparisons = {
english: 'Share link to chat',
translated: '分享链接到聊天',
},
com_ui_share_retrieve_error: {
english: 'There was an error deleting the shared link.',
translated: '删除共享链接时出错。',
},
com_ui_share_delete_error: {
english: 'There was an error deleting the shared link.',
translated: '删除共享链接时出错。',
},
com_ui_share_error: {
english: 'There was an error sharing the chat link',
translated: '分享聊天链接时发生错误',

View file

@ -55,6 +55,8 @@ export default {
com_ui_create_link: '建立連結',
com_ui_share_link_to_chat: '分享連結到聊天',
com_ui_share_error: '分享聊天連結時發生錯誤',
com_ui_share_retrieve_error: '刪除共享鏈接時出錯。',
com_ui_share_delete_error: '刪除共享鏈接時出錯。',
com_ui_share_create_message: '您的姓名以及您在共享後新增的任何訊息都會保密。',
com_ui_share_created_message: '已建立到您的聊天的共享連結。可以隨時透過設定管理以前共享的聊天。',
com_ui_share_update_message: '您的姓名、自定義指示以及您在共享後新增的任何訊息都會保密。',
@ -759,6 +761,14 @@ export const comparisons = {
english: 'Share link to chat',
translated: '分享連結到聊天',
},
com_ui_share_retrieve_error: {
english: 'There was an error deleting the shared link.',
translated: '刪除共享鏈接時出錯。',
},
com_ui_share_delete_error: {
english: 'There was an error deleting the shared link.',
translated: '刪除共享鏈接時出錯。',
},
com_ui_share_error: {
english: 'There was an error sharing the chat link',
translated: '分享聊天連結時發生錯誤',