Wpis z mikrobloga

Chciałbym zrobić w Angularze masową edycję towarów. Tylko mam problem jak przesłać dane do komponentu - które towary edytuję? Obecnie funkcjonuje to tak, że w komponencie wyświetlającym towary zrobiłem zaznaczanie masowe, które działa. Usuwanie było łatwo zrobić, bo to jeden komponent, ale nie wiem jak zabrać się do edycji - gdyż wtedy powinno być przekierowanie do innego komponentu (tak jak przy edycji pojedynczego towaru).

Komponenty nie są ze sobą powiązane (typu parent-child). Tylko jest to inna ścieżka na routerze. Edycja pojedynczego towaru jest tak rozwiązana, że przekierowuje na adres np items/:id i w ten sposób wiem, jakie jest ID edytowanego towaru. Ale w przypadku masowej edycji np 1000 towarów nie będę przecież zapisywał 1000 ID w pasku adresu ( ͡° ͜ʖ ͡°)

Myślałem, nad dwiema opcjami:
1) Generowanie UUID i zapisywanie gdzieś w localstorage to UUID (jako klucz), a jako wartości tablicę JSON z elementami ID edytowanych towarów - wtedy przy edycji pasek adresu: items/mass-edit/:uuid.

2) Zapisywanie tych danych gdzieś w tablicy w serwisie, wtedy nie przekazuję żadnych UUID, tylko po kliknięciu przycisku zapisuje w serwisie tą tablicę i po prostu przekierowuje (programowo) użytkownika na adres items/mass-edit, a ten komponent już sam sobie pobierze tą tablicę - co jest edytowane - z serwisu.
Minusem jest brak możliwości otwarcia tego w nowej karcie, aczkolwiek chyba nie jest to jakiś bardzo duży problem się wydaje. Zresztą - w jaki niby sposób punkt 1 otworzyć w nowej karcie kiedy generowałoby się UUID po wciśnięciu przycisku? Oczywiście otwieranie wtedy, kiedy użytkownik tego chce, a więc "otwórz w nowej karcie" albo kliknięcie środkowym przyciskiem myszy.

Która z tych opcji wydaje się lepsza? A może jest do tego jakaś inna, ciekawa opcja? Otwieranie w nowej karcie masowej edycji przez użytkownika nie jest koniecznie, aczkolwiek byłaby to miła funkcjonalność.

#webdev #angular #javascript #webdesign
  • 4
via Wykop Mobilny (Android)
  • 0
@lukasj: czy to jest wymaganie biznesowe że musisz być w stanie wrócić do widoku bulk update i przechowywać to gdziekolwiek? Bo jak nie to ja bym to olał, otworzył modal na tym samym widoku listy i wysłał wszystkie zaktualizowane rekordy na serwer. Problem jest taki że API musi wiedzieć że skoro są różne dane w polu x ale zostało puste to znaczy że to nie zaktualizowałeś, więc może warto użyć PATCH
@PortowySzczur: nie obsługuje metody PATCH, tylko POST i PUT. Myślałem, żeby aktualizować tylko pola, które są wysyłane, więc jak ktoś by zostawił puste, to by po prostu front by ich nie wysyłał w zapytaniu. A tak naprawdę do masowej edycji to byłby za to odpowiedzialny inny kontroler, niż do zwykłej edycji towaru (w backendzie).

czy to jest wymaganie biznesowe


@PortowySzczur: tworzę swoją własną aplikację, więc tutaj nie jest to do
via Wykop Mobilny (Android)
  • 0
@lukasj: nie przekierowuj na inny route tylko po prostu ukryj poprzedni widok i pokaż następny, najprościej.

Modal by nie do końca pasował do takiej aplikacji


No to przejdź na inny widok ale bez kontrolera i skakania po routach. Tak ja bym to zrobił przynajmniej. Takie rzeczy nie są standardowe i mało kto tak naprawdę ich potrzebuje.

nie obsługuje metody PATCH, tylko POST i PUT. Myślałem, żeby aktualizować tylko pola, które są
Co jak zmieni zdanie i nie chce wysłać tego pola


@PortowySzczur: po prostu zamiast label + pole dajesz checkbox + pole ( ͡° ͜ʖ ͡°) Wtedy jak chce edytowac i zostawić je puste (czyli zmienić we wszystkich edytowanych to pole na puste) to wtedy zaznacza checkbox i nic nie wpisuje.

ja bym wysłał listę id w arrayu i pola jakie ktoś dodał bo może chcieć wyczyścić jakąś