Merge branch 'master' of tzw/fcs into master
This commit is contained in:
@@ -2,35 +2,25 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
|
|
||||||
enum Flavor { UNSET, DEV, STAGING, PRODUCTION, LOCAL }
|
enum Flavor { UNSET, DEV, STAGING, PRODUCTION, LOCAL }
|
||||||
|
|
||||||
const FlavorNames = ["Unset", "Development", "Staging", "Production", "Local"];
|
const FlavorNames = ["Unset", "Development", "Staging", "Production", "Local"];
|
||||||
|
|
||||||
class Config {
|
class Config {
|
||||||
static Config _instance = Config(
|
static Config _instance = Config(flavor: Flavor.UNSET, apiURL: "");
|
||||||
flavor: Flavor.UNSET,
|
|
||||||
apiURL: "",
|
|
||||||
bucketName: "",
|
|
||||||
reportProjectID: "",
|
|
||||||
reportURL: "");
|
|
||||||
|
|
||||||
final Flavor flavor;
|
final Flavor flavor;
|
||||||
final String name;
|
final String name;
|
||||||
final Color color;
|
final Color color;
|
||||||
final String apiURL;
|
final String apiURL;
|
||||||
final String reportURL;
|
|
||||||
final Level level;
|
final Level level;
|
||||||
final String reportProjectID;
|
|
||||||
final String bucketName;
|
|
||||||
|
|
||||||
factory Config(
|
factory Config(
|
||||||
{required Flavor flavor,
|
{required Flavor flavor,
|
||||||
required String apiURL,
|
required String apiURL,
|
||||||
required String reportURL,
|
Color color = Colors.blue,
|
||||||
required String reportProjectID,
|
Level level = Level.SEVERE}) {
|
||||||
required String bucketName,
|
_instance = Config._internal(
|
||||||
Color color= Colors.blue,
|
flavor, FlavorNames[flavor.index], color, apiURL, level);
|
||||||
Level level= Level.SEVERE}) {
|
|
||||||
_instance = Config._internal(flavor, FlavorNames[flavor.index], color,
|
|
||||||
apiURL, reportURL, level, reportProjectID, bucketName);
|
|
||||||
|
|
||||||
Logger.root.level = level;
|
Logger.root.level = level;
|
||||||
Logger.root.onRecord.listen((record) {
|
Logger.root.onRecord.listen((record) {
|
||||||
@@ -41,8 +31,7 @@ class Config {
|
|||||||
return _instance;
|
return _instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
Config._internal(this.flavor, this.name, this.color, this.apiURL,
|
Config._internal(this.flavor, this.name, this.color, this.apiURL, this.level);
|
||||||
this.reportURL, this.level, this.reportProjectID, this.bucketName);
|
|
||||||
|
|
||||||
static Config get instance {
|
static Config get instance {
|
||||||
return _instance;
|
return _instance;
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:fcs/config.dart';
|
|
||||||
import 'package:fcs/constants.dart';
|
import 'package:fcs/constants.dart';
|
||||||
import 'package:fcs/domain/entities/package.dart';
|
import 'package:fcs/domain/entities/package.dart';
|
||||||
import 'package:fcs/helpers/api_helper.dart';
|
import 'package:fcs/helpers/api_helper.dart';
|
||||||
import 'package:fcs/helpers/firebase_helper.dart';
|
import 'package:fcs/helpers/firebase_helper.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
|
|
||||||
|
import '../services/services.dart';
|
||||||
|
|
||||||
class PackageDataProvider {
|
class PackageDataProvider {
|
||||||
final log = Logger('PackageDataProvider');
|
final log = Logger('PackageDataProvider');
|
||||||
|
|
||||||
@@ -70,7 +71,7 @@ class PackageDataProvider {
|
|||||||
try {
|
try {
|
||||||
var data = await requestAPI(
|
var data = await requestAPI(
|
||||||
"/api/fts/$packages_collection/$escapePackage/$limit", "GET",
|
"/api/fts/$packages_collection/$escapePackage/$limit", "GET",
|
||||||
url: Config.instance.reportURL, token: await getToken());
|
url: Services.setting.reportURL, token: await getToken());
|
||||||
|
|
||||||
if (data == null) return [];
|
if (data == null) return [];
|
||||||
|
|
||||||
@@ -105,7 +106,7 @@ class PackageDataProvider {
|
|||||||
};
|
};
|
||||||
var result = await requestAPI("/api/data/packages", "POST",
|
var result = await requestAPI("/api/data/packages", "POST",
|
||||||
token: await getToken(),
|
token: await getToken(),
|
||||||
url: Config.instance.reportURL,
|
url: Services.setting.reportURL,
|
||||||
payload: jsonEncode(data));
|
payload: jsonEncode(data));
|
||||||
if (result == null) return packages;
|
if (result == null) return packages;
|
||||||
result.forEach((d) {
|
result.forEach((d) {
|
||||||
|
|||||||
@@ -4,8 +4,7 @@ import 'package:fcs/domain/entities/pickup.dart';
|
|||||||
import 'package:fcs/helpers/api_helper.dart';
|
import 'package:fcs/helpers/api_helper.dart';
|
||||||
import 'package:fcs/helpers/firebase_helper.dart';
|
import 'package:fcs/helpers/firebase_helper.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
|
import '../services/services.dart';
|
||||||
import '../../config.dart';
|
|
||||||
|
|
||||||
class PickupDataProvider {
|
class PickupDataProvider {
|
||||||
final log = Logger('PickupDataProvider');
|
final log = Logger('PickupDataProvider');
|
||||||
@@ -34,7 +33,7 @@ class PickupDataProvider {
|
|||||||
};
|
};
|
||||||
var result = await requestAPI("/api/data/pickups", "POST",
|
var result = await requestAPI("/api/data/pickups", "POST",
|
||||||
token: await getToken(),
|
token: await getToken(),
|
||||||
url: Config.instance.reportURL,
|
url: Services.setting.reportURL,
|
||||||
payload: jsonEncode(data));
|
payload: jsonEncode(data));
|
||||||
if (result == null) return pickups;
|
if (result == null) return pickups;
|
||||||
result.forEach((d) {
|
result.forEach((d) {
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:cloud_firestore/cloud_firestore.dart';
|
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||||
import 'package:fcs/config.dart';
|
|
||||||
import 'package:fcs/constants.dart';
|
import 'package:fcs/constants.dart';
|
||||||
import 'package:fcs/domain/entities/user.dart';
|
import 'package:fcs/domain/entities/user.dart';
|
||||||
import 'package:fcs/helpers/api_helper.dart';
|
import 'package:fcs/helpers/api_helper.dart';
|
||||||
import 'package:fcs/helpers/firebase_helper.dart';
|
import 'package:fcs/helpers/firebase_helper.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
|
|
||||||
|
import '../services/services.dart';
|
||||||
|
|
||||||
class UserDataProvider {
|
class UserDataProvider {
|
||||||
final log = Logger('UserDataProvider');
|
final log = Logger('UserDataProvider');
|
||||||
|
|
||||||
@@ -66,7 +67,7 @@ class UserDataProvider {
|
|||||||
try {
|
try {
|
||||||
var data = await requestAPI(
|
var data = await requestAPI(
|
||||||
"/api/fts/$user_collection/$escapeBuyer/$limit", "GET",
|
"/api/fts/$user_collection/$escapeBuyer/$limit", "GET",
|
||||||
url: Config.instance.reportURL, token: await getToken());
|
url: Services.setting.reportURL, token: await getToken());
|
||||||
|
|
||||||
if (data == null) return [];
|
if (data == null) return [];
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import 'package:fcs/data/services/rate_service.dart';
|
|||||||
import 'package:fcs/data/services/shipment_imp.dart';
|
import 'package:fcs/data/services/shipment_imp.dart';
|
||||||
import 'package:fcs/data/services/shipment_service.dart';
|
import 'package:fcs/data/services/shipment_service.dart';
|
||||||
|
|
||||||
|
import '../../domain/entities/setting.dart';
|
||||||
import 'auth_imp.dart';
|
import 'auth_imp.dart';
|
||||||
import 'auth_service.dart';
|
import 'auth_service.dart';
|
||||||
import 'common_imp.dart';
|
import 'common_imp.dart';
|
||||||
@@ -37,6 +38,8 @@ import 'user_service.dart';
|
|||||||
|
|
||||||
class Services {
|
class Services {
|
||||||
static final Services instance = Services._();
|
static final Services instance = Services._();
|
||||||
|
static Setting setting = Setting();
|
||||||
|
|
||||||
|
|
||||||
late AuthService _authService;
|
late AuthService _authService;
|
||||||
late UserService _userService;
|
late UserService _userService;
|
||||||
|
|||||||
@@ -10,6 +10,9 @@ List<Day> dayLists = [
|
|||||||
|
|
||||||
class Setting {
|
class Setting {
|
||||||
final int supportBuildNum;
|
final int supportBuildNum;
|
||||||
|
final String reportURL;
|
||||||
|
final String reportProjectID;
|
||||||
|
final String bucketName;
|
||||||
// contact page
|
// contact page
|
||||||
String? usaAddress;
|
String? usaAddress;
|
||||||
String? mmAddress;
|
String? mmAddress;
|
||||||
@@ -24,7 +27,7 @@ class Setting {
|
|||||||
String? about;
|
String? about;
|
||||||
String? courierWebsite;
|
String? courierWebsite;
|
||||||
String? deactivateTextEn;
|
String? deactivateTextEn;
|
||||||
String? deactivateTextMm;
|
String? deactivateTextMm;
|
||||||
|
|
||||||
List<String> shipmentTypes;
|
List<String> shipmentTypes;
|
||||||
|
|
||||||
@@ -44,27 +47,32 @@ class Setting {
|
|||||||
this.shipmentTypes = const [],
|
this.shipmentTypes = const [],
|
||||||
this.courierWebsite,
|
this.courierWebsite,
|
||||||
this.deactivateTextEn,
|
this.deactivateTextEn,
|
||||||
this.deactivateTextMm});
|
this.deactivateTextMm,
|
||||||
|
this.bucketName = '',
|
||||||
|
this.reportProjectID = '',
|
||||||
|
this.reportURL = ''});
|
||||||
|
|
||||||
factory Setting.fromMap(Map<String, dynamic> map) {
|
factory Setting.fromMap(Map<String, dynamic> map) {
|
||||||
return Setting(
|
return Setting(
|
||||||
supportBuildNum: map['support_build_number'],
|
supportBuildNum: map['support_build_number'],
|
||||||
inviteRequired: map['invite_required'],
|
inviteRequired: map['invite_required'],
|
||||||
appUrl: map['app_url'],
|
appUrl: map['app_url'],
|
||||||
usaAddress: map['usa_address'],
|
usaAddress: map['usa_address'],
|
||||||
mmAddress: map['mm_address'],
|
mmAddress: map['mm_address'],
|
||||||
usaContactNumber: map['usa_contact_number'],
|
usaContactNumber: map['usa_contact_number'],
|
||||||
mmContactNumber: map['mm_contact_number'],
|
mmContactNumber: map['mm_contact_number'],
|
||||||
emailAddress: map['email_address'],
|
emailAddress: map['email_address'],
|
||||||
facebookLink: map['facebook_link'],
|
facebookLink: map['facebook_link'],
|
||||||
about: map['about'],
|
about: map['about'],
|
||||||
termsEng: map['terms_eng_markdown'],
|
termsEng: map['terms_eng_markdown'],
|
||||||
termsMm: map['terms_mm_markdown'],
|
termsMm: map['terms_mm_markdown'],
|
||||||
shipmentTypes: List.from(map['shipment_types']),
|
shipmentTypes: List.from(map['shipment_types']),
|
||||||
courierWebsite: map['courier_website'],
|
courierWebsite: map['courier_website'],
|
||||||
deactivateTextEn: map['deactivate_text_en']??"",
|
deactivateTextEn: map['deactivate_text_en'] ?? "",
|
||||||
deactivateTextMm: map['deactivate_text_mm']??""
|
deactivateTextMm: map['deactivate_text_mm'] ?? "",
|
||||||
);
|
reportProjectID: map['report_project_id'] ?? "",
|
||||||
|
reportURL: map['report_url'] ?? "",
|
||||||
|
bucketName: map['bucket_name'] ?? '');
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ Future<dynamic> requestAPI(String path, method,
|
|||||||
if (devInfo.deviceID != null) {
|
if (devInfo.deviceID != null) {
|
||||||
headers["Device"] = devInfo.deviceID ?? "" + ":" + deviceName;
|
headers["Device"] = devInfo.deviceID ?? "" + ":" + deviceName;
|
||||||
}
|
}
|
||||||
headers["Project-ID"] = Config.instance.reportProjectID;
|
headers["Project-ID"] = Services.setting.reportProjectID;
|
||||||
|
|
||||||
BaseOptions options = new BaseOptions(
|
BaseOptions options = new BaseOptions(
|
||||||
method: method,
|
method: method,
|
||||||
@@ -99,7 +99,7 @@ Future<dynamic> requestDownloadAPI(String path, method,
|
|||||||
var _downloadData = StringBuffer();
|
var _downloadData = StringBuffer();
|
||||||
var fileSave = new File(filePath!);
|
var fileSave = new File(filePath!);
|
||||||
var request = await client.getUrl(Uri.parse("$baseUrl$path"));
|
var request = await client.getUrl(Uri.parse("$baseUrl$path"));
|
||||||
request.headers.set("Project-ID", Config.instance.reportProjectID);
|
request.headers.set("Project-ID", Services.setting.reportProjectID);
|
||||||
request.headers
|
request.headers
|
||||||
.set(HttpHeaders.contentTypeHeader, "application/json; charset=UTF-8");
|
.set(HttpHeaders.contentTypeHeader, "application/json; charset=UTF-8");
|
||||||
if (token != null) {
|
if (token != null) {
|
||||||
@@ -140,7 +140,7 @@ Future<dynamic> requestDownloadPDFAPI(String path, method,
|
|||||||
// var _downloadData = StringBuffer();
|
// var _downloadData = StringBuffer();
|
||||||
var fileSave = new File(filePath!);
|
var fileSave = new File(filePath!);
|
||||||
var request = await client.getUrl(Uri.parse("$baseUrl$path"));
|
var request = await client.getUrl(Uri.parse("$baseUrl$path"));
|
||||||
request.headers.set("Project-ID", Config.instance.reportProjectID);
|
request.headers.set("Project-ID", Services.setting.reportProjectID);
|
||||||
if (token != null) {
|
if (token != null) {
|
||||||
request.headers.set("Token", token);
|
request.headers.set("Token", token);
|
||||||
}
|
}
|
||||||
@@ -188,7 +188,7 @@ Future<dynamic> requestDownload(String path, method,
|
|||||||
HttpClient client = new HttpClient();
|
HttpClient client = new HttpClient();
|
||||||
// var _downloadData = StringBuffer();
|
// var _downloadData = StringBuffer();
|
||||||
var request = await client.postUrl(Uri.parse("$baseUrl$path"));
|
var request = await client.postUrl(Uri.parse("$baseUrl$path"));
|
||||||
request.headers.set("Project-ID", Config.instance.reportProjectID);
|
request.headers.set("Project-ID", Services.setting.reportProjectID);
|
||||||
if (token != null) {
|
if (token != null) {
|
||||||
request.headers.set("Token", token);
|
request.headers.set("Token", token);
|
||||||
}
|
}
|
||||||
@@ -244,7 +244,7 @@ Future<File> downloadPDF(
|
|||||||
|
|
||||||
await requestDownload("/api/pdf", "POST",
|
await requestDownload("/api/pdf", "POST",
|
||||||
filePath: path,
|
filePath: path,
|
||||||
url: Config.instance.reportURL,
|
url: Services.setting.reportURL,
|
||||||
token: await getToken(),
|
token: await getToken(),
|
||||||
payload: jsonEncode(data), onDownloadDone: (f) async {
|
payload: jsonEncode(data), onDownloadDone: (f) async {
|
||||||
completer.complete(f);
|
completer.complete(f);
|
||||||
|
|||||||
@@ -21,9 +21,9 @@ Future<void> main() async {
|
|||||||
color: Colors.blue,
|
color: Colors.blue,
|
||||||
apiURL: "http://192.168.100.150:9090",
|
apiURL: "http://192.168.100.150:9090",
|
||||||
// apiURL: "https://asia-northeast1-fcs-dev1.cloudfunctions.net/API13",
|
// apiURL: "https://asia-northeast1-fcs-dev1.cloudfunctions.net/API13",
|
||||||
reportURL: "http://petrok.mokkon.com:7071",
|
// reportURL: "http://petrok.mokkon.com:7071",
|
||||||
reportProjectID: "fcs-dev",
|
// reportProjectID: "fcs-dev",
|
||||||
bucketName: "gs://fcs-dev1-us",
|
// bucketName: "gs://fcs-dev1-us",
|
||||||
level: Level.ALL);
|
level: Level.ALL);
|
||||||
runApp(App(title: "FCS - Dev"));
|
runApp(App(title: "FCS - Dev"));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,10 +9,12 @@ void main() {
|
|||||||
Config(
|
Config(
|
||||||
flavor: Flavor.DEV,
|
flavor: Flavor.DEV,
|
||||||
color: Colors.blue,
|
color: Colors.blue,
|
||||||
reportURL: "http://petrok.mokkon.com:8091",
|
|
||||||
reportProjectID: "fcs-dev",
|
|
||||||
apiURL: "http://192.168.1.155:7777",
|
apiURL: "http://192.168.1.155:7777",
|
||||||
bucketName: "gs://fcs-dev1-us",
|
// reportURL: "http://petrok.mokkon.com:8091",
|
||||||
|
// reportProjectID: "fcs-dev",
|
||||||
|
// bucketName: "gs://fcs-dev1-us",
|
||||||
level: Level.ALL);
|
level: Level.ALL);
|
||||||
runApp(App(title: "FCS - Dev local",));
|
runApp(App(
|
||||||
|
title: "FCS - Dev local",
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,9 +16,9 @@ Future<void> main() async {
|
|||||||
flavor: Flavor.PRODUCTION,
|
flavor: Flavor.PRODUCTION,
|
||||||
color: Colors.blue,
|
color: Colors.blue,
|
||||||
apiURL: "https://asia-northeast1-fcs-prod1.cloudfunctions.net/API13",
|
apiURL: "https://asia-northeast1-fcs-prod1.cloudfunctions.net/API13",
|
||||||
reportURL: "http://petrok.mokkon.com:8092",
|
// reportURL: "http://petrok.mokkon.com:8092",
|
||||||
reportProjectID: "fcs-prod",
|
// reportProjectID: "fcs-prod",
|
||||||
bucketName: "gs://fcs-prod1",
|
// bucketName: "gs://fcs-prod1",
|
||||||
level: Level.ALL);
|
level: Level.ALL);
|
||||||
runApp(App(title: "FCS"));
|
runApp(App(title: "FCS"));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ import 'dart:async';
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:cloud_firestore/cloud_firestore.dart';
|
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||||
import 'package:fcs/config.dart';
|
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
|
|
||||||
import '../../../constants.dart';
|
import '../../../constants.dart';
|
||||||
|
import '../../../data/services/services.dart';
|
||||||
import '../../../domain/entities/user.dart';
|
import '../../../domain/entities/user.dart';
|
||||||
import '../../../helpers/api_helper.dart';
|
import '../../../helpers/api_helper.dart';
|
||||||
import '../../../helpers/firebase_helper.dart';
|
import '../../../helpers/firebase_helper.dart';
|
||||||
@@ -56,7 +56,7 @@ class ConsigneeSelectionModel extends BaseModel {
|
|||||||
|
|
||||||
var result = await requestAPI(
|
var result = await requestAPI(
|
||||||
"/api/fts/$user_collection/$escapeSender/$rowPerPage", "GET",
|
"/api/fts/$user_collection/$escapeSender/$rowPerPage", "GET",
|
||||||
url: Config.instance.reportURL, token: await getToken());
|
url: Services.setting.reportURL, token: await getToken());
|
||||||
|
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
for (var row in result) {
|
for (var row in result) {
|
||||||
|
|||||||
@@ -3,9 +3,8 @@ import 'dart:convert';
|
|||||||
|
|
||||||
import 'package:cloud_firestore/cloud_firestore.dart';
|
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
|
|
||||||
import '../../../config.dart';
|
|
||||||
import '../../../constants.dart';
|
import '../../../constants.dart';
|
||||||
|
import '../../../data/services/services.dart';
|
||||||
import '../../../domain/entities/user.dart';
|
import '../../../domain/entities/user.dart';
|
||||||
import '../../../helpers/api_helper.dart';
|
import '../../../helpers/api_helper.dart';
|
||||||
import '../../../helpers/firebase_helper.dart';
|
import '../../../helpers/firebase_helper.dart';
|
||||||
@@ -57,7 +56,7 @@ class SenderSelectionModel extends BaseModel {
|
|||||||
|
|
||||||
var result = await requestAPI(
|
var result = await requestAPI(
|
||||||
"/api/fts/$user_collection/$escapeSender/$rowPerPage", "GET",
|
"/api/fts/$user_collection/$escapeSender/$rowPerPage", "GET",
|
||||||
url: Config.instance.reportURL, token: await getToken());
|
url: Services.setting.reportURL, token: await getToken());
|
||||||
|
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
for (var row in result) {
|
for (var row in result) {
|
||||||
|
|||||||
@@ -157,9 +157,12 @@ class FcsShipmentModel extends BaseModel {
|
|||||||
|
|
||||||
void initUser(user) {
|
void initUser(user) {
|
||||||
super.initUser(user);
|
super.initUser(user);
|
||||||
_loadShipmentTypes();
|
|
||||||
_loadShipmentConsignees();
|
if (user != null && user.hasFcsShipments()) {
|
||||||
_loadShipmentPorts();
|
_loadShipmentTypes();
|
||||||
|
_loadShipmentConsignees();
|
||||||
|
_loadShipmentPorts();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -141,6 +141,7 @@ class MainModel extends ChangeNotifier {
|
|||||||
try {
|
try {
|
||||||
Services.instance.authService.getSetting().listen((event) {
|
Services.instance.authService.getSetting().listen((event) {
|
||||||
this.setting = event;
|
this.setting = event;
|
||||||
|
Services.setting = event;
|
||||||
models.forEach((m) => m.initSetting(setting));
|
models.forEach((m) => m.initSetting(setting));
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ class _PackageInfoState extends State<PackageInfo> {
|
|||||||
if (d == null) return;
|
if (d == null) return;
|
||||||
_changeDeliverayAddress(d);
|
_changeDeliverayAddress(d);
|
||||||
}
|
}
|
||||||
: () {},
|
: null,
|
||||||
);
|
);
|
||||||
|
|
||||||
return LocalProgress(
|
return LocalProgress(
|
||||||
|
|||||||
Reference in New Issue
Block a user