File "index.jsx"
Full Path: /home/warrior1/public_html/wp-content-20241001222009/plugins/jetpack/jetpack_vendor/automattic/jetpack-wordads/src/dashboard/components/card/index.jsx
File size: 3.26 KB
MIME-type: text/x-java
Charset: utf-8
import { Gridicon } from '@automattic/jetpack-components';
import classnames from 'classnames';
import assign from 'lodash/assign';
import omit from 'lodash/omit';
import PropTypes from 'prop-types';
import React from 'react';
/*eslint lodash/import-scope: [2, "method"]*/
/*eslint lodash/import-scope: [2, "method"]*/
import './style.scss';
class CardSection extends React.Component {
static propTypes = {
title: PropTypes.any,
vertical: PropTypes.any,
style: PropTypes.object,
className: PropTypes.string,
device: PropTypes.oneOf( [ 'desktop', 'tablet', 'phone' ] ),
};
static defaultProps = { vertical: null };
render() {
return (
<div
className={ classnames( 'dops-card-section', this.props.className ) }
style={ this.props.style }
>
{ this.props.title ? this._renderWithTitle() : this.props.children }
</div>
);
}
_renderWithTitle = () => {
const orientation = this.props.vertical ? 'vertical' : 'horizontal';
const wrapperClassName = 'dops-card-section-orient-' + orientation;
return (
<div className={ wrapperClassName }>
<h4 ref="label" className="dops-card-section-label">
{ this.props.title }
</h4>
<div ref="content" className="dops-card-section-content">
{ this.props.children }
</div>
</div>
);
};
}
class CardFooter extends React.Component {
render() {
return <div className="dops-card-footer">{ this.props.children }</div>;
}
}
class Card extends React.Component {
static propTypes = {
meta: PropTypes.any,
icon: PropTypes.string,
iconLabel: PropTypes.any,
iconColor: PropTypes.string,
style: PropTypes.object,
className: PropTypes.string,
href: PropTypes.string,
onClick: PropTypes.func,
title: PropTypes.string,
tagName: PropTypes.string,
target: PropTypes.string,
compact: PropTypes.bool,
children: PropTypes.node,
};
static defaultProps = {
iconColor: '#787878',
className: '',
tagName: 'div',
onClick: () => {},
};
render() {
const className = classnames( 'dops-card', this.props.className, {
'is-card-link': !! this.props.href,
'is-compact': this.props.compact,
} );
const omitProps = [ 'compact', 'tagName', 'meta', 'iconColor' ];
let linkIndicator;
if ( this.props.href ) {
linkIndicator = (
<Gridicon
className="dops-card__link-indicator"
icon={ this.props.target ? 'external' : 'chevron-right' }
/>
);
} else {
omitProps.push( 'href', 'target' );
}
let fancyTitle;
if ( this.props.title ) {
fancyTitle = (
<h2 className="dops-card-title">
{ this.props.title }
{ this.props.meta && <span className="dops-card-meta">{ this.props.meta }</span> }
{ ( this.props.icon || this.props.iconLabel ) && this._renderIcon() }
</h2>
);
}
return React.createElement(
this.props.href ? 'a' : this.props.tagName,
assign( omit( this.props, omitProps ), { className } ),
linkIndicator,
fancyTitle,
this.props.children
);
}
_renderIcon = () => {
return (
<span className="dops-card-icon" style={ { color: this.props.iconColor } }>
{ this.props.icon && (
<Gridicon icon={ this.props.icon } style={ { backgroundColor: this.props.iconColor } } />
) }
{ this.props.iconLabel }
</span>
);
};
}
Card.Section = CardSection;
Card.Footer = CardFooter;
export default Card;