Denis Kurmansky
3 years ago
13 changed files with 567 additions and 2 deletions
Binary file not shown.
Binary file not shown.
@ -1,2 +1,3 @@
@@ -1,2 +1,3 @@
|
||||
export * from './filter-search-header.component'; |
||||
export * from './horizontal-list.component'; |
||||
export * from './my-tasks-list.component'; |
||||
|
@ -0,0 +1,70 @@
@@ -0,0 +1,70 @@
|
||||
import {$size, FlatListItemComponent, getTheme} from '@/shared'; |
||||
import React, {FC} from 'react'; |
||||
import {StyleSheet, View, Text, TouchableOpacity, FlatList} from 'react-native'; |
||||
import {myTasksData} from '../mock/my-tasks-data.mock'; |
||||
|
||||
interface IProps { |
||||
checkboxVal: boolean; |
||||
onPressCheckbox: () => void; |
||||
} |
||||
|
||||
export const MyTasksListComponent: FC<IProps> = ({ |
||||
checkboxVal, |
||||
onPressCheckbox, |
||||
}) => { |
||||
return ( |
||||
<View style={styles.container}> |
||||
<View style={styles.listHeader}> |
||||
<Text style={styles.title}>Моï задачi</Text> |
||||
|
||||
<TouchableOpacity> |
||||
<Text style={styles.seeAll}>Дивитись усі</Text> |
||||
</TouchableOpacity> |
||||
</View> |
||||
|
||||
<FlatList |
||||
data={myTasksData} |
||||
scrollEnabled={false} |
||||
contentContainerStyle={styles.listContainer} |
||||
renderItem={({item}) => { |
||||
return ( |
||||
<FlatListItemComponent |
||||
{...item} |
||||
checkboxVal={checkboxVal} |
||||
onPressCheckbox={onPressCheckbox} |
||||
/> |
||||
); |
||||
}} |
||||
/> |
||||
</View> |
||||
); |
||||
}; |
||||
|
||||
const styles = StyleSheet.create({ |
||||
container: { |
||||
marginBottom: $size(30), |
||||
}, |
||||
|
||||
listHeader: { |
||||
flexDirection: 'row', |
||||
justifyContent: 'space-between', |
||||
marginHorizontal: $size(5), |
||||
marginVertical: $size(20), |
||||
}, |
||||
|
||||
title: { |
||||
fontSize: 16, |
||||
fontWeight: '600', |
||||
}, |
||||
|
||||
seeAll: { |
||||
fontSize: 14, |
||||
fontWeight: '300', |
||||
}, |
||||
|
||||
listContainer: { |
||||
paddingTop: $size(20), |
||||
borderRadius: 20, |
||||
backgroundColor: getTheme().$white, |
||||
}, |
||||
}); |
@ -0,0 +1,282 @@
@@ -0,0 +1,282 @@
|
||||
export const myTasksData = [ |
||||
{ |
||||
title: 'Створити план розвитку нашої компанії', |
||||
count: 1234, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
chat: true, |
||||
star: false, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Звіт за лютий', |
||||
count: 3, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
clip: false, |
||||
chat: true, |
||||
star: false, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Створити дизайн', |
||||
count: 3123, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
clip: true, |
||||
chat: true, |
||||
star: true, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Створити план розвитку нашої компанії', |
||||
count: 1234, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
chat: true, |
||||
star: false, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Звіт за лютий', |
||||
count: 3, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
clip: false, |
||||
chat: true, |
||||
star: false, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Створити дизайн', |
||||
count: 3123, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
clip: true, |
||||
chat: true, |
||||
star: true, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Створити план розвитку нашої компанії', |
||||
count: 1234, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
chat: true, |
||||
star: false, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Звіт за лютий', |
||||
count: 3, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
clip: false, |
||||
chat: true, |
||||
star: false, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Створити дизайн', |
||||
count: 3123, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
clip: true, |
||||
chat: true, |
||||
star: true, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Створити план розвитку нашої компанії', |
||||
count: 1234, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
chat: true, |
||||
star: false, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Звіт за лютий', |
||||
count: 3, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
clip: false, |
||||
chat: true, |
||||
star: false, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Створити дизайн', |
||||
count: 3123, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
clip: true, |
||||
chat: true, |
||||
star: true, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Створити план розвитку нашої компанії', |
||||
count: 1234, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
chat: true, |
||||
star: false, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Звіт за лютий', |
||||
count: 3, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
clip: false, |
||||
chat: true, |
||||
star: false, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Створити дизайн', |
||||
count: 3123, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
clip: true, |
||||
chat: true, |
||||
star: true, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Створити план розвитку нашої компанії', |
||||
count: 1234, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
chat: true, |
||||
star: false, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Звіт за лютий', |
||||
count: 3, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
clip: false, |
||||
chat: true, |
||||
star: false, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Створити дизайн', |
||||
count: 3123, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
clip: true, |
||||
chat: true, |
||||
star: true, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Створити план розвитку нашої компанії', |
||||
count: 1234, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
chat: true, |
||||
star: false, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Звіт за лютий', |
||||
count: 3, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
clip: false, |
||||
chat: true, |
||||
star: false, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Створити дизайн', |
||||
count: 3123, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
clip: true, |
||||
chat: true, |
||||
star: true, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Створити план розвитку нашої компанії', |
||||
count: 1234, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
chat: true, |
||||
star: false, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Звіт за лютий', |
||||
count: 3, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
clip: false, |
||||
chat: true, |
||||
star: false, |
||||
}, |
||||
}, |
||||
{ |
||||
title: 'Створити дизайн', |
||||
count: 3123, |
||||
date: '21.03.2021', |
||||
userName: 'User', |
||||
imageUri: null, |
||||
icons: { |
||||
clip: true, |
||||
chat: true, |
||||
star: true, |
||||
}, |
||||
}, |
||||
]; |
@ -0,0 +1,38 @@
@@ -0,0 +1,38 @@
|
||||
import {getTheme} from '@/shared/themes'; |
||||
import React, {FC} from 'react'; |
||||
import {StyleSheet, TouchableOpacity, ViewStyle} from 'react-native'; |
||||
import {IconComponent} from './icon.component'; |
||||
|
||||
interface IProps { |
||||
value: boolean; |
||||
size: number; |
||||
containerStyle?: ViewStyle; |
||||
onPress: () => void; |
||||
} |
||||
|
||||
export const CheckBox: FC<IProps> = ({ |
||||
value, |
||||
size, |
||||
containerStyle, |
||||
onPress, |
||||
}) => { |
||||
return ( |
||||
<TouchableOpacity onPress={onPress} style={containerStyle}> |
||||
{value ? ( |
||||
<IconComponent |
||||
name={'checksquare-1'} |
||||
size={size} |
||||
color={getTheme().icon.$activeColor} |
||||
/> |
||||
) : ( |
||||
<IconComponent |
||||
name={'checksquare-1-1'} |
||||
size={size} |
||||
color={getTheme().icon.$defaultColor} |
||||
/> |
||||
)} |
||||
</TouchableOpacity> |
||||
); |
||||
}; |
||||
|
||||
const styles = StyleSheet.create({}); |
@ -0,0 +1,150 @@
@@ -0,0 +1,150 @@
|
||||
import {$size} from '@/shared/helpers'; |
||||
import {getTheme} from '@/shared/themes'; |
||||
import React, {FC} from 'react'; |
||||
import {Image, StyleSheet, View, Text} from 'react-native'; |
||||
import {CheckBox} from './checkbox.component'; |
||||
import {IconComponent} from './icon.component'; |
||||
|
||||
interface IProps { |
||||
title: string; |
||||
count: number; |
||||
date: string; |
||||
userName?: string; |
||||
imageUri?: string; |
||||
checkboxVal?: boolean; |
||||
icons?: { |
||||
clip?: boolean; |
||||
chat?: boolean; |
||||
star?: boolean; |
||||
}; |
||||
onPressCheckbox: () => void; |
||||
} |
||||
|
||||
export const FlatListItemComponent: FC<IProps> = ({ |
||||
title, |
||||
count, |
||||
date, |
||||
imageUri, |
||||
checkboxVal, |
||||
userName, |
||||
icons, |
||||
onPressCheckbox, |
||||
}) => { |
||||
const tabBarIcons = ['paperclip-1', 'chat-2', 'vectorstar']; |
||||
|
||||
return ( |
||||
<View style={styles.container}> |
||||
<View style={styles.iconWrap}> |
||||
{imageUri ? ( |
||||
<Image source={{uri: imageUri}} /> |
||||
) : ( |
||||
<Text style={styles.noIcon}>{userName[0]}</Text> |
||||
)} |
||||
</View> |
||||
|
||||
<View style={styles.contentWrap}> |
||||
<View style={styles.topBarWrap}> |
||||
<View style={styles.tabBarIcons}> |
||||
{tabBarIcons.map((item, i) => { |
||||
icons[i]; |
||||
return ( |
||||
<View key={`icon-${i}`}> |
||||
<IconComponent |
||||
name={item} |
||||
size={$size(16)} |
||||
color={getTheme().icon.$darkGray} |
||||
style={styles.tabBaIcon} |
||||
/> |
||||
{icons[i] && ( |
||||
<View style={styles.indicator} /> |
||||
)} |
||||
</View> |
||||
); |
||||
})} |
||||
</View> |
||||
|
||||
<Text style={styles.count}>{`#${count}, ${date}`}</Text> |
||||
</View> |
||||
|
||||
<Text style={[styles.title]}>{title}</Text> |
||||
</View> |
||||
|
||||
<CheckBox |
||||
size={$size(19)} |
||||
value={checkboxVal} |
||||
containerStyle={styles.checkbox} |
||||
onPress={onPressCheckbox} |
||||
/> |
||||
</View> |
||||
); |
||||
}; |
||||
|
||||
const styles = StyleSheet.create({ |
||||
container: { |
||||
backgroundColor: '#fff', |
||||
flexDirection: 'row', |
||||
alignItems: 'center', |
||||
}, |
||||
|
||||
iconWrap: { |
||||
width: $size(35), |
||||
height: $size(35), |
||||
backgroundColor: getTheme().$layoutBg, |
||||
alignItems: 'center', |
||||
justifyContent: 'center', |
||||
borderRadius: 100, |
||||
margin: $size(20), |
||||
overflow: 'hidden', |
||||
}, |
||||
|
||||
noIcon: { |
||||
fontSize: 18, |
||||
fontWeight: '500', |
||||
color: getTheme().icon.$defaultColor, |
||||
}, |
||||
|
||||
contentWrap: { |
||||
paddingBottom: $size(3), |
||||
}, |
||||
|
||||
topBarWrap: { |
||||
flexDirection: 'row', |
||||
justifyContent: 'space-between', |
||||
}, |
||||
|
||||
tabBarIcons: { |
||||
flexDirection: 'row', |
||||
marginRight: $size(20), |
||||
}, |
||||
|
||||
indicator: { |
||||
width: $size(6), |
||||
height: $size(6), |
||||
position: 'absolute', |
||||
bottom: $size(1), |
||||
right: $size(7), |
||||
backgroundColor: getTheme().$secondary, |
||||
borderColor: getTheme().$white, |
||||
borderWidth: 1, |
||||
borderRadius: 100, |
||||
}, |
||||
|
||||
tabBaIcon: { |
||||
marginRight: $size(7), |
||||
}, |
||||
|
||||
count: { |
||||
color: getTheme().icon.$darkGray, |
||||
}, |
||||
|
||||
title: { |
||||
fontSize: 16, |
||||
maxWidth: $size(200), |
||||
marginVertical: $size(6), |
||||
}, |
||||
|
||||
checkbox: { |
||||
position: 'absolute', |
||||
right: $size(24), |
||||
}, |
||||
}); |
Loading…
Reference in new issue