feat: inform whether screen is opening/closing in onTransition callbacks (#169)

This commit is contained in:
Tomasz Czajęcki
2019-07-26 13:24:30 +02:00
parent 5c2825c7bc
commit d619da7978
3 changed files with 17 additions and 11 deletions

View File

@@ -107,8 +107,8 @@ export type NavigationStackOptions = HeaderOptions &
vertical?: number;
horizontal?: number;
};
onTransitionStart?: () => void;
onTransitionEnd?: () => void;
onTransitionStart?: (closing: boolean) => void;
onTransitionEnd?: (closing: boolean) => void;
};
export type NavigationStackConfig = {

View File

@@ -254,21 +254,27 @@ export default class Stack extends React.Component<Props, State> {
}));
};
private handleTransitionStart = ({ route }: { route: Route }) => {
private handleTransitionStart = (
{ route }: { route: Route },
closing: boolean
) => {
const { descriptors } = this.props;
const descriptor = descriptors[route.key];
descriptor &&
descriptor.options.onTransitionStart &&
descriptor.options.onTransitionStart();
descriptor.options.onTransitionStart(closing);
};
private handleTransitionEnd = ({ route }: { route: Route }) => {
private handleTransitionEnd = (
{ route }: { route: Route },
closing: boolean
) => {
const descriptor = this.props.descriptors[route.key];
descriptor &&
descriptor.options.onTransitionEnd &&
descriptor.options.onTransitionEnd();
descriptor.options.onTransitionEnd(closing);
};
render() {

View File

@@ -33,8 +33,8 @@ type Props = TransitionPreset & {
onOpenRoute: (props: { route: Route }) => void;
onCloseRoute: (props: { route: Route }) => void;
onGoBack: (props: { route: Route }) => void;
onTransitionStart?: (props: { route: Route }) => void;
onTransitionEnd?: (props: { route: Route }) => void;
onTransitionStart?: (props: { route: Route }, closing: boolean) => void;
onTransitionEnd?: (props: { route: Route }, closing: boolean) => void;
onPageChangeStart?: () => void;
onPageChangeConfirm?: () => void;
onPageChangeCancel?: () => void;
@@ -52,14 +52,14 @@ export default class StackItem extends React.PureComponent<Props> {
private handleOpen = () => {
const { scene, onTransitionEnd, onOpenRoute } = this.props;
onTransitionEnd && onTransitionEnd({ route: scene.route });
onTransitionEnd && onTransitionEnd({ route: scene.route }, false);
onOpenRoute({ route: scene.route });
};
private handleClose = () => {
const { scene, onTransitionEnd, onCloseRoute } = this.props;
onTransitionEnd && onTransitionEnd({ route: scene.route });
onTransitionEnd && onTransitionEnd({ route: scene.route }, true);
onCloseRoute({ route: scene.route });
};
@@ -78,7 +78,7 @@ export default class StackItem extends React.PureComponent<Props> {
onPageChangeCancel && onPageChangeCancel();
}
onTransitionStart && onTransitionStart({ route: scene.route });
onTransitionStart && onTransitionStart({ route: scene.route }, closing);
closing && onGoBack({ route: scene.route });
};