Spaces:
Sleeping
Sleeping
| /** | |
| * Activity Tracker - Records and retrieves recent user actions. | |
| * | |
| * Activities are stored in localStorage with a configurable maximum | |
| * count. Each entry includes a type, description, timestamp, and | |
| * optional metadata. Components call `trackActivity()` to log | |
| * actions; the HomePage reads them via `getRecentActivities()`. | |
| */ | |
| import storage from "./storage"; | |
| const STORAGE_KEY = "farmhelp_recent_activity"; | |
| const MAX_ACTIVITIES = 20; | |
| /** | |
| * @typedef {Object} Activity | |
| * @property {string} id - Unique identifier. | |
| * @property {string} type - Activity type (disease, weather, apmc, voice, search). | |
| * @property {string} title - Short title. | |
| * @property {string} description - Human-readable description. | |
| * @property {string} timestamp - ISO 8601 timestamp. | |
| * @property {string} [route] - Optional route for navigation. | |
| * @property {Object} [meta] - Optional metadata. | |
| */ | |
| /** | |
| * Track a user activity. | |
| * | |
| * @param {Object} params | |
| * @param {string} params.type - Activity category. | |
| * @param {string} params.title - Short title. | |
| * @param {string} params.description - Description text. | |
| * @param {string} [params.route] - Optional route to navigate. | |
| * @param {Object} [params.meta] - Optional extra data. | |
| */ | |
| export function trackActivity({ type, title, description, route, meta }) { | |
| const activities = storage.get(STORAGE_KEY, []); | |
| const entry = { | |
| id: `act_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`, | |
| type, | |
| title, | |
| description, | |
| timestamp: new Date().toISOString(), | |
| route: route || null, | |
| meta: meta || null, | |
| }; | |
| const updated = [entry, ...activities].slice(0, MAX_ACTIVITIES); | |
| storage.set(STORAGE_KEY, updated); | |
| return entry; | |
| } | |
| /** | |
| * Retrieve recent activities. | |
| * | |
| * @param {number} [limit=10] - Maximum number of activities to return. | |
| * @returns {Activity[]} Array of recent activities (newest first). | |
| */ | |
| export function getRecentActivities(limit = 10) { | |
| const activities = storage.get(STORAGE_KEY, []); | |
| return activities.slice(0, limit); | |
| } | |
| /** | |
| * Clear all stored activities. | |
| */ | |
| export function clearActivities() { | |
| storage.remove(STORAGE_KEY); | |
| } | |
| /** | |
| * Activity type constants. | |
| */ | |
| export const ACTIVITY_TYPES = { | |
| DISEASE: "disease", | |
| WEATHER: "weather", | |
| APMC: "apmc", | |
| VOICE: "voice", | |
| SEARCH: "search", | |
| }; | |