Skip to content

Commit 4a9a229

Browse files
committed
fix(resource): keep options aside grouped with filter/sort without a search bar
Group aside + the filter/sort cluster in one ml-auto right-aligned container instead of relying on the search's flex-1 to anchor them. Without this, an options bar with no search (the embedded mothership table editor) split aside to the far left and filter/sort to the far right via justify-between.
1 parent 23ad1f3 commit 4a9a229

1 file changed

Lines changed: 60 additions & 56 deletions

File tree

  • apps/sim/app/workspace/[workspaceId]/components/resource/components/resource-options

apps/sim/app/workspace/[workspaceId]/components/resource/components/resource-options/resource-options.tsx

Lines changed: 60 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -114,63 +114,67 @@ export const ResourceOptions = memo(function ResourceOptions({
114114

115115
return (
116116
<div className={cn('border-[var(--border)] border-b py-2.5', search ? 'px-6' : 'px-4')}>
117-
<div className='flex items-center justify-between'>
117+
<div className='flex items-center'>
118118
{search && <SearchSection search={search} />}
119-
{aside && <div className='flex shrink-0 items-center gap-1.5'>{aside}</div>}
120-
<div className='flex items-center'>
121-
{filterTags?.map((tag) => (
122-
<Chip key={tag.label} rightIcon={X} onClick={tag.onRemove}>
123-
{tag.label}
124-
</Chip>
125-
))}
126-
{isToggleFilter && filter.mode === 'toggle' ? (
127-
<Chip active={filter.active} leftIcon={ListFilter} onClick={filter.onToggle}>
128-
Filter
129-
</Chip>
130-
) : popoverFilter ? (
131-
<PopoverPrimitive.Root
132-
open={openMenu === 'filter'}
133-
onOpenChange={(open) =>
134-
setOpenMenu((current) => (open ? 'filter' : current === 'filter' ? null : current))
135-
}
136-
>
137-
<PopoverPrimitive.Anchor asChild>
138-
<div className='flex items-center'>
139-
<PopoverPrimitive.Trigger asChild>
140-
<Chip active={popoverFilter.active} leftIcon={ListFilter}>
141-
Filter
142-
</Chip>
143-
</PopoverPrimitive.Trigger>
144-
{sort && (
145-
<SortDropdown
146-
config={sort}
147-
open={openMenu === 'sort'}
148-
onOpenChange={(open) =>
149-
setOpenMenu((current) =>
150-
open ? 'sort' : current === 'sort' ? null : current
151-
)
152-
}
153-
/>
154-
)}
155-
</div>
156-
</PopoverPrimitive.Anchor>
157-
<PopoverPrimitive.Portal>
158-
<PopoverPrimitive.Content
159-
align='end'
160-
alignOffset={RESOURCE_MENU_EDGE_OFFSET}
161-
collisionPadding={6}
162-
sideOffset={6}
163-
className={cn(
164-
POPOVER_ANIMATION_CLASSES,
165-
'z-50 w-fit origin-[--radix-popover-content-transform-origin] rounded-xl border border-[var(--border)] bg-[var(--bg)] shadow-sm'
166-
)}
167-
>
168-
{popoverFilter.content}
169-
</PopoverPrimitive.Content>
170-
</PopoverPrimitive.Portal>
171-
</PopoverPrimitive.Root>
172-
) : null}
173-
{sort && (isToggleFilter || !popoverFilter) && <SortDropdown config={sort} />}
119+
<div className='ml-auto flex shrink-0 items-center gap-1.5'>
120+
{aside}
121+
<div className='flex items-center'>
122+
{filterTags?.map((tag) => (
123+
<Chip key={tag.label} rightIcon={X} onClick={tag.onRemove}>
124+
{tag.label}
125+
</Chip>
126+
))}
127+
{isToggleFilter && filter.mode === 'toggle' ? (
128+
<Chip active={filter.active} leftIcon={ListFilter} onClick={filter.onToggle}>
129+
Filter
130+
</Chip>
131+
) : popoverFilter ? (
132+
<PopoverPrimitive.Root
133+
open={openMenu === 'filter'}
134+
onOpenChange={(open) =>
135+
setOpenMenu((current) =>
136+
open ? 'filter' : current === 'filter' ? null : current
137+
)
138+
}
139+
>
140+
<PopoverPrimitive.Anchor asChild>
141+
<div className='flex items-center'>
142+
<PopoverPrimitive.Trigger asChild>
143+
<Chip active={popoverFilter.active} leftIcon={ListFilter}>
144+
Filter
145+
</Chip>
146+
</PopoverPrimitive.Trigger>
147+
{sort && (
148+
<SortDropdown
149+
config={sort}
150+
open={openMenu === 'sort'}
151+
onOpenChange={(open) =>
152+
setOpenMenu((current) =>
153+
open ? 'sort' : current === 'sort' ? null : current
154+
)
155+
}
156+
/>
157+
)}
158+
</div>
159+
</PopoverPrimitive.Anchor>
160+
<PopoverPrimitive.Portal>
161+
<PopoverPrimitive.Content
162+
align='end'
163+
alignOffset={RESOURCE_MENU_EDGE_OFFSET}
164+
collisionPadding={6}
165+
sideOffset={6}
166+
className={cn(
167+
POPOVER_ANIMATION_CLASSES,
168+
'z-50 w-fit origin-[--radix-popover-content-transform-origin] rounded-xl border border-[var(--border)] bg-[var(--bg)] shadow-sm'
169+
)}
170+
>
171+
{popoverFilter.content}
172+
</PopoverPrimitive.Content>
173+
</PopoverPrimitive.Portal>
174+
</PopoverPrimitive.Root>
175+
) : null}
176+
{sort && (isToggleFilter || !popoverFilter) && <SortDropdown config={sort} />}
177+
</div>
174178
</div>
175179
</div>
176180
</div>

0 commit comments

Comments
 (0)