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