Skip to content

ModelLoader

Tool for lazy load various models or modules.

Usage

ts
import { ModelLoader, createModelLoader } from "mobx-swiss-knife";
import { reaction } from "mobx";

class YourVM {
  private modelLoader = new ModelLoader({ context: this });
  private modelLoader = createModelLoader({ context: this });

  applesModel = this.modelLoader.connect({
    property: 'applesModel',
    fn: () =>
      import('@/entities/apples/model')
        .then(m => {
          const ApplesModel = m.ApplesModel
          return new ApplesModel();
        })
  });

  async getMeme() {
    const memesModel = this.modelLoader.load('memes', async () => {
      const { MemesModel } = await import('@/entities/memes/model');
      return new MemesModel();
    })

    const meme = await memesModel.loadSomeMeme();

    return meme;
  }

  @computed.struct
  get isLoading() {
    return this.modelLoader.hasLoadingModels();
  }
}

Released under the MIT License.