Skip to content

Commit ca9150e

Browse files
fix(ui): queue tab list of queue items
Reverted incomplete change to how queue items are listed. In the future I think we should redo it to work like the gallery. For now, it is back the way it was in v5.
1 parent 5b187bc commit ca9150e

File tree

9 files changed

+266
-76
lines changed

9 files changed

+266
-76
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import type { ButtonProps } from '@invoke-ai/ui-library';
2+
import { Button } from '@invoke-ai/ui-library';
3+
import { useCancelAllExceptCurrentQueueItemDialog } from 'features/queue/components/CancelAllExceptCurrentQueueItemConfirmationAlertDialog';
4+
import { memo } from 'react';
5+
import { useTranslation } from 'react-i18next';
6+
import { PiXCircle } from 'react-icons/pi';
7+
8+
export const CancelAllExceptCurrentButton = memo((props: ButtonProps) => {
9+
const { t } = useTranslation();
10+
const api = useCancelAllExceptCurrentQueueItemDialog();
11+
12+
return (
13+
<Button
14+
isDisabled={api.isDisabled}
15+
isLoading={api.isLoading}
16+
aria-label={t('queue.clear')}
17+
tooltip={t('queue.cancelAllExceptCurrentTooltip')}
18+
leftIcon={<PiXCircle />}
19+
colorScheme="error"
20+
onClick={api.openDialog}
21+
{...props}
22+
>
23+
{t('queue.clear')}
24+
</Button>
25+
);
26+
});
27+
28+
CancelAllExceptCurrentButton.displayName = 'CancelAllExceptCurrentButton';

invokeai/frontend/web/src/features/queue/components/DeleteAllExceptCurrentButton.tsx

Lines changed: 0 additions & 32 deletions
This file was deleted.

