RCTDatePickerManager.m 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /*
  2. * Copyright (c) Facebook, Inc. and its affiliates.
  3. *
  4. * This source code is licensed under the MIT license found in the
  5. * LICENSE file in the root directory of this source tree.
  6. */
  7. #import "RCTDatePickerManager.h"
  8. #import <React/RCTUIManager.h>
  9. #import "RCTBridge.h"
  10. #import "RCTDatePicker.h"
  11. #import "RCTEventDispatcher.h"
  12. #import "UIView+React.h"
  13. @implementation RCTConvert (UIDatePicker)
  14. RCT_ENUM_CONVERTER(
  15. UIDatePickerMode,
  16. (@{
  17. @"time" : @(UIDatePickerModeTime),
  18. @"date" : @(UIDatePickerModeDate),
  19. @"datetime" : @(UIDatePickerModeDateAndTime),
  20. @"countdown" : @(UIDatePickerModeCountDownTimer), // not supported yet
  21. }),
  22. UIDatePickerModeTime,
  23. integerValue)
  24. @end
  25. @implementation RCTDatePickerManager
  26. RCT_EXPORT_MODULE()
  27. - (UIView *)view
  28. {
  29. return [RCTDatePicker new];
  30. }
  31. RCT_EXPORT_VIEW_PROPERTY(date, NSDate)
  32. RCT_EXPORT_VIEW_PROPERTY(locale, NSLocale)
  33. RCT_EXPORT_VIEW_PROPERTY(minimumDate, NSDate)
  34. RCT_EXPORT_VIEW_PROPERTY(maximumDate, NSDate)
  35. RCT_EXPORT_VIEW_PROPERTY(minuteInterval, NSInteger)
  36. RCT_EXPORT_VIEW_PROPERTY(onChange, RCTBubblingEventBlock)
  37. RCT_REMAP_VIEW_PROPERTY(mode, datePickerMode, UIDatePickerMode)
  38. RCT_REMAP_VIEW_PROPERTY(timeZoneOffsetInMinutes, timeZone, NSTimeZone)
  39. RCT_EXPORT_METHOD(setNativeDate : (nonnull NSNumber *)viewTag toDate : (NSDate *)date)
  40. {
  41. [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
  42. UIView *view = viewRegistry[viewTag];
  43. if ([view isKindOfClass:[RCTDatePicker class]]) {
  44. [(RCTDatePicker *)view setDate:date];
  45. } else {
  46. // This component is used in Fabric through LegacyInteropLayer.
  47. // `RCTPicker` view is subview of `RCTLegacyViewManagerInteropComponentView`.
  48. // `viewTag` passed as parameter to this method is tag of the `RCTLegacyViewManagerInteropComponentView`.
  49. UIView *subview = view.subviews.firstObject;
  50. if ([subview isKindOfClass:[RCTDatePicker class]]) {
  51. [(RCTDatePicker *)subview setDate:date];
  52. } else {
  53. RCTLogError(@"view type must be RCTPicker");
  54. }
  55. }
  56. }];
  57. }
  58. @end