0.1.1 • Published 7 years ago

layout-state-utils v0.1.1

Weekly downloads
1
License
MIT
Repository
github
Last release
7 years ago

Layout State Utils

npm CircleCI

LayoutState

A LayoutState is meant to be an immutable, serializable representation of a layout.

interface ItemProps {
  [key: string]: any;
}

interface ItemMetadata {
  [key: string]: any;
}

interface LayoutItem {
  key: string;
  type: string;
  props: ItemProps;
  metadata: ItemMetadata;
  children: string[];
  parent?: string;
}

interface LayoutState {
  [key: string]: LayoutItem;
}

Utils

All util functions that change a LayoutState will return a new LayoutState with the change, and not change the original.

createKey

Creates a unique key that can be used to add an item to the LayoutState.

const createKey: (layoutState: LayoutState) => string;

addItem

Adds a LayoutItem to the LayoutState.

interface LayoutItemInput {
  key: string;
  type: string;
  props?: ItemProps;
  metadata?: ItemMetadata;
  children?: string[];
  parent?: string;
}

const addItem: (layoutState: LayoutState, item: LayoutItemInput) => LayoutState;

moveItem

Moves a LayoutItem in the LayoutState. If a parent is not provided, the LayoutItem will remain in the LayoutState, but will not be referenced by any other LayoutItems.

type ParentInput = {
  key: string;
  index: number;
};

const moveItem: (
  layoutState: LayoutState,
  key: string,
  parent?: ParentInput,
) => LayoutState;

removeItem

Removes a LayoutItem and all of its descendants from the LayoutState.

const removeItem: (layoutState: LayoutState, key: string) => LayoutState;

updateProps

Updates a LayoutItem's props in the LayoutState.

updateFn must return a new ItemProps and not mutate the original.

type PropUpdater = (ItemProps) => ItemProps;

const updateProps: (
  layoutState: LayoutState,
  key: string,
  updateFn: PropUpdater,
) => LayoutState;

updateMetadata

Updates a LayoutItem's metadata in the LayoutState.

updateFn must return a new ItemMetadata and not mutate the original.

type MetadataUpdater = (ItemMetadata) => ItemMetadata;

const updateMetadata: (
  layoutState: LayoutState,
  key: string,
  updateFn: MetadataUpdater,
) => LayoutState;
0.1.1

7 years ago

0.1.0

7 years ago