diff --git a/app/controllers/api/v1/accounts/contacts_controller.rb b/app/controllers/api/v1/accounts/contacts_controller.rb index 580ba799d..87b3898f1 100644 --- a/app/controllers/api/v1/accounts/contacts_controller.rb +++ b/app/controllers/api/v1/accounts/contacts_controller.rb @@ -20,6 +20,11 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController def update @contact.update!(contact_update_params) + rescue ActiveRecord::RecordInvalid => e + render json: { + message: e.record.errors.full_messages.join(', '), + contact: Contact.find_by(email: contact_params[:email]) + }, status: :unprocessable_entity end def search @@ -43,7 +48,7 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController end def contact_params - params.require(:contact).permit(:name, :email, :phone_number, custom_attributes: {}) + params.require(:contact).permit(:name, :email, :phone_number, additional_attributes: {}, custom_attributes: {}) end def contact_custom_attributes diff --git a/app/javascript/dashboard/assets/scss/_foundation-custom.scss b/app/javascript/dashboard/assets/scss/_foundation-custom.scss index 900dd4d9d..209874312 100644 --- a/app/javascript/dashboard/assets/scss/_foundation-custom.scss +++ b/app/javascript/dashboard/assets/scss/_foundation-custom.scss @@ -37,3 +37,9 @@ code { padding: $space-two; } } + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} diff --git a/app/javascript/dashboard/assets/scss/_foundation-settings.scss b/app/javascript/dashboard/assets/scss/_foundation-settings.scss index 9d3650f88..50957b385 100644 --- a/app/javascript/dashboard/assets/scss/_foundation-settings.scss +++ b/app/javascript/dashboard/assets/scss/_foundation-settings.scss @@ -347,7 +347,7 @@ $helptext-color: $header-color; $helptext-font-size: $font-size-small; $helptext-font-style: italic; $input-prefix-color: $header-color; -$input-prefix-background: $light-gray; +$input-prefix-background: var(--b-100); $input-prefix-border: 1px solid $color-border; $input-prefix-padding: 1rem; $form-label-color: $header-color; diff --git a/app/javascript/dashboard/assets/scss/_helper-classes.scss b/app/javascript/dashboard/assets/scss/_helper-classes.scss index ffd9e734e..cbcc31e42 100644 --- a/app/javascript/dashboard/assets/scss/_helper-classes.scss +++ b/app/javascript/dashboard/assets/scss/_helper-classes.scss @@ -55,5 +55,17 @@ input, textarea, select { - border-radius: 4px !important; + border-radius: var(--space-smaller) !important; +} + +.input-group { + .input-group-label:first-child { + border-bottom-left-radius: var(--space-smaller); + border-top-left-radius: var(--space-smaller); + } + + .input-group-field { + border-bottom-left-radius: 0 !important; + border-top-left-radius: 0 !important; + } } diff --git a/app/javascript/dashboard/components/buttons/Button.vue b/app/javascript/dashboard/components/buttons/Button.vue new file mode 100644 index 000000000..ecd43f39f --- /dev/null +++ b/app/javascript/dashboard/components/buttons/Button.vue @@ -0,0 +1,43 @@ + + + + + + + + + diff --git a/app/javascript/dashboard/components/widgets/conversation/CannedResponse.vue b/app/javascript/dashboard/components/widgets/conversation/CannedResponse.vue index 33fbadf67..e80adf24d 100644 --- a/app/javascript/dashboard/components/widgets/conversation/CannedResponse.vue +++ b/app/javascript/dashboard/components/widgets/conversation/CannedResponse.vue @@ -87,11 +87,3 @@ export default { }, }; - - diff --git a/app/javascript/dashboard/components/widgets/conversation/ConversationHeader.vue b/app/javascript/dashboard/components/widgets/conversation/ConversationHeader.vue index c11612376..65567ae26 100644 --- a/app/javascript/dashboard/components/widgets/conversation/ConversationHeader.vue +++ b/app/javascript/dashboard/components/widgets/conversation/ConversationHeader.vue @@ -45,7 +45,6 @@ {{ $t('AGENT_MGMT.SEARCH.NO_RESULTS') }} - diff --git a/app/javascript/dashboard/components/widgets/conversation/MoreActions.vue b/app/javascript/dashboard/components/widgets/conversation/MoreActions.vue index b91226d6f..a5f9860ce 100644 --- a/app/javascript/dashboard/components/widgets/conversation/MoreActions.vue +++ b/app/javascript/dashboard/components/widgets/conversation/MoreActions.vue @@ -5,7 +5,7 @@ :status="currentChat.status" /> - - - - - - - - - {{ contact.name }} - - - {{ contact.email }} - - - {{ contact.phone_number }} - - - - {{ `@${contact.additional_attributes.screen_name}` }} - - - {{ contact.location }} - - - - - {{ contact.bio }} - - - {{ contact.additional_attributes.description }} - - + + + + import { mapGetters } from 'vuex'; -import Thumbnail from 'dashboard/components/widgets/Thumbnail.vue'; import ContactConversations from './ContactConversations.vue'; import ContactDetailsItem from './ContactDetailsItem.vue'; +import ContactInfo from './contact/ContactInfo'; import ConversationLabels from './labels/LabelBox.vue'; import ContactCustomAttributes from './ContactCustomAttributes'; @@ -110,8 +56,8 @@ export default { ContactCustomAttributes, ContactConversations, ContactDetailsItem, + ContactInfo, ConversationLabels, - Thumbnail, }, props: { conversationId: { @@ -210,7 +156,11 @@ export default { overflow-y: auto; overflow: auto; position: relative; - padding: $space-normal; + padding: $space-one; + + i { + margin-right: $space-smaller; + } } .close-button { @@ -221,57 +171,9 @@ export default { color: $color-heading; } -.contact--profile { - align-items: center; - padding: $space-medium 0 $space-one; - - .user-thumbnail-box { - margin-right: $space-normal; - } -} - -.contact--details { - margin-top: $space-small; - - p { - margin-bottom: 0; - } -} - -.contact--info { - align-items: center; - display: flex; - flex-direction: column; - text-align: center; -} - -.contact--name { - @include text-ellipsis; - text-transform: capitalize; - - font-weight: $font-weight-bold; - font-size: $font-size-default; -} - -.contact--email { - @include text-ellipsis; - - color: $color-gray; - display: block; - line-height: $space-medium; - - &:hover { - color: $color-woot; - } -} - -.contact--bio { - margin-top: $space-normal; -} - .conversation--details { border-top: 1px solid $color-border-light; - padding: $space-large $space-normal; + padding: $space-normal; } .conversation--labels { diff --git a/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfo.vue b/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfo.vue new file mode 100644 index 000000000..90ff44543 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfo.vue @@ -0,0 +1,157 @@ + + + + + + + + {{ contact.name }} + + + {{ additionalAttibutes.description }} + + + + + + + + + + + {{ $t('EDIT_CONTACT.BUTTON_LABEL') }} + + + + + + + + diff --git a/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfoRow.vue b/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfoRow.vue new file mode 100644 index 000000000..7c219a5a9 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfoRow.vue @@ -0,0 +1,59 @@ + + + + + {{ value }} + {{ + $t('CONTACT_PANEL.NOT_AVAILABLE') + }} + + + + {{ value }} + {{ + $t('CONTACT_PANEL.NOT_AVAILABLE') + }} + + + + + diff --git a/app/javascript/dashboard/routes/dashboard/conversation/contact/EditContact.vue b/app/javascript/dashboard/routes/dashboard/conversation/contact/EditContact.vue new file mode 100644 index 000000000..f7e1d0ff6 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/conversation/contact/EditContact.vue @@ -0,0 +1,225 @@ + + + + + + + + + {{ $t('EDIT_CONTACT.FORM.NAME.LABEL') }} + + + + + {{ $t('EDIT_CONTACT.FORM.EMAIL_ADDRESS.LABEL') }} + + + + + + + {{ $t('EDIT_CONTACT.FORM.BIO.LABEL') }} + + + + + + + + + + + + Social Profiles + + + {{ socialProfile.prefixURL }} + + + + + + + + + + + + diff --git a/app/javascript/dashboard/routes/dashboard/conversation/contact/SocialIcons.vue b/app/javascript/dashboard/routes/dashboard/conversation/contact/SocialIcons.vue new file mode 100644 index 000000000..99c9ad83b --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/conversation/contact/SocialIcons.vue @@ -0,0 +1,56 @@ + + + + + + + + + + + diff --git a/app/javascript/dashboard/routes/dashboard/conversation/labels/LabelBox.vue b/app/javascript/dashboard/routes/dashboard/conversation/labels/LabelBox.vue index f637f6c26..eea46d6c4 100644 --- a/app/javascript/dashboard/routes/dashboard/conversation/labels/LabelBox.vue +++ b/app/javascript/dashboard/routes/dashboard/conversation/labels/LabelBox.vue @@ -35,7 +35,6 @@