diff --git a/web/app/Helpers/ValidationHelper.php b/web/app/Helpers/ValidationHelper.php new file mode 100644 index 0000000..c4c29a2 --- /dev/null +++ b/web/app/Helpers/ValidationHelper.php @@ -0,0 +1,25 @@ + [] + ]; + + foreach($validator->errors()->all() as $error) { + array_push($errorModel['errors'], ['code' => 400, 'message' => $error]); + } + + return $errorModel; + } +} diff --git a/web/app/Http/Controllers/Api/ShopController.php b/web/app/Http/Controllers/Api/ShopController.php new file mode 100644 index 0000000..43903fd --- /dev/null +++ b/web/app/Http/Controllers/Api/ShopController.php @@ -0,0 +1,41 @@ +all(), [ + 'assetTypeId' => ['required', 'regex:/^\\d(,?\\d)*$/i'], + 'gearGenreId' => ['regex:/^\\d(,?\\d)*$/i'] + ]); + + if($validator->fails()) { + return ShopController::generateValidatorError($validator); + } + + $valid = $validator->valid(); + + if($valid['assetTypeId'] != '19' && isset($valid['gearGenreId'])) { + $validator->errors()->add('gearGenreId', 'gearGenreId can only be used with typeId 19.'); + return ShopController::generateValidatorError($validator); + } + + return response([ + 'data' => [], + 'next_cursor' => null, + 'prev_cursor' => null + ]); + } +} diff --git a/web/resources/js/components/Shop.js b/web/resources/js/components/Shop.js index aa46ea1..08deddd 100644 --- a/web/resources/js/components/Shop.js +++ b/web/resources/js/components/Shop.js @@ -199,7 +199,9 @@ class Shop extends Component { super(props); this.state = { selectedCategoryId: -1, - pageLoading: true + pageItems: [], + pageLoaded: true, + error: false }; this.navigateCategory = this.navigateCategory.bind(this); @@ -233,9 +235,34 @@ class Shop extends Component { } navigateCategory(categoryId, data) { - this.setState({selectedCategoryId: categoryId}); + this.setState({selectedCategoryId: categoryId, pageLoaded: false}); - console.log(data); + let url = buildGenericApiUrl('api', 'catalog/v1/list-json'); + let paramIterator = 0; + Object.keys(data).filter(key => { + if (key == 'label') + return false; + return true; + }).map(key => { + url += ((paramIterator++ == 0 ? '?' : '&') + `${key}=${data[key]}`); + }); + + axios.get(url) + .then(res => { + const items = res.data; + + this.nextCursor = items.next_cursor; + this.setState({ pageItems: items.data, pageLoaded: true, error: false }); + }).catch(err => { + const data = err.response; + + let errorMessage = 'An error occurred while processing your request.'; + if(data.errors) + errorMessage = data.errors[0].message; + + this.setState({ pageItems: [], pageLoaded: true, error: errorMessage }); + this.inputBox.current.focus(); + }); } render() { @@ -260,36 +287,51 @@ class Shop extends Component {
Nothing found.
+ : +
+ Test hat
+Free
+