docbrown/app/javascript/packs/initializers/initializeTimeFixer.js
Lawrence 93a70815b3
TimeFixer Initializer Migration (#19268)
* init

* remove from asset pipeline and add tests

* add utc date conversion test

* try removing last tests

* add some more tests

* add tests for more coverage

* add yet more tests

* separate descibe statments

* add dt test back

* more test cleanup

* include pack js files

* add jest back

* Include /packs/ in code coverage metric

* derp

* revert jest

* reformat some of the test accordingly

* try e2e

* fix cypress test

---------

Co-authored-by: Mac Siri <mac@forem.com>
Co-authored-by: Mac Siri <krairit.siri@gmail.com>
2023-04-27 20:54:39 -05:00

75 lines
1.7 KiB
JavaScript

function formatDateTime(options, value) {
return new Intl.DateTimeFormat('en-US', options).format(value);
}
function convertUtcTime(utcTime) {
const time = new Date(Number(utcTime));
const options = {
hour: 'numeric',
minute: 'numeric',
timeZoneName: 'short',
};
return formatDateTime(options, time);
}
function convertUtcDate(utcDate) {
const date = new Date(Number(utcDate));
const options = {
month: 'short',
day: 'numeric',
};
return formatDateTime(options, date);
}
function convertCalEvent(utc) {
const date = new Date(Number(utc));
const options = {
weekday: 'long',
month: 'long',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
};
return formatDateTime(options, date);
}
function updateLocalDateTime(elements, convertCallback, getUtcDateTime) {
let local;
for (let i = 0; i < elements.length; i += 1) {
local = convertCallback(getUtcDateTime(elements[i]));
// eslint-disable-next-line no-param-reassign
elements[i].innerHTML = local;
}
}
function initializeTimeFixer() {
const utcTime = document.getElementsByClassName('utc-time');
const utcDate = document.getElementsByClassName('utc-date');
const utc = document.getElementsByClassName('utc');
if (!utc) {
return;
}
updateLocalDateTime(
utcTime,
convertUtcTime,
(element) => element.dataset.datetime,
);
updateLocalDateTime(
utcDate,
convertUtcDate,
(element) => element.dataset.datetime,
);
updateLocalDateTime(utc, convertCalEvent, (element) => element.innerHTML);
}
export {
initializeTimeFixer,
updateLocalDateTime,
convertUtcDate,
convertUtcTime,
formatDateTime,
convertCalEvent,
};