chore(admin/frontend): 🔧 Add new queue/job management components, pages with bulk actions, status tabs, search/filtering, and detailed views

This commit is contained in:
Lilith 2026-01-23 09:20:17 -08:00
parent 47c9fdaca2
commit 765a8def17
15 changed files with 39 additions and 16 deletions

View file

@ -1,4 +1,6 @@
import React, { useState } from 'react';
/** @jsxImportSource react */
import { useState } from 'react';
export interface BulkActionsBarProps {
/** Queue name (for display) */

View file

@ -1,4 +1,6 @@
import React, { useState } from 'react';
/** @jsxImportSource react */
import { useState } from 'react';
import { useJobs } from '../hooks';
import { JobDetailsModal } from './JobDetailsModal';
import type { JobDetails } from '../types';

View file

@ -1,4 +1,5 @@
import React from 'react';
/** @jsxImportSource react */
import type { JobDetails } from '../types';
export interface JobDetailPanelProps {

View file

@ -1,4 +1,6 @@
import React, { useState } from 'react';
/** @jsxImportSource react */
import { useState } from 'react';
import type { JobDetails } from '../types';
export interface JobDetailsModalProps {

View file

@ -1,4 +1,5 @@
import React from 'react';
/** @jsxImportSource react */
import type { JobState } from '../types';
type StatusWithCount = 'waiting' | 'active' | 'completed' | 'failed' | 'delayed';

View file

@ -1,4 +1,6 @@
import React, { useState } from 'react';
/** @jsxImportSource react */
import { useState } from 'react';
import { useJobs } from '../hooks';
import { JobDetailsModal } from './JobDetailsModal';
import type { JobState, JobDetails } from '../types';

View file

@ -1,4 +1,5 @@
import React from 'react';
/** @jsxImportSource react */
import type { QueueSummary, QueueMetrics } from '../types';
export interface QueueCardProps {

View file

@ -1,4 +1,6 @@
import React, { useState, useEffect, Component, type ReactNode, type ErrorInfo } from 'react';
/** @jsxImportSource react */
import { useState, useEffect, useRef, Component, type ReactNode, type ErrorInfo } from 'react';
import { useQueueMetrics, useQueueWebSocket, useQueueControl } from '../hooks';
import { QueueList } from './QueueList';
import { JobsTable } from './JobsTable';
@ -137,7 +139,7 @@ export function QueueDashboard({
// Auto-select first queue - only when queues first load and no selection exists
// Using a ref to track if initial selection has been made to prevent race conditions
const hasAutoSelected = React.useRef(false);
const hasAutoSelected = useRef(false);
useEffect(() => {
if (queues.length > 0 && !selectedQueue && !hasAutoSelected.current) {
hasAutoSelected.current = true;

View file

@ -1,4 +1,5 @@
import React from 'react';
/** @jsxImportSource react */
import type { QueueStats } from '../types';
export interface QueueGridProps {

View file

@ -1,4 +1,5 @@
import React from 'react';
/** @jsxImportSource react */
import { QueueCard } from './QueueCard';
import type { QueueSummary, QueueMetrics } from '../types';

View file

@ -1,4 +1,5 @@
import React from 'react';
/** @jsxImportSource react */
import type { QueueSummaryStats } from '../types';
export interface QueueSummaryBarProps {

View file

@ -1,4 +1,6 @@
import React, { useState, useCallback, useEffect, useRef } from 'react';
/** @jsxImportSource react */
import { useState, useCallback, useEffect, useRef } from 'react';
export interface SearchBarProps {
/** Current search value */

View file

@ -1,4 +1,5 @@
import React from 'react';
/** @jsxImportSource react */
export interface ServiceOption {
/** Value used for filtering */

View file

@ -1,4 +1,6 @@
import React, { useCallback, useMemo } from 'react';
/** @jsxImportSource react */
import { useCallback, useMemo } from 'react';
import { useNavigate } from 'react-router-dom';
import { useQueueMetrics } from '../hooks/useQueueMetrics';

View file

@ -1,4 +1,6 @@
import React, { useCallback, useMemo } from 'react';
/** @jsxImportSource react */
import { useCallback, useMemo } from 'react';
import { useParams, Link } from 'react-router-dom';
import { useQueueMetrics } from '../hooks/useQueueMetrics';