[Tech/Demo] Migrate Wine Manager status state to Zustand #3428
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a proof-of-concept of using Zustand (https://github.com/pmndrs/zustand) for one of our many states-to-be-managed
I don't know how much I have to explain here, the code looks very straight-forward to me, but it's probably confusing in some places if you're not used to the syntax. Please ask questions! With that said, a general explanation:
First off, we've had somewhat of a code split here before (with some state being updated by the Frontend and some by the Backend). This would work just fine now as well, but I thought I might as well move everything over to the Backend while I'm at it. Thus, the
installWineVersion
andremoveWineVersion
IPC callbacks no longer return anything, instead settings state directly themselvesOn the Frontend side, we first create a store to hold our state (in our case, the easiest structure is a Record, mapping wine version names to their state), and then give the Backend an option to update this state using the (already present but now somewhat modified)
progressOfWineManager
Frontend message.The WineItem components then listen to their respective version's state updates (using
useShallow
to really only re-render when the specific version changes). Everything else is then handled by Zustand and ReactUse the following Checklist if you have changed something on the Backend or Frontend: