diff --git a/CHANGELOG.md b/CHANGELOG.md index 018ad6356..86e92a23d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ * Display `System` user when there is no `updatedByUserId` field in metadata. Refs STSMACOM-858. * Fix `` only shows an error in one of failed inputs. Fixes STSMACOM-857. * Omit (don't disable) "+ New" button in `` when user lacks permission. Refs STSMACOM-836. +* Avoid deprecated `defaultProps` for functional components. Refs STSMACOM-835. ## [9.1.3](https://github.com/folio-org/stripes-smart-components/tree/v9.1.3) (2024-05-06) [Full Changelog](https://github.com/folio-org/stripes-smart-components/compare/v9.1.2...v9.1.3) diff --git a/lib/AddressFieldGroup/AddressEdit/AddressEdit.js b/lib/AddressFieldGroup/AddressEdit/AddressEdit.js index 2cd89ebfa..8c2ade667 100644 --- a/lib/AddressFieldGroup/AddressEdit/AddressEdit.js +++ b/lib/AddressFieldGroup/AddressEdit/AddressEdit.js @@ -53,49 +53,57 @@ const propTypes = { visibleFields: PropTypes.arrayOf(PropTypes.string), }; -const defaultProps = { - fieldComponents: { - country: TextField, - addressLine1: TextField, - addressLine2: TextField, - city: TextField, - stateRegion: TextField, - zipCode: TextField, - addressType: { - component: TextField, - validate: validateAddressType, - }, +const defaultFieldComponents = { + country: TextField, + addressLine1: TextField, + addressLine2: TextField, + city: TextField, + stateRegion: TextField, + zipCode: TextField, + addressType: { + component: TextField, + validate: validateAddressType, }, - headerComponent: address => ( - - ), - labelMap: { - addressType: , - addressLine1: , - addressLine2: , - stateRegion: , - zipCode: , - country: , - city: , - }, - visibleFields: [ - 'country', - 'addressLine1', - 'addressLine2', - 'city', - 'stateRegion', - 'zipCode', - 'addressType', - ], }; -const AddressEdit = (props) => { +const defaultHeaderComponent = address => ( + +); + +const defaultLabelMap = { + addressType: , + addressLine1: , + addressLine2: , + stateRegion: , + zipCode: , + country: , + city: , +}; + +const defaultVisibleFields = [ + 'country', + 'addressLine1', + 'addressLine2', + 'city', + 'stateRegion', + 'zipCode', + 'addressType', +]; + +const AddressEdit = ({ + fieldComponents = defaultFieldComponents, + headerComponent = defaultHeaderComponent, + labelMap = defaultLabelMap, + visibleFields = defaultVisibleFields, + ...rest +}) => { + const props = { fieldComponents, headerComponent, labelMap, visibleFields, ...rest }; const { addressObject, canDelete, @@ -103,13 +111,9 @@ const AddressEdit = (props) => { handleSubmit, handleDelete, handleCancel, - labelMap, - visibleFields, - headerComponent, - fieldComponents } = props; - const mergedFieldComponents = Object.assign(defaultProps.fieldComponents, fieldComponents); + const mergedFieldComponents = { ...defaultFieldComponents, ...fieldComponents }; const groupArray = []; let rowArray = []; @@ -182,7 +186,6 @@ const AddressEdit = (props) => { }; AddressEdit.propTypes = propTypes; -AddressEdit.defaultProps = defaultProps; export default stripesFinalForm({ navigationCheck: true, diff --git a/lib/AddressFieldGroup/AddressView/AddressView.js b/lib/AddressFieldGroup/AddressView/AddressView.js index 882a74277..7f566cad9 100644 --- a/lib/AddressFieldGroup/AddressView/AddressView.js +++ b/lib/AddressFieldGroup/AddressView/AddressView.js @@ -18,15 +18,15 @@ const propTypes = { visibleFields: PropTypes.arrayOf(PropTypes.string), }; -const defaultProps = { - headerField: 'primaryAddress', - headerFormatter: address => ( +function AddressView({ + headerField = 'primaryAddress', + headerFormatter = address => ( ), - headingLevel: 5, - visibleFields: [ + headingLevel = 5, + visibleFields = [ 'addressType', 'addressLine1', 'addressLine2', @@ -35,17 +35,14 @@ const defaultProps = { 'zipCode', 'country', ], -}; - -function AddressView(props) { + ...rest +}) { + const props = { headerField, headerFormatter, headingLevel, visibleFields, ...rest }; const { addressObject, canEdit, handleEdit, - headerFormatter, - headingLevel, uiId, - visibleFields } = props; const defaultLabelMap = { @@ -108,6 +105,5 @@ function AddressView(props) { } AddressView.propTypes = propTypes; -AddressView.defaultProps = defaultProps; export default AddressView; diff --git a/lib/ChangeDueDateDialog/LoanList.js b/lib/ChangeDueDateDialog/LoanList.js index e71a9c77b..e73c64406 100644 --- a/lib/ChangeDueDateDialog/LoanList.js +++ b/lib/ChangeDueDateDialog/LoanList.js @@ -26,14 +26,6 @@ const propTypes = { }) }; -const defaultProps = { - allowSelection: true, - height: 400, - loans: [], - loanSelection: {}, - requestCounts: {}, -}; - const manifest = Object.freeze({ loanPolicies: { type: 'okapi', @@ -44,13 +36,17 @@ const manifest = Object.freeze({ }, }); -const LoanList = (props) => { - const { - loanSelection, - onToggleLoanSelection, - requestCounts, - } = props; - +const LoanList = ({ + alerts, + allowSelection = true, + height = 400, + loans = [], + loanSelection = {}, + onToggleBulkLoanSelection, + onToggleLoanSelection, + requestCounts = {}, + resources, +}) => { const { formatMessage } = useIntl(); const visibleColumns = [ @@ -64,22 +60,22 @@ const LoanList = (props) => { 'loanListLoanPolicy', ]; - if (props.allowSelection) visibleColumns.unshift('selected'); + if (allowSelection) visibleColumns.unshift('selected'); const rowUpdater = (rowData) => requestCounts[rowData.itemId]; return ( , loanListAlertDetails: , @@ -101,7 +97,7 @@ const LoanList = (props) => { { loanName: get(loan, ['item', 'title']) } )} />, - loanListAlertDetails: loan => props.alerts[loan.id] || '', + loanListAlertDetails: loan => alerts[loan.id] || '', loanListTitle: loan => get(loan, ['item', 'title']), loanListItemStatus: loan => get(loan, ['item', 'status', 'name']), loanListCurrentDueDate: @@ -110,7 +106,7 @@ const LoanList = (props) => { loanListBarcode: loan => get(loan, ['item', 'barcode']), loanListEffectiveCallNumber: loan => getEffectiveCallNumber(loan), loanListLoanPolicy: loan => { - const policies = get(props, ['resources', 'loanPolicies', 'records', 0, 'loanPolicies'], []); + const policies = get(resources, ['loanPolicies', 'records', 0, 'loanPolicies'], []); const policy = policies.find(p => p.id === loan.loanPolicyId) || {}; return policy.name; }, @@ -128,7 +124,6 @@ const LoanList = (props) => { ); }; -LoanList.defaultProps = defaultProps; LoanList.propTypes = propTypes; LoanList.manifest = manifest; diff --git a/lib/ColumnManager/ColumnManager.js b/lib/ColumnManager/ColumnManager.js index 03541dcff..9aaed2703 100644 --- a/lib/ColumnManager/ColumnManager.js +++ b/lib/ColumnManager/ColumnManager.js @@ -8,7 +8,7 @@ import PropTypes from 'prop-types'; import useColumnManager from './useColumnManager'; import ColumnManagerMenu from './ColumnManagerMenu'; -const ColumnManager = ({ id, columnMapping, children, excludeKeys, persist, visibleColumns: visibleColumnsProp }) => { +const ColumnManager = ({ id, columnMapping = {}, children, excludeKeys = [], persist, visibleColumns: visibleColumnsProp }) => { const prefixId = `column-manager-${id}`; const nonToggleableColumns = useRef(excludeKeys).current; @@ -45,11 +45,6 @@ const ColumnManager = ({ id, columnMapping, children, excludeKeys, persist, visi return children(renderProps); }; -ColumnManager.defaultProps = { - columnMapping: {}, - excludeKeys: [], -}; - ColumnManager.propTypes = { children: PropTypes.func.isRequired, columnMapping: PropTypes.object.isRequired, diff --git a/lib/ColumnManager/ColumnManagerMenu.js b/lib/ColumnManager/ColumnManagerMenu.js index 9b2aea5a8..9e9a4bfc5 100644 --- a/lib/ColumnManager/ColumnManagerMenu.js +++ b/lib/ColumnManager/ColumnManagerMenu.js @@ -7,8 +7,8 @@ import { Checkbox, MenuSection } from '@folio/stripes-components'; const ColumnManagerMenu = ({ prefix, columnMapping, - visibleColumns, - excludeColumns, + visibleColumns = [], + excludeColumns = [], toggleColumn, }) => { const intl = useIntl(); @@ -51,9 +51,4 @@ ColumnManagerMenu.propTypes = { visibleColumns: PropTypes.arrayOf(PropTypes.string), }; -ColumnManagerMenu.defaultProps = { - visibleColumns: [], - excludeColumns: [], -}; - export default ColumnManagerMenu; diff --git a/lib/CustomFields/components/CustomFieldsForm/CustomFieldsForm.js b/lib/CustomFields/components/CustomFieldsForm/CustomFieldsForm.js index 1978cabb4..bd3f34a22 100644 --- a/lib/CustomFields/components/CustomFieldsForm/CustomFieldsForm.js +++ b/lib/CustomFields/components/CustomFieldsForm/CustomFieldsForm.js @@ -107,10 +107,6 @@ const propTypes = { viewRoute: PropTypes.string.isRequired, }; -const defaultProps = { - fieldOptionsStats: null, -}; - const CustomFieldsForm = ({ submitting, viewRoute, @@ -130,7 +126,7 @@ const CustomFieldsForm = ({ onFormReset, saveCustomFields, optionsStatsLoaded, - fieldOptionsStats, + fieldOptionsStats = null, onOptionDelete, optionsToDelete, }) => { @@ -383,7 +379,6 @@ const CustomFieldsForm = ({ }; CustomFieldsForm.propTypes = propTypes; -CustomFieldsForm.defaultProps = defaultProps; export default stripesFinalForm({ navigationCheck: true, diff --git a/lib/CustomFields/components/FieldAccordion/edit-fields/components/AddOptionButton/AddOptionButton.js b/lib/CustomFields/components/FieldAccordion/edit-fields/components/AddOptionButton/AddOptionButton.js index fb6b28c76..2d3280e48 100644 --- a/lib/CustomFields/components/FieldAccordion/edit-fields/components/AddOptionButton/AddOptionButton.js +++ b/lib/CustomFields/components/FieldAccordion/edit-fields/components/AddOptionButton/AddOptionButton.js @@ -11,13 +11,9 @@ const propTypes = { optionsToAddLeft: PropTypes.number, }; -const defaultProps = { - optionsToAddLeft: null, -}; - const AddOptionButton = ({ onClick, - optionsToAddLeft, + optionsToAddLeft = null, }) => ( <> {optionsToAddLeft !== null && ( @@ -42,6 +38,5 @@ const AddOptionButton = ({ ); AddOptionButton.propTypes = propTypes; -AddOptionButton.defaultProps = defaultProps; export default AddOptionButton; diff --git a/lib/CustomFields/components/FieldAccordion/edit-fields/shared-fields/OptionsField/OptionsField.js b/lib/CustomFields/components/FieldAccordion/edit-fields/shared-fields/OptionsField/OptionsField.js index 92795d2b5..7eeeea142 100644 --- a/lib/CustomFields/components/FieldAccordion/edit-fields/shared-fields/OptionsField/OptionsField.js +++ b/lib/CustomFields/components/FieldAccordion/edit-fields/shared-fields/OptionsField/OptionsField.js @@ -36,20 +36,15 @@ const propTypes = { usedOptions: PropTypes.arrayOf(PropTypes.string), }; -const defaultProps = { - isMultiSelect: false, - maxOptionsNumber: null, -}; - const isLabelDuplicated = (label, allLabels) => { return allLabels.filter(currentLabel => label === currentLabel).length > 1; }; const OptionsField = ({ fieldNamePrefix, - maxOptionsNumber, + maxOptionsNumber = null, changeFieldValue, - isMultiSelect, + isMultiSelect = false, usedOptions, optionsStatsLoaded, onOptionDelete, @@ -269,6 +264,5 @@ const OptionsField = ({ }; OptionsField.propTypes = propTypes; -OptionsField.defaultProps = defaultProps; export default OptionsField; diff --git a/lib/CustomFields/components/FieldAccordion/view-sections/shared-values/Options.js b/lib/CustomFields/components/FieldAccordion/view-sections/shared-values/Options.js index 98181e2fd..67fb1a5b0 100644 --- a/lib/CustomFields/components/FieldAccordion/view-sections/shared-values/Options.js +++ b/lib/CustomFields/components/FieldAccordion/view-sections/shared-values/Options.js @@ -24,11 +24,7 @@ const propTypes = { }) }; -const defaultProps = { - isMultiSelect: false, -}; - -const Options = ({ selectField, isMultiSelect }) => { +const Options = ({ selectField, isMultiSelect = false }) => { const contentData = selectField.options.values.map(item => { return { label: item.value, @@ -76,6 +72,5 @@ const Options = ({ selectField, isMultiSelect }) => { }; Options.propTypes = propTypes; -Options.defaultProps = defaultProps; export default Options; diff --git a/lib/CustomFields/pages/EditCustomFieldsRecord/EditCustomFieldsRecord.js b/lib/CustomFields/pages/EditCustomFieldsRecord/EditCustomFieldsRecord.js index 9d6f1ada8..3f4144ed7 100644 --- a/lib/CustomFields/pages/EditCustomFieldsRecord/EditCustomFieldsRecord.js +++ b/lib/CustomFields/pages/EditCustomFieldsRecord/EditCustomFieldsRecord.js @@ -82,15 +82,9 @@ const propTypes = { reduxFormCustomFieldsValues: PropTypes.objectOf(PropTypes.string), }; -const defaultProps = { - columnCount: 4, - customFieldsLabel: , - isReduxForm: false, -}; - const EditCustomFieldsRecord = ({ accordionId, - customFieldsLabel, + customFieldsLabel = , onComponentLoad, onToggle, expanded, @@ -98,8 +92,8 @@ const EditCustomFieldsRecord = ({ backendModuleId, backendModuleName, entityType, - columnCount, - isReduxForm, + columnCount = 4, + isReduxForm = false, formName, changeFinalFormField, changeReduxFormField, @@ -337,7 +331,6 @@ const EditCustomFieldsRecord = ({ }; EditCustomFieldsRecord.propTypes = propTypes; -EditCustomFieldsRecord.defaultProps = defaultProps; export default connect( (state, ownProps) => ({ diff --git a/lib/CustomFields/pages/ViewCustomFieldsRecord/ViewCustomFieldsRecord.js b/lib/CustomFields/pages/ViewCustomFieldsRecord/ViewCustomFieldsRecord.js index f9a5a5a7c..242e54eba 100644 --- a/lib/CustomFields/pages/ViewCustomFieldsRecord/ViewCustomFieldsRecord.js +++ b/lib/CustomFields/pages/ViewCustomFieldsRecord/ViewCustomFieldsRecord.js @@ -59,12 +59,6 @@ const propTypes = { onToggle: PropTypes.func, }; -const defaultProps = { - columnCount: 4, - customFieldsLabel: , - noCustomFieldsFoundLabel: , -}; - const ViewCustomFieldsRecord = ({ accordionId, onToggle, @@ -74,9 +68,9 @@ const ViewCustomFieldsRecord = ({ backendModuleName, entityType, customFieldsValues, - columnCount, - customFieldsLabel, - noCustomFieldsFoundLabel, + columnCount = 4, + customFieldsLabel = , + noCustomFieldsFoundLabel = , }) => { const { customFields, @@ -199,7 +193,6 @@ const ViewCustomFieldsRecord = ({ }; ViewCustomFieldsRecord.propTypes = propTypes; -ViewCustomFieldsRecord.defaultProps = defaultProps; export default connect( (state, ownProps) => ({ diff --git a/lib/EditableList/EditableList.js b/lib/EditableList/EditableList.js index 8939a70c5..b6288ac6d 100644 --- a/lib/EditableList/EditableList.js +++ b/lib/EditableList/EditableList.js @@ -48,13 +48,8 @@ const propTypes = { readOnlyFields: PropTypes.arrayOf(PropTypes.string), }; -const defaultProps = { - nameKey: 'name', - formType: 'redux-form', -}; - -const EditableList = (props) => { - const { contentData, nameKey, formType } = props; +const EditableList = ({ contentData, nameKey = 'name', formType = 'redux-form', ...rest }) => { + const props = { contentData, nameKey, formType, ...rest }; const EditableListForm = (formType === 'redux-form') ? EditableListReduxForm : EditableListFinalForm; @@ -68,6 +63,5 @@ const EditableList = (props) => { }; EditableList.propTypes = propTypes; -EditableList.defaultProps = defaultProps; export default EditableList; diff --git a/lib/EditableList/ItemEdit.js b/lib/EditableList/ItemEdit.js index 6096f8d9b..105f89fe8 100644 --- a/lib/EditableList/ItemEdit.js +++ b/lib/EditableList/ItemEdit.js @@ -17,13 +17,13 @@ function handleDefaultFieldBlur(event) { const ItemEdit = ({ rowIndex, - error, + error = null, field, visibleFields, columnMapping, fieldComponents, readOnlyFields, - getReadOnlyFieldsForItem, + getReadOnlyFieldsForItem = () => [], widths, cells, autoFocus, @@ -117,9 +117,4 @@ ItemEdit.propTypes = { widths: PropTypes.object, }; -ItemEdit.defaultProps = { - error: null, - getReadOnlyFieldsForItem: () => [], -}; - export default ItemEdit; diff --git a/lib/Notes/NotePopupModal/NotePopupModal.js b/lib/Notes/NotePopupModal/NotePopupModal.js index 38b7781c8..47bde1b93 100644 --- a/lib/Notes/NotePopupModal/NotePopupModal.js +++ b/lib/Notes/NotePopupModal/NotePopupModal.js @@ -48,12 +48,6 @@ const propTypes = { popUpPropertyName: PropTypes.string.isRequired, }; -const defaultProps = { - entityId: '', - label: , - closeLabel: , - deleteLabel: , -}; const manifest = Object.freeze({ NotePopupModal_assignedNotes: { @@ -82,12 +76,12 @@ const manifest = Object.freeze({ }); const NotePopupModal = ({ - entityId, + entityId = '', mutator, popUpPropertyName, - deleteLabel, - closeLabel, - label, + deleteLabel = , + closeLabel = , + label = , }) => { const stripes = useStripes(); const [userPopUpNotes, setUserPopUpNotes] = useState([]); @@ -234,7 +228,6 @@ const NotePopupModal = ({ }; NotePopupModal.propTypes = propTypes; -NotePopupModal.defaultProps = defaultProps; NotePopupModal.manifest = manifest; export default stripesConnect(NotePopupModal);