UNPKG

goldfish-search

Version:

A SharePoint 2013 inline People Search component

139 lines (106 loc) 3.49 kB
import React from 'react'; import styles from './Settings.css'; import cssModules from 'react-css-modules'; import Title from '../title/Title.jsx'; import Switch from '../../ui/Switch.jsx'; import SettingStore from '../../stores/SettingStore'; import PeopleSearchActions from '../../actions/PeopleSearchActions'; import SettingsManager from '../../utils/settings'; function getStoreSettingState() { const settings = SettingStore.getSettings(); const current = {}; settings.forEach(function(item) { current[item.internal] = item.value; }); return current; } function getSettingsAndApply() { PeopleSearchActions.fetchSettings(); const settings = getStoreSettingState(); SettingsManager.applySettings(getStoreSettingState()); return settings; } class Settings extends React.Component { constructor(props) { super(props); this.state = getSettingsAndApply(); } componentWillMount() { SettingStore.removeChangeListener(this.onSettingChange); } componentDidMount() { SettingStore.addChangeListener(this.onSettingChange.bind(this)); } componentDidUpdate() { if (this.state === null) { this.state = getSettingsAndApply(); } } onSettingChange() { const settings = getStoreSettingState(); const collection = SettingsManager.applySettings(getStoreSettingState()); this.props.onSettingChange(collection); this.setState(settings); } getSettings(state) { const options = []; const settings = SettingStore.getSettings(); const self = this; settings.forEach(function(item) { options.push( <Switch key={item.internal} checked={state[item.internal]} label={item.label} onChange={self.handleChange.bind(self, item.internal)} /> ); }); return options; } handleChange(field, value) { const settings = SettingStore.getSettings(); settings.some(function(item, i) { const matched = field === item.internal; if (matched) { settings[i].value = value; } return matched; }); PeopleSearchActions.updateSettings(settings); } applySettings() { return SettingsManager.applySettings(getStoreSettingState()); } render() { const settingComponentStyles = { display: 'none !important', paddingTop: this.props.paddingTop, }; if (this.state !== null) { return ( <div id="component-settings" styleName="component" style={settingComponentStyles}> <div styleName="container"> <Title text={this.props.title} suffix="Settings" /> <p styleName="info"> <br /><br /> Settings can be controlled from this page - they will be <strong>applied automatically</strong>. </p> <div className="content" styleName="checkbox-holder"> <br /><br /> <div className="switches-with-broomsticks"> {this.getSettings(this.state)} </div> </div> </div> <br /><br /> </div> ); } } } Settings.propTypes = { title: React.PropTypes.string, paddingTop: React.PropTypes.string, onSettingChange: React.PropTypes.func, }; export default cssModules(Settings, styles, { allowMultiple: true });