Skip to content

Commit e20b899

Browse files
committed
PC-115: Add clear X button to the Company input field
1 parent d554c32 commit e20b899

5 files changed

Lines changed: 42 additions & 17 deletions

File tree

app/assets/images/icons/cross.svg

Lines changed: 3 additions & 0 deletions
Loading

app/assets/stylesheets/application/input.scss

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,16 +70,21 @@ textarea {
7070
**/
7171
.pc-typeahead-customer-info {
7272
.pc-icon-reserve-place {
73-
padding-right: 26px;
74-
background-color: $white;
73+
padding-right: 60px;
7574
}
7675

77-
.pc-typeahead-toggle {
78-
width: 26px;
79-
cursor: pointer;
76+
.pc-typeahead-controls {
77+
width: 60px;
78+
}
79+
80+
.pc-typeahead-button {
81+
width: 24px;
8082
}
8183
}
8284

85+
/**
86+
*** LOGO UPLOADER ***
87+
**/
8388
.pc-logo-uploader {
8489
width: 136px;
8590
height: 117px;

app/javascript/components/shared/CustomerForm.jsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,11 @@ export const CustomerForm = () => {
151151
}
152152
}
153153

154+
const handleClearInput = () => {
155+
setCustomer(prev => ({ ...prev, company_name: '' }))
156+
setIsNextDisabled(true)
157+
}
158+
154159
return (
155160
<Form onSubmit={handleNext} className={'d-flex flex-column w-100 align-items-center'}>
156161
<div className="border rounded border-primary customer-form bg-light w-100 mb-7">
@@ -181,6 +186,7 @@ export const CustomerForm = () => {
181186
error={errors.company_name}
182187
onChange={handleCompanyChange}
183188
onInputChange={handleCompanyInputChange}
189+
onClearInput={handleClearInput}
184190
hasIcon={true}
185191
/>
186192
</Col>

app/javascript/components/shared/constants.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import logoutUrl from '../../../assets/images/icons/logout.svg'
3232
import placeholderUrl from '../../../assets/images/icons/placeholder.svg'
3333
import dropdownArrowDownUrl from '../../../assets/images/icons/arrow-down.svg'
3434
import dropdownArrowUpUrl from '../../../assets/images/icons/arrow-up.svg'
35+
import crossUrl from '../../../assets/images/icons/cross.svg'
3536

3637
export const IMAGE_ASSETS = {
3738
ICONS: {
@@ -40,6 +41,7 @@ export const IMAGE_ASSETS = {
4041
placeholder: placeholderUrl,
4142
dropdownArrowDown: dropdownArrowDownUrl,
4243
dropdownArrowUp: dropdownArrowUpUrl,
44+
cross: crossUrl,
4345
},
4446
// future asset files can be added here
4547
}

app/javascript/components/ui/PcDropdownSelect.jsx

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useEffect, useRef, useState } from 'react'
1+
import React, { useState } from 'react'
22
import { Form } from 'react-bootstrap'
33
import { Typeahead } from 'react-bootstrap-typeahead'
44
import { normalizeName } from '../utils'
@@ -16,6 +16,7 @@ export const PcDropdownSelect = ({
1616
hasIcon = false,
1717
onChange,
1818
onInputChange,
19+
onClearInput,
1920
...props
2021
}) => {
2122
const [isMenuOpen, setIsMenuOpen] = useState(false)
@@ -40,31 +41,39 @@ export const PcDropdownSelect = ({
4041
setIsMenuOpen(false)
4142
}
4243

43-
const handleChenge = (selected) => {
44+
const handleChange = (selected) => {
4445
onChange(selected)
4546

4647
if (selected.length !== 0) setIsMenuOpen(false)
4748
}
4849

4950
const handleInputChange = (t, e) => {
5051
onInputChange(t, e)
52+
5153
if (t) setIsMenuOpen(true)
5254
}
5355

5456
const handleClick = (e) => {
5557
setIsMenuOpen(true)
5658
}
5759

58-
const DropdownToggleIcon = () =>
59-
<div className="pc-typeahead-toggle position-absolute end-0 top-0 h-100"
60-
onClick={handleOpenMenu}>
61-
<div className={'d-flex justify-content-start align-items-center h-100'}>
60+
const TransparentButton = ({ children, className, ...props }) =>
61+
(<button className={`bg-transparent rounded-0 border-0 p-0 m-0 ${className}`} {...props}>
62+
{children}
63+
</button>)
64+
65+
const TypeaheadControls = () =>
66+
(<div className="pc-typeahead-controls position-absolute end-0 top-0 h-100 d-flex flex-row">
67+
<TransparentButton onClick={onClearInput} className={'pc-typeahead-button'}>
68+
<PcIcon name={'cross'} alt={'Cross'} className={'pc-icon-cross'} />
69+
</TransparentButton>
70+
<TransparentButton onClick={handleOpenMenu} className={'pc-typeahead-button'}>
6271
<PcIcon
6372
name={isMenuOpen ? 'dropdownArrowUp' : 'dropdownArrowDown'}
6473
alt={isMenuOpen ? 'Arrow pointing up' : 'Arrow pointing down'}
6574
/>
66-
</div>
67-
</div>
75+
</TransparentButton>
76+
</div>)
6877

6978
return (
7079
<Form.Group controlId={id}>
@@ -76,7 +85,7 @@ export const PcDropdownSelect = ({
7685
filterBy={handleFilterBy}
7786
allowNew
7887
newSelectionPrefix="Add new customer: "
79-
className="pc-icon-reserve-place border border-primary rounded-1"
88+
className="pc-icon-reserve-place border border-primary rounded-1 bg-white"
8089
style={{ height }}
8190
selected={selectedOption ? [selectedOption] : []}
8291
maxResults={maxResults}
@@ -85,13 +94,13 @@ export const PcDropdownSelect = ({
8594
onMenuToggle={(isOpen) => setIsMenuOpen(isOpen)}
8695
onFocus={handleFocus}
8796
onBlur={handleBlur}
88-
onChange={handleChenge}
97+
onChange={handleChange}
8998
onInputChange={handleInputChange}
90-
inputProps={{onClick: handleClick}}
99+
inputProps={{ onClick: handleClick }}
91100
{...props}
92101
/>
93102
<Form.Label className="border-label fw-bold fs-11 lh-sm px-1">{label}</Form.Label>
94-
{hasIcon && <DropdownToggleIcon />}
103+
{hasIcon && <TypeaheadControls />}
95104
</div>
96105
{error && <div className="text-danger fs-12">{error}</div>}
97106
</Form.Group>

0 commit comments

Comments
 (0)