Commit Graph

24 Commits

Author SHA1 Message Date
Joseph Doherty 2d33e44067 feat(configmanager): add DataTemplates for form view automatic selection
Add Window.DataTemplates section to MainWindow.axaml to enable automatic
view selection when SelectedFormViewModel is set. Each form ViewModel
type is now mapped to its corresponding View.
2026-01-19 19:59:19 -05:00
Joseph Doherty 700d62ee74 feat(configmanager): add XAML form views for all configuration sections
Add 7 form view pairs implementing the dark theme UI for ConfigManager:
- DataSyncFormView: Sync intervals, performance, and retention settings
- DataAccessFormView: Query timeouts and schema name configuration
- AuthFormView: Cookie name and expiration settings
- LdapFormView: Server URLs, directory structure, and dev options
- SearchFormView: Result limits and timeout configuration
- ExcelExportFormView: Sheet protection, format, timezone, and debug options
- PipelineFormView: Source/Destination/Schedules with collapsible Expanders

All views follow the dark theme colors from configmanager-ui-design.md:
- Background layers: #0D0F12, #151920, #232A35
- Text hierarchy: #E6EDF5, #9BA8B8, #5C6A7A
- Borders: #2D3540, #3D4550
- Accent: #5C9AFF

Task 25 of docs/plans/2026-01-19-configmanager-phases7-9.md
2026-01-19 19:57:51 -05:00
Joseph Doherty 042e036c35 feat(configmanager): wire up form selection in MainWindowViewModel
- Add IFileSystem and IDialogService dependencies to constructor
- Implement OnSelectedNodeChanged to create appropriate form ViewModels
- Add LoadConfigForTesting helper for unit testing
- Add MarkAsChanged helper to track unsaved changes
- Update OpenFolderAsync to use IDialogService
- Add comprehensive unit tests for form selection
2026-01-19 19:57:27 -05:00
Joseph Doherty 46e94539cd feat(configmanager): add DiffPreviewDialog
Add DiffPreviewDialog and DiffPreviewDialogViewModel to display a diff
preview of configuration changes before saving. The dialog shows line
numbers, insertions (green), deletions (red), and unchanged lines with
a dark theme matching the ConfigManager design spec.
2026-01-19 19:52:38 -05:00
Joseph Doherty 7dd4c46cb7 feat(configmanager): add IDialogService interface and AvaloniaDialogService
Add dialog service abstraction for platform-specific dialogs:
- IDialogService interface with folder picker, message, confirmation,
  diff preview, and validation results methods
- AvaloniaDialogService implementation using MsBox.Avalonia
- Basic implementations for ShowDiffPreviewAsync and ShowValidationResultsAsync
  (full dialogs to be implemented in Tasks 22-23)
- Add MessageBox.Avalonia package reference
2026-01-19 19:52:30 -05:00
Joseph Doherty c3684f5150 feat(configmanager): add PipelineFormViewModel and ScheduleFormViewModel
Add form ViewModels for editing pipeline configurations in the ConfigManager.
ScheduleFormViewModel wraps ScheduleModel for schedule editing.
PipelineFormViewModel wraps PipelineModel with schedule sub-ViewModels.
2026-01-19 19:50:20 -05:00
Joseph Doherty 6e2decd21f feat(configmanager): add LdapFormViewModel
Implement LdapFormViewModel for editing LDAP configuration section with
properties for ServerUrlsText, GroupDn, SearchBase, ConnectionTimeoutSeconds,
UseFakeAuth, and AdminBypassUsersText. Array properties use newline-separated
text with StringSplitOptions.RemoveEmptyEntries | TrimEntries for splitting.
2026-01-19 19:45:43 -05:00
Joseph Doherty cc555e4e34 feat(configmanager): add SearchFormViewModel
Implements Task 18 from phases 7-9 plan. SearchFormViewModel wraps
SearchSection model with properties for MaxResultRows, TimeoutSeconds,
and MaxConcurrentSearches. Includes full test coverage with 7 tests
verifying initialization, two-way binding, change notification, and
null argument handling.
2026-01-19 19:45:07 -05:00
Joseph Doherty 64518c7000 feat(configmanager): add DataAccessFormViewModel 2026-01-19 19:42:10 -05:00
Joseph Doherty c416544efe feat(configmanager): add DataSyncFormViewModel
Add form ViewModel that wraps DataSyncSection model for two-way binding
with change tracking in the ConfigManager UI.
2026-01-19 19:40:31 -05:00
Joseph Doherty c22e2ed877 feat(configmanager): add MainWindowViewModel with service wiring
Complete MainWindowViewModel implementation with:
- Constructor injection for IConfigFileService, IValidationService,
  IBackupService, IAutoDiscoveryService, and ILogger
