У меня есть модал с формой, в которой я пытаюсь отобразить компонент, который можно использовать в любом месте с другим выводом.
Например:
Это компонент:
import { Select, SelectItem } from 'carbon-components-react';
import React from 'react';
import { translate } from 'react-i18next';
import PropTypes from 'prop-types';
import { uniqBy } from 'lodash';
import GetShipmentsAddresses from './containers/GetShipmentsAddresses';
const AddressesSelect = ({ t, handleAddresses, value }) => (
<GetShipmentsAddresses>
{({ data }) => {
const unique = uniqBy(data, 'originationAddress.description');
const renderAddresses = unique.map(addresses => (
<SelectItem
value={addresses.originationAddress.description}
key={addresses.id}
text={addresses.originationAddress.description}
/>
));
return (
<Select
id="select-3"
defaultValue="Shipped From"
labelText={t('shipments.shippedFrom')}
onChange={handleAddresses}
>
<SelectItem
disabled
hidden
value=""
text={t('shipments.selectLocation')}
/>
<SelectItem value="" text={t('shipments.allLocations')} />
{renderAddresses}
</Select>
);
}}
</GetShipmentsAddresses>
);
AddressesSelect.propTypes = {
t: PropTypes.func.isRequired,
handleAddresses: PropTypes.func.isRequired,
};
export default translate()(AddressesSelect);
И мне нужно вызвать это на родительском компоненте так:
const ParentComp = ({ VALUE }) => (
<AddressesSelect
handleAddresses={this.handleChange('shippedFrom')}
VALUE="originationAddress" // this is would be VALUE
title={t('shipments.shippedFrom')}
/>
<br />
<AddressesSelect
handleAddresses={this.handleChange('shippedTo')}
VALUE="destinationAddress" // this is would be VALUE
title={t('shipments.shippedFrom')}
/>
)
Итак, единственное, что изменится от вызова к другому, - это вместо того, чтобы сказать addresses.originationAddress.description
, он должен сказать addresses.destinationAddress.description
Единственное слово, которое изменяется, будет originationAddress
на destinationAddress
.
Итак, скажем, я хотел бы сделать что-то вроде этого:
const AddressesSelect = ({ t, handleAddresses, VALUE }) => (
<GetShipmentsAddresses>
{({ data }) => {
const unique = uniqBy(data, 'VALUE.description');
const renderAddresses = unique.map(addresses => (
<SelectItem
value={addresses.VALUE.description}
key={addresses.id}
text={addresses.VALUE.description}
/>
));
return (
<Select
id="select-3"
defaultValue="Shipped From"
labelText={t('shipments.shippedFrom')}
onChange={handleAddresses}
>
<SelectItem
disabled
hidden
value=""
text={t('shipments.selectLocation')}
/>
<SelectItem value="" text={t('shipments.allLocations')} />
{renderAddresses}
</Select>
);
}}
</GetShipmentsAddresses>
);
Где VALUE
может быть изменено при вызове компонента на destinationAddress
или originationAddress
.
Как мне этого добиться?