Skip to content
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

Allow duplicate items #1712

Closed
2 tasks done
kasinau opened this issue Apr 20, 2020 · 2 comments
Closed
2 tasks done

Allow duplicate items #1712

kasinau opened this issue Apr 20, 2020 · 2 comments
Labels
feature Is a feature request question

Comments

@kasinau
Copy link

kasinau commented Apr 20, 2020

Prerequisites

  • I have read the documentation;
  • In the case of a bug report, I understand that providing a SSCCE example is tremendously useful to the maintainers.

Description

I see that we can add new items in two ways using ArrayFields, either adding a new item at the bottom of the list, using onAddClick, or adding a new item on a specific index, using onAddIndexClick.

These are really nice features, but it adds an empty item, or, pre-populated with the default values set in the schema.

What I need is to be able to duplicate an item, and, I'm curious if maybe there's a duplicate item functionality, or, maybe it is possible to add a new item with pre-set values?

Thank you!

@epicfaace
Copy link
Member

You couldn't do that with onAddClick, but you could instead store the form data in the component's state, then use setState to change the form data.

@votar1408
Copy link

votar1408 commented Dec 15, 2021

@epicfaace Sorry for the extra question, after creating a custom ArrayField component in the props I see formData with my actual data information and empty formContext. How can I update the state for re-render form?

@heath-freenome heath-freenome added the feature Is a feature request label Mar 5, 2023
heath-freenome added a commit to heath-freenome/react-jsonschema-form that referenced this issue Mar 15, 2023
Fixes rjsf-team#1261 and rjsf-team#1712
- 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
  - 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
heath-freenome added a commit to heath-freenome/react-jsonschema-form that referenced this issue Mar 15, 2023
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
  - 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
heath-freenome added a commit to heath-freenome/react-jsonschema-form that referenced this issue Mar 15, 2023
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
heath-freenome added a commit to heath-freenome/react-jsonschema-form that referenced this issue Mar 16, 2023
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
heath-freenome added a commit that referenced this issue Mar 16, 2023
* feature: Reimplement and improve #1719 to Add array field copy
Fixes #1261 and #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

* Apply suggestions from code review

- Responded to reviewer and self feedback

Co-authored-by: Nick Grosenbacher <[email protected]>

* Update packages/utils/src/getUiOptions.ts

* - Fixed format issue

---------

Co-authored-by: Nick Grosenbacher <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature Is a feature request question
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants