Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
AppUms_Lecturer
Overview
Overview
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
tungnq
AppUms_Lecturer
Commits
37b104a3
Commit
37b104a3
authored
Sep 15, 2025
by
tungnq
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
TODO: Bổ sung chức năng văn bản đi
parent
ee8ff61c
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
378 additions
and
216 deletions
+378
-216
index.js
src/screens/incoming_document/detail/index.js
+171
-1
style.js
src/screens/incoming_document/detail/style.js
+74
-1
view.js
src/screens/incoming_document/detail/view.js
+133
-214
No files found.
src/screens/incoming_document/detail/index.js
View file @
37b104a3
import
React
,
{
useState
}
from
'react'
;
import
React
,
{
useState
}
from
'react'
;
import
{
Text
,
View
,
StyleSheet
}
from
'react-native'
;
import
{
Text
,
View
,
StyleSheet
,
Alert
}
from
'react-native'
;
import
DetailIncomingDocumentView
from
'./view'
;
import
DetailIncomingDocumentView
from
'./view'
;
const
DetailIncomingDocument
=
props
=>
{
const
DetailIncomingDocument
=
props
=>
{
// Document data
const
[
icomingDocument
,
setIncomingDocument
]
=
useState
({
const
[
icomingDocument
,
setIncomingDocument
]
=
useState
({
id
:
102934
,
id
:
102934
,
title
:
'Văn bản thông báo lịch nộp thời khoá biểu của học kỳ 2 năm 2025'
,
title
:
'Văn bản thông báo lịch nộp thời khoá biểu của học kỳ 2 năm 2025'
,
...
@@ -67,11 +68,14 @@ const DetailIncomingDocument = props => {
...
@@ -67,11 +68,14 @@ const DetailIncomingDocument = props => {
create_task_label
:
'Tạo công việc'
,
create_task_label
:
'Tạo công việc'
,
},
},
});
});
// Dropdown data
const
items
=
[
const
items
=
[
{
id
:
1
,
label
:
'Option 1'
},
{
id
:
1
,
label
:
'Option 1'
},
{
id
:
2
,
label
:
'Option 2'
},
{
id
:
2
,
label
:
'Option 2'
},
{
id
:
3
,
label
:
'Option 3'
},
{
id
:
3
,
label
:
'Option 3'
},
];
];
const
[
dataList
,
setDataList
]
=
useState
([
const
[
dataList
,
setDataList
]
=
useState
([
{
id
:
1
,
name
:
'Nguyễn Minh Đức'
},
{
id
:
1
,
name
:
'Nguyễn Minh Đức'
},
{
id
:
2
,
name
:
'Trần Văn Hùng'
},
{
id
:
2
,
name
:
'Trần Văn Hùng'
},
...
@@ -94,11 +98,177 @@ const DetailIncomingDocument = props => {
...
@@ -94,11 +98,177 @@ const DetailIncomingDocument = props => {
{
id
:
19
,
name
:
'Nguyễn Hữu Tài'
},
{
id
:
19
,
name
:
'Nguyễn Hữu Tài'
},
{
id
:
20
,
name
:
'Phạm Thị Kim'
},
{
id
:
20
,
name
:
'Phạm Thị Kim'
},
]);
]);
// Modal states
const
[
showModal
,
setShowModal
]
=
useState
(
false
);
const
[
showTaskModal
,
setShowTaskModal
]
=
useState
(
false
);
// Annotation form states
const
[
annotationContent
,
setAnnotationContent
]
=
useState
(
''
);
// Task form states
const
[
taskTitle
,
setTaskTitle
]
=
useState
(
''
);
const
[
taskDescription
,
setTaskDescription
]
=
useState
(
''
);
const
[
taskCategory
,
setTaskCategory
]
=
useState
(
'Công việc theo văn bản'
);
const
[
taskDeadline
,
setTaskDeadline
]
=
useState
(
''
);
const
[
taskFollower
,
setTaskFollower
]
=
useState
(
'859256, Nguyễn Minh Đức'
);
const
[
taskExecutor
,
setTaskExecutor
]
=
useState
(
'859256, Nguyễn Minh Đức'
);
const
[
selectedTags
,
setSelectedTags
]
=
useState
([]);
const
[
selectedFollowers
,
setSelectedFollowers
]
=
useState
([]);
const
[
selectedExecutors
,
setSelectedExecutors
]
=
useState
([]);
const
[
errors
,
setErrors
]
=
useState
({});
const
[
isSubmitting
,
setIsSubmitting
]
=
useState
(
false
);
// Form validation function
const
validateForm
=
()
=>
{
const
newErrors
=
{};
if
(
!
taskTitle
.
trim
())
{
newErrors
.
taskTitle
=
'Tiêu đề không được để trống'
;
}
if
(
!
taskDescription
.
trim
())
{
newErrors
.
taskDescription
=
'Mô tả không được để trống'
;
}
if
(
!
taskDeadline
.
trim
())
{
newErrors
.
taskDeadline
=
'Ngày đến hạn không được để trống'
;
}
setErrors
(
newErrors
);
return
Object
.
keys
(
newErrors
).
length
===
0
;
};
// Annotation handlers
const
handleAddAnnotation
=
()
=>
{
if
(
annotationContent
.
trim
())
{
Alert
.
alert
(
'Thành công'
,
'Đã thêm bút phê thành công!'
);
setAnnotationContent
(
''
);
setShowModal
(
false
);
}
else
{
Alert
.
alert
(
'Lỗi'
,
'Vui lòng nhập nội dung bút phê!'
);
}
};
// Task handlers
const
handleCreateTask
=
()
=>
{
if
(
!
validateForm
())
{
Alert
.
alert
(
'Lỗi'
,
'Vui lòng nhập đầy đủ thông tin!'
);
return
;
}
setIsSubmitting
(
true
);
try
{
const
taskData
=
{
title
:
taskTitle
,
description
:
taskDescription
,
category
:
taskCategory
,
deadline
:
taskDeadline
,
tags
:
selectedTags
,
followers
:
selectedFollowers
,
executors
:
selectedExecutors
,
};
console
.
log
(
'Creating task:'
,
taskData
);
Alert
.
alert
(
'Thành công'
,
'Đã tạo công việc thành công!'
);
// Reset form after successful creation
setTaskTitle
(
''
);
setTaskDescription
(
''
);
setTaskDeadline
(
''
);
setSelectedTags
([]);
setSelectedFollowers
([]);
setSelectedExecutors
([]);
setErrors
({});
setShowTaskModal
(
false
);
}
catch
(
error
)
{
Alert
.
alert
(
'Lỗi'
,
'Có lỗi xảy ra khi tạo công việc!'
);
console
.
error
(
'Error creating task:'
,
error
);
}
finally
{
setIsSubmitting
(
false
);
}
};
// Tag selection handlers
const
handleAddTag
=
item
=>
{
if
(
!
selectedTags
.
find
(
t
=>
t
.
id
===
item
.
id
))
{
setSelectedTags
([...
selectedTags
,
item
]);
}
};
const
handleRemoveTag
=
id
=>
{
setSelectedTags
(
selectedTags
.
filter
(
item
=>
item
.
id
!==
id
));
};
// Follower selection handlers
const
handleAddFollower
=
item
=>
{
if
(
!
selectedFollowers
.
find
(
f
=>
f
.
id
===
item
.
id
))
{
setSelectedFollowers
([...
selectedFollowers
,
item
]);
}
};
const
handleRemoveFollower
=
id
=>
{
setSelectedFollowers
(
selectedFollowers
.
filter
(
item
=>
item
.
id
!==
id
));
};
// Executor selection handlers
const
handleAddExecutor
=
item
=>
{
if
(
!
selectedExecutors
.
find
(
e
=>
e
.
id
===
item
.
id
))
{
setSelectedExecutors
([...
selectedExecutors
,
item
]);
}
};
const
handleRemoveExecutor
=
id
=>
{
setSelectedExecutors
(
selectedExecutors
.
filter
(
item
=>
item
.
id
!==
id
));
};
return
(
return
(
<
DetailIncomingDocumentView
<
DetailIncomingDocumentView
// Data props
items
=
{
items
}
items
=
{
items
}
icomingDocument
=
{
icomingDocument
}
icomingDocument
=
{
icomingDocument
}
dataList
=
{
dataList
}
dataList
=
{
dataList
}
// Modal states
showModal
=
{
showModal
}
setShowModal
=
{
setShowModal
}
showTaskModal
=
{
showTaskModal
}
setShowTaskModal
=
{
setShowTaskModal
}
// Annotation states
annotationContent
=
{
annotationContent
}
setAnnotationContent
=
{
setAnnotationContent
}
// Task form states
taskTitle
=
{
taskTitle
}
setTaskTitle
=
{
setTaskTitle
}
taskDescription
=
{
taskDescription
}
setTaskDescription
=
{
setTaskDescription
}
taskCategory
=
{
taskCategory
}
setTaskCategory
=
{
setTaskCategory
}
taskDeadline
=
{
taskDeadline
}
setTaskDeadline
=
{
setTaskDeadline
}
taskFollower
=
{
taskFollower
}
setTaskFollower
=
{
setTaskFollower
}
taskExecutor
=
{
taskExecutor
}
setTaskExecutor
=
{
setTaskExecutor
}
// Selection states
selectedTags
=
{
selectedTags
}
selectedFollowers
=
{
selectedFollowers
}
selectedExecutors
=
{
selectedExecutors
}
// Form validation
errors
=
{
errors
}
isSubmitting
=
{
isSubmitting
}
// Handlers
handleAddAnnotation
=
{
handleAddAnnotation
}
handleCreateTask
=
{
handleCreateTask
}
handleAddTag
=
{
handleAddTag
}
handleRemoveTag
=
{
handleRemoveTag
}
handleAddFollower
=
{
handleAddFollower
}
handleRemoveFollower
=
{
handleRemoveFollower
}
handleAddExecutor
=
{
handleAddExecutor
}
handleRemoveExecutor
=
{
handleRemoveExecutor
}
/
>
/
>
);
);
};
};
...
...
src/screens/incoming_document/detail/style.js
View file @
37b104a3
...
@@ -60,8 +60,10 @@ const styles = StyleSheet.create({
...
@@ -60,8 +60,10 @@ const styles = StyleSheet.create({
borderWidth
:
1
,
borderWidth
:
1
,
borderColor
:
R
.
colors
.
grayBorderInputTextHeader
,
borderColor
:
R
.
colors
.
grayBorderInputTextHeader
,
borderRadius
:
100
,
borderRadius
:
100
,
padding
:
10
,
height
:
30
,
justifyContent
:
'center'
,
alignSelf
:
'flex-start'
,
alignSelf
:
'flex-start'
,
paddingHorizontal
:
10
,
backgroundColor
:
R
.
colors
.
orange
,
backgroundColor
:
R
.
colors
.
orange
,
marginHorizontal
:
5
,
marginHorizontal
:
5
,
},
},
...
@@ -75,6 +77,77 @@ const styles = StyleSheet.create({
...
@@ -75,6 +77,77 @@ const styles = StyleSheet.create({
padding
:
10
,
padding
:
10
,
width
:
300
,
width
:
300
,
},
},
// New styles for inline replacements
marginTop5
:
{
marginTop
:
5
,
},
headerRow
:
{
flexDirection
:
'row'
,
justifyContent
:
'space-between'
,
alignItems
:
'center'
,
marginBottom
:
5
,
},
statusText
:
{
fontWeight
:
'600'
,
fontFamily
:
R
.
fonts
.
fontMedium
,
fontSize
:
R
.
fontsize
.
fontSizeContent
,
},
infoRow
:
{
flexDirection
:
'row'
,
justifyContent
:
'space-between'
,
marginBottom
:
5
,
},
textWithMargin
:
{
marginBottom
:
5
,
},
signerContainer
:
{
justifyContent
:
'space-between'
,
marginBottom
:
5
,
},
departmentRow
:
{
flexDirection
:
'row'
,
flexWrap
:
'wrap'
,
alignItems
:
'center'
,
marginBottom
:
5
,
},
cardText
:
{
color
:
R
.
colors
.
white
,
fontSize
:
R
.
fontsize
.
fontSizeContent
,
},
downloadIcon
:
{
width
:
20
,
height
:
20
,
},
flex1
:
{
flex
:
1
,
},
marginHorizontal15
:
{
marginHorizontal
:
15
,
},
renderItemContainer
:
{
marginVertical
:
7.5
,
},
renderItemHeader
:
{
flexDirection
:
'row'
,
marginBottom
:
5
,
},
modalContainerLarge
:
{
maxHeight
:
'90%'
,
},
dropdownLabel
:
{
marginBottom
:
3
,
fontSize
:
R
.
fontsize
.
fontSizeLabel
,
fontFamily
:
R
.
fonts
.
fontMedium
,
fontWeight
:
'600'
,
color
:
R
.
colors
.
black
,
},
flatListContainer
:
{
maxHeight
:
150
,
marginBottom
:
10
,
},
redText
:
{
color
:
R
.
colors
.
red
,
},
//MODAL Thêm Bút Phê
//MODAL Thêm Bút Phê
modalOverlay
:
{
modalOverlay
:
{
flex
:
1
,
flex
:
1
,
...
...
src/screens/incoming_document/detail/view.js
View file @
37b104a3
import
React
,
{
useState
}
from
'react'
;
import
React
from
'react'
;
import
{
import
{
Text
,
Text
,
View
,
View
,
...
@@ -6,8 +6,8 @@ import {
...
@@ -6,8 +6,8 @@ import {
Image
,
Image
,
ScrollView
,
ScrollView
,
FlatList
,
FlatList
,
Alert
,
Modal
,
Modal
,
LogBox
,
TextInput
,
TextInput
,
}
from
'react-native'
;
}
from
'react-native'
;
import
R
from
'../../../assets/R'
;
import
R
from
'../../../assets/R'
;
...
@@ -20,17 +20,45 @@ import TextField from '../../../components/Input/TextField';
...
@@ -20,17 +20,45 @@ import TextField from '../../../components/Input/TextField';
import
Dropdown
from
'../../../components/DropdownAlert/Dropdown'
;
import
Dropdown
from
'../../../components/DropdownAlert/Dropdown'
;
const
DetailIncomingDocumentView
=
props
=>
{
const
DetailIncomingDocumentView
=
props
=>
{
const
{
icomingDocument
,
items
,
dataList
}
=
props
;
const
{
const
[
showModal
,
setShowModal
]
=
useState
(
false
);
icomingDocument
,
const
[
showTaskModal
,
setShowTaskModal
]
=
useState
(
false
);
items
,
const
[
annotationContent
,
setAnnotationContent
]
=
useState
(
''
);
dataList
,
const
[
taskTitle
,
setTaskTitle
]
=
useState
(
''
);
showModal
,
const
[
taskDescription
,
setTaskDescription
]
=
useState
(
''
);
setShowModal
,
const
[
taskCategory
,
setTaskCategory
]
=
useState
(
'Công việc theo văn bản'
);
showTaskModal
,
const
[
taskDeadline
,
setTaskDeadline
]
=
useState
(
''
);
setShowTaskModal
,
const
[
taskFollower
,
setTaskFollower
]
=
useState
(
'859256, Nguyễn Minh Đức'
);
annotationContent
,
const
[
taskExecutor
,
setTaskExecutor
]
=
useState
(
'859256, Nguyễn Minh Đức'
);
setAnnotationContent
,
console
.
log
(
props
);
taskTitle
,
setTaskTitle
,
taskDescription
,
setTaskDescription
,
taskCategory
,
setTaskCategory
,
taskDeadline
,
setTaskDeadline
,
taskFollower
,
setTaskFollower
,
taskExecutor
,
setTaskExecutor
,
selectedTags
,
selectedFollowers
,
selectedExecutors
,
errors
,
isSubmitting
,
handleAddAnnotation
,
handleCreateTask
,
handleAddTag
,
handleRemoveTag
,
handleAddFollower
,
handleRemoveFollower
,
handleAddExecutor
,
handleRemoveExecutor
,
}
=
props
;
LogBox
.
ignoreLogs
([
'VirtualizedLists should never be nested'
]);
const
getColor
=
status
=>
{
const
getColor
=
status
=>
{
switch
(
status
)
{
switch
(
status
)
{
case
'Hạn chế'
:
case
'Hạn chế'
:
...
@@ -39,21 +67,12 @@ const DetailIncomingDocumentView = props => {
...
@@ -39,21 +67,12 @@ const DetailIncomingDocumentView = props => {
return
R
.
colors
.
blue
;
return
R
.
colors
.
blue
;
}
}
};
};
const
handleAddAnnotation
=
()
=>
{
if
(
annotationContent
.
trim
())
{
// Here you would typically call an API to save the annotation
Alert
.
alert
(
'Thành công'
,
'Đã thêm bút phê thành công!'
);
setAnnotationContent
(
''
);
setShowModal
(
false
);
}
else
{
Alert
.
alert
(
'Lỗi'
,
'Vui lòng nhập nội dung bút phê!'
);
}
};
const
renderItem
=
({
item
})
=>
{
const
renderItem
=
({
item
})
=>
{
console
.
log
(
item
);
console
.
log
(
item
);
return
(
return
(
<
View
style
=
{
{
marginVertical
:
7.5
}
}
>
<
View
style
=
{
styles
.
renderItemContainer
}
>
<
View
style
=
{
{
flexDirection
:
'row'
,
marginBottom
:
5
}
}
>
<
View
style
=
{
styles
.
renderItemHeader
}
>
<
Text
style
=
{
styles
.
text
}
>
{
item
.
author
}
-
<
/Text
>
<
Text
style
=
{
styles
.
text
}
>
{
item
.
author
}
-
<
/Text
>
<
Text
style
=
{
styles
.
text
}
>
{
item
.
code
}
<
/Text
>
<
Text
style
=
{
styles
.
text
}
>
{
item
.
code
}
<
/Text
>
<
Text
style
=
{
styles
.
text
}
>
{
item
.
time
}
<
/Text
>
<
Text
style
=
{
styles
.
text
}
>
{
item
.
time
}
<
/Text
>
...
@@ -65,19 +84,14 @@ const DetailIncomingDocumentView = props => {
...
@@ -65,19 +84,14 @@ const DetailIncomingDocumentView = props => {
<
/View
>
<
/View
>
);
);
};
};
const
body
=
()
=>
{
const
body
=
()
=>
{
return
(
return
(
<
ScrollView
showsVerticalScrollIndicator
=
{
false
}
>
<
ScrollView
showsVerticalScrollIndicator
=
{
false
}
>
<
View
style
=
{
styles
.
body
}
>
<
View
style
=
{
styles
.
body
}
>
<
Text
style
=
{
styles
.
textSubTitle
}
>
{
icomingDocument
.
title
}
<
/Text
>
<
Text
style
=
{
styles
.
textSubTitle
}
>
{
icomingDocument
.
title
}
<
/Text
>
<
View
style
=
{{
marginTop
:
5
}}
><
/View
>
<
View
style
=
{
styles
.
marginTop5
}
><
/View
>
<
View
<
View
style
=
{
styles
.
headerRow
}
>
style
=
{{
flexDirection
:
'row'
,
justifyContent
:
'space-between'
,
alignItems
:
'center'
,
marginBottom
:
5
,
}}
>
<
Text
style
=
{
styles
.
text_1
}
>
<
Text
style
=
{
styles
.
text_1
}
>
V
ă
n
b
ả
n
hi
ệ
n
c
ó
{
icomingDocument
.
total_head_of_work
}
c
ô
ng
vi
ệ
c
V
ă
n
b
ả
n
hi
ệ
n
c
ó
{
icomingDocument
.
total_head_of_work
}
c
ô
ng
vi
ệ
c
li
ê
n
{
'
\
n'
}
quan
li
ê
n
{
'
\
n'
}
quan
...
@@ -85,123 +99,84 @@ const DetailIncomingDocumentView = props => {
...
@@ -85,123 +99,84 @@ const DetailIncomingDocumentView = props => {
<
Text
style
=
{
styles
.
text
}
>
<
Text
style
=
{
styles
.
text
}
>
Ch
ế
độ
:
Ch
ế
độ
:
<
Text
<
Text
style
=
{{
style
=
{[
fontWeight
:
'600'
,
styles
.
statusText
,
fontFamily
:
R
.
fonts
.
fontMedium
,
{
color
:
getColor
(
icomingDocument
.
status
)},
fontSize
:
R
.
fontsize
.
fontSizeContent
,
]}
>
color
:
getColor
(
icomingDocument
.
status
),
}}
>
{
icomingDocument
.
status
}
{
icomingDocument
.
status
}
<
/Text
>
<
/Text
>
<
/Text
>
<
/Text
>
<
/View
>
<
/View
>
<
View
<
View
style
=
{
styles
.
infoRow
}
>
style
=
{{
flexDirection
:
'row'
,
justifyContent
:
'space-between'
,
marginBottom
:
5
,
}}
>
<
Text
style
=
{
styles
.
text
}
>
<
Text
style
=
{
styles
.
text
}
>
S
ố
k
ý
hi
ệ
u
:
S
ố
k
ý
hi
ệ
u
:
{
' '
}
<
Text
style
=
{
styles
.
text_2
}
>
{
icomingDocument
.
symbol_number
}
<
/Text
>
<
Text
style
=
{
styles
.
text_2
}
>
{
icomingDocument
.
symbol_number
}
<
/Text
>
<
/Text
>
<
/Text
>
<
Text
style
=
{
styles
.
text
}
>
<
Text
style
=
{
styles
.
text
}
>
S
ố
v
à
o
s
ổ
:
S
ố
v
à
o
s
ổ
:
{
' '
}
<
Text
style
=
{
styles
.
text_2
}
>
<
Text
style
=
{
styles
.
text_2
}
>
{
icomingDocument
.
number_entry_book
}
{
icomingDocument
.
number_entry_book
}
<
/Text
>
<
/Text
>
<
/Text
>
<
/Text
>
<
/View
>
<
/View
>
<
View
<
View
style
=
{
styles
.
infoRow
}
>
style
=
{{
flexDirection
:
'row'
,
justifyContent
:
'space-between'
,
marginBottom
:
5
,
}}
>
<
Text
style
=
{
styles
.
text
}
>
<
Text
style
=
{
styles
.
text
}
>
Ng
à
y
đế
n
:
Ng
à
y
đế
n
:
{
' '
}
<
Text
style
=
{
styles
.
text_2
}
>
{
icomingDocument
.
term
}
<
/Text
>
<
Text
style
=
{
styles
.
text_2
}
>
{
icomingDocument
.
term
}
<
/Text
>
<
/Text
>
<
/Text
>
<
Text
style
=
{
styles
.
text
}
>
<
Text
style
=
{
styles
.
text
}
>
Ng
à
y
v
ă
n
b
ả
n
:
Ng
à
y
v
ă
n
b
ả
n
:
{
' '
}
<
Text
style
=
{
styles
.
text_2
}
>
{
icomingDocument
.
term_display
}
<
/Text
>
<
Text
style
=
{
styles
.
text_2
}
>
{
icomingDocument
.
term_display
}
<
/Text
>
<
/Text
>
<
/Text
>
<
/View
>
<
/View
>
<
Text
style
=
{[
styles
.
text
,
{
marginBottom
:
5
}
]}
>
<
Text
style
=
{[
styles
.
text
,
styles
.
textWithMargin
]}
>
Lo
ạ
i
v
ă
n
b
ả
n
:
Lo
ạ
i
v
ă
n
b
ả
n
:
<
Text
style
=
{
styles
.
text_2
}
>
{
icomingDocument
.
document_type
}
<
/Text
>
<
Text
style
=
{
styles
.
text_2
}
>
{
icomingDocument
.
document_type
}
<
/Text
>
<
/Text
>
<
/Text
>
<
Text
style
=
{[
styles
.
text
,
{
marginBottom
:
5
}
]}
>
<
Text
style
=
{[
styles
.
text
,
styles
.
textWithMargin
]}
>
L
ĩ
nh
v
ự
c
v
ă
n
b
ả
n
:
L
ĩ
nh
v
ự
c
v
ă
n
b
ả
n
:
<
Text
style
=
{
styles
.
text_2
}
>
{
icomingDocument
.
field
}
<
/Text
>
<
Text
style
=
{
styles
.
text_2
}
>
{
icomingDocument
.
field
}
<
/Text
>
<
/Text
>
<
/Text
>
<
View
<
View
style
=
{
styles
.
signerContainer
}
>
style
=
{{
flexDirection
:
'row'
,
justifyContent
:
'space-between'
,
marginBottom
:
5
,
}}
>
<
Text
style
=
{
styles
.
text
}
>
<
Text
style
=
{
styles
.
text
}
>
Ng
ườ
i
k
ý
:
Ng
ườ
i
k
ý
:
{
' '
}
<
Text
style
=
{
styles
.
text_2
}
>
{
icomingDocument
.
signer_name
}
<
/Text
>
<
Text
style
=
{
styles
.
text_2
}
>
{
icomingDocument
.
signer_name
}
<
/Text
>
<
/Text
>
<
/Text
>
<
Text
style
=
{
styles
.
text
}
>
<
Text
style
=
{
styles
.
text
}
>
Đố
i
t
á
c
g
ử
i
:
Đố
i
t
á
c
g
ử
i
:
{
' '
}
<
Text
style
=
{
styles
.
text_2
}
>
<
Text
style
=
{
styles
.
text_2
}
>
{
icomingDocument
.
sender_partner
}
{
icomingDocument
.
sender_partner
}
<
/Text
>
<
/Text
>
<
/Text
>
<
/Text
>
<
/View
>
<
/View
>
<
TextMulti
title
=
"Ghi chú"
/>
<
TextMulti
title
=
"Ghi chú"
/>
<
View
style
=
{
{
marginTop
:
5
}
}
><
/View
>
<
View
style
=
{
styles
.
marginTop5
}
><
/View
>
<
Text
style
=
{[
styles
.
text
,
{
marginBottom
:
3
}
]}
>
N
ộ
i
dung
<
/Text
>
<
Text
style
=
{[
styles
.
text
,
styles
.
textWithMargin
]}
>
N
ộ
i
dung
<
/Text
>
<
View
style
=
{[
styles
.
containerContent
,
{
marginBottom
:
5
}
]}
>
<
View
style
=
{[
styles
.
containerContent
,
styles
.
textWithMargin
]}
>
<
Text
style
=
{
styles
.
text_2
}
>
{
icomingDocument
.
content
}
<
/Text
>
<
Text
style
=
{
styles
.
text_2
}
>
{
icomingDocument
.
content
}
<
/Text
>
<
/View
>
<
/View
>
<
Text
style
=
{[
styles
.
text
,
{
marginBottom
:
5
}
]}
>
<
Text
style
=
{[
styles
.
text
,
styles
.
textWithMargin
]}
>
Ý
ki
ế
n
c
ủ
a
BGH
:
Ý
ki
ế
n
c
ủ
a
BGH
:
<
Text
style
=
{
styles
.
text_2
}
>
{
icomingDocument
.
opinion_bgh
}
<
/Text
>
<
Text
style
=
{
styles
.
text_2
}
>
{
icomingDocument
.
opinion_bgh
}
<
/Text
>
<
/Text
>
<
/Text
>
<
View
<
View
style
=
{
styles
.
departmentRow
}
>
style
=
{{
flexDirection
:
'row'
,
flexWrap
:
'wrap'
,
alignItems
:
'center'
,
marginBottom
:
5
,
}}
>
<
Text
style
=
{
styles
.
text
}
>
Ph
ò
ng
ban
nh
ậ
n
:
<
/Text
>
<
Text
style
=
{
styles
.
text
}
>
Ph
ò
ng
ban
nh
ậ
n
:
<
/Text
>
{
icomingDocument
.
received_departments
.
map
((
item
,
index
)
=>
{
{
icomingDocument
.
received_departments
.
map
((
item
,
index
)
=>
{
return
(
return
(
<
View
style
=
{
styles
.
card
}
>
<
View
style
=
{
styles
.
card
}
>
<
Text
<
Text
style
=
{
styles
.
cardText
}
key
=
{
index
}
>
style
=
{{
color
:
R
.
colors
.
white
,
fontSize
:
R
.
fontsize
.
fontSizeContent
,
}}
key
=
{
index
}
>
{
item
.
name
}
{
item
.
name
}
<
/Text
>
<
/Text
>
<
/View
>
<
/View
>
);
);
})}
})}
<
/View
>
<
/View
>
<
View
<
View
style
=
{
styles
.
departmentRow
}
>
style
=
{{
flexDirection
:
'row'
,
flexWrap
:
'wrap'
,
alignItems
:
'center'
,
marginBottom
:
5
,
}}
>
<
Text
style
=
{
styles
.
text
}
>
Nh
ó
m
nh
ậ
n
:
<
/Text
>
<
Text
style
=
{
styles
.
text
}
>
Nh
ó
m
nh
ậ
n
:
<
/Text
>
{
icomingDocument
.
received_group
.
map
((
item
,
index
)
=>
{
{
icomingDocument
.
received_group
.
map
((
item
,
index
)
=>
{
return
(
return
(
<
View
style
=
{[
styles
.
card
,
{
backgroundColor
:
R
.
colors
.
blue
}]}
>
<
View
style
=
{[
styles
.
card
,
{
backgroundColor
:
R
.
colors
.
blue
}]}
>
<
Text
<
Text
style
=
{
styles
.
cardText
}
key
=
{
index
}
>
style
=
{{
color
:
R
.
colors
.
white
,
fontSize
:
R
.
fontsize
.
fontSizeContent
,
}}
key
=
{
index
}
>
{
item
.
name
}
{
item
.
name
}
<
/Text
>
<
/Text
>
<
/View
>
<
/View
>
...
@@ -209,23 +184,12 @@ const DetailIncomingDocumentView = props => {
...
@@ -209,23 +184,12 @@ const DetailIncomingDocumentView = props => {
})}
})}
<
/View
>
<
/View
>
<
View
<
View
style
=
{
styles
.
departmentRow
}
>
style
=
{{
flexDirection
:
'row'
,
flexWrap
:
'wrap'
,
alignItems
:
'center'
,
marginBottom
:
5
,
}}
>
<
Text
style
=
{
styles
.
text
}
>
Ng
ườ
i
nh
ậ
n
:
<
/Text
>
<
Text
style
=
{
styles
.
text
}
>
Ng
ườ
i
nh
ậ
n
:
<
/Text
>
{
icomingDocument
.
receiver
.
map
((
item
,
index
)
=>
{
{
icomingDocument
.
receiver
.
map
((
item
,
index
)
=>
{
return
(
return
(
<
View
style
=
{[
styles
.
card
,
{
backgroundColor
:
R
.
colors
.
blue
}]}
>
<
View
style
=
{[
styles
.
card
,
{
backgroundColor
:
R
.
colors
.
blue
}]}
>
<
Text
<
Text
style
=
{
styles
.
cardText
}
key
=
{
index
}
>
style
=
{{
color
:
R
.
colors
.
white
,
fontSize
:
R
.
fontsize
.
fontSizeContent
,
}}
key
=
{
index
}
>
{
item
.
name
}
{
item
.
name
}
<
/Text
>
<
/Text
>
<
/View
>
<
/View
>
...
@@ -243,7 +207,7 @@ const DetailIncomingDocumentView = props => {
...
@@ -243,7 +207,7 @@ const DetailIncomingDocumentView = props => {
<
/Text
>
<
/Text
>
<
Image
<
Image
source
=
{
R
.
images
.
icDownload
}
source
=
{
R
.
images
.
icDownload
}
style
=
{
{
width
:
20
,
height
:
20
}
}
style
=
{
styles
.
downloadIcon
}
resizeMode
=
"contain"
resizeMode
=
"contain"
tintColor
=
{
R
.
colors
.
blue
}
tintColor
=
{
R
.
colors
.
blue
}
/
>
/
>
...
@@ -262,17 +226,7 @@ const DetailIncomingDocumentView = props => {
...
@@ -262,17 +226,7 @@ const DetailIncomingDocumentView = props => {
<
/ScrollView
>
<
/ScrollView
>
);
);
};
};
const
handleCreateTask
=
()
=>
{
if
(
taskTitle
.
trim
()
&&
taskDescription
.
trim
())
{
Alert
.
alert
(
'Thành công'
,
'Đã tạo công việc thành công!'
);
setTaskTitle
(
''
);
setTaskDescription
(
''
);
setTaskDeadline
(
''
);
setShowTaskModal
(
false
);
}
else
{
Alert
.
alert
(
'Lỗi'
,
'Vui lòng nhập đầy đủ thông tin!'
);
}
};
const
renderItem_1
=
({
item
,
onPress
})
=>
{
const
renderItem_1
=
({
item
,
onPress
})
=>
{
return
(
return
(
<
View
style
=
{
styles
.
chip
}
>
<
View
style
=
{
styles
.
chip
}
>
...
@@ -288,6 +242,7 @@ const DetailIncomingDocumentView = props => {
...
@@ -288,6 +242,7 @@ const DetailIncomingDocumentView = props => {
<
/View
>
<
/View
>
);
);
};
};
const
openModal
=
()
=>
{
const
openModal
=
()
=>
{
return
(
return
(
<
Modal
<
Modal
...
@@ -331,6 +286,7 @@ const DetailIncomingDocumentView = props => {
...
@@ -331,6 +286,7 @@ const DetailIncomingDocumentView = props => {
<
/Modal
>
<
/Modal
>
);
);
};
};
const
openTaskModal
=
()
=>
{
const
openTaskModal
=
()
=>
{
return
(
return
(
<
Modal
<
Modal
...
@@ -339,7 +295,7 @@ const DetailIncomingDocumentView = props => {
...
@@ -339,7 +295,7 @@ const DetailIncomingDocumentView = props => {
visible
=
{
showTaskModal
}
visible
=
{
showTaskModal
}
onRequestClose
=
{()
=>
setShowTaskModal
(
false
)}
>
onRequestClose
=
{()
=>
setShowTaskModal
(
false
)}
>
<
View
style
=
{
styles
.
modalOverlay
}
>
<
View
style
=
{
styles
.
modalOverlay
}
>
<
View
style
=
{[
styles
.
modalContainer
,
{
maxHeight
:
'90%'
}
]}
>
<
View
style
=
{[
styles
.
modalContainer
,
styles
.
modalContainerLarge
]}
>
<
View
style
=
{
styles
.
modalHeader
}
>
<
View
style
=
{
styles
.
modalHeader
}
>
<
Text
style
=
{
styles
.
modalTitle
}
>
Th
ê
m
c
ô
ng
vi
ệ
c
<
/Text
>
<
Text
style
=
{
styles
.
modalTitle
}
>
Th
ê
m
c
ô
ng
vi
ệ
c
<
/Text
>
<
/View
>
<
/View
>
...
@@ -350,66 +306,48 @@ const DetailIncomingDocumentView = props => {
...
@@ -350,66 +306,48 @@ const DetailIncomingDocumentView = props => {
title
=
"Tiêu đề"
title
=
"Tiêu đề"
fontSizeTitle
=
{
R
.
fontsize
.
fontSizeLabel
}
fontSizeTitle
=
{
R
.
fontsize
.
fontSizeLabel
}
required
required
placeholder
=
"
HS
"
placeholder
=
"
Nhập tiêu đề công việc
"
placeholderTextColor
=
{
R
.
colors
.
gray
}
placeholderTextColor
=
{
R
.
colors
.
gray
}
value
=
{
taskTitle
}
value
=
{
taskTitle
}
onChangeText
=
{
setTaskTitle
}
onChangeText
=
{
setTaskTitle
}
containerMarginBottom
=
{
10
}
containerMarginBottom
=
{
10
}
error
=
{
errors
.
taskTitle
}
/
>
/
>
<
TextMulti
<
TextMulti
title
=
"Mô tả"
title
=
"Mô tả"
titleFontSize
=
{
R
.
fontsize
.
fontSizeLabel
}
titleFontSize
=
{
R
.
fontsize
.
fontSizeLabel
}
placeholder
=
"Nhập mô tả..."
placeholder
=
"Nhập mô tả
công việc
..."
placeholderTextColor
=
{
R
.
colors
.
gray
}
placeholderTextColor
=
{
R
.
colors
.
gray
}
multiline
=
{
true
}
multiline
=
{
true
}
numberOfLines
=
{
3
}
numberOfLines
=
{
3
}
required
required
value
=
{
taskDescription
}
value
=
{
taskDescription
}
onChangeText
=
{
setTaskDescription
}
onChangeText
=
{
setTaskDescription
}
error
=
{
errors
.
taskDescription
}
/
>
/
>
<
View
style
=
{
styles
.
containerDropdown
}
>
<
View
style
=
{
styles
.
containerDropdown
}
>
<
Text
<
Text
style
=
{[
styles
.
text
,
styles
.
dropdownLabel
]}
>
Th
ẻ
<
/Text
>
style
=
{[
styles
.
text
,
{
marginBottom
:
3
,
fontSize
:
R
.
fontsize
.
fontSizeLabel
,
fontFamily
:
R
.
fonts
.
fontMedium
,
fontWeight
:
'600'
,
color
:
R
.
colors
.
black
,
},
]}
>
Th
ẻ
<
/Text
>
<
Dropdown
<
Dropdown
height
=
{
35
}
height
=
{
35
}
items
=
{
items
}
items
=
{
items
}
placeholder
=
"Chọn t
ùy chọn
"
placeholder
=
"Chọn t
hẻ
"
onSelect
=
{
item
=>
console
.
log
(
'Bạn đã chọn:'
,
item
)
}
onSelect
=
{
handleAddTag
}
/
>
/
>
<
/View
>
<
/View
>
<
Text
<
Text
style
=
{[
styles
.
text_2
,
styles
.
dropdownLabel
]}
>
style
=
{[
styles
.
text_2
,
{
marginBottom
:
3
,
fontSize
:
R
.
fontsize
.
fontSizeLabel
,
fontFamily
:
R
.
fonts
.
fontMedium
,
fontWeight
:
'600'
,
color
:
R
.
colors
.
black
,
},
]}
>
Danh
s
á
ch
th
ẻ
đã
ch
ọ
n
:
Danh
s
á
ch
th
ẻ
đã
ch
ọ
n
:
<
/Text
>
<
/Text
>
<
FlatList
<
FlatList
data
=
{
dataList
}
data
=
{
selectedTags
}
renderItem
=
{({
item
})
=>
renderItem_1
({
item
,
onPress
:
()
=>
{}})}
renderItem
=
{({
item
})
=>
renderItem_1
({
item
,
onPress
:
()
=>
handleRemoveTag
(
item
.
id
)})
}
keyExtractor
=
{(
item
,
index
)
=>
keyExtractor
=
{(
item
,
index
)
=>
item
.
id
?.
toString
()
||
index
.
toString
()
item
.
id
?.
toString
()
||
index
.
toString
()
}
}
numColumns
=
{
2
}
numColumns
=
{
2
}
style
=
{
{
maxHeight
:
150
,
marginBottom
:
10
}
}
style
=
{
styles
.
flatListContainer
}
showsVerticalScrollIndicator
=
{
true
}
showsVerticalScrollIndicator
=
{
true
}
columnWrapperStyle
=
{
styles
.
flatListSelect
}
columnWrapperStyle
=
{
styles
.
flatListSelect
}
nestedScrollEnabled
=
{
true
}
nestedScrollEnabled
=
{
true
}
...
@@ -419,101 +357,73 @@ const DetailIncomingDocumentView = props => {
...
@@ -419,101 +357,73 @@ const DetailIncomingDocumentView = props => {
title
=
"Ngày đến hạn"
title
=
"Ngày đến hạn"
required
required
fontSizeTitle
=
{
R
.
fontsize
.
fontSizeLabel
}
fontSizeTitle
=
{
R
.
fontsize
.
fontSizeLabel
}
placeholder
=
"DD/MM/YYYY"
value
=
{
taskDeadline
}
value
=
{
taskDeadline
}
onChangeText
=
{
setTaskDeadline
}
onChangeText
=
{
setTaskDeadline
}
error
=
{
errors
.
taskDeadline
}
/
>
/
>
<
View
style
=
{
styles
.
containerDropdown
}
>
<
View
style
=
{
styles
.
containerDropdown
}
>
<
Text
<
Text
style
=
{[
styles
.
text
,
styles
.
dropdownLabel
]}
>
style
=
{[
styles
.
text
,
{
marginBottom
:
3
,
fontSize
:
R
.
fontsize
.
fontSizeLabel
,
fontFamily
:
R
.
fonts
.
fontMedium
,
fontWeight
:
'600'
,
color
:
R
.
colors
.
black
,
},
]}
>
Ng
ườ
i
theo
d
õ
i
{
''
}
Ng
ườ
i
theo
d
õ
i
{
''
}
<
Text
style
=
{
{
color
:
R
.
colors
.
red
}
}
>*<
/Text
>
<
Text
style
=
{
styles
.
redText
}
>*<
/Text
>
<
/Text
>
<
/Text
>
<
Dropdown
<
Dropdown
height
=
{
35
}
height
=
{
35
}
items
=
{
items
}
items
=
{
items
}
placeholder
=
"Chọn
tùy chọn
"
placeholder
=
"Chọn
người theo dõi
"
onSelect
=
{
item
=>
console
.
log
(
'Bạn đã chọn:'
,
item
)
}
onSelect
=
{
handleAddFollower
}
/
>
/
>
<
/View
>
<
/View
>
<
Text
<
Text
style
=
{[
styles
.
text_2
,
styles
.
dropdownLabel
]}
>
style
=
{[
styles
.
text_2
,
{
marginBottom
:
3
,
fontSize
:
R
.
fontsize
.
fontSizeLabel
,
fontFamily
:
R
.
fonts
.
fontMedium
,
fontWeight
:
'600'
,
color
:
R
.
colors
.
black
,
},
]}
>
Danh
s
á
ch
ng
ườ
i
theo
d
õ
i
đã
ch
ọ
n
:
Danh
s
á
ch
ng
ườ
i
theo
d
õ
i
đã
ch
ọ
n
:
<
/Text
>
<
/Text
>
<
FlatList
<
FlatList
data
=
{
dataList
}
data
=
{
selectedFollowers
}
renderItem
=
{({
item
})
=>
renderItem_1
({
item
,
onPress
:
()
=>
{}})}
renderItem
=
{({
item
})
=>
renderItem_1
({
item
,
onPress
:
()
=>
handleRemoveFollower
(
item
.
id
),
})
}
keyExtractor
=
{(
item
,
index
)
=>
keyExtractor
=
{(
item
,
index
)
=>
item
.
id
?.
toString
()
||
index
.
toString
()
item
.
id
?.
toString
()
||
index
.
toString
()
}
}
numColumns
=
{
2
}
numColumns
=
{
2
}
style
=
{
{
maxHeight
:
150
,
marginBottom
:
10
}
}
style
=
{
styles
.
flatListContainer
}
showsVerticalScrollIndicator
=
{
true
}
showsVerticalScrollIndicator
=
{
true
}
columnWrapperStyle
=
{
styles
.
flatListSelect
}
columnWrapperStyle
=
{
styles
.
flatListSelect
}
nestedScrollEnabled
=
{
true
}
nestedScrollEnabled
=
{
true
}
scrollEnabled
=
{
true
}
scrollEnabled
=
{
true
}
/
>
/
>
<
View
style
=
{
styles
.
containerDropdown
}
>
<
View
style
=
{
styles
.
containerDropdown
}
>
<
Text
<
Text
style
=
{[
styles
.
text
,
styles
.
dropdownLabel
]}
>
style
=
{[
styles
.
text
,
{
marginBottom
:
3
,
fontSize
:
R
.
fontsize
.
fontSizeLabel
,
fontFamily
:
R
.
fonts
.
fontMedium
,
fontWeight
:
'600'
,
color
:
R
.
colors
.
black
,
},
]}
>
Ng
ườ
i
th
ự
c
hi
ệ
n
c
ô
ng
vi
ệ
c
{
' '
}
Ng
ườ
i
th
ự
c
hi
ệ
n
c
ô
ng
vi
ệ
c
{
' '
}
<
Text
style
=
{
{
color
:
R
.
colors
.
red
}
}
>*<
/Text
>
<
Text
style
=
{
styles
.
redText
}
>*<
/Text
>
<
/Text
>
<
/Text
>
<
Dropdown
<
Dropdown
height
=
{
35
}
height
=
{
35
}
items
=
{
items
}
items
=
{
items
}
placeholder
=
"Chọn
tùy chọ
n"
placeholder
=
"Chọn
người thực hiệ
n"
onSelect
=
{
item
=>
console
.
log
(
'Bạn đã chọn:'
,
item
)
}
onSelect
=
{
handleAddExecutor
}
/
>
/
>
<
/View
>
<
/View
>
<
Text
<
Text
style
=
{[
styles
.
text_2
,
styles
.
dropdownLabel
]}
>
style
=
{[
styles
.
text_2
,
{
marginBottom
:
3
,
fontSize
:
R
.
fontsize
.
fontSizeLabel
,
fontFamily
:
R
.
fonts
.
fontMedium
,
fontWeight
:
'600'
,
color
:
R
.
colors
.
black
,
},
]}
>
Danh
s
á
ch
ng
ườ
i
th
ự
c
hi
ệ
n
c
ô
ng
vi
ệ
c
đã
ch
ọ
n
:
Danh
s
á
ch
ng
ườ
i
th
ự
c
hi
ệ
n
c
ô
ng
vi
ệ
c
đã
ch
ọ
n
:
<
/Text
>
<
/Text
>
<
FlatList
<
FlatList
data
=
{
dataList
}
data
=
{
selectedExecutors
}
renderItem
=
{({
item
})
=>
renderItem_1
({
item
,
onPress
:
()
=>
{}})}
renderItem
=
{({
item
})
=>
renderItem_1
({
item
,
onPress
:
()
=>
handleRemoveExecutor
(
item
.
id
),
})
}
keyExtractor
=
{(
item
,
index
)
=>
keyExtractor
=
{(
item
,
index
)
=>
item
.
id
?.
toString
()
||
index
.
toString
()
item
.
id
?.
toString
()
||
index
.
toString
()
}
}
numColumns
=
{
2
}
numColumns
=
{
2
}
style
=
{
{
maxHeight
:
150
,
marginBottom
:
10
}
}
style
=
{
styles
.
flatListContainer
}
showsVerticalScrollIndicator
=
{
true
}
showsVerticalScrollIndicator
=
{
true
}
columnWrapperStyle
=
{
styles
.
flatListSelect
}
columnWrapperStyle
=
{
styles
.
flatListSelect
}
nestedScrollEnabled
=
{
true
}
nestedScrollEnabled
=
{
true
}
...
@@ -524,13 +434,22 @@ const DetailIncomingDocumentView = props => {
...
@@ -524,13 +434,22 @@ const DetailIncomingDocumentView = props => {
<
View
style
=
{
styles
.
modalFooter
}
>
<
View
style
=
{
styles
.
modalFooter
}
>
<
TouchableOpacity
<
TouchableOpacity
style
=
{[
styles
.
button
,
styles
.
cancelButton
]}
style
=
{[
styles
.
button
,
styles
.
cancelButton
]}
onPress
=
{()
=>
setShowTaskModal
(
false
)}
>
onPress
=
{()
=>
{
setShowTaskModal
(
false
);
}}
>
<
Text
style
=
{
styles
.
cancelButtonText
}
>
H
ủ
y
<
/Text
>
<
Text
style
=
{
styles
.
cancelButtonText
}
>
H
ủ
y
<
/Text
>
<
/TouchableOpacity
>
<
/TouchableOpacity
>
<
TouchableOpacity
<
TouchableOpacity
style
=
{[
styles
.
button
,
styles
.
submitButton
]}
style
=
{[
onPress
=
{
handleCreateTask
}
>
styles
.
button
,
<
Text
style
=
{
styles
.
submitButtonText
}
>
Th
ê
m
m
ớ
i
<
/Text
>
styles
.
submitButton
,
isSubmitting
&&
{
opacity
:
0.6
},
]}
onPress
=
{
handleCreateTask
}
disabled
=
{
isSubmitting
}
>
<
Text
style
=
{
styles
.
submitButtonText
}
>
{
isSubmitting
?
'Đang tạo...'
:
'Thêm mới'
}
<
/Text
>
<
/TouchableOpacity
>
<
/TouchableOpacity
>
<
/View
>
<
/View
>
<
/View
>
<
/View
>
...
@@ -542,9 +461,9 @@ const DetailIncomingDocumentView = props => {
...
@@ -542,9 +461,9 @@ const DetailIncomingDocumentView = props => {
return
(
return
(
<
View
style
=
{
styles
.
container
}
>
<
View
style
=
{
styles
.
container
}
>
<
Header
title
=
{
'Văn bản 2038475'
}
isBack
/>
<
Header
title
=
{
'Văn bản 2038475'
}
isBack
/>
<
View
style
=
{
{
flex
:
1
}
}
>
<
View
style
=
{
styles
.
flex1
}
>
{
body
()}
{
body
()}
<
View
style
=
{
{
marginHorizontal
:
15
}
}
>
<
View
style
=
{
styles
.
marginHorizontal15
}
>
<
FAB
>
<
FAB
>
<
SubButton
<
SubButton
onPress
=
{()
=>
setShowModal
(
true
)}
onPress
=
{()
=>
setShowModal
(
true
)}
...
...
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