Changeset e5b84dc
- Timestamp:
- 09/11/22 18:03:58 (2 years ago)
- Branches:
- master
- Children:
- 775e15e
- Parents:
- 527b93f
- Files:
-
- 6 added
- 2 deleted
- 30 edited
Legend:
- Unmodified
- Added
- Removed
-
phonelux-backend/src/main/java/finki/it/phoneluxbackend/controllers/PhoneController.java
r527b93f re5b84dc 22 22 // handle request parameters for filtering phones 23 23 @GetMapping(path = "/phones") 24 public List<Phone> getPhones(){ 25 return phoneService.getPhones().stream() 26 .sorted(Comparator.comparing(Phone::getTotal_offers).reversed()) 27 .collect(Collectors.toList()); 24 public List<Phone> getPhones(@RequestParam(name = "shops", required = false) String shops, 25 @RequestParam(name = "brands", required = false) String brands, 26 @RequestParam(name = "sortBy", required = false) String sortBy, 27 @RequestParam(name = "priceRange", required = false) String priceRange, 28 @RequestParam(name = "searchValue", required = false) String searchValue){ 29 30 return phoneService.getPhones(shops,brands,sortBy,priceRange,searchValue); 28 31 } 29 32 -
phonelux-backend/src/main/java/finki/it/phoneluxbackend/controllers/PhoneOfferController.java
r527b93f re5b84dc 16 16 @RestController 17 17 @AllArgsConstructor 18 @RequestMapping(path = "/phones/offers/{phoneId}")19 18 public class PhoneOfferController { 20 19 private final PhoneOfferService phoneOfferService; 21 20 private final PhoneService phoneService; 22 21 23 @GetMapping 22 @GetMapping(path = "/phones/offers/{phoneId}") 24 23 public List<PhoneOffer> getOffersForPhone(@PathVariable("phoneId") Long phoneId){ 25 24 return phoneOfferService.getPhoneOffersForPhone(phoneId); 26 25 } 27 26 27 @GetMapping(path = "/phoneoffer/{offerId}") 28 public PhoneOffer getPhoneOffer(@PathVariable("offerId") Long offerId){ 29 return phoneOfferService.getPhoneOffer(offerId); 30 } 31 28 32 } -
phonelux-backend/src/main/java/finki/it/phoneluxbackend/security/CustomAuthenticationFilter.java
r527b93f re5b84dc 33 33 @Override 34 34 public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException { 35 String email = request.getParameter("email"); // mozda ke treba da se smeni vo username35 String email = request.getParameter("email"); 36 36 String password = request.getParameter("password"); 37 37 UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(email,password); … … 46 46 String access_token = JWT.create() 47 47 .withSubject(user.getEmail()) 48 .withExpiresAt(new Date(System.currentTimeMillis() + 10 * 60 * 1000 ))48 .withExpiresAt(new Date(System.currentTimeMillis() + 10 * 60 * 100000)) // approx. 16.5 hours 49 49 .withIssuer(request.getRequestURL().toString()) 50 50 .withClaim("role", user.getAuthorities().stream() -
phonelux-backend/src/main/java/finki/it/phoneluxbackend/services/PhoneOfferService.java
r527b93f re5b84dc 30 30 } 31 31 32 public PhoneOffer getPhoneOffer(Long offerId){ 33 boolean exists = phoneOfferRepository.existsById(offerId); 34 35 if(!exists) 36 throw new IllegalStateException("Phone offer with id "+offerId+" does not exist"); 37 38 return phoneOfferRepository.findById(offerId).get(); 39 } 40 41 32 42 public List<String> getShops() { 33 43 return phoneOfferRepository.findAll().stream() -
phonelux-backend/src/main/java/finki/it/phoneluxbackend/services/PhoneService.java
r527b93f re5b84dc 10 10 import java.util.Comparator; 11 11 import java.util.List; 12 import java.util.Objects; 12 13 import java.util.stream.Collectors; 13 14 … … 22 23 23 24 // TODO: insert logic to filter 24 public List<Phone> getPhones(){ 25 return phoneRepository.findAll(); 25 public List<Phone> getPhones(String shops, String brands, String sortBy, String priceRange, String searchValue){ 26 List<Phone> phones = phoneRepository.findAll(); 27 28 29 if(brands != null) 30 { 31 phones = phones.stream() 32 .filter(phone -> brands.contains(phone.getBrand())).collect(Collectors.toList()); 33 } 34 35 if(shops != null) 36 { 37 phones = phones.stream() 38 .filter(phone -> phone.getPhoneOffers().stream().anyMatch(offer -> shops.contains(offer.getOffer_shop()))) 39 .collect(Collectors.toList()); 40 } 41 42 if(priceRange != null) 43 { 44 int lowestPrice = Integer.parseInt(priceRange.split("-")[0]); 45 int highestPrice = Integer.parseInt(priceRange.split("-")[1]); 46 phones = phones.stream() 47 .filter(phone -> phone.getLowestPrice() >= lowestPrice && phone.getLowestPrice() <= highestPrice) 48 .collect(Collectors.toList()); 49 } 50 51 if(searchValue != null && !Objects.equals(searchValue.stripIndent(), "")){ 52 phones = phones.stream() 53 .filter(phone -> phone.getBrand().toLowerCase().contains(searchValue.stripIndent().toLowerCase()) 54 || phone.getModel().toLowerCase().contains(searchValue.stripIndent().toLowerCase())) 55 .collect(Collectors.toList()); 56 } 57 58 phones = phones.stream().sorted(Comparator.comparing(Phone::getTotal_offers).reversed()) 59 .collect(Collectors.toList()); 60 if(sortBy != null) 61 { 62 if(sortBy.equals("ascending")) { 63 phones = phones.stream() 64 .sorted(Comparator.comparing(Phone::getLowestPrice)) 65 .collect(Collectors.toList()); 66 } 67 68 if(sortBy.equals("descending")) { 69 phones = phones.stream() 70 .sorted(Comparator.comparing(Phone::getLowestPrice).reversed()) 71 .collect(Collectors.toList()); 72 } 73 } 74 75 return phones; 26 76 } 27 77 -
phonelux-backend/src/main/java/finki/it/phoneluxbackend/services/UserService.java
r527b93f re5b84dc 40 40 User userToRegister = userRepository.findByEmail(user.getEmail()).get(); 41 41 if(userToRegister.getEnabled()) { 42 return ResponseEntity.badRequest().body("Error: Email "+user.getEmail()+" already taken!");42 return ResponseEntity.badRequest().body("Error:Е-маил адресата е веќе зафатена!"); 43 43 } 44 44 else { 45 return ResponseEntity.badRequest().body("E mail "+user.getEmail()+" not activated!" );45 return ResponseEntity.badRequest().body("Error:Профилот не е активиран. Потврдете на вашата е-маил адреса!" ); 46 46 } 47 47 } -
phonelux-frontend/package-lock.json
r527b93f re5b84dc 20 20 "@testing-library/react": "^13.3.0", 21 21 "@testing-library/user-event": "^13.5.0", 22 "@tippyjs/react": "^4.2.6", 22 23 "axios": "^0.27.2", 23 24 "react": "^18.2.0", … … 4092 4093 } 4093 4094 }, 4095 "node_modules/@tippyjs/react": { 4096 "version": "4.2.6", 4097 "resolved": "https://registry.npmjs.org/@tippyjs/react/-/react-4.2.6.tgz", 4098 "integrity": "sha512-91RicDR+H7oDSyPycI13q3b7o4O60wa2oRbjlz2fyRLmHImc4vyDwuUP8NtZaN0VARJY5hybvDYrFzhY9+Lbyw==", 4099 "dependencies": { 4100 "tippy.js": "^6.3.1" 4101 }, 4102 "peerDependencies": { 4103 "react": ">=16.8", 4104 "react-dom": ">=16.8" 4105 } 4106 }, 4094 4107 "node_modules/@tootallnate/once": { 4095 4108 "version": "1.1.2", … … 16095 16108 "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", 16096 16109 "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" 16110 }, 16111 "node_modules/tippy.js": { 16112 "version": "6.3.7", 16113 "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz", 16114 "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==", 16115 "dependencies": { 16116 "@popperjs/core": "^2.9.0" 16117 } 16097 16118 }, 16098 16119 "node_modules/tmpl": { … … 20076 20097 } 20077 20098 }, 20099 "@tippyjs/react": { 20100 "version": "4.2.6", 20101 "resolved": "https://registry.npmjs.org/@tippyjs/react/-/react-4.2.6.tgz", 20102 "integrity": "sha512-91RicDR+H7oDSyPycI13q3b7o4O60wa2oRbjlz2fyRLmHImc4vyDwuUP8NtZaN0VARJY5hybvDYrFzhY9+Lbyw==", 20103 "requires": { 20104 "tippy.js": "^6.3.1" 20105 } 20106 }, 20078 20107 "@tootallnate/once": { 20079 20108 "version": "1.1.2", … … 28712 28741 "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" 28713 28742 }, 28743 "tippy.js": { 28744 "version": "6.3.7", 28745 "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz", 28746 "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==", 28747 "requires": { 28748 "@popperjs/core": "^2.9.0" 28749 } 28750 }, 28714 28751 "tmpl": { 28715 28752 "version": "1.0.5", -
phonelux-frontend/package.json
r527b93f re5b84dc 15 15 "@testing-library/react": "^13.3.0", 16 16 "@testing-library/user-event": "^13.5.0", 17 "@tippyjs/react": "^4.2.6", 17 18 "axios": "^0.27.2", 18 19 "react": "^18.2.0", -
phonelux-frontend/src/App.js
r527b93f re5b84dc 1 1 import { BrowserRouter, Routes, Route } from "react-router-dom"; 2 2 import './App.css'; 3 import GroupedFiltersComponent from "./components/GroupedFiltersComponent/GroupedFiltersComponent";4 import HeaderComponent from "./components/HeaderComponent/HeaderComponent";5 import InputFormComponent from "./components/LoginRegisterComponents/InputFormComponent";6 import LoginFormComponent from "./components/LoginRegisterComponents/LoginFormComponent";7 import RegisterFormComponent from "./components/LoginRegisterComponents/RegisterFormComponent";8 import PaginationComponent from "./components/PaginationComponent/PaginationComponent"9 import PhoneCardComponent from "./components/PhoneCardComponent/PhoneCardComponent";10 import PhoneCardGridComponent from "./components/PhoneCardGridComponent/PhoneCardGridComponent";11 3 import HomepageComponent from "./components/HomepageComponent" 12 4 import PhonePageComponent from "./components/PhonePageComponent"; 13 import SortByComponent from "./components/FiltersComponents/SortByComponent";14 5 import LoginPageComponent from "./components/LoginPageComponent" 15 6 import RegisterPageComponent from "./components/RegisterPageComponent"; 7 import PhoneOfferDetailsComponent from "./components/PhoneOfferDetailsComponent/PhoneOfferDetailsComponent"; 8 16 9 17 10 … … 21 14 <BrowserRouter> 22 15 <Routes> 23 {/* { <Route path="/" element={<PhoneCardComponent24 image_url='https://admin.ledikom.mk/uploads/items/411/1641668143apple-iphone-13-pro-max-1-250x300-pad.jpg?v=1'25 model='Apple iPhone 13 Pro Max' price='75000'/>}/> } */}26 16 <Route path="/" element={<HomepageComponent/>}/> 27 17 <Route path="/login" element={<LoginPageComponent/>}/> 28 18 <Route path="/register" element={<RegisterPageComponent/>}/> 29 19 <Route path="/phones/:phoneId" element={<PhonePageComponent/>} /> 20 <Route path="/phoneoffer/:offerId" element={<PhoneOfferDetailsComponent/>} /> 30 21 31 22 </Routes> -
phonelux-frontend/src/components/FiltersComponents/FilterPriceComponent.js
r527b93f re5b84dc 18 18 19 19 componentDidMount(){ 20 21 20 22 21 axios.get('/lowestPrice') -
phonelux-frontend/src/components/FiltersComponents/SortByComponent.css
r527b93f re5b84dc 10 10 width: 15%; 11 11 background-color: #e6f8ef; 12 margin-right: 15px; 12 13 } -
phonelux-frontend/src/components/GroupedFiltersComponent/GroupedFiltersComponent.js
r527b93f re5b84dc 21 21 } 22 22 23 24 componentDidMount(){25 26 }27 23 28 24 render() { -
phonelux-frontend/src/components/HeaderComponent/HeaderComponent.css
r527b93f re5b84dc 8 8 width: 310px; 9 9 height: 200px; 10 margin-top: -65px; 10 11 } 12 13 .homepage-navbar-component{ 14 width: 100%; 15 display: flex; 16 justify-content: end; 17 background-color: #B6E2C8; 18 } -
phonelux-frontend/src/components/HeaderComponent/HeaderComponent.js
r527b93f re5b84dc 2 2 import { Link } from 'react-router-dom' 3 3 import logo from '../../images/logo_phonelux.png' 4 import NavbarComponent from '../NavbarComponent/NavbarComponent' 4 5 import './HeaderComponent.css' 5 6 … … 7 8 render() { 8 9 return ( 10 <> 11 <div className='homepage-navbar-component'> 12 <NavbarComponent/> 13 </div> 9 14 <div className='header-component'> 10 15 <Link style={{ textDecoration: 'none' }} to={"/"}> … … 12 17 </Link> 13 18 </div> 19 </> 14 20 ) 15 21 } -
phonelux-frontend/src/components/HomepageComponent.js
r527b93f re5b84dc 3 3 import HeaderComponent from './HeaderComponent/HeaderComponent' 4 4 import PhoneCardGridComponent from './PhoneCardGridComponent/PhoneCardGridComponent' 5 5 6 6 7 export class HomepageComponent extends Component { … … 10 11 11 12 this.state = { 12 shops: null,13 brands: null,14 priceRange: null,15 searchValue: null,16 sortBy: null13 shops: '', 14 brands: '', 15 priceRange: '', 16 searchValue: '', 17 sortBy: 'mostPopular' 17 18 } 18 19 } … … 46 47 searchValue: e.searchValue 47 48 }) 49 48 50 } 49 51 … … 56 58 } 57 59 60 58 61 render() { 59 62 return ( … … 61 64 <HeaderComponent/> 62 65 <GroupedFiltersComponent passFilters={this.changeFilters}/> 63 <PhoneCardGridComponent />66 <PhoneCardGridComponent {...this.state}/> 64 67 </> 65 68 ) -
phonelux-frontend/src/components/LoginRegisterComponents/LoginFormComponent.css
r527b93f re5b84dc 16 16 width: fit-content; 17 17 box-shadow: 11px 12px 13px 12px rgb(207, 207, 207); 18 padding-top: 30px;18 padding-top: 20px; 19 19 border-radius: 60px; 20 20 background-color: white; … … 23 23 } 24 24 .loginform-imgs-div { 25 padding-top: 20px;25 padding-top: 10px; 26 26 justify-content: center; 27 27 display: flex; … … 43 43 44 44 .loginform-sub-main-div > div{ 45 margin-bottom: 50px;45 margin-bottom: 30px; 46 46 margin-left: 80px; 47 47 margin-right: 80px; … … 137 137 color: blue; 138 138 } 139 .register-link > a{ 140 color: rgb(53, 99, 70); 141 text-decoration: none; 139 140 141 142 .registerform-link{ 143 color: rgb(53, 99, 70); 144 text-decoration: none; 142 145 } 143 146 144 .register -link > a:hover{145 color: blue;147 .registerform-link:hover{ 148 color: blue; 146 149 } 150 151 .loginform-message-wrapper{ 152 display: flex; 153 justify-content: center; 154 } 155 156 .loginform-error-message{ 157 color: red; 158 border: 1px solid red; 159 width: fit-content; 160 padding: 10px; 161 border-radius: 50px; 162 background-color: rgb(251, 224, 224); 163 } -
phonelux-frontend/src/components/LoginRegisterComponents/LoginFormComponent.js
r527b93f re5b84dc 17 17 email: '', 18 18 password: '', 19 serverResponse: '' 19 20 } 20 21 } … … 42 43 43 44 axios(config) 44 .then(function (response) { 45 console.log(response.data); 45 .then((response) => { 46 // store access token in local storage, redirect to homepage 47 console.log(response.data) 46 48 }) 47 .catch(function (error) { 48 console.log(error); 49 .catch((error) => { 50 this.setState({ 51 serverResponse: 'error' 52 }) 49 53 }); 50 54 … … 67 71 <div className="loginform-sub-main-div"> 68 72 <div> 69 73 {this.state.serverResponse == 'error' ? <div className='loginform-message-wrapper'> 74 <h5 className='loginform-error-message'>Невалидна е-маил адреса или лозинка!</h5></div> : <></>} 70 75 <div className="loginform-imgs-div"> 71 76 <div className="loginform-image-container"> … … 93 98 </div> 94 99 </form> 95 <p className='register-link'><Link to={"/register"}><a>Регистрирај се</a></Link></p>100 <p className='register-link'><Link className='registerform-link' to={"/register"}>Регистрирај се</Link></p> 96 101 97 102 </div> -
phonelux-frontend/src/components/LoginRegisterComponents/RegisterFormComponent.css
r527b93f re5b84dc 23 23 } 24 24 .registerform-imgs-div { 25 padding-top: 20px;25 padding-top: 5px; 26 26 justify-content: center; 27 27 display: flex; … … 158 158 } 159 159 160 .registerform-message-wrapper{ 161 display: flex; 162 justify-content: center; 163 } 164 165 .registerform-error-message{ 166 color: red; 167 border: 1px solid red; 168 width: fit-content; 169 padding: 10px; 170 border-radius: 50px; 171 background-color: rgb(251, 224, 224); 172 } 173 174 .registerform-success-message{ 175 color: green; 176 border: 1px solid green; 177 width: fit-content; 178 padding: 10px; 179 border-radius: 50px; 180 background-color: #B6E2C8; 181 } 160 182 161 183 -
phonelux-frontend/src/components/LoginRegisterComponents/RegisterFormComponent.js
r527b93f re5b84dc 20 20 password: '', 21 21 confirmPassword:'', 22 serverResponse: '' 22 23 } 23 24 } … … 43 44 44 45 axios(config) 45 .then(function (response) { 46 console.log(response); 46 .then((response) => { 47 this.setState({ 48 serverResponse: response.data 49 }) 47 50 }) 48 .catch(function (error) { 49 console.log(error); 51 .catch((error) => { 52 this.setState({ 53 serverResponse: error.response.data 54 }) 50 55 }); 51 56 … … 59 64 60 65 61 62 63 66 render() { 64 67 … … 69 72 <div className="registerform-sub-main-div"> 70 73 <div> 74 75 {(() => { 76 if(this.state.serverResponse == '') 77 { 78 return <></> 79 } 80 81 if(this.state.serverResponse != '' && this.state.serverResponse.includes('Error')) 82 { 83 return <div className='registerform-message-wrapper'> 84 <h5 className='registerform-error-message'>{this.state.serverResponse.split(':')[1]}</h5> </div> 85 } 86 87 if(this.state.serverResponse != '' && this.state.serverResponse.includes('token')) 88 { 89 return <div className='registerform-message-wrapper'> 90 <h5 className='registerform-success-message'>Вашата регистрација е во тек. Потврдете на вашата е-маил адреса!</h5> </div> 91 } 92 93 })()} 71 94 72 95 <div className="registerform-imgs-div"> -
phonelux-frontend/src/components/PhoneCardComponent/PhoneCardComponent.css
r527b93f re5b84dc 1 1 .phonecard{ 2 background-color: #B6E2C8;2 /* background-color: #B6E2C8; */ 3 3 padding:15px; 4 4 justify-items: center; 5 padding-top: 35px; 5 6 width: 250px; 6 7 height: 400px; 7 8 border-radius: 25px; 9 border: 3px solid #B6E2C8; 10 border-radius: 50px; 8 11 } 9 12 10 13 .phonecard:hover{ 11 background-color: #84c69f;14 /* background-color: #B6E2C8; */ 12 15 cursor: pointer; 16 box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24), 0 17px 50px 0 rgba(0,0,0,0.19); 17 transition: box-shadow 0.5s, background-color 0.5s ; 18 border-radius: 50px; 13 19 } 14 20 … … 26 32 27 33 .phonecard-lowestprice-header, .phonecard-totaloffers-header{ 28 margin-top: -10px; 29 color: rgb(34, 106, 106); 30 text-align: center; 34 margin-top: 20px; 35 text-align: right; 36 } 37 38 .phonecard-totaloffers-header{ 39 margin-top: -15px; 31 40 } 32 41 33 42 .phonecard-model-header{ 34 43 text-align: center; 44 border: 1px solid rgb(161, 165, 163); 45 border-radius: 20px 100px; 46 background-color: rgb(222, 228, 225); 47 padding: 5px; 48 padding-right: 10px; 49 35 50 } 36 51 … … 44 59 } 45 60 61 .phonecard-lowestprice-header{ 62 /* color: rgb(24, 117, 24); */ 63 } 64 65 .phonecard-totaloffers-header{ 66 /* color: rgb(24, 117, 24); */ 67 } 68 46 69 .phonecard > h5 > p{ 47 70 display: inline; -
phonelux-frontend/src/components/PhoneCardComponent/PhoneCardComponent.js
r527b93f re5b84dc 24 24 <h3 className='phonecard-model-header'>{this.props.model}</h3> 25 25 <h5 className='phonecard-lowestprice-header'>Најниска цена: <p className='phonecard-lowestprice'>{this.props.lowestPrice}</p> ден.</h5> 26 <h 6 className='phonecard-totaloffers-header'>Вкупно понуди: <p className='phonecard-totaloffers'>{this.props.total_offers}</p></h6>26 <h5 className='phonecard-totaloffers-header'>Вкупно понуди: <p className='phonecard-totaloffers'>{this.props.total_offers}</p></h5> 27 27 </div> 28 28 </Paper> -
phonelux-frontend/src/components/PhoneCardGridComponent/PhoneCardGridComponent.css
r527b93f re5b84dc 15 15 } 16 16 17 .pagination-wrapper{ 18 margin-top: 40px; 19 padding-bottom: 40px; 20 display: flex; 21 justify-content: center; 22 } 17 23 24 25 -
phonelux-frontend/src/components/PhoneCardGridComponent/PhoneCardGridComponent.js
r527b93f re5b84dc 1 import { Grid } from '@mui/material'1 import { Grid, Pagination } from '@mui/material' 2 2 import axios from 'axios' 3 3 import React, { Component } from 'react' 4 import PaginationComponent from '../PaginationComponent/PaginationComponent'5 4 import '../PhoneCardComponent/PhoneCardComponent' 6 5 import PhoneCardComponent from '../PhoneCardComponent/PhoneCardComponent' … … 15 14 this.state = { 16 15 phones: [], 17 loading: true,18 16 currentPage: 1, 19 17 phonesPerPage: 12, … … 24 22 } 25 23 24 componentDidUpdate(prevProps) { 25 if(JSON.stringify(prevProps) != JSON.stringify(this.props)){ 26 let filters = '?' 27 28 if(this.props.shops) 29 { 30 filters += 'shops='+this.props.shops+'&' 31 } 32 if(this.props.brands) 33 { 34 filters += 'brands='+this.props.brands+'&' 35 } 36 if(this.props.priceRange) 37 { 38 filters += 'priceRange='+this.props.priceRange+'&' 39 } 40 if(this.props.searchValue) 41 { 42 filters += 'searchValue='+this.props.searchValue+'&' 43 } 44 45 if(this.props.sortBy) 46 { 47 filters += 'sortBy='+this.props.sortBy+'&' 48 } 49 50 axios.get('/phones'+filters) 51 .then(response => { 52 this.setState({ 53 phones: response.data, 54 numberOfPages: Math.ceil(response.data.length / this.state.phonesPerPage) 55 },(e) => this.setNewPage(e,this.state.currentPage)) 56 } 57 ) 58 .catch(error => console.log(error)) 59 console.log(filters) 60 } 61 } 62 26 63 componentDidMount() { 27 28 64 axios.get('/phones') 29 65 .then(response => { 30 66 this.setState({ 31 67 phones: response.data, 32 loading: false,33 68 numberOfPages: Math.ceil(response.data.length / this.state.phonesPerPage) 34 },( ) => this.setNewPage(this.state.currentPage))69 },(e) => this.setNewPage(e,this.state.currentPage)) 35 70 } 36 71 ) … … 38 73 } 39 74 40 setNewPage = (newPage) => {41 if(newPage == '')42 {43 newPage = this.state.currentPage-144 }45 75 46 if(newPage == '') 47 { 48 newPage = this.state.currentPage+1 49 } 76 setNewPage = (event,page) => { 50 77 51 52 const indexOfLastPhone = parseInt(newPage) * this.state.phonesPerPage; 78 const indexOfLastPhone = parseInt(page) * this.state.phonesPerPage; 53 79 const indexOfFirstPhone = indexOfLastPhone - this.state.phonesPerPage; 54 80 … … 56 82 57 83 this.setState({ 58 currentPage: parseInt( newPage),84 currentPage: parseInt(page), 59 85 currentPhones: currPhones 60 86 }) … … 63 89 64 90 render() { 91 65 92 return ( 66 93 <div className='phonecardgrid-wrapper'> … … 71 98 spacing={2}> 72 99 73 {this.state.currentPhones.map((phone ) => <GridclassName='phonecardgrid-item' item md={3}>74 <PhoneCardComponent key={phone.id}id={phone.id} brand={phone.brand}100 {this.state.currentPhones.map((phone,idx) => <Grid key={idx} className='phonecardgrid-item' item md={3}> 101 <PhoneCardComponent id={phone.id} brand={phone.brand} 75 102 model={phone.model} image_url={phone.image_url == null ? phoneImage : phone.image_url} total_offers={phone.total_offers} lowestPrice={phone.lowestPrice}/></Grid>)} 76 103 77 {/* <Grid item xs={12} md={12}>78 <PaginationComponent79 currentPage={this.state.currentPage}80 changePageHandler={this.setNewPage}81 numberOfPages={this.state.numberOfPages} />82 </Grid> */}83 104 </Grid> 84 <PaginationComponent 85 currentPage={this.state.currentPage} 86 changePageHandler={this.setNewPage} 87 numberOfPages={this.state.numberOfPages} /> 105 106 <div className='pagination-wrapper'> 107 <Pagination className='paginationcomponent-pagination' onChange={this.setNewPage} page={this.state.currentPage} 108 count={this.state.numberOfPages} color="primary" /> 109 </div> 110 88 111 </div> 89 112 ) -
phonelux-frontend/src/components/PhoneOfferComponent/PhoneOfferComponent.css
r527b93f re5b84dc 1 .phone-with-offers-table-row{ 2 font-size: 18px; 3 } 4 5 .phone-with-offers-table-row > td:first-of-type { 6 font-weight: bold; 7 } 8 9 .phone-offer-specifications-button{ 10 font-size: 17px; 11 padding: 10px; 12 background-color: #B6E2C8; 13 border-radius: 20px; 14 border: 1px solid black; 15 } 16 17 .phone-with-offers-table-row td:last-of-type{ 18 display: flex; 19 justify-content: center; 20 flex-wrap: wrap; 21 } 22 23 .phone-offer-specifications-button:hover{ 24 cursor: pointer; 25 background-color: rgb(166, 201, 171); 26 box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24), 0 17px 50px 0 rgba(0,0,0,0.19); 27 transition: box-shadow 0.5s, background-color 0.5s ; 28 } -
phonelux-frontend/src/components/PhoneOfferComponent/PhoneOfferComponent.js
r527b93f re5b84dc 1 1 import React, { Component } from 'react' 2 import { Link } from 'react-router-dom' 3 import './PhoneOfferComponent.css' 2 4 3 5 export class PhoneOfferComponent extends Component { … … 13 15 14 16 render() { 15 console.log(this.props)17 // console.log(this.props) 16 18 return ( 17 19 <tr className='phone-with-offers-table-row'> 18 20 <td>{this.props.offer_shop}</td> 19 <td><a href={this.props.offer_url}>{this.props.offer_name}</a></td>21 <td><a style={{ textDecoration: 'none' }} href={this.props.offer_url}>{this.props.offer_name}</a></td> 20 22 <td>{this.props.price} ден.</td> 21 <td></td> 23 <td> 24 <Link style={{ textDecoration: 'none' }} to={"/phoneoffer/"+this.props.id}> 25 <button className='phone-offer-specifications-button'>Спецификации</button> 26 </Link> 27 </td> 22 28 </tr> 23 29 ) … … 27 33 export default PhoneOfferComponent 28 34 29 30 31 32 // back_camera: null33 // battery: null34 // chipset: null35 // color: null36 // cpu: null37 // front_camera: null38 // id: 48639 // image_url: "https://setec.mk/image/cache/catalog/Product/51841_0-228x228.jpg"40 // is_validated: false41 // last_updated: "2022-07-26T22:00:00.000+00:00"42 // offer_description: "Apple iPhone 13 128GB Midnight, GSM/CDMA/HSPA/EVDO/LTE/ 5G, Display: Super Retina XDR OLED; HDR10; Dolby Vision; 800 nits (HBM); 1200 nit…"43 // offer_name: "Apple iPhone 13 128GB Midnight"44 // offer_shop: "Setec"45 // offer_shop_code: "51841"46 // offer_url: "https://setec.mk/index.php?route=product/product&path=10066_10067&product_id=51841"47 // operating_system: null48 // price: 6399049 // ram_memory: null50 // rom_memory: null -
phonelux-frontend/src/components/PhoneWithOffersComponent/PhoneWithOffersComponent.css
r527b93f re5b84dc 23 23 24 24 .phone-with-offers-table-row:nth-of-type(even){ 25 background-color: # DEE4E1;25 background-color: #eef2f0; 26 26 } 27 27 … … 51 51 font-size: 22px; 52 52 } 53 54 .phone-with-offers-model-header{ 55 border: 1px solid gray; 56 padding: 10px; 57 padding-left: 50px; 58 padding-right: 50px; 59 border-radius: 10px 60px; 60 box-shadow: inset 0px 0px 25px 0px rgb(120, 190, 139); 61 outline: none; 62 background-color: #c4f3d8; 63 } 64 65 .phone-with-offers-totaloffers-header{ 66 padding: 10px; 67 border: 1px solid rgb(199, 193, 193); 68 background-color: #B6E2C8; 69 border-radius: 50px; 70 } -
phonelux-frontend/src/components/PhoneWithOffersComponent/PhoneWithOffersComponent.js
r527b93f re5b84dc 31 31 <div className='phone-with-offers-sub-main'> 32 32 <div className='phone-with-offers-totaloffers-div'> 33 <h3 >Понуди: {this.props.total_offers}</h3>33 <h3 className='phone-with-offers-totaloffers-header'>Понуди: {this.props.total_offers}</h3> 34 34 </div> 35 35 … … 41 41 42 42 <div className='phone-with-offers-model-wrapper'> 43 <h1 >{this.props.model}</h1>43 <h1 className='phone-with-offers-model-header'>{this.props.model}</h1> 44 44 </div> 45 45 </div> … … 58 58 <tbody> 59 59 { 60 this.state.phone_offers.map((offer ) => <PhoneOfferComponent key={offer.offer_id} id={offer.id}60 this.state.phone_offers.map((offer,idx) => <PhoneOfferComponent key={idx} id={offer.id} 61 61 is_validated={offer.is_validated} offer_shop={offer.offer_shop} offer_name={offer.offer_name} 62 62 price={offer.price} offer_url={offer.offer_url} -
phonelux-frontend/src/index.js
r527b93f re5b84dc 4 4 import App from './App'; 5 5 import reportWebVitals from './reportWebVitals'; 6 import Data from './components/DataManager'; 6 7 8 window.Data = Data; 7 9 const root = ReactDOM.createRoot(document.getElementById('root')); 8 10 root.render( -
phonelux_scrappers/outputfile.txt
r527b93f re5b84dc 1 id: 3 2 id: 4 3 id: 5 4 id: 6 5 id: 7 6 id: 8 7 id: 9 8 id: 10 9 id: 12 10 id: 13 11 id: 14 12 id: 15 13 id: 16 14 id: 18 15 id: 19 16 id: 20 17 id: 21 18 id: 22 19 id: 23 20 id: 24 21 id: 25 22 id: 26 23 id: 27 24 id: 28 25 id: 30 26 id: 32 27 id: 34 28 id: 35 29 id: 37 30 id: 38 31 id: 40 32 id: 41 33 id: 42 34 id: 43 35 id: 44 36 id: 45 37 id: 46 38 id: 47 39 id: 48 40 id: 54 41 id: 55 42 id: 56 43 id: 57 44 id: 58 45 id: 59 46 id: 61 47 id: 62 48 id: 63 49 id: 64 50 id: 65 51 id: 68 52 id: 69 53 id: 70 54 id: 71 55 id: 73 56 id: 74 57 id: 75 58 id: 76 59 id: 77 60 id: 79 61 id: 80 62 id: 81 63 id: 82 64 id: 83 65 id: 85 66 id: 86 67 id: 87 68 id: 88 69 id: 89 70 id: 90 71 id: 91 72 id: 92 73 id: 98 74 id: 102 75 id: 104 76 id: 106 77 id: 119 78 id: 125 79 id: 126 80 id: 129 81 id: 140 82 id: 153 83 id: 156 84 id: 159 85 id: 161 86 id: 173 87 id: 184 88 id: 194 89 id: 195 90 id: 196 91 id: 199 92 id: 200 93 id: 201 94 id: 202 95 id: 203 96 id: 204 97 id: 205 98 id: 206 99 id: 207 100 id: 208 101 id: 209 102 id: 210 103 id: 211 104 id: 214 105 id: 215 106 id: 216 107 id: 217 108 id: 219 109 id: 220 110 id: 221 111 id: 222 112 id: 223 113 id: 224 114 id: 225 115 id: 226 116 id: 227 117 id: 228 118 id: 229 119 id: 230 120 id: 231 121 id: 232 122 id: 233 123 id: 234 124 id: 235 125 id: 237 126 id: 238 127 id: 239 128 id: 240 129 id: 241 130 id: 243 131 id: 244 132 id: 245 133 id: 246 134 id: 247 135 id: 249 136 id: 250 137 id: 251 138 id: 252 139 id: 253 140 id: 255 141 id: 256 142 id: 257 143 id: 260 144 id: 261 145 id: 262 146 id: 263 147 id: 264 148 id: 265 149 id: 266 150 id: 267 151 id: 270 152 id: 271 153 id: 272 154 id: 273 155 id: 274 156 id: 275 157 id: 276 158 id: 277 159 id: 278 160 id: 279 161 id: 280 162 id: 282 163 id: 285 164 id: 286 165 id: 287 166 id: 288 167 id: 289 168 id: 290 169 id: 291 170 id: 292 171 id: 293 172 id: 294 173 id: 295 174 id: 296 175 id: 297 176 id: 298 177 id: 299 178 id: 300 179 id: 301 180 id: 304 181 id: 305 182 id: 306 183 id: 307 184 id: 308 185 id: 309 186 id: 310 187 id: 313 188 id: 314 189 id: 315 190 id: 316 191 id: 318 192 id: 319 193 id: 321 194 id: 323 195 id: 325 196 id: 326 197 id: 327 198 id: 328 199 id: 329 200 id: 330 201 id: 331 202 id: 332 203 id: 333 204 id: 334 205 id: 336 206 id: 337 207 id: 338 208 id: 340 209 id: 341 210 id: 342 211 id: 343 212 id: 344 213 id: 345 214 id: 346 215 id: 348 216 id: 349 217 id: 350 218 id: 351 219 id: 352 220 id: 353 221 id: 354 222 id: 355 223 id: 356 224 id: 357 225 id: 358 226 id: 359 227 id: 360 228 id: 361 229 id: 362 230 id: 363 231 id: 364 232 id: 365 233 id: 366 234 id: 367 235 id: 368 236 id: 369 237 id: 370 238 id: 371 239 id: 372 240 id: 373 241 id: 374 242 id: 375 243 id: 376 244 id: 377 245 id: 378 246 id: 379 247 id: 380 248 id: 381 249 id: 382 250 id: 383 251 id: 384 252 id: 385 253 id: 386 254 id: 387 255 id: 388 256 id: 389 257 id: 390 258 id: 391 259 id: 392 260 id: 393 261 id: 394 262 id: 395 263 id: 396 264 id: 397 265 id: 398 266 id: 399 267 id: 400 268 id: 401 269 id: 402 270 id: 403 271 id: 404 272 id: 405 273 id: 406 274 id: 407 275 id: 408 276 id: 409 277 id: 410 278 id: 411 279 id: 412 280 id: 413 281 id: 414 282 id: 415 283 id: 416 284 id: 417 285 id: 418 286 id: 419 287 id: 420 288 id: 421 289 id: 422 290 id: 423 291 id: 424 292 id: 425 293 id: 426 294 id: 427 295 id: 428 296 id: 429 297 id: 430 298 id: 431 299 id: 432 300 id: 433 301 id: 434 302 id: 435 303 id: 436 304 id: 437 305 id: 438 306 id: 439 307 id: 440 308 id: 441 309 id: 442 310 id: 443 311 id: 444 312 id: 445 313 id: 446 314 id: 447 315 id: 448 316 id: 449 317 id: 450 318 id: 451 319 id: 452 1 phone id: 3 2 https://admin.ledikom.mk/uploads/items/1500/1649755126honor-50-1-250x300-pad.jpg?v=1 3 phone id: 4 4 https://setec.mk/image/cache/catalog/Product/74172_0-228x228.jpg 5 phone id: 5 6 https://admin.ledikom.mk/uploads/items/412/1641670848apple-iphone-13-1-250x300-pad.jpg?v=1 7 phone id: 6 8 https://admin.ledikom.mk/uploads/items/413/1641671221apple-iphone-13-pro-1-250x300-pad.jpg?v=1 9 phone id: 7 10 https://admin.ledikom.mk/uploads/items/411/1641668143apple-iphone-13-pro-max-1-250x300-pad.jpg?v=1 11 phone id: 8 12 https://admin.ledikom.mk/uploads/items/342/1641664916apple-iphone-12-1-250x300-pad.jpg?v=1 13 phone id: 9 14 https://admin.ledikom.mk/uploads/items/192/1641654006apple-iphone-11-1-250x300-pad.jpg?v=1 15 phone id: 10 16 https://mobitech.mk/wp-content/uploads/2022/01/apple-iphone-xr-new.jpg 17 phone id: 12 18 https://admin.ledikom.mk/uploads/items/372/1642792043samsung-galaxy-a32-1-250x300-pad.jpg?v=1 19 phone id: 13 20 https://admin.ledikom.mk/uploads/items/1501/1649755462honor-50-lite-1-250x300-pad.jpg?v=1 21 phone id: 14 22 https://mobitech.mk/wp-content/uploads/2021/12/apple-iphone-7r4-1.jpg 23 phone id: 15 24 https://mobitech.mk/wp-content/uploads/2021/12/apple-iphone-x-1.jpg 25 phone id: 16 26 https://mobitech.mk/wp-content/uploads/2021/12/apple-iphone-xs-new.jpg 27 phone id: 18 28 https://admin.ledikom.mk/uploads/items/83/1653051611nokia-105-2017-duos-1-250x300-pad.jpg?v=1 29 phone id: 19 30 https://admin.ledikom.mk/uploads/items/1478/1647544681samsung-galaxy-s22-5g-1-250x300-pad.jpg?v=1 31 phone id: 20 32 https://admin.ledikom.mk/uploads/items/392/1642792789samsung-galaxy-a22-5g-1-250x300-pad.jpg?v=1 33 phone id: 21 34 https://admin.ledikom.mk/uploads/items/1563/1651071492samsung-galaxy-a33-5g-1-250x300-pad.jpg?v=1 35 phone id: 22 36 https://www.neptun.mk/2022/04/07/23_e3fe9e55-914d-4ac3-89af-8aea5e659341.JPG?width=192 37 phone id: 23 38 https://admin.ledikom.mk/uploads/items/1497/1649754127samsung-galaxy-a13-1-250x300-pad.jpg?v=1 39 phone id: 24 40 https://mobelix.com.mk/storage/app/uploads/public/5eb/2bf/b67/thumb_2064_550_800_0_0_crop.jpg 41 phone id: 25 42 https://admin.ledikom.mk/uploads/items/3036/1655459489xiaomi-redmi-10-1-250x300-pad.jpg?v=1 43 phone id: 26 44 https://admin.ledikom.mk/uploads/items/1499/1649754737samsung-galaxy-a53-5g-1-250x300-pad.jpg?v=1 45 phone id: 27 46 https://www.neptun.mk/2021/10/09/15571370a_e41b8951-dd67-4951-a899-104b37ff4f9d.jpg?width=192 47 phone id: 28 48 https://admin.ledikom.mk/uploads/items/344/1642708501samsung-galaxy-s21-5g-1-250x300-pad.jpg?v=1 49 phone id: 30 50 https://mobigo.mk/wp-content/uploads/2021/12/huawei-nova-9-5g.jpg 51 phone id: 32 52 https://admin.ledikom.mk/uploads/items/406/1642794048samsung-a03s-1-250x300-pad.jpg?v=1 53 phone id: 34 54 https://mobigo.mk/wp-content/uploads/2021/07/xiaomi-redmi-note10-pro.jpg 55 phone id: 35 56 https://mobigo.mk/wp-content/uploads/2021/01/xiaomi-mi-10t-5g-pro.jpg 57 phone id: 37 58 https://www.a1.mk/documents/20126/2021612/POCO_X3_Pro.png 59 phone id: 38 60 https://admin.ledikom.mk/uploads/items/340/1642705059samsung-galaxy-a02s-1-250x300-pad.jpg?v=1 61 phone id: 40 62 https://admin.ledikom.mk/uploads/items/390/mi10tlite5g-978742-250x300-pad.jpg?v=1 63 phone id: 41 64 https://mobigo.mk/wp-content/uploads/2020/07/samsung-galaxy-a10s.jpg 65 phone id: 42 66 https://setec.mk/image/cache/catalog/Product/73862_0-228x228.jpg 67 phone id: 43 68 https://admin.ledikom.mk/uploads/items/351/1653051682nokia-3310-2017-1-250x300-pad.jpg?v=1 69 phone id: 44 70 https://mobigo.mk/wp-content/uploads/2019/07/huawei-p30-pro.jpg 71 phone id: 45 72 https://mobigo.mk/wp-content/uploads/2019/02/huawei-mate-20-pro-1.jpg 73 phone id: 46 74 https://admin.ledikom.mk/uploads/items/364/1642789715samsung-galaxy-a72-1-250x300-pad.jpg?v=1 75 phone id: 47 76 https://mobelix.com.mk/storage/app/uploads/public/605/319/381/thumb_2496_550_800_0_0_crop.jpg 77 phone id: 48 78 https://mobelix.com.mk/storage/app/uploads/public/605/31a/2d7/thumb_2499_550_800_0_0_crop.jpg 79 phone id: 54 80 https://mobelix.com.mk/storage/app/uploads/public/622/360/d34/thumb_3692_550_800_0_0_crop.png 81 phone id: 55 82 https://mobelix.com.mk/storage/app/uploads/public/5f8/037/ce9/thumb_2308_550_800_0_0_crop.png 83 phone id: 56 84 https://admin.ledikom.mk/uploads/items/395/mi10lite5g-836560-250x300-pad.jpg?v=1 85 phone id: 57 86 https://mobelix.com.mk/storage/app/uploads/public/5f2/bc0/63d/thumb_2194_550_800_0_0_crop.jpg 87 phone id: 58 88 https://mobelix.com.mk/storage/app/uploads/public/5dd/3c7/29c/thumb_1944_550_800_0_0_crop.jpg 89 phone id: 59 90 https://mobelix.com.mk/storage/app/uploads/public/623/876/e71/thumb_3713_550_800_0_0_crop.png 91 phone id: 61 92 https://mobelix.com.mk/storage/app/uploads/public/5de/4e7/f26/thumb_1978_550_800_0_0_crop.jpg 93 phone id: 62 94 https://mobelix.com.mk/storage/app/uploads/public/5e5/3c4/5e6/thumb_2034_550_800_0_0_crop.png 95 phone id: 63 96 https://mobelix.com.mk/storage/app/uploads/public/5de/4e7/49d/thumb_1976_550_800_0_0_crop.jpg 97 phone id: 64 98 https://mobelix.com.mk/storage/app/uploads/public/5c9/0dc/413/thumb_1773_550_800_0_0_crop.jpg 99 phone id: 65 100 https://mobelix.com.mk/storage/app/uploads/public/5cd/053/0ab/thumb_1811_550_800_0_0_crop.jpg 101 phone id: 68 102 https://mobelix.com.mk/storage/app/uploads/public/5bc/877/975/thumb_686_550_800_0_0_crop.jpg 103 phone id: 69 104 https://admin.ledikom.mk/uploads/items/436/1653051842nokia-6310-2021-1-250x300-pad.jpg?v=1 105 phone id: 70 106 https://admin.ledikom.mk/uploads/items/315/1644588871xiaomi-poco-x3-nfc-1-250x300-pad.jpg?v=1 107 phone id: 71 108 https://mobelix.com.mk/storage/app/uploads/public/5fd/343/c47/thumb_2416_550_800_0_0_crop.jpg 109 phone id: 73 110 https://www.neptun.mk/2022/01/13/1150569a91-b4ec-4484-a977-da071903f48b_37266053-7f21-42d2-bde9-ebb29a1220c6.jpg?width=192 111 phone id: 74 112 https://mobelix.com.mk/storage/app/uploads/public/5ff/f06/b11/thumb_2451_550_800_0_0_crop.png 113 phone id: 75 114 https://admin.ledikom.mk/uploads/items/345/1642711031samsung-galaxy-s21-5g-1-250x300-pad.jpg?v=1 115 phone id: 76 116 https://admin.ledikom.mk/uploads/items/362/1653383457asus-rog-phone-5-1-250x300-pad.jpg?v=1 117 phone id: 77 118 https://admin.ledikom.mk/uploads/items/343/1642708100samsung-galaxy-s21-ultra-5g-1-250x300-pad.jpg?v=1 119 phone id: 79 120 https://mobelix.com.mk/storage/app/uploads/public/606/eff/40a/thumb_2684_550_800_0_0_crop.png 121 phone id: 80 122 https://mobelix.com.mk/storage/app/uploads/public/609/2af/b4b/thumb_3135_550_800_0_0_crop.png 123 phone id: 81 124 https://mobelix.com.mk/storage/app/uploads/public/609/2af/c8d/thumb_3137_550_800_0_0_crop.png 125 phone id: 82 126 https://admin.ledikom.mk/uploads/items/359/1642789645samsung-galaxy-a52-1-250x300-pad.jpg?v=1 127 phone id: 83 128 https://admin.ledikom.mk/uploads/items/379/1653381685xiaomi-redmi-note-10-pro-max-1-250x300-pad.jpg?v=1 129 phone id: 85 130 https://setec.mk/image/cache/catalog/Product/60645_0-228x228.jpg 131 phone id: 86 132 https://admin.ledikom.mk/uploads/items/354/1642788228samsung-galaxy-m02s-1-250x300-pad.jpg?v=1 133 phone id: 87 134 https://mobelix.com.mk/storage/app/uploads/public/60d/ed0/0f3/thumb_3191_550_800_0_0_crop.png 135 phone id: 88 136 https://mobelix.com.mk/storage/app/uploads/public/60d/eef/d6a/thumb_3193_550_800_0_0_crop.png 137 phone id: 89 138 https://admin.ledikom.mk/uploads/items/398/1651156416xiaomi-mi-11-ultra-1-250x300-pad.jpg?v=1 139 phone id: 90 140 https://www.neptun.mk/2021/05/18/22222_28c3ee3c-d029-4ccd-a5a6-64aa1ab03fb2.jpg?width=192 141 phone id: 91 142 https://mobelix.com.mk/storage/app/uploads/public/5ee/0f2/e81/thumb_2131_550_800_0_0_crop.png 143 phone id: 98 144 https://www.a1.mk/documents/20126/2346005/Honor-X7-Front.png 145 phone id: 102 146 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/22032022111538download(1).jpg 147 phone id: 106 148 https://www.neptun.mk/2022/02/22/xiaomiredminote11azulestelar01l_367116a3-c5cb-46a0-af2b-b97401a4155f.jpg?width=192 149 phone id: 119 150 https://mobitech.mk/wp-content/uploads/2021/12/apple-iphone-xs-max-new1.jpg 151 phone id: 125 152 https://admin.ledikom.mk/uploads/items/1498/1649754304samsung-galaxy-a23-1-250x300-pad.jpg?v=1 153 phone id: 126 154 https://admin.ledikom.mk/uploads/items/352/1642711564samsung-galaxy-a02-1-250x300-pad.jpg?v=1 155 phone id: 129 156 https://i2.wp.com/mobilezone.mk/wp-content/uploads/2021/08/12-pro-blue.png?resize=512%2C600&ssl=1 157 phone id: 140 158 https://www.a1.mk/documents/20126/2336887/Nokia+C21_Front_Blue.png 159 phone id: 153 160 https://admin.ledikom.mk/uploads/items/429/1641673183apple-iphone-13-mini-1-250x300-pad.jpg?v=1 161 phone id: 156 162 https://admin.ledikom.mk/uploads/items/1477/1647544699samsung-galaxy-s21-fe-5g-1-250x300-pad.jpg?v=1 163 phone id: 173 164 https://www.a1.mk/documents/20126/2315371/Honor-8X-2022-Front-Blue.png 165 phone id: 184 166 https://akcija.com.mk/app/img/products/gallery/2021/07/WIKVIEWBLAST_Wiko_View_4G_Black_32_+_3.webp 167 phone id: 194 168 https://admin.ledikom.mk/uploads/items/1502/1649758047google-pixel-6-1-250x300-pad.jpg?v=1 169 phone id: 195 170 https://mobelix.com.mk/storage/app/uploads/public/612/e29/ab9/thumb_3301_550_800_0_0_crop.png 171 phone id: 196 172 https://admin.ledikom.mk/uploads/items/408/galaxyzfold35g-874417-250x300-pad.jpg?v=1 173 phone id: 199 174 https://www.neptun.mk/2021/11/10/xiaomi11tproblancomedianoche04adl_dcdba358-c8be-4ed6-ada5-0dac8dd6a314.jpg?width=192 175 phone id: 200 176 https://mobelix.com.mk/storage/app/uploads/public/618/11f/35e/thumb_3446_550_800_0_0_crop.png 177 phone id: 201 178 https://www.a1.mk/documents/20126/1900464/A1-Alpha-21.png 179 phone id: 202 180 https://www.a1.mk/documents/20126/2152486/Motorola-MOTO-G60-Front.png 181 phone id: 203 182 https://admin.ledikom.mk/uploads/items/1503/1649766652google-pixel-6-pro-1-250x300-pad.jpg?v=1 183 phone id: 204 184 https://mobelix.com.mk/storage/app/uploads/public/61a/0c6/65d/thumb_3478_550_800_0_0_crop.png 185 phone id: 205 186 https://www.neptun.mk/2021/09/02/720_c7b32e05-41eb-47c4-b2e6-64b19d789d54.jpg?width=192 187 phone id: 206 188 https://admin.ledikom.mk/uploads/items/1485/1649682740xiaomi-redmi-note-11t-5g-1-250x300-pad.jpg?v=1 189 phone id: 207 190 https://mobelix.com.mk/storage/app/uploads/public/61f/26c/5d9/thumb_3564_550_800_0_0_crop.png 191 phone id: 208 192 https://mobelix.com.mk/storage/app/uploads/public/5eb/2cd/447/thumb_2075_550_800_0_0_crop.png 193 phone id: 209 194 https://www.a1.mk/documents/20126/1862420/Nokia-G10.png 195 phone id: 210 196 https://admin.ledikom.mk/uploads/items/299/1642704279samsung-galaxy-note20-1-250x300-pad.jpg?v=1 197 phone id: 211 198 https://admin.ledikom.mk/uploads/items/341/1642707896samsung-galaxy-note20-ultra-5g-1-250x300-pad.jpg?v=1 199 phone id: 214 200 https://mobelix.com.mk/storage/app/uploads/public/621/a31/b32/thumb_3662_550_800_0_0_crop.png 201 phone id: 215 202 https://www.neptun.mk/2022/07/21/54000_0a9e6bb1-320e-4b2e-a10a-0bfd4093b9fc.jpg?width=192 203 phone id: 216 204 https://admin.ledikom.mk/uploads/items/1492/1653141418xiaomi-redmi-note-11-pro-1-250x300-pad.jpg?v=1 205 phone id: 217 206 https://www.a1.mk/documents/20126/2336936/TCL-306_Atlantic-Blue_Front.png 207 phone id: 219 208 https://admin.ledikom.mk/uploads/items/2798/1652776962xiaomi-poco-x4-pro-5g-1-250x300-pad.jpg?v=1 209 phone id: 220 210 https://admin.ledikom.mk/uploads/items/1480/1647546041samsung-galaxy-s22-ultra-5g-1-250x300-pad.jpg?v=1 211 phone id: 221 212 https://mobelix.com.mk/storage/app/uploads/public/5ec/92e/6d3/thumb_2119_550_800_0_0_crop.png 213 phone id: 222 214 https://mobelix.com.mk/storage/app/uploads/public/624/5ca/928/thumb_3764_550_800_0_0_crop.png 215 phone id: 223 216 https://admin.ledikom.mk/uploads/items/1566/1651355303oneplus-10-pro-1-250x300-pad.jpg?v=1 217 phone id: 224 218 https://admin.ledikom.mk/uploads/items/1564/1651071926samsung-galaxy-a73-5g-1-250x300-pad.jpg?v=1 219 phone id: 225 220 https://mobelix.com.mk/storage/app/uploads/public/628/ba6/995/thumb_3840_550_800_0_0_crop.png 221 phone id: 226 222 https://mobelix.com.mk/storage/app/uploads/public/629/ddd/5ac/thumb_3862_550_800_0_0_crop.png 223 phone id: 227 224 https://admin.ledikom.mk/uploads/items/3026/1655278093samsung-galaxy-m33-5g-1-250x300-pad.jpg?v=1 225 phone id: 228 226 https://mobelix.com.mk/storage/app/uploads/public/62c/d2d/bb7/thumb_3883_550_800_0_0_crop.png 227 phone id: 229 228 https://mobelix.com.mk/storage/app/uploads/public/62d/574/ea8/thumb_3889_550_800_0_0_crop.png 229 phone id: 233 230 https://www.neptun.mk/2019/12/31/06a36488-e86c-4599-8c59-7c7a4c588c80_8dbb8b4f-de84-4ae3-8392-5468909ee0e0.png?width=192 231 phone id: 234 232 https://akcija.com.mk/app/img/products/gallery/2022/03/Alcatel_1066G_Black.webp 233 phone id: 235 234 https://www.neptun.mk/2018/08/14/Tiger_L5_Black_Special_v11.23_1c0a6cd6-8705-42ad-a6ba-db7c7b939b7c.jpg?width=192 235 phone id: 237 236 https://admin.ledikom.mk/uploads/items/1488/1649683643xiaomi-redmi-9c-nfc-1-250x300-pad.jpg?v=1 237 phone id: 238 238 https://admin.ledikom.mk/uploads/items/432/redmi9a-48378-250x300-pad.jpg?v=1 239 phone id: 239 240 https://www.neptun.mk/2022/03/21/realmec1120212gb32gb04azuladll_253ab3fd-0f10-4c00-97b3-062c3db73710.jpg?width=192 241 phone id: 240 242 https://akcija.com.mk/app/img/products/gallery/2022/03/Blackview_A80_Black_49835.jpg 243 phone id: 241 244 https://akcija.com.mk/app/img/products/gallery/2021/07/WIKVIEMAXWP2ANTST_Wiko_View_Max_Anthracite.webp 245 phone id: 243 246 https://akcija.com.mk/app/img/products/gallery/2021/07/WIKLENNYWK400ANTST_Wiko_Lenny5_WK400_Anthracit.webp 247 phone id: 244 248 https://www.neptun.mk/2021/06/04/xiaomi-black-shark-4-600x600-600x600_78632f44-8eab-4436-8d92-4c30017fa7c5.jpg?width=192 249 phone id: 245 250 https://www.neptun.mk/2021/10/21/gsmarena004_415d078d-4c7e-43c8-b76c-857922a385b2.jpg?width=192 251 phone id: 246 252 https://www.a1.mk/documents/20126/2315411/Honor-Magic-4-lite-5G-Black-Front.png 253 phone id: 247 254 https://www.a1.mk/documents/20126/2087663/POCO-M4_Pro-5G-black.png 255 phone id: 249 256 https://admin.ledikom.mk/uploads/items/2800/1652862618xiaomi-poco-f4-gt-1-250x300-pad.jpg?v=1 257 phone id: 250 258 https://www.neptun.mk/2022/07/25/Capture1_39933e15-2e42-4fdd-ad50-b26daefc653d.JPG?width=192 259 phone id: 251 260 https://www.neptun.mk/2020/12/29/2.jpeg?width=192 261 phone id: 252 262 https://www.a1.mk/documents/20126/1482115/LG-K52.png 263 phone id: 253 264 https://www.a1.mk/documents/20126/2097647/TCL-20-plus-Milky-Way-Grey.png 265 phone id: 255 266 https://admin.ledikom.mk/uploads/items/400/1653051754nokia-6300-4g-1-250x300-pad.jpg?v=1 267 phone id: 256 268 https://setec.mk/image/cache/catalog/Product/73864_0-228x228.jpg 269 phone id: 257 270 https://www.neptun.mk/2022/07/21/22.JPG?width=192 271 phone id: 260 272 https://www.neptun.mk/2021/11/24/white_542da90b-c215-4e75-b6a0-416d1cbb745c.JPG?width=192 273 phone id: 261 274 https://www.a1.mk/documents/20126/622141/CAT-S62-front.png 275 phone id: 262 276 https://www.a1.mk/documents/20126/622141/CAT-B26.png 277 phone id: 263 278 https://www.a1.mk/documents/20126/2014065/Alcatel-3082-4G.png 279 phone id: 264 280 https://www.a1.mk/documents/20126/1384010/Doro_1370.png 281 phone id: 265 282 https://www.a1.mk/documents/20126/1741700/Alcatel-3080.png 283 phone id: 266 284 https://www.a1.mk/documents/20126/1384010/Doro_2404.png 285 phone id: 267 286 https://www.a1.mk/documents/20126/2065640/Motorola-MOTO-E20.png 287 phone id: 270 288 https://www.neptun.mk/2020/02/05/resizer.php_49f522a0-9f44-4a37-8212-e0e1b2995fa8.jpg?width=192 289 phone id: 271 290 https://setec.mk/image/cache/catalog/Product/48063_0-228x228.jpg 291 phone id: 272 292 https://setec.mk/image/cache/catalog/Product/50397_0-228x228.jpg 293 phone id: 273 294 https://setec.mk/image/cache/catalog/Product/52379_0-228x228.jpg 295 phone id: 274 296 https://setec.mk/image/cache/catalog/Product/53519_0-228x228.jpg 297 phone id: 275 298 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/27062022151936download.jpg 299 phone id: 276 300 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/a60problack_1.jpg 301 phone id: 277 302 https://setec.mk/image/cache/catalog/Product/49840_0-228x228.jpg 303 phone id: 278 304 https://setec.mk/image/cache/catalog/Product/48542_0-228x228.jpg 305 phone id: 279 306 https://setec.mk/image/cache/catalog/Product/52744_0-228x228.jpg 307 phone id: 280 308 https://setec.mk/image/cache/catalog/Product/50394_0-228x228.jpg 309 phone id: 282 310 https://www.neptun.mk/2021/01/27/111_3237af8a-8b15-4e3e-aff8-38a86a1bcb40.jpg?width=192 311 phone id: 285 312 https://www.neptun.mk/2022/03/21/C21Y-Black_3fe958bc-9eeb-4bc6-8cc5-5caa930a4369.jpg?width=192 313 phone id: 286 314 https://setec.mk/image/cache/catalog/Product/49553_0-228x228.jpg 315 phone id: 287 316 https://setec.mk/image/cache/catalog/Product/74712_0-228x228.jpg 317 phone id: 288 318 https://setec.mk/image/cache/catalog/Product/48099_0-228x228.jpg 319 phone id: 289 320 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/g10-auroragrey-front.jpg 321 phone id: 290 322 https://setec.mk/image/cache/catalog/Product/52740_0-228x228.jpg 323 phone id: 291 324 https://setec.mk/image/cache/catalog/Product/74998_0-228x228.jpg 325 phone id: 292 326 https://setec.mk/image/cache/catalog/Product/52389_0-228x228.jpg 327 phone id: 293 328 https://www.neptun.mk/2022/06/23/156755-1200-1200.png?width=192 329 phone id: 294 330 https://setec.mk/image/cache/catalog/Product/75793_0-228x228.jpg 331 phone id: 295 332 https://www.neptun.mk/2022/06/23/156729-1200-1200.png?width=192 333 phone id: 296 334 https://setec.mk/image/cache/catalog/Product/74694_0-228x228.jpg 335 phone id: 297 336 https://www.neptun.mk/2021/10/18/746380-1000x1000_4a0ec6bb-6131-439e-a4b4-406e57caf52e.jpg?width=192 337 phone id: 298 338 https://setec.mk/image/cache/catalog/Product/74996_0-228x228.jpg 339 phone id: 299 340 https://www.neptun.mk/2022/03/21/2_50b1868c-30f0-4a9a-a8c5-180a3868aef5.JPG?width=192 341 phone id: 300 342 https://setec.mk/image//var/www/setec/image/catalog/Product/75706_0.jpg 343 phone id: 301 344 https://setec.mk/image/cache/catalog/Product/74997_0-228x228.jpg 345 phone id: 304 346 https://setec.mk/image/cache/catalog/Product/75805_0-228x228.jpg 347 phone id: 305 348 https://www.neptun.mk/2022/03/22/33.JPG?width=192 349 phone id: 306 350 https://setec.mk/image/cache/catalog/Product/75703_0-228x228.jpg 351 phone id: 307 352 https://setec.mk/image/cache/catalog/Product/74704_0-228x228.jpg 353 phone id: 308 354 https://admin.ledikom.mk/uploads/items/368/1644923487xiaomi-mi-11-lite-1-250x300-pad.jpg?v=1 355 phone id: 309 356 https://www.neptun.mk/2022/06/23/156684-1600-1600.png?width=192 357 phone id: 310 358 https://admin.ledikom.mk/uploads/items/3042/1655899106oneplus-nord-ce-5g-1-250x300-pad.jpg?v=1 359 phone id: 313 360 https://www.neptun.mk/2022/03/21/11_e8705b0f-d153-4b36-b5f5-776e49163dbd.JPG?width=192 361 phone id: 314 362 https://www.neptun.mk/2022/05/13/xiaomi-11t-5g-8gb-128gb-dual-sim-blanco41319a91-e898-4122-9dad-0f3115643b9f_65cc4f17-4add-4eea-a64e-49b60f2d45b1.jpg?width=192 363 phone id: 315 364 https://setec.mk/image/cache/catalog/Product/75403_0-228x228.jpg 365 phone id: 316 366 https://admin.ledikom.mk/uploads/items/2756/1651663563xiaomi-12x-1-250x300-pad.jpg?v=1 367 phone id: 318 368 https://admin.ledikom.mk/uploads/items/1562/1651071199xiaomi-12-1-250x300-pad.jpg?v=1 369 phone id: 319 370 https://admin.ledikom.mk/uploads/items/401/1642796375samsung-galaxy-z-flip3-5g-1-250x300-pad.jpg?v=1 371 phone id: 321 372 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/11022022143748download.jpg 373 phone id: 323 374 https://i2.wp.com/mobilezone.mk/wp-content/uploads/2021/08/12-pro-max-blue.png?resize=512%2C600&ssl=1 375 phone id: 325 376 https://i0.wp.com/mobilezone.mk/wp-content/uploads/2021/08/12-mini-blue.png?resize=512%2C600&ssl=1 377 phone id: 326 378 https://i2.wp.com/mobilezone.mk/wp-content/uploads/2021/08/11-pro-black.png?resize=512%2C600&ssl=1 379 phone id: 327 380 https://i0.wp.com/mobilezone.mk/wp-content/uploads/2021/08/11-pro-max-black.png?resize=512%2C600&ssl=1 381 phone id: 328 382 https://admin.ledikom.mk/uploads/items/1481/1649102984apple-iphone-se-2022-1-250x300-pad.jpg?v=1 383 phone id: 329 384 https://admin.ledikom.mk/uploads/items/1479/1647545279samsung-galaxy-s22-5g-1-250x300-pad.jpg?v=1 385 phone id: 330 386 https://admin.ledikom.mk/uploads/items/297/1642703362samsung-galaxy-a01-core-1-250x300-pad.jpg?v=1 387 phone id: 331 388 phone id: 332 389 phone id: 333 390 phone id: 334 391 phone id: 336 392 https://admin.ledikom.mk/uploads/items/319/1642704346samsung-galaxy-s20-fe-1-250x300-pad.jpg?v=1 393 phone id: 337 394 https://setec.mk/image/cache/catalog/Product/73860_0-228x228.jpg 395 phone id: 338 396 https://admin.ledikom.mk/uploads/items/1486/1649685350xiaomi-redmi-9i-1-250x300-pad.jpg?v=1 397 phone id: 340 398 https://setec.mk/image/cache/catalog/Product/74714_0-228x228.jpg 399 phone id: 341 400 https://www.neptun.mk/2021/06/14/xiaomiredminote105g00v2grisadl_a83a542a-c9d1-4475-8fc7-dae3521b9bc6.jpg?width=192 401 phone id: 342 402 https://www.neptun.mk/2022/07/19/51UhkQTNxmL.ACSL1000_37699529-bf74-498e-9d9b-ecc8e6b57976.jpg?width=192 403 phone id: 343 404 https://www.neptun.mk/2022/05/13/222_e9b3e0e4-4026-4d87-9b5f-44f05b306611.JPG?width=192 405 phone id: 344 406 https://admin.ledikom.mk/uploads/items/3044/1656151222xiaomi-12-pro-1-250x300-pad.jpg?v=1 407 phone id: 345 408 phone id: 346 409 phone id: 348 410 phone id: 349 411 phone id: 350 412 phone id: 351 413 phone id: 352 414 https://admin.ledikom.mk/uploads/items/356/1642789488samsung-galaxy-m62-1-250x300-pad.jpg?v=1 415 phone id: 353 416 phone id: 354 417 phone id: 355 418 phone id: 356 419 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/14102020175047ory-unlocked-global-872783_800x.jpg 420 phone id: 357 421 https://mobelix.com.mk/storage/app/uploads/public/613/094/943/thumb_3309_550_800_0_0_crop.png 422 phone id: 358 423 https://www.neptun.mk/2019/11/19/555.jpg_99d86467-c5a7-42e7-8896-2ff76ac4874d.PNG?width=192 424 phone id: 359 425 https://www.neptun.mk/2019/11/19/555.jpg_e9a27a11-7377-40e5-ba21-2c42a6216ed8.PNG?width=192 426 phone id: 360 427 https://www.neptun.mk/2021/10/25/20200514120927alcatel3025x256mbmetallicblue_5968b52f-10cf-408c-96ee-6ebb76a83d0e.jpeg?width=192 428 phone id: 361 429 https://www.neptun.mk/2021/10/25/71qaRJFLH2L.ACSS450_58ea1f14-bd9f-49a4-91e2-2af91b5826a0.jpg?width=192 430 phone id: 362 431 https://www.neptun.mk/2021/03/15/1122_3c24c189-3b4b-4b37-9d43-1232b082244b.png?width=192 432 phone id: 363 433 https://www.neptun.mk/2021/11/21/Alcatel-1S-2021513x599-1_6c7faa25-0939-4db9-b9ec-b80be480509f.png?width=192 434 phone id: 364 435 https://akcija.com.mk/app/img/products/gallery/2022/03/Alcatel_5024D_1S_3GB-32GB_LTE_Dual-Sim_Metallic_Black.webp 436 phone id: 365 437 https://www.neptun.mk/2020/06/03/12_b9efc36f-7581-4ace-a550-007ac853a6cd.jpg?width=192 438 phone id: 366 439 https://www.a1.mk/documents/20126/2333741/Alcatel-1B_Front.png 440 phone id: 367 441 phone id: 368 442 phone id: 369 443 https://www.neptun.mk/2020/08/14/1122_7fa6daf3-975e-4abe-9edb-197b70ffb150.jpeg?width=192 444 phone id: 370 445 https://www.a1.mk/documents/20126/2142278/Alcatel-1-2021.png 446 phone id: 371 447 phone id: 372 448 phone id: 373 449 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/a70problack.jpg 450 phone id: 374 451 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/c20purple.jpg 452 phone id: 375 453 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/doogee_x96_2gb_32gb_rojo_01_l.jpg 454 phone id: 376 455 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/doogee-x96-pro_arenamobiles.jpg 456 phone id: 377 457 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/10112021121646x95black_1.jpg 458 phone id: 378 459 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/x95black_1.jpg 460 phone id: 379 461 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/thumb_548333_default_big.jpg 462 phone id: 380 463 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/doogee_s58_pro_6gb_64gb_05_negro_ad_l.jpg 464 phone id: 381 465 https://www.neptun.mk/2021/07/02/4_6eaa4b73-2e6d-40b3-86c2-6c5940433cbd.JPG?width=192 466 phone id: 382 467 https://www.neptun.mk/2020/11/17/77_55ded608-c4a7-45f6-84e2-1dd826f4db2c.jpg?width=192 468 phone id: 383 469 https://www.neptun.mk/2021/07/02/1_3c75a06b-29ee-459b-8260-3c065616cf65.JPG?width=192 470 phone id: 384 471 https://www.neptun.mk/2021/11/24/Motorola-Edge-20-Pro-128GB-Midnight-Blue-0840023220623-01102021-01-p_6099d602-c2c4-428c-9560-1dd79df3338d.jpg?width=192 472 phone id: 385 473 https://www.a1.mk/documents/20126/1706113/MOTO-G50.png 474 phone id: 386 475 https://www.neptun.mk/2021/11/04/gsmarena004_6a7fd9b3-8102-4bb7-960b-0c72ca683936.jpg?width=192 476 phone id: 387 477 https://www.neptun.mk/2022/06/23/156709-1600-1600.png?width=192 478 phone id: 388 479 https://www.neptun.mk/2022/06/23/157221-1600-auto.png?width=192 480 phone id: 389 481 https://www.neptun.mk/2022/03/21/51u9-q9539L.SL1000_f04a7be5-ad53-445d-9bde-9a33c0ff3f33.jpg?width=192 482 phone id: 390 483 https://www.neptun.mk/2022/03/21/Realme-9-Pro-Plus-Green_d8eec8b7-5912-4dea-b36b-a3f66832abd4.jpg?width=192 484 phone id: 391 485 https://www.neptun.mk/2022/03/21/222_4c36f6d2-1a4b-4e91-a096-21d115330db2.JPG?width=192 486 phone id: 392 487 https://mobelix.com.mk/storage/app/uploads/public/619/e62/78d/thumb_3468_550_800_0_0_crop.png 488 phone id: 393 489 https://www.neptun.mk/2022/03/21/523920-1000x1000_e0d86853-abff-4048-bd07-e6d6ca0915db.jpg?width=192 490 phone id: 394 491 https://www.neptun.mk/2022/03/21/6935117828220-003-1400Wx1400H_90483936-5a39-47cb-b1c8-f9e868d765c8.jpg?width=192 492 phone id: 395 493 https://www.neptun.mk/2019/10/16/hq_c86c98c2-729b-49d5-aab9-216be2fea777.jpg?width=192 494 phone id: 396 495 phone id: 397 496 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/nokia_106.jpg 497 phone id: 398 498 phone id: 399 499 phone id: 400 500 https://www.neptun.mk/2022/07/08/45_7f5afee7-d808-4111-9853-738a7b5993a3.JPG?width=192 501 phone id: 401 502 https://www.neptun.mk/2022/07/21/1234_97e5321e-7ec0-438b-8c9b-0c89acb73b2f.JPG?width=192 503 phone id: 402 504 https://www.neptun.mk/2022/07/08/333_bda690bd-c2a4-4ee4-82c7-3e4001fd1655.JPG?width=192 505 phone id: 403 506 https://www.neptun.mk/2021/12/16/infinix-note-11-pro-8-128-zeleni-mobilni-6-95-quot-octa-core-mediatek-helio-g96-8gb-128gb-64mpx-13mpx-2mpx-dual-simZFNfn4_2d108fb3-756e-4d1b-a41a-afeae6104ac9.jpg?width=192 507 phone id: 404 508 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/max10black_1.jpg 509 phone id: 405 510 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/flex50gtturnedred.jpg 511 phone id: 406 512 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/09142292_name.jpg 513 phone id: 407 514 phone id: 408 515 phone id: 409 516 phone id: 410 517 phone id: 411 518 phone id: 412 519 phone id: 413 520 phone id: 414 521 phone id: 415 522 https://mobelix.com.mk/storage/app/uploads/public/5cd/051/f4c/thumb_1809_550_800_0_0_crop.jpg 523 phone id: 416 524 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/510095mub.jpg 525 phone id: 417 526 phone id: 418 527 phone id: 419 528 phone id: 420 529 phone id: 421 530 https://i0.wp.com/mobilezone.mk/wp-content/uploads/2021/11/Honor-9x-lite-black.png?resize=512%2C600&ssl=1 531 phone id: 422 532 phone id: 423 533 https://www.a1.mk/documents/20126/2117931/Wiko_Y62.png 534 phone id: 424 535 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/21122021152115ilt-in-camera-main-camera-03-mp.jpg 536 phone id: 425 537 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/21122021141255download.jpg 538 phone id: 426 539 phone id: 427 540 phone id: 428 541 phone id: 429 542 phone id: 430 543 phone id: 431 544 phone id: 432 545 phone id: 433 546 phone id: 434 547 phone id: 435 548 phone id: 436 549 phone id: 437 550 phone id: 438 551 phone id: 439 552 phone id: 440 553 https://admin.ledikom.mk/uploads/items/3040/1655892316oppo-a94-5g-1-250x300-pad.jpg?v=1 554 phone id: 441 555 https://admin.ledikom.mk/uploads/items/3041/1655898755oppo-find-x5-lite-5g-1-250x300-pad.jpg?v=1 556 phone id: 442 557 phone id: 443 558 phone id: 444 559 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/11012022150451veteranivplus_1.jpg 560 phone id: 445 561 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/seniorflipxl_1.jpg 562 phone id: 446 563 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/denver-bas-18300m-1.jpg 564 phone id: 447 565 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/23022022105342123.jpg 566 phone id: 448 567 phone id: 449 568 phone id: 450 569 phone id: 451 570 phone id: 452 571 https://d3mrte3vpewnxc.cloudfront.net/img/products/full/09150922_name.jpg
Note:
See TracChangeset
for help on using the changeset viewer.