Skip to content

Instantly share code, notes, and snippets.

@kwhitaker
Last active August 4, 2016 20:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kwhitaker/9ba311283330832d4340c648170ab172 to your computer and use it in GitHub Desktop.
Save kwhitaker/9ba311283330832d4340c648170ab172 to your computer and use it in GitHub Desktop.
export const UPDATE_RANGE = 'discovery/dashboard/timeline/UPDATE_RANGE'
export const UPDATE_RESOLUTION = 'discovery/dashboard/timeline/UPDATE_RESOLUTION'
export const UPDATE_LENS = 'discovery/dashboard/timeline/UPDATE_LENS'
const setRange = (range: ITimeRange) => (widgetState: TimelineWidgetState): TimelineWidgetState => assoc('range', range, widgetState)
const setResolution = (resolution: TimelineResolution) => (widgetState: TimelineWidgetState): TimelineWidgetState => assoc('resolution', resolution, widgetState)
const setNavItems = (navItems: TimelineNav) => (widgetState: TimelineWidgetState): TimelineWidgetState => assoc('navItems', navItems, widgetState)
export const TimelineContainer = Object.assign({}, GenericItem, {
updateNavItems: (id: IdKey, navItems: TimelineNav, iterable: Iter<TimelineWidgetState>) => GenericItem.adjust(id, setNavItems(navItems), iterable),
updateRange: (id: IdKey, range: ITimeRange, iterable: Iter<TimelineWidgetState>) => GenericItem.adjust(id, setRange(range), iterable),
updateResolution: (id: IdKey, resolution: TimelineResolution, iterable: Iter<TimelineWidgetState>) => GenericItem.adjust(id, setResolution(resolution), iterable),
}
import {adjust, find, findIndex, propEq, update} from 'ramda'
export type IdKey = string | number;
export interface IHasId {
id: IdKey;
}
export type Iter<T> = Array<T>
type IterableOfHasId = Array<IHasId>
export const hasId = propEq('id') as any as (value: IdKey) => (target: IHasId) => boolean
export const getItemIdx = (id: IdKey, iterable: IterableOfHasId): number => findIndex(hasId(id), iterable)
export const GenericItem = {
adjust: <T extends IHasId>(id: IdKey, fn: (T) => T, iterable: Iter<T>): Iter<T> => adjust<T>(fn, getItemIdx(id, iterable), iterable),
get: <T extends IHasId>(id: IdKey, iterable: Iter<T>): T => find<T>(hasId(id), iterable),
set: <T extends IHasId>(id: IdKey, value: T, iterable: Iter<T>): Iter<T> => update(getItemIdx(id, iterable), value, iterable),
update: <T extends IHasId>(item, iterable: Iter<T>): Iter<T> => GenericItem.set(item.id, item, iterable)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment