diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index d57ad0e53..b6df015f7 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -80,10 +80,17 @@ class DashboardController < ActionController::Base IS_ENTERPRISE: ChatwootApp.enterprise?, AZURE_APP_ID: GlobalConfigService.load('AZURE_APP_ID', ''), GIT_SHA: GIT_HASH, - ALLOWED_LOGIN_METHODS: allowed_login_methods + ALLOWED_LOGIN_METHODS: allowed_login_methods, + ACTIVE_PLATFORM_BANNERS: active_platform_banners } end + def active_platform_banners + return [] unless ChatwootApp.chatwoot_cloud? + + PlatformBanner.active.order(created_at: :desc).as_json(only: %i[id banner_message banner_type updated_at]) + end + def allowed_login_methods methods = ['email'] methods << 'google_oauth' if GlobalConfigService.load('ENABLE_GOOGLE_OAUTH_LOGIN', 'true').to_s != 'false' diff --git a/app/controllers/super_admin/platform_banners_controller.rb b/app/controllers/super_admin/platform_banners_controller.rb new file mode 100644 index 000000000..e4bf727a0 --- /dev/null +++ b/app/controllers/super_admin/platform_banners_controller.rb @@ -0,0 +1,9 @@ +class SuperAdmin::PlatformBannersController < SuperAdmin::ApplicationController + before_action :ensure_chatwoot_cloud + + private + + def ensure_chatwoot_cloud + raise ActionController::RoutingError, 'Not Found' unless ChatwootApp.chatwoot_cloud? + end +end diff --git a/app/dashboards/platform_banner_dashboard.rb b/app/dashboards/platform_banner_dashboard.rb new file mode 100644 index 000000000..41674406a --- /dev/null +++ b/app/dashboards/platform_banner_dashboard.rb @@ -0,0 +1,20 @@ +require 'administrate/base_dashboard' + +class PlatformBannerDashboard < Administrate::BaseDashboard + ATTRIBUTE_TYPES = { + id: Field::Number, + banner_message: Field::Text.with_options(truncate: 200), + banner_type: Field::Select.with_options(collection: %w[info warning error]), + active: Field::Boolean, + created_at: Field::DateTime, + updated_at: Field::DateTime + }.freeze + + COLLECTION_ATTRIBUTES = %i[id banner_message banner_type active created_at].freeze + SHOW_PAGE_ATTRIBUTES = %i[id banner_message banner_type active created_at updated_at].freeze + FORM_ATTRIBUTES = %i[banner_message banner_type active].freeze + + def display_resource(platform_banner) + "Banner ##{platform_banner.id} (#{platform_banner.banner_type})" + end +end diff --git a/app/javascript/dashboard/App.vue b/app/javascript/dashboard/App.vue index 988829407..99aebfd1a 100644 --- a/app/javascript/dashboard/App.vue +++ b/app/javascript/dashboard/App.vue @@ -3,6 +3,7 @@ import { mapGetters } from 'vuex'; import LoadingState from './components/widgets/LoadingState.vue'; import NetworkNotification from './components/NetworkNotification.vue'; import UpdateBanner from './components/app/UpdateBanner.vue'; +import StatusBanner from './components/app/StatusBanner.vue'; import PaymentPendingBanner from './components/app/PaymentPendingBanner.vue'; import PendingEmailVerificationBanner from './components/app/PendingEmailVerificationBanner.vue'; import vueActionCable from './helper/actionCable'; @@ -27,6 +28,7 @@ export default { LoadingState, NetworkNotification, UpdateBanner, + StatusBanner, PaymentPendingBanner, WootSnackbarBox, PendingEmailVerificationBanner, @@ -137,6 +139,7 @@ export default { :dir="isRTL ? 'rtl' : 'ltr'" > +