diff --git a/.rubocop.yml b/.rubocop.yml index 329307015..1f6d1bd24 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -17,6 +17,9 @@ Metrics/BlockLength: - spec/**/* Style/ClassAndModuleChildren: EnforcedStyle: compact +RSpec/NestedGroups: + Enabled: true + Max: 4 AllCops: Exclude: - db/* diff --git a/app/controllers/api/v1/widget/inboxes_controller.rb b/app/controllers/api/v1/widget/inboxes_controller.rb index 2e0269db0..607a900b5 100644 --- a/app/controllers/api/v1/widget/inboxes_controller.rb +++ b/app/controllers/api/v1/widget/inboxes_controller.rb @@ -1,17 +1,22 @@ -class Api::V1::Widget::InboxesController < ApplicationController +class Api::V1::Widget::InboxesController < Api::BaseController + before_action :authorize_request + def create ActiveRecord::Base.transaction do channel = web_widgets.create!( website_name: permitted_params[:website_name], website_url: permitted_params[:website_url] ) - inbox = inboxes.create!(name: permitted_params[:website_name], channel: channel) - render json: inbox + @inbox = inboxes.create!(name: permitted_params[:website_name], channel: channel) end end private + def authorize_request + authorize ::Inbox + end + def inboxes current_account.inboxes end diff --git a/app/javascript/dashboard/assets/scss/widgets/_states.scss b/app/javascript/dashboard/assets/scss/widgets/_states.scss index 32637b71c..0ca0b5c76 100644 --- a/app/javascript/dashboard/assets/scss/widgets/_states.scss +++ b/app/javascript/dashboard/assets/scss/widgets/_states.scss @@ -2,10 +2,10 @@ padding: $space-jumbo $space-smaller; .message { - display: block; - width: 100%; - text-align: center; color: $color-gray; + display: block; + text-align: center; + width: 100%; } .spinner { @@ -31,9 +31,9 @@ } .message { - width: 50%; - margin: 0 auto; color: $color-gray; + margin: $space-normal auto; + width: 90%; } .button { diff --git a/app/javascript/dashboard/components/Code.vue b/app/javascript/dashboard/components/Code.vue new file mode 100644 index 000000000..17134ebdc --- /dev/null +++ b/app/javascript/dashboard/components/Code.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/app/javascript/dashboard/components/index.js b/app/javascript/dashboard/components/index.js index ab985f49d..d80ed3ec5 100644 --- a/app/javascript/dashboard/components/index.js +++ b/app/javascript/dashboard/components/index.js @@ -1,26 +1,28 @@ /* eslint no-plusplus: 0 */ /* eslint-env browser */ +import Bar from './widgets/chart/BarChart'; +import Code from './Code'; +import LoadingState from './widgets/LoadingState'; import Modal from './Modal'; +import ModalHeader from './ModalHeader'; +import ReportStatsCard from './widgets/ReportStatsCard'; import Spinner from './Spinner'; import SubmitButton from './buttons/FormSubmitButton'; import Tabs from './ui/Tabs/Tabs'; import TabsItem from './ui/Tabs/TabsItem'; -import LoadingState from './widgets/LoadingState'; -import ReportStatsCard from './widgets/ReportStatsCard'; -import Bar from './widgets/chart/BarChart'; -import ModalHeader from './ModalHeader'; const WootUIKit = { + Bar, + Code, + LoadingState, Modal, + ModalHeader, + ReportStatsCard, Spinner, SubmitButton, Tabs, TabsItem, - LoadingState, - ReportStatsCard, - Bar, - ModalHeader, install(Vue) { const keys = Object.keys(this); keys.pop(); // remove 'install' from keys diff --git a/app/javascript/dashboard/helper/scriptGenerator.js b/app/javascript/dashboard/helper/scriptGenerator.js new file mode 100644 index 000000000..bfb900718 --- /dev/null +++ b/app/javascript/dashboard/helper/scriptGenerator.js @@ -0,0 +1,42 @@ +export const createWebsiteWidgetScript = websiteToken => ` + +`; + +export const createMessengerScript = pageId => ` + +
+
+`; diff --git a/app/javascript/dashboard/i18n/en.js b/app/javascript/dashboard/i18n/en.js index df672f82a..ae7e2751b 100644 --- a/app/javascript/dashboard/i18n/en.js +++ b/app/javascript/dashboard/i18n/en.js @@ -6,6 +6,12 @@ export default { TRIAL_MESSAGE: 'days trial remaining.', TRAIL_BUTTON: 'Buy Now', }, + COMPONENTS: { + CODE: { + BUTTON_TEXT: 'Copy', + COPY_SUCCESSFUL: 'Code copied to clipboard successfully', + }, + }, CONFIRM_EMAIL: 'Verifying...', SETTINGS: { INBOXES: { diff --git a/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json index 7f862555e..8c3aaf0bb 100644 --- a/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json @@ -30,7 +30,7 @@ }, "AUTH": { "TITLE": "Channels", - "DESC": "Currently we support only Facebook Pages as a platform. We have more platforms like Twitter, Telegram and Line in the works, which will be out soon." + "DESC": "Currently we support website live chat widgets and Facebook Pages as platforms. We have more platforms like Twitter, Telegram and Line in the works, which will be out soon." }, "AGENTS": { "TITLE": "Agents", @@ -58,7 +58,8 @@ "FINISH": { "TITLE": "Your Inbox is ready!", "MESSAGE": "You can now engage with your customers through your new Channel. Happy supporting ", - "BUTTON_TEXT": "Take me there" + "BUTTON_TEXT": "Take me there", + "WEBSITE_SUCCESS": "You have successfully finished creating a website channel. Copy the code shown below and paste it on your website. Next time a customer use the live chat, the conversation will automatically appear on your inbox." }, "REAUTH": "Reauthorize", "VIEW": "View", @@ -71,7 +72,7 @@ "NO": "No, Keep " }, "API": { - "SUCCESS_MESSAGE": "Inbox delete successfully", + "SUCCESS_MESSAGE": "Inbox deleted successfully", "ERROR_MESSAGE": "Could not delete inbox. Please try again later." } }, diff --git a/app/javascript/dashboard/routes/dashboard/settings/inbox/AddAgents.vue b/app/javascript/dashboard/routes/dashboard/settings/inbox/AddAgents.vue index 55f1aaa74..6c3e71091 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/inbox/AddAgents.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/inbox/AddAgents.vue @@ -1,7 +1,8 @@