Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(devtools): Add framework agnostic devtools draft #5347

Merged
merged 15 commits into from
May 2, 2023
Merged

feat(devtools): Add framework agnostic devtools draft #5347

merged 15 commits into from
May 2, 2023

Conversation

ardeora
Copy link
Contributor

@ardeora ardeora commented Apr 29, 2023

This is a initial draft of the framework agnostic Tanstack Query devtools. Will add description as it gets more fleshed out.

@vercel
Copy link

vercel bot commented Apr 29, 2023

The latest updates on your projects. Learn more about Vercel for Git ↗︎

1 Ignored Deployment
Name Status Preview Comments Updated (UTC)
query ⬜️ Ignored (Inspect) May 2, 2023 9:02am

@nx-cloud
Copy link

nx-cloud bot commented Apr 29, 2023

☁️ Nx Cloud Report

CI is running/has finished running commands for commit bedc0db. As they complete they will appear below. Click to see the status, the terminal output, and the build insights.

📂 See all runs for this branch


✅ Successfully ran 1 target

Sent with 💌 from NxCloud.

@codesandbox-ci
Copy link

codesandbox-ci bot commented Apr 29, 2023

This pull request is automatically built and testable in CodeSandbox.

To see build info of the built libraries, click here or the icon next to each commit SHA.

Latest deployment of this branch, based on commit bedc0db:

Sandbox Source
@tanstack/query-example-react-basic-typescript Configuration
@tanstack/query-example-solid-basic-typescript Configuration
@tanstack/query-example-svelte-basic Configuration
@tanstack/query-example-vue-basic Configuration

