diff --git a/web/repertory/lib/helpers.dart b/web/repertory/lib/helpers.dart index e0e57884..100edc39 100644 --- a/web/repertory/lib/helpers.dart +++ b/web/repertory/lib/helpers.dart @@ -25,3 +25,5 @@ String initialCaps(String txt) { return txt[0].toUpperCase() + txt.substring(1).toLowerCase(); } + +Map createDefaultSettings() => {'EventLevel': 'info'}; diff --git a/web/repertory/lib/models/mount.dart b/web/repertory/lib/models/mount.dart index b16f9ae7..801dae37 100644 --- a/web/repertory/lib/models/mount.dart +++ b/web/repertory/lib/models/mount.dart @@ -7,7 +7,11 @@ import 'package:repertory/types/mount_config.dart'; class Mount with ChangeNotifier { final MountConfig mountConfig; - Mount(this.mountConfig) { + Mount(this.mountConfig, {isAdd = false}) { + if (isAdd) { + mountConfig.updateSettings({'EventLevel': 'info'}); + return; + } refresh(); } diff --git a/web/repertory/lib/screens/add_mount_screen.dart b/web/repertory/lib/screens/add_mount_screen.dart index 416b2cee..bf17d9d5 100644 --- a/web/repertory/lib/screens/add_mount_screen.dart +++ b/web/repertory/lib/screens/add_mount_screen.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:repertory/constants.dart'; +import 'package:repertory/helpers.dart'; import 'package:repertory/models/mount.dart'; import 'package:repertory/types/mount_config.dart'; import 'package:repertory/widgets/mount_settings.dart'; @@ -15,10 +16,10 @@ class AddMountScreen extends StatefulWidget { class _AddMountScreenState extends State { static const _padding = 15.0; - final TextEditingController _mountNameController = TextEditingController(); - Mount? _mount; + final _mountNameController = TextEditingController(); String _mountType = ""; + var _settings = createDefaultSettings(); bool _showAdvanced = false; @override @@ -42,10 +43,15 @@ class _AddMountScreenState extends State { body: Padding( padding: const EdgeInsets.all(_padding), child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ Card( + margin: EdgeInsets.all(_padding), child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ const Text('Provider Type'), @@ -55,7 +61,6 @@ class _AddMountScreenState extends State { onChanged: (newValue) { setState(() { _mountType = newValue ?? ""; - if (_mountType.isNotEmpty) {} }); }, items: @@ -72,7 +77,10 @@ class _AddMountScreenState extends State { if (_mountType.isNotEmpty) const SizedBox(height: _padding), if (_mountType.isNotEmpty) Card( + margin: EdgeInsets.all(_padding), child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ const Text('Configuration Name'), @@ -89,8 +97,10 @@ class _AddMountScreenState extends State { : Mount( MountConfig( name: _mountNameController.text, + settings: _settings, type: _mountType, ), + isAdd: true, ); }); }, @@ -99,7 +109,15 @@ class _AddMountScreenState extends State { ), ), if (_mount != null) - MountSettingsWidget(mount: _mount!, showAdvanced: _showAdvanced), + Card( + margin: EdgeInsets.all(_padding), + child: MountSettingsWidget( + isAdd: true, + mount: _mount!, + onChanged: (settings) => _settings = settings, + showAdvanced: _showAdvanced, + ), + ), ], ), ), diff --git a/web/repertory/lib/types/mount_config.dart b/web/repertory/lib/types/mount_config.dart index 3a4dd62f..f7dd3ad9 100644 --- a/web/repertory/lib/types/mount_config.dart +++ b/web/repertory/lib/types/mount_config.dart @@ -7,7 +7,13 @@ class MountConfig { Map _settings = {}; IconData _state = Icons.toggle_off; final String _type; - MountConfig({required name, required type}) : _name = name, _type = type; + MountConfig({required name, required type, Map? settings}) + : _name = name, + _type = type { + if (settings != null) { + _settings = settings; + } + } String get name => _name; String get path => _path; diff --git a/web/repertory/lib/widgets/mount_settings.dart b/web/repertory/lib/widgets/mount_settings.dart index 272e4109..1e32ca2f 100644 --- a/web/repertory/lib/widgets/mount_settings.dart +++ b/web/repertory/lib/widgets/mount_settings.dart @@ -8,11 +8,15 @@ import 'package:repertory/models/mount.dart'; import 'package:settings_ui/settings_ui.dart'; class MountSettingsWidget extends StatefulWidget { + final bool isAdd; final bool showAdvanced; final Mount mount; + final Function? onChanged; const MountSettingsWidget({ super.key, + this.isAdd = false, required this.mount, + this.onChanged, required this.showAdvanced, }); @@ -33,11 +37,13 @@ class _MountSettingsWidgetState extends State { onPressed: (_) { setState(() { root[key] = !value; + widget.onChanged?.call(_settings); }); }, onToggle: (bool nextValue) { setState(() { root[key] = nextValue; + widget.onChanged?.call(_settings); }); }, ), @@ -70,6 +76,7 @@ class _MountSettingsWidgetState extends State { onPressed: () { setState(() { root[key] = int.parse(updatedValue); + widget.onChanged?.call(_settings); }); Navigator.of(context).pop(); }, @@ -114,6 +121,7 @@ class _MountSettingsWidgetState extends State { onChanged: (newValue) { setState(() { root[key] = int.parse(newValue ?? defaultValue.toString()); + widget.onChanged?.call(_settings); }); }, items: @@ -148,6 +156,7 @@ class _MountSettingsWidgetState extends State { onChanged: (newValue) { setState(() { root[key] = newValue; + widget.onChanged?.call(_settings); }); }, items: @@ -200,6 +209,7 @@ class _MountSettingsWidgetState extends State { onPressed: () { setState(() { root[key] = updatedValue; + widget.onChanged?.call(_settings); }); Navigator.of(context).pop(); }, @@ -629,24 +639,26 @@ class _MountSettingsWidgetState extends State { @override void dispose() { - var settings = widget.mount.mountConfig.settings; - if (!DeepCollectionEquality().equals(_settings, settings)) { - _settings.forEach((key, value) { - if (!DeepCollectionEquality().equals(settings[key], value)) { - if (value is Map) { - value.forEach((subKey, subValue) { - if (!DeepCollectionEquality().equals( - settings[key][subKey], - subValue, - )) { - widget.mount.setValue('$key.$subKey', subValue.toString()); - } - }); - } else { - widget.mount.setValue(key, value.toString()); + if (!widget.isAdd) { + var settings = widget.mount.mountConfig.settings; + if (!DeepCollectionEquality().equals(_settings, settings)) { + _settings.forEach((key, value) { + if (!DeepCollectionEquality().equals(settings[key], value)) { + if (value is Map) { + value.forEach((subKey, subValue) { + if (!DeepCollectionEquality().equals( + settings[key][subKey], + subValue, + )) { + widget.mount.setValue('$key.$subKey', subValue.toString()); + } + }); + } else { + widget.mount.setValue(key, value.toString()); + } } - } - }); + }); + } } super.dispose(); }