Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
2
2021-155
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
2021-155
2021-155
Commits
61936dcb
Commit
61936dcb
authored
Jun 30, 2021
by
Kamal Thennakoon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add leaderboard screen
parent
7d857628
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
313 additions
and
0 deletions
+313
-0
client/components/portfolio/leaderboard-table/leaderboard-table.js
...mponents/portfolio/leaderboard-table/leaderboard-table.js
+173
-0
client/components/portfolio/portfolio-generate-dialog/portfolio-generate-dialog.js
...io/portfolio-generate-dialog/portfolio-generate-dialog.js
+55
-0
client/pages/portfolio/index.js
client/pages/portfolio/index.js
+85
-0
No files found.
client/components/portfolio/leaderboard-table/leaderboard-table.js
0 → 100644
View file @
61936dcb
import
React
from
'
react
'
;
import
PropTypes
from
'
prop-types
'
;
import
{
makeStyles
,
useTheme
}
from
'
@material-ui/core/styles
'
;
import
Table
from
'
@material-ui/core/Table
'
;
import
TableBody
from
'
@material-ui/core/TableBody
'
;
import
TableCell
from
'
@material-ui/core/TableCell
'
;
import
TableContainer
from
'
@material-ui/core/TableContainer
'
;
import
TableFooter
from
'
@material-ui/core/TableFooter
'
;
import
TablePagination
from
'
@material-ui/core/TablePagination
'
;
import
TableRow
from
'
@material-ui/core/TableRow
'
;
import
Paper
from
'
@material-ui/core/Paper
'
;
import
IconButton
from
'
@material-ui/core/IconButton
'
;
import
FirstPageIcon
from
'
@material-ui/icons/FirstPage
'
;
import
KeyboardArrowLeft
from
'
@material-ui/icons/KeyboardArrowLeft
'
;
import
KeyboardArrowRight
from
'
@material-ui/icons/KeyboardArrowRight
'
;
import
LastPageIcon
from
'
@material-ui/icons/LastPage
'
;
const
useStyles1
=
makeStyles
((
theme
)
=>
({
root
:
{
flexShrink
:
0
,
marginLeft
:
theme
.
spacing
(
2.5
),
},
}));
function
TablePaginationActions
(
props
)
{
const
classes
=
useStyles1
();
const
theme
=
useTheme
();
const
{
count
,
page
,
rowsPerPage
,
onChangePage
}
=
props
;
const
handleFirstPageButtonClick
=
(
event
)
=>
{
onChangePage
(
event
,
0
);
};
const
handleBackButtonClick
=
(
event
)
=>
{
onChangePage
(
event
,
page
-
1
);
};
const
handleNextButtonClick
=
(
event
)
=>
{
onChangePage
(
event
,
page
+
1
);
};
const
handleLastPageButtonClick
=
(
event
)
=>
{
onChangePage
(
event
,
Math
.
max
(
0
,
Math
.
ceil
(
count
/
rowsPerPage
)
-
1
));
};
return
(
<
div
className
=
{
classes
.
root
}
>
<
IconButton
onClick
=
{
handleFirstPageButtonClick
}
disabled
=
{
page
===
0
}
aria
-
label
=
"
first page
"
>
{
theme
.
direction
===
'
rtl
'
?
<
LastPageIcon
/>
:
<
FirstPageIcon
/>
}
<
/IconButton
>
<
IconButton
onClick
=
{
handleBackButtonClick
}
disabled
=
{
page
===
0
}
aria
-
label
=
"
previous page
"
>
{
theme
.
direction
===
'
rtl
'
?
<
KeyboardArrowRight
/>
:
<
KeyboardArrowLeft
/>
}
<
/IconButton
>
<
IconButton
onClick
=
{
handleNextButtonClick
}
disabled
=
{
page
>=
Math
.
ceil
(
count
/
rowsPerPage
)
-
1
}
aria
-
label
=
"
next page
"
>
{
theme
.
direction
===
'
rtl
'
?
<
KeyboardArrowLeft
/>
:
<
KeyboardArrowRight
/>
}
<
/IconButton
>
<
IconButton
onClick
=
{
handleLastPageButtonClick
}
disabled
=
{
page
>=
Math
.
ceil
(
count
/
rowsPerPage
)
-
1
}
aria
-
label
=
"
last page
"
>
{
theme
.
direction
===
'
rtl
'
?
<
FirstPageIcon
/>
:
<
LastPageIcon
/>
}
<
/IconButton
>
<
/div
>
);
}
TablePaginationActions
.
propTypes
=
{
count
:
PropTypes
.
number
.
isRequired
,
onChangePage
:
PropTypes
.
func
.
isRequired
,
page
:
PropTypes
.
number
.
isRequired
,
rowsPerPage
:
PropTypes
.
number
.
isRequired
,
};
function
createData
(
name
,
calories
,
fat
)
{
return
{
name
,
calories
,
fat
};
}
const
rows
=
[
createData
(
'
Cupcake
'
,
305
,
3.7
),
createData
(
'
Donut
'
,
452
,
25.0
),
createData
(
'
Eclair
'
,
262
,
16.0
),
createData
(
'
Frozen yoghurt
'
,
159
,
6.0
),
createData
(
'
Gingerbread
'
,
356
,
16.0
),
createData
(
'
Honeycomb
'
,
408
,
3.2
),
createData
(
'
Ice cream sandwich
'
,
237
,
9.0
),
createData
(
'
Jelly Bean
'
,
375
,
0.0
),
createData
(
'
KitKat
'
,
518
,
26.0
),
createData
(
'
Lollipop
'
,
392
,
0.2
),
createData
(
'
Marshmallow
'
,
318
,
0
),
createData
(
'
Nougat
'
,
360
,
19.0
),
createData
(
'
Oreo
'
,
437
,
18.0
),
].
sort
((
a
,
b
)
=>
(
a
.
calories
<
b
.
calories
?
-
1
:
1
));
const
useStyles2
=
makeStyles
({
table
:
{
minWidth
:
500
,
},
});
export
default
function
LeaderBoardTable
()
{
const
classes
=
useStyles2
();
const
[
page
,
setPage
]
=
React
.
useState
(
0
);
const
[
rowsPerPage
,
setRowsPerPage
]
=
React
.
useState
(
5
);
const
emptyRows
=
rowsPerPage
-
Math
.
min
(
rowsPerPage
,
rows
.
length
-
page
*
rowsPerPage
);
const
handleChangePage
=
(
event
,
newPage
)
=>
{
setPage
(
newPage
);
};
const
handleChangeRowsPerPage
=
(
event
)
=>
{
setRowsPerPage
(
parseInt
(
event
.
target
.
value
,
10
));
setPage
(
0
);
};
return
(
<
TableContainer
component
=
{
Paper
}
>
<
Table
className
=
{
classes
.
table
}
aria
-
label
=
"
custom pagination table
"
>
<
TableBody
>
{(
rowsPerPage
>
0
?
rows
.
slice
(
page
*
rowsPerPage
,
page
*
rowsPerPage
+
rowsPerPage
)
:
rows
).
map
((
row
)
=>
(
<
TableRow
key
=
{
row
.
name
}
>
<
TableCell
component
=
"
th
"
scope
=
"
row
"
>
{
row
.
name
}
<
/TableCell
>
<
TableCell
style
=
{{
width
:
160
}}
align
=
"
right
"
>
{
row
.
calories
}
<
/TableCell
>
<
TableCell
style
=
{{
width
:
160
}}
align
=
"
right
"
>
{
row
.
fat
}
<
/TableCell
>
<
/TableRow
>
))}
{
emptyRows
>
0
&&
(
<
TableRow
style
=
{{
height
:
53
*
emptyRows
}}
>
<
TableCell
colSpan
=
{
6
}
/
>
<
/TableRow
>
)}
<
/TableBody
>
<
TableFooter
>
<
TableRow
>
<
TablePagination
rowsPerPageOptions
=
{[
5
,
10
,
25
,
{
label
:
'
All
'
,
value
:
-
1
}]}
colSpan
=
{
3
}
count
=
{
rows
.
length
}
rowsPerPage
=
{
rowsPerPage
}
page
=
{
page
}
SelectProps
=
{{
inputProps
:
{
'
aria-label
'
:
'
rows per page
'
},
native
:
true
,
}}
onChangePage
=
{
handleChangePage
}
onChangeRowsPerPage
=
{
handleChangeRowsPerPage
}
ActionsComponent
=
{
TablePaginationActions
}
/
>
<
/TableRow
>
<
/TableFooter
>
<
/Table
>
<
/TableContainer
>
);
}
\ No newline at end of file
client/components/portfolio/portfolio-generate-dialog/portfolio-generate-dialog.js
0 → 100644
View file @
61936dcb
import
React
,
{
useState
}
from
'
react
'
;
import
Button
from
'
@material-ui/core/Button
'
;
import
TextField
from
'
@material-ui/core/TextField
'
;
import
Dialog
from
'
@material-ui/core/Dialog
'
;
import
DialogActions
from
'
@material-ui/core/DialogActions
'
;
import
DialogContent
from
'
@material-ui/core/DialogContent
'
;
import
DialogContentText
from
'
@material-ui/core/DialogContentText
'
;
import
DialogTitle
from
'
@material-ui/core/DialogTitle
'
;
import
{
useRouter
}
from
'
next/router
'
;
export
default
function
PortfolioGenerateDialog
(
props
)
{
const
router
=
useRouter
();
const
[
username
,
setUsername
]
=
useState
(
''
);
const
handleChange
=
(
e
)
=>
{
console
.
log
(
e
.
target
.
value
);
setUsername
(
e
.
target
.
value
);
}
const
navigateToPortfolio
=
(
username
)
=>
{
console
.
log
(
'
username::
'
,
username
)
router
.
push
(
`/portfolio/
${
username
}
`
)
}
return
(
<
div
>
<
Dialog
open
=
{
props
.
open
}
onClose
=
{
props
.
handleClose
}
aria
-
labelledby
=
"
form-dialog-title
"
>
<
DialogTitle
id
=
"
form-dialog-title
"
>
Subscribe
<
/DialogTitle
>
<
DialogContent
>
<
DialogContentText
>
Please
enter
user
'
s github username to generate the dynamic portfolio.
</DialogContentText>
<TextField
value={username}
onChange={handleChange}
autoFocus
margin="dense"
id="username"
label="GitHub Username"
type="text"
fullWidth
/>
</DialogContent>
<DialogActions>
<Button onClick={props.handleClose} color="primary">
Cancel
</Button>
<Button onClick={()=>navigateToPortfolio(username)} color="primary">
Generate
</Button>
</DialogActions>
</Dialog>
</div>
);
}
\ No newline at end of file
client/pages/portfolio/index.js
0 → 100644
View file @
61936dcb
import
React
from
'
react
'
import
{
Button
,
Container
,
Grid
,
Icon
,
Typography
}
from
'
@material-ui/core
'
import
{
makeStyles
}
from
'
@material-ui/core
'
import
Header
from
'
../../components/layout/header
'
import
LeaderBoardTable
from
'
../../components/portfolio/leaderboard-table/leaderboard-table
'
import
PortfolioGenerateDialog
from
'
../../components/portfolio/portfolio-generate-dialog/portfolio-generate-dialog
'
const
useStyles
=
makeStyles
((
theme
)
=>
({
root
:
{
flexGrow
:
1
,
marginTop
:
'
85px
'
},
paper2
:
{
padding
:
'
15px
'
,
textAlign
:
'
center
'
,
color
:
theme
.
palette
.
text
.
secondary
},
propic
:
{
height
:
'
200px
'
},
favLang
:
{
height
:
'
100px
'
},
cardWidth
:
{
maxWidth
:
345
},
chipMl
:
{
marginRight
:
'
15px
'
}
}))
export
default
function
LeaderBoard
()
{
const
classes
=
useStyles
()
const
[
open
,
setOpen
]
=
React
.
useState
(
false
);
const
handleClickOpen
=
()
=>
{
setOpen
(
true
);
};
const
handleClose
=
()
=>
{
setOpen
(
false
);
};
return
(
<
div
className
=
{
classes
.
root
}
>
<
Header
><
/Header
>
<
Container
>
<
Grid
container
justify
=
"
space-between
"
>
<
Grid
item
>
<
Button
variant
=
"
contained
"
color
=
"
primary
"
className
=
{
classes
.
button
}
endIcon
=
{
<
Icon
>
send
<
/Icon>
}
size
=
"
large
"
>
To
My
Portfolio
<
/Button
>
<
/Grid
>
<
Grid
item
>
<
Button
variant
=
"
outlined
"
color
=
"
primary
"
className
=
{
classes
.
button
}
endIcon
=
{
<
Icon
>
send
<
/Icon>
}
size
=
"
large
"
onClick
=
{
handleClickOpen
}
>
Generate
Portfolio
<
/Button
>
<
/Grid
>
<
/Grid
>
<
Typography
variant
=
"
h3
"
component
=
"
h1
"
gutterBottom
>
LeaderBoard
<
/Typography
>
<
LeaderBoardTable
><
/LeaderBoardTable
>
<
/Container
>
<
PortfolioGenerateDialog
open
=
{
open
}
handleClose
=
{
handleClose
}
><
/PortfolioGenerateDialog
>
<
/div
>
)
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment