blob: 5ec92d581b71c242dda6a6c3e9878ad5e7c16030 [file] [log] [blame]
Faris Ansari888dd602018-08-26 12:41:02 +05301<template>
2 <div class="hub-page-container">
3 <component :is="current_page"></component>
4 </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';
13import PublishedItems from './pages/PublishedItems.vue';
Prateeksha Singhd0a952b2018-08-27 10:12:45 +053014import Item from './pages/Item.vue';
15import Seller from './pages/Seller.vue';
16import Publish from './pages/Publish.vue';
Faris Ansarifad623e2018-08-26 19:48:52 +053017import Buying from './pages/Buying.vue';
Faris Ansari725603c2018-08-27 19:51:36 +053018import Selling from './pages/Selling.vue';
19import Messages from './pages/Messages.vue';
Prateeksha Singhd0a952b2018-08-27 10:12:45 +053020import Profile from './pages/Profile.vue';
21import NotFound from './pages/NotFound.vue';
Faris Ansari888dd602018-08-26 12:41:02 +053022
Prateeksha Singh18e3c612018-09-03 15:22:13 +053023function get_route_map() {
24 const read_only_routes = {
25 'marketplace/home': Home,
26 'marketplace/search/:keyword': Search,
27 'marketplace/category/:category': Category,
28 'marketplace/item/:item': Item,
29 'marketplace/seller/:seller': Seller,
30 'marketplace/not-found': NotFound,
31 }
32 const registered_routes = {
33 'marketplace/profile': Profile,
34 'marketplace/saved-items': SavedItems,
35 'marketplace/publish': Publish,
36 'marketplace/published-items': PublishedItems,
37 'marketplace/buying': Buying,
38 'marketplace/buying/:item': Messages,
39 'marketplace/selling': Selling,
40 'marketplace/selling/:buyer/:item': Messages
41 }
Prateeksha Singhbffb7072018-09-03 16:39:59 +053042
43 return hub.is_seller_registered()
Prateeksha Singh18e3c612018-09-03 15:22:13 +053044 ? Object.assign({}, read_only_routes, registered_routes)
45 : read_only_routes;
Faris Ansari888dd602018-08-26 12:41:02 +053046}
47
48export default {
49 data() {
50 return {
51 current_page: this.get_current_page()
52 }
53 },
54 mounted() {
55 frappe.route.on('change', () => {
Faris Ansari76b31de2018-09-11 17:38:31 +053056 if (frappe.get_route()[0] === 'marketplace') {
57 this.set_current_page();
58 frappe.utils.scroll_to(0);
59 }
Faris Ansari888dd602018-08-26 12:41:02 +053060 });
61 },
62 methods: {
63 set_current_page() {
64 this.current_page = this.get_current_page();
65 },
66 get_current_page() {
Prateeksha Singh18e3c612018-09-03 15:22:13 +053067 const route_map = get_route_map();
Faris Ansarifad623e2018-08-26 19:48:52 +053068 const curr_route = frappe.get_route_str();
69 let route = Object.keys(route_map).filter(route => route == curr_route)[0];
Faris Ansarifad623e2018-08-26 19:48:52 +053070 if (!route) {
71 // find route by matching it with dynamic part
72 const curr_route_parts = curr_route.split('/');
73 const weighted_routes = Object.keys(route_map)
74 .map(route_str => route_str.split('/'))
75 .filter(route_parts => route_parts.length === curr_route_parts.length)
76 .reduce((obj, route_parts) => {
77 const key = route_parts.join('/');
78 let weight = 0;
79 route_parts.forEach((part, i) => {
80 const curr_route_part = curr_route_parts[i];
Faris Ansari90265ae2018-08-30 14:36:05 +053081 if (part === curr_route_part || part.includes(':')) {
Faris Ansarifad623e2018-08-26 19:48:52 +053082 weight += 1;
83 }
84 });
85
86 obj[key] = weight;
87 return obj;
88 }, {});
89
90 // get the route with the highest weight
Faris Ansarifad623e2018-08-26 19:48:52 +053091 for (let key in weighted_routes) {
92 const route_weight = weighted_routes[key];
Faris Ansari90265ae2018-08-30 14:36:05 +053093 if (route_weight === curr_route_parts.length) {
Faris Ansarifad623e2018-08-26 19:48:52 +053094 route = key;
Faris Ansari90265ae2018-08-30 14:36:05 +053095 break;
96 } else {
97 route = null;
Faris Ansarifad623e2018-08-26 19:48:52 +053098 }
99 }
100 }
101
Faris Ansarif089dad2018-08-26 22:20:16 +0530102 if (!route) {
103 return NotFound;
104 }
105
Faris Ansarifad623e2018-08-26 19:48:52 +0530106 return route_map[route];
Faris Ansari888dd602018-08-26 12:41:02 +0530107 }
108 }
109}
110</script>