feat: pagina inbox e valida tokens do companion

This commit is contained in:
Felipe Coutinho
2026-03-20 18:40:13 +00:00
parent 3c31ee5d90
commit 29551ee02f
12 changed files with 451 additions and 185 deletions

View File

@@ -0,0 +1,49 @@
import type { InboxPaginationState, InboxStatus } from "./components/types";
export type ResolvedInboxSearchParams =
| Record<string, string | string[] | undefined>
| undefined;
export const INBOX_DEFAULT_PAGE_SIZE = 12;
export const INBOX_PAGE_SIZE_OPTIONS = [12, 24, 48];
export const INBOX_STATUSES = ["pending", "processed", "discarded"] as const;
export const getSingleParam = (
params: ResolvedInboxSearchParams,
key: string,
): string | null => {
const value = params?.[key];
if (!value) {
return null;
}
return Array.isArray(value) ? (value[0] ?? null) : value;
};
export const resolveInboxStatus = (
params: ResolvedInboxSearchParams,
): InboxStatus => {
const status = getSingleParam(params, "status");
return INBOX_STATUSES.includes(status as InboxStatus)
? (status as InboxStatus)
: "pending";
};
export const resolveInboxPagination = (
params: ResolvedInboxSearchParams,
): Pick<InboxPaginationState, "page" | "pageSize"> => {
const pageParam = Number.parseInt(getSingleParam(params, "page") ?? "", 10);
const pageSizeParam = Number.parseInt(
getSingleParam(params, "pageSize") ?? "",
10,
);
return {
page: Number.isFinite(pageParam) && pageParam > 0 ? pageParam : 1,
pageSize: INBOX_PAGE_SIZE_OPTIONS.includes(pageSizeParam)
? pageSizeParam
: INBOX_DEFAULT_PAGE_SIZE,
};
};