fixes
This commit is contained in:
parent
c4758eac73
commit
fd94dbf20d
@ -99,8 +99,6 @@ class _HomeState extends State<Home> {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
bool widescreen = MediaQuery.sizeOf(context).width >= widescreenWidth;
|
bool widescreen = MediaQuery.sizeOf(context).width >= widescreenWidth;
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
// floatingActionButton: _getFAB(widescreen, scrollControllerBusinesses,
|
|
||||||
// scrollControllerJobs, currentPageIndex),
|
|
||||||
bottomNavigationBar: _getNavigationBar(widescreen),
|
bottomNavigationBar: _getNavigationBar(widescreen),
|
||||||
body: RefreshIndicator(
|
body: RefreshIndicator(
|
||||||
edgeOffset: 145,
|
edgeOffset: 145,
|
||||||
@ -173,13 +171,6 @@ class _HomeState extends State<Home> {
|
|||||||
color: Theme.of(context).colorScheme.onSurface,
|
color: Theme.of(context).colorScheme.onSurface,
|
||||||
),
|
),
|
||||||
label: 'Job Listings'),
|
label: 'Job Listings'),
|
||||||
// NavigationDestination(
|
|
||||||
// icon: const Icon(Icons.description_outlined),
|
|
||||||
// selectedIcon: Icon(
|
|
||||||
// Icons.description,
|
|
||||||
// color: Theme.of(context).colorScheme.onSurface,
|
|
||||||
// ),
|
|
||||||
// label: 'Export Data')
|
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -264,51 +255,11 @@ class _HomeState extends State<Home> {
|
|||||||
color: Theme.of(context).colorScheme.onSurface,
|
color: Theme.of(context).colorScheme.onSurface,
|
||||||
),
|
),
|
||||||
label: const Text('Job Listings')),
|
label: const Text('Job Listings')),
|
||||||
// NavigationRailDestination(
|
|
||||||
// icon: const Icon(Icons.description_outlined),
|
|
||||||
// selectedIcon: Icon(
|
|
||||||
// Icons.description,
|
|
||||||
// color: Theme.of(context).colorScheme.onSurface,
|
|
||||||
// ),
|
|
||||||
// label: const Text('Export Data'))
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
// children.first
|
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
// }
|
|
||||||
// return children.first;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Widget _contentPane() {
|
|
||||||
// return IndexedStack(
|
|
||||||
// index: currentPageIndex,
|
|
||||||
// children: [
|
|
||||||
// BusinessesOverview(
|
|
||||||
// searchQuery: searchQuery,
|
|
||||||
// refreshBusinessDataOverviewFuture:
|
|
||||||
// refreshBusinessDataOverviewBusinessFuture,
|
|
||||||
// updateBusinessesCallback: _updateOverviewBusinessesBusinessCallback,
|
|
||||||
// themeCallback: widget.themeCallback,
|
|
||||||
// updateLoggedIn: _updateLoggedIn,
|
|
||||||
// ),
|
|
||||||
// JobsOverview(
|
|
||||||
// searchQuery: searchQuery,
|
|
||||||
// refreshJobDataOverviewFuture: refreshBusinessDataOverviewJobFuture,
|
|
||||||
// updateBusinessesCallback: _updateOverviewBusinessesJobsCallback,
|
|
||||||
// themeCallback: widget.themeCallback, updateLoggedIn: _updateLoggedIn),
|
|
||||||
// ExportData(
|
|
||||||
// searchQuery: searchQuery,
|
|
||||||
// refreshBusinessDataOverviewFuture:
|
|
||||||
// refreshBusinessDataOverviewBusinessFuture,
|
|
||||||
// updateBusinessesWithJobCallback:
|
|
||||||
// _updateOverviewBusinessesJobsCallback,
|
|
||||||
// themeCallback: widget.themeCallback,
|
|
||||||
// refreshJobDataOverviewFuture: refreshBusinessDataOverviewJobFuture,
|
|
||||||
// updateBusinessesCallback: _updateOverviewBusinessesBusinessCallback)
|
|
||||||
// ],
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class _ContentPane extends StatelessWidget {
|
class _ContentPane extends StatelessWidget {
|
||||||
@ -354,35 +305,7 @@ class _ContentPane extends StatelessWidget {
|
|||||||
themeCallback: themeCallback,
|
themeCallback: themeCallback,
|
||||||
updateLoggedIn: updateLoggedIn,
|
updateLoggedIn: updateLoggedIn,
|
||||||
),
|
),
|
||||||
// ExportData(
|
|
||||||
// searchQuery: searchQuery,
|
|
||||||
// refreshBusinessDataOverviewFuture:
|
|
||||||
// refreshBusinessDataOverviewBusinessFuture,
|
|
||||||
// updateBusinessesWithJobCallback:
|
|
||||||
// updateOverviewBusinessesJobsCallback,
|
|
||||||
// themeCallback: themeCallback,
|
|
||||||
// refreshJobDataOverviewFuture: refreshBusinessDataOverviewJobFuture,
|
|
||||||
// updateBusinessesCallback: updateOverviewBusinessesBusinessCallback)
|
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// class FABAnimator extends FloatingActionButtonAnimator {
|
|
||||||
// @override
|
|
||||||
// Offset getOffset({Offset begin, Offset end, double progress}) {
|
|
||||||
// return end;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @override
|
|
||||||
// Animation<double> getRotationAnimation({required Animation<double> parent}) {
|
|
||||||
// return Tween<double>(begin: 0.0, end: 1.0).animate(parent);
|
|
||||||
// throw UnimplementedError();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @override
|
|
||||||
// Animation<double> getScaleAnimation({required Animation<double> parent}) {
|
|
||||||
// return Tween<double>(begin: 0.0, end: 1.0).animate(parent);
|
|
||||||
// throw UnimplementedError();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|||||||
@ -83,10 +83,10 @@ class _MainAppState extends State<MainApp> {
|
|||||||
iconTheme: const IconThemeData(color: Colors.white),
|
iconTheme: const IconThemeData(color: Colors.white),
|
||||||
useMaterial3: true,
|
useMaterial3: true,
|
||||||
inputDecorationTheme: InputDecorationTheme(
|
inputDecorationTheme: InputDecorationTheme(
|
||||||
// border: OutlineInputBorder(),
|
|
||||||
filled: true,
|
filled: true,
|
||||||
fillColor: Colors.grey.withOpacity(0.1),
|
fillColor: Colors.grey.withOpacity(0.1),
|
||||||
labelStyle: const TextStyle(color: Colors.grey),
|
labelStyle: const TextStyle(color: Colors.grey),
|
||||||
|
floatingLabelStyle: TextStyle(color: Colors.blue.shade700),
|
||||||
),
|
),
|
||||||
dropdownMenuTheme: const DropdownMenuThemeData(
|
dropdownMenuTheme: const DropdownMenuThemeData(
|
||||||
inputDecorationTheme: InputDecorationTheme(
|
inputDecorationTheme: InputDecorationTheme(
|
||||||
@ -112,6 +112,7 @@ class _MainAppState extends State<MainApp> {
|
|||||||
filled: true,
|
filled: true,
|
||||||
fillColor: Colors.blue.withOpacity(0.1),
|
fillColor: Colors.blue.withOpacity(0.1),
|
||||||
labelStyle: const TextStyle(color: Colors.grey),
|
labelStyle: const TextStyle(color: Colors.grey),
|
||||||
|
floatingLabelStyle: TextStyle(color: Colors.blue.shade700),
|
||||||
),
|
),
|
||||||
dropdownMenuTheme: const DropdownMenuThemeData(
|
dropdownMenuTheme: const DropdownMenuThemeData(
|
||||||
inputDecorationTheme: InputDecorationTheme(
|
inputDecorationTheme: InputDecorationTheme(
|
||||||
|
|||||||
@ -450,6 +450,7 @@ class _BusinessHeaderState extends State<_BusinessHeader> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// A desktop widget that displays basic info about a business
|
||||||
Widget _businessTile(Business business, BusinessType jobType) {
|
Widget _businessTile(Business business, BusinessType jobType) {
|
||||||
return MouseRegion(
|
return MouseRegion(
|
||||||
cursor: SystemMouseCursors.click,
|
cursor: SystemMouseCursors.click,
|
||||||
@ -573,6 +574,7 @@ class _BusinessHeaderState extends State<_BusinessHeader> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// A mobile widget that displays basic info about a business
|
||||||
Widget _businessListItem(Business business, BusinessType? jobType) {
|
Widget _businessListItem(Business business, BusinessType? jobType) {
|
||||||
return Card(
|
return Card(
|
||||||
child: ListTile(
|
child: ListTile(
|
||||||
|
|||||||
@ -91,6 +91,7 @@ class _CreateEditBusinessState extends State<CreateEditBusiness> {
|
|||||||
),
|
),
|
||||||
floatingActionButton: !widescreen
|
floatingActionButton: !widescreen
|
||||||
? FloatingActionButton.extended(
|
? FloatingActionButton.extended(
|
||||||
|
heroTag: 'saveBusiness',
|
||||||
label: const Text('Save'),
|
label: const Text('Save'),
|
||||||
icon: _isLoading
|
icon: _isLoading
|
||||||
? const SizedBox(
|
? const SizedBox(
|
||||||
@ -171,8 +172,6 @@ class _CreateEditBusinessState extends State<CreateEditBusiness> {
|
|||||||
right: 8.0),
|
right: 8.0),
|
||||||
child: TextFormField(
|
child: TextFormField(
|
||||||
controller: _nameController,
|
controller: _nameController,
|
||||||
autovalidateMode:
|
|
||||||
AutovalidateMode.onUserInteraction,
|
|
||||||
maxLength: 30,
|
maxLength: 30,
|
||||||
onChanged: (inputName) {
|
onChanged: (inputName) {
|
||||||
setState(() {
|
setState(() {
|
||||||
@ -198,8 +197,6 @@ class _CreateEditBusinessState extends State<CreateEditBusiness> {
|
|||||||
bottom: 8.0, left: 8.0, right: 8.0),
|
bottom: 8.0, left: 8.0, right: 8.0),
|
||||||
child: TextFormField(
|
child: TextFormField(
|
||||||
controller: _descriptionController,
|
controller: _descriptionController,
|
||||||
autovalidateMode:
|
|
||||||
AutovalidateMode.onUserInteraction,
|
|
||||||
maxLength: 500,
|
maxLength: 500,
|
||||||
maxLines: null,
|
maxLines: null,
|
||||||
onChanged: (inputDesc) {
|
onChanged: (inputDesc) {
|
||||||
@ -227,8 +224,6 @@ class _CreateEditBusinessState extends State<CreateEditBusiness> {
|
|||||||
left: 8.0, right: 8.0, bottom: 16.0),
|
left: 8.0, right: 8.0, bottom: 16.0),
|
||||||
child: TextFormField(
|
child: TextFormField(
|
||||||
controller: _websiteController,
|
controller: _websiteController,
|
||||||
autovalidateMode:
|
|
||||||
AutovalidateMode.onUserInteraction,
|
|
||||||
keyboardType: TextInputType.url,
|
keyboardType: TextInputType.url,
|
||||||
onChanged: (inputUrl) {
|
onChanged: (inputUrl) {
|
||||||
business.website = Uri.encodeFull(inputUrl);
|
business.website = Uri.encodeFull(inputUrl);
|
||||||
@ -267,7 +262,12 @@ class _CreateEditBusinessState extends State<CreateEditBusiness> {
|
|||||||
left: 8.0, right: 8.0, bottom: 16.0),
|
left: 8.0, right: 8.0, bottom: 16.0),
|
||||||
child: DropdownMenu<BusinessType>(
|
child: DropdownMenu<BusinessType>(
|
||||||
initialSelection: business.type,
|
initialSelection: business.type,
|
||||||
// width: 776,
|
width: (MediaQuery.sizeOf(context).width -
|
||||||
|
24) <
|
||||||
|
776
|
||||||
|
? MediaQuery.sizeOf(context).width - 24
|
||||||
|
: 776,
|
||||||
|
menuHeight: 300,
|
||||||
label: const Text('Business Type'),
|
label: const Text('Business Type'),
|
||||||
errorText: dropDownErrorText,
|
errorText: dropDownErrorText,
|
||||||
dropdownMenuEntries: [
|
dropdownMenuEntries: [
|
||||||
@ -375,8 +375,6 @@ class _CreateEditBusinessState extends State<CreateEditBusiness> {
|
|||||||
labelText:
|
labelText:
|
||||||
'Contact Information Name (required)',
|
'Contact Information Name (required)',
|
||||||
),
|
),
|
||||||
autovalidateMode:
|
|
||||||
AutovalidateMode.onUserInteraction,
|
|
||||||
validator: (value) {
|
validator: (value) {
|
||||||
if (value == null || value.trim().isEmpty) {
|
if (value == null || value.trim().isEmpty) {
|
||||||
return 'Contact name is required';
|
return 'Contact name is required';
|
||||||
@ -392,8 +390,6 @@ class _CreateEditBusinessState extends State<CreateEditBusiness> {
|
|||||||
controller: _contactPhoneController,
|
controller: _contactPhoneController,
|
||||||
inputFormatters: [PhoneFormatter()],
|
inputFormatters: [PhoneFormatter()],
|
||||||
keyboardType: TextInputType.phone,
|
keyboardType: TextInputType.phone,
|
||||||
autovalidateMode:
|
|
||||||
AutovalidateMode.onUserInteraction,
|
|
||||||
onChanged: (inputText) {
|
onChanged: (inputText) {
|
||||||
if (inputText.trim().isEmpty) {
|
if (inputText.trim().isEmpty) {
|
||||||
business.contactPhone = null;
|
business.contactPhone = null;
|
||||||
@ -432,8 +428,6 @@ class _CreateEditBusinessState extends State<CreateEditBusiness> {
|
|||||||
business.contactEmail = inputText.trim();
|
business.contactEmail = inputText.trim();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
autovalidateMode:
|
|
||||||
AutovalidateMode.onUserInteraction,
|
|
||||||
onTapOutside: (PointerDownEvent event) {
|
onTapOutside: (PointerDownEvent event) {
|
||||||
FocusScope.of(context).unfocus();
|
FocusScope.of(context).unfocus();
|
||||||
},
|
},
|
||||||
@ -472,8 +466,6 @@ class _CreateEditBusinessState extends State<CreateEditBusiness> {
|
|||||||
business.locationName = inputName.trim();
|
business.locationName = inputName.trim();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
autovalidateMode:
|
|
||||||
AutovalidateMode.onUserInteraction,
|
|
||||||
onTapOutside: (PointerDownEvent event) {
|
onTapOutside: (PointerDownEvent event) {
|
||||||
FocusScope.of(context).unfocus();
|
FocusScope.of(context).unfocus();
|
||||||
},
|
},
|
||||||
@ -498,8 +490,6 @@ class _CreateEditBusinessState extends State<CreateEditBusiness> {
|
|||||||
business.locationAddress = inputAddr;
|
business.locationAddress = inputAddr;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
autovalidateMode:
|
|
||||||
AutovalidateMode.onUserInteraction,
|
|
||||||
onTapOutside: (PointerDownEvent event) {
|
onTapOutside: (PointerDownEvent event) {
|
||||||
FocusScope.of(context).unfocus();
|
FocusScope.of(context).unfocus();
|
||||||
},
|
},
|
||||||
|
|||||||
@ -83,6 +83,7 @@ class _CreateEditJobListingState extends State<CreateEditJobListing> {
|
|||||||
),
|
),
|
||||||
floatingActionButton: !widescreen
|
floatingActionButton: !widescreen
|
||||||
? FloatingActionButton.extended(
|
? FloatingActionButton.extended(
|
||||||
|
heroTag: 'saveListing',
|
||||||
label: const Text('Save'),
|
label: const Text('Save'),
|
||||||
icon: _isLoading
|
icon: _isLoading
|
||||||
? const SizedBox(
|
? const SizedBox(
|
||||||
@ -227,6 +228,7 @@ class _CreateEditJobListingState extends State<CreateEditJobListing> {
|
|||||||
typeDropdownErrorText,
|
typeDropdownErrorText,
|
||||||
width: calculateDropdownWidth(
|
width: calculateDropdownWidth(
|
||||||
context),
|
context),
|
||||||
|
menuHeight: 300,
|
||||||
dropdownMenuEntries: [
|
dropdownMenuEntries: [
|
||||||
for (JobType type
|
for (JobType type
|
||||||
in JobType.values)
|
in JobType.values)
|
||||||
@ -336,8 +338,6 @@ class _CreateEditJobListingState extends State<CreateEditJobListing> {
|
|||||||
bottom: 8.0),
|
bottom: 8.0),
|
||||||
child: TextFormField(
|
child: TextFormField(
|
||||||
controller: _nameController,
|
controller: _nameController,
|
||||||
autovalidateMode: AutovalidateMode
|
|
||||||
.onUserInteraction,
|
|
||||||
maxLength: 30,
|
maxLength: 30,
|
||||||
onChanged: (inputName) {
|
onChanged: (inputName) {
|
||||||
setState(() {
|
setState(() {
|
||||||
@ -368,8 +368,6 @@ class _CreateEditJobListingState extends State<CreateEditJobListing> {
|
|||||||
bottom: 8.0),
|
bottom: 8.0),
|
||||||
child: TextFormField(
|
child: TextFormField(
|
||||||
controller: _descriptionController,
|
controller: _descriptionController,
|
||||||
autovalidateMode: AutovalidateMode
|
|
||||||
.onUserInteraction,
|
|
||||||
maxLength: 500,
|
maxLength: 500,
|
||||||
maxLines: null,
|
maxLines: null,
|
||||||
onChanged: (inputDesc) {
|
onChanged: (inputDesc) {
|
||||||
@ -422,8 +420,6 @@ class _CreateEditJobListingState extends State<CreateEditJobListing> {
|
|||||||
bottom: 16.0),
|
bottom: 16.0),
|
||||||
child: TextFormField(
|
child: TextFormField(
|
||||||
controller: _linkController,
|
controller: _linkController,
|
||||||
autovalidateMode: AutovalidateMode
|
|
||||||
.onUserInteraction,
|
|
||||||
keyboardType: TextInputType.url,
|
keyboardType: TextInputType.url,
|
||||||
onChanged: (inputUrl) {
|
onChanged: (inputUrl) {
|
||||||
if (inputUrl != '') {
|
if (inputUrl != '') {
|
||||||
@ -475,7 +471,7 @@ class _CreateEditJobListingState extends State<CreateEditJobListing> {
|
|||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(
|
padding: const EdgeInsets.only(
|
||||||
top: 8.0,
|
top: 8.0,
|
||||||
right: 8.0,
|
right: 8.0,
|
||||||
bottom: 8.0),
|
bottom: 8.0),
|
||||||
|
|||||||
@ -258,7 +258,9 @@ class _CreateBusinessDetailState extends State<JobListingDetail> {
|
|||||||
Navigator.pushReplacement(
|
Navigator.pushReplacement(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
MaterialPageRoute(
|
||||||
builder: (context) => const MainApp()));
|
builder: (context) => const MainApp(
|
||||||
|
initialPage: 1,
|
||||||
|
)));
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
|
|||||||
@ -491,7 +491,7 @@ class _JobHeaderState extends State<_JobHeader> {
|
|||||||
delegate: SliverChildBuilderDelegate(
|
delegate: SliverChildBuilderDelegate(
|
||||||
childCount: businesses.length,
|
childCount: businesses.length,
|
||||||
(BuildContext context, int index) {
|
(BuildContext context, int index) {
|
||||||
return _businessTile(
|
return _jobBusinessTile(
|
||||||
businesses[index],
|
businesses[index],
|
||||||
widget.jobType,
|
widget.jobType,
|
||||||
);
|
);
|
||||||
@ -504,7 +504,7 @@ class _JobHeaderState extends State<_JobHeader> {
|
|||||||
delegate: SliverChildBuilderDelegate(
|
delegate: SliverChildBuilderDelegate(
|
||||||
childCount: businesses.length,
|
childCount: businesses.length,
|
||||||
(BuildContext context, int index) {
|
(BuildContext context, int index) {
|
||||||
return _businessListItem(
|
return _jobBusinessListItem(
|
||||||
businesses[index],
|
businesses[index],
|
||||||
widget.jobType,
|
widget.jobType,
|
||||||
);
|
);
|
||||||
@ -514,7 +514,8 @@ class _JobHeaderState extends State<_JobHeader> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _businessTile(Business business, JobType jobType) {
|
/// A desktop widget that displays basic info about a job
|
||||||
|
Widget _jobBusinessTile(Business business, JobType jobType) {
|
||||||
return MouseRegion(
|
return MouseRegion(
|
||||||
cursor: SystemMouseCursors.click,
|
cursor: SystemMouseCursors.click,
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
@ -653,7 +654,8 @@ class _JobHeaderState extends State<_JobHeader> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _businessListItem(Business business, JobType? jobType) {
|
/// A mobile widget that displays basic info about a job
|
||||||
|
Widget _jobBusinessListItem(Business business, JobType? jobType) {
|
||||||
return Card(
|
return Card(
|
||||||
child: ListTile(
|
child: ListTile(
|
||||||
leading: Badge(
|
leading: Badge(
|
||||||
|
|||||||
@ -87,20 +87,6 @@ Future fetchBusinessDataOverviewJobs(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return groupedBusinesses;
|
return groupedBusinesses;
|
||||||
// Map<JobType, List<Business>> groupedBusinesses = {};
|
|
||||||
//
|
|
||||||
// for (String stringType in decodedResponse.keys) {
|
|
||||||
// List<Business> businesses = [];
|
|
||||||
//
|
|
||||||
// for (Map<String, dynamic> map in decodedResponse[stringType]) {
|
|
||||||
// Business business = Business.fromJson(map);
|
|
||||||
// businesses.add(business);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// groupedBusinesses
|
|
||||||
// .addAll({JobType.values.byName(stringType): businesses});
|
|
||||||
// }
|
|
||||||
// return groupedBusinesses;
|
|
||||||
} else {
|
} else {
|
||||||
return 'Error ${response.statusCode}! Please try again later!';
|
return 'Error ${response.statusCode}! Please try again later!';
|
||||||
}
|
}
|
||||||
@ -394,9 +380,6 @@ Future marinoDevLogo() async {
|
|||||||
Uri.parse('$apiAddress/marinodev'),
|
Uri.parse('$apiAddress/marinodev'),
|
||||||
);
|
);
|
||||||
|
|
||||||
// File logo = File ('${getTemporaryDirectory().toString()}/marinodev.svg');
|
|
||||||
// logo.writeAsBytes(response.bodyBytes);
|
|
||||||
|
|
||||||
return response.bodyBytes;
|
return response.bodyBytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user