Files
TREK/client/src/components/Settings/usePluginActivity.ts
T

47 lines
1.3 KiB
TypeScript

import { useEffect, useState } from 'react';
import { pluginsApi } from '../../api/client';
import { useDateFormat } from '../../hooks/useDateFormat';
import { useTranslation } from '../../i18n';
import { formatDisplayDateTime } from '../../utils/dateFormat';
export interface ActivityRow {
ts: string;
plugin_id: string;
plugin_name: string | null;
method: string;
resource: string | null;
code: string;
}
/**
* The signed-in user's own plugin activity log behind the desktop panel and the
* phone card: loaded on mount and on refresh, newest first. Fail-safe: a failed
* load leaves an empty list, never an error.
*/
export function usePluginActivity() {
const { locale } = useTranslation();
const dateFormat = useDateFormat();
const [rows, setRows] = useState<ActivityRow[]>([]);
const [loading, setLoading] = useState(true);
const load = () => {
setLoading(true);
pluginsApi
.myActivity()
.then((r) => setRows(r.activity))
.catch(() => setRows([]))
.finally(() => setLoading(false));
};
useEffect(() => {
load();
}, []);
const fmtWhen = (ts: string): string => {
const d = new Date(ts);
return Number.isNaN(d.getTime()) ? ts : formatDisplayDateTime(d, locale, {}, dateFormat);
};
return { rows, loading, load, fmtWhen };
}