This commit is contained in:
J. A. Messias 2024-11-18 16:29:53 -03:00
parent e59aa9f9c4
commit e83633430b
4 changed files with 63 additions and 160 deletions

View File

@ -1,3 +1,5 @@
import 'dart:developer';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hub/backend/schema/enums/enums.dart'; import 'package:hub/backend/schema/enums/enums.dart';
import 'package:hub/components/atomic_components/menu_button_item/menu_button_item_widget.dart'; import 'package:hub/components/atomic_components/menu_button_item/menu_button_item_widget.dart';
@ -10,6 +12,7 @@ import 'package:hub/components/organism_components/menu_staggered_view_component
import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:hub/flutter_flow/nav/nav.dart'; import 'package:hub/flutter_flow/nav/nav.dart';
import 'package:hub/shared/extensions/dialog_extensions.dart'; import 'package:hub/shared/extensions/dialog_extensions.dart';
import 'package:hub/shared/helpers/license/license_helper.dart';
import 'package:hub/shared/helpers/storage/base_storage.dart'; import 'package:hub/shared/helpers/storage/base_storage.dart';
import 'package:hub/shared/helpers/storage/storage_helper.dart'; import 'package:hub/shared/helpers/storage/storage_helper.dart';
import 'package:hub/shared/services/authentication/authentication_service.dart'; import 'package:hub/shared/services/authentication/authentication_service.dart';
@ -22,7 +25,7 @@ class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> {
final MenuView style; final MenuView style;
final MenuItem item; final MenuItem item;
final bool expandable; final bool expandable;
final List<MenuOption> menuOptions; final List<Module> menuOptions;
MenuComponentModel({required this.style, required this.item, required this.expandable, required this.menuOptions}); MenuComponentModel({required this.style, required this.item, required this.expandable, required this.menuOptions});
@ -45,9 +48,9 @@ class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> {
menuStaggeredViewComponentModel.dispose(); menuStaggeredViewComponentModel.dispose();
} }
List<MenuEntry?> generateMenuEntries(BuildContext context, MenuItem item, List<MenuOption> options) { Future<List<MenuEntry?>> generateMenuEntries(BuildContext context, MenuItem item, List<Module> options) async {
List<MenuEntry?> entries = []; List<MenuEntry?> entries = [];
MenuEntry? addMenuEntry(IconData icon, String enText, String ptText, Function() action) { Future<MenuEntry?> addMenuEntry(IconData icon, String enText, String ptText, Function() action) async {
entries.add( entries.add(
item == MenuItem.button item == MenuItem.button
? MenuButtonWidget( ? MenuButtonWidget(
@ -72,126 +75,23 @@ class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> {
return null; return null;
} }
if (options.contains(MenuOption.WorkersOnTheProperty)) for (var opt in options) {
String? v = await LicenseHelper().g(opt.value);
log('Module: ${opt.value} - License: $v');
switch (v) {
case 'VISIVEL':
addMenuEntry(Icons.engineering_outlined, 'Schedule Providers', 'Agendar Prestadores', () async { addMenuEntry(Icons.engineering_outlined, 'Schedule Providers', 'Agendar Prestadores', () async {
if (await StorageHelper().g(KeychainStorageKey.provisional.value) == 'true')
await open(context, '/provisionalSchedule'); await open(context, '/provisionalSchedule');
else });
break;
case 'INVISIVEL':
DialogUnavailable.unavailableFeature(context); DialogUnavailable.unavailableFeature(context);
safeSetState; break;
}); default:
if (options.contains(MenuOption.DeliverySchedule)) break;
addMenuEntry(Icons.sports_motorsports_outlined, 'Schedule Deliveries', 'Agendar Entregas', () async { }
if (await StorageHelper().g(KeychainStorageKey.provisional.value) == 'true') safeSetState();
await open(context, '/deliverySchedule'); }
else
DialogUnavailable.unavailableFeature(context);
safeSetState;
});
if (options.contains(MenuOption.FastPassSchedule))
addMenuEntry(Icons.attach_email_outlined, 'Invite Visitor', 'Convidar Visitante', () async {
if (await StorageHelper().g(KeychainStorageKey.whatsapp.value) == 'true')
await open(context, '/fastPassPage');
else
DialogUnavailable.unavailableFeature(context);
safeSetState;
});
if (options.contains(MenuOption.CompleteSchedule))
addMenuEntry(Icons.event, 'Complete Schedule', 'Agenda Completa', () async {
await open(context, '/scheduleCompleteVisitPage');
safeSetState;
});
if (options.contains(MenuOption.PackagesOnTheProperty))
addMenuEntry(Icons.inventory_2_outlined, 'Orders', 'Encomendas', () async {
if (await StorageHelper().g(KeychainStorageKey.whatsapp.value) == 'true')
await open(context, '/packageOrder');
else
DialogUnavailable.unavailableFeature(context);
safeSetState;
});
if (options.contains(MenuOption.ReservationsOnTheLocal))
addMenuEntry(Icons.event_available, 'Reservations', 'Reservas', () async {
if (await StorageHelper().g(KeychainStorageKey.whatsapp.value) == 'true')
await open(context, '/reservation');
else
DialogUnavailable.unavailableFeature(context);
safeSetState;
});
if (options.contains(MenuOption.VisitorsRegister))
addMenuEntry(Icons.person_add_alt_1_outlined, 'Register Visitor', 'Cadastrar Visitante', () async {
await open(context, '/registerVisitorPage');
safeSetState;
});
if (options.contains(MenuOption.QRCodeAccessInProperty))
addMenuEntry(Icons.qr_code, 'QRCode Access', 'QRCode de Acesso', () async {
await open(context, '/qrCodePage');
safeSetState;
});
if (options.contains(MenuOption.PetsOnTheProperty))
addMenuEntry(Icons.pets, 'Pets', 'Pets', () async {
if (await StorageHelper().g(KeychainStorageKey.pets.value) == 'true')
await open(context, '/petsOnThePropertyPage');
else
DialogUnavailable.unavailableFeature(context);
safeSetState;
});
if (options.contains(MenuOption.PetsRegister))
addMenuEntry(Icons.pets, 'Pets Register', 'Cadastrar Pet', () async {
if (await StorageHelper().g(KeychainStorageKey.pets.value) == 'true')
await open(context, '/petsPage');
else
DialogUnavailable.unavailableFeature(context);
safeSetState;
});
if (options.contains(MenuOption.AccessOnTheProperty))
addMenuEntry(Icons.transfer_within_a_station_outlined, 'Access History', 'Consultar Acessos', () async {
await open(context, '/acessHistoryPage');
safeSetState;
});
if (options.contains(MenuOption.ResidentsOnTheProperty))
addMenuEntry(Icons.groups, 'Residents', 'Moradores', () async {
await open(context, '/peopleOnThePropertyPage');
safeSetState;
});
if (options.contains(MenuOption.LiberationsOnTheProperty))
addMenuEntry(Icons.how_to_reg_outlined, 'Liberations History', 'Consultar Liberações', () async {
await open(context, '/liberationHistory');
safeSetState;
});
if (options.contains(MenuOption.MessagesOnTheProperty))
addMenuEntry(Icons.chat_outlined, 'Message History', 'Consultar Mensagens', () async {
await open(context, '/messageHistoryPage');
safeSetState;
});
if (options.contains(MenuOption.VehiclesOnTheProperty))
addMenuEntry(Symbols.directions_car, 'Vehicles', 'Veículos', () async {
await open(context, '/vehiclesOnThePropertyPage');
safeSetState;
});
if (options.contains(MenuOption.VisitsOnTheProperty))
addMenuEntry(Symbols.perm_contact_calendar, 'Opened Visits', 'Visitas em Aberto', () async {
await open(context, '/visitsOnThePropertyPage');
safeSetState;
});
if (options.contains(MenuOption.AboutProperty))
addMenuEntry(Icons.home, 'About Property', 'Sobre a Propriedade', () async {
if (await StorageHelper().g(KeychainStorageKey.whatsapp.value) == 'true')
await open(context, '/aboutProperty');
else
DialogUnavailable.unavailableFeature(context);
safeSetState;
});
if (options.contains(MenuOption.SettingsOnTheApp))
addMenuEntry(Icons.settings, 'System Settings', 'Opções do Sistema', () async {
await open(context, '/preferencesSettings');
safeSetState;
});
if (options.contains(MenuOption.LogoutOnTheApp))
addMenuEntry(Icons.logout, 'Logout', 'Sair', () async {
await out(context);
safeSetState;
});
return entries; return entries;
} }

View File

@ -30,9 +30,10 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
} }
@override @override
void didChangeDependencies() { void didChangeDependencies() async {
super.didChangeDependencies(); super.didChangeDependencies();
widget.model.menuEntries = widget.model.generateMenuEntries(context, widget.model.item, widget.model.menuOptions); widget.model.menuEntries =
await widget.model.generateMenuEntries(context, widget.model.item, widget.model.menuOptions);
} }
@override @override

View File

@ -3,13 +3,13 @@ import 'dart:developer';
import 'package:hub/shared/helpers/database/database_helper.dart'; import 'package:hub/shared/helpers/database/database_helper.dart';
import 'package:sqflite/sqflite.dart'; import 'package:sqflite/sqflite.dart';
enum InactiveLicenseKey { enum InactiveModuleKey {
residents, residents,
vehicles, vehicles,
openedVisits, openedVisits,
} }
enum ActiveLicenseKey { enum ActiveModuleKey {
messages, messages,
liberations, liberations,
reservations, reservations,
@ -21,14 +21,14 @@ enum ActiveLicenseKey {
fastPass, fastPass,
} }
extension InactiveLicenseKeyExtension on InactiveLicenseKey { extension InactiveModuleKeyExtension on InactiveModuleKey {
String get value { String get value {
switch (this) { switch (this) {
case InactiveLicenseKey.residents: case InactiveModuleKey.residents:
return 'FRE-HUB-RESIDENTS'; return 'FRE-HUB-RESIDENTS';
case InactiveLicenseKey.vehicles: case InactiveModuleKey.vehicles:
return 'FRE-HUB-VEHICLES'; return 'FRE-HUB-VEHICLES';
case InactiveLicenseKey.openedVisits: case InactiveModuleKey.openedVisits:
return 'FRE-HUB-OPENED-VISITS'; return 'FRE-HUB-OPENED-VISITS';
default: default:
return ''; return '';
@ -36,26 +36,26 @@ extension InactiveLicenseKeyExtension on InactiveLicenseKey {
} }
} }
extension ActiveLicenseKeyExtension on ActiveLicenseKey { extension ActiveModuleKeyExtension on ActiveModuleKey {
String get value { String get value {
switch (this) { switch (this) {
case ActiveLicenseKey.messages: case ActiveModuleKey.messages:
return 'FRE-HUB-MESSAGES'; return 'FRE-HUB-MESSAGES';
case ActiveLicenseKey.liberations: case ActiveModuleKey.liberations:
return 'FRE-HUB-LIBERATIONS'; return 'FRE-HUB-LIBERATIONS';
case ActiveLicenseKey.reservations: case ActiveModuleKey.reservations:
return 'FRE-HUB-RESERVATIONS'; return 'FRE-HUB-RESERVATIONS';
case ActiveLicenseKey.access: case ActiveModuleKey.access:
return 'FRE-HUB-ACCESS'; return 'FRE-HUB-ACCESS';
case ActiveLicenseKey.orders: case ActiveModuleKey.orders:
return 'FRE-HUB-ORDERS'; return 'FRE-HUB-ORDERS';
case ActiveLicenseKey.completeSchedule: case ActiveModuleKey.completeSchedule:
return 'FRE-HUB-COMPLETE-SCHEDULE'; return 'FRE-HUB-COMPLETE-SCHEDULE';
case ActiveLicenseKey.providerSchedule: case ActiveModuleKey.providerSchedule:
return 'FRE-HUB-AGE-PROV-PRESTADOR'; return 'FRE-HUB-AGE-PROV-PRESTADOR';
case ActiveLicenseKey.deliverySchedule: case ActiveModuleKey.deliverySchedule:
return 'FRE-HUB-AGE-PROV-DELIVERY'; return 'FRE-HUB-AGE-PROV-DELIVERY';
case ActiveLicenseKey.fastPass: case ActiveModuleKey.fastPass:
return 'FRE-HUB-FASTPASS'; return 'FRE-HUB-FASTPASS';
default: default:
return ''; return '';
@ -63,7 +63,7 @@ extension ActiveLicenseKeyExtension on ActiveLicenseKey {
} }
} }
enum LicenseStorageKey { enum Module {
messages, messages,
liberations, liberations,
reservations, reservations,
@ -79,34 +79,34 @@ enum LicenseStorageKey {
fastPass, fastPass,
} }
extension LicenseKeyExtension on LicenseStorageKey { extension LicenseKeyExtension on Module {
String get value { String get value {
switch (this) { switch (this) {
case LicenseStorageKey.messages: case Module.messages:
return 'FRE-HUB-MESSAGES'; return 'FRE-HUB-MESSAGES';
case LicenseStorageKey.liberations: case Module.liberations:
return 'FRE-HUB-LIBERATIONS'; return 'FRE-HUB-LIBERATIONS';
case LicenseStorageKey.reservations: case Module.reservations:
return 'FRE-HUB-RESERVATIONS'; return 'FRE-HUB-RESERVATIONS';
case LicenseStorageKey.access: case Module.access:
return 'FRE-HUB-ACCESS'; return 'FRE-HUB-ACCESS';
case LicenseStorageKey.openedVisits: case Module.openedVisits:
return 'FRE-HUB-OPENED-VISITS'; return 'FRE-HUB-OPENED-VISITS';
case LicenseStorageKey.vehicles: case Module.vehicles:
return 'FRE-HUB-VEHICLES'; return 'FRE-HUB-VEHICLES';
case LicenseStorageKey.residents: case Module.residents:
return 'FRE-HUB-RESIDENTS'; return 'FRE-HUB-RESIDENTS';
case LicenseStorageKey.pets: case Module.pets:
return 'FRE-HUB-PETS'; return 'FRE-HUB-PETS';
case LicenseStorageKey.orders: case Module.orders:
return 'FRE-HUB-ORDERS'; return 'FRE-HUB-ORDERS';
case LicenseStorageKey.completeSchedule: case Module.completeSchedule:
return 'FRE-HUB-COMPLETE-SCHEDULE'; return 'FRE-HUB-COMPLETE-SCHEDULE';
case LicenseStorageKey.providerSchedule: case Module.providerSchedule:
return 'FRE-HUB-AGE-PROV-PRESTADOR'; return 'FRE-HUB-AGE-PROV-PRESTADOR';
case LicenseStorageKey.deliverySchedule: case Module.deliverySchedule:
return 'FRE-HUB-AGE-PROV-DELIVERY'; return 'FRE-HUB-AGE-PROV-DELIVERY';
case LicenseStorageKey.fastPass: case Module.fastPass:
return 'FRE-HUB-FASTPASS'; return 'FRE-HUB-FASTPASS';
default: default:
return ''; return '';
@ -115,9 +115,11 @@ extension LicenseKeyExtension on LicenseStorageKey {
} }
class LicenseHelper { class LicenseHelper {
LicenseHelper._(); static final LicenseHelper _instance = LicenseHelper._internal();
static final LicenseHelper instance = LicenseHelper._(); factory LicenseHelper() => _instance;
LicenseHelper._internal();
static const String tableLicense = 'license'; static const String tableLicense = 'license';

View File

@ -17,8 +17,8 @@ class LicenseService {
LicenseService._internal(); LicenseService._internal();
static Future<void> setupLicense(Database database) async { static Future<void> setupLicense(Database database) async {
await LicenseHelper.insertLicenseFoo(InactiveLicenseKey.values.map((e) => e.value).toList(), 'INVISIVEL'); await LicenseHelper.insertLicenseFoo(InactiveModuleKey.values.map((e) => e.value).toList(), 'INVISIVEL');
await LicenseHelper.insertLicenseFoo(ActiveLicenseKey.values.map((e) => e.value).toList(), 'VISIVEL'); await LicenseHelper.insertLicenseFoo(ActiveModuleKey.values.map((e) => e.value).toList(), 'VISIVEL');
} }
static Future<void> initLicenseService() async { static Future<void> initLicenseService() async {
@ -74,7 +74,7 @@ class LicenseService {
} }
static bool licenseContainsKey(final String key) { static bool licenseContainsKey(final String key) {
return LicenseStorageKey.values.map((e) => e.value).toList().contains(key); return Module.values.map((e) => e.value).toList().contains(key);
} }
static Future<void> _saveModule(final dynamic body) async { static Future<void> _saveModule(final dynamic body) async {