Comment on lines +39 to +45
const [devtools] = useState(
new TanstackQueryDevtools({
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should probably be a function:

useState(() => new TanstackQueryDevtools(...))

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah my bad! My brain is breaking switching my react brain on and off 😆

@ardeora
Copy link
Contributor Author

ardeora commented Apr 30, 2023

@TkDodo I think the build is working now! The demo of the new devtools can be seen here

https://codesandbox.io/p/sandbox/tanstack-query-example-react-basic-typescript-forked-m45rfk

Not sure why one of the Nx Cloud Orchestrator action is failing right now 😕

Props currently present:

export interface DevtoolsOptions {
  /**
   * Set this true if you want the dev tools to default to being open
   */
  initialIsOpen?: boolean;
  /**
   * The position of the React Query logo to open and close the devtools panel.
   * "top-left" | "top-right" | "bottom-left" | "bottom-right"
   * Defaults to 'bottom-left'.
   */
  buttonPosition?: DevtoolsButtonPosition;
  /**
   * The position of the React Query devtools panel.
   * "top" | "bottom" | "left" | "right" 
   * Defaults to 'bottom'.
   */
  position?: DevtoolsPosition;
  /**
   * Custom instance of QueryClient
   */
  client?: QueryClient;
  /**
   * Use this so you can define custom errors that can be shown in the devtools.
   */
  errorTypes?: DevToolsErrorType[];
}

Also The react devtools miss the following props:

  • panelProps
  • closeButtonProps
  • toggleButtonProps
  • containerElement
  • styleNonce

For panelProps, closeButtonProps, toggleButtonProps and containerElement I wanted to ask how useful are these? Should we also keep these props in the newer devtools

Regarding styleNonce, I'll add this but would require a little more refactoring!

I will add tests for the new components and package too. I wanted to ask what should be the threshold for completeness on the remaining items so that we can get them to merge into the alpha branch? I can prioritise the items that are needed before they can be merged for the initial release 😄

Thanks,
Hope you have a wonderful weekend!

@TkDodo
Copy link
Collaborator

TkDodo commented Apr 30, 2023

Not sure why one of the Nx Cloud Orchestrator action is failing right now 😕

It's a general issue on alpha. Working on it...

@TkDodo
Copy link
Collaborator

TkDodo commented Apr 30, 2023

Amazing ❤️. I'd have a couple of small feedback points:

  1. I found it a bit weird that these icons get a pointer cursor, but aren't really clickable:
    Screenshot 2023-04-30 at 13 35 27

also, I cannot keyboard focus those buttons, so the tooltips are only shown when using the mouse.

  1. I only knew how to hide the devtools (clicking the TanStack React Query v5 text) because I know how it works 😅 . I don't think that's intuitive, and I could see first-time users struggling to minimize them again.

  2. We fixed some time ago that the query status (stale in the image) doesn't stretch if the QueryKey is long. It seems like we're re-introducing that issue:

before:

Screenshot 2023-04-30 at 13 42 20

after:

Screenshot 2023-04-30 at 13 41 40

@TkDodo
Copy link
Collaborator

TkDodo commented Apr 30, 2023

@ardeora upgrade to node18 fixed the issue, please merge alpha into here :)

@ardeora
Copy link
Contributor Author

ardeora commented Apr 30, 2023

Amazing ❤️. I'd have a couple of small feedback points:

  1. I found it a bit weird that these icons get a pointer cursor, but aren't really clickable:

Screenshot 2023-04-30 at 13 35 27

also, I cannot keyboard focus those buttons, so the tooltips are only shown when using the mouse.

  1. I only knew how to hide the devtools (clicking the TanStack React Query v5 text) because I know how it works 😅 . I don't think that's intuitive, and I could see first-time users struggling to minimize them again.

  2. We fixed some time ago that the query status (stale in the image) doesn't stretch if the QueryKey is long. It seems like we're re-introducing that issue:

before:

Screenshot 2023-04-30 at 13 42 20

after:

Screenshot 2023-04-30 at 13 41 40

Thank you for all the great feedback!

  1. Ah yes! I'll make the tooltips more accessible! Apologies for missing that. Also the smaller icons are only available on smaller panel width sizes. Is there another way we should display the query status badges on smaller screens?

  2. I see there is a close button at the bottom left corner in the old devtools. Will adding that to the new one help?

  3. Ah I thought that was purposeful! I found it way more readable when it used to stretch the length of the query key. Also when it stretches the whole length I feel it gives a stronger visual feedback when a query's status has been changes. I can switch it to just take up the min height it requires. Let me know if you have a strong preference against it 😅

image

Thanks again for taking a look!!

@TkDodo
Copy link
Collaborator

TkDodo commented Apr 30, 2023

the smaller icons are only available on smaller panel width sizes. Is there another way we should display the query status badges on smaller screens?

Oh I missed that. No, I think that's a perfect mix 👍

I see there is a close button at the bottom left corner in the old devtools. Will adding that to the new one help?

yeah maybe top-right would actually be more where people expect it? Like a normal ❌ to close it?

I can switch it to just take up the min height it requires. Let me know if you have a strong preference against it 😅

What I think would be best is if we didn't stretch out the QueryKey like that at all, because any QueryKey with a couple of entries will take up a lot of space vertically, but horizontally, we're leaving a lot of space unused

@ardeora
Copy link
Contributor Author

ardeora commented Apr 30, 2023

If the queryKey is made to stretch out horizontally too, the serialized key will lose the prettified display. Would that make it more readable though?

@TkDodo
Copy link
Collaborator

TkDodo commented Apr 30, 2023

ah, I see, we do this on purpose 🤔 . I don't care too much tbh 😅

@codecov-commenter
Copy link

codecov-commenter commented Apr 30, 2023

Codecov Report

Patch coverage has no change and project coverage change: -0.67 ⚠️

Comparison is base (c561e8b) 90.08% compared to head (5145a4c) 89.42%.

📣 This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more

Additional details and impacted files
@@            Coverage Diff             @@
##            alpha    #5347      +/-   ##
==========================================
- Coverage   90.08%   89.42%   -0.67%     
==========================================
  Files          76       71       -5     
  Lines        2672     2354     -318     
  Branches      737      608     -129     
==========================================
- Hits         2407     2105     -302     
+ Misses        233      206      -27     
- Partials       32       43      +11     

see 9 files with indirect coverage changes

☔ View full report in Codecov by Sentry.
📢 Do you have feedback about the report comment? Let us know in this issue.

@ardeora
Copy link
Contributor Author

ardeora commented May 1, 2023

Okay so I added the close button. The preview for it is here!

close-button.mov

@ardeora
Copy link
Contributor Author

ardeora commented May 1, 2023

And the tooltip is now keyboard focusable! And only shows cursor:pointer when we're showing the condensed view. Please let me know if there are any improvements that I can make. Thanks again for reviewing this

tooltip.mov

@TkDodo
Copy link
Collaborator

TkDodo commented May 1, 2023

that collapse button is amazing 🚀

@TkDodo
Copy link
Collaborator

TkDodo commented May 1, 2023

If we plan to release @tanstack/query-devtools as a separate npm package, we would need to add it to scripts/config.ts. Order is important there, so probably before react-query-devtools

"vite-plugin-solid": "^2.5.0"
},
"dependencies": {
"@tanstack/query-core": "workspace:*",
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure how this works with dependencies and peerDependencies. Does this not mean that the query-devtools will bring their own version of the query-core?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess this is fine for now since we only use the types from query core so nothing from query-core is bundled in the query-devtools build. But I'll try to add it to peerDependencies and see if that breaks anything! peerDependencies would make more sense here. Also will update the scripts/config.ts in a bit!

@ardeora
Copy link
Contributor Author

ardeora commented May 1, 2023

Okay moved the query-core to the peerDependencies looks like everything is still working! Also updated scripts/config.ts to release query-devtools too!

@ardeora
Copy link
Contributor Author

ardeora commented May 1, 2023

Weird that it didn't create the codesandbox examples though 😕 Not sure why that happened?

@TkDodo
Copy link
Collaborator

TkDodo commented May 1, 2023

Weird that it didn't create the codesandbox examples though 😕 Not sure why that happened?

could be an upstream issue with CSB

@ardeora
Copy link
Contributor Author

ardeora commented May 2, 2023

Okay the codesandbox examples are back! 🥳 The only that is complaining is the Nx Cloud Orchestrator again with a very cryptic error message 😅

@TkDodo
Copy link
Collaborator

TkDodo commented May 2, 2023

if you scroll further up, you'll see a test failure:

 ❯ src/__tests__/useQuery.test.tsx  (127 tests | 1 failed) 8448ms
   ❯ src/__tests__/useQuery.test.tsx > useQuery > should update query state and not refetch when resetting a disabled query with resetQueries
     → expected 3 to be 4 // Object.is equality

we do 3 retries to avoid flaky tests. I doubt that this one is broken by this PR, so maybe it's really flaky :/

@TkDodo
Copy link
Collaborator

TkDodo commented May 2, 2023

you can see a better output in the nx dashboard: https://cloud.nx.app/runs/hGnuEGn28R

@ardeora
Copy link
Contributor Author

ardeora commented May 2, 2023

Okay sweet! It finally worked! 🥳

@TkDodo
Copy link
Collaborator

TkDodo commented May 2, 2023

nice, do you want to ship it?

@ardeora
Copy link
Contributor Author

ardeora commented May 2, 2023

We can! Since it's the alpha branch, It would be nice to get more feedback! Also I can add tests in a separate PR because I still need to figure how to run tests where one package's test suit (react query devtools) depends on another package (query-devtools) being built. Let me know if you have any other concerns, otherwise let's ship it! 🥳

@TkDodo
Copy link
Collaborator

TkDodo commented May 2, 2023

I still need to figure how to run tests where one package's test suit (react query devtools) depends on another package (query-devtools) being built.

hmm why would you need the package being built? react-query depends on query-core, so we just use the sources from that ...

but yeah, lets ship it and announce on twitter

@TkDodo TkDodo merged commit 7b3d70a into TanStack:alpha May 2, 2023
@ardeora
Copy link
Contributor Author

ardeora commented May 2, 2023

Yes! Works for query-core since it's pure JS. I'm still using JSX within solid-js and solids jsx and react's jsx compile very differently! Would be very different for svelte and vue too. There might be a way for it to make it work but I might need to spend a little more time!

@rtrembecky
Copy link

hi, I just tried upgrading @tanstack/react-query-devtools to 5.0.0-alpha.27 in a next.js project and I'm getting this error when running the dev app:

SyntaxError: Named export 'TanstackQueryDevtools' not found. The requested module '@tanstack/query-devtools' is a CommonJS module, which may not support all module.exports as named exports.

does this PR solve it? thanks

@rtrembecky
Copy link

rtrembecky commented May 4, 2023

confirming 5.0.0-alpha.30 solves it 👍

by the way, it still brought an issue of

ReferenceError: document is not defined
    at template (file:///Users/my_user/my_project/node_modules/@tanstack/query-devtools/build/esm/index.mjs:809:13)
    at file:///Users/my_user/my_project/node_modules/@tanstack/query-devtools/build/esm/index.mjs:5042:31
    at ModuleJob.run (node:internal/modules/esm/module_job:193:25)
    at async Promise.all (index 0)
    at async ESMLoader.import (node:internal/modules/esm/loader:526:24)
    at async importModuleDynamicallyWrapper (node:internal/vm/module:438:15) {

but that I identified as an error of next.js trying to import the component on the server, which doesn't have document. I went around it using dynamic import:

import dynamic from 'next/dynamic'

const ReactQueryDevtools = dynamic(
  () => import('@tanstack/react-query-devtools').then(({ReactQueryDevtools}) => ReactQueryDevtools),
  {
    ssr: false,
  },
)

I'll raise this as an issue, as you may want to keep it working on fullstack frameworks out-of-the-box, just as before

@ardeora
Copy link
Contributor Author

ardeora commented May 4, 2023

confirming 5.0.0-alpha.30 solves it 👍

by the way, it still brought an issue of


ReferenceError: document is not defined

    at template (file:///Users/my_user/my_project/node_modules/@tanstack/query-devtools/build/esm/index.mjs:809:13)

    at file:///Users/my_user/my_project/node_modules/@tanstack/query-devtools/build/esm/index.mjs:5042:31

    at ModuleJob.run (node:internal/modules/esm/module_job:193:25)

    at async Promise.all (index 0)

    at async ESMLoader.import (node:internal/modules/esm/loader:526:24)

    at async importModuleDynamicallyWrapper (node:internal/vm/module:438:15) {

but that I identified as an error of next.js trying to import the component on the server, which doesn't have document. I went around it using dynamic import:

import dynamic from 'next/dynamic'



const ReactQueryDevtools = dynamic(

  () => import('@tanstack/react-query-devtools').then(({ReactQueryDevtools}) => ReactQueryDevtools),

  {

    ssr: false,

  },

)

I'll raise this as an issue, as you may want to keep it working on fullstack frameworks out-of-the-box, just as before

Hello! Apologies for the late reply! Thanks for trying it and yeah using next/dynamic is the correct approach to get the devtools working currently! I have a personal branch where I have gotten it to work out of the box like the previous devtools. I need some more testing before we merge it into the alpha branch. It would be helpful if you could create a new issue so that we can track the progress there! Hope you have a nice day!

@rtrembecky
Copy link

no problem, thanks for any reply 😄 issue already created here: #5369

TkDodo added a commit that referenced this pull request Jul 24, 2023
* release: v5.0.0-alpha.11

* refactor(core): unify hydration options (#5131)

* refactor: unify hydration options

* docs: update hydration docs

* migration guide

* refactor: use shouldDehydrate... syntax

* Update docs/react/guides/migrating-to-v5.md

Co-authored-by: Fredrik Höglund <fredrik.hoglund@gmail.com>

* Apply suggestions from code review

* chore: fix tests

* chore: fix tests

* Update docs/react/reference/hydration.md

---------

Co-authored-by: Fredrik Höglund <fredrik.hoglund@gmail.com>

* release: v5.0.0-alpha.12

* release: v5.0.0-alpha.13

* chore: remove unused devDependencies (#5211)

* refactor(react-query-devtools): move devtools components in files (#5150)

* refactor(react-query-devtools): move QueryStatusCount header to subdirectory

* refactor(react-query-devtools): move QueryRow to subdirectory

* refactor(react-query-devtools): move ActiveQuery to subdirectory

* refactor(react-query-devtools): move Cache Panel to subdirectory

* lint

* refactor: add display names

* fix: typo

* release: v5.0.0-alpha.14

* fix(solid-query): SSR fixes - Inconsistent state (#5093)

* fix(solid-query): do not call unsubscribe on the server

* fix(solid-query): prefer val from queryResource if

it is available there

* chore: add hydration debugger to solid ssr example

* bump minimum solid-js version

* chore: pnpm i

* chore: fix rollup babel typings

Result of this change upstream that types the “targets” property -> https://github.com/DefinitelyTyped/DefinitelyTyped/pull/63927/files#diff-a4da813bfdc10bbb7d4d9ee9b811309e7e2a16c0484b9a334752db84be4b0f31

Signed-off-by: marbemac <marbemac@gmail.com>

* replace void 0

Signed-off-by: marbemac <marbemac@gmail.com>

* chore: remove uncessary onMount

Signed-off-by: marbemac <marbemac@gmail.com>

* chore: skip this onComputed on first render

Signed-off-by: marbemac <marbemac@gmail.com>

* fix: copy state properties over for ssr hydration

Signed-off-by: marbemac <marbemac@gmail.com>

---------

Signed-off-by: marbemac <marbemac@gmail.com>

* release: v5.0.0-alpha.15

* fix(solid-query): Fix non hydrating queries (#5229)

* release: v5.0.0-alpha.16

* release: v5.0.0-alpha.17

* docs(react): fix typo in TypeScript.md (#5239)

Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>

* fix: do not mutate input (#5240)

* fix: do not mutate input

params passed to function from consumers should be treated as readonly and thus shouldn't be modified

* test: remove unexpected `exact` props from find methods

---------

Co-authored-by: Damian Osipiuk <osipiukd+git@gmail.com>

* release: v5.0.0-alpha.18

* docs: update migrating-to-v5 (#5274)

I think the rocket emoji is causing a visual bug too but since I edited this through GitHub's UI, I couldn't confirm.

* fix(query-core): correct placeholderData prevData value with select fn (#5227)

* fix(query-core): correct placeholderData prevData

* fix(query-core): preserves correct prevQueryResult

This commit preserves the correct previous result between rerenders.

* test(react-query): Test with placeholder & select

* fix(query-core): Add lastDefinedQueryData property

* fix(query-core): Remove console.log

* fix(query-core): Add react-query test

* release: v5.0.0-alpha.19

* feat(solid-query): Add `reconcile` option (#5287)

* feat(solid-query): Add `reconcile` option

* feat(solid-query): Add `reconcile` callback test

* release: v5.0.0-alpha.20

* chore: adapt tests to v5 syntax after merge

* feat: remove callbacks from QueryObserver (#5282)

* feat: remove callbacks from QueryObserver

types are passing now

* test: remove some more callback related tests

* docs: migration guide for removed callbacks

* chore: fix broken lock file

* chore: remove unused variables

those were only needed on main for keepPreviousData, which doesn't exist anymore

* release: v5.0.0-alpha.21

* fix(solid-query): Remove unserializable values (#5326)

* release: v5.0.0-alpha.22

* feat: rename throwErrors to throwOnError (#5318)

* feat: rename throwErrors to throwOnError

to be aligned with the options we already have on imperative methods, like `invalidateQueries`

* docs: fix outdated code reference

* chore: rename type

* fix: let the refetchInterval function also return undefined

and fall back to false if it does

* release: v5.0.0-alpha.23

* docs: remove duplicated `isInitialLoading` (#5327)

* fix: make sure codemods are included in react-query (#5340)

* chore: fix pr pipeline (#5345)

* chore: remove unneeded script

* chore: fix syntax error after merging

* Empty-Commit

* chore: update to node18 to hopefully fix CI issues

see: vitest-dev/vitest#1191 (comment)

* chore: don't throw error if build dir already exists

* release: v5.0.0-alpha.24

* feat: queryOptions helper function (#5153)

* feat: queryOptions helper function

so that we can define and share options outside of useQuery, but still get the type inference

* docs: queryOptions

* docs: remove reference to onError

* docs: update migration guide

* release: v5.0.0-alpha.25

* chore: remove createStore option (#5352)

having the option to customize the internal store sound nice, but the problem is that the store holds Query instances, not data. So, the setter is only called once, not on every data update. This makes it relatively useless - every time we thought we could leverage createStore, it fell short of our requirements because of this.

The better way is usually to subscribe to the QueryCache directly

* docs: remove callbacks from useQuery

* fix(core): make sure refetching multiple queries imperatively works offline (#5249)

* fix(core): make sure refetching multiple queries imperatively works offline

* test: add another test for different networkMode

* fix: always catch promises even if we don't return them because we are offline

* release: v5.0.0-alpha.26

* chore: svelte-query tests, validatePackages changes

* feat(devtools): Add framework agnostic devtools (#5347)

* feat(devtools): Add framework agnostic devtools draft

* Fix test

* Move query-devtools build before react-query-devtools

* Fix dimensions bug & add isInitialOpen props

* Fix isOpen state

* Add devtools cutom errorTypes option

* Add explicit close button

* Add keyboard focus for tooltips

* Add query-core to query-devtools peerDependencies

* Update pnpm lock file

* Add overflow hidden to hide filters on top view

* Revert overflow hidden - causing other issues

* Update documentation

* Fix validate-packages script

---------

Co-authored-by: Dominik Dorfmeister <office@dorfmeister.cc>

* fix(query-devtools): Add query-core to devDependencies (#5360)

* fix(query-devtools): Add query-core to devDependencies

* Fix pnpm-lock.yaml

* release: v5.0.0-alpha.27

* feat(solid-query): `queryOptions` helper for solid-query (#5355)

* feat: queryOptions helper for solid-query

* add tests

* fix imports

* release: v5.0.0-alpha.28

* feat(svelte-query-devtools): Svelte Adapter for new Devtools (#5362)

* Implement working devtools component

* Fix pnpm-lock.yaml

* Update workspace config

* Always a prettier error

* Fix eslint error

* Fix test:types

* Add svelte-query to deps

* Use esm-env to block loading in prod

* Remove example changes

* Simpler export

* Allow dynamically editing props

* Run prettier

* fix(devtools): Update ESM export extension (#5364)

* fix(devtools): Update ESM export extension

* Update Svelte devtools types error

* Fix svelte-query-devtools types error

* release: v5.0.0-alpha.29

* feat(devtools): Make queryclient reactive (#5366)

* release: v5.0.0-alpha.30

* Revert changes to svelte-query build

* fix(svelte-query-devtools): Fix tsconfig paths

* fix(svelte-query-devtools): Fix issue parsing JSX (#5372)

* feat(query-core): Add previousQuery to placeholderFn (#5358)

* feat(query-core): Add previousQuery to placeholderFn

* Add query-core and react-query tests

* Remove unused query type

---------

Co-authored-by: Dominik Dorfmeister <office@dorfmeister.cc>

* release: v5.0.0-alpha.31

* docs: Update dependent-queries.md (#5391)

I believe `isLoading` has been renamed to `isPending`

* refactor: unwrap listeners

* chore: relax eslint for tests

* release: v5.0.0-alpha.32

* docs: new docs for placeholderData

* feat(useQueries): combine (#5219)

* attempt at adding combine on observer level (doesn't work)

* feat(useQueries): combine

adapt getOptimisticResult to return both the result array and a combined result getter

* feat(useQueries): combine

make sure combinedResult stays in sync with result

* feat(vue-query): combine results for useQueries hook

* Add new options to svelte-query

* Add new options to solid-query

* fix: enable property tracking for useQueries

* fix: move property tracking to react layer

* chore: remove logging

* chore: remove unnecessary type assertion

* test: tests for combined data

* docs: combine

---------

Co-authored-by: Damian Osipiuk <osipiukd+git@gmail.com>
Co-authored-by: Lachlan Collins <1667261+lachlancollins@users.noreply.github.com>
Co-authored-by: Aryan Deora <adeora@iu.edu>

* docs: combine

* chore: setup fallback base to origin/main

if we trigger a release manually via github, this value might not be filled

* release: v5.0.0-alpha.34

* docs: update installation

* chore: Improve eslint/tsconfig setup in svelte packages (#5438)

* fix(types): fix TError generic on queryOptions

* release: v5.0.0-alpha.35

* release: v5.0.0-alpha.36

* chore: Bump eslint version to 8.34.0 (#5439)

* feat(svelte-query): Simplify types (#5442)

* release: v5.0.0-alpha.37

* chore: Update dev dependencies (#5466)

* chore: Replace cp with cpy-cli (#5441)

Co-authored-by: Dominik Dorfmeister <office@dorfmeister.cc>

* fix: Update typescript-eslint (#5467)

* release: v5.0.0-alpha.38

* chore: More package updates (#5468)

* chore: Link examples to workspace packages (#5469)

* feat(svelte-query): Switch to moduleResolution bundler (#5471)

* fix: Downgrade chalk to v4 (#5472)

* release: v5.0.0-alpha.39

* docs: change Hydrate->HydrationBoundary (#5455)

* updated docs on SSR
Hydrate -> HydrationBoundary

* docs(ssr): change Hydrate->HydrationBoundary

change Hydrate->HydrationBoundary to remove deprecated component

* docs(ssr): rename all Hydrate->HydrationBoundary

rename all Hydrate instances ->HydrationBoundary for consistency

* feat(react-query-persist-client): await onuccess (#5473)

* fix: have `onSuccess` return a promise too so that we can await it

that way, invalidation or mutations that run in onSuccess will still keep isRestoring to be false, which avoids race conditions

* test: test for awaiting onSuccess

* docs: onSuccess

* release: v5.0.0-alpha.40

* release: v5.0.0-alpha.41

* chore: Regenerate alpha lockfile (#5477)

* docs(solid-query): Fix API signature in overview.md (#5470)

* docs(svelte-query): Add svelte-query-devtools to examples (#5478)

* chore: Clean-up eslint config (#5481)

* chore: More eslint improvements (#5482)

* feat: Convert rollup config to ESM (#5484)

* chore: Migrate scripts to ESM (#5486)

* feat: Split rollup config for Nx caching (#5487)

* fix: Fix CJS/ESM issue with @commitlint/parse

I can't believe these issues still exist, see evanw/esbuild#1719

* chore: Update prettier, eslint, rollup, scripts (#5490)

* chore: Fix prettierignore

* release: v5.0.0-alpha.42

* fix: Update @commitlint/parse (#5491)

See conventional-changelog/commitlint#3614

* release: v5.0.0-alpha.43

* chore: Add eslint-plugin-compat (#5495)

* Fix workspace links

* Add eslint-plugin-compat

* Update nx.json

* fix: Improve workspace tsconfig (#5497)

* release: v5.0.0-alpha.44

* fix: Move deps/devDeps/peerDeps to appropriate location (#5498)

* chore: Extend base tsconfig for svelte packages (#5501)

* release: v5.0.0-alpha.45

* chore: Make test:types have no Nx output (#5500)

* feat: Remove svelte field from package.json (#5504)

* release: v5.0.0-alpha.46

* feat: Add explicit package.json `type` field (#5505)

* release: v5.0.0-alpha.47

* chore: Fix nx affected (#5509)

* fix: Fix ESLint warnings (#5510)

* release: v5.0.0-alpha.48

* chore: Update to Nx 16.3.1 (#5514)

* chore: Update to nx 16.3.1

* Update pnpm-lock.yaml

* chore: Update Nx cloud workflow (#5515)

* feat: Drop legacy webpack v4 support (#5507)

* release: v5.0.0-alpha.49

* feat: Remove UMD build output (#5517)

* release: v5.0.0-alpha.50

* chore: Rework rollup externals (#5519)

* feat: Refactor package exports (#5520)

* chore: Remove publint error temporarily

* release: v5.0.0-alpha.51

* fix: Publint error in solid-query (#5522)

* release: v5.0.0-alpha.52

* fix: Simplify exports in solidjs packages (#5523)

* release: v5.0.0-alpha.53

* chore: Improve Nx task separation (#5524)

* Fix ci workflow

nx run-many doesn't use --base

* feat(query-devtools): Lazyload Query Devtools Core (#5527)

* release: v5.0.0-alpha.54

* fix(query-devtools): Broken package.json exports (#5528)

* Make publint throw errors

* Rewrite CJS files to use .cjs extension

* Add concurrency option to PR workflow

* Fix export extensions

* release: v5.0.0-alpha.55

* chore: Re-enable Nx Distributed Task Execution (#5518)

* fix(query-devtools): inform onlineManager when offline mode is simulated (#5534)

* release: v5.0.0-alpha.56

* docs: make returning a promise for optimistic updates more explicit (#5485)

* fix(codemod): do not mark the `buildMessage` method as private (#5546)

* fix(codemod): do not mark the `buildMessage` method as private

It might fail because of the lack of support.

* chore(codemod): add missing `filePath` parameter to the docblock

* release: v5.0.0-alpha.57

* fix(query-devtools): Fix getSidedProp bug (#5551)

* release: v5.0.0-alpha.58

* chore: Update publish script (#5559)

* fix(query-devtools): Add chunkFileNames option (#5560)

* release: v5.0.0-alpha.59

* fix: Change `svelte-package` output directory (#5561)

* release: v5.0.0-alpha.60

* release: v5.0.0-alpha.61

* chore: try to stabilize test

* fix(solid-query): Use rollup-preset-solid (#5565)

* release: v5.0.0-alpha.62

* feat: Add legacy rollup builds (#5570)

* release: v5.0.0-alpha.63

* docs: Add `"private": true` to examples (#5578)

* release: v5.0.0-alpha.64

* fix(useIsMutating): fix vue warning (#5453)

onScopeDispose() is called when there is no active effect scope to be associated with

* release: v5.0.0-alpha.65

* feat(infiniteQuery): allow prefetching arbitrary amounts of pages (#5440)

* refactor: combine fetching first page with refetching

as it's the same condition

* feat(infiniteQuery): allow prefetching arbitrary amounts of pages

* test prefetching

* fix: make sure that pages and getNextPageParam are passed in tandem to (pre)fetchInfiniteQuery

* docs: prefetching

* chore: try to stabilize test

* docs: migration guide

* release: v5.0.0-alpha.66

* refactor: move queryOptions to its own file (#5480)

* refactor: remove 'use client' from non-components

* refactor: move queryOptions to its own file

where we don't have a 'use client' directive, because we can call this function on the server as well

* Revert "refactor: remove 'use client' from non-components"

This reverts commit 8ecac66.

* refactor: rename isRestoring file

* chore: fix import

* release: v5.0.0-alpha.67

* fix: Update eslint-plugin-query build config (#5601)

* fix: Use pnpm workspace protocol (#5600)

* release: v5.0.0-alpha.68

* chore: Use nx watch command (#5605)

* fix(solid-query): revert package.json typo (#5615)

* release: v5.0.0-alpha.69

* release: v5.0.0-alpha.70

* release: v5.0.0-alpha.71

* chore: Fix Nx parallelisation for vue-query tests (#5635)

Co-authored-by: Dominik Dorfmeister <office@dorfmeister.cc>

* fix(devtools): padding for action buttons (#5608)

global `button` styles would otherwise affect buttons

* release: v5.0.0-alpha.72

* feat: Support Svelte v4 (#5659)

* feat: Support svelte v4

* Downgrade @testing-library/svelte

* Upgrade @testing-library/svelte to 4.0.3

* Refactor onMount dynamic import

* release: v5.0.0-alpha.73

* fix(eslint-plugin-query): Use tsup to generate types (#5666)

* release: v5.0.0-alpha.74

* fix: Skip queryClient context lookup if client passed directly (#5669)

* release: v5.0.0-alpha.75

* feat: Accept all svelte stores as options (#5672)

* refactor: Accept stores other than writable

* Cleanup Readable type import

* Add tests

* Stricter isSvelteStore check

* Update docs

* Fix input bind

* Add testing-library cleanup

* release: v5.0.0-alpha.76

* fix(svelte-query): Fix staleTime reactivity bug (#5682)

* release: v5.0.0-alpha.77

* chore(svelte-query): Update reactivity docs and tests (#5683)

* fix(query-devtools): Bundle all dependencies (#5684)

* release: v5.0.0-alpha.78

* release: v5.0.0-alpha.79

* feat: react-query-next-experimental package (#5598)

* chore: fix a copy-paste error

* chore: bootstrap package

* chore: setup package

* chore: allow passing with no tests

* fix: remove 'use client' from index bundle

* chore: cleanup copy/paste error

* chore: fix prettier

* refactor: replace ref with direct props access

* fix: do not write to refs during render

* refactor: inline function into useEffect to avoid useCallback

* fix: eslint no-shadow

* refactor: namespace id

* refactor: removed pointless check

* fix: set to empty array on cleanup

* fix: adapt for v5 changes

* chore: fix build

* docs: add streaming example

* chore: fix outdated lockfile

* chore: fix prettier

* refactor: remove isSubscribed ref

* refactor: re-arrange comment

* chore: remove comments

* chore: fix broken lock file

* feat: allow customization of hydrate / dehydrate options

and make sure we fall back to the defaultShouldDehydrate function, which only dehydrates successful queries

* release: v5.0.0-alpha.80

* docs: fix nextjs-streaming example

* fix(core) : sync Observer 'current' properties when optimistic reading occurs (#5611)

* fix-5538 : sync Observer 'current' properties when optimistic reading occurs

* Flip test on currentResult with placeholderData's order & add test

* Fix tests using the same queryKey

* remove options.placeHolderData from deciding whether to assign observer current properties, use equalitycheck on v5

* maybe fix for vue reactivity cbs

* test(vue-query): test persister with useQuery

* Force line terminator to \\n on codemods tests

* Revert " Force line terminator to \\n on codemods tests"

This reverts commit 6f0a469.

---------

Co-authored-by: Dominik Dorfmeister <office@dorfmeister.cc>
Co-authored-by: Damian Osipiuk <osipiukd+git@gmail.com>

* chore: Force line terminator to \\n on codemods tests (#5664)

Co-authored-by: Dominik Dorfmeister <office@dorfmeister.cc>

* chore: stabilize a flaky test

* release: v5.0.0-alpha.81

* docs: remove devtools from example

because they currently don't work

* fix(query-devtools): Force publish package (#5715)

* release: v5.0.0-alpha.82

* docs: re-enable devtools

* fix: Update dev dependencies (#5718)

* release: v5.0.0-alpha.83

* chore: Add vite to root package.json (#5722)

* refactor: Add new eslint sorting from main (#5723)

* release: v5.0.0-alpha.84

* chore: Update vite and vitest (#5724)

* chore: Remove eslint-plugin-compat (#5732)

* feat: include meta in query and mutation hydration (#5733)

* feat: include `meta` in query and mutation hydration

* test: tests for meta hydration

* chore: stabilize a flaky test

* chore: stabilize another flaky test

* release: v5.0.0-alpha.85

* fix(onlineManager): always initialize with `online: true` (#5714)

* fix(onlineManager): always initialize with `online: true`

instead of relying on navigator.onLine, because that indicator is broken AF in chrome

https://bugs.chromium.org/p/chromium/issues/list?q=navigator.online

* docs: document subscribe methods

* docs

* test: fix types in tests

setting to undefined is now illegal, so we have to reset to `true`, which is the default now

* fix(tests): switch from mocking navigator.onLine to mocking onlineManager.isOnline

* fix: offline toggle in devtools

it should now be enough to set online to true / false, without firing the event, because we always set & respect that value. we don't override the event handler, so real online / offline events might interfere here

* chore: fix tests

with the implementation of onlineManager, where we default to `true`, we need an explicit `'offline'` event to get it to false; otherwise, switching back to true doesn't change the state, so subscribers are not informed

* chore: prettier write

* chore: fix eslint

* chore: delete an old, flaky test that doesn't test much

* release: v5.0.0-alpha.86

* docs: use bundlejs for bundle-size

* docs: fix link

* feat: Replace rollup with tsup/esbuild (#5597)

Co-authored-by: Dominik Dorfmeister <office@dorfmeister.cc>
Co-authored-by: Aryan Deora <adeora@iu.edu>

* release: v5.0.0-alpha.87

* chore: Simplify tsconfig (#5745)

* fix: Simplify devDependencies (#5747)

* fix: Fix tsconfig "include" setting (#5750)

* release: v5.0.0-alpha.88

* docs: fix potential typo (#5748)

* fix potential typo

* Update docs/react/guides/queries.md

---------

Co-authored-by: Dominik Dorfmeister <office@dorfmeister.cc>

* fix: Add missing extensions to ESM imports (#5751)

* chore: Bundler integration tests (#5756)

* Add react-cra5 test

* Add react-cra4 test

* Add react-vite test

* Add svelte-vite test

* Add solid-vite test

* Run prettier

* Rename script to test:bundle

* Add vue-vite test

* Run prettier

* fix(query-devtools): Fix Devtools Build Issues (#5768)

* release: v5.0.0-alpha.89

* feat(codemod): add codemod that renames the `Hydrate` component usages to `HydrationBoundary` usages (#5761)

* feat(codemod): add codemod that renames the `cacheTime` and `useErrorBoundary` object properties and TypeScript property signatures (#5765)

* feat(react-query): useSuspenseQuery (#5739)

* feat: useSuspenseQuery

* feat: infiniteQueryOptions

* fix: add exports

* feat: useSuspenseInfiniteQuery

* feat: initialData overloads for useInfiniteQuery

* fix: types

* chore: stabilize test

we sometimes get failureCount: 2, but it doesn't matter here (timing issue)

* fix: types for useSuspenseQuery (#5755)

* docs: suspense

* docs: api reference

* docs: useSuspenseQuery in examples

* fix: types for useSuspenseInfiniteQuery (#5766)

---------

Co-authored-by: Jonghyeon Ko <manudeli.ko@gmail.com>

* release: v5.0.0-alpha.90

* chore: fix prettier

* chore: fix tests

* release: v5.0.0-alpha.91

---------

Signed-off-by: marbemac <marbemac@gmail.com>
Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
Co-authored-by: Tanner Linsley <tannerlinsley@users.noreply.github.com>
Co-authored-by: Fredrik Höglund <fredrik.hoglund@gmail.com>
Co-authored-by: Gabriel Pichot <gabriel.pichot@gmail.com>
Co-authored-by: Marc MacLeod <marbemac@gmail.com>
Co-authored-by: Aryan Deora <adeora@iu.edu>
Co-authored-by: Eng Zer Jun <engzerjun@gmail.com>
Co-authored-by: Damian Osipiuk <osipiukd+git@gmail.com>
Co-authored-by: Arthur Denner <arthurdenner7@gmail.com>
Co-authored-by: Ilya <marchukilya@gmail.com>
Co-authored-by: Lachlan Collins <1667261+lachlancollins@users.noreply.github.com>
Co-authored-by: OrJDev <91349014+OrJDev@users.noreply.github.com>
Co-authored-by: Enguerrand des Vaux <enguerrand@des-vaux.fr>
Co-authored-by: Dennis kinuthia <denniskinuthiaw@gmail.com>
Co-authored-by: Yuji Sugiura <leader22@users.noreply.github.com>
Co-authored-by: Yaroslav Lapin <jlarky@gmail.com>
Co-authored-by: Balázs Máté Petró <petrobalazsmate@gmail.com>
Co-authored-by: Aleksandr Semenov <juvirez@gmail.com>
Co-authored-by: Matthew Salsamendi <matthewsalsamendi@gmail.com>
Co-authored-by: Speros Kokenes <skokenes@users.noreply.github.com>
Co-authored-by: EL AYADI Mohamed <moh.el.ayadi@gmail.com>
Co-authored-by: Dale Seo <5466341+DaleSeo@users.noreply.github.com>
Co-authored-by: Jonghyeon Ko <manudeli.ko@gmail.com>
@markmssd
Copy link

markmssd commented Oct 4, 2024

@TkDodo I think the build is working now! The demo of the new devtools can be seen here

https://codesandbox.io/p/sandbox/tanstack-query-example-react-basic-typescript-forked-m45rfk

Not sure why one of the Nx Cloud Orchestrator action is failing right now 😕

Props currently present:

export interface DevtoolsOptions {
  /**
   * Set this true if you want the dev tools to default to being open
   */
  initialIsOpen?: boolean;
  /**
   * The position of the React Query logo to open and close the devtools panel.
   * "top-left" | "top-right" | "bottom-left" | "bottom-right"
   * Defaults to 'bottom-left'.
   */
  buttonPosition?: DevtoolsButtonPosition;
  /**
   * The position of the React Query devtools panel.
   * "top" | "bottom" | "left" | "right" 
   * Defaults to 'bottom'.
   */
  position?: DevtoolsPosition;
  /**
   * Custom instance of QueryClient
   */
  client?: QueryClient;
  /**
   * Use this so you can define custom errors that can be shown in the devtools.
   */
  errorTypes?: DevToolsErrorType[];
}

Also The react devtools miss the following props:

  • panelProps
  • closeButtonProps
  • toggleButtonProps
  • containerElement
  • styleNonce

For panelProps, closeButtonProps, toggleButtonProps and containerElement I wanted to ask how useful are these? Should we also keep these props in the newer devtools

Regarding styleNonce, I'll add this but would require a little more refactoring!

I will add tests for the new components and package too. I wanted to ask what should be the threshold for completeness on the remaining items so that we can get them to merge into the alpha branch? I can prioritise the items that are needed before they can be merged for the initial release 😄

Thanks, Hope you have a wonderful weekend!

I was looking through issues before opening a new one about closeButtonProps and toggleButtonProps props missing in V5, and I found this thread!

In our case, we use those to pass in a onClick prop. We use a custom button in a top admin bar to toggle the devtools. We can use the ReactQueryDevtoolsPanel, but it's lacking the nice builtin resizing functionality.

I think that ideally, there should only be one type of dev tool, but have it configurable. For example, not setting buttonPosition at all would not show it, and only setting it would then show the builtin button. isOpen would also be optional. When omitting it, the devtool would simply be controlled by the builtin button, but we can also use it to control it ourselves. We could also have a resizable?: boolean prop, for the drag-to-resize functionality. What do you think?

If that makes sense, I can attempt a PR and get more feedback. Thanks in advance!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants