npm package: 6thstreet-algolia-sdk
Description: Algolia wrapper to be used on both mobile-app and web
Latest version: 0.0.1-beta-5

# Algolia SDK

Algolia wrapper to be used on both mobile-app and web.

## Methods

- [init](#init)
- [setIndex](#setindex)
- [search](#search)
- [getBrands](#getbrands)
- [getPDP](#getpdp)
- [getPLP](#getplp)
- [getPopularBrands](#getpopularbrands)

## Init

The first function that should be called when using the SDK. This function will set the Algolia object based on Algolia keys.

- `appID` - Algolia application ID
- `searchKey` - Algolia search Key
- `options` - This is an optional object, with the following keys:
    -  `customIndices` This is a list of custom indices grouped by locale, that will override the default values from config

E.g:

```js
{
  customIndices: {
    "en-ae": {
      default: 'uat_english_products',
      latest: 'uat_english_products_created_at_desc',
      price_low: 'uat_english_products_price_default_asc',
      price_high: 'uat_english_products_price_default_desc',
      discount: 'uat_english_products_discount_desc'
    }
  }
}
```
```js
import AlgoliaSDK from '@6thstreetdotcom/algolia-sdk';

AlgoliaSDK.init(appID, searchKey);
```

## SetIndex

This function will set the Algolia index based on locale and env settings.

```js
setIndex(locale, env);
```

- `locale` - environment used for getting the right indexes
  - default: `'en-ae'`
- `env` - environment used for getting the right indexes
  - default: `'production'`
  - values: `ENUM = ('staging', 'production')`

```js
import AlgoliaSDK from 'Algolia-sdk';

AlgoliaSDK.setIndex('en-ae', 'production');
```

## search

Search using any available `facet`. Use comma `,` separated values for multiple values per facet.

To search using a search query, use the `q` param, as described below.

```js
AlgoliaSDK.search({
  q: 'Adidas',
  hitsPerPage: 4,
  'categories.level1': 'Women /// Shoes',
  gender: 'Women'
});
```

Response: [search-data.json](./examples/search-data.json)

### GetBrands

Search by a query string

```js
getBrands(gender);
```

- `gender` - String
  - default: `''`
  - if left empty -> response will contain all brands

```js
// to get all brands
AlgoliaSDK.getBrands();

// to get specific gender brand
AlgoliaSDK.getBrands('Women');
```

Response: [brands-data.json](./examples/brands-data.json)

### GetPDP

Returns a product's details for the given SKU.

```js
getPDP(params);
```

- `params` - Object
  - `sku` - String: product's sku
    - default: `''`
  - `highlights` - Array: list of attributes to highlight
    - if not set, all searchable attributes are highlighted
    - response contains `highlighted_attributes` attribute which contains the list of highlighted attributes

```js
AlgoliaSDK.getPDP({
  sku: 'VAMTFRYIH-BLACK',
  highlights: ['brand_name', 'color', 'gender']
});
```

Response: [pdp-data.json](./examples/pdp-data.json)

### GetPLP

Returns products for a PLP Screen.

```js
getPLP(URL);
```

- `URL` - String: URL for the Product list

#### URL Params & Structure:

- params in URL should have the following form:

  > `/...?key=value&key=value1,value2,value3`

- custom params:
  - all the Algolia facet filters (q - query param, brand_name - Brands param, categories.levelX - categories param, categories_without_path etc.)
  - example 1: `brand_name=Adidas,Aldo,Nike`
  - example 2: `categories.level0=Women`
  - example 3: `categories.level1=Women /// Shoes`
  - example 4: `categories.level2=Women /// Shoes /// Sandals`
  - example 5: `categories.level1=Men /// Shirts,Women /// Shoes`
- special params:
  - `gender` - **mandatory** = ENUM('Women', 'Men', 'Kids')
  - `locale` - **mandatory** = ENUM('en-ae', 'ar-ae', 'en-sa', 'ar-sa', 'en-kw', 'ar-kw', 'en-qa', 'ar-qa', 'en-om', 'ar-om', 'en-bh', 'ar-bh')
  - `sort` = String: ENUM('recommended', price_low', 'price_high', 'discount')
    - `'recommended'` - default sorting
    - `'price_low''` - sort products by price ASC
    - `'price_high''` - sort products by price DESC
    - `'discount''` - sort products by highest discount
  - `price.[currency].default` - filter products by price
    - example 1: `price.AED.default=gte50,lte700` - filter products with the price in interval >= 50 AED and <= 700 AED
    - example 2: `price.SAR.default=lt100` - filter products with the price less than 100 SAR
  - `discount` - filter products by discount
    - example 1: `discount=gt20,lte70` - filter products with the discount in range > 20% and <= 70%
    - example 2: `discount=gte40` - filter products with the discount >= 40%

> Notes: for `price` and `discount` key filters, instead of (>, <, >=, <=) symbols you should use the following:
>
> - 'lt' : <
> - 'lte' : <=
> - 'gt' : >
> - 'gte' : >=
> - 'eq' : =
>
> We cannot use operators because will interfere with the query params in a URL

```js
AlgoliaSDK.getPLP(
  '/women/outlet.html?q=Women%20Outlet&page=0&brand_name=Adidas,Aldo&categories.level0=Women&categories.level1=Women /// Shoes&discount=gt20,lte900&price.AED.default=gte50,lte1500&visibility_catalog=1&gender=Women&locale=en-ae'
);
```

Response: [plp-data.json](./examples/plp-data.json)

### GetPopularBrands

Returns popular brands.

```js
getPopularBrands(limit);
```

- `limit` - Int: results limit
  - default: `10`

```js
AlgoliaSDK.getPopularBrands(5);
```

Response

```json
{
  "data": ["Adidas", "Aldo", "Adidas Originals", "Charles & Keith", "Nike"]
}
```