renamed field to file for consistency for receipts
This commit is contained in:
parent
5a453db3a4
commit
5fd2eb67a0
5 changed files with 21 additions and 16 deletions
|
@ -6,7 +6,7 @@ import { motion, AnimatePresence } from 'framer-motion';
|
||||||
import type { ItemizedExpense } from '../../../schemas/pocketbase';
|
import type { ItemizedExpense } from '../../../schemas/pocketbase';
|
||||||
|
|
||||||
interface ReceiptFormData {
|
interface ReceiptFormData {
|
||||||
field: File;
|
file: File;
|
||||||
itemized_expenses: ItemizedExpense[];
|
itemized_expenses: ItemizedExpense[];
|
||||||
tax: number;
|
tax: number;
|
||||||
date: string;
|
date: string;
|
||||||
|
@ -134,7 +134,7 @@ export default function ReceiptForm({ onSubmit, onCancel }: ReceiptFormProps) {
|
||||||
}
|
}
|
||||||
|
|
||||||
onSubmit({
|
onSubmit({
|
||||||
field: file,
|
file: file,
|
||||||
itemized_expenses: itemizedExpenses,
|
itemized_expenses: itemizedExpenses,
|
||||||
tax,
|
tax,
|
||||||
date,
|
date,
|
||||||
|
|
|
@ -10,7 +10,7 @@ import FilePreview from '../universal/FilePreview';
|
||||||
import type { ItemizedExpense, Reimbursement, Receipt } from '../../../schemas/pocketbase';
|
import type { ItemizedExpense, Reimbursement, Receipt } from '../../../schemas/pocketbase';
|
||||||
|
|
||||||
interface ReceiptFormData {
|
interface ReceiptFormData {
|
||||||
field: File;
|
file: File;
|
||||||
itemized_expenses: ItemizedExpense[];
|
itemized_expenses: ItemizedExpense[];
|
||||||
tax: number;
|
tax: number;
|
||||||
date: string;
|
date: string;
|
||||||
|
@ -182,7 +182,7 @@ export default function ReimbursementForm() {
|
||||||
|
|
||||||
// Create receipt record
|
// Create receipt record
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append('field', receiptData.field);
|
formData.append('file', receiptData.file);
|
||||||
formData.append('created_by', userId);
|
formData.append('created_by', userId);
|
||||||
formData.append('itemized_expenses', JSON.stringify(receiptData.itemized_expenses));
|
formData.append('itemized_expenses', JSON.stringify(receiptData.itemized_expenses));
|
||||||
formData.append('tax', receiptData.tax.toString());
|
formData.append('tax', receiptData.tax.toString());
|
||||||
|
@ -636,8 +636,8 @@ export default function ReimbursementForm() {
|
||||||
</div>
|
</div>
|
||||||
<div className="bg-base-200/50 backdrop-blur-sm rounded-lg p-4 shadow-sm">
|
<div className="bg-base-200/50 backdrop-blur-sm rounded-lg p-4 shadow-sm">
|
||||||
<FilePreview
|
<FilePreview
|
||||||
url={URL.createObjectURL(selectedReceiptDetails.field)}
|
url={URL.createObjectURL(selectedReceiptDetails.file)}
|
||||||
filename={selectedReceiptDetails.field.name}
|
filename={selectedReceiptDetails.file.name}
|
||||||
isModal={false}
|
isModal={false}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -23,6 +23,7 @@ interface ReimbursementRequest extends Omit<Reimbursement, 'audit_notes'> {
|
||||||
|
|
||||||
// Extended Receipt interface with component-specific properties
|
// Extended Receipt interface with component-specific properties
|
||||||
interface ReceiptDetails extends Omit<Receipt, 'itemized_expenses' | 'audited_by'> {
|
interface ReceiptDetails extends Omit<Receipt, 'itemized_expenses' | 'audited_by'> {
|
||||||
|
file: string;
|
||||||
itemized_expenses: ItemizedExpense[];
|
itemized_expenses: ItemizedExpense[];
|
||||||
audited_by: string[];
|
audited_by: string[];
|
||||||
created: string;
|
created: string;
|
||||||
|
@ -210,7 +211,7 @@ export default function ReimbursementList() {
|
||||||
...prevMap,
|
...prevMap,
|
||||||
[receiptId]: {
|
[receiptId]: {
|
||||||
id: receiptRecord.id,
|
id: receiptRecord.id,
|
||||||
field: receiptRecord.field,
|
file: receiptRecord.file,
|
||||||
created_by: receiptRecord.created_by,
|
created_by: receiptRecord.created_by,
|
||||||
date: receiptRecord.date,
|
date: receiptRecord.date,
|
||||||
location_name: receiptRecord.location_name,
|
location_name: receiptRecord.location_name,
|
||||||
|
@ -248,9 +249,9 @@ export default function ReimbursementList() {
|
||||||
setSelectedReceipt(receiptDetailsMap[receiptId]);
|
setSelectedReceipt(receiptDetailsMap[receiptId]);
|
||||||
|
|
||||||
// Get the file URL using the PocketBase URL and collection info
|
// Get the file URL using the PocketBase URL and collection info
|
||||||
const url = `${pb.baseUrl}/api/files/receipts/${receiptId}/${receiptDetailsMap[receiptId].field}`;
|
const url = `${pb.baseUrl}/api/files/receipts/${receiptId}/${receiptDetailsMap[receiptId].file}`;
|
||||||
setPreviewUrl(url);
|
setPreviewUrl(url);
|
||||||
setPreviewFilename(receiptDetailsMap[receiptId].field);
|
setPreviewFilename(receiptDetailsMap[receiptId].file);
|
||||||
setShowPreview(true);
|
setShowPreview(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -268,7 +269,7 @@ export default function ReimbursementList() {
|
||||||
|
|
||||||
const receiptDetails: ReceiptDetails = {
|
const receiptDetails: ReceiptDetails = {
|
||||||
id: receiptRecord.id,
|
id: receiptRecord.id,
|
||||||
field: receiptRecord.field,
|
file: receiptRecord.file,
|
||||||
created_by: receiptRecord.created_by,
|
created_by: receiptRecord.created_by,
|
||||||
itemized_expenses: itemizedExpenses,
|
itemized_expenses: itemizedExpenses,
|
||||||
tax: receiptRecord.tax,
|
tax: receiptRecord.tax,
|
||||||
|
@ -290,9 +291,9 @@ export default function ReimbursementList() {
|
||||||
setSelectedReceipt(receiptDetails);
|
setSelectedReceipt(receiptDetails);
|
||||||
|
|
||||||
// Get the file URL using the PocketBase URL and collection info
|
// Get the file URL using the PocketBase URL and collection info
|
||||||
const url = `${pb.baseUrl}/api/files/receipts/${receiptRecord.id}/${receiptRecord.field}`;
|
const url = `${pb.baseUrl}/api/files/receipts/${receiptRecord.id}/${receiptRecord.file}`;
|
||||||
setPreviewUrl(url);
|
setPreviewUrl(url);
|
||||||
setPreviewFilename(receiptRecord.field);
|
setPreviewFilename(receiptRecord.file);
|
||||||
setShowPreview(true);
|
setShowPreview(true);
|
||||||
} else {
|
} else {
|
||||||
throw new Error('Receipt not found');
|
throw new Error('Receipt not found');
|
||||||
|
|
|
@ -464,9 +464,13 @@ export default function ReimbursementManagementPortal() {
|
||||||
};
|
};
|
||||||
|
|
||||||
const getReceiptUrl = (receipt: ExtendedReceipt): string => {
|
const getReceiptUrl = (receipt: ExtendedReceipt): string => {
|
||||||
const auth = Authentication.getInstance();
|
try {
|
||||||
const pb = auth.getPocketBase();
|
const pb = Authentication.getInstance().getPocketBase();
|
||||||
return pb.files.getURL(receipt, receipt.field);
|
return pb.files.getURL(receipt, receipt.file);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error getting receipt URL:', error);
|
||||||
|
return '';
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Add this function to get the user avatar URL
|
// Add this function to get the user avatar URL
|
||||||
|
|
|
@ -150,7 +150,7 @@ export interface Reimbursement extends BaseRecord {
|
||||||
* Collection ID: pbc_1571142587
|
* Collection ID: pbc_1571142587
|
||||||
*/
|
*/
|
||||||
export interface Receipt extends BaseRecord {
|
export interface Receipt extends BaseRecord {
|
||||||
field: string;
|
file: string; // Single file
|
||||||
created_by: string; // Relation to User
|
created_by: string; // Relation to User
|
||||||
itemized_expenses: string; // JSON string of ItemizedExpense[]
|
itemized_expenses: string; // JSON string of ItemizedExpense[]
|
||||||
tax: number;
|
tax: number;
|
||||||
|
|
Loading…
Reference in a new issue