90 lines
2.6 KiB
TypeScript
90 lines
2.6 KiB
TypeScript
(() => {
|
|
const urlPrefix = document.querySelector("main").dataset.urlPrefix;
|
|
const apiKey = document.querySelector("main").dataset.apiKey;
|
|
|
|
const workOrderTypeIdsElement = document.querySelector(
|
|
"#icsFilters--workOrderTypeIds"
|
|
) as HTMLSelectElement;
|
|
|
|
const workOrderMilestoneTypeIdsElement = document.querySelector(
|
|
"#icsFilters--workOrderMilestoneTypeIds"
|
|
) as HTMLSelectElement;
|
|
|
|
const updateCalendarURL = () => {
|
|
let url =
|
|
window.location.href.slice(
|
|
0,
|
|
Math.max(
|
|
0,
|
|
window.location.href.indexOf(window.location.pathname) + 1
|
|
)
|
|
) +
|
|
urlPrefix +
|
|
"api/" +
|
|
apiKey +
|
|
"/" +
|
|
"milestoneICS/" +
|
|
"?";
|
|
|
|
if (
|
|
!workOrderTypeIdsElement.disabled &&
|
|
workOrderTypeIdsElement.selectedOptions.length > 0
|
|
) {
|
|
url += "workOrderTypeIds=";
|
|
|
|
for (const optionElement of workOrderTypeIdsElement.selectedOptions) {
|
|
url += optionElement.value + ",";
|
|
}
|
|
|
|
url = url.slice(0, -1) + "&";
|
|
}
|
|
|
|
if (
|
|
!workOrderMilestoneTypeIdsElement.disabled &&
|
|
workOrderMilestoneTypeIdsElement.selectedOptions.length > 0
|
|
) {
|
|
url += "workOrderMilestoneTypeIds=";
|
|
|
|
for (const optionElement of workOrderMilestoneTypeIdsElement.selectedOptions) {
|
|
url += optionElement.value + ",";
|
|
}
|
|
|
|
url = url.slice(0, -1) + "&";
|
|
}
|
|
|
|
(
|
|
document.querySelector(
|
|
"#icsFilters--calendarURL"
|
|
) as HTMLTextAreaElement
|
|
).value = url.slice(0, -1);
|
|
};
|
|
|
|
document
|
|
.querySelector("#icsFilters--workOrderTypeIds-all")
|
|
.addEventListener("change", (changeEvent) => {
|
|
workOrderTypeIdsElement.disabled = (
|
|
changeEvent.currentTarget as HTMLInputElement
|
|
).checked;
|
|
});
|
|
|
|
document
|
|
.querySelector("#icsFilters--workOrderMilestoneTypeIds-all")
|
|
.addEventListener("change", (changeEvent) => {
|
|
workOrderMilestoneTypeIdsElement.disabled = (
|
|
changeEvent.currentTarget as HTMLInputElement
|
|
).checked;
|
|
});
|
|
|
|
const inputSelectElements = document
|
|
.querySelector("#panel--icsFilters")
|
|
.querySelectorAll("input, select") as NodeListOf<
|
|
HTMLInputElement | HTMLSelectElement
|
|
>;
|
|
|
|
for (const element of inputSelectElements) {
|
|
element.addEventListener("change", updateCalendarURL);
|
|
}
|
|
|
|
updateCalendarURL();
|
|
})();
|