This commit is contained in:
srgooglo 2020-10-08 18:43:34 +02:00
parent 4ce2564a50
commit d27d7e70a4
8 changed files with 269 additions and 27 deletions

View File

@ -29,6 +29,29 @@ export const app_info = {
layout: platform.layout
};
export function queryIndexer(array, callback, params) {
if(!array) return false
if (Array.isArray(array)) {
let opt = {
regex: /:id/gi
}
if (params) {
opt = { ...opt, ...params }
}
array.forEach((e) =>{
if (e.match != null && e.to != null) {
const pathMatch = pathMatchRegexp(e.match, window.location.pathname)
if (pathMatch != null) {
return callback(e.to.replace(opt.regex, pathMatch[1]))
}
}
})
}
}
export function createScreenshotFromElement(element){
if (!element) return false
html2canvas(element, {
@ -341,7 +364,6 @@ export const time = {
};
export function pathMatchRegexp(regexp, pathname) {
console.log('Regex => ', pathname)
return pathToRegexp(regexp).exec(pathname)
}

View File

@ -42,7 +42,6 @@ export function verbosity(data, params, stackTraceParams){
if (typeof(stackTraceParams) !== "undefined" || stackTraceParams != null) {
objectToArray(stackTraceParams).forEach((e) => {
if(typeof(e.value) !== "undefined"){
console.log(e.key,e.value)
optStackTrace[e.key] = e.value
}
})
@ -83,6 +82,7 @@ export function verbosity(data, params, stackTraceParams){
if (Array.isArray(initData)) {
return console[opt.type](...data)
}
return console[opt.type](data)
}

View File

@ -5,6 +5,7 @@ import { user, session } from 'core/helpers'
import { router, verbosity, appInterface } from 'core/libs'
import settings from 'core/libs/settings'
import { uri_resolver } from 'api/lib'
import { queryIndexer } from 'core'
import jwt from 'jsonwebtoken'
import cookie from 'cookie_js'
@ -93,6 +94,29 @@ export default {
const sessionDataframe = yield select(state => state.app.session_data)
window.PluginGlobals = []
window.Internal = []
queryIndexer([
{
match: '/s;:id',
to: `/settings?key=:id`,
},
{
match: '/h;:id',
to: `/hashtag?key=:id`,
},
{
match: '/p;:id',
to: `/post?key=:id`,
},
{
match: '/@:id',
to: `/@/:id`,
}
], (callback) => {
window.location = callback
})
if (!service) {
@ -118,6 +142,10 @@ export default {
const { user_id, access_token } = payload.authFrame
yield put({ type: 'handleLogin', payload: { user_id, access_token, user_data: payload.dataFrame } })
},
*initializeInternal({payload}, {select, put}){
if(!payload) return false
yield put({ type: "handleInternal", payload })
},
*initializeSocket({payload}, {select, put}){
if(!payload) return false
const { type, address } = payload
@ -257,6 +285,14 @@ export default {
...payload,
};
},
handleInternal(state, { payload }){
verbosity(payload)
if (Array.isArray(payload)) {
payload.forEach((e) => {
window.Internal[e.id] = e.payload
})
}
},
handleUpdateResolvers(state, { payload }) {
state.resolvers = payload
},

64
src/pages/@/[user].js Normal file
View File

@ -0,0 +1,64 @@
import React from 'react'
import { pathMatchRegexp } from 'core'
import { router } from 'core/libs/router'
import { Invalid } from 'components'
import styles from './index.less'
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"
@connect(({ app }) => ({ app }))
class UserLayout extends React.Component{
state = {
styleComponent: "UserLayout",
userString: matchRegexp[1],
}
componentDidMount(){
}
render(){
const { styleComponent } = this.state
const toStyles = e => styles[`${styleComponent}_${e}`]
return(
<div className={toStyles("wrapper")} >
<div className={toStyles("cover")}>
<img src={__Cover} />
</div>
<div className={toStyles("header")}>
<div className={toStyles("avatar")}>
<antd.Avatar shape="square" src={__Avatar} />
</div>
<div className={toStyles("title")}>
<h1>{this.state.userString}</h1>
</div>
</div>
<div className={toStyles("content")}>
</div>
</div>
)
}
}
export default class UserIndexer extends React.Component {
render() {
const { location } = this.props
if (matchRegexp) {
return <UserLayout />
}
return <Invalid type="index" messageProp1={location.pathname} />
}
}

90
src/pages/@/index.less Normal file
View File

@ -0,0 +1,90 @@
.UserLayout_wrapper{
display: flex;
height: 100%;
flex-direction: column;
align-content: center;
padding: 0 68px 15px 68px;
margin: auto;
border-radius: 0 0 20px 20px;
padding: 20px 0 3px 0;
padding-top: 0;
overflow: initial !important;
}
.UserLayout_header{
font-family: "Poppins", sans-serif;
color: #242424;
vertical-align: top;
display: flex;
padding: 20px;
height: 24vh;
background-color: #ffffff;
border-radius: 8px;
}
.UserLayout_cover{
display: flex;
position: relative;
width: 100%;
img {
height: min-content;
width: min-content;
}
}
.follow_wrapper {
margin: 0 7px 0 7px;
position: relative;
float: right;
}
.UserLayout_title{
padding: 54px;
padding: 0 10px 10px 0;
color: #242424;
font-weight: 500;
font-size: 20px;
line-height: 28px;
}
.avatar {
transform: translate(-25px, -45px);
max-height: 200px;
max-width: 120px;
&>span {
position: relative;
z-index: 10;
width: 100%;
height: 100%;
}
&.mobile{
transform: translate(0,-90px);
margin: auto;
}
:global {
.ant-avatar {
box-shadow: 13px 13px 17px 4px rgba(69, 69, 69, 0.151);
border-radius: 7px;
img {
width: 120px;
}
}
}
}
.UserLayout_content{
}

View File

@ -1,29 +1,9 @@
import React from 'react'
import { pathMatchRegexp } from 'core'
import Error404 from './404.js'
// <UserProfile {...this.props} regx={matchUser} />
import { Invalid } from 'components'
class PageIndexer extends React.Component {
export default class PageIndexer extends React.Component {
render() {
const { location } = this.props
const matchUser = pathMatchRegexp('/@:id', location.pathname)
const matchSetting = pathMatchRegexp('/~:id', location.pathname)
console.log(matchSetting)
if (matchUser) {
return (
<div>
{matchUser}
</div>
)
}
if (matchSetting) {
return(
<div>
<Invalid type="skeleton" />
</div>
)
}
// By default return Error 404
return (
@ -32,6 +12,4 @@ class PageIndexer extends React.Component {
</div>
)
}
}
export default PageIndexer
}

View File

@ -0,0 +1,44 @@
import React from 'react'
import * as antd from 'antd'
import { connect } from 'umi'
@connect(({ app }) => ({ app }))
export default class InternalDebug extends React.Component{
state = {
internals: window.Internal
}
handleDispatch(){
this.props.dispatch({
type: "app/initializeInternal",
payload: [
{
id: "test",
payload: () => {
console.log("Hey i am alivee")
}
}
]
})
}
handleCallTest(){
if (window.Internal.test != null) {
window.Internal.test()
}
}
render(){
return(
<div>
<antd.Card>
{JSON.stringify(this.state.internals) ?? "No internals to show"}
</antd.Card>
<div style={{ marginTop: "12px" }}>
<antd.Button onClick={() => this.handleDispatch()} > init example </antd.Button>
<antd.Button onClick={() => this.handleCallTest()} > Call test </antd.Button>
</div>
</div>
)
}
}

View File

@ -8,6 +8,8 @@ import CoreDebug from './debuggers/core'
import ThemeDebug from './debuggers/theme'
import SocketDebug from './debuggers/socket'
import VerbosityDebug from './debuggers/verbosity'
import InternalDebug from './debuggers/internals'
const Debuggers = {
api: <ApiDebug />,
@ -15,7 +17,8 @@ const Debuggers = {
core: <CoreDebug />,
theme: <ThemeDebug />,
socket: <SocketDebug />,
verbosity: <VerbosityDebug />
verbosity: <VerbosityDebug />,
internals: <InternalDebug />
}
const menuList = [
@ -49,6 +52,11 @@ const menuList = [
key: "verbosity",
title: "Verbosity",
icon: <Icons.Edit3 />
},
{
key: "internals",
title: "Internals",
icon: <Icons.Box />
}
]