Skip to content

Commit 42ede68

Browse files
authored
Merge pull request #2 from neolution-ch/feature/react19
React 19
2 parents 2bbdd4a + 00bc0da commit 42ede68

8 files changed

Lines changed: 1498 additions & 2553 deletions

File tree

.github/CODEOWNERS

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# These owners will be the default owners for everything in
2+
# the repo. Unless a later match takes precedence,
3+
# @global-owner1 and @global-owner2 will be requested for
4+
# review when someone opens a pull request.
5+
* @manni497

.github/ISSUE_TEMPLATE.md

Lines changed: 0 additions & 51 deletions
This file was deleted.
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
name: Create Release
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
version_type:
7+
type: choice
8+
description: Semantic Version Type
9+
options:
10+
- major
11+
- minor
12+
- patch
13+
- no-version-update
14+
15+
pre_release:
16+
type: choice
17+
description: Pre Release?
18+
options:
19+
- stable
20+
- alpha
21+
- beta
22+
- rc
23+
24+
jobs:
25+
release-it:
26+
runs-on: ubuntu-latest
27+
steps:
28+
- uses: tibdex/github-app-token@v2
29+
id: generate-token
30+
with:
31+
app_id: ${{ secrets.RELEASE_BOT_APP_ID }}
32+
private_key: ${{ secrets.RELEASE_BOT_APP_PRIVATE_KEY }}
33+
34+
- name: checkout
35+
uses: actions/checkout@v4
36+
with:
37+
token: ${{ steps.generate-token.outputs.token }}
38+
# we need everything so release-it can compare the current version with the latest tag
39+
fetch-depth: 0
40+
41+
- name: initialize mandatory git config
42+
run: |
43+
git config user.name "GitHub Release Bot"
44+
git config user.email release-bot@neolution.ch
45+
46+
- name: install yarn packages
47+
run: |
48+
yarn --frozen-lockfile
49+
50+
- name: set NPM Token
51+
run: |
52+
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > .npmrc
53+
env:
54+
NPM_TOKEN: ${{ secrets.NPM_TOKEN_NEOLUTION }}
55+
56+
- name: run release-it
57+
run: |
58+
params=()
59+
60+
if [[ ${{ github.event.inputs.version_type }} != "no-version-update" ]]; then
61+
params+=(${{ github.event.inputs.version_type }})
62+
fi
63+
64+
if [[ ${{ github.event.inputs.pre_release }} != "stable" ]]; then
65+
params+=(--preRelease=${{ github.event.inputs.pre_release }})
66+
params+=(--plugins.@release-it/keep-a-changelog.keepUnreleased)
67+
params+=(--no-plugins.@release-it/keep-a-changelog.strictLatest)
68+
fi
69+
70+
params+=(--ci)
71+
72+
yarn release-it "${params[@]}"
73+
env:
74+
GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }}

.github/workflows/pkg.pr.new.yml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
name: PKG PR New
2+
on:
3+
workflow_dispatch:
4+
pull_request:
5+
types: [opened, synchronize, ready_for_review]
6+
push:
7+
branches:
8+
- main
9+
10+
jobs:
11+
build:
12+
runs-on: ubuntu-latest
13+
14+
steps:
15+
- name: Checkout code
16+
uses: actions/checkout@v4
17+
18+
- uses: actions/setup-node@v4
19+
with:
20+
node-version: 20
21+
22+
- run: yarn --frozen-lockfile
23+
24+
# append the git commit to the package.json version.
25+
# We do this because some cache mechanisms (like nextjs) don't work well with the same version and ignore the changes
26+
# until you manually delete the cache
27+
- run: jq '.version = .version + "-" + env.GITHUB_SHA' package.json > package.json.tmp && mv package.json.tmp package.json
28+
29+
- run: npx pkg-pr-new publish

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,4 @@ coverage
2323
.tmp
2424
.vscode
2525
*.log
26+
.vs

