documentation regarding subscription error handling using onUnauthorized and onUnavailable.
We allow users to do stuff when a subscription throws an error, but this wasn't documented. I added documentation.
We allow users to do stuff when a subscription throws an error, but this wasn't documented. I added documentation.
We were previously warning users to avoid using never and signedUp on iOS, as this could result in credentials being cached to the keychain, which would not be deleted when deleting the app. In this case, if the user re-installed the app, their client could crash, as the account for which the credentials were created no longer existed. We now recommend that users who want to keep completely local data without syncing use a randomised prefix for their credentials, and store this in the Settings (which is deleted on app uninstallation).
The Jazz docs site has an interactive chat demo embedded in an iframe. It wasn't working because the page was listening for the wrong event from the iframe. I fixed it to listen to the correct event so the demo works properly again.
The Jazz homepage has a QR code and a link for quickly getting started, but they were broken because the URL was missing a hash fragment. I added the missing hash so both the QR code and the link work correctly.
Safari's Web Locks API doesn't release immediately on navigation, which was causing the browser to effectively hang when viewing our docs landing page. This PR moved the co-ordination of the routes to a parent component.
Jazz is a framework for building real-time collaborative apps. I fixed a small documentation issue where the example invite URL wasn't formatted correctly -- it now uses a hash fragment, which is the proper way to structure these links so that sensitive information isn't sent to the server.
Our docs previously had a page showing how to use Jazz's version control functionality with React. I updated our docs to show how it can be done across all our supported frameworks.
I'm quite proud of this one: I build a minimal Jazz example (a working to-do list with sync in less than 100 lines of code), and published it on our docs landing page.
There was a security issue in Next due to an issue in React. I bumped our Next versions.
Our nav was behaving strangely following an update designed to ensure the correct segments were always open. I fixed it.
The Jazz website has a showcase page that highlights apps built with the framework. On mobile phones, the images and text were spilling out of their containers and looking messy. I fixed the layout so everything stays neatly within bounds on smaller screens.
Jazz is a framework for building collaborative apps. The React Native setup guide said to "install" some compatibility patches, but you don't actually install them as separate packages -- you apply them in your code. I updated the wording to be more accurate and less confusing for developers following the guide.
In our React Native and Expo documentation, we had some references to outdated practices and unnecessary modules. I refactored the docs to remove these, and I also consolidated the polyfills into a single module which can be imported directly from Jazz.
In Jazz, you can use 'selectors' to avoid React re-rendering on every state update. However, the selector function itself still runs. Added tips on avoiding heavy computation inside selector functions, and how to extract that into a useMemo call outside the selector to take advantage of batching.
The Jazz website had a promotional banner for "Advent of Jazz" that was supposed to stay visible on top of all other content as you scroll. But some elements further down the page were appearing over the banner, hiding it. I increased the banner's stacking priority so it always stays on top.
I proposed and launched an 'Advent of Jazz' initiative on our Discord. This PR adds a prominent link through a banner for December.
Previously, our analytics only captured successful search. This improvement allows us to track unsuccessful searches.
Normally, Jazz will throw if it cannot complete a resolve query as requested by the user (for example because the user doesn't have access to the data or it doesn't actually exist). Users can override this by specifying $onError: 'catch', which will instead return the rest of the query completed correctly with only the CoValue in question missing.
There was a bug in how this was implemented which I fixed.
We had some small issues with the new vanilla docs because the snippets were created before the big refactoring of code snippets was merged. This PR brought them in line with the framework specific snippets.