Skip to content

Commit f54e79f

Browse files
authored
Merge pull request #389 from developmentseed/add-role-label
Add role label to users and members table
2 parents 6c461ee + f0f08f9 commit f54e79f

File tree

3 files changed

+50
-2
lines changed

3 files changed

+50
-2
lines changed

app/lib/utils.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,19 @@ function toDateString(timestamp) {
4141
return dateFormat(new Date(timestamp))
4242
}
4343

44+
/* Transform string into title case */
45+
function makeTitleCase(text) {
46+
return text
47+
.split(' ')
48+
.map((word) => `${word[0].toUpperCase()}${word.slice(1)}`)
49+
.join(' ')
50+
}
51+
4452
module.exports = {
4553
unpack,
4654
ValidationError,
4755
PropertyRequiredError,
4856
checkRequiredProperties,
4957
toDateString,
58+
makeTitleCase,
5059
}

src/components/tables/users.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import Pagination from '../pagination'
77
import qs from 'qs'
88
import SearchInput from './search-input'
99
import ExternalProfileButton from '../external-profile-button'
10+
import { makeTitleCase } from '../../../app/lib/utils'
11+
import theme from '../../styles/theme'
1012

1113
function UsersTable({ type, orgId, onRowClick, isSearchable }) {
1214
const [page, setPage] = useState(1)
@@ -15,7 +17,15 @@ function UsersTable({ type, orgId, onRowClick, isSearchable }) {
1517
key: 'name',
1618
direction: 'asc',
1719
})
20+
1821
const MAX_BADGES_COLUMN = 3
22+
const roleBgColor = {
23+
member: theme.colors.primaryColor,
24+
moderator: theme.colors.infoColor,
25+
manager: theme.colors.infoColor,
26+
owner: theme.colors.secondaryColor,
27+
undefined: theme.colors.primaryDark,
28+
}
1929
let apiBasePath
2030
let emptyMessage
2131
let columns
@@ -70,7 +80,16 @@ function UsersTable({ type, orgId, onRowClick, isSearchable }) {
7080
columns = [
7181
{ key: 'name', sortable: true },
7282
{ key: 'id', label: 'OSM ID', sortable: true },
73-
{ key: 'type', sortable: true },
83+
{
84+
key: 'type',
85+
label: 'role',
86+
sortable: true,
87+
render: ({ type }) => (
88+
<Badge color={roleBgColor[type.toLowerCase()]}>
89+
{makeTitleCase(type)}
90+
</Badge>
91+
),
92+
},
7493
{
7594
key: 'External Profiles',
7695
render: ({ name }) => (

src/pages/teams/[id]/members-table.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ import { serverRuntimeConfig } from '../../../../next.config.js'
77
import * as R from 'ramda'
88
import SearchInput from '../../../components/tables/search-input'
99
import ExternalProfileButton from '../../../components/external-profile-button'
10+
import Badge from '../../../components/badge'
11+
import { makeTitleCase } from '../../../../app/lib/utils'
12+
import theme from '../../../styles/theme'
1013
const { DEFAULT_PAGE_SIZE } = serverRuntimeConfig
1114

1215
function MembersTable({ rows: allRows, onRowClick }) {
@@ -17,10 +20,27 @@ function MembersTable({ rows: allRows, onRowClick }) {
1720
direction: 'asc',
1821
})
1922

23+
const roleBgColor = {
24+
member: theme.colors.primaryColor,
25+
moderator: theme.colors.secondaryColor,
26+
manager: theme.colors.infoColor,
27+
owner: theme.colors.secondaryColor,
28+
undefined: theme.colors.primaryDark,
29+
}
30+
2031
const columns = [
2132
{ key: 'name', sortable: true },
2233
{ key: 'id', sortable: true },
23-
{ key: 'role', sortable: true },
34+
{
35+
key: 'role',
36+
label: 'role',
37+
sortable: true,
38+
render: ({ role }) => (
39+
<Badge color={roleBgColor[role.toLowerCase()]}>
40+
{makeTitleCase(role)}
41+
</Badge>
42+
),
43+
},
2444
{
2545
key: 'External Profiles',
2646
render: ({ name }) => (

0 commit comments

Comments
 (0)