Skip to content

Commit 51aa8e3

Browse files
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
1 parent 8a96148 commit 51aa8e3

File tree

6 files changed

+65
-32
lines changed

6 files changed

+65
-32
lines changed

instrumentation.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ export async function register() {
77
version: packageJson.version,
88
env: process.env.DD_ENV,
99
})
10+
tracer.use('next')
1011
}
1112
}

pages/addbot.tsx

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -367,20 +367,30 @@ const AddBot: NextPage<AddBotProps> = ({ logged, user, csrfToken, theme }) => {
367367
}
368368
>
369369
<Selects
370-
options={Object.entries(botEnforcements).map(([k, v]) => ({
371-
label: v.label,
372-
value: k,
373-
}))}
374-
handleChange={(value) => {
375-
setFieldValue(
376-
'enforcements',
377-
value.map((v) => v.value)
378-
)
370+
options={Object.entries(botEnforcements)
371+
.filter(([k]) => k === 'NONE' || !values.enforcements.includes('NONE'))
372+
.map(([k, v]) => ({
373+
label: v.label,
374+
value: k,
375+
}))}
376+
handleChange={(values) => {
377+
if (values.some((i) => i.value === 'NONE')) {
378+
setFieldValue('enforcements', ['NONE'])
379+
} else {
380+
setFieldValue(
381+
'enforcements',
382+
values.map((v) => v.value)
383+
)
384+
}
379385
}}
380386
handleTouch={() => setFieldTouched('enforcements', true)}
381387
values={values.enforcements ?? ([] as string[])}
382-
setValues={(value) => {
383-
setFieldValue('enforcements', value)
388+
setValues={(values) => {
389+
if (values.includes('NONE')) {
390+
setFieldValue('enforcements', ['NONE'])
391+
} else {
392+
setFieldValue('enforcements', values)
393+
}
384394
}}
385395
/>
386396
</Label>

pages/bots/[id]/edit.tsx

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -339,20 +339,30 @@ const ManageBotPage: NextPage<ManageBotProps> = ({ bot, user, csrfToken, theme }
339339
}
340340
>
341341
<Selects
342-
options={Object.entries(botEnforcements).map(([k, v]) => ({
343-
label: v.label,
344-
value: k,
345-
}))}
346-
handleChange={(value) => {
347-
setFieldValue(
348-
'enforcements',
349-
value.map((v) => v.value)
350-
)
342+
options={Object.entries(botEnforcements)
343+
.filter(([k]) => k === 'NONE' || !values.enforcements.includes('NONE'))
344+
.map(([k, v]) => ({
345+
label: v.label,
346+
value: k,
347+
}))}
348+
handleChange={(values) => {
349+
if (values.some((i) => i.value === 'NONE')) {
350+
setFieldValue('enforcements', ['NONE'])
351+
} else {
352+
setFieldValue(
353+
'enforcements',
354+
values.map((v) => v.value)
355+
)
356+
}
351357
}}
352358
handleTouch={() => setFieldTouched('enforcements', true)}
353359
values={values.enforcements ?? ([] as string[])}
354-
setValues={(value) => {
355-
setFieldValue('enforcements', value)
360+
setValues={(values) => {
361+
if (values.includes('NONE')) {
362+
setFieldValue('enforcements', ['NONE'])
363+
} else {
364+
setFieldValue('enforcements', values)
365+
}
356366
}}
357367
/>
358368
</Label>

pages/bots/[id]/index.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,13 +116,15 @@ const Bots: NextPage<BotsProps> = ({ data, desc, date, user, theme, csrfToken })
116116
로 문의해주세요.
117117
</p>
118118
</Message>
119-
) : data.enforcements.length > 0 ? (
119+
) : data.enforcements.filter((i) => i !== 'NONE').length > 0 ? (
120120
<Message type='warning'>
121121
<h2 className='text-lg font-extrabold'>이 봇은 기능에 제한을 두고 있습니다.</h2>
122122
<p>
123-
{data.enforcements.map((i) => (
124-
<li key={i}>{botEnforcements[i].description}</li>
125-
))}
123+
{data.enforcements
124+
.filter((i) => i !== 'NONE')
125+
.map((i) => (
126+
<li key={i}>{botEnforcements[i].description}</li>
127+
))}
126128
</p>
127129
</Message>
128130
) : (

utils/Constants.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,13 +121,17 @@ export const botCategoryDescription = {
121121
}
122122

123123
export const botEnforcements = {
124+
NONE: {
125+
label: '해당사항이 없습니다.',
126+
description: '',
127+
},
124128
JOIN_PARTIALLY_ENFORCED: {
125-
label: '서버 참여가 필요한 기능이 있습니다',
126-
description: '봇의 일부 명령어는 봇의 디스코드 서버에 참여해야 사용할 수 있습니다.',
129+
label: '지정된 서버에 참여해야만 사용이 가능한 기능이 있습니다',
130+
description: '봇의 일부 명령어는 봇이 지정한 특정 디스코드 서버에 참여해야 사용할 수 있습니다.',
127131
},
128132
JOIN_ENFORCED: {
129-
label: '서버 참여 없이는 봇의 핵심 기능을 사용할 수 없습니다',
130-
description: '봇의 핵심 기능은 봇의 디스코드 서버에 참여해야 사용할 수 있습니다.',
133+
label: '지정된 서버에 참여하지 않으면 봇의 핵심 기능을 사용할 수 없습니다',
134+
description: '봇의 핵심 기능은 봇이 지정한 특정 디스코드 서버에 참여해야 사용할 수 있습니다.',
131135
},
132136
LICENSE_PARTIALLY_ENFORCED: {
133137
label: '유료 구매가 필요한 기능이 있습니다',

utils/Yup.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,10 @@ export const AddBotSubmitSchema: Yup.SchemaOf<AddBotSubmit> = Yup.object({
175175
.min(100, '봇 설명은 최소 100자여야합니다.')
176176
.max(1500, '봇 설명은 최대 1500자여야합니다.')
177177
.required('봇 설명은 필수 항목입니다.'),
178-
enforcements: Yup.array(Yup.string().oneOf(Object.keys(botEnforcements))),
178+
enforcements: Yup.array(Yup.string().oneOf(Object.keys(botEnforcements)))
179+
.min(1, '최소 한 개의 선택지를 선택해주세요.')
180+
.unique('선택지는 중복될 수 없습니다.')
181+
.required('강제사항 명시는 필수 선택사항입니다.'),
179182
_csrf: Yup.string().required(),
180183
_captcha: Yup.string().required(),
181184
})
@@ -306,7 +309,10 @@ export function getManageBotSchema(perkAvailable = false) {
306309
.min(100, '봇 설명은 최소 100자여야합니다.')
307310
.max(1500, '봇 설명은 최대 1500자여야합니다.')
308311
.required('봇 설명은 필수 항목입니다.'),
309-
enforcements: Yup.array(Yup.string().oneOf(Object.keys(botEnforcements))),
312+
enforcements: Yup.array(Yup.string().oneOf(Object.keys(botEnforcements)))
313+
.min(1, '최소 한 개의 선택지를 선택해주세요.')
314+
.unique('선택지는 중복될 수 없습니다.')
315+
.required('강제사항 명시는 필수 선택사항입니다.'),
310316
_csrf: Yup.string().required(),
311317
}
312318

0 commit comments

Comments
 (0)