'use client'; import { AddProviderButton } from '@gitroom/frontend/components/launches/add.provider.component'; import { useCallback, useEffect, useMemo, useState } from 'react'; import Image from 'next/image'; import { orderBy } from 'lodash'; import { Calendar } from '@gitroom/frontend/components/launches/calendar'; import { CalendarWeekProvider } from '@gitroom/frontend/components/launches/calendar.context'; import { Filters } from '@gitroom/frontend/components/launches/filters'; import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; import useSWR from 'swr'; import { LoadingComponent } from '@gitroom/frontend/components/layout/loading'; import clsx from 'clsx'; import { useUser } from '../layout/user.context'; import { Menu } from '@gitroom/frontend/components/launches/menu/menu'; import { GeneratorComponent } from '@gitroom/frontend/components/launches/generator/generator'; import { useRouter } from 'next/navigation'; export const LaunchesComponent = () => { const fetch = useFetch(); const router = useRouter(); const [reload, setReload] = useState(false); const load = useCallback(async (path: string) => { return (await (await fetch(path)).json()).integrations; }, []); const user = useUser(); const { isLoading, data: integrations, mutate, } = useSWR('/integrations/list', load, { fallbackData: [], }); const totalNonDisabledChannels = useMemo(() => { return ( integrations?.filter((integration: any) => !integration.disabled) ?.length || 0 ); }, [integrations]); const sortedIntegrations = useMemo(() => { return orderBy( integrations, ['type', 'disabled', 'identifier'], ['desc', 'asc', 'asc'] ); }, [integrations]); const update = useCallback(async (shouldReload: boolean) => { if (shouldReload) { setReload(true); } await mutate(); if (shouldReload) { setReload(false); } }, []); const continueIntegration = useCallback((integration: any) => async () => { router.push(`/launches?added=${integration.identifier}&continue=${integration.id}`); }, []); useEffect(() => { if (typeof window !== 'undefined' && window.opener) { window.close(); } }, []); if (isLoading || reload) { return ; } return ( Channels {sortedIntegrations.length === 0 && ( No channels )} {sortedIntegrations.map((integration) => ( {integration.inBetweenSteps && ( ! )} {integration.name} totalNonDisabledChannels && integration.disabled } canDisable={!integration.disabled} /> ))} update(true)} /> {sortedIntegrations?.length > 0 && } ); };