Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@frui.ts/datascreens

Package Overview
Dependencies
Maintainers
5
Versions
78
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@frui.ts/datascreens

Frui.ts base classes for data-oriented view models

  • 1.0.0-rc.4
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
268
increased by81.08%
Maintainers
5
Weekly downloads
 
Created
Source

@frui.ts/datascreens

This package contains base classes for data-centric view models.

  • ListViewModel
  • FilteredListViewModel
  • DetailViewModel

Classes hierarchy

ListViewModel

Base class for master lists in master-detail scenarios.

  • items - read currently displayed data rows from here. You can also manually put the data there.
  • currentPaging - paging information related to the data in items, usually used by a pager control
  • setData([items, paging]) - use this function to set items and currentPaging in one step.
Example
async loadData() {
  const data = await this.someRepository.getSomeData();
  this.setData(data);
}

// without async
loadData() {
  return this.someRepository.getSomeData().then(this.setData);
}

FilteredListViewModel

This base class adds some filter-related logic on top of ListViewModel:

  • pagingFilter - bind paging and sorting UI to this observable property

  • filter - bind filter UI controls to this observable property

  • appliedFilter - a snapshot of filter that should be used for loading new data

  • applyFilter() - validates the current filter and if valid, resets dirty flags on it and stores a snapshot into appliedFilter

  • loadData() - implement this function to load actual data based on pagingFilter and appliedFilter properties. Call this function when the user changes paging/sorting.

  • applyFilterAndLoad() - bind 'search / filter' UI button to this function. It calls applyFilter() and loadData().

  • resetFilterValues(filter) - implement this function so that it applies default values to the filter passed as an argument. Note that this function should not have any side effects.

  • resetFilter() - bind 'clear filter' UI button to this function. It calls resetFilterValues(filter) and applyFilter().

  • resetFilterAndLoad() - bind 'reset filter' UI button to this function. It calls resetFilter() and loadData().

The reason for the two properties for a filter is that if a user changes a filter/search field without committing the filter by clicking a Load/Search button, changing the actual page should load the data with the original filter values, not the current work-in-progress one.

You don't need to initialize the filters manually. The constructor automatically creates default pagingFilter and calls resetFilterValues(filter).

If needed, you can attach a validator to filter in the constructor. There is no filter validation by default.

Example
<TextBox target="{vm.filter}" property="firstName" />
<button onClick="{vm.applyFilterAndLoad}">Load</button>
<button onClick="{vm.resetFilterAndLoad}">Reset</button>

<DataTable items="{vm.items}" />

<Pager itemsPerPage={vm.currentPaging.limit} totalItems={vm.currentPaging.totalItems}
activePage={Math.ceil(vm.currentPaging.offset / vm.currentPaging.limit) + 1} />

ContinuousListViewModel

This base class updates the logic of setData to support appending the new data to the existing list of items.

TODO

DetailViewModel

Useful functionality

  • busyWatcher - already initialized instance of busyWatcher for long-running process indication. It is automatically picked when using the @watchBusy decorator on class functions.

  • loadDetail() - implement this function and return the detail entity for the view model. It is automatically called during view model initialize stage, and the returned value is assigned to the item property

  • item - bind UI to this property containing the entity loaded by loadDetail()

  • setItem(item) - call this helper function to manually set item later

Keywords

FAQs

Package last updated on 26 Nov 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc