UID: {user.uid} ({user.enabled?'Aktiv':'Inaktiv'})
Vorname: {user.first_name}
@@ -34,7 +25,7 @@ function UserList({userlist}) {
return (
<>
- {list&&list.map((user)=>displayUser(user))}
+ {userlist&&(start!==undefined&&end?userlist.slice(start,end).map((user)=>displayUser(user)):userlist.map((user)=>displayUser(user)))}
>
);
diff --git a/src/route/edituser/index.js b/src/route/edituser/index.js
index cc627b9..27397fa 100644
--- a/src/route/edituser/index.js
+++ b/src/route/edituser/index.js
@@ -1,36 +1,37 @@
import {h} from 'preact';
-function EditUser(){
-
+import { useContext, useState } from 'preact/hooks';
+import { route } from 'preact-router';
+import { UserTable } from "../../store";
+function EditUser({userid}){
+ const { usertable, userreducer } = useContext(UserTable);
+ let user = usertable.find(u=>u.uid===userid)
+ const [formdata, formchange] = useState(user?user:{});
+ const onChange=(e)=>{
+ console.log(e);
+ if(e.target.type==='checkbox')
+ formchange({...formdata, [e.target.id]:e.target.checked})
+ else
+ formchange({...formdata, [e.target.id]:e.target.value})
+ }
+ const onSubmit=(e)=>{
+ e.preventDefault();
+ userreducer({type:'update', user: formdata})
+ route('/users');
+ }
+ const Input = ({id, type='text', label, disabled})=>(
)
return(
)
-}
\ No newline at end of file
+}
+export default EditUser;
\ No newline at end of file
diff --git a/src/route/index.js b/src/route/index.js
index 4bd2d59..afd8761 100644
--- a/src/route/index.js
+++ b/src/route/index.js
@@ -1,7 +1,8 @@
import Home from "./home"
import Users from './users'
+import EditUser from "./edituser"
import Profile from "./profile"
import Login from "./login"
import Logout from './logout'
import System from './system'
-export {Home, Users, Profile, Login, Logout, System }
\ No newline at end of file
+export {Home, Users, EditUser, Profile, Login, Logout, System }
\ No newline at end of file
diff --git a/src/route/users/index.jsx b/src/route/users/index.jsx
index b817ff6..feb1212 100644
--- a/src/route/users/index.jsx
+++ b/src/route/users/index.jsx
@@ -1,16 +1,65 @@
import { h } from "preact";
-import UserList from "../../components/userlist";
-import {Pageselector, Breadcrumbs} from "../../components";
-import api, {parsedb} from '../../api'
-function Users() {
- console.log(parsedb)
+import { UserList, Pageselector, Breadcrumbs } from "../../components";
+import api from '../../api'
+import { route } from 'preact-router';
+import { useContext, useEffect, useState } from "preact/hooks";
+import { UserTable } from "../../store";
+function Users({pageid}) {
+ const [viewstate, setview] = useState({limit:100, page:1, pages:null})
+ const { usertable, userreducer } = useContext(UserTable)
+ const setPage = (e)=>{
+ e.preventDefault();
+ console.log(e)
+ let page = e.target.text;
+ setview({...viewstate, page})
+ }
+ if (usertable.length === 0)
+ api.fetchdb().then(imported => {
+ let action = { type: 'import', imported };
+ userreducer(action);
+ });
+ useEffect(() => {
+ if (usertable.length === 0)
+ api.fetchdb().then(imported => {
+ let action = { type: 'import', imported };
+ userreducer(action);
+ })
+
+
+ });
+ useEffect(()=>{
+ setview({...viewstate,pages:Math.ceil(usertable.length/viewstate.limit)});
+ console.log("New View effect")
+ },[usertable])
+ useEffect(()=>{
+ if(pageid&&!isNaN(pageid))
+ setview({...viewstate, page: pageid})
+ },[pageid])
+ const deleteUser = (user) => {
+ let action = {
+ type: 'delete',
+ user
+ }
+ userreducer(action)
+ }
+ const calculateView=()=>{
+ let start=viewstate.limit*(viewstate.page-1);
+ let end=viewstate.limit*(viewstate.page);
+ return {start, end}
+ }
+ const editUser = (user) => {
+ route(`/edituser/${user.uid}`);
+ }
const navigation = ["Users"];
+ console.log(viewstate);
+ //
return (
Suche: Limit:
-
-
+
+
+
);
diff --git a/src/store/AppState.js b/src/store/AppState.js
index 8e5acdd..7c77dec 100644
--- a/src/store/AppState.js
+++ b/src/store/AppState.js
@@ -1,6 +1,5 @@
import { createContext } from "preact";
-
const AppState = createContext({});
-
-export const AppStateProvider = AppState.Provider;
-export default AppState;
\ No newline at end of file
+const AppStateProvider = AppState.Provider;
+export default AppState;
+export {AppStateProvider};
\ No newline at end of file
diff --git a/src/store/UserTable.js b/src/store/UserTable.js
new file mode 100644
index 0000000..6a1aec8
--- /dev/null
+++ b/src/store/UserTable.js
@@ -0,0 +1,8 @@
+import { createContext } from "preact";
+export function CreateUserTable(){
+ const usercontext = createContext();
+ return usercontext;
+}
+const UserTable = CreateUserTable();
+export default UserTable.Provider;
+export {UserTable}
diff --git a/src/store/index.js b/src/store/index.js
new file mode 100644
index 0000000..43d0036
--- /dev/null
+++ b/src/store/index.js
@@ -0,0 +1,5 @@
+import AppState, {AppStateProvider} from "./AppState";
+import UserTableProvider,{UserTable} from './UserTable';
+import {menuReducer, sessionReducer, userTableReducer} from './reducers';
+export default AppState;
+export {AppStateProvider, UserTableProvider, UserTable, menuReducer, sessionReducer, userTableReducer}
\ No newline at end of file
diff --git a/src/store/reducers.js b/src/store/reducers.js
index 6f32950..b363d5e 100644
--- a/src/store/reducers.js
+++ b/src/store/reducers.js
@@ -9,8 +9,41 @@ export const menuReducer = (state, action) => {
export const sessionReducer = (state, action) => {
switch (action.type) {
- case 'start': return {active: true, token: action.token, username: action.username}
- case 'end': return {active: false, token: null, username: null, exiry: null}
+ case 'start': return { active: true, token: action.token, username: action.username }
+ case 'end': return { active: false, token: null, username: null, exiry: null }
default: throw new Error("action type unknown to session reducer");
}
}
+
+export const userTableReducer = (state, action) => {
+ let user = action.user;
+ switch (action.type) {
+ case 'create': return [...state, { line: state.length, ...user }]
+ case 'delete': {
+ let newstate = [];
+ let newindex = 0;
+ state.forEach((u, i) => {
+ if (user.uid && u.uid !== user.uid|| user.line && i !== user.line )
+ newstate.push({ ...u, line: newindex++ })
+ return newstate;
+ }, []);
+ return newstate;
+ }
+ case 'update': {
+ let newstate = [];
+ state.forEach((u, i) => {
+ if (user.uid && u.uid === user.uid || user.line && i === user.line)
+ newstate.push(user);
+ else
+ newstate.push(u);
+ });
+ return [...newstate]
+ }
+ case 'import':
+ return action.imported;
+ case 'reset':
+ return [];
+ default:
+ throw new Error("action type unknown to usertable reducer");
+ }
+}
\ No newline at end of file