packages-rc/console-base-rc-dialog/stories/demo-special/focus/content/index.tsx (82 lines of code) (raw):
import React from 'react';
import styled from 'styled-components';
import {
P,
Button
} from '@alicloud/demo-rc-elements';
import {
mixinInputReset,
mixinInputBg,
mixinInputBorder,
mixinInputText,
mixinInputTextHover,
mixinInputBgHover,
mixinInputBorderHover,
mixinInputTextFocus,
mixinInputBgFocus,
mixinInputBorderFocus
} from '@alicloud/console-base-theme';
import {
open,
useDialog
} from '../../../../src';
const ScContent = styled.div`
input[type=text],
input[type=number],
input[type=search],
textarea {
padding: 4px;
line-height: 2;
${mixinInputReset}
${mixinInputText}
${mixinInputBg}
${mixinInputBorder}
&:hover {
${mixinInputTextHover}
${mixinInputBgHover}
${mixinInputBorderHover}
}
&:focus {
${mixinInputTextFocus}
${mixinInputBgFocus}
${mixinInputBorderFocus}
}
}
`;
function openAnother(): void {
open({
title: '另一个 Dialog',
content: <>
<input type="text" />
</>,
buttons: ['button', 'button 2']
});
}
export default function Content(): JSX.Element {
const {
focus
} = useDialog();
return <ScContent>
<div>
<a href="//www.aliyun.com">链接</a>
<input type="text" />
<input type="number" />
<input type="search" />
<input type="color" />
<input type="radio" />
<input type="checkbox" />
<textarea placeholder="textarea" />
<select>
<option value="">nothing</option>
</select>
<button>按钮</button>
</div>
{/* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */}
<P>也有 <strong tabIndex={0}>带 tabIndex</strong> 的元素。</P>
<P>默认表单输入元素优先得到焦点。</P>
<P>
当前 Dialog 会打开另外一个 Dialog,要保证另外一个 Dialog 消失后,当前 Dialog 可以自动获得焦点。
<Button onClick={openAnother}>open another</Button>
</P>
<Button onClick={focus}>重置焦点(可用于当内容组件异步产生变化之后)</Button>
</ScContent>;
}