Skip to content

Commit f5b9823

Browse files
Merge pull request #406 from topcoder-platform/TCA-560_line-breaks
TCA-560 Type Defs -> TCA-499_eslint
2 parents aed04fc + 1224d85 commit f5b9823

File tree

14 files changed

+368
-308
lines changed

14 files changed

+368
-308
lines changed

src-ts/.eslintrc.js

Lines changed: 57 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,12 @@ module.exports = {
4444
}
4545
}
4646
],
47-
'@typescript-eslint/explicit-function-return-type': 'off',
47+
'@typescript-eslint/explicit-function-return-type': [
48+
'error',
49+
{
50+
allowExpressions: true
51+
}
52+
],
4853
'@typescript-eslint/no-explicit-any': 'error',
4954
'@typescript-eslint/no-inferrable-types': 'off',
5055
'@typescript-eslint/no-shadow': 'error',
@@ -59,6 +64,19 @@ module.exports = {
5964
allowNullableString: true
6065
}
6166
],
67+
'@typescript-eslint/typedef': [
68+
'error',
69+
{
70+
arrowParameter: false,
71+
propertyDeclaration: true,
72+
parameter: true,
73+
memberVariableDeclaration: true,
74+
callSignature: true,
75+
variableDeclaration: true,
76+
arrayDestructuring: false,
77+
objectDestructuring: true
78+
}
79+
],
6280
'arrow-parens': [
6381
'error',
6482
'as-needed'
@@ -171,13 +189,41 @@ module.exports = {
171189
'padded-blocks': 'off',
172190
'padding-line-between-statements': [
173191
'error',
174-
{ blankLine: 'always', prev: 'directive', next: '*' },
175-
{ blankLine: 'any', prev: 'directive', next: 'directive' },
176-
{ blankLine: 'always', prev: 'cjs-import', next: '*' },
177-
{ blankLine: 'any', prev: 'cjs-import', next: 'cjs-import' },
178-
{ blankLine: 'always', prev: 'cjs-export', next: '*' },
179-
{ blankLine: 'always', prev: 'multiline-block-like', next: '*' },
180-
{ blankLine: 'always', prev: 'class', next: '*' }
192+
{
193+
blankLine: 'always',
194+
prev: 'directive',
195+
next: '*'
196+
},
197+
{
198+
blankLine: 'any',
199+
prev: 'directive',
200+
next: 'directive'
201+
},
202+
{
203+
blankLine: 'always',
204+
prev: 'cjs-import',
205+
next: '*'
206+
},
207+
{
208+
blankLine: 'any',
209+
prev: 'cjs-import',
210+
next: 'cjs-import'
211+
},
212+
{
213+
blankLine: 'always',
214+
prev: 'cjs-export',
215+
next: '*'
216+
},
217+
{
218+
blankLine: 'always',
219+
prev: 'multiline-block-like',
220+
next: '*'
221+
},
222+
{
223+
blankLine: 'always',
224+
prev: 'class',
225+
next: '*'
226+
}
181227
],
182228
'prefer-destructuring': 'off',
183229
'react-hooks/exhaustive-deps': 'warn',
@@ -187,9 +233,10 @@ module.exports = {
187233
'never'
188234
],
189235
'react/function-component-definition': [
190-
2,
236+
'error',
191237
{
192-
namedComponents: 'arrow-function'
238+
namedComponents: 'arrow-function',
239+
unnamedComponents: 'function-expression'
193240
}
194241
],
195242
'react/jsx-filename-extension': [

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

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,39 +9,40 @@ interface RequireAuthProviderProps {
99
rolesRequired?: Array<string>
1010
}
1111

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

14-
const profileContextData: ProfileContextData = useContext(profileContext)
15-
const { profile, initialized }: ProfileContextData = profileContextData
15+
const profileContextData: ProfileContextData = useContext(profileContext)
16+
const { profile, initialized }: ProfileContextData = profileContextData
1617

17-
// if we're not initialized yet, just return the children
18-
if (!initialized) {
19-
return props.children
20-
}
18+
// if we're not initialized yet, just return the children
19+
if (!initialized) {
20+
return props.children
21+
}
2122

22-
// if we have a profile and `rolesRequired` is configured for the route
23-
// check the user's roles, allow access or show restricted page
24-
if (!!profile) {
25-
if (props.rolesRequired) {
26-
if (!profile.roles) {
27-
return RestrictedPage
28-
}
23+
// if we have a profile and `rolesRequired` is configured for the route
24+
// check the user's roles, allow access or show restricted page
25+
if (!!profile) {
26+
if (props.rolesRequired) {
27+
if (!profile.roles) {
28+
return RestrictedPage
29+
}
30+
31+
// if the profile doesn't include all the required roles, show the restricted page
32+
if (props.rolesRequired.some(role => !profile.roles.includes(role))) {
33+
return RestrictedPage
34+
}
2935

30-
// if the profile doesn't include all the required roles, show the restricted page
31-
if (props.rolesRequired.some(role => !profile.roles.includes(role))) {
32-
return RestrictedPage
36+
return props.children
3337
}
3438

3539
return props.children
36-
}
3740

38-
return props.children
41+
}
3942

43+
// redirect to the login page
44+
window.location.href = props.loginUrl
45+
return <></>
4046
}
4147

42-
// redirect to the login page
43-
window.location.href = props.loginUrl
44-
return <></>
45-
}
46-
4748
export default RequireAuthProvider

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

Lines changed: 69 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,7 @@ export const MarkdownCode: React.FC<MarkdownCodeProps> = props => {
3232

3333
return (
3434
<div
35-
className={`${styles.codeBlock} ${
36-
showLineNumbers ? styles['show-line-numbers'] : ''
37-
} hljs`}
35+
className={`${styles.codeBlock} ${showLineNumbers ? styles['show-line-numbers'] : ''} hljs`}
3836
ref={ref}
3937
>
4038
<LineNumbers
@@ -54,86 +52,87 @@ interface LineNumbersProps {
5452
showLineNumbers: boolean
5553
}
5654

57-
const LineNumbers = (props: LineNumbersProps): React.ReactElement | null => {
58-
const { codeRef, showLineNumbers, onVisibilityChange }: LineNumbersProps
59-
= props
60-
const [lineNumbers, setLineNumbers]: [
61-
Array<number>,
62-
React.Dispatch<React.SetStateAction<Array<number>>>
63-
] = React.useState([1])
64-
65-
const size: ReturnType<typeof useWindowSize> = useWindowSize()
66-
67-
// OnResizing
68-
const debounceTimer: React.MutableRefObject<
69-
ReturnType<typeof setTimeout> | undefined
70-
> = React.useRef<ReturnType<typeof setTimeout>>()
71-
React.useEffect(() => {
72-
if (!size.width || !codeRef.current) {
73-
return
74-
}
55+
const LineNumbers: (props: LineNumbersProps) => React.ReactElement | null
56+
= (props: LineNumbersProps): React.ReactElement | null => {
57+
58+
const { codeRef, showLineNumbers, onVisibilityChange }: LineNumbersProps
59+
= props
60+
const [lineNumbers, setLineNumbers]: [
61+
Array<number>,
62+
React.Dispatch<React.SetStateAction<Array<number>>>
63+
] = React.useState([1])
64+
65+
const size: ReturnType<typeof useWindowSize> = useWindowSize()
66+
67+
// OnResizing
68+
const debounceTimer: React.MutableRefObject<
69+
ReturnType<typeof setTimeout> | undefined
70+
> = React.useRef<ReturnType<typeof setTimeout>>()
71+
React.useEffect(() => {
72+
if (!size.width || !codeRef.current) {
73+
return
74+
}
7575

76-
if (debounceTimer.current) {
77-
clearTimeout(debounceTimer.current)
78-
debounceTimer.current = undefined
79-
}
76+
if (debounceTimer.current) {
77+
clearTimeout(debounceTimer.current)
78+
debounceTimer.current = undefined
79+
}
8080

81-
const pre: HTMLPreElement | null = codeRef.current.querySelector('pre')
82-
if (!pre) {
83-
return
84-
}
81+
const pre: HTMLPreElement | null = codeRef.current.querySelector('pre')
82+
if (!pre) {
83+
return
84+
}
85+
86+
const innerText: string = pre.innerText
87+
const clientWidth: number = pre.clientWidth
8588

86-
const innerText: string = pre.innerText
87-
const clientWidth: number = pre.clientWidth
89+
const handleResizing: () => void = () => {
90+
const result: Array<number> = computeLineNumbers(
91+
innerText,
92+
clientWidth,
93+
)
8894

89-
const handleResizing: () => void = () => {
90-
const result: Array<number> = computeLineNumbers(
91-
innerText,
92-
clientWidth,
93-
)
95+
if (result.length < 2) {
96+
onVisibilityChange(false)
97+
} else {
98+
onVisibilityChange(true)
99+
}
94100

95-
if (result.length < 2) {
96-
onVisibilityChange(false)
97-
} else {
98-
onVisibilityChange(true)
101+
setLineNumbers(result)
99102
}
100103

101-
setLineNumbers(result)
102-
}
104+
debounceTimer.current = setTimeout(() => {
105+
debounceTimer.current = undefined
106+
handleResizing()
107+
}, 100)
103108

104-
debounceTimer.current = setTimeout(() => {
105-
debounceTimer.current = undefined
106-
handleResizing()
107-
}, 100)
109+
return () => {
110+
clearTimeout(debounceTimer.current)
111+
}
112+
}, [size.width, onVisibilityChange, codeRef])
108113

109-
return () => {
110-
clearTimeout(debounceTimer.current)
114+
if (!showLineNumbers) {
115+
return null
111116
}
112-
}, [size.width, onVisibilityChange, codeRef])
113117

114-
if (!showLineNumbers) {
115-
return null
118+
return (
119+
<div className={styles.lineNumbers}>
120+
{lineNumbers.map((n, index) => {
121+
const prev: number = index > 0 ? lineNumbers[index - 1] : -1
122+
return (
123+
<div
124+
key={`line-${index}`}
125+
className={`${styles.num} ${prev === n ? styles.hidden : ''
126+
}`}
127+
>
128+
{n}
129+
</div>
130+
)
131+
})}
132+
</div>
133+
)
116134
}
117135

118-
return (
119-
<div className={styles.lineNumbers}>
120-
{lineNumbers.map((n, index) => {
121-
const prev: number = index > 0 ? lineNumbers[index - 1] : -1
122-
return (
123-
<div
124-
key={`line-${index}`}
125-
className={`${styles.num} ${
126-
prev === n ? styles.hidden : ''
127-
}`}
128-
>
129-
{n}
130-
</div>
131-
)
132-
})}
133-
</div>
134-
)
135-
}
136-
137136
function measureText(text: string, canvas: HTMLCanvasElement): number {
138137
const context: CanvasRenderingContext2D | null = canvas.getContext('2d')
139138
if (!context) {
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,35 @@
1+
/* eslint-disable arrow-body-style */
12
// TODO: enable when unassign feature is ready
23
// import { Button, ButtonProps, useCheckIsMobile } from '../../../../../../../lib'
34
import { MemberBadgeAward } from '../../../../../game-lib'
45

56
import styles from './MemberActionRenderer.module.scss'
67

7-
const MemberActionRenderer = (memberAward: MemberBadgeAward): JSX.Element =>
8+
const MemberActionRenderer: (memberAward: MemberBadgeAward) => JSX.Element
9+
= (memberAward: MemberBadgeAward): JSX.Element => {
810

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

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

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

24-
// function onUnassign(): void {
26+
// function onUnassign(): void {
2527

26-
// }
28+
// }
2729

28-
(
29-
<div className={styles['badge-actions']}>
30-
{/* {actionButtons.map((button, index) => {
30+
return (
31+
<div className={styles['badge-actions']}>
32+
{/* {actionButtons.map((button, index) => {
3133
return (
3234
<Button
3335
{...buttonProps}
@@ -37,7 +39,8 @@ const MemberActionRenderer = (memberAward: MemberBadgeAward): JSX.Element =>
3739
/>
3840
)
3941
})} */}
40-
</div>
41-
)
42+
</div>
43+
)
44+
}
4245

4346
export default MemberActionRenderer

0 commit comments

Comments
 (0)