diff --git a/frontend/libs/api/src/index.ts b/frontend/libs/api/src/index.ts index 0b50185174..943d3ff160 100644 --- a/frontend/libs/api/src/index.ts +++ b/frontend/libs/api/src/index.ts @@ -1,3 +1,4 @@ +export * from "./lib/enums/index.js"; export * from "./lib/AnalyticsApi.js"; export * from "./lib/BillingApi.js"; export * from "./lib/CommentsApi.js"; @@ -14,3 +15,5 @@ export * from "./lib/UserBookmarksApi.js"; export * from "./lib/UsersApi.js"; export * from "./lib/VideoApi.js"; export * from "./lib/WeightsApi.js"; +export * from "./lib/GetCdnOrigin.js"; +export * from "./lib/LibraryModalApi.js"; diff --git a/frontend/libs/api/src/lib/GetCdnOrigin.ts b/frontend/libs/api/src/lib/GetCdnOrigin.ts new file mode 100644 index 0000000000..5d604bc745 --- /dev/null +++ b/frontend/libs/api/src/lib/GetCdnOrigin.ts @@ -0,0 +1,45 @@ +// import { GetFrontendEnvironment } from "~/Classes/GetFrontendEnvironment"; + +/** + * Return the CDN origin (scheme + host + optional port, but no path) + * See: https://web.dev/articles/url-parts + * + * TODO(bt,2025-02-10): Make this easier to configure in development + */ +// class CdnHostHelper { +// private static instance: CdnHostHelper; +// private readonly origin: string; + +// public static getInstance(): CdnHostHelper { +// if (CdnHostHelper.instance !== undefined) { +// return CdnHostHelper.instance; +// } + +// const isLocalDev = GetFrontendEnvironment().getIsLocalDev(); + +// let origin; +// if (isLocalDev) { +// //origin = 'https://pub-c8a4a5bdbdb048f286b77bdf9f786ff2.r2.dev'; +// origin = "https://cdn-2.fakeyou.com"; +// } else { +// origin = "https://cdn-2.fakeyou.com"; +// } +// const instance = new CdnHostHelper(origin); +// CdnHostHelper.instance = instance; +// return instance; +// } + +// public getOrigin(): string { +// return this.origin; +// } + +// private constructor(origin: string) { +// this.origin = origin; +// } +// } + +// TODO(bt,2025-02-10): Consolidate all of this logic. +export function GetCdnOrigin(): string { + // return CdnHostHelper.getInstance().getOrigin(); + return "https://cdn-2.fakeyou.com"; +} diff --git a/frontend/libs/api/src/lib/LibraryModalApi.ts b/frontend/libs/api/src/lib/LibraryModalApi.ts new file mode 100644 index 0000000000..b23f1f208f --- /dev/null +++ b/frontend/libs/api/src/lib/LibraryModalApi.ts @@ -0,0 +1,30 @@ +import { MediaFilesApi } from "lib/MediaFilesApi.js"; +import { + FilterMediaClasses, + FilterMediaType, + FilterEngineCategories, +} from "lib/enums/QueryFilters.js"; + +interface ListUserMediaQuery { + include_user_uploads?: boolean; + filter_media_classes?: FilterMediaClasses[]; + filter_media_type?: FilterMediaType[]; + filter_engine_categories?: FilterEngineCategories[]; + page?: number; + limit?: number; +} + +export class LibraryModalApi extends MediaFilesApi { + constructor() { + super(); + } + + public async listUserMediaFiles(query: ListUserMediaQuery) { + return await this.ListUserMediaFiles({ + ...query, + filter_media_classes: query.filter_media_classes, + filter_media_type: query.filter_media_type, + filter_engine_categories: query.filter_engine_categories, + }); + } +} diff --git a/frontend/libs/api/src/lib/enums/index.ts b/frontend/libs/api/src/lib/enums/index.ts new file mode 100644 index 0000000000..d12abd895f --- /dev/null +++ b/frontend/libs/api/src/lib/enums/index.ts @@ -0,0 +1 @@ +export * from "./QueryFilters.js"; diff --git a/frontend/libs/api/tsconfig.lib.json b/frontend/libs/api/tsconfig.lib.json index ca7b9c5a28..638d84e290 100644 --- a/frontend/libs/api/tsconfig.lib.json +++ b/frontend/libs/api/tsconfig.lib.json @@ -2,6 +2,9 @@ "extends": "../../tsconfig.base.json", "compilerOptions": { "baseUrl": ".", + "paths": { + "lib/*": ["./src/lib/*"] + }, "rootDir": "src", "outDir": "dist", "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo", diff --git a/frontend/libs/components/gallery-modal/src/lib/gallery-modal.tsx b/frontend/libs/components/gallery-modal/src/lib/gallery-modal.tsx index 5b6b979894..08b7125e24 100644 --- a/frontend/libs/components/gallery-modal/src/lib/gallery-modal.tsx +++ b/frontend/libs/components/gallery-modal/src/lib/gallery-modal.tsx @@ -7,9 +7,11 @@ import { Button } from "@storyteller/ui-button"; import { CloseButton } from "@storyteller/ui-close-button"; import { LoadingSpinner } from "@storyteller/ui-loading-spinner"; import React, { useState, useEffect, useCallback, useMemo } from "react"; -import { LibraryModalApi } from "./LibraryModalApi"; -import { FilterMediaClasses } from "../../../../enums"; -import { GetCdnOrigin } from "~/api/GetCdnOrigin"; +import { + GetCdnOrigin, + FilterMediaClasses, + LibraryModalApi, +} from "@storyteller/api"; import { twMerge } from "tailwind-merge"; export interface LibraryItem {