React -> add other forms && complete general tasks
parent
28f755a0a2
commit
ce838b61f0
|
|
@ -53,7 +53,7 @@ const ModelShowAndDownloadForm = () => {
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className="float_form_model"
|
className="float_form_model"
|
||||||
style={ { marginTop: '10%' } }
|
style={ { marginTop: '10%' , overflowY: 'scroll', height: '500px' } }
|
||||||
>
|
>
|
||||||
<FormGenerator
|
<FormGenerator
|
||||||
inputList={ inputList }
|
inputList={ inputList }
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,77 @@
|
||||||
|
import React, { useState, useEffect } from 'react'
|
||||||
|
|
||||||
|
import { useSelector, useDispatch } from 'react-redux'
|
||||||
|
|
||||||
|
import { userAuthSelector } from '../../../redux/slices/userAuthSlice'
|
||||||
|
import { userCrudSelector } from '../../../redux/slices/userCrudSlice'
|
||||||
|
|
||||||
|
import { deleteUser } from '../../../redux/slices/userAuthSlice'
|
||||||
|
|
||||||
|
import userCrudAsyncThunk from '../../../redux/asyncThunks/userCrudAsyncThunk'
|
||||||
|
|
||||||
|
import FormGenerator from '../formGenerator'
|
||||||
|
|
||||||
|
|
||||||
|
const UserDeleteForm = () => {
|
||||||
|
|
||||||
|
const usernameInput = React.createRef()
|
||||||
|
|
||||||
|
const { user, token } = useSelector( userAuthSelector )
|
||||||
|
|
||||||
|
const dispatch = useDispatch()
|
||||||
|
const { info } = useSelector( userCrudSelector )
|
||||||
|
|
||||||
|
let refList = [
|
||||||
|
usernameInput,
|
||||||
|
]
|
||||||
|
|
||||||
|
let inputList = [
|
||||||
|
{
|
||||||
|
type: 'info',
|
||||||
|
action: 'Create',
|
||||||
|
endpint: 'user/crud/delete',
|
||||||
|
button_value: 'Delete'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'text',
|
||||||
|
name: 'Username',
|
||||||
|
ref: usernameInput
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
const handleDelete = async ( refs ) => {
|
||||||
|
if ( refs[0].current.value === user.username ) {
|
||||||
|
let pass = {
|
||||||
|
token: token,
|
||||||
|
user_id: user.id
|
||||||
|
}
|
||||||
|
dispatch(
|
||||||
|
deleteUser()
|
||||||
|
)
|
||||||
|
dispatch(
|
||||||
|
userCrudAsyncThunk.fetchDeleteUser(
|
||||||
|
pass
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className="float_form_model"
|
||||||
|
style={ { marginTop: '17%'} }
|
||||||
|
>
|
||||||
|
<FormGenerator
|
||||||
|
inputList={ inputList }
|
||||||
|
refList={ refList }
|
||||||
|
action={ handleDelete }
|
||||||
|
/>
|
||||||
|
<div className='form_info'>
|
||||||
|
{ info }
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default UserDeleteForm
|
||||||
|
|
@ -0,0 +1,87 @@
|
||||||
|
import React, { useState, useEffect } from 'react'
|
||||||
|
|
||||||
|
import { useSelector, useDispatch } from 'react-redux'
|
||||||
|
|
||||||
|
import { userCrudSelector } from '../../../redux/slices/userCrudSlice'
|
||||||
|
import { userAuthSelector } from '../../../redux/slices/userAuthSlice'
|
||||||
|
import userCrudAsyncThunk from '../../../redux/asyncThunks/userCrudAsyncThunk'
|
||||||
|
|
||||||
|
import FormGenerator from '../formGenerator'
|
||||||
|
|
||||||
|
|
||||||
|
const UserUpdateForm = () => {
|
||||||
|
|
||||||
|
const usernameInput = React.createRef()
|
||||||
|
const passwordInput = React.createRef()
|
||||||
|
const emailInput = React.createRef()
|
||||||
|
|
||||||
|
const dispatch = useDispatch()
|
||||||
|
const { info } = useSelector( userCrudSelector )
|
||||||
|
const { user, token } = useSelector( userAuthSelector )
|
||||||
|
|
||||||
|
let refList = [
|
||||||
|
usernameInput,
|
||||||
|
passwordInput,
|
||||||
|
emailInput
|
||||||
|
]
|
||||||
|
|
||||||
|
let inputList = [
|
||||||
|
{
|
||||||
|
type: 'info',
|
||||||
|
action: 'Create',
|
||||||
|
endpint: 'user/crud/update',
|
||||||
|
button_value: 'Update User'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'text',
|
||||||
|
name: 'Username',
|
||||||
|
ref: usernameInput
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'password',
|
||||||
|
name: 'Password',
|
||||||
|
ref: passwordInput
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'text',
|
||||||
|
name: 'Email',
|
||||||
|
ref: emailInput
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
const update = async ( refs ) => {
|
||||||
|
let pass = {
|
||||||
|
user_id: user.id,
|
||||||
|
token: token,
|
||||||
|
user: {
|
||||||
|
username: refs[0].current.value,
|
||||||
|
password: refs[1].current.value,
|
||||||
|
email: refs[2].current.value,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dispatch(
|
||||||
|
userCrudAsyncThunk.fetchUpdateUser(
|
||||||
|
pass
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className="float_form_model"
|
||||||
|
style={ { marginTop: '10%'} }
|
||||||
|
>
|
||||||
|
<FormGenerator
|
||||||
|
inputList={ inputList }
|
||||||
|
refList={ refList }
|
||||||
|
action={ update }
|
||||||
|
/>
|
||||||
|
<div className='form_info'>
|
||||||
|
{ info }
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default UserUpdateForm
|
||||||
|
|
@ -54,7 +54,7 @@ const GeneralView = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<div>
|
||||||
<NavigationBar
|
<NavigationBar
|
||||||
movements={ movements }
|
movements={ movements }
|
||||||
/>
|
/>
|
||||||
|
|
@ -67,34 +67,23 @@ const GeneralView = () => {
|
||||||
<RenderIndex
|
<RenderIndex
|
||||||
movement={ movements.render_view.renderView }
|
movement={ movements.render_view.renderView }
|
||||||
/>
|
/>
|
||||||
{/* <RenderWebsocketIndex
|
</div>
|
||||||
movement={ movements.render_view.renderView }
|
|
||||||
/> */}
|
|
||||||
</>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const __verifyUserSession = (token, user) => {
|
|
||||||
|
|
||||||
if ( user.id !== 0 && user.username !== '' && user.email !== '' && token !== '' )
|
|
||||||
return true
|
|
||||||
else
|
|
||||||
return false
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
const VerifyUserSession = () => {
|
const VerifyUserSession = () => {
|
||||||
|
|
||||||
const { token, user } = useSelector(userAuthSelector)
|
const { token, user } = useSelector(userAuthSelector)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<div>
|
||||||
{
|
{
|
||||||
__verifyUserSession(token, user)
|
user.id !== 0 && token !== ''
|
||||||
? <GeneralView />
|
? <GeneralView />
|
||||||
: <UserAuthIndex />
|
: <UserAuthIndex />
|
||||||
}
|
}
|
||||||
</>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,41 @@
|
||||||
import React, { useState, useEffect } from 'react'
|
import React, { useState, useEffect } from 'react'
|
||||||
|
|
||||||
const UserCrudIndex = () => {
|
import UserUpdateForm from '../../../components/forms/user_crud/userUpdate'
|
||||||
|
import UserDeleteForm from '../../../components/forms/user_crud/userDelete'
|
||||||
|
|
||||||
|
|
||||||
|
const __handleSwap = (name, movement) => {
|
||||||
|
|
||||||
|
let display = {
|
||||||
|
display: 'block'
|
||||||
|
}
|
||||||
|
|
||||||
|
let hide = {
|
||||||
|
display: 'none'
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( Object.keys(movement['movement']).includes(name) ) {
|
||||||
|
if (movement['movement'][name])
|
||||||
|
return display
|
||||||
|
else
|
||||||
|
return hide
|
||||||
|
} else {
|
||||||
|
return hide
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const UserCrudIndex = ( movement ) => {
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
|
<div style={ __handleSwap( 'update_user', movement ) }>
|
||||||
|
<UserUpdateForm />
|
||||||
|
</div>
|
||||||
|
<div style={ __handleSwap( 'delete_user', movement ) }>
|
||||||
|
<UserDeleteForm />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,15 @@ const userAuthSlice = createSlice(
|
||||||
},
|
},
|
||||||
info: ''
|
info: ''
|
||||||
},
|
},
|
||||||
reducers: {},
|
reducers: {
|
||||||
|
deleteUser(state) {
|
||||||
|
state.token = ''
|
||||||
|
state.user.id = 0
|
||||||
|
state.user.username = ''
|
||||||
|
state.user.email = ''
|
||||||
|
state.info = 'user has been deleted'
|
||||||
|
}
|
||||||
|
},
|
||||||
extraReducers: {
|
extraReducers: {
|
||||||
[userAuthAsyncThunk.fetchLogin.fulfilled.type]: (state, action) => {
|
[userAuthAsyncThunk.fetchLogin.fulfilled.type]: (state, action) => {
|
||||||
try {
|
try {
|
||||||
|
|
@ -39,4 +47,6 @@ const userAuthSlice = createSlice(
|
||||||
|
|
||||||
export const userAuthReducer = userAuthSlice.reducer
|
export const userAuthReducer = userAuthSlice.reducer
|
||||||
|
|
||||||
|
export const { deleteUser } = userAuthSlice.actions
|
||||||
|
|
||||||
export const userAuthSelector = state => state.userAuthReducer
|
export const userAuthSelector = state => state.userAuthReducer
|
||||||
|
|
@ -25,19 +25,13 @@ const userCrudSlice = createSlice(
|
||||||
state.user_get = action.payload.data
|
state.user_get = action.payload.data
|
||||||
},
|
},
|
||||||
[userCrudAsyncThunk.fetchRegister.fulfilled.type]: (state, action) => {
|
[userCrudAsyncThunk.fetchRegister.fulfilled.type]: (state, action) => {
|
||||||
try {
|
state.user_register = action.payload.data
|
||||||
state.user_register.id = action.payload.data.id
|
|
||||||
state.user_register.username = action.payload.data.username
|
|
||||||
state.user_register.email = action.payload.data.email
|
|
||||||
state.info = 'register success'
|
state.info = 'register success'
|
||||||
} catch {
|
|
||||||
state.info = 'register failed'
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
[userCrudAsyncThunk.fetchUpdateUser.fulfilled.type]: (state, action) => {
|
[userCrudAsyncThunk.fetchUpdateUser.fulfilled.type]: (state, action) => {
|
||||||
state.user_update = action.payload.data
|
state.user_update = action.payload.data
|
||||||
},
|
},
|
||||||
[userCrudAsyncThunk.fetchDeleteUser.fulfilled.type]: (state, action) => {
|
[userCrudAsyncThunk.fetchDeleteUser.fulfilled.type]: (state) => {
|
||||||
state.users_list = []
|
state.users_list = []
|
||||||
state.user_get = {}
|
state.user_get = {}
|
||||||
state.user_register = {}
|
state.user_register = {}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue