Giter Club home page Giter Club logo

vue-useurl's Introduction

๐Ÿ”— Vue-useUrl

Reactive Url Builder Vue Composable for Vue 2 & Vue 3

NPM version

A library for building URL using (Query Parameters, Path Variables, Hash, Path) while being reactive and ready to use as Vue Composition API Composable

Installation

To install with npm:

npm install vue-useurl --save

Usage

import { useUrl } from 'vue-useurl'

const params = {
  search: 'ahmed',
  limit: 50,
  page: 12,
  sort: 'CreatedOn',
  types: ['Cancelled', 'OnGoing']
}

const { url, queryParams, pathVariables, hash, path, disableCSV } = useUrl({ 
  path: '/api/v1/users/:id/search',
  pathVariables: {
    id: 451
  },
  queryParams: {
    ...params
  },
  hash: 'someHash',
  disableCSV: false
}, 
'http://api.com')

Options

The userUrl function accepts two arguments. The first is 'options' of type IUrlOptions e.g:

{
  path: '/path/path1', // URL Path
  pathVariables: { 
    id: 451
  }, // Path variables e.g: /:id/
  queryParams: {
    limit:10,
    sortBy: 'property',
    page: 1
  }, // Query parameters
  hash: 'someHash', // Hash
  disableCSV: false 
	// Enabled: param=1&param=2&param=3
	// Disabled: param=1,2,3
}

The second is 'baseUrl' that will be appended to Url path

useUrl({ 
    path: '/about',
    queryParams: {
      foo:'bar',
      fizz: 'baz'
    },
    hash: 'contact',
    disableCSV: false
  }, 
  'http://api.com')

// returns http://api.com/about?foo=bar&bar=baz#contact

Variables returned by useUrl() are all reactive objects, changing any of: path queryParams pathVariables hash disableCSV will rebuild url

const { url, queryParams, pathVariables, hash, path, disableCSV } = useUrl(/*..*/)

Usage with VueUse 'useFetch()'

This library is compatible with VueUse useFetch(), and url returned from useUrl() can easily be used to trigger auto-reftech if option { refetch: true } is passed to useFetch() which make for intuitive and easy way to work with url parametes and variables without the need to modify url string directly

import { useFetch } from "@vueuse/core"
import { useUrl } from 'vue-useurl'

  const { url, queryParams, pathVariables, hash, path, disableCSV } = useUrl({ 
    path: '/api/v1/users/:id/search',
    pathVariables: {
      id: 451
    },
    queryParams: {
      search: 'ahmed',
      limit: 50,
      page: 12,
      sort: 'CreatedOn',
      types: ['Cancelled', 'OnGoing']
    },
    hash: 'hashtag',
    disableCSV: false
  }, 
  'http://api.com')

  const { isFetching, error, data } = useFetch(
    url,
    { initialData: { results: [] }, refetch: true})
  .get()
  .json()

How to use debouncing, throttling and other reactive backpressures with useUrl():

import { useFetch, useDebounce } from "@vueuse/core"
import { useUrl } from 'vue-useurl'
import { ref } from 'vue-demi'

export useApi() {
  const search = ref('query') //
  const filters = ref([ 'filter1', 'filter2', 'filter3' ]) // declare reactive varibales 

  const { url, queryParams, pathVariables, hash, path, disableCSV } = useUrl({ 
    path: '/api/v1/users/:id/search',
    pathVariables: {
      id: 451
    },
    queryParams: {
      search: useDebounce(search, 500), // 
      limit: 50,
      page: 12,
      sort: 'CreatedOn',
      types: useDebounce(filters, 3500) // then pass their reactive backpressure objects instead
    },
    hash: 'hashtag',
    disableCSV: false
  }, 
  'http://api.com')

  const { isFetching, error, data } = useFetch(
    url,
    { initialData: { results: [] }, refetch: true})
  .get()
  .json()

  return {
    data,
    search, //
    filters,// changing this now will trigger the url re-build
    queryParams,
    pathVariables,
    hash,
    path, 
    url
  }
}

License

This is licensed under an MIT License.

vue-useurl's People

Contributors

namesmt avatar rainxh11 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.