RocketChat/Rocket.Chat

View on GitHub
apps/meteor/client/views/admin/integrations/IntegrationsPage.tsx

Summary

Maintainability
B
6 hrs
Test Coverage
import { Button, ButtonGroup, Tabs } from '@rocket.chat/fuselage';
import { useRouteParameter, useRouter, useTranslation } from '@rocket.chat/ui-contexts';
import type { ReactElement } from 'react';
import React from 'react';

import { Page, PageHeader, PageContent } from '../../../components/Page';
import IntegrationsTable from './IntegrationsTable';
import NewBot from './NewBot';
import NewZapier from './NewZapier';

const IntegrationsPage = (): ReactElement => {
    const t = useTranslation();
    const router = useRouter();
    const context = useRouteParameter('context');

    const showTable = !['zapier', 'bots'].includes(context || '');

    return (
        <Page flexDirection='column'>
            <PageHeader title={t('Integrations')}>
                <ButtonGroup>
                    <Button
                        primary
                        onClick={() => router.navigate(`/admin/integrations/new/${context === 'webhook-outgoing' ? 'outgoing' : 'incoming'}`)}
                    >
                        {t('New')}
                    </Button>
                </ButtonGroup>
            </PageHeader>
            <Tabs>
                <Tabs.Item selected={!context} onClick={() => router.navigate('/admin/integrations')}>
                    {t('All')}
                </Tabs.Item>
                <Tabs.Item selected={context === 'webhook-incoming'} onClick={() => router.navigate('/admin/integrations/webhook-incoming')}>
                    {t('Incoming')}
                </Tabs.Item>
                <Tabs.Item selected={context === 'webhook-outgoing'} onClick={() => router.navigate('/admin/integrations/webhook-outgoing')}>
                    {t('Outgoing')}
                </Tabs.Item>
                <Tabs.Item selected={context === 'zapier'} onClick={() => router.navigate('/admin/integrations/zapier')}>
                    {t('Zapier')}
                </Tabs.Item>
                <Tabs.Item selected={context === 'bots'} onClick={() => router.navigate('/admin/integrations/bots')}>
                    {t('Bots')}
                </Tabs.Item>
            </Tabs>
            <PageContent>
                {context === 'zapier' && <NewZapier />}
                {context === 'bots' && <NewBot />}
                {showTable && <IntegrationsTable type={context} />}
            </PageContent>
        </Page>
    );
};

export default IntegrationsPage;