packages-rc/console-base-rc-dialog/stories/demo-special/update/content/index.tsx (86 lines of code) (raw):

import React, { useState, useCallback } from 'react'; import { ChoiceItem, H3, P, RadioGroup } from '@alicloud/demo-rc-elements'; import Input from '@alicloud/console-base-rc-input'; import { DialogMode, DialogSize, useDialog } from '../../../../src'; type TMode = undefined | DialogMode; type TSize = undefined | DialogSize; const modeItems: ChoiceItem<TMode>[] = [{ value: undefined, label: 'undefined' }, ...Object.values<DialogMode>(DialogMode).map(v => ({ value: v, label: v }))]; const sizeItems: ChoiceItem<TSize>[] = [{ value: undefined, label: 'undefined' }, ...Object.values<DialogSize>(DialogSize).map(v => ({ value: v, label: v }))]; export default function Content(): JSX.Element { const { update } = useDialog(); const [stateMode, setStateMode] = useState<DialogMode | undefined>(undefined); const [stateSize, setStateSize] = useState<DialogSize | undefined>(undefined); const handleUpdateTitle = useCallback((value: string) => { update({ title: value.trim() ? `更新了 title - ${value}` : undefined }); }, [update]); const handleUpdateButtons = useCallback((value: string) => { update({ buttons: value.trim() ? value.trim().split(',') : undefined }); }, [update]); const handleUpdateMode = useCallback((mode: undefined | DialogMode) => { setStateMode(mode); update({ mode }); }, [update]); const handleUpdateSize = useCallback((size: undefined | DialogSize) => { setStateSize(size); update({ size }); }, [update]); return <> <H3>update title</H3> <Input {...{ block: true, onChange: handleUpdateTitle }} /> <H3>update buttons</H3> <Input {...{ block: true, placeholder: '以逗号分隔模拟按钮列表', onChange: handleUpdateButtons }} /> <H3>update mode</H3> <P><span role="img" aria-label="BUG">🐞</span> BUG 切换会时会暂时被压</P> <RadioGroup<TMode> {...{ items: modeItems, value: stateMode, onChange: handleUpdateMode }} /> <H3>update size</H3> <RadioGroup<TSize> {...{ items: sizeItems, value: stateSize, onChange: handleUpdateSize }} /> </>; }