diff --git a/app/Http/Controllers/Modules/Item.php b/app/Http/Controllers/Modules/Item.php index 9d05d4515..7cfce9518 100644 --- a/app/Http/Controllers/Modules/Item.php +++ b/app/Http/Controllers/Modules/Item.php @@ -329,6 +329,27 @@ class Item extends Controller return redirect()->route('apps.app.show', $alias)->send(); } + public function releases($alias, Request $request) + { + $data = [ + 'query' => [ + 'page' => $request->get('page', 1), + ] + ]; + + $releases = $this->getModuleReleases($alias, $data); + + $html = view('partials.modules.releases', compact('releases'))->render(); + + return response()->json([ + 'success' => true, + 'error' => false, + 'data' => $releases, + 'message' => null, + 'html' => $html, + ]); + } + public function reviews($alias, Request $request) { $data = [ diff --git a/app/Traits/Modules.php b/app/Traits/Modules.php index f6fdfbceb..2617aca42 100644 --- a/app/Traits/Modules.php +++ b/app/Traits/Modules.php @@ -72,6 +72,23 @@ trait Modules return $documentation; } + public function getModuleReleases($alias, $data = []) + { + $key = 'apps.' . $alias . '.releases.' . $this->getDataKeyOfModules($data); + + $releases = Cache::get($key); + + if (!empty($releases)) { + return $releases; + } + + $releases = static::getResponseData('GET', 'apps/' . $alias . '/releases', $data); + + Cache::put($key, $releases, Date::now()->addHour()); + + return $releases; + } + public function getModuleReviews($alias, $data = []) { $key = 'apps.' . $alias . '.reviews.' . $this->getDataKeyOfModules($data); diff --git a/resources/assets/js/views/modules/item.js b/resources/assets/js/views/modules/item.js index b6d5163d0..6e131983f 100644 --- a/resources/assets/js/views/modules/item.js +++ b/resources/assets/js/views/modules/item.js @@ -32,11 +32,20 @@ const app = new Vue({ }, mounted() { + this.onReleases(1); this.onReviews(1); }, data: function () { return { + releases: { + status: false, + html: '', + pagination: { + current_page: 1, + last_page: 1 + } + }, reviews: { status: false, html: '', @@ -77,6 +86,24 @@ const app = new Vue({ location = path; }, + async onReleases(page) { + let releases_promise = Promise.resolve(window.axios.post(url + '/apps/' + app_slug + '/releases', { + page: page + })); + + releases_promise.then(response => { + if (response.data.success) { + this.releases.status= true; + this.releases.html = response.data.html; + + this.releases.pagination.current_page = page; + this.releases.pagination.last_page = response.data.data.last_page; + } + }) + .catch(error => { + }); + }, + async onReviews(page) { let reviews_promise = Promise.resolve(window.axios.post(url + '/apps/' + app_slug + '/reviews', { page: page diff --git a/resources/views/modules/item/show.blade.php b/resources/views/modules/item/show.blade.php index 38154a9cf..0a9893235 100644 --- a/resources/views/modules/item/show.blade.php +++ b/resources/views/modules/item/show.blade.php @@ -104,7 +104,70 @@ @if ($module->changelog)
{{ $release->version }} - @date($release->released_at)
+ + {!! $release->changelog !!} + @endforeach + @endif +