68 lines
1.6 KiB
JavaScript
68 lines
1.6 KiB
JavaScript
import { Radio as AntRadio } from 'antd';
|
|
import { useOptions } from 'client/hooks/useOptions';
|
|
import { useStatus } from 'client/hooks/useStatus';
|
|
import { useStoreValue } from 'client/hooks/useStoreValue';
|
|
import { Status } from "core/types/statuses";
|
|
import { observer } from 'mobx-react';
|
|
import React from 'react';
|
|
|
|
const Radio = ({ name, style, computedValue, valueName }) => {
|
|
const { value, setCurrentValue } = useStoreValue({
|
|
computedValue,
|
|
valueName,
|
|
});
|
|
const { status } = useStatus(name);
|
|
const { options } = useOptions(name);
|
|
|
|
/**
|
|
* TODO: style type in core
|
|
* TODO: column
|
|
*/
|
|
|
|
return (
|
|
<AntRadio.Group
|
|
disabled={status === Status.Disabled}
|
|
buttonStyle={style === 'button' && 'solid'}
|
|
value={value}
|
|
onChange={e => {
|
|
if (e && e.target) setCurrentValue(e.target.value);
|
|
}}
|
|
>
|
|
{options.map((option, i) => {
|
|
switch (style) {
|
|
case 'button':
|
|
if (option) {
|
|
return (
|
|
<AntRadio.Button key={i} value={option.value || ''}>
|
|
{option.name}
|
|
</AntRadio.Button>
|
|
);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
if (option)
|
|
return (
|
|
<AntRadio
|
|
key={i}
|
|
value={option.value || ''}
|
|
style={styles.radio}
|
|
>
|
|
{option.name}
|
|
</AntRadio>
|
|
);
|
|
break;
|
|
}
|
|
})}
|
|
</AntRadio.Group>
|
|
);
|
|
};
|
|
|
|
const styles = {
|
|
radio: {
|
|
display: 'block',
|
|
},
|
|
};
|
|
|
|
export default observer(Radio);
|