mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-04 01:18:34 +00:00
ui-pagescene: extend adapter with media-listing/cdn-url/toast slots
Adds the surface AssetMenu needs to live in the lib without importing artcraft-host APIs: - listUserMediaFiles / listFeaturedMediaFiles — paginated media listings backed by MediaFilesApi - getCdnUrl — wraps host BucketConfig for thumbnail composition - showToast — wraps host addToast / react-hot-toast pipeline useTauriPageSceneAdapter wires all four to the existing artcraft host plumbing (~/Classes/ApiManager/MediaFilesApi, ~/api/BucketConfig, ~/signals/addToast). No call sites yet — the AssetMenu file move that consumes these is the next step. Typecheck stays at 58.
This commit is contained in:
1 parent
05097945f6
commit
3e7c67abce
4 files changed
+99
-1
No files matched your search
@@ -21,8 +21,12 @@ import {
|
||||
UploadImageMedia,
|
||||
} from "@storyteller/api";
|
||||
import type { PageSceneAdapter } from "@storyteller/ui-pagescene";
|
||||
import { ToastTypes } from "@storyteller/ui-pagescene";
|
||||
import { GetCdnOrigin } from "~/api/GetCdnOrigin";
|
||||
import { BucketConfig } from "~/api/BucketConfig";
|
||||
import { MediaFilesApi as ArtcraftMediaFilesApi } from "~/Classes/ApiManager";
|
||||
import {
|
||||
addToast,
|
||||
authentication,
|
||||
pageHeight,
|
||||
pageWidth,
|
||||
@@ -229,6 +233,44 @@ export const useTauriPageSceneAdapter = (
|
||||
getCurrentUserToken: () =>
|
||||
authentication.userInfo.value?.user_token,
|
||||
|
||||
getCdnUrl: (bucketPath, width, quality) =>
|
||||
new BucketConfig().getCdnUrl(bucketPath, width, quality),
|
||||
|
||||
listUserMediaFiles: async (query) => {
|
||||
const api = new ArtcraftMediaFilesApi();
|
||||
const response = await api.ListUserMediaFiles({
|
||||
page_size: query.pageSize,
|
||||
page_index: query.pageIndex,
|
||||
filter_engine_categories: query.filterEngineCategories,
|
||||
filter_media_type: query.filterMediaTypes,
|
||||
});
|
||||
return {
|
||||
success: response.success,
|
||||
data: response.data,
|
||||
pagination: response.pagination,
|
||||
errorMessage: response.errorMessage,
|
||||
};
|
||||
},
|
||||
|
||||
listFeaturedMediaFiles: async (query) => {
|
||||
const api = new ArtcraftMediaFilesApi();
|
||||
const response = await api.ListFeaturedMediaFiles({
|
||||
page_size: query.pageSize,
|
||||
cursor: query.cursor,
|
||||
filter_engine_categories: query.filterEngineCategories,
|
||||
filter_media_type: query.filterMediaTypes,
|
||||
});
|
||||
return {
|
||||
success: response.success,
|
||||
data: response.data,
|
||||
pagination: response.pagination,
|
||||
errorMessage: response.errorMessage,
|
||||
};
|
||||
},
|
||||
|
||||
showToast: (level: ToastTypes, message: string) =>
|
||||
addToast(level, message),
|
||||
|
||||
getMediaUrlByToken: async (token) => {
|
||||
const mediaFilesApi = new MediaFilesApi();
|
||||
const response = await mediaFilesApi.GetMediaFileByToken({
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/@remix-run/node/dist/globals.d.ts","../../node_modules/@types/cookie/index.d.ts","../../node_modules/@remix-run/server-runtime/dist/crypto.d.ts","../../node_modules/@remix-run/server-runtime/dist/cookies.d.ts","../../node_modules/@remix-run/server-runtime/dLine truncated
|
||||
{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/@remix-run/node/dist/globals.d.ts","../../node_modules/@types/cookie/index.d.ts","../../node_modules/@remix-run/server-runtime/dist/crypto.d.ts","../../node_modules/@remix-run/server-runtime/dist/cookies.d.ts","../../node_modules/@remix-run/server-runtime/dLine truncated
|
||||
@@ -5,6 +5,9 @@ export type {
|
||||
PageSceneAdapter,
|
||||
PageSceneGenerateRequest,
|
||||
PageSceneSavePayload,
|
||||
ListMediaFilesQuery,
|
||||
ListUserMediaFilesResult,
|
||||
ListFeaturedMediaFilesResult,
|
||||
} from "./lib/adapter";
|
||||
|
||||
// Store
|
||||
|
||||
@@ -15,6 +15,13 @@ import type {
|
||||
ImageModel,
|
||||
} from "@storyteller/model-list";
|
||||
import type { GenerationProvider } from "@storyteller/api-enums";
|
||||
import type {
|
||||
FilterEngineCategories,
|
||||
FilterMediaType,
|
||||
ToastTypes,
|
||||
} from "./enums";
|
||||
import type { MediaInfo } from "./models/mediaInfo";
|
||||
import type { Pagination, PaginationInfinite } from "./models/pagination";
|
||||
|
||||
// ─── Generation ────────────────────────────────────────────────────────
|
||||
|
||||
@@ -31,6 +38,30 @@ export interface PageSceneGenerateRequest {
|
||||
frontendSubscriberId?: string;
|
||||
}
|
||||
|
||||
// ─── Media listing (AssetMenu) ─────────────────────────────────────────
|
||||
|
||||
export interface ListMediaFilesQuery {
|
||||
pageSize: number;
|
||||
pageIndex?: number; // user-list pagination
|
||||
cursor?: string; // featured-list infinite pagination
|
||||
filterEngineCategories: FilterEngineCategories[];
|
||||
filterMediaTypes?: FilterMediaType[];
|
||||
}
|
||||
|
||||
export interface ListUserMediaFilesResult {
|
||||
success: boolean;
|
||||
data?: MediaInfo[];
|
||||
pagination?: Pagination;
|
||||
errorMessage?: string;
|
||||
}
|
||||
|
||||
export interface ListFeaturedMediaFilesResult {
|
||||
success: boolean;
|
||||
data?: MediaInfo[];
|
||||
pagination?: PaginationInfinite;
|
||||
errorMessage?: string;
|
||||
}
|
||||
|
||||
// ─── Scene I/O ─────────────────────────────────────────────────────────
|
||||
|
||||
export interface PageSceneSavePayload {
|
||||
@@ -63,6 +94,28 @@ export interface PageSceneAdapter {
|
||||
getApiSchemeAndHost(): string;
|
||||
getCurrentUserToken?(): string | undefined;
|
||||
|
||||
// Compose a CDN URL for a bucket path with optional width/quality
|
||||
// resize hints. Wraps the host's BucketConfig.getCdnUrl. AssetMenu
|
||||
// uses this to build asset thumbnails at small sizes.
|
||||
getCdnUrl(bucketPath: string, width?: number, quality?: number): string;
|
||||
|
||||
// Paginated media-file listing — backs AssetMenu's "My objects" tab.
|
||||
// Wraps the host's MediaFilesApi.ListUserMediaFiles.
|
||||
listUserMediaFiles(
|
||||
query: ListMediaFilesQuery,
|
||||
): Promise<ListUserMediaFilesResult>;
|
||||
|
||||
// Cursor-paginated featured listing — backs AssetMenu's "Featured"
|
||||
// tabs (skybox, character, location, etc.). Wraps the host's
|
||||
// MediaFilesApi.ListFeaturedMediaFiles.
|
||||
listFeaturedMediaFiles(
|
||||
query: ListMediaFilesQuery,
|
||||
): Promise<ListFeaturedMediaFilesResult>;
|
||||
|
||||
// Toast notifications. Wraps the host's addToast / react-hot-toast
|
||||
// pipeline; the lib stays free of toast-library imports.
|
||||
showToast(level: ToastTypes, message: string): void;
|
||||
|
||||
// Resolve a media_file_token to its CDN URL. Wraps the host's
|
||||
// MediaFilesApi.GetMediaFileByToken. Used by Scene's asset loaders
|
||||
// when they only have the token, not the full URL.
|
||||
|
||||
Reference in new issue
Block a user