import React, { useState } from 'react';
import { ReactElement } from 'react';
import {
StyleSheet, ScrollView,
} from 'react-native';
import { GET_USERS, UsersData } from '../queries/UserQuery';
import { useQuery } from '@apollo/react-hooks';
import { Text } from 'react-native-elements';
import Icon from 'react-native-vector-icons/FontAwesome';
import UserPage from './UserPage';
import { FloatingAction } from "react-native-floating-action";
import { DialogAction } from '../models/CommonModel';
import { User } from '../models/UserModel';
/**
* @description holds user list
*/
// create user button declarations like icon, actions
const createUserIcon =
const createUserAction = "bt_create_user"
const actions = [
{
text: "Create User",
icon: createUserIcon,
name: createUserAction,
position: 1
}
];
/**
* User List Component
* @param navigation navigation
*/
const UsersPage: ({navigation}) => ReactElement = ({navigation}) => {
// Queries all users
const { loading, data, error } = useQuery(
GET_USERS
);
// List last updated state
const [lastUpdated, setLastUpdated] = useState(new Date());
/**
* updates user list with updated / created / deleted user
* @param user user instance
* @param action dialog action
*/
const updateState = (user: User, action: DialogAction) => {
if (data && data.users) {
if (action === DialogAction.Edit || action === DialogAction.Delete) {
let oldUserIndex = data.users.map(u => {
return u.id;
}).indexOf(user.id);
if (oldUserIndex != null && oldUserIndex >= 0) {
if (action === DialogAction.Edit) {
data.users[oldUserIndex] = user;
} else if (action === DialogAction.Delete) {
data.users.splice(oldUserIndex, 1);
}
}
} else if(action === DialogAction.New) {
data.users.push(user);
}
}
setLastUpdated(new Date());
}
return (
<>
{
loading ? (
Loading ...
) :
error ? (
{error.message}
) : (
<>
{data && data.users.map(user => (
))}
{
if (name === createUserAction) {
navigation.navigate('UserDialog', {user: {} as User, action: DialogAction.New, onCallback: updateState})
}
}}
/>
>
)
}
>
);
};
const styles = StyleSheet.create({
});
export default UsersPage;