このコミットが含まれているのは:
2026-10-26 21:24:32 +09:00
コミット 2563b3fef3
21個のファイルの変更、703行の追加、54行の削除
+33 -11
ファイルの表示
@@ -206,10 +206,16 @@ export const selectedCountColumns = (
params: URLSearchParams,
definition?: CountsDefinition,
): CountColumn[] => {
const selected = params.has ('columns') ? params.get ('columns')!.split (',') :
columnsForCounts (resource, definition).filter (key => ![
'thumbnail', 'original_created_from', 'original_created_before']
.includes (key))
const common = ['resource_id', 'version_no', 'event_type', 'user', 'created_at']
const defaults: Record<CountsResource, string[]> = {
posts: ['title', 'url', 'tags', 'parents', 'video_ms'],
tags: ['name', 'category', 'aliases', 'parents'],
nico_tags: ['name', 'linked_tags'],
tag_descriptions: ['language_code', 'body', 'source_language_code'],
tag_groups: ['name', 'description', 'members'],
materials: ['url', 'source_kind', 'tag_id'] }
const selected = params.has ('columns') ? params.get ('columns')!.split (',')
: [...common, ...defaults[resource]]
return orderedCountFields (fieldsForCounts (resource, definition), params)
.map (field => field.key as CountColumn).filter (key => selected.includes (key))
}
@@ -223,9 +229,8 @@ export const countChildPaths = (fields: CountField[], prefix = ''): string[] =>
export const selectedCountChildren = (params: URLSearchParams): Set<string> =>
new Set (params.has ('children') ? params.get ('children')!.split (',') :
Object.entries (nested).flatMap (([key, fields]) =>
countChildPaths (fields ?? [], key)))
new Set (params.has ('children') ? params.get ('children')!.split (',')
: ['tags.name', 'parents.id', 'aliases.name', 'members.tagId'])
export const readCountSort = (value: string | null): CountSort[] =>
@@ -342,15 +347,32 @@ export const exportCounts = (
headers: string[],
labels: Record<string, string>,
onError?: () => void,
): Promise<void> => {
): Promise<void> => apiDownload ('/counts/export', countsExportPayload (
resource, params, format, columns, headers, labels), locale, onError)
export const countsExportPayload = (
resource: CountsResource,
params: URLSearchParams,
format: 'json' | 'csv',
columns: string[],
headers: string[],
labels: Record<string, string>,
definition?: CountsDefinition,
): Record<string, string> => {
const payload = new URLSearchParams (params)
if (!payload.has ('children'))
{
const selected = selectedCountChildren (params)
payload.set ('children', countChildPaths (fieldsForCounts (resource, definition))
.filter (path => selected.has (path)).join (','))
}
payload.delete ('current')
payload.delete ('row_numbers')
if (isCountsState (params) && countsUseLatest (params)) payload.delete ('at')
return apiDownload ('/counts/export', {
...Object.fromEntries (payload), resource, format,
return { ...Object.fromEntries (payload), resource, format,
columns: columns.join (','), headers: JSON.stringify (headers),
labels: JSON.stringify (labels) }, locale, onError)
labels: JSON.stringify (labels) }
}