diff --git a/example/preferences.js b/example/preferences.js index 2dacec6..68d8bf5 100644 --- a/example/preferences.js +++ b/example/preferences.js @@ -14,10 +14,10 @@ const preferences = new ElectronPreferences({ folder: path.resolve(os.homedir(), 'Notes'), }, about: { - firstName: "Pieter-Jan", - lastName: "Van Robays", - } - //... + firstName: 'Pieter-Jan', + lastName: 'Van Robays', + }, + // ... }, webPreferences: { devTools: true, diff --git a/src/app/components/main/components/group/components/fields/checkbox/index.jsx b/src/app/components/main/components/group/components/fields/checkbox/index.jsx index 7eac71e..b2a0fb1 100644 --- a/src/app/components/main/components/group/components/fields/checkbox/index.jsx +++ b/src/app/components/main/components/group/components/fields/checkbox/index.jsx @@ -1,87 +1,96 @@ -'use strict'; +'use strict' -import React from 'react'; -import {newGuid} from "../../../../../../../utils/newGuid"; +import React from 'react' +import { newGuid } from '../../../../../../../utils/newGuid' class CheckboxField extends React.Component { - state = {}; + render() { - render() { - - const fieldID = `checkbox_${newGuid()}`; - - const options = this.options.map((option, idx) => { - const id = `${fieldID}_${idx}`; - return ( - - ); - }); + const fieldID = `checkbox_${newGuid()}` - return ( -
-
{ this.label }
- { options } - { this.help && { this.help } } -
- ); + const options = this.options.map((option, idx) => { - } + const id = `${fieldID}_${idx}` - get field() { + return ( + + ) - return this.props.field; + }) - } + return ( +
+
{ this.label }
+ { options } + { this.help && { this.help } } +
+ ) - get value() { + } - return this.props.value || []; + get field() { - } + return this.props.field - get label() { + } - return this.field.label; + get value() { - } - - get options() { + return this.props.value || [] - return this.field.options || []; + } - } + get label() { - get help() { + return this.field.label - return this.field.help; + } - } + get options() { - onChange(e) { - - const idx = e.target.id.split('_')[2]; - const option = this.options[idx]; - - if (e.target.checked) { - if (this.value.indexOf(option.value) === -1) { - this.value.push(option.value); - } - } else { - const valIdx = this.value.indexOf(option.value); - if (valIdx > -1) { - this.value.splice(valIdx, 1); - } - } + return this.field.options || [] - return this.props.onChange(this.value); + } - } + get help() { + + return this.field.help + + } + + onChange(e) { + + const idx = e.target.id.split('_')[2] + const option = this.options[idx] + + if (e.target.checked) { + + if (this.value.indexOf(option.value) === -1) { + + this.value.push(option.value) + + } + + } else { + + const valIdx = this.value.indexOf(option.value) + if (valIdx > -1) { + + this.value.splice(valIdx, 1) + + } + + } + + return this.props.onChange(this.value) + + } } -export default CheckboxField; +export default CheckboxField diff --git a/src/app/components/main/components/group/components/fields/color/index.jsx b/src/app/components/main/components/group/components/fields/color/index.jsx index f9083e7..e7579f7 100644 --- a/src/app/components/main/components/group/components/fields/color/index.jsx +++ b/src/app/components/main/components/group/components/fields/color/index.jsx @@ -6,9 +6,13 @@ import * as ReactDOM from "react-dom"; class ColorField extends React.Component { - state = { - displayColorPicker: false - }; + constructor(props) { + super(props); + + this.state = { + displayColorPicker: false + }; + } render() { diff --git a/src/app/components/main/components/group/components/fields/directory/index.jsx b/src/app/components/main/components/group/components/fields/directory/index.jsx index dcffd58..d882b95 100644 --- a/src/app/components/main/components/group/components/fields/directory/index.jsx +++ b/src/app/components/main/components/group/components/fields/directory/index.jsx @@ -5,8 +5,6 @@ import {isArray} from "../../../../../../../utils/isArray"; class DirectoryField extends React.Component { - state = {}; - render() { const { multiSelections, value, help, label } = this; @@ -41,7 +39,7 @@ class DirectoryField extends React.Component { get field() { return this.props.field; } - + get value() { //Always return an array const { value } = this.props; if (typeof(value) === "undefined") @@ -80,7 +78,7 @@ class DirectoryField extends React.Component { get onChange() { return this.props.onChange; } - + choose = () => { const { multiSelections, noResolveAliases, treatPackageAsDirectory, dontAddToRecent } = this; const properties = ['openDirectory', 'createDirectory']; @@ -92,7 +90,7 @@ class DirectoryField extends React.Component { properties.push("treatPackageAsDirectory"); if (dontAddToRecent) properties.push("dontAddToRecent"); - + const result = api.showOpenDialog({ properties: properties }); diff --git a/src/app/components/main/components/group/components/fields/dropdown/index.jsx b/src/app/components/main/components/group/components/fields/dropdown/index.jsx index fb6e983..cbc1b47 100644 --- a/src/app/components/main/components/group/components/fields/dropdown/index.jsx +++ b/src/app/components/main/components/group/components/fields/dropdown/index.jsx @@ -1,68 +1,64 @@ -'use strict'; +'use strict' -import React from 'react'; +import React from 'react' class DropdownField extends React.Component { - state = {}; + render() { - render() { + const options = this.options.map((option, idx) => ( + + )) - const options = this.options.map((option, idx) => { - return ( - - ); - }); + return ( +
+
{ this.label }
+ + { this.help && { this.help } } +
+ ) - return ( -
-
{ this.label }
- - { this.help && { this.help } } -
- ); + } - } + get field() { - get field() { + return this.props.field - return this.props.field; + } - } + get value() { - get value() { + return this.props.value || '' - return this.props.value || ''; + } - } + get label() { - get label() { + return this.field.label - return this.field.label; + } - } + get options() { - get options() { + return this.field.options || [] - return this.field.options || []; + } - } + get help() { - get help() { + return this.field.help - return this.field.help; + } - } + onChange(e) { - onChange(e) { + return this.props.onChange(e.target.value) - return this.props.onChange(e.target.value); - - } + } } -export default DropdownField; +export default DropdownField diff --git a/src/app/components/main/components/group/components/fields/file/index.jsx b/src/app/components/main/components/group/components/fields/file/index.jsx index 14a1c86..bf21ecd 100644 --- a/src/app/components/main/components/group/components/fields/file/index.jsx +++ b/src/app/components/main/components/group/components/fields/file/index.jsx @@ -4,12 +4,9 @@ import React from 'react'; import {isArray} from "../../../../../../../utils/isArray"; class FileField extends React.Component { - - state = {}; - render() { const { multiSelections, value, help, label } = this; - + const btLabel = value && value.length > 0 ? (multiSelections ? 'Choose other Files' : 'Choose another File') : (multiSelections ? 'Choose Files' : 'Choose a File'); @@ -60,27 +57,27 @@ class FileField extends React.Component { get help() { return this.field.help; } - + get filters() { return this.field.filters || undefined; } - + get multiSelections() { return this.field.multiSelections || false; } - + get showHiddenFiles() { return this.field.showHiddenFiles || false; } - + get noResolveAliases() { return this.field.noResolveAliases || false; } - + get treatPackageAsDirectory() { return this.field.treatPackageAsDirectory || false; } - + get dontAddToRecent() { return this.field.dontAddToRecent || false; } diff --git a/src/app/components/main/components/group/components/fields/list/index.jsx b/src/app/components/main/components/group/components/fields/list/index.jsx index d79cada..68c429c 100644 --- a/src/app/components/main/components/group/components/fields/list/index.jsx +++ b/src/app/components/main/components/group/components/fields/list/index.jsx @@ -5,11 +5,14 @@ import ReactModal from 'react-modal'; class ListField extends React.Component { - state = { - showInputModal: false, - itemToAdd: '', - selectedIndex: 0 - }; + constructor(props) { + super(props); + this.state = { + showInputModal: false, + itemToAdd: '', + selectedIndex: 0 + }; + } render() { return ( diff --git a/src/app/components/main/components/group/components/fields/message/index.jsx b/src/app/components/main/components/group/components/fields/message/index.jsx index e87e34a..50a7c21 100644 --- a/src/app/components/main/components/group/components/fields/message/index.jsx +++ b/src/app/components/main/components/group/components/fields/message/index.jsx @@ -1,52 +1,52 @@ -'use strict'; +'use strict' -import React from 'react'; +import React from 'react' class MessageField extends React.Component { - state = {}; + render() { - render() { + if (!this.heading && !this.content) { - if (!this.heading && !this.content) { - return null; - } + return null - return ( -
- { this.heading &&
{ this.heading }
} -
-
- ); + } - } + return ( +
+ { this.heading &&
{ this.heading }
} +
+
+ ) - get field() { + } - return this.props.field; + get field() { - } + return this.props.field - get content() { + } - return this.field.content; + get content() { - } + return this.field.content - get heading() { + } - return this.field.heading; + get heading() { - } + return this.field.heading - getContent() { + } - return { - '__html': this.content - }; + getContent() { - } + return { + __html: this.content, + } + + } } -export default MessageField; +export default MessageField diff --git a/src/app/components/main/components/group/components/fields/radio/index.jsx b/src/app/components/main/components/group/components/fields/radio/index.jsx index 7533cc0..4f99400 100644 --- a/src/app/components/main/components/group/components/fields/radio/index.jsx +++ b/src/app/components/main/components/group/components/fields/radio/index.jsx @@ -1,76 +1,77 @@ -'use strict'; +'use strict' -import React from 'react'; -import {newGuid} from "../../../../../../../utils/newGuid"; +import React from 'react' +import { newGuid } from '../../../../../../../utils/newGuid' class RadioField extends React.Component { - state = {}; + render() { - render() { - - const fieldID = `radio_${newGuid()}`; - - const options = this.options.map((option, idx) => { - const id = `${fieldID}_${idx}`; - return ( - - ); - }); + const fieldID = `radio_${newGuid()}` - return ( -
-
{ this.label }
- { options } - { this.help && { this.help } } -
- ); + const options = this.options.map((option, idx) => { - } + const id = `${fieldID}_${idx}` - get field() { + return ( + + ) - return this.props.field; + }) - } + return ( +
+
{ this.label }
+ { options } + { this.help && { this.help } } +
+ ) - get value() { + } - return this.props.value || false; + get field() { - } + return this.props.field - get label() { + } - return this.field.label; + get value() { - } - - get options() { + return this.props.value || false - return this.field.options || []; + } - } + get label() { - get help() { + return this.field.label - return this.field.help; + } - } + get options() { - onChange(e) { - - const idx = e.target.id.split('_')[2]; - const option = this.options[idx]; + return this.field.options || [] - return this.props.onChange(option.value); + } - } + get help() { + + return this.field.help + + } + + onChange(e) { + + const idx = e.target.id.split('_')[2] + const option = this.options[idx] + + return this.props.onChange(option.value) + + } } -export default RadioField; +export default RadioField diff --git a/src/app/components/main/components/group/components/fields/slider/index.jsx b/src/app/components/main/components/group/components/fields/slider/index.jsx index c40bd7f..7dce0aa 100644 --- a/src/app/components/main/components/group/components/fields/slider/index.jsx +++ b/src/app/components/main/components/group/components/fields/slider/index.jsx @@ -1,71 +1,70 @@ -'use strict'; +'use strict' -import React from 'react'; +import React from 'react' class SliderField extends React.Component { - state = {}; + render() { - render() { + return ( +
+
{ this.label }
+ + + { this.help && { this.help } } +
+ ) - return ( -
-
{ this.label }
- - - { this.help && { this.help } } -
- ); + } - } + get field() { - get field() { + return this.props.field - return this.props.field; + } - } + get value() { - get value() { + return this.props.value || this.min - return this.props.value || this.min; + } - } + get label() { - get label() { + return this.field.label - return this.field.label; + } - } + get min() { - get min() { + return this.field.min || 0 - return this.field.min || 0; + } - } + get max() { - get max() { + return this.field.max || 100 - return this.field.max || 100; + } - } + get step() { - get step() { + return this.field.step || 1 - return this.field.step || 1; + } - } - get help() { + get help() { - return this.field.help; + return this.field.help - } + } - onChange(e) { + onChange(e) { - return this.props.onChange(parseInt(e.target.value)); + return this.props.onChange(parseInt(e.target.value)) - } + } } -export default SliderField; +export default SliderField diff --git a/src/app/components/main/components/group/components/fields/text/index.jsx b/src/app/components/main/components/group/components/fields/text/index.jsx index 4fd578c..f7ad657 100644 --- a/src/app/components/main/components/group/components/fields/text/index.jsx +++ b/src/app/components/main/components/group/components/fields/text/index.jsx @@ -1,59 +1,57 @@ -'use strict'; +'use strict' -import React from 'react'; +import React from 'react' class TextField extends React.Component { - state = {}; + render() { - render() { + return ( +
+
{ this.label }
+ + { this.help && { this.help } } +
+ ) - return ( -
-
{ this.label }
- - { this.help && { this.help } } -
- ); + } - } + get field() { - get field() { + return this.props.field - return this.props.field; + } - } + get value() { - get value() { + return this.props.value || '' - return this.props.value || ''; + } - } + get label() { - get label() { + return this.field.label - return this.field.label; + } - } + get inputType() { - get inputType() { + return this.field.inputType || 'text' - return this.field.inputType || "text"; + } - } + get help() { - get help() { + return this.field.help - return this.field.help; + } - } + onChange(e) { - onChange(e) { + return this.props.onChange(e.target.value) - return this.props.onChange(e.target.value); - - } + } } -export default TextField; +export default TextField diff --git a/src/app/components/main/components/group/index.jsx b/src/app/components/main/components/group/index.jsx index 92048ea..19902d3 100644 --- a/src/app/components/main/components/group/index.jsx +++ b/src/app/components/main/components/group/index.jsx @@ -1,90 +1,91 @@ -'use strict'; - -import React from 'react'; -import DirectoryField from './components/fields/directory'; -import TextField from './components/fields/text'; -import MessageField from './components/fields/message'; -import DropdownField from './components/fields/dropdown'; -import CheckboxField from "./components/fields/checkbox"; -import RadioField from "./components/fields/radio"; -import SliderField from "./components/fields/slider"; -import AcceleratorField from "./components/fields/accelerator"; -import ColorField from "./components/fields/color"; -import ListField from "./components/fields/list"; -import FileField from "./components/fields/file"; +'use strict' + +import React from 'react' +import DirectoryField from './components/fields/directory' +import TextField from './components/fields/text' +import MessageField from './components/fields/message' +import DropdownField from './components/fields/dropdown' +import CheckboxField from './components/fields/checkbox' +import RadioField from './components/fields/radio' +import SliderField from './components/fields/slider' +import AcceleratorField from './components/fields/accelerator' +import ColorField from './components/fields/color' +import ListField from './components/fields/list' +import FileField from './components/fields/file' const fieldMap = { - 'directory': DirectoryField, - 'text': TextField, - 'message': MessageField, - 'dropdown': DropdownField, - 'checkbox': CheckboxField, - 'radio': RadioField, - 'slider': SliderField, - 'accelerator': AcceleratorField, - 'color': ColorField, - 'list': ListField, - 'file': FileField, -}; + directory: DirectoryField, + text: TextField, + message: MessageField, + dropdown: DropdownField, + checkbox: CheckboxField, + radio: RadioField, + slider: SliderField, + accelerator: AcceleratorField, + color: ColorField, + list: ListField, + file: FileField, +} class Group extends React.Component { - state = {}; + render() { + + const label = this.label ?
{ this.label }
: null + + const fields = this.fields.map((field, idx) => { + + const Field = fieldMap[field.type] + if (!Field) { + + return - render() { + } - const label = this.label ?
{ this.label }
: null; + return - const fields = this.fields.map((field, idx) => { - const Field = fieldMap[field.type]; - if (!Field) { - return; - } - return - }) - .filter((field) => { - return field; - }); + }) + .filter(field => field) - return ( -
- { label } - { fields } -
- ); + return ( +
+ { label } + { fields } +
+ ) - } + } - get label() { + get label() { - return this.group.label; + return this.group.label - } + } - get fields() { + get fields() { - return this.group.fields; + return this.group.fields - } + } - get group() { + get group() { - return this.props.group; + return this.props.group - } + } - get preferences() { + get preferences() { - return this.props.preferences; + return this.props.preferences - } + } - get onFieldChange() { + get onFieldChange() { - return this.props.onFieldChange; + return this.props.onFieldChange - } + } } -module.exports = Group; +module.exports = Group diff --git a/src/app/index.jsx b/src/app/index.jsx index 8f42034..279ab79 100644 --- a/src/app/index.jsx +++ b/src/app/index.jsx @@ -1,73 +1,81 @@ -'use strict'; - -import React from 'react'; -import ReactDOM from 'react-dom'; -import _ from 'lodash'; -import debounce from './utils/debounce'; -import Sidebar from './components/sidebar'; -import Main from './components/main'; -import '../../scss/style.scss'; - -const allSections = api.getSections(); -const preferences = api.getPreferences(); -const defaults = api.getDefaults(); - -const sections = allSections.filter((section) => { - return _.isBoolean(section.enabled) ? section.enabled : true; -}); - -const dSavePreferences = debounce( preferences => { - api.setPreferences(preferences); +'use strict' + +import React from 'react' +import ReactDOM from 'react-dom' +import _ from 'lodash' +import debounce from './utils/debounce' +import Sidebar from './components/sidebar' +import Main from './components/main' +import '../../scss/style.scss' + +const allSections = api.getSections() +const preferences = api.getPreferences() + +const sections = allSections.filter(section => _.isBoolean(section.enabled) ? section.enabled : true) + +const dSavePreferences = debounce(preferences => { + + api.setPreferences(preferences) + }, 200) -sections.forEach((section) => { - if (!preferences[section.id]) { - preferences[section.id] = {}; - } -}); +sections.forEach(section => { + + if (!preferences[section.id]) { + + preferences[section.id] = {} + + } + +}) class App extends React.Component { - state = { - 'sections': sections, - 'activeSection': sections[0].id, - 'preferences': preferences - }; + constructor(props) { + + super(props) + this.state = { + sections, + activeSection: sections[0].id, + preferences, + } + + } - render() { + render() { - return ( - - -
- - ); + return ( + + +
+ + ) - } + } - onSelectSection(sectionId) { + onSelectSection(sectionId) { - this.setState({ - 'activeSection': sectionId - }); + this.setState({ + activeSection: sectionId, + }) - } + } - onFieldChange(key, value) { + onFieldChange(key, value) { - preferences[this.state.activeSection][key] = value; + preferences[this.state.activeSection][key] = value - this.setState({ - 'preferences': preferences - }); + this.setState({ + preferences, + }) - dSavePreferences(preferences) + dSavePreferences(preferences) - } + } } ReactDOM.render( - , - document.getElementById('window') -); + , + document.getElementById('window'), +) diff --git a/webpack.config.js b/webpack.config.js index 96df6a7..1ce56f3 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,6 +1,5 @@ 'use strict' -const webpack = require('webpack') const path = require('path') const CopyWebpackPlugin = require('copy-webpack-plugin')