Skip to content

Commit

Permalink
fix creator types
Browse files Browse the repository at this point in the history
  • Loading branch information
EskiMojo14 committed Apr 28, 2024
1 parent b538472 commit fe116cd
Showing 1 changed file with 42 additions and 29 deletions.
71 changes: 42 additions & 29 deletions src/creator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import type {
} from "@reduxjs/toolkit";
import type { HistoryAdapter, HistoryState } from "./redux";
import type { WithRequiredProp } from "./utils";
import type { BaseHistoryState } from ".";

const historyMethodsCreatorType = Symbol("historyMethodsCreator");
const undoableCreatorsCreatorType = Symbol("undoableCreatorsCreator");
Expand All @@ -33,12 +34,20 @@ interface HistoryReducers<State> {
};
}

interface HistoryMethodsCreatorConfig<State, Data> {
selectHistoryState?: (state: Draft<State>) => HistoryState<Data>;
interface HistoryMethodsCreatorConfig<
RootState,
Data,
State extends BaseHistoryState<unknown, unknown> = HistoryState<Data>,
> {
selectHistoryState?: (state: Draft<RootState>) => Draft<State>;
}

interface UndoableCreatorsCreatorConfig<State, Data> {
selectHistoryState?: (state: Draft<State>) => HistoryState<Data>;
interface UndoableCreatorsCreatorConfig<
RootState,
Data,
State extends BaseHistoryState<unknown, unknown> = HistoryState<Data>,
> {
selectHistoryState?: (state: Draft<RootState>) => Draft<State>;
}

type ActionForPrepare<Prepare extends PrepareAction<any>> = ReturnType<
Expand Down Expand Up @@ -68,24 +77,24 @@ declare module "@reduxjs/toolkit" {
ReducerPath extends string,
> {
[historyMethodsCreatorType]: ReducerCreatorEntry<
State extends HistoryState<infer Data>
State extends BaseHistoryState<infer Data, any>
? {
(
adapter: HistoryAdapter<Data>,
config?: HistoryMethodsCreatorConfig<State, Data>,
adapter: HistoryAdapter<Data, State>,
config?: HistoryMethodsCreatorConfig<State, Data, State>,
): HistoryReducers<State>;
<Data>(
adapter: HistoryAdapter<Data>,
<Data, HState extends BaseHistoryState<Data, unknown>>(
adapter: HistoryAdapter<Data, HState>,
config: WithRequiredProp<
HistoryMethodsCreatorConfig<State, Data>,
HistoryMethodsCreatorConfig<State, Data, HState>,
"selectHistoryState"
>,
): HistoryReducers<State>;
}
: <Data>(
adapter: HistoryAdapter<Data>,
: <Data, HState extends BaseHistoryState<Data, unknown>>(
adapter: HistoryAdapter<Data, HState>,
config: WithRequiredProp<
HistoryMethodsCreatorConfig<State, Data>,
HistoryMethodsCreatorConfig<State, Data, HState>,
"selectHistoryState"
>,
) => HistoryReducers<State>,
Expand All @@ -111,24 +120,24 @@ declare module "@reduxjs/toolkit" {
}
>;
[undoableCreatorsCreatorType]: ReducerCreatorEntry<
State extends HistoryState<infer Data>
State extends BaseHistoryState<infer Data, any>
? {
(
adapter: HistoryAdapter<Data>,
config?: UndoableCreatorsCreatorConfig<State, Data>,
adapter: HistoryAdapter<Data, State>,
config?: UndoableCreatorsCreatorConfig<State, Data, State>,
): UndoableCreators<Data, State>;
<Data>(
adapter: HistoryAdapter<Data>,
<Data, HState extends BaseHistoryState<Data, unknown>>(
adapter: HistoryAdapter<Data, HState>,
config: WithRequiredProp<
UndoableCreatorsCreatorConfig<State, Data>,
UndoableCreatorsCreatorConfig<State, Data, HState>,
"selectHistoryState"
>,
): UndoableCreators<Data, State>;
}
: <Data>(
adapter: HistoryAdapter<Data>,
: <Data, HState extends BaseHistoryState<Data, unknown>>(
adapter: HistoryAdapter<Data, HState>,
config: WithRequiredProp<
UndoableCreatorsCreatorConfig<State, Data>,
UndoableCreatorsCreatorConfig<State, Data, HState>,
"selectHistoryState"
>,
) => UndoableCreators<Data, State>
Expand All @@ -137,10 +146,10 @@ declare module "@reduxjs/toolkit" {
}

const makeScopedReducerCreator =
<State, Data>(
selectHistoryState: (state: Draft<State>) => HistoryState<Data>,
<State, Data, HState extends BaseHistoryState<Data, unknown>>(
selectHistoryState: (state: Draft<State>) => Draft<HState>,
) =>
<P>(mutator: (state: HistoryState<Data>, action: PayloadAction<P>) => void) =>
<P>(mutator: (state: Draft<HState>, action: PayloadAction<P>) => void) =>
(reducerCreator.create as ReducerCreators<State>["reducer"])<P>(
(state, action) => {
mutator(selectHistoryState(state), action);
Expand All @@ -151,11 +160,15 @@ export const historyMethodsCreator: ReducerCreator<
typeof historyMethodsCreatorType
> = {
type: historyMethodsCreatorType,
create<Data, State = HistoryState<Data>>(
adapter: HistoryAdapter<Data>,
create<
Data,
State = HistoryState<Data>,
HState extends BaseHistoryState<Data, unknown> = HistoryState<Data>,
>(
adapter: HistoryAdapter<Data, HState>,
{
selectHistoryState = (state) => state as HistoryState<Data>,
}: HistoryMethodsCreatorConfig<State, Data> = {},
selectHistoryState = (state) => state as never,
}: HistoryMethodsCreatorConfig<State, Data, HState> = {},
): HistoryReducers<State> {
const createReducer = makeScopedReducerCreator(selectHistoryState);
return {
Expand Down

0 comments on commit fe116cd

Please sign in to comment.