diff --git a/src/components/UserProfile/SocialLinks.jsx b/src/components/UserProfile/SocialLinks.jsx
index d0867d6..9ec3e49 100644
--- a/src/components/UserProfile/SocialLinks.jsx
+++ b/src/components/UserProfile/SocialLinks.jsx
@@ -21,6 +21,8 @@ class SocialLinks extends React.Component {
super(props);
this.state = {};
this.onSave = this.onSave.bind(this);
+ this.onEdit = this.onEdit.bind(this);
+ this.onInputChange = this.onInputChange.bind(this);
}
onSave() {
@@ -32,136 +34,134 @@ class SocialLinks extends React.Component {
this.props.onSave('socialLinks', values);
}
+ onEdit() {
+ this.props.onEdit('socialLinks');
+ }
+
+ onInputChange(platform, value) {
+ console.log(platform, value)
+ this.setState({ [platform]: value});
+ }
+
+ renderEmpty() {
+ const { platforms } = this.props;
+ const onEdit = this.onEdit;
+
+ return (
+
+ {platforms.map(({ key, name }) => (
+
+ ))}
+
+ );
+ }
+
+ renderStatic(linkValues) {
+ const { platforms } = this.props;
+ const links = platforms.filter(({ key }) => Boolean(linkValues[key]));
+
+ return (
+
+
+
+ {links.map(({ key, name}) => (
+
+ ))}
+
+
+ );
+ }
+
+ renderEditable(linkValues, isEmpty) {
+ const { visibility, platforms, showVisibility } = this.props;
+ const onEdit = this.onEdit;
+
+ return (
+
+
+
+ {platforms.map(({ key, name }) => (
+
+ ))}
+
+
+ );
+ }
+
+ renderEditing(linkValues) {
+ const { platforms, saveState, visibility, onVisibilityChange, onCancel } = this.props;
+ const onInputChange = this.onInputChange;
+
+ return (
+
+
+
+ {platforms.map(({ key, name }) => (
+
+ ))}
+
+ onCancel('socialLinks')}
+ onSave={this.onSave}
+ saveState={saveState}
+ visibility={visibility}
+ onVisibilityChange={e => onVisibilityChange('socialLinks', e.target.value)}
+ />
+
+ );
+ }
+
render() {
- const {
- socialLinks,
- editMode,
- onEdit,
- onCancel,
- onVisibilityChange,
- saveState,
- } = this.props;
-
- const socialLinksObj = {};
-
- if (socialLinks !== null) {
- socialLinks.forEach(({ platform, socialLink }) => {
- socialLinksObj[platform] = socialLink;
- });
- }
-
+ const { socialLinks, editMode } = this.props;
+ const socialLinksObj = socialLinks.reduce((acc, { platform, socialLink }) => {
+ acc[platform] = socialLink;
+ return acc;
+ }, {});
+ const isEmpty = socialLinks && socialLinks.length > 0;
return (
-
-
- onCancel('socialLinks')}
- onSave={this.onSave}
- saveState={saveState}
- visibility={this.props.visibility}
- onVisibilityChange={e => onVisibilityChange('socialLinks', e.target.value)}
- />
-
- ),
- editable: (
-
- onEdit('socialLinks')}
- showVisibility={socialLinks && socialLinks.length > 0}
- visibility={this.props.visibility}
- />
-
- {this.props.platforms.map(({ key, name }) => (
- -
- {
- socialLinksObj[key] ? (
-
-
- {name}
-
- ) : (
- onEdit('socialLinks')}>Add {name}
- )
- }
-
- ))}
-
-
- ),
- empty: (
-
- {this.props.platforms.map(({ key, name }) => (
- -
- onEdit('socialLinks')}>Add {name}
-
- ))}
-
- ),
- static: (
-
-
-
- {this.props.platforms.map(({ key, name }) => {
- if (!socialLinksObj[key]) return null;
-
- return (
- -
- {name}
-
- );
- })}
-
-
- ),
+ empty: this.renderEmpty(),
+ static: this.renderStatic(socialLinksObj),
+ editing: this.renderEditing(socialLinksObj),
+ editable: this.renderEditable(socialLinksObj, isEmpty),
}}
/>
);
}
}
-const sectionPropTypes = {
- editMode: PropTypes.string,
- onEdit: PropTypes.func.isRequired,
- onChange: PropTypes.func.isRequired,
- onSave: PropTypes.func.isRequired,
- onCancel: PropTypes.func.isRequired,
- onVisibilityChange: PropTypes.func.isRequired,
- saveState: PropTypes.string,
-};
-
-const sectionDefaultProps = {
- editMode: 'static',
- saveState: null,
-};
-
SocialLinks.propTypes = {
- ...sectionPropTypes,
socialLinks: PropTypes.arrayOf(PropTypes.shape({
platform: PropTypes.string,
socialLink: PropTypes.string,
@@ -171,10 +171,16 @@ SocialLinks.propTypes = {
name: PropTypes.string,
})),
visibility: PropTypes.oneOf(['private', 'all_users']),
+ editMode: PropTypes.string,
+ onEdit: PropTypes.func.isRequired,
+ onChange: PropTypes.func.isRequired,
+ onSave: PropTypes.func.isRequired,
+ onCancel: PropTypes.func.isRequired,
+ onVisibilityChange: PropTypes.func.isRequired,
+ saveState: PropTypes.string,
};
SocialLinks.defaultProps = {
- ...sectionDefaultProps,
socialLinks: [],
platforms: [
{ key: 'twitter', name: 'Twitter' },
@@ -182,6 +188,57 @@ SocialLinks.defaultProps = {
{ key: 'facebook', name: 'Facebook' },
],
visibility: 'private',
+ editMode: 'static',
+ saveState: null,
};
export default SocialLinks;
+
+
+
+
+function SocialLink({ url, name, platform }) {
+ return (
+
+
+ {name}
+
+ );
+}
+
+function EditableListItem({ url, platform, onEdit, name }) {
+ const linkDisplay = url != null ?
+ :
+ Add {name};
+
+ return {linkDisplay};
+}
+
+function EditingListItem({ platform, name, defaultValue, onChange }) {
+ return (
+
+ {name}
+ onChange(platform, e.target.value)}
+ />
+
+ );
+}
+
+function EmptyListItem({ onClick, name }) {
+ return (
+
+ Add {name}
+
+ );
+}
+
+function StaticListItem({ name, url, platform }) {
+ return (
+
+
+
+ );
+}