import React from 'react'; import * as rr from 'react-router-dom'; import cls from 'classnames/bind'; import styles from './DemoPage.module.scss'; // import {useParams} from '@wfh/doc-ui-common/client/animation/AnimatableRoutes'; import {Ripple} from '@wfh/material-components-react/client/Ripple'; import {useAppLayout} from '@wfh/doc-ui-common/client/components/appLayout.state'; import {Button} from '@wfh/material-components-react/client/Button'; import {IconButton} from '@wfh/material-components-react/client/IconButton'; import {Palette} from '../../components/color/Palette'; import * as op from 'rxjs/operators'; import {useRtk} from '@wfh/redux-toolkit-observable/es/react-redux-helper'; import {sliceOptionFactory, epicFactory, DemoPageObservableProps as Props} from './demoPageSlice'; // const cx = cls.bind(styles); // const cls = cx('DemoPage'); // const rippleContentCls = cx('rippleContent'); type DemoPageProps = Props; const DemoPage: React.FC = function(props) { const layout = useAppLayout(); const [layoutState, setLayoutState] = React.useState(layout?.state$.getValue()); useRtk(sliceOptionFactory, props, epicFactory); const turnOnLoading = React.useCallback(() => { layout?.actionDispatcher.setLoadingVisible(true); }, [ layout?.actionDispatcher]); const turnOffLoading = React.useCallback(() => { layout?.actionDispatcher.setLoadingVisible(false); }, [ layout?.actionDispatcher]); React.useEffect(() => { let destroy: undefined | (() => void); if (layout) { setTimeout(() => layout.actionDispatcher.updateBarTitle('Demo'), 0); const sub = layout.state$.pipe( // op.distinctUntilChanged(), op.tap(s => setLayoutState(s)) ).subscribe(); destroy = () => sub.unsubscribe(); } if (destroy) return destroy; }, [layout]); return
Ripple effect
"Dark" Ripple in light background "Light" Ripple in dark background
Animation effect of switching routes
Buttons
Top loading bar
Number of on-going "loading" request: {layoutState ? layoutState.showTopLoadingReqsCount : ''}
Colors
; }; export {DemoPage};