src/service-select/service-select.js (37 lines of code) (raw):
import React from 'react';
import PropTypes from 'prop-types';
import Select from '@jetbrains/ring-ui/components/select/select';
import {MinWidth} from '@jetbrains/ring-ui/components/popup/position';
const service2item = service => service && {
key: service.id,
label: service.name,
description: service.homeUrl,
service
};
const withUnBoxedService = wrappedCallback =>
selectItem => wrappedCallback((selectItem || {}).service);
const ServiceSelect = (
{
isLoading,
label,
placeholder,
selectedService,
serviceList,
loadError,
onServiceSelect,
...props
}
) => (
<Select
{...props}
selectedLabel={label}
label={placeholder || 'Select service'}
multiple={false}
loading={isLoading}
filter
selected={service2item(selectedService)}
size={Select.Size.FULL}
minWidth={MinWidth.TARGET}
data={(serviceList || []).map(service2item)}
notFoundMessage={loadError}
onSelect={withUnBoxedService(onServiceSelect)}
/>
);
const SERVICE_PROPS = {
id: PropTypes.string.isRequired,
name: PropTypes.string.isRequired,
homeUrl: PropTypes.string
};
ServiceSelect.propTypes = {
isLoading: PropTypes.bool,
label: PropTypes.string,
placeholder: PropTypes.string,
selectedService: PropTypes.shape(SERVICE_PROPS),
serviceList: PropTypes.arrayOf(PropTypes.shape(SERVICE_PROPS)),
loadError: PropTypes.string,
onServiceSelect: PropTypes.func.isRequired
};
export default ServiceSelect;