Kyuhisan/ZK_Project

Modal za podrobnosti razpisa se ne zapre pri pritisku na ESC

Ouverte

#1 ouverte le 29 oct. 2025

 (0 commentaire) (0 réaction) (1 personne assignée)Java (0 fork)auto 404
Easy-FixFrontendPrioriteta: Nizkabugenhancementgood first issue

Métriques du dépôt

Stars
 (0 étoile)
Métriques de merge PR
 (Métriques PR en attente)

Description

Atributi napake (IEEE 1044-2009)

Atribut Vrednost
ID SS-UI-002
Status Nov
Naslov Modal za Podrobnosti Razpisa se ne Zapre pri Pritisku ESC Tipke
Projekt SmartSearch v10.0
Datum odkritja 29. 10. 2025
Opazovalec Kyuhisan
Dodeljeno Kyuhisan
Tip Napaka (Error)
Resnost Nizka (Low)
Prioriteta Srednja (Medium)
Ponovljivost Vedno
Lokacija ListingDetailsModal.jsx:[85-110], useEffect hook
Faza odkritja Testiranje

Opis napake

Simptom (Failure): Uporabnik ne more zapreti modala za podrobnosti razpisa s pritiskom na ESC tipko. Modal ostane odprt tudi po večkratnem pritisku ESC.

Defekt (Fault): V React komponenti "ListingDetailsModal.jsx" manjka funkcionalnost, ki odstrani eventListener za tipko ESC. Ta se doda a se kasneje ne odstrani, kar povzroči, da tipka ne deluje pravilno.

Programska napaka (Error): Hook "useEffect" brez funkcionalnosti, ki odstrani pretekle eventListenerje te samo podvaja, namesto, da bi z cleanup funkcijo te počistil sproti.

Okolje

  • Aplikacija: SmartSearch v10.0
  • Platforma: Windows 11
  • Brskalnik: Chrome 120.0.6099.129
  • Frontend: React 18.2.0, TypeScript 5.0.4
  • Komponenta: ListingDetailsModal.jsx [useEffect hook]

Koraki za reprodukcijo

  1. Odpri frontend aplikacije SmartSearch v brskalniku
  2. Na seznamu razpisov klikni na poljuben razpis
  3. Modal z podrobnostmi razpisa se odpre
  4. Pritisni tipko ESC na tipkovnici
  5. Razpis se zapre a v ozadju ne odstrani eventListenerja
  6. Na seznamu razpisov klikni na poljuben razpis
  7. Pritisni tipko ESC na tipkovnici
  8. Opazuj, da modal zdaj ostane odprt

Dejanski rezultat: Modal ostane odprt, ESC tipka ne deluje.

Pričakovan rezultat: Modal bi se moral zapreti ob pritisku na ESC tipko.

Analiza

Klasifikacija

  • Tip anomalije: Napaka v uporabniškem vmesniku (UI Error)
  • Vir napake: Implementacijska napaka - manjkajoča cleanup funkcija za useEffect hook
  • Faza vnosa napake: Med razvojem frontenda (Frontend Development)

Resnost: Nizka (Low)

  • Utemeljitev:
    • Funkcionalnost ni kritična - uporabnik lahko zapre modal s klikom na gumb "X" ali klikom izven modala
    • Workaround je enostaven in intuitiven
    • Ne vpliva na podatke ali stabilnost sistema
    • Slaba uporabniška izkušnja, vendar ne blokira dela

Prioriteta: Srednja (Medium)

  • ESC tipka je standardna metoda za zapiranje modalov
  • Enostaven popravek
  • Ne blokira drugih funkcionalnosti

Vpliv

  • Funkcionalnost: Nizek (saj obstaja workaround)
  • Uporabniška izkušnja: Srednji (slabša UX za naprednejše uporabnike)
  • Poslovna vrednost: Nizek (funkcionalnost ni ključno za delovanje)

Vzročna analiza

Lokacija napake

  • Datoteka: src/components/ListingDetailsModal.jsx
  • Funkcija: useEffect hook za ESC tipko
  • Vrstice: 85-110

Trenutna (problematična) implementacija

useEffect(() => {
  const handleEscKey = (event) => {
    if (event.key === 'Escape') {
      onClose();
    }
  };

  document.addEventListener('keydown', handleEscKey);

  // NAPAKA: Manjka cleanup funkcija za odstranitev event listener-ja
}, [onClose]);

Osnovni vzrok

  1. Manjkajoča cleanup funkcija v useEffect hooku
  2. Event listener se ne odstrani po uporabi komponente
  3. Povzroča memory leak in nedelovanje ESC tipke

Predlagana rešitev

Popravljena koda

useEffect(() => {
  const handleEscKey = (event) => {
    if (event.key === 'Escape') {
      onClose();
    }
  };

  document.addEventListener('keydown', handleEscKey);

  // Cleanup funkcija za odstranitev event listener-ja
  return () => {
    document.removeEventListener('keydown', handleEscKey);
  };
}, [onClose]);

Ocena napora

  • Implementacija: 5 minut
  • Testiranje: 20 minut
  • Code review: 5 minut
  • Skupaj: 30 minut

Merila uspešnosti

  • ESC tipka zapre modal pri prvem pritisku
  • Event listener se pravilno odstrani pri zaprtju komponente
  • Ne pride do memory leakov
  • Unit testi pokrivajo ESC funkcionalnost
  • Manualno testiranje potrdi delovanje
  • Code review potrjen

Povezava s testnim scenarijem

Ta napaka je bila odkrita med izvajanjem testnega scenarija: SmartSearch-Ogled-Podrobnosti-Razpisa (TestScenarios.txt, korak 11) Korak 11 testnega scenarija: "Preveri delovanje tipke ESC za zaprtje modala" - FAILED

Guide contributeur