added notification
This commit is contained in:
@@ -9,30 +9,37 @@ import {
|
||||
View,
|
||||
} from 'react-native';
|
||||
import {
|
||||
Asset,
|
||||
ImagePickerResponse,
|
||||
launchImageLibrary,
|
||||
MediaType,
|
||||
} from 'react-native-image-picker';
|
||||
import Download from 'svg/Download';
|
||||
|
||||
interface FileData {
|
||||
export interface FileData {
|
||||
uri: string;
|
||||
name: string;
|
||||
type: string;
|
||||
base64: string;
|
||||
}
|
||||
|
||||
interface SingleFileDropProps {
|
||||
export interface SingleFileDropProps {
|
||||
title: string;
|
||||
onFileSelected?: (file: FileData) => void;
|
||||
/**
|
||||
* Ruxsat berilgan MIME tipi (masalan: "image/png" yoki "image/jpeg")
|
||||
*/
|
||||
type?: string;
|
||||
}
|
||||
|
||||
const SingleFileDrop: React.FC<SingleFileDropProps> = ({
|
||||
title,
|
||||
onFileSelected,
|
||||
type = 'image/png',
|
||||
}) => {
|
||||
const [selectedImage, setSelectedImage] = useState<string | null>(null);
|
||||
const { t } = useTranslation();
|
||||
|
||||
const imagePickerOptions = useMemo(
|
||||
() => ({
|
||||
mediaType: 'photo' as MediaType,
|
||||
@@ -49,29 +56,27 @@ const SingleFileDrop: React.FC<SingleFileDropProps> = ({
|
||||
return;
|
||||
}
|
||||
|
||||
if (response.assets && response.assets[0]) {
|
||||
const asset = response.assets[0];
|
||||
if (!asset.uri || !asset.type || !asset.base64) return;
|
||||
const asset: Asset | undefined = response.assets?.[0];
|
||||
if (!asset || !asset.uri || !asset.type || !asset.base64) return;
|
||||
|
||||
// faqat PNG fayllarni qabul qilish
|
||||
if (asset.type !== 'image/png') {
|
||||
Alert.alert('Xato', 'Faqat PNG fayllarni yuklashingiz mumkin');
|
||||
return;
|
||||
}
|
||||
|
||||
setSelectedImage(asset.uri);
|
||||
|
||||
const fileData: FileData = {
|
||||
uri: asset.uri,
|
||||
name: asset.fileName || 'image.png',
|
||||
type: asset.type,
|
||||
base64: `data:${asset.type};base64,${asset.base64}`,
|
||||
};
|
||||
|
||||
onFileSelected?.(fileData);
|
||||
// faqat belgilangan tipdagi fayllarni qabul qilish
|
||||
if (!asset.type.startsWith('image/')) {
|
||||
Alert.alert('Xato', 'Faqat rasm fayllarni yuklashingiz mumkin');
|
||||
return;
|
||||
}
|
||||
|
||||
setSelectedImage(asset.uri);
|
||||
|
||||
const fileData: FileData = {
|
||||
uri: asset.uri,
|
||||
name: asset.fileName || `file.${asset.type.split('/')[1]}`,
|
||||
type: asset.type,
|
||||
base64: `data:${asset.type};base64,${asset.base64}`,
|
||||
};
|
||||
|
||||
onFileSelected?.(fileData);
|
||||
},
|
||||
[onFileSelected],
|
||||
[onFileSelected, type],
|
||||
);
|
||||
|
||||
const openGallery = useCallback((): void => {
|
||||
@@ -101,17 +106,8 @@ const SingleFileDrop: React.FC<SingleFileDropProps> = ({
|
||||
<>
|
||||
<View style={styles.innerContainer}>
|
||||
<View style={styles.topContent}>
|
||||
{selectedImage ? (
|
||||
<Image
|
||||
source={{ uri: selectedImage }}
|
||||
style={styles.previewImage}
|
||||
/>
|
||||
) : (
|
||||
<>
|
||||
<UploadIcon />
|
||||
<Text style={styles.sectionTitle}>{title}</Text>
|
||||
</>
|
||||
)}
|
||||
<UploadIcon />
|
||||
<Text style={styles.sectionTitle}>{title}</Text>
|
||||
</View>
|
||||
|
||||
<View style={styles.bottomContent}>
|
||||
@@ -158,11 +154,6 @@ const styles = StyleSheet.create({
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
},
|
||||
iconText: {
|
||||
fontSize: 20,
|
||||
color: '#007bff',
|
||||
fontWeight: 'bold',
|
||||
},
|
||||
sectionTitle: {
|
||||
fontSize: 16,
|
||||
fontWeight: '500',
|
||||
@@ -191,7 +182,6 @@ const styles = StyleSheet.create({
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
marginVertical: 16,
|
||||
position: 'relative',
|
||||
flexDirection: 'row',
|
||||
},
|
||||
dividerLine: {
|
||||
@@ -203,18 +193,15 @@ const styles = StyleSheet.create({
|
||||
paddingHorizontal: 12,
|
||||
fontSize: 14,
|
||||
color: '#999',
|
||||
zIndex: 1,
|
||||
},
|
||||
innerContainer: {
|
||||
flex: 1,
|
||||
justifyContent: 'space-between',
|
||||
width: '100%',
|
||||
},
|
||||
|
||||
topContent: {
|
||||
alignItems: 'center',
|
||||
},
|
||||
|
||||
bottomContent: {
|
||||
width: '100%',
|
||||
alignItems: 'center',
|
||||
|
||||
Reference in New Issue
Block a user