Merge pull request 'Se arreglo la inestabilidad de del formulario al hacer clock' (#438) from fix/doda into development

Reviewed-on: ADUANASOFT/anexo76#438
This commit is contained in:
2026-05-22 21:40:49 +00:00
2 changed files with 18 additions and 7 deletions

View File

@@ -978,6 +978,7 @@
<Dialog.Content
class="flex h-[90dvh] max-h-[90dvh] w-[calc(100vw-2rem)] max-w-5xl flex-col gap-0 overflow-hidden border bg-background p-0 shadow-lg sm:max-w-5xl"
showCloseButton={true}
onInteractOutside={(e) => e.preventDefault()}
>
<Tabs.Root bind:value={activeTab} class="flex min-h-0 w-full flex-1 flex-col gap-0">
<Dialog.Header class="shrink-0 space-y-2 border-b px-4 pb-3 pt-3 pr-12 text-left sm:text-left">

View File

@@ -94,8 +94,10 @@
const canEdit = $derived(userHasDodaCatalogAction($currentUser, 'edit'));
const canDelete = $derived(userHasDodaCatalogAction($currentUser, 'delete'));
const accessDeniedMessage = $derived(!canView ? 'Permission denied: cat_doda.view' : null);
const activeDodaIdParam = $derived($page.url.searchParams.get('doda_id'));
const modalCanMutate = $derived(activeDodaIdParam === 'new' ? canCreate : canEdit);
// Estado local para controlar apertura del modal de forma síncrona.
// Evita que stale $page.url provoque un goto no-op al re-abrir rápidamente.
let modalDodaId = $state<string | null>($page.url.searchParams.get('doda_id') || null);
const modalCanMutate = $derived(modalDodaId === 'new' ? canCreate : canEdit);
$effect(() => {
if (data.dodas) {
@@ -152,6 +154,7 @@
function handleNew() {
if (!canCreate) return;
modalDodaId = 'new';
const url = new URL($page.url);
url.searchParams.set('doda_id', 'new');
goto(url.toString(), { replaceState: true });
@@ -160,8 +163,10 @@
function handleEdit() {
if (!canEdit) return;
if (!selectedDoda) return;
const newId = String(selectedDoda.id);
modalDodaId = newId;
const url = new URL($page.url);
url.searchParams.set('doda_id', String(selectedDoda.id));
url.searchParams.set('doda_id', newId);
goto(url.toString(), { replaceState: true });
}
@@ -443,8 +448,10 @@
selectedDodaIds = selectedDodaIds.includes(row.id) ? [] : [row.id];
}}
onRowDoubleClick={(item) => {
const newId = String(item.id);
modalDodaId = newId;
const url = new URL($page.url);
url.searchParams.set('doda_id', String(item.id));
url.searchParams.set('doda_id', newId);
goto(url.toString(), { replaceState: true });
}}
/>
@@ -569,20 +576,23 @@
/>
{/if}
{#if $page.url.searchParams.get('doda_id')}
{#if modalDodaId !== null}
<DodaFormModal
dodaIdParam={$page.url.searchParams.get('doda_id')!}
dodaIdParam={modalDodaId}
defaultLastUser={data.defaultLastUser}
canMutate={modalCanMutate}
onClose={() => {
modalDodaId = null;
const url = new URL($page.url);
url.searchParams.delete('doda_id');
goto(url.toString(), { replaceState: true });
void reloadDodas();
}}
onCreatedNavigateTo={(newId) => {
const idStr = String(newId);
modalDodaId = idStr;
const url = new URL($page.url);
url.searchParams.set('doda_id', String(newId));
url.searchParams.set('doda_id', idStr);
goto(url.toString(), { replaceState: true });
}}
/>