From caee9535f1f99168a19a88187c170e0b695179b6 Mon Sep 17 00:00:00 2001 From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Date: Fri, 1 Apr 2022 20:59:03 +0530 Subject: [PATCH] feat: Support Dark mode for the widget (#4137) Co-authored-by: Pranav Raj S --- app/controllers/widget_tests_controller.rb | 5 ++ .../dashboard/settings/agents/Index.vue | 4 +- app/javascript/packs/sdk.js | 9 +++- app/javascript/sdk/IFrameHelper.js | 1 + app/javascript/sdk/constants.js | 1 + app/javascript/sdk/settingsHelper.js | 5 +- app/javascript/shared/components/ChatCard.vue | 17 +++--- app/javascript/shared/components/ChatForm.vue | 21 ++++++-- .../shared/components/ChatOption.vue | 2 +- .../shared/components/ChatOptions.vue | 10 ++-- .../components/CustomerSatisfaction.vue | 28 +++++++--- .../shared/components/DateSeparator.vue | 9 +++- .../shared/components/ResizableTextArea.vue | 1 - .../components/specs/DateSeparator.spec.js | 53 +++++++++++++++---- .../__snapshots__/DateSeparator.spec.js.snap | 4 +- .../assets/scss/views/_conversation.scss | 3 -- .../widget/components/AgentMessage.vue | 12 +++-- .../widget/components/AgentMessageBubble.vue | 10 +++- .../widget/components/AgentTypingBubble.vue | 7 ++- .../widget/components/ChatHeader.vue | 28 +++++++--- .../widget/components/ChatHeaderExpanded.vue | 17 ++++-- .../widget/components/ChatInputWrap.vue | 25 ++++++--- .../widget/components/Form/Input.vue | 39 +++++++++----- .../widget/components/Form/TextArea.vue | 37 ++++++++----- .../widget/components/HeaderActions.vue | 20 +++++-- .../widget/components/PreChat/Form.vue | 6 ++- .../widget/components/TeamAvailability.vue | 12 +++-- .../widget/components/UnreadMessage.vue | 9 +++- .../components/layouts/ViewWithHeader.vue | 13 +++-- .../widget/components/template/Article.vue | 24 +++++++-- .../widget/components/template/EmailInput.vue | 17 +++++- app/javascript/widget/mixins/darkModeMixin.js | 15 ++++++ .../widget/mixins/specs/darkModeMixin.spec.js | 41 ++++++++++++++ .../widget/store/modules/appConfig.js | 12 ++++- app/views/widget_tests/index.html.erb | 1 + tailwind.config.js | 6 ++- 36 files changed, 411 insertions(+), 113 deletions(-) create mode 100644 app/javascript/widget/mixins/darkModeMixin.js create mode 100644 app/javascript/widget/mixins/specs/darkModeMixin.spec.js diff --git a/app/controllers/widget_tests_controller.rb b/app/controllers/widget_tests_controller.rb index fff47d907..6d6742cf4 100644 --- a/app/controllers/widget_tests_controller.rb +++ b/app/controllers/widget_tests_controller.rb @@ -3,6 +3,7 @@ class WidgetTestsController < ActionController::Base before_action :ensure_widget_position before_action :ensure_widget_type before_action :ensure_widget_style + before_action :ensure_dark_mode def index render @@ -14,6 +15,10 @@ class WidgetTestsController < ActionController::Base @widget_style = params[:widget_style] || 'standard' end + def ensure_dark_mode + @dark_mode = params[:dark_mode] || 'light' + end + def ensure_widget_position @widget_position = params[:position] || 'left' end diff --git a/app/javascript/dashboard/routes/dashboard/settings/agents/Index.vue b/app/javascript/dashboard/routes/dashboard/settings/agents/Index.vue index c3a75b0f6..5714582d5 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/agents/Index.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/agents/Index.vue @@ -35,7 +35,9 @@ - {{ agent.name }} + + {{ agent.name }} + {{ agent.email }} diff --git a/app/javascript/packs/sdk.js b/app/javascript/packs/sdk.js index 76e1a2cd8..b77b682dd 100755 --- a/app/javascript/packs/sdk.js +++ b/app/javascript/packs/sdk.js @@ -1,6 +1,10 @@ import Cookies from 'js-cookie'; import { IFrameHelper } from '../sdk/IFrameHelper'; -import { getBubbleView } from '../sdk/settingsHelper'; +import { + getBubbleView, + getDarkMode, + getWidgetStyle, +} from '../sdk/settingsHelper'; import { computeHashForUserData, getUserCookieName, @@ -24,8 +28,9 @@ const runSDK = ({ baseUrl, websiteToken }) => { type: getBubbleView(chatwootSettings.type), launcherTitle: chatwootSettings.launcherTitle || '', showPopoutButton: chatwootSettings.showPopoutButton || false, - widgetStyle: chatwootSettings.widgetStyle || 'standard', + widgetStyle: getWidgetStyle(chatwootSettings.widgetStyle) || 'standard', resetTriggered: false, + darkMode: getDarkMode(chatwootSettings.darkMode), toggle(state) { IFrameHelper.events.toggleBubble(state); diff --git a/app/javascript/sdk/IFrameHelper.js b/app/javascript/sdk/IFrameHelper.js index df36d8e0d..3bc0973fe 100644 --- a/app/javascript/sdk/IFrameHelper.js +++ b/app/javascript/sdk/IFrameHelper.js @@ -145,6 +145,7 @@ export const IFrameHelper = { hideMessageBubble: window.$chatwoot.hideMessageBubble, showPopoutButton: window.$chatwoot.showPopoutButton, widgetStyle: window.$chatwoot.widgetStyle, + darkMode: window.$chatwoot.darkMode, }); IFrameHelper.onLoad({ widgetColor: message.config.channelConfig.widgetColor, diff --git a/app/javascript/sdk/constants.js b/app/javascript/sdk/constants.js index 52faf1540..7bf84d430 100644 --- a/app/javascript/sdk/constants.js +++ b/app/javascript/sdk/constants.js @@ -1,2 +1,3 @@ export const BUBBLE_DESIGN = ['standard', 'expanded_bubble']; export const WIDGET_DESIGN = ['standard', 'flat']; +export const DARK_MODE = ['light', 'auto']; diff --git a/app/javascript/sdk/settingsHelper.js b/app/javascript/sdk/settingsHelper.js index 4e256b53a..657db1fe0 100644 --- a/app/javascript/sdk/settingsHelper.js +++ b/app/javascript/sdk/settingsHelper.js @@ -1,4 +1,4 @@ -import { BUBBLE_DESIGN, WIDGET_DESIGN } from './constants'; +import { BUBBLE_DESIGN, DARK_MODE, WIDGET_DESIGN } from './constants'; export const getBubbleView = type => BUBBLE_DESIGN.includes(type) ? type : BUBBLE_DESIGN[0]; @@ -9,3 +9,6 @@ export const getWidgetStyle = style => WIDGET_DESIGN.includes(style) ? style : WIDGET_DESIGN[0]; export const isFlatWidgetStyle = style => style === 'flat'; + +export const getDarkMode = darkMode => + DARK_MODE.includes(darkMode) ? darkMode : DARK_MODE[0]; diff --git a/app/javascript/shared/components/ChatCard.vue b/app/javascript/shared/components/ChatCard.vue index 4e856bb6b..eb6e13364 100644 --- a/app/javascript/shared/components/ChatCard.vue +++ b/app/javascript/shared/components/ChatCard.vue @@ -1,11 +1,14 @@