1e26be108S猫头猫import React, {useState} from 'react'; 2e26be108S猫头猫import useColors from '@/hooks/useColors'; 3e26be108S猫头猫import rpx from '@/utils/rpx'; 45589cdf3S猫头猫import {StyleSheet, TouchableOpacity, View} from 'react-native'; 5e26be108S猫头猫import ThemeText from '@/components/base/themeText'; 6e26be108S猫头猫import {ImgAsset} from '@/constants/assetsConst'; 7e26be108S猫头猫import {launchImageLibrary} from 'react-native-image-picker'; 8e26be108S猫头猫import pathConst from '@/constants/pathConst'; 9e26be108S猫头猫import Image from '@/components/base/image'; 10e26be108S猫头猫import MusicSheet from '@/core/musicSheet'; 1129fe487bS猫头猫import {addFileScheme, addRandomHash} from '@/utils/fileUtils'; 1229fe487bS猫头猫import Toast from '@/utils/toast'; 1375d76114S猫头猫import {hideDialog} from '../useDialog'; 14e650bfb3S猫头猫import Dialog from './base'; 15e650bfb3S猫头猫import Input from '@/components/base/input'; 16e650bfb3S猫头猫import {fontSizeConst} from '@/constants/uiConst'; 17*00ebdfd8S猫头猫import {copyAsync, deleteAsync, getInfoAsync} from 'expo-file-system'; 18e26be108S猫头猫 19e26be108S猫头猫interface IEditSheetDetailProps { 20e26be108S猫头猫 musicSheet: IMusic.IMusicSheetItem; 21e26be108S猫头猫} 22e26be108S猫头猫export default function EditSheetDetailDialog(props: IEditSheetDetailProps) { 23e26be108S猫头猫 const {musicSheet} = props; 24e26be108S猫头猫 const colors = useColors(); 25e26be108S猫头猫 26e26be108S猫头猫 const [coverImg, setCoverImg] = useState(musicSheet?.coverImg); 27e26be108S猫头猫 const [title, setTitle] = useState(musicSheet?.title); 28e26be108S猫头猫 29e26be108S猫头猫 // onCover 30e26be108S猫头猫 31e26be108S猫头猫 const onChangeCoverPress = async () => { 32e26be108S猫头猫 try { 33e26be108S猫头猫 const result = await launchImageLibrary({ 34e26be108S猫头猫 mediaType: 'photo', 35e26be108S猫头猫 }); 36e26be108S猫头猫 const uri = result.assets?.[0].uri; 37e26be108S猫头猫 if (!uri) { 38e26be108S猫头猫 return; 39e26be108S猫头猫 } 40e26be108S猫头猫 console.log(uri); 41e26be108S猫头猫 setCoverImg(uri); 42e26be108S猫头猫 } catch (e) { 43e26be108S猫头猫 console.log(e); 44e26be108S猫头猫 } 45e26be108S猫头猫 }; 46e26be108S猫头猫 47e26be108S猫头猫 function onTitleChange(_: string) { 48e26be108S猫头猫 setTitle(_); 49e26be108S猫头猫 } 50e26be108S猫头猫 51e26be108S猫头猫 async function onConfirm() { 52e26be108S猫头猫 // 判断是否相同 53e26be108S猫头猫 if (coverImg === musicSheet?.coverImg && title === musicSheet?.title) { 54e26be108S猫头猫 hideDialog(); 557a69a1e8S猫头猫 return; 56e26be108S猫头猫 } 57e26be108S猫头猫 58*00ebdfd8S猫头猫 let newCoverImg = coverImg; 59*00ebdfd8S猫头猫 if (coverImg && coverImg !== musicSheet?.coverImg) { 60*00ebdfd8S猫头猫 newCoverImg = addFileScheme( 61*00ebdfd8S猫头猫 `${pathConst.dataPath}sheet${musicSheet.id}${coverImg.substring( 62*00ebdfd8S猫头猫 coverImg.lastIndexOf('.'), 63*00ebdfd8S猫头猫 )}`, 64e26be108S猫头猫 ); 6529fe487bS猫头猫 try { 66*00ebdfd8S猫头猫 if ((await getInfoAsync(newCoverImg)).exists) { 67*00ebdfd8S猫头猫 await deleteAsync(newCoverImg, { 68*00ebdfd8S猫头猫 idempotent: true, // 报错时不抛异常 69*00ebdfd8S猫头猫 }); 7029fe487bS猫头猫 } 71*00ebdfd8S猫头猫 await copyAsync({ 72*00ebdfd8S猫头猫 from: coverImg, 73*00ebdfd8S猫头猫 to: newCoverImg, 74*00ebdfd8S猫头猫 }); 7529fe487bS猫头猫 } catch (e) { 7629fe487bS猫头猫 console.log(e); 7729fe487bS猫头猫 } 78e26be108S猫头猫 } 79e26be108S猫头猫 let _title = title; 8029fe487bS猫头猫 if (!_title?.length) { 81e26be108S猫头猫 _title = musicSheet.title; 82e26be108S猫头猫 } 83e26be108S猫头猫 // 更新歌单信息 84e26be108S猫头猫 MusicSheet.updateAndSaveSheet(musicSheet.id, { 85e26be108S猫头猫 basic: { 86*00ebdfd8S猫头猫 coverImg: newCoverImg ? addRandomHash(newCoverImg) : undefined, 87e26be108S猫头猫 title: _title, 88e26be108S猫头猫 }, 8929fe487bS猫头猫 }).then(() => { 9029fe487bS猫头猫 Toast.success('更新歌单信息成功~'); 91e26be108S猫头猫 }); 92e26be108S猫头猫 hideDialog(); 93e26be108S猫头猫 } 94e26be108S猫头猫 95e26be108S猫头猫 return ( 96e650bfb3S猫头猫 <Dialog onDismiss={hideDialog}> 9795368653S猫头猫 <Dialog.Content> 98e26be108S猫头猫 <View style={style.row}> 99e650bfb3S猫头猫 <ThemeText>封面</ThemeText> 100e26be108S猫头猫 <TouchableOpacity 101e26be108S猫头猫 onPress={onChangeCoverPress} 102e26be108S猫头猫 onLongPress={() => { 103e26be108S猫头猫 setCoverImg(undefined); 104e26be108S猫头猫 }}> 105e26be108S猫头猫 <Image 106e26be108S猫头猫 style={style.coverImg} 107e26be108S猫头猫 uri={coverImg} 108e26be108S猫头猫 emptySrc={ImgAsset.albumDefault} 109e26be108S猫头猫 /> 110e26be108S猫头猫 </TouchableOpacity> 111e26be108S猫头猫 </View> 112e26be108S猫头猫 <View style={style.row}> 113e650bfb3S猫头猫 <ThemeText>歌单名</ThemeText> 114e650bfb3S猫头猫 <Input 115e650bfb3S猫头猫 numberOfLines={1} 116e650bfb3S猫头猫 textAlign="right" 117e26be108S猫头猫 value={title} 118e650bfb3S猫头猫 hasHorizonalPadding={false} 119e26be108S猫头猫 onChangeText={onTitleChange} 120e26be108S猫头猫 style={{ 121e650bfb3S猫头猫 height: fontSizeConst.content * 2.5, 122e650bfb3S猫头猫 width: '50%', 123e650bfb3S猫头猫 borderBottomWidth: 1, 124e26be108S猫头猫 includeFontPadding: false, 125e650bfb3S猫头猫 borderBottomColor: colors.text, 126e26be108S猫头猫 }} 127e26be108S猫头猫 /> 128e26be108S猫头猫 </View> 129e26be108S猫头猫 </Dialog.Content> 13095368653S猫头猫 <Dialog.Actions 13195368653S猫头猫 actions={[ 13295368653S猫头猫 { 13395368653S猫头猫 title: '取消', 13495368653S猫头猫 type: 'normal', 13595368653S猫头猫 onPress: hideDialog, 13695368653S猫头猫 }, 13795368653S猫头猫 { 13895368653S猫头猫 title: '确认', 13995368653S猫头猫 type: 'primary', 14095368653S猫头猫 onPress: onConfirm, 14195368653S猫头猫 }, 14295368653S猫头猫 ]} 14395368653S猫头猫 /> 144e26be108S猫头猫 </Dialog> 145e26be108S猫头猫 ); 146e26be108S猫头猫} 147e26be108S猫头猫 148e26be108S猫头猫const style = StyleSheet.create({ 149e26be108S猫头猫 row: { 150e26be108S猫头猫 marginTop: rpx(28), 151e26be108S猫头猫 height: rpx(120), 152e26be108S猫头猫 flexDirection: 'row', 153e26be108S猫头猫 justifyContent: 'space-between', 154e26be108S猫头猫 alignItems: 'center', 155e26be108S猫头猫 paddingBottom: rpx(12), 156e26be108S猫头猫 }, 157e26be108S猫头猫 coverImg: { 158e26be108S猫头猫 width: rpx(100), 159e26be108S猫头猫 height: rpx(100), 160e26be108S猫头猫 borderRadius: rpx(28), 161e26be108S猫头猫 }, 162e26be108S猫头猫}); 163