feat: Add widget to help center config (#9235)
This commit is contained in:
@@ -41,6 +41,7 @@ class Channel::WebWidget < ApplicationRecord
|
|||||||
before_validation :validate_pre_chat_options
|
before_validation :validate_pre_chat_options
|
||||||
validates :website_url, presence: true
|
validates :website_url, presence: true
|
||||||
validates :widget_color, 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 :website_token
|
||||||
has_secure_token :hmac_token
|
has_secure_token :hmac_token
|
||||||
|
|||||||
@@ -2,24 +2,26 @@
|
|||||||
#
|
#
|
||||||
# Table name: portals
|
# Table name: portals
|
||||||
#
|
#
|
||||||
# id :bigint not null, primary key
|
# id :bigint not null, primary key
|
||||||
# archived :boolean default(FALSE)
|
# archived :boolean default(FALSE)
|
||||||
# color :string
|
# color :string
|
||||||
# config :jsonb
|
# config :jsonb
|
||||||
# custom_domain :string
|
# custom_domain :string
|
||||||
# header_text :text
|
# header_text :text
|
||||||
# homepage_link :string
|
# homepage_link :string
|
||||||
# name :string not null
|
# name :string not null
|
||||||
# page_title :string
|
# page_title :string
|
||||||
# slug :string not null
|
# slug :string not null
|
||||||
# created_at :datetime not null
|
# created_at :datetime not null
|
||||||
# updated_at :datetime not null
|
# updated_at :datetime not null
|
||||||
# account_id :integer not null
|
# account_id :integer not null
|
||||||
|
# channel_web_widget_id :bigint
|
||||||
#
|
#
|
||||||
# Indexes
|
# Indexes
|
||||||
#
|
#
|
||||||
# index_portals_on_custom_domain (custom_domain) UNIQUE
|
# index_portals_on_channel_web_widget_id (channel_web_widget_id)
|
||||||
# index_portals_on_slug (slug) UNIQUE
|
# index_portals_on_custom_domain (custom_domain) UNIQUE
|
||||||
|
# index_portals_on_slug (slug) UNIQUE
|
||||||
#
|
#
|
||||||
class Portal < ApplicationRecord
|
class Portal < ApplicationRecord
|
||||||
include Rails.application.routes.url_helpers
|
include Rails.application.routes.url_helpers
|
||||||
@@ -38,6 +40,7 @@ class Portal < ApplicationRecord
|
|||||||
source: :user
|
source: :user
|
||||||
has_one_attached :logo
|
has_one_attached :logo
|
||||||
has_many :inboxes, dependent: :nullify
|
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]) }
|
before_validation -> { normalize_empty_string_to_nil(%i[custom_domain homepage_link]) }
|
||||||
validates :account_id, presence: true
|
validates :account_id, presence: true
|
||||||
@@ -50,7 +53,7 @@ class Portal < ApplicationRecord
|
|||||||
|
|
||||||
scope :active, -> { where(archived: false) }
|
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
|
def file_base_data
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ By default, it renders:
|
|||||||
<% else %>
|
<% else %>
|
||||||
<title><%= @portal.page_title%></title>
|
<title><%= @portal.page_title%></title>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% unless @theme_from_params.blank? %>
|
<% unless @theme_from_params.blank? %>
|
||||||
<%# this adds the theme from params, ensuring that there a localstorage value set %>
|
<%# 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 %>
|
<%# 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-portal-bg-gradient: <%= generate_gradient_to_bottom('dark') %>;
|
||||||
--dynamic-hover-bg-color: <%= generate_portal_hover_color(@portal.color , 'dark') %>;
|
--dynamic-hover-bg-color: <%= generate_portal_hover_color(@portal.color , 'dark') %>;
|
||||||
}
|
}
|
||||||
|
|
||||||
html.light {
|
html.light {
|
||||||
--dynamic-portal-bg: <%= generate_portal_bg(@portal.color, 'light') %>;
|
--dynamic-portal-bg: <%= generate_portal_bg(@portal.color, 'light') %>;
|
||||||
--dynamic-portal-bg-gradient: <%= generate_gradient_to_bottom('light') %>;
|
--dynamic-portal-bg-gradient: <%= generate_gradient_to_bottom('light') %>;
|
||||||
--dynamic-hover-bg-color: <%= generate_portal_hover_color(@portal.color , 'light') %>;
|
--dynamic-hover-bg-color: <%= generate_portal_hover_color(@portal.color , 'light') %>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Portal background */
|
/* Portal background */
|
||||||
#portal-bg {
|
#portal-bg {
|
||||||
background: var(--dynamic-portal-bg);
|
background: var(--dynamic-portal-bg);
|
||||||
@@ -128,4 +128,7 @@ By default, it renders:
|
|||||||
tocHeader: '<%= I18n.t('public_portal.toc_header') %>'
|
tocHeader: '<%= I18n.t('public_portal.toc_header') %>'
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
<% if @portal.channel_web_widget.present? %>
|
||||||
|
<%= @portal.channel_web_widget.web_widget_script.html_safe %>
|
||||||
|
<% end %>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# 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
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "pg_stat_statements"
|
enable_extension "pg_stat_statements"
|
||||||
enable_extension "pg_trgm"
|
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.datetime "updated_at", null: false
|
||||||
t.jsonb "config", default: {"allowed_locales"=>["en"]}
|
t.jsonb "config", default: {"allowed_locales"=>["en"]}
|
||||||
t.boolean "archived", default: false
|
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 ["custom_domain"], name: "index_portals_on_custom_domain", unique: true
|
||||||
t.index ["slug"], name: "index_portals_on_slug", unique: true
|
t.index ["slug"], name: "index_portals_on_slug", unique: true
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user