diff --git a/app/i18n/locales/ar.json b/app/i18n/locales/ar.json index 9001e0c3e78..f35cf9947a3 100644 --- a/app/i18n/locales/ar.json +++ b/app/i18n/locales/ar.json @@ -10,6 +10,9 @@ "Admin_Panel": "لوحة الإدارة", "After_seconds_set_by_admin": "بعد {{seconds}} ثوان (حددها المدير)", "Agent": "المندوب", + "AirGapped_workspace_read_only_description": "يمكن للمسؤولين استعادة الوظائف الكاملة عن طريق الاتصال بالإنترنت أو الترقية إلى خطة متميزة.", + "AirGapped_workspace_read_only_share_extension_title": "المشاركة معطلة لأن مساحة العمل في وضع القراءة فق.", + "AirGapped_workspace_read_only_title": "مساحة العمل في وضع القراءة فقط.", "Alert": "إنذار", "alert": "إنذار", "alerts": "الإنذارات", diff --git a/app/i18n/locales/bn-IN.json b/app/i18n/locales/bn-IN.json index e146e42e038..639e22d8a3f 100644 --- a/app/i18n/locales/bn-IN.json +++ b/app/i18n/locales/bn-IN.json @@ -27,6 +27,9 @@ "admin-video-conf-provider-not-configured-header": "কনফারেন্স কল সক্ষম হয়নি", "After_seconds_set_by_admin": "{{seconds}} সেকেন্ড পরে (প্রশাসক দ্বারা সেট করা)", "Agent": "এজেন্ট", + "AirGapped_workspace_read_only_description": "অ্যাডমিনরা এটি ইন্টারনেটের সাথে সংযুক্ত করে বা একটি প্রিমিয়াম পরিকল্পনায় আপগ্রেড করে সম্পূর্ণ কার্যকারিতা পুনরুদ্ধার করতে পারেন।", + "AirGapped_workspace_read_only_share_extension_title": "কর্মস্থান পড়ার মোডে থাকার কারণে শেয়ারিং অক্ষম।", + "AirGapped_workspace_read_only_title": "কর্মস্থান পড়ার মোডে।", "Alert": "সতর্কতা", "alert": "সতর্কতা", "alerts": "সতর্কতা", diff --git a/app/i18n/locales/cs.json b/app/i18n/locales/cs.json index ac4bbae2928..4ae3d4a56b2 100644 --- a/app/i18n/locales/cs.json +++ b/app/i18n/locales/cs.json @@ -28,6 +28,9 @@ "admin-video-conf-provider-not-configured-header": "Konferenční hovor není povolen", "After_seconds_set_by_admin": "Po {{seconds}} sekundách (nastaveno administrátorem)", "Agent": "Agent", + "AirGapped_workspace_read_only_description": "Správci mohou obnovit plnou funkčnost připojením k internetu nebo upgradem na prémiový plán.", + "AirGapped_workspace_read_only_share_extension_title": "Sdílení je zakázáno, protože pracovní prostor je v režimu pouze pro čtení.", + "AirGapped_workspace_read_only_title": "Pracoviště v režimu pouze pro čtení.", "Alert": "Upozornění", "alert": "upozornění", "alerts": "upozornění", diff --git a/app/i18n/locales/de.json b/app/i18n/locales/de.json index 6c3f7c88dae..457465147ed 100644 --- a/app/i18n/locales/de.json +++ b/app/i18n/locales/de.json @@ -27,6 +27,9 @@ "admin-video-conf-provider-not-configured-header": "Telefonkonferenz nicht aktiviert", "After_seconds_set_by_admin": "Nach {{seconds}} Sekunden (durch den Admin gesetzt)", "Agent": "Agent", + "AirGapped_workspace_read_only_description": "Administratoren können die volle Funktionalität wiederherstellen, indem sie es mit dem Internet verbinden oder auf einen Premium-Plan upgraden.", + "AirGapped_workspace_read_only_share_extension_title": "Das Teilen ist deaktiviert, da der Arbeitsbereich im Nur-Lesen-Modus ist.", + "AirGapped_workspace_read_only_title": "Arbeitsbereich im Nur-Lesen-Modus.", "Alert": "Benachrichtigung", "alert": "Benachrichtigung", "alerts": "Benachrichtigungen", diff --git a/app/i18n/locales/en.json b/app/i18n/locales/en.json index 6640cfdd82f..ba6b5006672 100644 --- a/app/i18n/locales/en.json +++ b/app/i18n/locales/en.json @@ -28,6 +28,9 @@ "admin-video-conf-provider-not-configured-header": "Conference call not enabled", "After_seconds_set_by_admin": "After {{seconds}} seconds (set by admin)", "Agent": "Agent", + "AirGapped_workspace_read_only_description": "Admins can restore full functionality by connecting it to internet or upgrading to a premium plan.", + "AirGapped_workspace_read_only_share_extension_title": "Sharing is disabled because workspace is in read-only mode.", + "AirGapped_workspace_read_only_title": "Workspace in read-only mode.", "Alert": "Alert", "alert": "alert", "alerts": "alerts", diff --git a/app/i18n/locales/es.json b/app/i18n/locales/es.json index 69de95d9873..75a34ded596 100644 --- a/app/i18n/locales/es.json +++ b/app/i18n/locales/es.json @@ -6,6 +6,9 @@ "Add_Server": "Añadir servidor", "Add_server": "Añadir servidor", "Admin_Panel": "Panel de Control", + "AirGapped_workspace_read_only_description": "Los administradores pueden restaurar la funcionalidad completa conectándolo a Internet o actualizando a un plan premium.", + "AirGapped_workspace_read_only_share_extension_title": "La compartición está deshabilitada porque el espacio de trabajo está en modo de solo lectura.", + "AirGapped_workspace_read_only_title": "Espacio de trabajo en modo de solo lectura.", "Alert": "Alerta", "alert": "alerta", "alerts": "alertas", diff --git a/app/i18n/locales/fi.json b/app/i18n/locales/fi.json index 3f0c4cf1b50..6c518f24bb1 100644 --- a/app/i18n/locales/fi.json +++ b/app/i18n/locales/fi.json @@ -20,6 +20,9 @@ "Admin_Panel": "Hallintapaneeli", "After_seconds_set_by_admin": "{{seconds}} sekunnin kuluttua (järjestelmänvalvojan asettama)", "Agent": "Agentti", + "AirGapped_workspace_read_only_description": "Järjestelmänvalvojat voivat palauttaa täyden toiminnallisuuden liittämällä sen internetiin tai päivittämällä premium-suunnitelmaan.", + "AirGapped_workspace_read_only_share_extension_title": "Jakaminen on poistettu käytöstä, koska työtila on vain luku -tilassa.", + "AirGapped_workspace_read_only_title": "Työtila vain luku -tilassa.", "Alert": "Hälytys", "alert": "hälytys", "alerts": "hälytystä", diff --git a/app/i18n/locales/fr.json b/app/i18n/locales/fr.json index 76ec6856b78..d4c8a7fc3ef 100644 --- a/app/i18n/locales/fr.json +++ b/app/i18n/locales/fr.json @@ -13,6 +13,9 @@ "Admin_Panel": "Panneau d'administration", "After_seconds_set_by_admin": "Après {{seconds}} secondes (défini par l'administrateur)", "Agent": "Agent", + "AirGapped_workspace_read_only_description": "Les administrateurs peuvent restaurer la fonctionnalité complète en le connectant à Internet ou en passant à un plan premium.", + "AirGapped_workspace_read_only_share_extension_title": "Le partage est désactivé car l'espace de travail est en mode lecture seule.", + "AirGapped_workspace_read_only_title": "Espace de travail en mode lecture seule.", "Alert": "Alerte", "alert": "alerte", "alerts": "alertes", diff --git a/app/i18n/locales/hi-IN.json b/app/i18n/locales/hi-IN.json index b716d939cd7..a746e92a210 100644 --- a/app/i18n/locales/hi-IN.json +++ b/app/i18n/locales/hi-IN.json @@ -27,6 +27,9 @@ "admin-video-conf-provider-not-configured-header": "कॉन्फ़्रेंस कॉल सक्षम नहीं है", "After_seconds_set_by_admin": "{{seconds}} सेकंड्स के बाद (व्यवस्थापक द्वारा सेट किया गया है)", "Agent": "एजेंट", + "AirGapped_workspace_read_only_description": "व्यवस्थापकों के पास इसे इंटरनेट से कनेक्ट करके या प्रीमियम योजना में अपग्रेड करके पूर्ण कार्यक्षमता को पुनर्स्थापित करने का विकल्प है।", + "AirGapped_workspace_read_only_share_extension_title": "कार्यस्थान केवल-पढ़ने के मोड में होने के कारण साझा करना अक्षम है।", + "AirGapped_workspace_read_only_title": "कार्यस्थान केवल-पढ़ने के मोड में है।", "Alert": "चेतावनी", "alert": "चेतावनी", "alerts": "चेतावनियाँ", diff --git a/app/i18n/locales/hu.json b/app/i18n/locales/hu.json index 11d56a44337..1365cdcbbf8 100644 --- a/app/i18n/locales/hu.json +++ b/app/i18n/locales/hu.json @@ -27,6 +27,9 @@ "admin-video-conf-provider-not-configured-header": "Konferenciahívás nem engedélyezett", "After_seconds_set_by_admin": "{{seconds}} másodperc (admin által beállított)", "Agent": "Ügyintéző", + "AirGapped_workspace_read_only_description": "A rendszergazdák visszaállíthatják a teljes funkcionalitást az internethez való csatlakozással vagy prémium tervre való frissítéssel.", + "AirGapped_workspace_read_only_share_extension_title": "A megosztás le van tiltva, mert a munkaterület csak olvasási módban van.", + "AirGapped_workspace_read_only_title": "Munkaterület csak olvasási módban.", "Alert": "Riasztás", "alert": "riasztás", "alerts": "riasztás", diff --git a/app/i18n/locales/it.json b/app/i18n/locales/it.json index 32606d26ced..f6e26d421d8 100644 --- a/app/i18n/locales/it.json +++ b/app/i18n/locales/it.json @@ -14,6 +14,9 @@ "Admin_Panel": "Amministrazione", "After_seconds_set_by_admin": "Dopo {{seconds}} secondi (impostati dall'admin)", "Agent": "Agente", + "AirGapped_workspace_read_only_description": "Gli amministratori possono ripristinare la funzionalità completa collegandosi a Internet o aggiornando a un piano premium.", + "AirGapped_workspace_read_only_share_extension_title": "La condivisione è disabilitata perché l'area di lavoro è in modalità di sola lettura.", + "AirGapped_workspace_read_only_title": "Workspace in modalità di sola lettura.", "Alert": "Avviso", "alert": "avviso", "alerts": "avvisi", diff --git a/app/i18n/locales/ja.json b/app/i18n/locales/ja.json index 0899635cf2f..e2993039bef 100644 --- a/app/i18n/locales/ja.json +++ b/app/i18n/locales/ja.json @@ -9,6 +9,9 @@ "Add_users": "ユーザーを追加", "Admin_Panel": "管理者パネル", "Agent": "エージェント", + "AirGapped_workspace_read_only_description": "管理者は、インターネットに接続するか、プレミアムプランにアップグレードすることで、完全な機能を復元できます。", + "AirGapped_workspace_read_only_share_extension_title": "共有は無効です。作業スペースが読み取り専用モードになっているため。", + "AirGapped_workspace_read_only_title": "ワークスペースは読み取り専用モードです。", "Alert": "アラート", "alert": "アラート", "alerts": "アラート", diff --git a/app/i18n/locales/nl.json b/app/i18n/locales/nl.json index 5c3114930d4..bb6ba4f8bcf 100644 --- a/app/i18n/locales/nl.json +++ b/app/i18n/locales/nl.json @@ -13,6 +13,9 @@ "Admin_Panel": "Admin Paneel", "After_seconds_set_by_admin": "Na {{seconds}} seconden (ingesteld door beheerder)", "Agent": "Agent", + "AirGapped_workspace_read_only_description": "Beheerders kunnen de volledige functionaliteit herstellen door deze met internet te verbinden of te upgraden naar een premiumplan.", + "AirGapped_workspace_read_only_share_extension_title": "Delen is uitgeschakeld omdat de werkruimte in alleen-lezen modus is.", + "AirGapped_workspace_read_only_title": "Werkruimte in alleen-lezen modus.", "Alert": "Waarschuwing", "alert": "waarschuwing", "alerts": "waarschuwingen", diff --git a/app/i18n/locales/pt-BR.json b/app/i18n/locales/pt-BR.json index ee8f2ef2300..91ef06fe173 100644 --- a/app/i18n/locales/pt-BR.json +++ b/app/i18n/locales/pt-BR.json @@ -27,6 +27,9 @@ "admin-video-conf-provider-not-configured-header": "Video conferência não ativada", "After_seconds_set_by_admin": "Após {{seconds}} segundos (Configurado pelo adm)", "Agent": "Agente", + "AirGapped_workspace_read_only_description": "Os administradores podem restaurar a funcionalidade completa conectando-o à internet ou atualizando para um plano premium.", + "AirGapped_workspace_read_only_share_extension_title": "O compartilhamento está desativado porque o espaço de trabalho está em modo somente leitura.", + "AirGapped_workspace_read_only_title": "Espaço de trabalho em modo somente leitura.", "Alert": "Alerta", "alert": "alerta", "alerts": "alertas", diff --git a/app/i18n/locales/pt-PT.json b/app/i18n/locales/pt-PT.json index b3d1f99c401..5fa525b5f0b 100644 --- a/app/i18n/locales/pt-PT.json +++ b/app/i18n/locales/pt-PT.json @@ -8,6 +8,9 @@ "Add_users": "Adicionar utilizadores", "Admin_Panel": "Painel de Administração", "Agent": "Agente", + "AirGapped_workspace_read_only_description": "Os administradores podem restaurar a funcionalidade completa ligando-o à internet ou fazendo um upgrade para um plano premium.", + "AirGapped_workspace_read_only_share_extension_title": "O compartilhamento está desativado porque o espaço de trabalho está em modo apenas leitura.", + "AirGapped_workspace_read_only_title": "Espaço de trabalho em modo apenas leitura.", "Alert": "Alerta", "alert": "alerta", "alerts": "alertas", diff --git a/app/i18n/locales/ru.json b/app/i18n/locales/ru.json index 8b99e085dde..d7415f0ddda 100644 --- a/app/i18n/locales/ru.json +++ b/app/i18n/locales/ru.json @@ -18,6 +18,9 @@ "Admin_Panel": "Панель админа", "After_seconds_set_by_admin": "Через {{seconds}} секунд (установлено администратором сервера)", "Agent": "Агент", + "AirGapped_workspace_read_only_description": "Администраторы могут восстановить полную функциональность, подключив его к интернету или обновив до премиум-плана.", + "AirGapped_workspace_read_only_share_extension_title": "Обмен отключен, так как рабочая область находится в режиме только для чтения.", + "AirGapped_workspace_read_only_title": "Рабочее пространство в режиме только для чтения.", "Alert": "Оповещение", "alert": "оповещение", "alerts": "оповещения", diff --git a/app/i18n/locales/sl-SI.json b/app/i18n/locales/sl-SI.json index 6b9ae875303..8138320f6e7 100644 --- a/app/i18n/locales/sl-SI.json +++ b/app/i18n/locales/sl-SI.json @@ -17,6 +17,9 @@ "Admin_Panel": "Administracijska plošča", "After_seconds_set_by_admin": "Po {{seconds}} sekundah (nastavil admin)", "Agent": "Agent", + "AirGapped_workspace_read_only_description": "Skupni skrbniki lahko obnovijo popolno funkcionalnost z povezovanjem z internetom ali nadgradnjo na premium načrt.", + "AirGapped_workspace_read_only_share_extension_title": "Deljenje je onemogočeno, ker je delovno okolje v načinu samo za branje.", + "AirGapped_workspace_read_only_title": "Delovno okolje v načinu samo za branje.", "Alert": "Opozorilo", "alert": "Opozorilo", "alerts": "opozorila", diff --git a/app/i18n/locales/sv.json b/app/i18n/locales/sv.json index 84c58f0c330..38c0bb948fc 100644 --- a/app/i18n/locales/sv.json +++ b/app/i18n/locales/sv.json @@ -20,6 +20,9 @@ "Admin_Panel": "Administratörspanel", "After_seconds_set_by_admin": "Efter {{seconds}} sekunder (anges av administratören)", "Agent": "Agent", + "AirGapped_workspace_read_only_description": "Administratörer kan återställa full funktionalitet genom att ansluta den till internet eller uppgradera till en premiumplan.", + "AirGapped_workspace_read_only_share_extension_title": "Delning är inaktiverat eftersom arbetsytan är i skrivskyddat läge.", + "AirGapped_workspace_read_only_title": "Arbetsytan är i skrivskyddat läge.", "Alert": "Varning", "alert": "varning", "alerts": "varningar", diff --git a/app/i18n/locales/ta-IN.json b/app/i18n/locales/ta-IN.json index 648e61379e9..92e7a95b1fa 100644 --- a/app/i18n/locales/ta-IN.json +++ b/app/i18n/locales/ta-IN.json @@ -27,6 +27,9 @@ "admin-video-conf-provider-not-configured-header": "காந்ஃபரன்ஸ் கால் கொள்ளை இயக்கப்படவில்லை", "After_seconds_set_by_admin": "{{seconds}} வினாடிகளில் (நிர்வாகி அமைத்தார்)", "Agent": "ஏஜென்ட்", + "AirGapped_workspace_read_only_description": "அடுத்தவர்களை இணையத்துடன் இணைத்து அல்லது பிரீமியம் திட்டத்திற்கு மேம்படுத்துவதன் மூலம் முழு செயல்திறனை மீட்டெடுக்கலாம்.", + "AirGapped_workspace_read_only_share_extension_title": "பகிர்வு முடக்கப்பட்டுள்ளது, ஏனெனில் வேலைப்பாடு படிக்க மட்டுமே சுருக்கமாக உள்ளது.", + "AirGapped_workspace_read_only_title": "தற்காலிகமாகவே படிக்கக்கூடிய சூழலில் உள்ள வேலைப்பாடு.", "Alert": "எச்சரிக்கை", "alert": "எச்சரிக்கை", "alerts": "எச்சரிக்கைகள்", diff --git a/app/i18n/locales/te-IN.json b/app/i18n/locales/te-IN.json index 44a2c5f47f1..9919e0c7589 100644 --- a/app/i18n/locales/te-IN.json +++ b/app/i18n/locales/te-IN.json @@ -27,6 +27,9 @@ "admin-video-conf-provider-not-configured-header": "కాన్ఫరెన్స్ కాల్ అనేకంగా లేదు", "After_seconds_set_by_admin": "అడ్మిన్ ద్వారా సెట్ చేయబడిన {{seconds}} సెకన్లలో", "Agent": "ఏజెంట్", + "AirGapped_workspace_read_only_description": "నిర్వహకులు దీన్ని ఇంటర్నెట్‌తో కలుపుకోవడం లేదా ప్రీమియం ప్రణాళికకు మెరుగుపరచడం ద్వారా పూర్తి ఫంక్షనాలిటీని పునఃస్థాపించవచ్చు.", + "AirGapped_workspace_read_only_share_extension_title": "జోడించడం నిలిపివేయబడింది, ఎందుకంటే పనికోసం చదివే స్ధితిలో ఉంది.", + "AirGapped_workspace_read_only_title": "అయోమయ స్థితిలో ఉన్న పనికోసం.", "Alert": "హెచ్చరిక", "alert": "హెచ్చరిక", "alerts": "హెచ్చరికలు", diff --git a/app/i18n/locales/tr.json b/app/i18n/locales/tr.json index 8b11909a132..3cf73f8a2a4 100644 --- a/app/i18n/locales/tr.json +++ b/app/i18n/locales/tr.json @@ -10,6 +10,9 @@ "Admin_Panel": "Yönetim Paneli", "After_seconds_set_by_admin": "{{seconds}} saniye sonra (yönetici tarafından belirlenir)", "Agent": "Temsilci", + "AirGapped_workspace_read_only_description": "Yöneticiler, bunu internete bağlayarak veya premium bir plana yükselterek tam işlevselliği geri kazanabilirler.", + "AirGapped_workspace_read_only_share_extension_title": "Paylaşım, çalışma alanı yalnızca okunur modda olduğu için devre dışı bırakıldı.", + "AirGapped_workspace_read_only_title": "Çalışma alanı yalnızca okunur modda.", "Alert": "Uyarı", "alert": "uyarı", "alerts": "uyarılar", diff --git a/app/i18n/locales/zh-CN.json b/app/i18n/locales/zh-CN.json index 4ebc8fc5e35..5457b2c181e 100644 --- a/app/i18n/locales/zh-CN.json +++ b/app/i18n/locales/zh-CN.json @@ -10,6 +10,9 @@ "Admin_Panel": "仪表板", "After_seconds_set_by_admin": "{{seconds}} 秒 (管理员设定)", "Agent": "代理", + "AirGapped_workspace_read_only_description": "管理员可以通过将其连接到互联网或升级到高级计划来恢复完整功能。", + "AirGapped_workspace_read_only_share_extension_title": "共享已禁用,因为工作区处于只读模式。", + "AirGapped_workspace_read_only_title": "工作区为只读模式。", "Alert": "警报", "alert": "警报", "alerts": "警报", diff --git a/app/i18n/locales/zh-TW.json b/app/i18n/locales/zh-TW.json index 98b5a9d72b5..7aec5fd25a1 100644 --- a/app/i18n/locales/zh-TW.json +++ b/app/i18n/locales/zh-TW.json @@ -10,6 +10,9 @@ "Admin_Panel": "管理者面板", "After_seconds_set_by_admin": "{{seconds}} 秒 (管理員設定)", "Agent": "代理", + "AirGapped_workspace_read_only_description": "管理員可以通過將其連接到互聯網或升級到高級計劃來恢復完整功能。", + "AirGapped_workspace_read_only_share_extension_title": "共享被禁用,因為工作區域處於唯讀模式。", + "AirGapped_workspace_read_only_title": "工作區域為唯讀模式。", "Alert": "警報", "alert": "警報", "alerts": "警報", diff --git a/app/lib/constants/defaultSettings.ts b/app/lib/constants/defaultSettings.ts index 290d447ff77..82f321a073d 100644 --- a/app/lib/constants/defaultSettings.ts +++ b/app/lib/constants/defaultSettings.ts @@ -264,5 +264,8 @@ export const defaultSettings = { UTF8_User_Names_Validation: { type: 'valueAsString' }, + Cloud_Workspace_AirGapped_Restrictions_Remaining_Days: { + type: 'valueAsNumber' + }, ...deprecatedSettings } as const; diff --git a/app/views/RoomView/definitions.ts b/app/views/RoomView/definitions.ts index ca1b3073f19..f37199757d0 100644 --- a/app/views/RoomView/definitions.ts +++ b/app/views/RoomView/definitions.ts @@ -24,6 +24,7 @@ export interface IRoomViewProps extends IActionSheetProvider, IBaseScreen { shouldComponentUpdate(nextProps: IRoomViewProps, nextState: IRoomViewState) { const { state } = this; const { roomUpdate, member, isOnHold } = state; - const { theme, insets, route, encryptionEnabled } = this.props; + const { theme, insets, route, encryptionEnabled, airGappedRestrictionRemainingDays } = this.props; if (theme !== nextProps.theme) { return true; } if (encryptionEnabled !== nextProps.encryptionEnabled) { return true; } + if (airGappedRestrictionRemainingDays !== nextProps.airGappedRestrictionRemainingDays) { + return true; + } if (member.statusText !== nextState.member.statusText) { return true; } @@ -1378,7 +1381,7 @@ class RoomView extends React.Component { renderFooter = () => { const { joined, room, readOnly, loading } = this.state; - const { theme } = this.props; + const { theme, airGappedRestrictionRemainingDays } = this.props; if (!this.rid) { return null; @@ -1413,6 +1416,18 @@ class RoomView extends React.Component { ); } + if (airGappedRestrictionRemainingDays !== undefined && airGappedRestrictionRemainingDays === 0) { + return ( + + + {I18n.t('AirGapped_workspace_read_only_title')} + + + {I18n.t('AirGapped_workspace_read_only_description')} + + + ); + } if (readOnly) { return ( @@ -1534,6 +1549,7 @@ const mapStateToProps = (state: IApplicationState) => ({ transferLivechatGuestPermission: state.permissions['transfer-livechat-guest'], viewCannedResponsesPermission: state.permissions['view-canned-responses'], livechatAllowManualOnHold: state.settings.Livechat_allow_manual_on_hold as boolean, + airGappedRestrictionRemainingDays: state.settings.Cloud_Workspace_AirGapped_Restrictions_Remaining_Days, inAppFeedback: state.inAppFeedback, encryptionEnabled: state.encryption.enabled }); diff --git a/app/views/RoomView/styles.ts b/app/views/RoomView/styles.ts index be9ebae866f..c0267ccaff3 100644 --- a/app/views/RoomView/styles.ts +++ b/app/views/RoomView/styles.ts @@ -12,7 +12,8 @@ export default StyleSheet.create({ readOnly: { justifyContent: 'flex-end', alignItems: 'center', - marginVertical: 15 + margin: 16, + marginBottom: 32 }, reactionSearchContainer: { marginHorizontal: 12, @@ -66,7 +67,14 @@ export default StyleSheet.create({ }, previewMode: { fontSize: 16, - ...sharedStyles.textMedium + lineHeight: 24, + ...sharedStyles.textSemibold + }, + readOnlyDescription: { + fontSize: 16, + lineHeight: 24, + ...sharedStyles.textRegular, + textAlign: 'center' }, searchbarContainer: { height: 56, diff --git a/app/views/ShareListView/index.tsx b/app/views/ShareListView/index.tsx index 42d943dfde0..b6efba0662c 100644 --- a/app/views/ShareListView/index.tsx +++ b/app/views/ShareListView/index.tsx @@ -59,6 +59,7 @@ interface IShareListViewProps extends INavigationOption { token: string; userId: string; theme: TSupportedThemes; + airGappedRestrictionRemainingDays: number | undefined; shareExtensionParams: Record; dispatch: Dispatch; } @@ -207,11 +208,12 @@ class ShareListView extends React.Component { ), headerTitle: I18n.t('Send_to'), - headerRight: () => ( - - - - ) + headerRight: () => + this.airGappedReadOnly ? null : ( + + + + ) }); }; @@ -283,6 +285,17 @@ class ShareListView extends React.Component { // Do nothing } + if (this.airGappedReadOnly) { + this.internalSetState({ + chats: [], + serversCount, + loading: false, + serverInfo + }); + this.forceUpdate(); + return; + } + this.internalSetState({ chats: chats ?? [], serversCount, @@ -345,6 +358,11 @@ class ShareListView extends React.Component { dispatch(appStart({ root: RootEnum.ROOT_INSIDE })); }; + get airGappedReadOnly() { + const { airGappedRestrictionRemainingDays } = this.props; + return airGappedRestrictionRemainingDays !== undefined && airGappedRestrictionRemainingDays === 0; + } + renderSectionHeader = (header: string) => { const { searching } = this.state; const { theme } = this.props; @@ -393,8 +411,11 @@ class ShareListView extends React.Component { }; renderSelectServer = () => { - const { serverInfo } = this.state; + const { serverInfo, serversCount } = this.state; const { navigation } = this.props; + if (serversCount === 1) { + return null; + } return ( <> {this.renderSectionHeader('Select_Server')} @@ -405,25 +426,25 @@ class ShareListView extends React.Component { }; renderEmptyComponent = () => { + const { searching, searchText } = this.state; const { theme } = this.props; - return ( - - {I18n.t('No_results_found')} - - ); + if (searching && searchText) { + return ( + + {I18n.t('No_results_found')} + + ); + } + return null; }; renderHeader = () => { - const { searching, serversCount } = this.state; + const { searching } = this.state; if (searching) { return null; } - if (serversCount === 1) { - return this.renderSectionHeader('Chats'); - } - return ( <> {this.renderSelectServer()} @@ -433,13 +454,42 @@ class ShareListView extends React.Component { }; render = () => { - const { chats, loading, searchResults, searching, searchText } = this.state; + const { chats, loading, searchResults, searching, serversCount } = this.state; const { theme } = this.props; if (loading) { return ; } + if (this.airGappedReadOnly) { + return ( + + {this.renderSelectServer()} + {serversCount > 1 ? ( + <> + + + + ) : null} + 1 ? { justifyContent: 'center' } : { paddingTop: 250 }) + } + ]}> + + {I18n.t('AirGapped_workspace_read_only_share_extension_title')} + + + {I18n.t('AirGapped_workspace_read_only_description')} + + + + ); + } + return ( { ItemSeparatorComponent={List.Separator} ListHeaderComponent={this.renderHeader} ListFooterComponent={!searching || searchResults.length > 0 ? : null} - ListEmptyComponent={searching && searchText ? this.renderEmptyComponent : null} + ListEmptyComponent={this.renderEmptyComponent} removeClippedSubviews keyboardShouldPersistTaps='always' /> @@ -460,13 +510,17 @@ class ShareListView extends React.Component { }; } -const mapStateToProps = ({ login, server, share }: IApplicationState) => ({ +const mapStateToProps = ({ login, server, share, settings }: IApplicationState) => ({ userId: login?.user?.id as string, token: login?.user?.token as string, isAuthenticated: login?.isAuthenticated, server: server?.server, connecting: server?.connecting, - shareExtensionParams: share?.params + shareExtensionParams: share?.params, + airGappedRestrictionRemainingDays: + typeof settings.Cloud_Workspace_AirGapped_Restrictions_Remaining_Days === 'number' + ? settings.Cloud_Workspace_AirGapped_Restrictions_Remaining_Days + : undefined }); export default connect(mapStateToProps)(withTheme(ShareListView)); diff --git a/app/views/ShareListView/styles.ts b/app/views/ShareListView/styles.ts index 5a3241da94b..6b60a2a64fc 100644 --- a/app/views/ShareListView/styles.ts +++ b/app/views/ShareListView/styles.ts @@ -66,5 +66,25 @@ export default StyleSheet.create({ marginHorizontal: 30, ...sharedStyles.textRegular, ...sharedStyles.textAlignCenter + }, + readOnlyServerSeparator: { + height: 16 + }, + readOnlyContainer: { + flex: 1, + alignItems: 'center', + padding: 16 + }, + readOnlyTitle: { + fontSize: 16, + lineHeight: 24, + ...sharedStyles.textSemibold, + textAlign: 'center' + }, + readOnlyDescription: { + fontSize: 16, + lineHeight: 24, + ...sharedStyles.textRegular, + textAlign: 'center' } });