Merge pull request #382 from Luca-Timo/refactor/external-media-types
refactor(events): type external-media list response, drop any casts
This commit is contained in:
@@ -92,7 +92,7 @@ const FolderTreeNode: React.FC<{
|
||||
staleTime: 30_000
|
||||
});
|
||||
|
||||
const dirs: ExternalEntry[] = (data?.entries || []).filter((e: ExternalEntry) => e.type === 'dir');
|
||||
const dirs = (data?.entries || []).filter(e => e.type === 'dir');
|
||||
const showEmpty = isExpanded && !isLoading && !isError && dirs.length === 0;
|
||||
const indentStyle = { paddingLeft: depth * 16 + 4 };
|
||||
const childIndentStyle = { paddingLeft: (depth + 1) * 16 + 4 };
|
||||
@@ -158,7 +158,7 @@ const FolderTreeNode: React.FC<{
|
||||
{t('events.externalFolderEmpty', 'No subfolders')}
|
||||
</div>
|
||||
)}
|
||||
{dirs.map((d) => {
|
||||
{dirs.map(d => {
|
||||
const childPath = path ? `${path}/${d.name}` : d.name;
|
||||
return (
|
||||
<FolderTreeNode
|
||||
|
||||
@@ -1,22 +1,50 @@
|
||||
import { api } from '../config/api';
|
||||
|
||||
export interface ExternalEntry { name: string; type: 'dir' | 'file'; size?: number; mtime?: string }
|
||||
export interface ExternalEntry {
|
||||
name: string;
|
||||
type: 'dir' | 'file';
|
||||
size?: number;
|
||||
mtime?: string;
|
||||
}
|
||||
|
||||
export interface ExternalMediaListResponse {
|
||||
path: string;
|
||||
entries: ExternalEntry[];
|
||||
canNavigateUp: boolean;
|
||||
}
|
||||
|
||||
export interface ExternalMediaImportOptions {
|
||||
recursive?: boolean;
|
||||
map?: { individual?: string; collages?: string };
|
||||
}
|
||||
|
||||
export interface ExternalMediaImportResult {
|
||||
imported: number;
|
||||
skipped: number;
|
||||
thumbnailsQueued: number;
|
||||
}
|
||||
|
||||
export const externalMediaService = {
|
||||
async list(pathRel: string = ''): Promise<{ path: string; entries: ExternalEntry[]; canNavigateUp: boolean }> {
|
||||
async list(pathRel: string = ''): Promise<ExternalMediaListResponse> {
|
||||
const params = new URLSearchParams();
|
||||
if (pathRel) params.set('path', pathRel);
|
||||
const res = await api.get(`/admin/external-media/list?${params.toString()}`);
|
||||
const res = await api.get<ExternalMediaListResponse>(`/admin/external-media/list?${params.toString()}`);
|
||||
return res.data;
|
||||
},
|
||||
|
||||
async importEvent(eventId: number, externalPath: string, options?: { recursive?: boolean; map?: { individual?: string; collages?: string } }): Promise<{ imported: number; skipped: number; thumbnailsQueued: number }> {
|
||||
const res = await api.post(`/admin/external-media/events/${eventId}/import-external`, {
|
||||
external_path: externalPath,
|
||||
recursive: options?.recursive ?? true,
|
||||
map: options?.map
|
||||
});
|
||||
async importEvent(
|
||||
eventId: number,
|
||||
externalPath: string,
|
||||
options?: ExternalMediaImportOptions
|
||||
): Promise<ExternalMediaImportResult> {
|
||||
const res = await api.post<ExternalMediaImportResult>(
|
||||
`/admin/external-media/events/${eventId}/import-external`,
|
||||
{
|
||||
external_path: externalPath,
|
||||
recursive: options?.recursive ?? true,
|
||||
map: options?.map
|
||||
}
|
||||
);
|
||||
return res.data;
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user