-
Notifications
You must be signed in to change notification settings - Fork 2.2k
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
feature: Reimplement and improve #1719 to Add array field copy #3508
feature: Reimplement and improve #1719 to Add array field copy #3508
Conversation
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.
Overall looks great, just want some clarification on a few things
Fixes rjsf-team#1261 and rjsf-team#1712 by adding copy array item capability as well as global `UiSchema` options - In `@rjsf/utils`, updated types and functions to support array field copy AND global options in the `UiSchema` as follows: - Updated the `ArrayFieldTemplateItemType` to add support for copying array items - Added a new `TranslatableString` enums `CopyButton` and `InvalidObjectField` that localizes the information extracted from `ObjectField` as markdown - Refactored `UIOptionsBaseType` to extract the `addable`, `orderable`, `removable`, `label` and `duplicateKeySuffixSeparator` into a new `GlobalUISchemaOptions` type that adds `copyable` - Extended `UIOptionsBaseType` from `GlobalUISchemaOptions` - In `UiSchema` added a new optional `ui:globalOptions` prop of type `GlobalUISchemaOptions` and a new `UI_GLOBAL_OPTIONS_KEY` constant - Added a new optional prop `globalUiOptions` object of type `GlobalUISchemaOptions` in `Registry` as well as `CopyButton` in `ButtonTemplates` - Updated `getUiOptions()` and `getDisplayLabel()` (and its `SchemaUtilsType` counterpart) to take an optional `GlobalUISchemaOptions` parameter that is used to include global options into the returned `uiOptions` - In `@rjsf/core`, added support for array field copy and global options in the `UiSchema` as follows: - Updated `ArrayField` to handle global UI Options by passing in `registry.globalUiOptions` into `getUiOptions()` and by exposing the new `hasCopy` flag and `onCopyIndexClick` callback - Updated `ObjectField` to handle global UI Options for `duplicateKeySuffixSeparator` and also added support for the new `TranslatableString.InvalidObjectField` translation into a `Markdown` - Updated `SchemaField` to handle global UI Options for `label` - Added a new `CopyButton` implementation that was registered in the `ButtonTemplates` - Updated `ArrayFieldItemTemplate` to render the `CopyButton` when `hasCopy` is true, calling `onCopyIndexClick` on click - Updated `Form` to extract the `ui:globalOptions` from the `uiSchema` and set it into the `registry` as `globalUiOptions` - Updated tests to verify all the new functionality - In all the themes, added support for array field copy as follows: - Added a new `CopyButton` implementation that was registered in the `ButtonTemplates` - Updated `ArrayFieldItemTemplate` to render the `CopyButton` when `hasCopy` is true, calling `onCopyIndexClick` on click - Updated the Array tests to verify that copy shows up when `copyable` is true - In `@rjsf/antd` and `@rjsf/semantic-ui` updated the styles to support the additional button in `ArrayFieldItemTemplate` - In `@rjsf/fluent-ui`, fixed some bad style errors in the console by removing the `;` at the end of the `fontFamily` custom styles - In `@rjsf/semantic-ui`, removed some bad property warnings by changing the `inverted` prop from `false` to `'false'` - In `@rjsf/docs`, updated the documentation for all the copy feature and global `UiSchema` options type updates - Also replaced all `js(x)` code blocks with `ts(x)` code blocks to be complete - Updated the `CHANGELOG.md` accordingly
1e82673
to
e812e34
Compare
- Responded to reviewer and self feedback Co-authored-by: Nick Grosenbacher <[email protected]>
Is it just me or is none of this documented? There is no onCopyIndexClick function documented in the ArrayFieldTemplate or in ArrayFieldItemTemplate. hasCopy and copyable are both there, but how to actually implement it isn't anywhere in the docs. |
@jmarks-joshua Thanks for pointing that out. Are you asking because you don't understand how to implement these features or are you just letting us know the docs are missing? If it is the latter, we'd love a PR with updates |
Reasons for making this change
Fixes #1261 and #1712 by adding copy array item capability as well as global
UiSchema
options@rjsf/utils
, updated types and functions to support array field copy AND global options in theUiSchema
as follows:TranslatableString
enumsCopyButton
andInvalidObjectField
that localizes the information extracted fromObjectField
as markdownArrayFieldTemplateItemType
to add support for copying array itemsUIOptionsBaseType
to extract theaddable
,orderable
,removable
,label
andduplicateKeySuffixSeparator
into a newGlobalUISchemaOptions
type that addscopyable
- ExtendedUIOptionsBaseType
fromGlobalUISchemaOptions
- InUiSchema
added a new optionalui:globalOptions
prop of typeGlobalUISchemaOptions
and a newUI_GLOBAL_OPTIONS_KEY
constant - Added a new optional propglobalUiOptions
object of typeGlobalUISchemaOptions
inRegistry
as well asCopyButton
inButtonTemplates
getUiOptions()
andgetDisplayLabel()
(and itsSchemaUtilsType
counterpart) to take an optionalGlobalUISchemaOptions
parameter that is used to include global options into the returneduiOptions
@rjsf/core
, added support for array field copy and global options in theUiSchema
as follows:ArrayField
to handle global UI Options by passing inregistry.globalUiOptions
intogetUiOptions()
and by exposing the newhasCopy
flag andonCopyIndexClick
callbackObjectField
to handle global UI Options forduplicateKeySuffixSeparator
and also added support for the newTranslatableString.InvalidObjectField
translation into aMarkdown
SchemaField
to handle global UI Options forlabel
CopyButton
implementation that was registered in theButtonTemplates
ArrayFieldItemTemplate
to render theCopyButton
whenhasCopy
is true, callingonCopyIndexClick
on clickForm
to extract theui:globalOptions
from theuiSchema
and set it into theregistry
asglobalUiOptions
CopyButton
implementation that was registered in theButtonTemplates
ArrayFieldItemTemplate
to render theCopyButton
whenhasCopy
is true, callingonCopyIndexClick
on clickcopyable
is true@rjsf/antd
and@rjsf/semantic-ui
updated the styles to support the additional button inArrayFieldItemTemplate
@rjsf/fluent-ui
, fixed some bad style errors in the console by removing the;
at the end of thefontFamily
custom styles@rjsf/semantic-ui
, removed some bad property warnings by changing theinverted
prop fromfalse
to'false'
@rjsf/docs
, updated the documentation for all the copy feature and globalUiSchema
options type updatesjs(x)
code blocks withts(x)
code blocks to be completeCHANGELOG.md
accordinglyChecklist
npm run test:update
to update snapshots, if needed.