mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-11-13 15:51:00 +00:00
5ee7cc052c
The declared field form with its save, the actions and their confirm state, the OAuth connect and disconnect and the activity log now live in usePluginUserSettings, usePluginOAuth and usePluginActivity. Each shell keeps its own form, confirm dialog or sheet and picker.
44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
import { useEffect, useState } from 'react';
|
|
import { pluginsApi } from '../../api/client';
|
|
import { useTranslation } from '../../i18n';
|
|
|
|
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 [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 : d.toLocaleString(locale);
|
|
};
|
|
|
|
return { rows, loading, load, fmtWhen };
|
|
}
|