Skip to content

Commit de9b751

Browse files
authored
fix: Fixed generic selector types (#1199)
Updated redux selectors to properly derive return types from generic input types. fixes #1197
1 parent f39100a commit de9b751

1 file changed

Lines changed: 40 additions & 40 deletions

File tree

packages/redux/src/selectors.ts

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,113 +1,113 @@
1-
import type { RootState, Storage, WorkspaceSettings } from './store';
1+
import type { RootState } from './store';
22

33
const EMPTY_OBJECT = Object.freeze({});
44

55
const EMPTY_MAP: ReadonlyMap<unknown, unknown> = new Map();
66

77
export type Selector<State extends RootState, R> = (store: State) => R;
8+
9+
type Settings<State extends RootState> = State['workspace']['data']['settings'];
10+
811
// User
9-
export const getUser = <State extends RootState = RootState>(
10-
store: State
11-
): State['user'] => store.user;
12+
export const getUser = <State extends RootState>(store: State): State['user'] =>
13+
store.user;
1214

13-
export const getUserName = <State extends RootState = RootState>(
15+
export const getUserName = <State extends RootState>(
1416
store: State
1517
): State['user']['name'] => getUser(store).name;
1618

17-
export const getUserGroups = <State extends RootState = RootState>(
19+
export const getUserGroups = <State extends RootState>(
1820
store: State
1921
): State['user']['groups'] => getUser(store).groups;
2022

2123
// Storage
22-
export const getStorage = <State extends RootState = RootState>(
24+
export const getStorage = <State extends RootState>(
2325
store: State
2426
): State['storage'] => store.storage;
2527

26-
export const getCommandHistoryStorage = <State extends RootState = RootState>(
28+
export const getCommandHistoryStorage = <State extends RootState>(
2729
store: State
2830
): State['storage']['commandHistoryStorage'] =>
2931
getStorage(store).commandHistoryStorage;
3032

31-
export const getFileStorage = <State extends RootState = RootState>(
33+
export const getFileStorage = <State extends RootState>(
3234
store: State
3335
): State['storage']['fileStorage'] => getStorage(store).fileStorage;
3436

35-
export const getWorkspaceStorage = <State extends RootState = RootState>(
37+
export const getWorkspaceStorage = <State extends RootState>(
3638
store: State
37-
): Storage['workspaceStorage'] => getStorage(store).workspaceStorage;
39+
): State['storage']['workspaceStorage'] => getStorage(store).workspaceStorage;
3840

3941
// Workspace
40-
export const getWorkspace = <State extends RootState = RootState>(
42+
export const getWorkspace = <State extends RootState>(
4143
store: State
42-
): RootState['workspace'] => store.workspace;
44+
): State['workspace'] => store.workspace;
4345

4446
// Settings
45-
export const getSettings = <State extends RootState = RootState>(
47+
export const getSettings = <State extends RootState>(
4648
store: State
47-
): RootState['workspace']['data']['settings'] =>
48-
getWorkspace(store).data.settings;
49+
): Settings<State> => getWorkspace(store).data.settings;
4950

50-
export const getDefaultDateTimeFormat = <State extends RootState = RootState>(
51+
export const getDefaultDateTimeFormat = <State extends RootState>(
5152
store: State
52-
): WorkspaceSettings['defaultDateTimeFormat'] =>
53+
): Settings<State>['defaultDateTimeFormat'] =>
5354
getSettings(store).defaultDateTimeFormat;
5455

5556
export const getDefaultDecimalFormatOptions = <
5657
State extends RootState = RootState
5758
>(
5859
store: State
59-
): WorkspaceSettings['defaultDecimalFormatOptions'] =>
60+
): Settings<State>['defaultDecimalFormatOptions'] =>
6061
getSettings(store).defaultDecimalFormatOptions ?? EMPTY_OBJECT;
6162

6263
export const getDefaultIntegerFormatOptions = <
6364
State extends RootState = RootState
6465
>(
6566
store: State
66-
): WorkspaceSettings['defaultIntegerFormatOptions'] =>
67+
): Settings<State>['defaultIntegerFormatOptions'] =>
6768
getSettings(store).defaultIntegerFormatOptions ?? EMPTY_OBJECT;
6869

69-
export const getFormatter = <State extends RootState = RootState>(
70+
export const getFormatter = <State extends RootState>(
7071
store: State
71-
): WorkspaceSettings['formatter'] => getSettings(store).formatter;
72+
): Settings<State>['formatter'] => getSettings(store).formatter;
7273

73-
export const getTimeZone = <State extends RootState = RootState>(
74+
export const getTimeZone = <State extends RootState>(
7475
store: State
75-
): WorkspaceSettings['timeZone'] => getSettings(store).timeZone;
76+
): Settings<State>['timeZone'] => getSettings(store).timeZone;
7677

77-
export const getShowTimeZone = <State extends RootState = RootState>(
78+
export const getShowTimeZone = <State extends RootState>(
7879
store: State
79-
): WorkspaceSettings['showTimeZone'] => getSettings(store).showTimeZone;
80+
): Settings<State>['showTimeZone'] => getSettings(store).showTimeZone;
8081

81-
export const getShowTSeparator = <State extends RootState = RootState>(
82+
export const getShowTSeparator = <State extends RootState>(
8283
store: State
83-
): WorkspaceSettings['showTSeparator'] => getSettings(store).showTSeparator;
84+
): Settings<State>['showTSeparator'] => getSettings(store).showTSeparator;
8485

8586
export const getTruncateNumbersWithPound = <
8687
State extends RootState = RootState
8788
>(
8889
store: State
89-
): WorkspaceSettings['truncateNumbersWithPound'] =>
90+
): Settings<State>['truncateNumbersWithPound'] =>
9091
getSettings(store).truncateNumbersWithPound;
9192

92-
export const getDisableMoveConfirmation = <State extends RootState = RootState>(
93+
export const getDisableMoveConfirmation = <State extends RootState>(
9394
store: State
94-
): WorkspaceSettings['disableMoveConfirmation'] =>
95+
): Settings<State>['disableMoveConfirmation'] =>
9596
getSettings(store).disableMoveConfirmation || false;
9697

97-
export const getShortcutOverrides = <State extends RootState = RootState>(
98+
export const getShortcutOverrides = <State extends RootState>(
9899
store: State
99-
): WorkspaceSettings['shortcutOverrides'] =>
100-
getSettings(store).shortcutOverrides;
100+
): Settings<State>['shortcutOverrides'] => getSettings(store).shortcutOverrides;
101101

102-
export const getDefaultNotebookSettings = <State extends RootState = RootState>(
102+
export const getDefaultNotebookSettings = <State extends RootState>(
103103
store: State
104-
): WorkspaceSettings['defaultNotebookSettings'] =>
104+
): Settings<State>['defaultNotebookSettings'] =>
105105
getSettings(store).defaultNotebookSettings ?? EMPTY_OBJECT;
106106

107-
export const getActiveTool = <State extends RootState = RootState>(
107+
export const getActiveTool = <State extends RootState>(
108108
store: State
109-
): RootState['activeTool'] => store.activeTool;
109+
): State['activeTool'] => store.activeTool;
110110

111-
export const getPlugins = <State extends RootState = RootState>(
111+
export const getPlugins = <State extends RootState>(
112112
store: State
113-
): RootState['plugins'] => store.plugins ?? EMPTY_MAP;
113+
): State['plugins'] => store.plugins ?? EMPTY_MAP;

0 commit comments

Comments
 (0)