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
|
||||||
|
|||||||
@@ -15,9 +15,11 @@
|
|||||||
# 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_channel_web_widget_id (channel_web_widget_id)
|
||||||
# index_portals_on_custom_domain (custom_domain) UNIQUE
|
# index_portals_on_custom_domain (custom_domain) UNIQUE
|
||||||
# index_portals_on_slug (slug) UNIQUE
|
# index_portals_on_slug (slug) UNIQUE
|
||||||
#
|
#
|
||||||
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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