このコミットが含まれているのは:
@@ -36,13 +36,35 @@ export type CountsVersion = {
|
||||
category?: string
|
||||
aliases?: { languageCode: string; name: string; scriptCode: string }[]
|
||||
deprecated?: string | null }
|
||||
export type CountsStateRow = {
|
||||
kind: 'internal' | 'external'
|
||||
tagId: number
|
||||
name: string | null
|
||||
deprecated?: string | null
|
||||
period?: string
|
||||
at: string
|
||||
count: number | null }
|
||||
export type CountsStateTotals = {
|
||||
posts: number | null
|
||||
tags: number | null
|
||||
assignments: number | null
|
||||
deprecatedTags: number | null
|
||||
externalAssignments: number | null }
|
||||
export type CountsResult = {
|
||||
count: number
|
||||
page: number
|
||||
limit: number
|
||||
groupCount?: number
|
||||
groups?: { key: string | number | null; name: string | null; count: number }[]
|
||||
versions?: CountsVersion[] }
|
||||
versions?: CountsVersion[]
|
||||
at?: string
|
||||
from?: string
|
||||
before?: string
|
||||
grain?: string
|
||||
totals?: CountsStateTotals
|
||||
stateRows?: CountsStateRow[]
|
||||
coverage?: { basis: string; exact: boolean
|
||||
postHistoryFrom: string | null; tagHistoryFrom: string | null } }
|
||||
export type CountSort = { key: string; direction: 'asc' | 'desc' }
|
||||
export type CountField = { key: string; label: string; children?: CountField[] }
|
||||
export type CountRecord = Record<string, unknown>
|
||||
@@ -200,6 +222,8 @@ export const normaliseCountsParams = (
|
||||
): URLSearchParams => {
|
||||
const params = new URLSearchParams (source)
|
||||
params.delete ('event_type')
|
||||
if (!params.has ('mode'))
|
||||
params.set ('mode', source.has ('axis') ? 'summary' : 'state')
|
||||
if (!['month', 'user'].includes (params.get ('axis') ?? ''))
|
||||
params.set ('axis', 'month')
|
||||
if (params.has ('columns'))
|
||||
@@ -212,9 +236,18 @@ export const normaliseCountsParams = (
|
||||
}
|
||||
|
||||
|
||||
export const isCountsState = (params: URLSearchParams): boolean =>
|
||||
['state', 'trend', 'snapshot'].includes (params.get ('mode') ?? 'state')
|
||||
|
||||
|
||||
export const countsRequestParams = (params: URLSearchParams): URLSearchParams => {
|
||||
const result = new URLSearchParams (params)
|
||||
for (const key of ['columns', 'children', 'child_sort', 'nested_json', 'order'])
|
||||
const hidden = isCountsState (params)
|
||||
? ['axis', 'latest', 'user_id', 'resource_id']
|
||||
: ['at', 'grain', 'kind']
|
||||
if (isCountsState (params) && params.get ('mode') !== 'trend')
|
||||
hidden.push ('from', 'before')
|
||||
for (const key of ['columns', 'children', 'child_sort', 'nested_json', 'order', ...hidden])
|
||||
result.delete (key)
|
||||
return result
|
||||
}
|
||||
@@ -224,8 +257,10 @@ export const fetchCounts = (
|
||||
resource: CountsResource,
|
||||
params: URLSearchParams,
|
||||
locale: LocaleCode,
|
||||
): Promise<CountsResult> => apiGet (`/counts/${resource}`, {
|
||||
locale, params: Object.fromEntries (countsRequestParams (params)) })
|
||||
): Promise<CountsResult> => apiGet (isCountsState (params) ? '/counts/state' : `/counts/${resource}`, {
|
||||
locale, params: { ...Object.fromEntries (countsRequestParams (params)),
|
||||
...(isCountsState (params) ? { resource } : { }) } })
|
||||
|
||||
|
||||
|
||||
const stableValue = (value: unknown): unknown => {
|
||||
|
||||
新しいイシューから参照
ユーザーをブロックする