| 1 |
import React from 'react'; |
| 2 |
import PropTypes from 'prop-types'; |
| 3 |
import { Element } from 'react-scroll'; |
| 4 |
|
| 5 |
import Helpers from '../general/Helpers'; |
| 6 |
import RequiredLabel from './RequiredLabel'; |
| 7 |
|
| 8 |
import SettingCode from './setting/Code'; |
| 9 |
import SettingColor from './setting/Color'; |
| 10 |
import SettingDropdown from './setting/Dropdown'; |
| 11 |
import SettingDropdownMultiselect from './setting/DropdownMultiselect'; |
| 12 |
import SettingEmail from './setting/Email'; |
| 13 |
import SettingNumber from './setting/Number'; |
| 14 |
import SettingRichTextarea from './setting/RichTextarea'; |
| 15 |
import SettingText from './setting/Text'; |
| 16 |
import SettingTextarea from './setting/Textarea'; |
| 17 |
import SettingToggle from './setting/Toggle'; |
| 18 |
|
| 19 |
import InformationButton from './information/Button'; |
| 20 |
|
| 21 |
const settingTypes = { |
| 22 |
code: SettingCode, |
| 23 |
color: SettingColor, |
| 24 |
dropdown: SettingDropdown, |
| 25 |
dropdownMultiselect: SettingDropdownMultiselect, |
| 26 |
email: SettingEmail, |
| 27 |
number: SettingNumber, |
| 28 |
richTextarea: SettingRichTextarea, |
| 29 |
text: SettingText, |
| 30 |
textarea: SettingTextarea, |
| 31 |
toggle: SettingToggle, |
| 32 |
} |
| 33 |
const informationTypes = { |
| 34 |
button: InformationButton, |
| 35 |
} |
| 36 |
|
| 37 |
const Setting = (props) => { |
| 38 |
const SettingComponent = settingTypes.hasOwnProperty(props.setting.type) ? settingTypes[props.setting.type] : false; |
| 39 |
const InformationComponent = informationTypes.hasOwnProperty(props.setting.type) ? informationTypes[props.setting.type] : false; |
| 40 |
|
| 41 |
const displayValue = SettingComponent ? Helpers.beforeSettingDisplay(props.setting.id, props.settings) : false; |
| 42 |
|
| 43 |
return ( |
| 44 |
<Element className="bvs-setting-container" name={props.setting.id} > |
| 45 |
<div className="bvs-setting-label-container"> |
| 46 |
<span className="bvs-setting-label"> |
| 47 |
<RequiredLabel object={props.setting} />{props.setting.name} |
| 48 |
</span> |
| 49 |
<span className="bvs-setting-description">{props.setting.description}</span> |
| 50 |
{ |
| 51 |
props.setting.hasOwnProperty('documentation') |
| 52 |
? |
| 53 |
<a href={props.setting.documentation} target="_blank" className="bvs-setting-documentation">Learn More</a> |
| 54 |
: |
| 55 |
null |
| 56 |
} |
| 57 |
</div> |
| 58 |
<div className="bvs-setting-input-container"> |
| 59 |
{ |
| 60 |
SettingComponent ? |
| 61 |
<SettingComponent |
| 62 |
setting={props.setting} |
| 63 |
settingsChanged={props.settingsChanged} |
| 64 |
onValueChange={(value) => { |
| 65 |
const saveValue = Helpers.beforeSettingSave(value, props.setting.id, props.settings); |
| 66 |
return props.onSettingChange(props.setting.id, saveValue) |
| 67 |
}} |
| 68 |
value={displayValue} |
| 69 |
/> |
| 70 |
: |
| 71 |
null |
| 72 |
} |
| 73 |
{ |
| 74 |
InformationComponent ? |
| 75 |
<InformationComponent |
| 76 |
setting={props.setting} |
| 77 |
settingsChanged={props.settingsChanged} |
| 78 |
/> |
| 79 |
: |
| 80 |
null |
| 81 |
} |
| 82 |
</div> |
| 83 |
</Element> |
| 84 |
); |
| 85 |
} |
| 86 |
|
| 87 |
Setting.propTypes = { |
| 88 |
settings: PropTypes.object.isRequired, |
| 89 |
setting: PropTypes.object.isRequired, |
| 90 |
onSettingChange: PropTypes.func.isRequired, |
| 91 |
settingsChanged: PropTypes.bool.isRequired, |
| 92 |
} |
| 93 |
|
| 94 |
export default Setting; |