Changeset 276a8b6 for src


Ignore:
Timestamp:
10/07/21 20:07:41 (3 years ago)
Author:
KostaFortumanov <kfortumanov@…>
Branches:
master
Children:
0c37625
Parents:
0f4f552
Message:

post pagination

Location:
src/main
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • src/main/java/it/finki/charitable/controller/DonationPostController.java

    r0f4f552 r276a8b6  
    44import it.finki.charitable.services.*;
    55import it.finki.charitable.util.FileUploadUtil;
     6import org.springframework.data.domain.Page;
    67import org.springframework.format.annotation.DateTimeFormat;
    78import org.springframework.security.core.context.SecurityContextHolder;
     
    122123
    123124    @RequestMapping("/album")
    124     public String album(Model model) {
    125         List<DonationPost> postList = donationPostService.findAllByApproved(true);
    126         if (postList.size() == 0) {
     125    public String album(Model model,
     126                        @RequestParam int page,
     127                        @RequestParam String sort,
     128                        @RequestParam(required = false,defaultValue = "") String order) {
     129        Page<DonationPost> postList = donationPostService.findPaginated(page,6, sort, order);
     130        if (postList.getSize() == 0) {
    127131            model.addAttribute("noPosts", true);
    128132            return "album";
    129133        }
     134        model.addAttribute("totalPages", postList.getTotalPages());
    130135        model.addAttribute("postList", postList);
    131136        return "album";
  • src/main/java/it/finki/charitable/repository/DonationPostRepository.java

    r0f4f552 r276a8b6  
    44import it.finki.charitable.entities.DonationPost;
    55import it.finki.charitable.entities.Moderator;
     6import org.springframework.data.domain.Page;
     7import org.springframework.data.domain.Pageable;
    68import org.springframework.data.jpa.repository.JpaRepository;
    79import org.springframework.stereotype.Repository;
     
    1416    List<DonationPost> findAllByApproved(Boolean approved);
    1517    List<DonationPost> findAllByModerator(Moderator moderator);
     18    Page<DonationPost> findAllByApproved(Pageable pageable, boolean approved);
    1619}
  • src/main/java/it/finki/charitable/services/DonationPostService.java

    r0f4f552 r276a8b6  
    5454    }
    5555
    56     public Page<DonationPost> findPaginated(int pageNo, int pageSize, String sort) {
    57         Pageable pageable = PageRequest.of(pageNo - 1, pageSize, Sort.by(sort));
    58         return donationPostRepository.findAll(pageable);
     56    public Page<DonationPost> findPaginated(int pageNo, int pageSize, String sort, String order) {
     57        Sort s = Sort.by(sort);
     58        s = order.equals("asc") ? s.ascending() : s.descending();
     59        Pageable pageable = PageRequest.of(pageNo - 1, pageSize, s);
     60        return donationPostRepository.findAllByApproved(pageable, true);
    5961    }
    6062}
  • src/main/resources/templates/album.html

    r0f4f552 r276a8b6  
    1616    <p th:if="${noPosts}">No posts</p>
    1717    <div th:unless="${noPosts}" class="album py-5 bg-light">
     18
    1819        <div class="container">
    19 
     20            <div class="row">
     21                <div class="col-md-2">
     22                    <label class="form-label" for="sortBy">Sort By</label>
     23                    <select class="input-group-text" id="sortBy">
     24                        <option value="id">Default</option>
     25                        <option value="title">Title</option>
     26                        <option value="dateDue">Date due</option>
     27                        <option value="fundsNeeded">Funds needed</option>
     28                    </select>
     29                </div>
     30                <div class="col-md-2">
     31                    <label class="form-label" for="order">Order</label>
     32                    <select class="input-group-text" id="order">
     33                        <option value="asc">Ascending</option>
     34                        <option value="desc">Descending</option>
     35                    </select>
     36                </div>
     37            </div>
     38            <br>
    2039            <div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 g-3">
    2140                <div class="col" th:each="post : ${postList}">
     
    3756            </div>
    3857        </div>
    39         <hr class="ui-menu-divider" />
     58        <hr class="ui-menu-divider"/>
    4059        <nav>
    41             <ul class="pagination justify-content-center">
    42                 <li class="page-item"><a class="page-link" href="#">Previous</a></li>
    43                 <li class="page-item"><a class="page-link" href="#">1</a></li>
    44                 <li class="page-item"><a class="page-link" href="#">2</a></li>
    45                 <li class="page-item"><a class="page-link" href="#">3</a></li>
    46                 <li class="page-item"><a class="page-link" href="#">Next</a></li>
    47             </ul>
     60            <div id="pagination"></div>
    4861        </nav>
    4962    </div>
     
    5164</main>
    5265<script src="/js/bootstrap.min.js"></script>
     66<script id="helper" src="/js/pagination.js" th:data-pages="${totalPages}"></script>
    5367</body>
    5468</html>
  • src/main/resources/templates/common/navbar.html

    r0f4f552 r276a8b6  
    2323                    </li>
    2424                    <li class="nav-item">
    25                         <a sec:authorize="isAnonymous() or hasAuthority('USER')" th:href="@{/album?page=1}" class="nav-link px-2 text-white">Posts</a>
     25                        <a sec:authorize="isAnonymous() or hasAuthority('USER')" th:href="@{/album?page=1&sort=id}" class="nav-link px-2 text-white">Posts</a>
    2626                        <a sec:authorize="hasAuthority('MODERATOR')" th:href="@{/moderator/approval}" class="nav-link px-2 text-white">Posts for approval</a>
    2727                    </li>
Note: See TracChangeset for help on using the changeset viewer.