Skip to content

Commit ea40cc1

Browse files
committed
Sending picker size to shadow node
1 parent 081cf8f commit ea40cc1

File tree

7 files changed

+224
-41
lines changed

7 files changed

+224
-41
lines changed

RNDateTimePicker.podspec

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Pod::Spec.new do |s|
1414
s.homepage = package['homepage']
1515
s.platform = :ios, "11.0"
1616
s.source = { :git => "https://github.com/react-native-community/datetimepicker", :tag => "v#{s.version}" }
17-
s.source_files = "ios/**/*.{h,m,mm}"
17+
s.source_files = "ios/**/*.{h,m,mm,cpp}"
1818
s.requires_arc = true
1919

2020
if fabric_enabled
@@ -33,6 +33,13 @@ Pod::Spec.new do |s|
3333
s.dependency "RCTRequired"
3434
s.dependency "RCTTypeSafety"
3535
s.dependency "ReactCommon/turbomodule/core"
36+
37+
s.subspec "cpp" do |ss|
38+
ss.source_files = "cpp/**/*.{cpp,h}"
39+
ss.header_dir = "rndatetimepicker"
40+
ss.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/cpp\"" }
41+
end
42+
3643
else
3744
s.exclude_files = "ios/fabric"
3845

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
2+
/**
3+
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4+
*
5+
* Do not edit this file as changes may cause incorrect behavior and will be lost
6+
* once the code is regenerated.
7+
*
8+
* @generated by codegen project: GenerateComponentDescriptorH.js
9+
*/
10+
11+
#pragma once
12+
13+
#include "ShadowNodes.h"
14+
#include <react/renderer/core/ConcreteComponentDescriptor.h>
15+
16+
namespace facebook {
17+
namespace react {
18+
19+
class RNDateTimePickerComponentDescriptor final : public ConcreteComponentDescriptor<RNDateTimePickerShadowNode> {
20+
public:
21+
using ConcreteComponentDescriptor::ConcreteComponentDescriptor;
22+
23+
void adopt(ShadowNode::Unshared const &shadowNode) const override {
24+
react_native_assert(std::dynamic_pointer_cast<RNDateTimePickerShadowNode>(shadowNode));
25+
auto pickerShadowNode = std::static_pointer_cast<RNDateTimePickerShadowNode>(shadowNode);
26+
27+
react_native_assert(
28+
std::dynamic_pointer_cast<YogaLayoutableShadowNode>(pickerShadowNode));
29+
auto layoutableShadowNode =
30+
std::static_pointer_cast<YogaLayoutableShadowNode>(pickerShadowNode);
31+
32+
auto state = std::static_pointer_cast<const RNDateTimePickerShadowNode::ConcreteState>(shadowNode->getState());
33+
auto stateData = state->getData();
34+
35+
if(stateData.frameSize.width != 0 && stateData.frameSize.height != 0) {
36+
layoutableShadowNode->setSize(Size{stateData.frameSize.width, stateData.frameSize.height});
37+
}
38+
39+
ConcreteComponentDescriptor::adopt(shadowNode);
40+
}
41+
};
42+
43+
} // namespace react
44+
} // namespace facebook
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#include "RNDateTimePickerState.h"
2+
3+
namespace facebook {
4+
namespace react {
5+
6+
} // namespace react
7+
} // namespace facebook
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#pragma once
2+
3+
#include <react/renderer/graphics/Geometry.h>
4+
5+
namespace facebook {
6+
namespace react {
7+
8+
class RNDateTimePickerState final {
9+
public:
10+
using Shared = std::shared_ptr<const RNDateTimePickerState>;
11+
RNDateTimePickerState(){};
12+
RNDateTimePickerState(Size frameSize_) : frameSize(frameSize_){};
13+
14+
Size frameSize{};
15+
};
16+
17+
} // namespace react
18+
} // namespace facebook
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
2+
/**
3+
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4+
*
5+
* Do not edit this file as changes may cause incorrect behavior and will be lost
6+
* once the code is regenerated.
7+
*
8+
* @generated by codegen project: GenerateShadowNodeCpp.js
9+
*/
10+
11+
#include "ShadowNodes.h"
12+
13+
namespace facebook {
14+
namespace react {
15+
16+
extern const char RNDateTimePickerComponentName[] = "RNDateTimePicker";
17+
18+
} // namespace react
19+
} // namespace facebook
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
2+
/**
3+
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4+
*
5+
* Do not edit this file as changes may cause incorrect behavior and will be lost
6+
* once the code is regenerated.
7+
*
8+
* @generated by codegen project: GenerateShadowNodeH.js
9+
*/
10+
11+
#pragma once
12+
13+
#include "RNDateTimePickerState.h"
14+
#include <react/renderer/components/RNDateTimePicker/EventEmitters.h>
15+
#include <react/renderer/components/RNDateTimePicker/Props.h>
16+
#include <react/renderer/components/view/ConcreteViewShadowNode.h>
17+
#include <jsi/jsi.h>
18+
#include <react/renderer/core/LayoutContext.h>
19+
20+
namespace facebook {
21+
namespace react {
22+
23+
JSI_EXPORT extern const char RNDateTimePickerComponentName[];
24+
25+
/*
26+
* `ShadowNode` for <RNDateTimePicker> component.
27+
*/
28+
class JSI_EXPORT RNDateTimePickerShadowNode final : public ConcreteViewShadowNode<RNDateTimePickerComponentName, RNDateTimePickerProps, RNDateTimePickerEventEmitter, RNDateTimePickerState> {
29+
30+
public:
31+
using ConcreteViewShadowNode::ConcreteViewShadowNode;
32+
33+
static ShadowNodeTraits BaseTraits() {
34+
auto traits = ConcreteViewShadowNode::BaseTraits();
35+
traits.set(ShadowNodeTraits::Trait::LeafYogaNode);
36+
return traits;
37+
}
38+
};
39+
40+
} // namespace react
41+
} // namespace facebook

0 commit comments

Comments
 (0)