mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-09-09 01:36:45 +08:00
fix(glass): reset renderer state on unmount (#588)
This commit is contained in:
@@ -93,6 +93,10 @@ watchEffect(() => {
|
|||||||
|
|
||||||
setGlassRendererState(rendererState, state)
|
setGlassRendererState(rendererState, state)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
onScopeDispose(() => {
|
||||||
|
setGlassRendererState(rendererState, 'fallback')
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|||||||
@@ -5,11 +5,14 @@ import GlassOpticalLayer from '@/components/theme/GlassOpticalLayer.vue'
|
|||||||
|
|
||||||
const rendererCalls = vi.hoisted(() => [] as Array<Record<string, unknown>>)
|
const rendererCalls = vi.hoisted(() => [] as Array<Record<string, unknown>>)
|
||||||
const interactionSource = vi.hoisted(() => ({ subscribe: vi.fn() }))
|
const interactionSource = vi.hoisted(() => ({ subscribe: vi.fn() }))
|
||||||
|
const setRendererState = vi.hoisted(() =>
|
||||||
vi.mock('@/composables/useGlassOpticalRenderer', () => ({
|
vi.fn((state: { value: string }, value: string) => {
|
||||||
setGlassRendererState: vi.fn((state: { value: string }, value: string) => {
|
|
||||||
state.value = value
|
state.value = value
|
||||||
}),
|
}),
|
||||||
|
)
|
||||||
|
|
||||||
|
vi.mock('@/composables/useGlassOpticalRenderer', () => ({
|
||||||
|
setGlassRendererState: setRendererState,
|
||||||
useGlassOpticalInteractionSource: vi.fn(() => interactionSource),
|
useGlassOpticalInteractionSource: vi.fn(() => interactionSource),
|
||||||
useGlassOpticalRenderer: vi.fn((options: Record<string, unknown>) => {
|
useGlassOpticalRenderer: vi.fn((options: Record<string, unknown>) => {
|
||||||
rendererCalls.push(options)
|
rendererCalls.push(options)
|
||||||
@@ -24,6 +27,7 @@ vi.mock('@/composables/useGlassOpticalRenderer', () => ({
|
|||||||
describe('GlassOpticalLayer', () => {
|
describe('GlassOpticalLayer', () => {
|
||||||
it('uses exactly two visible presentation contexts with one interaction source', () => {
|
it('uses exactly two visible presentation contexts with one interaction source', () => {
|
||||||
rendererCalls.length = 0
|
rendererCalls.length = 0
|
||||||
|
setRendererState.mockClear()
|
||||||
const wrapper = shallowMount(GlassOpticalLayer, {
|
const wrapper = shallowMount(GlassOpticalLayer, {
|
||||||
props: {
|
props: {
|
||||||
appearance: 'clear',
|
appearance: 'clear',
|
||||||
@@ -48,5 +52,8 @@ describe('GlassOpticalLayer', () => {
|
|||||||
expect(rendererCalls.map(options => options.surfaceSpace)).toEqual(['fixed', 'scroll'])
|
expect(rendererCalls.map(options => options.surfaceSpace)).toEqual(['fixed', 'scroll'])
|
||||||
expect(rendererCalls.every(options => options.interactionSource === interactionSource)).toBe(true)
|
expect(rendererCalls.every(options => options.interactionSource === interactionSource)).toBe(true)
|
||||||
expect(rendererCalls.every(options => options.syncDocumentState === false)).toBe(true)
|
expect(rendererCalls.every(options => options.syncDocumentState === false)).toBe(true)
|
||||||
|
|
||||||
|
wrapper.unmount()
|
||||||
|
expect(setRendererState).toHaveBeenLastCalledWith(expect.any(Object), 'fallback')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user