Skip to content

Commit ea0ac4f

Browse files
committed
fix: keep defaults for loaderElement
1 parent 792aa56 commit ea0ac4f

File tree

3 files changed

+18
-26
lines changed

3 files changed

+18
-26
lines changed

src/__tests__/loader.test.ts

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
/**
2-
* @vitest-environment jsdom
3-
*/
41
import {
52
beforeEach, describe, expect, it, vi,
63
} from 'vitest'
@@ -13,8 +10,6 @@ import Loader from '../loader.js'
1310
type PromiseResolver = (value?: unknown) => void;
1411
type PromiseRejecter = (reason?: unknown) => unknown;
1512

16-
const LOADER_ELEMENT = '#js-page-loader'
17-
1813
const promiseResolverStub: PromiseResolver = () => {}
1914
const promiseRejecterStub: PromiseRejecter = () => {}
2015

@@ -32,7 +27,7 @@ describe('promise-loading-spinner', () => {
3227
// eslint-disable-next-line sonarjs/no-duplicate-string
3328
const loaderElement = document.getElementById('js-page-loader') as HTMLElement
3429

35-
const loader = new Loader({ loaderElement: LOADER_ELEMENT }) // Initialize the loader
30+
const loader = new Loader() // Initialize the loader
3631

3732
// Loader is initialized
3833
expect(loaderElement.classList.contains('is-active')).toBe(false)
@@ -67,7 +62,7 @@ describe('promise-loading-spinner', () => {
6762
it('handles a single promise (error)', async () => {
6863
const loaderElement = document.getElementById('js-page-loader') as HTMLElement
6964

70-
const loader = new Loader({ loaderElement: LOADER_ELEMENT }) // Initialize the loader
65+
const loader = new Loader() // Initialize the loader
7166

7267
// Loader is initialized
7368
expect(loaderElement.classList.contains('is-active')).toBe(false)
@@ -102,7 +97,7 @@ describe('promise-loading-spinner', () => {
10297
it('handles a promise that resolves in the delay phase)', async () => {
10398
const loaderElement = document.getElementById('js-page-loader') as HTMLElement
10499

105-
const loader = new Loader({ loaderElement: LOADER_ELEMENT }) // Initialize the loader
100+
const loader = new Loader() // Initialize the loader
106101

107102
// Loader is initialized
108103
expect(loaderElement.classList.contains('is-active')).toBe(false)
@@ -133,7 +128,7 @@ describe('promise-loading-spinner', () => {
133128
it('does\'t show a loader directly at page load (init delay)', async () => {
134129
const loaderElement = document.getElementById('js-page-loader') as HTMLElement
135130

136-
const loader = new Loader({ loaderElement: LOADER_ELEMENT }) // Initialize the loader
131+
const loader = new Loader() // Initialize the loader
137132

138133
// Loader is initialized
139134
expect(loaderElement.classList.contains('is-active')).toBe(false)
@@ -164,7 +159,7 @@ describe('promise-loading-spinner', () => {
164159
it('forces a loader directly at page load (init delay)', async () => {
165160
const loaderElement = document.getElementById('js-page-loader') as HTMLElement
166161

167-
const loader = new Loader({ loaderElement: LOADER_ELEMENT }) // Initialize the loader
162+
const loader = new Loader() // Initialize the loader
168163

169164
// Loader is initialized
170165
expect(loaderElement.classList.contains('is-active')).toBe(false)
@@ -197,7 +192,7 @@ describe('promise-loading-spinner', () => {
197192
it('processes two promises (added second in delay phase)', async () => {
198193
const loaderElement = document.getElementById('js-page-loader') as HTMLElement
199194

200-
const loader = new Loader({ loaderElement: LOADER_ELEMENT }) // Initialize the loader
195+
const loader = new Loader() // Initialize the loader
201196

202197
// Loader is initialized
203198
expect(loaderElement.classList.contains('is-active')).toBe(false)
@@ -248,7 +243,7 @@ describe('promise-loading-spinner', () => {
248243
it('processes two promises (added second after delay phase)', async () => {
249244
const loaderElement = document.getElementById('js-page-loader') as HTMLElement
250245

251-
const loader = new Loader({ loaderElement: LOADER_ELEMENT }) // Initialize the loader
246+
const loader = new Loader() // Initialize the loader
252247

253248
// Loader is initialized
254249
expect(loaderElement.classList.contains('is-active')).toBe(false)
@@ -299,7 +294,7 @@ describe('promise-loading-spinner', () => {
299294
it('processes two promises (added second directly after resolving first)', async () => {
300295
const loaderElement = document.getElementById('js-page-loader') as HTMLElement
301296

302-
const loader = new Loader({ loaderElement: LOADER_ELEMENT }) // Initialize the loader
297+
const loader = new Loader() // Initialize the loader
303298

304299
// Loader is initialized
305300
expect(loaderElement.classList.contains('is-active')).toBe(false)
@@ -356,7 +351,7 @@ describe('promise-loading-spinner', () => {
356351
it('processes two promises (added second after close delay)', async () => {
357352
const loaderElement = document.getElementById('js-page-loader') as HTMLElement
358353

359-
const loader = new Loader({ loaderElement: LOADER_ELEMENT }) // Initialize the loader
354+
const loader = new Loader() // Initialize the loader
360355

361356
// Loader is initialized
362357
expect(loaderElement.classList.contains('is-active')).toBe(false)
@@ -512,7 +507,6 @@ describe('promise-loading-spinner', () => {
512507
const loaderElement = document.getElementById('js-page-loader') as HTMLElement
513508

514509
const loader = new Loader({
515-
loaderElement: LOADER_ELEMENT,
516510
classActive: 'loading',
517511
}) // Initialize the loader
518512

@@ -555,7 +549,6 @@ describe('promise-loading-spinner', () => {
555549
const loaderElement = document.getElementById('js-page-loader') as HTMLElement
556550

557551
const loader = new Loader({
558-
loaderElement: LOADER_ELEMENT,
559552
delay: 0,
560553
}) // Initialize the loader
561554

@@ -591,7 +584,6 @@ describe('promise-loading-spinner', () => {
591584
const loaderElement = document.getElementById('js-page-loader') as HTMLElement
592585

593586
const loader = new Loader({ // Initialize the loader
594-
loaderElement: LOADER_ELEMENT,
595587
initDelay: 0,
596588
})
597589

@@ -621,7 +613,6 @@ describe('promise-loading-spinner', () => {
621613
const loaderElement = document.getElementById('js-page-loader') as HTMLElement
622614

623615
const loader = new Loader({ // Initialize the loader
624-
loaderElement: LOADER_ELEMENT,
625616
closeDelay: 0,
626617
})
627618

@@ -653,7 +644,7 @@ describe('promise-loading-spinner', () => {
653644
expect(loaderElement.classList.contains('is-active')).toBe(false)
654645
})
655646

656-
it('needs an element or signal', () => {
647+
it.skip('needs an element or signal', () => {
657648
expect(() => {
658649
// eslint-disable-next-line no-new
659650
new Loader({
@@ -702,7 +693,7 @@ describe('promise-loading-spinner', () => {
702693
it('can export a function wrapper', async () => {
703694
const loaderElement = document.getElementById('js-page-loader') as HTMLElement
704695

705-
const loader = new Loader({ loaderElement: LOADER_ELEMENT }) // Initialize the loader
696+
const loader = new Loader() // Initialize the loader
706697

707698
// Loader is initialized
708699
expect(loaderElement.classList.contains('is-active')).toBe(false)
@@ -761,7 +752,7 @@ describe('promise-loading-spinner', () => {
761752
it('can export a decorator', async () => {
762753
const loaderElement = document.getElementById('js-page-loader') as HTMLElement
763754

764-
const loader = new Loader({ loaderElement: LOADER_ELEMENT }) // Initialize the loader
755+
const loader = new Loader() // Initialize the loader
765756

766757
// Loader is initialized
767758
expect(loaderElement.classList.contains('is-active')).toBe(false)
@@ -830,7 +821,6 @@ describe('promise-loading-spinner', () => {
830821
describe('currentLoadingPromise', () => {
831822
it('returns a promise for the currently shown loader', async () => {
832823
const loader = new Loader({ // Initialize the loader
833-
loaderElement: LOADER_ELEMENT,
834824
delay: 666,
835825
})
836826

src/loader.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,16 +119,17 @@ export default class Loader {
119119
*
120120
* @param cfg configuration of the loader (optional)
121121
*/
122-
public constructor(cfg: Partial<LoaderConfig>) {
122+
public constructor(cfg: Partial<LoaderConfig> = {}) {
123123
this.setCurrentLoadingPromise()
124124
const config = { ...defaults, ...cfg }
125125
this.config = config
126126

127127
const { config: { loaderElement, signal, initDelay } } = this
128128

129-
if (loaderElement) {
130-
this.el = loaderElement instanceof HTMLElement
131-
? loaderElement : document.querySelector(loaderElement) as HTMLElement
129+
if (loaderElement ?? !signal) {
130+
const element = loaderElement ?? '#js-page-loader'
131+
this.el = element instanceof HTMLElement
132+
? element : document.querySelector(element) as HTMLElement
132133

133134
if (!this.el) throw new Error('Element not found')
134135
}

vitest.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { defineConfig } from 'vitest/config'
22

33
export default defineConfig({
44
test: {
5+
environment: 'jsdom',
56
coverage: {
67
exclude: [
78
'.yarn/**',

0 commit comments

Comments
 (0)