This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
3.3 KiB
122 lines
3.3 KiB
/** |
|
* Copyright (c) 2015-present, Facebook, Inc. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
|
|
#import "RCTModalHostViewManager.h" |
|
|
|
#import "RCTBridge.h" |
|
#import "RCTModalHostView.h" |
|
#import "RCTModalHostViewController.h" |
|
#import "RCTModalManager.h" |
|
#import "RCTShadowView.h" |
|
#import "RCTUtils.h" |
|
|
|
@implementation RCTConvert (RCTModalHostView) |
|
|
|
RCT_ENUM_CONVERTER(UIModalPresentationStyle, (@{ |
|
@"fullScreen": @(UIModalPresentationFullScreen), |
|
#if !TARGET_OS_TV |
|
@"pageSheet": @(UIModalPresentationPageSheet), |
|
@"formSheet": @(UIModalPresentationFormSheet), |
|
#endif |
|
@"overFullScreen": @(UIModalPresentationOverFullScreen), |
|
}), UIModalPresentationFullScreen, integerValue) |
|
|
|
@end |
|
|
|
@interface RCTModalHostShadowView : RCTShadowView |
|
|
|
@end |
|
|
|
@implementation RCTModalHostShadowView |
|
|
|
- (void)insertReactSubview:(id<RCTComponent>)subview atIndex:(NSInteger)atIndex |
|
{ |
|
[super insertReactSubview:subview atIndex:atIndex]; |
|
if ([subview isKindOfClass:[RCTShadowView class]]) { |
|
((RCTShadowView *)subview).size = RCTScreenSize(); |
|
} |
|
} |
|
|
|
@end |
|
|
|
@interface RCTModalHostViewManager () <RCTModalHostViewInteractor> |
|
|
|
@end |
|
|
|
@implementation RCTModalHostViewManager |
|
{ |
|
NSHashTable *_hostViews; |
|
} |
|
|
|
RCT_EXPORT_MODULE() |
|
|
|
- (UIView *)view |
|
{ |
|
RCTModalHostView *view = [[RCTModalHostView alloc] initWithBridge:self.bridge]; |
|
view.delegate = self; |
|
if (!_hostViews) { |
|
_hostViews = [NSHashTable weakObjectsHashTable]; |
|
} |
|
[_hostViews addObject:view]; |
|
return view; |
|
} |
|
|
|
- (void)presentModalHostView:(RCTModalHostView *)modalHostView withViewController:(RCTModalHostViewController *)viewController animated:(BOOL)animated |
|
{ |
|
dispatch_block_t completionBlock = ^{ |
|
if (modalHostView.onShow) { |
|
modalHostView.onShow(nil); |
|
} |
|
}; |
|
if (_presentationBlock) { |
|
_presentationBlock([modalHostView reactViewController], viewController, animated, completionBlock); |
|
} else { |
|
[[modalHostView reactViewController] presentViewController:viewController animated:animated completion:completionBlock]; |
|
} |
|
} |
|
|
|
- (void)dismissModalHostView:(RCTModalHostView *)modalHostView withViewController:(RCTModalHostViewController *)viewController animated:(BOOL)animated |
|
{ |
|
dispatch_block_t completionBlock = ^{ |
|
if (modalHostView.identifier) { |
|
[[self.bridge moduleForClass:[RCTModalManager class]] modalDismissed:modalHostView.identifier]; |
|
} |
|
}; |
|
if (_dismissalBlock) { |
|
_dismissalBlock([modalHostView reactViewController], viewController, animated, completionBlock); |
|
} else { |
|
[viewController dismissViewControllerAnimated:animated completion:completionBlock]; |
|
} |
|
} |
|
|
|
|
|
- (RCTShadowView *)shadowView |
|
{ |
|
return [RCTModalHostShadowView new]; |
|
} |
|
|
|
- (void)invalidate |
|
{ |
|
for (RCTModalHostView *hostView in _hostViews) { |
|
[hostView invalidate]; |
|
} |
|
[_hostViews removeAllObjects]; |
|
} |
|
|
|
RCT_EXPORT_VIEW_PROPERTY(animationType, NSString) |
|
RCT_EXPORT_VIEW_PROPERTY(presentationStyle, UIModalPresentationStyle) |
|
RCT_EXPORT_VIEW_PROPERTY(transparent, BOOL) |
|
RCT_EXPORT_VIEW_PROPERTY(onShow, RCTDirectEventBlock) |
|
RCT_EXPORT_VIEW_PROPERTY(identifier, NSNumber) |
|
RCT_EXPORT_VIEW_PROPERTY(supportedOrientations, NSArray) |
|
RCT_EXPORT_VIEW_PROPERTY(onOrientationChange, RCTDirectEventBlock) |
|
|
|
#if TARGET_OS_TV |
|
RCT_EXPORT_VIEW_PROPERTY(onRequestClose, RCTDirectEventBlock) |
|
#endif |
|
|
|
@end
|
|
|