Skip to content

Commit e698a6f

Browse files
committed
impr: add appendTo prop to SlimSelect for flexible content positioning
!nuf
1 parent c984a1b commit e698a6f

6 files changed

Lines changed: 12 additions & 2 deletions

File tree

frontend/src/ts/components/modals/CustomGeneratorModal.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ export function CustomGeneratorModal(props: {
163163
<LabeledField label="presets">
164164
<div class="grid grid-cols-[1fr_auto] gap-2">
165165
<SlimSelect
166+
appendTo="container"
166167
options={presetOptions}
167168
selected={selectedPreset()}
168169
onChange={setSelectedPreset}

frontend/src/ts/components/modals/QuoteReportModal.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ export function QuoteReportModal(): JSXElement {
144144
children={(field) => (
145145
<LabeledField label="reason">
146146
<SlimSelect
147+
appendTo="container"
147148
options={[
148149
{ value: "Grammatical error", text: "Grammatical error" },
149150
{ value: "Duplicate quote", text: "Duplicate quote" },

frontend/src/ts/components/modals/QuoteSearchModal.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,7 @@ export function QuoteSearchModal(): JSXElement {
497497
/>
498498
<div class="grow">
499499
<SlimSelect
500+
appendTo="container"
500501
multiple
501502
options={[
502503
{ value: "0", text: "short" },

frontend/src/ts/components/modals/QuoteSubmitModal.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ export function QuoteSubmitModal(): JSXElement {
162162
children={(field) => (
163163
<LabeledField label="language">
164164
<SlimSelect
165+
appendTo="container"
165166
options={languageOptions}
166167
selected={field().state.value}
167168
onChange={(val) => field().handleChange(val ?? "")}

frontend/src/ts/components/modals/WordFilterModal.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ export function WordFilterModal(props: {
231231
<fieldset disabled={loading()} class="grid gap-4">
232232
<LabeledField label="language">
233233
<SlimSelect
234+
appendTo="container"
234235
options={languageOptions}
235236
selected={language()}
236237
onChange={setLanguage}
@@ -296,6 +297,7 @@ export function WordFilterModal(props: {
296297
<div class="grid gap-4 self-start">
297298
<LabeledField label="presets">
298299
<SlimSelect
300+
appendTo="container"
299301
options={presetOptions}
300302
selected={preset()}
301303
onChange={setPreset}
@@ -304,6 +306,7 @@ export function WordFilterModal(props: {
304306
</LabeledField>
305307
<LabeledField label="layout">
306308
<SlimSelect
309+
appendTo="container"
307310
options={layoutOptions}
308311
selected={layout()}
309312
onChange={setLayout}

frontend/src/ts/components/ui/SlimSelect.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ export type SlimSelectProps = {
3333
children?: JSX.Element;
3434
ref?: (instance: SlimSelectCore | null) => void;
3535
disabled?: boolean;
36+
appendTo?: "body" | "container";
3637
} & (
3738
| {
3839
multiple?: never;
@@ -247,7 +248,9 @@ export default function SlimSelect(props: SlimSelectProps): JSXElement {
247248
data: getDataWithAll(buildData(getOptions(), getSelected())) as Option[],
248249
settings: {
249250
...props.settings,
250-
contentLocation: containerRef,
251+
...(props.appendTo === "container" && {
252+
contentLocation: containerRef,
253+
}),
251254
},
252255
...(props.cssClasses && { cssClasses: props.cssClasses }),
253256
events: {
@@ -480,7 +483,7 @@ export default function SlimSelect(props: SlimSelectProps): JSXElement {
480483
return (
481484
<div
482485
ref={(el) => (containerRef = el)}
483-
class="relative [&>.ss-content]:top-full! [&>.ss-content]:left-0! [&>.ss-content]:w-full!"
486+
class={`relative${props.appendTo === "container" ? " [&>.ss-content]:top-full! [&>.ss-content]:left-0! [&>.ss-content]:w-full!" : ""}`}
484487
>
485488
<select ref={(el) => (selectRef = el)} multiple={props.multiple}>
486489
{props.children}

0 commit comments

Comments
 (0)