feat: Create modal to merge two contacts (#2457)

This commit is contained in:
Nithin David Thomas
2021-10-13 18:35:13 +05:30
committed by GitHub
parent 6c3e2a0bd3
commit b33701a666
16 changed files with 437 additions and 110 deletions

View File

@@ -91,9 +91,9 @@ export default {
.close-button {
position: absolute;
right: var(--space-normal);
top: var(--space-slab);
top: 3.6rem;
font-size: var(--font-size-big);
color: var(--color-heading);
color: var(--s-500);
.close-icon {
margin-right: var(--space-smaller);

View File

@@ -222,8 +222,9 @@ export default {
return this.additionalAttributes.initiated_at;
},
browserName() {
return `${this.browser.browser_name || ''} ${this.browser
.browser_version || ''}`;
return `${this.browser.browser_name || ''} ${
this.browser.browser_version || ''
}`;
},
contactAdditionalAttributes() {
return this.contact.additional_attributes || {};
@@ -247,10 +248,8 @@ export default {
return `${cityAndCountry} ${countryFlag}`;
},
platformName() {
const {
platform_name: platformName,
platform_version: platformVersion,
} = this.browser;
const { platform_name: platformName, platform_version: platformVersion } =
this.browser;
return `${platformName || ''} ${platformVersion || ''}`;
},
channelType() {
@@ -421,10 +420,11 @@ export default {
.close-button {
position: absolute;
right: $space-normal;
top: $space-slab;
right: $space-two;
top: $space-slab + $space-two;
font-size: $font-size-default;
color: $color-heading;
z-index: 9999;
}
.conversation--labels {

View File

@@ -48,59 +48,49 @@
/>
</div>
</div>
<div v-if="!showNewMessage">
<div>
<woot-button
class="edit-contact"
variant="link"
size="small"
@click="toggleEditModal"
>
{{ $t('EDIT_CONTACT.BUTTON_LABEL') }}
</woot-button>
</div>
<div v-if="isAdmin">
<woot-button
class="delete-contact"
variant="link"
size="small"
color-scheme="alert"
@click="toggleDeleteModal"
:disabled="uiFlags.isDeleting"
>
{{ $t('DELETE_CONTACT.BUTTON_LABEL') }}
</woot-button>
</div>
</div>
<div v-else>
<div class="contact-actions">
<woot-button
v-tooltip="$t('CONTACT_PANEL.NEW_MESSAGE')"
class="new-message"
icon="ion-chatboxes"
size="small expanded"
@click="toggleConversationModal"
/>
<woot-button
v-tooltip="$t('EDIT_CONTACT.BUTTON_LABEL')"
class="edit-contact"
icon="ion-edit"
variant="smooth"
size="small expanded"
@click="toggleEditModal"
/>
<woot-button
v-if="isAdmin"
v-tooltip="$t('DELETE_CONTACT.BUTTON_LABEL')"
class="delete-contact"
icon="ion-trash-a"
variant="hollow"
size="small expanded"
color-scheme="alert"
@click="toggleDeleteModal"
:disabled="uiFlags.isDeleting"
/>
</div>
<div class="contact-actions">
<woot-button
v-if="showNewMessage"
v-tooltip="$t('CONTACT_PANEL.NEW_MESSAGE')"
title="$t('CONTACT_PANEL.NEW_MESSAGE')"
class="new-message"
icon="ion-chatboxes"
size="small expanded"
@click="toggleConversationModal"
/>
<woot-button
v-tooltip="$t('EDIT_CONTACT.BUTTON_LABEL')"
title="$t('EDIT_CONTACT.BUTTON_LABEL')"
class="edit-contact"
icon="ion-edit"
variant="smooth"
size="small expanded"
@click="toggleEditModal"
/>
<woot-button
v-if="isAdmin"
v-tooltip="$t('CONTACT_PANEL.MERGE_CONTACT')"
title="$t('CONTACT_PANEL.MERGE_CONTACT')"
class="merge-contact"
icon="ion-merge"
variant="smooth"
size="small expanded"
color-scheme="secondary"
:disabled="uiFlags.isMerging"
@click="openMergeModal"
/>
<woot-button
v-if="isAdmin"
v-tooltip="$t('DELETE_CONTACT.BUTTON_LABEL')"
title="$t('DELETE_CONTACT.BUTTON_LABEL')"
class="delete-contact"
icon="ion-trash-a"
variant="smooth"
size="small expanded"
color-scheme="alert"
:disabled="uiFlags.isDeleting"
@click="toggleDeleteModal"
/>
</div>
<edit-contact
v-if="showEditModal"
@@ -114,6 +104,12 @@
:contact="contact"
@cancel="toggleConversationModal"
/>
<contact-merge-modal
v-if="showMergeModal"
:primary-contact="contact"
:show="showMergeModal"
@close="toggleMergeModal"
/>
</div>
<woot-confirm-delete-modal
v-if="showDeleteModal"
@@ -130,11 +126,14 @@
</div>
</template>
<script>
import { mixin as clickaway } from 'vue-clickaway';
import ContactInfoRow from './ContactInfoRow';
import Thumbnail from 'dashboard/components/widgets/Thumbnail.vue';
import SocialIcons from './SocialIcons';
import EditContact from './EditContact';
import NewConversation from './NewConversation';
import ContactMergeModal from 'dashboard/modules/contact/ContactMergeModal';
import alertMixin from 'shared/mixins/alertMixin';
import adminMixin from '../../../../mixins/isAdmin';
import { mapGetters } from 'vuex';
@@ -146,8 +145,9 @@ export default {
Thumbnail,
SocialIcons,
NewConversation,
ContactMergeModal,
},
mixins: [alertMixin, adminMixin],
mixins: [alertMixin, adminMixin, clickaway],
props: {
contact: {
type: Object,
@@ -166,6 +166,7 @@ export default {
return {
showEditModal: false,
showConversationModal: false,
showMergeModal: false,
showDeleteModal: false,
};
},
@@ -201,6 +202,9 @@ export default {
},
},
methods: {
toggleMergeModal() {
this.showMergeModal = !this.showMergeModal;
},
toggleEditModal() {
this.showEditModal = !this.showEditModal;
},
@@ -232,24 +236,26 @@ export default {
);
}
},
openMergeModal() {
this.toggleMergeModal();
},
},
};
</script>
<style scoped lang="scss">
@import '~dashboard/assets/scss/variables';
@import '~dashboard/assets/scss/mixins';
.contact--profile {
position: relative;
align-items: flex-start;
padding: var(--space-normal);
.user-thumbnail-box {
margin-right: $space-normal;
margin-right: var(--space-normal);
}
}
.contact--details {
margin-top: $space-small;
margin-top: var(--space-small);
width: 100%;
}
@@ -270,31 +276,25 @@ export default {
margin-top: var(--space-small);
}
.edit-contact {
margin-left: var(--space-medium);
}
.delete-contact {
margin-left: var(--space-medium);
}
.contact-actions {
display: flex;
align-items: center;
width: 100%;
.new-message {
font-size: var(--font-size-medium);
}
.edit-contact {
margin-left: var(--space-small);
font-size: var(--font-size-medium);
}
.new-message,
.edit-contact,
.merge-contact,
.delete-contact {
margin-left: var(--space-small);
font-size: var(--font-size-medium);
margin-right: var(--space-small);
}
}
.merege-summary--card {
padding: var(--space-normal);
}
.button--contact-menu {
position: absolute;
right: var(--space-normal);
top: 0;
}
</style>