update: Postcreator improvemt

This commit is contained in:
srgooglo 2020-09-12 23:04:02 +02:00
parent f3808fb6b3
commit 9622b7718c
11 changed files with 80 additions and 186 deletions

View File

@ -1,8 +1 @@
export const VerifiedBadge = () => (<svg xmlns="http://www.w3.org/2000/svg" fill="#55acee" width="15" height="15" viewBox="0 0 24 24"> <path d="M23 12l-2.44-2.78.34-3.68-3.61-.82-1.89-3.18L12 3 8.6 1.54 6.71 4.72l-3.61.81.34 3.68L1 12l2.44 2.78-.34 3.69 3.61.82 1.89 3.18L12 21l3.4 1.46 1.89-3.18 3.61-.82-.34-3.68L23 12m-13 5l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z"></path></svg>) export const VerifiedBadge = () => (<svg xmlns="http://www.w3.org/2000/svg" fill="#55acee" width="15" height="15" viewBox="0 0 24 24"> <path d="M23 12l-2.44-2.78.34-3.68-3.61-.82-1.89-3.18L12 3 8.6 1.54 6.71 4.72l-3.61.81.34 3.68L1 12l2.44 2.78-.34 3.69 3.61.82 1.89 3.18L12 21l3.4 1.46 1.89-3.18 3.61-.82-.34-3.68L23 12m-13 5l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z"></path></svg>)
export const Patreon = () => (<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 100 96">
<g fill="currentColor" fillRule="evenodd">
<path d="M64.1102,0.1004 C44.259,0.1004 28.1086,16.2486 28.1086,36.0986 C28.1086,55.8884 44.259,71.989 64.1102,71.989 C83.9,71.989 100,55.8884 100,36.0986 C100,16.2486 83.9,0.1004 64.1102,0.1004"/>
<polygon points=".012 95.988 17.59 95.988 17.59 .1 .012 .1"/>
</g>
</svg>
)

View File

@ -1,60 +0,0 @@
import React from 'react'
import * as antd from 'antd'
import styles from './index.less'
import classnames from 'classnames'
import Radium, { StyleRoot } from 'radium'
import { fadeInUp, bounceOutDown } from 'react-animations'
const animationStyles = {
fadeInUp: {
animation: 'x 0.5s',
animationName: Radium.keyframes(fadeInUp, 'fadeInUp'),
},
bounceOutDown: {
animation: 'x 1s',
animationName: Radium.keyframes(bounceOutDown, 'bounceOutDown'),
},
}
export const ControlController = {
set: (e) => {
if (!window.ControlComponent.state.active) {
window.ControlComponent.setState({ fadein: true })
}
window.ControlComponent.setState({ active: true, render: e })
},
close: () => {
window.ControlComponent.setState({ fadein: false })
setTimeout(() => window.ControlComponent.setState({ active: false, render: null }), 1000)
}
}
export default class Control extends React.PureComponent {
constructor(props) {
super(props);
this.state = {
active: false,
fadein: true,
};
window.ControlComponent = this;
}
render() {
const { render, active, fadein } = this.state
const isMobile = this.props.mobile? this.props.mobile : false
return active ? (
<StyleRoot>
<div
style={
fadein ? animationStyles.fadeInUp : animationStyles.bounceOutDown
}
>
<antd.Card bordered={false} className={classnames(styles.ControlCard, {[styles.mobile]: isMobile})} >
<React.Fragment>{render}</React.Fragment>
</antd.Card>
</div>
</StyleRoot>
) : null
}
}

View File

@ -1,31 +0,0 @@
@import '~theme/index.less';
.ControlCard {
overflow: hidden;
background-color: rgba(0, 0, 0, 0.1);
width: auto;
max-width: 60%;
padding: 0 5px;
margin: 0 0 0 50%;
height: auto;
position: absolute;
z-index: 10000;
bottom: 0;
text-align: center;
&.mobile{
top:0;
bottom: unset;
}
:global {
.ant-card-body {
padding: 5px;
}
.ant-btn {
background-color: rgba(0, 0, 0, 0.1);
margin: 3px;
}
}
}

View File

