Add tag sorting

Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
2023-07-15 13:09:53 +03:00
parent 1e36e01ea1
commit de44828434
13 changed files with 312 additions and 98 deletions

View File

@@ -1,9 +1,9 @@
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
import { SORT, SORT_DIRECTION, VIEW } from '../types';
import { HOME_SORT, SORT_DIRECTION, VIEW } from '../types';
import { MEME_TYPE } from '../database';
interface HomeState {
sort: SORT;
sort: HOME_SORT;
sortDirection: SORT_DIRECTION;
view: VIEW;
favoritesOnly: boolean;
@@ -11,7 +11,7 @@ interface HomeState {
}
const initialState: HomeState = {
sort: SORT.TITLE,
sort: HOME_SORT.TITLE,
sortDirection: SORT_DIRECTION.ASCENDING,
view: VIEW.MASONRY,
favoritesOnly: false,
@@ -22,19 +22,19 @@ const homeSlice = createSlice({
name: 'home',
initialState,
reducers: {
setSort: (state, action: PayloadAction<SORT>) => {
setHomeSort: (state, action: PayloadAction<HOME_SORT>) => {
state.sort = action.payload;
},
setSortDirection: (state, action: PayloadAction<SORT_DIRECTION>) => {
setHomeSortDirection: (state, action: PayloadAction<SORT_DIRECTION>) => {
state.sortDirection = action.payload;
},
toggleSortDirection: state => {
toggleHomeSortDirection: state => {
state.sortDirection ^= 1;
},
setView: (state, action: PayloadAction<VIEW>) => {
setHomeView: (state, action: PayloadAction<VIEW>) => {
state.view = action.payload;
},
cycleView: state => {
cycleHomeView: state => {
switch (state.view) {
case VIEW.MASONRY: {
state.view = VIEW.GRID;
@@ -50,38 +50,38 @@ const homeSlice = createSlice({
}
}
},
setFavoritesOnly: (state, action: PayloadAction<boolean>) => {
setHomeFavoritesOnly: (state, action: PayloadAction<boolean>) => {
state.favoritesOnly = action.payload;
},
toggleFavoritesOnly: state => {
toggleHomeFavoritesOnly: state => {
state.favoritesOnly = !state.favoritesOnly;
},
setFilter: (state, action: PayloadAction<MEME_TYPE | undefined>) => {
setHomeFilter: (state, action: PayloadAction<MEME_TYPE | undefined>) => {
state.filter = action.payload;
},
},
});
const {
setSort,
setSortDirection,
toggleSortDirection,
setView,
cycleView,
setFavoritesOnly,
toggleFavoritesOnly,
setFilter,
setHomeSort,
setHomeSortDirection,
toggleHomeSortDirection,
setHomeView,
cycleHomeView,
setHomeFavoritesOnly,
toggleHomeFavoritesOnly,
setHomeFilter,
} = homeSlice.actions;
export {
type HomeState,
setSort,
setSortDirection,
toggleSortDirection,
setView,
cycleView,
setFavoritesOnly,
toggleFavoritesOnly,
setFilter,
setHomeSort,
setHomeSortDirection,
toggleHomeSortDirection,
setHomeView,
cycleHomeView,
setHomeFavoritesOnly,
toggleHomeFavoritesOnly,
setHomeFilter,
};
export default homeSlice.reducer;

View File

@@ -12,15 +12,18 @@ import {
import { createRealmPersistStorage } from '@bankify/redux-persist-realm';
import settingsReducer from './settings';
import homeReducer from './home';
import tagsReducer from './tags';
const rootReducer = combineReducers({
settings: settingsReducer,
home: homeReducer,
tags: tagsReducer,
});
interface RootState {
settings: ReturnType<typeof settingsReducer>;
home: ReturnType<typeof homeReducer>;
tags: ReturnType<typeof tagsReducer>;
}
const persistConfig = {
@@ -51,12 +54,18 @@ export {
} from './settings';
export {
type HomeState,
setSort,
setSortDirection,
toggleSortDirection,
setView,
cycleView,
setFavoritesOnly,
toggleFavoritesOnly,
setFilter,
setHomeSort,
setHomeSortDirection,
toggleHomeSortDirection,
setHomeView,
cycleHomeView,
setHomeFavoritesOnly,
toggleHomeFavoritesOnly,
setHomeFilter,
} from './home';
export {
type TagsState,
setTagsSort,
setTagsSortDirection,
toggleTagsSortDirection,
} from './tags';

39
src/state/tags.ts Normal file
View File

@@ -0,0 +1,39 @@
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
import { TAG_SORT, SORT_DIRECTION } from '../types';
interface TagsState {
sort: TAG_SORT;
sortDirection: SORT_DIRECTION;
}
const initialState: TagsState = {
sort: TAG_SORT.NAME,
sortDirection: SORT_DIRECTION.DESCENDING,
};
const tagsSlice = createSlice({
name: 'tags',
initialState,
reducers: {
setTagsSort: (state, action: PayloadAction<TAG_SORT>) => {
state.sort = action.payload;
},
setTagsSortDirection: (state, action: PayloadAction<SORT_DIRECTION>) => {
state.sortDirection = action.payload;
},
toggleTagsSortDirection: state => {
state.sortDirection ^= 1;
},
},
});
const { setTagsSort, setTagsSortDirection, toggleTagsSortDirection } =
tagsSlice.actions;
export {
type TagsState,
setTagsSort,
setTagsSortDirection,
toggleTagsSortDirection,
};
export default tagsSlice.reducer;