()
| 60 | } |
| 61 | |
| 62 | function init() { |
| 63 | backBtn.addEventListener("click", () => { |
| 64 | window.history.back(); |
| 65 | }); |
| 66 | |
| 67 | // date type |
| 68 | let group = document.createElement("optgroup"); |
| 69 | group.label = t({ vi: "Lấy dữ liệu theo:", en: "Analyze by" }); |
| 70 | dateTypeSelect.appendChild(group); |
| 71 | [ |
| 72 | { |
| 73 | value: DATE_TYPE.DAY, |
| 74 | name: t({ vi: "Ngày", en: "Day" }), |
| 75 | }, |
| 76 | { |
| 77 | value: DATE_TYPE.RANGE, |
| 78 | name: t({ vi: "Khoảng ngày", en: "Range" }), |
| 79 | }, |
| 80 | { |
| 81 | value: DATE_TYPE.ALL, |
| 82 | name: t({ vi: "Tất cả", en: "All" }), |
| 83 | }, |
| 84 | ].forEach((o) => { |
| 85 | let selected = config.dateType === o.value; |
| 86 | dateTypeSelect.options.add(new Option(o.name, o.value, selected, selected)); |
| 87 | }); |
| 88 | |
| 89 | dateTypeSelect.addEventListener("change", (e) => { |
| 90 | let type = e.target.value; |
| 91 | switch (type) { |
| 92 | case "day": |
| 93 | displayTypeSelect.style.display = "none"; |
| 94 | config.dateType = DATE_TYPE.DAY; |
| 95 | showData(config); |
| 96 | |
| 97 | datePickerContainer.innerHTML = ` |
| 98 | <button type="button">◀</button> |
| 99 | <button class="date-selector"></button> |
| 100 | <button type="button">▶</button>`; |
| 101 | |
| 102 | const [preBtn, dateBtn, nextBtn] = |
| 103 | datePickerContainer.querySelectorAll("button"); |
| 104 | |
| 105 | dateBtn.innerText = formatDate(config.fromDate); |
| 106 | dateBtn.addEventListener("click", (e) => { |
| 107 | let x = dateBtn.offsetLeft - document.documentElement.scrollLeft; |
| 108 | let y = dateBtn.offsetTop - document.documentElement.scrollTop; |
| 109 | openDatePicker( |
| 110 | x, |
| 111 | y, |
| 112 | config.fromDate, |
| 113 | getOldestDate(), |
| 114 | new Date() |
| 115 | ).then((selectedDate) => { |
| 116 | if (selectedDate) { |
| 117 | dateBtn.innerText = formatDate(selectedDate); |
| 118 | config.fromDate = selectedDate; |
| 119 | showData(config); |
no test coverage detected