mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
import { MdCancel } from 'react-icons/md';
|
|
import { cancelProcessing } from '../../../app/socketio/actions';
|
|
import { RootState, useAppDispatch, useAppSelector } from '../../../app/store';
|
|
import IAIIconButton from '../../../common/components/IAIIconButton';
|
|
import { useHotkeys } from 'react-hotkeys-hook';
|
|
import { createSelector } from '@reduxjs/toolkit';
|
|
import { SystemState } from '../../system/systemSlice';
|
|
import _ from 'lodash';
|
|
|
|
const cancelButtonSelector = createSelector(
|
|
(state: RootState) => state.system,
|
|
(system: SystemState) => {
|
|
return {
|
|
isProcessing: system.isProcessing,
|
|
isConnected: system.isConnected,
|
|
isCancelable: system.isCancelable,
|
|
};
|
|
},
|
|
{
|
|
memoizeOptions: {
|
|
resultEqualityCheck: _.isEqual,
|
|
},
|
|
}
|
|
);
|
|
|
|
export default function CancelButton() {
|
|
const dispatch = useAppDispatch();
|
|
const { isProcessing, isConnected, isCancelable } =
|
|
useAppSelector(cancelButtonSelector);
|
|
const handleClickCancel = () => dispatch(cancelProcessing());
|
|
|
|
useHotkeys(
|
|
'shift+x',
|
|
() => {
|
|
if ((isConnected || isProcessing) && isCancelable) {
|
|
handleClickCancel();
|
|
}
|
|
},
|
|
[isConnected, isProcessing, isCancelable]
|
|
);
|
|
|
|
return (
|
|
<IAIIconButton
|
|
icon={<MdCancel />}
|
|
tooltip="Cancel"
|
|
aria-label="Cancel"
|
|
isDisabled={!isConnected || !isProcessing || !isCancelable}
|
|
onClick={handleClickCancel}
|
|
styleClass="cancel-btn"
|
|
/>
|
|
);
|
|
}
|