Skip to content

Commit

Permalink
thank you suahard
Browse files Browse the repository at this point in the history
  • Loading branch information
philipye314 committed Nov 9, 2023
1 parent effae3c commit 0f32e53
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 32 deletions.
Original file line number Diff line number Diff line change
@@ -1,22 +1,47 @@
import { useLocalSearchParams, useRouter } from 'expo-router';
import { useEffect, useState } from 'react';
import { Image, Text, TouchableOpacity, View } from 'react-native';
import { uploadCase } from '../../../../../supabase/queries/cases';
import { CaseUid } from '../../../../../types/types';

import styles from './styles';
import {
containsDuplicateCase,
uploadCase,
} from '../../../../../supabase/queries/cases';
import { CaseUid } from '../../../../../types/types';

function AddCase() {
const { id, title, summary, image } = useLocalSearchParams<{
const { id, title, image, summary } = useLocalSearchParams() as {
id: CaseUid;
title: string;
summary: string;
image: string;
}>();
summary: string;
};
const router = useRouter();
const [loading, setLoading] = useState<boolean>(true);

useEffect(() => {
const validateCaseUniqueness = async () => {
const duplicate = await containsDuplicateCase(id);
if (duplicate) {
console.log('DUPLICATES NOT ALLOWED!');
router.back();
}
};
validateCaseUniqueness();
setLoading(false);
}, []);

const addToCases = async () => {
uploadCase(id);
router.push('/Cases');
};
if (loading) {
return (
<View>
<Text>LOADING... LOL</Text>
</View>
);
}
return (
<View style={styles.container}>
<Text style={styles.title}>{title}</Text>
Expand Down
48 changes: 25 additions & 23 deletions src/app/(BottomTabNavigation)/Cases/QRCodeScanner/index.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
import { BarCodeScanner, BarCodeScannerResult } from 'expo-barcode-scanner';
import { router } from 'expo-router';
import { router, useNavigation } from 'expo-router';
import React, { useEffect, useState } from 'react';
import { Text, TouchableOpacity, View } from 'react-native';
import supabase from '../../../../supabase/createClient';
import {
containsDuplicateCase,
getCaseById,
} from '../../../../supabase/queries/cases';

import styles from './styles';
import { getCaseById, isValidCase } from '../../../../supabase/queries/cases';

enum permissions {
UNDETERMINED,
Expand All @@ -17,8 +14,15 @@ enum permissions {

function QRCodeScannerScreen() {
const [hasPermission, setHasPermission] = useState(permissions.UNDETERMINED);
const [message, setMessage] = useState('');
const [scanned, setScanned] = useState(false);
const [scanned, setScanned] = useState<boolean>(false);
const navigation = useNavigation();

useEffect(() => {
const unsubscribe = navigation.addListener('blur', async () => {
setScanned(false);
});
return unsubscribe;
}, [navigation]);

useEffect(() => {
const getBarCodeScannerPermissions = async () => {
Expand All @@ -30,23 +34,22 @@ function QRCodeScannerScreen() {
getBarCodeScannerPermissions();
}, []);

const isValidBarcode = (caseId: string) => true;

const handleBarCodeScanned = async (result: BarCodeScannerResult) => {
const caseId = result.data;
if (isValidBarcode(caseId)) {
const { id, title, summary, image } = await getCaseById(caseId);
const duplicate = await containsDuplicateCase(id);
if (duplicate) {
console.log('YOU ALREADY HAVE THIS CASE!');
} else {
router.push({
pathname: '/Cases/QRCodeScanner/AddCase',
params: { id, title, summary, image },
});
if (!scanned) {
setScanned(true);
const valid = await isValidCase(caseId);
if (!valid) {
// TODO: Display error toast message
return;
}
} else {
setMessage('INVALID QR CODE!');
const data = await getCaseById(caseId);

const { id, title, image, summary } = data;
router.push({
pathname: '/Cases/QRCodeScanner/AddCase',
params: { id, title, image, summary },
});
}
};

Expand All @@ -61,7 +64,6 @@ function QRCodeScannerScreen() {
onBarCodeScanned={handleBarCodeScanned}
style={[styles.scanner]}
/>
<Text>Current Scanning: {message}</Text>
<TouchableOpacity onPress={() => router.back()} style={styles.button}>
<Text>Go Back</Text>
</TouchableOpacity>
Expand Down
9 changes: 6 additions & 3 deletions src/supabase/createClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,15 @@ import AsyncStorage from '@react-native-async-storage/async-storage';
import { createClient } from '@supabase/supabase-js';
import 'react-native-url-polyfill/auto';

if (!process.env.SUPABASE_URL || !process.env.SUPABASE_ANON_KEY) {
if (
!process.env.EXPO_PUBLIC_SUPABASE_URL ||
!process.env.EXPO_PUBLIC_SUPABASE_ANON_KEY
) {
throw new Error('Supabase environment variables are not defined.');
}
const supabase = createClient(
process.env.SUPABASE_URL,
process.env.SUPABASE_ANON_KEY,
process.env.EXPO_PUBLIC_SUPABASE_URL,
process.env.EXPO_PUBLIC_SUPABASE_ANON_KEY,
{
auth: {
storage: AsyncStorage,
Expand Down
10 changes: 9 additions & 1 deletion src/supabase/queries/cases.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,14 @@ export async function getCaseById(caseId: CaseUid): Promise<Case> {
}
}

export async function isValidCase(caseId: CaseUid): Promise<boolean> {
const { data } = await supabase.from('cases').select().eq('caseId', caseId);
if (!data) {
return false;
}
return data.length !== 0;
}

/**
* Fetch an array of Case objects contained in an array of `CaseId`s. Fetches cases from `cases` table.
*
Expand Down Expand Up @@ -93,7 +101,7 @@ export async function containsDuplicateCase(caseId: CaseUid) {
.select()
.eq('userId', userId)
.eq('caseId', caseId);
return data?.length === 0;
return data?.length !== 0;
} catch (error) {
throw error;
}
Expand Down

0 comments on commit 0f32e53

Please sign in to comment.