0.1.9 • Published 6 years ago

mapix v0.1.9

Weekly downloads
2
License
MIT
Repository
github
Last release
6 years ago

Installation

npm install mapix

Use observer+rerender to await api call promises.

Library is still in development. Documentation is in process of being created :)

Usage example:

// api-store.js (or api-store.ts)
import { createGetter } from 'mapix';

import { IProduct } from './IProduct';
import { IApiDetails } from './IApiDetails';

export class ApiStore {
    // use typing for the response if you know it
  apiDetails = createGetter<IApiDetails>('/api/details');
   
   // skip typing if you don't
  searchProductsBySubstring = createGetter('/api/products/search/:productName');
  // note that `productName` must be used as a variable when api is called later

  searchProducersBySubstring = createGetter('/api/producers/search/:producerName');
}

export const apiStore = new ApiStore();

Usage example with custom axios instance:

// api-store.js (or api-store.ts)
import { Mapix } from 'mapix';
import axios from 'axios';

import { IProduct } from './IProduct';
import { IApiDetails } from './IApiDetails';

const axiosInstance = axios.create();
const { createGetter } = new Mapix(axiosInstance);

export class ApiStore {
  apiDetails = createGetter<IApiDetails>('/api/details');
  searchProductsBySubstring = createGetter('/api/products/search/:productName');
  searchProducersBySubstring = createGetter('/api/producers/search/:producerName');
}

export const apiStore = new ApiStore();

Calling the API:

import * as React from 'react';
import { observer } from 'mobx-react';

import { Spinner } from '../components/Spinner';
import { apiStore } from '../api-store';

@observer
export class ProductsList extends React.Component {
  render() {
    const { data, loading, error } = 
        apiStore.searchProductsBySubstring({ productName: 'my test product' });
        // here's that `productName` variable from before

    if (loading) {
      return <Spinner />;
    }

    return (
      <ul>
        {data.map(product => (<li>{product.name}</li>))}
      </ul>
    );
  }
}

Expiring a previously cached response:

import * as React from 'react';
import { observer } from 'mobx-react';
import { expire } from 'mapix';

import { Spinner } from '../components/Spinner';
import { apiStore } from '../api-store';

@observer
export class ProductsList extends React.Component {
  handleRefresh = () => {
    expire(apiStore.searchProductsBySubstring);
    // expiring the data causes refetch only if a currently rendered component is using the data
    
    expire();
    // ommiting the argument expires all the data
  }

  render() {
    const { data, loading, error } = apiStore.searchProductsBySubstring({ productName: 'my test product' });

    if (loading) {
      return <Spinner />;
    }

    return (
      <div>
        <ul>
          {data.map(product => (<li>{product.name}</li>))}
        </ul>
        <button onClick={this.refreshData} />
        {/* This button should be pressed after products on the backend change */}
      </div>
    );
  }
}
0.1.9

6 years ago

0.1.8

6 years ago

0.1.7

6 years ago

0.1.6

6 years ago

0.1.5

6 years ago

0.1.4

6 years ago

0.1.3

6 years ago

0.1.2

6 years ago

0.1.1

6 years ago

0.1.0

6 years ago

0.1.0-beta3

6 years ago

0.1.0-beta2

6 years ago

0.0.17

6 years ago

0.1.0-beta1

6 years ago

0.0.16

6 years ago

0.0.14

6 years ago

0.0.13

6 years ago

0.0.12

6 years ago

0.0.11

6 years ago

0.0.10

6 years ago

0.0.9

6 years ago

0.0.8

6 years ago

0.0.7

6 years ago

0.0.6

6 years ago

0.0.5

6 years ago

0.0.4

6 years ago

0.0.3

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago