feat: Adds ability to edit out webhook URL of API Channel (#3013)
This commit is contained in:
parent
15aaa8883c
commit
1761bec615
4 changed files with 54 additions and 3 deletions
|
@ -56,6 +56,11 @@
|
||||||
"CHANNEL_AVATAR": {
|
"CHANNEL_AVATAR": {
|
||||||
"LABEL": "Channel Avatar"
|
"LABEL": "Channel Avatar"
|
||||||
},
|
},
|
||||||
|
"CHANNEL_WEBHOOK_URL": {
|
||||||
|
"LABEL": "Webhook URL",
|
||||||
|
"PLACEHOLDER": "Enter your Webhook URL",
|
||||||
|
"ERROR": "Please enter a valid URL"
|
||||||
|
},
|
||||||
"CHANNEL_DOMAIN": {
|
"CHANNEL_DOMAIN": {
|
||||||
"LABEL": "Website Domain",
|
"LABEL": "Website Domain",
|
||||||
"PLACEHOLDER": "Enter your website domain (eg: acme.com)"
|
"PLACEHOLDER": "Enter your website domain (eg: acme.com)"
|
||||||
|
@ -127,11 +132,11 @@
|
||||||
"ERROR_MESSAGE": "We were not able to authenticate Twilio credentials, please try again"
|
"ERROR_MESSAGE": "We were not able to authenticate Twilio credentials, please try again"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"SMS": {
|
"SMS": {
|
||||||
"TITLE": "SMS Channel via Twilio",
|
"TITLE": "SMS Channel via Twilio",
|
||||||
"DESC": "Start supporting your customers via SMS with Twilio integration."
|
"DESC": "Start supporting your customers via SMS with Twilio integration."
|
||||||
},
|
},
|
||||||
"WHATSAPP": {
|
"WHATSAPP": {
|
||||||
"TITLE": "Whatsapp Channel via Twilio",
|
"TITLE": "Whatsapp Channel via Twilio",
|
||||||
"DESC": "Start supporting your customers via Whatsapp with Twilio integration."
|
"DESC": "Start supporting your customers via Whatsapp with Twilio integration."
|
||||||
},
|
},
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
<woot-avatar-uploader
|
<woot-avatar-uploader
|
||||||
:label="$t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_AVATAR.LABEL')"
|
:label="$t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_AVATAR.LABEL')"
|
||||||
:src="avatarUrl"
|
:src="avatarUrl"
|
||||||
deleteAvatar
|
delete-avatar
|
||||||
@change="handleImageUpload"
|
@change="handleImageUpload"
|
||||||
@onAvatarDelete="handleAvatarDelete"
|
@onAvatarDelete="handleAvatarDelete"
|
||||||
/>
|
/>
|
||||||
|
@ -32,6 +32,24 @@
|
||||||
:label="inboxNameLabel"
|
:label="inboxNameLabel"
|
||||||
:placeholder="inboxNamePlaceHolder"
|
:placeholder="inboxNamePlaceHolder"
|
||||||
/>
|
/>
|
||||||
|
<woot-input
|
||||||
|
v-if="isAPIInbox"
|
||||||
|
v-model.trim="webhookUrl"
|
||||||
|
class="medium-9 columns"
|
||||||
|
:class="{ error: $v.webhookUrl.$error }"
|
||||||
|
:label="
|
||||||
|
$t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_WEBHOOK_URL.LABEL')
|
||||||
|
"
|
||||||
|
:placeholder="
|
||||||
|
$t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_WEBHOOK_URL.PLACEHOLDER')
|
||||||
|
"
|
||||||
|
:error="
|
||||||
|
$v.webhookUrl.$error
|
||||||
|
? $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_WEBHOOK_URL.ERROR')
|
||||||
|
: ''
|
||||||
|
"
|
||||||
|
@blur="$v.webhookUrl.$touch"
|
||||||
|
/>
|
||||||
<woot-input
|
<woot-input
|
||||||
v-if="isAWebWidgetInbox"
|
v-if="isAWebWidgetInbox"
|
||||||
v-model.trim="channelWebsiteUrl"
|
v-model.trim="channelWebsiteUrl"
|
||||||
|
@ -212,6 +230,16 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<woot-submit-button
|
<woot-submit-button
|
||||||
|
v-if="isAPIInbox"
|
||||||
|
type="submit"
|
||||||
|
:disabled="$v.webhookUrl.$invalid"
|
||||||
|
:button-text="$t('INBOX_MGMT.SETTINGS_POPUP.UPDATE')"
|
||||||
|
:loading="uiFlags.isUpdatingInbox"
|
||||||
|
@click="updateInbox"
|
||||||
|
/>
|
||||||
|
<woot-submit-button
|
||||||
|
v-else
|
||||||
|
type="submit"
|
||||||
:button-text="$t('INBOX_MGMT.SETTINGS_POPUP.UPDATE')"
|
:button-text="$t('INBOX_MGMT.SETTINGS_POPUP.UPDATE')"
|
||||||
:loading="uiFlags.isUpdatingInbox"
|
:loading="uiFlags.isUpdatingInbox"
|
||||||
@click="updateInbox"
|
@click="updateInbox"
|
||||||
|
@ -324,6 +352,8 @@
|
||||||
<script>
|
<script>
|
||||||
import { mapGetters } from 'vuex';
|
import { mapGetters } from 'vuex';
|
||||||
import { createMessengerScript } from 'dashboard/helper/scriptGenerator';
|
import { createMessengerScript } from 'dashboard/helper/scriptGenerator';
|
||||||
|
import { required } from 'vuelidate/lib/validators';
|
||||||
|
import { shouldBeUrl } from 'shared/helpers/Validators';
|
||||||
import configMixin from 'shared/mixins/configMixin';
|
import configMixin from 'shared/mixins/configMixin';
|
||||||
import alertMixin from 'shared/mixins/alertMixin';
|
import alertMixin from 'shared/mixins/alertMixin';
|
||||||
import SettingIntroBanner from 'dashboard/components/widgets/SettingIntroBanner';
|
import SettingIntroBanner from 'dashboard/components/widgets/SettingIntroBanner';
|
||||||
|
@ -357,6 +387,7 @@ export default {
|
||||||
csatSurveyEnabled: false,
|
csatSurveyEnabled: false,
|
||||||
selectedInboxName: '',
|
selectedInboxName: '',
|
||||||
channelWebsiteUrl: '',
|
channelWebsiteUrl: '',
|
||||||
|
webhookUrl: '',
|
||||||
channelWelcomeTitle: '',
|
channelWelcomeTitle: '',
|
||||||
channelWelcomeTagline: '',
|
channelWelcomeTagline: '',
|
||||||
selectedFeatureFlags: [],
|
selectedFeatureFlags: [],
|
||||||
|
@ -503,6 +534,7 @@ export default {
|
||||||
this.fetchAttachedAgents();
|
this.fetchAttachedAgents();
|
||||||
this.avatarUrl = this.inbox.avatar_url;
|
this.avatarUrl = this.inbox.avatar_url;
|
||||||
this.selectedInboxName = this.inbox.name;
|
this.selectedInboxName = this.inbox.name;
|
||||||
|
this.webhookUrl = this.inbox.webhook_url;
|
||||||
this.greetingEnabled = this.inbox.greeting_enabled || false;
|
this.greetingEnabled = this.inbox.greeting_enabled || false;
|
||||||
this.greetingMessage = this.inbox.greeting_message || '';
|
this.greetingMessage = this.inbox.greeting_message || '';
|
||||||
this.autoAssignment = this.inbox.enable_auto_assignment;
|
this.autoAssignment = this.inbox.enable_auto_assignment;
|
||||||
|
@ -555,6 +587,7 @@ export default {
|
||||||
channel: {
|
channel: {
|
||||||
widget_color: this.inbox.widget_color,
|
widget_color: this.inbox.widget_color,
|
||||||
website_url: this.channelWebsiteUrl,
|
website_url: this.channelWebsiteUrl,
|
||||||
|
webhook_url: this.webhookUrl,
|
||||||
welcome_title: this.channelWelcomeTitle || '',
|
welcome_title: this.channelWelcomeTitle || '',
|
||||||
welcome_tagline: this.channelWelcomeTagline || '',
|
welcome_tagline: this.channelWelcomeTagline || '',
|
||||||
selectedFeatureFlags: this.selectedFeatureFlags,
|
selectedFeatureFlags: this.selectedFeatureFlags,
|
||||||
|
@ -593,6 +626,10 @@ export default {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
validations: {
|
validations: {
|
||||||
|
webhookUrl: {
|
||||||
|
required,
|
||||||
|
shouldBeUrl,
|
||||||
|
},
|
||||||
selectedAgents: {
|
selectedAgents: {
|
||||||
isEmpty() {
|
isEmpty() {
|
||||||
return !!this.selectedAgents.length;
|
return !!this.selectedAgents.length;
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
export const isPhoneE164 = value => !!value.match(/^\+[1-9]\d{1,14}$/);
|
export const isPhoneE164 = value => !!value.match(/^\+[1-9]\d{1,14}$/);
|
||||||
export const isPhoneE164OrEmpty = value => isPhoneE164(value) || value === '';
|
export const isPhoneE164OrEmpty = value => isPhoneE164(value) || value === '';
|
||||||
|
export const shouldBeUrl = (value = '') =>
|
||||||
|
value ? value.startsWith('http') : true;
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
import { shouldBeUrl } from '../Validators';
|
||||||
|
|
||||||
|
describe('#shouldBeUrl', () => {
|
||||||
|
it('should return correct url', () => {
|
||||||
|
expect(shouldBeUrl('http')).toEqual(true);
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in a new issue