package.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "react-popper",
2+
"name": "@neolution-ch/react-popper",
33
"version": "2.3.0",
44
"description": "Official library to use Popper on React projects",
55
"license": "MIT",
@@ -59,8 +59,8 @@
5959
],
6060
"peerDependencies": {
6161
"@popperjs/core": "^2.0.0",
62-
"react": "^16.8.0 || ^17 || ^18",
63-
"react-dom": "^16.8.0 || ^17 || ^18"
62+
"react": "^18 || ^19",
63+
"react-dom": "^18 || ^19"
6464
},
6565
"dependencies": {
6666
"react-fast-compare": "^3.0.1",
@@ -81,8 +81,8 @@
8181
"@rollup/plugin-commonjs": "^11.0.2",
8282
"@rollup/plugin-node-resolve": "^7.1.1",
8383
"@rollup/plugin-replace": "^2.3.1",
84-
"@testing-library/react": "^13.1.1",
85-
"@testing-library/react-hooks": "^8.0.0",
84+
"@testing-library/react": "^16.3.2",
85+
"@testing-library/dom": "^10.0.0",
8686
"@types/react": "^16.9.29",
8787
"babel-eslint": "^10.1.0",
8888
"babel-jest": "^25.2.4",
@@ -99,13 +99,13 @@
9999
"gh-pages": "^2.2.0",
100100
"git-branch-is": "^3.1.0",
101101
"jest": "^25.2.4",
102-
"parcel-bundler": "^1.12.4",
102+
"parcel": "^2.16.4",
103103
"prettier": "^2.0.2",
104104
"pretty-quick": "^2.0.1",
105-
"react": "18.0.0",
106-
"react-dom": "^18.0.0",
105+
"react": "^19.2.4",
106+
"react-dom": "^19.2.4",
107107
"react-spring": "^8.0.27",
108-
"react-test-renderer": "^18.0.0",
108+
"react-test-renderer": "^19.2.4",
109109
"rimraf": "^3.0.2",
110110
"rollup": "^2.3.1",
111111
"rollup-plugin-babel": "^4.4.0",

src/usePopper.test.js

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// @flow strict
2-
import { renderHook, act } from '@testing-library/react-hooks';
2+
import {renderHook, act, waitFor } from '@testing-library/react';
33
import * as PopperJs from '@popperjs/core';
44

55
// Public API
@@ -14,7 +14,7 @@ describe('userPopper', () => {
1414
});
1515

1616
it('initializes the Popper instance', async () => {
17-
const { result, waitFor } = renderHook(() =>
17+
const { result } = renderHook(() =>
1818
usePopper(referenceElement, popperElement)
1919
);
2020

@@ -25,7 +25,7 @@ describe('userPopper', () => {
2525

2626
it("doesn't update Popper instance on props update if not needed by Popper", async () => {
2727
const spy = jest.spyOn(PopperJs, 'createPopper');
28-
const { waitFor, rerender } = renderHook(
28+
const { rerender } = renderHook(
2929
({ referenceElement, popperElement }) =>
3030
usePopper(referenceElement, popperElement),
3131
{ initialProps: { referenceElement, popperElement } }
@@ -43,51 +43,61 @@ describe('userPopper', () => {
4343
it('updates Popper on explicitly listed props change', async () => {
4444
const spy = jest.spyOn(PopperJs, 'createPopper');
4545

46-
const { waitForNextUpdate, rerender } = renderHook(
46+
const { rerender } = renderHook(
4747
({ referenceElement, popperElement }) =>
4848
usePopper(referenceElement, popperElement),
4949
{ initialProps: { referenceElement, popperElement } }
5050
);
5151

52-
rerender({
53-
referenceElement,
54-
popperElement: document.createElement('div'),
52+
await act(async () => {
53+
rerender({
54+
referenceElement,
55+
popperElement: document.createElement('div'),
56+
});
5557
});
5658

57-
await waitForNextUpdate();
58-
expect(spy).toHaveBeenCalledTimes(2);
59+
await waitFor(() => {
60+
expect(spy).toHaveBeenCalledTimes(2);
61+
});
5962
});
6063

6164
it('does not update Popper on generic props change', async () => {
6265
const spy = jest.spyOn(PopperJs, 'createPopper');
63-
const { waitForNextUpdate, rerender } = renderHook(
66+
const { rerender } = renderHook(
6467
({ referenceElement, popperElement, options }) =>
6568
usePopper(referenceElement, popperElement, options),
6669
{ initialProps: { referenceElement, popperElement } }
6770
);
6871

69-
rerender({
70-
referenceElement,
71-
popperElement,
72-
options: { foo: 'bar' },
72+
await act(async () => {
73+
rerender({
74+
referenceElement,
75+
popperElement,
76+
options: { foo: 'bar' },
77+
});
7378
});
7479

75-
await waitForNextUpdate();
76-
77-
expect(spy).not.toHaveBeenCalledTimes(2);
80+
await waitFor(() => {
81+
expect(spy).toHaveBeenCalledTimes(1);
82+
});
7883
});
7984

8085
it('destroys Popper on instance on unmount', async () => {
8186
const spy = jest.spyOn(PopperJs, 'createPopper');
82-
const { waitForNextUpdate, unmount } = renderHook(() =>
87+
const { unmount } = renderHook(() =>
8388
usePopper(referenceElement, popperElement)
8489
);
8590

86-
await waitForNextUpdate();
91+
await waitFor(() => {
92+
expect(spy.mock.results[0]).toBeDefined();
93+
});
94+
8795
const popperInstance = spy.mock.results[0].value;
8896
const destroy = jest.spyOn(popperInstance, 'destroy');
8997

90-
await unmount();
98+
await act(async () => {
99+
await unmount();
100+
});
91101

92102
expect(destroy).toHaveBeenCalled();
93103
});
@@ -97,7 +107,7 @@ describe('userPopper', () => {
97107
const popperElementWithArrow = document.createElement('div');
98108
popperElementWithArrow.appendChild(arrowElement);
99109

100-
const { result, waitForNextUpdate } = renderHook(() =>
110+
const { result } = renderHook(() =>
101111
usePopper(referenceElement, popperElementWithArrow, {
102112
placement: 'bottom',
103113
modifiers: [{ name: 'arrow', options: { element: arrowElement } }],
@@ -107,8 +117,8 @@ describe('userPopper', () => {
107117
expect(result.current.styles.arrow.position).toBe('absolute');
108118
expect(result.current.styles.arrow.transform).toBeUndefined();
109119

110-
await waitForNextUpdate();
111-
112-
expect(result.current.styles.arrow.transform).toBeDefined();
120+
await waitFor(() => {
121+
expect(result.current.styles.arrow.transform).toBeDefined();
122+
});
113123
});
114124
});

0 commit comments

Comments
 (0)