Slight redesign of Shortcuts form

Yeah, still no Edit
This commit is contained in:
Lim Chee Aun 2023-03-01 17:48:52 +08:00
parent b1d6f2001e
commit ab616c5fc7
2 changed files with 154 additions and 129 deletions

View file

@ -40,39 +40,20 @@
cursor: pointer; cursor: pointer;
} }
#shortcuts-settings-container form { #shortcut-settings-form form > * {
display: flex;
gap: 8px;
flex-wrap: wrap;
align-items: center;
padding: 16px;
background-color: var(--bg-faded-color);
border-radius: 16px;
} }
#shortcuts-settings-container form header { #shortcut-settings-form label {
display: flex;
align-items: center;
justify-content: space-between;
}
#shortcuts-settings-container form > * {
flex-basis: max(320px, 100%);
margin: 0;
padding: 0;
}
#shortcuts-settings-container form label {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
gap: 8px; gap: 8px;
align-items: center; align-items: center;
} }
#shortcuts-settings-container form label > span:first-child { #shortcut-settings-form label > span:first-child {
flex-basis: 5em; flex-basis: 5em;
text-align: right; text-align: right;
} }
#shortcuts-settings-container form :is(input[type='text'], select) { #shortcut-settings-form :is(input[type='text'], select) {
flex-grow: 1; flex-grow: 1;
flex-basis: 70%; flex-basis: 70%;
flex-shrink: 1; flex-shrink: 1;

View file

@ -9,6 +9,7 @@ import states from '../utils/states';
import AsyncText from './AsyncText'; import AsyncText from './AsyncText';
import Icon from './icon'; import Icon from './icon';
import Modal from './modal';
const SHORTCUTS_LIMIT = 9; const SHORTCUTS_LIMIT = 9;
@ -161,6 +162,7 @@ function ShortcutsSettings() {
const [lists, setLists] = useState([]); const [lists, setLists] = useState([]);
const [followedHashtags, setFollowedHashtags] = useState([]); const [followedHashtags, setFollowedHashtags] = useState([]);
const [showForm, setShowForm] = useState(false);
useEffect(() => { useEffect(() => {
(async () => { (async () => {
@ -308,7 +310,35 @@ function ShortcutsSettings() {
No shortcuts yet. Add one from the form below. No shortcuts yet. Add one from the form below.
</p> </p>
)} )}
<hr /> <p
style={{
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
}}
>
<span class="insignificant">
{shortcuts.length >= SHORTCUTS_LIMIT &&
`Max ${SHORTCUTS_LIMIT} shortcuts`}
</span>
<button
type="button"
disabled={shortcuts.length >= SHORTCUTS_LIMIT}
onClick={() => setShowForm(true)}
>
<Icon icon="plus" /> <span>Add shortcut</span>
</button>
</p>
</main>
{showForm && (
<Modal
class="light"
onClick={(e) => {
if (e.target === e.currentTarget) {
setShowForm(false);
}
}}
>
<ShortcutForm <ShortcutForm
disabled={shortcuts.length >= SHORTCUTS_LIMIT} disabled={shortcuts.length >= SHORTCUTS_LIMIT}
lists={lists} lists={lists}
@ -317,17 +347,29 @@ function ShortcutsSettings() {
console.log('onSubmit', data); console.log('onSubmit', data);
states.shortcuts.push(data); states.shortcuts.push(data);
}} }}
onClose={() => setShowForm(false)}
/> />
</main> </Modal>
)}
</div> </div>
); );
} }
export default ShortcutsSettings; function ShortcutForm({
function ShortcutForm({ type, lists, followedHashtags, onSubmit, disabled }) { type,
lists,
followedHashtags,
onSubmit,
disabled,
onClose = () => {},
}) {
const [currentType, setCurrentType] = useState(type); const [currentType, setCurrentType] = useState(type);
return ( return (
<> <div id="shortcut-settings-form" class="sheet">
<header>
<h2>Add shortcut</h2>
</header>
<main tabindex="-1">
<form <form
onSubmit={(e) => { onSubmit={(e) => {
// Construct a nice object from form // Construct a nice object from form
@ -342,14 +384,9 @@ function ShortcutForm({ type, lists, followedHashtags, onSubmit, disabled }) {
// Reset // Reset
e.target.reset(); e.target.reset();
setCurrentType(null); setCurrentType(null);
onClose();
}} }}
> >
<header>
<h3>Add a shortcut</h3>
<button type="submit" disabled={disabled}>
Add
</button>
</header>
<p> <p>
<label> <label>
<span>Timeline</span> <span>Timeline</span>
@ -405,7 +442,8 @@ function ShortcutForm({ type, lists, followedHashtags, onSubmit, disabled }) {
spellcheck={false} spellcheck={false}
pattern={pattern} pattern={pattern}
/> />
{currentType === 'hashtag' && followedHashtags.length > 0 && ( {currentType === 'hashtag' &&
followedHashtags.length > 0 && (
<datalist id="followed-hashtags-datalist"> <datalist id="followed-hashtags-datalist">
{followedHashtags.map((tag) => ( {followedHashtags.map((tag) => (
<option value={tag.name} /> <option value={tag.name} />
@ -417,7 +455,13 @@ function ShortcutForm({ type, lists, followedHashtags, onSubmit, disabled }) {
); );
}, },
)} )}
<button type="submit" class="block" disabled={disabled}>
Add
</button>
</form> </form>
</> </main>
</div>
); );
} }
export default ShortcutsSettings;