import React from 'react';
import { STATUSES, Status } from './constants';
import { Jobs } from './Jobs';
import { AppQueue, AppJob } from 'types';
type MenuItemProps = {
status: Status;
count: number;
onClick: () => void;
selected: boolean;
};
const MenuItem = ({ status, count, onClick, selected }: MenuItemProps) => (
{status !== 'latest' && {count}} {status}
);
const ACTIONABLE_STATUSES = ['failed', 'delayed', 'completed'];
interface QueueActionProps {
queue: QueueProps['queue'];
retryAll: QueueProps['retryAll'];
cleanAllFailed: QueueProps['cleanAllFailed'];
cleanAllDelayed: QueueProps['cleanAllDelayed'];
cleanAllCompleted: QueueProps['cleanAllCompleted'];
status: Status;
}
const isStatusActionable = (status: Status): boolean =>
ACTIONABLE_STATUSES.includes(status);
const QueueActions = ({
status,
retryAll,
cleanAllFailed,
cleanAllDelayed,
cleanAllCompleted,
}: QueueActionProps) => {
if (!isStatusActionable(status)) {
return ;
}
return (
{status === 'failed' && (
)}
{status === 'delayed' && (
)}
{status === 'completed' && (
)}
);
};
interface QueueProps {
queue: AppQueue;
selectedStatus: Status;
selectStatus: (statuses: Record) => void;
cleanAllDelayed: () => Promise;
cleanAllFailed: () => Promise;
cleanAllCompleted: () => Promise;
retryAll: () => Promise;
retryJob: (job: AppJob) => () => Promise;
promoteJob: (job: AppJob) => () => Promise;
}
// We need to extend so babel doesn't think it's JSX
const keysOf = (target: Target) =>
Object.keys(target) as (keyof Target)[];
export const Queue = ({
cleanAllDelayed,
cleanAllFailed,
cleanAllCompleted,
queue,
retryAll,
retryJob,
promoteJob,
selectedStatus,
selectStatus,
}: QueueProps) => (
{queue.name}
{keysOf(STATUSES).map(status => (
{selectedStatus && (
<>
>
)}
);