/** * Switch the CSS stylesheet used between 'rtl' and 'ltr' * * @param {('ltr' | 'rtl' | 'auto')} direction - Text direction, either left-to-right (ltr) or right-to-left (rtl) * @returns {Promise} */ const switchDirection = async (direction) => { if (direction === 'auto') { // eslint-disable-next-line no-param-reassign direction = 'ltr'; } let updatedLink; Array.from(document.getElementsByTagName('link')) .filter((link) => link.rel === 'stylesheet') .forEach((link) => { if (link.title === direction && link.disabled) { link.disabled = false; updatedLink = link; } else if (link.title !== direction && !link.disabled) { link.disabled = true; } }); if (updatedLink) { return new Promise((resolve, reject) => { updatedLink.onload = () => { resolve(); }; updatedLink.onerror = () => reject(new Error(`Failed to load '${direction}' stylesheet`)); }); } return undefined; }; export default switchDirection;