feat: Add dynamic routes in PageContainer
diff --git a/erpnext/public/js/hub/PageContainer.vue b/erpnext/public/js/hub/PageContainer.vue
index 456da9a..ca4c63a 100644
--- a/erpnext/public/js/hub/PageContainer.vue
+++ b/erpnext/public/js/hub/PageContainer.vue
@@ -10,11 +10,18 @@
import Category from './pages/Category.vue';
import Search from './pages/Search.vue';
import PublishedProducts from './pages/PublishedProducts.vue';
+import Buying from './pages/Buying.vue';
+import BuyingMessages from './pages/BuyingMessages.vue';
const route_map = {
'marketplace/home': Home,
'marketplace/saved-products': SavedProducts,
- 'marketplace/publish': Publish
+ 'marketplace/my-products': PublishedProducts,
+ 'marketplace/publish': Publish,
+ 'marketplace/category/:category': Category,
+ 'marketplace/search/:keyword': Search,
+ 'marketplace/buying': Buying,
+ 'marketplace/buying/:item': BuyingMessages
}
export default {
@@ -33,7 +40,41 @@
this.current_page = this.get_current_page();
},
get_current_page() {
- return route_map[frappe.get_route_str()];
+ const curr_route = frappe.get_route_str();
+ let route = Object.keys(route_map).filter(route => route == curr_route)[0];
+
+ if (!route) {
+ // find route by matching it with dynamic part
+ const curr_route_parts = curr_route.split('/');
+ const weighted_routes = Object.keys(route_map)
+ .map(route_str => route_str.split('/'))
+ .filter(route_parts => route_parts.length === curr_route_parts.length)
+ .reduce((obj, route_parts) => {
+ const key = route_parts.join('/');
+ let weight = 0;
+ route_parts.forEach((part, i) => {
+ const curr_route_part = curr_route_parts[i];
+ if (part === curr_route_part || curr_route_part.includes(':')) {
+ weight += 1;
+ }
+ });
+
+ obj[key] = weight;
+ return obj;
+ }, {});
+
+ // get the route with the highest weight
+ let weight = 0
+ for (let key in weighted_routes) {
+ const route_weight = weighted_routes[key];
+ if (route_weight > weight) {
+ route = key;
+ weight = route_weight;
+ }
+ }
+ }
+
+ return route_map[route];
}
}
}
diff --git a/erpnext/public/js/hub/marketplace.js b/erpnext/public/js/hub/marketplace.js
index 931c5f9..08cc01a 100644
--- a/erpnext/public/js/hub/marketplace.js
+++ b/erpnext/public/js/hub/marketplace.js
@@ -1,4 +1,5 @@
import Vue from 'vue/dist/vue.js';
+import './vue-plugins';
// pages
import './pages/item';
@@ -148,12 +149,12 @@
make_body() {
this.$body = this.$parent.find('.layout-main-section');
- // this.$page_container = $('<div class="hub-page-container">').appendTo(this.$body);
+ this.$page_container = $('<div class="hub-page-container">').appendTo(this.$body);
- // new Vue({
- // el: '.hub-page-container',
- // render: h => h(PageContainer)
- // });
+ new Vue({
+ el: '.hub-page-container',
+ render: h => h(PageContainer)
+ });
erpnext.hub.on('seller-registered', () => {
this.registered = 1;
@@ -174,6 +175,10 @@
}
refresh() {
+
+ }
+
+ _refresh() {
const route = frappe.get_route();
this.subpages = this.subpages || {};