import React, { forwardRef, useImperativeHandle, useRef, useState } from 'react' import Dialog, { type DialogType } from '@/components/common/Dialog' import { toast } from '@/utils/tools' import Title from './Title' import List from './List' import { useI18n } from '@/lang' import { addListMusics, moveListMusics } from '@/core/list' import settingState from '@/store/setting/state' export interface SelectInfo { musicInfo: LX.Music.MusicInfo | null listId: string isMove: boolean // single: boolean } const initSelectInfo = {} // export interface MusicAddModalProps { // onRename: (listInfo: LX.List.UserListInfo) => void // onImport: (listInfo: LX.List.MyListInfo, index: number) => void // onExport: (listInfo: LX.List.MyListInfo, index: number) => void // onSync: (listInfo: LX.List.UserListInfo) => void // onRemove: (listInfo: LX.List.UserListInfo) => void // } export interface MusicAddModalType { show: (info: SelectInfo) => void } export default forwardRef((props, ref) => { const t = useI18n() const dialogRef = useRef(null) const [selectInfo, setSelectInfo] = useState(initSelectInfo as SelectInfo) useImperativeHandle(ref, () => ({ show(selectInfo) { setSelectInfo(selectInfo) requestAnimationFrame(() => { dialogRef.current?.setVisible(true) }) }, })) const handleHide = () => { requestAnimationFrame(() => { setSelectInfo({ ...selectInfo, musicInfo: null }) }) } const handleSelect = (listInfo: LX.List.MyListInfo) => { dialogRef.current?.setVisible(false) if (selectInfo.isMove) { void moveListMusics(selectInfo.listId, listInfo.id, [selectInfo.musicInfo as LX.Music.MusicInfo], settingState.setting['list.addMusicLocationType'], ).then(() => { toast(t('list_edit_action_tip_move_success')) }).catch(() => { toast(t('list_edit_action_tip_move_failed')) }) } else { void addListMusics(listInfo.id, [selectInfo.musicInfo as LX.Music.MusicInfo], settingState.setting['list.addMusicLocationType'], ).then(() => { toast(t('list_edit_action_tip_add_success')) }).catch(() => { toast(t('list_edit_action_tip_add_failed')) }) } } return ( { selectInfo.musicInfo ? (<> <List musicInfo={selectInfo.musicInfo} onPress={handleSelect} /> </>) : null } </Dialog> ) })