fix i18n of missing uploader

This commit is contained in:
Pig Fang 2020-04-01 10:07:34 +08:00
parent 33e249f5d2
commit 31ebd8bd35
3 changed files with 17 additions and 13 deletions

View File

@ -95,7 +95,7 @@ class SkinlibController extends Controller
} }
$badges = []; $badges = [];
$uploader = User::find($texture->uploader); $uploader = $texture->owner;
if ($uploader) { if ($uploader) {
if ($uploader->isAdmin()) { if ($uploader->isAdmin()) {
$badges[] = ['text' => 'STAFF', 'color' => 'primary']; $badges[] = ['text' => 'STAFF', 'color' => 'primary'];
@ -125,7 +125,8 @@ class SkinlibController extends Controller
'currentUid' => $user ? $user->uid : 0, 'currentUid' => $user ? $user->uid : 0,
'admin' => $user && $user->isAdmin(), 'admin' => $user && $user->isAdmin(),
'inCloset' => $user && $user->closet()->where('tid', $texture->tid)->count() > 0, 'inCloset' => $user && $user->closet()->where('tid', $texture->tid)->count() > 0,
'nickname' => ($up = User::find($texture->uploader)) ? $up->nickname : null, 'uploaderExists' => (bool) $uploader,
'nickname' => optional($uploader)->nickname ?? trans('general.unexistent-user'),
'report' => intval(option('reporter_score_modification', 0)), 'report' => intval(option('reporter_score_modification', 0)),
'badges' => $badges, 'badges' => $badges,
]); ]);

View File

@ -26,7 +26,8 @@ const Show: React.FC = () => {
const [texture, setTexture] = useState<Texture>({} as Texture) const [texture, setTexture] = useState<Texture>({} as Texture)
const [showModalApply, setShowModalApply] = useState(false) const [showModalApply, setShowModalApply] = useState(false)
const [liked, setLiked] = useState(false) const [liked, setLiked] = useState(false)
const nickname = useBlessingExtra<string | null>('nickname') const nickname = useBlessingExtra<string>('nickname')
const isUploaderExists = useBlessingExtra<boolean>('uploaderExists')
const currentUid = useBlessingExtra<number>('currentUid', 0) const currentUid = useBlessingExtra<number>('currentUid', 0)
const isAdmin = useBlessingExtra<boolean>('admin') const isAdmin = useBlessingExtra<boolean>('admin')
const badges = useBlessingExtra<Badge[]>('badges', []) const badges = useBlessingExtra<Badge[]>('badges', [])
@ -77,7 +78,7 @@ const Show: React.FC = () => {
) )
if (code === 0) { if (code === 0) {
toast.success(message) toast.success(message)
setTexture(texture => ({ ...texture, name })) setTexture((texture) => ({ ...texture, name }))
} else { } else {
toast.error(message) toast.error(message)
} }
@ -111,7 +112,7 @@ const Show: React.FC = () => {
) )
if (code === 0) { if (code === 0) {
toast.success(message) toast.success(message)
setTexture(texture => ({ ...texture, type })) setTexture((texture) => ({ ...texture, type }))
} else { } else {
toast.error(message) toast.error(message)
} }
@ -120,7 +121,7 @@ const Show: React.FC = () => {
const handleAddItemClick = async () => { const handleAddItemClick = async () => {
const ok = await addClosetItem(texture) const ok = await addClosetItem(texture)
if (ok) { if (ok) {
setTexture(texture => ({ ...texture, likes: texture.likes + 1 })) setTexture((texture) => ({ ...texture, likes: texture.likes + 1 }))
setLiked(true) setLiked(true)
} }
} }
@ -128,7 +129,7 @@ const Show: React.FC = () => {
const handleRemoveItemClick = async () => { const handleRemoveItemClick = async () => {
const ok = await removeClosetItem(texture.tid) const ok = await removeClosetItem(texture.tid)
if (ok) { if (ok) {
setTexture(texture => ({ ...texture, likes: texture.likes - 1 })) setTexture((texture) => ({ ...texture, likes: texture.likes - 1 }))
setLiked(false) setLiked(false)
} }
} }
@ -196,7 +197,7 @@ const Show: React.FC = () => {
) )
if (code === 0) { if (code === 0) {
toast.success(message) toast.success(message)
setTexture(texture => ({ ...texture, public: !texture.public })) setTexture((texture) => ({ ...texture, public: !texture.public }))
} else { } else {
toast.error(message) toast.error(message)
} }
@ -366,7 +367,7 @@ const Show: React.FC = () => {
<div className="row my-4"> <div className="row my-4">
<div className="col-4">{t('skinlib.show.uploader')}</div> <div className="col-4">{t('skinlib.show.uploader')}</div>
<div className={`col-8 ${styles.truncate}`}> <div className={`col-8 ${styles.truncate}`}>
{nickname !== null ? ( {isUploaderExists ? (
<> <>
<div> <div>
<a href={linkToUploader} target="_blank"> <a href={linkToUploader} target="_blank">
@ -374,7 +375,7 @@ const Show: React.FC = () => {
</a> </a>
</div> </div>
<div> <div>
{badges.map(badge => ( {badges.map((badge) => (
<span <span
className={`badge bg-${badge.color} mr-2`} className={`badge bg-${badge.color} mr-2`}
key={badge.text} key={badge.text}
@ -385,7 +386,7 @@ const Show: React.FC = () => {
</div> </div>
</> </>
) : ( ) : (
t('general.unexistent-user') nickname
)} )}
</div> </div>
</div> </div>

View File

@ -40,6 +40,7 @@ beforeEach(() => {
download: true, download: true,
currentUid: 0, currentUid: 0,
admin: false, admin: false,
uploaderExists: true,
nickname: 'author', nickname: 'author',
inCloset: false, inCloset: false,
report: 0, report: 0,
@ -88,12 +89,13 @@ test('authenticated but not uploader', async () => {
}) })
test('uploader is not existed', async () => { test('uploader is not existed', async () => {
window.blessing.extra.nickname = null window.blessing.extra.nickname = 'not existed'
window.blessing.extra.uploaderExists = false
fetch.get.mockResolvedValue({ data: fixtureSkin }) fetch.get.mockResolvedValue({ data: fixtureSkin })
const { queryByText } = render(<Show />) const { queryByText } = render(<Show />)
await waitFor(() => expect(fetch.get).toBeCalledTimes(1)) await waitFor(() => expect(fetch.get).toBeCalledTimes(1))
expect(queryByText(t('general.unexistent-user'))).toBeInTheDocument() expect(queryByText('not existed')).toBeInTheDocument()
}) })
test('badges', async () => { test('badges', async () => {