Last active
February 8, 2024 05:00
-
-
Save DannyFeliz/579081367fc73a6c6fee814eea676cd9 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
function getCards() { | |
const currentDate = new Date(); | |
const month = currentDate.getMonth() + 1; | |
const formattedMonth = month < 10 ? `0${month}` : month; | |
const thisMonth = `${currentDate.getFullYear()}-${formattedMonth}`; | |
const cards = document.querySelectorAll( | |
`[name="tempoAllocationCard"][data-date^="${thisMonth}"]` | |
); | |
return cards; | |
} | |
const TOTAL_CARDS_PER_WEEK = 5; | |
const description = () => document.querySelector('#commentField'); | |
const whatWillYouDoTomorrow = () => document.querySelector( | |
'#_Whatwillyoudotomorrow_' | |
); | |
const blokers = () => document.querySelector('#_Blockers_'); | |
const logTimeBtn = () => document.querySelector('#logTimeBtn'); | |
const nextBtn = () => document.querySelector("[data-testid='navigateForward']"); | |
function delay(ms) { | |
return new Promise(resolve => setTimeout(resolve, ms)); | |
} | |
function setText(element, value) { | |
const { set: valueSetter } = | |
Object.getOwnPropertyDescriptor(element, 'value') || {}; | |
const prototype = Object.getPrototypeOf(element); | |
const { set: prototypeValueSetter } = | |
Object.getOwnPropertyDescriptor(prototype, 'value') || {}; | |
if (prototypeValueSetter && valueSetter !== prototypeValueSetter) { | |
prototypeValueSetter.call(element, value); | |
} else if (valueSetter) { | |
valueSetter.call(element, value); | |
} else { | |
throw new Error('The given element does not have a value setter'); | |
} | |
element.dispatchEvent(new Event('input', { bubbles: true })); | |
} | |
async function fillHours (goToNextPage = true) { | |
for (const card of getCards()) { | |
await fillCard(card); | |
} | |
if (!goToNextPage) { | |
return; | |
} | |
nextBtn().click(); | |
await delay(1000); | |
const shouldGoToNextPage = getCards().length === TOTAL_CARDS_PER_WEEK; | |
fillHours(shouldGoToNextPage); | |
} | |
function fillCard(card) { | |
return new Promise((resolve, reject) => { | |
setTimeout(async () => { | |
card.click(); | |
await delay(400); | |
setText(description(), "TBD"); | |
setText(whatWillYouDoTomorrow(), "TBD"); | |
setText(blokers(), "No"); | |
logTimeBtn().click(); | |
await delay(1000); | |
resolve(); | |
}, 1000); | |
}); | |
} | |
fillHours() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment