@office-iss/react-native-win32 0.78.0-preview.1 → 0.78.0-preview.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.json CHANGED
@@ -2,7 +2,37 @@
2
2
  "name": "@office-iss/react-native-win32",
3
3
  "entries": [
4
4
  {
5
- "date": "Tue, 28 Jan 2025 18:54:44 GMT",
5
+ "date": "Mon, 24 Feb 2025 16:33:15 GMT",
6
+ "version": "0.78.0-preview.3",
7
+ "tag": "@office-iss/react-native-win32_v0.78.0-preview.3",
8
+ "comments": {
9
+ "prerelease": [
10
+ {
11
+ "author": "email not defined",
12
+ "package": "@office-iss/react-native-win32",
13
+ "commit": "de0074f7cf70b480a11e1a982f6bee71a673d489",
14
+ "comment": "integrate 0.78-rc4"
15
+ }
16
+ ]
17
+ }
18
+ },
19
+ {
20
+ "date": "Thu, 06 Feb 2025 23:51:16 GMT",
21
+ "version": "0.78.0-preview.2",
22
+ "tag": "@office-iss/react-native-win32_v0.78.0-preview.2",
23
+ "comments": {
24
+ "prerelease": [
25
+ {
26
+ "author": "email not defined",
27
+ "package": "@office-iss/react-native-win32",
28
+ "commit": "842d2e5cb630152c2cccd003253da0c8d86700f8",
29
+ "comment": "integrate rn 0.78-rc3"
30
+ }
31
+ ]
32
+ }
33
+ },
34
+ {
35
+ "date": "Tue, 28 Jan 2025 18:55:49 GMT",
6
36
  "version": "0.78.0-preview.1",
7
37
  "tag": "@office-iss/react-native-win32_v0.78.0-preview.1",
8
38
  "comments": {
package/CHANGELOG.md CHANGED
@@ -1,17 +1,33 @@
1
1
  # Change Log - @office-iss/react-native-win32
2
2
 
3
- <!-- This log was last generated on Tue, 28 Jan 2025 18:54:44 GMT and should not be manually modified. -->
3
+ <!-- This log was last generated on Mon, 24 Feb 2025 16:33:15 GMT and should not be manually modified. -->
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
- ## 0.78.0-preview.1
7
+ ## 0.78.0-preview.3
8
8
 
9
- Tue, 28 Jan 2025 18:54:44 GMT
9
+ Mon, 24 Feb 2025 16:33:15 GMT
10
10
 
11
11
  ### Changes
12
12
 
13
- - Promote 0.78 to preview (email not defined)
13
+ - integrate 0.78-rc4 (email not defined)
14
14
 
15
+ ## 0.78.0-preview.2
16
+
17
+ Thu, 06 Feb 2025 23:51:16 GMT
18
+
19
+ ### Changes
20
+
21
+ - integrate rn 0.78-rc3 (email not defined)
22
+
23
+ ## 0.78.0-preview.1
24
+
25
+ Tue, 28 Jan 2025 18:55:49 GMT
26
+
27
+ ### Changes
28
+
29
+ - Promote 0.78 to preview (email not defined)
30
+
15
31
  ## 0.0.0-canary.281
16
32
 
17
33
  Thu, 23 Jan 2025 06:24:57 GMT
@@ -9,6 +9,7 @@
9
9
  */
10
10
 
11
11
  import type {EventSubscription} from '../../vendor/emitter/EventEmitter';
12
+ import type {PlatformConfig} from '../AnimatedPlatformConfig';
12
13
  import type Animation, {EndCallback} from '../animations/Animation';
13
14
  import type {InterpolationConfigType} from './AnimatedInterpolation';
14
15
  import type AnimatedNode from './AnimatedNode';
@@ -84,6 +85,7 @@ function _executeAsAnimatedBatch(id: string, operation: () => void) {
84
85
  * See https://reactnative.dev/docs/animatedvalue
85
86
  */
86
87
  export default class AnimatedValue extends AnimatedWithChildren {
88
+ #attached: boolean = false;
87
89
  #updateSubscription: ?EventSubscription = null;
88
90
 
89
91
  _value: number;
@@ -106,14 +108,8 @@ export default class AnimatedValue extends AnimatedWithChildren {
106
108
  }
107
109
 
108
110
  __attach(): void {
109
- if (this.__isNative) {
110
- // NOTE: In theory, we should only need to call this when any listeners
111
- // are added. However, there is a global `onUserDrivenAnimationEnded`
112
- // listener that relies on `onAnimatedValueUpdate` having fired to update
113
- // the values in JavaScript. If that listener is removed, this could be
114
- // re-optimized.
115
- this.#ensureUpdateSubscriptionExists();
116
- }
111
+ this.#attached = true;
112
+ this.#ensureUpdateSubscriptionExists();
117
113
  }
118
114
 
119
115
  __detach(): void {
@@ -125,16 +121,34 @@ export default class AnimatedValue extends AnimatedWithChildren {
125
121
  }
126
122
  this.stopAnimation();
127
123
  super.__detach();
124
+ this.#attached = false;
128
125
  }
129
126
 
130
127
  __getValue(): number {
131
128
  return this._value + this._offset;
132
129
  }
133
130
 
131
+ __makeNative(platformConfig: ?PlatformConfig): void {
132
+ super.__makeNative(platformConfig);
133
+ this.#ensureUpdateSubscriptionExists();
134
+ }
135
+
136
+ /**
137
+ * NOTE: In theory, we should only need to call this when any listeners
138
+ * are added. However, there is a global `onUserDrivenAnimationEnded`
139
+ * listener that relies on `onAnimatedValueUpdate` having fired to update
140
+ * the values in JavaScript. If that listener is removed, this could be
141
+ * re-optimized.
142
+ */
134
143
  #ensureUpdateSubscriptionExists(): void {
135
144
  if (this.#updateSubscription != null) {
136
145
  return;
137
146
  }
147
+ // The order in which `__attach` and `__makeNative` are called is not
148
+ // deterministic, and we only want to do this when both have occurred.
149
+ if (!this.#attached || !this.__isNative) {
150
+ return;
151
+ }
138
152
  const nativeTag = this.__getNativeTag();
139
153
  NativeAnimatedAPI.startListeningToAnimatedNodeValue(nativeTag);
140
154
  const subscription: EventSubscription =
@@ -276,6 +276,20 @@ function useAnimatedPropsLifecycle_insertionEffects(node: AnimatedProps): void {
276
276
  // if the queue is empty. When multiple animated components are mounted at
277
277
  // the same time. Only first component flushes the queue and the others will noop.
278
278
  NativeAnimatedHelper.API.flushQueue();
279
+ let drivenAnimationEndedListener: ?EventSubscription = null;
280
+ if (node.__isNative) {
281
+ drivenAnimationEndedListener =
282
+ NativeAnimatedHelper.nativeEventEmitter.addListener(
283
+ 'onUserDrivenAnimationEnded',
284
+ data => {
285
+ node.update();
286
+ },
287
+ );
288
+ }
289
+
290
+ return () => {
291
+ drivenAnimationEndedListener?.remove();
292
+ };
279
293
  });
280
294
 
281
295
  useInsertionEffect(() => {
@@ -287,17 +301,6 @@ function useAnimatedPropsLifecycle_insertionEffects(node: AnimatedProps): void {
287
301
 
288
302
  useInsertionEffect(() => {
289
303
  node.__attach();
290
- let drivenAnimationEndedListener: ?EventSubscription = null;
291
-
292
- if (node.__isNative) {
293
- drivenAnimationEndedListener =
294
- NativeAnimatedHelper.nativeEventEmitter.addListener(
295
- 'onUserDrivenAnimationEnded',
296
- data => {
297
- node.update();
298
- },
299
- );
300
- }
301
304
  if (prevNodeRef.current != null) {
302
305
  const prevNode = prevNodeRef.current;
303
306
  // TODO: Stop restoring default values (unless `reset` is called).
@@ -312,8 +315,6 @@ function useAnimatedPropsLifecycle_insertionEffects(node: AnimatedProps): void {
312
315
  } else {
313
316
  prevNodeRef.current = node;
314
317
  }
315
-
316
- drivenAnimationEndedListener?.remove();
317
318
  };
318
319
  }, [node]);
319
320
  }
@@ -17,7 +17,7 @@ const version: $ReadOnly<{
17
17
  major: 0,
18
18
  minor: 78,
19
19
  patch: 0,
20
- prerelease: 'rc.0',
20
+ prerelease: 'rc.4',
21
21
  };
22
22
 
23
23
  module.exports = {version};
package/overrides.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "**/__snapshots__/**",
8
8
  "src-win/rntypes/**"
9
9
  ],
10
- "baseVersion": "0.78.0-rc.0",
10
+ "baseVersion": "0.78.0-rc.4",
11
11
  "overrides": [
12
12
  {
13
13
  "type": "derived",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@office-iss/react-native-win32",
3
- "version": "0.78.0-preview.1",
3
+ "version": "0.78.0-preview.3",
4
4
  "description": "Implementation of react native on top of Office's Win32 platform.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -30,13 +30,13 @@
30
30
  "@react-native-community/cli-platform-android": "15.0.0-alpha.2",
31
31
  "@react-native-community/cli-platform-ios": "15.0.0-alpha.2",
32
32
  "@react-native/assets": "1.0.0",
33
- "@react-native/assets-registry": "0.78.0-rc.0",
34
- "@react-native/codegen": "0.78.0-rc.0",
35
- "@react-native/community-cli-plugin": "0.78.0-rc.0",
36
- "@react-native/gradle-plugin": "0.78.0-rc.0",
37
- "@react-native/js-polyfills": "0.78.0-rc.0",
38
- "@react-native/normalize-colors": "0.78.0-rc.0",
39
- "@react-native/virtualized-lists": "0.78.0-rc.0",
33
+ "@react-native/assets-registry": "0.78.0-rc.4",
34
+ "@react-native/codegen": "0.78.0-rc.4",
35
+ "@react-native/community-cli-plugin": "0.78.0-rc.4",
36
+ "@react-native/gradle-plugin": "0.78.0-rc.4",
37
+ "@react-native/js-polyfills": "0.78.0-rc.4",
38
+ "@react-native/normalize-colors": "0.78.0-rc.4",
39
+ "@react-native/virtualized-lists": "0.78.0-rc.4",
40
40
  "abort-controller": "^3.0.0",
41
41
  "anser": "^1.4.9",
42
42
  "ansi-regex": "^5.0.0",
@@ -89,14 +89,14 @@
89
89
  "just-scripts": "^1.3.3",
90
90
  "prettier": "2.8.8",
91
91
  "react": "19.0.0",
92
- "react-native": "0.78.0-rc.0",
92
+ "react-native": "0.78.0-rc.4",
93
93
  "react-native-platform-override": "^1.9.51",
94
94
  "typescript": "5.0.4"
95
95
  },
96
96
  "peerDependencies": {
97
97
  "@types/react": "^19.0.0",
98
98
  "react": "^19.0.0",
99
- "react-native": "0.78.0-rc.0"
99
+ "react-native": "0.78.0-rc.4"
100
100
  },
101
101
  "beachball": {
102
102
  "defaultNpmTag": "preview",