Add meme-adding logic
Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
@@ -1,87 +0,0 @@
|
||||
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
|
||||
import { MEME_SORT, SORT_DIRECTION, VIEW } from '../types';
|
||||
import { MEME_TYPE } from '../database';
|
||||
|
||||
interface HomeState {
|
||||
sort: MEME_SORT;
|
||||
sortDirection: SORT_DIRECTION;
|
||||
view: VIEW;
|
||||
favoritesOnly: boolean;
|
||||
filter: MEME_TYPE | undefined;
|
||||
}
|
||||
|
||||
const initialState: HomeState = {
|
||||
sort: MEME_SORT.TITLE,
|
||||
sortDirection: SORT_DIRECTION.ASCENDING,
|
||||
view: VIEW.MASONRY,
|
||||
favoritesOnly: false,
|
||||
filter: undefined,
|
||||
};
|
||||
|
||||
const homeSlice = createSlice({
|
||||
name: 'home',
|
||||
initialState,
|
||||
reducers: {
|
||||
setHomeSort: (state, action: PayloadAction<MEME_SORT>) => {
|
||||
state.sort = action.payload;
|
||||
},
|
||||
setHomeSortDirection: (state, action: PayloadAction<SORT_DIRECTION>) => {
|
||||
state.sortDirection = action.payload;
|
||||
},
|
||||
toggleHomeSortDirection: state => {
|
||||
state.sortDirection ^= 1;
|
||||
},
|
||||
setHomeView: (state, action: PayloadAction<VIEW>) => {
|
||||
state.view = action.payload;
|
||||
},
|
||||
cycleHomeView: state => {
|
||||
switch (state.view) {
|
||||
case VIEW.MASONRY: {
|
||||
state.view = VIEW.GRID;
|
||||
break;
|
||||
}
|
||||
case VIEW.GRID: {
|
||||
state.view = VIEW.LIST;
|
||||
break;
|
||||
}
|
||||
case VIEW.LIST: {
|
||||
state.view = VIEW.MASONRY;
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
setHomeFavoritesOnly: (state, action: PayloadAction<boolean>) => {
|
||||
state.favoritesOnly = action.payload;
|
||||
},
|
||||
toggleHomeFavoritesOnly: state => {
|
||||
state.favoritesOnly = !state.favoritesOnly;
|
||||
},
|
||||
setHomeFilter: (state, action: PayloadAction<MEME_TYPE | undefined>) => {
|
||||
state.filter = action.payload;
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const {
|
||||
setHomeSort,
|
||||
setHomeSortDirection,
|
||||
toggleHomeSortDirection,
|
||||
setHomeView,
|
||||
cycleHomeView,
|
||||
setHomeFavoritesOnly,
|
||||
toggleHomeFavoritesOnly,
|
||||
setHomeFilter,
|
||||
} = homeSlice.actions;
|
||||
|
||||
export {
|
||||
type HomeState,
|
||||
setHomeSort,
|
||||
setHomeSortDirection,
|
||||
toggleHomeSortDirection,
|
||||
setHomeView,
|
||||
cycleHomeView,
|
||||
setHomeFavoritesOnly,
|
||||
toggleHomeFavoritesOnly,
|
||||
setHomeFilter,
|
||||
};
|
||||
export default homeSlice.reducer;
|
@@ -11,20 +11,20 @@ import {
|
||||
} from 'redux-persist';
|
||||
import { createRealmPersistStorage } from '@bankify/redux-persist-realm';
|
||||
import settingsReducer from './settings';
|
||||
import homeReducer from './home';
|
||||
import memesReducer from './memes';
|
||||
import tagsReducer from './tags';
|
||||
import navigationReducer from './navigation';
|
||||
|
||||
const rootReducer = combineReducers({
|
||||
settings: settingsReducer,
|
||||
home: homeReducer,
|
||||
memes: memesReducer,
|
||||
tags: tagsReducer,
|
||||
navigation: navigationReducer,
|
||||
});
|
||||
|
||||
interface RootState {
|
||||
settings: ReturnType<typeof settingsReducer>;
|
||||
home: ReturnType<typeof homeReducer>;
|
||||
memes: ReturnType<typeof memesReducer>;
|
||||
tags: ReturnType<typeof tagsReducer>;
|
||||
navigation: ReturnType<typeof navigationReducer>;
|
||||
}
|
||||
@@ -57,16 +57,16 @@ export {
|
||||
validateSettings,
|
||||
} from './settings';
|
||||
export {
|
||||
type HomeState,
|
||||
setHomeSort,
|
||||
setHomeSortDirection,
|
||||
toggleHomeSortDirection,
|
||||
setHomeView,
|
||||
cycleHomeView,
|
||||
setHomeFavoritesOnly,
|
||||
toggleHomeFavoritesOnly,
|
||||
setHomeFilter,
|
||||
} from './home';
|
||||
type MemesState,
|
||||
setMemesSort,
|
||||
setMemesSortDirection,
|
||||
toggleMemesSortDirection,
|
||||
setMemesView,
|
||||
cycleMemesView,
|
||||
setMemesFavoritesOnly,
|
||||
toggleMemesFavoritesOnly,
|
||||
setMemesFilter,
|
||||
} from './memes';
|
||||
export {
|
||||
type TagsState,
|
||||
setTagsSort,
|
||||
|
83
src/state/memes.ts
Normal file
83
src/state/memes.ts
Normal file
@@ -0,0 +1,83 @@
|
||||
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
|
||||
import { MEME_SORT, SORT_DIRECTION, VIEW } from '../types';
|
||||
import { MEME_TYPE } from '../database';
|
||||
|
||||
interface MemesState {
|
||||
sort: MEME_SORT;
|
||||
sortDirection: SORT_DIRECTION;
|
||||
view: VIEW;
|
||||
favoritesOnly: boolean;
|
||||
filter: MEME_TYPE | undefined;
|
||||
}
|
||||
|
||||
const initialState: MemesState = {
|
||||
sort: MEME_SORT.TITLE,
|
||||
sortDirection: SORT_DIRECTION.ASCENDING,
|
||||
view: VIEW.MASONRY,
|
||||
favoritesOnly: false,
|
||||
filter: undefined,
|
||||
};
|
||||
|
||||
const memesSlice = createSlice({
|
||||
name: 'memes',
|
||||
initialState,
|
||||
reducers: {
|
||||
setMemesSort: (state, action: PayloadAction<MEME_SORT>) => {
|
||||
state.sort = action.payload;
|
||||
},
|
||||
setMemesSortDirection: (state, action: PayloadAction<SORT_DIRECTION>) => {
|
||||
state.sortDirection = action.payload;
|
||||
},
|
||||
toggleMemesSortDirection: state => {
|
||||
state.sortDirection ^= 1;
|
||||
},
|
||||
setMemesView: (state, action: PayloadAction<VIEW>) => {
|
||||
state.view = action.payload;
|
||||
},
|
||||
cycleMemesView: state => {
|
||||
switch (state.view) {
|
||||
case VIEW.MASONRY: {
|
||||
state.view = VIEW.LIST;
|
||||
break;
|
||||
}
|
||||
case VIEW.LIST: {
|
||||
state.view = VIEW.MASONRY;
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
setMemesFavoritesOnly: (state, action: PayloadAction<boolean>) => {
|
||||
state.favoritesOnly = action.payload;
|
||||
},
|
||||
toggleMemesFavoritesOnly: state => {
|
||||
state.favoritesOnly = !state.favoritesOnly;
|
||||
},
|
||||
setMemesFilter: (state, action: PayloadAction<MEME_TYPE | undefined>) => {
|
||||
state.filter = action.payload;
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const {
|
||||
setMemesSort,
|
||||
setMemesSortDirection,
|
||||
toggleMemesSortDirection,
|
||||
setMemesView,
|
||||
cycleMemesView,
|
||||
setMemesFavoritesOnly,
|
||||
toggleMemesFavoritesOnly,
|
||||
setMemesFilter,
|
||||
} = memesSlice.actions;
|
||||
|
||||
export {
|
||||
type MemesState,
|
||||
setMemesSort,
|
||||
setMemesSortDirection,
|
||||
toggleMemesSortDirection,
|
||||
setMemesView,
|
||||
cycleMemesView,
|
||||
setMemesFavoritesOnly,
|
||||
toggleMemesFavoritesOnly,
|
||||
setMemesFilter,
|
||||
};
|
||||
export default memesSlice.reducer;
|
Reference in New Issue
Block a user