subjective
TypeScript icon, indicating that this package has built-in type declarations

6.3.0 • Public • Published

Subjective

  • Opinionated state management
  • Type safety by design. Type inference works for both Update and Selector functions.
  • Logging. Inspect where Update function was called.
  • Pause observable stream, if needed.
  • Always receive the whole state, if needed.

Concepts

State

const state = new Subjective(
    productState,
    productStateFns,
);
Default Logger
const state = new Subjective(
    productState,
    productStateFns,
    // use default Logger (dev only)
    true
);
Custom Logger
const state = new Subjective(
    productState,
    productStateFns,
    // use custom Logger (dev only)
    (updateFnName: string, payload: any, updateFnRef: Function) => {
        // LOG
        const data = JSON.stringify(payload);
        const dataTrimmed = data.substring(0, 80);
        // logging to console
        console.groupCollapsed(
            `%c${fnName}: %c${dataTrimmed}${
                dataTrimmed.length < data.length ? '…' : ''
            }`,
            `color: green; font-weight: 300;`,
            `color: gray; font-weight: 100;`,
        );
        console.log(payload);
        console.log(updateFnRef);
        console.groupEnd();
    }
);

EXAMPLE

Selector function

Subscribe to state.filter.type and notify with its value
state.select(s => s.filter.type).subscribe();
Subscribe to state.filter.type and notify with a whole state
state.select(s => s.filter.type, true).subscribe();

EXAMPLE

Update function

Update value of state.filter.type
state.update(f => f.updateFilterType, type);
Update value of state.filter.type and do not notify subscribers
state.update(f => f.updateFilterType, type, false);
Update value of state.filter.type and return updated state
const updatedState = state.update(f => f.updateFilterType, type);

EXAMPLE

Examples

NOTES

Immutable pattern

Always use immutable pattern otherwise it will not work. We can't rely on mutations since object reference is always the same.

Type-safety

Types are always inferred either from state class or payload parameter of the update function.

FUTURE

I've been thinking of this new syntax...check it out.

Credits

/subjective/

    Package Sidebar

    Install

    npm i subjective

    Weekly Downloads

    2

    Version

    6.3.0

    License

    MIT

    Unpacked Size

    45.8 kB

    Total Files

    11

    Last publish

    Collaborators

    • otodockal