From ac1479c46e8fc5ffa3b79b5512c4aa47e0b77608 Mon Sep 17 00:00:00 2001 From: Dylan Moberg Date: Tue, 15 Jan 2019 18:35:24 -0800 Subject: [PATCH] finish Combobox - MegaMenu classnames --- src/ComboboxInput/ComboboxInput.js | 77 +++++--- src/DatePicker/DatePicker.js | 32 +++- src/Dropdown/Dropdown.js | 12 +- src/Forms/Forms.js | 95 ++++++++-- src/Forms/__snapshots__/Forms.test.js.snap | 2 +- src/Icon/Icon.js | 19 +- src/Identifier/Identifier.js | 37 +++- src/Image/Image.js | 13 +- src/InlineHelp/InlineHelp.js | 15 +- src/InputGroup/InputGroup.js | 84 +++++++-- src/ListGroup/ListGroup.js | 20 ++- src/LocalizationEditor/LocalizationEditor.js | 178 +++++++++++-------- src/MegaMenu/MegaMenu.js | 71 +++++--- 13 files changed, 466 insertions(+), 189 deletions(-) diff --git a/src/ComboboxInput/ComboboxInput.js b/src/ComboboxInput/ComboboxInput.js index 96b985acf..959ec2a79 100644 --- a/src/ComboboxInput/ComboboxInput.js +++ b/src/ComboboxInput/ComboboxInput.js @@ -1,43 +1,62 @@ import React from 'react'; import PropTypes from 'prop-types'; +import classnames from 'classnames'; import { Popover } from '../Popover/Popover'; // ------------------------------------------- Combobox Input ------------------------------------------ export const ComboboxInput = ({ placeholder, menu, compact, className, ...props }) => { - return ( -
- -
- - -
-
+ const comboboxInputClasses = classnames( + 'fd-combobox-input', + className + ); + + const popoverClasses = classnames( + 'fd-input-group', + 'fd-input-group--after', + { + 'fd-input-group--compact': compact + } + ); + + const popoverInputClasses = classnames( + 'fd-input', + { + 'fd-input--compact': compact } - body={menu} /> - - ); + ); + + return ( +
+ +
+ + +
+
+ } + body={menu} /> + + ); }; ComboboxInput.propTypes = { - menu: PropTypes.object.isRequired, - className: PropTypes.string, - compact: PropTypes.bool, - placeholder: PropTypes.string + menu: PropTypes.object.isRequired, + className: PropTypes.string, + compact: PropTypes.bool, + placeholder: PropTypes.string }; ComboboxInput.defaultTypes = { - compact: false, - placeholder: '' + compact: false, + placeholder: '' }; diff --git a/src/DatePicker/DatePicker.js b/src/DatePicker/DatePicker.js index df1facbfb..2515a3237 100644 --- a/src/DatePicker/DatePicker.js +++ b/src/DatePicker/DatePicker.js @@ -1,5 +1,6 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; +import classnames from 'classnames'; import { Calendar } from '../Calendar/Calendar'; export class DatePicker extends Component { @@ -367,20 +368,37 @@ export class DatePicker extends Component { render() { const { enableRangeSelection, disableWeekends, disableBeforeDate, disableAfterDate, disableWeekday, disablePastDates, disableFutureDates, blockedDates, disabledDates, compact, className, ...props } = this.props; + + const datePickerClasses = classnames( + 'fd-date-picker', + className + ); + + const datePickerInputGroupClasses = classnames( + 'fd-input-group', + 'fd-input-group--after', + { + 'fd-input-group--compact': compact + } + ); + + const datePickerInputClasses = classnames( + 'fd-input', + { + 'fd-input--compact': compact + } + ); + return (
(this.component = component)}>
+ className={datePickerInputGroupClasses}> this.openCalendar('input')} diff --git a/src/Dropdown/Dropdown.js b/src/Dropdown/Dropdown.js index 1fe661248..48181a8d2 100644 --- a/src/Dropdown/Dropdown.js +++ b/src/Dropdown/Dropdown.js @@ -1,10 +1,20 @@ import React from 'react'; import PropTypes from 'prop-types'; +import classnames from 'classnames'; export const Dropdown = props => { const { standard, children, className } = props; + + const dropdownClasses = classnames( + 'fd-dropdown', + { + 'fd-dropdown--standard': standard + }, + className + ); + return ( -
+
{children}
); diff --git a/src/Forms/Forms.js b/src/Forms/Forms.js index daa1166dd..c2f6d4710 100644 --- a/src/Forms/Forms.js +++ b/src/Forms/Forms.js @@ -1,10 +1,16 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; +import classnames from 'classnames'; // ------------------------------------------------- Form Set ----------------------------------------------- export const FormSet = ({ children, className }) => { + const formSetClasses = classnames( + 'fd-form__set', + className + ); + return ( -
+
{children}
); @@ -15,11 +21,18 @@ FormSet.propTypes = { // ------------------------------------------------- Form Item ----------------------------------------------- export const FormItem = ({ isCheck, isInline, children, className }) => { + const formItemClasses = classnames( + 'fd-form__item', + { + 'fd-form__item--inline': isInline, + 'fd-form__item--check': isCheck + }, + className + ); + return (
+ className={formItemClasses}> {children}
); @@ -32,11 +45,17 @@ FormItem.propTypes = { // ------------------------------------------------- Form Label ---------------------------------------------- export const FormLabel = ({ required, children, className, ...props }) => { + const formLabelClasses = classnames( + 'fd-form__label', + { + 'is-required': required + }, + className + ); + return ( @@ -49,11 +68,19 @@ FormLabel.propTypes = { // ------------------------------------------------- Form Message ---------------------------------------------- export const FormMessage = ({ type, children, className, ...props }) => { + const formMessageClasses = classnames( + 'fd-form__message', + { + 'fd-form__message--error': type === 'error', + 'fd-form__message--warning': type === 'warning', + 'fd-form__message--help': type === 'help' + }, + className + ); + return ( {children} @@ -66,24 +93,41 @@ FormMessage.propTypes = { // ------------------------------------------------- Form Input ---------------------------------------------- export const FormInput = ({ state, className, ...props }) => { + const formInputClasses = classnames( + 'fd-form__control', + { + 'is-normal': state === 'normal', + 'is-valid': state === 'valid', + 'is-invalid': state === 'invalid', + 'is-warning': state === 'warning', + 'is-help': state === 'help', + 'is-disabled': state === 'disabled', + 'is-readonly': state === 'readonly' + }, + className + ); + return ( ); }; FormInput.propTypes = { className: PropTypes.string, - state: PropTypes.string + state: PropTypes.oneOf(['', 'normal', 'valid', 'invalid', 'warning', 'help', 'disabled', 'readonly']) }; // ------------------------------------------------- Form Textarea ---------------------------------------------- export const FormTextarea = ({ children, className, ...props }) => { + const formTextAreaClasses = classnames( + 'fd-form__control', + className + ); + return ( @@ -95,9 +139,14 @@ FormTextarea.propTypes = { // ------------------------------------------------- Form Fieldset ---------------------------------------------- export const FormFieldset = ({ children, className, ...props }) => { + const formFieldsetClasses = classnames( + 'fd-form__set', + className + ); + return (
{children}
@@ -109,9 +158,14 @@ FormFieldset.propTypes = { // ------------------------------------------------- Form Legend ---------------------------------------------- export const FormLegend = ({ children, className, ...props }) => { + const formLegendClasses = classnames( + 'fd-form__legend', + className + ); + return ( {children} @@ -123,9 +177,14 @@ FormLegend.propTypes = { // ------------------------------------------------- Form Select ---------------------------------------------- export const FormSelect = ({ disabled, children, className, ...props }) => { + const formSelectClasses = classnames( + 'fd-form__control', + className + ); + return ( + className={inputGroupSearchClasses}> + className={inputGroupBeforeClasses}> {actions ? ( {children} @@ -130,7 +166,7 @@ export class InputGroup extends Component { {glyph ? ( ) : ( addon @@ -138,7 +174,7 @@ export class InputGroup extends Component { )} ); } else { + const inputGroupAfterClasses = classnames( + 'fd-input-group', + 'fd-input-group--after', + { + 'fd-input-group--compact': compact + } + ); + + const inputAfterClasses = classnames( + { + 'fd-input fd-input--compact': compact + } + ); + return (
+ className={inputGroupAfterClasses}> {glyph ? ( ) : ( addon diff --git a/src/ListGroup/ListGroup.js b/src/ListGroup/ListGroup.js index 2e8f2b63e..c38de718a 100644 --- a/src/ListGroup/ListGroup.js +++ b/src/ListGroup/ListGroup.js @@ -1,16 +1,27 @@ import React from 'react'; +import classnames from 'classnames'; export const ListGroup = ({ children, className, ...props }) => { + const listGroupClasses = classnames( + 'fd-list-group', + className + ); + return ( -
    +
      {children}
    ); }; export const ListGroupItem = ({ children, className, ...props }) => { + const listGroupItemClasses = classnames( + 'fd-list-group__item', + className + ); + return ( -
  • +
  • {children}
  • @@ -18,6 +29,11 @@ export const ListGroupItem = ({ children, className, ...props }) => { }; export const ListGroupItemActions = ({ children, className, ...props }) => { + const listGroupItemActionsClasses = classnames( + 'fd-list-group__action', + className + ); + return ( {children} diff --git a/src/LocalizationEditor/LocalizationEditor.js b/src/LocalizationEditor/LocalizationEditor.js index b742235f7..0ac5cbce0 100644 --- a/src/LocalizationEditor/LocalizationEditor.js +++ b/src/LocalizationEditor/LocalizationEditor.js @@ -1,94 +1,120 @@ import React from 'react'; import PropTypes from 'prop-types'; +import classnames from 'classnames'; import { Popover } from '../Popover/Popover'; // ------------------------------------------- Menu ------------------------------------------ export const LocalizationEditor = ({ control, menu, id, compact, textarea, className, ...props }) => { + const localizationEditorClasses = classnames( + 'fd-localization-editor', + className + ); - return ( -
    - - -
    - {textarea ? ( -