New source found from dndbeyond.com

This commit is contained in:
2026-07-08 01:00:09 -07:00
parent 9a983a6d7b
commit dcefa0d2f2
2865 changed files with 222467 additions and 49053 deletions
@@ -0,0 +1,76 @@
import { createContext, useContext, useEffect, useState } from "react";
import { RuleData } from "@dndbeyond/character-rules-engine/es";
import {
getUserPreferences,
updateUserPreferences,
getRulesData,
} from "~/helpers/characterServiceApi";
import PreferenceUpdateLocation from "~/tools/js/Shared/constants/PreferenceUpdateLocation";
import { UserPreferences } from "~/types";
interface UserPreferencesContextProps extends UserPreferences {
updatePreferences: (updated: UserPreferences) => void;
ruleData: RuleData | null;
}
const initialValue = {
abilityScoreDisplayType: 2,
privacyType: 2,
isDarkModeEnabled: false,
isDiceRollingEnabled: true,
updateLocation: PreferenceUpdateLocation.CharacterBuilder,
updatePreferences: () => {},
ruleData: null,
defaultEnabledSourceCategories: {},
isHomebrewEnabled: true,
};
export const UserPreferencesContext =
createContext<UserPreferencesContextProps>(initialValue);
export const UserPreferencesProvider = ({ children }) => {
const [preferences, setPreferences] = useState(initialValue);
const [isLoaded, setIsLoaded] = useState(false);
const [ruleData, setRuleData] = useState(null);
const updatePreferences = (updated: UserPreferences) => {
setPreferences((prev) => {
return { ...prev, ...updated };
});
};
const getPreferences = async () => {
const userPreferences = await getUserPreferences();
const userPreferencesJSON = await userPreferences.json();
const rulesData = await getRulesData();
const rulesDataJSON = await rulesData.json();
setRuleData(rulesDataJSON.data);
updatePreferences(userPreferencesJSON.data);
setIsLoaded(true);
};
useEffect(() => {
getPreferences();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
useEffect(() => {
if (isLoaded) {
updateUserPreferences(preferences);
}
}, [preferences]);
return (
<UserPreferencesContext.Provider
value={{ ...preferences, updatePreferences, ruleData }}
>
{children}
</UserPreferencesContext.Provider>
);
};
export const useUserPreferences = () => useContext(UserPreferencesContext);