🚨 Shai-Hulud Strikes Again:834 Packages Compromised.Technical Analysis
Socket
Book a DemoInstallSign in
Socket

sky-list

Package Overview
Dependencies
Maintainers
2
Versions
45
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sky-list

Vue component for creating search

latest
Source
npmnpm
Version
1.0.0
Version published
Weekly downloads
0
-100%
Maintainers
2
Weekly downloads
 
Created
Source

sky-list

Vue module for requesting search API (via axios) and displaying result with different pagination options

List of content

  • Installation
  • Usage
  • Option tables
  • Examples
  • API Response Setup

Installation

npm install sky-list
yarn add sky-list

Usage

Import

import Vue from 'vue';

Different import approaches. The First provides the minified and compiled dist version, the other the raw .vue file.

import SkyList from 'sky-list';

// If you want to use the baseline scss add the following line
import '${YOUR-PROJECT-ROOT-PATH}/node_modules/sky-list/src/SkyList.scss';

Install plugin

Vue.use(SkyList);

Option tables

Props

NameTypeDefaultOptionsDescription
parametersObject{ keywords: '' }Parameters to use in query declared with initial value
optionsObject{
api: '/umbraco/api/site/search/',
limit: 10,
showCount: false,
paginationType: 'more',
loadFetch: false,
}
paginationType
navigation
numeric
pagination
more
all
Change custom request setup.
loadFetch: enables/disables fetch on page load.
showCount: enables/disables "x" results found.
api: your prefered endpoint
filterObject{}Declare query properties to be handled as filters eg:
{ fitlerName: initialValue }
value-mapObject{}If a v-model returns a object and a prop is needed, it can be declared with initial value eg:
{ nestedPropName: initialValue }
validate-queryFunctionquery => query.keywords
live-searchBooleantrueEnable/disable search on query change
queryObject{}Pass a query object directly to SkyList. Overrides internal query object. Useful for keeping query state outside of SkyList and only using it to fetch and render results
transform-paramsFunctionparams => paramsHook to modify params before request is sent. Useful for transforming SkyList to integrate with endpoints that do not use the default param naming conventions
transform-resultFunctionresult => resultHook to modify result before request is resolved. Useful for transforming the returned data to match the API response structure SkyList expects.

Slots

NameSlot-scopeDescription
listFormquery Object
result Object
Slot for custom form setup to be v-model'ed against SkyList query
listItemindex Number
listItem Object
Slot for custom item markup
listAsidequery Object
result Object
Slot for adding custom aside content next to the result list
resultMessagequery Object
pagination Object
Slot for custom message when results are found
noResultMessagequery ObjectSlot for custom message when no results are found
listMoreitemsLeft NumberSlot for custom show more button
listPrevSlot for custom previous button
listNextSlot for custom next button
paginationBulletcount NumberSlot for custom pagination bullets
filtersquery Object
result Object
area Object
Slot for filtering result (i.e. by groups/areas etc.)

Events

SkyList emits a few events for flexibility. This list will likely expand in the future. Example:

<sky-list @result="handleResultFn" />
NameArgumentsDescription
resultresult ObjectEmitted every time result changes
loadingBeginnoneEmitted whenever a fetch begins
loadingEndnoneEmitted when done fetching

Examples

<sky-list>
	<div
		slot="listForm"
		slot-scope="{ query, result }"
	>
		<input type="text" v-model="query['keywords']" placeholder="Type your search query">
	</div>


	<div
		slot="listItem"
		slot-scope="{ index, item }"
		:item="item"
	>
	    Custom handling of list item
	</div>
</sky-list>

Component options (with default values)

<sky-list
    :parameters="{ keywords: '' }" || Add your own key/value pair with initial values
    :options="{
    	api: '/umbraco/api/site/search/',
    	limit: 10,
    	showCount: false, || true |false
    	paginationType: 'more', || 'navigation' | 'pagination' | 'more' | 'all' | 'numeric'
    	loadFetch: false,
    }"
    :validate-query="query => query.keywords" || parse in your own query validation
    :live-search="true" || true/false
    :value-map="{}" || If v-model returns an object setup rule for which prop to use eg. { nestedPropName: initialValue }
>
    <!-- content config here -->
    <!-- pagination config here -->
</sky-list>

Content slots (with default values)

Sky-list exposes different slot which can be customized

Message slots

resultMessage: custom message displayed when results are found

<sky-list ... >
    <span
        slot="resultMessage"
        slot-scope="{ query, pagination }"
    >
    	Your search for <em>"{{query.keywords}}"</em> returned <em>{{pagination.total}} {{(pagination.total === 1) ? 'result' : 'results'}}</em>
    </span>
</sky-list>

noResultMessage: custom message displayed when no results are found

<sky-list ... >
    <span
        slot="noResultMessage"
        slot-scope="{ query }"
        v-text="'Your search for ${query.keywords} returned no results'"
    />
</sky-list>

List item slot

listItem: Slot for customizing list items. exposes item object and list index

<sky-list ...>
	<div
		slot="listItem"
		slot-scope="{ item, index }"
	>
	    <small v-text="`No. ${index + 1}`"
	    <h2 v-text="item.title" />
	    <p v-text="item.teaser" />
	</div>
</sky-list>

Preferably this can be used with custom components like this

<sky-list ...>
    <MyComponent
        slot="listItem"
		slot-scope="{ item, index }"
		:my-prop-for-data="item"
		:my-prop-for-index="index"
	/>
</sky-list>

Pagination slot options (with default values)

paginationType: 'more' | 'all'

Slot for customizing show more / all button

<sky-list ... >
	<span
	    slot="listMore"
	    slot-scope="{ itemsLeft }"
	    v-text="`${itemsLeft} not displayed`"
    />
</sky-list>
paginationType: 'navigation' | 'pagination'

listPrev: Slot for customizing previous button nextPrev: Slot for customizing next button

<sky-list ... >
    <span slot="listPrev">Previous</span>
    <span slot="listNext">Next</span>
</sky-list>
paginationType: 'numeric' | 'pagination'

paginationBullet: Slot for customizing bullets

<sky-list ... >
	<span
	    slot="paginationBullet"
	    slot-scope=" { count }"
	    v-text="`Page ${count}`"
    />
</sky-list>

API Response Setup

SkyList expects a response with the following setup

{
    "meta":{
        "code":200
    },
    "pagination":{
        "total":1,
        "limit":10,
        "offset":0
    },
    "data":[
        {
            title: 'item1',
            teaser: 'lorem ipsum',
        },
        {
            title: 'item2',
            teaser: '',
        },
        {
            title: 'item3',
            teaser: null,
        },
        ...
    ]
}

If your endpoint expects other names for pagination params than limit and offset the transform-params prop can be used to alter the params before requesting. Likewise, upon receiving data, you can use the transform-result prop to transform any data received to match the type of API response SkyList expects. Quick example of both in use:

<SkyList
    :options="{
        api: foreignEndpoint,
    }"
    :transform-params="params => ({
        q: params.keywords,
        startIndex: params.offset,
        maxResults: params.limit,
    })"
    :transform-result="result => ({
        pagination: {
            total: result.TotalResults,
            limit: result.EffectiveParameters.MaxResults,
            offset: result.Offset,
        },
        data: result.Documents,
    })"
>
    ...
</SkyList>

Credits

This module is made by the Frontenders at skybrud.dk. Feel free to use it in any way you want. Feedback, questions and bugreports should be posted as issues. Pull-requests appreciated!

FAQs

Package last updated on 12 Dec 2018

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts