diff --git a/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/enterprise/components/EnterpriseLicenseStatus.tsx b/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/enterprise/components/EnterpriseLicenseStatus.tsx index 57da397ed9..58177c8cf2 100644 --- a/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/enterprise/components/EnterpriseLicenseStatus.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/enterprise/components/EnterpriseLicenseStatus.tsx @@ -1,45 +1,40 @@ "use client"; -import { CheckIcon, RotateCcwIcon } from "lucide-react"; +import { RotateCcwIcon } from "lucide-react"; import { useRouter } from "next/navigation"; import { useState } from "react"; import toast from "react-hot-toast"; import { useTranslation } from "react-i18next"; import { recheckLicenseAction } from "@/modules/ee/license-check/actions"; +import { Badge } from "@/modules/ui/components/badge"; import { Button } from "@/modules/ui/components/button"; +import { SettingsCard } from "../../../components/SettingsCard"; type LicenseStatus = "active" | "expired" | "unreachable" | "no-license"; -interface RecheckButtonProps { - onClick: () => void; - disabled: boolean; - recheckingLabel: string; - recheckLabel: string; -} - -const RecheckButton = ({ onClick, disabled, recheckingLabel, recheckLabel }: RecheckButtonProps) => ( - -); - interface EnterpriseLicenseStatusProps { - active: boolean; status: LicenseStatus; environmentId: string; } -export const EnterpriseLicenseStatus = ({ active, status, environmentId }: EnterpriseLicenseStatusProps) => { +const getBadgeConfig = ( + status: LicenseStatus +): { type: "success" | "error" | "warning" | "gray"; labelKey: string } => { + switch (status) { + case "active": + return { type: "success", labelKey: "environments.settings.enterprise.license_status_active" }; + case "expired": + return { type: "error", labelKey: "environments.settings.enterprise.license_status_expired" }; + case "unreachable": + return { type: "warning", labelKey: "environments.settings.enterprise.license_status_unreachable" }; + case "no-license": + return { type: "gray", labelKey: "environments.settings.enterprise.license_status_no_license" }; + default: + return { type: "gray", labelKey: "environments.settings.enterprise.license_status" }; + } +}; + +export const EnterpriseLicenseStatus = ({ status, environmentId }: EnterpriseLicenseStatusProps) => { const { t } = useTranslation(); const router = useRouter(); const [isRechecking, setIsRechecking] = useState(false); @@ -72,68 +67,44 @@ export const EnterpriseLicenseStatus = ({ active, status, environmentId }: Enter } }; - const getStatusLabel = () => { - switch (status) { - case "active": - return t("environments.settings.enterprise.license_status_active"); - case "expired": - return t("environments.settings.enterprise.license_status_expired"); - case "unreachable": - return t("environments.settings.enterprise.license_status_unreachable"); - case "no-license": - return t("environments.settings.enterprise.license_status_no_license"); - default: - return status; - } - }; - - const isActive = active && status === "active"; + const badgeConfig = getBadgeConfig(status); return ( -
-
-
-
- {isActive ? ( -
-
- -
-

- {t( - "environments.settings.enterprise.your_enterprise_license_is_active_all_features_unlocked" - )} -

-
+ +
+
+ +
-
-
- {t("environments.settings.enterprise.license_status")}: - {getStatusLabel()} -
-
-

- {t("environments.settings.enterprise.questions_please_reach_out_to")}{" "} - - hola@formbricks.com - -

+
+

+ {t("environments.settings.enterprise.questions_please_reach_out_to")}{" "} + + hola@formbricks.com + +

-
+ ); }; diff --git a/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/enterprise/page.tsx b/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/enterprise/page.tsx index 170d44799a..92c1d06214 100644 --- a/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/enterprise/page.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/enterprise/page.tsx @@ -94,7 +94,6 @@ const Page = async (props) => { {hasLicense ? ( diff --git a/apps/web/i18n.lock b/apps/web/i18n.lock index 3ff84785e6..a58ca7f85e 100644 --- a/apps/web/i18n.lock +++ b/apps/web/i18n.lock @@ -899,6 +899,7 @@ checksums: environments/settings/enterprise/keep_full_control_over_your_data_privacy_and_security: 43aa041cc3e2b2fdd35d2d34659a6b7a environments/settings/enterprise/license_status: f6f85c59074ca2455321bd5288d94be8 environments/settings/enterprise/license_status_active: 3e1ec025c4a50830bbb9ad57a176630a + environments/settings/enterprise/license_status_description: 828e4527f606471cd8cf58b55ff824f6 environments/settings/enterprise/license_status_expired: 63b27cccba4ab2143e0f5f3d46e4168a environments/settings/enterprise/license_status_no_license: dbffdac22aeaff8ef85335dc47ceefc3 environments/settings/enterprise/license_status_unreachable: 202b110dab099f1167b13c326349e570 diff --git a/apps/web/locales/de-DE.json b/apps/web/locales/de-DE.json index 07e9396429..48f4a19f73 100644 --- a/apps/web/locales/de-DE.json +++ b/apps/web/locales/de-DE.json @@ -958,6 +958,7 @@ "keep_full_control_over_your_data_privacy_and_security": "Behalte die volle Kontrolle über deine Daten, Privatsphäre und Sicherheit.", "license_status": "Lizenzstatus", "license_status_active": "Aktiv", + "license_status_description": "Status deiner Enterprise-Lizenz.", "license_status_expired": "Abgelaufen", "license_status_no_license": "Keine Lizenz", "license_status_unreachable": "Nicht erreichbar", diff --git a/apps/web/locales/en-US.json b/apps/web/locales/en-US.json index 906a817b6c..6366bb73c1 100644 --- a/apps/web/locales/en-US.json +++ b/apps/web/locales/en-US.json @@ -961,6 +961,7 @@ "license_status_expired": "Expired", "license_status_no_license": "No License", "license_status_unreachable": "Unreachable", + "license_status_description": "Status of your enterprise license.", "no_call_needed_no_strings_attached_request_a_free_30_day_trial_license_to_test_all_features_by_filling_out_this_form": "No call needed, no strings attached: Request a free 30-day trial license to test all features by filling out this form:", "no_credit_card_no_sales_call_just_test_it": "No credit card. No sales call. Just test it :)", "on_request": "On request", @@ -3105,4 +3106,4 @@ "usability_rating_description": "Measure perceived usability by asking users to rate their experience with your product using a standardized 10-question survey.", "usability_score_name": "System Usability Score (SUS)" } -} +} \ No newline at end of file diff --git a/apps/web/locales/es-ES.json b/apps/web/locales/es-ES.json index fb53067b4e..2fbf8687d0 100644 --- a/apps/web/locales/es-ES.json +++ b/apps/web/locales/es-ES.json @@ -958,6 +958,7 @@ "keep_full_control_over_your_data_privacy_and_security": "Mantén el control total sobre la privacidad y seguridad de tus datos.", "license_status": "Estado de la licencia", "license_status_active": "Activa", + "license_status_description": "Estado de tu licencia enterprise.", "license_status_expired": "Caducada", "license_status_no_license": "Sin licencia", "license_status_unreachable": "Inaccesible", diff --git a/apps/web/locales/fr-FR.json b/apps/web/locales/fr-FR.json index d0575c587b..5028e7776b 100644 --- a/apps/web/locales/fr-FR.json +++ b/apps/web/locales/fr-FR.json @@ -958,6 +958,7 @@ "keep_full_control_over_your_data_privacy_and_security": "Gardez un contrôle total sur la confidentialité et la sécurité de vos données.", "license_status": "Statut de la licence", "license_status_active": "Active", + "license_status_description": "Statut de votre licence entreprise.", "license_status_expired": "Expirée", "license_status_no_license": "Aucune licence", "license_status_unreachable": "Inaccessible", diff --git a/apps/web/locales/hu-HU.json b/apps/web/locales/hu-HU.json index 69abb02350..c7a43f17f6 100644 --- a/apps/web/locales/hu-HU.json +++ b/apps/web/locales/hu-HU.json @@ -958,6 +958,7 @@ "keep_full_control_over_your_data_privacy_and_security": "Az adatvédelem és biztonság fölötti rendelkezés teljes kézben tartása.", "license_status": "Licenc állapota", "license_status_active": "Aktív", + "license_status_description": "A vállalati licenced állapota.", "license_status_expired": "Lejárt", "license_status_no_license": "Nincs licenc", "license_status_unreachable": "Nem elérhető", diff --git a/apps/web/locales/ja-JP.json b/apps/web/locales/ja-JP.json index 6c41a3fcca..3bf19f8031 100644 --- a/apps/web/locales/ja-JP.json +++ b/apps/web/locales/ja-JP.json @@ -958,6 +958,7 @@ "keep_full_control_over_your_data_privacy_and_security": "データのプライバシーとセキュリティを完全に制御できます。", "license_status": "ライセンスステータス", "license_status_active": "有効", + "license_status_description": "エンタープライズライセンスのステータス。", "license_status_expired": "期限切れ", "license_status_no_license": "ライセンスなし", "license_status_unreachable": "接続不可", diff --git a/apps/web/locales/nl-NL.json b/apps/web/locales/nl-NL.json index b91e3c0fce..decf14c782 100644 --- a/apps/web/locales/nl-NL.json +++ b/apps/web/locales/nl-NL.json @@ -958,6 +958,7 @@ "keep_full_control_over_your_data_privacy_and_security": "Houd de volledige controle over de privacy en beveiliging van uw gegevens.", "license_status": "Licentiestatus", "license_status_active": "Actief", + "license_status_description": "Status van je enterprise-licentie.", "license_status_expired": "Verlopen", "license_status_no_license": "Geen licentie", "license_status_unreachable": "Niet bereikbaar", diff --git a/apps/web/locales/pt-BR.json b/apps/web/locales/pt-BR.json index 3cd3c750c3..65d3d5abf6 100644 --- a/apps/web/locales/pt-BR.json +++ b/apps/web/locales/pt-BR.json @@ -958,6 +958,7 @@ "keep_full_control_over_your_data_privacy_and_security": "Mantenha controle total sobre a privacidade e segurança dos seus dados.", "license_status": "Status da licença", "license_status_active": "Ativa", + "license_status_description": "Status da sua licença enterprise.", "license_status_expired": "Expirada", "license_status_no_license": "Sem licença", "license_status_unreachable": "Inacessível", diff --git a/apps/web/locales/pt-PT.json b/apps/web/locales/pt-PT.json index 02ab3366bd..ca921eaa4e 100644 --- a/apps/web/locales/pt-PT.json +++ b/apps/web/locales/pt-PT.json @@ -958,6 +958,7 @@ "keep_full_control_over_your_data_privacy_and_security": "Mantenha controlo total sobre a privacidade e segurança dos seus dados.", "license_status": "Estado da licença", "license_status_active": "Ativa", + "license_status_description": "Estado da sua licença empresarial.", "license_status_expired": "Expirada", "license_status_no_license": "Sem licença", "license_status_unreachable": "Inacessível", diff --git a/apps/web/locales/ro-RO.json b/apps/web/locales/ro-RO.json index 826d629e5b..10ada5ae2d 100644 --- a/apps/web/locales/ro-RO.json +++ b/apps/web/locales/ro-RO.json @@ -958,6 +958,7 @@ "keep_full_control_over_your_data_privacy_and_security": "Mențineți controlul complet asupra confidențialității și securității datelor dumneavoastră.", "license_status": "Stare licență", "license_status_active": "Activă", + "license_status_description": "Starea licenței tale enterprise.", "license_status_expired": "Expirată", "license_status_no_license": "Fără licență", "license_status_unreachable": "Indisponibilă", diff --git a/apps/web/locales/ru-RU.json b/apps/web/locales/ru-RU.json index 205f89b333..1a71014f77 100644 --- a/apps/web/locales/ru-RU.json +++ b/apps/web/locales/ru-RU.json @@ -958,6 +958,7 @@ "keep_full_control_over_your_data_privacy_and_security": "Полный контроль над конфиденциальностью и безопасностью ваших данных.", "license_status": "Статус лицензии", "license_status_active": "Активна", + "license_status_description": "Статус вашей корпоративной лицензии.", "license_status_expired": "Срок действия истёк", "license_status_no_license": "Нет лицензии", "license_status_unreachable": "Недоступна", diff --git a/apps/web/locales/sv-SE.json b/apps/web/locales/sv-SE.json index 5db7f4e0dd..544c485a24 100644 --- a/apps/web/locales/sv-SE.json +++ b/apps/web/locales/sv-SE.json @@ -958,6 +958,7 @@ "keep_full_control_over_your_data_privacy_and_security": "Behåll full kontroll över din datasekretess och säkerhet.", "license_status": "Licensstatus", "license_status_active": "Aktiv", + "license_status_description": "Status för din företagslicens.", "license_status_expired": "Utgången", "license_status_no_license": "Ingen licens", "license_status_unreachable": "Otillgänglig", diff --git a/apps/web/locales/zh-Hans-CN.json b/apps/web/locales/zh-Hans-CN.json index 1bbc07f456..2ddbd5896b 100644 --- a/apps/web/locales/zh-Hans-CN.json +++ b/apps/web/locales/zh-Hans-CN.json @@ -958,6 +958,7 @@ "keep_full_control_over_your_data_privacy_and_security": "保持 对 您 的 数据 隐私 和 安全 的 完全 控制。", "license_status": "许可证状态", "license_status_active": "已激活", + "license_status_description": "你的企业许可证状态。", "license_status_expired": "已过期", "license_status_no_license": "无许可证", "license_status_unreachable": "无法访问", diff --git a/apps/web/locales/zh-Hant-TW.json b/apps/web/locales/zh-Hant-TW.json index 1cb8023a18..03bfc554ad 100644 --- a/apps/web/locales/zh-Hant-TW.json +++ b/apps/web/locales/zh-Hant-TW.json @@ -958,6 +958,7 @@ "keep_full_control_over_your_data_privacy_and_security": "完全掌控您的資料隱私權和安全性。", "license_status": "授權狀態", "license_status_active": "有效", + "license_status_description": "你的企業授權狀態。", "license_status_expired": "已過期", "license_status_no_license": "無授權", "license_status_unreachable": "無法連線", diff --git a/apps/web/modules/ee/license-check/lib/license.ts b/apps/web/modules/ee/license-check/lib/license.ts index f2099f237c..c14f969d23 100644 --- a/apps/web/modules/ee/license-check/lib/license.ts +++ b/apps/web/modules/ee/license-check/lib/license.ts @@ -31,7 +31,7 @@ const CONFIG = { ENDPOINT: env.ENVIRONMENT === "staging" ? "https://staging.ee.formbricks.com/api/licenses/check" - : "https://ee.formbricks.com/api/licenses/check", + : "http://localhost:3001/api/licenses/check", // ENDPOINT: "https://localhost:8080/api/licenses/check", TIMEOUT_MS: 5000, }, @@ -195,7 +195,7 @@ const getPreviousResult = async (): Promise => { .finally(() => { getPreviousResultPromise = null; }) - .catch(() => {}); + .catch(() => { }); return getPreviousResultPromise; }; @@ -448,7 +448,7 @@ export const fetchLicense = async (): Promise .finally(() => { fetchLicensePromise = null; }) - .catch(() => {}); + .catch(() => { }); return fetchLicensePromise; }; @@ -569,7 +569,7 @@ export const getEnterpriseLicense = reactCache(async (): Promise { getEnterpriseLicensePromise = null; }) - .catch(() => {}); + .catch(() => { }); return getEnterpriseLicensePromise; });