+
+
All Photos
+
+
+
+
+
+ {sortBy === "custom" && (
+ {
+ if (e.target.value) setSortBy(e.target.value);
+ }}
+ onKeyDown={(e) => {
+ if (e.key === 'Enter') {
+ setSortBy(e.currentTarget.value);
+ }
+ }}
+ />
+ )}
+
+
+
+
+
+ {/* Advanced Filters */}
+
+ Add Filter:
+
- {sortBy === "custom" && (
+ {filterField === 'custom' && (
{
- if (e.target.value) setSortBy(e.target.value);
- }}
- onKeyDown={(e) => {
- if (e.key === 'Enter') {
- setSortBy(e.currentTarget.value);
- }
- }}
+ className="border rounded px-2 py-1 text-sm w-[120px]"
+ placeholder="Field name"
+ value={customFieldName}
+ onChange={(e) => setCustomFieldName(e.target.value)}
/>
)}
-
+
+ {/* Active Filters List */}
+ {filters.length > 0 && (
+
+ {filters.map((f, i) => (
+
+ {f.replace(/:/g, ' ')}
+
+
+ ))}
+
+ )}
{isLoading && Loading photos...
}
diff --git a/libertas-frontend/src/services/media-service.ts b/libertas-frontend/src/services/media-service.ts
index d0df003..af726fe 100644
--- a/libertas-frontend/src/services/media-service.ts
+++ b/libertas-frontend/src/services/media-service.ts
@@ -1,12 +1,13 @@
import type { Media, MediaDetails, PaginatedResponse } from "@/domain/types"
import apiClient from "@/services/api-client"
-type MediaListParams = {
- page: number;
- limit: number;
+export interface MediaListParams {
+ page?: number;
+ limit?: number;
sort_by?: string;
- order?: "asc" | "desc";
+ order?: 'asc' | 'desc';
mime_type?: string;
+ filters?: string[];
};
const API_PREFIX = import.meta.env.VITE_PREFIX_PATH || "";
@@ -28,10 +29,20 @@ export const getMediaList = async ({
sort_by,
order,
mime_type,
+ filters,
}: MediaListParams): Promise