76b31deda5
* feat: Make marketplace run on hub server in Guest mode * fix: Skip page actions on server * fix: Limit PageContainer to marketplace route * fix(eslint): Add hub variable to globals
108 lines
2.3 KiB
Vue
108 lines
2.3 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();
|
|
},
|
|
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', this.search_value);
|
|
},
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped></style>
|