invokeai/frontend/web/src/features/queue/components/QueueList/QueueItemComponent.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Badge, ButtonGroup, Collapse, Flex, IconButton, Text } from '@invoke-ai
33
import QueueStatusBadge from 'features/queue/components/common/QueueStatusBadge';
44
import { useDestinationText } from 'features/queue/components/QueueList/useDestinationText';
55
import { useOriginText } from 'features/queue/components/QueueList/useOriginText';
6-
import { useDeleteQueueItem } from 'features/queue/hooks/useDeleteQueueItem';
6+
import { useCancelQueueItem } from 'features/queue/hooks/useCancelQueueItem';
77
import { useRetryQueueItem } from 'features/queue/hooks/useRetryQueueItem';
88
import { getSecondsFromTimestamps } from 'features/queue/util/getSecondsFromTimestamps';
99
import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus';
@@ -38,13 +38,13 @@ const QueueItemComponent = ({ index, item, context }: InnerItemProps) => {
3838
const handleToggle = useCallback(() => {
3939
context.toggleQueueItem(item.item_id);
4040
}, [context, item.item_id]);
41-
const deleteQueueItem = useDeleteQueueItem();
42-
const onClickDeleteQueueItem = useCallback(
41+
const cancelQueueItem = useCancelQueueItem();
42+
const onClickCancelQueueItem = useCallback(
4343
(e: MouseEvent<HTMLButtonElement>) => {
4444
e.stopPropagation();
45-
deleteQueueItem.trigger(item.item_id);
45+
cancelQueueItem.trigger(item.item_id);
4646
},
47-
[deleteQueueItem, item.item_id]
47+
[cancelQueueItem, item.item_id]
4848
);
4949
const retryQueueItem = useRetryQueueItem();
5050
const onClickRetryQueueItem = useCallback(
@@ -135,9 +135,9 @@ const QueueItemComponent = ({ index, item, context }: InnerItemProps) => {
135135
<ButtonGroup size="xs" variant="ghost">
136136
{(!isFailed || !isRetryEnabled || isValidationRun) && (
137137
<IconButton
138-
onClick={onClickDeleteQueueItem}
138+
onClick={onClickCancelQueueItem}
139139
isDisabled={isCanceled}
140-
isLoading={deleteQueueItem.isLoading}
140+
isLoading={cancelQueueItem.isLoading}
141141
aria-label={t('queue.cancelItem')}
142142
icon={<PiXBold />}
143143
/>

invokeai/frontend/web/src/features/queue/components/QueueList/QueueItemDetail.tsx

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,30 @@ import { useDestinationText } from 'features/queue/components/QueueList/useDesti
55
import { useOriginText } from 'features/queue/components/QueueList/useOriginText';
66
import { useBatchIsCanceled } from 'features/queue/hooks/useBatchIsCanceled';
77
import { useCancelBatch } from 'features/queue/hooks/useCancelBatch';
8-
import { useDeleteQueueItem } from 'features/queue/hooks/useDeleteQueueItem';
8+
import { useCancelQueueItem } from 'features/queue/hooks/useCancelQueueItem';
99
import { useRetryQueueItem } from 'features/queue/hooks/useRetryQueueItem';
1010
import { getSecondsFromTimestamps } from 'features/queue/util/getSecondsFromTimestamps';
1111
import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus';
1212
import type { ReactNode } from 'react';
1313
import { memo, useCallback, useMemo } from 'react';
1414
import { useTranslation } from 'react-i18next';
1515
import { PiArrowCounterClockwiseBold, PiXBold } from 'react-icons/pi';
16+
import { useGetQueueItemQuery } from 'services/api/endpoints/queue';
1617
import type { S } from 'services/api/types';
1718

1819
type Props = {
1920
queueItem: S['SessionQueueItem'];
2021
};
2122

22-
const QueueItemComponent = ({ queueItem }: Props) => {
23-
const { session_id, batch_id, item_id, origin, destination } = queueItem;
23+
const QueueItemComponent = ({ queueItem: queueItemDTO }: Props) => {
24+
const { session_id, batch_id, item_id, origin, destination } = queueItemDTO;
2425
const { t } = useTranslation();
2526
const isRetryEnabled = useFeatureStatus('retryQueueItem');
2627
const isBatchCanceled = useBatchIsCanceled(batch_id);
2728
const cancelBatch = useCancelBatch();
28-
const deleteQueueItem = useDeleteQueueItem();
29+
const cancelQueueItem = useCancelQueueItem();
2930
const retryQueueItem = useRetryQueueItem();
31+
const { data: queueItem } = useGetQueueItemQuery(item_id);
3032

3133
const originText = useOriginText(origin);
3234
const destinationText = useDestinationText(destination);
@@ -57,8 +59,8 @@ const QueueItemComponent = ({ queueItem }: Props) => {
5759
}, [cancelBatch, batch_id]);
5860

5961
const onCancelQueueItem = useCallback(() => {
60-
deleteQueueItem.trigger(item_id);
61-
}, [deleteQueueItem, item_id]);
62+
cancelQueueItem.trigger(item_id);
63+
}, [cancelQueueItem, item_id]);
6264

6365
const onRetryQueueItem = useCallback(() => {
6466
retryQueueItem.trigger(item_id);
@@ -85,8 +87,8 @@ const QueueItemComponent = ({ queueItem }: Props) => {
8587
{(!isFailed || !isRetryEnabled) && (
8688
<Button
8789
onClick={onCancelQueueItem}
88-
isLoading={deleteQueueItem.isLoading}
89-
isDisabled={deleteQueueItem.isDisabled || queueItem ? isCanceled : true}
90+
isLoading={cancelQueueItem.isLoading}
91+
isDisabled={cancelQueueItem.isDisabled || queueItem ? isCanceled : true}
9092
aria-label={t('queue.cancelItem')}
9193
leftIcon={<PiXBold />}
9294
colorScheme="error"

invokeai/frontend/web/src/features/queue/components/QueueList/QueueList.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';
1313
import { useTranslation } from 'react-i18next';
1414
import type { Components, ItemContent } from 'react-virtuoso';
1515
import { Virtuoso } from 'react-virtuoso';
16-
import { useListQueueItemsQuery } from 'services/api/endpoints/queue';
16+
import { queueItemsAdapterSelectors, useListQueueItemsQuery } from 'services/api/endpoints/queue';
1717
import type { S } from 'services/api/types';
1818

1919
import QueueItemComponent from './QueueItemComponent';
@@ -70,7 +70,7 @@ const QueueList = () => {
7070
if (!listQueueItemsData) {
7171
return [];
7272
}
73-
return listQueueItemsData.items;
73+
return queueItemsAdapterSelectors.selectAll(listQueueItemsData);
7474
}, [listQueueItemsData]);
7575

7676
const handleLoadMore = useCallback(() => {

invokeai/frontend/web/src/features/queue/components/QueueTabQueueControls.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { ButtonGroup, Flex } from '@invoke-ai/ui-library';
2-
import { DeleteAllExceptCurrentButton } from 'features/queue/components/DeleteAllExceptCurrentButton';
32
import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus';
43
import { memo } from 'react';
54

5+
import { CancelAllExceptCurrentButton } from './CancelAllExceptCurrentButton';
66
import ClearModelCacheButton from './ClearModelCacheButton';
77
import PauseProcessorButton from './PauseProcessorButton';
88
import PruneQueueButton from './PruneQueueButton';
@@ -23,7 +23,7 @@ const QueueTabQueueControls = () => {
2323
)}
2424
<ButtonGroup w={28} orientation="vertical" size="sm">
2525
<PruneQueueButton />
26-
<DeleteAllExceptCurrentButton />
26+
<CancelAllExceptCurrentButton />
2727
</ButtonGroup>
2828
</Flex>
2929
<ClearModelCacheButton />

invokeai/frontend/web/src/features/queue/store/queueSlice.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export const queueSlice = createSlice({
3333
},
3434
});
3535

36-
export const { listCursorChanged, listPriorityChanged } = queueSlice.actions;
36+
export const { listCursorChanged, listPriorityChanged, listParamsReset } = queueSlice.actions;
3737

3838
const selectQueueSlice = (state: RootState) => state.queue;
3939
const createQueueSelector = <T>(selector: Selector<QueueState, T>) => createSelector(selectQueueSlice, selector);

0 commit comments

Comments
 (0)