migrate select, number, and text widgets
This commit is contained in:
31
packages/netlify-cms-widget-select/package.json
Normal file
31
packages/netlify-cms-widget-select/package.json
Normal file
@ -0,0 +1,31 @@
|
||||
{
|
||||
"name": "netlify-cms-widget-select",
|
||||
"description": "Selectable values widget for Netlify CMS.",
|
||||
"version": "2.0.0-alpha.0",
|
||||
"main": "dist/netlify-cms-widget-select.js",
|
||||
"license": "MIT",
|
||||
"keywords": [
|
||||
"netlify",
|
||||
"netlify-cms",
|
||||
"widget",
|
||||
"select",
|
||||
"values",
|
||||
"list"
|
||||
],
|
||||
"sideEffects": false,
|
||||
"scripts": {
|
||||
"watch": "webpack -w",
|
||||
"build": "webpack"
|
||||
},
|
||||
"devDependencies": {
|
||||
"webpack": "^4.16.1",
|
||||
"webpack-cli": "^3.1.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"immutable": "^3.7.6",
|
||||
"netlify-cms-ui-default": "^2.0.0-alpha.0",
|
||||
"prop-types": "^15.5.10",
|
||||
"react": "^16.4.1",
|
||||
"react-immutable-proptypes": "^2.1.0"
|
||||
}
|
||||
}
|
68
packages/netlify-cms-widget-select/src/SelectControl.js
Normal file
68
packages/netlify-cms-widget-select/src/SelectControl.js
Normal file
@ -0,0 +1,68 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import { Map } from 'immutable';
|
||||
|
||||
export default class SelectControl extends React.Component {
|
||||
static propTypes = {
|
||||
onChange: PropTypes.func.isRequired,
|
||||
value: PropTypes.node,
|
||||
forID: PropTypes.string.isRequired,
|
||||
classNameWrapper: PropTypes.string.isRequired,
|
||||
setActiveStyle: PropTypes.func.isRequired,
|
||||
setInactiveStyle: PropTypes.func.isRequired,
|
||||
field: ImmutablePropTypes.contains({
|
||||
options: ImmutablePropTypes.listOf(PropTypes.oneOfType([
|
||||
PropTypes.string,
|
||||
ImmutablePropTypes.contains({
|
||||
label: PropTypes.string.isRequired,
|
||||
value: PropTypes.string.isRequired,
|
||||
}),
|
||||
])).isRequired,
|
||||
}),
|
||||
};
|
||||
|
||||
static defaultProps = {
|
||||
value: '',
|
||||
};
|
||||
|
||||
handleChange = (e) => {
|
||||
this.props.onChange(e.target.value);
|
||||
};
|
||||
|
||||
render() {
|
||||
const { field, value, forID, classNameWrapper, setActiveStyle, setInactiveStyle } = this.props;
|
||||
const fieldOptions = field.get('options');
|
||||
|
||||
if (!fieldOptions) {
|
||||
return <div>Error rendering select control for {field.get('name')}: No options</div>;
|
||||
}
|
||||
|
||||
const options = [
|
||||
...(field.get('default', false) ? [] : [{ label: '', value: '' }]),
|
||||
...fieldOptions.map((option) => {
|
||||
if (typeof option === 'string') {
|
||||
return { label: option, value: option };
|
||||
}
|
||||
return Map.isMap(option) ? option.toJS() : option;
|
||||
}),
|
||||
];
|
||||
|
||||
return (
|
||||
<select
|
||||
id={forID}
|
||||
value={value || ''}
|
||||
onChange={this.handleChange}
|
||||
className={classNameWrapper}
|
||||
onFocus={setActiveStyle}
|
||||
onBlur={setInactiveStyle}
|
||||
>
|
||||
{
|
||||
options.map(
|
||||
(option, idx) => <option key={idx} value={option.value}>{option.label}</option>
|
||||
)
|
||||
}
|
||||
</select>
|
||||
);
|
||||
}
|
||||
}
|
13
packages/netlify-cms-widget-select/src/SelectPreview.js
Normal file
13
packages/netlify-cms-widget-select/src/SelectPreview.js
Normal file
@ -0,0 +1,13 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React from 'react';
|
||||
import { WidgetPreviewContainer } from 'netlify-cms-ui-default';
|
||||
|
||||
const SelectPreview = ({ value }) => (
|
||||
<WidgetPreviewContainer>{value ? value.toString() : null}</WidgetPreviewContainer>
|
||||
)
|
||||
|
||||
SelectPreview.propTypes = {
|
||||
value: PropTypes.string,
|
||||
};
|
||||
|
||||
export default SelectPreview;
|
2
packages/netlify-cms-widget-select/src/index.js
Normal file
2
packages/netlify-cms-widget-select/src/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
export SelectControl from './SelectControl';
|
||||
export SelectPreview from './SelectPreview';
|
3
packages/netlify-cms-widget-select/webpack.config.js
Normal file
3
packages/netlify-cms-widget-select/webpack.config.js
Normal file
@ -0,0 +1,3 @@
|
||||
const { getConfig } = require('../../scripts/webpack.js');
|
||||
|
||||
module.exports = getConfig();
|
Reference in New Issue
Block a user