vtex-shelf-properties
Version:
Set custom properties on shelves templates on Vtex stores
188 lines (130 loc) • 4.8 kB
Markdown
# VtexShelfProperties.js
Set custom properties on shelves templates on Vtex stores.
## Table of contents
- [Main](#main)
- [Getting started](#getting-started)
- [Methods](#methods)
- [License](#license)
- [Dependencies](#dependencies)
## Main
```text
dist/
├── vtex-shelf-properties.js (UMD)
├── vtex-shelf-properties.min.js (UMD, compressed)
├── vtex-shelf-properties.common.js (CommonJS, default)
└── vtex-shelf-properties.esm.js (ES Module)
```
## Getting started
### Direct download
Download the script [here](https://github.com/Zeindelf/vtex-shelf-properties/blob/master/dist/vtex-shelf-properties.min.js) and include it.
You will need [VtexUtils.js](https://github.com/zeindelf/vtex-utils) and [VtexCatalog.js](https://github.com/zeindelf/vtex-catalog)
```html
<script type="text/javascript" src="/arquivos/vtex-utils.min.js"></script>
<script type="text/javascript" src="/arquivos/vtex-catalog.min.js"></script>
<script type="text/javascript" src="/arquivos/vtex-shelf-properties.min.js"></script>
```
### Package Managers
VtexShelfProperties.js supports [npm](https://www.npmjs.com/package/vtex-shelf-properties) under the name `vtex-shelf-properties`.
```shell
npm install vtex-shelf-properties --save
```
### Module Loaders
VtexShelfProperties.js can also be loaded as an CommonJS or ES6 module (recomended).
```js
// CommomJS
var VtexShelfProperties = require('vtex-shelf-properties');
// ES6 module
import VtexShelfProperties from 'vtex-shelf-properties';
```
### Usage
With UMD (Universal Module Definition), the package is available on `VTEX` namespace.
For every shelf type, you will need create a new instance of `VtexShelfProperties`
```js
// First, initialize VtexUtils.js
var vtexUtils = new VTEX.VtexUtils();
// Then, initialize VtexCatalog.js
var vtexCatalog = VTEX.VtexCatalog(vtexUtils);
// Initialize constructor passing a instance of VtexUtils.js and VtexCatalog.js as a param
vtexShelfProperties = new VTEX.VtexShelfProperties(vtexUtils, vtexCatalog, handler);
```
### Instance Params
The `handler` param is a callback function. There are two params: current DOM element and related product object info.
This handle is used to set custom properties into DOM element (set on setShelfContainer method) inside a shelf.
#### Example
```html
<!-- Inside a Shelf Template, create your container -->
<div class="js--shelf-basic" data-product-id"$product.Id"></div>
```
```js
function myCustomProp($el, product) {
var markup =
'<a href="' + product.link + '" title="' + product.productName + '">' +
'<h2>' + product.productName + '</h2>' +
'<small>' + product.productReference + '</small>' +
'<p>' + product.description + '</p>' +
'</a>';
$el.append(markup);
}
var vtexShelfProperties = new VTEX.VtexShelfProperties(vtexUtils, vtexCatalog, myCustomProp);
shelfProperties.setLoadedClass('is--shelf-loaded');
shelfProperties.setEventName('shelfBasic');
shelfProperties.setShelfContainer('.js--shelf-basic');
```
## Methods
### vtexShelfProperties.setLoadedClass(className)
Add a custom class on loaded elements.
Default loaded class is `is--loaded`
Needs to call before `setShelfContainer` method.
- **className**:
- Type: `String`
- Name of custom loaded class
#### Example
```js
// Set custom loaded class
vtexShelfProperties.setLoadedClass('is--shelf-loaded');
```
```html
<!-- Your element class is like: -->
<div class="js--shelf-basic is--shelf-loaded" data-product-id"123">
<!-- Properties added -->
</div>
```
### vtexShelfProperties.setEventName(eventName)
Create custom event name for actual instance.
Needs to call before `setShelfContainer` method.
- **eventName**:
- Type: `String`
- Name of custom event when triggered on request end.
#### Example
```js
// Set custom event name
vtexShelfProperties.setEventName('shelfBasic');
// And use like:
$(document).on('shelfBasic.vtexShelfProperties', function(ev) {
window.console.log(ev);
});
// If this method is not provide, the default event name is:
$(document).on('requestEnd.vtexShelfProperties', function(ev) {
window.console.log(ev);
});
```
### vtexShelfProperties.setShelfContainer(shelfClass)
Any container inside your shelf to receive custom properties.
Your container needs have a data attribute with product id.
- **shelfClass**:
- Type: `String`
- Name of shelf container class
#### Example
```html
<!-- Your container -->
<div class="js--shelf-basic" data-product-id"123"></div>
<script>
vtexShelfProperties.setShelf('.js--shelf-basic');
</script>
```
## License
vtexShelfProperties.js is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).
## Dependencies
jQuery 1.8.3+
VtexUtils.js
VtexCatalog.js