space-slack-sync/client/src/app/service/slackChannels.ts (42 lines of code) (raw):

import { fetchFromServer } from "./fetch"; import * as slackWorkspaces from "./slackTeams"; import { ChannelSelectOption } from "../components/select" let defaultChannelsBatch: Array<SlackChannelToPickForSync> | null = null; export interface SlackChannelToPickForSync { readonly channelNameInSlack: string; readonly slackChannelId: string; } export interface SlackChannelsToPickForSyncResponse { readonly slackChannelsToPickForSync: Array<SlackChannelToPickForSync>; } async function getSlackChannelsBatch(slackTeamId: string, query: string): Promise<SlackChannelToPickForSync[]> { const response: SlackChannelsToPickForSyncResponse = await fetchFromServer(`/api/slack-channels-to-pick-for-sync?slackTeamId=${slackTeamId}&query=${query}`); return response.slackChannelsToPickForSync; } export async function retrieveDefaultChannelBatch(slackTeamId: string, recalc: boolean) { if (defaultChannelsBatch == null || recalc) { defaultChannelsBatch = await getSlackChannelsBatch(slackTeamId, ""); } } export function getDefaultChannelsAsSelectOptions(): ChannelSelectOption[] { if (defaultChannelsBatch == null) { return []; } return defaultChannelsBatch.map((channel) => channelToSelectOption(channel)); } export const loadChannelsAsSelectOptions = (query: string, callback: (options: ChannelSelectOption[]) => void) => { const loadChannels = async () => { const slackWorkspace = slackWorkspaces.getSelectedSlackWorkspace(); let channels = slackWorkspace == null ? [] : await getSlackChannelsBatch(slackWorkspace.id, query); callback(channels.map((channel) => channelToSelectOption(channel))); }; loadChannels().catch(console.error); }; function channelToSelectOption(channel: SlackChannelToPickForSync): ChannelSelectOption { return { value: channel.slackChannelId, label: channel.channelNameInSlack, optionType: "Slack", icon: "" } }