Created
April 6, 2020 13:24
-
-
Save parvezmrobin/820171e45135ab9ac079f9d289bb7261 to your computer and use it in GitHub Desktop.
Revisions
-
parvezmrobin created this gist
Apr 6, 2020 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,53 @@ /** * Parvez M Robin * [email protected] * Date: Apr 04, 2019 */ import React from 'react'; import CreatableSelect from 'react-select/creatable'; import PropTypes from 'prop-types'; function TagControl(props) { const { isValid, options, onChange, value, } = props; let className = 'form-control tag '; if (isValid === true) { className += 'is-valid'; } else if (isValid === false) { className += 'is-invalid'; } const handleChange = (newValue) => { const mappedValue = (newValue || []).map((obj) => obj.value); onChange({ target: { value: mappedValue } }); // simulating e.target.value }; const mappedOptions = options.map((option) => ({ label: option, value: option })); return ( <CreatableSelect className={className} classNamePrefix="tag" placeholder="Insert tags for easy searching" formatCreateLabel={(lbl) => lbl} isClearable isMulti closeMenuOnSelect={false} menuPlacement="auto" hideSelectedOptions onChange={handleChange} options={mappedOptions} value={value.map((val) => ({ label: val, value: val }))} /> ); } TagControl.propTypes = { isValid: PropTypes.bool.isRequired, onChange: PropTypes.func.isRequired, options: PropTypes.arrayOf(PropTypes.string).isRequired, value: PropTypes.arrayOf(PropTypes.string).isRequired, }; export default TagControl; This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,48 @@ /** * Parvez M Robin * [email protected] * Apr 04, 2020 */ /* eslint-env jest */ import React from 'react'; import { render, unmountComponentAtNode } from 'react-dom'; import { act } from 'react-dom/test-utils'; import pretty from 'pretty'; import { fireEvent } from '@testing-library/react'; import '@testing-library/jest-dom'; import TagControl from './TagControl'; /** @type {HTMLElement} */ let container = null; beforeEach(() => { // setup a DOM element as a render target container = document.createElement('div'); document.body.appendChild(container); }); afterEach(() => { // cleanup on exiting unmountComponentAtNode(container); container.remove(); container = null; }); it('should open TagControl on click', () => { act(() => { render(<TagControl value={[]} isValid options={['1', '2', '3']} onChange={() => { }} />, container); }); container.querySelector('input').dispatchEvent(new MouseEvent('click', { bubbles: true })); console.log(pretty(container.innerHTML)); // expected contain an `ul` fireEvent.click(container.querySelector('input')); console.log(pretty(container.innerHTML)); // expected contain an `ul` });