brians resume | ,get a list of folder topics from bookmarks | load message history | Search

The updateInterestPage function updates a Google Sheets document's "Interests" page by retrieving bookmarks, filtering them by categories, and updating the document's rows with the formatted data. This function is exported as a module and, if a $ object is defined, it is executed asynchronously, with results sent to $.sendResult and errors sent to $.sendError.

Run example

npm run import -- "update insterests resume sheet"

update insterests resume sheet

var _ = require('lodash');
var importer = require('../Core');
var getBookmarksFromTakeout = importer.import("parse bookmarks file");
var updateRow = importer.import("update a row in google sheets")
var getDataSheet = importer.import("get google data sheet")

var doc = 'https://docs.google.com/spreadsheets/d/1dAtBQyn5vwStM6ITn7iCpp996Sus26k0bJtbGNlCX2g/edit#gid=257854275';

function updateInterestPage() {
    var links, interests;
    return getDataSheet(doc, 'Interests data')
        .then(rows => interests = rows.map(r => r.category).filter((r, i, arr) => arr.indexOf(r) === i))
        .then(() => getBookmarksFromTakeout())
        .then(l => links = [].concat(...Object.values(l))
              .filter(b => interests.includes(b.folder))
              .map(b => ({
                category: b.folder,
                date: b.time,
                title: b.title,
                link: b.url,
                skills: null,
                tools: null
            })))
        .then(() => importer.runAllPromises(links.map(l => resolve => {
            // category date title link skills tools
            return updateRow(doc, r => {
                return r.category == l.category && !r.link
                             || r.date == l.date && r.link == l.link}, l, 'Interests data')
                .then(resolve);
        })))
}

module.exports = updateInterestPage;

if(typeof $ != 'undefined') {
    $.async();
    
    updateInterestPage()
        .then(r => $.sendResult(r))
        .catch(e => $.sendError(e))
}

What the code could have been:

const { minBy } = require('lodash');

const importer = require('../Core');
const parseBookmarksFile = importer.import('parse bookmarks file');
const updateRowInGoogleSheets = importer.import('update a row in google sheets');
const getGoogleDataSheet = importer.import('get google data sheet');

const DOCUMENT_ID = 'https://docs.google.com/spreadsheets/d/1dAtBQyn5vwStM6ITn7iCpp996Sus26k0bJtbGNlCX2g/edit#gid=257854275';

/**
 * Updates the Interest page by fetching bookmarks, filtering interests, and updating the sheet.
 *
 * @returns {Promise} A promise resolving with the updated data.
 */
function updateInterestPage() {
    const interests = [];
    const links = [];

    /**
     * Fetches the interests data from the sheet.
     */
    return getGoogleDataSheet(DOCUMENT_ID, 'Interests data')
       .then((rows) => {
            const uniqueInterests = rows.map((r) => r.category).filter((r, i, arr) => arr.indexOf(r) === i);
            interests.push(...uniqueInterests);
            return getBookmarksFromTakeout();
        })
       .then((bookmarks) => {
            links.push(...Object.values(bookmarks)
               .filter((bookmark) => interests.includes(bookmark.folder))
               .map((bookmark) => ({
                    category: bookmark.folder,
                    date: bookmark.time,
                    title: bookmark.title,
                    link: bookmark.url,
                    skills: null,
                    tools: null,
                })));

            // Update rows in the sheet
            return Promise.all(links.map(updateRowInGoogleSheets(DOCUMENT_ID, 'Interests data')));
        })
       .then(() => links);

}

module.exports = updateInterestPage;

if (typeof $!== 'undefined') {
    $.async();
    
    updateInterestPage()
       .then((result) => $.sendResult(result))
       .catch((error) => $.sendError(error));
}

Code Breakdown

Dependencies

updateInterestPage Function

Export and Async Execution