network-resurrector/src/providers/SensitiveInfoProvider.js

59 lines
1.3 KiB
JavaScript
Raw Normal View History

2023-03-05 00:49:07 +02:00
import React, { useReducer, useMemo, useContext } from "react";
import PropTypes from "prop-types";
const SensitiveInfoContext = React.createContext();
const initialState = {
enabled: false
};
const reducer = (state = initialState, action) => {
switch (action.type) {
case "onSensitiveInfoEnabled": {
return {
...state,
enabled: action.payload.enabled
};
}
default: {
return state;
}
}
};
const dispatchActions = dispatch => ({
onSensitiveInfoEnabled: enabled =>
dispatch({ type: "onSensitiveInfoEnabled", payload: { enabled } })
});
const useSensitiveInfo = () => {
const { state, actions } = useContext(SensitiveInfoContext);
const { enabled } = state;
const { onSensitiveInfoEnabled } = actions;
return { enabled, onSensitiveInfoEnabled };
};
const SensitiveInfoProvider = ({ children }) => {
const [state, dispatch] = useReducer(reducer, initialState);
const actions = useMemo(() => dispatchActions(dispatch), [dispatch]);
return (
<SensitiveInfoContext.Provider
value={{
state,
actions
}}
>
{children}
</SensitiveInfoContext.Provider>
);
};
SensitiveInfoProvider.propTypes = {
children: PropTypes.node.isRequired
};
export { SensitiveInfoProvider, useSensitiveInfo };
export default SensitiveInfoProvider;