blob: 54c359766d3664a1b0f9b74fbd4c989d6abd95ea [file] [log] [blame]
Faris Ansari888dd602018-08-26 12:41:02 +05301<template>
2 <div class="hub-page-container">
Faris Ansari0d08da52018-11-05 15:47:26 +05303 <component :is="current_page.component" :key="current_page.key"></component>
Faris Ansari888dd602018-08-26 12:41:02 +05304 </div>
5</template>
Prateeksha Singhd0a952b2018-08-27 10:12:45 +05306
Faris Ansari888dd602018-08-26 12:41:02 +05307<script>
Prateeksha Singhd0a952b2018-08-27 10:12:45 +05308
Faris Ansari888dd602018-08-26 12:41:02 +05309import Home from './pages/Home.vue';
Faris Ansari888dd602018-08-26 12:41:02 +053010import Search from './pages/Search.vue';
Prateeksha Singhd0a952b2018-08-27 10:12:45 +053011import Category from './pages/Category.vue';
Faris Ansari8e044872018-08-30 15:35:06 +053012import SavedItems from './pages/SavedItems.vue';
karthikeyan52894f792019-01-31 17:47:06 +053013import FeaturedItems from './pages/FeaturedItems.vue';
Faris Ansari8e044872018-08-30 15:35:06 +053014import PublishedItems from './pages/PublishedItems.vue';
Prateeksha Singhd0a952b2018-08-27 10:12:45 +053015import Item from './pages/Item.vue';
16import Seller from './pages/Seller.vue';
karthikeyan54df60032019-02-08 17:51:01 +053017import SellerItems from './pages/SellerItems.vue';
Prateeksha Singhd0a952b2018-08-27 10:12:45 +053018import Publish from './pages/Publish.vue';
Faris Ansarifad623e2018-08-26 19:48:52 +053019import Buying from './pages/Buying.vue';
Faris Ansari725603c2018-08-27 19:51:36 +053020import Selling from './pages/Selling.vue';
21import Messages from './pages/Messages.vue';
Prateeksha Singhd0a952b2018-08-27 10:12:45 +053022import NotFound from './pages/NotFound.vue';
Faris Ansari888dd602018-08-26 12:41:02 +053023
Prateeksha Singh18e3c612018-09-03 15:22:13 +053024function get_route_map() {
25 const read_only_routes = {
26 'marketplace/home': Home,
Mangesh-Khairnar25978172019-11-28 18:57:42 +053027 'marketplace/search/:category/:keyword': Search,
Prateeksha Singh18e3c612018-09-03 15:22:13 +053028 'marketplace/category/:category': Category,
29 'marketplace/item/:item': Item,
30 'marketplace/seller/:seller': Seller,
karthikeyan54df60032019-02-08 17:51:01 +053031 'marketplace/seller/:seller/items': SellerItems,
Prateeksha Singh18e3c612018-09-03 15:22:13 +053032 'marketplace/not-found': NotFound,
33 }
34 const registered_routes = {
karthikeyan54df60032019-02-08 17:51:01 +053035 'marketplace/profile': Seller,
Prateeksha Singh18e3c612018-09-03 15:22:13 +053036 'marketplace/saved-items': SavedItems,
karthikeyan52894f792019-01-31 17:47:06 +053037 'marketplace/featured-items': FeaturedItems,
Prateeksha Singh18e3c612018-09-03 15:22:13 +053038 '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 Singhbffb7072018-09-03 16:39:59 +053045
46 return hub.is_seller_registered()
Prateeksha Singh18e3c612018-09-03 15:22:13 +053047 ? Object.assign({}, read_only_routes, registered_routes)
48 : read_only_routes;
Faris Ansari888dd602018-08-26 12:41:02 +053049}
50
51export default {
52 data() {
53 return {
54 current_page: this.get_current_page()
55 }
56 },
57 mounted() {
58 frappe.route.on('change', () => {
Faris Ansari76b31de2018-09-11 17:38:31 +053059 if (frappe.get_route()[0] === 'marketplace') {
60 this.set_current_page();
61 frappe.utils.scroll_to(0);
62 }
Faris Ansari888dd602018-08-26 12:41:02 +053063 });
64 },
65 methods: {
66 set_current_page() {
67 this.current_page = this.get_current_page();
68 },
69 get_current_page() {
Prateeksha Singh18e3c612018-09-03 15:22:13 +053070 const route_map = get_route_map();
Faris Ansarifad623e2018-08-26 19:48:52 +053071 const curr_route = frappe.get_route_str();
72 let route = Object.keys(route_map).filter(route => route == curr_route)[0];
Faris Ansarifad623e2018-08-26 19:48:52 +053073 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 Ansari90265ae2018-08-30 14:36:05 +053084 if (part === curr_route_part || part.includes(':')) {
Faris Ansarifad623e2018-08-26 19:48:52 +053085 weight += 1;
86 }
87 });
88
89 obj[key] = weight;
90 return obj;
91 }, {});
92
93 // get the route with the highest weight
Faris Ansarifad623e2018-08-26 19:48:52 +053094 for (let key in weighted_routes) {
95 const route_weight = weighted_routes[key];
Faris Ansari90265ae2018-08-30 14:36:05 +053096 if (route_weight === curr_route_parts.length) {
Faris Ansarifad623e2018-08-26 19:48:52 +053097 route = key;
Faris Ansari90265ae2018-08-30 14:36:05 +053098 break;
99 } else {
100 route = null;
Faris Ansarifad623e2018-08-26 19:48:52 +0530101 }
102 }
103 }
104
Faris Ansarif089dad2018-08-26 22:20:16 +0530105 if (!route) {
Faris Ansari0d08da52018-11-05 15:47:26 +0530106 return {
107 key: 'not-found',
108 component: NotFound
109 };
Faris Ansarif089dad2018-08-26 22:20:16 +0530110 }
111
Faris Ansari0d08da52018-11-05 15:47:26 +0530112 return {
113 key: curr_route,
114 component: route_map[route]
115 }
Faris Ansari888dd602018-08-26 12:41:02 +0530116 }
117 }
118}
119</script>