diff --git a/packages/components/index.ts b/packages/components/index.ts index ebb54ff1f..825a3872e 100644 --- a/packages/components/index.ts +++ b/packages/components/index.ts @@ -51,7 +51,7 @@ import { IxSelect, IxSelectOption, IxSelectOptionGroup, IxSelectPanel } from '@i import { IxSkeleton } from '@idux/components/skeleton' import { IxSlider } from '@idux/components/slider' import { IxSpace } from '@idux/components/space' -import { IxSpin } from '@idux/components/spin' +import { IxSpin, IxSpinProvider } from '@idux/components/spin' import { IxStatistic } from '@idux/components/statistic' import { IxStepper, IxStepperItem } from '@idux/components/stepper' import { IxSwitch } from '@idux/components/switch' @@ -146,6 +146,7 @@ const components = [ IxSlider, IxSpace, IxSpin, + IxSpinProvider, IxStatistic, IxStepper, IxStepperItem, diff --git a/packages/components/spin/__tests__/__snapshots__/spinProvider.spec.ts.snap b/packages/components/spin/__tests__/__snapshots__/spinProvider.spec.ts.snap new file mode 100644 index 000000000..c79d824c0 --- /dev/null +++ b/packages/components/spin/__tests__/__snapshots__/spinProvider.spec.ts.snap @@ -0,0 +1,3 @@ +// Vitest Snapshot v1 + +exports[`SpinProvider > basic > render work 1`] = `"
content
"`; diff --git a/packages/components/spin/__tests__/spinProvider.spec.ts b/packages/components/spin/__tests__/spinProvider.spec.ts new file mode 100644 index 000000000..cee05b5cb --- /dev/null +++ b/packages/components/spin/__tests__/spinProvider.spec.ts @@ -0,0 +1,101 @@ +import { MountingOptions, VueWrapper, flushPromises, mount } from '@vue/test-utils' + +import { renderWork } from '@tests' + +import SpinProvider from '../src/SpinProvider' +import { SpinProviderInstance, SpinProviderProps } from '../src/types' + +describe('SpinProvider', () => { + const SpinProviderMount = (options?: MountingOptions) => { + return mount(SpinProvider, { ...options }) as VueWrapper + } + + const tip = 'This is a tip' + + const newTip = 'This is a newTip' + + describe('basic', () => { + renderWork(SpinProvider, { slots: { default: 'content' } }) + + test('update and destroy and destroyAll work', async () => { + const wrapper = SpinProviderMount() + + document.body.innerHTML = '
This is a content
' + + wrapper.vm.open({ tip, target: '.target' }) + await flushPromises() + + expect(document.querySelectorAll('.ix-spin').length).toBe(1) + + expect(document.querySelector('.target')?.classList.contains('ix-spin-target-container')).toBe(true) + + expect(document.querySelector('.ix-spin-spinner-tip')!.textContent).toBe(tip) + + wrapper.vm.update({ + tip: newTip, + target: '.target', + }) + + await flushPromises() + + expect(document.querySelector('.ix-spin-spinner-tip')!.textContent).toBe(newTip) + + wrapper.vm.open({ tip }) + await flushPromises() + + expect(document.querySelectorAll('.ix-spin').length).toBe(2) + + wrapper.vm.destroy() + + await flushPromises() + + expect(document.querySelectorAll('.ix-spin').length).toBe(1) + + // // will not generate spins repeatedly + wrapper.vm.open({ tip, target: '.target' }) + + await flushPromises() + + expect(document.querySelectorAll('.ix-spin').length).toBe(1) + + wrapper.vm.destroyAll() + + await flushPromises() + + expect(document.querySelectorAll('.ix-spin').length).toBe(0) + }) + }) + + describe('spinRef', () => { + test.skip('update and destroy work', async () => { + const wrapper = SpinProviderMount() + const spinProviderRef = wrapper.vm.open({ tip }) + await flushPromises() + + expect(document.body.classList.contains('ix-spin-target-container')).toBe(true) + + expect(document.querySelectorAll('.ix-spin').length).toBe(1) + + expect(document.querySelectorAll('.ix-spin')[0].style.zIndex).toBe('2000') + + expect(document.querySelector('.ix-spin-spinner-tip')!.textContent).toBe(tip) + + spinProviderRef.update({ + tip: 'new text', + zIndex: 3000, + }) + + await flushPromises() + + expect(document.querySelector('.ix-spin-spinner-tip')!.textContent).toBe('new text') + + expect(document.querySelectorAll('.ix-spin')[0].style.zIndex).toBe('3000') + + spinProviderRef.destroy() + + await flushPromises() + + expect(document.querySelectorAll('.ix-spin').length).toBe(0) + }) + }) +}) diff --git a/packages/components/spin/demo/Basic.vue b/packages/components/spin/demo/Basic.vue index 034a3d157..033db32ac 100644 --- a/packages/components/spin/demo/Basic.vue +++ b/packages/components/spin/demo/Basic.vue @@ -1,7 +1,7 @@