npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@alist/core

v1.0.58

Published

desc

Downloads

116

Readme

@uform/core

English | 简体中文

The list state core management package does not rely on any third-party UI frameworks. This package will provide the following features:

  • Manage Filter status
  • Manage Table status
  • Manage Pagination status
  • Manage List LifeCycle
  • Manage dependencies between Filter, Table, Pagination

Install

npm install --save @alist/core

Table Of Contents

Backdrop

In the middle and back-end field, lists are indispensable scenarios which integrate the search area (form) and data display area (Table or chart). Lists act as background system portals, with the vast majority of pages.

AList is a unified and efficient solution for this scenario.

Design Concept

AList is a framework that integrates mature solutions from all parties. The search area uses UForm, Pagination, and the Table area uses Fusion-Next or Ant-Design or other third-party component libraries.

Architecture diagram

list-construct

API

createList

create a List instance

Signature

createList(options?: IListProps): IList

Usage

import createList from '@alist/core'

const list = createList({
  url: '/data.json'
})

Classes

new ListLifeCycle

Signature


type LifeCycleHandler<T> = (payload: T, context: any) => void

new ListLifeCycle(handler: LifeCycleHandler<Payload>)
new ListLifeCycle(...type: ListLifeCycleTypes, handler: LifeCycleHandler<Payload>...)
new ListLifeCycle(handlerMap: { [key: ListLifeCycleTypes]: LifeCycleHandler<Payload> })

Usage

 import { createList, ListLifeCycle, ListLifeCycleTypes } from '@alist/core'

 const list = createList({
   lifecycles:[
     new ListLifeCycle(({ type, payload })=>{
        // God mode, full monitoring
     }),
     new ListLifeCycle(
       ListLifeCycleTypes.ON_LIST_INIT,
      (payload)=>{
        // Accurate monitoring
    }),
    new ListLifeCycle({
      [ListLifeCycleTypes.ON_LIST_INIT]: (payload)=>{
        // Object form accurate listener
      }
    }),
  ]
})

Enums

ListLifeCycleTypes

enum ListLifeCycleTypes {
    ON_LIST_ERROR = 'onListError',
    ON_LIST_EMPTY = 'onListEmpty',
    ON_LIST_WILL_INIT = 'onListWillInit',
    ON_LIST_INIT = 'onListInit',
    WILL_LIST_UPDATE = 'willListUpdate',
    DID_LIST_UPDATE = 'didListUpdate',
}

Interfaces

IListQueryMethod

type IListQueryMethod = 'GET' | 'POST'

IListQueryOptions

interface IListQueryOptions {
    url: string,
    data: IListQueryData,
    method?: IListQueryMethod, 
}

IListQuery

type IListQuery = (queryOptions: IListQueryOptions) => Promise<any>

IListQuerySort

type IListQuerySort = 'desc' | 'asc'

IListFilterData

type IListFilterData = IListKVMap<any>

IListQueryData

type IListQueryData = {
    sort?: IListKVMap<IListQuerySort>,
    currentPage: number,
    pageSize: number,
    filterData?: IListFilterData,
    _t: number,
}

IListProps

interface IListProps {
    dataSource?: any,
    validateConfig?: IListKVMap<any>,
    url?: string,
    method?: IListQueryMethod,
    params?: any,
    paramsFields?: string | string[],
    pageSize?: number,
    currentPage?: number,
    total?: number,
    totalPages?: number,
    autoLoad?: boolean, // automatically load if there is a url
    defaultFilterValues?: any,
    multiple?: boolean, // multiple instance of table
    filterConfig?: any, // config of search area
    query?: IListQuery, // customize query
    formatBefore?: (queryData: IListQueryData) => any | void, // format query data before request
    formatAfter?: (response: any) => any | void, // format response data after request
    formatFilter?: (filterData: IListFilterData) => any | void, // format search area data which will affect query data
    lifecycles?: ListLifeCycle, // lifecycles management
}

IListDataSource

type IListDataSource = any[]

IListmode

enum ModeType {
    DATASOURCE = 'dataSource',
    URL = 'url',
    QUERY = 'query',
}

type IListMode = ModeType.DATASOURCE | ModeType.URL | ModeType.QUERY

IListPageData

interface IListPageData {
    pageSize: number,
    currentPage: number,
    total: number,
    totalPages: number,
}

IListFunctionOptions

interface IListFunctionOptions {
    withFetch?: boolean,
    withRender?: boolean,
    reset?: boolean,
    filterData?: IListFilterData,
    enableInvalid?: boolean
}

IList

interface IList {
    getDataSource: () => IListDataSource,
    setDataSource: (data: IListDataSource) => void,
    setPaginationDataSource: (data: IListDataSource) => void,
    getPaginationDataSource: () => IListDataSource,
    getMode: () => IListMode,
    getFilterData: () => IListFilterData,
    setFilterData: (data: IListFilterData) => void,
    getFilterInstance: () => any,
    getFilterProps: () => IFilterInitProps,
    setFilterInstance: (form?: any) => void,
    getPageData: () => IListPageData,
    setPageData: (data: IListPageData) => void,
    getMultipleData: () => IListMultipleData,
    setMultipleData: (data: IListMultipleDataParams) => void,
    setMultiplePageSize: (data: IListMultiplePageSize) => void,
    getValidateConfig: () => IListKVMap<any>,
    setValidateConfig: (validateConfig?: IListKVMap<any>) => void,
    clear: () => void,
    search: () => void,
    reset: () => void,
    refresh: () => void,
    notify: (type: ListLifeCycleTypes, paylaod?: any) => void
    setLoading: (loading: boolean, fnOpts?: IListFunctionOptions) => void,
    getLoading: () => boolean,
    setUrl: (url: string, fnOpts?: IListFunctionOptions) => void,
    setQuery: (query: IListQuery, fnOpts?: IListFunctionOptions) => void,
    setParams: (params: IListParams, fnOpts?: IListFunctionOptions) => void,
    getParams: () => IListParams,
    setCurrentPage: (currentPage: number, fnOpts?: IListFunctionOptions) => void,
    setPageSize: (pageSize: number) => void,
    on: (key: EventType, cb?: IListEvent) => void
    removeListener: (key: EventType, cb?: IListEvent) => void,
}