Skip to content

Commit e40bb35

Browse files
committed
✨ Allow Select components to keep their original values
1 parent 0e79854 commit e40bb35

File tree

4 files changed

+35
-17
lines changed

4 files changed

+35
-17
lines changed

src/components/Select/Select.astro

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@ const {
2121
label,
2222
subText,
2323
disabled,
24-
className,
2524
position,
25+
updateValue = true,
26+
className,
2627
...rest
2728
} = Astro.props
2829
@@ -42,6 +43,7 @@ const classes = classNames([
4243
label={label}
4344
subText={subText}
4445
data-id={`w-select-${name}`}
46+
data-no-update={!updateValue ? 'true' : undefined}
4547
data-position={position}
4648
labelClassName={classes}
4749
>
@@ -125,12 +127,13 @@ const classes = classNames([
125127

126128
closePopover(`[data-id="${popoverId}"]`)
127129

128-
selectElement.value = name
130+
if (!selectElement.dataset.noUpdate) {
131+
selectElement.value = name
132+
}
129133

130134
dispatch('selectOnChange', {
131-
select: selectName,
132-
selectElement,
133-
...payload
135+
...payload,
136+
select: selectName
134137
})
135138
})
136139
</script>

src/components/Select/Select.svelte

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,17 @@
1616
1717
import styles from './select.module.scss'
1818
19+
import type { ListEventType } from '../List/list'
20+
1921
export let name: SvelteSelectProps['name'] = ''
2022
export let value: SvelteSelectProps['value'] = ''
2123
export let placeholder: SvelteSelectProps['placeholder'] = ''
2224
export let label: SvelteSelectProps['label'] = ''
2325
export let subText: SvelteSelectProps['subText'] = ''
2426
export let disabled: SvelteSelectProps['disabled'] = false
25-
export let className: SvelteSelectProps['className'] = ''
27+
export let updateValue: SvelteSelectProps['updateValue'] = true
2628
export let position: SvelteSelectProps['position'] = 'bottom'
29+
export let className: SvelteSelectProps['className'] = ''
2730
export let onChange: SvelteSelectProps['onChange'] = () => {}
2831
2932
let popoverInstance: any
@@ -39,14 +42,16 @@
3942
styles.popover
4043
])
4144
42-
const select = (payload: any) => {
45+
const select = (event: ListEventType) => {
4346
closePopover(`.w-options-${name}`)
4447
45-
value = payload.name
48+
if (updateValue) {
49+
value = event.name
50+
}
4651
4752
onChange?.({
48-
select: name,
49-
...payload
53+
...event,
54+
select: name
5055
})
5156
}
5257

src/components/Select/Select.tsx

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,18 @@ import ArrowDown from '../../icons/arrow-down.svg?raw'
1515

1616
import styles from './select.module.scss'
1717

18+
import type { ListEventType } from '../List/list'
19+
1820
const Select = ({
1921
name,
2022
value,
2123
placeholder,
2224
label,
2325
subText,
2426
disabled,
25-
className,
27+
updateValue = true,
2628
position = 'bottom',
29+
className,
2730
onChange,
2831
...rest
2932
}: ReactSelectProps) => {
@@ -41,14 +44,16 @@ const Select = ({
4144

4245
let popoverInstance: any
4346

44-
const select = (payload: any) => {
47+
const select = (event: ListEventType) => {
4548
closePopover(`.w-options-${name}`)
4649

47-
setValue(payload.name)
50+
if (updateValue) {
51+
setValue(event.name)
52+
}
4853

4954
onChange?.({
50-
select: name,
51-
...payload
55+
...event,
56+
select: name
5257
})
5358
}
5459

src/components/Select/select.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,25 @@ import type { PopoverPosition } from '../../utils/popover'
22

33
import type { ListEventType, ListProps } from '../List/list'
44

5+
export type SelectEventType = {
6+
select: string
7+
} & ListEventType
8+
59
export type SelectProps = {
610
name: string
711
value?: string
812
placeholder?: string
913
label?: string
1014
subText?: string
1115
disabled?: boolean
16+
updateValue?: boolean
1217
position?: PopoverPosition | 'modal'
1318
} & ListProps
1419

1520
export type SvelteSelectProps = {
16-
onChange?: (event: ListEventType & { select: string }) => void
21+
onChange?: (event: SelectEventType) => void
1722
} & SelectProps
1823

1924
export type ReactSelectProps = {
20-
onChange?: (event: ListEventType & { select: string }) => void
25+
onChange?: (event: SelectEventType) => void
2126
} & SelectProps

0 commit comments

Comments
 (0)