File tree Expand file tree Collapse file tree 5 files changed +72
-10
lines changed Expand file tree Collapse file tree 5 files changed +72
-10
lines changed Original file line number Diff line number Diff line change @@ -15,6 +15,7 @@ export interface UserResponse {
15
15
readonly username : string
16
16
readonly email : string
17
17
readonly created_at : string
18
+ siteRole ?: "Admin" | "Member"
18
19
}
19
20
20
21
/**
Original file line number Diff line number Diff line change
1
+ import { ComponentMeta , Story } from "@storybook/react"
2
+ import React from "react"
3
+ import { MockUser , MockUser2 } from "../../test_helpers"
4
+ import { UsersTable , UsersTableProps } from "./UsersTable"
5
+
6
+ export default {
7
+ title : "Components/UsersTable" ,
8
+ component : UsersTable ,
9
+ } as ComponentMeta < typeof UsersTable >
10
+
11
+ const Template : Story < UsersTableProps > = ( args ) => < UsersTable { ...args } />
12
+
13
+ export const Example = Template . bind ( { } )
14
+ Example . args = {
15
+ users : [
16
+ MockUser ,
17
+ MockUser2
18
+ ]
19
+ }
Original file line number Diff line number Diff line change
1
+ import React from "react"
2
+ import { Pager , UserResponse } from "../../api/types"
3
+ import { Column , Table } from "../../components/Table"
4
+ import { EmptyState } from "../EmptyState"
5
+ import { UserCell } from "../Table/Cells/UserCell"
6
+
7
+ const Language = {
8
+ usersTitle : "All users" ,
9
+ emptyMessage : "No users found" ,
10
+ usernameLabel : "User" ,
11
+ siteRoleLabel : "Site Role"
12
+ }
13
+
14
+ const emptyState = (
15
+ < EmptyState
16
+ message = { Language . emptyMessage }
17
+ />
18
+ )
19
+
20
+ const columns : Column < UserResponse > [ ] = [
21
+ {
22
+ key : "email" ,
23
+ name : Language . usernameLabel ,
24
+ renderer : ( field , data ) => {
25
+ return < UserCell Avatar = { { username : data . email } } primaryText = { data . email } />
26
+ } ,
27
+ } ,
28
+ {
29
+ key : "siteRole" ,
30
+ name : Language . siteRoleLabel
31
+ }
32
+ ]
33
+
34
+ export interface UsersTableProps {
35
+ users : UserResponse [ ]
36
+ pager ?: Pager
37
+ }
38
+
39
+ export const UsersTable : React . FC < UsersTableProps > = ( { users, pager } ) => {
40
+ return (
41
+ < Table
42
+ columns = { columns }
43
+ data = { users }
44
+ title = { Language . usersTitle }
45
+ emptyState = { emptyState }
46
+ />
47
+ )
48
+ }
Original file line number Diff line number Diff line change @@ -4,22 +4,14 @@ import { ErrorSummary } from "../../components/ErrorSummary"
4
4
import { UsersTable } from "../../components/UsersTable/UsersTable"
5
5
import { XServiceContext } from "../../xServices/StateContext"
6
6
7
- export type Role = "Admin" | "Member"
8
-
9
- export interface User {
10
- username : string
11
- email : string
12
- siteRole : Role
13
- }
14
-
15
7
export const UsersPage : React . FC = ( ) => {
16
8
const xServices = useContext ( XServiceContext )
17
9
const [ usersState ] = useActor ( xServices . usersXService )
18
- const { users, getUsersError } = usersState . context
10
+ const { users, pager , getUsersError } = usersState . context
19
11
20
12
if ( usersState . matches ( "error" ) ) {
21
13
return < ErrorSummary error = { getUsersError } />
22
14
} else {
23
- return < UsersTable users = { users } />
15
+ return < UsersTable users = { users } pager = { pager } />
24
16
}
25
17
}
Original file line number Diff line number Diff line change @@ -24,13 +24,15 @@ export const MockUser: UserResponse = {
24
24
username : "TestUser" ,
25
25
26
26
created_at : "" ,
27
+ siteRole : "Admin"
27
28
}
28
29
29
30
export const MockUser2 : UserResponse = {
30
31
id : "test-user-2" ,
31
32
username : "TestUser2" ,
32
33
33
34
created_at : "" ,
35
+ siteRole : "Member"
34
36
}
35
37
36
38
export const MockPager : Pager = {
You can’t perform that action at this time.
0 commit comments