---
phase: 25-shipment-presets-management
plan: 01
type: execute
wave: 1
depends_on: ["24-01"]
files_modified:
- resources/views/shipments/prepare.php
- resources/scss/modules/_shipment-presets.scss
- public/assets/css/app.css
autonomous: false
---
## Goal
Dodać zarządzanie presetami przesyłek: edycja nazwy/koloru/parametrów, usuwanie, z poziomu UI na stronie przygotowania przesyłki.
## Purpose
Użytkownik musi móc modyfikować istniejące presety bez dostępu do bazy — zmienić nazwę, kolor, parametry lub usunąć niepotrzebne.
## Output
- Menu kontekstowe na przyciskach presetów (edytuj / usuń)
- Popup edycji presetu (ponowne użycie popupu tworzenia z pre-fill)
- Potwierdzenie usunięcia przez OrderProAlerts.confirm()
- Aktualizacja listy po edycji/usunięciu
## Project Context
@.paul/PROJECT.md
@.paul/ROADMAP.md
## Prior Work
@.paul/phases/24-shipment-presets-ui/24-01-SUMMARY.md
## Source Files
@resources/views/shipments/prepare.php
@resources/scss/modules/_shipment-presets.scss
@src/Modules/Shipments/ShipmentPresetController.php
No specialized flows required (sonar-scanner post-APPLY).
## AC-1: Edycja presetu
```gherkin
Given istnieje preset "InPost Standard"
When użytkownik klika prawym przyciskiem (lub ikonkę edycji) na przycisku presetu
And wybiera "Edytuj"
Then otwiera się popup z wypełnionymi danymi presetu (nazwa, kolor)
When zmienia nazwę na "InPost Paczkomat" i klika Zapisz
Then preset zostaje zaktualizowany i przycisk zmienia nazwę
```
## AC-2: Zmiana parametrów presetu
```gherkin
Given istnieje preset z wagą 1kg
When użytkownik wypełnia formularz nowymi wartościami (waga 2kg)
And klika ikonkę edycji na presecie i wybiera "Zapisz bieżące wartości"
Then preset zostaje zaktualizowany z bieżącymi wartościami formularza
```
## AC-3: Usuwanie presetu
```gherkin
Given istnieje preset "Stary preset"
When użytkownik klika ikonkę edycji i wybiera "Usuń"
Then pojawia się potwierdzenie OrderProAlerts.confirm()
When potwierdza usunięcie
Then preset zostaje usunięty z bazy i przycisk znika z listy
```
Task 1: SCSS — style menu kontekstowego i ikonki edycjiresources/scss/modules/_shipment-presets.scss
Dodać do istniejącego pliku SCSS:
- `.shipment-presets__btn-wrap` — wrapper na przycisk + ikonkę (position relative, display inline-flex)
- `.shipment-presets__edit-icon` — ikonka edycji (mały przycisk ✎ na prawym górnym rogu):
- Position absolute, top: -6px, right: -6px
- Width 18px, height 18px, border-radius 50%
- Background #fff, border: 1px solid #ddd, font-size 10px
- Opacity 0 domyślnie, opacity 1 na hover wrappera
- Cursor pointer, transition opacity 0.15s
- `.shipment-presets__dropdown` — dropdown menu (position absolute):
- Background #fff, border: 1px solid #ddd, border-radius 6px
- Box-shadow, z-index 100, min-width 180px
- Padding: 4px 0
- `.shipment-presets__dropdown-item` — pozycja menu:
- Padding: 6px 14px, font-size 13px, cursor pointer
- Hover: background #f3f4f6
- `&.is-danger` — color #ef4444
Zbudować CSS po zmianach.
npx sass --style=compressed build succeedsAC-1, AC-2, AC-3 partially: style gotoweTask 2: JavaScript — edycja, usuwanie, dropdown menuresources/views/shipments/prepare.php
Rozszerzyć istniejący IIFE presetów w prepare.php:
1. **Zmienić renderPresets()** — zamiast gołego `php -l resources/views/shipments/prepare.php — brak błędówAC-1, AC-2, AC-3 satisfiedZarządzanie presetami: edycja nazwy/koloru, zapisanie bieżących wartości, usuwanie z potwierdzeniem
1. Odwiedź /orders/{id}/shipment/prepare
2. Najedź na przycisk presetu — powinna pojawić się ikonka ✎
3. Kliknij ✎ — dropdown z 3 opcjami
4. "Edytuj nazwę i kolor" — popup z wypełnioną nazwą i zaznaczonym kolorem, zmień i zapisz
5. "Zapisz bieżące wartości" — zmień wymiary w formularzu, kliknij tę opcję — preset powinien się zaktualizować
6. "Usuń" — potwierdzenie alertem, po potwierdzeniu przycisk znika
7. Sprawdź że kliknięcie presetu nadal autofilluje formularz
Type "approved" to continue, or describe issues to fix
## DO NOT CHANGE
- src/Modules/Shipments/ShipmentPresetController.php (gotowy z fazy 23)
- src/Modules/Shipments/ShipmentPresetRepository.php (gotowy z fazy 23)
- routes/web.php (routing gotowy z fazy 23)
- Istniejący JS: carrier selection, status polling, print queue
## SCOPE LIMITS
- Edycja, usuwanie — brak drag & drop sortowania (out of scope)
- Brak auto-submit po kliknięciu presetu (osobna faza/task)
Before declaring plan complete:
- [ ] Ikonka ✎ widoczna na hover
- [ ] Dropdown z 3 opcjami
- [ ] Edycja nazwy/koloru przez popup
- [ ] "Zapisz bieżące wartości" aktualizuje parametry
- [ ] Usuwanie z potwierdzeniem OrderProAlerts
- [ ] Autofill nadal działa
- [ ] php -l OK
- [ ] SCSS zbudowany
- [ ] Human verification passed
- Użytkownik może edytować nazwę i kolor presetu
- Użytkownik może zaktualizować parametry presetu z bieżącego formularza
- Użytkownik może usunąć preset z potwierdzeniem
- Brak regresji w tworzeniu i autofill