mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-11-12 23:31:02 +00:00
47 lines
1.3 KiB
TypeScript
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 };
|
|
}
|