From 8c1e6a1ca1f20c8841d5fbcb7c6cbe415f07b5df Mon Sep 17 00:00:00 2001 From: mydearxym Date: Fri, 6 May 2022 19:59:29 +0800 Subject: [PATCH 01/11] refactor(share): move shareBtn into container --- public/bg/CircleSapres.jpeg | Bin 108357 -> 0 bytes public/bg/Squares.png | Bin 0 -> 36603 bytes public/bg/waves.png | Bin 0 -> 15555 bytes .../ArticleDigest/DesktopView/WorksLayout.tsx | 4 +- src/containers/layout/GlobalLayout/Addon.tsx | 3 +- .../layout/GlobalLayout/CustomBg.tsx | 10 ++- .../tool/ArticleSticker/LeftSticker/index.tsx | 9 +- .../tool/Drawer/AddOn/ShareButton.tsx | 22 ----- src/containers/tool/Drawer/AddOn/index.tsx | 4 +- .../tool/Drawer/Content/DesktopView.tsx | 2 +- .../tool/Drawer/styles/add_on/index.ts | 1 - .../tool/Share/{ => Panel}/IFrameBoard.tsx | 2 +- .../tool/Share/{ => Panel}/InfoPanel.tsx | 7 +- .../tool/Share/{ => Panel}/LinkBoard.tsx | 4 +- .../tool/Share/{ => Panel}/Platforms.tsx | 6 +- .../tool/Share/{ => Panel}/WechatBoard.tsx | 4 +- src/containers/tool/Share/Panel/index.tsx | 69 ++++++++++++++++ src/containers/tool/Share/constant.ts | 7 ++ src/containers/tool/Share/index.tsx | 77 ++++++++++++------ src/containers/tool/Share/logic.ts | 38 +++++---- src/containers/tool/Share/spec.d.ts | 14 ++++ src/containers/tool/Share/store.ts | 14 +--- .../Share/styles/{ => panel}/iframe_board.ts | 0 .../tool/Share/styles/panel/index.ts | 18 ++++ .../Share/styles/{ => panel}/info_panel.ts | 2 +- .../Share/styles/{ => panel}/link_board.ts | 0 .../tool/Share/styles/{ => panel}/platform.ts | 0 .../Share/styles/{ => panel}/wechat_board.ts | 0 src/spec/utils.ts | 1 + src/widgets/Buttons/MenuButton/Menu.tsx | 17 ++-- src/widgets/Buttons/MenuButton/index.tsx | 2 +- .../Buttons/styles/menu_button/menu.ts | 15 +++- utils/constant/event.ts | 2 - utils/helper.ts | 6 -- utils/index.ts | 1 - 35 files changed, 240 insertions(+), 121 deletions(-) delete mode 100644 public/bg/CircleSapres.jpeg create mode 100644 public/bg/Squares.png create mode 100644 public/bg/waves.png delete mode 100644 src/containers/tool/Drawer/AddOn/ShareButton.tsx rename src/containers/tool/Share/{ => Panel}/IFrameBoard.tsx (94%) rename src/containers/tool/Share/{ => Panel}/InfoPanel.tsx (83%) rename src/containers/tool/Share/{ => Panel}/LinkBoard.tsx (94%) rename src/containers/tool/Share/{ => Panel}/Platforms.tsx (94%) rename src/containers/tool/Share/{ => Panel}/WechatBoard.tsx (93%) create mode 100644 src/containers/tool/Share/Panel/index.tsx create mode 100644 src/containers/tool/Share/spec.d.ts rename src/containers/tool/Share/styles/{ => panel}/iframe_board.ts (100%) create mode 100644 src/containers/tool/Share/styles/panel/index.ts rename src/containers/tool/Share/styles/{ => panel}/info_panel.ts (91%) rename src/containers/tool/Share/styles/{ => panel}/link_board.ts (100%) rename src/containers/tool/Share/styles/{ => panel}/platform.ts (100%) rename src/containers/tool/Share/styles/{ => panel}/wechat_board.ts (100%) diff --git a/public/bg/CircleSapres.jpeg b/public/bg/CircleSapres.jpeg deleted file mode 100644 index 49a89429ed3e63cf43ccd5ab5e073f695f8a4d3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108357 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%0AY}y0B#P`C>w+^OP-$ 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⪼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 L+7X{*J&XU@gIad5 diff --git a/public/bg/Squares.png b/public/bg/Squares.png new file mode 100644 index 0000000000000000000000000000000000000000..ec3937de67226640290ebeb4405a78f00a99d18c GIT binary patch literal 36603 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 literal 0 HcmV?d00001 diff --git a/public/bg/waves.png b/public/bg/waves.png new file mode 100644 index 0000000000000000000000000000000000000000..218fdd1b66b0cb292bf892df7074d80bd59259af GIT binary patch literal 15555 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 B`Yiwe literal 0 HcmV?d00001 diff --git a/src/containers/digest/ArticleDigest/DesktopView/WorksLayout.tsx b/src/containers/digest/ArticleDigest/DesktopView/WorksLayout.tsx index 96bf37b35..c476ed198 100644 --- a/src/containers/digest/ArticleDigest/DesktopView/WorksLayout.tsx +++ b/src/containers/digest/ArticleDigest/DesktopView/WorksLayout.tsx @@ -13,7 +13,7 @@ import { WORKS_TAB, SVG, } from '@/constant' -import { shareTo, addCollection } from '@/utils/helper' +import { addCollection } from '@/utils/helper' import { buildLog } from '@/utils/logger' import ArticleBaseStats from '@/widgets/ArticleBaseStats' @@ -75,7 +75,7 @@ const WorksLayout: FC = ({ metric = METRIC.ARTICLE, article, tab }) => { size={18} onClick={() => addCollection()} /> - + diff --git a/src/containers/layout/GlobalLayout/Addon.tsx b/src/containers/layout/GlobalLayout/Addon.tsx index 8ae16375d..e07abb5c9 100644 --- a/src/containers/layout/GlobalLayout/Addon.tsx +++ b/src/containers/layout/GlobalLayout/Addon.tsx @@ -4,7 +4,7 @@ import { isMobile } from 'react-device-detect' import useShortcut from '@/hooks/useShortcut' import { openDoraemon, logBuddha } from './logic' -import { AbuseReport, Doraemon, Share, Drawer, ErrorBox } from './dynamic' +import { AbuseReport, Doraemon, Drawer, ErrorBox } from './dynamic' const Addon: FC = () => { useEffect(() => logBuddha(), []) @@ -17,7 +17,6 @@ const Addon: FC = () => { {/* @ts-ignore */} {/* @ts-ignore */} - {!isMobile && } {/* @ts-ignore */} {!isMobile && } {/* @ts-ignore */} diff --git a/src/containers/layout/GlobalLayout/CustomBg.tsx b/src/containers/layout/GlobalLayout/CustomBg.tsx index 8ff78069d..bbd7402bd 100644 --- a/src/containers/layout/GlobalLayout/CustomBg.tsx +++ b/src/containers/layout/GlobalLayout/CustomBg.tsx @@ -75,7 +75,7 @@ const ComstomBg: FC = () => { bgColor: '#050139', // backgroundBg or fallback }, k: { - bgImage: '/bg/CircleSapres.jpeg', + bgImage: '/bg/Squares.png', }, m: { bgImage: '/bg/Antiquitarian.jpeg', @@ -90,9 +90,14 @@ const ComstomBg: FC = () => { bgImage: '/bg/space.svg', bgColor: '#002630', // backgroundBg }, + y: { + bgImage: '/bg/waves.png', + }, } - const effect: TBackgroundEffect = effects.l + // e, h, + // y, g + const effect = effects.g // for linear/solid background colors if (isString(effect)) { @@ -100,6 +105,7 @@ const ComstomBg: FC = () => { return } + // @ts-ignore const { bgImage, bgColor = '', bgSize = 'contain' } = effect // for custom image/svg diff --git a/src/containers/tool/ArticleSticker/LeftSticker/index.tsx b/src/containers/tool/ArticleSticker/LeftSticker/index.tsx index dd0d11cda..e12a2273e 100644 --- a/src/containers/tool/ArticleSticker/LeftSticker/index.tsx +++ b/src/containers/tool/ArticleSticker/LeftSticker/index.tsx @@ -3,16 +3,15 @@ import { FC } from 'react' import type { TArticle } from '@/spec' import { SVG } from '@/constant' -import { shareTo } from '@/utils/helper' import IconButton from '@/widgets/Buttons/IconButton' import Upvote from '@/widgets/Upvote' import { Wrapper, InnerWrapper, - BackWrapper, - ArrowIcon, - BackText, + // BackWrapper, + // ArrowIcon, + // BackText, Divider, } from '../styles/left_sticker' import { handleUpvote } from '../logic' @@ -46,7 +45,7 @@ const LeftSticker: FC = ({ onAction={handleUpvote} /> - + ) diff --git a/src/containers/tool/Drawer/AddOn/ShareButton.tsx b/src/containers/tool/Drawer/AddOn/ShareButton.tsx deleted file mode 100644 index d53e7b913..000000000 --- a/src/containers/tool/Drawer/AddOn/ShareButton.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { FC, memo } from 'react' - -import { shareTo } from '@/utils/helper' -import IconButton from '@/widgets/Buttons/IconButton' - -const ShareButton: FC = () => { - return ( - shareTo('50%')} - path="article/share.svg" - size={15} - mTop={9} - mRight={14} - mLeft={12} - hint="分享内容" - hintPlacement="bottom" - dimWhenIdle - /> - ) -} - -export default memo(ShareButton) diff --git a/src/containers/tool/Drawer/AddOn/index.tsx b/src/containers/tool/Drawer/AddOn/index.tsx index 1f327e8fa..d9504b8f7 100755 --- a/src/containers/tool/Drawer/AddOn/index.tsx +++ b/src/containers/tool/Drawer/AddOn/index.tsx @@ -6,8 +6,8 @@ import ArticleNavi from './ArticleNavi' import type { TArticleNavi } from '../spec' import { ARTICLE_VIEWER_TYPES } from '../constant' +import Share from '@/containers/tool/Share' import CloseButton from './CloseButton' -import ShareButton from './ShareButton' import { Wrapper, TopArea } from '../styles/add_on' type TProps = { @@ -23,7 +23,7 @@ const AddOn: FC = ({ type, articleNavi }) => { - {showShare && } + {showShare && } {showArticleNavi && } diff --git a/src/containers/tool/Drawer/Content/DesktopView.tsx b/src/containers/tool/Drawer/Content/DesktopView.tsx index f872822e2..c5659b1c7 100644 --- a/src/containers/tool/Drawer/Content/DesktopView.tsx +++ b/src/containers/tool/Drawer/Content/DesktopView.tsx @@ -32,7 +32,7 @@ const Content: FC = ({ visible, type, attUser, userListerType }) => { instanceKey={DRAWER_SCROLLER} direction="vertical" height="100vh" - shadowSize="small" + barSize="medium" showShadow={false} > {renderContent(type, attUser, userListerType)} diff --git a/src/containers/tool/Drawer/styles/add_on/index.ts b/src/containers/tool/Drawer/styles/add_on/index.ts index 66ad4c010..0ca70d507 100755 --- a/src/containers/tool/Drawer/styles/add_on/index.ts +++ b/src/containers/tool/Drawer/styles/add_on/index.ts @@ -25,7 +25,6 @@ export const TopArea = styled.div<{ showShare: boolean }>` ${css.flexColumn('align-both')} padding-left: 12px; z-index: 100000; - transform: rotate(2deg); &:before { content: ''; diff --git a/src/containers/tool/Share/IFrameBoard.tsx b/src/containers/tool/Share/Panel/IFrameBoard.tsx similarity index 94% rename from src/containers/tool/Share/IFrameBoard.tsx rename to src/containers/tool/Share/Panel/IFrameBoard.tsx index 08a78790d..0e7422579 100644 --- a/src/containers/tool/Share/IFrameBoard.tsx +++ b/src/containers/tool/Share/Panel/IFrameBoard.tsx @@ -8,7 +8,7 @@ import { Title, CodeWrapper, Inputer, -} from './styles/iframe_board' +} from '../styles/panel/iframe_board' const IFrameBoard: FC = () => { const code = diff --git a/src/containers/tool/Share/InfoPanel.tsx b/src/containers/tool/Share/Panel/InfoPanel.tsx similarity index 83% rename from src/containers/tool/Share/InfoPanel.tsx rename to src/containers/tool/Share/Panel/InfoPanel.tsx index 44eb91623..ef81442aa 100644 --- a/src/containers/tool/Share/InfoPanel.tsx +++ b/src/containers/tool/Share/Panel/InfoPanel.tsx @@ -1,13 +1,14 @@ import { FC, memo } from 'react' -import { SITE_SHARE_TYPE } from './constant' +import { SITE_SHARE_TYPE } from '../constant' + +import type { TLinksData } from '../spec' import LinkBoard from './LinkBoard' import IFrameBoard from './IFrameBoard' import WechatBoard from './WechatBoard' -import { Wrapper } from './styles/info_panel' -import type { TLinksData } from './store' +import { Wrapper } from '../styles/panel/info_panel' type TProps = { type: string diff --git a/src/containers/tool/Share/LinkBoard.tsx b/src/containers/tool/Share/Panel/LinkBoard.tsx similarity index 94% rename from src/containers/tool/Share/LinkBoard.tsx rename to src/containers/tool/Share/Panel/LinkBoard.tsx index d58472a5c..7525d70b1 100644 --- a/src/containers/tool/Share/LinkBoard.tsx +++ b/src/containers/tool/Share/Panel/LinkBoard.tsx @@ -1,7 +1,7 @@ import { FC, memo, Fragment, useState } from 'react' import CopyButton from '@/widgets/Buttons/CopyButton' -import type { TLinksData } from './store' +import type { TLinksData } from '../spec' import { Header, @@ -9,7 +9,7 @@ import { TabName, BoxWrapper, Inputer, -} from './styles/link_board' +} from '../styles/panel/link_board' type TProps = { linksData: TLinksData diff --git a/src/containers/tool/Share/Platforms.tsx b/src/containers/tool/Share/Panel/Platforms.tsx similarity index 94% rename from src/containers/tool/Share/Platforms.tsx rename to src/containers/tool/Share/Panel/Platforms.tsx index 63d6f801b..a1b66382f 100644 --- a/src/containers/tool/Share/Platforms.tsx +++ b/src/containers/tool/Share/Panel/Platforms.tsx @@ -3,7 +3,7 @@ import { FC, memo } from 'react' import { ICON } from '@/config' import type { TArticle } from '@/spec' -import { SHARE_TYPE } from './constant' +import { SHARE_TYPE } from '../constant' import { Wrapper, Header, @@ -14,8 +14,8 @@ import { Logo, LogoWrapper, Title, -} from './styles/platform' -import { toPlatform } from './logic' +} from '../styles/panel/platform' +import { toPlatform } from '../logic' const medias = [ { diff --git a/src/containers/tool/Share/WechatBoard.tsx b/src/containers/tool/Share/Panel/WechatBoard.tsx similarity index 93% rename from src/containers/tool/Share/WechatBoard.tsx rename to src/containers/tool/Share/Panel/WechatBoard.tsx index dfce8de5e..6a47061c1 100644 --- a/src/containers/tool/Share/WechatBoard.tsx +++ b/src/containers/tool/Share/Panel/WechatBoard.tsx @@ -1,12 +1,12 @@ import { FC, memo } from 'react' - import QRCode from 'qrcode.react' + import { Wrapper, QRCodeWrapper, DescTitle, DescWrapper, -} from './styles/wechat_board' +} from '../styles/panel/wechat_board' const WechatBoard: FC = () => { return ( diff --git a/src/containers/tool/Share/Panel/index.tsx b/src/containers/tool/Share/Panel/index.tsx new file mode 100644 index 000000000..616620139 --- /dev/null +++ b/src/containers/tool/Share/Panel/index.tsx @@ -0,0 +1,69 @@ +/* + * Share + */ + +import { FC, Fragment, memo } from 'react' +import { isMobile } from 'react-device-detect' + +import type { TArticle } from '@/spec' +import { buildLog } from '@/utils/logger' + +import Modal from '@/widgets/Modal' + +import type { TLinksData } from '../spec' +import Platforms from './Platforms' +import InfoPanel from './InfoPanel' + +import { Wrapper } from '../styles/panel' +import { close } from '../logic' + +/* eslint-disable-next-line */ +const log = buildLog('C:Share') + +type TProps = { + show: boolean + offsetLeft: string + siteShareType: string + linksData: TLinksData + article: TArticle + testid?: string +} + +const SharePanel: FC = ({ + show, + offsetLeft, + siteShareType, + linksData, + article, + testid = 'share-panel', +}) => { + if (isMobile) { + return ( + + + + + + + ) + } + + return ( + + + + + + + + + ) +} + +export default memo(SharePanel) diff --git a/src/containers/tool/Share/constant.ts b/src/containers/tool/Share/constant.ts index 757a23072..d8a4d48b0 100644 --- a/src/containers/tool/Share/constant.ts +++ b/src/containers/tool/Share/constant.ts @@ -18,3 +18,10 @@ export const SHARE_TYPE = { ...SITE_SHARE_TYPE, ...OUTSIDE_SHARE_TYPE, } + +export const MENU = { + COPY_LINK: 'copy-link', + EMAIL: OUTSIDE_SHARE_TYPE.EMAIL, + WECHAT: OUTSIDE_SHARE_TYPE.WECHAT, + MORE: 'more', +} diff --git a/src/containers/tool/Share/index.tsx b/src/containers/tool/Share/index.tsx index 3a7b795d3..0fa024d6e 100755 --- a/src/containers/tool/Share/index.tsx +++ b/src/containers/tool/Share/index.tsx @@ -3,19 +3,21 @@ */ import { FC, Fragment } from 'react' -import { isMobile } from 'react-device-detect' import { buildLog } from '@/utils/logger' import { bond } from '@/utils/mobx' -import Modal from '@/widgets/Modal' +import { ICON } from '@/config' -import Platforms from './Platforms' -import InfoPanel from './InfoPanel' +import MenuButton from '@/widgets/Buttons/MenuButton' +import IconButton from '@/widgets/Buttons/IconButton' + +import { MENU } from './constant' + +import Panel from './Panel' import type { TStore } from './store' -import { Wrapper } from './styles' -import { useInit, close } from './logic' +import { useInit, handleMenu } from './logic' /* eslint-disable-next-line */ const log = buildLog('C:Share') @@ -25,34 +27,55 @@ type TProps = { testid?: string } -const ShareContainer: FC = ({ share: store, testid }) => { +const ShareContainer: FC = ({ share: store, testid = 'share' }) => { useInit(store) const { show, offsetLeft, siteShareType, linksData, viewingArticle } = store - if (isMobile) { - return ( - - - - - - - ) - } + + const menuOptions = [ + { + key: MENU.COPY_LINK, + icon: `${ICON}/edit/publish-pen.svg`, + title: '复制链接', + }, + { + key: MENU.EMAIL, + icon: `${ICON}/menu/hot.svg`, + title: 'Email', + }, + { + key: MENU.WECHAT, + icon: `${ICON}/menu/hot.svg`, + title: '微信', + qrLink: linksData.link, + }, + { + key: MENU.MORE, + icon: `${ICON}/menu/hot.svg`, + title: '更多', + }, + ] return ( - + + + + {/* TODO: dynamic load */} + - - - - - + siteShareType={siteShareType as string} + linksData={linksData} + article={viewingArticle} + /> ) } diff --git a/src/containers/tool/Share/logic.ts b/src/containers/tool/Share/logic.ts index 57c8cca56..16bb5d8f8 100755 --- a/src/containers/tool/Share/logic.ts +++ b/src/containers/tool/Share/logic.ts @@ -4,17 +4,15 @@ import { useEffect } from 'react' import asyncSuit from '@/utils/async' import { openShareWindow } from '@/utils/helper' import { buildLog } from '@/utils/logger' -import { EVENT } from '@/constant' -import { SHARE_TYPE } from './constant' +import { SHARE_TYPE, MENU } from './constant' +import type { TMenu } from './spec' // import S from './schma' import type { TStore } from './store' -const { SR71, $solver, asyncRes } = asyncSuit +const { SR71, $solver } = asyncSuit -const sr71$ = new SR71({ - receive: EVENT.SHARE, -}) +const sr71$ = new SR71() let store: TStore | undefined let sub$ = null @@ -66,6 +64,24 @@ export const toPlatform = (type: string): void => { } } +export const handleMenu = (key: TMenu): void => { + switch (key) { + case MENU.COPY_LINK: { + console.log('do copy link') + return + } + + case MENU.MORE: { + store.mark({ show: true, offsetLeft: '50%' }) + return + } + + default: { + console.log('do nothing') + } + } +} + export const close = (): void => { store.mark({ show: false, siteShareType: SHARE_TYPE.LINKS }) } @@ -74,15 +90,7 @@ export const close = (): void => { // init & uninit handlers // ############################### -const DataResolver = [ - { - match: asyncRes(EVENT.SHARE), - action: (data) => { - const payload = data[EVENT.SHARE] - store.mark({ show: true, offsetLeft: payload.offsetLeft }) - }, - }, -] +const DataResolver = [] export const useInit = (_store: TStore): void => { useEffect(() => { diff --git a/src/containers/tool/Share/spec.d.ts b/src/containers/tool/Share/spec.d.ts new file mode 100644 index 000000000..ceade3ca1 --- /dev/null +++ b/src/containers/tool/Share/spec.d.ts @@ -0,0 +1,14 @@ +export type TLinksData = { + link: string + html: string + md: string + orgMode: string +} + +export type TShareData = { + url: string + title: string + digest: string +} + +export type TMenu = 'copy-link' | 'email' | 'wechat' | 'more' diff --git a/src/containers/tool/Share/store.ts b/src/containers/tool/Share/store.ts index 532c0917a..6bafa8cf3 100755 --- a/src/containers/tool/Share/store.ts +++ b/src/containers/tool/Share/store.ts @@ -11,24 +11,12 @@ import type { TArticle, TCommunity, TRootStore, TThread } from '@/spec' import { markStates, toJS } from '@/utils/mobx' import { buildLog } from '@/utils/logger' +import type { TLinksData, TShareData } from './spec' import { SITE_SHARE_TYPE } from './constant' /* eslint-disable-next-line */ const log = buildLog('S:Share') -export type TShareData = { - url: string - title: string - digest: string -} - -export type TLinksData = { - link: string - html: string - md: string - orgMode: string -} - const Share = T.model('Share', { show: T.optional(T.boolean, false), offsetLeft: T.optional(T.string, 'none'), diff --git a/src/containers/tool/Share/styles/iframe_board.ts b/src/containers/tool/Share/styles/panel/iframe_board.ts similarity index 100% rename from src/containers/tool/Share/styles/iframe_board.ts rename to src/containers/tool/Share/styles/panel/iframe_board.ts diff --git a/src/containers/tool/Share/styles/panel/index.ts b/src/containers/tool/Share/styles/panel/index.ts new file mode 100644 index 000000000..d044b6ff1 --- /dev/null +++ b/src/containers/tool/Share/styles/panel/index.ts @@ -0,0 +1,18 @@ +import styled from 'styled-components' + +import type { TTestable } from '@/spec' +import css from '@/utils/css' + +type TWrapper = { type: string } & TTestable + +export const Wrapper = styled.div.attrs(({ testid }: TTestable) => ({ + 'data-test-id': testid, +}))` + ${css.flexColumn('justify-between')}; + height: auto; + + ${css.media.mobile` + width: 100%; + `}; +` +export const Title = styled.div`` diff --git a/src/containers/tool/Share/styles/info_panel.ts b/src/containers/tool/Share/styles/panel/info_panel.ts similarity index 91% rename from src/containers/tool/Share/styles/info_panel.ts rename to src/containers/tool/Share/styles/panel/info_panel.ts index 5cd6f115d..b8c2e3196 100644 --- a/src/containers/tool/Share/styles/info_panel.ts +++ b/src/containers/tool/Share/styles/panel/info_panel.ts @@ -2,7 +2,7 @@ import styled from 'styled-components' import css, { theme } from '@/utils/css' -import { getInfoPanelHeight } from './metric' +import { getInfoPanelHeight } from '../metric' export const Wrapper = styled.div<{ type: string }>` padding: 20px 40px; diff --git a/src/containers/tool/Share/styles/link_board.ts b/src/containers/tool/Share/styles/panel/link_board.ts similarity index 100% rename from src/containers/tool/Share/styles/link_board.ts rename to src/containers/tool/Share/styles/panel/link_board.ts diff --git a/src/containers/tool/Share/styles/platform.ts b/src/containers/tool/Share/styles/panel/platform.ts similarity index 100% rename from src/containers/tool/Share/styles/platform.ts rename to src/containers/tool/Share/styles/panel/platform.ts diff --git a/src/containers/tool/Share/styles/wechat_board.ts b/src/containers/tool/Share/styles/panel/wechat_board.ts similarity index 100% rename from src/containers/tool/Share/styles/wechat_board.ts rename to src/containers/tool/Share/styles/panel/wechat_board.ts diff --git a/src/spec/utils.ts b/src/spec/utils.ts index 8a58d7661..e2475c6ed 100644 --- a/src/spec/utils.ts +++ b/src/spec/utils.ts @@ -198,4 +198,5 @@ export type TMenuOption = { key: string icon?: string link?: string + qrLink?: string } diff --git a/src/widgets/Buttons/MenuButton/Menu.tsx b/src/widgets/Buttons/MenuButton/Menu.tsx index 62037f9e4..b0c13cbd5 100644 --- a/src/widgets/Buttons/MenuButton/Menu.tsx +++ b/src/widgets/Buttons/MenuButton/Menu.tsx @@ -1,5 +1,6 @@ -import { FC, memo } from 'react' +import { FC, Fragment, memo } from 'react' import { isEmpty } from 'ramda' +import QRCode from 'qrcode.react' import type { TMenuOption } from '@/spec' @@ -10,6 +11,7 @@ import { Wrapper, Block, BlockA, + QRWrapper, Item, Icon, Title, @@ -56,11 +58,14 @@ const Menu: FC = ({ return ( {options.map((item) => ( - onClick(item.key)} - /> + + onClick(item.key)} /> + {item.qrLink && ( + + + + )} + ))} {!isEmpty(extraOptions) && } {extraOptions.map((item) => ( diff --git a/src/widgets/Buttons/MenuButton/index.tsx b/src/widgets/Buttons/MenuButton/index.tsx index 1aa816e7e..4db8ba673 100644 --- a/src/widgets/Buttons/MenuButton/index.tsx +++ b/src/widgets/Buttons/MenuButton/index.tsx @@ -27,7 +27,7 @@ const MenuButton: FC = ({ extraOptions = [], onClick = log, placement = 'top-end', - panelMinWidth = '100px', + panelMinWidth = '110px', }) => { return ( ` min-width: ${({ panelMinWidth }) => panelMinWidth}; max-height: 300px; overflow: hidden; + padding: 4px 3px; ` export const Block = styled.div` ${css.flex('align-start')}; width: 100%; - padding: 6px 10px; + padding: 4px 10px; padding-left: 15px; + border-radius: 4px; &:hover { background: ${theme('hoverBg')}; cursor: pointer; } ` +export const QRWrapper = styled.div` + opacity: 0.55; + margin-top: 7px; + margin-left: 2px; + + &:hover { + opacity: 1; + } + + transition: opacity 0.25s; +` export const Divider = styled.div` width: 100%; height: 1px; diff --git a/utils/constant/event.ts b/utils/constant/event.ts index 953b99735..74af635b2 100755 --- a/utils/constant/event.ts +++ b/utils/constant/event.ts @@ -18,8 +18,6 @@ const EVENT = { }, UPVOTE_ON_ARTICLE_LIST: 'UPVOTE_ON_ARTICLE_LIST', - // share - SHARE: 'SHARE', // report REPORT: 'REPORT', diff --git a/utils/helper.ts b/utils/helper.ts index cc9783659..8d67feab4 100755 --- a/utils/helper.ts +++ b/utils/helper.ts @@ -209,12 +209,6 @@ export const closeDrawer = (type = ''): void => */ export const checkout = (amount: number, usage: TPaymentUsage): void => send(EVENT.CALL_CASHIER, { amount, usage }) -/** - * share articles - */ -export const shareTo = (offsetLeft = 'none'): void => { - send(EVENT.SHARE, { offsetLeft }) -} export const addCollection = (): void => { send(EVENT.SET_FAVORITE_CONTENT, { diff --git a/utils/index.ts b/utils/index.ts index 189efae86..9353fa617 100755 --- a/utils/index.ts +++ b/utils/index.ts @@ -26,7 +26,6 @@ export { countWords, joinUS, closeDrawer, - shareTo, report, errRescue, debounce, From f3e0410133319608f3bebf8176ddde1d0a828ad0 Mon Sep 17 00:00:00 2001 From: mydearxym Date: Fri, 6 May 2022 21:50:31 +0800 Subject: [PATCH 02/11] refactor(IconButton): use TSpace for margin --- .../editor/BlogEditor/Content/FeedItem.tsx | 2 +- .../editor/BlogEditor/Content/TheRSSItem.tsx | 4 ++-- src/containers/editor/RichEditor/Menu.tsx | 2 +- src/containers/thread/KanbanThread/index.tsx | 6 +++--- .../tool/ArticleSticker/LeftSticker/index.tsx | 2 +- .../CommunitySetter/Header.tsx | 2 -- .../CommunityTagSetter/TagSetter/Header.tsx | 7 +++---- .../tool/CommunityTagSetter/TagSetter/Tag.tsx | 4 ++-- .../tool/Drawer/AddOn/CloseButton.tsx | 8 +------ src/containers/tool/Share/index.tsx | 6 +++--- .../Comment/DesktopView/FoldLayout.tsx | 4 ++-- src/containers/unit/Comments/List/Header.tsx | 2 +- .../ArticleViewer/WorksViewer/Header.tsx | 2 +- src/widgets/Buttons/CopyButton/Animate.tsx | 2 +- src/widgets/Buttons/CopyButton/index.tsx | 2 +- src/widgets/Buttons/IconButton.tsx | 21 ++++--------------- src/widgets/Buttons/styles/icon_button.ts | 8 +++---- src/widgets/EmotionSelector/index.tsx | 2 +- src/widgets/FaqList/Collapse/Banner.tsx | 2 +- src/widgets/Folder/Footer.tsx | 2 +- src/widgets/GotoTop/RealGotoTop.tsx | 2 +- src/widgets/KanbanItem/index.tsx | 2 +- .../PostItem/DesktopView/ActiveBadge.tsx | 2 +- 23 files changed, 37 insertions(+), 59 deletions(-) diff --git a/src/containers/editor/BlogEditor/Content/FeedItem.tsx b/src/containers/editor/BlogEditor/Content/FeedItem.tsx index e8653c311..7174d1341 100644 --- a/src/containers/editor/BlogEditor/Content/FeedItem.tsx +++ b/src/containers/editor/BlogEditor/Content/FeedItem.tsx @@ -59,7 +59,7 @@ const FeedItem: FC = ({ toStep('STEP_2')} - mTop={3} + top={3} /> )} diff --git a/src/containers/editor/BlogEditor/Content/TheRSSItem.tsx b/src/containers/editor/BlogEditor/Content/TheRSSItem.tsx index 57ae8b561..4ed23104c 100644 --- a/src/containers/editor/BlogEditor/Content/TheRSSItem.tsx +++ b/src/containers/editor/BlogEditor/Content/TheRSSItem.tsx @@ -9,10 +9,10 @@ import IconButton from '@/widgets/Buttons/IconButton' import { Wrapper, Title, Subtitle } from '../styles/content/rss_item' import { toStep } from '../logic' -type TProps = TSpace & { +type TProps = { rssInfo: TBlogRSS readonly?: boolean -} +} & TSpace const RSSItem: FC = ({ rssInfo, readonly = false, ...restProps }) => { return ( diff --git a/src/containers/editor/RichEditor/Menu.tsx b/src/containers/editor/RichEditor/Menu.tsx index 54f77c72d..0faed6771 100644 --- a/src/containers/editor/RichEditor/Menu.tsx +++ b/src/containers/editor/RichEditor/Menu.tsx @@ -38,7 +38,7 @@ const Menu: FC = () => { placement="bottom-end" onClick={console.log} > - + ) } diff --git a/src/containers/thread/KanbanThread/index.tsx b/src/containers/thread/KanbanThread/index.tsx index c0e3395fe..56bee5672 100644 --- a/src/containers/thread/KanbanThread/index.tsx +++ b/src/containers/thread/KanbanThread/index.tsx @@ -54,7 +54,7 @@ const KanbanThreadContainer: FC = ({ {getRandomInt(5, 20)} - + @@ -71,7 +71,7 @@ const KanbanThreadContainer: FC = ({ {getRandomInt(5, 20)} - + @@ -88,7 +88,7 @@ const KanbanThreadContainer: FC = ({ {getRandomInt(5, 20)} - + diff --git a/src/containers/tool/ArticleSticker/LeftSticker/index.tsx b/src/containers/tool/ArticleSticker/LeftSticker/index.tsx index e12a2273e..86ac3972a 100644 --- a/src/containers/tool/ArticleSticker/LeftSticker/index.tsx +++ b/src/containers/tool/ArticleSticker/LeftSticker/index.tsx @@ -45,7 +45,7 @@ const LeftSticker: FC = ({ onAction={handleUpvote} /> - + ) diff --git a/src/containers/tool/CommunityTagSetter/CommunitySetter/Header.tsx b/src/containers/tool/CommunityTagSetter/CommunitySetter/Header.tsx index 6b4e434e8..453531329 100644 --- a/src/containers/tool/CommunityTagSetter/CommunitySetter/Header.tsx +++ b/src/containers/tool/CommunityTagSetter/CommunitySetter/Header.tsx @@ -21,7 +21,6 @@ const Header: FC = ({ view, texts }) => { = ({ view, texts }) => { = ({ view }) => { = ({ view }) => { = ({ view }) => { = ({ view }) => { = ({ tag, view, checked, onTagSelect }) => { {updateable && ( { changeTagView(TAG_VIEW.UPDATE_ITEM) }} diff --git a/src/containers/tool/Drawer/AddOn/CloseButton.tsx b/src/containers/tool/Drawer/AddOn/CloseButton.tsx index 548f4371c..e40f89763 100644 --- a/src/containers/tool/Drawer/AddOn/CloseButton.tsx +++ b/src/containers/tool/Drawer/AddOn/CloseButton.tsx @@ -5,13 +5,7 @@ import { closeDrawer } from '../logic' const CloseButton: FC = () => { return ( - + ) } diff --git a/src/containers/tool/Share/index.tsx b/src/containers/tool/Share/index.tsx index 0fa024d6e..10a1fd945 100755 --- a/src/containers/tool/Share/index.tsx +++ b/src/containers/tool/Share/index.tsx @@ -61,9 +61,9 @@ const ShareContainer: FC = ({ share: store, testid = 'share' }) => { diff --git a/src/containers/unit/Comments/Comment/DesktopView/FoldLayout.tsx b/src/containers/unit/Comments/Comment/DesktopView/FoldLayout.tsx index 494fcfec1..98cee5001 100644 --- a/src/containers/unit/Comments/Comment/DesktopView/FoldLayout.tsx +++ b/src/containers/unit/Comments/Comment/DesktopView/FoldLayout.tsx @@ -34,8 +34,8 @@ const FoldLayout: FC = ({ data }) => { = ({ )} diff --git a/src/containers/viewer/ArticleViewer/WorksViewer/Header.tsx b/src/containers/viewer/ArticleViewer/WorksViewer/Header.tsx index 373fad1e7..cdc33f479 100644 --- a/src/containers/viewer/ArticleViewer/WorksViewer/Header.tsx +++ b/src/containers/viewer/ArticleViewer/WorksViewer/Header.tsx @@ -52,7 +52,7 @@ const Header: FC = ({ article }) => { ))} diff --git a/src/widgets/Buttons/CopyButton/Animate.tsx b/src/widgets/Buttons/CopyButton/Animate.tsx index 581f634f1..7a6bf7eef 100644 --- a/src/widgets/Buttons/CopyButton/Animate.tsx +++ b/src/widgets/Buttons/CopyButton/Animate.tsx @@ -24,7 +24,7 @@ const CopyButton: FC = () => { {!done && ( { setDone(true) }} diff --git a/src/widgets/Buttons/CopyButton/index.tsx b/src/widgets/Buttons/CopyButton/index.tsx index dead2c4c1..cb21a6f5b 100644 --- a/src/widgets/Buttons/CopyButton/index.tsx +++ b/src/widgets/Buttons/CopyButton/index.tsx @@ -9,7 +9,7 @@ import { Wrapper } from '../styles/copy_button' const AnimatedCopyButton = dynamic(() => import('./Animate'), { /* eslint-disable react/display-name */ loading: () => { - return + return }, ssr: false, }) diff --git a/src/widgets/Buttons/IconButton.tsx b/src/widgets/Buttons/IconButton.tsx index adaa14a85..9f7137423 100644 --- a/src/widgets/Buttons/IconButton.tsx +++ b/src/widgets/Buttons/IconButton.tsx @@ -1,5 +1,6 @@ import { FC, memo, ReactNode } from 'react' +import type { TSpace } from '@/spec' import { ICON } from '@/config' import { SVG } from '@/constant' @@ -17,32 +18,25 @@ export type TProps = { path?: string | null icon?: string | null size?: number - mRight?: number - mLeft?: number - mTop?: number - mBottom?: number dimWhenIdle?: boolean active?: boolean hint?: ReactNode | null hintDelay?: number hintPlacement?: 'top' | 'bottom' onClick?: () => void -} +} & TSpace const IconButton: FC = ({ path = null, icon = null, size = 16, - mLeft = 0, - mRight = 10, - mTop = 0, - mBottom = 0, active = false, dimWhenIdle = false, hint = null, hintDelay = 500, hintPlacement = 'top', onClick = console.log, + ...restProps }) => { let realIcon = null @@ -65,14 +59,7 @@ const IconButton: FC = ({ } return ( - + {hint ? ( ` ${({ size }) => css.size(size)} ${css.flex('align-both')}; - margin-left: ${({ mLeft }) => `${mLeft}px`}; - margin-right: ${({ mRight }) => `${mRight}px`}; - margin-top: ${({ mTop }) => `${mTop}px`}; - margin-bottom: ${({ mBottom }) => `${mBottom}px`}; + margin-left: ${({ left }) => `${left || 0}px`}; + margin-right: ${({ right }) => `${right || 0}px`}; + margin-top: ${({ top }) => `${top || 0}px`}; + margin-bottom: ${({ bottom }) => `${bottom || 0}px`}; /* &:before { content: ''; diff --git a/src/widgets/EmotionSelector/index.tsx b/src/widgets/EmotionSelector/index.tsx index ca0602fd8..ad2ff8bb1 100755 --- a/src/widgets/EmotionSelector/index.tsx +++ b/src/widgets/EmotionSelector/index.tsx @@ -41,7 +41,7 @@ const EmotionSelector: FC = ({ noPadding > - + )} diff --git a/src/widgets/FaqList/Collapse/Banner.tsx b/src/widgets/FaqList/Collapse/Banner.tsx index 1223377b3..86c0aadac 100644 --- a/src/widgets/FaqList/Collapse/Banner.tsx +++ b/src/widgets/FaqList/Collapse/Banner.tsx @@ -50,7 +50,7 @@ const Banner: FC = ({ menuOptions, setOpenedIDs, articles }) => { options={menuOptions} onClick={(key) => handleMenu(key)} > - + diff --git a/src/widgets/Folder/Footer.tsx b/src/widgets/Folder/Footer.tsx index 19b802b64..2f3eb54f6 100644 --- a/src/widgets/Folder/Footer.tsx +++ b/src/widgets/Folder/Footer.tsx @@ -60,7 +60,7 @@ const Footer: FC = ({ title, onClick, onMenuClick, inactive }) => { {!inactive && ( - + )} diff --git a/src/widgets/GotoTop/RealGotoTop.tsx b/src/widgets/GotoTop/RealGotoTop.tsx index a0f2a3dbf..8f65ef6be 100644 --- a/src/widgets/GotoTop/RealGotoTop.tsx +++ b/src/widgets/GotoTop/RealGotoTop.tsx @@ -19,7 +19,7 @@ const GotoTop: FC = ({ testid = 'goto-top', type = 'body' }) => { return ( - + ) } diff --git a/src/widgets/KanbanItem/index.tsx b/src/widgets/KanbanItem/index.tsx index a6af02788..4b5a21623 100644 --- a/src/widgets/KanbanItem/index.tsx +++ b/src/widgets/KanbanItem/index.tsx @@ -37,7 +37,7 @@ const KanbanItem: FC = ({ testid = 'gtd-item' }) => {
- +
增加看板,发布日志,与常见问题的功能和其他 diff --git a/src/widgets/PostItem/DesktopView/ActiveBadge.tsx b/src/widgets/PostItem/DesktopView/ActiveBadge.tsx index fe2e19944..704a3c033 100644 --- a/src/widgets/PostItem/DesktopView/ActiveBadge.tsx +++ b/src/widgets/PostItem/DesktopView/ActiveBadge.tsx @@ -29,7 +29,7 @@ const ActiveBadge: FC = ({ item }) => { } - mRight={6} + right={6} hintPlacement="bottom" hintDelay={0} /> From f90e5809256b040bf8a68678dab47ffe2de358e0 Mon Sep 17 00:00:00 2001 From: mydearxym Date: Fri, 6 May 2022 21:56:57 +0800 Subject: [PATCH 03/11] refactor(TagsList): use TSpace for margin --- .../editor/ArticleEditor/Footer.tsx | 1 - src/containers/editor/BlogEditor/Footer.tsx | 1 - src/containers/editor/WorksEditor/Footer.tsx | 1 - src/widgets/ArticleCard/Header.tsx | 12 ++--------- .../ChangelogItem/DefaultLayout/index.tsx | 2 +- src/widgets/KanbanItem/index.tsx | 2 +- src/widgets/PostItem/DesktopView/Header.tsx | 2 +- src/widgets/TagsList/FullList.tsx | 11 +++++++--- src/widgets/TagsList/index.tsx | 20 ++++++++++++------- src/widgets/TagsList/styles/index.ts | 11 +++++++--- 10 files changed, 34 insertions(+), 29 deletions(-) diff --git a/src/containers/editor/ArticleEditor/Footer.tsx b/src/containers/editor/ArticleEditor/Footer.tsx index db073d0ca..28b21d00f 100644 --- a/src/containers/editor/ArticleEditor/Footer.tsx +++ b/src/containers/editor/ArticleEditor/Footer.tsx @@ -45,7 +45,6 @@ const Footer: FC = ({ = ({ community, tags, submitState, mode }) => { {mode === 'publish' && ( = ({ step, inputData, submitState, mode }) => { = ({ data, thread }) => {
{cutRest(title, 100)}
- +
) } @@ -53,11 +49,7 @@ const Header: FC = ({ data, thread }) => { return ( - +
{!isMobile && ( diff --git a/src/widgets/ChangelogItem/DefaultLayout/index.tsx b/src/widgets/ChangelogItem/DefaultLayout/index.tsx index 58833baf4..acb3ed5fd 100644 --- a/src/widgets/ChangelogItem/DefaultLayout/index.tsx +++ b/src/widgets/ChangelogItem/DefaultLayout/index.tsx @@ -103,7 +103,7 @@ const DefaultLayout: FC = ({ testid = 'changelog-item' }) => { = ({ testid = 'gtd-item' }) => { return (
- +
增加看板,发布日志,与常见问题的功能和其他 diff --git a/src/widgets/PostItem/DesktopView/Header.tsx b/src/widgets/PostItem/DesktopView/Header.tsx index 39e86b72b..7eac414ea 100644 --- a/src/widgets/PostItem/DesktopView/Header.tsx +++ b/src/widgets/PostItem/DesktopView/Header.tsx @@ -36,7 +36,7 @@ const Header: FC = ({ item }) => { {item.title} {/* @ts-ignore */} - + +type TProps = Omit -const FullList: FC = ({ items, mLeft, size, mode = 'default' }) => { +const FullList: FC = ({ + items, + size, + mode = 'default', + ...restProps +}) => { return ( - + {sortByColor(items).map((tag) => ( {mode === 'default' && } diff --git a/src/widgets/TagsList/index.tsx b/src/widgets/TagsList/index.tsx index 48dbb44a3..f854e998a 100755 --- a/src/widgets/TagsList/index.tsx +++ b/src/widgets/TagsList/index.tsx @@ -4,7 +4,14 @@ import { FC, memo } from 'react' -import type { TTag, TSIZE_TSM, TCommunity, TThread, TTagMode } from '@/spec' +import type { + TTag, + TSIZE_TSM, + TCommunity, + TThread, + TTagMode, + TSpace, +} from '@/spec' import { SIZE, THREAD, TAG_MODE } from '@/constant' import { sortByColor } from '@/utils/helper' @@ -23,7 +30,6 @@ const log = buildLog('c:TagsList:index') export type TProps = { items: TTag[] max?: number - mLeft?: number size?: TSIZE_TSM withSetter?: boolean mode?: TTagMode @@ -31,21 +37,21 @@ export type TProps = { // if withSetter is set to true, MUST have community and thread community?: TCommunity thread?: TThread -} +} & TSpace const TagsList: FC = ({ items, max = 2, - mLeft = 8, size = SIZE.TINY, withSetter = false, mode = TAG_MODE.DEFAULT, community = { raw: 'home' }, thread = THREAD.POST, + ...restProps }) => { if (items.length > max) { return ( - + {sortByColor(items) .slice(0, max) .map((tag) => ( @@ -59,7 +65,7 @@ const TagsList: FC = ({ + } > .. @@ -74,7 +80,7 @@ const TagsList: FC = ({ return ( {items.length > 0 && ( - + )} {withSetter && ( ` +export const Wrapper = styled.div` ${css.flex('align-center')}; - margin-left: ${({ mLeft }) => (mLeft ? `${mLeft}px` : 0)}; + + margin-left: ${({ left }) => `${left || 0}px`}; + margin-right: ${({ right }) => `${right || 0}px`}; + margin-top: ${({ top }) => `${top || 0}px`}; + margin-bottom: ${({ bottom }) => `${bottom || 0}px`}; + position: relative; margin-top: 1px; ` From 35a8a942f175296437539d969aa4c4a2700fa29f Mon Sep 17 00:00:00 2001 From: mydearxym Date: Fri, 6 May 2022 21:58:50 +0800 Subject: [PATCH 04/11] chore: clean up --- src/containers/unit/Comments/List/Header.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/containers/unit/Comments/List/Header.tsx b/src/containers/unit/Comments/List/Header.tsx index 99c388660..42e484308 100644 --- a/src/containers/unit/Comments/List/Header.tsx +++ b/src/containers/unit/Comments/List/Header.tsx @@ -29,7 +29,7 @@ type TProps = { } const actionIconConfig = { - mRight: 8, + right: 8, hintDelay: 200, } @@ -88,16 +88,16 @@ const Header: FC = ({ size={13} hint="展开全部" active - {...actionIconConfig} onClick={expandAllComments} + {...actionIconConfig} /> ) : ( )} {apiMode === API_MODE.ARTICLE && ( From 8cd17bb9878d3ac4136829d488bda4aaf3f11caa Mon Sep 17 00:00:00 2001 From: mydearxym Date: Fri, 6 May 2022 22:14:58 +0800 Subject: [PATCH 05/11] chore: add .d for types file --- src/containers/content/ExploreContent/{spec.ts => spec.d.ts} | 0 src/containers/content/HaveADrinkContent/{spec.ts => spec.d.ts} | 0 src/containers/content/HelpCenterContent/{spec.ts => spec.d.ts} | 0 src/containers/content/MembershipContent/{spec.ts => spec.d.ts} | 0 src/containers/editor/AccountEditor/{spec.ts => spec.d.ts} | 0 src/containers/editor/ArticleEditor/{spec.ts => spec.d.ts} | 0 src/containers/editor/BlogEditor/{spec.ts => spec.d.ts} | 0 src/containers/editor/CommunityEditor/{spec.ts => spec.d.ts} | 0 src/containers/editor/WorksEditor/{spec.ts => spec.d.ts} | 0 src/containers/tool/AbuseReport/{spec.ts => spec.d.ts} | 0 src/containers/tool/Cashier/{spec.ts => spec.d.ts} | 0 src/containers/tool/CommunityTagSetter/{spec.ts => spec.d.ts} | 0 src/containers/tool/Drawer/{spec.ts => spec.d.ts} | 0 src/containers/unit/Comments/{spec.ts => spec.d.ts} | 0 src/containers/unit/ModeLineMenu/{spec.ts => spec.d.ts} | 0 src/spec/{account.ts => account.d.ts} | 0 src/spec/{article.ts => article.d.ts} | 0 src/spec/{c11n.ts => c11n.d.ts} | 0 src/spec/{community.ts => community.d.ts} | 0 src/spec/{comp.ts => comp.d.ts} | 0 src/spec/{emotion.ts => emotion.d.ts} | 0 src/spec/{enhance.ts => enhance.d.ts} | 0 src/spec/{gallery.ts => gallery.d.ts} | 0 src/spec/{graphql.ts => graphql.d.ts} | 0 src/spec/{metric.ts => metric.d.ts} | 0 src/spec/{size.ts => size.d.ts} | 0 src/spec/{store.ts => store.d.ts} | 0 src/spec/{theme.ts => theme.d.ts} | 0 src/spec/{thread.ts => thread.d.ts} | 0 src/spec/{utils.ts => utils.d.ts} | 0 src/widgets/AvatarsRow/{spec.ts => spec.d.ts} | 0 src/widgets/CustomScroller/{spec.ts => spec.d.ts} | 0 src/widgets/FiltersMenu/{spec.ts => spec.d.ts} | 0 src/widgets/NaviCatalog/{spec.ts => spec.d.ts} | 0 src/widgets/NoticeBar/{spec.ts => spec.d.ts} | 0 src/widgets/PromotionList/{spec.ts => spec.d.ts} | 0 src/widgets/Select/{spec.ts => spec.d.ts} | 0 src/widgets/TabBar/{spec.ts => spec.d.ts} | 0 src/widgets/TeamList/{spec.ts => spec.d.ts} | 0 src/widgets/TheAvatar/{spec.ts => spec.d.ts} | 0 40 files changed, 0 insertions(+), 0 deletions(-) rename src/containers/content/ExploreContent/{spec.ts => spec.d.ts} (100%) rename src/containers/content/HaveADrinkContent/{spec.ts => spec.d.ts} (100%) rename src/containers/content/HelpCenterContent/{spec.ts => spec.d.ts} (100%) rename src/containers/content/MembershipContent/{spec.ts => spec.d.ts} (100%) rename src/containers/editor/AccountEditor/{spec.ts => spec.d.ts} (100%) rename src/containers/editor/ArticleEditor/{spec.ts => spec.d.ts} (100%) rename src/containers/editor/BlogEditor/{spec.ts => spec.d.ts} (100%) rename src/containers/editor/CommunityEditor/{spec.ts => spec.d.ts} (100%) rename src/containers/editor/WorksEditor/{spec.ts => spec.d.ts} (100%) mode change 100755 => 100644 rename src/containers/tool/AbuseReport/{spec.ts => spec.d.ts} (100%) rename src/containers/tool/Cashier/{spec.ts => spec.d.ts} (100%) rename src/containers/tool/CommunityTagSetter/{spec.ts => spec.d.ts} (100%) rename src/containers/tool/Drawer/{spec.ts => spec.d.ts} (100%) rename src/containers/unit/Comments/{spec.ts => spec.d.ts} (100%) rename src/containers/unit/ModeLineMenu/{spec.ts => spec.d.ts} (100%) rename src/spec/{account.ts => account.d.ts} (100%) rename src/spec/{article.ts => article.d.ts} (100%) rename src/spec/{c11n.ts => c11n.d.ts} (100%) rename src/spec/{community.ts => community.d.ts} (100%) rename src/spec/{comp.ts => comp.d.ts} (100%) rename src/spec/{emotion.ts => emotion.d.ts} (100%) rename src/spec/{enhance.ts => enhance.d.ts} (100%) rename src/spec/{gallery.ts => gallery.d.ts} (100%) rename src/spec/{graphql.ts => graphql.d.ts} (100%) rename src/spec/{metric.ts => metric.d.ts} (100%) rename src/spec/{size.ts => size.d.ts} (100%) rename src/spec/{store.ts => store.d.ts} (100%) rename src/spec/{theme.ts => theme.d.ts} (100%) rename src/spec/{thread.ts => thread.d.ts} (100%) rename src/spec/{utils.ts => utils.d.ts} (100%) rename src/widgets/AvatarsRow/{spec.ts => spec.d.ts} (100%) rename src/widgets/CustomScroller/{spec.ts => spec.d.ts} (100%) rename src/widgets/FiltersMenu/{spec.ts => spec.d.ts} (100%) rename src/widgets/NaviCatalog/{spec.ts => spec.d.ts} (100%) rename src/widgets/NoticeBar/{spec.ts => spec.d.ts} (100%) rename src/widgets/PromotionList/{spec.ts => spec.d.ts} (100%) rename src/widgets/Select/{spec.ts => spec.d.ts} (100%) rename src/widgets/TabBar/{spec.ts => spec.d.ts} (100%) rename src/widgets/TeamList/{spec.ts => spec.d.ts} (100%) rename src/widgets/TheAvatar/{spec.ts => spec.d.ts} (100%) diff --git a/src/containers/content/ExploreContent/spec.ts b/src/containers/content/ExploreContent/spec.d.ts similarity index 100% rename from src/containers/content/ExploreContent/spec.ts rename to src/containers/content/ExploreContent/spec.d.ts diff --git a/src/containers/content/HaveADrinkContent/spec.ts b/src/containers/content/HaveADrinkContent/spec.d.ts similarity index 100% rename from src/containers/content/HaveADrinkContent/spec.ts rename to src/containers/content/HaveADrinkContent/spec.d.ts diff --git a/src/containers/content/HelpCenterContent/spec.ts b/src/containers/content/HelpCenterContent/spec.d.ts similarity index 100% rename from src/containers/content/HelpCenterContent/spec.ts rename to src/containers/content/HelpCenterContent/spec.d.ts diff --git a/src/containers/content/MembershipContent/spec.ts b/src/containers/content/MembershipContent/spec.d.ts similarity index 100% rename from src/containers/content/MembershipContent/spec.ts rename to src/containers/content/MembershipContent/spec.d.ts diff --git a/src/containers/editor/AccountEditor/spec.ts b/src/containers/editor/AccountEditor/spec.d.ts similarity index 100% rename from src/containers/editor/AccountEditor/spec.ts rename to src/containers/editor/AccountEditor/spec.d.ts diff --git a/src/containers/editor/ArticleEditor/spec.ts b/src/containers/editor/ArticleEditor/spec.d.ts similarity index 100% rename from src/containers/editor/ArticleEditor/spec.ts rename to src/containers/editor/ArticleEditor/spec.d.ts diff --git a/src/containers/editor/BlogEditor/spec.ts b/src/containers/editor/BlogEditor/spec.d.ts similarity index 100% rename from src/containers/editor/BlogEditor/spec.ts rename to src/containers/editor/BlogEditor/spec.d.ts diff --git a/src/containers/editor/CommunityEditor/spec.ts b/src/containers/editor/CommunityEditor/spec.d.ts similarity index 100% rename from src/containers/editor/CommunityEditor/spec.ts rename to src/containers/editor/CommunityEditor/spec.d.ts diff --git a/src/containers/editor/WorksEditor/spec.ts b/src/containers/editor/WorksEditor/spec.d.ts old mode 100755 new mode 100644 similarity index 100% rename from src/containers/editor/WorksEditor/spec.ts rename to src/containers/editor/WorksEditor/spec.d.ts diff --git a/src/containers/tool/AbuseReport/spec.ts b/src/containers/tool/AbuseReport/spec.d.ts similarity index 100% rename from src/containers/tool/AbuseReport/spec.ts rename to src/containers/tool/AbuseReport/spec.d.ts diff --git a/src/containers/tool/Cashier/spec.ts b/src/containers/tool/Cashier/spec.d.ts similarity index 100% rename from src/containers/tool/Cashier/spec.ts rename to src/containers/tool/Cashier/spec.d.ts diff --git a/src/containers/tool/CommunityTagSetter/spec.ts b/src/containers/tool/CommunityTagSetter/spec.d.ts similarity index 100% rename from src/containers/tool/CommunityTagSetter/spec.ts rename to src/containers/tool/CommunityTagSetter/spec.d.ts diff --git a/src/containers/tool/Drawer/spec.ts b/src/containers/tool/Drawer/spec.d.ts similarity index 100% rename from src/containers/tool/Drawer/spec.ts rename to src/containers/tool/Drawer/spec.d.ts diff --git a/src/containers/unit/Comments/spec.ts b/src/containers/unit/Comments/spec.d.ts similarity index 100% rename from src/containers/unit/Comments/spec.ts rename to src/containers/unit/Comments/spec.d.ts diff --git a/src/containers/unit/ModeLineMenu/spec.ts b/src/containers/unit/ModeLineMenu/spec.d.ts similarity index 100% rename from src/containers/unit/ModeLineMenu/spec.ts rename to src/containers/unit/ModeLineMenu/spec.d.ts diff --git a/src/spec/account.ts b/src/spec/account.d.ts similarity index 100% rename from src/spec/account.ts rename to src/spec/account.d.ts diff --git a/src/spec/article.ts b/src/spec/article.d.ts similarity index 100% rename from src/spec/article.ts rename to src/spec/article.d.ts diff --git a/src/spec/c11n.ts b/src/spec/c11n.d.ts similarity index 100% rename from src/spec/c11n.ts rename to src/spec/c11n.d.ts diff --git a/src/spec/community.ts b/src/spec/community.d.ts similarity index 100% rename from src/spec/community.ts rename to src/spec/community.d.ts diff --git a/src/spec/comp.ts b/src/spec/comp.d.ts similarity index 100% rename from src/spec/comp.ts rename to src/spec/comp.d.ts diff --git a/src/spec/emotion.ts b/src/spec/emotion.d.ts similarity index 100% rename from src/spec/emotion.ts rename to src/spec/emotion.d.ts diff --git a/src/spec/enhance.ts b/src/spec/enhance.d.ts similarity index 100% rename from src/spec/enhance.ts rename to src/spec/enhance.d.ts diff --git a/src/spec/gallery.ts b/src/spec/gallery.d.ts similarity index 100% rename from src/spec/gallery.ts rename to src/spec/gallery.d.ts diff --git a/src/spec/graphql.ts b/src/spec/graphql.d.ts similarity index 100% rename from src/spec/graphql.ts rename to src/spec/graphql.d.ts diff --git a/src/spec/metric.ts b/src/spec/metric.d.ts similarity index 100% rename from src/spec/metric.ts rename to src/spec/metric.d.ts diff --git a/src/spec/size.ts b/src/spec/size.d.ts similarity index 100% rename from src/spec/size.ts rename to src/spec/size.d.ts diff --git a/src/spec/store.ts b/src/spec/store.d.ts similarity index 100% rename from src/spec/store.ts rename to src/spec/store.d.ts diff --git a/src/spec/theme.ts b/src/spec/theme.d.ts similarity index 100% rename from src/spec/theme.ts rename to src/spec/theme.d.ts diff --git a/src/spec/thread.ts b/src/spec/thread.d.ts similarity index 100% rename from src/spec/thread.ts rename to src/spec/thread.d.ts diff --git a/src/spec/utils.ts b/src/spec/utils.d.ts similarity index 100% rename from src/spec/utils.ts rename to src/spec/utils.d.ts diff --git a/src/widgets/AvatarsRow/spec.ts b/src/widgets/AvatarsRow/spec.d.ts similarity index 100% rename from src/widgets/AvatarsRow/spec.ts rename to src/widgets/AvatarsRow/spec.d.ts diff --git a/src/widgets/CustomScroller/spec.ts b/src/widgets/CustomScroller/spec.d.ts similarity index 100% rename from src/widgets/CustomScroller/spec.ts rename to src/widgets/CustomScroller/spec.d.ts diff --git a/src/widgets/FiltersMenu/spec.ts b/src/widgets/FiltersMenu/spec.d.ts similarity index 100% rename from src/widgets/FiltersMenu/spec.ts rename to src/widgets/FiltersMenu/spec.d.ts diff --git a/src/widgets/NaviCatalog/spec.ts b/src/widgets/NaviCatalog/spec.d.ts similarity index 100% rename from src/widgets/NaviCatalog/spec.ts rename to src/widgets/NaviCatalog/spec.d.ts diff --git a/src/widgets/NoticeBar/spec.ts b/src/widgets/NoticeBar/spec.d.ts similarity index 100% rename from src/widgets/NoticeBar/spec.ts rename to src/widgets/NoticeBar/spec.d.ts diff --git a/src/widgets/PromotionList/spec.ts b/src/widgets/PromotionList/spec.d.ts similarity index 100% rename from src/widgets/PromotionList/spec.ts rename to src/widgets/PromotionList/spec.d.ts diff --git a/src/widgets/Select/spec.ts b/src/widgets/Select/spec.d.ts similarity index 100% rename from src/widgets/Select/spec.ts rename to src/widgets/Select/spec.d.ts diff --git a/src/widgets/TabBar/spec.ts b/src/widgets/TabBar/spec.d.ts similarity index 100% rename from src/widgets/TabBar/spec.ts rename to src/widgets/TabBar/spec.d.ts diff --git a/src/widgets/TeamList/spec.ts b/src/widgets/TeamList/spec.d.ts similarity index 100% rename from src/widgets/TeamList/spec.ts rename to src/widgets/TeamList/spec.d.ts diff --git a/src/widgets/TheAvatar/spec.ts b/src/widgets/TheAvatar/spec.d.ts similarity index 100% rename from src/widgets/TheAvatar/spec.ts rename to src/widgets/TheAvatar/spec.d.ts From ade71040150e1378cbf4939126949933f9f3215b Mon Sep 17 00:00:00 2001 From: mydearxym Date: Sat, 7 May 2022 11:03:38 +0800 Subject: [PATCH 06/11] refactor(icon): use local svg icon in menu --- .../HaveADrinkContent/styles/body/catalog.ts | 2 +- src/containers/tool/Drawer/AddOn/index.tsx | 2 +- src/containers/tool/Share/index.tsx | 60 +++------- src/containers/tool/Share/store.ts | 42 ++++++- src/containers/unit/Footer/ContactList.tsx | 2 +- .../unit/Footer/styles/contact_list.ts | 6 +- .../TagsBar/styles/desktop_view/folder.ts | 2 +- src/spec/index.ts | 1 + src/spec/utils.d.ts | 3 + src/widgets/Buttons/MenuButton/Menu.tsx | 9 +- src/widgets/Buttons/styles/icon_button.ts | 4 +- .../Buttons/styles/menu_button/menu.ts | 43 ++++--- src/widgets/Icons/index.ts | 113 ++++++++++++++++++ src/widgets/Icons/menu/Copy.tsx | 19 +++ src/widgets/Icons/{ => menu}/More.tsx | 0 src/widgets/Icons/menu/MoreDot.tsx | 18 +++ src/widgets/Icons/{ => menu}/MoreL.tsx | 0 src/widgets/Icons/social/Email.tsx | 4 +- src/widgets/Icons/social/WeChat.tsx | 18 +++ src/widgets/Icons/social/WeiChat.tsx | 18 --- tsconfig.json | 1 + utils/constant/svg.ts | 8 ++ 22 files changed, 285 insertions(+), 90 deletions(-) create mode 100644 src/widgets/Icons/index.ts create mode 100644 src/widgets/Icons/menu/Copy.tsx rename src/widgets/Icons/{ => menu}/More.tsx (100%) create mode 100644 src/widgets/Icons/menu/MoreDot.tsx rename src/widgets/Icons/{ => menu}/MoreL.tsx (100%) create mode 100644 src/widgets/Icons/social/WeChat.tsx delete mode 100644 src/widgets/Icons/social/WeiChat.tsx diff --git a/src/containers/content/HaveADrinkContent/styles/body/catalog.ts b/src/containers/content/HaveADrinkContent/styles/body/catalog.ts index 002278ac5..65ce3f9bc 100755 --- a/src/containers/content/HaveADrinkContent/styles/body/catalog.ts +++ b/src/containers/content/HaveADrinkContent/styles/body/catalog.ts @@ -3,7 +3,7 @@ import styled from 'styled-components' import type { TActive } from '@/spec' import Img from '@/Img' import css, { theme } from '@/utils/css' -import MoreSVG from '@/icons/More' +import MoreSVG from '@/icons/menu/More' import { Divider } from '@/widgets/Common' diff --git a/src/containers/tool/Drawer/AddOn/index.tsx b/src/containers/tool/Drawer/AddOn/index.tsx index d9504b8f7..1449a2bf2 100755 --- a/src/containers/tool/Drawer/AddOn/index.tsx +++ b/src/containers/tool/Drawer/AddOn/index.tsx @@ -23,7 +23,7 @@ const AddOn: FC = ({ type, articleNavi }) => { - {showShare && } + {showShare && } {showArticleNavi && } diff --git a/src/containers/tool/Share/index.tsx b/src/containers/tool/Share/index.tsx index 10a1fd945..6a0e6565a 100755 --- a/src/containers/tool/Share/index.tsx +++ b/src/containers/tool/Share/index.tsx @@ -7,13 +7,10 @@ import { FC, Fragment } from 'react' import { buildLog } from '@/utils/logger' import { bond } from '@/utils/mobx' -import { ICON } from '@/config' - +import { TSpace } from '@/spec' import MenuButton from '@/widgets/Buttons/MenuButton' import IconButton from '@/widgets/Buttons/IconButton' -import { MENU } from './constant' - import Panel from './Panel' import type { TStore } from './store' @@ -25,50 +22,31 @@ const log = buildLog('C:Share') type TProps = { share?: TStore testid?: string -} - -const ShareContainer: FC = ({ share: store, testid = 'share' }) => { + size?: number +} & TSpace + +const ShareContainer: FC = ({ + share: store, + testid = 'share', + ...restProps +}) => { useInit(store) - const { show, offsetLeft, siteShareType, linksData, viewingArticle } = store - - const menuOptions = [ - { - key: MENU.COPY_LINK, - icon: `${ICON}/edit/publish-pen.svg`, - title: '复制链接', - }, - { - key: MENU.EMAIL, - icon: `${ICON}/menu/hot.svg`, - title: 'Email', - }, - { - key: MENU.WECHAT, - icon: `${ICON}/menu/hot.svg`, - title: '微信', - qrLink: linksData.link, - }, - { - key: MENU.MORE, - icon: `${ICON}/menu/hot.svg`, - title: '更多', - }, - ] + const { + show, + offsetLeft, + menuOptions, + siteShareType, + linksData, + viewingArticle, + } = store return ( - + - {/* TODO: dynamic load */} + {/* TODO: dynamic condition load */} ( joinUS()}> - + diff --git a/src/containers/unit/Footer/styles/contact_list.ts b/src/containers/unit/Footer/styles/contact_list.ts index 8f01dc46f..e39d9a49b 100755 --- a/src/containers/unit/Footer/styles/contact_list.ts +++ b/src/containers/unit/Footer/styles/contact_list.ts @@ -4,7 +4,7 @@ import css, { theme } from '@/utils/css' import GithubSVG from '@/icons/GithubCat' import EmailSVG from '@/icons/social/Email' -import WeiChatSVG from '@/icons/social/WeiChat' +import WeChatSVG from '@/widgets/Icons/social/WeChat' export const Wrapper = styled.div` ${css.flex()}; @@ -25,7 +25,7 @@ const Email = styled(EmailSVG)` ${icon}; fill: ${theme('footer.text')}; ` -const WeiChat = styled(WeiChatSVG)` +const WeChat = styled(WeChatSVG)` ${icon}; fill: ${theme('footer.text')}; ` @@ -35,6 +35,6 @@ const Github = styled(GithubSVG)` ` export const Icon = { Email, - WeiChat, + WeChat, Github, } diff --git a/src/containers/unit/TagsBar/styles/desktop_view/folder.ts b/src/containers/unit/TagsBar/styles/desktop_view/folder.ts index 33262a195..4ddc22ab8 100644 --- a/src/containers/unit/TagsBar/styles/desktop_view/folder.ts +++ b/src/containers/unit/TagsBar/styles/desktop_view/folder.ts @@ -3,7 +3,7 @@ import styled from 'styled-components' import { TActive } from '@/spec' import css, { theme } from '@/utils/css' import ArrowSVG from '@/icons/ArrowSimple' -import MoreSVG from '@/icons/MoreL' +import MoreSVG from '@/icons/menu/MoreL' export const Wrapper = styled.div`` export const Header = styled.div` diff --git a/src/spec/index.ts b/src/spec/index.ts index c7aeeb498..fa00afcbb 100644 --- a/src/spec/index.ts +++ b/src/spec/index.ts @@ -81,6 +81,7 @@ export type { TASState, TTagMode, TMenuOption, + TIcon, } from './utils' export type { TGQLError } from './graphql' diff --git a/src/spec/utils.d.ts b/src/spec/utils.d.ts index e2475c6ed..5a630eaba 100644 --- a/src/spec/utils.d.ts +++ b/src/spec/utils.d.ts @@ -200,3 +200,6 @@ export type TMenuOption = { link?: string qrLink?: string } + +// for local SVG icon usage +export type TIcon = { size: number } & TActive diff --git a/src/widgets/Buttons/MenuButton/Menu.tsx b/src/widgets/Buttons/MenuButton/Menu.tsx index b0c13cbd5..5776bd637 100644 --- a/src/widgets/Buttons/MenuButton/Menu.tsx +++ b/src/widgets/Buttons/MenuButton/Menu.tsx @@ -5,6 +5,7 @@ import QRCode from 'qrcode.react' import type { TMenuOption } from '@/spec' import { ICON } from '@/config' +import { SVG } from '@/constant' import { cutRest } from '@/utils/helper' import { @@ -13,19 +14,21 @@ import { BlockA, QRWrapper, Item, - Icon, Title, LinkIcon, Divider, + getIcon, } from '../styles/menu_button/menu' // there is two types of block, normal block and link const OptionBlock = ({ item, onClick }) => { + const Icon = getIcon(item.icon || SVG.UPVOTE) + if (item.link) { return ( - + {cutRest(item.title, 50)} @@ -35,7 +38,7 @@ const OptionBlock = ({ item, onClick }) => { return ( - + {cutRest(item.title, 50)} diff --git a/src/widgets/Buttons/styles/icon_button.ts b/src/widgets/Buttons/styles/icon_button.ts index 0c99b7b74..c07b4abcc 100644 --- a/src/widgets/Buttons/styles/icon_button.ts +++ b/src/widgets/Buttons/styles/icon_button.ts @@ -21,8 +21,8 @@ import ArchivedIcon from '@/icons/article/Archived' import CollectionIcon from '@/icons/CollectionBookmark' import ShareIcon from '@/icons/Share' -import MoreLIcon from '@/icons/MoreL' -import MoreIcon from '@/icons/More' +import MoreLIcon from '@/icons/menu/MoreL' +import MoreIcon from '@/widgets/Icons/menu/More' // import CloseCross from '@/icons/CloseCross' // import AirBalloon from '@/icons/AirBalloon' diff --git a/src/widgets/Buttons/styles/menu_button/menu.ts b/src/widgets/Buttons/styles/menu_button/menu.ts index 559a13b11..be1ad135a 100644 --- a/src/widgets/Buttons/styles/menu_button/menu.ts +++ b/src/widgets/Buttons/styles/menu_button/menu.ts @@ -1,8 +1,11 @@ +import { FC } from 'react' import styled from 'styled-components' import Img from '@/Img' import css, { theme } from '@/utils/css' +import { getLocalSVG } from '@/icons' + export const Wrapper = styled.div<{ panelMinWidth: string }>` ${css.flexColumn('align-center')}; width: 100%; @@ -47,27 +50,39 @@ export const BlockA = styled(Block)` export const Item = styled.div` ${css.flex('align-center')}; ` -export const Icon = styled(Img)` - fill: ${theme('thread.articleDigest')}; - ${css.size(12)}; - margin-right: 10px; - opacity: 0.8; - ${Item}:hover & { - opacity: 1; - } -` export const Title = styled.div` color: ${theme('thread.articleTitle')}; font-size: 13px; ` -export const LinkIcon = styled(Img)` - ${css.size(10)}; - fill: ${theme('thread.articleDigest')}; - margin-left: 7px; -` export const Desc = styled.div` color: ${theme('thread.articleDigest')}; font-size: 11px; margin-top: 4px; ` +export const LinkIcon = styled(Img)` + ${css.size(10)}; + fill: ${theme('thread.articleDigest')}; + margin-left: 7px; +` + +export const styledIcon = (comp: FC): FC => { + return styled(comp)` + fill: ${theme('thread.articleDigest')}; + ${css.size(12)}; + margin-right: 10px; + opacity: 0.8; + + &:hover { + fill: ${theme('thread.extraInfo')}; + opacity: 1; + cursor: pointer; + } + + transition: all 0.2s; + ` +} + +export const getIcon = (type: string): FC => { + return getLocalSVG(type, styledIcon) +} diff --git a/src/widgets/Icons/index.ts b/src/widgets/Icons/index.ts new file mode 100644 index 000000000..5b9d0da0d --- /dev/null +++ b/src/widgets/Icons/index.ts @@ -0,0 +1,113 @@ +import { FC } from 'react' + +import { SVG } from '@/constant' + +import UpvoteIcon from './Upvote' +import EditPenIcon from './EditPen' +import LockIcon from './Lock' +import ExpandIcon from './Expand' +import FoldIcon from './Fold' +import Emotion from './Emotion' +import CommentIcon from './Comment' + +import ActivityIcon from './article/Activity' +import ArchivedIcon from './article/Archived' + +import CollectionIcon from './CollectionBookmark' +import ShareIcon from './Share' +import MoreLIcon from './menu/MoreL' +import MoreIcon from './menu/More' +import MoreDotIcon from './menu/MoreDot' + +// social +import WechatIcon from './social/WeChat' +import EmailIcon from './social/Email' + +// Menu +import CopyIcon from './menu/Copy' + +type TstyledFn = (comp: FC) => FC + +export const getLocalSVG = (type: string, styledFn: TstyledFn): FC => { + switch (type) { + case SVG.MOREL_DOT: { + return styledFn(MoreDotIcon) + } + + case SVG.COPY: { + return styledFn(CopyIcon) + } + + case SVG.EMAIL: { + return styledFn(EmailIcon) + } + + case SVG.WECHAT: { + return styledFn(WechatIcon) + } + + case SVG.UPVOTE: { + return styledFn(UpvoteIcon) + } + + case SVG.EDIT_PEN: { + return styledFn(EditPenIcon) + } + + case SVG.LOCK: { + return styledFn(LockIcon) + } + + case SVG.EXPAND: { + return styledFn(ExpandIcon) + } + + case SVG.FOLD: { + return styledFn(FoldIcon) + } + + case SVG.COLLECTION: { + return styledFn(CollectionIcon) + } + + case SVG.SHARE: { + return styledFn(ShareIcon) + } + + case SVG.ARCHIVED: { + return styledFn(ArchivedIcon) + } + + case SVG.ACTIVITY: { + return styledFn(ActivityIcon) + } + + case SVG.CLOSE: { + // @ts-ignore + return styledFn(CloseCross) + } + + case SVG.TO_TOP: { + // @ts-ignore + return styledFn(AirBalloon) + } + + case SVG.EMOTION: { + return styledFn(Emotion) + } + case SVG.COMMENT: { + return styledFn(CommentIcon) + } + case SVG.MOREL: { + return styledFn(MoreLIcon) + } + case SVG.MORE: { + return styledFn(MoreIcon) + } + default: { + return styledFn(UpvoteIcon) + } + } +} + +export const holder = 1 diff --git a/src/widgets/Icons/menu/Copy.tsx b/src/widgets/Icons/menu/Copy.tsx new file mode 100644 index 000000000..c4a91fe6d --- /dev/null +++ b/src/widgets/Icons/menu/Copy.tsx @@ -0,0 +1,19 @@ +import { memo, SVGProps } from 'react' + +const SVG = (props: SVGProps) => { + return ( + + + + + ) +} + +export default memo(SVG) diff --git a/src/widgets/Icons/More.tsx b/src/widgets/Icons/menu/More.tsx similarity index 100% rename from src/widgets/Icons/More.tsx rename to src/widgets/Icons/menu/More.tsx diff --git a/src/widgets/Icons/menu/MoreDot.tsx b/src/widgets/Icons/menu/MoreDot.tsx new file mode 100644 index 000000000..bff8fb5d2 --- /dev/null +++ b/src/widgets/Icons/menu/MoreDot.tsx @@ -0,0 +1,18 @@ +import { memo, SVGProps } from 'react' + +const More = (props: SVGProps) => { + return ( + + + + ) +} + +export default memo(More) diff --git a/src/widgets/Icons/MoreL.tsx b/src/widgets/Icons/menu/MoreL.tsx similarity index 100% rename from src/widgets/Icons/MoreL.tsx rename to src/widgets/Icons/menu/MoreL.tsx diff --git a/src/widgets/Icons/social/Email.tsx b/src/widgets/Icons/social/Email.tsx index 189fd7b96..fe566b548 100644 --- a/src/widgets/Icons/social/Email.tsx +++ b/src/widgets/Icons/social/Email.tsx @@ -10,8 +10,8 @@ const SVG = (props: SVGProps) => { height={200} {...props} > - - + + ) } diff --git a/src/widgets/Icons/social/WeChat.tsx b/src/widgets/Icons/social/WeChat.tsx new file mode 100644 index 000000000..298f662f4 --- /dev/null +++ b/src/widgets/Icons/social/WeChat.tsx @@ -0,0 +1,18 @@ +import { memo, SVGProps } from 'react' + +const SVG = (props: SVGProps) => { + return ( + + + + ) +} + +export default memo(SVG) diff --git a/src/widgets/Icons/social/WeiChat.tsx b/src/widgets/Icons/social/WeiChat.tsx deleted file mode 100644 index 4f201aa4d..000000000 --- a/src/widgets/Icons/social/WeiChat.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { memo, SVGProps } from 'react' - -const SVG = (props: SVGProps) => { - return ( - - - - ) -} - -export default memo(SVG) diff --git a/tsconfig.json b/tsconfig.json index 5156b1292..e5a2fc9a5 100755 --- a/tsconfig.json +++ b/tsconfig.json @@ -34,6 +34,7 @@ "@/spec": ["src/spec"], "@/Img": ["src/widgets/Img"], "@/SvgIcons/*": ["src/widgets/SvgIcons/*"], + "@/icons": ["src/widgets/Icons"], "@/icons/*": ["src/widgets/Icons/*"], "@/i18n": ["i18n"] }, diff --git a/utils/constant/svg.ts b/utils/constant/svg.ts index 84b002d34..035b72a98 100755 --- a/utils/constant/svg.ts +++ b/utils/constant/svg.ts @@ -24,7 +24,15 @@ const SVG = { // utils MORE: 'more', MOREL: 'more-l', + MOREL_DOT: 'more-dot', JOIN_EYE: 'JoinEye', + + // social + EMAIL: 'email', + WECHAT: 'wechat', + + // menu + COPY: 'copy', } export default SVG From 28eb05a945b3bb51534d7f6a213bb6eaa9cfd1a2 Mon Sep 17 00:00:00 2001 From: mydearxym Date: Sat, 7 May 2022 11:15:39 +0800 Subject: [PATCH 07/11] refactor(icon-button): use common get local svg --- src/spec/index.ts | 1 - src/spec/utils.d.ts | 3 - .../ArticlesFilter/styles/search_box.ts | 2 +- src/widgets/Buttons/IconButton.tsx | 4 +- src/widgets/Buttons/styles/icon_button.ts | 110 ++---------------- src/widgets/Icons/index.ts | 15 +-- src/widgets/Tag/styles/index.ts | 2 +- 7 files changed, 24 insertions(+), 113 deletions(-) diff --git a/src/spec/index.ts b/src/spec/index.ts index fa00afcbb..c7aeeb498 100644 --- a/src/spec/index.ts +++ b/src/spec/index.ts @@ -81,7 +81,6 @@ export type { TASState, TTagMode, TMenuOption, - TIcon, } from './utils' export type { TGQLError } from './graphql' diff --git a/src/spec/utils.d.ts b/src/spec/utils.d.ts index 5a630eaba..e2475c6ed 100644 --- a/src/spec/utils.d.ts +++ b/src/spec/utils.d.ts @@ -200,6 +200,3 @@ export type TMenuOption = { link?: string qrLink?: string } - -// for local SVG icon usage -export type TIcon = { size: number } & TActive diff --git a/src/widgets/ArticlesFilter/styles/search_box.ts b/src/widgets/ArticlesFilter/styles/search_box.ts index 84996a789..51ef81756 100644 --- a/src/widgets/ArticlesFilter/styles/search_box.ts +++ b/src/widgets/ArticlesFilter/styles/search_box.ts @@ -4,7 +4,7 @@ import css, { theme } from '@/utils/css' import Input from '@/widgets/Input' import SearchSVG from '@/icons/HeaderSearch' -import CloseSVG from '@/icons/CloseCross' +import CloseSVG from '@/widgets/Icons/CloseCross' export const Wrapper = styled.div` ${css.flex('align-center')}; diff --git a/src/widgets/Buttons/IconButton.tsx b/src/widgets/Buttons/IconButton.tsx index 9f7137423..d4efdccb3 100644 --- a/src/widgets/Buttons/IconButton.tsx +++ b/src/widgets/Buttons/IconButton.tsx @@ -10,7 +10,7 @@ import { Content, Icon, Hint, - getIcon, + getLocalIcon, HoverBg, } from './styles/icon_button' @@ -51,7 +51,7 @@ const IconButton: FC = ({ /> ) } else { - const LocalIcon = getIcon(icon || SVG.UPVOTE) + const LocalIcon = getLocalIcon(icon || SVG.UPVOTE) realIcon = ( diff --git a/src/widgets/Buttons/styles/icon_button.ts b/src/widgets/Buttons/styles/icon_button.ts index c07b4abcc..89978b7a4 100644 --- a/src/widgets/Buttons/styles/icon_button.ts +++ b/src/widgets/Buttons/styles/icon_button.ts @@ -1,42 +1,18 @@ import { FC } from 'react' -import dynamic from 'next/dynamic' import styled from 'styled-components' import type { TActive, TSpace } from '@/spec' -import { SVG } from '@/constant' import Img from '@/Img' import css, { theme } from '@/utils/css' -import UpvoteIcon from '@/icons/Upvote' -import EditPenIcon from '@/icons/EditPen' -import LockIcon from '@/icons/Lock' -import ExpandIcon from '@/icons/Expand' -import FoldIcon from '@/icons/Fold' -import Emotion from '@/icons/Emotion' -import CommentIcon from '@/icons/Comment' - -import ActivityIcon from '@/icons/article/Activity' -import ArchivedIcon from '@/icons/article/Archived' - -import CollectionIcon from '@/icons/CollectionBookmark' -import ShareIcon from '@/icons/Share' -import MoreLIcon from '@/icons/menu/MoreL' -import MoreIcon from '@/widgets/Icons/menu/More' +import { getLocalSVG } from '@/icons' // import CloseCross from '@/icons/CloseCross' // import AirBalloon from '@/icons/AirBalloon' import type { TProps as TIconButtonProps } from '../IconButton' -const CloseCross = dynamic(() => import('@/icons/CloseLight'), { - ssr: false, -}) - -const AirBalloon = dynamic(() => import('@/icons/AirBalloon'), { - ssr: false, -}) - type TWrapper = Omit export const Wrapper = styled.div` position: relative; @@ -72,6 +48,13 @@ export const HoverBg = styled.div<{ size: number }>` transition: 0.25s; ` +export const Hint = styled.div` + color: ${theme('thread.extraInfo')}; + text-align: center; + min-width: 80px; + padding: 5px; +` + type TIcon = { size: number; $dimWhenIdle: boolean } & TSpace & TActive export const Icon = styled(Img)` fill: ${({ $active }) => ($active ? '#00a59b' : theme('thread.extraInfo'))}; @@ -88,73 +71,7 @@ export const Icon = styled(Img)` transition: fill 0.2s; ` -export const getIcon = (type: string): FC => { - switch (type) { - case SVG.UPVOTE: { - return getStyledIcon(UpvoteIcon) - } - - case SVG.EDIT_PEN: { - return getStyledIcon(EditPenIcon) - } - - case SVG.LOCK: { - return getStyledIcon(LockIcon) - } - - case SVG.EXPAND: { - return getStyledIcon(ExpandIcon) - } - - case SVG.FOLD: { - return getStyledIcon(FoldIcon) - } - - case SVG.COLLECTION: { - return getStyledIcon(CollectionIcon) - } - - case SVG.SHARE: { - return getStyledIcon(ShareIcon) - } - - case SVG.ARCHIVED: { - return getStyledIcon(ArchivedIcon) - } - - case SVG.ACTIVITY: { - return getStyledIcon(ActivityIcon) - } - - case SVG.CLOSE: { - // @ts-ignore - return getStyledIcon(CloseCross) - } - - case SVG.TO_TOP: { - // @ts-ignore - return getStyledIcon(AirBalloon) - } - - case SVG.EMOTION: { - return getStyledIcon(Emotion) - } - case SVG.COMMENT: { - return getStyledIcon(CommentIcon) - } - case SVG.MOREL: { - return getStyledIcon(MoreLIcon) - } - case SVG.MORE: { - return getStyledIcon(MoreIcon) - } - default: { - return getStyledIcon(UpvoteIcon) - } - } -} - -export const getStyledIcon = (comp: FC): FC => { +const styledIcon = (comp: FC): FC => { return styled(comp)` fill: ${({ $active }) => ($active ? '#00a59b' : theme('thread.extraInfo'))}; ${({ size }) => css.size(size)}; @@ -171,9 +88,6 @@ export const getStyledIcon = (comp: FC): FC => { ` } -export const Hint = styled.div` - color: ${theme('thread.extraInfo')}; - text-align: center; - min-width: 80px; - padding: 5px; -` +export const getLocalIcon = (type: string): FC => { + return getLocalSVG(type, styledIcon) +} diff --git a/src/widgets/Icons/index.ts b/src/widgets/Icons/index.ts index 5b9d0da0d..20e126007 100644 --- a/src/widgets/Icons/index.ts +++ b/src/widgets/Icons/index.ts @@ -13,11 +13,11 @@ import CommentIcon from './Comment' import ActivityIcon from './article/Activity' import ArchivedIcon from './article/Archived' +import CloseCrossIcon from './CloseCross' +import AirBalloonIcon from './AirBalloon' import CollectionIcon from './CollectionBookmark' + import ShareIcon from './Share' -import MoreLIcon from './menu/MoreL' -import MoreIcon from './menu/More' -import MoreDotIcon from './menu/MoreDot' // social import WechatIcon from './social/WeChat' @@ -25,6 +25,9 @@ import EmailIcon from './social/Email' // Menu import CopyIcon from './menu/Copy' +import MoreLIcon from './menu/MoreL' +import MoreIcon from './menu/More' +import MoreDotIcon from './menu/MoreDot' type TstyledFn = (comp: FC) => FC @@ -83,13 +86,11 @@ export const getLocalSVG = (type: string, styledFn: TstyledFn): FC => { } case SVG.CLOSE: { - // @ts-ignore - return styledFn(CloseCross) + return styledFn(CloseCrossIcon) } case SVG.TO_TOP: { - // @ts-ignore - return styledFn(AirBalloon) + return styledFn(AirBalloonIcon) } case SVG.EMOTION: { diff --git a/src/widgets/Tag/styles/index.ts b/src/widgets/Tag/styles/index.ts index f42850d1a..18e609c06 100755 --- a/src/widgets/Tag/styles/index.ts +++ b/src/widgets/Tag/styles/index.ts @@ -3,7 +3,7 @@ import styled from 'styled-components' import type { TTestable } from '@/spec' import css, { theme } from '@/utils/css' -import CloseSVG from '@/icons/CloseCross' +import CloseSVG from '@/widgets/Icons/CloseCross' export const Wrapper = styled.div.attrs(({ testid }: TTestable) => ({ 'data-test-id': testid, From 6f46dd6a7989482df962eee8b8616aec11207fef Mon Sep 17 00:00:00 2001 From: mydearxym Date: Sat, 7 May 2022 12:35:34 +0800 Subject: [PATCH 08/11] refactor(toast): options & theme adjust --- .../layout/ThemePalette/GlobalStyle.ts | 18 +++- src/containers/tool/Drawer/AddOn/index.tsx | 2 +- src/containers/tool/Share/index.tsx | 4 +- src/containers/tool/Share/logic.ts | 11 ++- src/spec/index.ts | 1 + src/spec/utils.d.ts | 15 +++- src/stores/RootStore/index.ts | 11 ++- src/stores/ThemeStore/index.ts | 7 +- utils/constant/index.ts | 1 + utils/constant/toast.ts | 15 ++++ utils/helper.ts | 3 +- utils/themes/skins/github.ts | 7 +- utils/toast.ts | 88 +++++++++++++------ 13 files changed, 135 insertions(+), 48 deletions(-) create mode 100644 utils/constant/toast.ts diff --git a/src/containers/layout/ThemePalette/GlobalStyle.ts b/src/containers/layout/ThemePalette/GlobalStyle.ts index 2257c09b1..7f59bb771 100755 --- a/src/containers/layout/ThemePalette/GlobalStyle.ts +++ b/src/containers/layout/ThemePalette/GlobalStyle.ts @@ -39,13 +39,25 @@ const GlobalStyle = createGlobalStyle` background-color: ${theme('toast.bg')} !important; min-height: 36px !important; padding: 2px 45px 0px 0 !important; + box-shadow: none; + + &:after { + box-shadow: ${theme('toast.boxShadow')}; + } + } + /* make sure the toast will not show in custom bg */ + .iziToast-wrapper { + align-items: center; + } + .iziToast-capsule { + /* general content page width, adjuust if need */ + max-width: 1380px; + padding-left: 30px; + padding-right: 30px; } .iziToast > .iziToast-body .iziToast-title { color: ${theme('toast.title')} !important; } - .iziToast-wrapper-topRight { - top: 25px !important; - } .iziToast > .iziToast-body .iziToast-message { color: ${theme('toast.message')} !important; } diff --git a/src/containers/tool/Drawer/AddOn/index.tsx b/src/containers/tool/Drawer/AddOn/index.tsx index 1449a2bf2..3e088e5bd 100755 --- a/src/containers/tool/Drawer/AddOn/index.tsx +++ b/src/containers/tool/Drawer/AddOn/index.tsx @@ -23,7 +23,7 @@ const AddOn: FC = ({ type, articleNavi }) => { - {showShare && } + {showShare && } {showArticleNavi && } diff --git a/src/containers/tool/Share/index.tsx b/src/containers/tool/Share/index.tsx index 6a0e6565a..ee325f469 100755 --- a/src/containers/tool/Share/index.tsx +++ b/src/containers/tool/Share/index.tsx @@ -8,6 +8,8 @@ import { buildLog } from '@/utils/logger' import { bond } from '@/utils/mobx' import { TSpace } from '@/spec' +import { SVG } from '@/constant' + import MenuButton from '@/widgets/Buttons/MenuButton' import IconButton from '@/widgets/Buttons/IconButton' @@ -43,7 +45,7 @@ const ShareContainer: FC = ({ return ( - + {/* TODO: dynamic condition load */} diff --git a/src/containers/tool/Share/logic.ts b/src/containers/tool/Share/logic.ts index 16bb5d8f8..7ab00bdf9 100755 --- a/src/containers/tool/Share/logic.ts +++ b/src/containers/tool/Share/logic.ts @@ -2,7 +2,7 @@ import { useEffect } from 'react' // import { } from 'ramda' import asyncSuit from '@/utils/async' -import { openShareWindow } from '@/utils/helper' +import { openShareWindow, toast } from '@/utils/helper' import { buildLog } from '@/utils/logger' import { SHARE_TYPE, MENU } from './constant' @@ -68,6 +68,8 @@ export const handleMenu = (key: TMenu): void => { switch (key) { case MENU.COPY_LINK: { console.log('do copy link') + + toast('success', '已复制到剪切板', '' as string, 'topCenter', 2000) return } @@ -76,8 +78,13 @@ export const handleMenu = (key: TMenu): void => { return } + case MENU.EMAIL: { + return toPlatform(SHARE_TYPE.EMAIL) + } + default: { - console.log('do nothing') + // eslint-disable-next-line no-useless-return + return } } } diff --git a/src/spec/index.ts b/src/spec/index.ts index c7aeeb498..ccadf74ae 100644 --- a/src/spec/index.ts +++ b/src/spec/index.ts @@ -81,6 +81,7 @@ export type { TASState, TTagMode, TMenuOption, + TToastOption, } from './utils' export type { TGQLError } from './graphql' diff --git a/src/spec/utils.d.ts b/src/spec/utils.d.ts index e2475c6ed..f9714b03d 100644 --- a/src/spec/utils.d.ts +++ b/src/spec/utils.d.ts @@ -156,9 +156,6 @@ export type TTechStackCategory = export type TCommunitySetterStyle = 'normal' | TTechStackCategory -export type TToastType = 'info' | 'error' -export type TToastPos = 'topCenter' - export type TUserActivity = { id?: TID insertedAt?: string @@ -200,3 +197,15 @@ export type TMenuOption = { link?: string qrLink?: string } + +export type TToastType = 'info' | 'error' | 'success' +export type TToastPos = 'topCenter' | 'topRight' + +export type TToastOption = { + title: string + msg?: string + message?: string + progressBarColor?: string + position?: TToastPos + duration?: number +} diff --git a/src/stores/RootStore/index.ts b/src/stores/RootStore/index.ts index 4ea00e252..ad803a665 100755 --- a/src/stores/RootStore/index.ts +++ b/src/stores/RootStore/index.ts @@ -9,9 +9,9 @@ import { types as T, Instance } from 'mobx-state-tree' import { merge, pickBy } from 'ramda' -import type { TAccount, TRoute, TThread, TArticle } from '@/spec' +import type { TAccount, TRoute, TThread, TArticle, TToastOption } from '@/spec' -import { EVENT } from '@/constant' +import { EVENT, DEFAULT_TOAST_OPTIONS } from '@/constant' import { markStates } from '@/utils/mobx' import { toast, toastBarColor } from '@/utils/toast' import { themeSkins } from '@/utils/themes' @@ -260,11 +260,14 @@ const rootStore = T.model({ self.footer.closeSponsor() self.cashier.callCashier(opt) }, - toast(type, options = {}): void { + toast(type, options: TToastOption = DEFAULT_TOAST_OPTIONS): void { const themeData = themeSkins[self.theme.curTheme] const progressBarColor = toastBarColor(type, themeData) - const toastOpt = merge(options, { progressBarColor }) + const toastOpt = merge(options, { + progressBarColor, + duration: options.duration || 3000, + }) toast[type](toastOpt) }, authWarning(options = {}): void { diff --git a/src/stores/ThemeStore/index.ts b/src/stores/ThemeStore/index.ts index 9a11d152e..cbd8aa1ac 100755 --- a/src/stores/ThemeStore/index.ts +++ b/src/stores/ThemeStore/index.ts @@ -6,7 +6,7 @@ import { types as T, getParent, Instance } from 'mobx-state-tree' import { keys, merge } from 'ramda' -import type { TRootStore, TThemeName, TMembership } from '@/spec' +import type { TRootStore, TThemeName, TMembership, TToastOption } from '@/spec' import { DEFAULT_THEME } from '@/config' import { markStates } from '@/utils/mobx' @@ -47,7 +47,10 @@ export const ThemeStore = T.model('ThemeStore', { title: '保存主题设置失败', msg: '仅支持高级会员以打赏用户', } - root.toast('warn', merge({ position: 'topCenter' }, options)) + root.toast( + 'warn', + merge({ position: 'topCenter' }, options) as TToastOption, + ) }, changeTheme(name: TThemeName): void { self.curTheme = name diff --git a/utils/constant/index.ts b/utils/constant/index.ts index e9803e4a2..2cf0149f4 100755 --- a/utils/constant/index.ts +++ b/utils/constant/index.ts @@ -34,6 +34,7 @@ export { COMMUNITY_MAP_ALIAS } from './alias' export { AS_STATE, AS_TYPE } from './article_state' +export { default as DEFAULT_TOAST_OPTIONS } from './toast' /* some svg icon are sensitive to fill color */ /* some community svg need fill color, like city etc.. */ export const NON_FILL_COMMUNITY = ['javascript'] diff --git a/utils/constant/toast.ts b/utils/constant/toast.ts new file mode 100644 index 000000000..d583be0f5 --- /dev/null +++ b/utils/constant/toast.ts @@ -0,0 +1,15 @@ +import type { TToastPos } from '@/spec' + +const DEFAULT_TOAST_OPTIONS = { + title: 'toast', + message: '', + msg: '', + position: 'topCenter' as TToastPos, + timeout: 3000, + icon: '', + progressBarColor: 'yellogreen', + displayMode: 'replace', + transitionIn: 'fadeInDown', +} + +export default DEFAULT_TOAST_OPTIONS diff --git a/utils/helper.ts b/utils/helper.ts index 8d67feab4..ff452db1d 100755 --- a/utils/helper.ts +++ b/utils/helper.ts @@ -269,8 +269,9 @@ export const toast = ( title: string, msg: string, position: TToastPos = 'topCenter', + duration = 3000, ): void => { - send(EVENT.TOAST, { type, title, msg, position }) + send(EVENT.TOAST, { type, title, msg, position, duration }) } /** diff --git a/utils/themes/skins/github.ts b/utils/themes/skins/github.ts index 6afa9e2cf..981a34f79 100755 --- a/utils/themes/skins/github.ts +++ b/utils/themes/skins/github.ts @@ -353,13 +353,14 @@ const github = { }, toast: { bg: contentBoxBg, - border: descText, + border, message: descText, - title: primaryColor, - infoBar: primaryColor, + title: threadTitle, + infoBar: '#E8F0FE', errorBar: '#f59381', successBar: '#9dd035', warnBar: '#f5a30e', + boxShadow: '-3px 5px 20px 0px rgb(155 155 155 / 20%)', }, mailBox: { headHightBg: '#e8f9f8', diff --git a/utils/toast.ts b/utils/toast.ts index a1baeb2e8..8ce3fcc3b 100755 --- a/utils/toast.ts +++ b/utils/toast.ts @@ -4,52 +4,84 @@ import { merge, reject } from 'ramda' -import { TThemeMap } from '@/spec' +import { TThemeMap, TToastOption } from '@/spec' +import { DEFAULT_TOAST_OPTIONS } from '@/constant' + import { Global } from './helper' import { nilOrEmpty } from './validator' type TToastType = 'success' | 'error' | 'warn' -type TToastOption = { - title: string - msg: string - progressBarColor: string - position: 'bottom' | 'top' -} - const checkValid = () => (Global as any).iziToast || false -const defaultOptions = { - title: 'coderplanets', - message: 'is Awesome!', - position: 'topRight', - timeout: 5000, - icon: '', - progressBarColor: 'yellogreen', - displayMode: 'replace', - transitionIn: 'fadeInDown', -} - const doNotify = (options = {}): void => { if (!checkValid()) { return } const { iziToast } = Global as any - iziToast.show(merge(defaultOptions, reject(nilOrEmpty, options))) + iziToast.show(merge(DEFAULT_TOAST_OPTIONS, reject(nilOrEmpty, options))) } export const toast = { - info: ({ title, msg, progressBarColor, position }: TToastOption): void => { - doNotify({ title, message: msg, progressBarColor, position }) + info: ({ + title, + msg, + progressBarColor, + position, + duration, + }: TToastOption): void => { + doNotify({ + title, + message: msg, + progressBarColor, + position, + timeout: duration, + }) }, - error: ({ title, msg, progressBarColor, position }: TToastOption): void => { - doNotify({ title, message: msg, progressBarColor, position }) + error: ({ + title, + msg, + progressBarColor, + position, + duration, + }: TToastOption): void => { + doNotify({ + title, + message: msg, + progressBarColor, + position, + timeout: duration, + }) }, - success: ({ title, msg, progressBarColor, position }: TToastOption): void => { - doNotify({ title, message: msg, progressBarColor, position }) + success: ({ + title, + msg, + progressBarColor, + position, + duration, + }: TToastOption): void => { + doNotify({ + title, + message: msg, + progressBarColor, + position, + timeout: duration, + }) }, - warn: ({ title, msg, progressBarColor, position }: TToastOption): void => { - doNotify({ title, message: msg, progressBarColor, position }) + warn: ({ + title, + msg, + progressBarColor, + position, + duration, + }: TToastOption): void => { + doNotify({ + title, + message: msg, + progressBarColor, + position, + timeout: duration, + }) }, } From 0156d2ffd53ee95448caca834bb130d5b67ec831 Mon Sep 17 00:00:00 2001 From: mydearxym Date: Sat, 7 May 2022 12:39:30 +0800 Subject: [PATCH 09/11] refactor(share): copy to in logic --- src/containers/tool/Share/logic.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/containers/tool/Share/logic.ts b/src/containers/tool/Share/logic.ts index 7ab00bdf9..6e67b2e4e 100755 --- a/src/containers/tool/Share/logic.ts +++ b/src/containers/tool/Share/logic.ts @@ -1,5 +1,5 @@ import { useEffect } from 'react' -// import { } from 'ramda' +import copy from 'copy-to-clipboard' import asyncSuit from '@/utils/async' import { openShareWindow, toast } from '@/utils/helper' @@ -65,10 +65,10 @@ export const toPlatform = (type: string): void => { } export const handleMenu = (key: TMenu): void => { + const { linksData } = store switch (key) { case MENU.COPY_LINK: { - console.log('do copy link') - + copy(linksData.link) toast('success', '已复制到剪切板', '' as string, 'topCenter', 2000) return } From 7aaea73f3b0b03502412d930f0cf967564ed9fc3 Mon Sep 17 00:00:00 2001 From: mydearxym Date: Sat, 7 May 2022 14:04:24 +0800 Subject: [PATCH 10/11] refactor(share): add to post page & adjust style --- .../tool/ArticleSticker/LeftSticker/index.tsx | 5 ++--- .../tool/ArticleSticker/styles/left_sticker/index.ts | 2 +- src/containers/tool/Drawer/AddOn/index.tsx | 2 +- src/containers/tool/Share/index.tsx | 12 ++++-------- src/containers/tool/Share/store.ts | 1 - src/widgets/Navigator/styles/index.ts | 2 +- utils/css/metric.ts | 4 ++-- 7 files changed, 11 insertions(+), 17 deletions(-) diff --git a/src/containers/tool/ArticleSticker/LeftSticker/index.tsx b/src/containers/tool/ArticleSticker/LeftSticker/index.tsx index 86ac3972a..22c7c10c1 100644 --- a/src/containers/tool/ArticleSticker/LeftSticker/index.tsx +++ b/src/containers/tool/ArticleSticker/LeftSticker/index.tsx @@ -2,8 +2,7 @@ import { FC } from 'react' import type { TArticle } from '@/spec' -import { SVG } from '@/constant' -import IconButton from '@/widgets/Buttons/IconButton' +import Share from '@/containers/tool/Share' import Upvote from '@/widgets/Upvote' import { @@ -45,7 +44,7 @@ const LeftSticker: FC = ({ onAction={handleUpvote} /> - + ) diff --git a/src/containers/tool/ArticleSticker/styles/left_sticker/index.ts b/src/containers/tool/ArticleSticker/styles/left_sticker/index.ts index ee2d0d95c..b1ba2005e 100644 --- a/src/containers/tool/ArticleSticker/styles/left_sticker/index.ts +++ b/src/containers/tool/ArticleSticker/styles/left_sticker/index.ts @@ -18,7 +18,7 @@ export const Wrapper = styled(FadeToggle).attrs(({ testid }: TTestable) => ({ font-size: 13px; ${css.media.desktopL` - left: 18%; + left: 22%; `} ${css.media.laptopL` diff --git a/src/containers/tool/Drawer/AddOn/index.tsx b/src/containers/tool/Drawer/AddOn/index.tsx index 3e088e5bd..e386ac29a 100755 --- a/src/containers/tool/Drawer/AddOn/index.tsx +++ b/src/containers/tool/Drawer/AddOn/index.tsx @@ -23,7 +23,7 @@ const AddOn: FC = ({ type, articleNavi }) => { - {showShare && } + {showShare && } {showArticleNavi && } diff --git a/src/containers/tool/Share/index.tsx b/src/containers/tool/Share/index.tsx index ee325f469..d432f27d8 100755 --- a/src/containers/tool/Share/index.tsx +++ b/src/containers/tool/Share/index.tsx @@ -25,22 +25,18 @@ type TProps = { share?: TStore testid?: string size?: number + offsetLeft?: string } & TSpace const ShareContainer: FC = ({ share: store, testid = 'share', + offsetLeft = 'none', ...restProps }) => { useInit(store) - const { - show, - offsetLeft, - menuOptions, - siteShareType, - linksData, - viewingArticle, - } = store + + const { show, menuOptions, siteShareType, linksData, viewingArticle } = store return ( diff --git a/src/containers/tool/Share/store.ts b/src/containers/tool/Share/store.ts index 622d602a7..5c0dfeae2 100755 --- a/src/containers/tool/Share/store.ts +++ b/src/containers/tool/Share/store.ts @@ -27,7 +27,6 @@ const log = buildLog('S:Share') const Share = T.model('Share', { show: T.optional(T.boolean, false), - offsetLeft: T.optional(T.string, 'none'), siteShareType: T.optional( T.enumeration(values(SITE_SHARE_TYPE)), SITE_SHARE_TYPE.LINKS, diff --git a/src/widgets/Navigator/styles/index.ts b/src/widgets/Navigator/styles/index.ts index 03e7079f0..de0de5378 100755 --- a/src/widgets/Navigator/styles/index.ts +++ b/src/widgets/Navigator/styles/index.ts @@ -23,7 +23,7 @@ export const Logo = styled(SiteLogo)` ` export const LogoLink = styled.div` position: absolute; - left: -240px; + left: -220px; top: 15px; ${css.flex('align-center')}; diff --git a/utils/css/metric.ts b/utils/css/metric.ts index 837691342..62b0a9005 100644 --- a/utils/css/metric.ts +++ b/utils/css/metric.ts @@ -34,8 +34,8 @@ export const WIDTH = { CONTENT_OFFSET: '290px', CONTENT_OFFSET_LAPTOPL: '260px', CONTENT_OFFSET_DESKTOPL: '400px', - STICKER: '260px', - STICKER_LAPTOPL: '240px', + STICKER: '240px', + STICKER_LAPTOPL: '220px', }, BLOG_ARTICLE: { PAGE: '1460px', From 38cf445be9b507a29450d940142bf3b52e22072a Mon Sep 17 00:00:00 2001 From: mydearxym Date: Sat, 7 May 2022 14:13:24 +0800 Subject: [PATCH 11/11] refactor(share): add condition load for panel --- src/containers/tool/Share/index.tsx | 32 +++++++++++++++++++---------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/containers/tool/Share/index.tsx b/src/containers/tool/Share/index.tsx index d432f27d8..2eb17202e 100755 --- a/src/containers/tool/Share/index.tsx +++ b/src/containers/tool/Share/index.tsx @@ -2,7 +2,8 @@ * Share */ -import { FC, Fragment } from 'react' +import { FC, Fragment, useState, useEffect } from 'react' +import dynamic from 'next/dynamic' import { buildLog } from '@/utils/logger' import { bond } from '@/utils/mobx' @@ -13,8 +14,6 @@ import { SVG } from '@/constant' import MenuButton from '@/widgets/Buttons/MenuButton' import IconButton from '@/widgets/Buttons/IconButton' -import Panel from './Panel' - import type { TStore } from './store' import { useInit, handleMenu } from './logic' @@ -28,6 +27,8 @@ type TProps = { offsetLeft?: string } & TSpace +let Panel = null + const ShareContainer: FC = ({ share: store, testid = 'share', @@ -37,6 +38,14 @@ const ShareContainer: FC = ({ useInit(store) const { show, menuOptions, siteShareType, linksData, viewingArticle } = store + const [panelLoad, setPanelLoad] = useState(false) + + useEffect(() => { + if (show) { + Panel = dynamic(() => import('./Panel'), { ssr: false }) + setPanelLoad(true) + } + }, [show, panelLoad]) return ( @@ -44,14 +53,15 @@ const ShareContainer: FC = ({ - {/* TODO: dynamic condition load */} - + {panelLoad && ( + + )} ) }