[focus] call focus() as well for android
This commit is contained in:
parent
4eef8a0f05
commit
f4cf2b89e0
7 changed files with 62 additions and 0 deletions
|
|
@ -24,6 +24,16 @@
|
||||||
let presetOpen = $state(false);
|
let presetOpen = $state(false);
|
||||||
let presetName = $state("");
|
let presetName = $state("");
|
||||||
|
|
||||||
|
let presetNameInput = $state<HTMLInputElement | null>(null);
|
||||||
|
let renameNameInput = $state<HTMLInputElement | null>(null);
|
||||||
|
|
||||||
|
$effect(() => {
|
||||||
|
if (presetOpen) setTimeout(() => presetNameInput?.focus(), 50);
|
||||||
|
});
|
||||||
|
$effect(() => {
|
||||||
|
if (renameOpen) setTimeout(() => renameNameInput?.focus(), 50);
|
||||||
|
});
|
||||||
|
|
||||||
function openRename() {
|
function openRename() {
|
||||||
renameName = meal.name;
|
renameName = meal.name;
|
||||||
renameOpen = true;
|
renameOpen = true;
|
||||||
|
|
@ -244,6 +254,7 @@
|
||||||
<div>
|
<div>
|
||||||
<label class="block text-sm text-zinc-400 mb-1.5">Preset name</label>
|
<label class="block text-sm text-zinc-400 mb-1.5">Preset name</label>
|
||||||
<input
|
<input
|
||||||
|
bind:this={presetNameInput}
|
||||||
type="text"
|
type="text"
|
||||||
bind:value={presetName}
|
bind:value={presetName}
|
||||||
required
|
required
|
||||||
|
|
@ -268,6 +279,7 @@
|
||||||
>
|
>
|
||||||
<form onsubmit={handleRename} class="space-y-4">
|
<form onsubmit={handleRename} class="space-y-4">
|
||||||
<input
|
<input
|
||||||
|
bind:this={renameNameInput}
|
||||||
type="text"
|
type="text"
|
||||||
bind:value={renameName}
|
bind:value={renameName}
|
||||||
required
|
required
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@
|
||||||
if (open) {
|
if (open) {
|
||||||
query = "";
|
query = "";
|
||||||
selectedIdx = 0;
|
selectedIdx = 0;
|
||||||
|
setTimeout(() => inputEl?.focus(), 50);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,11 @@
|
||||||
|
|
||||||
let gramsInput = $state<HTMLInputElement | null>(null);
|
let gramsInput = $state<HTMLInputElement | null>(null);
|
||||||
|
|
||||||
|
$effect(() => {
|
||||||
|
if (!selectedProduct) setTimeout(() => searchInput?.focus(), 50);
|
||||||
|
else setTimeout(() => gramsInput?.focus(), 50);
|
||||||
|
});
|
||||||
|
|
||||||
function handleSearch(value: string) {
|
function handleSearch(value: string) {
|
||||||
q = value;
|
q = value;
|
||||||
clearTimeout(debounceTimer);
|
clearTimeout(debounceTimer);
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,13 @@
|
||||||
let presetTimer: ReturnType<typeof setTimeout>;
|
let presetTimer: ReturnType<typeof setTimeout>;
|
||||||
let submitting = $state(false);
|
let submitting = $state(false);
|
||||||
let error = $state("");
|
let error = $state("");
|
||||||
|
let mealNameInput = $state<HTMLInputElement | null>(null);
|
||||||
|
let presetQInput = $state<HTMLInputElement | null>(null);
|
||||||
|
|
||||||
|
$effect(() => {
|
||||||
|
if (tab === "new") setTimeout(() => mealNameInput?.focus(), 50);
|
||||||
|
else setTimeout(() => presetQInput?.focus(), 50);
|
||||||
|
});
|
||||||
|
|
||||||
function handlePresetSearch(v: string) {
|
function handlePresetSearch(v: string) {
|
||||||
presetQ = v;
|
presetQ = v;
|
||||||
|
|
@ -93,6 +100,7 @@
|
||||||
>Meal name <span class="text-zinc-600">(optional)</span></label
|
>Meal name <span class="text-zinc-600">(optional)</span></label
|
||||||
>
|
>
|
||||||
<input
|
<input
|
||||||
|
bind:this={mealNameInput}
|
||||||
id="meal-name"
|
id="meal-name"
|
||||||
type="text"
|
type="text"
|
||||||
bind:value={mealName}
|
bind:value={mealName}
|
||||||
|
|
@ -117,6 +125,7 @@
|
||||||
<!-- Preset search -->
|
<!-- Preset search -->
|
||||||
<div class="px-4 py-3 border-b border-zinc-800">
|
<div class="px-4 py-3 border-b border-zinc-800">
|
||||||
<input
|
<input
|
||||||
|
bind:this={presetQInput}
|
||||||
type="search"
|
type="search"
|
||||||
placeholder="Search presets…"
|
placeholder="Search presets…"
|
||||||
value={presetQ}
|
value={presetQ}
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,10 @@
|
||||||
|
|
||||||
let gramsInput = $state<HTMLInputElement | null>(null);
|
let gramsInput = $state<HTMLInputElement | null>(null);
|
||||||
|
|
||||||
|
$effect(() => {
|
||||||
|
setTimeout(() => gramsInput?.focus(), 50);
|
||||||
|
});
|
||||||
|
|
||||||
const preview = $derived(
|
const preview = $derived(
|
||||||
entry
|
entry
|
||||||
? {
|
? {
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,11 @@
|
||||||
let creating = $state<boolean>(false);
|
let creating = $state<boolean>(false);
|
||||||
let creatingName = $state("");
|
let creatingName = $state("");
|
||||||
let creatingSaving = $state(false);
|
let creatingSaving = $state(false);
|
||||||
|
let creatingNameInput = $state<HTMLInputElement | null>(null);
|
||||||
|
|
||||||
|
$effect(() => {
|
||||||
|
if (creating) setTimeout(() => creatingNameInput?.focus(), 50);
|
||||||
|
});
|
||||||
|
|
||||||
async function handleCreate() {
|
async function handleCreate() {
|
||||||
creatingSaving = true;
|
creatingSaving = true;
|
||||||
|
|
@ -105,6 +110,11 @@
|
||||||
let renamePreset_: Preset | null = $state(null);
|
let renamePreset_: Preset | null = $state(null);
|
||||||
let renameName = $state("");
|
let renameName = $state("");
|
||||||
let renaming = $state(false);
|
let renaming = $state(false);
|
||||||
|
let renameNameInput = $state<HTMLInputElement | null>(null);
|
||||||
|
|
||||||
|
$effect(() => {
|
||||||
|
if (renamePreset_) setTimeout(() => renameNameInput?.focus(), 50);
|
||||||
|
});
|
||||||
|
|
||||||
function openRename(preset: Preset) {
|
function openRename(preset: Preset) {
|
||||||
renamePreset_ = preset;
|
renamePreset_ = preset;
|
||||||
|
|
@ -132,6 +142,10 @@
|
||||||
let editSaving = $state(false);
|
let editSaving = $state(false);
|
||||||
let editGramsInput = $state<HTMLInputElement | null>(null);
|
let editGramsInput = $state<HTMLInputElement | null>(null);
|
||||||
|
|
||||||
|
$effect(() => {
|
||||||
|
if (editingEntry) setTimeout(() => editGramsInput?.focus(), 50);
|
||||||
|
});
|
||||||
|
|
||||||
function openEditEntry(presetId: number, entry: PresetEntry) {
|
function openEditEntry(presetId: number, entry: PresetEntry) {
|
||||||
editingEntry = { presetId, entry };
|
editingEntry = { presetId, entry };
|
||||||
editGrams = entry.grams;
|
editGrams = entry.grams;
|
||||||
|
|
@ -169,6 +183,14 @@
|
||||||
let addGrams = $state(100);
|
let addGrams = $state(100);
|
||||||
let addSaving = $state(false);
|
let addSaving = $state(false);
|
||||||
let addGramsInput = $state<HTMLInputElement | null>(null);
|
let addGramsInput = $state<HTMLInputElement | null>(null);
|
||||||
|
let productQInput = $state<HTMLInputElement | null>(null);
|
||||||
|
|
||||||
|
$effect(() => {
|
||||||
|
if (addEntryPresetId !== null && selectedProduct === null)
|
||||||
|
setTimeout(() => productQInput?.focus(), 50);
|
||||||
|
else if (selectedProduct !== null)
|
||||||
|
setTimeout(() => addGramsInput?.focus(), 50);
|
||||||
|
});
|
||||||
|
|
||||||
function openAddEntry(presetId: number) {
|
function openAddEntry(presetId: number) {
|
||||||
addEntryPresetId = presetId;
|
addEntryPresetId = presetId;
|
||||||
|
|
@ -490,6 +512,7 @@
|
||||||
>
|
>
|
||||||
<form onsubmit={handleCreate} class="space-y-4">
|
<form onsubmit={handleCreate} class="space-y-4">
|
||||||
<input
|
<input
|
||||||
|
bind:this={creatingNameInput}
|
||||||
type="text"
|
type="text"
|
||||||
bind:value={creatingName}
|
bind:value={creatingName}
|
||||||
required
|
required
|
||||||
|
|
@ -514,6 +537,7 @@
|
||||||
>
|
>
|
||||||
<form onsubmit={handleRename} class="space-y-4">
|
<form onsubmit={handleRename} class="space-y-4">
|
||||||
<input
|
<input
|
||||||
|
bind:this={renameNameInput}
|
||||||
type="text"
|
type="text"
|
||||||
bind:value={renameName}
|
bind:value={renameName}
|
||||||
required
|
required
|
||||||
|
|
@ -597,6 +621,7 @@
|
||||||
<!-- Product search -->
|
<!-- Product search -->
|
||||||
<div class="space-y-3">
|
<div class="space-y-3">
|
||||||
<input
|
<input
|
||||||
|
bind:this={productQInput}
|
||||||
type="search"
|
type="search"
|
||||||
placeholder="Search foods…"
|
placeholder="Search foods…"
|
||||||
value={productQ}
|
value={productQ}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,11 @@
|
||||||
let fiber = $state(0);
|
let fiber = $state(0);
|
||||||
let submitting = $state(false);
|
let submitting = $state(false);
|
||||||
let error = $state("");
|
let error = $state("");
|
||||||
|
let nameInput = $state<HTMLInputElement | null>(null);
|
||||||
|
|
||||||
|
$effect(() => {
|
||||||
|
setTimeout(() => nameInput?.focus(), 50);
|
||||||
|
});
|
||||||
|
|
||||||
// calories = protein×4 + carb×4 + fat×9 + fiber×2
|
// calories = protein×4 + carb×4 + fat×9 + fiber×2
|
||||||
const calories = $derived(
|
const calories = $derived(
|
||||||
|
|
@ -48,6 +53,7 @@
|
||||||
<div>
|
<div>
|
||||||
<label for="name" class="block text-sm text-zinc-400 mb-2">Name</label>
|
<label for="name" class="block text-sm text-zinc-400 mb-2">Name</label>
|
||||||
<input
|
<input
|
||||||
|
bind:this={nameInput}
|
||||||
id="name"
|
id="name"
|
||||||
type="text"
|
type="text"
|
||||||
bind:value={name}
|
bind:value={name}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue