import React, { useState, useEffect } from 'react';
import { View, Text, TextInput, Button, FlatList, TouchableOpacity, ScrollView, Dimensions, Alert } from 'react-native';
import { SafeAreaView } from 'react-native-safe-area-context';
import DateTimePicker from '@react-native-community/datetimepicker';
import BigCalendar from 'react-native-big-calendar';
const { width } = Dimensions.get('window');
export default function App() {
const [tasks, setTasks] = useState([]);
const [newTask, setNewTask] = useState({ title: '', person: '', type: 'Work', reminder: new Date(), completionDate: null });
const [showDatePicker, setShowDatePicker] = useState(false);
const [presetServices, setPresetServices] = useState([
{ id: 'svc1', name: 'Crane Rental', price: 1200 },
{ id: 'svc2', name: 'HVAC Install', price: 2500 },
{ id: 'svc3', name: 'Electrical Hookup', price: 800 },
]);
const [selectedServices, setSelectedServices] = useState([]);
const [quote, setQuote] = useState(null);
const [quotes, setQuotes] = useState([]);
const [contacts, setContacts] = useState([]);
const [newContact, setNewContact] = useState({ name: '', phone: '', email: '', type: 'Work' });
const [followUpThreshold, setFollowUpThreshold] = useState(7);
const [jobs, setJobs] = useState([]);
const [jobDate, setJobDate] = useState(new Date());
const [showJobDatePicker, setShowJobDatePicker] = useState(false);
const [calendarView, setCalendarView] = useState('month');
useEffect(() => {
const now = new Date();
const updatedQuotes = quotes.map(q => {
const createdAt = new Date(q.createdAt);
const age = Math.floor((now - createdAt) / (1000 * 60 * 60 * 24));
return { ...q, age, needsFollowUp: q.status === 'Pending' && age >= followUpThreshold };
});
setQuotes(updatedQuotes);
}, [followUpThreshold]);
const scheduleJob = (quoteId) => {
const quoteToSchedule = quotes.find(q => q.id === quoteId);
if (!quoteToSchedule) return;
const job = {
id: Date.now().toString(),
quoteId,
taskId: quoteToSchedule.taskId,
description: quoteToSchedule.description,
date: jobDate,
status: 'Scheduled'
};
setJobs([...jobs, job]);
setQuotes(quotes.map(q => q.id === quoteId ? { ...q, status: 'Accepted' } : q));
};
const handleDragJob = (event) => {
const updatedJobs = jobs.map(job =>
job.description === event.title
? { ...job, date: event.start }
: job
);
setJobs(updatedJobs);
Alert.alert('Job Rescheduled', `New Date: ${event.start.toLocaleString()}`);
};
const calendarEvents = jobs.map(job => ({
title: job.description,
start: new Date(job.date),
end: new Date(new Date(job.date).getTime() + 60 * 60 * 1000),
}));
return (
TaskSort + Scheduler
Calendar View
);
}