1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import { useCallback, useState } from 'react';
- import { DashboardPickerItem } from 'app/core/components/editors/DashboardPickerByID';
- import { PlaylistItem } from './types';
- export function usePlaylistItems(playlistItems?: PlaylistItem[]) {
- const [items, setItems] = useState<PlaylistItem[]>(playlistItems ?? []);
- const addById = useCallback(
- (dashboard?: DashboardPickerItem) => {
- if (!dashboard || items.find((item) => item.id === dashboard.id)) {
- return;
- }
- const newItem: PlaylistItem = {
- id: dashboard.id,
- title: dashboard.label as string,
- type: 'dashboard_by_id',
- value: dashboard.id.toString(10),
- order: items.length + 1,
- };
- setItems([...items, newItem]);
- },
- [items]
- );
- const addByTag = useCallback(
- (tags: string[]) => {
- const tag = tags[0];
- if (!tag || items.find((item) => item.value === tag)) {
- return;
- }
- const newItem: PlaylistItem = {
- title: tag,
- type: 'dashboard_by_tag',
- value: tag,
- order: items.length + 1,
- };
- setItems([...items, newItem]);
- },
- [items]
- );
- const movePlaylistItem = useCallback(
- (item: PlaylistItem, offset: number) => {
- const newItems = [...items];
- const currentPosition = newItems.indexOf(item);
- const newPosition = currentPosition + offset;
- if (newPosition >= 0 && newPosition < newItems.length) {
- newItems.splice(currentPosition, 1);
- newItems.splice(newPosition, 0, item);
- }
- setItems(newItems);
- },
- [items]
- );
- const moveUp = useCallback(
- (item: PlaylistItem) => {
- movePlaylistItem(item, -1);
- },
- [movePlaylistItem]
- );
- const moveDown = useCallback(
- (item: PlaylistItem) => {
- movePlaylistItem(item, 1);
- },
- [movePlaylistItem]
- );
- const deleteItem = useCallback(
- (item: PlaylistItem) => {
- setItems(items.filter((i) => i !== item));
- },
- [items]
- );
- return { items, addById, addByTag, deleteItem, moveDown, moveUp };
- }
|