Add option to hide tooltips

This commit is contained in:
Hillel Coren 2022-05-12 18:39:43 +03:00
parent cfb0d8ded7
commit ffe2a300e4
8 changed files with 89 additions and 26 deletions

View File

@ -150,6 +150,7 @@ class UpdateUserPreferences implements PersistPrefs {
this.showPdfPreview,
this.editAfterSaving,
this.enableTouchEvents,
this.enableTooltips,
});
final AppLayout appLayout;
@ -175,6 +176,7 @@ class UpdateUserPreferences implements PersistPrefs {
final BuiltMap<String, String> customColors;
final bool editAfterSaving;
final bool enableTouchEvents;
final bool enableTooltips;
}
class LoadAccountSuccess implements StopLoading {

View File

@ -62,6 +62,7 @@ PrefState prefReducer(
..isHistoryVisible = historyVisibleReducer(state.isHistoryVisible, action)
..enableDarkMode = darkModeReducer(state.enableDarkMode, action)
..enableJSPDF = enableJspdfReducer(state.enableJSPDF, action)
..enableTooltips = enableTooltipsReducer(state.enableTooltips, action)
..persistData = persistDataReducer(state.persistData, action)
..persistUI = persistUIReducer(state.persistUI, action)
..showKanban = showKanbanReducer(state.showKanban, action)
@ -282,6 +283,12 @@ Reducer<bool> enableJspdfReducer = combineReducers([
}),
]);
Reducer<bool> enableTooltipsReducer = combineReducers([
TypedReducer<bool, UpdateUserPreferences>((enableTooltips, action) {
return action.enableTooltips ?? enableTooltips;
}),
]);
Reducer<bool> persistDataReducer = combineReducers([
TypedReducer<bool, UpdateUserPreferences>((persistData, action) {
return action.persistData ?? persistData;

View File

@ -30,6 +30,7 @@ abstract class PrefState implements Built<PrefState, PrefStateBuilder> {
requireAuthentication: false,
colorTheme: kColorThemeLight,
enableTouchEvents: true,
enableTooltips: true,
enableJSPDF: false,
isFilterVisible: false,
textScaleFactor: 1,
@ -132,6 +133,8 @@ abstract class PrefState implements Built<PrefState, PrefStateBuilder> {
int get rowsPerPage;
bool get enableTooltips;
String get colorTheme;
bool get hideDesktopWarning;
@ -210,6 +213,7 @@ abstract class PrefState implements Built<PrefState, PrefStateBuilder> {
..showPdfPreview = true
..enableTouchEvents = true
..enableJSPDF = false
..enableTooltips = true
..textScaleFactor = 1
..colorTheme =
builder.enableDarkMode == true ? kColorThemeLight : kColorThemeLight;

View File

@ -178,6 +178,9 @@ class _$PrefStateSerializer implements StructuredSerializer<PrefState> {
'rowsPerPage',
serializers.serialize(object.rowsPerPage,
specifiedType: const FullType(int)),
'enableTooltips',
serializers.serialize(object.enableTooltips,
specifiedType: const FullType(bool)),
'colorTheme',
serializers.serialize(object.colorTheme,
specifiedType: const FullType(String)),
@ -304,6 +307,10 @@ class _$PrefStateSerializer implements StructuredSerializer<PrefState> {
result.rowsPerPage = serializers.deserialize(value,
specifiedType: const FullType(int)) as int;
break;
case 'enableTooltips':
result.enableTooltips = serializers.deserialize(value,
specifiedType: const FullType(bool)) as bool;
break;
case 'colorTheme':
result.colorTheme = serializers.deserialize(value,
specifiedType: const FullType(String)) as String;
@ -607,6 +614,8 @@ class _$PrefState extends PrefState {
@override
final int rowsPerPage;
@override
final bool enableTooltips;
@override
final String colorTheme;
@override
final bool hideDesktopWarning;
@ -644,6 +653,7 @@ class _$PrefState extends PrefState {
this.tapSelectedToEdit,
this.enableJSPDF,
this.rowsPerPage,
this.enableTooltips,
this.colorTheme,
this.hideDesktopWarning,
this.editAfterSaving,
@ -691,6 +701,8 @@ class _$PrefState extends PrefState {
enableJSPDF, 'PrefState', 'enableJSPDF');
BuiltValueNullFieldError.checkNotNull(
rowsPerPage, 'PrefState', 'rowsPerPage');
BuiltValueNullFieldError.checkNotNull(
enableTooltips, 'PrefState', 'enableTooltips');
BuiltValueNullFieldError.checkNotNull(
colorTheme, 'PrefState', 'colorTheme');
BuiltValueNullFieldError.checkNotNull(
@ -737,6 +749,7 @@ class _$PrefState extends PrefState {
tapSelectedToEdit == other.tapSelectedToEdit &&
enableJSPDF == other.enableJSPDF &&
rowsPerPage == other.rowsPerPage &&
enableTooltips == other.enableTooltips &&
colorTheme == other.colorTheme &&
hideDesktopWarning == other.hideDesktopWarning &&
editAfterSaving == other.editAfterSaving &&
@ -766,20 +779,20 @@ class _$PrefState extends PrefState {
$jc(
$jc(
$jc(
$jc($jc($jc($jc($jc($jc($jc($jc($jc(0, appLayout.hashCode), moduleLayout.hashCode), menuSidebarMode.hashCode), historySidebarMode.hashCode), useSidebarEditor.hashCode), customColors.hashCode), isPreviewVisible.hashCode), isMenuVisible.hashCode),
showKanban.hashCode),
showPdfPreview.hashCode),
enableTouchEvents.hashCode),
isHistoryVisible.hashCode),
enableDarkMode.hashCode),
isFilterVisible.hashCode),
persistData.hashCode),
persistUI.hashCode),
longPressSelectionIsDefault.hashCode),
requireAuthentication.hashCode),
tapSelectedToEdit.hashCode),
enableJSPDF.hashCode),
rowsPerPage.hashCode),
$jc($jc($jc($jc($jc($jc($jc($jc($jc($jc(0, appLayout.hashCode), moduleLayout.hashCode), menuSidebarMode.hashCode), historySidebarMode.hashCode), useSidebarEditor.hashCode), customColors.hashCode), isPreviewVisible.hashCode), isMenuVisible.hashCode), showKanban.hashCode),
showPdfPreview.hashCode),
enableTouchEvents.hashCode),
isHistoryVisible.hashCode),
enableDarkMode.hashCode),
isFilterVisible.hashCode),
persistData.hashCode),
persistUI.hashCode),
longPressSelectionIsDefault.hashCode),
requireAuthentication.hashCode),
tapSelectedToEdit.hashCode),
enableJSPDF.hashCode),
rowsPerPage.hashCode),
enableTooltips.hashCode),
colorTheme.hashCode),
hideDesktopWarning.hashCode),
editAfterSaving.hashCode),
@ -812,6 +825,7 @@ class _$PrefState extends PrefState {
..add('tapSelectedToEdit', tapSelectedToEdit)
..add('enableJSPDF', enableJSPDF)
..add('rowsPerPage', rowsPerPage)
..add('enableTooltips', enableTooltips)
..add('colorTheme', colorTheme)
..add('hideDesktopWarning', hideDesktopWarning)
..add('editAfterSaving', editAfterSaving)
@ -926,6 +940,11 @@ class PrefStateBuilder implements Builder<PrefState, PrefStateBuilder> {
int get rowsPerPage => _$this._rowsPerPage;
set rowsPerPage(int rowsPerPage) => _$this._rowsPerPage = rowsPerPage;
bool _enableTooltips;
bool get enableTooltips => _$this._enableTooltips;
set enableTooltips(bool enableTooltips) =>
_$this._enableTooltips = enableTooltips;
String _colorTheme;
String get colorTheme => _$this._colorTheme;
set colorTheme(String colorTheme) => _$this._colorTheme = colorTheme;
@ -985,6 +1004,7 @@ class PrefStateBuilder implements Builder<PrefState, PrefStateBuilder> {
_tapSelectedToEdit = $v.tapSelectedToEdit;
_enableJSPDF = $v.enableJSPDF;
_rowsPerPage = $v.rowsPerPage;
_enableTooltips = $v.enableTooltips;
_colorTheme = $v.colorTheme;
_hideDesktopWarning = $v.hideDesktopWarning;
_editAfterSaving = $v.editAfterSaving;
@ -1042,6 +1062,7 @@ class PrefStateBuilder implements Builder<PrefState, PrefStateBuilder> {
tapSelectedToEdit: BuiltValueNullFieldError.checkNotNull(tapSelectedToEdit, 'PrefState', 'tapSelectedToEdit'),
enableJSPDF: BuiltValueNullFieldError.checkNotNull(enableJSPDF, 'PrefState', 'enableJSPDF'),
rowsPerPage: BuiltValueNullFieldError.checkNotNull(rowsPerPage, 'PrefState', 'rowsPerPage'),
enableTooltips: BuiltValueNullFieldError.checkNotNull(enableTooltips, 'PrefState', 'enableTooltips'),
colorTheme: BuiltValueNullFieldError.checkNotNull(colorTheme, 'PrefState', 'colorTheme'),
hideDesktopWarning: BuiltValueNullFieldError.checkNotNull(hideDesktopWarning, 'PrefState', 'hideDesktopWarning'),
editAfterSaving: BuiltValueNullFieldError.checkNotNull(editAfterSaving, 'PrefState', 'editAfterSaving'),

View File

@ -663,7 +663,7 @@ class _DrawerTileState extends State<DrawerTile> {
);
} else if (userCompany.canCreate(widget.entityType)) {
trailingWidget = IconButton(
tooltip: widget.iconTooltip,
tooltip: prefState.enableTooltips ? widget.iconTooltip : null,
icon: Icon(
Icons.add_circle_outline,
color: textColor,
@ -769,6 +769,7 @@ class SidebarFooter extends StatelessWidget {
Widget build(BuildContext context) {
final store = StoreProvider.of<AppState>(context);
final state = store.state;
final prefState = state.prefState;
final localization = AppLocalization.of(context);
final account = state.userCompany.account;
@ -784,7 +785,7 @@ class SidebarFooter extends StatelessWidget {
if (!Config.DEMO_MODE && !state.isDemo)
if (state.isSelfHosted && !account.isSchedulerRunning)
IconButton(
tooltip: localization.error,
tooltip: prefState.enableTooltips ? localization.error : '',
icon: Icon(
Icons.warning,
color: Colors.red,
@ -811,7 +812,7 @@ class SidebarFooter extends StatelessWidget {
)
else if (state.credentials.token.isEmpty)
IconButton(
tooltip: localization.error,
tooltip: prefState.enableTooltips ? localization.error : '',
icon: Icon(
Icons.warning,
color: Colors.red,
@ -823,7 +824,9 @@ class SidebarFooter extends StatelessWidget {
)
else if (state.isSelfHosted && state.isUpdateAvailable)
IconButton(
tooltip: localization.updateAvailable,
tooltip: prefState.enableTooltips
? localization.updateAvailable
: '',
icon: Icon(
Icons.warning,
color: Theme.of(context).colorScheme.secondary,
@ -881,12 +884,13 @@ class SidebarFooter extends StatelessWidget {
IconButton(
icon: Icon(Icons.mail),
onPressed: () => _showContactUs(context),
tooltip: localization.contactUs,
tooltip: prefState.enableTooltips ? localization.contactUs : '',
),
IconButton(
icon: Icon(Icons.forum),
onPressed: () => launch(kForumUrl),
tooltip: localization.supportForum,
tooltip:
prefState.enableTooltips ? localization.supportForum : '',
),
IconButton(
icon: Icon(Icons.help_outline),
@ -912,13 +916,13 @@ class SidebarFooter extends StatelessWidget {
launch(url);
},
tooltip: localization.userGuide,
tooltip: prefState.enableTooltips ? localization.userGuide : '',
),
IconButton(
icon: Icon(Icons.info_outline),
// prevent the modal from being stuck over the pdf
onPressed: () => _showAbout(context),
tooltip: localization.about,
tooltip: prefState.enableTooltips ? localization.about : '',
),
/*
if (kDebugMode)
@ -937,7 +941,7 @@ class SidebarFooter extends StatelessWidget {
Icons.warning,
color: Colors.red,
),
tooltip: localization.error,
tooltip: prefState.enableTooltips ? localization.error : '',
onPressed: () => showDialog<ErrorDialog>(
context: context,
builder: (BuildContext context) {
@ -953,7 +957,8 @@ class SidebarFooter extends StatelessWidget {
AppBorder(
isLeft: true,
child: Tooltip(
message: localization.hideMenu,
message:
prefState.enableTooltips ? localization.hideMenu : '',
child: InkWell(
onTap: () => store.dispatch(
UpdateUserPreferences(sidebar: AppSidebar.menu)),
@ -1047,7 +1052,8 @@ class SidebarFooterCollapsed extends StatelessWidget {
Icons.chevron_right,
color: state.isUpdateAvailable ? state.accentColor : null,
),
tooltip: localization.showMenu,
tooltip:
state.prefState.enableTooltips ? localization.showMenu : null,
onPressed: () {
store.dispatch(UpdateUserPreferences(sidebar: AppSidebar.menu));
},

View File

@ -233,6 +233,15 @@ class _DeviceSettingsState extends State<DeviceSettings>
},
),
if (isDesktop(context)) ...[
SwitchListTile(
title: Text(localization.enableTooltips),
subtitle: Text(localization.enableTooltipsHelp),
value: prefState.enableTooltips,
onChanged: (value) =>
viewModel.onEnableTooltipsChanged(context, value),
activeColor: Theme.of(context).colorScheme.secondary,
secondary: Icon(MdiIcons.tooltip),
),
SwitchListTile(
title: Text(localization.enableTouchEvents),
subtitle: Text(localization.enableTouchEventsHelp),

View File

@ -59,6 +59,7 @@ class DeviceSettingsVM {
@required this.onTextScaleFactorChanged,
@required this.onEditAfterSavingChanged,
@required this.onEnableTouchEventsChanged,
@required this.onEnableTooltipsChanged,
});
static DeviceSettingsVM fromStore(Store<AppState> store) {
@ -116,6 +117,9 @@ class DeviceSettingsVM {
onTextScaleFactorChanged: (context, value) {
store.dispatch(UpdateUserPreferences(textScaleFactor: value));
},
onEnableTooltipsChanged: (context, value) {
store.dispatch(UpdateUserPreferences(enableTooltips: value));
},
onColorThemeChanged: (context, value) async {
if (store.state.prefState.colorTheme != value) {
store.dispatch(UpdateUserPreferences(colorTheme: value));
@ -207,6 +211,7 @@ class DeviceSettingsVM {
final Function(BuildContext, bool) onShowPdfChanged;
final Function(BuildContext, bool) onEnableJSPDFChanged;
final Function(BuildContext, bool) onEnableTouchEventsChanged;
final Function(BuildContext, bool) onEnableTooltipsChanged;
final Function(BuildContext, double) onTextScaleFactorChanged;
final Future<bool> authenticationSupported;
}

View File

@ -16,6 +16,8 @@ mixin LocalizationsProvider on LocaleCodeAware {
static final Map<String, Map<String, String>> _localizedValues = {
'en': {
// STARTER: lang key - do not remove comment
'enable_tooltips': 'Enable Tooltips',
'enable_tooltips_help': 'Show tooltips when hovering the mouse',
'multiple_client_error': 'Error: records belong to more than one client',
'register_label': 'Create your account in seconds',
'login_label': 'Login to an existing account',
@ -69670,11 +69672,18 @@ mixin LocalizationsProvider on LocaleCodeAware {
_localizedValues[localeCode]['login_label'] ??
_localizedValues[localeCode]['login_label'];
String get multipleClientError =>
_localizedValues[localeCode]['multiple_client_error'] ??
_localizedValues[localeCode]['multiple_client_error'];
String get enableTooltips =>
_localizedValues[localeCode]['enable_tooltips'] ??
_localizedValues[localeCode]['enable_tooltips'];
String get enableTooltipsHelp =>
_localizedValues[localeCode]['enable_tooltips_help'] ??
_localizedValues[localeCode]['enable_tooltips_help'];
// STARTER: lang field - do not remove comment
String lookup(String key) {