このコミットが含まれているのは:
@@ -194,6 +194,38 @@ export const countsNestedExport = (
|
||||
}
|
||||
|
||||
|
||||
// A chain with one selected scalar leaf is displayed and copied as one cell.
|
||||
export const countsNestedIsScalar = (
|
||||
fields: CountField[],
|
||||
path: string,
|
||||
params: URLSearchParams,
|
||||
): boolean => {
|
||||
const selected = selectedCountChildren (params)
|
||||
const columns = fields.filter (field => selected.has (`${path}.${field.key}`))
|
||||
if (columns.length !== 1) return false
|
||||
const field = columns[0]
|
||||
return field.children == null
|
||||
|| countsNestedIsScalar (field.children, `${path}.${field.key}`, params)
|
||||
}
|
||||
|
||||
|
||||
export const countsNestedScalarText = (
|
||||
rows: CountRecord[],
|
||||
fields: CountField[],
|
||||
path: string,
|
||||
params: URLSearchParams,
|
||||
locale: LocaleCode,
|
||||
): string => {
|
||||
const selected = selectedCountChildren (params)
|
||||
const field = fields.find (field => selected.has (`${path}.${field.key}`))
|
||||
if (field == null) return ''
|
||||
return countsNestedOrder (rows, path, params, locale).map (row => field.children == null
|
||||
? countsLogicalName (row, field.key, locale).text
|
||||
: countsNestedScalarText (row[field.key] as CountRecord[] ?? [], field.children,
|
||||
`${path}.${field.key}`, params, locale)).join (' ')
|
||||
}
|
||||
|
||||
|
||||
export const countsNestedText = (
|
||||
rows: CountRecord[],
|
||||
fields: CountField[],
|
||||
@@ -201,6 +233,8 @@ export const countsNestedText = (
|
||||
params: URLSearchParams,
|
||||
locale: LocaleCode,
|
||||
): string => {
|
||||
if (countsNestedIsScalar (fields, path, params))
|
||||
return countsNestedScalarText (rows, fields, path, params, locale)
|
||||
const selected = selectedCountChildren (params)
|
||||
const columns = orderedCountFields (fields, params, path)
|
||||
.filter (field => selected.has (`${path}.${field.key}`))
|
||||
@@ -224,9 +258,11 @@ export const countsCellCopy = (
|
||||
): string => {
|
||||
if (field.children == null) return countsCellText (row, field.key as CountColumn, locale, params)
|
||||
const rows = countsNestedRows (row, field.key)
|
||||
if (countsNestedIsScalar (field.children, field.key, params))
|
||||
return countsNestedScalarText (rows, field.children, field.key, params, locale)
|
||||
return params.get ('nested_json') === '1'
|
||||
? JSON.stringify (
|
||||
countsNestedExport (rows, field.children, field.key, params, locale), null, 2)
|
||||
countsNestedExport (rows, field.children, field.key, params, locale))
|
||||
: countsNestedText (rows, field.children, field.key, params, locale)
|
||||
}
|
||||
|
||||
@@ -297,7 +333,9 @@ const clipboardColumns = (
|
||||
return orderedCountFields (fields, params, path)
|
||||
.filter (field => selected.has (`${path}.${field.key}`))
|
||||
.map (field => ({ label: translateUIMessage (field.label, 'counts', locale).text,
|
||||
children: field.children == null ? undefined : clipboardColumns (
|
||||
children: (field.children == null
|
||||
|| countsNestedIsScalar (field.children, `${path}.${field.key}`, params))
|
||||
? undefined : clipboardColumns (
|
||||
field.children, `${path}.${field.key}`, params, locale) }))
|
||||
}
|
||||
|
||||
@@ -316,8 +354,11 @@ export const countsNestedClipboardTable = (
|
||||
columns: clipboardColumns (fields, path, params, locale),
|
||||
rows: countsNestedOrder (rows, path, params, locale).map (row => columns.map (field =>
|
||||
field.children == null ? countsLogicalName (row, field.key, locale).text
|
||||
: countsNestedClipboardTable (row[field.key] as CountRecord[] ?? [],
|
||||
field.children, `${path}.${field.key}`, params, locale))) }
|
||||
: (countsNestedIsScalar (field.children, `${path}.${field.key}`, params)
|
||||
? countsNestedScalarText (row[field.key] as CountRecord[] ?? [],
|
||||
field.children, `${path}.${field.key}`, params, locale)
|
||||
: countsNestedClipboardTable (row[field.key] as CountRecord[] ?? [],
|
||||
field.children, `${path}.${field.key}`, params, locale)))) }
|
||||
}
|
||||
|
||||
|
||||
@@ -330,7 +371,9 @@ export const countsDetailClipboardTable = (
|
||||
): CountsClipboardTable => {
|
||||
const columns = fields.map (field => ({
|
||||
label: translateUIMessage (field.label, 'counts', locale).text,
|
||||
children: field.children == null ? undefined : clipboardColumns (
|
||||
children: (field.children == null
|
||||
|| countsNestedIsScalar (field.children, field.key, params))
|
||||
? undefined : clipboardColumns (
|
||||
field.children, field.key, params, locale) }))
|
||||
if (rowStart != null)
|
||||
columns.unshift ({ label: translateUIMessage ('rowNumbers', 'counts', locale).text,
|
||||
@@ -338,8 +381,11 @@ export const countsDetailClipboardTable = (
|
||||
return { columns, rows: rows.map ((row, index) => {
|
||||
const cells: CountsClipboardCell[] = fields.map (field => field.children == null
|
||||
? countsCellText (row, field.key, locale, params)
|
||||
: countsNestedClipboardTable (countsNestedRows (row, field.key), field.children,
|
||||
field.key, params, locale))
|
||||
: (countsNestedIsScalar (field.children, field.key, params)
|
||||
? countsNestedScalarText (countsNestedRows (row, field.key), field.children,
|
||||
field.key, params, locale)
|
||||
: countsNestedClipboardTable (countsNestedRows (row, field.key), field.children,
|
||||
field.key, params, locale)))
|
||||
return rowStart == null ? cells : [String (rowStart + index), ...cells]
|
||||
}) }
|
||||
}
|
||||
|
||||
新しいイシューから参照
ユーザーをブロックする