Skip to content

Commit

Permalink
Fix updating stack config props. (#231)
Browse files Browse the repository at this point in the history
When some of config props change or new header items are added we need to perform a header update. This diff adds logic to trigger updating header props when that happens.
  • Loading branch information
kmagiera committed Nov 22, 2019
1 parent 0a2336d commit 2c5f95c
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,12 @@ public void onUpdate() {
}
}

private void maybeUpdate() {
if (getParent() != null) {
onUpdate();
}
}

public ScreenStackHeaderSubview getConfigSubview(int index) {
return mConfigSubviews[index];
}
Expand All @@ -220,13 +226,15 @@ public void removeConfigSubview(int index) {
mSubviewsCount--;
}
mConfigSubviews[index] = null;
maybeUpdate();
}

public void addConfigSubview(ScreenStackHeaderSubview child, int index) {
if (mConfigSubviews[index] == null) {
mSubviewsCount++;
}
mConfigSubviews[index] = child;
maybeUpdate();
}

private TextView getTitleTextView() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,12 @@ public boolean needsCustomLayoutForChildren() {
return true;
}

@Override
protected void onAfterUpdateTransaction(ScreenStackHeaderConfig parent) {
super.onAfterUpdateTransaction(parent);
parent.onUpdate();
}

@ReactProp(name = "title")
public void setTitle(ScreenStackHeaderConfig config, String title) {
config.setTitle(title);
Expand Down
2 changes: 2 additions & 0 deletions ios/RNSScreen.m
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ - (void)addSubview:(UIView *)view
{
if (![view isKindOfClass:[RNSScreenStackHeaderConfig class]]) {
[super addSubview:view];
} else {
((RNSScreenStackHeaderConfig*) view).screenView = self;
}
}

Expand Down
4 changes: 4 additions & 0 deletions ios/RNSScreenStackHeaderConfig.h
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
#import <React/RCTViewManager.h>
#import <React/RCTConvert.h>

#import "RNSScreen.h"

@interface RNSScreenStackHeaderConfig : UIView

@property (nonatomic, weak) RNSScreenView *screenView;

@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSString *titleFontFamily;
@property (nonatomic, retain) NSNumber *titleFontSize;
Expand Down
38 changes: 33 additions & 5 deletions ios/RNSScreenStackHeaderConfig.m
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,36 @@ - (void)removeReactSubview:(RNSScreenStackHeaderSubview *)subview
return _reactSubviews;
}

- (UIViewController*)screen
- (UIView *)reactSuperview
{
UIView *superview = self.superview;
if ([superview isKindOfClass:[RNSScreenView class]]) {
return ((RNSScreenView *)superview).controller;
return _screenView;
}

- (void)removeFromSuperview
{
[super removeFromSuperview];
_screenView = nil;
}

- (void)updateViewControllerIfNeeded
{
UIViewController *vc = _screenView.controller;
UINavigationController *nav = (UINavigationController*) vc.parentViewController;
if (vc != nil && nav.visibleViewController == vc) {
[RNSScreenStackHeaderConfig updateViewController:self.screenView.controller withConfig:self];
}
return nil;
}

- (void)didSetProps:(NSArray<NSString *> *)changedProps
{
[super didSetProps:changedProps];
[self updateViewControllerIfNeeded];
}

- (void)didUpdateReactSubviews
{
[super didUpdateReactSubviews];
[self updateViewControllerIfNeeded];
}

+ (void)setAnimatedConfig:(UIViewController *)vc withConfig:(RNSScreenStackHeaderConfig *)config
Expand Down Expand Up @@ -142,6 +165,11 @@ + (void)setTitleAttibutes:(NSDictionary *)attrs forButton:(UIBarButtonItem *)but
}

+ (void)willShowViewController:(UIViewController *)vc withConfig:(RNSScreenStackHeaderConfig *)config
{
[self updateViewController:vc withConfig:config];
}

+ (void)updateViewController:(UIViewController *)vc withConfig:(RNSScreenStackHeaderConfig *)config
{
UINavigationItem *navitem = vc.navigationItem;
UINavigationController *navctr = (UINavigationController *)vc.parentViewController;
Expand Down

0 comments on commit 2c5f95c

Please sign in to comment.