Non-Partisan Magicians

    @methodexists/me-core

    0.1.2 • Public • Published

    me-core

    Core functionality for MethodExists apps.

    Usage

    Init core module

    core.init({
      apiService: APIService, // api service module with REST methods
      getLocale: () => app._store.getState().app.locale, // getter of the current app locale (for error messages i18n)
    });
    

    apiService is required for me-core functioning. getLocale is optional. 'en-US' locale is used by default.

    Register formulas in records model

    import recordsModel, { init as recordsModelInit } from '~/models/records';
    
    app.model(recordsModel);
    recordsModelInit({
      formulas: {
        users: record => ({
          ...record,
          generatedByFormula: Math.random(),
        }),
      },
    });
    

    Provide options into notifications model

    import notificationsModel, { init as notificationsModelInit } from '~/models/notifications';
    import icon from '~/assets/images/icon.png';
    import { profileUsernameSelector } from '~/selectors';
    
    app.model(notificationsModel);
    notificationsModelInit({
      icon,
      profileUsernameSelector,
    });
    

    Examples

    ListProvider passing props:

    <ListProvider namespace="users" table="users" primaryKey="username">
      {({ list, isLoading } => (
        isLoading ? <div>Loading...</div> : <div>{ list.map(renderListItem) }</div>
      )}
    </ListProvider>
    

    API

    <ListProvider /> component

    import { ListProvider } from 'me-core';
    
    Prop Type Default Description
    * namespace string
    * table string
    * children element or func If children is func then ListProvider will pass { isLoading, list, total, schema } as arguments
    filters object {}
    esQuery object undefined
    sort object { 'name.raw': 'asc' }
    limit number 20
    primaryKey string 'id'
    source object

    <RecordProvider /> component

    import { RecordProvider } from 'me-core';
    
    Prop Type Default Description
    * namespace string
    * table string
    * children element or func If children is func then RecordProvider will pass { isLoading, record, schema } as arguments
    primaryKey string 'id'
    id string

    <AuditLogProvider /> component

    import { AuditLogProvider } from 'me-core';
    
    Prop Type Description
    * namespace string
    * table string
    * children element or func If children is func then provider will pass { isLoading, log, schema } as argument
    * id string

    Selectors

    recordHasUnsavedChangesSelector

    Compares metafields lastSynced and lastChanged to figure out if the record was changed and not saved. lastSynced field updated on any Save/Fetch operation (setRecord action). lastChanged field updated on any Update operation (update action).

    Models

    lists

    Lists model works with /table API by default. If the tableName is users it calls /user API. To use /dynamo API you need to set params.useDynamo = true.

    Contributing

    See CONTRIBUTING.md for how to develop a component.

    Install

    npm i @methodexists/me-core

    DownloadsWeekly Downloads

    4

    Version

    0.1.2

    License

    MIT

    Last publish

    Collaborators

    • ffab00
    • oluckyman
    • alexeyme