diff --git a/app/.gitignore b/app/.gitignore index 863eab7..88683bb 100644 --- a/app/.gitignore +++ b/app/.gitignore @@ -1,3 +1,4 @@ playwright-report test-results -bknd.config.* \ No newline at end of file +bknd.config.* +app/__test__/helper.d.ts \ No newline at end of file diff --git a/app/src/modules/Controller.ts b/app/src/modules/Controller.ts index df78adf..95023fc 100644 --- a/app/src/modules/Controller.ts +++ b/app/src/modules/Controller.ts @@ -1,6 +1,7 @@ import type { App } from "App"; import { type Context, Hono } from "hono"; import * as middlewares from "modules/middlewares"; +import type { SafeUser } from "auth"; export type ServerEnv = { Variables: { @@ -10,7 +11,7 @@ export type ServerEnv = { resolved: boolean; registered: boolean; skip: boolean; - user?: { id: any; role?: string; [key: string]: any }; + user?: SafeUser; }; html?: string; }; diff --git a/app/src/ui/elements/media/DropzoneContainer.tsx b/app/src/ui/elements/media/DropzoneContainer.tsx index f596e92..5b724c3 100644 --- a/app/src/ui/elements/media/DropzoneContainer.tsx +++ b/app/src/ui/elements/media/DropzoneContainer.tsx @@ -11,7 +11,7 @@ import { useRef, useState, } from "react"; -import { useApi, useApiInfiniteQuery, useInvalidate } from "ui/client"; +import { useApi, useApiInfiniteQuery, useApiQuery, useInvalidate } from "ui/client"; import { useEvent } from "ui/hooks/use-event"; import { Dropzone, type DropzoneProps, type DropzoneRenderProps, type FileState } from "./Dropzone"; import { mediaItemsToFileStates } from "./helper"; @@ -20,6 +20,7 @@ import { useInViewport } from "@mantine/hooks"; export type DropzoneContainerProps = { children?: ReactNode; initialItems?: MediaFieldSchema[] | false; + infinite?: boolean; entity?: { name: string; id: number; @@ -39,6 +40,7 @@ export function DropzoneContainer({ query, children, randomFilename, + infinite = false, ...props }: DropzoneContainerProps) { const id = useId(); @@ -54,7 +56,7 @@ export function DropzoneContainer({ const entity_name = (media?.entity_name ?? "media") as "media"; //console.log("dropzone:baseUrl", baseUrl); - const selectApi = (api: Api, page: number) => + const selectApi = (api: Api, page: number = 0) => entity ? api.data.readManyByReference(entity.name, entity.id, entity.field, { ...query, @@ -70,7 +72,11 @@ export function DropzoneContainer({ ...defaultQuery(page), }); - const $q = useApiInfiniteQuery(selectApi, {}); + const $q = infinite + ? useApiInfiniteQuery(selectApi, {}) + : useApiQuery(selectApi, { + enabled: initialItems !== false && !initialItems, + }); const getUploadInfo = useEvent((file) => { const url = entity @@ -108,11 +114,17 @@ export function DropzoneContainer({ autoUpload initialItems={_initialItems} footer={ -