Add user model to app models, user layout updated for gathering data from model instead local functions

This commit is contained in:
srgooglo 2020-10-09 16:03:10 +02:00
parent 5841296cd7
commit 91e7a162af
4 changed files with 99 additions and 41 deletions

View File

@ -45,6 +45,7 @@
"concat-stream": "^2.0.0",
"cookie_js": "^1.4.0",
"dotenv": "^8.2.0",
"dva-model-enhance": "^1.2.13",
"electron-config": "^2.0.0",
"electron-context-menu": "^2.3.0",
"electron-is": "^3.0.0",

View File

@ -149,6 +149,10 @@ export default {
}
},
*getStateConnector({payload}, { select }){
const state = yield select(state => state.app)
payload(state)
},
*logout({ payload }, { call, put, select }) {
const uuid = yield select(state => state.app.session_uuid)
const token = yield select(state => state.app.session_token)

76
src/models/user.ts Normal file
View File

@ -0,0 +1,76 @@
import { effect, reducer, dvaModel, subscription, path, BaseModel } from 'dva-model-enhance'
import store from 'store'
import { app_config } from 'config'
import keys from 'config/app_keys'
import { user, session } from 'core/models'
import { router, verbosity, appInterface } from 'core/libs'
import settings from 'core/libs/settings'
import { DynamicSDCP } from 'core/libs/extension'
import * as core from 'core'
import jwt from 'jsonwebtoken'
import cookie from 'cookie_js'
export default {
namespace: 'user',
state: {
},
subscriptions: {
setup({ dispatch }) {
dispatch({ type: 'query' })
},
},
effects: {
*query({ payload }, { call, put, select }) {
const stateConnector = yield select(state => state)
const { server_key, session_token, session_data, session_uuid, session_valid } = stateConnector.app
yield put({ type: "updateState", payload: { server_key, session_uuid, session_token, session_data, session_valid } })
},
*get({ callback, req }, { call, put, select }) {
const state = yield select(state => state.user)
if (state.session_valid) {
if (!req) {
callback(120, "req params not valid data")
}
user.get[req.fetch]({username: req.username, server_key: state.server_key, access_token: state.session_token }, (err, res) => {
if (err) {
return console.log(err)
}
const data = JSON.parse(res)["user_data"]
const frame = {
avatar: data.avatar,
can_follow: data.can_follow,
country_id: data.contry_id,
about: data.about,
cover: data.cover,
is_pro: data.is_pro,
lastseen: data.lastseen,
points: data.points,
registered:data.registered,
user_id: data.user_id,
verified: data.verified,
birthday: data.birthday,
details: data.details
}
return callback(false, frame)
})
}else{
callback(403, "You need to be logged in to get this data")
}
},
*set({ payload }, { call, put, select }) {
},
},
reducers: {
updateState(state, { payload }) {
return {
...state,
...payload,
};
}
},
};

View File

@ -1,9 +1,8 @@
import React from 'react'
import { pathMatchRegexp } from 'core'
import { router } from 'core/libs/router'
import HandleError from 'core/libs/errorhandler'
import { Invalid } from 'components'
import styles from './index.less'
import { user } from 'core/models'
import FollowButton from './components/follow'
import Menu from './components/menu'
@ -12,12 +11,6 @@ import * as antd from 'antd'
import { connect } from 'umi'
const matchRegexp = pathMatchRegexp('/@/:id', location.pathname)
const __Avatar = "https://comty.pw/upload/photos/2020/09/MEmX2WskbYdqxxIfG1Ci_12_bf9ae629707074e3dde5b6ff4ccb1caf_avatar.jpeg?cache=1599917094"
const __Cover = "https://comty.pw/upload/photos/2020/09/ontbBGwvDruPxxHxzd7K_12_b36cb70f20df86ea77cd04005786bad7_cover.png?cache=1599917132"
const __About = "Cum cum cum me gusta damme"
const __Followed = false
const __Followers = 150
class UserLayout extends React.Component{
state = {
styleComponent: "UserLayout",
@ -35,7 +28,6 @@ class UserLayout extends React.Component{
const { layoutData } = this.props
if (layoutData) {
this.setState({ layoutData: {...this.state.layoutData, ...layoutData} })
console.log(this.state.layoutData)
}
}
@ -89,6 +81,7 @@ class UserLayout extends React.Component{
@connect(({ app }) => ({ app }))
export default class UserIndexer extends React.Component {
state = {
ErrorCode: null,
loading: true,
response: null,
layoutData: null
@ -98,48 +91,32 @@ export default class UserIndexer extends React.Component {
componentDidMount(){
if (matchRegexp) {
user.get.profileData({username: matchRegexp[1], server_key: this.props.app.server_key, access_token: this.props.app.session_token}, (err, res) => {
if (err) {
return false
}
try {
const data = JSON.parse(res)["user_data"]
const frame = {
avatar: data.avatar,
can_follow: data.can_follow,
country_id: data.contry_id,
about: data.about,
cover: data.cover,
is_pro: data.is_pro,
lastseen: data.lastseen,
points: data.points,
registered:data.registered,
user_id: data.user_id,
verified: data.verified,
birthday: data.birthday,
details: data.details
this.props.dispatch({
type: "user/get",
req: {
fetch: "profileData",
username: matchRegexp[1]
},
callback: (err, res) => {
if(err){
this.setState({ ErrorCode: err })
return HandleError({ code: err, msg: res })
}
this.setState({ layoutData: frame, loading: false })
console.log(frame)
} catch (error) {
console.log(error)
return false
this.setState({ loading: false, layoutData: res })
}
})
}else{
this.setState({ loading: false })
this.setState({ ErrorCode: 140 })
}
}
render() {
if (this.state.ErrorCode) {
return <Invalid typeByCode={this.state.ErrorCode} messageProp1={location.pathname} />
}
if (this.state.loading) {
return <div style={{ display: "flex", width: "100%", justifyContent: "center", alignContent: "center" }}><antd.Card style={{ width: "100%" }} ><antd.Skeleton active /></antd.Card></div>
}
if (matchRegexp) {
return <UserLayout layoutData={this.state.layoutData} />
}
return <Invalid type="index" messageProp1={location.pathname} />
return <UserLayout layoutData={this.state.layoutData} />
}
}