# Introduction Avoid having multiple `isDefined` definition across our pacakges Also avoid importing `isDefined` from `twenty-ui` which exposes a huge barrel for a such little util function ## In a nutshell Removed own `isDefined.ts` definition from `twenty-ui` `twenty-front` and `twenty-server` to move it to `twenty-shared`. Updated imports for each packages, and added explicit dependencies to `twenty-shared` if not already in place Related PR https://github.com/twentyhq/twenty/pull/9941
45 lines
1.7 KiB
TypeScript
45 lines
1.7 KiB
TypeScript
import { isDefined } from 'twenty-shared';
|
|
import { insertButtonForCompany } from '~/contentScript/extractCompanyProfile';
|
|
import { insertButtonForPerson } from '~/contentScript/extractPersonProfile';
|
|
|
|
// Inject buttons into the DOM when SPA is reloaded on the resource url.
|
|
// e.g. reload the page when on https://www.linkedin.com/in/mabdullahabaid/
|
|
// await insertButtonForCompany();
|
|
|
|
const companyRoute = /^https?:\/\/(?:www\.)?linkedin\.com\/company(?:\/\S+)?/;
|
|
const personRoute = /^https?:\/\/(?:www\.)?linkedin\.com\/in(?:\/\S+)?/;
|
|
|
|
const executeScript = async () => {
|
|
const loc = window.location.href;
|
|
switch (true) {
|
|
case companyRoute.test(loc):
|
|
await insertButtonForCompany();
|
|
break;
|
|
case personRoute.test(loc):
|
|
await insertButtonForPerson();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
};
|
|
|
|
// The content script gets executed upon load, so the the content script is executed when a user visits https://www.linkedin.com/feed/.
|
|
// However, there would never be another reload in a single page application unless triggered manually.
|
|
// Therefore, if the user navigates to a person or a company page, we must manually re-execute the content script to create the "Add to Twenty" button.
|
|
// e.g. create "Add to Twenty" button when a user navigates to https://www.linkedin.com/in/mabdullahabaid/ from https://www.linkedin.com/feed/
|
|
chrome.runtime.onMessage.addListener(async (message, _, sendResponse) => {
|
|
if (message.action === 'executeContentScript') {
|
|
await executeScript();
|
|
}
|
|
|
|
sendResponse('Executing!');
|
|
});
|
|
|
|
chrome.storage.local.onChanged.addListener(async (store) => {
|
|
if (isDefined(store.accessToken)) {
|
|
if (isDefined(store.accessToken.newValue)) {
|
|
await executeScript();
|
|
}
|
|
}
|
|
});
|