Skip to content

Commit 7ae23e8

Browse files
fix(multiselect): remove popover overflow styling issue, refactor names
1 parent 27266c2 commit 7ae23e8

File tree

1 file changed

+26
-29
lines changed

1 file changed

+26
-29
lines changed

lib/input/select/Multiselect.tsx

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -46,78 +46,75 @@ export function Multiselect(p: Multiselect2Props) {
4646
p.class,
4747
)}
4848
>
49-
<SelectedValues2 valueSignal={p.valueSignal} valueText={p.valueText} />
49+
<SelectedValues valueSignal={p.valueSignal} valueText={p.valueText} />
5050
<CorvuPopover {...buttonProps}>
51-
<div class={classArr("bg-white dark:bg-black", "max-h-dvh", "grid grid-cols-3 gap-x-2 gap-y-1")}>
52-
<OptionList2 valueSignal={p.valueSignal} getOptions={p.getOptions} valueText={p.valueText} />
51+
<div class={classArr("grid grid-cols-3 gap-x-2 gap-y-1")}>
52+
<OptionList valueSignal={p.valueSignal} getOptions={p.getOptions} valueText={p.valueText} />
5353
</div>
5454
</CorvuPopover>
5555
</div>
5656
)
5757
}
5858

59-
interface Multiselect2OptionState {
59+
interface MultiselectOptionState {
6060
option: string
61-
}
62-
63-
interface Multiselect2OptionState {
6461
valueSignal: SignalObject<string[]>
6562
valueText?: (value: string) => string
6663
}
6764

68-
function SelectedValues2(p: { valueSignal: SignalObject<string[]>; valueText?: (value: string) => string }) {
65+
function SelectedValues(p: { valueSignal: SignalObject<string[]>; valueText?: (value: string) => string }) {
6966
return (
7067
<div class={"flex flex-wrap gap-1"}>
71-
<Key each={p.valueSignal.get()} by={(item) => item} fallback={<NoItems2 />}>
72-
{(item) => <SelectedValue2 option={item()} valueSignal={p.valueSignal} valueText={p.valueText} />}
68+
<Key each={p.valueSignal.get()} by={(item) => item} fallback={<NoItems />}>
69+
{(item) => <SelectedValue option={item()} valueSignal={p.valueSignal} valueText={p.valueText} />}
7370
</Key>
7471
</div>
7572
)
7673
}
7774

78-
function SelectedValue2(p: Multiselect2OptionState) {
75+
function SelectedValue(p: MultiselectOptionState) {
7976
const label = () => (p.valueText ? p.valueText(p.option) : p.option)
8077
return (
8178
<ButtonIcon
8279
variant={buttonVariant.outline}
8380
iconRight={mdiClose}
8481
class={"text-sm px-2 py-1"}
8582
data-value={p.option}
86-
onMouseDown={(e) => optionRemove2(p)}
87-
onClick={(e) => optionRemove2(p)}
83+
onMouseDown={(e) => optionRemove(p)}
84+
onClick={(e) => optionRemove(p)}
8885
title={ct1(t4multiselect.Remove_x, label())}
8986
>
9087
{label()}
9188
</ButtonIcon>
9289
)
9390
}
9491

95-
function OptionList2(p: {
92+
function OptionList(p: {
9693
valueSignal: SignalObject<string[]>
9794
getOptions: Accessor<string[]>
9895
valueText?: (value: string) => string
9996
}) {
10097
return (
10198
<>
102-
<Key each={p.getOptions()} by={(item) => item} fallback={<NoItems2 />}>
103-
{(item) => <ListOption2 option={item()} valueSignal={p.valueSignal} valueText={p.valueText} />}
99+
<Key each={p.getOptions()} by={(item) => item} fallback={<NoItems />}>
100+
{(item) => <ListOption option={item()} valueSignal={p.valueSignal} valueText={p.valueText} />}
104101
</Key>
105102
</>
106103
)
107104
}
108105

109-
function ListOption2(p: Multiselect2OptionState) {
106+
function ListOption(p: MultiselectOptionState) {
110107
const label = () => (p.valueText ? p.valueText(p.option) : p.option)
111108
return (
112109
<>
113110
<ButtonIcon
114111
type="button"
115112
role="checkbox"
116-
aria-checked={optionIsSelected2(p)}
117-
data-state={optionIsSelected2(p)}
118-
iconRight={optionIsSelected2(p) ? mdiCheck : undefined}
113+
aria-checked={optionIsSelected(p)}
114+
data-state={optionIsSelected(p)}
115+
iconRight={optionIsSelected(p) ? mdiCheck : undefined}
119116
onClick={(e) => {
120-
toggleOption2(p)
117+
toggleOption(p)
121118
}}
122119
variant={buttonVariant.ghost}
123120
class={"justify-start"}
@@ -128,30 +125,30 @@ function ListOption2(p: Multiselect2OptionState) {
128125
)
129126
}
130127

131-
function toggleOption2(p: Multiselect2OptionState) {
132-
const hasOption = optionIsSelected2(p)
128+
function toggleOption(p: MultiselectOptionState) {
129+
const hasOption = optionIsSelected(p)
133130
if (hasOption) {
134-
return optionRemove2(p)
131+
return optionRemove(p)
135132
}
136-
return optionAdd2(p)
133+
return optionAdd(p)
137134
}
138135

139-
function optionRemove2(p: Multiselect2OptionState) {
136+
function optionRemove(p: MultiselectOptionState) {
140137
const newValues = p.valueSignal.get().filter((v) => v !== p.option)
141138
p.valueSignal.set(newValues)
142139
}
143140

144-
function optionAdd2(p: Multiselect2OptionState) {
141+
function optionAdd(p: MultiselectOptionState) {
145142
const newValues = [...p.valueSignal.get(), p.option]
146143
newValues.sort((a, b) => a.localeCompare(b))
147144
p.valueSignal.set(newValues)
148145
}
149146

150-
function optionIsSelected2(p: Multiselect2OptionState) {
147+
function optionIsSelected(p: MultiselectOptionState) {
151148
return p.valueSignal.get().includes(p.option)
152149
}
153150

154-
function NoItems2(p: MayHaveClass = {}) {
151+
function NoItems(p: MayHaveClass = {}) {
155152
return (
156153
<div
157154
class={classMerge(

0 commit comments

Comments
 (0)