WIP
This commit is contained in:
parent
e59aa9f9c4
commit
e83633430b
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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';
|
||||||
|
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in New Issue