このコミットが含まれているのは:
@@ -36,6 +36,11 @@ class TagVersionsController < ApplicationController
|
|||||||
|
|
||||||
def serialise_versions rows, language_code
|
def serialise_versions rows, language_code
|
||||||
rows = rows.to_a
|
rows = rows.to_a
|
||||||
|
tag_ids = rows.map(&:tag_id).uniq
|
||||||
|
current_names_by_tag_id = TagName.where(tag_id: tag_ids, language_code:, primary_flg: true)
|
||||||
|
.pluck(:tag_id, :name, :auto_generated).to_h do |id, name, automatic|
|
||||||
|
[id, { name:, auto_generated: automatic }]
|
||||||
|
end
|
||||||
user_ids = rows.map(&:created_by_user_id).compact.uniq
|
user_ids = rows.map(&:created_by_user_id).compact.uniq
|
||||||
users_by_id = User.where(id: user_ids).pluck(:id, :name).to_h
|
users_by_id = User.where(id: user_ids).pluck(:id, :name).to_h
|
||||||
parent_ids = rows.flat_map do |row|
|
parent_ids = rows.flat_map do |row|
|
||||||
@@ -69,6 +74,7 @@ class TagVersionsController < ApplicationController
|
|||||||
event_type: row.event_type,
|
event_type: row.event_type,
|
||||||
names: row.names,
|
names: row.names,
|
||||||
name_changes: name_changes(row.names, row.attributes['prev_names']),
|
name_changes: name_changes(row.names, row.attributes['prev_names']),
|
||||||
|
current_name_reference: current_names_by_tag_id[row.tag_id],
|
||||||
name: { current: current_names['name'], prev: previous_names['name'] },
|
name: { current: current_names['name'], prev: previous_names['name'] },
|
||||||
category: { current: row.category, prev: row.attributes['prev_category'] },
|
category: { current: row.category, prev: row.attributes['prev_category'] },
|
||||||
deprecated_at: { current: row.deprecated_at&.iso8601,
|
deprecated_at: { current: row.deprecated_at&.iso8601,
|
||||||
|
|||||||
@@ -8,6 +8,8 @@
|
|||||||
"nameChanges.certified",
|
"nameChanges.certified",
|
||||||
"nameChanges.otherLanguages",
|
"nameChanges.otherLanguages",
|
||||||
"nameChanges.changed",
|
"nameChanges.changed",
|
||||||
|
"nameChanges.currentReference",
|
||||||
|
"nameChanges.noNameRecord",
|
||||||
"nameChanges.uncertified"
|
"nameChanges.uncertified"
|
||||||
],
|
],
|
||||||
"exportPath": "export_path",
|
"exportPath": "export_path",
|
||||||
@@ -32,6 +34,8 @@
|
|||||||
"confirmTag": "シロシ「{{name}}」 ウェㇽソン {{version}} ウン アホシピレ ヤ?\nピㇼカ ヤ?",
|
"confirmTag": "シロシ「{{name}}」 ウェㇽソン {{version}} ウン アホシピレ ヤ?\nピㇼカ ヤ?",
|
||||||
"restoreScope": "名称・別名は現在表示中の言語だけを差し戻します。全言語の名称は復元しません。",
|
"restoreScope": "名称・別名は現在表示中の言語だけを差し戻します。全言語の名称は復元しません。",
|
||||||
"nameChanges": {
|
"nameChanges": {
|
||||||
|
"currentReference": "現行名・参考",
|
||||||
|
"noNameRecord": "この版には名称記録なし",
|
||||||
"otherLanguages": "他言語情報",
|
"otherLanguages": "他言語情報",
|
||||||
"changed": "(異動あり)",
|
"changed": "(異動あり)",
|
||||||
"uncertified": "(未公証)",
|
"uncertified": "(未公証)",
|
||||||
|
|||||||
@@ -21,6 +21,8 @@
|
|||||||
"confirmTag": "タグ『{{name}}』を版 {{version}} に差戻します.\nよろしいですか?",
|
"confirmTag": "タグ『{{name}}』を版 {{version}} に差戻します.\nよろしいですか?",
|
||||||
"restoreScope": "名称・別名は現在表示中の言語だけを差し戻します。全言語の名称は復元しません。",
|
"restoreScope": "名称・別名は現在表示中の言語だけを差し戻します。全言語の名称は復元しません。",
|
||||||
"nameChanges": {
|
"nameChanges": {
|
||||||
|
"currentReference": "現行名・参考",
|
||||||
|
"noNameRecord": "この版には名称記録なし",
|
||||||
"otherLanguages": "他言語情報",
|
"otherLanguages": "他言語情報",
|
||||||
"changed": "(異動あり)",
|
"changed": "(異動あり)",
|
||||||
"uncertified": "(未公証)",
|
"uncertified": "(未公証)",
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ const snapshotNames = (names: TagVersion['names']): Record<string, TagNameSnapsh
|
|||||||
|
|
||||||
|
|
||||||
const renderPrimaryName = (
|
const renderPrimaryName = (
|
||||||
snapshot: TagNameSnapshot,
|
snapshot: Pick<TagNameSnapshot, 'name' | 'autoGenerated'>,
|
||||||
language: string,
|
language: string,
|
||||||
label: (key: string) => ReactNode,
|
label: (key: string) => ReactNode,
|
||||||
) => (
|
) => (
|
||||||
@@ -124,7 +124,6 @@ const TagVersionRows = ({ change, children }: {
|
|||||||
const language = localeLanguage (locale)
|
const language = localeLanguage (locale)
|
||||||
const { message, label } = useUITranslation ('history')
|
const { message, label } = useUITranslation ('history')
|
||||||
const { i18n } = useTranslation ('history')
|
const { i18n } = useTranslation ('history')
|
||||||
const [expanded, setExpanded] = useState (false)
|
|
||||||
const panelId = useId ()
|
const panelId = useId ()
|
||||||
const names = snapshotNames (change.names)
|
const names = snapshotNames (change.names)
|
||||||
const nameChanges = (change.nameChanges ?? []).map (entry => ({
|
const nameChanges = (change.nameChanges ?? []).map (entry => ({
|
||||||
@@ -144,6 +143,9 @@ const TagVersionRows = ({ change, children }: {
|
|||||||
? selected.prev
|
? selected.prev
|
||||||
: ((change.nameChanges != null && change.name.prev === change.name.current)
|
: ((change.nameChanges != null && change.name.prev === change.name.current)
|
||||||
? current : legacyName (change.name.prev))
|
? current : legacyName (change.name.prev))
|
||||||
|
const missingNameRecord = current?.name == null && previous?.name == null
|
||||||
|
const [expansion, setExpansion] = useState ({ language, expanded: missingNameRecord })
|
||||||
|
const expanded = expansion.language === language ? expansion.expanded : missingNameRecord
|
||||||
const otherLanguages = [...new Set ([...Object.keys (names),
|
const otherLanguages = [...new Set ([...Object.keys (names),
|
||||||
...nameChanges.map (entry => entry.languageCode)])]
|
...nameChanges.map (entry => entry.languageCode)])]
|
||||||
.filter (code => code !== language).sort ()
|
.filter (code => code !== language).sort ()
|
||||||
@@ -151,13 +153,24 @@ const TagVersionRows = ({ change, children }: {
|
|||||||
const rowIds = otherLanguages.map ((_, index) => `${panelId}-${index}`)
|
const rowIds = otherLanguages.map ((_, index) => `${panelId}-${index}`)
|
||||||
const primaryEqual = (prev: TagNameSnapshot | null, next: TagNameSnapshot | null) =>
|
const primaryEqual = (prev: TagNameSnapshot | null, next: TagNameSnapshot | null) =>
|
||||||
prev?.name === next?.name && prev?.autoGenerated === next?.autoGenerated
|
prev?.name === next?.name && prev?.autoGenerated === next?.autoGenerated
|
||||||
const primary = renderDiff ({ current, prev: previous },
|
const primary =
|
||||||
|
missingNameRecord
|
||||||
|
? (
|
||||||
|
<>
|
||||||
|
{change.currentNameReference != null && (
|
||||||
|
<div>
|
||||||
|
{renderPrimaryName (change.currentNameReference, language, label)}
|
||||||
|
<span className="ml-2 text-sm">{label ('nameChanges.currentReference')}</span>
|
||||||
|
</div>)}
|
||||||
|
<div className="text-sm">{label ('nameChanges.noNameRecord')}</div>
|
||||||
|
</>)
|
||||||
|
: renderDiff ({ current, prev: previous },
|
||||||
snapshot => renderPrimaryName (snapshot, language, label), primaryEqual)
|
snapshot => renderPrimaryName (snapshot, language, label), primaryEqual)
|
||||||
const toggle = otherLanguages.length > 0 && (
|
const toggle = otherLanguages.length > 0 && (
|
||||||
<div className="mt-2 text-sm">
|
<div className="mt-2 text-sm">
|
||||||
<button type="button" className="text-left"
|
<button type="button" className="text-left"
|
||||||
aria-expanded={expanded} aria-controls={rowIds.join (' ')}
|
aria-expanded={expanded} aria-controls={rowIds.join (' ')}
|
||||||
onClick={() => setExpanded (value => !value)}>
|
onClick={() => setExpansion ({ language, expanded: !expanded })}>
|
||||||
{label ('nameChanges.otherLanguages')}
|
{label ('nameChanges.otherLanguages')}
|
||||||
{otherChanges.length > 0 && label ('nameChanges.changed')}
|
{otherChanges.length > 0 && label ('nameChanges.changed')}
|
||||||
<span aria-hidden="true" className="ml-1">{expanded ? '▲' : '▼'}</span>
|
<span aria-hidden="true" className="ml-1">{expanded ? '▲' : '▼'}</span>
|
||||||
|
|||||||
@@ -378,12 +378,17 @@ export type TagNameChange = {
|
|||||||
current: TagNameSnapshot | null
|
current: TagNameSnapshot | null
|
||||||
prev: TagNameSnapshot | null }
|
prev: TagNameSnapshot | null }
|
||||||
|
|
||||||
|
export type CurrentNameReference = {
|
||||||
|
name: string
|
||||||
|
autoGenerated: boolean }
|
||||||
|
|
||||||
export type TagVersion = {
|
export type TagVersion = {
|
||||||
tagId: number
|
tagId: number
|
||||||
versionNo: number
|
versionNo: number
|
||||||
eventType: 'create' | 'update' | 'discard' | 'restore'
|
eventType: 'create' | 'update' | 'discard' | 'restore'
|
||||||
names?: Record<string, TagNameSnapshot> | string | null
|
names?: Record<string, TagNameSnapshot> | string | null
|
||||||
nameChanges?: TagNameChange[]
|
nameChanges?: TagNameChange[]
|
||||||
|
currentNameReference?: CurrentNameReference | null
|
||||||
name: { current: string | null; prev: string | null }
|
name: { current: string | null; prev: string | null }
|
||||||
category: { current: Category; prev: Category | null }
|
category: { current: Category; prev: Category | null }
|
||||||
deprecatedAt: { current: string | null; prev: string | null }
|
deprecatedAt: { current: string | null; prev: string | null }
|
||||||
|
|||||||
新しいイシューから参照
ユーザーをブロックする