-
Notifications
You must be signed in to change notification settings - Fork 2.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
feat(ui): add support for custom field types #5113
Closed
Closed
Commits on Nov 17, 2023
-
feat(ui): add support for custom field types
Node authors may now create their own arbitrary/custom field types. Any pydantic model is supported. Two notes: 1. Your field type's class name must be unique. Suggest prefixing fields with something related to the node pack as a kind of namespace. 2. Custom field types function as connection-only fields. For example, if your custom field has string attributes, you will not get a text input for that attribute when you give a node a field with your custom type. This is the same behaviour as other complex fields that don't have custom UIs in the workflow editor - like, say, a string collection.
Configuration menu - View commit details
-
Copy full SHA for 27fd907 - Browse repository at this point
Copy the full SHA 27fd907View commit details -
feat(ui): fix tooltips for custom types
We need to hold onto the original type of the field so they don't all just show up as "Unknown".
Configuration menu - View commit details
-
Copy full SHA for 5ce2dc3 - Browse repository at this point
Copy the full SHA 5ce2dc3View commit details -
Configuration menu - View commit details
-
Copy full SHA for dc44deb - Browse repository at this point
Copy the full SHA dc44debView commit details -
Configuration menu - View commit details
-
Copy full SHA for 7b93b5e - Browse repository at this point
Copy the full SHA 7b93b5eView commit details -
feat(ui): custom field types connection validation
In the initial commit, a custom field's original type was added to the *field templates* only as `originalType`. Custom fields' `type` property was `"Custom"`*. This allowed for type safety throughout the UI logic. *Actually, it was `"Unknown"`, but I changed it to custom for clarity. Connection validation logic, however, uses the *field instance* of the node/field. Like the templates, *field instances* with custom types have their `type` set to `"Custom"`, but they didn't have an `originalType` property. As a result, all custom fields could be connected to all other custom fields. To resolve this, we need to add `originalType` to the *field instances*, then switch the validation logic to use this instead of `type`. This ended up needing a bit of fanagling: - If we make `originalType` a required property on field instances, existing workflows will break during connection validation, because they won't have this property. We'd need a new layer of logic to migrate the workflows, adding the new `originalType` property. While this layer is probably needed anyways, typing `originalType` as optional is much simpler. Workflow migration logic can come layer. (Technically, we could remove all references to field types from the workflow files, and let the templates hold all this information. This feels like a significant change and I'm reluctant to do it now.) - Because `originalType` is optional, anywhere we care about the type of a field, we need to use it over `type`. So there are a number of `field.originalType ?? field.type` expressions. This is a bit of a gotcha, we'll need to remember this in the future. - We use `Array.prototype.includes()` often in the workflow editor, e.g. `COLLECTION_TYPES.includes(type)`. In these cases, the const array is of type `FieldType[]`, and `type` is is `FieldType`. Because we now support custom types, the arg `type` is now widened from `FieldType` to `string`. This causes a TS error. This behaviour is somewhat controversial (see microsoft/TypeScript#14520). These expressions are now rewritten as `COLLECTION_TYPES.some((t) => t === type)` to satisfy TS. It's logically equivalent.
Configuration menu - View commit details
-
Copy full SHA for 98a0ce0 - Browse repository at this point
Copy the full SHA 98a0ce0View commit details -
Configuration menu - View commit details
-
Copy full SHA for 5e4b093 - Browse repository at this point
Copy the full SHA 5e4b093View commit details
Commits on Nov 19, 2023
-
Configuration menu - View commit details
-
Copy full SHA for 3ff13dc - Browse repository at this point
Copy the full SHA 3ff13dcView commit details -
Configuration menu - View commit details
-
Copy full SHA for e30f22a - Browse repository at this point
Copy the full SHA e30f22aView commit details -
feat(ui): add validation for CustomCollection & CustomPolymorphic types
- Update connection validation for custom types - Use simple string parsing to determine if a field is a collection or polymorphic type. - No longer need to keep a list of collection and polymorphic types. - Added runtime checks in `baseinvocation.py` to ensure no fields are named in such a way that it could mess up the new parsing
Configuration menu - View commit details
-
Copy full SHA for 9ebffcd - Browse repository at this point
Copy the full SHA 9ebffcdView commit details -
Configuration menu - View commit details
-
Copy full SHA for 57567d4 - Browse repository at this point
Copy the full SHA 57567d4View commit details -
fix(ui): rename 'nodes.currentConnectionFieldType' -> 'nodes.connecti…
…onStartFieldType' This was confusingly named and kept tripping me up. Renamed to be consistent with the `reactflow` `ConnectionStartParams` type.
Configuration menu - View commit details
-
Copy full SHA for e047d43 - Browse repository at this point
Copy the full SHA e047d43View commit details -
Configuration menu - View commit details
-
Copy full SHA for f280a2e - Browse repository at this point
Copy the full SHA f280a2eView commit details -
feat(nodes): add runtime check for custom field names
"Custom", "CustomCollection" and "CustomPolymorphic" are reserved field names.
Configuration menu - View commit details
-
Copy full SHA for 0e640ad - Browse repository at this point
Copy the full SHA 0e640adView commit details -
Configuration menu - View commit details
-
Copy full SHA for b65acc0 - Browse repository at this point
Copy the full SHA b65acc0View commit details
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.