Instantly share code, notes, and snippets.
Created
March 22, 2021 01:07
-
Save arturmkrtchyan/79388d30f8bafb53ddaf23db87db5c21 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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