@trackunit/react-core-contexts-test 1.12.40 → 1.12.42-alpha-ea91072db16.0
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/index.cjs2.js
CHANGED
|
@@ -224,9 +224,9 @@ function getDefaultExportFromCjs (x) {
|
|
|
224
224
|
|
|
225
225
|
var build = {};
|
|
226
226
|
|
|
227
|
-
var
|
|
227
|
+
var _package$2 = {exports: {}};
|
|
228
228
|
|
|
229
|
-
|
|
229
|
+
_package$2.exports;
|
|
230
230
|
|
|
231
231
|
(function (module) {
|
|
232
232
|
|
|
@@ -392,9 +392,9 @@ ansiStyles.exports;
|
|
|
392
392
|
enumerable: true,
|
|
393
393
|
get: assembleStyles
|
|
394
394
|
});
|
|
395
|
-
} (
|
|
395
|
+
} (_package$2));
|
|
396
396
|
|
|
397
|
-
var
|
|
397
|
+
var _packageExports$1 = _package$2.exports;
|
|
398
398
|
|
|
399
399
|
var collections = {};
|
|
400
400
|
|
|
@@ -704,7 +704,7 @@ AsymmetricMatcher.default = _default$2q;
|
|
|
704
704
|
|
|
705
705
|
var ConvertAnsi = {};
|
|
706
706
|
|
|
707
|
-
var
|
|
707
|
+
var _package$1 = ({onlyFirst = false} = {}) => {
|
|
708
708
|
const pattern = [
|
|
709
709
|
'[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
|
|
710
710
|
'(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
|
|
@@ -718,9 +718,9 @@ Object.defineProperty(ConvertAnsi, '__esModule', {
|
|
|
718
718
|
});
|
|
719
719
|
ConvertAnsi.test = ConvertAnsi.serialize = ConvertAnsi.default = void 0;
|
|
720
720
|
|
|
721
|
-
var _ansiRegex = _interopRequireDefault$d(
|
|
721
|
+
var _ansiRegex = _interopRequireDefault$d(_package$1);
|
|
722
722
|
|
|
723
|
-
var _ansiStyles$1 = _interopRequireDefault$d(
|
|
723
|
+
var _ansiStyles$1 = _interopRequireDefault$d(_packageExports$1);
|
|
724
724
|
|
|
725
725
|
function _interopRequireDefault$d(obj) {
|
|
726
726
|
return obj && obj.__esModule ? obj : {default: obj};
|
|
@@ -1439,7 +1439,7 @@ Immutable.default = _default$2m;
|
|
|
1439
1439
|
|
|
1440
1440
|
var ReactElement = {};
|
|
1441
1441
|
|
|
1442
|
-
var
|
|
1442
|
+
var _package = {exports: {}};
|
|
1443
1443
|
|
|
1444
1444
|
var reactIs_production = {};
|
|
1445
1445
|
|
|
@@ -1721,19 +1721,19 @@ function requireReactIs_development () {
|
|
|
1721
1721
|
}
|
|
1722
1722
|
|
|
1723
1723
|
if (process.env.NODE_ENV === 'production') {
|
|
1724
|
-
|
|
1724
|
+
_package.exports = requireReactIs_production();
|
|
1725
1725
|
} else {
|
|
1726
|
-
|
|
1726
|
+
_package.exports = requireReactIs_development();
|
|
1727
1727
|
}
|
|
1728
1728
|
|
|
1729
|
-
var
|
|
1729
|
+
var _packageExports = _package.exports;
|
|
1730
1730
|
|
|
1731
1731
|
Object.defineProperty(ReactElement, '__esModule', {
|
|
1732
1732
|
value: true
|
|
1733
1733
|
});
|
|
1734
1734
|
ReactElement.test = ReactElement.serialize = ReactElement.default = void 0;
|
|
1735
1735
|
|
|
1736
|
-
var ReactIs = _interopRequireWildcard(
|
|
1736
|
+
var ReactIs = _interopRequireWildcard(_packageExports);
|
|
1737
1737
|
|
|
1738
1738
|
var _markup$1 = markup;
|
|
1739
1739
|
|
|
@@ -1980,7 +1980,7 @@ build.default = build.DEFAULT_OPTIONS = void 0;
|
|
|
1980
1980
|
var format_1 = build.format = format;
|
|
1981
1981
|
var plugins_1 = build.plugins = void 0;
|
|
1982
1982
|
|
|
1983
|
-
var _ansiStyles = _interopRequireDefault$b(
|
|
1983
|
+
var _ansiStyles = _interopRequireDefault$b(_packageExports$1);
|
|
1984
1984
|
|
|
1985
1985
|
var _collections = collections;
|
|
1986
1986
|
|
|
@@ -13490,36 +13490,38 @@ const mockWidgetConfigContext = {
|
|
|
13490
13490
|
closeEditMode: async () => { },
|
|
13491
13491
|
};
|
|
13492
13492
|
|
|
13493
|
-
const RerenderContext = React.createContext({
|
|
13493
|
+
const RerenderContext = React.createContext({ counter: 0 });
|
|
13494
13494
|
/**
|
|
13495
|
-
*
|
|
13495
|
+
* Provides a rerender signal via context to force re-renders in tests.
|
|
13496
|
+
* TanStack Router wraps Match/MatchInner in React.memo, which blocks RTL's rerender() from
|
|
13497
|
+
* propagating to the hook under test. React context changes bypass React.memo boundaries,
|
|
13498
|
+
* so changing the context value triggers a re-render in any descendant consuming RerenderContext.
|
|
13499
|
+
*
|
|
13500
|
+
* The value is intentionally wrapped in a new object on every render. This ensures the context
|
|
13501
|
+
* identity always changes -- even when the external counter prop hasn't changed (e.g. during
|
|
13502
|
+
* HookRenderer's automatic rerender) -- so consumers are always notified.
|
|
13496
13503
|
*/
|
|
13497
|
-
const RerenderProvider = ({ children, counter }) => {
|
|
13498
|
-
const [rerenderCounter, setRerenderCounter] = React.useState(0);
|
|
13499
|
-
React.useEffect(() => {
|
|
13500
|
-
if (counter && rerenderCounter !== counter && rerenderCounter !== 0) {
|
|
13501
|
-
setRerenderCounter(counter);
|
|
13502
|
-
}
|
|
13503
|
-
}, [rerenderCounter, counter]);
|
|
13504
|
-
return (jsxRuntime.jsx(RerenderContext.Provider, { value: { rerenderCounter, setRerenderCounter }, children: children }));
|
|
13505
|
-
};
|
|
13504
|
+
const RerenderProvider = ({ children, counter }) => (jsxRuntime.jsx(RerenderContext.Provider, { value: { counter }, children: children }));
|
|
13506
13505
|
/**
|
|
13507
|
-
*
|
|
13506
|
+
* Returns the current rerender counter from context.
|
|
13508
13507
|
*/
|
|
13509
|
-
const useRerenderCounter = () =>
|
|
13510
|
-
return React.useContext(RerenderContext);
|
|
13511
|
-
};
|
|
13508
|
+
const useRerenderCounter = () => React.useContext(RerenderContext).counter;
|
|
13512
13509
|
|
|
13513
13510
|
/**
|
|
13514
|
-
*
|
|
13511
|
+
* Subscribes to RerenderContext so this subtree re-renders when the counter changes,
|
|
13512
|
+
* even when nested inside React.memo boundaries (like TanStack Router's Match/MatchInner).
|
|
13513
|
+
*
|
|
13514
|
+
* Consuming the context alone is not enough: React will bail out of re-rendering children
|
|
13515
|
+
* if the element references haven't changed. createElement produces new element instances
|
|
13516
|
+
* with a changed prop, which forces React to reconcile and re-render the test component.
|
|
13515
13517
|
*/
|
|
13516
13518
|
const RerenderComponent = ({ children }) => {
|
|
13517
|
-
const
|
|
13518
|
-
return (jsxRuntime.jsx(
|
|
13519
|
+
const counter = useRerenderCounter();
|
|
13520
|
+
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: React.Children.map(children, child => React.isValidElement(child)
|
|
13519
13521
|
? React.createElement(child.type, {
|
|
13520
13522
|
...child.props,
|
|
13521
13523
|
key: child.key,
|
|
13522
|
-
"data-rerender-counter":
|
|
13524
|
+
"data-rerender-counter": counter,
|
|
13523
13525
|
})
|
|
13524
13526
|
: child) }));
|
|
13525
13527
|
};
|
package/index.esm2.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SortOrder, AssetSortByProperty } from '@trackunit/iris-app-runtime-core-api';
|
|
2
|
-
import { jsx,
|
|
2
|
+
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
3
3
|
import * as React from 'react';
|
|
4
|
-
import React__default, { createContext,
|
|
4
|
+
import React__default, { createContext, useContext, Children, createElement, isValidElement, useRef, useEffect, useCallback, useMemo, useState } from 'react';
|
|
5
5
|
import * as DeprecatedReactTestUtils from 'react-dom/test-utils';
|
|
6
6
|
import ReactDOM from 'react-dom';
|
|
7
7
|
import * as ReactDOMClient from 'react-dom/client';
|
|
@@ -202,9 +202,9 @@ function getDefaultExportFromCjs (x) {
|
|
|
202
202
|
|
|
203
203
|
var build = {};
|
|
204
204
|
|
|
205
|
-
var
|
|
205
|
+
var _package$2 = {exports: {}};
|
|
206
206
|
|
|
207
|
-
|
|
207
|
+
_package$2.exports;
|
|
208
208
|
|
|
209
209
|
(function (module) {
|
|
210
210
|
|
|
@@ -370,9 +370,9 @@ ansiStyles.exports;
|
|
|
370
370
|
enumerable: true,
|
|
371
371
|
get: assembleStyles
|
|
372
372
|
});
|
|
373
|
-
} (
|
|
373
|
+
} (_package$2));
|
|
374
374
|
|
|
375
|
-
var
|
|
375
|
+
var _packageExports$1 = _package$2.exports;
|
|
376
376
|
|
|
377
377
|
var collections = {};
|
|
378
378
|
|
|
@@ -682,7 +682,7 @@ AsymmetricMatcher.default = _default$2q;
|
|
|
682
682
|
|
|
683
683
|
var ConvertAnsi = {};
|
|
684
684
|
|
|
685
|
-
var
|
|
685
|
+
var _package$1 = ({onlyFirst = false} = {}) => {
|
|
686
686
|
const pattern = [
|
|
687
687
|
'[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
|
|
688
688
|
'(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
|
|
@@ -696,9 +696,9 @@ Object.defineProperty(ConvertAnsi, '__esModule', {
|
|
|
696
696
|
});
|
|
697
697
|
ConvertAnsi.test = ConvertAnsi.serialize = ConvertAnsi.default = void 0;
|
|
698
698
|
|
|
699
|
-
var _ansiRegex = _interopRequireDefault$d(
|
|
699
|
+
var _ansiRegex = _interopRequireDefault$d(_package$1);
|
|
700
700
|
|
|
701
|
-
var _ansiStyles$1 = _interopRequireDefault$d(
|
|
701
|
+
var _ansiStyles$1 = _interopRequireDefault$d(_packageExports$1);
|
|
702
702
|
|
|
703
703
|
function _interopRequireDefault$d(obj) {
|
|
704
704
|
return obj && obj.__esModule ? obj : {default: obj};
|
|
@@ -1417,7 +1417,7 @@ Immutable.default = _default$2m;
|
|
|
1417
1417
|
|
|
1418
1418
|
var ReactElement = {};
|
|
1419
1419
|
|
|
1420
|
-
var
|
|
1420
|
+
var _package = {exports: {}};
|
|
1421
1421
|
|
|
1422
1422
|
var reactIs_production = {};
|
|
1423
1423
|
|
|
@@ -1699,19 +1699,19 @@ function requireReactIs_development () {
|
|
|
1699
1699
|
}
|
|
1700
1700
|
|
|
1701
1701
|
if (process.env.NODE_ENV === 'production') {
|
|
1702
|
-
|
|
1702
|
+
_package.exports = requireReactIs_production();
|
|
1703
1703
|
} else {
|
|
1704
|
-
|
|
1704
|
+
_package.exports = requireReactIs_development();
|
|
1705
1705
|
}
|
|
1706
1706
|
|
|
1707
|
-
var
|
|
1707
|
+
var _packageExports = _package.exports;
|
|
1708
1708
|
|
|
1709
1709
|
Object.defineProperty(ReactElement, '__esModule', {
|
|
1710
1710
|
value: true
|
|
1711
1711
|
});
|
|
1712
1712
|
ReactElement.test = ReactElement.serialize = ReactElement.default = void 0;
|
|
1713
1713
|
|
|
1714
|
-
var ReactIs = _interopRequireWildcard(
|
|
1714
|
+
var ReactIs = _interopRequireWildcard(_packageExports);
|
|
1715
1715
|
|
|
1716
1716
|
var _markup$1 = markup;
|
|
1717
1717
|
|
|
@@ -1958,7 +1958,7 @@ build.default = build.DEFAULT_OPTIONS = void 0;
|
|
|
1958
1958
|
var format_1 = build.format = format;
|
|
1959
1959
|
var plugins_1 = build.plugins = void 0;
|
|
1960
1960
|
|
|
1961
|
-
var _ansiStyles = _interopRequireDefault$b(
|
|
1961
|
+
var _ansiStyles = _interopRequireDefault$b(_packageExports$1);
|
|
1962
1962
|
|
|
1963
1963
|
var _collections = collections;
|
|
1964
1964
|
|
|
@@ -13468,36 +13468,38 @@ const mockWidgetConfigContext = {
|
|
|
13468
13468
|
closeEditMode: async () => { },
|
|
13469
13469
|
};
|
|
13470
13470
|
|
|
13471
|
-
const RerenderContext = createContext({
|
|
13471
|
+
const RerenderContext = createContext({ counter: 0 });
|
|
13472
13472
|
/**
|
|
13473
|
-
*
|
|
13473
|
+
* Provides a rerender signal via context to force re-renders in tests.
|
|
13474
|
+
* TanStack Router wraps Match/MatchInner in React.memo, which blocks RTL's rerender() from
|
|
13475
|
+
* propagating to the hook under test. React context changes bypass React.memo boundaries,
|
|
13476
|
+
* so changing the context value triggers a re-render in any descendant consuming RerenderContext.
|
|
13477
|
+
*
|
|
13478
|
+
* The value is intentionally wrapped in a new object on every render. This ensures the context
|
|
13479
|
+
* identity always changes -- even when the external counter prop hasn't changed (e.g. during
|
|
13480
|
+
* HookRenderer's automatic rerender) -- so consumers are always notified.
|
|
13474
13481
|
*/
|
|
13475
|
-
const RerenderProvider = ({ children, counter }) => {
|
|
13476
|
-
const [rerenderCounter, setRerenderCounter] = useState(0);
|
|
13477
|
-
useEffect(() => {
|
|
13478
|
-
if (counter && rerenderCounter !== counter && rerenderCounter !== 0) {
|
|
13479
|
-
setRerenderCounter(counter);
|
|
13480
|
-
}
|
|
13481
|
-
}, [rerenderCounter, counter]);
|
|
13482
|
-
return (jsx(RerenderContext.Provider, { value: { rerenderCounter, setRerenderCounter }, children: children }));
|
|
13483
|
-
};
|
|
13482
|
+
const RerenderProvider = ({ children, counter }) => (jsx(RerenderContext.Provider, { value: { counter }, children: children }));
|
|
13484
13483
|
/**
|
|
13485
|
-
*
|
|
13484
|
+
* Returns the current rerender counter from context.
|
|
13486
13485
|
*/
|
|
13487
|
-
const useRerenderCounter = () =>
|
|
13488
|
-
return useContext(RerenderContext);
|
|
13489
|
-
};
|
|
13486
|
+
const useRerenderCounter = () => useContext(RerenderContext).counter;
|
|
13490
13487
|
|
|
13491
13488
|
/**
|
|
13492
|
-
*
|
|
13489
|
+
* Subscribes to RerenderContext so this subtree re-renders when the counter changes,
|
|
13490
|
+
* even when nested inside React.memo boundaries (like TanStack Router's Match/MatchInner).
|
|
13491
|
+
*
|
|
13492
|
+
* Consuming the context alone is not enough: React will bail out of re-rendering children
|
|
13493
|
+
* if the element references haven't changed. createElement produces new element instances
|
|
13494
|
+
* with a changed prop, which forces React to reconcile and re-render the test component.
|
|
13493
13495
|
*/
|
|
13494
13496
|
const RerenderComponent = ({ children }) => {
|
|
13495
|
-
const
|
|
13496
|
-
return (jsx(
|
|
13497
|
+
const counter = useRerenderCounter();
|
|
13498
|
+
return (jsx(Fragment, { children: Children.map(children, child => isValidElement(child)
|
|
13497
13499
|
? createElement(child.type, {
|
|
13498
13500
|
...child.props,
|
|
13499
13501
|
key: child.key,
|
|
13500
|
-
"data-rerender-counter":
|
|
13502
|
+
"data-rerender-counter": counter,
|
|
13501
13503
|
})
|
|
13502
13504
|
: child) }));
|
|
13503
13505
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trackunit/react-core-contexts-test",
|
|
3
|
-
"version": "1.12.
|
|
3
|
+
"version": "1.12.42-alpha-ea91072db16.0",
|
|
4
4
|
"repository": "https://github.com/Trackunit/manager",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
6
|
"engines": {
|
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
"@apollo/client": "3.13.8",
|
|
11
11
|
"react": "19.0.0",
|
|
12
12
|
"@tanstack/react-router": "1.114.29",
|
|
13
|
-
"@trackunit/shared-utils": "1.13.
|
|
13
|
+
"@trackunit/shared-utils": "1.13.58-alpha-ea91072db16.0",
|
|
14
14
|
"graphql": "^16.10.0",
|
|
15
15
|
"@tanstack/router-core": "1.114.29",
|
|
16
|
-
"@trackunit/iris-app-runtime-core-api": "1.12.
|
|
17
|
-
"@trackunit/react-core-contexts-api": "1.13.
|
|
16
|
+
"@trackunit/iris-app-runtime-core-api": "1.12.40-alpha-ea91072db16.0",
|
|
17
|
+
"@trackunit/react-core-contexts-api": "1.13.40-alpha-ea91072db16.0",
|
|
18
18
|
"es-toolkit": "^1.39.10"
|
|
19
19
|
},
|
|
20
20
|
"module": "./index.esm.js",
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
import { ReactNode } from "react";
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Subscribes to RerenderContext so this subtree re-renders when the counter changes,
|
|
4
|
+
* even when nested inside React.memo boundaries (like TanStack Router's Match/MatchInner).
|
|
5
|
+
*
|
|
6
|
+
* Consuming the context alone is not enough: React will bail out of re-rendering children
|
|
7
|
+
* if the element references haven't changed. createElement produces new element instances
|
|
8
|
+
* with a changed prop, which forces React to reconcile and re-render the test component.
|
|
4
9
|
*/
|
|
5
10
|
export declare const RerenderComponent: ({ children }: {
|
|
6
11
|
children: ReactNode;
|
|
7
|
-
}) =>
|
|
12
|
+
}) => ReactNode;
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import { ReactNode } from "react";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Provides a rerender signal via context to force re-renders in tests.
|
|
4
|
+
* TanStack Router wraps Match/MatchInner in React.memo, which blocks RTL's rerender() from
|
|
5
|
+
* propagating to the hook under test. React context changes bypass React.memo boundaries,
|
|
6
|
+
* so changing the context value triggers a re-render in any descendant consuming RerenderContext.
|
|
7
|
+
*
|
|
8
|
+
* The value is intentionally wrapped in a new object on every render. This ensures the context
|
|
9
|
+
* identity always changes -- even when the external counter prop hasn't changed (e.g. during
|
|
10
|
+
* HookRenderer's automatic rerender) -- so consumers are always notified.
|
|
4
11
|
*/
|
|
5
12
|
export declare const RerenderProvider: ({ children, counter }: {
|
|
6
13
|
children: ReactNode;
|
|
7
14
|
counter: number;
|
|
8
|
-
}) =>
|
|
15
|
+
}) => ReactNode;
|
|
9
16
|
/**
|
|
10
|
-
*
|
|
17
|
+
* Returns the current rerender counter from context.
|
|
11
18
|
*/
|
|
12
|
-
export declare const useRerenderCounter: () =>
|
|
13
|
-
rerenderCounter: number;
|
|
14
|
-
setRerenderCounter: (value: number) => void;
|
|
15
|
-
};
|
|
19
|
+
export declare const useRerenderCounter: () => number;
|