blob: ae9d4601e5e21caa1539377807dcd9ebd1339559 [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>
6<script>
7import Home from './pages/Home.vue';
8import SavedProducts from './pages/SavedProducts.vue';
9import Publish from './pages/Publish.vue';
10import Category from './pages/Category.vue';
11import Search from './pages/Search.vue';
12import PublishedProducts from './pages/PublishedProducts.vue';
Faris Ansarifad623e2018-08-26 19:48:52 +053013import Buying from './pages/Buying.vue';
14import BuyingMessages from './pages/BuyingMessages.vue';
Faris Ansarif089dad2018-08-26 22:20:16 +053015import NotFound from './pages/NotFound.vue';
Faris Ansari888dd602018-08-26 12:41:02 +053016
17const route_map = {
18 'marketplace/home': Home,
19 'marketplace/saved-products': SavedProducts,
Faris Ansarifad623e2018-08-26 19:48:52 +053020 'marketplace/my-products': PublishedProducts,
21 'marketplace/publish': Publish,
22 'marketplace/category/:category': Category,
23 'marketplace/search/:keyword': Search,
24 'marketplace/buying': Buying,
25 'marketplace/buying/:item': BuyingMessages
Faris Ansari888dd602018-08-26 12:41:02 +053026}
27
28export default {
29 data() {
30 return {
31 current_page: this.get_current_page()
32 }
33 },
34 mounted() {
35 frappe.route.on('change', () => {
36 this.set_current_page();
37 });
38 },
39 methods: {
40 set_current_page() {
41 this.current_page = this.get_current_page();
42 },
43 get_current_page() {
Faris Ansarifad623e2018-08-26 19:48:52 +053044 const curr_route = frappe.get_route_str();
45 let route = Object.keys(route_map).filter(route => route == curr_route)[0];
46
47 if (!route) {
48 // find route by matching it with dynamic part
49 const curr_route_parts = curr_route.split('/');
50 const weighted_routes = Object.keys(route_map)
51 .map(route_str => route_str.split('/'))
52 .filter(route_parts => route_parts.length === curr_route_parts.length)
53 .reduce((obj, route_parts) => {
54 const key = route_parts.join('/');
55 let weight = 0;
56 route_parts.forEach((part, i) => {
57 const curr_route_part = curr_route_parts[i];
58 if (part === curr_route_part || curr_route_part.includes(':')) {
59 weight += 1;
60 }
61 });
62
63 obj[key] = weight;
64 return obj;
65 }, {});
66
67 // get the route with the highest weight
68 let weight = 0
69 for (let key in weighted_routes) {
70 const route_weight = weighted_routes[key];
71 if (route_weight > weight) {
72 route = key;
73 weight = route_weight;
74 }
75 }
76 }
77
Faris Ansarif089dad2018-08-26 22:20:16 +053078 if (!route) {
79 return NotFound;
80 }
81
Faris Ansarifad623e2018-08-26 19:48:52 +053082 return route_map[route];
Faris Ansari888dd602018-08-26 12:41:02 +053083 }
84 }
85}
86</script>