add support for full playlist re-order (#1327)

This commit is contained in:
jeffvli
2025-12-06 17:41:10 -08:00
parent 126b5ed67d
commit 0a7029f7bc
28 changed files with 1301 additions and 59 deletions
@@ -5,13 +5,14 @@ import { RefreshButton } from '/@/renderer/features/shared/components/refresh-bu
import { ItemListKey } from '/@/shared/types/types';
interface ListRefreshButtonProps {
disabled?: boolean;
listKey: ItemListKey;
}
export const ListRefreshButton = ({ listKey }: ListRefreshButtonProps) => {
export const ListRefreshButton = ({ disabled, listKey }: ListRefreshButtonProps) => {
const handleRefresh = useCallback(() => {
eventEmitter.emit('ITEM_LIST_REFRESH', { key: listKey });
}, [listKey]);
return <RefreshButton onClick={handleRefresh} />;
return <RefreshButton disabled={disabled} onClick={handleRefresh} />;
};
@@ -18,6 +18,7 @@ import { ItemListKey } from '/@/shared/types/types';
interface ListSortByDropdownProps {
defaultSortByValue: string;
disabled?: boolean;
itemType: LibraryItem;
listKey: ItemListKey;
onChange?: (value: string) => void;
@@ -26,6 +27,7 @@ interface ListSortByDropdownProps {
export const ListSortByDropdown = ({
defaultSortByValue,
disabled,
itemType,
listKey,
onChange,
@@ -44,9 +46,15 @@ export const ListSortByDropdown = ({
};
return (
<DropdownMenu position="bottom-start">
<DropdownMenu disabled={disabled} position="bottom-start">
<DropdownMenu.Target>
{target ? target : <Button variant="subtle">{sortByLabel}</Button>}
{target ? (
target
) : (
<Button disabled={disabled} variant="subtle">
{sortByLabel}
</Button>
)}
</DropdownMenu.Target>
<DropdownMenu.Dropdown>
{FILTERS[itemType][server.type].map((f) => (
@@ -5,11 +5,13 @@ import { ItemListKey } from '/@/shared/types/types';
interface ListSortOrderToggleButtonProps {
defaultSortOrder: SortOrder;
disabled?: boolean;
listKey: ItemListKey;
}
export const ListSortOrderToggleButton = ({
defaultSortOrder,
disabled,
listKey,
}: ListSortOrderToggleButtonProps) => {
const { setSortOrder, sortOrder } = useSortOrderFilter(defaultSortOrder, listKey);
@@ -20,6 +22,10 @@ export const ListSortOrderToggleButton = ({
};
return (
<OrderToggleButton onToggle={handleToggleSortOrder} sortOrder={sortOrder as SortOrder} />
<OrderToggleButton
disabled={disabled}
onToggle={handleToggleSortOrder}
sortOrder={sortOrder as SortOrder}
/>
);
};
@@ -5,15 +5,22 @@ import { SortOrder } from '/@/shared/types/domain-types';
interface OrderToggleButtonProps {
buttonProps?: Partial<ActionIconProps>;
disabled?: boolean;
onToggle: () => void;
sortOrder: SortOrder;
}
export const OrderToggleButton = ({ buttonProps, onToggle, sortOrder }: OrderToggleButtonProps) => {
export const OrderToggleButton = ({
buttonProps,
disabled,
onToggle,
sortOrder,
}: OrderToggleButtonProps) => {
const { t } = useTranslation();
return (
<ActionIcon
disabled={disabled}
icon={sortOrder === SortOrder.ASC ? 'sortAsc' : 'sortDesc'}
iconProps={{
size: 'lg',