Sha256: c4b8bd62f277e27f2cb39351252617e3c5c5721bdff678d80ec7f8cb8ab41f45
Contents?: true
Size: 1.83 KB
Versions: 2
Compression:
Stored size: 1.83 KB
Contents
/* @flow */ import React, { useEffect, useRef, useState } from 'react' import classnames from 'classnames' import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props' import { globalProps } from '../utilities/globalProps.js' import './_inline.scss' type InlineProps = { aria?: object, className?: string, data?: object, displayKit?: React.Node, formInput?: React.Node, id?: string, } const Inline = (props: InlineProps) => { const { aria = {}, className, data = {}, displayKit, id, formInput, } = props const ariaProps = buildAriaProps(aria) const dataProps = buildDataProps(data) const classes = classnames(buildCss('pb_inline'), globalProps(props), className) const [editing, setEditing] = useState(false) const ToggleClickHandler = () => { setEditing(!editing) } useEffect(() => { if (editing) { modifiedInput.ref.current.focus() modifiedInput.ref.current.addEventListener('keydown', (e) => { if (e.key === 'Escape' || e.key === 'Enter') { setEditing(!editing) } }) } }, [editing]) const { kitType, size } = displayKit.props const textInputClassName = kitType ? (kitType.toLowerCase() + (size ? `_${size}` : '')) : '' const modifiedInput = React.cloneElement(formInput, { className: textInputClassName, onBlur: () => setEditing(!editing), ref: useRef(null), }) return ( <div {...ariaProps} {...dataProps} className={classes} id={id} > <If condition={editing}> {modifiedInput} </If> <If condition={!editing}> <div onClick={() => ToggleClickHandler()} onFocus={() => ToggleClickHandler()} tabIndex="0" > {displayKit} </div> </If> </div> ) } export default Inline
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
playbook_ui-8.2.1.pre.alpha1 | app/pb_kits/playbook/pb_inline/_inline.jsx |
playbook_ui-8.1.0.pre.alpha1 | app/pb_kits/playbook/pb_inline/_inline.jsx |