0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-17 23:44:39 -05:00

Restructured links page layout

no refs.
- used table for link page structur
This commit is contained in:
Peter Zimon 2020-07-29 12:11:07 +02:00
parent a1a51b5704
commit 6af7ab674a
4 changed files with 80 additions and 68 deletions

View file

@ -142,8 +142,8 @@ export default class App extends React.Component {
return {
showPopup: true,
site: Fixtures.site,
member: Fixtures.member.free,
page: 'accountHome'
member: Fixtures.member.paid,
page: 'links'
};
}
return {};

View file

@ -11,6 +11,7 @@ import {SignupPageStyles} from './pages/SignupPage';
import {PlanSectionStyles} from './common/PlansSection';
import {AvatarStyles} from './common/MemberGravatar';
import {MagicLinkStyles} from './pages/MagicLinkPage';
import {LinkPageStyles} from './pages/LinkPage';
// Global styles
const GlobalStyles = `
@ -339,6 +340,10 @@ const GlobalStyles = `
.gh-portal-icon {
color: var(--brandcolor);
}
/* Links
/* ----------------------------------------------------- */
`;
// Append all styles as string which we want to pass to iframe
@ -351,6 +356,7 @@ const FrameStyle =
ActionButtonStyles +
AvatarStyles +
MagicLinkStyles +
LinkPageStyles +
SignupPageStyles;
export default FrameStyle;

View file

@ -131,9 +131,13 @@ class TriggerButtonContent extends React.Component {
);
} else if (buttonIcon) {
return (
<img style={{width: '26px', height: '26px'}} src={buttonIcon} alt="Icon" />
<img style={{width: '26px', height: '26px'}} src={buttonIcon} alt="" />
);
} else {
if (this.hasText()) {
Style.userIcon.width = '26px';
Style.userIcon.height = '26px';
}
return (
<UserIcon style={Style.userIcon} />
);

View file

@ -2,6 +2,38 @@ import AppContext from '../../AppContext';
import CopyToClipboard from '../../utils/copy-to-clipboard';
const React = require('react');
export const LinkPageStyles = `
.gh-portal-links-table {
width: 100%;
}
.gh-portal-links-table tr td {
white-space: nowrap;
padding: 4px 12px 4px 0;
}
.gh-portal-links-table tr.header td {
border-bottom: 1px solid var(--grey12);
}
.gh-portal-links-table tr.header h4.toggle {
font-weight: 400;
color: var(--brandcolor);
cursor: pointer;
}
.gh-portal-links-table tr td:last-of-type {
text-align: right;
padding-right: 0;
}
.gh-portal-links-table tr.header .toggle-header {
display: flex;
align-items: center;
justify-content: space-between;
}
`;
function getLinkOrAttribute({page, isLink, siteUrl}) {
if (page === 'default') {
return (isLink ? `${siteUrl}#/portal` : 'data-portal');
@ -18,52 +50,25 @@ function getLinkOrAttribute({page, isLink, siteUrl}) {
}
}
const LinkAttributeValue = ({page, isLink, siteUrl}) => {
const rightItemStyle = {
paddingBottom: '24px',
display: 'flex'
};
const value = getLinkOrAttribute({page, isLink, siteUrl});
return (
<div style={rightItemStyle}>
<span style={{
flexGrow: 1,
whiteSpace: 'nowrap',
overflow: 'hidden',
textOverflow: 'ellipsis',
paddingRight: '12px'
}}> {value} </span>
<button type="button" onClick={(e) => {
CopyToClipboard(value);
}}> Copy </button>
</div>
);
};
const LinkAttributeSection = ({siteUrl, showLinks: isLink, toggleShowLinks}) => {
return (
<div style={{flexGrow: 1, minWidth: '350px'}}>
<div style={{display: 'flex', borderBottom: '1px solid black', marginBottom: '12px'}}>
<span style={{flexGrow: 1, fontWeight: 'bold'}}> {isLink ? 'Link' : 'Data Attribute'} </span>
<LinkAttributeToggle showLinks={isLink} toggleShowLinks={toggleShowLinks}/>
</div>
<LinkAttributeValue page="default" isLink={isLink} siteUrl={siteUrl} />
<LinkAttributeValue page="signup" isLink={isLink} siteUrl={siteUrl} />
<LinkAttributeValue page="signin" isLink={isLink} siteUrl={siteUrl} />
<LinkAttributeValue page="accountHome" isLink={isLink} siteUrl={siteUrl} />
<LinkAttributeValue page="accountPlan" isLink={isLink} siteUrl={siteUrl} />
<LinkAttributeValue page="accountProfile" isLink={isLink} siteUrl={siteUrl} />
</div>
);
};
const LinkAttributeToggle = ({showLinks, toggleShowLinks}) => {
const text = showLinks ? 'Show Data Attributes' : 'Show Links';
return (
<span
style={{cursor: 'pointer', color: '#3eb0ef'}}
onClick={() => toggleShowLinks({showLinks: !showLinks})}> {text}
</span>
<h4 className='gh-portal-links-cell toggle' onClick={() => toggleShowLinks({showLinks: !showLinks})}>{text}</h4>
);
};
const LinkAttributeRow = ({pageName, page, isLink, siteUrl}) => {
const value = getLinkOrAttribute({page, isLink, siteUrl});
return (
<tr>
<td className='pagename'>{pageName}</td>
<td className='page-url'><input value={value} disabled="disabled" /></td>
<td className='copy'>
<button type="button" onClick={(e) => {
CopyToClipboard(value);
}}>Copy</button>
</td>
</tr>
);
};
@ -78,30 +83,27 @@ export default class LinkPage extends React.Component {
}
render() {
const itemStyle = {
paddingRight: '32px',
paddingBottom: '24px'
};
const {url: siteUrl = ''} = this.context.site;
return (
<div style={{display: 'flex', flexDirection: 'column', color: '#313131', padding: '12px 24px'}}>
<div> Use these links or data attributes to show the various sections of members modal.</div>
<div style={{display: 'flex', marginTop: '12px'}}>
<div style={{flexShrink: 0}}>
<div style={{borderBottom: '1px solid black', marginBottom: '12px', fontWeight: 'bold'}}> Section </div>
<div style={itemStyle}> Default </div>
<div style={itemStyle}> Signup </div>
<div style={itemStyle}> Signin </div>
<div style={itemStyle}> Account home </div>
<div style={itemStyle}> Account -&gt; Plans </div>
<div style={itemStyle}> Account -&gt; Profile </div>
</div>
<LinkAttributeSection
showLinks={this.state.showLinks}
toggleShowLinks={({showLinks}) => this.setState({showLinks})}
siteUrl={siteUrl}
/>
</div>
<div className='gh-portal-links-main'>
<p>Use these links or data attributes to show the various sections of members modal.</p>
<table className='gh-portal-links-table'>
<tr className='header'>
<td><h4>Section</h4></td>
<td colspan='2'>
<div className='toggle-header'>
<h4>{this.state.showLinks ? 'Link' : 'Data Attribute'}</h4>
<LinkAttributeToggle showLinks={this.state.showLinks} toggleShowLinks={({showLinks}) => this.setState({showLinks})}/>
</div>
</td>
</tr>
<LinkAttributeRow pageName="Default" page="default" isLink={this.state.showLinks} siteUrl={siteUrl} />
<LinkAttributeRow pageName="Sign up" page="signup" isLink={this.state.showLinks} siteUrl={siteUrl} />
<LinkAttributeRow pageName="Sign in" page="signin" isLink={this.state.showLinks} siteUrl={siteUrl} />
<LinkAttributeRow pageName="Account home" page="accountHome" isLink={this.state.showLinks} siteUrl={siteUrl} />
<LinkAttributeRow pageName="Account/Plans" page="accountPlan" isLink={this.state.showLinks} siteUrl={siteUrl} />
<LinkAttributeRow pageName="Account/Profile" page="accountProfile" isLink={this.state.showLinks} siteUrl={siteUrl} />
</table>
</div>
);
}