update: 0.3.18

This commit is contained in:
srgooglo 2020-04-20 12:21:40 +02:00
parent e2b3f0b69b
commit 3e403ff990
16 changed files with 230 additions and 157 deletions

View File

@ -3,7 +3,7 @@
"UUID": "C8mVSr-4nmPp2-pr5Vrz-CU4kg4", "UUID": "C8mVSr-4nmPp2-pr5Vrz-CU4kg4",
"title": "Comty™", "title": "Comty™",
"DevBuild": true, "DevBuild": true,
"version": "0.3.13", "version": "0.3.18",
"stage": "dev-pre", "stage": "dev-pre",
"description": "", "description": "",
"author": "RageStudio", "author": "RageStudio",

View File

@ -3,6 +3,22 @@ import { comty_rsa } from '../rs_cloud/pre'
export const comty_user = { export const comty_user = {
setData: () => {}, setData: () => {},
getFollowers: (callback, payload) => {
if (!payload)return false
const { user_id } = payload
let formdata = new FormData()
formdata.append('user_id', user_id)
formdata.append('fetch', 'followers')
API_Call(
(err,res) => {
return callback(err,res)
},
comty_rsa.endpoint('get-user-data'),
formdata
)
},
follow: (callback, payload) => { follow: (callback, payload) => {
if (!payload) { if (!payload) {
return false return false

View File

@ -26,11 +26,12 @@
opacity: 0; opacity: 0;
top: unset; top: unset;
overflow: hidden;
transform: translate(0, 86%);
border-radius: 12px 12px 0 0; border-radius: 12px 12px 0 0;
flex-direction: column; flex-direction: column;
overflow-y: scroll;
overflow-y: overlay;
overflow-x: hidden; overflow-x: hidden;
touch-action: none; touch-action: none;
@ -56,7 +57,6 @@
&.active { &.active {
opacity: 1; opacity: 1;
height: 100%; height: 100%;
transform: translate(0, 86%);
} }
&.full_open { &.full_open {

View File

@ -23,9 +23,6 @@ const isOpen = (props: __sec_props) => {
} }
return false return false
} }
const isMobile = (props: __sec_props) => {
props.isMobile? true : false
}
const renderExit = (props: __sec_props) => { const renderExit = (props: __sec_props) => {
const {functs} = props const {functs} = props
@ -38,9 +35,9 @@ const renderExit = (props: __sec_props) => {
} }
const __sec = (props: __sec_props) => { const __sec = (props: __sec_props) => {
const { render, getRef, y, type } = props const { render, getRef, y, type, isMobile } = props
const t_full = type === 'full_open'? true : false const t_full = type == 'full_open'? true : false
const t_def = type === 'active'? true: false const t_def = type == 'active'? true: false
return ( return (
<div <div
id="secondary_layout__sec" id="secondary_layout__sec"
@ -50,7 +47,6 @@ const __sec = (props: __sec_props) => {
[styles.full_open]: t_full, [styles.full_open]: t_full,
})} })}
style={{ style={{
position: 'relative',
top: y, top: y,
}} }}
ref={getRef} ref={getRef}

View File

@ -13,6 +13,7 @@ import {
__priSearch, __priSearch,
__trendings, __trendings,
__pro, __pro,
__footer
} from './renders.js' } from './renders.js'
export const SwapMode = { export const SwapMode = {
@ -185,9 +186,17 @@ export default class Secondary extends React.PureComponent {
componentDidMount() { componentDidMount() {
this.handle_genData() this.handle_genData()
if(this.props.isMobile){
window.addEventListener('popstate', function(event) {
SwapMode.close()
}, false);
}
} }
componentWillUnmount() { componentWillUnmount() {
if(this.props.isMobile){
document.removeEventListener('popstate', null)
}
document.removeEventListener('keydown', this.handle_Exit, false) document.removeEventListener('keydown', this.handle_Exit, false)
} }
@ -203,10 +212,15 @@ export default class Secondary extends React.PureComponent {
try { try {
const trending_data = JSON.parse(this.state.gen_data)['trending_hashtag'] const trending_data = JSON.parse(this.state.gen_data)['trending_hashtag']
return ( return (
<>
<div className={styles.secondary_main}> <div className={styles.secondary_main}>
{ycore.IsThisUser.pro() ? <__pro /> : <__pro />} {ycore.IsThisUser.pro() ? <__pro /> : <__pro />}
<__trendings data={trending_data} /> <__trendings data={trending_data} />
{__footer()}
</div> </div>
</>
) )
} catch (error) { } catch (error) {
return null return null
@ -271,6 +285,7 @@ export default class Secondary extends React.PureComponent {
render() { render() {
const { userData, isMobile } = this.props const { userData, isMobile } = this.props
const __sec_functs = (this.Swapper) const __sec_functs = (this.Swapper)
if (!this.state.loading) if (!this.state.loading)
return ( return (
<> <>
@ -307,7 +322,7 @@ export default class Secondary extends React.PureComponent {
{this.renderTarget('__pri')} {this.renderTarget('__pri')}
</div> </div>
</div> </div>
<__sec render={this.renderTarget('__sec')} isMobile={this.state.isMobile} functs={__sec_functs} type={this.state.__sec_full? "full_open" : this.state.__sec_active? "active" : null} /> <__sec render={this.renderTarget('__sec')} isMobile={isMobile} functs={__sec_functs} type={this.state.__sec_full? "full_open" : this.state.__sec_active? "active" : null} />

View File

@ -131,8 +131,6 @@
border-radius: 12px 12px 0 0; border-radius: 12px 12px 0 0;
flex-direction: column; flex-direction: column;
overflow-y: scroll;
overflow-x: hidden;
:global{ :global{
.comments_body { .comments_body {
@ -151,7 +149,7 @@
&.half { &.half {
opacity: 1; opacity: 1;
height: 75vh; height: 95vh;
} }
} }

View File

@ -25,25 +25,10 @@ export class __priPost extends React.PureComponent {
renderContent(payload) { renderContent(payload) {
const { id, postText, postFile_full, post_time, publisher } = payload const { id, postText, postFile_full, post_time, publisher } = payload
const {isMobile}= this.props const {isMobile}= this.props
if (!postFile_full) {
return (
<div className={styles.contentWrapper}>
{postText ? (
<div className={styles.postContent}>
<h3 dangerouslySetInnerHTML={{ __html: postText }} />{' '}
</div>
) : null}
</div>
)
}
return ( return (
<div className={styles.contentWrapper}> <div className={styles.contentWrapper}>
{postFile_full ? <MediaPlayer isMobile={isMobile} entire={true} file={postFile_full} /> : null} {postFile_full ? <MediaPlayer isMobile={isMobile} entire={true} file={postFile_full} /> : null}
{postText ? (
<div className={styles.postContent}>
<h3 dangerouslySetInnerHTML={{ __html: postText }} />{' '}
</div>
) : null}
</div> </div>
) )
} }
@ -334,3 +319,11 @@ export class __pro extends React.PureComponent {
) )
} }
} }
const _info = ycore.AppInfo
export const __footer = () =>{
return <div className={styles.__footer}>
v{ycore.AppInfo.version} | About | Legal | Help
</div>
}

View File

@ -93,7 +93,7 @@
position: absolute; position: absolute;
vertical-align: bottom; vertical-align: bottom;
border-radius: 7px; border-radius: 7px;
bottom: 0; top: 0;
max-width: 50vw; max-width: 50vw;
background-color: #2d2d2d4b; background-color: #2d2d2d4b;
@ -145,13 +145,14 @@
.comments_cards_wrapper { .comments_cards_wrapper {
z-index: 50; z-index: 50;
overflow: scroll; overflow-y: scroll!important;
height: 84%; height: 84%;
:global { :global {
overflow: scroll; overflow-y: scroll!important;
} }
.comment_card { .comment_card {
overflow-y: scroll!important;
position: relative; position: relative;
width: 100%; width: 100%;
background-color: #ffffff; background-color: #ffffff;
@ -354,3 +355,13 @@
} }
} }
} }
.__footer{
position: absolute;
bottom: 0;
font-size: 11px;
margin-bottom: 10px;
color: #f3f3f3;
letter-spacing: 2px;
width: 100%;
}

View File

@ -19,8 +19,8 @@
&.entire { &.entire {
max-width: 52vw; max-width: 52%;
max-height: 80vh; max-height: 80%;
position: fixed; position: fixed;
top: 50%; top: 50%;
left: 50%; left: 50%;
@ -49,19 +49,23 @@
} }
&.mobile { &.mobile {
max-width: 52vw; max-width: unset;
max-height: 80vh; max-height: unset;
position: fixed; top: unset;
top: 50%; left: unset;
left: 50%; transform: unset;
transform: translate(-50%, -50%);
width: 100%;
position: relative;
height: 60vh;
display: flex;
img { img {
object-fit: contain; object-fit: contain;
height: 100%; height: auto;
width: 100%; width: 100%;
max-width: 52vw; max-width: unset;
max-height: 80vh; max-height: unset;
} }
audio { audio {
@ -71,10 +75,10 @@
video { video {
object-fit: contain; object-fit: contain;
height: 100%; height: auto;
width: 100%; width: 100%;
max-width: 52vw; max-width: unset;
max-height: 80vh; max-height: unset;
} }
} }
} }

View File

@ -10,7 +10,7 @@ import Follow_btn from './components/Follow_btn.js'
import { BadgesType } from 'globals/badges_list' import { BadgesType } from 'globals/badges_list'
import classnames from 'classnames' import classnames from 'classnames'
const isMobile = localStorage.getItem('mobile_src') import * as reducers from './reducers.js'
class UserProfile extends React.PureComponent { class UserProfile extends React.PureComponent {
constructor(props) { constructor(props) {
@ -93,6 +93,15 @@ class UserProfile extends React.PureComponent {
Followed: ycore.booleanFix(rp['0'].is_following), Followed: ycore.booleanFix(rp['0'].is_following),
}) })
reducers.get.followers((res)=>{
try {
this.setState({followers_data: res, followers: res.length})
} catch (error) {
return false
}
},rp['0'].user_id)
ycore.comty_user.__tags( ycore.comty_user.__tags(
(err, res) => { (err, res) => {
if (err) return false if (err) return false
@ -125,104 +134,100 @@ class UserProfile extends React.PureComponent {
const moreMenu = ( const moreMenu = (
<antd.Menu> <antd.Menu>
<antd.Menu.Item>1st antd.Menu item</antd.Menu.Item> <antd.Menu.Item>__</antd.Menu.Item>
<antd.Menu.Item>2nd antd.Menu item</antd.Menu.Item> <antd.Menu.Item>__set2</antd.Menu.Item>
</antd.Menu> </antd.Menu>
); );
const { loading, UUID, invalid, RenderValue } = this.state const { loading, UUID, invalid, RenderValue, followers } = this.state
const { isMobile } = this.props
if(loading) return <antd.Skeleton active />
if(invalid) return null
return ( return (
<div> <div>
{loading ? ( <div
<antd.Skeleton active /> className={classnames(styles.userWrapper, {
) : ( [styles.mobile]: isMobile,
<div> })}
{invalid ? null : ( >
<div
className={classnames(styles.userWrapper, {
[styles.mobile]: isMobile,
})}
>
<div className={styles.UserCover}>
<img src={RenderValue.cover} />
</div>
<div> <div className={styles.UserCover}>
<img src={RenderValue.cover} />
</div>
<div className={styles.pageHeaderContent}>
<div className={styles.avatar}>
<antd.Avatar shape="square" src={RenderValue.avatar} />
</div>
<div className={styles.content}>
<div className={styles.TagWrappers}>
{this.state.UserTags.length > 0 ? (
<antd.List
dataSource={this.state.UserTags}
renderItem={item => (
<antd.Tooltip title={item.tip}>
<antd.Tag id={item.id} color={item.color}>
{item.title} {item.icon}
</antd.Tag>
</antd.Tooltip>
)}
/>
) : null}
</div>
{ycore.IsThisUser.same(RenderValue.id) ? null : (
<div
className={styles.follow_wrapper}
onClick={() => this.handleFollowUser()}
>
<Follow_btn
followed={this.state.Followed ? true : false}
/>
</div>
)}
<div className={styles.contentTitle}>
<h1 style={{ marginBottom: '0px' }}>
{RenderValue.username}
<antd.Tooltip title="User Verified">
{ycore.booleanFix(RenderValue.verified) ? (
<Icon
style={{
color: 'blue',
verticalAlign: 'top',
}}
component={CustomIcons.VerifiedBadge}
/>
) : null}
</antd.Tooltip>
{ ycore.IsThisUser.same(UUID)? <div className={styles.pageHeaderContent}>
<antd.Dropdown overlay={moreMenu}> <div className={classnames(styles.avatar, {[styles.mobile]: isMobile})}>
<Icons.MoreOutlined className={styles.user_more_menu} /> <antd.Avatar shape="square" src={RenderValue.avatar} />
</antd.Dropdown> </div>
: null } <div className={styles.content}>
<div className={styles.TagWrappers}>
</h1> {this.state.UserTags.length > 0 ? (
<span <antd.List
style={{ dataSource={this.state.UserTags}
fontSize: '14px', renderItem={item => (
fontWeight: '100', <antd.Tooltip title={item.tip}>
lineHeight: '0', <antd.Tag id={item.id} color={item.color}>
marginBottom: '5px', {item.title} {item.icon}
}} </antd.Tag>
dangerouslySetInnerHTML={{ </antd.Tooltip>
__html: RenderValue.about, )}
}} />
/> ) : null}
</div> </div>
</div> {ycore.IsThisUser.same(RenderValue.id) ? null : (
</div> <div
</div> className={styles.follow_wrapper}
</div> onClick={() => this.handleFollowUser()}
)} >
{ycore.IsThisUser.same(UUID) ? ( <Follow_btn
<PostCreator userData={ycore.userData()} /> followed={this.state.Followed ? true : false}
) : null} />
<MainFeed get="user" uid={UUID} />
</div> </div>
)} )}
<div className={styles.contentTitle}>
<h1 style={{ marginBottom: '0px' }}>
<antd.Tooltip title={`${this.state.followers} Followers`}>
{RenderValue.username}
</antd.Tooltip>
<antd.Tooltip title="User Verified">
{ycore.booleanFix(RenderValue.verified) ? (
<Icon
style={{
color: 'blue',
verticalAlign: 'top',
}}
component={CustomIcons.VerifiedBadge}
/>
) : null}
</antd.Tooltip>
{ ycore.IsThisUser.same(UUID)?
<antd.Dropdown overlay={moreMenu}>
<Icons.MoreOutlined className={styles.user_more_menu} />
</antd.Dropdown>
: null }
</h1>
<span
style={{
fontSize: '14px',
fontWeight: '100',
lineHeight: '0',
marginBottom: '5px',
}}
dangerouslySetInnerHTML={{
__html: RenderValue.about,
}}
/>
</div>
</div>
</div>
</div>
{ycore.IsThisUser.same(UUID) ? (<PostCreator userData={ycore.userData()} />) : null}
<MainFeed get="user" uid={UUID} />
</div> </div>
) )
} }

View File

@ -0,0 +1,18 @@
import * as ycore from 'ycore'
// REDUCERS, USERPROFILE
export const get = {
followers: (callback,id) => {
const payload = { user_id: id }
ycore.comty_user.getFollowers((err,res) => {
try {
const a = JSON.parse(res)['followers']
callback(a)
return false
} catch (error) {
callback(false)
return false
}
}, payload)
},
}

View File

@ -29,26 +29,20 @@
.userWrapper { .userWrapper {
padding: 0 68px 15px 68px; padding: 0 68px 15px 68px;
margin: auto; margin: auto;
background-color: #ffffff;
border-radius: 0 0 20px 20px;
padding: 20px 0 3px 0;
padding-top: 0;
overflow: initial !important;
&.mobile{ &.mobile{
max-width: 510px; max-width: 510px;
min-width: 265px; min-width: 265px;
width: auto; width: auto;
padding: 0 15px 0 15px;
}
:global {
.ant-page-header-content {
padding-top: 0;
overflow: initial !important;
}
.ant-page-header {
padding: 20px 0 3px 0;
}
.ant-pro-page-header-wrap-page-header-warp {
border-radius: 0 0 20px 20px;
}
} }
} }
.TagWrappers { .TagWrappers {
@ -58,6 +52,19 @@
margin: 0 0 7px 0 !important; margin: 0 0 7px 0 !important;
} }
.followers_count{
float: right;
font-size: 14px;
width: auto;
max-width: 200px;
padding: 0 20px;
background-color: #f3f3f3;
text-align: center;
border-radius: 8px;
transform: translate(90px, -64px);
}
.UserCover { .UserCover {
border-radius: 15px 15px 0 0; border-radius: 15px 15px 0 0;
position: relative; position: relative;
@ -90,6 +97,11 @@
height: 100%; height: 100%;
} }
&.mobile{
transform: translate(0,-90px);
margin: auto;
}
:global { :global {
.ant-avatar { .ant-avatar {
box-shadow: 13px 13px 17px 4px rgba(69, 69, 69, 0.151); box-shadow: 13px 13px 17px 4px rgba(69, 69, 69, 0.151);
@ -105,6 +117,7 @@
.pageHeaderContent { .pageHeaderContent {
vertical-align: top; vertical-align: top;
display: flex; display: flex;
padding: 20px;
.content { .content {
font-family: "Poppins", sans-serif; font-family: "Poppins", sans-serif;

View File

@ -91,7 +91,7 @@ class PrimaryLayout extends React.Component {
return ( return (
<React.Fragment> <React.Fragment>
{/* {isMobile ? <MobileWarning /> : null} */} {/* {isMobile ? <MobileWarning /> : null} */}
<div className={styles.__ControlBar}> <div className={classnames(styles.__ControlBar, {[styles.mobile]: isMobile})}>
<Control mobile={isMobile} /> <Control mobile={isMobile} />
</div> </div>
<antd.Layout id="primaryLayout" className={classnames(styles.primary_layout, {[styles.mobile]: isMobile})}> <antd.Layout id="primaryLayout" className={classnames(styles.primary_layout, {[styles.mobile]: isMobile})}>

View File

@ -5,6 +5,10 @@
position: absolute; position: absolute;
bottom: 0; bottom: 0;
z-index: 30; z-index: 30;
&.mobile{
top: 0;
bottom: unset;
}
} }
.primary_layout { .primary_layout {

View File

@ -15,7 +15,7 @@ class PageIndexer extends PureComponent {
ycore.yconsole.log(`User matched! ${location.pathname}`) ycore.yconsole.log(`User matched! ${location.pathname}`)
return ( return (
<div> <div>
<UserProfile regx={matchUser} /> <UserProfile {...this.props} regx={matchUser} />
</div> </div>
) )
} }

View File

@ -138,7 +138,7 @@ body {
// .secondary_* // .secondary_*
@__secondary_colider_width: 31.2vw; @__secondary_colider_width: 31.2vw;
@secondary_wrapper_hidden_width: 22vw; @secondary_wrapper_hidden_width: 22vw;
@secondary_wrapper_showFull_width: 94.2vw; @secondary_wrapper_showFull_width: 94.2%;
@secondary_wrapper_showHalf_width: 35vw; @secondary_wrapper_showHalf_width: 35vw;
@secondary_container_bg_background: #201F23; @secondary_container_bg_background: #201F23;
@secondary_container_1_color: #fff; @secondary_container_1_color: #fff;
@ -161,7 +161,7 @@ body {
// .post_card* // .post_card*
@post_card_general_border-rd: 7px; @post_card_general_border-rd: 7px;
@post_card_wrapper_shadow: 0 1px 3px rgba(0, 0, 0, 0.15); @post_card_wrapper_shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
@post_card_wrapper_actions_backgroud: rgba(235, 235, 235, 0.815); @post_card_wrapper_actions_backgroud: rgb(235, 235, 235);
@post_card_wrapper_actions_icon_backgroud: #fff; @post_card_wrapper_actions_icon_backgroud: #fff;
@post_card_wrapper_tags_color_default: rgb(249, 179, 64); @post_card_wrapper_tags_color_default: rgb(249, 179, 64);