UNPKG

@salesforce/design-system-react

Version:

Salesforce Lightning Design System for React

97 lines (87 loc) 2.61 kB
/* Copyright (c) 2015-present, salesforce.com, inc. All rights reserved */ /* Licensed under BSD 3-Clause - see LICENSE.txt or git.io/sfdc-license */ // Implements the [Trial Bar design pattern](https://lightningdesignsystem.com/components/trial-bar/) in React. // Based on SLDS v2.4.5 import React from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import assign from 'lodash.assign'; import { TRIAL_BAR } from '../../utilities/constants'; const propTypes = { /** * Provide children of the types `<TrialBarButton />` or `<TrialBarDropdown />` to define the structure of the trial bar. * ``` * <TrialBar> * <TrialBarButton /> * <TrialBarDropdown /> * </TrialBar> * ``` */ children: PropTypes.node, /** * CSS classes to be added to the component. Uses `classNames` [API](https://github.com/JedWatson/classnames). */ className: PropTypes.oneOfType([ PropTypes.array, PropTypes.object, PropTypes.string, ]), /** * **Text labels for internationalization** * This object is merged with the default props object on every render. * * `learnMoreAfter`: Amount of time left in trial, e.g. `30` * * `learnMoreBefore`: Unit of the amount of time left, e.g. `days` * * `timeLeftUnitAfter`: String after `timeLeftUnit` */ labels: PropTypes.shape({ timeLeft: PropTypes.string, timeLeftUnit: PropTypes.string, timeLeftUnitAfter: PropTypes.string, }), /** * Renders the actions section of the trial bar. */ onRenderActions: PropTypes.func, /** * Customs styles to be applied to the component. */ style: PropTypes.object, }; const defaultProps = { labels: { timeLeftUnitAfter: 'left in trial', }, }; /** * Trial bar components are used to provide an interactive and educational prospect experience for setup. */ const TrialBar = ({ labels = defaultProps.labels, className, style, onRenderActions, children, }) => { const mergedLabels = assign({}, defaultProps.labels, labels); return ( <div className={classNames('slds-trial-header slds-grid', className)} style={style} > <div className="slds-grid">{children}</div> <div className="slds-grid slds-grid_vertical-align-center slds-col_bump-left"> <span className="slds-box slds-box_xx-small slds-theme_default"> {mergedLabels.timeLeft} </span> <span className="slds-m-horizontal_x-small"> {mergedLabels.timeLeftUnit} {` ${mergedLabels.timeLeftUnitAfter}`} </span> {onRenderActions()} </div> </div> ); }; TrialBar.displayName = TRIAL_BAR; TrialBar.propTypes = propTypes; export default TrialBar;