Skip to content

Instantly share code, notes, and snippets.

@arturmkrtchyan
Created March 22, 2021 01:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arturmkrtchyan/79388d30f8bafb53ddaf23db87db5c21 to your computer and use it in GitHub Desktop.
Save arturmkrtchyan/79388d30f8bafb53ddaf23db87db5c21 to your computer and use it in GitHub Desktop.
<script>
document.addEventListener("DOMContentLoaded", function () {
const targetBaseId = 'appO7onHaqjgFdVvW';
const targetTableName = 'Button%20test';
const applicationId = 'b79530b9-83c5-41ca-801e-507d2b8e8fc5';
/* Intercept into Airtable call */
window['records'] = [];
$.ajaxSetup({
dataFilter: function (data, type) {
if(type === 'json' && data) {
const jsonData = JSON.parse(data);
if(jsonData.records && jsonData.records.length > 0) {
window['records'] = window['records'].concat(jsonData.records);
}
console.log(window['records']);
}
return data;
}
});
setInterval(function () {
/* Add data into list item and register new click handler */
$('.js-list-item').each(function () {
const recordId = $(this).attr('data-recordid');
const dataPartnerId = $(this).attr('data-partnerid');
if(!dataPartnerId && window['records']) {
const record = window['records'].find(
function(r) {
return r.id == recordId;
}
);
if(record) {
console.log(record);
if(record['fields']['Partner ID']) {
const partnerId = record['fields']['Partner ID'];
const email = getUserEmail();
$(this).attr('data-partnerid', partnerId);
$(this).find('.js-list-item-button').unbind('click');
$(this).find('.js-list-item-button').click(function(event){
event.preventDefault();
event.stopPropagation();
sendToAirtable(partnerId, email, function(){}, function(){});
});
}
}
}
});
}, 100);
function sendToAirtable(partnerId, userEmail, successCallback, errorCallback) {
const payload = {
fields: {'Partner ID': partnerId, 'User E-Mail': userEmail},
typecast: true
};
const url = 'https://' + window.location.hostname + '/v1/integrations/airtable/'+applicationId+'/'+targetBaseId+'/'+targetTableName+'/records/new';
$.ajax({
url: url,
type: 'POST',
data: JSON.stringify(payload),
contentType: 'application/json; charset=utf-8',
success: function (data) {
console.log(data);
successCallback();
},
error: function (error) {
console.log(error);
errorCallback();
}
});
}
function getUserEmail() {
var token = getCookie('jwtToken');
if (token) {
var userData = parseJwt(token);
if (userData && userData.sub) {
return userData.sub.toLowerCase();
}
}
return '';
}
function getCookie(cookieName) {
var name = cookieName + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
function parseJwt(token) {
var base64Url = token.split('.')[1];
var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
var jsonPayload = decodeURIComponent(atob(base64).split('').map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
return JSON.parse(jsonPayload);
}
});
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment