Auto Expand Subtasks - Asana

Auto Expand sub-tasks of selected Task and collapse other Tasks.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name            Auto Expand Subtasks - Asana
// @name:de         Unteraufgaben Automatisch anzeigen - Asana
// @namespace       https://greasyfork.org/users/928242
// @version         0.1
// @description     Auto Expand sub-tasks of selected Task and collapse other Tasks.
// @description:de  Klappt automatisch die Unteraufgaben der ausgewählten Aufgabe aus und schließt die anderen.
// @author          Kamikaze (https://github.com/Kamiikaze)
// @supportURL      https://github.com/Kamiikaze/Tampermonkey/issues
// @match           https://app.asana.com/*
// @icon            https://www.google.com/s2/favicons?sz=64&domain=asana.com
// @grant           none
// @run-at          document-ready
// @license         MIT
// ==/UserScript==

console.log("Started [Auto Expand Subtasks - Asana]")

let checkReadyState = setInterval( () => {
	if (document.readyState === 'complete') addAutoExpand()
}, 1000)

function collapseTasks() {
	const subTaskButtons = document.querySelectorAll(".ProjectSpreadsheetGridRow-subtaskToggleButton")

	for (let el = 0; el < subTaskButtons.length; el++) {
		const item = subTaskButtons[el]
		const isExpanded = item.childNodes[0].classList.contains("DownTriangleIcon")

		if(isExpanded) item.click()
	}
}

function addAutoExpand() {
	clearInterval(checkReadyState)

	const taskItems = document.querySelectorAll(".SpreadsheetRow-stickyCell")

	for (let el = 0; el < taskItems.length; el++) {
		const item = taskItems[el]
		item.addEventListener("click", () => {
			collapseTasks()

			const toggleButton = item.querySelector(".ProjectSpreadsheetGridRow-subtaskToggleButton")
			toggleButton.click()
		})
	}
}