Add request other connector to hubspot

pull/15306/head
csubira 5 years ago
parent c198a40dd8
commit 855a3d74ab

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
<path d="M8.071 1v14.142m7.071-7.07H1" stroke="#0084FF" stroke-width="1.667" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 227 B

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12">
<g fill="#FFF" fill-rule="evenodd">
<path d="M6 1.2A4.806 4.806 0 001.2 6c0 2.647 2.153 4.8 4.8 4.8s4.8-2.153 4.8-4.8S8.647 1.2 6 1.2M6 12c-3.308 0-6-2.692-6-6s2.692-6 6-6 6 2.692 6 6-2.692 6-6 6"/>
<path d="M5.496 8.956L3.069 6.531 4.13 5.47l1.174 1.174 2.486-3.48 1.22.872z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 363 B

@ -18,6 +18,7 @@ $w: $sLayout-width;
display: flex;
align-items: center;
justify-content: flex-start;
height: 86px;
}
&__item {
@ -176,3 +177,136 @@ $w: $sLayout-width;
margin-bottom: 32px;
}
}
.ImportOther {
margin-right: 16px;
}
.ImportOther__step1,
.ImportOther__step2,
.ImportOther__step3,
.ImportOther__step4 {
display: none;
&.is-active {
display: flex;
position: relative;
align-items: center;
justify-content: center;
border-radius: 4px;
background-color: $cStructure-mainBkg;
color: $cTypography-helpSecondary;
font-family: 'Open Sans', sans-serif;
font-size: 12px;
line-height: 16px;
}
}
.ImportOther__step2,
.ImportOther__step3,
.ImportOther__step4 {
flex-direction: column;
width: 192px;
height: 104px;
border: 1px solid $cHighlight-main;
}
.ImportOther__step1 {
flex-direction: row;
width: 170px;
height: 84px;
border: 1px solid $cStructure-mainLine;
&:hover {
border-color: $cHighlight-main;
}
.icon {
width: 16px;
height: 16px;
margin-right: 8px;
background-image: url($assetsDir + '/images/layout/connectors/add.svg');
background-repeat: no-repeat;
background-position: left center;
}
}
.ImportOther__step2 {
.ImportOther__input {
position: relative;
z-index: 2;
width: 90px;
height: 32px;
margin-top: 12px;
padding: 0 48px 0 12px;
border: 1px solid #CCC;
border-radius: 4px;
outline: none;
color: #666;
&:focus {
border-color: #999;
}
}
.ImportOther__inputSubmit {
position: absolute;
z-index: 2;
top: 50%;
right: 32px;
height: 54px;
margin-top: -14px;
padding: 0;
opacity: 1;
background: none;
&.is-disabled {
opacity: 0.4;
cursor: default;
}
}
}
.ImportOther__step3 {
.ImportOther__spinner {
margin-top: 12px;
}
}
.ImportOther__step4 {
.ImportOther_requestText {
margin: 0 20px;
}
.ImportOther__requestButton {
box-sizing: content-box;
margin-top: 12px;
}
.ImportOther__requestButton {
width: 60px;
&Text {
display: block;
margin-right: -20px;
margin-left: -8px;
background-image: url($assetsDir + '/images/layout/connectors/request-success.svg');
background-repeat: no-repeat;
background-position: left center;
background-size: 12px;
}
}
&.hasError {
border-color: $cHighlight-caution;
.ImportOther__requestButton {
width: auto;
&Text {
margin: auto;
background: none;
}
}
}
}

@ -0,0 +1,66 @@
var $ = require('jquery');
/* Util to request connector via hubspot */
module.exports = {
requestConnectorHubspot: function (data, callback, error) {
/* Using V3 hubspot API
https://api.hsforms.com/submissions/v3/integration/submit/:portalId/:formGuid */
var hubspot_id = '474999';
var form_id = '1644a76c-4876-45ae-aa85-2420cd3fb3ff';
var url = `https://api.hsforms.com/submissions/v3/integration/submit/${hubspot_id}/${form_id}`;
return $.ajax({
type: 'POST',
url: url,
data: JSON.stringify(data),
dataType: 'json',
contentType: 'application/json',
success: callback,
error: error
});
},
getFormData: function (userModel, connectorName, requestType) {
return {
'fields': [
{
'name': 'email',
'value': userModel.get('email')
},
{
'name': 'firstname',
'value': userModel.get('name') || 'no_firstname'
},
{
'name': 'lastname',
'value': userModel.get('last_name') || 'no_last_name'
},
{
'name': 'jobtitle',
'value': userModel.get('job_role') || 'no_jobtitle'
},
{
'name': 'company',
'value': userModel.get('company') || 'no_company'
},
{
'name': 'phone',
'value': userModel.get('phone') || 'no_phone'
},
{
'name': 'connector_request_type',
'value': requestType || 'request'
},
{
'name': 'connector_request_name',
'value': connectorName
}
],
'context': {
'pageUri': window.location.href,
'pageName': window.location.href.includes('builder') ? 'Layer | CARTO' : document.title
}
};
}
};

