@@ -2,11 +2,13 @@ import React, { useCallback, useState } from 'react';
2
2
import { observer } from 'mobx-react-lite' ;
3
3
import styled from '@emotion/styled' ;
4
4
import { usePrefixedTranslation } from 'hooks' ;
5
+ import * as LIT from 'types/generated/lit-sessions_pb' ;
5
6
import { MAX_DATE } from 'util/constants' ;
6
7
import { useStore } from 'store' ;
7
8
import { Button , Column , HeaderFour , Row } from 'components/base' ;
8
9
import FormField from 'components/common/FormField' ;
9
10
import FormInput from 'components/common/FormInput' ;
11
+ import FormSelect from 'components/common/FormSelect' ;
10
12
import PurpleButton from './PurpleButton' ;
11
13
12
14
const Styled = {
@@ -21,6 +23,17 @@ const Styled = {
21
23
padding: 12px 16px;
22
24
}
23
25
` ,
26
+ FormSelect : styled ( FormSelect ) `
27
+ .rc-select {
28
+ font-family: ${ props => props . theme . fonts . open . regular } ;
29
+ font-size: ${ props => props . theme . sizes . m } ;
30
+ padding: 12px 40px 8px 0px;
31
+ }
32
+
33
+ .rc-select-selection-item {
34
+ padding-left: 14px;
35
+ }
36
+ ` ,
24
37
} ;
25
38
26
39
interface Props {
@@ -32,18 +45,25 @@ const AddSession: React.FC<Props> = ({ primary }) => {
32
45
const { sessionStore } = useStore ( ) ;
33
46
34
47
const [ label , setLabel ] = useState ( '' ) ;
48
+ const [ permissions , setPermissions ] = useState ( 'admin' ) ;
35
49
const [ editing , setEditing ] = useState ( false ) ;
36
50
37
51
const toggleEditing = useCallback ( ( ) => setEditing ( e => ! e ) , [ ] ) ;
38
52
const handleSubmit = useCallback ( async ( ) => {
39
- const session = await sessionStore . addSession ( label , MAX_DATE ) ;
53
+ const sessionType =
54
+ permissions === 'admin'
55
+ ? LIT . SessionType . TYPE_MACAROON_ADMIN
56
+ : LIT . SessionType . TYPE_MACAROON_READONLY ;
57
+
58
+ const session = await sessionStore . addSession ( label , sessionType , MAX_DATE ) ;
59
+
40
60
if ( session ) {
41
61
setLabel ( '' ) ;
42
62
setEditing ( false ) ;
43
63
}
44
- } , [ label ] ) ;
64
+ } , [ label , permissions ] ) ;
45
65
46
- const { Wrapper, FormHeader, FormInput } = Styled ;
66
+ const { Wrapper, FormHeader, FormInput, FormSelect } = Styled ;
47
67
if ( ! editing ) {
48
68
return (
49
69
< PurpleButton tertiary = { ! primary } onClick = { toggleEditing } >
@@ -54,13 +74,32 @@ const AddSession: React.FC<Props> = ({ primary }) => {
54
74
55
75
return (
56
76
< Wrapper >
57
- < FormHeader > { l ( 'label' ) } </ FormHeader >
77
+ < Row >
78
+ < Column >
79
+ < FormHeader > { l ( 'label' ) } </ FormHeader >
80
+ </ Column >
81
+ < Column >
82
+ < FormHeader > { l ( 'permissions' ) } </ FormHeader >
83
+ </ Column >
84
+ </ Row >
58
85
< Row >
59
86
< Column cols = { 6 } >
60
87
< FormField >
61
88
< FormInput value = { label } onChange = { setLabel } placeholder = { l ( 'labelHint' ) } />
62
89
</ FormField >
63
90
</ Column >
91
+ < Column >
92
+ < FormField >
93
+ < FormSelect
94
+ value = { permissions }
95
+ onChange = { setPermissions }
96
+ options = { [
97
+ { label : 'Admin' , value : 'admin' } ,
98
+ { label : 'Read Only' , value : 'read-only' } ,
99
+ ] }
100
+ />
101
+ </ FormField >
102
+ </ Column >
64
103
< Column >
65
104
< PurpleButton onClick = { handleSubmit } > { l ( 'common.submit' ) } </ PurpleButton >
66
105
< Button ghost borderless onClick = { toggleEditing } >
0 commit comments