@ -37,7 +37,7 @@ export default class Sider_Default extends React.PureComponent {
width="175px" width="175px"
style={{ flex:'unset', maxWidth: 'unset', minWidth: '175px', width: '100%'}} style={{ flex:'unset', maxWidth: 'unset', minWidth: '175px', width: '100%'}}
> >
<div className={styles.left_sider_brandholder}> <div className={styles.left_sider_header}>
<img <img
onClick={() => handleClickMenu({key: ''})} onClick={() => handleClickMenu({key: ''})}
src={logo} src={logo}
@ -54,7 +54,7 @@ export default class Sider_Default extends React.PureComponent {
{this.renderMenus(this.state.menus, "top")} {this.renderMenus(this.state.menus, "top")}
</antd.Menu> </antd.Menu>
<div className={styles.something_thats_pulling_me_down}> <div className={styles.left_sider_footer}>
<antd.Menu <antd.Menu
selectable={false} selectable={false}
className={styles.left_sider_menuItems} className={styles.left_sider_menuItems}

View File

@ -69,7 +69,7 @@
} }
.left_sider_brandholder { .left_sider_header {
cursor: pointer; cursor: pointer;
img{ img{
@ -80,7 +80,7 @@
} }
} }
.something_thats_pulling_me_down { .left_sider_footer {
margin: 0 0 12px; margin: 0 0 12px;
:global { :global {
text-align: center; text-align: center;

View File

@ -1,6 +1,5 @@
import Sider from './Sider' import Sider from './Sider'
import Control from './ControlBar'
import Overlay from './Overlay' import Overlay from './Overlay'
import WindowNavbar from './WindowNavbar' import WindowNavbar from './WindowNavbar'
export { Sider, Control, Overlay, WindowNavbar } export { Sider, Overlay, WindowNavbar }

View File

@ -1,12 +1,44 @@
import React from 'react' import React from 'react'
import * as antd from 'antd' import * as antd from 'antd'
import * as core from 'core' import { imageToBase64 } from 'core'
import * as Icons from 'components/Icons' import * as Icons from 'components/Icons'
import styles from './index.less' import styles from './index.less'
import { connect } from 'umi' import { connect } from 'umi'
import { stricts } from 'config' import { stricts } from 'config'
import { settings, newSetting } from 'core/libs/settings' import { settings, newSetting } from 'core/libs/settings'
import $ from 'jquery'
const PrivacyList = [
{
id: 0,
type: "any",
icon: "Globe",
decoratorText: "Share with everyone"
},
{
id: 1,
type: "only_followers",
icon: "UserCheck",
decoratorText: "Share with people I follow"
},
{
id: 2,
type: "only_follow",
icon: "Users",
decoratorText: "Share with people follow me"
},
{
id: 3,
type: "private",
icon: "Shield",
decoratorText: "Dont share, only me"
},
{
id: 4,
type: "anon",
icon: "EyeOff",
decoratorText: "Anonymous"
}
]
@connect(({ app }) => ({ app })) @connect(({ app }) => ({ app }))
class PostCreator extends React.PureComponent { class PostCreator extends React.PureComponent {
@ -23,7 +55,7 @@ class PostCreator extends React.PureComponent {
rawText: '', rawText: '',
posting: false, posting: false,
postingResult: false, postingResult: false,
shareWith: 'any', privacity: 0,
uploader: false, uploader: false,
uploaderFile: null, uploaderFile: null,
@ -47,7 +79,7 @@ class PostCreator extends React.PureComponent {
if (info.file.status === 'done') { if (info.file.status === 'done') {
this.setState({ uploaderFileOrigin: info.file.originFileObj, uploader: false }) this.setState({ uploaderFileOrigin: info.file.originFileObj, uploader: false })
core.getBase64(info.file.originFileObj, fileURL => { imageToBase64(info.file.originFileObj, fileURL => {
this.setState({ uploaderFile: fileURL, loading: false }) this.setState({ uploaderFile: fileURL, loading: false })
}) })
} }
@ -102,7 +134,7 @@ class PostCreator extends React.PureComponent {
componentDidMount() { componentDidMount() {
// Validate for render // Validate for render
if (this.props.app.userData) { if (this.props.app.session_data) {
this.setState({renderValid: true}) this.setState({renderValid: true})
} }
@ -116,7 +148,7 @@ class PostCreator extends React.PureComponent {
// let a; // let a;
// a = item.getAsFile() // a = item.getAsFile()
// _this.setState({ uploaderFileOrigin: a }) // _this.setState({ uploaderFileOrigin: a })
// core.ReadFileAsB64(a, res => { // ReadFileAsB64(a, res => {
// _this.setState({ uploaderFile: res }) // _this.setState({ uploaderFile: res })
// }) // })
// } else { // } else {
@ -142,58 +174,29 @@ class PostCreator extends React.PureComponent {
return isUploadedFile || isTypedSomething return isUploadedFile || isTypedSomething
} }
renderShareOptions = () => {
return PrivacyList.map(e => {
if (!e) return null
return(
<antd.Menu.Item key={e.id}>
{e.icon? React.createElement(Icons[e.icon]) : null} {e.decoratorText? e.decoratorText : "Bruh"}
</antd.Menu.Item>
)
})
}
render() { render() {
const { userData } = this.props.app const userData = this.props.app.session_data
const { textLenght, uploaderFile } = this.state const { textLenght, uploaderFile } = this.state
const GetPostPrivacy = { const ShareOptionsMenu = () => {
bool: (e) => { return(
switch (e) { <antd.Menu onClick={e => this.setState({ privacity: e.key })}>
case 'any': {this.renderShareOptions()}
return '0' </antd.Menu>
case 'only_followers': )
return '1'
case 'only_follow':
return '2'
case 'private':
return '3'
default:
return '0'
}
},
decorator: (e) => {
switch (e) {
case 'any':
return <span><Icons.GlobalOutlined /> Share with everyone</span>
case 'only_follow':
return <span><Icons.TeamOutlined /> Share with people I follow</span>
case 'only_followers':
return <span><Icons.UsergroupAddOutlined /> Share with people follow me</span>
case 'private':
return <span><Icons.EyeInvisibleOutlined /> Dont share, only me</span>
default:
return <span>Unknown</span>
}
},
} }
const shareOptionsMenu = (
<antd.Menu onClick={key => this.setState({ shareWith: key })}>
<antd.Menu.Item key="any">
{GetPostPrivacy.decorator('any')}
</antd.Menu.Item>
<antd.Menu.Item key="only_follow">
{GetPostPrivacy.decorator('only_follow')}
</antd.Menu.Item>
<antd.Menu.Item key="only_followers">
{GetPostPrivacy.decorator('only_followers')}
</antd.Menu.Item>
<antd.Menu.Item key="private">
{GetPostPrivacy.decorator('private')}
</antd.Menu.Item>
</antd.Menu>
)
const PostCreator_Uploader = () => { const PostCreator_Uploader = () => {
return( return(
<div className={styles.uploader}> <div className={styles.uploader}>
@ -280,20 +283,18 @@ class PostCreator extends React.PureComponent {
> >
{this.state.uploader ? ( {this.state.uploader ? (
<Icons.Cancel /> <Icons.xCicle style={{ margin: 0 }} />
) : ( ) : (
<Icons.AddCircle /> <Icons.Plus style={{ margin: 0 }} />
)} )}
</antd.Button> </antd.Button>
<antd.Button type="ghost" onClick={() => null}> <antd.Button type="ghost" onClick={() => null}>
<Icons.Tune /> <Icons.Sliders style={{ margin: 0 }} />
</antd.Button> </antd.Button>
<antd.Dropdown overlay={shareOptionsMenu}> <antd.Dropdown overlay={ShareOptionsMenu}>
<a <a className={styles.shareWith} onClick={e => e.preventDefault()}>
className={styles.shareWith} {PrivacyList[this.state.privacity].icon? React.createElement(Icons[PrivacyList[this.state.privacity].icon]) : null}
onClick={e => e.preventDefault()} {PrivacyList[this.state.privacity].decoratorText? PrivacyList[this.state.privacity].decoratorText : "Bruh"}
>
{GetPostPrivacy.decorator(this.state.shareWith)}
</a> </a>
</antd.Dropdown> </antd.Dropdown>
</div> </div>
@ -301,19 +302,11 @@ class PostCreator extends React.PureComponent {
) )
} }
const PostCreator_Invalid = () => { if(!this.state.renderValid) return null
return(
<div>
<h3>This component cant be displayed!</h3>
<antd.Skeleton active />
</div>
)
}
return ( return (
<div className={styles.cardWrapper}> <div className={styles.cardWrapper}>
<antd.Card bordered="false"> <antd.Card bordered="false">
{ this.state.renderValid? <PostCreatorComponent /> : <PostCreator_Invalid /> } <PostCreatorComponent />
</antd.Card> </antd.Card>
</div> </div>
) )

View File

@ -8,7 +8,7 @@ import * as Feather from 'feather-reactjs'
import Invalid from './Invalid' import Invalid from './Invalid'
// App Layout Components // App Layout Components
import * as MyLayout from './Layout/index.js' import * as AppLayout from './Layout/index.js'
import PageTransition from './PageTransition' import PageTransition from './PageTransition'
// User Components // User Components
@ -19,13 +19,13 @@ import PostCreator from './PostCreator'
// Mix & Export all // Mix & Export all
export { export {
AppLayout,
Invalid, Invalid,
Icons, Icons,
Feather, Feather,
About, About,
MediaPlayer, MediaPlayer,
PageTransition, PageTransition,
MyLayout,
Loader, Loader,
PostCreator PostCreator
} }

View File

@ -4,7 +4,7 @@ import React from 'react'
import PropTypes from 'prop-types' import PropTypes from 'prop-types'
import {withRouter, connect} from 'umi' import {withRouter, connect} from 'umi'
import { import {
MyLayout, AppLayout,
} from 'components' } from 'components'
import { enquireScreen, unenquireScreen } from 'enquire-js' import { enquireScreen, unenquireScreen } from 'enquire-js'
import store from 'store' import store from 'store'
@ -17,7 +17,7 @@ import * as antd from 'antd'
import styles from './PrimaryLayout.less' import styles from './PrimaryLayout.less'
const { Content } = antd.Layout const { Content } = antd.Layout
const { Sider, Control, Overlay } = MyLayout const { Sider, Overlay } = AppLayout
const isActive = (key) => { return key? key.active : false } const isActive = (key) => { return key? key.active : false }
@withRouter @withRouter
@ -58,6 +58,8 @@ class PrimaryLayout extends React.Component {
const { collapsed, isMobile } = this.state const { collapsed, isMobile } = this.state
const { onCollapseChange } = this const { onCollapseChange } = this
const currentTheme = theme.get() const currentTheme = theme.get()
const app_theme = isActive(currentTheme["darkmode"])? "dark" : null
const breakpoint = { const breakpoint = {
xs: '480px', xs: '480px',
sm: '576px', sm: '576px',
@ -72,19 +74,18 @@ class PrimaryLayout extends React.Component {
isMobile, isMobile,
collapsed, collapsed,
onCollapseChange, onCollapseChange,
theme: isActive(currentTheme["darkmode"])? "dark" : null app_theme
} }
const OverlayProps = { const OverlayProps = {
breakpoint, breakpoint,
isMobile, isMobile,
theme: isActive(currentTheme["darkmode"])? "dark" : null app_theme
} }
window.DarkMode = isActive(currentTheme["darkmode"])? true : false window.DarkMode = isActive(currentTheme["darkmode"])? true : false
return ( return (
<React.Fragment > <React.Fragment >
<Control />
{isActive(currentTheme['backgroundImage']) {isActive(currentTheme['backgroundImage'])
?<div style={{ ?<div style={{
backgroundImage: `url(${currentTheme.backgroundImage.src})`, backgroundImage: `url(${currentTheme.backgroundImage.src})`,

View File

@ -1,6 +1,5 @@
import React, { Component, Fragment } from 'react' import React, { Component, Fragment } from 'react'
import { List, Switch, Button, notification, InputNumber } from 'antd' import { List, Switch, Button, notification, InputNumber } from 'antd'
import { control } from 'components/layout/ControlBar'
import verbosity from 'core/libs/verbosity' import verbosity from 'core/libs/verbosity'
import * as Icons from 'components/Icons' import * as Icons from 'components/Icons'