@ -0,0 +1,71 @@
var CoreView = require('backbone/core-view');
var checkAndBuildOpts = require('builder/helpers/required-opts');
var template = require('./import-other-button.tpl');
var HubspotRequest = require('../hubspot-request');
var REQUIRED_OPTS = [
'userModel'
];
/**
* Import button to request connector
*/
module.exports = CoreView.extend({
className: 'ImportOther',
tagName: 'button',
events: {
'click .js-request': '_onRequest',
'keyup .js-input': '_onKeyup',
'click .js-submit': '_onSubmit',
'click .js-ok': '_onOk'
},
initialize: function (opts) {
checkAndBuildOpts(opts, REQUIRED_OPTS, this);
this._hasError = false;
},
render: function () {
this.$el.html(template({
hasError: this._hasError
}));
return this;
},
_onRequest: function () {
this._goToStep(2);
},
_onKeyup: function () {
var hasValue = this.$('.js-input').val();
this.$('.js-submit').toggleClass('is-disabled', !hasValue);
},
_onOk: function () {
this._goToStep(1);
},
_goToStep (step) {
this.$('.js-step').removeClass('is-active');
this.$(`.js-step${step}`).addClass('is-active');
},
_onSubmit: function () {
this._goToStep(3);
var inputValue = this.$('.js-input').val();
var self = this;
var data = HubspotRequest.getFormData(this._userModel, inputValue);
HubspotRequest.requestConnectorHubspot(data,
function () {
self._hasError = false;
self._goToStep(4);
},
function () {
self._hasError = true;
});
}
});

@ -0,0 +1,36 @@
<ul>
<li class="ImportOther__step1 js-step js-step1 js-request is-active">
<i class='icon'></i>
<span><%- _t('components.modals.add-layer.imports.other.request') %></span>
</li>
<li class="ImportOther__step2 js-step js-step2">
<span><%- _t('components.modals.add-layer.imports.other.type') %></span>
<input type="text" class="ImportOther__input js-input" required value=""/>
<button type="submit" class="ImportOther__inputSubmit js-submit is-disabled CDB-Text CDB-Size-small u-actionTextColor u-upperCase">
<span><%- _t('components.modals.add-layer.imports.other.submit') %></span>
</button>
<div class="ImportOther__inputError"></div>
</li>
<li class="ImportOther__step3 js-step js-step3">
<span><%- _t('components.modals.add-layer.imports.other.sending') %></span>
<div class="ImportOther__spinner Spinner"></div>
</div>
<li class="ImportOther__step4 js-step js-step4 <%- hasError ? 'hasError' : '' %>">
<span class="ImportOther_requestText">
<% if (hasError) { %>
<%- _t('components.modals.add-layer.imports.other.success') %>
<% } else { %>
<%- _t('components.modals.add-layer.imports.other.error') %>
<% } %>
</span>
<button class="CDB-Button CDB-Button--primary ImportOther__requestButton js-ok">
<span class="CDB-Button-Text CDB-Text is-semibold CDB-Size-small u-upperCase ImportOther__requestButtonText">
<% if (hasError) { %>
<%- _t('components.modals.add-layer.imports.other.try-again') %>
<% } else { %>
<%- _t('components.modals.add-layer.imports.other.ok') %>
<% } %>
</span>
</button>
</li>
</ul>

