Faris Ansari | 888dd60 | 2018-08-26 12:41:02 +0530 | [diff] [blame] | 1 | <template> |
| 2 | <div class="hub-page-container"> |
Faris Ansari | 0d08da5 | 2018-11-05 15:47:26 +0530 | [diff] [blame] | 3 | <component :is="current_page.component" :key="current_page.key"></component> |
Faris Ansari | 888dd60 | 2018-08-26 12:41:02 +0530 | [diff] [blame] | 4 | </div> |
| 5 | </template> |
Prateeksha Singh | d0a952b | 2018-08-27 10:12:45 +0530 | [diff] [blame] | 6 | |
Faris Ansari | 888dd60 | 2018-08-26 12:41:02 +0530 | [diff] [blame] | 7 | <script> |
Prateeksha Singh | d0a952b | 2018-08-27 10:12:45 +0530 | [diff] [blame] | 8 | |
Faris Ansari | 888dd60 | 2018-08-26 12:41:02 +0530 | [diff] [blame] | 9 | import Home from './pages/Home.vue'; |
Faris Ansari | 888dd60 | 2018-08-26 12:41:02 +0530 | [diff] [blame] | 10 | import Search from './pages/Search.vue'; |
Prateeksha Singh | d0a952b | 2018-08-27 10:12:45 +0530 | [diff] [blame] | 11 | import Category from './pages/Category.vue'; |
Faris Ansari | 8e04487 | 2018-08-30 15:35:06 +0530 | [diff] [blame] | 12 | import SavedItems from './pages/SavedItems.vue'; |
karthikeyan5 | 2894f79 | 2019-01-31 17:47:06 +0530 | [diff] [blame] | 13 | import FeaturedItems from './pages/FeaturedItems.vue'; |
Faris Ansari | 8e04487 | 2018-08-30 15:35:06 +0530 | [diff] [blame] | 14 | import PublishedItems from './pages/PublishedItems.vue'; |
Prateeksha Singh | d0a952b | 2018-08-27 10:12:45 +0530 | [diff] [blame] | 15 | import Item from './pages/Item.vue'; |
| 16 | import Seller from './pages/Seller.vue'; |
karthikeyan5 | 4df6003 | 2019-02-08 17:51:01 +0530 | [diff] [blame] | 17 | import SellerItems from './pages/SellerItems.vue'; |
Prateeksha Singh | d0a952b | 2018-08-27 10:12:45 +0530 | [diff] [blame] | 18 | import Publish from './pages/Publish.vue'; |
Faris Ansari | fad623e | 2018-08-26 19:48:52 +0530 | [diff] [blame] | 19 | import Buying from './pages/Buying.vue'; |
Faris Ansari | 725603c | 2018-08-27 19:51:36 +0530 | [diff] [blame] | 20 | import Selling from './pages/Selling.vue'; |
| 21 | import Messages from './pages/Messages.vue'; |
Prateeksha Singh | d0a952b | 2018-08-27 10:12:45 +0530 | [diff] [blame] | 22 | import NotFound from './pages/NotFound.vue'; |
Faris Ansari | 888dd60 | 2018-08-26 12:41:02 +0530 | [diff] [blame] | 23 | |
Prateeksha Singh | 18e3c61 | 2018-09-03 15:22:13 +0530 | [diff] [blame] | 24 | function get_route_map() { |
| 25 | const read_only_routes = { |
| 26 | 'marketplace/home': Home, |
| 27 | 'marketplace/search/:keyword': Search, |
| 28 | 'marketplace/category/:category': Category, |
| 29 | 'marketplace/item/:item': Item, |
| 30 | 'marketplace/seller/:seller': Seller, |
karthikeyan5 | 4df6003 | 2019-02-08 17:51:01 +0530 | [diff] [blame] | 31 | 'marketplace/seller/:seller/items': SellerItems, |
Prateeksha Singh | 18e3c61 | 2018-09-03 15:22:13 +0530 | [diff] [blame] | 32 | 'marketplace/not-found': NotFound, |
| 33 | } |
| 34 | const registered_routes = { |
karthikeyan5 | 4df6003 | 2019-02-08 17:51:01 +0530 | [diff] [blame] | 35 | 'marketplace/profile': Seller, |
Prateeksha Singh | 18e3c61 | 2018-09-03 15:22:13 +0530 | [diff] [blame] | 36 | 'marketplace/saved-items': SavedItems, |
karthikeyan5 | 2894f79 | 2019-01-31 17:47:06 +0530 | [diff] [blame] | 37 | 'marketplace/featured-items': FeaturedItems, |
Prateeksha Singh | 18e3c61 | 2018-09-03 15:22:13 +0530 | [diff] [blame] | 38 | 'marketplace/publish': Publish, |
| 39 | 'marketplace/published-items': PublishedItems, |
| 40 | 'marketplace/buying': Buying, |
| 41 | 'marketplace/buying/:item': Messages, |
| 42 | 'marketplace/selling': Selling, |
| 43 | 'marketplace/selling/:buyer/:item': Messages |
| 44 | } |
Prateeksha Singh | bffb707 | 2018-09-03 16:39:59 +0530 | [diff] [blame] | 45 | |
| 46 | return hub.is_seller_registered() |
Prateeksha Singh | 18e3c61 | 2018-09-03 15:22:13 +0530 | [diff] [blame] | 47 | ? Object.assign({}, read_only_routes, registered_routes) |
| 48 | : read_only_routes; |
Faris Ansari | 888dd60 | 2018-08-26 12:41:02 +0530 | [diff] [blame] | 49 | } |
| 50 | |
| 51 | export default { |
| 52 | data() { |
| 53 | return { |
| 54 | current_page: this.get_current_page() |
| 55 | } |
| 56 | }, |
| 57 | mounted() { |
| 58 | frappe.route.on('change', () => { |
Faris Ansari | 76b31de | 2018-09-11 17:38:31 +0530 | [diff] [blame] | 59 | if (frappe.get_route()[0] === 'marketplace') { |
| 60 | this.set_current_page(); |
| 61 | frappe.utils.scroll_to(0); |
| 62 | } |
Faris Ansari | 888dd60 | 2018-08-26 12:41:02 +0530 | [diff] [blame] | 63 | }); |
| 64 | }, |
| 65 | methods: { |
| 66 | set_current_page() { |
| 67 | this.current_page = this.get_current_page(); |
| 68 | }, |
| 69 | get_current_page() { |
Prateeksha Singh | 18e3c61 | 2018-09-03 15:22:13 +0530 | [diff] [blame] | 70 | const route_map = get_route_map(); |
Faris Ansari | fad623e | 2018-08-26 19:48:52 +0530 | [diff] [blame] | 71 | const curr_route = frappe.get_route_str(); |
| 72 | let route = Object.keys(route_map).filter(route => route == curr_route)[0]; |
Faris Ansari | fad623e | 2018-08-26 19:48:52 +0530 | [diff] [blame] | 73 | if (!route) { |
| 74 | // find route by matching it with dynamic part |
| 75 | const curr_route_parts = curr_route.split('/'); |
| 76 | const weighted_routes = Object.keys(route_map) |
| 77 | .map(route_str => route_str.split('/')) |
| 78 | .filter(route_parts => route_parts.length === curr_route_parts.length) |
| 79 | .reduce((obj, route_parts) => { |
| 80 | const key = route_parts.join('/'); |
| 81 | let weight = 0; |
| 82 | route_parts.forEach((part, i) => { |
| 83 | const curr_route_part = curr_route_parts[i]; |
Faris Ansari | 90265ae | 2018-08-30 14:36:05 +0530 | [diff] [blame] | 84 | if (part === curr_route_part || part.includes(':')) { |
Faris Ansari | fad623e | 2018-08-26 19:48:52 +0530 | [diff] [blame] | 85 | weight += 1; |
| 86 | } |
| 87 | }); |
| 88 | |
| 89 | obj[key] = weight; |
| 90 | return obj; |
| 91 | }, {}); |
| 92 | |
| 93 | // get the route with the highest weight |
Faris Ansari | fad623e | 2018-08-26 19:48:52 +0530 | [diff] [blame] | 94 | for (let key in weighted_routes) { |
| 95 | const route_weight = weighted_routes[key]; |
Faris Ansari | 90265ae | 2018-08-30 14:36:05 +0530 | [diff] [blame] | 96 | if (route_weight === curr_route_parts.length) { |
Faris Ansari | fad623e | 2018-08-26 19:48:52 +0530 | [diff] [blame] | 97 | route = key; |
Faris Ansari | 90265ae | 2018-08-30 14:36:05 +0530 | [diff] [blame] | 98 | break; |
| 99 | } else { |
| 100 | route = null; |
Faris Ansari | fad623e | 2018-08-26 19:48:52 +0530 | [diff] [blame] | 101 | } |
| 102 | } |
| 103 | } |
| 104 | |
Faris Ansari | f089dad | 2018-08-26 22:20:16 +0530 | [diff] [blame] | 105 | if (!route) { |
Faris Ansari | 0d08da5 | 2018-11-05 15:47:26 +0530 | [diff] [blame] | 106 | return { |
| 107 | key: 'not-found', |
| 108 | component: NotFound |
| 109 | }; |
Faris Ansari | f089dad | 2018-08-26 22:20:16 +0530 | [diff] [blame] | 110 | } |
| 111 | |
Faris Ansari | 0d08da5 | 2018-11-05 15:47:26 +0530 | [diff] [blame] | 112 | return { |
| 113 | key: curr_route, |
| 114 | component: route_map[route] |
| 115 | } |
Faris Ansari | 888dd60 | 2018-08-26 12:41:02 +0530 | [diff] [blame] | 116 | } |
| 117 | } |
| 118 | } |
| 119 | </script> |