vmi-virtual-memorial/vmi-wd-frontend / c2064dd

Browse files

hasDoc to search pages

Authored by mfwolffe <wolffemf@dukes.jmu.edu>
SHA
c2064dd9cfaed258c9fcca52785ef45d9c49e6d1
Parents
fe6cc03
Tree
8427e6c

2 changed files

StatusFile+-
M app/memorial/search/page.tsx 24 7
M lib/api.ts 4 2
app/memorial/search/page.tsxmodified
@@ -14,6 +14,7 @@ export default function MemorialSearchPage() {
1414
   const [dateFrom, setDateFrom] = useState('');
1515
   const [dateTo, setDateTo] = useState('');
1616
   const [noDate, setNoDate] = useState(false);
17
+  const [hasDocument, setHasDocument] = useState(false);
1718
   
1819
   // Results state
1920
   const [results, setResults] = useState<PersonDetail[]>([]);
@@ -31,7 +32,7 @@ export default function MemorialSearchPage() {
3132
         // Get filters
3233
         const filterData = await getSearchFilters();
3334
         setFilters(filterData);
34
-        
35
+
3536
         // Load all people initially
3637
         const params = {
3738
           q: '',
@@ -39,9 +40,10 @@ export default function MemorialSearchPage() {
3940
           conflict: '',
4041
           date_from: '',
4142
           date_to: '',
42
-          no_date: false
43
+          no_date: false,
44
+          has_document: false
4345
         };
44
-        
46
+
4547
         const data = await searchPeople(params);
4648
         setResults(data.results);
4749
         setTotalCount(data.count);
@@ -50,14 +52,14 @@ export default function MemorialSearchPage() {
5052
         console.error('Failed to initialize:', err);
5153
       }
5254
     }
53
-    
55
+
5456
     initialize();
5557
   }, []);
5658
 
5759
   const performSearch = async () => {
5860
     setLoading(true);
5961
     setHasSearched(true);
60
-    
62
+
6163
     try {
6264
       const params = {
6365
         q: searchTerm,
@@ -65,9 +67,10 @@ export default function MemorialSearchPage() {
6567
         conflict: selectedConflicts.join(','),
6668
         date_from: dateFrom,
6769
         date_to: dateTo,
68
-        no_date: noDate
70
+        no_date: noDate,
71
+        has_document: hasDocument
6972
       };
70
-      
73
+
7174
       const data = await searchPeople(params);
7275
       setResults(data.results);
7376
       setTotalCount(data.count);
@@ -108,6 +111,7 @@ export default function MemorialSearchPage() {
108111
     setDateFrom('');
109112
     setDateTo('');
110113
     setNoDate(false);
114
+    setHasDocument(false);
111115
   };
112116
 
113117
   return (
@@ -130,6 +134,19 @@ export default function MemorialSearchPage() {
130134
               <h2 className="text-2xl font-bold text-vmi-red mb-6">Search Filters</h2>
131135
               
132136
               <form onSubmit={handleSubmit} className="space-y-6">
137
+                {/* Memorial Document Filter */}
138
+                <div>
139
+                  <label className="flex items-center cursor-pointer hover:bg-gray-50 p-2 rounded">
140
+                    <input
141
+                      type="checkbox"
142
+                      checked={hasDocument}
143
+                      onChange={(e) => setHasDocument(e.target.checked)}
144
+                      className="mr-3 text-vmi-red focus:ring-vmi-gold w-4 h-4"
145
+                    />
146
+                    <span className="text-sm font-bold text-gray-700">Memorial Document Available</span>
147
+                  </label>
148
+                </div>
149
+
133150
                 {/* Name Search */}
134151
                 <div>
135152
                   <label htmlFor="search" className="block text-sm font-bold text-gray-700 mb-2">
lib/api.tsmodified
@@ -126,6 +126,7 @@ export interface SearchParams {
126126
   date_from?: string;
127127
   date_to?: string;
128128
   no_date?: boolean;
129
+  has_document?: boolean;
129130
 }
130131
 
131132
 // Fetch all conflicts
@@ -169,14 +170,15 @@ export async function getMemorialIndex(): Promise<Conflict[]> {
169170
 // Search people with filters
170171
 export async function searchPeople(params: SearchParams): Promise<{ count: number; results: PersonDetail[] }> {
171172
   const queryParams = new URLSearchParams();
172
-  
173
+
173174
   if (params.q) queryParams.append('q', params.q);
174175
   if (params.class_year) queryParams.append('class_year', params.class_year);
175176
   if (params.conflict) queryParams.append('conflict', params.conflict);
176177
   if (params.date_from) queryParams.append('date_from', params.date_from);
177178
   if (params.date_to) queryParams.append('date_to', params.date_to);
178179
   if (params.no_date !== undefined) queryParams.append('no_date', params.no_date.toString());
179
-  
180
+  if (params.has_document !== undefined) queryParams.append('has_document', params.has_document.toString());
181
+
180182
   const response = await fetch(`${API_BASE_URL}/memorial/persons/search/?${queryParams.toString()}`);
181183
   if (!response.ok) {
182184
     throw new Error('Failed to search people');