From 3d31d4dd7f1f2b06593c21bfabdd776dc8c31476 Mon Sep 17 00:00:00 2001 From: Pranav Date: Mon, 15 Apr 2024 16:46:48 -0700 Subject: [PATCH] feat: Add widget to help center config (#9235) --- app/models/channel/web_widget.rb | 1 + app/models/portal.rb | 35 ++++++++++--------- app/views/layouts/portal.html.erb | 9 +++-- ...10313_add_channel_web_widget_to_portals.rb | 6 ++++ db/schema.rb | 4 ++- 5 files changed, 35 insertions(+), 20 deletions(-) create mode 100644 db/migrate/20240415210313_add_channel_web_widget_to_portals.rb diff --git a/app/models/channel/web_widget.rb b/app/models/channel/web_widget.rb index 2efe74881..faa1126f3 100644 --- a/app/models/channel/web_widget.rb +++ b/app/models/channel/web_widget.rb @@ -41,6 +41,7 @@ class Channel::WebWidget < ApplicationRecord before_validation :validate_pre_chat_options validates :website_url, presence: true validates :widget_color, presence: true + has_many :portals, foreign_key: 'channel_web_widget_id', dependent: :nullify, inverse_of: :channel_web_widget has_secure_token :website_token has_secure_token :hmac_token diff --git a/app/models/portal.rb b/app/models/portal.rb index 269f64110..cc64be1fd 100644 --- a/app/models/portal.rb +++ b/app/models/portal.rb @@ -2,24 +2,26 @@ # # Table name: portals # -# id :bigint not null, primary key -# archived :boolean default(FALSE) -# color :string -# config :jsonb -# custom_domain :string -# header_text :text -# homepage_link :string -# name :string not null -# page_title :string -# slug :string not null -# created_at :datetime not null -# updated_at :datetime not null -# account_id :integer not null +# id :bigint not null, primary key +# archived :boolean default(FALSE) +# color :string +# config :jsonb +# custom_domain :string +# header_text :text +# homepage_link :string +# name :string not null +# page_title :string +# slug :string not null +# created_at :datetime not null +# updated_at :datetime not null +# account_id :integer not null +# channel_web_widget_id :bigint # # Indexes # -# index_portals_on_custom_domain (custom_domain) UNIQUE -# index_portals_on_slug (slug) UNIQUE +# index_portals_on_channel_web_widget_id (channel_web_widget_id) +# index_portals_on_custom_domain (custom_domain) UNIQUE +# index_portals_on_slug (slug) UNIQUE # class Portal < ApplicationRecord include Rails.application.routes.url_helpers @@ -38,6 +40,7 @@ class Portal < ApplicationRecord source: :user has_one_attached :logo has_many :inboxes, dependent: :nullify + belongs_to :channel_web_widget, class_name: 'Channel::WebWidget', optional: true before_validation -> { normalize_empty_string_to_nil(%i[custom_domain homepage_link]) } validates :account_id, presence: true @@ -50,7 +53,7 @@ class Portal < ApplicationRecord scope :active, -> { where(archived: false) } - CONFIG_JSON_KEYS = %w[allowed_locales default_locale].freeze + CONFIG_JSON_KEYS = %w[allowed_locales default_locale website_token].freeze def file_base_data { diff --git a/app/views/layouts/portal.html.erb b/app/views/layouts/portal.html.erb index 483ca3809..f3f008305 100644 --- a/app/views/layouts/portal.html.erb +++ b/app/views/layouts/portal.html.erb @@ -38,7 +38,7 @@ By default, it renders: <% else %> <%= @portal.page_title%> <% end %> - + <% unless @theme_from_params.blank? %> <%# this adds the theme from params, ensuring that there a localstorage value set %> <%# this will further trigger the next script to ensure color mode is toggled without a FOUC %> @@ -75,13 +75,13 @@ By default, it renders: --dynamic-portal-bg-gradient: <%= generate_gradient_to_bottom('dark') %>; --dynamic-hover-bg-color: <%= generate_portal_hover_color(@portal.color , 'dark') %>; } - + html.light { --dynamic-portal-bg: <%= generate_portal_bg(@portal.color, 'light') %>; --dynamic-portal-bg-gradient: <%= generate_gradient_to_bottom('light') %>; --dynamic-hover-bg-color: <%= generate_portal_hover_color(@portal.color , 'light') %>; } - + /* Portal background */ #portal-bg { background: var(--dynamic-portal-bg); @@ -128,4 +128,7 @@ By default, it renders: tocHeader: '<%= I18n.t('public_portal.toc_header') %>' }; + <% if @portal.channel_web_widget.present? %> + <%= @portal.channel_web_widget.web_widget_script.html_safe %> + <% end %> diff --git a/db/migrate/20240415210313_add_channel_web_widget_to_portals.rb b/db/migrate/20240415210313_add_channel_web_widget_to_portals.rb new file mode 100644 index 000000000..4c01fc5b4 --- /dev/null +++ b/db/migrate/20240415210313_add_channel_web_widget_to_portals.rb @@ -0,0 +1,6 @@ +class AddChannelWebWidgetToPortals < ActiveRecord::Migration[7.0] + def change + add_column :portals, :channel_web_widget_id, :bigint + add_index :portals, :channel_web_widget_id + end +end diff --git a/db/schema.rb b/db/schema.rb index a877bf05d..1282c6e5e 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2024_03_22_071629) do +ActiveRecord::Schema[7.0].define(version: 2024_04_15_210313) do # These are extensions that must be enabled in order to support this database enable_extension "pg_stat_statements" enable_extension "pg_trgm" @@ -800,6 +800,8 @@ ActiveRecord::Schema[7.0].define(version: 2024_03_22_071629) do t.datetime "updated_at", null: false t.jsonb "config", default: {"allowed_locales"=>["en"]} t.boolean "archived", default: false + t.bigint "channel_web_widget_id" + t.index ["channel_web_widget_id"], name: "index_portals_on_channel_web_widget_id" t.index ["custom_domain"], name: "index_portals_on_custom_domain", unique: true t.index ["slug"], name: "index_portals_on_slug", unique: true end