update
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
import { useContext, useGlobal } from "reactn";
|
||||
import { ScrollView, Text, View, Image, Pressable } from "react-native";
|
||||
|
||||
import firebase, { arrayRemove } from "../config/firebase";
|
||||
|
||||
import { getFileNameFromURL } from "../helpers";
|
||||
import { Fonts, Palette, Style, gutters } from "../styles";
|
||||
import { icons } from "../assets";
|
||||
|
||||
import { WebViewContext } from "../providers/WebViewProvider";
|
||||
import alert from "./Alert";
|
||||
|
||||
export default ({
|
||||
files = [],
|
||||
setFiles = null,
|
||||
documentID = null,
|
||||
collectionRef = null,
|
||||
containerStyle = {},
|
||||
}) => {
|
||||
const [, setIsLoading] = useGlobal("_isLoading");
|
||||
const [, setTooltip] = useGlobal("_tooltip");
|
||||
|
||||
const { setWebViewUrl } = useContext(WebViewContext);
|
||||
|
||||
const onDeleteFile = async (url) => {
|
||||
alert(
|
||||
"Êtes-vous sûr ?",
|
||||
"Cette action est irréversible.",
|
||||
[
|
||||
{
|
||||
text: "Annuler",
|
||||
style: "cancel",
|
||||
},
|
||||
{
|
||||
text: "Confirmer",
|
||||
onPress: async () => {
|
||||
try {
|
||||
setIsLoading(true);
|
||||
|
||||
setFiles(
|
||||
files.filter((file) => file !== url && file.uri !== url)
|
||||
);
|
||||
await firebase.storage().refFromURL(url).delete();
|
||||
|
||||
if (documentID) {
|
||||
await collectionRef.doc(documentID).update({
|
||||
files: arrayRemove(url),
|
||||
});
|
||||
}
|
||||
|
||||
setTooltip({
|
||||
type: "success",
|
||||
text: "Fichier supprimé avec succès !",
|
||||
});
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
},
|
||||
style: "confirm",
|
||||
},
|
||||
],
|
||||
{ cancelable: false }
|
||||
);
|
||||
};
|
||||
|
||||
if (files.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<View>
|
||||
<ScrollView
|
||||
horizontal
|
||||
style={{ ...containerStyle }}
|
||||
showsHorizontalScrollIndicator={false}
|
||||
>
|
||||
{files.map((file, index) => {
|
||||
const uri = file.uri || file;
|
||||
|
||||
return (
|
||||
<View
|
||||
key={index}
|
||||
style={[
|
||||
Style.containerItem,
|
||||
Style.containerRow,
|
||||
{
|
||||
backgroundColor: Palette.transparentPrimary,
|
||||
paddingVertical: gutters / 4,
|
||||
paddingHorizontal: 20,
|
||||
marginRight: 10,
|
||||
maxWidth: files?.length > 1 ? 250 : 400,
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Text
|
||||
numberOfLines={1}
|
||||
style={Fonts({
|
||||
type: "default",
|
||||
color: Palette.white,
|
||||
style: {
|
||||
maxWidth: files?.length > 1 ? 100 : 200,
|
||||
marginRight: 10,
|
||||
},
|
||||
})}
|
||||
>
|
||||
{getFileNameFromURL({ url: uri })}
|
||||
</Text>
|
||||
|
||||
{setFiles && (
|
||||
<Pressable onPress={() => onDeleteFile(uri)}>
|
||||
<Image
|
||||
source={icons.trash}
|
||||
style={[Style.iconDefault, { marginRight: 5 }]}
|
||||
resizeMode="contain"
|
||||
/>
|
||||
</Pressable>
|
||||
)}
|
||||
|
||||
<Pressable onPress={() => setWebViewUrl(uri)}>
|
||||
<Image
|
||||
source={icons.eye}
|
||||
style={Style.iconDefault}
|
||||
resizeMode="contain"
|
||||
/>
|
||||
</Pressable>
|
||||
</View>
|
||||
);
|
||||
})}
|
||||
</ScrollView>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user