diff --git a/client/components/QuickTaskCard.tsx b/client/components/QuickTaskCard.tsx
new file mode 100644
index 0000000..d8907a0
--- /dev/null
+++ b/client/components/QuickTaskCard.tsx
@@ -0,0 +1,25 @@
+import React from 'react';
+import { Text, View } from 'react-native';
+
+export const QuickTaskCard = ({
+ name,
+ label
+}: {
+ name: String;
+ label: String;
+}): JSX.Element => {
+ return (
+
+
+
+
+ {name}
+
+
+
+ {label}
+
+
+
+ );
+};
diff --git a/client/navigation/AppStackBottomTabNavigator.tsx b/client/navigation/AppStackBottomTabNavigator.tsx
index 6793920..993d7c8 100644
--- a/client/navigation/AppStackBottomTabNavigator.tsx
+++ b/client/navigation/AppStackBottomTabNavigator.tsx
@@ -9,6 +9,7 @@ import Home from '../assets/bottom-nav/home.svg';
import User from '../assets/bottom-nav/user.svg';
import MedicationList from '../screens/MedicationList';
import Profile from '../screens/Profile';
+import QuickTasks from '../screens/QuickTasks';
const AppStackBottomTab = createBottomTabNavigator();
@@ -36,7 +37,7 @@ export function AppStackBottomTabNavigator() {
tabBarIcon: ({ color }) => ,
tabBarLabel: () =>
}}
- component={MedicationList}
+ component={QuickTasks}
/>
Loading...;
+ // }
+
+ const snapPoints = useMemo(() => ['70%'], []);
+ const bottomSheetRef = useRef(null);
+
+ const handleOpenPress = () => bottomSheetRef.current?.expand();
+ const handleClosePress = () => bottomSheetRef.current?.close();
+
+ const renderBackdrop = useCallback(
+ (props: any) => (
+
+ ),
+ []
+ );
+ return (
+
+
+
+
+ Today's Quick Tasks
+
+ }
+ keyExtractor={(item) => item.id}
+ renderItem={({ item }) => (
+
+ )}
+ />
+
+
+ );
+}
diff --git a/client/services/task.ts b/client/services/task.ts
new file mode 100644
index 0000000..ba2271c
--- /dev/null
+++ b/client/services/task.ts
@@ -0,0 +1,43 @@
+import { useQuery, useQueryClient } from '@tanstack/react-query';
+import axios from 'axios';
+
+import { TaskLabel } from '../types/label';
+import { Task } from '../types/task';
+import { api_url } from './api-links';
+
+type TaskQueryParams = {
+ taskID?: string;
+ groupID?: string;
+ createdBy?: string;
+ taskStatus?: string;
+ taskType?: string;
+ startDate?: string;
+ endDate?: string;
+};
+
+const getFilteredTasks = async (
+ queryParams: TaskQueryParams
+): Promise => {
+ const { data } = await axios.get(`${api_url}/tasks/filtered?`, {
+ params: queryParams
+ });
+ return data;
+};
+
+export const getTaskLabels = async (taskID: string): Promise => {
+ const { data } = await axios.get(`${api_url}/tasks/${taskID}/labels`);
+ return data;
+};
+
+export const useFilteredTasks = (queryParams: TaskQueryParams) => {
+ const queryClient = useQueryClient();
+ const { data: tasks, isLoading: tasksIsLoading } = useQuery({
+ queryKey: ['filteredTaskList', queryParams],
+ queryFn: () => getFilteredTasks(queryParams),
+ refetchInterval: 20000
+ });
+ return {
+ tasks,
+ tasksIsLoading
+ };
+};
diff --git a/client/types/label.ts b/client/types/label.ts
new file mode 100644
index 0000000..3a3e99c
--- /dev/null
+++ b/client/types/label.ts
@@ -0,0 +1,5 @@
+export interface TaskLabel {
+ task_id: number;
+ group_id: number;
+ label_name: string;
+}
diff --git a/client/types/task.ts b/client/types/task.ts
new file mode 100644
index 0000000..901812b
--- /dev/null
+++ b/client/types/task.ts
@@ -0,0 +1,15 @@
+export interface Task {
+ task_id: number;
+ group_id: number;
+ created_by: string;
+ created_date: string;
+ start_date?: string | null;
+ end_date?: string | null;
+ notes?: string | null;
+ repeating: boolean;
+ repeating_interval?: string | null;
+ repeating_end_date?: string | null;
+ task_status: string;
+ task_type: string;
+ task_info?: string | null;
+}