space-slack-sync/client/src/app/components/channelControls.tsx (50 lines of code) (raw):

import './channelControls.css'; import React, { Fragment } from 'react'; import Icon from "./icon"; import Spring from "./spring"; export interface ChannelControlsProps { synced: boolean; hasPermissionToStopSync: boolean; onRemoveChannelFromSync: () => void; } export default function ChannelControls(props: ChannelControlsProps) { return ( <div className="channelControlContainer"> { props.synced ? <TunnellingIconWithText text="Tunnelling" /> : <PendingIconWithText text="Pending" /> } <Spring/> { props.hasPermissionToStopSync && <div className="binIconContainer" onClick={() => props.onRemoveChannelFromSync()}> <Icon name="delete" specialIconForDarkTheme={true} /> </div> } </div> ); } export interface IconWithTextProps { text: string; } export function TunnellingIconWithText(props: IconWithTextProps) { return ( <Fragment> <Icon name="tunnelling" /> <span className="tunnellingStatusSpan">{props.text}</span> </Fragment> ); } export function PendingIconWithText(props: IconWithTextProps) { return ( <> <Icon name="pending" /> <span className="pendingStatusSpan">{props.text}</span> </> ); }