import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; import 'package:flutter/foundation.dart'; import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/data/models/entities.dart'; import 'package:invoiceninja_flutter/data/models/static/color_theme_model.dart'; part 'pref_state.g.dart'; abstract class PrefState implements Built { factory PrefState({ModuleLayout moduleLayout}) { return _$PrefState._( appLayout: AppLayout.desktop, moduleLayout: ModuleLayout.table, isPreviewVisible: true, useSidebarEditor: BuiltMap(), menuSidebarMode: AppSidebarMode.collapse, historySidebarMode: AppSidebarMode.float, rowsPerPage: 10, isMenuVisible: true, isHistoryVisible: false, enableDarkMode: false, requireAuthentication: false, colorTheme: kColorThemeLight, showFilterSidebar: false, longPressSelectionIsDefault: true, companyPrefs: BuiltMap(), ); } PrefState._(); @override @memoized int get hashCode; AppLayout get appLayout; ModuleLayout get moduleLayout; AppSidebarMode get menuSidebarMode; AppSidebarMode get historySidebarMode; BuiltMap get useSidebarEditor; bool get isPreviewVisible; bool get isMenuVisible; bool get isHistoryVisible; bool get enableDarkMode; bool get showFilterSidebar; bool get longPressSelectionIsDefault; bool get requireAuthentication; int get rowsPerPage; String get colorTheme; ColorTheme get colorThemeModel => colorThemesMap.containsKey(colorTheme) ? colorThemesMap[colorTheme] : colorThemesMap[kColorThemeLight]; BuiltMap get companyPrefs; bool get isDesktop => appLayout == AppLayout.desktop; bool isEditorFullScreen(EntityType entityType) => isDesktop && !(useSidebarEditor[entityType] ?? false); bool get isNotDesktop => !isDesktop; bool get isMobile => appLayout == AppLayout.mobile; bool get isNotMobile => !isMobile; bool get isModuleList => moduleLayout == ModuleLayout.list; bool get isModuleTable => moduleLayout == ModuleLayout.table; bool get isMenuFloated => appLayout == AppLayout.mobile || menuSidebarMode == AppSidebarMode.float; bool get isHistoryFloated => appLayout == AppLayout.mobile || historySidebarMode == AppSidebarMode.float; bool get showMenu => (isMenuVisible && menuSidebarMode == AppSidebarMode.visible) || menuSidebarMode == AppSidebarMode.collapse; bool get showHistory => isHistoryVisible && historySidebarMode == AppSidebarMode.visible; bool get isMenuCollapsed => isNotMobile && menuSidebarMode == AppSidebarMode.collapse && !isMenuVisible; // ignore: unused_element static void _initializeBuilder(PrefStateBuilder builder) => builder ..useSidebarEditor.replace(BuiltMap()) ..colorTheme = kColorThemeLight; static Serializer get serializer => _$prefStateSerializer; } abstract class CompanyPrefState implements Built { factory CompanyPrefState({ String accentColor, }) { return _$CompanyPrefState._( historyList: BuiltList(), ); } CompanyPrefState._(); @override @memoized int get hashCode; BuiltList get historyList; static Serializer get serializer => _$companyPrefStateSerializer; } class AppLayout extends EnumClass { const AppLayout._(String name) : super(name); static Serializer get serializer => _$appLayoutSerializer; static const AppLayout mobile = _$mobile; static const AppLayout desktop = _$desktop; static BuiltSet get values => _$values; static AppLayout valueOf(String name) => _$valueOf(name); } class ModuleLayout extends EnumClass { const ModuleLayout._(String name) : super(name); static Serializer get serializer => _$moduleLayoutSerializer; static const ModuleLayout list = _$list; static const ModuleLayout table = _$table; static BuiltSet get values => _$moduleLayoutValues; static ModuleLayout valueOf(String name) => _$moduleLayoutValueOf(name); } class AppSidebar extends EnumClass { const AppSidebar._(String name) : super(name); static Serializer get serializer => _$appSidebarSerializer; static const AppSidebar menu = _$menu; static const AppSidebar history = _$history; static BuiltSet get values => _$valuesSidebar; static AppSidebar valueOf(String name) => _$valueOfSidebar(name); } class AppSidebarMode extends EnumClass { const AppSidebarMode._(String name) : super(name); static Serializer get serializer => _$appSidebarModeSerializer; static const AppSidebarMode float = _$float; static const AppSidebarMode visible = _$visible; static const AppSidebarMode collapse = _$collapse; static BuiltSet get values => _$valuesSidebarMode; static AppSidebarMode valueOf(String name) => _$valueOfSidebarMode(name); } abstract class HistoryRecord implements Built { factory HistoryRecord({ @required EntityType entityType, String id, }) { return _$HistoryRecord._( id: id, entityType: entityType, timestamp: DateTime.now().millisecondsSinceEpoch, ); } HistoryRecord._(); @override @memoized int get hashCode; @nullable String get id; EntityType get entityType; int get timestamp; DateTime get dateTime => DateTime.fromMillisecondsSinceEpoch(timestamp); bool matchesRecord(HistoryRecord record) => isEqualTo(entityId: record.id, entityType: record.entityType); bool isEqualTo({EntityType entityType, String entityId}) => entityType == this.entityType && entityId == id; static Serializer get serializer => _$historyRecordSerializer; }