From 6c9aed19c02862377f347f4dc579033493ace57d Mon Sep 17 00:00:00 2001 From: Abraham Rudolf Brahmana Date: Sun, 7 Nov 2021 20:05:46 +0700 Subject: [PATCH 1/3] feat: Create function to check is a user the ecosystem owner --- src/service/firestore/ecosystem/isOwner.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/service/firestore/ecosystem/isOwner.ts diff --git a/src/service/firestore/ecosystem/isOwner.ts b/src/service/firestore/ecosystem/isOwner.ts new file mode 100644 index 0000000..e907deb --- /dev/null +++ b/src/service/firestore/ecosystem/isOwner.ts @@ -0,0 +1,13 @@ +import firebase from "firebase"; +import { getEnv } from "../../../helpers/getEnv"; +import { IEcosystem } from "../../../types/firestore/ecosystems"; + +export const isOwner = async (ecosystemId: string, userId: string) => { + const db = firebase.firestore(); + const snap = await db + .collection("ecosystems_" + getEnv()) + .doc(ecosystemId) + .get(); + const ecosystem = snap.data() as IEcosystem; + return ecosystem.creatorId === userId; +}; -- GitLab From 0bf6ae8d282d8987c826397cd113c9510ac76046 Mon Sep 17 00:00:00 2001 From: Abraham Rudolf Brahmana Date: Sun, 7 Nov 2021 20:08:20 +0700 Subject: [PATCH 2/3] feat: Delete ecosystem --- .../ecosystem/EcosystemDetailScreen.tsx | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/screens/ecosystem/EcosystemDetailScreen.tsx b/src/screens/ecosystem/EcosystemDetailScreen.tsx index 4f0b4be..d65bf12 100644 --- a/src/screens/ecosystem/EcosystemDetailScreen.tsx +++ b/src/screens/ecosystem/EcosystemDetailScreen.tsx @@ -13,6 +13,8 @@ import { useUser } from "../../hooks/reduxHooks"; import { unfollowEcosystem } from "../../service/firestore/ecosystem/unfollowEcosystem"; import { inEcosystem } from "../../service/firestore/ecosystem/inEcosystem"; import { useEffect, useState } from "react"; +import { isOwner } from "../../service/firestore/ecosystem/isOwner"; +import { deleteEcosystem } from "../../service/functions/deleteEcosystem"; const EcosystemDetailScreen = ({ route, @@ -22,6 +24,8 @@ const EcosystemDetailScreen = ({ const user = useUser(); const [isInEcosystem, setIsInEcosystem] = useState(false); const [isFetched, setIsFetched] = useState(false); + const [isEcosystemOwner, setIsEcosystemOnwer] = useState(false); + const [isOwnerFetched, setIsOwnerFetched] = useState(false); useEffect(() => { inEcosystem(id, user.id).then((res) => { @@ -30,6 +34,14 @@ const EcosystemDetailScreen = ({ }); }); + useEffect(() => { + isOwner(id, user.id) + .then((res) => { + setIsEcosystemOnwer(res); + }) + .then(() => setIsOwnerFetched(true)); + }); + const alertFollow = () => { Alert.alert("Joined Ecosystem", "You have joined the ecosystem"); inEcosystem(id, user.id).then((res) => setIsInEcosystem(res)); @@ -38,6 +50,30 @@ const EcosystemDetailScreen = ({ Alert.alert("Left Ecosystem", "You have left the ecosystem"); inEcosystem(id, user.id).then((res) => setIsInEcosystem(res)); }; + + const alertDelete = () => { + Alert.alert( + "Hapus Ekosistem", + "Apakah anda yakin ingin menghapus ekosistem", + [ + { + text: "Hapus", + style: "destructive", + onPress: () => handleDelete(), + }, + { text: "Cancel", style: "cancel" }, + ] + ); + }; + + const handleDelete = async () => { + await deleteEcosystem(id); + Alert.alert("Hapus Ekosistem", "Ekosistem berhasil dihapus", [ + { text: "OK" }, + ]); + nav.goBack(); + }; + const handleClickFollow = () => { followEcosystem(id, user.id).then(alertFollow); }; @@ -104,6 +140,19 @@ const EcosystemDetailScreen = ({ } })()} + {(() => { + if (isEcosystemOwner && isOwnerFetched) { + return ( + { + alertDelete(); + }} + /> + ); + } + })()} ); -- GitLab From 18f4d62632ae546f829a2187b69cf0a63042c973 Mon Sep 17 00:00:00 2001 From: Abraham Rudolf Brahmana Date: Sun, 7 Nov 2021 20:15:57 +0700 Subject: [PATCH 3/3] refactor: Add error handling in isOwner function --- src/service/firestore/ecosystem/isOwner.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/service/firestore/ecosystem/isOwner.ts b/src/service/firestore/ecosystem/isOwner.ts index e907deb..e351c45 100644 --- a/src/service/firestore/ecosystem/isOwner.ts +++ b/src/service/firestore/ecosystem/isOwner.ts @@ -9,5 +9,9 @@ export const isOwner = async (ecosystemId: string, userId: string) => { .doc(ecosystemId) .get(); const ecosystem = snap.data() as IEcosystem; - return ecosystem.creatorId === userId; + try { + return ecosystem.creatorId === userId; + } catch (e) { + return false; + } }; -- GitLab