1e26be108S猫头猫import React, {useState} from 'react'; 2e26be108S猫头猫import useColors from '@/hooks/useColors'; 3e26be108S猫头猫import rpx from '@/utils/rpx'; 4e26be108S猫头猫import {StyleSheet, View} from 'react-native'; 5e26be108S猫头猫import ThemeText from '@/components/base/themeText'; 6e26be108S猫头猫import {ImgAsset} from '@/constants/assetsConst'; 7476c9cacS猫头猫import {TouchableOpacity} from 'react-native'; 8e26be108S猫头猫import {launchImageLibrary} from 'react-native-image-picker'; 9e26be108S猫头猫import pathConst from '@/constants/pathConst'; 10e26be108S猫头猫import Image from '@/components/base/image'; 1129fe487bS猫头猫import {copyFile, exists, unlink} from 'react-native-fs'; 12e26be108S猫头猫import MusicSheet from '@/core/musicSheet'; 1329fe487bS猫头猫import {addFileScheme, addRandomHash} from '@/utils/fileUtils'; 1429fe487bS猫头猫import Toast from '@/utils/toast'; 1575d76114S猫头猫import {hideDialog} from '../useDialog'; 16e650bfb3S猫头猫import Dialog from './base'; 17e650bfb3S猫头猫import Input from '@/components/base/input'; 18e650bfb3S猫头猫import {fontSizeConst} from '@/constants/uiConst'; 19e26be108S猫头猫 20e26be108S猫头猫interface IEditSheetDetailProps { 21e26be108S猫头猫 musicSheet: IMusic.IMusicSheetItem; 22e26be108S猫头猫} 23e26be108S猫头猫export default function EditSheetDetailDialog(props: IEditSheetDetailProps) { 24e26be108S猫头猫 const {musicSheet} = props; 25e26be108S猫头猫 const colors = useColors(); 26e26be108S猫头猫 27e26be108S猫头猫 const [coverImg, setCoverImg] = useState(musicSheet?.coverImg); 28e26be108S猫头猫 const [title, setTitle] = useState(musicSheet?.title); 29e26be108S猫头猫 30e26be108S猫头猫 // onCover 31e26be108S猫头猫 32e26be108S猫头猫 const onChangeCoverPress = async () => { 33e26be108S猫头猫 try { 34e26be108S猫头猫 const result = await launchImageLibrary({ 35e26be108S猫头猫 mediaType: 'photo', 36e26be108S猫头猫 }); 37e26be108S猫头猫 const uri = result.assets?.[0].uri; 38e26be108S猫头猫 if (!uri) { 39e26be108S猫头猫 return; 40e26be108S猫头猫 } 41e26be108S猫头猫 console.log(uri); 42e26be108S猫头猫 setCoverImg(uri); 43e26be108S猫头猫 } catch (e) { 44e26be108S猫头猫 console.log(e); 45e26be108S猫头猫 } 46e26be108S猫头猫 }; 47e26be108S猫头猫 48e26be108S猫头猫 function onTitleChange(_: string) { 49e26be108S猫头猫 setTitle(_); 50e26be108S猫头猫 } 51e26be108S猫头猫 52e26be108S猫头猫 async function onConfirm() { 53e26be108S猫头猫 // 判断是否相同 54e26be108S猫头猫 if (coverImg === musicSheet?.coverImg && title === musicSheet?.title) { 55e26be108S猫头猫 hideDialog(); 567a69a1e8S猫头猫 return; 57e26be108S猫头猫 } 58e26be108S猫头猫 59e26be108S猫头猫 let _coverImg = coverImg; 6029fe487bS猫头猫 if (_coverImg && _coverImg !== musicSheet?.coverImg) { 61e26be108S猫头猫 _coverImg = addFileScheme( 627a69a1e8S猫头猫 `${pathConst.dataPath}sheet${ 637a69a1e8S猫头猫 musicSheet.id 647a69a1e8S猫头猫 }${_coverImg.substring(_coverImg.lastIndexOf('.'))}`, 65e26be108S猫头猫 ); 6629fe487bS猫头猫 try { 6729fe487bS猫头猫 if (await exists(_coverImg)) { 6829fe487bS猫头猫 await unlink(_coverImg); 6929fe487bS猫头猫 } 70e26be108S猫头猫 await copyFile(coverImg!, _coverImg); 7129fe487bS猫头猫 } catch (e) { 7229fe487bS猫头猫 console.log(e); 7329fe487bS猫头猫 } 74e26be108S猫头猫 } 75e26be108S猫头猫 let _title = title; 7629fe487bS猫头猫 if (!_title?.length) { 77e26be108S猫头猫 _title = musicSheet.title; 78e26be108S猫头猫 } 79e26be108S猫头猫 // 更新歌单信息 80e26be108S猫头猫 MusicSheet.updateAndSaveSheet(musicSheet.id, { 81e26be108S猫头猫 basic: { 822aa88193S猫头猫 coverImg: _coverImg ? addRandomHash(_coverImg) : undefined, 83e26be108S猫头猫 title: _title, 84e26be108S猫头猫 }, 8529fe487bS猫头猫 }).then(() => { 8629fe487bS猫头猫 Toast.success('更新歌单信息成功~'); 87e26be108S猫头猫 }); 88e26be108S猫头猫 hideDialog(); 89e26be108S猫头猫 } 90e26be108S猫头猫 91e26be108S猫头猫 return ( 92e650bfb3S猫头猫 <Dialog onDismiss={hideDialog}> 93*95368653S猫头猫 <Dialog.Content> 94e26be108S猫头猫 <View style={style.row}> 95e650bfb3S猫头猫 <ThemeText>封面</ThemeText> 96e26be108S猫头猫 <TouchableOpacity 97e26be108S猫头猫 onPress={onChangeCoverPress} 98e26be108S猫头猫 onLongPress={() => { 99e26be108S猫头猫 setCoverImg(undefined); 100e26be108S猫头猫 }}> 101e26be108S猫头猫 <Image 102e26be108S猫头猫 style={style.coverImg} 103e26be108S猫头猫 uri={coverImg} 104e26be108S猫头猫 emptySrc={ImgAsset.albumDefault} 105e26be108S猫头猫 /> 106e26be108S猫头猫 </TouchableOpacity> 107e26be108S猫头猫 </View> 108e26be108S猫头猫 <View style={style.row}> 109e650bfb3S猫头猫 <ThemeText>歌单名</ThemeText> 110e650bfb3S猫头猫 <Input 111e650bfb3S猫头猫 numberOfLines={1} 112e650bfb3S猫头猫 textAlign="right" 113e26be108S猫头猫 value={title} 114e650bfb3S猫头猫 hasHorizonalPadding={false} 115e26be108S猫头猫 onChangeText={onTitleChange} 116e26be108S猫头猫 style={{ 117e650bfb3S猫头猫 height: fontSizeConst.content * 2.5, 118e650bfb3S猫头猫 width: '50%', 119e650bfb3S猫头猫 borderBottomWidth: 1, 120e26be108S猫头猫 includeFontPadding: false, 121e650bfb3S猫头猫 borderBottomColor: colors.text, 122e26be108S猫头猫 }} 123e26be108S猫头猫 /> 124e26be108S猫头猫 </View> 125e26be108S猫头猫 </Dialog.Content> 126*95368653S猫头猫 <Dialog.Actions 127*95368653S猫头猫 actions={[ 128*95368653S猫头猫 { 129*95368653S猫头猫 title: '取消', 130*95368653S猫头猫 type: 'normal', 131*95368653S猫头猫 onPress: hideDialog, 132*95368653S猫头猫 }, 133*95368653S猫头猫 { 134*95368653S猫头猫 title: '确认', 135*95368653S猫头猫 type: 'primary', 136*95368653S猫头猫 onPress: onConfirm, 137*95368653S猫头猫 }, 138*95368653S猫头猫 ]} 139*95368653S猫头猫 /> 140e26be108S猫头猫 </Dialog> 141e26be108S猫头猫 ); 142e26be108S猫头猫} 143e26be108S猫头猫 144e26be108S猫头猫const style = StyleSheet.create({ 145e26be108S猫头猫 row: { 146e26be108S猫头猫 marginTop: rpx(28), 147e26be108S猫头猫 height: rpx(120), 148e26be108S猫头猫 flexDirection: 'row', 149e26be108S猫头猫 justifyContent: 'space-between', 150e26be108S猫头猫 alignItems: 'center', 151e26be108S猫头猫 paddingBottom: rpx(12), 152e26be108S猫头猫 }, 153e26be108S猫头猫 coverImg: { 154e26be108S猫头猫 width: rpx(100), 155e26be108S猫头猫 height: rpx(100), 156e26be108S猫头猫 borderRadius: rpx(28), 157e26be108S猫头猫 }, 158e26be108S猫头猫}); 159