feat(ui): rework queue controls

- Remove queue front button. Hold shift while clicking `Invoke` button to queue front.
- Restore queue menu actions w/ the reclaimed space.
- Simplify queue interaction hooks.
This commit is contained in:
psychedelicious
2024-09-17 19:19:21 +10:00
committed by Kent Keirsey
parent 7b9d8df1a7
commit ccbe1b233d
10 changed files with 147 additions and 120 deletions

View File

@@ -2,23 +2,28 @@ import { enqueueRequested } from 'app/store/actions';
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
import { useIsReadyToEnqueue } from 'common/hooks/useIsReadyToEnqueue';
import { selectActiveTab } from 'features/ui/store/uiSelectors';
import { useCallback, useMemo } from 'react';
import { useCallback } from 'react';
import { useEnqueueBatchMutation } from 'services/api/endpoints/queue';
export const useQueueBack = () => {
export const useInvoke = () => {
const dispatch = useAppDispatch();
const tabName = useAppSelector(selectActiveTab);
const { isReady } = useIsReadyToEnqueue();
const [_, { isLoading }] = useEnqueueBatchMutation({
fixedCacheKey: 'enqueueBatch',
});
const isDisabled = useMemo(() => !isReady, [isReady]);
const queueBack = useCallback(() => {
if (isDisabled) {
if (!isReady) {
return;
}
dispatch(enqueueRequested({ tabName, prepend: false }));
}, [dispatch, isDisabled, tabName]);
}, [dispatch, isReady, tabName]);
const queueFront = useCallback(() => {
if (!isReady) {
return;
}
dispatch(enqueueRequested({ tabName, prepend: true }));
}, [dispatch, isReady, tabName]);
return { queueBack, isLoading, isDisabled };
return { queueBack, queueFront, isLoading, isDisabled: !isReady };
};

View File

@@ -1,30 +0,0 @@
import { enqueueRequested } from 'app/store/actions';
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
import { useIsReadyToEnqueue } from 'common/hooks/useIsReadyToEnqueue';
import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus';
import { selectActiveTab } from 'features/ui/store/uiSelectors';
import { useCallback, useMemo } from 'react';
import { useEnqueueBatchMutation } from 'services/api/endpoints/queue';
export const useQueueFront = () => {
const dispatch = useAppDispatch();
const tabName = useAppSelector(selectActiveTab);
const { isReady } = useIsReadyToEnqueue();
const [_, { isLoading }] = useEnqueueBatchMutation({
fixedCacheKey: 'enqueueBatch',
});
const prependEnabled = useFeatureStatus('prependQueue');
const isDisabled = useMemo(() => {
return !isReady || !prependEnabled;
}, [isReady, prependEnabled]);
const queueFront = useCallback(() => {
if (isDisabled) {
return;
}
dispatch(enqueueRequested({ tabName, prepend: true }));
}, [dispatch, isDisabled, tabName]);
return { queueFront, isLoading, isDisabled };
};