Skip to content

Commit 698d7ff

Browse files
refactor(CheckSingle): allow passing disabled prop
1 parent f075aca commit 698d7ff

File tree

1 file changed

+18
-15
lines changed

1 file changed

+18
-15
lines changed

lib/input/check/CheckSingle.tsx

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import type { HasValueSignalString } from "~ui/utils/HasValueSignalString"
1111
import type { MayHaveValueText } from "~ui/utils/HasValueText"
1212
import type { MayHaveButtonVariant } from "~ui/utils/MayHaveButtonVariant"
1313
import type { MayHaveClass } from "~ui/utils/MayHaveClass"
14+
import type { MayHaveDisabled } from "~ui/utils/MayHaveDisabled"
1415
import type { MayHaveId } from "~ui/utils/MayHaveId"
1516
import type { MayHaveInnerClass } from "~ui/utils/MayHaveInnerClass"
1617

@@ -21,16 +22,16 @@ export interface CheckSingleProps
2122
MayHaveId,
2223
MayHaveButtonVariant,
2324
MayHaveClass,
24-
MayHaveInnerClass {
25-
// styling
25+
MayHaveInnerClass,
26+
MayHaveDisabled {
2627
optionClass?: string
2728
}
2829

2930
export function CheckSingle(p: CheckSingleProps) {
3031
return (
3132
<div
3233
id={p.id}
33-
class={classArr(
34+
class={classMerge(
3435
"group border border-input",
3536
"px-2 py-2",
3637
"ring-offset-background",
@@ -57,23 +58,14 @@ interface OptionListProps
5758
HasGetOptions,
5859
MayHaveValueText,
5960
MayHaveButtonVariant,
61+
MayHaveDisabled,
6062
MayHaveInnerClass {
6163
optionClass?: string
6264
}
6365

6466
function OptionList(p: OptionListProps) {
65-
const innerClass = () => {
66-
if (p.innerClass) return p.innerClass
67-
const optionAmount = p.getOptions().length
68-
if (optionAmount <= 0) return ""
69-
const base = " gap-x-2 gap-y-1"
70-
if (optionAmount <= 5) return `grid grid-cols-1${base}`
71-
if (optionAmount <= 9) return `grid grid-cols-2${base}`
72-
return `${classesGridCols3xl}${base}`
73-
}
74-
7567
return (
76-
<div class={innerClass()}>
68+
<div class={innerClass(p.getOptions().length, p.innerClass)}>
7769
<For each={p.getOptions()}>
7870
{(option) => (
7971
<CheckOption
@@ -82,14 +74,24 @@ function OptionList(p: OptionListProps) {
8274
valueText={p.valueText}
8375
optionClass={p.optionClass}
8476
variant={p.variant}
77+
disabled={p.disabled}
8578
/>
8679
)}
8780
</For>
8881
</div>
8982
)
9083
}
9184

92-
interface CheckOptionProps extends MayHaveButtonVariant {
85+
function innerClass(optionAmount: number, innerClass?: string): string {
86+
if (innerClass) return innerClass
87+
if (optionAmount <= 0) return ""
88+
const base = "gap-x-2 gap-y-1"
89+
if (optionAmount === 1) return classArr("grid grid-cols-1", base)
90+
if (optionAmount === 2) return classArr("grid grid-cols-2", base)
91+
return classArr(classesGridCols3xl, base)
92+
}
93+
94+
interface CheckOptionProps extends MayHaveButtonVariant, MayHaveDisabled {
9395
option: string
9496
valueSignal: SignalObject<string>
9597
valueText?: (value: string) => string
@@ -109,6 +111,7 @@ function CheckOption(p: CheckOptionProps) {
109111
onClick={() => toggleOption(p)}
110112
variant={p.variant ?? buttonVariant.filled}
111113
class={classMerge("justify-start text-left", p.optionClass)}
114+
disabled={p.disabled}
112115
>
113116
{label()}
114117
</ButtonIcon>

0 commit comments

Comments
 (0)