feat: add feature notification

This commit is contained in:
2026-02-23 11:09:57 +03:30
parent c2b55647aa
commit d65b73a593
8 changed files with 743 additions and 2 deletions
+64
View File
@@ -0,0 +1,64 @@
import { apiClient } from './client';
import { Reminder, CreateReminderData, UpdateReminderData, ApiResponse } from '@/types/reminder';
export const remindersApi = {
// Get all reminders for a package
getReminders: async (packageName: string, token: string): Promise<Reminder[]> => {
return apiClient.get<Reminder[]>(`/package-names/${packageName}/reminders`, token);
},
// Get single reminder
getReminder: async (packageName: string, reminderId: number, token: string): Promise<Reminder> => {
return apiClient.get<Reminder>(`/package-names/${packageName}/reminders/${reminderId}`, token);
},
// Create new reminder
createReminder: async (packageName: string, data: CreateReminderData, token: string): Promise<ApiResponse<Reminder>> => {
const formData = new FormData();
// Append all fields to FormData
Object.entries(data).forEach(([key, value]) => {
if (value !== null && value !== undefined) {
if (key === 'data' && typeof value === 'object') {
formData.append(key, JSON.stringify(value));
} else {
formData.append(key, String(value));
}
}
});
return apiClient.post<ApiResponse<Reminder>>(`/package-names/${packageName}/reminders`, formData, token);
},
// Update reminder (using PUT)
updateReminder: async (packageName: string, reminderId: number, data: UpdateReminderData, token: string): Promise<ApiResponse<Reminder>> => {
return apiClient.put<ApiResponse<Reminder>>(
`/package-names/${packageName}/reminders/${reminderId}`,
data,
token
);
},
// Delete reminder
deleteReminder: async (packageName: string, reminderId: number, token: string): Promise<ApiResponse<any>> => {
return apiClient.delete<ApiResponse<any>>(`/package-names/${packageName}/reminders/${reminderId}`, undefined, token);
},
// Alternative update method using POST with _method spoofing (if PUT is not supported)
updateReminderWithSpoof: async (packageName: string, reminderId: number, data: UpdateReminderData, token: string): Promise<ApiResponse<Reminder>> => {
const formData = new FormData();
formData.append('_method', 'PUT');
Object.entries(data).forEach(([key, value]) => {
if (value !== null && value !== undefined) {
if (key === 'data' && typeof value === 'object') {
formData.append(key, JSON.stringify(value));
} else {
formData.append(key, String(value));
}
}
});
return apiClient.post<ApiResponse<Reminder>>(`/package-names/${packageName}/reminders/${reminderId}`, formData, token);
}
};
+14
View File
@@ -49,4 +49,18 @@ export const getEmail = (email: string | null): string => {
export const getMobile = (mobile: string | null): string => {
return mobile || 'شماره موبایل ثبت نشده';
};
export const formatTime = (dateString: string | null): string => {
if (!dateString) return '';
try {
const date = new Date(dateString);
return new Intl.DateTimeFormat('fa-IR', {
hour: '2-digit',
minute: '2-digit',
}).format(date);
} catch {
return '';
}
};