chat ui begin
parent
79365c55f1
commit
589545ae09
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"cSpell.words": ["Pressable"]
|
||||||
|
}
|
|
@ -44,6 +44,10 @@ import {
|
||||||
LoginStackNavigatorParamList,
|
LoginStackNavigatorParamList,
|
||||||
RegisterScreenAnim,
|
RegisterScreenAnim,
|
||||||
} from './components/NotLoggedIn';
|
} from './components/NotLoggedIn';
|
||||||
|
import ChatMainScreen, {
|
||||||
|
ChatMainStackNavigatorParamList,
|
||||||
|
} from './components/chat/screen/main';
|
||||||
|
import ChatScreenStack from './components/chat/screen/main';
|
||||||
|
|
||||||
const styles = StyleSheet.create({
|
const styles = StyleSheet.create({
|
||||||
container: {
|
container: {
|
||||||
|
@ -59,6 +63,7 @@ export const linking: LinkingOptions<{}> = {
|
||||||
export type RootStackNavigatorParamList = {
|
export type RootStackNavigatorParamList = {
|
||||||
Home: NavigatorScreenParams<HomeStackNavigatorParamList>;
|
Home: NavigatorScreenParams<HomeStackNavigatorParamList>;
|
||||||
Register: NavigatorScreenParams<LoginStackNavigatorParamList>;
|
Register: NavigatorScreenParams<LoginStackNavigatorParamList>;
|
||||||
|
Chat: NavigatorScreenParams<ChatMainStackNavigatorParamList>;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type RootScreenNavigationProp =
|
export type RootScreenNavigationProp =
|
||||||
|
@ -69,6 +74,11 @@ export default function Navigation() {
|
||||||
<Stack.Navigator screenOptions={{headerShown: false}}>
|
<Stack.Navigator screenOptions={{headerShown: false}}>
|
||||||
<Stack.Screen name="Home" component={HomeStack} />
|
<Stack.Screen name="Home" component={HomeStack} />
|
||||||
<Stack.Screen name="Register" component={RegisterScreenAnim} />
|
<Stack.Screen name="Register" component={RegisterScreenAnim} />
|
||||||
|
<Stack.Screen
|
||||||
|
name="Chat"
|
||||||
|
component={ChatScreenStack}
|
||||||
|
options={{animation: 'fade'}}
|
||||||
|
/>
|
||||||
</Stack.Navigator>
|
</Stack.Navigator>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -79,7 +89,7 @@ export type HomeStackNavigatorParamList = {
|
||||||
Account: NavigatorScreenParams<AccountStackNavigatorParamList>;
|
Account: NavigatorScreenParams<AccountStackNavigatorParamList>;
|
||||||
Calendar: NavigatorScreenParams<CalendarStackNavigatorParamList>;
|
Calendar: NavigatorScreenParams<CalendarStackNavigatorParamList>;
|
||||||
Maps: NavigatorScreenParams<MapsStackNavigatorParamList>;
|
Maps: NavigatorScreenParams<MapsStackNavigatorParamList>;
|
||||||
Chat: NavigatorScreenParams<ChatStackNavigatorParamList>;
|
ChatList: NavigatorScreenParams<ChatStackNavigatorParamList>;
|
||||||
};
|
};
|
||||||
|
|
||||||
function AccountTabAnim(props: any) {
|
function AccountTabAnim(props: any) {
|
||||||
|
@ -106,9 +116,9 @@ function MapsTabAnim(props: any) {
|
||||||
}
|
}
|
||||||
function ChatTabAnim(props: any) {
|
function ChatTabAnim(props: any) {
|
||||||
return (
|
return (
|
||||||
<SlideFromRightView>
|
<SlideFromLeftView>
|
||||||
<ChatTab {...props} />
|
<ChatTab {...props} />
|
||||||
</SlideFromRightView>
|
</SlideFromLeftView>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,7 +128,7 @@ function HomeStack() {
|
||||||
<Tab.Screen name="Account" component={AccountTabAnim} />
|
<Tab.Screen name="Account" component={AccountTabAnim} />
|
||||||
<Tab.Screen name="Calendar" component={CalendarTabAnim} />
|
<Tab.Screen name="Calendar" component={CalendarTabAnim} />
|
||||||
<Tab.Screen name="Maps" component={MapsTabAnim} />
|
<Tab.Screen name="Maps" component={MapsTabAnim} />
|
||||||
<Tab.Screen name="Chat" component={ChatTabAnim} />
|
<Tab.Screen name="ChatList" component={ChatTabAnim} />
|
||||||
</Tab.Navigator>
|
</Tab.Navigator>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,8 +50,6 @@ export function ProfilePicture(props: {size: number; UserId: UserId}) {
|
||||||
|
|
||||||
hash = Math.abs(hash >> 16);
|
hash = Math.abs(hash >> 16);
|
||||||
|
|
||||||
console.log(hash);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box
|
<Box
|
||||||
bg={'hsl(' + hash + ', 70%, 60%)'}
|
bg={'hsl(' + hash + ', 70%, 60%)'}
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
|
import {appNonSaveVarActions} from '@caj/configs/appNonSaveVarReducer';
|
||||||
import {
|
import {
|
||||||
darkThemeStyle,
|
darkThemeStyle,
|
||||||
getBackgroundColor,
|
getBackgroundColor,
|
||||||
themeSelector,
|
themeSelector,
|
||||||
} from '@caj/configs/colors';
|
} from '@caj/configs/colors';
|
||||||
import {RootState} from '@caj/redux/store';
|
import {RootScreenNavigationProp} from '@caj/Navigation';
|
||||||
|
import {RootState, store} from '@caj/redux/store';
|
||||||
import UserManager from '@caj/user/UserManager';
|
import UserManager from '@caj/user/UserManager';
|
||||||
import {Box, HStack, Text, VStack} from 'native-base';
|
import {useNavigation} from '@react-navigation/native';
|
||||||
|
import {Box, HStack, Pressable, Text, VStack} from 'native-base';
|
||||||
import {useSelector} from 'react-redux';
|
import {useSelector} from 'react-redux';
|
||||||
import {start} from 'repl';
|
import {start} from 'repl';
|
||||||
import {ProfilePicture} from '../ProfilePicture';
|
import {ProfilePicture} from '../ProfilePicture';
|
||||||
|
@ -18,6 +21,11 @@ export function ListChats() {
|
||||||
const chatActivity = useSelector(
|
const chatActivity = useSelector(
|
||||||
(state: RootState) => state.nonSaveVariables.chatActivity,
|
(state: RootState) => state.nonSaveVariables.chatActivity,
|
||||||
);
|
);
|
||||||
|
const selectedChat = useSelector(
|
||||||
|
(state: RootState) => state.nonSaveVariables.selectedChat,
|
||||||
|
);
|
||||||
|
|
||||||
|
console.log('selectedChat', selectedChat);
|
||||||
|
|
||||||
const space = 4;
|
const space = 4;
|
||||||
const ppSize = 64;
|
const ppSize = 64;
|
||||||
|
@ -25,6 +33,8 @@ export function ListChats() {
|
||||||
|
|
||||||
const lang = useSelector((state: RootState) => state.appVariables.lang);
|
const lang = useSelector((state: RootState) => state.appVariables.lang);
|
||||||
|
|
||||||
|
const navigation = useNavigation<RootScreenNavigationProp>();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<VStack
|
<VStack
|
||||||
mt={space * 2 + 'px'}
|
mt={space * 2 + 'px'}
|
||||||
|
@ -37,9 +47,17 @@ export function ListChats() {
|
||||||
const user = UserManager.getUserSelector(chatId);
|
const user = UserManager.getUserSelector(chatId);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box
|
<Pressable
|
||||||
key={'chatList_i' + i + chatId}
|
key={'chatList_i' + i + chatId}
|
||||||
bg={'blackBG.400'}
|
onPress={() => {
|
||||||
|
store.dispatch(appNonSaveVarActions.setSelectedChat(chatId));
|
||||||
|
navigation.navigate('Chat', {screen: 'Overview'});
|
||||||
|
//navigation.navigate('Register', {screen: 'RegStepOne'});
|
||||||
|
}}>
|
||||||
|
{({isHovered, isFocused, isPressed}) => {
|
||||||
|
return (
|
||||||
|
<Box
|
||||||
|
bg={isHovered ? 'black.200' : 'blackBG.400'}
|
||||||
{...darkThemeStyle(theme, 'black.400')}
|
{...darkThemeStyle(theme, 'black.400')}
|
||||||
borderRadius={ppSize / 2 + 'px'}
|
borderRadius={ppSize / 2 + 'px'}
|
||||||
borderTopRightRadius={
|
borderTopRightRadius={
|
||||||
|
@ -48,7 +66,9 @@ export function ListChats() {
|
||||||
: ppSize / 2 + 'px'
|
: ppSize / 2 + 'px'
|
||||||
}
|
}
|
||||||
borderBottomLeftRadius={
|
borderBottomLeftRadius={
|
||||||
chat.tags.length > 0 ? tagSize / 2 + 'px' : ppSize / 2 + 'px'
|
chat.tags.length > 0
|
||||||
|
? tagSize / 2 + 'px'
|
||||||
|
: ppSize / 2 + 'px'
|
||||||
}
|
}
|
||||||
marginX={space + 'px'}
|
marginX={space + 'px'}
|
||||||
padding={space + 'px'}>
|
padding={space + 'px'}>
|
||||||
|
@ -150,6 +170,9 @@ export function ListChats() {
|
||||||
</VStack>
|
</VStack>
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
|
}}
|
||||||
|
</Pressable>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
})}
|
})}
|
||||||
</VStack>
|
</VStack>
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
import {defaultHeaderStyle} from '@caj/configs/colors';
|
||||||
|
import {SlideFromRightView} from '@caj/helper/animations';
|
||||||
|
import {RootState} from '@caj/redux/store';
|
||||||
|
import {
|
||||||
|
createNativeStackNavigator,
|
||||||
|
NativeStackNavigationProp,
|
||||||
|
} from '@react-navigation/native-stack';
|
||||||
|
import {Text} from 'native-base';
|
||||||
|
import {useSelector} from 'react-redux';
|
||||||
|
|
||||||
|
export type ChatMainStackNavigatorParamList = {
|
||||||
|
Overview: undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
const ChatStack = createNativeStackNavigator<ChatMainStackNavigatorParamList>();
|
||||||
|
|
||||||
|
export type ChatScreenNavigationProp =
|
||||||
|
NativeStackNavigationProp<ChatMainStackNavigatorParamList>;
|
||||||
|
|
||||||
|
function ChatScreenStack() {
|
||||||
|
const lang = useSelector((state: RootState) => state.appVariables.lang);
|
||||||
|
const theme = useSelector(
|
||||||
|
(state: RootState) => state.appVariables.preferences.theme,
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ChatStack.Navigator>
|
||||||
|
<ChatStack.Screen
|
||||||
|
name="Overview"
|
||||||
|
options={{
|
||||||
|
title: '',
|
||||||
|
animation: 'fade',
|
||||||
|
headerShown: true,
|
||||||
|
...defaultHeaderStyle(theme),
|
||||||
|
}}
|
||||||
|
component={ChatMainScreen}
|
||||||
|
/>
|
||||||
|
</ChatStack.Navigator>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChatMainScreen() {
|
||||||
|
const chatId = useSelector(
|
||||||
|
(state: RootState) => state.nonSaveVariables.selectedChat,
|
||||||
|
);
|
||||||
|
|
||||||
|
return <Text>{chatId}</Text>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ChatScreenStack;
|
|
@ -1,6 +1,6 @@
|
||||||
//these variables should not changed by the user and will not be saved in storage
|
//these variables should not changed by the user and will not be saved in storage
|
||||||
|
|
||||||
import { chatEntity, chatId } from '@caj/components/chat/types';
|
import {chatEntity, chatId} from '@caj/components/chat/types';
|
||||||
import {getVersionByNum, VersionType} from '@caj/helper/version';
|
import {getVersionByNum, VersionType} from '@caj/helper/version';
|
||||||
import {User} from '@caj/user/types';
|
import {User} from '@caj/user/types';
|
||||||
import {UserId} from './types';
|
import {UserId} from './types';
|
||||||
|
@ -26,8 +26,9 @@ export interface NON_SAVE_VARS {
|
||||||
appStatus: appStatus;
|
appStatus: appStatus;
|
||||||
connectionStatus: connectionStatus;
|
connectionStatus: connectionStatus;
|
||||||
cachedUsers: {[key: UserId]: User};
|
cachedUsers: {[key: UserId]: User};
|
||||||
chats: {[key: chatId]: chatEntity}
|
chats: {[key: chatId]: chatEntity};
|
||||||
chatActivity: chatId[];
|
chatActivity: chatId[];
|
||||||
|
selectedChat: chatId | 'none';
|
||||||
}
|
}
|
||||||
|
|
||||||
export const non_save_vars: NON_SAVE_VARS = {
|
export const non_save_vars: NON_SAVE_VARS = {
|
||||||
|
@ -37,4 +38,5 @@ export const non_save_vars: NON_SAVE_VARS = {
|
||||||
cachedUsers: {},
|
cachedUsers: {},
|
||||||
chats: {},
|
chats: {},
|
||||||
chatActivity: [],
|
chatActivity: [],
|
||||||
|
selectedChat: 'none',
|
||||||
};
|
};
|
||||||
|
|
|
@ -19,6 +19,9 @@ export const appNonSaveVariablesSlice = createSlice({
|
||||||
removeCachedUser: (state, action: PayloadAction<UserId>) => {
|
removeCachedUser: (state, action: PayloadAction<UserId>) => {
|
||||||
delete state.cachedUsers[action.payload];
|
delete state.cachedUsers[action.payload];
|
||||||
},
|
},
|
||||||
|
setSelectedChat: (state, action: PayloadAction<chatId>) => {
|
||||||
|
state.selectedChat = action.payload;
|
||||||
|
},
|
||||||
setChatEntity: (state, action: PayloadAction<chatEntity>) => {
|
setChatEntity: (state, action: PayloadAction<chatEntity>) => {
|
||||||
const chatId = action.payload.id;
|
const chatId = action.payload.id;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue