Skip to content
This repository was archived by the owner on Aug 9, 2024. It is now read-only.
This repository was archived by the owner on Aug 9, 2024. It is now read-only.

RFC: createMap #17

@Kelin2025

Description

@Kelin2025

Case

Sometimes you need to calculate data for every record in KV

Worth mentioning:

  • Calculated data might be anything. E.g. it can be a sum of two fields, some string based on certain conditions. Literally anything. So API should be low-level rather than something rigid like createSwitch etc.

Solution

import { createListApi, createMapApi } from '@keyval/core'

type StatsWidgetState = {
  widgetId: string;
  ethValue: number;
  txPerDay: number
}

const $statsWidgets = createListApi<StatsWidgetState>({
  keygen: item => item.widgetId
})

const $roles = createMap($statsWidgets, {
  fn: stats => {
    if (stats.ethValue > 10) { return 'whale' }
    if (stats.txPerDay > 10) { return 'day_trader' }
    return 'stalling'
  }
})

Also, there's an optional source field

const $roles = createMap($statsWidget, {
  source: $preferredRole,
  fn: (stats, preferredRole) => {
    const roles = []
    /* calculate roles */
    if (roles.includes(preferredRole)) { return preferredRole }
    return roles[0] ?? 'stalling'
  }
})

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions