このコミットが含まれているのは:
@@ -19,7 +19,7 @@ import { postsKeys, tagsKeys, wikiKeys } from '@/lib/queryKeys'
|
|||||||
import { fetchTagChanges } from '@/lib/tags'
|
import { fetchTagChanges } from '@/lib/tags'
|
||||||
import { useClientBehaviourSettings } from '@/lib/useClientBehaviourSettings'
|
import { useClientBehaviourSettings } from '@/lib/useClientBehaviourSettings'
|
||||||
import { useUITranslation } from '@/lib/useUITranslation'
|
import { useUITranslation } from '@/lib/useUITranslation'
|
||||||
import { localisedDateString } from '@/lib/utils'
|
import { cn, localisedDateString } from '@/lib/utils'
|
||||||
|
|
||||||
import type { FC, ReactNode } from 'react'
|
import type { FC, ReactNode } from 'react'
|
||||||
|
|
||||||
@@ -144,7 +144,7 @@ const renderDiff = <T,> (
|
|||||||
|
|
||||||
const TagVersionRows = ({ change, children }: {
|
const TagVersionRows = ({ change, children }: {
|
||||||
change: TagVersion
|
change: TagVersion
|
||||||
children: (primary: ReactNode, toggle: ReactNode) => ReactNode }) => {
|
children: (primary: ReactNode) => ReactNode }) => {
|
||||||
const locale = useLocale ()
|
const locale = useLocale ()
|
||||||
const language = localeLanguage (locale)
|
const language = localeLanguage (locale)
|
||||||
const { message, label } = useUITranslation ('history')
|
const { message, label } = useUITranslation ('history')
|
||||||
@@ -169,29 +169,23 @@ const TagVersionRows = ({ change, children }: {
|
|||||||
: ((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 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 ()
|
||||||
const otherChanges = nameChanges.filter (entry => entry.languageCode !== language)
|
const otherChanges = nameChanges.filter (entry => entry.languageCode !== language)
|
||||||
|
const initiallyExpanded = missingNameRecord || otherChanges.length > 0
|
||||||
|
const [expansion, setExpansion] = useState ({ language, expanded: initiallyExpanded })
|
||||||
|
const expanded = expansion.language === language ? expansion.expanded : initiallyExpanded
|
||||||
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 =
|
const primary =
|
||||||
missingNameRecord
|
missingNameRecord
|
||||||
? (
|
? null
|
||||||
<>
|
|
||||||
{change.currentNameReference != null && (
|
|
||||||
<div>
|
|
||||||
{renderPrimaryName (change.currentNameReference, language, label)}
|
|
||||||
<span className="ml-2 text-sm">{label ('nameChanges.currentReference')}</span>
|
|
||||||
</div>)}
|
|
||||||
</>)
|
|
||||||
: renderDiff ({ current, prev: previous },
|
: 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="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={() => setExpansion ({ language, expanded: !(expanded) })}>
|
onClick={() => setExpansion ({ language, expanded: !(expanded) })}>
|
||||||
@@ -204,7 +198,13 @@ const TagVersionRows = ({ change, children }: {
|
|||||||
return (
|
return (
|
||||||
<tbody className="even:bg-gray-100 even:text-gray-900
|
<tbody className="even:bg-gray-100 even:text-gray-900
|
||||||
dark:even:bg-gray-700 dark:even:text-gray-100">
|
dark:even:bg-gray-700 dark:even:text-gray-100">
|
||||||
{children (primary, toggle)}
|
{children (primary)}
|
||||||
|
{toggle && (
|
||||||
|
<tr>
|
||||||
|
<td colSpan={8} className={cn ('px-2 pt-0', !expanded && 'pb-2')}>
|
||||||
|
{toggle}
|
||||||
|
</td>
|
||||||
|
</tr>)}
|
||||||
{otherLanguages.map ((code, index) => {
|
{otherLanguages.map ((code, index) => {
|
||||||
const entry = nameChanges.find (value => value.languageCode === code)
|
const entry = nameChanges.find (value => value.languageCode === code)
|
||||||
const key = `languageNames.${code}`
|
const key = `languageNames.${code}`
|
||||||
@@ -213,18 +213,18 @@ const TagVersionRows = ({ change, children }: {
|
|||||||
const prev = entry != null ? entry.prev : next
|
const prev = entry != null ? entry.prev : next
|
||||||
return (
|
return (
|
||||||
<tr key={code} id={rowIds[index]} hidden={!expanded}>
|
<tr key={code} id={rowIds[index]} hidden={!expanded}>
|
||||||
<th scope="row" className="p-2 text-left text-sm font-normal">
|
<th scope="row" className="px-2 pt-1 pb-2 text-left text-sm font-normal">
|
||||||
<LocalisedText language={known ? code : 'und'}>
|
<LocalisedText language={known ? code : 'und'}>
|
||||||
{known ? message (key).text : code}
|
{known ? message (key).text : code}
|
||||||
</LocalisedText>
|
</LocalisedText>
|
||||||
</th>
|
</th>
|
||||||
<td className="p-2">
|
<td className="px-2 pt-1 pb-2">
|
||||||
{renderDiff ({ current: next, prev },
|
{renderDiff ({ current: next, prev },
|
||||||
value => renderPrimaryName (value, code, label), primaryEqual)}
|
value => renderPrimaryName (value, code, label), primaryEqual)}
|
||||||
</td>
|
</td>
|
||||||
<td/>
|
<td/>
|
||||||
<td/>
|
<td/>
|
||||||
<td className="p-2">{renderAliasDiff (prev, next, code)}</td>
|
<td className="px-2 pt-1 pb-2">{renderAliasDiff (prev, next, code)}</td>
|
||||||
<td/>
|
<td/>
|
||||||
<td/>
|
<td/>
|
||||||
<td/>
|
<td/>
|
||||||
@@ -310,12 +310,11 @@ const TagHistoryPage: FC = () => {
|
|||||||
|
|
||||||
{changes.map (change => (
|
{changes.map (change => (
|
||||||
<TagVersionRows key={`${ change.tagId }.${ change.versionNo }`} change={change}>
|
<TagVersionRows key={`${ change.tagId }.${ change.versionNo }`} change={change}>
|
||||||
{(primary, toggle) => (
|
{primary => (
|
||||||
<tr>
|
<tr className="[&>td]:pt-1">
|
||||||
<td className="p-2">{change.tagId}.{change.versionNo}</td>
|
<td className="p-2">{change.tagId}.{change.versionNo}</td>
|
||||||
<td className="p-2 break-all">
|
<td className="p-2 break-all">
|
||||||
{primary}
|
{primary}
|
||||||
{toggle}
|
|
||||||
</td>
|
</td>
|
||||||
<td className="p-2 break-all">
|
<td className="p-2 break-all">
|
||||||
{renderDiff (change.category,
|
{renderDiff (change.category,
|
||||||
|
|||||||
新しいイシューから参照
ユーザーをブロックする