Skip to content

Commit f0b57f3

Browse files
committed
✨ Add support to infer types from itemGroups for Select
1 parent c746064 commit f0b57f3

File tree

4 files changed

+29
-8
lines changed

4 files changed

+29
-8
lines changed

src/components/Select/Select.astro

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,24 @@ const {
2727
...rest
2828
} = Astro.props
2929
30-
const inputRestProps = Object.fromEntries(
31-
Object.entries(rest).filter(([key]) => key.includes('data'))
32-
)
33-
3430
const classes = classNames([
3531
styles.select,
3632
disabled && styles.disabled,
3733
className
3834
])
35+
36+
const inferredValue = rest.itemGroups.map(group => group.items)
37+
.flat()
38+
.find(item => item.value === value)?.name
39+
40+
const inputRestProps = Object.fromEntries(
41+
Object.entries(rest).filter(([key]) => key.includes('data'))
42+
)
3943
---
4044

4145
<Input
4246
type="text"
43-
value={value}
47+
value={(value && inferredValue) ? inferredValue : value}
4448
readonly={true}
4549
disabled={disabled}
4650
placeholder={placeholder}

src/components/Select/Select.svelte

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
1717
import styles from './select.module.scss'
1818
19-
import type { ListEventType } from '../List/list'
19+
import type { ListEventType, ListProps } from '../List/list'
2020
2121
export let name: SvelteSelectProps['name'] = ''
2222
export let value: SvelteSelectProps['value'] = ''
@@ -42,6 +42,11 @@
4242
styles.popover
4343
])
4444
45+
const inferredValue = $$restProps.itemGroups
46+
.map((group: ListProps['itemGroups'][0]) => group.items)
47+
.flat()
48+
.find((item: ListProps['itemGroups'][0]['items'][0]) => item.value === value)?.name
49+
4550
const inputRestProps = Object.fromEntries(
4651
Object.entries($$restProps).filter(([key]) => key.includes('data'))
4752
)
@@ -110,7 +115,7 @@
110115

111116
<Input
112117
type="text"
113-
value={value || null}
118+
value={(value && inferredValue) ? inferredValue : value}
114119
readonly={true}
115120
disabled={disabled}
116121
placeholder={placeholder || null}

src/components/Select/Select.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@ const Select = ({
3030
onChange,
3131
...rest
3232
}: ReactSelectProps) => {
33-
const [val, setValue] = useState(value)
33+
const inferredValue = rest.itemGroups.map(group => group.items)
34+
.flat()
35+
.find(item => item.value === value)?.name
36+
37+
const [val, setValue] = useState((value && inferredValue) ? inferredValue : value)
3438

3539
const classes = classNames([
3640
styles.select,

src/pages/components/select.astro

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,14 @@ const sections = getSections({
8181
/>
8282
</ComponentWrapper>
8383

84+
<ComponentWrapper title="With inferred value (from itemGroups)">
85+
<section.component
86+
name="with-inferred-value"
87+
value="new"
88+
itemGroups={listWithStates}
89+
/>
90+
</ComponentWrapper>
91+
8492
<ComponentWrapper title="Disabled">
8593
<section.component
8694
name="disabled"

0 commit comments

Comments
 (0)