import { spring, TransitionMotion } from "@serprex/react-motion"; import React from "react"; import { connect, DispatchProp } from "react-redux"; import { ThemeStyles } from "@dndbeyond/character-components/es"; import { rulesEngineSelectors, DecorationInfo, DecorationUtils, } from "@dndbeyond/character-rules-engine/es"; import { useSidebar } from "~/contexts/Sidebar"; import { SidebarInfo } from "~/contexts/Sidebar/Sidebar"; import { usePositioning } from "~/hooks/usePositioning"; import { Sidebar } from "~/subApps/sheet/components/Sidebar"; import { SidebarPositionInfo } from "~/subApps/sheet/components/Sidebar/types"; import { appEnvSelectors } from "../../../Shared/selectors"; import { AppEnvDimensionsState } from "../../../Shared/stores/typings"; import Subsections from "../../components/Subsections"; import { DESKTOP_LARGE_COMPONENT_START_WIDTH } from "../../config"; import { SheetAppState } from "../../typings"; import BackdropStyles from "../BackdropStyles"; import { CharacterHeaderDesktop } from "../CharacterHeaderDesktop"; import Combat from "../Combat"; import PrimaryBox from "../PrimaryBox"; import ProficiencyGroupsDesktop from "../ProficiencyGroupsDesktop"; import QuickInfo from "../QuickInfo"; import SavingThrowsDesktop from "../SavingThrowsDesktop"; import SensesDesktop from "../SensesDesktop"; import SkillsDesktop from "../SkillsDesktop"; interface Props extends DispatchProp { sidebarInfo: SidebarInfo; sidebarPosition: SidebarPositionInfo; decorationInfo: DecorationInfo; envDimensions: AppEnvDimensionsState; } interface State { swipedAmount: number; } class CharacterSheetDesktop extends React.PureComponent { constructor(props) { super(props); this.state = { swipedAmount: 0, }; } getPositionX = (swipedAmount: number): number => { const { sidebarInfo } = this.props; let position: number = (sidebarInfo.isVisible ? 0 : sidebarInfo.width) + swipedAmount; if (swipedAmount > 0) { return Math.min(sidebarInfo.width, position); } else { return Math.max(0, position); } }; renderContent = (): React.ReactNode => { return ( ); }; renderSmall = (): React.ReactNode => { const { swipedAmount } = this.state; const { sidebarPosition } = this.props; return (
{this.renderContent()} {(interpolatedStyles) => ( {interpolatedStyles.map((config) => ( <> this.setState({ swipedAmount }) } /> ))} )}
); }; renderLarge = (): React.ReactNode => { const { sidebarPosition } = this.props; return (
{this.renderContent()}
); }; renderSheet = (): React.ReactNode => { const { envDimensions } = this.props; if (envDimensions.window.width < DESKTOP_LARGE_COMPONENT_START_WIDTH) { return this.renderSmall(); } return this.renderLarge(); }; render() { const { decorationInfo } = this.props; return ( {this.renderSheet()} ); } } function mapStateToProps(state: SheetAppState) { return { decorationInfo: rulesEngineSelectors.getDecorationInfo(state), envDimensions: appEnvSelectors.getDimensions(state), }; } const CharacterSheetContainer = (props) => { const { sidebar } = useSidebar(); const { getSidebarPositioning } = usePositioning(); return ( ); }; export default connect(mapStateToProps)(CharacterSheetContainer);