Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/shfrmn/cycle-lot

Handle dynamic lists of Cycle.js components with ease.
https://github.com/shfrmn/cycle-lot

collection cycle cyclejs isolate list typescript

Last synced: 2 months ago
JSON representation

Handle dynamic lists of Cycle.js components with ease.

Lists

README

        

# cycle-lot

Handle dynamic lists of [Cycle.js](https://github.com/cyclejs/cyclejs) components with ease.

Differences from [@cycle/collection](https://github.com/cyclejs/collection):

- Full typescript support
- Simpler API

### Install

`npm install cycle-lot`

### Create a collection

Let's assume we have a component named `Item` with following sinks:

```typescript
interface ItemSinks {
dom: xs
http: xs
remove$: xs
}
```

You can choose any stream in your sinks to trigger component's removal. Here we use a special `remove$` stream for clarity.

```typescript
import {Lot} from "cycle-lot"
```

Alternatively you can import `Collection` which is just an alias.

You can also import `pickMerge` and `pickCombine` functions, however you probably won't need them.

Here's how you use `cycle-lot`:

```typescript
function MyComponent(sources) {
// ...

/** Add a new item every second */
const item_sources$ = xs
.periodic(1000) //
.mapTo({
// whatever sources Item requires
dom: sources.dom,
item: {}
})

// item_sources$ could also emit arrays of sources to simultaneously add multiple items

const lot = Lot(Item, item_sources$, "remove$")

lot.combine.dom // xs
lot.merge.http // xs

// ...
}
```

In case it got you curious, `cycle-lot` doesn't merge and combine all available sink streams. Instead it uses [proxies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) under the hood to provide getter-like functionality. In fact, nothing gets merged or combined unless you use it in your code. Repeated usage of the same getter will return the same stream object.