-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
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
[tree view] Explore a better plugin model API #11567
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
flaviendelangle
added
the
component: tree view
TreeView, TreeItem. This is the name of the generic UI component, not the React module!
label
Jan 3, 2024
Deploy preview: https://deploy-preview-11567--material-ui-x.netlify.app/ |
github-actions
bot
added
the
PR: out-of-date
The pull request has merge conflicts and can't be merged
label
Jan 3, 2024
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
github-actions
bot
removed
the
PR: out-of-date
The pull request has merge conflicts and can't be merged
label
Jan 3, 2024
LukasTy
approved these changes
Jan 12, 2024
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. 👍
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
component: tree view
TreeView, TreeItem. This is the name of the generic UI component, not the React module!
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.
It is purely a private API but I'm trying to prepare the headless tree view step by step.
The problems I am trying to solve here are:
The
controlledProp
is not needed because the model name (the key of the object inuseXXX.models
) has to be equal to the controlled props (otherwise I can't deduce the type ofmodels.xxx.value
from the props).Solutions:
controlledProp
from the model initialized and always use the model name.The
defaultValueProp
do not enforce thatprops[defaultValueProp]
contains a value compatible with the controlled prop type.Solutions:
Calling
models.xxx.setValue
do not call the props callback (e.g:props.onExpandedNodesChange
). This is very problematic because any plugin can callmodels.xxx.setValue
but it's always a bad idea to do it.Solutions:
models.xxx.setValue
on the typings of models defined in dependencies of the plugin makes sure that, at least with TS, you can't do this mistake.models.xxx.setValue
=>models.xxx.setControlledValue
to reduce the risk when using pure JS. To have a real safeguard we would need to generate themodels
object for each plugin, I'm not sure the perf overhead is worth it.