@@ -254,7 +254,10 @@ static void updateBorderRadiusProps(
254
254
newBorderRadii.endEnd ,
255
255
oldBorderRadii.endEnd );
256
256
updateBorderRadiusPropValue (
257
- result, " borderEndStartRadius" , newBorderRadii.all , oldBorderRadii.all );
257
+ result,
258
+ " borderEndStartRadius" ,
259
+ newBorderRadii.endStart ,
260
+ oldBorderRadii.endStart );
258
261
updateBorderRadiusPropValue (
259
262
result,
260
263
" borderStartEndRadius" ,
@@ -396,6 +399,53 @@ inline static void updateTransformProps(
396
399
}
397
400
}
398
401
402
+ inline static void updateAccessibilityStateProp (
403
+ folly::dynamic& result,
404
+ const std::optional<AccessibilityState>& newState,
405
+ const std::optional<AccessibilityState>& oldState) {
406
+ folly::dynamic resultState = folly::dynamic::object ();
407
+
408
+ if (!newState.has_value () && oldState.has_value ()) {
409
+ result[" accessibilityState" ] = resultState;
410
+ return ;
411
+ }
412
+
413
+ if (!oldState.has_value () || newState->disabled != oldState->disabled ) {
414
+ resultState[" disabled" ] = newState->disabled ;
415
+ }
416
+
417
+ if (!oldState.has_value () || newState->selected != oldState->selected ) {
418
+ resultState[" selected" ] = newState->selected ;
419
+ }
420
+
421
+ if (!oldState.has_value () || newState->busy != oldState->busy ) {
422
+ resultState[" busy" ] = newState->busy ;
423
+ }
424
+
425
+ if (!oldState.has_value () || newState->expanded != oldState->expanded ) {
426
+ resultState[" expanded" ] =
427
+ newState->expanded .has_value () && newState->expanded .value ();
428
+ }
429
+
430
+ if (!oldState.has_value () || newState->checked != oldState->checked ) {
431
+ switch (newState->checked ) {
432
+ case AccessibilityState::Unchecked:
433
+ resultState[" checked" ] = " unchecked" ;
434
+ break ;
435
+ case AccessibilityState::Checked:
436
+ resultState[" checked" ] = " checked" ;
437
+ break ;
438
+ case AccessibilityState::Mixed:
439
+ resultState[" checked" ] = " mixed" ;
440
+ break ;
441
+ case AccessibilityState::None:
442
+ resultState[" checked" ] = " none" ;
443
+ break ;
444
+ }
445
+ }
446
+ result[" accessibilityState" ] = resultState;
447
+ }
448
+
399
449
folly::dynamic HostPlatformViewProps::getDiffProps (
400
450
const Props* prevProps) const {
401
451
folly::dynamic result = folly::dynamic::object ();
@@ -409,6 +459,11 @@ folly::dynamic HostPlatformViewProps::getDiffProps(
409
459
if (this == oldProps) {
410
460
return result;
411
461
}
462
+
463
+ if (elevation != oldProps->elevation ) {
464
+ result[" elevation" ] = elevation;
465
+ }
466
+
412
467
if (focusable != oldProps->focusable ) {
413
468
result[" focusable" ] = focusable;
414
469
}
@@ -705,6 +760,129 @@ folly::dynamic HostPlatformViewProps::getDiffProps(
705
760
result[" transformOrigin" ] = transformOrigin;
706
761
}
707
762
763
+ // Accessibility
764
+
765
+ if (accessibilityState != oldProps->accessibilityState ) {
766
+ updateAccessibilityStateProp (
767
+ result, oldProps->accessibilityState , accessibilityState);
768
+ }
769
+
770
+ if (accessibilityLabel != oldProps->accessibilityLabel ) {
771
+ result[" accessibilityLabel" ] = accessibilityLabel;
772
+ }
773
+
774
+ if (accessibilityLabelledBy != oldProps->accessibilityLabelledBy ) {
775
+ auto accessibilityLabelledByValues = folly::dynamic::array ();
776
+ for (const auto & accessibilityLabelledByValue :
777
+ accessibilityLabelledBy.value ) {
778
+ accessibilityLabelledByValues.push_back (accessibilityLabelledByValue);
779
+ }
780
+ result[" accessibilityLabelledBy" ] = accessibilityLabelledByValues;
781
+ }
782
+
783
+ if (accessibilityLiveRegion != oldProps->accessibilityLiveRegion ) {
784
+ switch (accessibilityLiveRegion) {
785
+ case AccessibilityLiveRegion::Assertive:
786
+ result[" accessibilityLiveRegion" ] = " assertive" ;
787
+ break ;
788
+ case AccessibilityLiveRegion::Polite:
789
+ result[" accessibilityLiveRegion" ] = " polite" ;
790
+ break ;
791
+ case AccessibilityLiveRegion::None:
792
+ result[" accessibilityLiveRegion" ] = " none" ;
793
+ break ;
794
+ }
795
+ }
796
+
797
+ if (accessibilityHint != oldProps->accessibilityHint ) {
798
+ result[" accessibilityHint" ] = accessibilityHint;
799
+ }
800
+
801
+ if (accessibilityRole != oldProps->accessibilityRole ) {
802
+ result[" accessibilityRole" ] = accessibilityRole;
803
+ }
804
+
805
+ if (accessibilityLanguage != oldProps->accessibilityLanguage ) {
806
+ result[" accessibilityLanguage" ] = accessibilityLanguage;
807
+ }
808
+
809
+ if (accessibilityValue != oldProps->accessibilityValue ) {
810
+ folly::dynamic accessibilityValueObject = folly::dynamic::object ();
811
+ if (accessibilityValue.min .has_value ()) {
812
+ accessibilityValueObject[" min" ] = accessibilityValue.min .value ();
813
+ }
814
+ if (accessibilityValue.max .has_value ()) {
815
+ accessibilityValueObject[" max" ] = accessibilityValue.max .value ();
816
+ }
817
+ if (accessibilityValue.now .has_value ()) {
818
+ accessibilityValueObject[" now" ] = accessibilityValue.now .value ();
819
+ }
820
+ if (accessibilityValue.text .has_value ()) {
821
+ accessibilityValueObject[" text" ] = accessibilityValue.text .value ();
822
+ }
823
+ result[" accessibilityValue" ] = accessibilityValueObject;
824
+ }
825
+
826
+ if (accessibilityActions != oldProps->accessibilityActions ) {
827
+ auto accessibilityActionsArray = folly::dynamic::array ();
828
+ for (const auto & accessibilityAction : accessibilityActions) {
829
+ folly::dynamic accessibilityActionObject = folly::dynamic::object ();
830
+ accessibilityActionObject[" name" ] = accessibilityAction.name ;
831
+ if (accessibilityAction.label .has_value ()) {
832
+ accessibilityActionObject[" label" ] = accessibilityAction.label .value ();
833
+ }
834
+ accessibilityActionsArray.push_back (accessibilityActionObject);
835
+ }
836
+ result[" accessibilityActions" ] = accessibilityActionsArray;
837
+ }
838
+
839
+ if (accessibilityViewIsModal != oldProps->accessibilityViewIsModal ) {
840
+ result[" accessibilityViewIsModal" ] = accessibilityViewIsModal;
841
+ }
842
+
843
+ if (accessibilityElementsHidden != oldProps->accessibilityElementsHidden ) {
844
+ result[" accessibilityElementsHidden" ] = accessibilityElementsHidden;
845
+ }
846
+
847
+ if (accessibilityIgnoresInvertColors !=
848
+ oldProps->accessibilityIgnoresInvertColors ) {
849
+ result[" accessibilityIgnoresInvertColors" ] =
850
+ accessibilityIgnoresInvertColors;
851
+ }
852
+
853
+ if (onAccessibilityTap != oldProps->onAccessibilityTap ) {
854
+ result[" onAccessibilityTap" ] = onAccessibilityTap;
855
+ }
856
+
857
+ if (onAccessibilityMagicTap != oldProps->onAccessibilityMagicTap ) {
858
+ result[" onAccessibilityMagicTap" ] = onAccessibilityMagicTap;
859
+ }
860
+
861
+ if (onAccessibilityEscape != oldProps->onAccessibilityEscape ) {
862
+ result[" onAccessibilityEscape" ] = onAccessibilityEscape;
863
+ }
864
+
865
+ if (onAccessibilityAction != oldProps->onAccessibilityAction ) {
866
+ result[" onAccessibilityAction" ] = onAccessibilityAction;
867
+ }
868
+
869
+ if (importantForAccessibility != oldProps->importantForAccessibility ) {
870
+ switch (importantForAccessibility) {
871
+ case ImportantForAccessibility::Auto:
872
+ result[" importantForAccessibility" ] = " auto" ;
873
+ break ;
874
+ case ImportantForAccessibility::Yes:
875
+ result[" importantForAccessibility" ] = " yes" ;
876
+ break ;
877
+ case ImportantForAccessibility::No:
878
+ result[" importantForAccessibility" ] = " no" ;
879
+ break ;
880
+ case ImportantForAccessibility::NoHideDescendants:
881
+ result[" importantForAccessibility" ] = " noHideDescendants" ;
882
+ break ;
883
+ }
884
+ }
885
+
708
886
return result;
709
887
}
710
888
0 commit comments