@rocketsearch/vue-uappi 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -50,7 +50,10 @@ export default {
|
|
|
50
50
|
},
|
|
51
51
|
methods: {
|
|
52
52
|
async load () {
|
|
53
|
-
|
|
53
|
+
const key = this.key;
|
|
54
|
+
const showcases = key ? await this.$rocket.getPageShowcases('custom', key, true) : [];
|
|
55
|
+
// Troca rápida de rota: a resposta da landing anterior não sobrescreve a atual.
|
|
56
|
+
if (key === this.key) this.showcases = showcases;
|
|
54
57
|
}
|
|
55
58
|
}
|
|
56
59
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div
|
|
3
|
-
v-if="showcase || loading || debug"
|
|
4
|
-
:class="['rocket-search', { 'rocket-search--empty': !showcase && !loading }]"
|
|
5
|
-
:data-rocket-showcase-position="position"
|
|
3
|
+
v-if="showcase || loading || debug || restIds.length"
|
|
4
|
+
:class="['rocket-search', { 'rocket-search--empty': !showcase && !loading && !restIds.length, 'rocket-search--stacked': stacked }]"
|
|
5
|
+
:data-rocket-showcase-position="stacked ? null : position"
|
|
6
6
|
>
|
|
7
7
|
<div v-if="loading" class="rocket-search__showcase rocket-search__showcase--skeleton" :style="columnsStyle">
|
|
8
8
|
<div class="rocket-search__showcase__title rocket-search__product-placeholder__item" />
|
|
@@ -47,6 +47,26 @@
|
|
|
47
47
|
<button type="button" class="rocket-search__swiper-button-next" aria-label="Próximos" @click="slide(1)" />
|
|
48
48
|
</slot>
|
|
49
49
|
</section>
|
|
50
|
+
|
|
51
|
+
<!-- Demais vitrines da mesma posição, na ordem da API: cada uma medida por conta própria. -->
|
|
52
|
+
<RocketShowcase
|
|
53
|
+
v-for="id in restIds"
|
|
54
|
+
:key="id"
|
|
55
|
+
:position="position"
|
|
56
|
+
:page-type="pageType"
|
|
57
|
+
:custom-key="customKey"
|
|
58
|
+
:showcase-id="id"
|
|
59
|
+
:media-size="mediaSize"
|
|
60
|
+
stacked
|
|
61
|
+
@products-loaded="$emit('products-loaded', $event)"
|
|
62
|
+
>
|
|
63
|
+
<template v-if="$slots.default" #default="scope">
|
|
64
|
+
<slot v-bind="scope" />
|
|
65
|
+
</template>
|
|
66
|
+
<template v-if="$slots.product" #product="scope">
|
|
67
|
+
<slot name="product" v-bind="scope" />
|
|
68
|
+
</template>
|
|
69
|
+
</RocketShowcase>
|
|
50
70
|
</div>
|
|
51
71
|
</template>
|
|
52
72
|
|
|
@@ -71,12 +91,15 @@ export default {
|
|
|
71
91
|
pageType: { type: String, default: '' },
|
|
72
92
|
// Landing (page-type="custom"): identificador cadastrado no painel em "Personalizado".
|
|
73
93
|
customKey: { type: String, default: '' },
|
|
74
|
-
// Vitrine específica (a landing tem várias na mesma posição); sem ele,
|
|
94
|
+
// Vitrine específica (a landing tem várias na mesma posição); sem ele, todas as da posição.
|
|
75
95
|
showcaseId: { type: [String, Number], default: null },
|
|
76
|
-
mediaSize: { type: String, default: 'medium' }
|
|
96
|
+
mediaSize: { type: String, default: 'medium' },
|
|
97
|
+
// Uso interno: vitrine empilhada abaixo da primeira da posição. Sem o atributo de posição,
|
|
98
|
+
// o debug contorna a posição uma vez só.
|
|
99
|
+
stacked: { type: Boolean, default: false }
|
|
77
100
|
},
|
|
78
101
|
data () {
|
|
79
|
-
return { showcase: null, products: [], loading: false, debug: false };
|
|
102
|
+
return { showcase: null, products: [], restIds: [], loading: false, debug: false };
|
|
80
103
|
},
|
|
81
104
|
computed: {
|
|
82
105
|
columns () {
|
|
@@ -122,10 +145,13 @@ export default {
|
|
|
122
145
|
this.started = true;
|
|
123
146
|
try {
|
|
124
147
|
const showcases = await this.$rocket.getPageShowcases(this.pageType || undefined, this.customKey || undefined);
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
|
|
148
|
+
const inPosition = showcases.filter(s => ((s.placement && s.placement.position) || s.position) === this.position);
|
|
149
|
+
const showcase = this.showcaseId != null
|
|
150
|
+
? showcases.find(s => String(s.id) === String(this.showcaseId))
|
|
151
|
+
: inPosition[0];
|
|
128
152
|
if (!showcase) return;
|
|
153
|
+
// Posição sem showcaseId: este slot mostra a primeira e empilha as demais logo abaixo.
|
|
154
|
+
if (this.showcaseId == null) this.restIds = inPosition.slice(1).map(s => s.id);
|
|
129
155
|
// Banner autônomo: render direto, sem produtos, skeleton nem impressão de vitrine
|
|
130
156
|
// (o RocketBannerItem mede o criativo).
|
|
131
157
|
if (isBannerItem(showcase)) {
|
package/runtime/css/showcase.css
CHANGED
package/runtime/rocket.js
CHANGED
|
@@ -122,7 +122,10 @@ export function createRocket (config) {
|
|
|
122
122
|
|
|
123
123
|
rocket.setPage = function (next) {
|
|
124
124
|
page = Object.assign({ section: null, productId: null, categoryId: null, product: null }, next);
|
|
125
|
-
|
|
125
|
+
// A landing (custom) não depende do contexto da página e fica: senão, um setPage entre a busca
|
|
126
|
+
// do RocketLanding e a montagem das vitrines dele dispararia uma segunda chamada. Ela se
|
|
127
|
+
// renova quando o RocketLanding monta (refresh).
|
|
128
|
+
Object.keys(pageShowcases).forEach((k) => { if (k.indexOf('custom|') !== 0) delete pageShowcases[k]; });
|
|
126
129
|
};
|
|
127
130
|
rocket.getPage = () => page;
|
|
128
131
|
|
|
@@ -320,11 +323,11 @@ export function createRocket (config) {
|
|
|
320
323
|
|
|
321
324
|
// Uma chamada por página, repartida entre os slots (<RocketShowcase position>) — na Linx
|
|
322
325
|
// era o fetchShowCases único distribuindo por data-rocket-showcase-position. Por pageType +
|
|
323
|
-
// customKey: a landing e o contexto da página são chamadas distintas.
|
|
326
|
+
// customKey: a landing e o contexto da página são chamadas distintas. O setPage zera só o contexto.
|
|
324
327
|
let pageShowcases = {};
|
|
325
|
-
rocket.getPageShowcases = function (type, customKey) {
|
|
328
|
+
rocket.getPageShowcases = function (type, customKey, refresh) {
|
|
326
329
|
const key = (type || '') + '|' + (customKey || '');
|
|
327
|
-
if (!pageShowcases[key]) pageShowcases[key] = rocket.getShowcasesByContext(type, customKey).catch(() => []);
|
|
330
|
+
if (refresh || !pageShowcases[key]) pageShowcases[key] = rocket.getShowcasesByContext(type, customKey).catch(() => []);
|
|
328
331
|
return pageShowcases[key];
|
|
329
332
|
};
|
|
330
333
|
|