- improve styling of the feature toggle displayed in super admin <img width="1540" alt="Screenshot 2025-02-21 at 4 47 58 PM" src="https://github.com/user-attachments/assets/c111ff0d-c2ce-4609-832b-0ea631c97471" /> <img width="1451" alt="Screenshot 2025-02-21 at 4 48 11 PM" src="https://github.com/user-attachments/assets/fe5df4ae-984b-4f9d-baba-9555935fbd55" /> --------- Co-authored-by: Pranav <pranavrajs@gmail.com>
53 lines
1.7 KiB
Ruby
53 lines
1.7 KiB
Ruby
module SuperAdmin::AccountFeaturesHelper
|
|
def self.account_features
|
|
YAML.safe_load(Rails.root.join('config/features.yml').read).freeze
|
|
end
|
|
|
|
def self.account_premium_features
|
|
account_features.filter { |feature| feature['premium'] }.pluck('name')
|
|
end
|
|
|
|
# Returns a hash mapping feature names to their display names
|
|
def self.feature_display_names
|
|
account_features.each_with_object({}) do |feature, hash|
|
|
hash[feature['name']] = feature['display_name']
|
|
end
|
|
end
|
|
|
|
def self.filter_internal_features(features)
|
|
return features if GlobalConfig.get_value('DEPLOYMENT_ENV') == 'cloud'
|
|
|
|
internal_features = account_features.select { |f| f['chatwoot_internal'] }.pluck('name')
|
|
features.except(*internal_features)
|
|
end
|
|
|
|
def self.filter_deprecated_features(features)
|
|
deprecated_features = account_features.select { |f| f['deprecated'] }.pluck('name')
|
|
features.except(*deprecated_features)
|
|
end
|
|
|
|
def self.sort_and_transform_features(features, display_names)
|
|
features.sort_by { |key, _| display_names[key] || key }
|
|
.to_h
|
|
.transform_keys { |key| [key, display_names[key]] }
|
|
end
|
|
|
|
def self.partition_features(features)
|
|
filtered = filter_internal_features(features)
|
|
filtered = filter_deprecated_features(filtered)
|
|
display_names = feature_display_names
|
|
|
|
regular, premium = filtered.partition { |key, _value| account_premium_features.exclude?(key) }
|
|
|
|
[
|
|
sort_and_transform_features(regular, display_names),
|
|
sort_and_transform_features(premium, display_names)
|
|
]
|
|
end
|
|
|
|
def self.filtered_features(features)
|
|
regular, premium = partition_features(features)
|
|
regular.merge(premium)
|
|
end
|
|
end
|