mirror of
https://github.com/koreanbots/core.git
synced 2025-12-15 06:10:22 +00:00
feat: 강제사항 명시 UX 개선 (#689)
* feat: add none to enforcement entries * chore: clarify join enforced description * feat: add constant for enforcements * fix: do not filter none * fix: do not show message when none is set * style: fix lint * chore: explicit next of dd-trace * chore: improve wordings for join enforcements * chore: clarify join enforced
This commit is contained in:
parent
8a96148245
commit
51aa8e39e7
@ -7,5 +7,6 @@ export async function register() {
|
|||||||
version: packageJson.version,
|
version: packageJson.version,
|
||||||
env: process.env.DD_ENV,
|
env: process.env.DD_ENV,
|
||||||
})
|
})
|
||||||
|
tracer.use('next')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -367,20 +367,30 @@ const AddBot: NextPage<AddBotProps> = ({ logged, user, csrfToken, theme }) => {
|
|||||||
}
|
}
|
||||||
>
|
>
|
||||||
<Selects
|
<Selects
|
||||||
options={Object.entries(botEnforcements).map(([k, v]) => ({
|
options={Object.entries(botEnforcements)
|
||||||
label: v.label,
|
.filter(([k]) => k === 'NONE' || !values.enforcements.includes('NONE'))
|
||||||
value: k,
|
.map(([k, v]) => ({
|
||||||
}))}
|
label: v.label,
|
||||||
handleChange={(value) => {
|
value: k,
|
||||||
setFieldValue(
|
}))}
|
||||||
'enforcements',
|
handleChange={(values) => {
|
||||||
value.map((v) => v.value)
|
if (values.some((i) => i.value === 'NONE')) {
|
||||||
)
|
setFieldValue('enforcements', ['NONE'])
|
||||||
|
} else {
|
||||||
|
setFieldValue(
|
||||||
|
'enforcements',
|
||||||
|
values.map((v) => v.value)
|
||||||
|
)
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
handleTouch={() => setFieldTouched('enforcements', true)}
|
handleTouch={() => setFieldTouched('enforcements', true)}
|
||||||
values={values.enforcements ?? ([] as string[])}
|
values={values.enforcements ?? ([] as string[])}
|
||||||
setValues={(value) => {
|
setValues={(values) => {
|
||||||
setFieldValue('enforcements', value)
|
if (values.includes('NONE')) {
|
||||||
|
setFieldValue('enforcements', ['NONE'])
|
||||||
|
} else {
|
||||||
|
setFieldValue('enforcements', values)
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</Label>
|
</Label>
|
||||||
|
|||||||
@ -339,20 +339,30 @@ const ManageBotPage: NextPage<ManageBotProps> = ({ bot, user, csrfToken, theme }
|
|||||||
}
|
}
|
||||||
>
|
>
|
||||||
<Selects
|
<Selects
|
||||||
options={Object.entries(botEnforcements).map(([k, v]) => ({
|
options={Object.entries(botEnforcements)
|
||||||
label: v.label,
|
.filter(([k]) => k === 'NONE' || !values.enforcements.includes('NONE'))
|
||||||
value: k,
|
.map(([k, v]) => ({
|
||||||
}))}
|
label: v.label,
|
||||||
handleChange={(value) => {
|
value: k,
|
||||||
setFieldValue(
|
}))}
|
||||||
'enforcements',
|
handleChange={(values) => {
|
||||||
value.map((v) => v.value)
|
if (values.some((i) => i.value === 'NONE')) {
|
||||||
)
|
setFieldValue('enforcements', ['NONE'])
|
||||||
|
} else {
|
||||||
|
setFieldValue(
|
||||||
|
'enforcements',
|
||||||
|
values.map((v) => v.value)
|
||||||
|
)
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
handleTouch={() => setFieldTouched('enforcements', true)}
|
handleTouch={() => setFieldTouched('enforcements', true)}
|
||||||
values={values.enforcements ?? ([] as string[])}
|
values={values.enforcements ?? ([] as string[])}
|
||||||
setValues={(value) => {
|
setValues={(values) => {
|
||||||
setFieldValue('enforcements', value)
|
if (values.includes('NONE')) {
|
||||||
|
setFieldValue('enforcements', ['NONE'])
|
||||||
|
} else {
|
||||||
|
setFieldValue('enforcements', values)
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</Label>
|
</Label>
|
||||||
|
|||||||
@ -116,13 +116,15 @@ const Bots: NextPage<BotsProps> = ({ data, desc, date, user, theme, csrfToken })
|
|||||||
로 문의해주세요.
|
로 문의해주세요.
|
||||||
</p>
|
</p>
|
||||||
</Message>
|
</Message>
|
||||||
) : data.enforcements.length > 0 ? (
|
) : data.enforcements.filter((i) => i !== 'NONE').length > 0 ? (
|
||||||
<Message type='warning'>
|
<Message type='warning'>
|
||||||
<h2 className='text-lg font-extrabold'>이 봇은 기능에 제한을 두고 있습니다.</h2>
|
<h2 className='text-lg font-extrabold'>이 봇은 기능에 제한을 두고 있습니다.</h2>
|
||||||
<p>
|
<p>
|
||||||
{data.enforcements.map((i) => (
|
{data.enforcements
|
||||||
<li key={i}>{botEnforcements[i].description}</li>
|
.filter((i) => i !== 'NONE')
|
||||||
))}
|
.map((i) => (
|
||||||
|
<li key={i}>{botEnforcements[i].description}</li>
|
||||||
|
))}
|
||||||
</p>
|
</p>
|
||||||
</Message>
|
</Message>
|
||||||
) : (
|
) : (
|
||||||
|
|||||||
@ -121,13 +121,17 @@ export const botCategoryDescription = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const botEnforcements = {
|
export const botEnforcements = {
|
||||||
|
NONE: {
|
||||||
|
label: '해당사항이 없습니다.',
|
||||||
|
description: '',
|
||||||
|
},
|
||||||
JOIN_PARTIALLY_ENFORCED: {
|
JOIN_PARTIALLY_ENFORCED: {
|
||||||
label: '서버 참여가 필요한 기능이 있습니다',
|
label: '지정된 서버에 참여해야만 사용이 가능한 기능이 있습니다',
|
||||||
description: '봇의 일부 명령어는 봇의 디스코드 서버에 참여해야 사용할 수 있습니다.',
|
description: '봇의 일부 명령어는 봇이 지정한 특정 디스코드 서버에 참여해야 사용할 수 있습니다.',
|
||||||
},
|
},
|
||||||
JOIN_ENFORCED: {
|
JOIN_ENFORCED: {
|
||||||
label: '서버 참여 없이는 봇의 핵심 기능을 사용할 수 없습니다',
|
label: '지정된 서버에 참여하지 않으면 봇의 핵심 기능을 사용할 수 없습니다',
|
||||||
description: '봇의 핵심 기능은 봇의 디스코드 서버에 참여해야 사용할 수 있습니다.',
|
description: '봇의 핵심 기능은 봇이 지정한 특정 디스코드 서버에 참여해야 사용할 수 있습니다.',
|
||||||
},
|
},
|
||||||
LICENSE_PARTIALLY_ENFORCED: {
|
LICENSE_PARTIALLY_ENFORCED: {
|
||||||
label: '유료 구매가 필요한 기능이 있습니다',
|
label: '유료 구매가 필요한 기능이 있습니다',
|
||||||
|
|||||||
10
utils/Yup.ts
10
utils/Yup.ts
@ -175,7 +175,10 @@ export const AddBotSubmitSchema: Yup.SchemaOf<AddBotSubmit> = Yup.object({
|
|||||||
.min(100, '봇 설명은 최소 100자여야합니다.')
|
.min(100, '봇 설명은 최소 100자여야합니다.')
|
||||||
.max(1500, '봇 설명은 최대 1500자여야합니다.')
|
.max(1500, '봇 설명은 최대 1500자여야합니다.')
|
||||||
.required('봇 설명은 필수 항목입니다.'),
|
.required('봇 설명은 필수 항목입니다.'),
|
||||||
enforcements: Yup.array(Yup.string().oneOf(Object.keys(botEnforcements))),
|
enforcements: Yup.array(Yup.string().oneOf(Object.keys(botEnforcements)))
|
||||||
|
.min(1, '최소 한 개의 선택지를 선택해주세요.')
|
||||||
|
.unique('선택지는 중복될 수 없습니다.')
|
||||||
|
.required('강제사항 명시는 필수 선택사항입니다.'),
|
||||||
_csrf: Yup.string().required(),
|
_csrf: Yup.string().required(),
|
||||||
_captcha: Yup.string().required(),
|
_captcha: Yup.string().required(),
|
||||||
})
|
})
|
||||||
@ -306,7 +309,10 @@ export function getManageBotSchema(perkAvailable = false) {
|
|||||||
.min(100, '봇 설명은 최소 100자여야합니다.')
|
.min(100, '봇 설명은 최소 100자여야합니다.')
|
||||||
.max(1500, '봇 설명은 최대 1500자여야합니다.')
|
.max(1500, '봇 설명은 최대 1500자여야합니다.')
|
||||||
.required('봇 설명은 필수 항목입니다.'),
|
.required('봇 설명은 필수 항목입니다.'),
|
||||||
enforcements: Yup.array(Yup.string().oneOf(Object.keys(botEnforcements))),
|
enforcements: Yup.array(Yup.string().oneOf(Object.keys(botEnforcements)))
|
||||||
|
.min(1, '최소 한 개의 선택지를 선택해주세요.')
|
||||||
|
.unique('선택지는 중복될 수 없습니다.')
|
||||||
|
.required('강제사항 명시는 필수 선택사항입니다.'),
|
||||||
_csrf: Yup.string().required(),
|
_csrf: Yup.string().required(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user