- Properties: ConfigFolderPath, HasUnsavedChanges, ValidationStatus,
  ValidationStatusColor, SelectedNode, SelectedFormViewModel, TreeNodes
- Commands: OpenFolderCommand, SaveCommand, ExitCommand, UndoCommand,
  RedoCommand, ValidateCommand, TestConnectionCommand
- Methods: InitializeAsync, OpenFolderAsync, LoadConfigAsync,
  BuildTreeNodes, OnSelectedNodeChanged, SaveAsync, Validate,
  TestConnectionAsync

Update App.axaml.cs to register all services in DI container:
- IFileSystem -> FileSystem (singleton)
- IAutoDiscoveryService -> AutoDiscoveryService (singleton)
- IBackupService -> BackupService (singleton)
- IDiffService -> DiffService (singleton)
- IValidationService -> ValidationService (singleton)
- IConfigFileService -> ConfigFileService (scoped)
- MainWindowViewModel (transient)

Wire MainWindow.DataContext to resolved MainWindowViewModel.
2026-01-19 17:53:25 -05:00
Joseph Doherty 8caaa8ee54 feat(configmanager): add TreeNodeViewModel 2026-01-19 17:51:15 -05:00
Joseph Doherty e9fc764650 feat(configmanager): add MainWindow view 2026-01-19 17:49:04 -05:00
Joseph Doherty 9677b751e6 feat(configmanager): add AutoDiscoveryService with tests
Add service for auto-discovering configuration file locations. The
service searches in prioritized order:
1. JDESCOPING_CONFIG_PATH environment variable
2. Same directory as executable
3. ../JdeScoping.Host/ relative to executable
4. User config directory (~/.jdescoping on Unix, %LOCALAPPDATA%\JdeScoping on Windows)

Includes 9 unit tests covering all search locations, priority order,
edge cases (missing directory, missing appsettings.json), and
cancellation token support.
2026-01-19 17:47:03 -05:00
Joseph Doherty 68da728cdf feat(configmanager): add DiffService with tests 2026-01-19 17:44:28 -05:00
Joseph Doherty c8f3c0060d feat(configmanager): add ValidationService with tests 2026-01-19 17:42:14 -05:00
Joseph Doherty 0e441898a6 feat(configmanager): add BackupService with tests 2026-01-19 17:40:22 -05:00
Joseph Doherty 54620ccb2e feat(configmanager): add ConfigFileService with tests
Add config file loading and saving service following TDD approach:
- IConfigFileService interface for loading/saving config files
- ConfigLoadException for descriptive error handling
- ConfigFileService implementation with JSON serialization
- Unit tests with mocked IFileSystem dependency
2026-01-19 17:38:20 -05:00
Joseph Doherty 4335286560 feat(configmanager): add configuration models 2026-01-19 17:36:10 -05:00
Joseph Doherty 0e1bb6aa35 feat(configmanager): add MVVM base classes 2026-01-19 17:34:53 -05:00
Joseph Doherty c055bc6c78 feat(configmanager): add IFileSystem abstraction
Add file system abstraction to enable testability for file operations.
- IFileSystem interface with common file operations
- FileSystem implementation wrapping System.IO
- Unit tests for FileExists functionality
2026-01-19 17:33:39 -05:00
Joseph Doherty 4ab17259d6 feat(configmanager): create initial project structure 2026-01-19 17:29:08 -05:00
Joseph Doherty fbe58a81e4 refactor(securestoremanager): add platform service abstractions and constants
Implement deferred code review findings:
- Add IDialogService/IClipboardService interfaces for testable platform operations
- Create AvaloniaDialogService and AvaloniaClipboardService implementations
- Extract dialog strings and file extensions to centralized Constants classes
- Refactor ViewModels to use DI instead of event delegates
- Update tests to use mock services
2026-01-19 16:54:35 -05:00
Joseph Doherty 604bfe919c refactor: address code review findings across all projects
Apply comprehensive fixes from code reviews including:
- Extract shared utilities (SqlFormatHelper, CellValueConverter, DbDestinationBase)
- Add interface abstractions (IAuthenticationService, IDatabaseMigrator, IMisQueryBuilder)
- Implement SecureStore for encrypted secrets storage
- Fix error handling with proper HTTP status codes and logging
- Optimize double enumeration in DevEtlRegistry
- Add DataSync.Dev README for developer onboarding
- Extract filter panel base classes to reduce duplication
- Update code review docs to mark all issues as fixed
2026-01-19 11:05:36 -05:00