Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
N
new_excelso
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Prasetya Saputra
new_excelso
Commits
cc204930
Commit
cc204930
authored
May 05, 2020
by
Trisno
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
ssh://repo.cs.co.id:2222/wahyu/bahanoprek
parents
7f8fc28c
cba8fd80
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
161 additions
and
75 deletions
+161
-75
app.json
app.json
+1
-1
session.js
function/session.js
+17
-0
globalReducer.js
redux/globalReducer.js
+6
-5
Account.js
view/Account.js
+5
-0
AddreesDetail.js
view/AddreesDetail.js
+2
-0
CardActivation.js
view/CardActivation.js
+7
-0
ChangeProfil.js
view/ChangeProfil.js
+4
-4
DeliveryAddrees.js
view/DeliveryAddrees.js
+5
-2
Home.js
view/Home.js
+9
-2
MenuConfirmation.js
view/MenuConfirmation.js
+24
-15
MenuSelection.js
view/MenuSelection.js
+10
-1
OrderHistory.js
view/OrderHistory.js
+12
-9
ProfilePage.js
view/ProfilePage.js
+2
-2
ShoppingCart.js
view/ShoppingCart.js
+56
-33
TransferBalance.js
view/TransferBalance.js
+1
-1
No files found.
app.json
View file @
cc204930
{
"expo"
:
{
"name"
:
"Excelso_update v1_
sore
"
,
"name"
:
"Excelso_update v1_
malam
"
,
"slug"
:
"excelso-pro"
,
"privacy"
:
"public"
,
"sdkVersion"
:
"36.0.0"
,
...
...
function/session.js
0 → 100644
View file @
cc204930
import
{
Alert
}
from
'react-native'
;
export
default
function
session
(
response
,
navigation
)
{
if
(
response
.
code
===
"WRONG_SESSION_ID"
)
{
Alert
.
alert
(
'Session'
,
'Session Anda Sudah Habis Silahkan Logout Terlebih Dahulu ! '
,
[
{
text
:
'OK'
,
onPress
:
()
=>
navigation
.
replace
(
'Login'
)
}
]
)
}
}
\ No newline at end of file
redux/globalReducer.js
View file @
cc204930
import
ActionType
from
'./globalActionType'
;
import
{
Alert
}
from
'react-native'
;
const
globalState
=
{
...
...
@@ -289,7 +290,7 @@ const rootReducer = (state = globalState, action) => {
update
.
quantity
=
1
}
update
.
quantity
+=
1
//
console.log('Update : ' + JSON.stringify(update))
console
.
log
(
'Update : '
+
JSON
.
stringify
(
update
))
data
=
{
...
old_data
,
...
update
}
}
...
...
@@ -300,7 +301,7 @@ const rootReducer = (state = globalState, action) => {
}
else
{
// add
addedItem
.
quantity
=
1
//
console.log('Baru : ' + JSON.stringify(addedItem))
console
.
log
(
'Baru : '
+
JSON
.
stringify
(
addedItem
))
order_item
=
[...
state
.
order_item
,
addedItem
]
}
...
...
@@ -350,7 +351,7 @@ const rootReducer = (state = globalState, action) => {
}
if
(
update
.
quantity
==
0
)
{
update
.
quantity
=
0
}
else
{
...
...
@@ -358,7 +359,7 @@ const rootReducer = (state = globalState, action) => {
data
=
null
}
else
{
update
.
quantity
-=
1
//
console.log('Update : ' + JSON.stringify(update))
console
.
log
(
'Update : '
+
JSON
.
stringify
(
update
))
data
=
{
...
old_data
,
...
update
}
}
}
...
...
@@ -438,7 +439,7 @@ const rootReducer = (state = globalState, action) => {
let
quantity
=
state
.
order_quantity
let
total
=
parseInt
(
state
.
order_total
)
-
parseInt
(
addedItem
.
price
)
//
console.log("UPDATE " + order_item)
console
.
log
(
"UPDATE "
+
order_item
)
}
return
{
...
...
view/Account.js
View file @
cc204930
...
...
@@ -21,6 +21,7 @@ import Axios from 'axios';
import
*
as
Location
from
'expo-location'
;
import
*
as
Permissions
from
'expo-permissions'
;
import
*
as
Device
from
'expo-device'
;
import
session
from
'../function/session'
;
class
Account
extends
React
.
Component
{
constructor
(
props
)
{
...
...
@@ -140,6 +141,10 @@ class Account extends React.Component {
})
}).
catch
(
error
=>
{
const
{
navigation
}
=
this
.
props
let
response
=
error
.
response
.
data
session
(
response
,
navigation
)
Alert
.
alert
(
response
.
msg
);
console
.
log
(
'ini error '
+
error
)
})
}
...
...
view/AddreesDetail.js
View file @
cc204930
...
...
@@ -138,6 +138,8 @@ import Spinner from 'react-native-loading-spinner-overlay';
}).
catch
(
error
=>
{
let
response
=
error
.
response
.
data
;
const
{
navigation
}
=
this
.
props
session
(
response
,
navigation
)
Alert
.
alert
(
''
,
response
.
msg
...
...
view/CardActivation.js
View file @
cc204930
...
...
@@ -4,6 +4,7 @@ import { connect } from 'react-redux';
import
Axios
from
'axios'
;
import
ActionType
from
'../redux/globalActionType'
;
import
Spinner
from
'react-native-loading-spinner-overlay'
;
import
session
from
'../function/session'
;
class
CardActivation
extends
React
.
Component
{
constructor
(
props
)
{
...
...
@@ -48,6 +49,8 @@ class CardActivation extends React.Component {
})
}).
catch
(
error
=>
{
let
response
=
error
.
response
.
data
;
const
{
navigation
}
=
this
.
props
session
(
response
,
navigation
)
Alert
.
alert
(
response
.
msg
);
})
}
...
...
@@ -78,6 +81,8 @@ class CardActivation extends React.Component {
spinner
:
false
,
})
let
response
=
error
.
response
.
data
;
const
{
navigation
}
=
this
.
props
session
(
response
,
navigation
)
Alert
.
alert
(
response
.
msg
);
})
}
...
...
@@ -107,6 +112,8 @@ class CardActivation extends React.Component {
spinner
:
false
,
})
let
response
=
error
.
response
.
data
;
const
{
navigation
}
=
this
.
props
session
(
response
,
navigation
)
Alert
.
alert
(
response
.
msg
);
})
...
...
view/ChangeProfil.js
View file @
cc204930
...
...
@@ -19,7 +19,7 @@ class ChangeProfil extends React.Component {
email
:
''
,
no_tlp
:
''
,
}
console
.
log
(
'PROPS : '
+
JSON
.
stringify
(
props
.
navigation
))
//
console.log('PROPS : ' + JSON.stringify(props.navigation))
}
componentDidMount
()
{
...
...
@@ -42,7 +42,7 @@ class ChangeProfil extends React.Component {
gender
:
gender_list
,
})
console
.
log
(
'STATE GENDER'
+
JSON
.
stringify
(
this
.
state
.
gender
))
//
console.log('STATE GENDER' + JSON.stringify(this.state.gender))
// this.state.gender.map()
})
...
...
@@ -62,7 +62,7 @@ class ChangeProfil extends React.Component {
})
console
.
log
(
'AFTER CALL : '
+
JSON
.
stringify
(
this
.
state
.
gender_selected
))
//
console.log('AFTER CALL : ' + JSON.stringify(this.state.gender_selected))
})
...
...
@@ -79,7 +79,7 @@ class ChangeProfil extends React.Component {
Axios
.
post
(
'https://excelsocrm.ravintoladev.com/crm/v2/member/set_profile'
,
params1
).
then
(
res
=>
{
this
.
props
.
navigation
.
goBack
()
this
.
props
.
route
.
params
.
onChangeProfil
({
example
:
'wakwaw'
})
console
.
log
(
JSON
.
stringify
(
'A : '
+
JSON
.
stringify
(
this
.
props
.
route
.
params
)))
//
console.log(JSON.stringify('A : ' + JSON.stringify(this.props.route.params)))
})
}
...
...
view/DeliveryAddrees.js
View file @
cc204930
...
...
@@ -96,7 +96,7 @@ class DeliveryAddrees extends React.Component {
}).
catch
(
error
=>
{
console
.
log
(
'ini error '
+
error
)
Alert
.
alert
(
'ini error '
+
error
)
})
}
...
...
@@ -161,7 +161,10 @@ class DeliveryAddrees extends React.Component {
if
(
this
.
props
.
route
.
params
.
from
==
'shoppingCart'
)
{
this
.
props
.
navigation
.
navigate
(
'Shopping Cart'
,
{
outlet_change
:
true
,
outlet_id
:
res
.
data
.
data
.
outlet_id
})
}
else
{
this
.
props
.
navigation
.
navigate
(
"Menu Select"
)
this
.
props
.
navigation
.
navigate
(
'Home'
,
{
screen
:
'MENU'
,
params
:
{
user
:
'janeT'
},
});
}
...
...
view/Home.js
View file @
cc204930
...
...
@@ -11,6 +11,7 @@ import * as Location from 'expo-location';
import
*
as
Permissions
from
'expo-permissions'
;
import
*
as
Device
from
'expo-device'
;
import
ActionType
from
'../redux/globalActionType'
;
import
session
from
'../function/session'
;
class
Home
extends
React
.
Component
{
...
...
@@ -113,7 +114,10 @@ class Home extends React.Component {
indicator
:
false
})
}).
catch
(
error
=>
{
console
.
log
(
'ini error '
+
error
)
const
{
navigation
}
=
this
.
props
let
response
=
error
.
response
.
data
session
(
response
,
navigation
)
Alert
.
alert
(
response
.
msg
);
})
}
...
...
@@ -139,7 +143,10 @@ class Home extends React.Component {
indicator
:
false
})
}).
catch
(
error
=>
{
console
.
log
(
'ini error '
+
error
)
const
{
navigation
}
=
this
.
props
let
response
=
error
.
response
.
data
session
(
response
,
navigation
)
Alert
.
alert
(
response
.
msg
);
})
}
...
...
view/MenuConfirmation.js
View file @
cc204930
...
...
@@ -4,6 +4,7 @@ import Axios from 'axios'
import
{
connect
}
from
'react-redux'
import
ActionType
from
'../redux/globalActionType'
;
import
Spinner
from
'react-native-loading-spinner-overlay'
;
import
session
from
'../function/session'
;
class
MenuConfirmation
extends
React
.
Component
{
constructor
(
props
)
{
super
(
props
)
...
...
@@ -20,13 +21,13 @@ class MenuConfirmation extends React.Component {
}
componentDidMount
(){
//
console.log(" DESTINASI : "+ this.props.grabdestination)
//
console.log("ONGKIR"+ this.props.grabamount)
//
console.log("drop off"+this.props.grabdropoff)
//
console.log("pickup"+this.props.grabpickup)
//
console.log("type" +this.props.grabtype)
//
console.log("BALANCED" +this.props.balanceUsed)
//
console.log("POINT" +this.props.pointsused)
console
.
log
(
" DESTINASI : "
+
this
.
props
.
grabdestination
)
console
.
log
(
"ONGKIR"
+
this
.
props
.
grabamount
)
console
.
log
(
"drop off"
+
this
.
props
.
grabdropoff
)
console
.
log
(
"pickup"
+
this
.
props
.
grabpickup
)
console
.
log
(
"type"
+
this
.
props
.
grabtype
)
console
.
log
(
"BALANCED"
+
this
.
props
.
balanceUsed
)
console
.
log
(
"POINT"
+
this
.
props
.
pointsused
)
}
...
...
@@ -72,8 +73,9 @@ class MenuConfirmation extends React.Component {
{
cancelable
:
false
}
);
}).
catch
(
error
=>
{
let
response
=
error
.
response
.
data
;
// console.log('error')
const
{
navigation
}
=
this
.
props
let
response
=
error
.
response
.
data
session
(
response
,
navigation
)
Alert
.
alert
(
response
.
msg
);
this
.
setState
({
spinner
:
false
,
...
...
@@ -83,15 +85,18 @@ class MenuConfirmation extends React.Component {
orderSuccess
=
()
=>
{
this
.
props
.
setOrderFinish
()
this
.
props
.
navigation
.
navigate
(
'Home'
,
{
this
.
props
.
navigation
.
navigate
(
'Home'
,
{
screen
:
'ORDER'
,
params
:
{
user
:
'ja
x
'
},
params
:
{
user
:
'ja
nei
'
},
});
// this.props.navigation.reset({
// routes: [{ name: 'Home' }]
// })
}
render
()
{
//
console.log(this.props)
console
.
log
(
this
.
props
)
let
total
=
0
return
(
<
ScrollView
style
=
{
styles
.
container
}
>
...
...
@@ -182,14 +187,18 @@ class MenuConfirmation extends React.Component {
<
Text
>
{
this
.
props
.
route
.
params
.
pointused
}
<
/Text
>
<
/View
>
<
/View
>
<
View
style
=
{{
flexDirection
:
'row'
,
margin
:
10
,
justifyContent
:
'space-between'
}}
>
<
View
style
=
{{
margin
:
10
}}
>
{
this
.
props
.
type_pickup
==
true
?
(
null
):(
<
View
style
=
{{
flexDirection
:
'row'
,
margin
:
10
,
justifyContent
:
'space-between'
}}
>
<
View
style
=
{{
margin
:
10
}}
>
<
Text
>
Delivery
to
<
/Text
>
<
/View
>
<
View
style
=
{{
margin
:
10
}}
>
<
Text
>
{
this
.
props
.
address
}
<
/Text
>
<
/View
>
<
/View
>
)}
<
View
style
=
{{
margin
:
10
}}
>
<
Button
title
=
'order'
onPress
=
{()
=>
this
.
setOrder
(
this
.
props
.
type_pickup
)}
/
>
<
/View
>
...
...
@@ -232,7 +241,7 @@ const mapDispatchToProps = (dispacth) => {
}
const
mapStateToProps
=
(
state
)
=>
{
//
console.log(state)
console
.
log
(
state
)
return
{
session_id
:
state
.
session_id
,
type_pickup
:
state
.
type_pickup
,
...
...
view/MenuSelection.js
View file @
cc204930
...
...
@@ -6,6 +6,7 @@ import { connect } from 'react-redux';
import
ActionType
from
'../redux/globalActionType'
;
import
CurrencyFormat
from
'react-currency-format'
;
import
_
from
'lodash'
;
import
session
from
'../function/session'
;
class
MenuSelection
extends
React
.
Component
{
constructor
(
props
)
{
...
...
@@ -95,7 +96,12 @@ class MenuSelection extends React.Component {
this
.
props
.
updateMenu
(
data
.
menu
)
})
}).
catch
(
error
=>
{
const
{
navigation
}
=
this
.
props
let
response
=
error
.
response
.
data
session
(
response
,
navigation
)
Alert
.
alert
(
response
.
msg
);
}
)
}
renderTabBar
=
({
item
})
=>
{
...
...
@@ -231,6 +237,7 @@ class MenuSelection extends React.Component {
<
View
style
=
{{
flexDirection
:
'row'
,
}}
>
<
Text
style
=
{{
fontSize
:
12
,
margin
:
10
}}
>
Price
Estimation
/
Item
{
this
.
props
.
order_quantity
}
<
/Text
>
<
Text
style
=
{{
fontSize
:
12
,
margin
:
10
}}
>
Ongkir
{
this
.
props
.
grabamount
}
<
/Text
>
<
Text
style
=
{{
fontSize
:
20
,
margin
:
10
,
marginBottom
:
10
}}
>
Rp
.
{
this
.
props
.
order_total
}
<
/Text
>
<
/View
>
...
...
@@ -271,7 +278,9 @@ const styles = StyleSheet.create({
const
mapStateToProps
=
(
state
)
=>
{
return
{
session_id
:
state
.
session_id
,
grabamount
:
state
.
grabamount
,
outlet_id
:
state
.
outlet_id
,
order_item
:
state
.
order_item
,
order_quantity
:
state
.
order_quantity
,
...
...
view/OrderHistory.js
View file @
cc204930
import
React
from
'react'
;
import
{
View
,
Text
,
TextInput
,
StyleSheet
,
ScrollView
,
Alert
,
TouchableOpacity
,
ActivityIndicator
}
from
'react-native'
;
import
{
View
,
Text
,
TextInput
,
StyleSheet
,
ScrollView
,
Alert
,
TouchableOpacity
,
ActivityIndicator
}
from
'react-native'
;
import
{
Card
}
from
'react-native-shadow-cards'
import
{
connect
}
from
'react-redux'
;
import
Axios
from
'axios'
;
import
session
from
'../function/session'
;
class
OrderHistory
extends
React
.
Component
{
...
...
@@ -18,12 +19,12 @@ class OrderHistory extends React.Component {
componentDidMount
()
{
this
.
getOrderHistory
()
this
.
_unsubscribe
=
this
.
props
.
navigation
.
addListener
(
'focus'
,
()
=>
{
this
.
setState
({
indicator
:
true
,
})
this
.
getOrderHistory
()
this
.
setState
({
indicator
:
true
,
})
this
.
getOrderHistory
()
});
}
...
...
@@ -47,7 +48,9 @@ class OrderHistory extends React.Component {
indicator
:
false
,
})
}).
catch
(
error
=>
{
let
response
=
error
.
response
.
data
;
const
{
navigation
}
=
this
.
props
let
response
=
error
.
response
.
data
session
(
response
,
navigation
)
Alert
.
alert
(
response
.
msg
);
this
.
setState
({
indicator
:
false
,
...
...
@@ -61,7 +64,7 @@ class OrderHistory extends React.Component {
<
View
style
=
{
styles
.
container
}
>
<
ScrollView
style
=
{
styles
.
body
}
>
{
this
.
state
.
indicator
==
true
?
(
<
ActivityIndicator
style
=
{{
justifyContent
:
"center"
}}
size
=
"large"
color
=
"#c9af6d"
/>
)
:
{
this
.
state
.
indicator
==
true
?
(
<
ActivityIndicator
style
=
{{
justifyContent
:
"center"
}}
size
=
"large"
color
=
"#c9af6d"
/>
)
:
this
.
state
.
order_list
.
map
((
item
,
key
)
=>
(
<
TouchableOpacity
key
=
{
key
}
onPress
=
{()
=>
this
.
props
.
navigation
.
navigate
(
'Order Detail'
,
{
idTrans
:
item
.
id
})}
>
<
View
key
=
{
key
}
>
...
...
view/ProfilePage.js
View file @
cc204930
...
...
@@ -49,7 +49,7 @@ class ProfilePage extends PureComponent {
onChangeProfil
=
data
=>
{
console
.
log
(
'DATA FROM CHANGE PROFILE '
+
data
);
//
console.log('DATA FROM CHANGE PROFILE ' + data);
this
.
getProfile
()
}
...
...
@@ -148,7 +148,7 @@ const mapDispatchToProps = (dispacth) => {
}
const
mapStateToProps
=
(
state
)
=>
{
console
.
log
(
'PROFIL PAGE'
+
JSON
.
stringify
(
state
))
//
console.log('PROFIL PAGE' + JSON.stringify(state))
return
{
session_id
:
state
.
session_id
,
language
:
state
.
language
,
...
...
view/ShoppingCart.js
View file @
cc204930
...
...
@@ -9,6 +9,8 @@ import ItemShoping from './ItemShopingCart';
import
Axios
from
'axios'
import
ActionType
from
'../redux/globalActionType'
;
import
{
YellowBox
}
from
'react-native'
;
import
session
from
'../function/session'
;
YellowBox
.
ignoreWarnings
([
'VirtualizedLists should never be nested'
]);
...
...
@@ -45,12 +47,12 @@ class ShoppingCart extends React.Component {
this
.
getRate
()
}
this
.
getBalance
()
this
.
_unsubscribe
=
this
.
props
.
navigation
.
addListener
(
'focus'
,
()
=>
{
if
(
!
this
.
props
.
type_pickup
)
{
this
.
getRate
()
}
this
.
getBalance
()
// console.log('UPDATE PRICE')
...
...
@@ -65,12 +67,12 @@ class ShoppingCart extends React.Component {
// console.log('UPDATEING PRICE :' + JSON.stringify(data.menu))
this
.
props
.
updateMenu
(
data
.
menu
)
})
}
}
});
});
}
componentWillUnmount
()
{
this
.
_unsubscribe
();
}
...
...
@@ -128,36 +130,51 @@ class ShoppingCart extends React.Component {
price
:
item
.
price
,
}
this
.
props
.
reduceQuantityItem
(
order_item
)
let
quantity
=
0
for
(
let
i
=
0
;
i
<
list_order_item
.
length
;
i
++
)
{
const
row
=
list_order_item
[
i
];
if
(
row
.
id
==
item
.
id
)
{
quantity
=
row
.
quantity
}
}
if
(
quantity
==
0
)
{
Alert
.
alert
(
"Apakah anda ingin menghapus pesanan?"
);
const
order_item
=
{
id
:
item
.
id
,
name
:
item
.
name
,
price
:
item
.
price
,
note
:
item
.
note
,
image
:
item
.
image
,
description
:
item
.
description
,
quantity
:
item
.
quantity
}
this
.
props
.
removeFromChart
(
order_item
)
if
(
is_xist
.
quantity
==
1
)
{
Alert
.
alert
(
"Delete item"
,
"Are you sure want to delete item?"
,
[
{
text
:
'Cancel'
,
onPress
:
()
=>
console
.
log
(
'Cancel Delete Item'
),
style
:
'cancel'
,
},
{
text
:
'Delete Item'
,
onPress
:
()
=>
{
this
.
props
.
reduceQuantityItem
(
order_item
)
if
(
is_xist
.
quantity
==
0
)
{
const
order_item
=
{
id
:
item
.
id
,
name
:
item
.
name
,
price
:
item
.
price
,
note
:
item
.
note
,
image
:
item
.
image
,
description
:
item
.
description
,
quantity
:
item
.
quantity
}
this
.
props
.
removeFromChart
(
order_item
)
}
}
},
],
{
cancelable
:
false
},
)
}
else
{
this
.
props
.
reduceQuantityItem
(
order_item
)
}
}
}
}
deleteItem
()
{
}
handleAdd
(
item
,
index
)
{
this
.
setState
({
checkedBalance
:
false
,
...
...
@@ -298,7 +315,10 @@ class ShoppingCart extends React.Component {
this
.
props
.
setOrder
(
setOrdersProps
);
}).
catch
(
error
=>
{
// console.log('ini error ' + error)
const
{
navigation
}
=
this
.
props
let
response
=
error
.
response
.
data
session
(
response
,
navigation
)
Alert
.
alert
(
response
.
msg
);
})
}
...
...
@@ -327,7 +347,10 @@ class ShoppingCart extends React.Component {
// console.log(this.state.kasproBalance, this.state.kasproPoint)
}).
catch
(
error
=>
{
// console.log('ini error ' + error)
const
{
navigation
}
=
this
.
props
let
response
=
error
.
response
.
data
session
(
response
,
navigation
)
Alert
.
alert
(
response
.
msg
);
})
}
...
...
@@ -748,9 +771,9 @@ const mapDispatchToProps = (dispacth) => {
updateMenu
:
(
menu
)
=>
dispacth
({
type
:
ActionType
.
UPDATE_MENU
,
data
:
{
menu
:
menu
menu
:
menu
}
}),
}),
setChangeOutletProps
:
(
OutletChange
)
=>
dispacth
({
type
:
ActionType
.
SET_CHANGE_OUTLET
,
data
:
{
...
...
view/TransferBalance.js
View file @
cc204930
...
...
@@ -196,7 +196,7 @@ const mapStateToProps = (state) => {
}
const
mapDispatchToProps
=
(
dispacth
)
=>
{
//
console.log(dispacth)
console
.
log
(
dispacth
)
return
{
setCardactive
:
(
cardProps
)
=>
dispacth
({
type
:
ActionType
.
SET_CARD
,
...
...
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