-
-
- {t(`settings.featureFlags.groups.${group}.title`)}
-
-
-
- {features?.map((feature) => (
-
+
+
+ setSearchTerm(e.target.value)}
+ className="pl-10"
+ />
+
+
+
+ {(['all', 'enabled', 'disabled'] as const).map((filter) => (
+
+ {t(`settings.featureFlags.filters.${filter}`)}
+
))}
- {index !== groupedFeatures.size - 1 &&
}
- ))}
+
+
+ {groupedFeatures.size === 0 ? (
+
+
+
+ {searchTerm || filterEnabled !== 'all'
+ ? t('settings.featureFlags.noResults')
+ : t('settings.featureFlags.noFeatures')
+ }
+
+
+ ) : (
+ Array.from(groupedFeatures.entries()).map(([group, features], index) => {
+ const GroupIcon = getGroupIcon(group);
+ const enabledInGroup = features.filter(f => f.is_enabled).length;
+
+ return (
+
+
+
+
+
+ {t(`settings.featureFlags.groups.${group}.title`)}
+
+
+ {enabledInGroup}/{features.length}
+
+
+
+
+ {features?.map((feature) => (
+
+
+
+
+ {t(`settings.featureFlags.features.${feature.feature_name}.title`)}
+
+
+
+ {t(`settings.featureFlags.features.${feature.feature_name}.description`)}
+
+
+
+
+ handleToggleFeature(feature.feature_name, checked)
+ }
+ />
+
+
+ ))}
+
+ {index !== groupedFeatures.size - 1 &&
}
+
+ );
+ })
+ )}
diff --git a/view/lib/i18n/locales/en.json b/view/lib/i18n/locales/en.json
index 1e2405a27..60eda2a87 100644
--- a/view/lib/i18n/locales/en.json
+++ b/view/lib/i18n/locales/en.json
@@ -12,7 +12,9 @@
"featureNotAvailable": "This feature is not available for your organization",
"goBack": "Go Back",
"refreshPage": "Refresh Page",
- "loading": "Loading..."
+ "loading": "Loading...",
+ "enabled": "Enabled",
+ "disabled": "Disabled"
},
"containers": {
"title": "Containers",
@@ -287,7 +289,15 @@
"messages": {
"updated": "Feature flag updated successfully",
"updateFailed": "Failed to update feature flag"
- }
+ },
+ "searchPlaceholder": "Search features...",
+ "filters": {
+ "all": "All",
+ "enabled": "Enabled",
+ "disabled": "Disabled"
+ },
+ "noResults": "No features found matching your search criteria",
+ "noFeatures": "No features available"
},
"account": {
"title": "Account Information",
diff --git a/view/lib/i18n/locales/es.json b/view/lib/i18n/locales/es.json
index a8342db6b..bdf7f3dce 100644
--- a/view/lib/i18n/locales/es.json
+++ b/view/lib/i18n/locales/es.json
@@ -11,7 +11,9 @@
"featureNotAvailable": "Esta característica no está disponible para tu organización",
"goBack": "Volver",
"refreshPage": "Actualizar página",
- "loading": "Cargando..."
+ "loading": "Cargando...",
+ "enabled": "Habilitado",
+ "disabled": "Deshabilitado"
},
"containers": {
"title": "Contenedores",
@@ -286,7 +288,15 @@
"messages": {
"updated": "Característica actualizada exitosamente",
"updateFailed": "Error al actualizar la característica"
- }
+ },
+ "searchPlaceholder": "Buscar características...",
+ "filters": {
+ "all": "Todas",
+ "enabled": "Habilitadas",
+ "disabled": "Deshabilitadas"
+ },
+ "noResults": "No se encontraron características que coincidan con tu búsqueda",
+ "noFeatures": "No hay características disponibles"
},
"account": {
"title": "Información de la Cuenta",
diff --git a/view/lib/i18n/locales/fr.json b/view/lib/i18n/locales/fr.json
index 5b752ef6b..d33897551 100644
--- a/view/lib/i18n/locales/fr.json
+++ b/view/lib/i18n/locales/fr.json
@@ -12,7 +12,9 @@
"featureNotAvailable": "Cette caractéristique n'est pas disponible pour votre organisation",
"goBack": "Retour",
"refreshPage": "Actualiser la page",
- "loading": "Chargement..."
+ "loading": "Chargement...",
+ "enabled": "Activé",
+ "disabled": "Désactivé"
},
"containers": {
"title": "Conteneurs",
@@ -287,7 +289,15 @@
"messages": {
"updated": "Caractéristique mise à jour avec succès",
"updateFailed": "Échec de la mise à jour de la caractéristique"
- }
+ },
+ "searchPlaceholder": "Rechercher des caractéristiques...",
+ "filters": {
+ "all": "Toutes",
+ "enabled": "Activées",
+ "disabled": "Désactivées"
+ },
+ "noResults": "Aucune caractéristique trouvée correspondant à votre recherche",
+ "noFeatures": "Aucune caractéristique disponible"
},
"account": {
"title": "Informations du Compte",
diff --git a/view/lib/i18n/locales/kn.json b/view/lib/i18n/locales/kn.json
index 613ef75a2..38ca25f60 100644
--- a/view/lib/i18n/locales/kn.json
+++ b/view/lib/i18n/locales/kn.json
@@ -12,7 +12,9 @@
"featureNotAvailable": "ಈ ವೈಶಿಷ್ಟ್ಯ ನಿಮ್ಮ ಸಂಸ್ಥೆಗೆ ಲಭ್ಯವಿಲ್ಲ",
"goBack": "ಹಿಂತಿರುಗಿ",
"refreshPage": "ಪುಟವನ್ನು ಪುನರಾವರ್ತನಿಸಿ",
- "loading": "ಲೋಡ್ ಆಗುತ್ತಿದೆ..."
+ "loading": "ಲೋಡ್ ಆಗುತ್ತಿದೆ...",
+ "enabled": "ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ",
+ "disabled": "ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"
},
"containers": {
"title": "ಕನ್ಟೇನರ್ಗಳು",
@@ -287,7 +289,15 @@
"messages": {
"updated": "ವೈಶಿಷ್ಟ್ಯಗಳು ಸಫಲವಾಗಿ ನವೀಕರಿಸಲಾಗಿದೆ",
"updateFailed": "ವೈಶಿಷ್ಟ್ಯಗಳು ನವೀಕರಿಸಲು ವಿಫಲವಾಗಿದೆ"
- }
+ },
+ "searchPlaceholder": "ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಹುಡುಕಿ...",
+ "filters": {
+ "all": "ಎಲ್ಲಾ",
+ "enabled": "ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ",
+ "disabled": "ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"
+ },
+ "noResults": "ನಿಮ್ಮ ಹುಡುಕಾಟದ ಮಾನದಂಡಗಳಿಗೆ ಹೊಂದಾಣಿಕೆಯಾಗುವ ವೈಶಿಷ್ಟ್ಯಗಳು ಕಂಡುಬಂದಿಲ್ಲ",
+ "noFeatures": "ಯಾವುದೇ ವೈಶಿಷ್ಟ್ಯಗಳು ಲಭ್ಯವಿಲ್ಲ"
},
"account": {
"title": "ಖಾತೆ ಮಾಹಿತಿ",
diff --git a/view/lib/i18n/locales/ml.json b/view/lib/i18n/locales/ml.json
index 7d9b2f00c..27832d922 100644
--- a/view/lib/i18n/locales/ml.json
+++ b/view/lib/i18n/locales/ml.json
@@ -12,7 +12,9 @@
"featureNotAvailable": "ഈ സവിശേഷത നിങ്ങളുടെ സ്ഥാപനത്തിന് ലഭ്യമല്ല",
"goBack": "മടങ്ങുക",
"refreshPage": "പേജ് പുതുക്കുക",
- "loading": "ലോഡുചെയ്യുന്നു..."
+ "loading": "ലോഡുചെയ്യുന്നു...",
+ "enabled": "പ്രവർത്തനസജ്ജമാക്കി",
+ "disabled": "പ്രവർത്തനരഹിതമാക്കി"
},
"containers": {
"title": "കണ്ടെയ്നറുകൾ",
@@ -286,7 +288,15 @@
"messages": {
"updated": "ഫീച്ചർ അപ്ഡേറ്റ് ചെയ്തു",
"updateFailed": "ഫീച്ചർ അപ്ഡേറ്റ് പരാജയപ്പെട്ടു"
- }
+ },
+ "searchPlaceholder": "വിശേഷതകൾ തിരയുക...",
+ "filters": {
+ "all": "എല്ലാം",
+ "enabled": "പ്രവർത്തനസജ്ജമാക്കി",
+ "disabled": "പ്രവർത്തനരഹിതമാക്കി"
+ },
+ "noResults": "നിങ്ങളുടെ തിരയൽ മാനദണ്ഡങ്ങൾക്ക് പൊരുത്തപ്പെടുന്ന വിശേഷതകൾ കണ്ടെത്തിയില്ല",
+ "noFeatures": "വിശേഷതകൾ ലഭ്യമല്ല"
},
"account": {
"title": "അക്കൗണ്ട്",