Change styling for select button

This commit is contained in:
Nate Kelley 2025-07-14 11:50:49 -06:00
parent 90801c89c4
commit a73502b047
No known key found for this signature in database
GPG Key ID: FD90372AB8D98B4F
1 changed files with 38 additions and 12 deletions

View File

@ -17,13 +17,32 @@ import { LinkSlash, Refresh2 } from '@/components/ui/icons';
import { useMemoizedFn } from '@/hooks'; import { useMemoizedFn } from '@/hooks';
import pluralize from 'pluralize'; import pluralize from 'pluralize';
import { StatusCard } from '@/components/ui/card/StatusCard'; import { StatusCard } from '@/components/ui/card/StatusCard';
import type { GetChannelsResponse, GetIntegrationResponse } from '@buster/server-shared/slack';
export const SlackIntegrations = React.memo(() => { export const SlackIntegrations = React.memo(() => {
const { const {
data: slackIntegration, // data: slackIntegration,
isFetched: isFetchedSlackIntegration, // isFetched: isFetchedSlackIntegration,
error: slackIntegrationError // error: slackIntegrationError
} = useGetSlackIntegration(); } = useGetSlackIntegration();
const slackIntegration: GetIntegrationResponse = {
connected: true,
integration: {
id: '123',
team_name: 'Test Team',
installed_at: '2021-01-01',
team_domain: 'test-team',
last_used_at: '2021-01-01',
default_channel: {
id: '123',
name: 'Test Channel'
}
}
};
const slackIntegrationError = null;
const isFetchedSlackIntegration = true;
const isConnected = slackIntegration?.connected ?? false; const isConnected = slackIntegration?.connected ?? false;
const cards = useMemo(() => { const cards = useMemo(() => {
@ -117,6 +136,7 @@ const ConnectedSlackChannels = React.memo(() => {
isFetched: isFetchedSlackChannels, isFetched: isFetchedSlackChannels,
error: slackChannelsError error: slackChannelsError
} = useGetSlackChannels(); } = useGetSlackChannels();
const { mutate: updateSlackIntegration } = useUpdateSlackIntegration(); const { mutate: updateSlackIntegration } = useUpdateSlackIntegration();
const channels = slackChannelsData?.channels || []; const channels = slackChannelsData?.channels || [];
@ -130,6 +150,10 @@ const ConnectedSlackChannels = React.memo(() => {
})); }));
}, [channels, selectedChannelId]); }, [channels, selectedChannelId]);
const numberOfSelectedChannels = useMemo(() => {
return items.filter((item) => item.selected).length;
}, [items]);
const onSelect = useMemoizedFn((channelId: string) => { const onSelect = useMemoizedFn((channelId: string) => {
const channel = channels.find((channel) => channel.id === channelId); const channel = channels.find((channel) => channel.id === channelId);
if (!channel) return; if (!channel) return;
@ -170,18 +194,20 @@ const ConnectedSlackChannels = React.memo(() => {
)} )}
<Dropdown <Dropdown
selectType="single" selectType="multiple"
items={items} items={items}
onSelect={onSelect} onSelect={onSelect}
menuHeader="Search channels" menuHeader="Search channels"
className="w-fit min-w-40" className="w-fit min-w-40">
> <Button
<Text variant="secondary"> disabled={!isFetchedSlackChannels}
{selectedChannelId loading={showLoadingButton}
? `#${channels.find(c => c.id === selectedChannelId)?.name || 'Unknown channel'}` size={'tall'}
: 'Select a channel' variant="default">
} {numberOfSelectedChannels > 0
</Text> ? `${numberOfSelectedChannels} ${pluralize('channel', numberOfSelectedChannels)} selected`
: 'Select a channel'}
</Button>
</Dropdown> </Dropdown>
</> </>
) : ( ) : (