Skip to content

Instantly share code, notes, and snippets.

@marcelometal
Last active February 24, 2025 17:15
Show Gist options
  • Save marcelometal/27baae63cf226c285dfa8abd7b9fda2f to your computer and use it in GitHub Desktop.
Save marcelometal/27baae63cf226c285dfa8abd7b9fda2f to your computer and use it in GitHub Desktop.
Obisidian + DataView: Analytics Day

πŸš€ Itens trabalhados

let pages = [...dv.pages().where(p => p.file.path.includes('/'))];
pages.sort((a, b) => b.file.name.localeCompare(a.file.name));

let grouped = {};

function addToHierarchy(pathArray, obj) {
  let part = pathArray[0];
  if (!obj[part]) {
    obj[part] = {};
  }
  if (pathArray.length > 1) {
    addToHierarchy(pathArray.slice(1), obj[part]);
  }
}

for (let page of pages) {
  let date = page.file.name.split('-');
  
  if (date.length < 2) continue;
  
  let fullDate = `${date[0]}-${date[1]}-${date[2]}`;
  let folderPath = page.file.folder.split('/');

  if (!grouped[fullDate]) {
    grouped[fullDate] = {};
  }

  addToHierarchy(folderPath, grouped[fullDate]);
}

let sortedDates = Object.keys(grouped).sort().reverse();

for (let fullDate of sortedDates) {
  dv.header(2, `🎯 ${fullDate}`);

  function displayHierarchy(obj) {
    let html = '<ul>';
    let keys = Object.keys(obj).sort();

    for (let key of keys) {
      html += `<li>πŸ“ ${key}`;
      html += displayHierarchy(obj[key]);
      html += `</li>`;
    }
    html += '</ul>';
    return html;
  }

  dv.el('div', displayHierarchy(grouped[fullDate]), {cls: 'dataview-table'});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment