From 72a4a38fec9f6ee241e19ee69b97b6eed566aff7 Mon Sep 17 00:00:00 2001 From: Curtis ROck Date: Sun, 9 Aug 2020 11:03:24 -0500 Subject: [PATCH] Refactoring to use soapbox object as state. Still buggy --- app/soapbox/features/configuration/index.js | 135 ++++++++++++-------- 1 file changed, 79 insertions(+), 56 deletions(-) diff --git a/app/soapbox/features/configuration/index.js b/app/soapbox/features/configuration/index.js index 47f0d256c..0850b506b 100644 --- a/app/soapbox/features/configuration/index.js +++ b/app/soapbox/features/configuration/index.js @@ -33,17 +33,9 @@ const messages = defineMessages({ }); const mapStateToProps = state => { - const soapbox = state.get('soapbox'); + // const soapbox = state.get('soapbox'); return { - brandColor: soapbox.get('brandColor'), - customCssItems: soapbox.get('customCss'), - logo: soapbox.get('logo'), - banner: soapbox.get('banner'), - promoItems: soapbox.getIn(['promoPanel', 'items']), - patronEnabled: soapbox.getIn(['extensions', 'patron']), - autoPlayGif: soapbox.getIn(['defaultSettings', 'autoPlayGif']), - copyright: soapbox.get('copyright'), - homeFooterItems: soapbox.getIn(['navlinks', 'homeFooter']), + soapbox: state.get('soapbox'), }; }; @@ -52,17 +44,9 @@ export default @connect(mapStateToProps) class ConfigSoapbox extends ImmutablePureComponent { static propTypes = { + soapbox: ImmutablePropTypes.map, dispatch: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, - brandColor: PropTypes.string, - customCssItems: ImmutablePropTypes.list, - logo: PropTypes.string, - banner: PropTypes.string, - promoItems: ImmutablePropTypes.list, - patronEnabled: PropTypes.bool, - autoPlayGif: PropTypes.bool, - copyright: PropTypes.string, - homeFooterItems: ImmutablePropTypes.list, }; state = { @@ -71,25 +55,28 @@ class ConfigSoapbox extends ImmutablePureComponent { constructor(props) { super(props); - this.state = { - logo: props.logo, - banner: props.banner, - brandColor: props.brandColor, - customCssItems: props.customCssItems, - promoItems: props.promoItems, - homeFooterItems: props.homeFooterItems, - copyright: props.copyright, - patronEnabled: false, - autoPlayGif: false, - }; + const initialState = props.soapbox.withMutations(map => { + }); + this.state = initialState.toObject(); + // this.state = ImmutableMap(props.soapbox); + // console.log(this.state); + // console.log(JSON.stringify(this.state, null, 2)); if (!this.state.logo) { this.state.logo = ''; } if (!this.state.banner) { this.state.banner = ''; } - if (!this.state.promoItems) { - this.state.promoItems = ImmutableList([ + if (!this.state.defaultSettings.autoPlayGif) { + this.state.defaultSettings.autoPlayGif = false; + // console.log(this.state.defaultSettings.autoPlayGif); + }; + if (!this.state.extensions.patron) { + this.state.extensions.patron = false; + // console.log(this.state.extensions.patron); + }; + if (!this.state.promoPanel.items) { + this.state.promoPanel.items = ImmutableList([ ImmutableMap({ icon: '', text: '', @@ -97,8 +84,8 @@ class ConfigSoapbox extends ImmutablePureComponent { }), ]); }; - if (!this.state.homeFooterItems) { - this.state.homeFooterItems = ImmutableList([ + if (!this.state.navlinks.homeFooter) { + this.state.navlinks.homeFooter = ImmutableList([ ImmutableMap({ title: '', url: '', @@ -106,12 +93,15 @@ class ConfigSoapbox extends ImmutablePureComponent { ]); }; if (!this.state.customCssItems) { - this.state.customCssItems = ImmutableList([]); + this.state.customCssItems = ImmutableList([' ']); }; this.handlecustomCSSChange = this.handleCustomCSSChange.bind(this); this.handleAddPromoPanelItem = this.handleAddPromoPanelItem.bind(this); this.handleAddHomeFooterItem = this.handleAddHomeFooterItem.bind(this); this.handleAddCssItem = this.handleAddCssItem.bind(this); + this.handleExtensionsCheckboxChange = this.handleExtensionsCheckboxChange.bind(this); + this.handleDefaultSettingsCheckboxChange = this.handleDefaultSettingsCheckboxChange.bind(this); + this.handleBrandColorChange = this.handleBrandColorChange.bind(this); this.getParams = this.getParams.bind(this); } @@ -149,8 +139,8 @@ class ConfigSoapbox extends ImmutablePureComponent { obj.configs[0].value[0].tuple[1].logo = state.logo; obj.configs[0].value[0].tuple[1].banner = state.banner; obj.configs[0].value[0].tuple[1].brandColor = state.brandColor; - obj.configs[0].value[0].tuple[1].extensions.patron = state.patronEnabled; - obj.configs[0].value[0].tuple[1].defaultSettings.autoPlayGif = state.autoPlayGif; + obj.configs[0].value[0].tuple[1].extensions.patron = state.extensions.patron; + obj.configs[0].value[0].tuple[1].defaultSettings.autoPlayGif = state.defaultSettings.autoPlayGif; obj.configs[0].value[0].tuple[1].copyright = state.copyright; this.state.homeFooterItems.forEach((f) => obj.configs[0].value[0].tuple[1].navlinks.homeFooter.push({ title: f.get('title'), url: f.get('url') }) @@ -177,20 +167,45 @@ class ConfigSoapbox extends ImmutablePureComponent { event.preventDefault(); } - handleCheckboxChange = e => { - this.setState({ [e.target.name]: e.target.checked }); + handleExtensionsCheckboxChange = e => { + var extensions = { ...this.state.extensions }; + if (e.target.name === 'patron') { + extensions.patron = e.target.value; + } + this.setState({ extensions }); + // this.setState({ + // extensions: this.state.setIn(['extensions', e.target.name], e.target.value), + // }); + } + + handleDefaultSettingsCheckboxChange = e => { + var defaultSettings = { ...this.state.defaultSettings }; + if (e.target.name === 'autoPlayGif') { + defaultSettings.autoPlayGif = e.target.value; + } + this.setState({ defaultSettings }); + // this.setState({ + // defaultSettings: this.state.setIn(['defaultSettings', '[e.target.name]'], e.target.value), + // }); } handleBrandColorChange = e => { - this.setState({ brandColor: e.hex }); + this.setState({ + brandColor: e.hex, + }); + // this.state.setIn(['brandColor'], e.hex); } handleTextChange = e => { - this.setState({ [e.target.name]: e.target.value }); + // this.state.soapbox.setIn(['{e.target.name}'], e.target.value); + this.setState({ + [e.target.name]: e.target.value, + }); } handlePromoItemsChange = (i, key) => { return (e) => { + // this.state.soapbox.promoItems.setIn([i, key], e.target.value); this.setState({ promoItems: this.state.promoItems.setIn([i, key], e.target.value), }); @@ -199,6 +214,7 @@ class ConfigSoapbox extends ImmutablePureComponent { handleHomeFooterItemsChange = (i, key) => { return (e) => { + // this.state.soapbox.homeFooterItems.setIn([i, key], e.target.value); this.setState({ homeFooterItems: this.state.homeFooterItems.setIn([i, key], e.target.value), }); @@ -207,6 +223,7 @@ class ConfigSoapbox extends ImmutablePureComponent { handleCustomCSSChange = i => { return (e) => { + // this.state.soapbox.customCssItems.setIn([i], e.target.value); this.setState({ customCssItems: this.state.customCssItems.setIn([i], e.target.value), }); @@ -217,6 +234,8 @@ class ConfigSoapbox extends ImmutablePureComponent { const { name } = e.target; const [file] = e.target.files || []; const url = file ? URL.createObjectURL(file) : this.state[name]; + // this.state.soapbox.setIn([name], url); + // this.state.soapbox.setIn([`${name}_file`], file); this.setState({ [name]: url, @@ -226,7 +245,7 @@ class ConfigSoapbox extends ImmutablePureComponent { handleAddPromoPanelItem = () => { this.setState({ - promoItems: this.state.promoItems.concat([ + Items: this.state.promoPanel.Items.concat([ ImmutableMap({ icon: '', text: '', @@ -238,7 +257,7 @@ class ConfigSoapbox extends ImmutablePureComponent { handleAddHomeFooterItem = () => { this.setState({ - homeFooterItems: this.state.homeFooterItems.concat([ + homeFooter: this.state.navlinks.homeFooter.concat([ ImmutableMap({ title: '', url: '', @@ -249,12 +268,16 @@ class ConfigSoapbox extends ImmutablePureComponent { handleAddCssItem = () => { this.setState({ - customCssItems: this.state.customCssItems.concat(['']), + customCss: this.state.customCss.concat(['']), }); } render() { const { intl } = this.props; + const { logo, banner, brandColor, extensions, defaultSettings, copyright, + promoPanel, navlinks, customCss } = this.state; + // console.log(navlinks.homeFooter); + // console.log(promoPanel.items); return ( @@ -263,7 +286,7 @@ class ConfigSoapbox extends ImmutablePureComponent {
- {this.state.logo ? () : ()} + {logo ? () : ()}
- {this.state.banner ? () : ()} + {banner ? () : ()}
} - value={this.state.brandColor || '#0482d8'} + value={brandColor || '#0482d8'} onChange={this.handleBrandColorChange} />
@@ -302,16 +325,16 @@ class ConfigSoapbox extends ImmutablePureComponent { } hint={} - name='patronEnabled' - checked={this.state.patronEnabled ? this.state.patronEnabled : this.props.patronEnabled || false} - onChange={this.handleCheckboxChange} + name='patron' + checked={extensions.patron ? extensions.patron : false} + onChange={this.handleExtensionsCheckboxChange} /> } hint={} name='autoPlayGif' - checked={this.state.autoPlayGif ? this.state.autoPlayGif : this.props.autoPlayGif || false} - onChange={this.handleCheckboxChange} + checked={defaultSettings.autoPlayGif ? defaultSettings.autoPlayGif : false} + onChange={this.handleDefaultSettingsCheckboxChange} /> @@ -319,7 +342,7 @@ class ConfigSoapbox extends ImmutablePureComponent { name='copyright' label={intl.formatMessage(messages.copyrightFooterLabel)} placeholder={intl.formatMessage(messages.copyrightFooterLabel)} - value={this.state.copyright} + value={copyright ? copyright : this.props.soapbox.copyright || ''} onChange={this.handleTextChange} /> @@ -334,7 +357,7 @@ class ConfigSoapbox extends ImmutablePureComponent { Soapbox Icons List }} /> { - this.state.promoItems.map((field, i) => ( + promoPanel.items.map((field, i) => (
{ - this.state.homeFooterItems.map((field, i) => ( + navlinks.homeFooter.map((field, i) => (
{ - this.state.customCssItems.map((field, i) => ( + customCss.map((field, i) => (