import React, { type ReactElement, useMemo } from "react";
import { View } from "react-native";
import { useStyles } from "./FormBody.style";
import { useScreenInformation } from "../../hooks/useScreenInformation";
import type { FormActionBarProps } from "../FormActionBar";
import { FormActionBar } from "../FormActionBar";
import { tokens } from "../../../utils/design";
interface FormBodyProps extends FormActionBarProps {
readonly children: ReactElement;
readonly shouldRenderActionBar?: boolean;
readonly saveButtonOffset?: number;
}
export function FormBody({
isFormSubmitting,
submit,
keyboardHeight,
children,
saveButtonLabel,
renderStickySection,
shouldRenderActionBar = true,
secondaryActions,
setSecondaryActionLoading,
setSaveButtonHeight,
saveButtonOffset,
}: FormBodyProps) {
const paddingBottom = useBottomPadding();
const fullViewPadding = useMemo(() => ({ paddingBottom }), [paddingBottom]);
const styles = useStyles();
return (
<>
{children}
{shouldRenderActionBar && (
)}
{shouldRenderActionBar && !saveButtonOffset && (
)}
>
);
}
export function useBottomPadding(): number {
const { insets } = useScreenInformation();
const extraBottomSpace = insets.bottom - tokens["space-base"];
return extraBottomSpace >= 0 ? extraBottomSpace : 0;
}