diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js index 093422ac87b..590c4c8d2b4 100644 --- a/app/javascript/mastodon/initial_state.js +++ b/app/javascript/mastodon/initial_state.js @@ -1,6 +1,5 @@ // @ts-check - /** * @typedef {[code: string, name: string, localName: string]} InitialStateLanguage */ @@ -64,6 +63,7 @@ * @property {boolean=} critical_updates_pending * @property {InitialStateMeta} meta * @property {Role?} role + * @property {string[]} features */ const element = document.getElementById('initial-state'); @@ -140,4 +140,12 @@ export function getAccessToken() { return getMeta('access_token'); } +/** + * @param {string} feature + * @returns {boolean} + */ +export function isFeatureEnabled(feature) { + return initialState?.features?.includes(feature) || false; +} + export default initialState; diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb index 1c83eff4b23..ddcb214a472 100644 --- a/app/serializers/initial_state_serializer.rb +++ b/app/serializers/initial_state_serializer.rb @@ -5,7 +5,7 @@ class InitialStateSerializer < ActiveModel::Serializer attributes :meta, :compose, :accounts, :media_attachments, :settings, - :languages + :languages, :features attribute :critical_updates_pending, if: -> { object&.role&.can?(:view_devops) && SoftwareUpdate.check_enabled? } @@ -85,6 +85,10 @@ class InitialStateSerializer < ActiveModel::Serializer LanguagesHelper::SUPPORTED_LOCALES.map { |(key, value)| [key, value[0], value[1]] } end + def features + Mastodon::Feature.enabled_features + end + private def default_meta_store