February 2024 updates and bug fixes (#407)
### New content * Adds Onmyoji * Adds Dark Rapture Zero * Adds Exo Aristarchus ### Bug fixes * Fixed a bug that prevented filtering job skills by category * Fixed a bug that prevented infinite scroll in search modals
This commit is contained in:
parent
0f03ca5e27
commit
31745b17de
14 changed files with 168 additions and 12 deletions
|
|
@ -6,7 +6,7 @@ import styles from './index.module.scss'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
id: string
|
id: string
|
||||||
type: 'character' | 'summon' | 'weapon'
|
type: 'character' | 'summon' | 'weapon' | 'raid' | 'job'
|
||||||
image?: '01' | '02' | '03' | '04'
|
image?: '01' | '02' | '03' | '04'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -48,6 +48,11 @@ const ChangelogUnit = ({ id, type, image }: Props) => {
|
||||||
const summon = await fetchSummon()
|
const summon = await fetchSummon()
|
||||||
setItem(summon.data)
|
setItem(summon.data)
|
||||||
break
|
break
|
||||||
|
|
||||||
|
case 'raid':
|
||||||
|
const raid = await fetchRaid()
|
||||||
|
setItem(raid.data)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -63,6 +68,10 @@ const ChangelogUnit = ({ id, type, image }: Props) => {
|
||||||
return api.endpoints.summons.getOne({ id: id })
|
return api.endpoints.summons.getOne({ id: id })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function fetchRaid() {
|
||||||
|
return api.endpoints.raids.getOne({ id: id })
|
||||||
|
}
|
||||||
|
|
||||||
const imageUrl = () => {
|
const imageUrl = () => {
|
||||||
let src = ''
|
let src = ''
|
||||||
|
|
||||||
|
|
@ -82,6 +91,10 @@ const ChangelogUnit = ({ id, type, image }: Props) => {
|
||||||
? `${process.env.NEXT_PUBLIC_SIERO_IMG_URL}/summon-grid/${id}_${image}.jpg`
|
? `${process.env.NEXT_PUBLIC_SIERO_IMG_URL}/summon-grid/${id}_${image}.jpg`
|
||||||
: `${process.env.NEXT_PUBLIC_SIERO_IMG_URL}/summon-grid/${id}.jpg`
|
: `${process.env.NEXT_PUBLIC_SIERO_IMG_URL}/summon-grid/${id}.jpg`
|
||||||
break
|
break
|
||||||
|
|
||||||
|
case 'raid':
|
||||||
|
src = `${process.env.NEXT_PUBLIC_SIERO_IMG_URL}/raids/${id}.png`
|
||||||
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
return src
|
return src
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,8 @@
|
||||||
|
|
||||||
.characters,
|
.characters,
|
||||||
.weapons,
|
.weapons,
|
||||||
.summons {
|
.summons,
|
||||||
|
.raids,
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-rows: auto 1fr;
|
grid-template-rows: auto 1fr;
|
||||||
gap: $unit;
|
gap: $unit;
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ interface Props {
|
||||||
newItems?: UpdateObject
|
newItems?: UpdateObject
|
||||||
uncappedItems?: UpdateObject
|
uncappedItems?: UpdateObject
|
||||||
transcendedItems?: UpdateObject
|
transcendedItems?: UpdateObject
|
||||||
|
raidItems?: string[]
|
||||||
numNotes: number
|
numNotes: number
|
||||||
}
|
}
|
||||||
const ContentUpdate = ({
|
const ContentUpdate = ({
|
||||||
|
|
@ -27,6 +28,7 @@ const ContentUpdate = ({
|
||||||
newItems,
|
newItems,
|
||||||
uncappedItems,
|
uncappedItems,
|
||||||
transcendedItems,
|
transcendedItems,
|
||||||
|
raidItems,
|
||||||
numNotes,
|
numNotes,
|
||||||
}: Props) => {
|
}: Props) => {
|
||||||
const { t: updates } = useTranslation('updates')
|
const { t: updates } = useTranslation('updates')
|
||||||
|
|
@ -138,6 +140,33 @@ const ContentUpdate = ({
|
||||||
return section
|
return section
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function newRaidSection() {
|
||||||
|
let section: React.ReactNode = ''
|
||||||
|
|
||||||
|
if (raidItems) {
|
||||||
|
section = raidItems && raidItems.length > 0 && (
|
||||||
|
<section className={styles['raids']}>
|
||||||
|
<h4>{updates(`labels.raids`)}</h4>
|
||||||
|
<div className={styles.items}>{raidItemElements()}</div>
|
||||||
|
</section>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return section
|
||||||
|
}
|
||||||
|
|
||||||
|
function raidItemElements() {
|
||||||
|
let elements: React.ReactNode[] = []
|
||||||
|
|
||||||
|
if (raidItems) {
|
||||||
|
elements = raidItems.map((id) => {
|
||||||
|
return <ChangelogUnit id={id} type="raid" key={id} />
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return elements
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<section
|
<section
|
||||||
className={classNames({
|
className={classNames({
|
||||||
|
|
@ -163,6 +192,7 @@ const ContentUpdate = ({
|
||||||
{newItemSection('summon')}
|
{newItemSection('summon')}
|
||||||
{uncapItemSection('summon')}
|
{uncapItemSection('summon')}
|
||||||
{transcendItemSection('summon')}
|
{transcendItemSection('summon')}
|
||||||
|
{newRaidSection()}
|
||||||
</div>
|
</div>
|
||||||
{numNotes > 0 ? (
|
{numNotes > 0 ? (
|
||||||
<div className={styles.notes}>
|
<div className={styles.notes}>
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,16 @@ const UpdatesPage = () => {
|
||||||
return (
|
return (
|
||||||
<div className={classes}>
|
<div className={classes}>
|
||||||
<h1>{common('about.segmented_control.updates')}</h1>
|
<h1>{common('about.segmented_control.updates')}</h1>
|
||||||
|
<ContentUpdate
|
||||||
|
version="2024-02U"
|
||||||
|
dateString="2024/02/20"
|
||||||
|
event="events.content"
|
||||||
|
newItems={{
|
||||||
|
weapon: ['1040618400'],
|
||||||
|
}}
|
||||||
|
raidItems={['dark-rapture-zero']}
|
||||||
|
numNotes={3}
|
||||||
|
/>
|
||||||
<ContentUpdate
|
<ContentUpdate
|
||||||
version="2024-02F"
|
version="2024-02F"
|
||||||
dateString="2024/02/14"
|
dateString="2024/02/14"
|
||||||
|
|
|
||||||
|
|
@ -243,6 +243,13 @@ const SearchModal = (props: Props) => {
|
||||||
}
|
}
|
||||||
}, [query, open])
|
}, [query, open])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (open && props.object === 'job_skills') {
|
||||||
|
setCurrentPage(1)
|
||||||
|
fetchResults({ replace: true })
|
||||||
|
}
|
||||||
|
}, [filters, open])
|
||||||
|
|
||||||
function incrementPage() {
|
function incrementPage() {
|
||||||
setCurrentPage(currentPage + 1)
|
setCurrentPage(currentPage + 1)
|
||||||
}
|
}
|
||||||
|
|
@ -479,7 +486,7 @@ const SearchModal = (props: Props) => {
|
||||||
{filterBar()}
|
{filterBar()}
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<div className={styles.results} ref={scrollContainer}>
|
<div id="Results" className={styles.results} ref={scrollContainer}>
|
||||||
<div className={styles.totalRow}>
|
<div className={styles.totalRow}>
|
||||||
<h5 className={styles.total}>
|
<h5 className={styles.total}>
|
||||||
{t('search.result_count', { record_count: recordCount })}
|
{t('search.result_count', { record_count: recordCount })}
|
||||||
|
|
@ -496,7 +503,7 @@ const SearchModal = (props: Props) => {
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
{open ? renderResults() : ''}
|
{open && renderResults()}
|
||||||
</div>
|
</div>
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
|
|
|
||||||
|
|
@ -133,4 +133,10 @@ export const raidGroups: RaidGroup[] = [
|
||||||
ja: 'スーパーアルティメット',
|
ja: 'スーパーアルティメット',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: {
|
||||||
|
en: 'Nine-Star Raids',
|
||||||
|
ja: '★★★★★★★★★',
|
||||||
|
},
|
||||||
|
},
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -399,8 +399,8 @@ export const getServerSideProps = async ({ req, res, locale, query }: { req: Nex
|
||||||
context: null,
|
context: null,
|
||||||
error: true,
|
error: true,
|
||||||
status: {
|
status: {
|
||||||
code: response?.status,
|
code: response ? response.status : -999,
|
||||||
text: response?.statusText,
|
text: response ? response.statusText : 'unspecified_error',
|
||||||
},
|
},
|
||||||
...(await serverSideTranslations(locale, ['common'])),
|
...(await serverSideTranslations(locale, ['common'])),
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -429,8 +429,8 @@ export const getServerSideProps = async ({ req, res, locale, query }: { req: Nex
|
||||||
context: null,
|
context: null,
|
||||||
error: true,
|
error: true,
|
||||||
status: {
|
status: {
|
||||||
code: response?.status,
|
code: response ? response.status : -999,
|
||||||
text: response?.statusText,
|
text: response ? response.statusText : 'unspecified_error',
|
||||||
},
|
},
|
||||||
...(await serverSideTranslations(locale, ['common'])),
|
...(await serverSideTranslations(locale, ['common'])),
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -438,8 +438,8 @@ export const getServerSideProps = async ({ req, res, locale, query }: { req: Nex
|
||||||
context: null,
|
context: null,
|
||||||
error: true,
|
error: true,
|
||||||
status: {
|
status: {
|
||||||
code: response?.status,
|
code: response ? response.status : -999,
|
||||||
text: response?.statusText,
|
text: response ? response.statusText : "unspecified_error",
|
||||||
},
|
},
|
||||||
...(await serverSideTranslations(locale, ['common'])),
|
...(await serverSideTranslations(locale, ['common'])),
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -123,6 +123,10 @@
|
||||||
"unauthorized": {
|
"unauthorized": {
|
||||||
"title": "Unauthorized",
|
"title": "Unauthorized",
|
||||||
"description": "You don't have permission to perform that action"
|
"description": "You don't have permission to perform that action"
|
||||||
|
},
|
||||||
|
"unspecified_error": {
|
||||||
|
"title": "Something went wrong",
|
||||||
|
"description": "You shouldn't see this message. Please try again later."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"filters": {
|
"filters": {
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,8 @@
|
||||||
"weapons": "New weapon transcendence",
|
"weapons": "New weapon transcendence",
|
||||||
"summons": "New summon transcendence"
|
"summons": "New summon transcendence"
|
||||||
},
|
},
|
||||||
|
"jobs": "New classes",
|
||||||
|
"raids": "New raids",
|
||||||
"features": "New features",
|
"features": "New features",
|
||||||
"updates": "Other updates"
|
"updates": "Other updates"
|
||||||
},
|
},
|
||||||
|
|
@ -24,6 +26,13 @@
|
||||||
"uncap": "Uncap"
|
"uncap": "Uncap"
|
||||||
},
|
},
|
||||||
"versions": {
|
"versions": {
|
||||||
|
"2024-02U": {
|
||||||
|
"features": [
|
||||||
|
"Added new class: Onmyoji",
|
||||||
|
"Fixed a bug that prevented filtering job skills by category",
|
||||||
|
"Fixed a bug that prevented infinite scrolling in search results"
|
||||||
|
]
|
||||||
|
},
|
||||||
"2024-01L": {
|
"2024-01L": {
|
||||||
"features": [
|
"features": [
|
||||||
"Added Ultimate Mastery skills for classes: Cavalier, Relic Buster, Yamato, and Masquerade",
|
"Added Ultimate Mastery skills for classes: Cavalier, Relic Buster, Yamato, and Masquerade",
|
||||||
|
|
@ -62,7 +71,7 @@
|
||||||
},
|
},
|
||||||
"1.2.1": {
|
"1.2.1": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"Job accessory popover has been fixed, so Paladin shields and Manadiver manatura can be selected again",
|
"Class accessory popover has been fixed, so Paladin shields and Manadiver manatura can be selected again",
|
||||||
"The AX skill section no longer shows up in the weapon hovercard if no AX skills are set",
|
"The AX skill section no longer shows up in the weapon hovercard if no AX skills are set",
|
||||||
"The top of the character hovercard has been slightly refined",
|
"The top of the character hovercard has been slightly refined",
|
||||||
"Fixed a bug that prevented all character over mastery (ring) bonuses from being displayed",
|
"Fixed a bug that prevented all character over mastery (ring) bonuses from being displayed",
|
||||||
|
|
|
||||||
|
|
@ -123,6 +123,10 @@
|
||||||
"unauthorized": {
|
"unauthorized": {
|
||||||
"title": "権限がありません",
|
"title": "権限がありません",
|
||||||
"description": "行ったアクションを実行する権限がありません"
|
"description": "行ったアクションを実行する権限がありません"
|
||||||
|
},
|
||||||
|
"unspecified_error": {
|
||||||
|
"title": "エラー",
|
||||||
|
"description": "エラーが発生しました"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"filters": {
|
"filters": {
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,8 @@
|
||||||
"weapons": "武器の新限界超越",
|
"weapons": "武器の新限界超越",
|
||||||
"summons": "召喚石の新限界超越"
|
"summons": "召喚石の新限界超越"
|
||||||
},
|
},
|
||||||
|
"jobs": "新ジョブ",
|
||||||
|
"raids": "新マルチバトル",
|
||||||
"features": "新機能",
|
"features": "新機能",
|
||||||
"updates": "その他の更新"
|
"updates": "その他の更新"
|
||||||
},
|
},
|
||||||
|
|
@ -24,6 +26,13 @@
|
||||||
"uncap": "上限解放"
|
"uncap": "上限解放"
|
||||||
},
|
},
|
||||||
"versions": {
|
"versions": {
|
||||||
|
"2024-02U": {
|
||||||
|
"features": [
|
||||||
|
"新ジョブ「陰陽師」を追加",
|
||||||
|
"ジョブスキルのフィルターを発生できないバグを修正",
|
||||||
|
"検索リザルトに無限スクロールを発生できないバグを修正"
|
||||||
|
]
|
||||||
|
},
|
||||||
"2024-01L": {
|
"2024-01L": {
|
||||||
"features": [
|
"features": [
|
||||||
"「キャバルリー」「レリックバスター」「ヤマト」「マスカレード」の極致の証スキルを追加",
|
"「キャバルリー」「レリックバスター」「ヤマト」「マスカレード」の極致の証スキルを追加",
|
||||||
|
|
|
||||||
|
|
@ -303,7 +303,70 @@ h5 {
|
||||||
}
|
}
|
||||||
|
|
||||||
.LinkItem {
|
.LinkItem {
|
||||||
|
$diameter: $unit-6x;
|
||||||
|
align-items: center;
|
||||||
|
background: var(--dialog-bg);
|
||||||
|
border: 1px solid var(--link-item-bg);
|
||||||
|
border-radius: $card-corner;
|
||||||
|
display: flex;
|
||||||
|
min-height: 82px;
|
||||||
|
transition: background $duration-zoom ease-in,
|
||||||
|
transform $duration-zoom ease-in;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: var(--link-item-bg);
|
||||||
|
color: var(--text-primary);
|
||||||
|
|
||||||
|
.shareIcon {
|
||||||
|
fill: var(--text-primary);
|
||||||
|
transform: translate($unit-half, calc(($unit * -1) / 2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.Left {
|
||||||
|
align-items: center;
|
||||||
|
display: flex;
|
||||||
|
gap: $unit;
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-weight: 600;
|
||||||
|
max-width: 70%;
|
||||||
|
line-height: 1.3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: $unit-2x;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.left {
|
||||||
|
align-items: center;
|
||||||
|
display: flex;
|
||||||
|
gap: $unit-2x;
|
||||||
|
flex-grow: 1;
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
svg {
|
||||||
|
fill: var(--link-item-image-color);
|
||||||
|
width: $diameter;
|
||||||
|
height: auto;
|
||||||
|
transition: fill $duration-zoom ease-in;
|
||||||
|
|
||||||
|
&.shareIcon {
|
||||||
|
width: $unit-4x;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue