Skip to content

Commit

Permalink
⭐️ Impl: Sheet-Related Props
Browse files Browse the repository at this point in the history
Related:
* `TODO:2023-04-20-23-58-24` - Impl. sheet-related props.
* `TODO:2023-04-21-23-23-32` - Impl. prop `sheetPrefersScrollingExpandsWhenScrolledToEdge`.
* `TODO:2023-04-21-23-25-35` - Impl. prop `sheetPrefersEdgeAttachedInCompactHeight`.
* `TODO:2023-04-21-23-25-47` - Impl. prop `sheetWidthFollowsPreferredContentSizeWhenEdgeAttached`.
* `TODO:2023-04-21-23-26-03` - Impl. prop `sheetPrefersGrabberVisible`.

Summary: Impl. sheet-related bool props.
  • Loading branch information
dominicstop committed Apr 21, 2023
1 parent 47465ba commit 9353b1b
Show file tree
Hide file tree
Showing 5 changed files with 90 additions and 7 deletions.
70 changes: 65 additions & 5 deletions ios/src_library/React Native/RNIModalView/RNIModalView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,47 @@ public class RNIModalView:

@objc var modalSheetDetents: NSArray?;

@objc var sheetPrefersScrollingExpandsWhenScrolledToEdge: Bool = true {
willSet {
guard #available(iOS 15.0, *),
let sheetController = self.sheetPresentationController
else { return };

sheetController.prefersScrollingExpandsWhenScrolledToEdge = newValue;
}
};

@objc var sheetPrefersEdgeAttachedInCompactHeight: Bool = false {
willSet {
guard #available(iOS 15.0, *),
let sheetController = self.sheetPresentationController
else { return };

sheetController.prefersEdgeAttachedInCompactHeight = newValue;
}
};

@objc var sheetWidthFollowsPreferredContentSizeWhenEdgeAttached: Bool = false {
willSet {
guard #available(iOS 15.0, *),
let sheetController = self.sheetPresentationController
else { return };

sheetController
.widthFollowsPreferredContentSizeWhenEdgeAttached = newValue;
}
};

@objc var sheetPrefersGrabberVisible: Bool = false {
willSet {
guard #available(iOS 15.0, *),
let sheetController = self.sheetPresentationController
else { return };

sheetController.prefersGrabberVisible = newValue;
}
};

// MARK: - Properties: Synthesized From Props
// ------------------------------------------

Expand Down Expand Up @@ -445,6 +486,29 @@ public class RNIModalView:
};
};

@available(iOS 15.0, *)
private func applyModalSheetProps(
to sheetController: UISheetPresentationController
){

if let detents = self.synthesizedModalSheetDetents,
detents.count >= 1 {

sheetController.detents = detents;
};

sheetController.prefersScrollingExpandsWhenScrolledToEdge =
self.sheetPrefersScrollingExpandsWhenScrolledToEdge;

sheetController.prefersEdgeAttachedInCompactHeight =
self.sheetPrefersEdgeAttachedInCompactHeight;

sheetController.widthFollowsPreferredContentSizeWhenEdgeAttached =
self.sheetWidthFollowsPreferredContentSizeWhenEdgeAttached;

sheetController.prefersGrabberVisible = self.sheetPrefersGrabberVisible;
};

// MARK: - Functions - Public
// --------------------------

Expand Down Expand Up @@ -528,11 +592,7 @@ public class RNIModalView:
if #available(iOS 15.0, *),
let sheetController = self.sheetPresentationController {

if let detents = self.synthesizedModalSheetDetents,
detents.count >= 1 {

sheetController.detents = detents;
};
self.applyModalSheetProps(to: sheetController);
};

#if DEBUG
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,5 +57,10 @@ @interface RCT_EXTERN_MODULE(RNIModalViewManager, RCTViewManager)

RCT_EXPORT_VIEW_PROPERTY(modalSheetDetents, NSArray);

RCT_EXPORT_VIEW_PROPERTY(sheetPrefersScrollingExpandsWhenScrolledToEdge, BOOL);
RCT_EXPORT_VIEW_PROPERTY(sheetPrefersEdgeAttachedInCompactHeight, BOOL);
RCT_EXPORT_VIEW_PROPERTY(sheetWidthFollowsPreferredContentSizeWhenEdgeAttached, BOOL);
RCT_EXPORT_VIEW_PROPERTY(sheetPrefersGrabberVisible, BOOL);

@end

13 changes: 11 additions & 2 deletions src/components/ModalView/ModalView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,10 @@ export class ModalView extends

// Native Props - Sheet-Related
modalSheetDetents,
sheetPrefersScrollingExpandsWhenScrolledToEdge,
sheetPrefersEdgeAttachedInCompactHeight,
sheetWidthFollowsPreferredContentSizeWhenEdgeAttached,
sheetPrefersGrabberVisible,

// Native Props - Events
onModalWillPresent,
Expand Down Expand Up @@ -181,9 +185,15 @@ export class ModalView extends
),

// B - Pass down...
containerStyle,
modalID,
allowModalForceDismiss,
modalBGBlurEffectStyle,
modalSheetDetents,
sheetPrefersScrollingExpandsWhenScrolledToEdge,
sheetPrefersEdgeAttachedInCompactHeight,
sheetWidthFollowsPreferredContentSizeWhenEdgeAttached,
sheetPrefersGrabberVisible,
onModalWillPresent,
onModalDidPresent,
onModalWillDismiss,
Expand All @@ -199,8 +209,7 @@ export class ModalView extends
onPresentationControllerWillDismiss,
onPresentationControllerDidDismiss,
onPresentationControllerDidAttemptToDismiss,
containerStyle,
modalSheetDetents,


// C - View-Related Props
children,
Expand Down
4 changes: 4 additions & 0 deletions src/components/ModalView/ModalViewTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ export type ModalViewBaseProps = Partial<

// Props - Sheet-Related
| 'modalSheetDetents'
| 'sheetPrefersScrollingExpandsWhenScrolledToEdge'
| 'sheetPrefersEdgeAttachedInCompactHeight'
| 'sheetWidthFollowsPreferredContentSizeWhenEdgeAttached'
| 'sheetPrefersGrabberVisible'

// props - events
| 'onModalWillPresent'
Expand Down
5 changes: 5 additions & 0 deletions src/native_components/RNIModalView/RNIModalViewTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,11 @@ export type RNIModalViewBaseProps = {
TUISheetPresentationControllerDetents | RNIModalCustomSheetDetent
>;

sheetPrefersScrollingExpandsWhenScrolledToEdge?: boolean;
sheetPrefersEdgeAttachedInCompactHeight?: boolean;
sheetWidthFollowsPreferredContentSizeWhenEdgeAttached?: boolean;
sheetPrefersGrabberVisible?: boolean;

// Props - Events
// --------------

Expand Down

0 comments on commit 9353b1b

Please sign in to comment.