brotherton-erpnext/erpnext/public/js/hub/pages/Home.vue
2019-12-25 22:10:33 +05:30

115 lines
2.5 KiB
Vue

<template>
<div
class="marketplace-page"
:data-page-name="page_name"
>
<search-input
:placeholder="search_placeholder"
:on_search="set_search_route"
v-model="search_value"
/>
<div v-if="show_skeleton">
<section-header>
<h4 class="hub-skeleton">Explore Explore Explore</h4>
</section-header>
<div class="row">
<div class="col-md-3 col-sm-4 col-xs-6 hub-card-container" v-for="(f, $index) in [1, 2, 3, 4, 5, 6, 7]" :key="$index">
<div class="hub-skeleton" style="height: 262px; width: 100%; margin-bottom: 25px;"></div>
</div>
</div>
</div>
<div v-else v-for="section in sections" :key="section.title">
<section-header>
<h4>{{ section.title }}</h4>
<p v-if="section.expandable" :data-route="'marketplace/category/' + section.title">{{ 'See All' }}</p>
</section-header>
<item-cards-container
:container_name="section.title"
:items="section.items"
:item_id_fieldname="item_id_fieldname"
:on_click="go_to_item_details_page"
/>
</div>
</div>
</template>
<script>
export default {
name: 'home-page',
data() {
return {
page_name: frappe.get_route()[1],
item_id_fieldname: 'name',
search_value: '',
sections: [],
show_skeleton: true,
// Constants
search_placeholder: __('Search for anything ...'),
};
},
created() {
// refreshed
this.search_value = '';
this.get_items();
},
mounted() {
frappe.route.on('change', () => {
if (frappe.get_route_str() === 'marketplace/home') {
this.get_items();
}
})
},
methods: {
get_items() {
hub.call('get_data_for_homepage', frappe.defaults ? {
country: frappe.defaults.get_user_default('country')
} : null)
.then((data) => {
this.show_skeleton = false;
this.sections.push({
title: __('Explore'),
items: data.random_items
});
if (data.items_by_country.length) {
this.sections.push({
title: __('Near you'),
items: data.items_by_country
});
}
const category_items = data.category_items;
if (category_items) {
Object.keys(category_items).map(category => {
const items = category_items[category];
this.sections.push({
title: __(category),
expandable: true,
items
});
});
}
})
},
go_to_item_details_page(hub_item_name) {
frappe.set_route(`marketplace/item/${hub_item_name}`);
},
set_search_route() {
frappe.set_route('marketplace', 'search', 'All', this.search_value);
},
}
}
</script>
<style scoped></style>