Migrate dashboard initializers to packs (#19327)

* add dashboard sort initializer and tests within packs folder

* run dashboard sort initializer in base.jsx spinup and on InstantClick change

* remove assets/javascripts' dashboard sort initialization and comment out original file

* fully remove original dashboard sort initializer file

* export both functions within initializeDashboardSort

* refactor import of selectNavigation function within CategoryLinksMobile
This commit is contained in:
Duke Greene 2023-04-18 18:09:33 -04:00 committed by GitHub
parent ec1503a60a
commit 692795407f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 41 additions and 10 deletions

View file

@ -4,7 +4,7 @@
initializeCommentsPage,
initializeArticleDate, initializeArticleReactions,
initializeSettings, initializeRuntimeBanner,
initializeTimeFixer, initializeDashboardSort, initializeCreditsPage,
initializeTimeFixer, initializeCreditsPage,
initializeOnboardingTaskCard,
initScrolling, nextPage:writable,
fetching:writable, done:writable, initializePaymentPointers,
@ -18,7 +18,6 @@ function callInitializers() {
initializeArticleReactions();
initializeSettings();
initializeTimeFixer();
initializeDashboardSort();
initializeCreditsPage();
initializeOnboardingTaskCard();
initializeDateHelpers();

View file

@ -1,8 +1,6 @@
/*
global selectNavigation
*/
import { h, Component } from 'preact';
import PropTypes from 'prop-types';
import { selectNavigation } from '../../packs/initializers/initializeDashboardSort';
export class CategoryLinksMobile extends Component {
componentDidMount() {

View file

@ -7,6 +7,7 @@ import {
import { waitOnBaseData } from '../utilities/waitOnBaseData';
import { initializePodcastPlayback } from '../utilities/podcastPlayback';
import { initializeVideoPlayback } from '../utilities/videoPlayback';
import { initializeDashboardSort } from './initializers/initializeDashboardSort';
import { trackCreateAccountClicks } from '@utilities/ahoy/trackEvents';
import { showWindowModal, closeWindowModal } from '@utilities/showModal';
import * as Runtime from '@utilities/runtime';
@ -65,9 +66,11 @@ window.Forem = {
Runtime,
};
initializeDashboardSort();
initializePodcastPlayback();
initializeVideoPlayback();
InstantClick.on('change', () => {
initializeDashboardSort();
initializePodcastPlayback();
initializeVideoPlayback();
});

View file

@ -0,0 +1,34 @@
import { initializeDashboardSort } from '../initializeDashboardSort';
describe('initializeDashboardSort', () => {
beforeEach(() => {
document.body.innerHTML = `
<div>
<select id="dashboard_sort" <option value="views-desc">Most Views</option> </select>
<select id="dashboard_author" <option value="/dashboard">Personal</option> </select>
<select id="mobile_nav_dashboard" <option value="/dashboard">Posts (1)</option> </select>
</div>
`;
});
test('should add event listener to dashboard sort select when the element exists', async () => {
const sortSelect = document.getElementById('dashboard_sort');
sortSelect.addEventListener = jest.fn();
initializeDashboardSort();
expect(sortSelect.addEventListener).toHaveBeenCalled();
});
test('should add event listener to dashboard author select when the element exists', async () => {
const authorSelect = document.getElementById('dashboard_author');
authorSelect.addEventListener = jest.fn();
initializeDashboardSort();
expect(authorSelect.addEventListener).toHaveBeenCalled();
});
test('should add event listener to mobile nav dashboard select when the element exists', async () => {
const navSelect = document.getElementById('mobile_nav_dashboard');
navSelect.addEventListener = jest.fn();
initializeDashboardSort();
expect(navSelect.addEventListener).toHaveBeenCalled();
});
});

View file

@ -1,10 +1,5 @@
/* global InstantClick */
'use strict';
function selectNavigation(select, urlPrefix) {
const trigger = document.getElementById(select);
if (trigger) {
trigger.addEventListener('change', (event) => {
let url = event.target.value;
@ -23,3 +18,5 @@ function initializeDashboardSort() {
selectNavigation('dashboard_author');
selectNavigation('mobile_nav_dashboard');
}
export { selectNavigation, initializeDashboardSort };