packages-rc/console-base-rc-micro-browser/stories/demo-default/index.tsx (121 lines of code) (raw):
import React, {
useState,
useCallback
} from 'react';
import styled from 'styled-components';
import update from 'immutability-helper';
import {
ChoiceItem,
H1,
H2,
Button,
InputSwitch,
RadioGroup,
LongArticle
} from '@alicloud/demo-rc-elements';
import ThemeSwitcher from '@alicloud/console-base-demo-helper-theme-switcher';
import {
TabProps
} from '@alicloud/console-base-rc-tabs';
import TopNav from '@alicloud/console-base-rc-top-nav';
import SidePanel from '@alicloud/console-base-rc-side-panel';
import MicroBrowser, {
MicroBrowserMode,
MicroBrowserTabsItemProps
} from '../../src';
import PkgInfo from '../pkg-info';
const ScMinimizedTray = styled.div`
position: fixed;
right: 64px;
bottom: 16px;
border: 8px solid rgba(99, 0, 126, 0.33);
border-radius: 50%;
box-sizing: border-box;
background-clip: content-box;
background-color: #fff;
width: 52px;
height: 52px;
line-height: 36px;
text-align: center;
color: #969;
transition: all linear 0.2s;
&:hover {
border-color: rgba(99, 0, 126, 0.5);
color: #c3c;
}
&:before {
content: 'Tray';
font-size: 0.8em;
}
`;
const TAB_ITEMS: MicroBrowserTabsItemProps[] = [{
key: 'default-1',
title: '哥特之皇 Lacrimosa',
content: <LongArticle />,
closable: true
}];
const MODE_CHOICES: ChoiceItem<MicroBrowserMode>[] = Object.keys(MicroBrowserMode).map((k): ChoiceItem<MicroBrowserMode> => ({
label: k,
value: MicroBrowserMode[k as keyof typeof MicroBrowserMode]
}));
let addIndex = 1;
export default function DemoDefault(): JSX.Element {
const [stateTabs, setStateTabs] = useState<MicroBrowserTabsItemProps[]>(TAB_ITEMS);
const [stateMode, setStateMode] = useState<MicroBrowserMode | undefined>(undefined);
const [stateMinimizable, setStateMinimizable] = useState(false);
const [stateVisible, setStateVisible] = useState(true);
const handleTabClose = useCallback((_tab: TabProps, toTabs: TabProps[]) => setStateTabs(toTabs), [setStateTabs]);
const handleAdd = useCallback(() => {
const key = `ADD-${addIndex++}`;
setStateTabs(update(stateTabs, {
$push: [{
key,
title: key,
content: <>{new Date().toString()}</>,
closable: true
}]
}));
}, [stateTabs, setStateTabs]);
return <>
<ThemeSwitcher />
<PkgInfo />
<MicroBrowser {...{
mode: stateMode,
tabs: {
tabs: stateTabs,
onTabClose: handleTabClose
},
// widthDefault: 400,
// widthMin: 200,
// widthMax: 600,
// heightDefault: 200,
// heightMin: 100,
// heightMax: 320,
// widthDefaultPinned: 560,
// widthMinPinned: 200,
// widthMaxPinned: 800,
affix: '#the-minimize-to-node-for-demo',
visible: stateVisible,
minimizable: stateMinimizable,
onModeChange: setStateMode,
onClose: () => setStateVisible(false)
}} />
<TopNav />
<SidePanel />
<H1>props</H1>
<RadioGroup<MicroBrowserMode> {...{
label: 'props.mode',
items: MODE_CHOICES,
value: stateMode,
onChange: setStateMode
}} />
<InputSwitch {...{
label: 'props.visible',
value: stateVisible,
onChange: setStateVisible
}} />
<InputSwitch {...{
label: 'props.minimizable',
value: stateMinimizable,
onChange: setStateMinimizable
}} />
<H2>添加 Tab</H2>
<div>
<Button onClick={handleAdd}>ADD</Button>
</div>
<H2>以下内容仅用来撑高</H2>
<LongArticle />
<ScMinimizedTray id="the-minimize-to-node-for-demo" />
</>;
}