diff --git a/app/containers/Chip/Chip.stories.tsx b/app/containers/Chip/Chip.stories.tsx
index d81eaf0ed24..eb2563fa02b 100644
--- a/app/containers/Chip/Chip.stories.tsx
+++ b/app/containers/Chip/Chip.stories.tsx
@@ -15,9 +15,9 @@ export default {
title: 'Chip'
};
-const ChipWrapped = ({ avatar, text, onPress, testID, style }: IChip) => (
+const ChipWrapped = ({ avatar, text, onPress, testID, style, fullWidth }: IChip) => (
-
+
);
@@ -30,3 +30,5 @@ export const ChipWithoutAvatar = () => ;
export const ChipWithoutAvatarAndIcon = () => ;
+
+export const ChipFullWidth = () => ;
diff --git a/app/containers/Chip/__snapshots__/Chip.test.tsx.snap b/app/containers/Chip/__snapshots__/Chip.test.tsx.snap
index 97e0d22a80b..e34fd48920c 100644
--- a/app/containers/Chip/__snapshots__/Chip.test.tsx.snap
+++ b/app/containers/Chip/__snapshots__/Chip.test.tsx.snap
@@ -1,5 +1,108 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
+exports[`Story Snapshots: ChipFullWidth should match snapshot 1`] = `
+
+
+
+
+
+ Full Width Text With Long Text That Should Be Wrapped
+
+
+
+
+
+`;
+
exports[`Story Snapshots: ChipText should match snapshot 1`] = `
;
+ fullWidth?: boolean;
}
-const Chip = ({ avatar, text, onPress, testID, style }: IChip) => {
+const Chip = ({ avatar, text, onPress, testID, style, fullWidth }: IChip) => {
const { colors } = useTheme();
return (
@@ -49,7 +50,8 @@ const Chip = ({ avatar, text, onPress, testID, style }: IChip) => {
style={({ pressed }) => [
styles.pressable,
{
- backgroundColor: pressed ? colors.surfaceNeutral : colors.surfaceHover
+ backgroundColor: pressed ? colors.surfaceNeutral : colors.surfaceHover,
+ maxWidth: fullWidth ? undefined : styles.pressable.maxWidth
},
style
]}
@@ -60,7 +62,7 @@ const Chip = ({ avatar, text, onPress, testID, style }: IChip) => {
}}>
{avatar ? : null}
-
+
{text}
diff --git a/app/containers/RoomItem/RoomItem.stories.tsx b/app/containers/RoomItem/RoomItem.stories.tsx
index 962de2ab91d..026c0b56f8f 100644
--- a/app/containers/RoomItem/RoomItem.stories.tsx
+++ b/app/containers/RoomItem/RoomItem.stories.tsx
@@ -189,3 +189,10 @@ export const OmnichannelIcon = () => (
>
);
+
+export const InvitedRoom = () => (
+ <>
+
+
+ >
+);
diff --git a/app/containers/RoomItem/RoomItem.tsx b/app/containers/RoomItem/RoomItem.tsx
index 3b6454fbbc6..2c6ea72ccea 100644
--- a/app/containers/RoomItem/RoomItem.tsx
+++ b/app/containers/RoomItem/RoomItem.tsx
@@ -16,6 +16,8 @@ import { type IRoomItemProps } from './interfaces';
import { formatLastMessage } from '../../lib/methods/formatLastMessage';
import useStatusAccessibilityLabel from '../../lib/hooks/useStatusAccessibilityLabel';
import { useResponsiveLayout } from '../../lib/hooks/useResponsiveLayout/useResponsiveLayout';
+import { CustomIcon } from '../CustomIcon';
+import { useTheme } from '../../theme';
const RoomItem = ({
rid,
@@ -53,10 +55,12 @@ const RoomItem = ({
displayMode,
sourceType,
hideMentionStatus,
- accessibilityDate
+ accessibilityDate,
+ isInvited
}: IRoomItemProps) => {
'use memo';
+ const { colors } = useTheme();
const { isLargeFontScale } = useResponsiveLayout();
const memoizedMessage = useMemo(
() => formatLastMessage({ lastMessage, username, useRealName, showLastMessage, alert, type }),
@@ -137,6 +141,15 @@ const RoomItem = ({
hideMentionStatus={hideMentionStatus}
hideUnreadStatus={hideUnreadStatus}
/>
+ {isInvited ? (
+
+ ) : null}
{isLargeFontScale ? : null}
>
@@ -156,6 +169,15 @@ const RoomItem = ({
/>
{autoJoin ? : null}
+ {isInvited ? (
+
+ ) : null}
{isLargeFontScale ? null : }
diff --git a/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap b/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap
index d71134badb7..5c1b513dc86 100644
--- a/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap
+++ b/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap
@@ -13850,6 +13850,1313 @@ exports[`Story Snapshots: ExpandedRoomItemWithoutAvatar should match snapshot 1`
]
`;
+exports[`Story Snapshots: InvitedRoom should match snapshot 1`] = `
+[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+
+
+ 10:00
+
+
+
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ rocket.cat
+
+
+
+
+
+
+ 10:00
+
+
+
+
+
+
+
+
+ ,
+]
+`;
+
exports[`Story Snapshots: LastMessage should match snapshot 1`] = `
[
;
disableNotifications?: boolean;
federated?: boolean;
+ inviter?: Required> & Pick;
+}
+
+export interface IInviteSubscription extends ISubscription {
+ status: 'INVITED';
+ inviter: NonNullable;
}
export type TSubscriptionModel = ISubscription &
diff --git a/app/definitions/rest/v1/rooms.ts b/app/definitions/rest/v1/rooms.ts
index 2da03ec4539..fdb75dbc5d0 100644
--- a/app/definitions/rest/v1/rooms.ts
+++ b/app/definitions/rest/v1/rooms.ts
@@ -54,6 +54,9 @@ export type RoomsEndpoints = {
success: boolean;
};
};
+ 'rooms.invite': {
+ POST: (params: { roomId: string; action: 'accept' | 'reject' }) => void;
+ };
};
export type TRoomsMediaResponse = {
diff --git a/app/i18n/locales/ar.json b/app/i18n/locales/ar.json
index c2779f0df04..2b782cb1420 100644
--- a/app/i18n/locales/ar.json
+++ b/app/i18n/locales/ar.json
@@ -195,6 +195,7 @@
"error-invalid-file-type": "نوع الملف غير صالح",
"error-invalid-password": "كلمة مرور خاطئة",
"error-invalid-room-name": "{{room_name}} اسم الغرفة غير صالح",
+ "error-invitation-reply-action": "خطأ أثناء إرسال رد الدعوة",
"error-not-allowed": "غير مسموح",
"error-save-image": "خطأ عند حفظ الصورة",
"error-save-video": "خطأ عند حفظ الفيديو",
@@ -255,6 +256,11 @@
"Invite_user_to_join_channel_all_from": "دعوة جميع المستخدمين من [#channel] إلى الانضمام إلى هذه القناة",
"Invite_user_to_join_channel_all_to": "دعوة جميع المستخدمين من هذه القناة إلى الانضمام إلى [#channel]",
"Invite_users": "دعوة المستخدمين",
+ "Invited": "مدعو",
+ "invited_room_description_channel": "تمت دعوتك بواسطة",
+ "invited_room_description_dm": "تمت دعوتك لإجراء محادثة مع",
+ "invited_room_title_channel": "دعوة للانضمام إلى {{room_name}}",
+ "invited_room_title_dm": "طلب رسالة",
"IP": " عنوان بروتوكول الإنترنت (الآيبي)",
"is_typing": "يكتب",
"Join": "انضم",
@@ -443,6 +449,7 @@
"Record_audio_message": "تسجيل رسالة صوتية",
"Register": "تسجيل",
"Registration_Succeeded": "تم التسجيل بنجاح",
+ "reject": "رفض",
"Remove": "حذف",
"remove": "حذف",
"Remove_from_workspace_history": "إزالة من سجل مساحة العمل",
diff --git a/app/i18n/locales/bn-IN.json b/app/i18n/locales/bn-IN.json
index 55543988474..c7eaa1d30a5 100644
--- a/app/i18n/locales/bn-IN.json
+++ b/app/i18n/locales/bn-IN.json
@@ -299,6 +299,7 @@
"error-invalid-file-type": "অবৈধ ফাইল টাইপ",
"error-invalid-password": "অবৈধ পাসওয়ার্ড",
"error-invalid-room-name": "{{room_name}} একটি বৈধ রুম নয়",
+ "error-invitation-reply-action": "আমন্ত্রণের উত্তর পাঠাতে ত্রুটি",
"error-not-allowed": "অনুমোদিত নয়",
"error-not-permission-to-upload-file": "আপলোড করতে আপনার অনুমতি নেই",
"error-save-image": "ছবি সংরক্ষণে সমস্যা হয়েছে",
@@ -369,6 +370,11 @@
"Invalid_workspace_URL": "অবৈধ ওয়ার্কস্পেস URL",
"Invite_Link": "আমন্ত্রণ লিঙ্ক",
"Invite_users": "ব্যবহারকারীদের আমন্ত্রণ করুন",
+ "Invited": "আমন্ত্রিত",
+ "invited_room_description_channel": "আপনাকে আমন্ত্রণ জানিয়েছেন",
+ "invited_room_description_dm": "আপনাকে একটি কথোপকথনের জন্য আমন্ত্রণ জানানো হয়েছে",
+ "invited_room_title_channel": "{{room_name}} এ যোগদানের আমন্ত্রণ",
+ "invited_room_title_dm": "বার্তা অনুরোধ",
"IP": "IP",
"is_typing": "টাইপ করছে",
"Jitsi_authentication_before_making_calls": "জিতসি কল করার আগে সত্যাপন প্রয়োজন হতে পারে। তাদের নীতি সম্পর্কে আরও জানতে, জিতসি ওয়েবসাইট দেখুন।",
@@ -618,6 +624,7 @@
"Record_audio_message": "শব্দবার্তা রেকর্ড করুন",
"Register": "নিবন্ধন করুন",
"Registration_Succeeded": "নিবন্ধন সফল!",
+ "reject": "প্রত্যাখ্যান",
"Remove": "মুছুন",
"remove": "মুছুন",
"Remove_from_room": "রুম থেকে সরান",
diff --git a/app/i18n/locales/cs.json b/app/i18n/locales/cs.json
index f208def25db..bb8669e8730 100644
--- a/app/i18n/locales/cs.json
+++ b/app/i18n/locales/cs.json
@@ -318,6 +318,7 @@
"error-invalid-file-type": "Neplatný typ souboru",
"error-invalid-password": "Neplatné heslo",
"error-invalid-room-name": "{{room_name}} není platný název místnosti",
+ "error-invitation-reply-action": "Chyba při odesílání odpovědi na pozvánku",
"error-no-tokens-for-this-user": "Pro tohoto uživatele neexistují žádné tokeny",
"error-not-allowed": "Nepovoleno",
"error-not-permission-to-upload-file": "Nemáte oprávnění nahrávat soubory",
@@ -397,6 +398,11 @@
"Invite_user_to_join_channel_all_from": "Pozvat všechny uživatele z [#channel], aby se připojili k tomuto kanálu",
"Invite_user_to_join_channel_all_to": "Pozvat všechny uživatele z tohoto kanálu, aby se připojili ke [#channel]",
"Invite_users": "Pozvat uživatele",
+ "Invited": "Pozván",
+ "invited_room_description_channel": "Byli jste pozváni uživatelem",
+ "invited_room_description_dm": "Byli jste pozváni k rozhovoru s",
+ "invited_room_title_channel": "Pozvánka k připojení k {{room_name}}",
+ "invited_room_title_dm": "Žádost o zprávu",
"IP": "IP",
"is_typing": "píše",
"Italic": "kurzíva",
@@ -662,6 +668,7 @@
"Recording_audio_in_progress": "Nahrávání zvukové zprávy",
"Register": "Registrovat",
"Registration_Succeeded": "Registrace byla úspěšná!",
+ "reject": "Odmítnout",
"Remove": "Odstranit",
"remove": "odstranit",
"Remove_from_room": "Odebrat z místnosti",
diff --git a/app/i18n/locales/de.json b/app/i18n/locales/de.json
index 019cae092aa..64d1e4f2ee7 100644
--- a/app/i18n/locales/de.json
+++ b/app/i18n/locales/de.json
@@ -293,6 +293,7 @@
"error-invalid-file-type": "Ungültiger Dateityp",
"error-invalid-password": "Ungültiges Passwort",
"error-invalid-room-name": "{{room_name}} ist kein gültiger Room-Name",
+ "error-invitation-reply-action": "Fehler beim Senden der Einladungsantwort",
"error-not-allowed": "Nicht erlaubt",
"error-not-permission-to-upload-file": "Sie haben keine Berechtigung zum Hochladen von Dateien",
"error-save-image": "Fehler beim Speichern des Bildes",
@@ -365,6 +366,11 @@
"Invite_user_to_join_channel_all_from": "Alle Benutzer des Channels [#channel] einladen, diesem Channel zu folgen",
"Invite_user_to_join_channel_all_to": "Alle Benutzer dieses Channels einladen, dem Channel [#channel] zu folgen",
"Invite_users": "Benutzer einladen",
+ "Invited": "Eingeladen",
+ "invited_room_description_channel": "Sie wurden eingeladen von",
+ "invited_room_description_dm": "Sie wurden zu einem Gespräch eingeladen",
+ "invited_room_title_channel": "Einladung zum Beitritt zu {{room_name}}",
+ "invited_room_title_dm": "Nachrichtenanfrage",
"IP": "IP",
"is_typing": "schreibt",
"Join": "Beitreten",
@@ -605,6 +611,7 @@
"Record_audio_message": "Audioaufnahme aufzeichnen",
"Register": "Registrieren",
"Registration_Succeeded": "Registrierung erfolgreich!",
+ "reject": "Ablehnen",
"Remove": "Entfernen",
"remove": "entfernen",
"Remove_from_room": "Aus dem Room entfernen",
diff --git a/app/i18n/locales/en.json b/app/i18n/locales/en.json
index a8157a29b8a..7cde36b99bb 100644
--- a/app/i18n/locales/en.json
+++ b/app/i18n/locales/en.json
@@ -337,6 +337,7 @@
"error-invalid-file-type": "Invalid file type",
"error-invalid-password": "Invalid password",
"error-invalid-room-name": "{{room_name}} is not a valid room name",
+ "error-invitation-reply-action": "Error while sending invitation reply",
"error-no-tokens-for-this-user": "There are no tokens for this user",
"error-not-allowed": "Not allowed",
"error-not-permission-to-upload-file": "You don't have permission to upload files",
@@ -416,6 +417,11 @@
"Invite_user_to_join_channel_all_from": "Invite all users from [#channel] to join this channel",
"Invite_user_to_join_channel_all_to": "Invite all users from this channel to join [#channel]",
"Invite_users": "Invite users",
+ "Invited": "Invited",
+ "invited_room_description_channel": "You've been invited by",
+ "invited_room_description_dm": "You've been invited to have a conversation with",
+ "invited_room_title_channel": "Invitation to join {{room_name}}",
+ "invited_room_title_dm": "Message request",
"IP": "IP",
"is_typing": "is typing",
"Italic": "Italic",
@@ -684,6 +690,7 @@
"Recording_audio_in_progress": "Recording audio message",
"Register": "Register",
"Registration_Succeeded": "Registration succeeded!",
+ "reject": "Reject",
"Remove": "Remove",
"remove": "remove",
"Remove_from_room": "Remove from room",
diff --git a/app/i18n/locales/es.json b/app/i18n/locales/es.json
index e60f2c487db..28e449a8f29 100644
--- a/app/i18n/locales/es.json
+++ b/app/i18n/locales/es.json
@@ -160,6 +160,7 @@
"error-invalid-file-type": "El formato del archivo no es correcto",
"error-invalid-password": "La contraseña no es correcta",
"error-invalid-room-name": "No se puede asignar el nombre {{room_name}} a una sala.",
+ "error-invitation-reply-action": "Error al enviar respuesta de invitación",
"error-not-allowed": "No permitido",
"error-too-many-requests": "Error, demasiadas peticiones. Debes esperar {{seconds}} segundos antes de continuar. Por favor, sé paciente.",
"error-you-are-last-owner": "Eres el único propietario existente. Debes establecer un nuevo propietario antes de abandonar la sala.",
@@ -203,6 +204,12 @@
"Invite_user_to_join_channel": "Invitar a un usuario a unirse a este canal",
"Invite_user_to_join_channel_all_from": "Invitar a todos los usuarios de [#channell] a que se unan a este canal",
"Invite_user_to_join_channel_all_to": "Invitar a todos los usuarios de este canal a unirse a [#channel]",
+ "Invite_users": "Invitar usuarios",
+ "Invited": "Invitado",
+ "invited_room_description_channel": "Has sido invitado por",
+ "invited_room_description_dm": "Has sido invitado a tener una conversación con",
+ "invited_room_title_channel": "Invitación para unirse a {{room_name}}",
+ "invited_room_title_dm": "Solicitud de mensaje",
"is_typing": "escribiendo",
"Join": "Conectar",
"Join_the_given_channel": "Unirse al canal dado",
@@ -318,6 +325,7 @@
"Recently_used": "Recientemente usado",
"Record_audio_message": "Grabar mensaje de audio",
"Register": "Registrar",
+ "reject": "Rechazar",
"Remove_from_workspace_history": "Eliminar del historial del espacio de trabajo",
"Remove_someone_from_room": "Eliminar a alguien de la sala",
"replies": "respuestas",
diff --git a/app/i18n/locales/fi.json b/app/i18n/locales/fi.json
index 13bcf9c1341..192533cc012 100644
--- a/app/i18n/locales/fi.json
+++ b/app/i18n/locales/fi.json
@@ -278,6 +278,7 @@
"error-invalid-file-type": "Virheellinen tiedostotyyppi",
"error-invalid-password": "Virheellinen salasana",
"error-invalid-room-name": "{{room_name}} ei ole kelvollinen huoneen nimi",
+ "error-invitation-reply-action": "Virhe kutsuun vastaamisen lähettämisessä",
"error-not-allowed": "Ei sallittu",
"error-not-permission-to-upload-file": "Sinulla ei ole oikeutta ladata tiedostoja",
"error-save-image": "Virhe tallennettaessa kuvaa",
@@ -347,6 +348,11 @@
"Invite_user_to_join_channel_all_from": "Kutsu kaikki käyttäjät kanavalta [#channel] liittymään tälle kanavalle",
"Invite_user_to_join_channel_all_to": "Kutsu kaikki tämän kanavan käyttäjät liittymään kanavalle [#channel]",
"Invite_users": "Kutsu käyttäjiä",
+ "Invited": "Kutsuttu",
+ "invited_room_description_channel": "Sinut on kutsuttu käyttäjän",
+ "invited_room_description_dm": "Sinut on kutsuttu keskustelemaan käyttäjän",
+ "invited_room_title_channel": "Kutsu liittyä {{room_name}}",
+ "invited_room_title_dm": "Viestipyyntö",
"IP": "IP",
"is_typing": "kirjoittaa",
"Join": "Liity",
@@ -580,6 +586,7 @@
"Record_audio_message": "Tallenna ääniviesti",
"Register": "Rekisteröi",
"Registration_Succeeded": "Rekisteröinti onnistui!",
+ "reject": "Hylkää",
"Remove": "Poista",
"remove": "poista",
"Remove_from_room": "Poista huoneesta",
diff --git a/app/i18n/locales/fr.json b/app/i18n/locales/fr.json
index 7fe4f69c73f..8d17aff1f10 100644
--- a/app/i18n/locales/fr.json
+++ b/app/i18n/locales/fr.json
@@ -244,6 +244,7 @@
"error-invalid-file-type": "Type de fichier invalide",
"error-invalid-password": "Mot de passe incorrect",
"error-invalid-room-name": "{{room_name}} n'est pas un nom de salon valide",
+ "error-invitation-reply-action": "Erreur lors de l'envoi de la réponse à l'invitation",
"error-not-allowed": "Interdit",
"error-not-permission-to-upload-file": "Vous n'êtes pas autorisé à envoyer des fichiers",
"error-save-image": "Erreur lors de l'enregistrement de l'image",
@@ -312,6 +313,11 @@
"Invite_user_to_join_channel_all_from": "Inviter tous les utilisateurs de [#channel] à rejoindre ce canal",
"Invite_user_to_join_channel_all_to": "Inviter tous les utilisateurs de ce canal à rejoindre [#channel]",
"Invite_users": "Inviter des utilisateurs",
+ "Invited": "Invité",
+ "invited_room_description_channel": "Vous avez été invité par",
+ "invited_room_description_dm": "Vous avez été invité à avoir une conversation avec",
+ "invited_room_title_channel": "Invitation à rejoindre {{room_name}}",
+ "invited_room_title_dm": "Demande de message",
"IP": "IP",
"is_typing": "est en train d'écrire",
"Join": "Rejoindre",
@@ -540,6 +546,7 @@
"Record_audio_message": "Enregistrer un message audio",
"Register": "S'inscrire",
"Registration_Succeeded": "Inscription réussie !",
+ "reject": "Rejeter",
"Remove": "Supprimer",
"remove": "supprimer",
"Remove_from_room": "Retirer du salon",
diff --git a/app/i18n/locales/hi-IN.json b/app/i18n/locales/hi-IN.json
index 505935fe9d6..758612aacd1 100644
--- a/app/i18n/locales/hi-IN.json
+++ b/app/i18n/locales/hi-IN.json
@@ -299,6 +299,7 @@
"error-invalid-file-type": "अवैध फ़ाइल प्रकार",
"error-invalid-password": "अवैध पासवर्ड",
"error-invalid-room-name": "{{room_name}} एक वैध कमरा नाम नहीं है",
+ "error-invitation-reply-action": "आमंत्रण उत्तर भेजते समय त्रुटि",
"error-not-allowed": "अनुमति नहीं है",
"error-not-permission-to-upload-file": "आपको फ़ाइल अपलोड करने की अनुमति नहीं है",
"error-save-image": "छवि सहेजते समय त्रुटि",
@@ -369,6 +370,11 @@
"Invalid_workspace_URL": "अमान्य कार्यक्षेत्र URL",
"Invite_Link": "निमंत्रण लिंक",
"Invite_users": "उपयोगकर्ताओं को निमंत्रित करें",
+ "Invited": "आमंत्रित",
+ "invited_room_description_channel": "आपको आमंत्रित किया गया है",
+ "invited_room_description_dm": "आपको बातचीत करने के लिए आमंत्रित किया गया है",
+ "invited_room_title_channel": "{{room_name}} में शामिल होने का निमंत्रण",
+ "invited_room_title_dm": "संदेश अनुरोध",
"IP": "आईपी",
"is_typing": "टाइप कर रहा है",
"Jitsi_authentication_before_making_calls": "कॉल करने से पहले जिट्सी को पहले से पहले प्रमाणीकरण की आवश्यकता हो सकती है। उनकी नीतियों के बारे में अधिक जानकारी प्राप्त करने के लिए, जिट्सी वेबसाइट पर जाएं।",
@@ -618,6 +624,7 @@
"Record_audio_message": "ऑडियो संदेश रिकॉर्ड करें",
"Register": "रजिस्टर",
"Registration_Succeeded": "पंजीकरण सफल हुआ!",
+ "reject": "अस्वीकार",
"Remove": "हटाएं",
"remove": "हटाएं",
"Remove_from_room": "कमरे से हटाएं",
diff --git a/app/i18n/locales/hu.json b/app/i18n/locales/hu.json
index 10628d7941b..0e561b31a27 100644
--- a/app/i18n/locales/hu.json
+++ b/app/i18n/locales/hu.json
@@ -299,6 +299,7 @@
"error-invalid-file-type": "Érvénytelen fájltípus",
"error-invalid-password": "Érvénytelen jelszó",
"error-invalid-room-name": "{{room_name}} nem érvényes szobanév",
+ "error-invitation-reply-action": "Hiba a meghívó válasz küldésekor",
"error-not-allowed": "Nem engedélyezett",
"error-not-permission-to-upload-file": "Nincs jogosultsága fájlok feltöltéséhez",
"error-save-image": "Hiba a kép mentése közben",
@@ -369,6 +370,11 @@
"Invalid_workspace_URL": "Érvénytelen munkaterület URL",
"Invite_Link": "Meghívási hivatkozás",
"Invite_users": "Felhasználók meghívása",
+ "Invited": "Meghívott",
+ "invited_room_description_channel": "Meghívottak",
+ "invited_room_description_dm": "Meghívottak beszélgetésre",
+ "invited_room_title_channel": "Meghívó a {{room_name}} csatlakozásához",
+ "invited_room_title_dm": "Üzenetkérés",
"IP": "IP-cím",
"is_typing": "éppen ír",
"Jitsi_authentication_before_making_calls": "A Jitsi a hívások kezdeményezése előtt hitelesítést igényelhet. Ha többet szeretne megtudni az irányelveikről, látogasson el a Jitsi weboldalára.",
@@ -619,6 +625,7 @@
"Record_audio_message": "Hangüzenet rögzítése",
"Register": "Regisztráció",
"Registration_Succeeded": "A regisztráció sikeres",
+ "reject": "Elutasít",
"Remove": "Eltávolítás",
"remove": "eltávolítás",
"Remove_from_room": "Eltávolítás a szobából",
diff --git a/app/i18n/locales/it.json b/app/i18n/locales/it.json
index 0dbbc9b618c..7478b0eb589 100644
--- a/app/i18n/locales/it.json
+++ b/app/i18n/locales/it.json
@@ -219,6 +219,7 @@
"error-invalid-file-type": "Tipo di file non valido",
"error-invalid-password": "Password non corretta",
"error-invalid-room-name": "{{room_name}} non è un nome di stanza valido",
+ "error-invitation-reply-action": "Errore durante l'invio della risposta all'invito",
"error-not-allowed": "Non permesso",
"error-not-permission-to-upload-file": "Non hai l'autorizzazione per caricare file",
"error-save-image": "Errore nel salvataggio dell'immagine",
@@ -284,6 +285,11 @@
"Invite_user_to_join_channel_all_from": "Invita tutti gli utenti da [#channell] per unirsi a questo canale",
"Invite_user_to_join_channel_all_to": "Invita tutti gli utenti di questo canale a unirsi [#channel]",
"Invite_users": "Invita utenti",
+ "Invited": "Invitato",
+ "invited_room_description_channel": "Sei stato invitato da",
+ "invited_room_description_dm": "Sei stato invitato ad avere una conversazione con",
+ "invited_room_title_channel": "Invito a unirti a {{room_name}}",
+ "invited_room_title_dm": "Richiesta di messaggio",
"IP": "Indirizzo IP",
"is_typing": "sta scrivendo",
"Join": "Entra",
@@ -478,6 +484,7 @@
"Record_audio_message": "Registra messaggio audio",
"Register": "Registrati",
"Registration_Succeeded": "Registrazione completata!",
+ "reject": "Rifiuta",
"Remove": "Rimuovi",
"Remove_from_room": "Rimuovi dalla stanza",
"Remove_from_workspace_history": "Rimuovi dalla cronologia dell'area di lavoro",
diff --git a/app/i18n/locales/ja.json b/app/i18n/locales/ja.json
index 74a7f8ba6b9..b411d1f38d1 100644
--- a/app/i18n/locales/ja.json
+++ b/app/i18n/locales/ja.json
@@ -194,6 +194,7 @@
"error-invalid-file-type": "ファイルの種類が不正です",
"error-invalid-password": "不正なパスワードです",
"error-invalid-room-name": "{{room_name}}は正しいルーム名ではありません。",
+ "error-invitation-reply-action": "招待への返信送信中にエラーが発生しました",
"error-not-allowed": "許可されていません。",
"error-not-permission-to-upload-file": "ファイルをアップロードする権限がありません",
"error-save-image": "画像の保存に失敗しました。",
@@ -256,6 +257,11 @@
"Invite_user_to_join_channel_all_from": "[#channel]のすべてのユーザーをこのチャネルに招待",
"Invite_user_to_join_channel_all_to": "このチャネルのすべてのユーザーを[#channel]に招待",
"Invite_users": "ユーザーを招待",
+ "Invited": "招待済み",
+ "invited_room_description_channel": "招待されました",
+ "invited_room_description_dm": "会話に招待されました",
+ "invited_room_title_channel": "{{room_name}}への招待",
+ "invited_room_title_dm": "メッセージリクエスト",
"IP": "IP",
"is_typing": "が入力中",
"Join": "参加",
@@ -397,6 +403,7 @@
"Record_audio_message": "音声メッセージを記録する",
"Register": "登録",
"Registration_Succeeded": "登録が成功しました",
+ "reject": "拒否",
"Remove_from_workspace_history": "ワークスペースの履歴から削除する",
"Remove_someone_from_room": "ルームからいずれかのユーザーを削除",
"replies": "返信",
diff --git a/app/i18n/locales/nl.json b/app/i18n/locales/nl.json
index 3ee4d220821..195bf9a0b4d 100644
--- a/app/i18n/locales/nl.json
+++ b/app/i18n/locales/nl.json
@@ -244,6 +244,7 @@
"error-invalid-file-type": "Ongeldig bestandstype",
"error-invalid-password": "Ongeldig wachtwoord",
"error-invalid-room-name": "{{room_name}} is geen geldige kamernaam",
+ "error-invitation-reply-action": "Fout bij het verzenden van uitnodigingsantwoord",
"error-not-allowed": "Niet toegestaan",
"error-not-permission-to-upload-file": "Je hebt geen toestemming om bestanden up te loaden",
"error-save-image": "Fout bij het opslaan van afbeelding",
@@ -312,6 +313,11 @@
"Invite_user_to_join_channel_all_from": "Nodig alle gebruikers van [#kanaal] uit om lid te worden van dit kanaal",
"Invite_user_to_join_channel_all_to": "Alle gebruikers van dit kanaal uitnodigen om lid te worden van [#channel]",
"Invite_users": "Gebruikers uitnodigen",
+ "Invited": "Uitgenodigd",
+ "invited_room_description_channel": "Je bent uitgenodigd door",
+ "invited_room_description_dm": "Je bent uitgenodigd om een gesprek te voeren met",
+ "invited_room_title_channel": "Uitnodiging om lid te worden van {{room_name}}",
+ "invited_room_title_dm": "Berichtverzoek",
"IP": "IP",
"is_typing": "is aan het typen",
"Join": "Doe mee",
@@ -540,6 +546,7 @@
"Record_audio_message": "Audiobericht opnemen",
"Register": "Registreren",
"Registration_Succeeded": "Registratie geslaagd!",
+ "reject": "Afwijzen",
"Remove": "Verwijderen",
"remove": "verwijderen",
"Remove_from_room": "Verwijderen uit kamer",
diff --git a/app/i18n/locales/nn.json b/app/i18n/locales/nn.json
index dcf132c0910..b3607120999 100644
--- a/app/i18n/locales/nn.json
+++ b/app/i18n/locales/nn.json
@@ -156,6 +156,8 @@
"error-invalid-email": "Ugyldig e-post {{email}}",
"error-invalid-file-type": "ugyldig filtype",
"error-invalid-password": "Ugyldig passord",
+ "error-invalid-room-name": "{{room_name}} er ikke et godkjent romnavn",
+ "error-invitation-reply-action": "Feil ved sending av invitasjonssvar",
"error-no-tokens-for-this-user": "Det er ingen tokens for denne brukeren",
"error-not-allowed": "Ikke tillatt",
"error-too-many-requests": "Feil, for mange forespørsler. Vennligst senke farten. Du må vente {{seconds}} sekunder før du prøver igjen.",
@@ -192,6 +194,12 @@
"Invite_user_to_join_channel": "Be en bruker til å bli med på denne kanalen",
"Invite_user_to_join_channel_all_from": "Inviter alle brukere fra [#kanal] for å bli med på denne kanalen",
"Invite_user_to_join_channel_all_to": "Inviter alle brukere fra denne kanalen til å delta i [#kanal]",
+ "Invite_users": "Inviter brukere",
+ "Invited": "Invitert",
+ "invited_room_description_channel": "Du har blitt invitert av",
+ "invited_room_description_dm": "Du har blitt invitert til å ha ein samtale med",
+ "invited_room_title_channel": "Invitasjon til å bli med i {{room_name}}",
+ "invited_room_title_dm": "Meldingforespørsel",
"IP": "IP",
"is_typing": "skriver",
"Italic": "Kursiv",
@@ -283,6 +291,7 @@
"Quote": "Sitat",
"Receive_Group_Mentions_Info": "Motta @all og @here nevner",
"Register": "Registrer en ny konto",
+ "reject": "Avvis",
"Remove": "Fjerne",
"Remove_from_room": "Fjern fra rommet",
"Remove_from_Team": "Fjern fra team",
diff --git a/app/i18n/locales/no.json b/app/i18n/locales/no.json
index 1505fdbcc80..f8b71710b9d 100644
--- a/app/i18n/locales/no.json
+++ b/app/i18n/locales/no.json
@@ -322,6 +322,7 @@
"error-invalid-file-type": "Ugyldig filtype",
"error-invalid-password": "Ugyldig passord",
"error-invalid-room-name": "{{room_name}} er ikke et godkjent romnavn",
+ "error-invitation-reply-action": "Feil ved sending av invitasjonssvar",
"error-no-tokens-for-this-user": "Det er ingen tokens for denne brukeren",
"error-not-allowed": "Ikke tillatt",
"error-not-permission-to-upload-file": "Du har ikke tillatelse til å laste opp filer",
@@ -392,6 +393,11 @@
"Invite_user_to_join_channel_all_from": "Inviter alle brukere fra [#channel] til å bli med i denne kanalen",
"Invite_user_to_join_channel_all_to": "Inviter alle brukere fra denne kanalen til å bli med i [#channel]",
"Invite_users": "Inviter brukere",
+ "Invited": "Invitert",
+ "invited_room_description_channel": "Du har blitt invitert av",
+ "invited_room_description_dm": "Du har blitt invitert til å ha en samtale med",
+ "invited_room_title_channel": "Invitasjon til å bli med i {{room_name}}",
+ "invited_room_title_dm": "Meldingforespørsel",
"IP": "IP",
"is_typing": "skriver",
"Italic": "Kursiv",
@@ -646,6 +652,7 @@
"Recording_audio_in_progress": "Tar opp lydmelding",
"Register": "Register",
"Registration_Succeeded": "Registreringen var vellykket!",
+ "reject": "Avvis",
"Remove": "Fjerne",
"remove": "fjerne",
"Remove_from_room": "Fjern fra rommet",
diff --git a/app/i18n/locales/pt-BR.json b/app/i18n/locales/pt-BR.json
index e2eca7c1f85..93deb5bb7e4 100644
--- a/app/i18n/locales/pt-BR.json
+++ b/app/i18n/locales/pt-BR.json
@@ -328,6 +328,7 @@
"error-invalid-file-type": "Tipo de arquivo inválido",
"error-invalid-password": "Senha inválida",
"error-invalid-room-name": "{{room_name}} não é um nome de sala válido",
+ "error-invitation-reply-action": "Erro ao enviar resposta do convite",
"error-no-tokens-for-this-user": "Não existem tokens para este usuário",
"error-not-allowed": "Não permitido",
"error-not-permission-to-upload-file": "Você não tem permissão para enviar arquivos",
@@ -406,6 +407,11 @@
"Invite_user_to_join_channel_all_from": "Convidar todos os usuários de [#channel] para ingressar neste canal",
"Invite_user_to_join_channel_all_to": "Convidar todos os usuários deste canal para ingressar no [#canal]",
"Invite_users": "Convidar usuários",
+ "Invited": "Convidado",
+ "invited_room_description_channel": "Você foi convidado por",
+ "invited_room_description_dm": "Você foi convidado para ter uma conversa com",
+ "invited_room_title_channel": "Convite para participar de {{room_name}}",
+ "invited_room_title_dm": "Solicitação de mensagem",
"IP": "IP",
"is_typing": "está digitando",
"Jitsi_authentication_before_making_calls": "Jitsi pode exigir autenticação antes de fazer chamadas. Para saber mais sobre suas políticas, visite o site do Jitsi.",
@@ -671,6 +677,7 @@
"Record_audio_message": "Gravar mensagem de áudio",
"Register": "Registrar",
"Registration_Succeeded": "Registrado com sucesso!",
+ "reject": "Rejeitar",
"Remove": "Remover",
"remove": "remover",
"Remove_from_room": "Remover do canal",
diff --git a/app/i18n/locales/pt-PT.json b/app/i18n/locales/pt-PT.json
index 7ee2fba8cfe..94f7625a314 100644
--- a/app/i18n/locales/pt-PT.json
+++ b/app/i18n/locales/pt-PT.json
@@ -190,6 +190,7 @@
"error-invalid-file-type": "Tipo de ficheiro inválido",
"error-invalid-password": "Palavra-passe inválida",
"error-invalid-room-name": "{{room_name}} não é um nome de sala válido",
+ "error-invitation-reply-action": "Erro ao enviar resposta do convite",
"error-not-allowed": "Não permitido",
"error-save-image": "Erro ao salvar imagem",
"error-save-video": "Erro ao salvar vídeo",
@@ -251,6 +252,11 @@
"Invite_user_to_join_channel_all_from": "Convide todos os utilizadores de [#channel] a participar deste canal",
"Invite_user_to_join_channel_all_to": "Convide todos os utilizadores deste canal a participar [#canal]",
"Invite_users": "Convidar utilizadores",
+ "Invited": "Convidado",
+ "invited_room_description_channel": "Foi convidado por",
+ "invited_room_description_dm": "Foi convidado para ter uma conversa com",
+ "invited_room_title_channel": "Convite para participar de {{room_name}}",
+ "invited_room_title_dm": "Pedido de mensagem",
"IP": "IP",
"is_typing": "está a escrever",
"Join": "Entrar",
@@ -410,6 +416,7 @@
"Recently_used": "Recentemente usado",
"Record_audio_message": "Gravar mensagem de áudio",
"Register": "Registar",
+ "reject": "Rejeitar",
"Remove_from_workspace_history": "Remover do histórico do espaço de trabalho",
"Remove_someone_from_room": "Remover alguém da sala",
"Reply": "Responder",
diff --git a/app/i18n/locales/ru.json b/app/i18n/locales/ru.json
index eb9f96f2c0b..795bfa8cfe8 100644
--- a/app/i18n/locales/ru.json
+++ b/app/i18n/locales/ru.json
@@ -269,6 +269,7 @@
"error-invalid-file-type": "Неверный тип файла",
"error-invalid-password": "Неверный пароль",
"error-invalid-room-name": "{{room_name}} не является допустимым именем чата",
+ "error-invitation-reply-action": "Ошибка при отправке ответа на приглашение",
"error-not-allowed": "Не допускается",
"error-not-permission-to-upload-file": "У вас нет разрешения на загрузку файлов",
"error-save-image": "Ошибка при попытке сохранить изображение",
@@ -337,6 +338,11 @@
"Invite_user_to_join_channel_all_from": "Пригласить всех пользователей из [#channel] присоединиться к этому каналу",
"Invite_user_to_join_channel_all_to": "Пригласить всех пользователей этого канала присоединиться к [#channel]",
"Invite_users": "Приглашение пользователей",
+ "Invited": "Приглашен",
+ "invited_room_description_channel": "Вас пригласил",
+ "invited_room_description_dm": "Вас пригласили на беседу с",
+ "invited_room_title_channel": "Приглашение присоединиться к {{room_name}}",
+ "invited_room_title_dm": "Запрос сообщения",
"IP": "IP",
"is_typing": "печатает",
"Join": "Присоединиться",
@@ -570,6 +576,7 @@
"Record_audio_message": "Записать голосовое сообщение",
"Register": "Зарегистрировать",
"Registration_Succeeded": "Регистрация Успешна!",
+ "reject": "Отклонить",
"Remove": "Удалить",
"remove": "удалить",
"Remove_from_room": "Удалить из чата",
diff --git a/app/i18n/locales/sl-SI.json b/app/i18n/locales/sl-SI.json
index 3b88d057d73..35942071711 100644
--- a/app/i18n/locales/sl-SI.json
+++ b/app/i18n/locales/sl-SI.json
@@ -255,6 +255,7 @@
"error-invalid-file-type": "Neveljavna vrsta datoteke",
"error-invalid-password": "Neveljavno geslo",
"error-invalid-room-name": "{{room_name}} ni veljavno ime sobe",
+ "error-invitation-reply-action": "Napaka pri pošiljanju odgovora na povabilo",
"error-not-allowed": "Ni dovoljeno",
"error-not-permission-to-upload-file": "Nimate pooblastil za nalaganje datotek",
"error-save-image": "Napaka pri shranjevanju slike",
@@ -322,6 +323,11 @@
"Invite_user_to_join_channel_all_from": "Povabi vse uporabnike iz [#channel], da se pridružijo kanalu",
"Invite_user_to_join_channel_all_to": "Povabi vse uporabnike iz tega kanala, da se pridružijo [#channel]",
"Invite_users": "Povabite uporabnike",
+ "Invited": "Povabljen",
+ "invited_room_description_channel": "Povabil vas je",
+ "invited_room_description_dm": "Povabljeni ste na pogovor z",
+ "invited_room_title_channel": "Povabilo za pridružitev {{room_name}}",
+ "invited_room_title_dm": "Zahteva za sporočilo",
"IP": "IP",
"is_typing": "piše",
"Join": "Pridružite se",
@@ -552,6 +558,7 @@
"Record_audio_message": "Posnemi zvočno sporočilo",
"Register": "Registriraj novi račun",
"Registration_Succeeded": "Registracija je bila uspešna",
+ "reject": "Zavrni",
"Remove": "Odstrani",
"remove": "Odstrani",
"Remove_from_room": "Odstrani iz sobe",
diff --git a/app/i18n/locales/sv.json b/app/i18n/locales/sv.json
index 38d87e6e17e..bf0e806bfcd 100644
--- a/app/i18n/locales/sv.json
+++ b/app/i18n/locales/sv.json
@@ -278,6 +278,7 @@
"error-invalid-file-type": "Ogiltig filtyp",
"error-invalid-password": "Ogiltigt lösenord",
"error-invalid-room-name": "{{room_name}} är inte ett giltigt rumsnamn",
+ "error-invitation-reply-action": "Fel vid sändning av inbjudningssvar",
"error-not-allowed": "Tillåts inte",
"error-not-permission-to-upload-file": "Du har inte behörighet att ladda upp filer",
"error-save-image": "Fel när bilden skulle sparas",
@@ -346,6 +347,11 @@
"Invite_user_to_join_channel_all_from": "Bjud in alla användare från [#kanalen] för att gå med i den här kanalen",
"Invite_user_to_join_channel_all_to": "Bjud in alla användare från den här kanalen till att delta i [#kanalen]",
"Invite_users": "Bjud in användare",
+ "Invited": "Inbjuden",
+ "invited_room_description_channel": "Du har blivit inbjuden av",
+ "invited_room_description_dm": "Du har blivit inbjuden att ha en konversation med",
+ "invited_room_title_channel": "Inbjudan att gå med i {{room_name}}",
+ "invited_room_title_dm": "Meddelandeförfrågan",
"IP": "IP",
"is_typing": "skriver",
"Join": "Gå med",
@@ -579,6 +585,7 @@
"Record_audio_message": "Spela in röstmeddelande",
"Register": "Registrera",
"Registration_Succeeded": "Registreringen är klar.",
+ "reject": "Avvisa",
"Remove": "Ta bort",
"remove": "ta bort",
"Remove_from_room": "Ta bort från rummet",
diff --git a/app/i18n/locales/ta-IN.json b/app/i18n/locales/ta-IN.json
index 18c261269af..88859ec70f9 100644
--- a/app/i18n/locales/ta-IN.json
+++ b/app/i18n/locales/ta-IN.json
@@ -299,6 +299,7 @@
"error-invalid-file-type": "தவறான கோப்பு வகை",
"error-invalid-password": "தவறான கடவுச்சொல்",
"error-invalid-room-name": "{{room_name}} என்ற அறைபெயர் செல்லுதலின்று அமைந்திருக்கவில்லை",
+ "error-invitation-reply-action": "அழைப்பு பதிலை அனுப்பும்போது பிழை",
"error-not-allowed": "அனுமதி இல்லை",
"error-not-permission-to-upload-file": "கோப்புகளை பதிவேற்ற உங்களுக்கு அனுமதி இல்லை",
"error-save-image": "படம் சேமிக்கும் போது பிழை",
@@ -369,6 +370,11 @@
"Invalid_workspace_URL": "தவறான வேலைத்தள URL",
"Invite_Link": "அழைப்பு இணைப்பு",
"Invite_users": "பயனர்களை அழை",
+ "Invited": "அழைக்கப்பட்டது",
+ "invited_room_description_channel": "நீங்கள் அழைக்கப்பட்டீர்கள்",
+ "invited_room_description_dm": "நீங்கள் ஒரு உரையாடலை நடத்த அழைக்கப்பட்டீர்கள்",
+ "invited_room_title_channel": "{{room_name}} இல் சேர அழைப்பு",
+ "invited_room_title_dm": "செய்தி கோரிக்கை",
"IP": "IP",
"is_typing": "எழுந்துகொள்ளின்றார்",
"Jitsi_authentication_before_making_calls": "ஜிட்சி அங்கத்திற்கு அங்கீகாரம் கேட்கும்போது கால் பரிந்துரை செய்யும் முன். அவர்களின் கொள்கைகளை அறிந்துகொள்ள ஜிட்சி இணையத்திற்கு செல்க.",
@@ -618,6 +624,7 @@
"Record_audio_message": "ஆடியோ செய்தியை பதிவுசெய்",
"Register": "பதிவு செய்",
"Registration_Succeeded": "பதிவு செய்தது வெற்றிகரமாகின்றது!",
+ "reject": "நிராகரி",
"Remove": "அகற்று",
"remove": "அகற்று",
"Remove_from_room": "அலுவலகத்திலிருந்து அகற்று",
diff --git a/app/i18n/locales/te-IN.json b/app/i18n/locales/te-IN.json
index 4a5d534382a..1352e1c7ea4 100644
--- a/app/i18n/locales/te-IN.json
+++ b/app/i18n/locales/te-IN.json
@@ -298,6 +298,7 @@
"error-invalid-file-type": "చెల్లని ఫైలు రకం",
"error-invalid-password": "చెల్లని పాస్వర్డ్",
"error-invalid-room-name": "{{room_name}} చెల్లని కొరకు పేరు",
+ "error-invitation-reply-action": "ఆహ్వాన ప్రతిస్పందనను పంపించడంలో లోపం",
"error-not-allowed": "అనుమతి లేదు",
"error-not-permission-to-upload-file": "మీకు ఫైలులను అప్లోడ్ చేయడానికి అనుమతి లేదు",
"error-save-image": "చిత్రం సేవ్ చేయడంలో లోపం",
@@ -368,6 +369,11 @@
"Invalid_workspace_URL": "చెల్లని వర్క్స్పేస్ URL",
"Invite_Link": "ఆమంత్రణ లింక్",
"Invite_users": "వాడికి ఆమంత్రణం పంపండి",
+ "Invited": "ఆహ్వానించబడింది",
+ "invited_room_description_channel": "మీరు ఆహ్వానించబడ్డారు",
+ "invited_room_description_dm": "మీరు సంభాషణ కలిగి ఉండడానికి ఆహ్వానించబడ్డారు",
+ "invited_room_title_channel": "{{room_name}} లో చేరడానికి ఆహ్వానం",
+ "invited_room_title_dm": "సందేశ అభ్యర్థన",
"IP": "IP",
"is_typing": "టైపు చేస్తోంది",
"Jitsi_authentication_before_making_calls": "కాల్స్ చేసే ముందు Jitsi పరిశోధన అవసరం ఉండవచ్చు. వారి నయంత్రాల గురించి అడగించడానికి, Jitsi వెబ్సైట్ను సందర్శించండి.",
@@ -617,6 +623,7 @@
"Record_audio_message": "ऑडियो संदेश रिकॉर्ड करें",
"Register": "నమోదు",
"Registration_Succeeded": "నమోదు విజయవంతంగా చేయబడింది!",
+ "reject": "తిరస్కరించు",
"Remove": "తొలగించండి",
"remove": "తొలగించండి",
"Remove_from_room": "కొరకున్ని తీసివేయండి",
diff --git a/app/i18n/locales/tr.json b/app/i18n/locales/tr.json
index a8e4ec80dc3..8f866b00b7c 100644
--- a/app/i18n/locales/tr.json
+++ b/app/i18n/locales/tr.json
@@ -208,6 +208,7 @@
"error-invalid-file-type": "Geçersiz dosya türü!",
"error-invalid-password": "Geçersiz şifre!",
"error-invalid-room-name": "{{room_name}}, geçerli bir oda adı değil!",
+ "error-invitation-reply-action": "Davet yanıtı gönderilirken hata oluştu",
"error-not-allowed": "İzin verilmedi",
"error-save-image": "Görüntüyü kaydederken hata oluştu!",
"error-save-video": "Videoyu kaydederken hata oluştu!",
@@ -270,6 +271,11 @@
"Invite_user_to_join_channel_all_from": "[#kanal] 'daki tüm kullanıcıları bu kanala katılmaya davet et",
"Invite_user_to_join_channel_all_to": "Bu kanaldaki tüm kullanıcıları [#kanal] katılmaya davet edin",
"Invite_users": "Kullanıcıları davet et",
+ "Invited": "Davet edildi",
+ "invited_room_description_channel": "Tarafından davet edildiniz",
+ "invited_room_description_dm": "Bir konuşma yapmak için davet edildiniz",
+ "invited_room_title_channel": "{{room_name}} katılma daveti",
+ "invited_room_title_dm": "Mesaj isteği",
"IP": "IP",
"is_typing": "yazıyor",
"Join": "Katıl",
@@ -461,6 +467,7 @@
"Record_audio_message": "Sesli mesaj kaydet",
"Register": "Kayıt Ol",
"Registration_Succeeded": "Kayıt Başarılı!",
+ "reject": "Reddet",
"Remove": "Kaldır",
"Remove_from_room": "Odadan çıkar",
"Remove_from_workspace_history": "Çalışma alanı geçmişinden kaldır",
diff --git a/app/i18n/locales/zh-CN.json b/app/i18n/locales/zh-CN.json
index 0bd12910283..fd07bc6a02d 100644
--- a/app/i18n/locales/zh-CN.json
+++ b/app/i18n/locales/zh-CN.json
@@ -204,6 +204,7 @@
"error-invalid-file-type": "无效的文件类型",
"error-invalid-password": "无效的密码",
"error-invalid-room-name": "{{room_name}} 不是合法的聊天室名称",
+ "error-invitation-reply-action": "发送邀请回复时出错",
"error-not-allowed": "不允许",
"error-save-image": "错误,无法保存图片",
"error-save-video": "错误,无法保存視頻",
@@ -259,6 +260,11 @@
"Invalid_workspace_URL": "无效的工作区 URL",
"Invite_Link": "邀请链接",
"Invite_users": "邀请用戶",
+ "Invited": "已邀请",
+ "invited_room_description_channel": "您已被邀请",
+ "invited_room_description_dm": "您已被邀请进行对话",
+ "invited_room_title_channel": "加入 {{room_name}} 的邀请",
+ "invited_room_title_dm": "消息请求",
"IP": "IP",
"is_typing": "正在输入",
"Join": "加入",
@@ -444,6 +450,7 @@
"Record_audio_message": "录制语音消息",
"Register": "注册",
"Registration_Succeeded": "注册成功",
+ "reject": "拒绝",
"Remove": "移除",
"Remove_from_workspace_history": "从工作区历史记录中移除",
"replies": "回覆",
diff --git a/app/i18n/locales/zh-TW.json b/app/i18n/locales/zh-TW.json
index f44d8f18169..95d76aa39b8 100644
--- a/app/i18n/locales/zh-TW.json
+++ b/app/i18n/locales/zh-TW.json
@@ -210,6 +210,7 @@
"error-invalid-file-type": "無效的檔案類型",
"error-invalid-password": "無效的密碼",
"error-invalid-room-name": "{{room_name}} 不是一個有效的聊天室名稱",
+ "error-invitation-reply-action": "發送邀請回覆時出錯",
"error-not-allowed": "不允許",
"error-not-permission-to-upload-file": "You don't have permission to upload files",
"error-save-image": "錯誤,無法儲存圖片",
@@ -272,6 +273,11 @@
"Invite_user_to_join_channel_all_from": "邀請[#channel]中的所有使用者加入此頻道",
"Invite_user_to_join_channel_all_to": "邀請此頻道的所有使用者加入[#頻道]",
"Invite_users": "邀請使用者",
+ "Invited": "已邀請",
+ "invited_room_description_channel": "您已被邀請",
+ "invited_room_description_dm": "您已被邀請進行對話",
+ "invited_room_title_channel": "加入 {{room_name}} 的邀請",
+ "invited_room_title_dm": "訊息請求",
"IP": "IP",
"is_typing": "正在輸入",
"Join": "加入",
@@ -461,6 +467,7 @@
"Record_audio_message": "錄製語音訊息",
"Register": "註冊",
"Registration_Succeeded": "註冊成功",
+ "reject": "拒絕",
"Remove": "移除",
"Remove_from_workspace_history": "從工作區歷史記錄中刪除",
"Remove_someone_from_room": "從房間中刪除某人",
diff --git a/app/lib/database/model/Subscription.js b/app/lib/database/model/Subscription.js
index 396817283bb..8769d94e489 100644
--- a/app/lib/database/model/Subscription.js
+++ b/app/lib/database/model/Subscription.js
@@ -153,6 +153,10 @@ export default class Subscription extends Model {
@field('federated') federated;
+ @field('status') status;
+
+ @json('inviter', sanitizer) inviter;
+
asPlain() {
return {
_id: this._id,
@@ -219,7 +223,9 @@ export default class Subscription extends Model {
usersCount: this.usersCount,
source: this.source,
disableNotifications: this.disableNotifications,
- federated: this.federated
+ federated: this.federated,
+ status: this.status,
+ inviter: this.inviter
};
}
}
diff --git a/app/lib/database/model/migrations.js b/app/lib/database/model/migrations.js
index 601ece52607..6889ffca8c9 100644
--- a/app/lib/database/model/migrations.js
+++ b/app/lib/database/model/migrations.js
@@ -331,6 +331,18 @@ export default schemaMigrations({
columns: [{ name: 'federated', type: 'boolean', isOptional: true }]
})
]
+ },
+ {
+ toVersion: 28,
+ steps: [
+ addColumns({
+ table: 'subscriptions',
+ columns: [
+ { name: 'status', type: 'string', isOptional: true },
+ { name: 'inviter', type: 'string', isOptional: true }
+ ]
+ })
+ ]
}
]
});
diff --git a/app/lib/database/schema/app.js b/app/lib/database/schema/app.js
index acca231cc08..ad09acb04a7 100644
--- a/app/lib/database/schema/app.js
+++ b/app/lib/database/schema/app.js
@@ -1,7 +1,7 @@
import { appSchema, tableSchema } from '@nozbe/watermelondb';
export default appSchema({
- version: 27,
+ version: 28,
tables: [
tableSchema({
name: 'subscriptions',
@@ -70,7 +70,9 @@ export default appSchema({
{ name: 'users_count', type: 'number', isOptional: true },
{ name: 'unmuted', type: 'string', isOptional: true },
{ name: 'disable_notifications', type: 'boolean', isOptional: true },
- { name: 'federated', type: 'boolean', isOptional: true }
+ { name: 'federated', type: 'boolean', isOptional: true },
+ { name: 'status', type: 'string', isOptional: true },
+ { name: 'inviter', type: 'string', isOptional: true }
]
}),
tableSchema({
diff --git a/app/lib/methods/getInvitationData.ts b/app/lib/methods/getInvitationData.ts
new file mode 100644
index 00000000000..c4028f097a7
--- /dev/null
+++ b/app/lib/methods/getInvitationData.ts
@@ -0,0 +1,21 @@
+import { type IInviteSubscription } from '../../definitions';
+import I18n from '../../i18n';
+import { getRoomTitle } from './helpers';
+import { replyRoomInvite } from './replyRoomInvite';
+
+export const getInvitationData = (room: IInviteSubscription) => {
+ const title =
+ room.t === 'd'
+ ? I18n.t('invited_room_title_dm')
+ : I18n.t('invited_room_title_channel', { room_name: getRoomTitle(room).slice(0, 30) });
+
+ const description = room.t === 'd' ? I18n.t('invited_room_description_dm') : I18n.t('invited_room_description_channel');
+
+ return {
+ title,
+ description,
+ inviter: room.inviter,
+ accept: () => replyRoomInvite(room.id, 'accept'),
+ reject: () => replyRoomInvite(room.id, 'reject')
+ };
+};
diff --git a/app/lib/methods/helpers/mergeSubscriptionsRooms.ts b/app/lib/methods/helpers/mergeSubscriptionsRooms.ts
index a120a8e920c..fe4e8816f9b 100644
--- a/app/lib/methods/helpers/mergeSubscriptionsRooms.ts
+++ b/app/lib/methods/helpers/mergeSubscriptionsRooms.ts
@@ -14,6 +14,7 @@ import {
} from '../../../definitions';
import { compareServerVersion } from './compareServerVersion';
+// eslint-disable-next-line complexity
export const merge = (
subscription: ISubscription | IServerSubscription,
room?: IRoom | IServerRoom | IOmnichannelRoom
@@ -112,6 +113,8 @@ export const merge = (
mergedSubscription.autoTranslate = false;
}
+ mergedSubscription.status = mergedSubscription.status ?? undefined;
+ mergedSubscription.inviter = mergedSubscription.inviter ?? undefined;
mergedSubscription.blocker = !!mergedSubscription.blocker;
mergedSubscription.blocked = !!mergedSubscription.blocked;
mergedSubscription.hideMentionStatus = !!mergedSubscription.hideMentionStatus;
diff --git a/app/lib/methods/isInviteSubscription.ts b/app/lib/methods/isInviteSubscription.ts
new file mode 100644
index 00000000000..1ded5edcfb8
--- /dev/null
+++ b/app/lib/methods/isInviteSubscription.ts
@@ -0,0 +1,4 @@
+import { type IInviteSubscription, type ISubscription } from '../../definitions';
+
+export const isInviteSubscription = (subscription: ISubscription): subscription is IInviteSubscription =>
+ subscription?.status === 'INVITED' && !!subscription.inviter;
diff --git a/app/lib/methods/replyRoomInvite.ts b/app/lib/methods/replyRoomInvite.ts
new file mode 100644
index 00000000000..cadde12b757
--- /dev/null
+++ b/app/lib/methods/replyRoomInvite.ts
@@ -0,0 +1,13 @@
+import i18n from '../../i18n';
+import { sendInvitationReply } from '../services/restApi';
+import { showErrorAlert } from './helpers';
+import log from './helpers/log';
+
+export const replyRoomInvite = async (rid: string, action: 'accept' | 'reject') => {
+ try {
+ await sendInvitationReply(rid, action);
+ } catch (e) {
+ showErrorAlert(i18n.t('error-invitation-reply-action'));
+ log(e);
+ }
+};
diff --git a/app/lib/services/restApi.ts b/app/lib/services/restApi.ts
index 6cb05cc5ab1..f38c096c315 100644
--- a/app/lib/services/restApi.ts
+++ b/app/lib/services/restApi.ts
@@ -1100,6 +1100,8 @@ export function getUserInfo(userId: string) {
export const toggleFavorite = (roomId: string, favorite: boolean) => sdk.post('rooms.favorite', { roomId, favorite });
+export const sendInvitationReply = (roomId: string, action: 'accept' | 'reject') => sdk.post('rooms.invite', { roomId, action });
+
export const videoConferenceJoin = (callId: string, cam?: boolean, mic?: boolean) =>
sdk.post('video-conference.join', { callId, state: { cam: !!cam, mic: mic === undefined ? true : mic } });
diff --git a/app/views/RoomView/RightButtons.tsx b/app/views/RoomView/RightButtons.tsx
index 7b3b838b54f..2ad9a83367e 100644
--- a/app/views/RoomView/RightButtons.tsx
+++ b/app/views/RoomView/RightButtons.tsx
@@ -479,6 +479,10 @@ class RightButtonsContainer extends Component Promise;
+ onReject: () => Promise;
+};
+
+export const InvitedRoom = ({ title, description, inviter, loading, onAccept, onReject }: InvitedRoomProps): ReactElement => {
+ const { colors } = useTheme();
+ const styles = useStyle();
+
+ return (
+
+
+
+
+
+
+ {title}
+ {description}
+
+
+
+
+
+
+
+
+ );
+};
+
+const useStyle = () => {
+ const { colors } = useTheme();
+ const styles = StyleSheet.create({
+ root: {
+ flex: 1,
+ backgroundColor: colors.surfaceRoom
+ },
+ container: {
+ flex: 1,
+ marginHorizontal: 24,
+ justifyContent: 'center'
+ },
+ textView: { alignItems: 'center' },
+ icon: {
+ width: 58,
+ height: 58,
+ borderRadius: 30,
+ marginBottom: GAP,
+ backgroundColor: colors.surfaceNeutral,
+ alignItems: 'center',
+ justifyContent: 'center'
+ },
+ title: {
+ ...sharedStyles.textBold,
+ fontSize: 24,
+ lineHeight: 32,
+ textAlign: 'center',
+ color: colors.fontTitlesLabels,
+ marginBottom: GAP
+ },
+ description: {
+ ...sharedStyles.textRegular,
+ fontSize: 16,
+ lineHeight: 24,
+ textAlign: 'center',
+ color: colors.fontDefault
+ },
+ username: {
+ ...sharedStyles.textRegular,
+ fontSize: 16,
+ lineHeight: 24,
+ textAlign: 'center',
+ color: colors.fontDefault,
+ marginBottom: GAP
+ }
+ });
+ return styles;
+};
diff --git a/app/views/RoomView/constants.ts b/app/views/RoomView/constants.ts
index e16cba75cb0..a94401bbc80 100644
--- a/app/views/RoomView/constants.ts
+++ b/app/views/RoomView/constants.ts
@@ -44,5 +44,7 @@ export const roomAttrsUpdate = [
'autoTranslateLanguage',
'unmuted',
'E2EKey',
- 'encrypted'
+ 'encrypted',
+ 'status',
+ 'inviter'
] as TRoomUpdate[];
diff --git a/app/views/RoomView/index.tsx b/app/views/RoomView/index.tsx
index a6bfc5ba106..b963b6c33bd 100644
--- a/app/views/RoomView/index.tsx
+++ b/app/views/RoomView/index.tsx
@@ -102,6 +102,9 @@ import UserPreferences from '../../lib/methods/userPreferences';
import { type IRoomViewProps, type IRoomViewState } from './definitions';
import { roomAttrsUpdate, stateAttrsUpdate } from './constants';
import { EncryptedRoom, MissingRoomE2EEKey } from './components';
+import { InvitedRoom } from './components/InvitedRoom';
+import { getInvitationData } from '../../lib/methods/getInvitationData';
+import { isInviteSubscription } from '../../lib/methods/isInviteSubscription';
class RoomView extends React.Component {
private rid?: string;
@@ -328,6 +331,11 @@ class RoomView extends React.Component {
) {
this.updateE2EEState();
}
+
+ // init() is skipped for invite subscriptions. Initialize when invite has been accepted
+ if (prevState.roomUpdate.status === 'INVITED' && roomUpdate.status !== 'INVITED') {
+ this.init();
+ }
}
updateOmnichannel = async () => {
@@ -535,6 +543,7 @@ class RoomView extends React.Component {
onPress={this.goRoomActionsView}
testID={`room-view-title-${title}`}
sourceType={sourceType}
+ disabled={isInviteSubscription(iSubRoom)}
/>
),
headerRight: () => (
@@ -637,6 +646,12 @@ class RoomView extends React.Component {
if (!this.rid) {
return;
}
+
+ if ('id' in room && isInviteSubscription(room)) {
+ this.setState({ loading: false });
+ return;
+ }
+
if (this.tmid) {
await loadThreadMessages({ tmid: this.tmid, rid: this.rid });
} else {
@@ -1563,6 +1578,16 @@ class RoomView extends React.Component {
({ bannerClosed, announcement } = room);
}
+ if ('id' in room && isInviteSubscription(room)) {
+ const { title, description, inviter, accept, reject } = getInvitationData(room);
+
+ return (
+
+
+
+ );
+ }
+
if ('encrypted' in room) {
// Missing room encryption key
if (showMissingE2EEKey) {