Files
NapCatQQ/.pnpm-store/v3/files/97/b0a0bbf03755b7fa966e31a16055a780a2db509977a3b3b8c9da82d2f37b5fe2213ea62d9293c6348e921d3388f8f71377bea313e67bb9793caf983bddb974
T
TanTan e311ca3275
Build NapCat Artifacts / Windows Loader Test (push) Canceled after 0s
Build NapCat Artifacts / Type Check & Test (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Framework (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Shell (push) Canceled after 0s
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

60 lines
1.4 KiB
Plaintext

import { createEntityAdapter, createSlice } from '../..'
import type {
PayloadAction,
Slice,
SliceCaseReducers,
UnknownAction,
} from '../..'
import type { EntityId, EntityState, IdSelector } from '../models'
import type { BookModel } from './fixtures/book'
describe('Entity Slice Enhancer', () => {
let slice: Slice<EntityState<BookModel, BookModel['id']>>
beforeEach(() => {
const indieSlice = entitySliceEnhancer({
name: 'book',
selectId: (book: BookModel) => book.id,
})
slice = indieSlice
})
it('exposes oneAdded', () => {
const book = {
id: '0',
title: 'Der Steppenwolf',
author: 'Herman Hesse',
}
const action = slice.actions.oneAdded(book)
const oneAdded = slice.reducer(undefined, action as UnknownAction)
expect(oneAdded.entities['0']).toBe(book)
})
})
interface EntitySliceArgs<T, Id extends EntityId> {
name: string
selectId: IdSelector<T, Id>
modelReducer?: SliceCaseReducers<T>
}
function entitySliceEnhancer<T, Id extends EntityId>({
name,
selectId,
modelReducer,
}: EntitySliceArgs<T, Id>) {
const modelAdapter = createEntityAdapter({
selectId,
})
return createSlice({
name,
initialState: modelAdapter.getInitialState(),
reducers: {
oneAdded(state, action: PayloadAction<T>) {
modelAdapter.addOne(state, action.payload)
},
...modelReducer,
},
})
}