scrabble-solver
Version:
Scrabble Solver 2 - Free, open-source, cross-platform, multi-language analysis tool for Scrabble, Scrabble Duel, Super Scrabble, Letter League, Literaki, and Kelimelik. Quickly find the top-scoring words using the given board and tiles.
56 lines (45 loc) • 1.6 kB
text/typescript
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
import { Result } from '@scrabble-solver/types';
import { ResultColumnId, SortDirection } from 'types';
import { resultsInitialState } from './resultsInitialState';
const toggleDirection = (direction: SortDirection): SortDirection => {
return direction === SortDirection.Ascending ? SortDirection.Descending : SortDirection.Ascending;
};
export const resultsSlice = createSlice({
initialState: resultsInitialState,
name: 'results',
reducers: {
applyResult: (_state, _action: PayloadAction<Result>) => {
return resultsInitialState;
},
changeQuery: (state, action: PayloadAction<string>) => {
const newQuery = action.payload;
return { ...state, query: newQuery };
},
changeResultCandidate: (state, action: PayloadAction<Result | null>) => {
const candidate = action.payload;
return { ...state, candidate };
},
changeResults: (state, action: PayloadAction<Result[]>) => {
const newResults = action.payload;
return {
...state,
candidate: resultsInitialState.candidate,
query: resultsInitialState.query,
results: newResults,
};
},
sort: (state, action: PayloadAction<ResultColumnId>) => {
const columndId = action.payload;
const { column, direction } = state.sort;
return {
...state,
sort: {
column: columndId,
direction: column === columndId ? toggleDirection(direction) : direction,
},
};
},
reset: () => resultsInitialState,
},
});