# Release v1.2.3 (2026-02-10)

## Summary

Unified synchronization functionality with event-driven UI updates. Resolved user confusion about duplicate sync buttons by implementing a single sync source with automatic page refreshes.

## Changes

### Main Feature: Sync Event System

- **Added `sync-completed` event** in base.html's `syncAction()` function
  - Dispatched after successful `/api/sync/all` or `/api/sync/push`
  - Includes endpoint and response data in event detail
  - Enables pages to react automatically to sync completion

### Configs Page (`configs.html`)

- **Removed "Импорт с сервера" button** - duplicate functionality no longer needed
- **Updated layout** - changed from 2-column grid to single button layout
- **Removed `importConfigsFromServer()` function** - functionality now handled by navbar sync
- **Added sync-completed event listener**:
  - Automatically reloads configurations list after sync
  - Resets pagination to first page
  - New configurations appear immediately without manual refresh

### Projects Page (`projects.html`)

- **Wrapped initialization in DOMContentLoaded**:
  - Moved `loadProjects()` and all event listeners inside handler
  - Ensures DOM is fully loaded before accessing elements
- **Added sync-completed event listener**:
  - Automatically reloads projects list after sync
  - New projects appear immediately without manual refresh

### Pricelists Page (`pricelists.html`)

- **Added sync-completed event listener** to existing DOMContentLoaded:
  - Automatically reloads pricelists when sync completes
  - Maintains existing permissions and modal functionality

## Benefits

### User Experience
- ✅ Single "Синхронизация" button in navbar - no confusion about sync sources
- ✅ Automatic list updates after sync - no need for manual F5 refresh
- ✅ Consistent behavior across all pages (configs, projects, pricelists)
- ✅ Better feedback: toast notification + automatic UI refresh

### Architecture
- ✅ Event-driven loose coupling between navbar and pages
- ✅ Easy to extend to other pages (just add event listener)
- ✅ No backend changes needed
- ✅ Production-ready

## Breaking Changes

- **`/api/configs/import` endpoint** still works but UI button removed
  - Users should use navbar "Синхронизация" button instead
  - Backend API remains unchanged for backward compatibility

## Files Modified

1. `web/templates/base.html` - Added sync-completed event dispatch
2. `web/templates/configs.html` - Event listener + removed duplicate UI
3. `web/templates/projects.html` - DOMContentLoaded wrapper + event listener
4. `web/templates/pricelists.html` - Event listener for auto-refresh

**Stats:** 4 files changed, 59 insertions(+), 65 deletions(-)

## Commits

- `99fd80b` - feat: unify sync functionality with event-driven UI updates

## Testing Checklist

- [x] Configs page: New configurations appear after navbar sync
- [x] Projects page: New projects appear after navbar sync
- [x] Pricelists page: Pricelists refresh after navbar sync
- [x] Both `/api/sync/all` and `/api/sync/push` trigger updates
- [x] Toast notifications still show correctly
- [x] Sync status indicator updates
- [x] Error handling (423, network errors) still works
- [x] Mode switching (Active/Archive) works correctly
- [x] Backward compatibility maintained

## Known Issues

None - implementation is production-ready

## Migration Notes

No migration needed. Changes are frontend-only and backward compatible:
- Old `/api/configs/import` endpoint still functional
- No database schema changes
- No configuration changes needed
