From f4859b87e918400ec986599c01aeb19d8ef3368e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=BCneyt=20=C5=9Eent=C3=BCrk?= Date: Mon, 31 May 2021 14:22:20 +0300 Subject: [PATCH] Added app changelog pagination --- app/Http/Controllers/Modules/Item.php | 21 ++++++ app/Traits/Modules.php | 17 +++++ resources/assets/js/views/modules/item.js | 27 ++++++++ resources/views/modules/item/show.blade.php | 65 ++++++++++++++++++- .../views/partials/modules/releases.blade.php | 9 +++ 5 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 resources/views/partials/modules/releases.blade.php 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)
- {!! $module->changelog !!} + @php + $releases = $module->app_releases; + @endphp + +
+ +
+ @include('partials.modules.releases') +
+ + @php + $release_first_item = count($releases->data) > 0 ? ($releases->current_page - 1) * $releases->per_page + 1 : null; + $release_last_item = count($releases->data) > 0 ? $release_first_item + count($releases->data) - 1 : null; + @endphp + + @if (!empty($release_first_item)) + @stack('pagination_start') + +
+
+ + {{ trans('pagination.showing', ['first' => $release_first_item, 'last' => $release_last_item, 'total' => $releases->total, 'type' => strtolower(trans('modules.tab.changelog'))]) }} + +
+ +
+
    + {{-- Previous Page Link --}} +
  • + « +
  • +
  • + +
  • + + {{-- Pagination Elements --}} + @for ($page = 1; $page <= $releases->last_page; $page++) +
  • + {{ $page }} +
  • +
  • + +
  • + @endfor + + {{-- Next Page Link --}} +
  • + +
  • +
  • + » +
  • +
+
+
+ + @stack('pagination_end') + @else +
+
+ {{ trans('general.no_records') }} +
+
+ @endif
@endif diff --git a/resources/views/partials/modules/releases.blade.php b/resources/views/partials/modules/releases.blade.php new file mode 100644 index 000000000..9fedddd02 --- /dev/null +++ b/resources/views/partials/modules/releases.blade.php @@ -0,0 +1,9 @@ +
+ @if (!empty($releases)) + @foreach($releases->data as $release) +

{{ $release->version }} - @date($release->released_at)

+ + {!! $release->changelog !!} + @endforeach + @endif +
\ No newline at end of file