2023-05-20 12:00:15 +00:00
|
|
|
import React, { createContext, useState } from "react";
|
|
|
|
// types
|
|
|
|
import { ChartContextData, ChartContextActionPayload, ChartContextReducer } from "../types";
|
|
|
|
// data
|
|
|
|
import { allViewsWithData, currentViewDataWithView } from "../data";
|
|
|
|
|
|
|
|
export const ChartContext = createContext<ChartContextReducer | undefined>(undefined);
|
|
|
|
|
|
|
|
const chartReducer = (
|
|
|
|
state: ChartContextData,
|
|
|
|
action: ChartContextActionPayload
|
|
|
|
): ChartContextData => {
|
|
|
|
switch (action.type) {
|
|
|
|
case "CURRENT_VIEW":
|
|
|
|
return { ...state, currentView: action.payload };
|
|
|
|
case "CURRENT_VIEW_DATA":
|
|
|
|
return { ...state, currentViewData: action.payload };
|
|
|
|
case "RENDER_VIEW":
|
|
|
|
return { ...state, currentViewData: action.payload };
|
|
|
|
case "PARTIAL_UPDATE":
|
|
|
|
return { ...state, ...action.payload };
|
|
|
|
default:
|
|
|
|
return state;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
const initialView = "month";
|
|
|
|
|
|
|
|
export const ChartContextProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
|
|
|
|
const [state, dispatch] = useState<ChartContextData>({
|
|
|
|
currentView: initialView,
|
|
|
|
currentViewData: currentViewDataWithView(initialView),
|
|
|
|
renderView: [],
|
|
|
|
allViews: allViewsWithData,
|
2023-08-28 07:55:47 +00:00
|
|
|
activeBlock: null,
|
2023-05-20 12:00:15 +00:00
|
|
|
});
|
|
|
|
|
2023-08-28 07:55:47 +00:00
|
|
|
const [scrollLeft, setScrollLeft] = useState(0);
|
|
|
|
|
2023-05-20 12:00:15 +00:00
|
|
|
const handleDispatch = (action: ChartContextActionPayload): ChartContextData => {
|
|
|
|
const newState = chartReducer(state, action);
|
2023-08-28 07:55:47 +00:00
|
|
|
|
2023-05-20 12:00:15 +00:00
|
|
|
dispatch(() => newState);
|
2023-08-28 07:55:47 +00:00
|
|
|
|
2023-05-20 12:00:15 +00:00
|
|
|
return newState;
|
|
|
|
};
|
|
|
|
|
2023-08-28 07:55:47 +00:00
|
|
|
const updateScrollLeft = (scrollLeft: number) => {
|
|
|
|
setScrollLeft(scrollLeft);
|
|
|
|
};
|
|
|
|
|
2023-05-20 12:00:15 +00:00
|
|
|
return (
|
2023-08-28 07:55:47 +00:00
|
|
|
<ChartContext.Provider
|
|
|
|
value={{ ...state, scrollLeft, updateScrollLeft, dispatch: handleDispatch }}
|
|
|
|
>
|
2023-05-20 12:00:15 +00:00
|
|
|
{children}
|
|
|
|
</ChartContext.Provider>
|
|
|
|
);
|
|
|
|
};
|