Skip to content

Commit 4c736f1

Browse files
TCA-560 #comment This commit fixes missing typedef rules and forces function component definitions to be function expressions #time 30
1 parent c1be9ba commit 4c736f1

File tree

14 files changed

+107
-59
lines changed

14 files changed

+107
-59
lines changed

src-ts/.eslintrc.js

Lines changed: 52 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ module.exports = {
4444
}
4545
}
4646
],
47-
'@typescript-eslint/explicit-function-return-type': 'off',
47+
'@typescript-eslint/explicit-function-return-type': 'error',
4848
'@typescript-eslint/no-explicit-any': 'error',
4949
'@typescript-eslint/no-inferrable-types': 'off',
5050
'@typescript-eslint/no-shadow': 'error',
@@ -59,6 +59,19 @@ module.exports = {
5959
allowNullableString: true
6060
}
6161
],
62+
'@typescript-eslint/typedef': [
63+
'error',
64+
{
65+
arrowParameter: false,
66+
propertyDeclaration: true,
67+
parameter: true,
68+
memberVariableDeclaration: true,
69+
callSignature: true,
70+
variableDeclaration: true,
71+
arrayDestructuring: true,
72+
objectDestructuring: true
73+
}
74+
],
6275
'arrow-parens': [
6376
'error',
6477
'as-needed'
@@ -155,13 +168,41 @@ module.exports = {
155168
'padded-blocks': 'off',
156169
'padding-line-between-statements': [
157170
'error',
158-
{ blankLine: 'always', prev: 'directive', next: '*' },
159-
{ blankLine: 'any', prev: 'directive', next: 'directive' },
160-
{ blankLine: 'always', prev: 'cjs-import', next: '*' },
161-
{ blankLine: 'any', prev: 'cjs-import', next: 'cjs-import' },
162-
{ blankLine: 'always', prev: 'cjs-export', next: '*' },
163-
{ blankLine: 'always', prev: 'multiline-block-like', next: '*' },
164-
{ blankLine: 'always', prev: 'class', next: '*' }
171+
{
172+
blankLine: 'always',
173+
prev: 'directive',
174+
next: '*'
175+
},
176+
{
177+
blankLine: 'any',
178+
prev: 'directive',
179+
next: 'directive'
180+
},
181+
{
182+
blankLine: 'always',
183+
prev: 'cjs-import',
184+
next: '*'
185+
},
186+
{
187+
blankLine: 'any',
188+
prev: 'cjs-import',
189+
next: 'cjs-import'
190+
},
191+
{
192+
blankLine: 'always',
193+
prev: 'cjs-export',
194+
next: '*'
195+
},
196+
{
197+
blankLine: 'always',
198+
prev: 'multiline-block-like',
199+
next: '*'
200+
},
201+
{
202+
blankLine: 'always',
203+
prev: 'class',
204+
next: '*'
205+
}
165206
],
166207
'prefer-destructuring': 'off',
167208
'react-hooks/exhaustive-deps': 'warn',
@@ -171,9 +212,10 @@ module.exports = {
171212
'never'
172213
],
173214
'react/function-component-definition': [
174-
2,
215+
'error',
175216
{
176-
namedComponents: 'arrow-function'
217+
namedComponents: 'function-declaration',
218+
unnamedComponents: 'function-expression'
177219
}
178220
],
179221
'react/jsx-filename-extension': [

src-ts/lib/route-provider/require-auth-provider/require-auth.provider.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ interface RequireAuthProviderProps {
99
rolesRequired?: Array<string>
1010
}
1111

12-
const RequireAuthProvider = (props: RequireAuthProviderProps): JSX.Element => {
12+
function RequireAuthProvider(props: RequireAuthProviderProps): JSX.Element {
1313

1414
const profileContextData: ProfileContextData = useContext(profileContext)
1515
const { profile, initialized }: ProfileContextData = profileContextData

src-ts/tools/dev-center/dev-center-lib/MarkdownDoc/MarkdownCode.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ interface LineNumbersProps {
5454
showLineNumbers: boolean
5555
}
5656

57-
const LineNumbers = (props: LineNumbersProps): React.ReactElement | null => {
57+
function LineNumbers(props: LineNumbersProps): React.ReactElement | null {
5858
const { codeRef, showLineNumbers, onVisibilityChange }: LineNumbersProps
5959
= props
6060
const [lineNumbers, setLineNumbers]: [

src-ts/tools/gamification-admin/pages/badge-detail/AwardedMembersTab/awarded-members-table/member-action-renderer/MemberActionRenderer.tsx

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,28 @@ import { MemberBadgeAward } from '../../../../../game-lib'
44

55
import styles from './MemberActionRenderer.module.scss'
66

7-
const MemberActionRenderer = (memberAward: MemberBadgeAward): JSX.Element =>
7+
function MemberActionRenderer(memberAward: MemberBadgeAward): JSX.Element {
88

9-
// const isMobile: boolean = useCheckIsMobile()
9+
// const isMobile: boolean = useCheckIsMobile()
1010

11-
// const buttonProps: ButtonProps = {
12-
// buttonStyle: 'secondary',
13-
// size: isMobile ? 'xs' : 'sm',
14-
// }
11+
// const buttonProps: ButtonProps = {
12+
// buttonStyle: 'secondary',
13+
// size: isMobile ? 'xs' : 'sm',
14+
// }
1515

16-
// const actionButtons: Array<{
17-
// label: string
18-
// }> = [
19-
// {
20-
// label: 'Unassign',
21-
// },
22-
// ]
16+
// const actionButtons: Array<{
17+
// label: string
18+
// }> = [
19+
// {
20+
// label: 'Unassign',
21+
// },
22+
// ]
2323

24-
// function onUnassign(): void {
24+
// function onUnassign(): void {
2525

26-
// }
26+
// }
2727

28-
(
28+
return (
2929
<div className={styles['badge-actions']}>
3030
{/* {actionButtons.map((button, index) => {
3131
return (
@@ -39,5 +39,6 @@ const MemberActionRenderer = (memberAward: MemberBadgeAward): JSX.Element =>
3939
})} */}
4040
</div>
4141
)
42+
}
4243

4344
export default MemberActionRenderer

src-ts/tools/gamification-admin/pages/badge-detail/AwardedMembersTab/awarded-members-table/member-awardedAt-renderer/MemberAwaredAtRenderer.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { MemberBadgeAward } from '../../../../../game-lib'
22

33
import styles from './MemberAwaredAtRenderer.module.scss'
44

5-
const MemberAwaredAtRenderer = (memberAward: MemberBadgeAward): JSX.Element => {
5+
function MemberAwaredAtRenderer(memberAward: MemberBadgeAward): JSX.Element {
66
const dateFormat: Record<string, string> = {
77
day: 'numeric',
88
hour: 'numeric',
@@ -12,7 +12,9 @@ const MemberAwaredAtRenderer = (memberAward: MemberBadgeAward): JSX.Element => {
1212
}
1313

1414
return (
15-
<div className={styles.memberAwardedAt}>{new Date(memberAward.awarded_at).toLocaleString(undefined, dateFormat)}</div>
15+
<div className={styles.memberAwardedAt}>
16+
{new Date(memberAward.awarded_at).toLocaleString(undefined, dateFormat)}
17+
</div>
1618
)
1719
}
1820

src-ts/tools/gamification-admin/pages/badge-detail/AwardedMembersTab/awarded-members-table/member-handle-renderer/MemberHandleRenderer.tsx

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,16 @@ import { MemberBadgeAward } from '../../../../../game-lib'
44

55
import styles from './MemberHandleRenderer.module.scss'
66

7-
const MemberHandleRenderer = (memberAward: MemberBadgeAward): JSX.Element => (
8-
<div className={styles.memberAward}>
9-
<p className={styles.memberHandle}>{memberAward.user_handle}</p>
10-
<IconOutline.ExternalLinkIcon
11-
className={styles.profileLink}
12-
onClick={() => window.open(`${EnvironmentConfig.TOPCODER_URLS.USER_PROFILE}/${memberAward.user_handle}`, '_blank')}
13-
/>
14-
</div>
15-
)
7+
function MemberHandleRenderer(memberAward: MemberBadgeAward): JSX.Element {
8+
return (
9+
<div className={styles.memberAward}>
10+
<p className={styles.memberHandle}>{memberAward.user_handle}</p>
11+
<IconOutline.ExternalLinkIcon
12+
className={styles.profileLink}
13+
onClick={() => window.open(`${EnvironmentConfig.TOPCODER_URLS.USER_PROFILE}/${memberAward.user_handle}`, '_blank')}
14+
/>
15+
</div>
16+
)
17+
}
1618

1719
export default MemberHandleRenderer

src-ts/tools/gamification-admin/pages/badge-listing/badge-listing-table/badge-action-renderer/BadgeActionRenderer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { badgeDetailPath } from '../../../../gamification-admin.routes'
44

55
import styles from './BadgeActionRenderer.module.scss'
66

7-
const BadgeActionRenderer = (badge: GameBadge): JSX.Element => {
7+
function BadgeActionRenderer(badge: GameBadge): JSX.Element {
88

99
const isMobile: boolean = useCheckIsMobile()
1010

src-ts/tools/gamification-admin/pages/badge-listing/badge-listing-table/badge-name-renderer/BadgeListingNameRenderer.tsx

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,17 @@ import { GameBadge } from '../../../../game-lib'
22

33
import styles from './BadgeListingNameRenderer.module.scss'
44

5-
const BadgeListingNameRenderer = (badge: GameBadge): JSX.Element => (
6-
<div className={styles.badge}>
7-
<img
8-
alt={badge.badge_name}
9-
className={styles[badge.active ? 'badge-image' : 'badge-image-disabled']}
10-
src={badge.badge_image_url}
11-
/>
12-
<p className={styles['badge-name']}>{badge.badge_name}</p>
13-
</div>
14-
)
5+
function BadgeListingNameRenderer(badge: GameBadge): JSX.Element {
6+
return (
7+
<div className={styles.badge}>
8+
<img
9+
alt={badge.badge_name}
10+
className={styles[badge.active ? 'badge-image' : 'badge-image-disabled']}
11+
src={badge.badge_image_url}
12+
/>
13+
<p className={styles['badge-name']}>{badge.badge_name}</p>
14+
</div>
15+
)
16+
}
1517

1618
export default BadgeListingNameRenderer

src-ts/tools/learn/welcome/WelcomePage.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { FC } from 'react'
21
import classNames from 'classnames'
32

43
import { ContentLayout, LoadingSpinner, Portal } from '../../../lib'
@@ -16,7 +15,7 @@ import { ProgressBlock } from './progress-block'
1615
import { ReactComponent as TcAcademyFullLogoSvg } from './tca-full-logo.svg'
1716
import styles from './WelcomePage.module.scss'
1817

19-
const WelcomePage: FC<{}> = () => {
18+
function WelcomePage(): React.ReactNode {
2019

2120
const allCertsData: AllCertificationsProviderData = useAllCertifications()
2221
const userCertsData: UserCertificationsProviderData = useUserCertifications()

src-ts/tools/work/work-lib/work-status-item/WorkStatusItem.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export interface WorkStatusItemProps {
66
workStatus?: WorkStatus
77
}
88

9-
const WorkStatusItem = ({ workStatus }: WorkStatusItemProps): JSX.Element => {
9+
function WorkStatusItem({ workStatus }: WorkStatusItemProps): JSX.Element {
1010

1111
if (!workStatus) {
1212
return <></>

src-ts/tools/work/work-table/work-badge-renderer/WorkBadgeRenderer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ interface WorkBadgeRendererProps {
88
type: 'messages' | 'items'
99
}
1010

11-
const WorkBadgeRenderer = (props: WorkBadgeRendererProps): JSX.Element => {
11+
function WorkBadgeRenderer(props: WorkBadgeRendererProps): JSX.Element {
1212

1313
if (props.count === undefined || (!!props.hideZero && props.count === 0)) {
1414
return <></>

src-ts/tools/work/work-table/work-delete-button-renderer/WorkDeleteButtonRenderer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
import { Work, workContext, WorkContextData, workDeleteAsync, WorkStatus } from '../../work-lib'
1111
import '../../../../lib/styles/index.scss'
1212

13-
const WorkDeleteButtonRenderer = (work: Work): JSX.Element | undefined => {
13+
function WorkDeleteButtonRenderer(work: Work): JSX.Element | undefined {
1414

1515
const workContextData: WorkContextData = useContext(workContext)
1616
const [confirmationOpen, setConfirmationOpen]: [boolean, Dispatch<SetStateAction<boolean>>] = useState<boolean>(false)
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Work, WorkStatusItem } from '../../work-lib'
22

3-
const WorkStatusRenderer = (work: Work): JSX.Element => (
4-
<WorkStatusItem workStatus={work.status} />
5-
)
3+
function WorkStatusRenderer(work: Work): JSX.Element {
4+
return <WorkStatusItem workStatus={work.status} />
5+
}
66

77
export default WorkStatusRenderer

src-ts/tools/work/work-table/work-table-title-renderer/WorkTableTitleRenderer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99

1010
import styles from './WorkTableTitleRenderer.module.scss'
1111

12-
const WorkTableTitleRenderer = (data: Work): JSX.Element => {
12+
function WorkTableTitleRenderer(data: Work): JSX.Element {
1313

1414
let Icon: JSX.Element
1515
switch (data.typeCategory) {

0 commit comments

Comments
 (0)