@ -5,6 +5,7 @@ var ViewFactory = require('builder/components/view-factory');
var checkAndBuildOpts = require('builder/helpers/required-opts');
var IMPORT_OPTIONS = require('../import-options');
var ImportButtonView = require('./import-button-view');
var ImportOtherButtonView = require('./import-other-button-view');
var CategoryTitleTemplate = require('./import-category-title.tpl');
var ImportsSelectorModel = require('./imports-selector-model');
@ -91,6 +92,17 @@ module.exports = CoreView.extend({
this._generateImportButtons(IMPORTER_TYPES.other);
},
_generateRequestOtherButton: function () {
var requestOtherButton = new ImportOtherButtonView(
_.extend(
{
userModel: this._userModel
}
)
);
return requestOtherButton;
},
_generateImportButtons: function (importOptionsType) {
var filteredOptions = this._filterImportsByType(importOptionsType);
var importButtonsElements = $('<div/>').addClass('ImportOptions__row');
@ -132,6 +144,11 @@ module.exports = CoreView.extend({
}
}, this);
if (importOptionsType === IMPORTER_TYPES.other) {
var importRequestOtherButton = this._generateRequestOtherButton();
importButtonsElements.append(importRequestOtherButton.render().el);
}
this.$el.append(importButtonsElements);
},

@ -2,6 +2,7 @@ var $ = require('jquery');
var CoreView = require('backbone/core-view');
var checkAndBuildOpts = require('builder/helpers/required-opts');
var SelectedImportHeaderView = require('./selected-import-header-view');
var HubspotRequest = require('../hubspot-request');
var REQUIRED_OPTS = [
'model',
@ -67,72 +68,20 @@ module.exports = CoreView.extend({
},
_onConnectClick: function () {
/* Using V3 hubspot API
https://api.hsforms.com/submissions/v3/integration/submit/:portalId/:formGuid */
var hubspot_id = '474999';
var form_id = '1644a76c-4876-45ae-aa85-2420cd3fb3ff';
var url = `https://api.hsforms.com/submissions/v3/integration/submit/${hubspot_id}/${form_id}`;
var data = this._getFormData(this._userModel);
this._model.set('state', 'loading');
var self = this;
$.ajax({
type: 'POST',
url: url,
data: JSON.stringify(data),
dataType: 'json',
contentType: 'application/json',
success: function () {
var connectorName = this._model.get('title');
var requestType = this._getRequestStatus();
var data = HubspotRequest.getFormData(this._userModel, connectorName, requestType);
var self = this;
HubspotRequest.requestConnectorHubspot(data,
function () {
self._model.set('state', 'success');
},
error: function (e) {
function () {
self._model.set('state', 'error');
}
});
},
_getFormData: function (user) {
return {
'fields': [
{
'name': 'email',
'value': user.get('email')
},
{
'name': 'firstname',
'value': user.get('name') || 'no_firstname'
},
{
'name': 'lastname',
'value': user.get('last_name') || 'no_last_name'
},
{
'name': 'jobtitle',
'value': user.get('job_role') || 'no_jobtitle'
},
{
'name': 'company',
'value': user.get('company') || 'no_company'
},
{
'name': 'phone',
'value': user.get('phone') || 'no_phone'
},
{
'name': 'connector_request_type',
'value': this._getRequestStatus()
},
{
'name': 'connector_request_name',
'value': this._model.get('title')
}
],
'context': {
'pageUri': window.location.href,
'pageName': window.location.href.includes('builder') ? 'Layer | CARTO' : document.title
}
};
});
},
_getRequestStatus: function () {

@ -59,7 +59,6 @@ module.exports = {
className: ImportBigQueryView,
enabled: function (config) {
console('bigquery')
debugger;
return !!config.get('oauth_bigquery');
},
fallback: 'common/views/create/listing/import_bigquery_fallback',

@ -1367,6 +1367,16 @@
"text": "Is your data somewhere else? Please, let us know!",
"button": "Request data source",
"url": "https://docs.google.com/forms/d/e/1FAIpQLSeSP4idHpOLdGlUkCCve1BfCsakZdmeAO_5yrHH4FSIJt5cdw/viewform"
},
"other": {
"request": "Request connector",
"type": "Type the one you look for",
"submit": "Submit",
"sending": "Sending request",
"success": "Request sent. We will contact you soon.",
"error": "Request not successful.",
"try-again": "Try again",
"ok": "Ok, got it!"
}
},
"datasets": {

Loading…
Cancel
Save