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