Grabbed dndbeyond's source code
``` ~/go/bin/sourcemapper -output ddb -jsurl https://media.dndbeyond.com/character-app/static/js/main.90aa78c5.js ```
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
import { visuallyHidden } from "@mui/utils";
|
||||
import { useDispatch, useSelector } from "react-redux";
|
||||
|
||||
import { AbilitySummary } from "@dndbeyond/character-components/es";
|
||||
import {
|
||||
AbilityManager,
|
||||
characterActions,
|
||||
rulesEngineSelectors,
|
||||
} from "@dndbeyond/character-rules-engine/es";
|
||||
|
||||
import { useSidebar } from "~/contexts/Sidebar";
|
||||
import { useAbilities } from "~/hooks/useAbilities";
|
||||
import { HitPointsBox } from "~/subApps/sheet/components/HitPointsBox/HitPointsBox";
|
||||
import { Inspiration } from "~/subApps/sheet/components/Inspiration";
|
||||
import { PaneComponentEnum } from "~/subApps/sheet/components/Sidebar/types";
|
||||
|
||||
import {
|
||||
appEnvSelectors,
|
||||
characterRollContextSelectors,
|
||||
} from "../../../Shared/selectors";
|
||||
import { PaneIdentifierUtils } from "../../../Shared/utils";
|
||||
import ProficiencyBonusBox from "../../components/ProficiencyBonusBox";
|
||||
import SpeedBox from "../../components/SpeedBox";
|
||||
|
||||
export default function QuickInfo() {
|
||||
const abilities = useAbilities();
|
||||
const dispatch = useDispatch();
|
||||
const {
|
||||
pane: { paneHistoryStart },
|
||||
} = useSidebar();
|
||||
|
||||
const proficiencyBonus = useSelector(
|
||||
rulesEngineSelectors.getProficiencyBonus
|
||||
);
|
||||
const speeds = useSelector(rulesEngineSelectors.getCurrentCarriedWeightSpeed);
|
||||
const preferences = useSelector(rulesEngineSelectors.getCharacterPreferences);
|
||||
const inspiration = useSelector(rulesEngineSelectors.getInspiration);
|
||||
const theme = useSelector(rulesEngineSelectors.getCharacterTheme);
|
||||
const isReadonly = useSelector(appEnvSelectors.getIsReadonly);
|
||||
const ruleData = useSelector(rulesEngineSelectors.getRuleData);
|
||||
const diceEnabled = useSelector(appEnvSelectors.getDiceEnabled);
|
||||
const characterRollContext = useSelector(
|
||||
characterRollContextSelectors.getCharacterRollContext
|
||||
);
|
||||
|
||||
const handleProficiencyBonusClick = (): void => {
|
||||
paneHistoryStart(PaneComponentEnum.PROFICIENCY_BONUS);
|
||||
};
|
||||
|
||||
const handleInspirationLabelClick = (): void => {
|
||||
paneHistoryStart(PaneComponentEnum.INSPIRATION);
|
||||
};
|
||||
|
||||
const handleSpeedsClick = (): void => {
|
||||
paneHistoryStart(PaneComponentEnum.SPEED_MANAGE);
|
||||
};
|
||||
|
||||
const handleToggleInspiration = (): void => {
|
||||
dispatch(characterActions.inspirationSet(!inspiration));
|
||||
};
|
||||
|
||||
const handleAbilitySummaryClick = (ability: AbilityManager): void => {
|
||||
paneHistoryStart(
|
||||
PaneComponentEnum.ABILITY,
|
||||
PaneIdentifierUtils.generateAbility(ability)
|
||||
);
|
||||
};
|
||||
|
||||
let inspirationClasses = ["ct-quick-info__inspiration-status"];
|
||||
if (inspiration) {
|
||||
inspirationClasses.push("ct-quick-info__inspiration-status--active");
|
||||
} else {
|
||||
inspirationClasses.push("ct-quick-info__inspiration-status--inactive");
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="ct-quick-info">
|
||||
<section className="ct-quick-info__abilities">
|
||||
<h2 style={visuallyHidden}>Ability Scores</h2>
|
||||
{abilities.map((ability) => (
|
||||
<div className="ct-quick-info__ability" key={ability.getStatKey()}>
|
||||
<AbilitySummary
|
||||
theme={theme}
|
||||
ability={ability}
|
||||
preferences={preferences}
|
||||
onClick={handleAbilitySummaryClick}
|
||||
diceEnabled={diceEnabled}
|
||||
rollContext={characterRollContext}
|
||||
/>
|
||||
</div>
|
||||
))}
|
||||
</section>
|
||||
<div className="ct-quick-info__box ct-quick-info__box--proficiency">
|
||||
<ProficiencyBonusBox
|
||||
theme={theme}
|
||||
proficiencyBonus={proficiencyBonus}
|
||||
onClick={handleProficiencyBonusClick}
|
||||
/>
|
||||
</div>
|
||||
<div className="ct-quick-info__box ct-quick-info__box--speed">
|
||||
<SpeedBox
|
||||
speeds={speeds}
|
||||
preferences={preferences}
|
||||
theme={theme}
|
||||
ruleData={ruleData}
|
||||
onClick={handleSpeedsClick}
|
||||
/>
|
||||
</div>
|
||||
<section className="ct-quick-info__inspiration">
|
||||
<h2 style={visuallyHidden}>Inspiration</h2>
|
||||
<Inspiration
|
||||
inspiration={!!inspiration}
|
||||
onToggle={handleToggleInspiration}
|
||||
onClick={handleInspirationLabelClick}
|
||||
isInteractive={!isReadonly}
|
||||
/>
|
||||
</section>
|
||||
<section className="ct-quick-info__health">
|
||||
<HitPointsBox />
|
||||
</section>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
import QuickInfo from "./QuickInfo";
|
||||
|
||||
export default QuickInfo;
|
||||
export { QuickInfo };
|
||||
Reference in New Issue
Block a user