Refactor Stage Context to redux #7
@ -4,11 +4,11 @@ import { NotificationProps, NotificationQueueState } from './types'
|
|||||||
|
|
||||||
const initialState: NotificationQueueState = {
|
const initialState: NotificationQueueState = {
|
||||||
currentNotification: undefined,
|
currentNotification: undefined,
|
||||||
queue: []
|
queue: [],
|
||||||
}
|
}
|
||||||
|
|
||||||
export const notificationQueueSlice = createSlice({
|
export const notificationQueueSlice = createSlice({
|
||||||
name: 'propertyList',
|
name: 'notifications',
|
||||||
initialState,
|
initialState,
|
||||||
reducers: {
|
reducers: {
|
||||||
setNotifications: (state, action: PayloadAction<NotificationProps[]>) => {
|
setNotifications: (state, action: PayloadAction<NotificationProps[]>) => {
|
||||||
|
66
frontend/redux/features/stage/stageSlice.ts
Normal file
66
frontend/redux/features/stage/stageSlice.ts
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
import { createSlice } from '@reduxjs/toolkit'
|
||||||
|
import type { PayloadAction } from '@reduxjs/toolkit'
|
||||||
|
import { ContextConnectionPoint, StageState } from './types'
|
||||||
|
|
||||||
|
const maxScale = 4
|
||||||
|
const scaleStep = 0.01
|
||||||
|
|
||||||
|
const initialState: StageState = {
|
||||||
|
size: { width: 1, height: 1 },
|
||||||
|
scale: 1,
|
||||||
|
areAreasVisible: true,
|
||||||
|
areProcessedWordsVisible: true,
|
||||||
|
areTranslatedWordsVisible: false,
|
||||||
|
areLinkAreaContextsVisible: false,
|
||||||
|
isDrawingArea: false,
|
||||||
|
startingContextConnectionPoint: null,
|
||||||
|
}
|
||||||
|
|
||||||
|
export const stageSlice = createSlice({
|
||||||
|
name: 'stage',
|
||||||
|
initialState,
|
||||||
|
reducers: {
|
||||||
|
setSize: (state, action: PayloadAction<{width: number, height: number}>) => {
|
||||||
|
state.size = action.payload
|
||||||
|
},
|
||||||
|
setScale: (state, action: PayloadAction<number>) => {
|
||||||
|
let clampedScale = action.payload
|
||||||
|
|
||||||
|
if (clampedScale > maxScale) clampedScale = maxScale
|
||||||
|
else if (clampedScale < scaleStep) clampedScale = scaleStep
|
||||||
|
|
||||||
|
state.scale = clampedScale
|
||||||
|
},
|
||||||
|
setAreAreasVisible: (state, action: PayloadAction<boolean>) => {
|
||||||
|
state.areAreasVisible = action.payload
|
||||||
|
},
|
||||||
|
setAreProcessedWordsVisible: (state, action: PayloadAction<boolean>) => {
|
||||||
|
state.areProcessedWordsVisible = action.payload
|
||||||
|
},
|
||||||
|
setAreTranslatedWordsVisible: (state, action: PayloadAction<boolean>) => {
|
||||||
|
state.areTranslatedWordsVisible = action.payload
|
||||||
|
},
|
||||||
|
setAreLinkAreaContextsVisible: (state, action: PayloadAction<boolean>) => {
|
||||||
|
state.areLinkAreaContextsVisible = action.payload
|
||||||
|
},
|
||||||
|
setIsDrawingArea: (state, action: PayloadAction<boolean>) => {
|
||||||
|
state.isDrawingArea = action.payload
|
||||||
|
},
|
||||||
|
setStartingContextConnectionPoint: (state, action: PayloadAction<ContextConnectionPoint>) => {
|
||||||
|
state.startingContextConnectionPoint = action.payload
|
||||||
|
},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
export const {
|
||||||
|
setSize,
|
||||||
|
setScale,
|
||||||
|
setAreAreasVisible,
|
||||||
|
setAreProcessedWordsVisible,
|
||||||
|
setAreTranslatedWordsVisible,
|
||||||
|
setAreLinkAreaContextsVisible,
|
||||||
|
setIsDrawingArea,
|
||||||
|
setStartingContextConnectionPoint,
|
||||||
|
} = stageSlice.actions
|
||||||
|
|
||||||
|
export default stageSlice.reducer
|
15
frontend/redux/features/stage/types.ts
Normal file
15
frontend/redux/features/stage/types.ts
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
export type ContextConnectionPoint = {
|
||||||
|
isHead: boolean,
|
||||||
|
areaId: string,
|
||||||
|
}
|
||||||
|
|
||||||
|
export type StageState = {
|
||||||
|
size: { width: number, height: number },
|
||||||
|
scale: number,
|
||||||
|
areAreasVisible: boolean,
|
||||||
|
areProcessedWordsVisible: boolean,
|
||||||
|
areTranslatedWordsVisible: boolean,
|
||||||
|
areLinkAreaContextsVisible: boolean,
|
||||||
|
isDrawingArea: boolean,
|
||||||
|
startingContextConnectionPoint: ContextConnectionPoint | null
|
||||||
|
}
|
@ -1,10 +1,12 @@
|
|||||||
import { configureStore } from '@reduxjs/toolkit'
|
import { configureStore } from '@reduxjs/toolkit'
|
||||||
import notificationQueueSlice from './features/notifications/notificationQueueSlice'
|
|
||||||
import { setupListeners } from '@reduxjs/toolkit/dist/query'
|
import { setupListeners } from '@reduxjs/toolkit/dist/query'
|
||||||
|
import notificationQueueSlice from './features/notifications/notificationQueueSlice'
|
||||||
|
import stageSlice from './features/stage/stageSlice'
|
||||||
|
|
||||||
export const store = configureStore({
|
export const store = configureStore({
|
||||||
reducer: {
|
reducer: {
|
||||||
notificationQueue: notificationQueueSlice,
|
notificationQueue: notificationQueueSlice,
|
||||||
|
stage: stageSlice,
|
||||||
},
|
},
|
||||||
middleware: (getDefaultMiddleware) => getDefaultMiddleware(),
|
middleware: (getDefaultMiddleware) => getDefaultMiddleware(),
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user