RocketChat/Rocket.Chat

View on GitHub
packages/fuselage-ui-kit/src/elements/ChannelsSelectElement/hooks/useChannelsData.ts

Summary

Maintainability
A
2 hrs
Test Coverage
import { useEndpoint } from '@rocket.chat/ui-contexts';
import { useQuery } from '@tanstack/react-query';

type useChannelsDataProps = {
  filter: string;
};

const generateQuery = (
  term = ''
): {
  selector: string;
} => ({ selector: JSON.stringify({ name: term }) });

export const useChannelsData = ({ filter }: useChannelsDataProps) => {
  const getRooms = useEndpoint(
    'GET',
    '/v1/rooms.autocomplete.channelAndPrivate'
  );

  const { data } = useQuery(
    ['rooms.autocomplete.channelAndPrivate', filter],
    async () => {
      const channels = await getRooms(generateQuery(filter));

      const options = channels.items.map(
        ({ fname, name, _id, avatarETag, t }) => ({
          value: _id,
          label: { name: name || fname, avatarETag, type: t },
        })
      );

      return options || [];
    },
    {
      keepPreviousData: true,
    }
  );

  return data;
};