Using Redux to provide application wise slippy context.

This commit is contained in:
vdv committed 2022-09-12 00:45:40 +02:00
1 parent 716d05fb3e
commit 3421686f1f
10 files changed
+400 -137

No files matched your search

+10
View File
@@ -0,0 +1,10 @@
import { configureStore } from '@reduxjs/toolkit';
import slippyReducer from './slippy';
import mouseHandlerReducer from './mouse-handler';
const store = configureStore({
reducer: { slippy: slippyReducer, mouseHandler: mouseHandlerReducer },
});
export default store;
+25
View File
@@ -0,0 +1,25 @@
import { createSlice } from '@reduxjs/toolkit';
const initialMouseState = {
down: false,
starting: { x: -1, y: -1 },
timestamp:0,
};
const mouseHandlerSlice = createSlice({
name: 'mouseHandler',
initialState: initialMouseState,
reducers: {
init(state) {
return initialMouseState;
},
set(state, action) {
return action.payload;
},
},
});
export const mouseHandlerActions = mouseHandlerSlice.actions;
export default mouseHandlerSlice.reducer;
+35
View File
@@ -0,0 +1,35 @@
import { createSlice } from '@reduxjs/toolkit';
import { ViewportState } from '../components/viewport';
const initialSlippyState: ViewportState = {
scale: 1,
translation: { x: 0, y: 0 },
};
const slippySlice = createSlice({
name: 'slippy',
initialState: initialSlippyState,
reducers: {
scale(state, action) {
state.scale = state.scale * action.payload.factor;
state.translation.x =
state.translation.x +
(state.translation.x - action.payload.center.x) *
(action.payload.factor - 1);
state.translation.y =
state.translation.y +
(state.translation.y - action.payload.center.y) *
(action.payload.factor - 1);
},
translate(state, action) {
console.log(`translate: action=${JSON.stringify(action)}`);
state.translation.x = state.translation.x + action.payload.x;
state.translation.y = state.translation.y + action.payload.y;
},
},
});
export const slippyActions = slippySlice.actions;
export default slippySlice.reducer;