mirror of
https://github.com/zoriya/v10.git
synced 2026-08-16 02:45:09 +00:00
refactor(store): remove queue and task system (#382)
This commit is contained in:
@@ -11,22 +11,18 @@ export class MockMedia extends EventTarget {
|
||||
|
||||
// Shared slice for synchronous tests
|
||||
export const audioSlice = defineSlice<MockMedia>()({
|
||||
state: ({ task }) => ({
|
||||
state: ({ target }) => ({
|
||||
volume: 1,
|
||||
muted: false,
|
||||
setVolume(volume: number) {
|
||||
return task(({ target }) => {
|
||||
target.volume = volume;
|
||||
target.dispatchEvent(new Event('volumechange'));
|
||||
return volume;
|
||||
});
|
||||
target().volume = volume;
|
||||
target().dispatchEvent(new Event('volumechange'));
|
||||
return volume;
|
||||
},
|
||||
setMuted(muted: boolean) {
|
||||
return task(({ target }) => {
|
||||
target.muted = muted;
|
||||
target.dispatchEvent(new Event('volumechange'));
|
||||
return muted;
|
||||
});
|
||||
target().muted = muted;
|
||||
target().dispatchEvent(new Event('volumechange'));
|
||||
return muted;
|
||||
},
|
||||
}),
|
||||
|
||||
@@ -56,36 +52,28 @@ export class AsyncMockMedia extends EventTarget {
|
||||
}
|
||||
|
||||
export const asyncAudioSlice = defineSlice<AsyncMockMedia>()({
|
||||
state: ({ task }) => ({
|
||||
state: ({ target }) => ({
|
||||
volume: 1,
|
||||
muted: false,
|
||||
setVolume(volume: number) {
|
||||
return task(async ({ target }) => {
|
||||
await Promise.resolve();
|
||||
target.volume = volume;
|
||||
target.dispatchEvent(new Event('volumechange'));
|
||||
return volume;
|
||||
});
|
||||
async setVolume(volume: number) {
|
||||
await Promise.resolve();
|
||||
target().volume = volume;
|
||||
target().dispatchEvent(new Event('volumechange'));
|
||||
return volume;
|
||||
},
|
||||
slowSetVolume(volume: number) {
|
||||
return task(async ({ target }) => {
|
||||
await new Promise((resolve) => setTimeout(resolve, 50));
|
||||
target.volume = volume;
|
||||
target.dispatchEvent(new Event('volumechange'));
|
||||
return volume;
|
||||
});
|
||||
async slowSetVolume(volume: number) {
|
||||
await new Promise((resolve) => setTimeout(resolve, 50));
|
||||
target().volume = volume;
|
||||
target().dispatchEvent(new Event('volumechange'));
|
||||
return volume;
|
||||
},
|
||||
failingRequest() {
|
||||
return task(async () => {
|
||||
await Promise.resolve();
|
||||
throw new Error('Request failed');
|
||||
});
|
||||
async failingRequest() {
|
||||
await Promise.resolve();
|
||||
throw new Error('Request failed');
|
||||
},
|
||||
failingSetVolume() {
|
||||
return task(async () => {
|
||||
await new Promise((resolve) => setTimeout(resolve, 10));
|
||||
throw new Error('Test error');
|
||||
});
|
||||
async failingSetVolume() {
|
||||
await new Promise((resolve) => setTimeout(resolve, 10));
|
||||
throw new Error('Test error');
|
||||
},
|
||||
}),
|
||||
|
||||
@@ -109,55 +97,3 @@ export function createAsyncTestStore() {
|
||||
|
||||
return { store, target };
|
||||
}
|
||||
|
||||
/** Slice with custom keys (name !== key) for testing superseding behavior. */
|
||||
export const customKeySlice = defineSlice<MockMedia>()({
|
||||
state: ({ task }) => ({
|
||||
volume: 1,
|
||||
muted: false,
|
||||
// name='adjustVolume', key='audio-settings'
|
||||
adjustVolume(volume: number) {
|
||||
return task({
|
||||
key: 'audio-settings',
|
||||
async handler({ target }) {
|
||||
await new Promise((resolve) => setTimeout(resolve, 20));
|
||||
target.volume = volume;
|
||||
target.dispatchEvent(new Event('volumechange'));
|
||||
return volume;
|
||||
},
|
||||
});
|
||||
},
|
||||
// name='toggleMute', key='audio-settings' (same key - will supersede adjustVolume)
|
||||
toggleMute(muted: boolean) {
|
||||
return task({
|
||||
key: 'audio-settings',
|
||||
async handler({ target }) {
|
||||
await new Promise((resolve) => setTimeout(resolve, 20));
|
||||
target.muted = muted;
|
||||
target.dispatchEvent(new Event('volumechange'));
|
||||
return muted;
|
||||
},
|
||||
});
|
||||
},
|
||||
}),
|
||||
|
||||
attach({ target, signal, set }) {
|
||||
const sync = () => set({ volume: target.volume, muted: target.muted });
|
||||
|
||||
sync();
|
||||
|
||||
target.addEventListener('volumechange', sync);
|
||||
signal.addEventListener('abort', () => {
|
||||
target.removeEventListener('volumechange', sync);
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
export function createCustomKeyTestStore() {
|
||||
const store = createCoreStore<MockMedia>()(customKeySlice, { onError: noop });
|
||||
|
||||
const target = new MockMedia();
|
||||
store.attach(target);
|
||||
|
||||
return { store, target };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user