mirror of
https://github.com/apache/superset.git
synced 2026-04-19 08:04:53 +00:00
[explorev2] using label in 'Visualization Type' Select instead of key (#1927)
* [explorev2] using label in 'Visualization Type' Select * moved url related logic upstream in the caller * moved option creation logic from render method to the constructor as it only needs to be executed once * Refactoring out getOptions
This commit is contained in:
committed by
GitHub
parent
0ce7fc18a8
commit
ff4020ea73
@@ -27,6 +27,12 @@ const defaultProps = {
|
||||
};
|
||||
|
||||
export default class SelectField extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = { options: this.getOptions() };
|
||||
this.onChange = this.onChange.bind(this);
|
||||
this.renderOption = this.renderOption.bind(this);
|
||||
}
|
||||
onChange(opt) {
|
||||
let optionValue = opt ? opt.value : null;
|
||||
// if multi, return options values as an array
|
||||
@@ -35,24 +41,21 @@ export default class SelectField extends React.Component {
|
||||
}
|
||||
this.props.onChange(optionValue);
|
||||
}
|
||||
renderOption(opt) {
|
||||
if (this.props.name === 'viz_type') {
|
||||
const url = `/static/assets/images/viz_thumbnails/${opt.value}.png`;
|
||||
return (
|
||||
<div>
|
||||
<img className="viz-thumb-option" src={url} alt={opt.value} />
|
||||
<span>{opt.value}</span>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
return opt.label;
|
||||
}
|
||||
render() {
|
||||
const choices = this.props.choices;
|
||||
const options = choices.map((c) => ({ value: c[0], label: c[1] }));
|
||||
getOptions() {
|
||||
const options = this.props.choices.map((c) => {
|
||||
let label = c[0];
|
||||
if (c.length > 1) {
|
||||
label = c[1];
|
||||
}
|
||||
return {
|
||||
value: c[0],
|
||||
label,
|
||||
imgSrc: c[2],
|
||||
};
|
||||
});
|
||||
if (this.props.freeForm) {
|
||||
// For FreeFormSelect, insert value into options if not exist
|
||||
const values = choices.map((c) => c[0]);
|
||||
const values = this.props.choices.map((c) => c[0]);
|
||||
if (this.props.value) {
|
||||
if (typeof this.props.value === 'object') {
|
||||
this.props.value.forEach((v) => {
|
||||
@@ -67,22 +70,35 @@ export default class SelectField extends React.Component {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return options;
|
||||
}
|
||||
renderOption(opt) {
|
||||
if (opt.imgSrc) {
|
||||
return (
|
||||
<div>
|
||||
<img className="viz-thumb-option" src={opt.imgSrc} alt={opt.value} />
|
||||
<span>{opt.label}</span>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
return opt.label;
|
||||
}
|
||||
render() {
|
||||
// Tab, comma or Enter will trigger a new option created for FreeFormSelect
|
||||
const selectProps = {
|
||||
multi: this.props.multi,
|
||||
name: `select-${this.props.name}`,
|
||||
placeholder: `Select (${choices.length})`,
|
||||
options,
|
||||
placeholder: `Select (${this.state.options.length})`,
|
||||
options: this.state.options,
|
||||
value: this.props.value,
|
||||
autosize: false,
|
||||
clearable: this.props.clearable,
|
||||
onChange: this.onChange.bind(this),
|
||||
optionRenderer: this.renderOption.bind(this),
|
||||
onChange: this.onChange,
|
||||
optionRenderer: this.renderOption,
|
||||
};
|
||||
// Tab, comma or Enter will trigger a new option created for FreeFormSelect
|
||||
const selectWrap = this.props.freeForm ?
|
||||
(<Creatable {...selectProps} />) : (<Select {...selectProps} />);
|
||||
|
||||
return (
|
||||
<div>
|
||||
{selectWrap}
|
||||
|
||||
Reference in New Issue
Block a user