# Selection

[Selection](https://api.activejs.dev/classes/selection.html) is a simple construct that operates on a nested property in the non-primitive Units' value, i.e.: [ListUnit](https://docs.activejs.dev/activejs/fundamentals/units/listunit), [GenericUnit](https://docs.activejs.dev/activejs/fundamentals/units/genericunit), and [DictUnit](https://docs.activejs.dev/activejs/fundamentals/units/dictunit).

Selection offers the ability to access and observe a nested property at a certain path in a Unit's value.

### Make a Selection

```typescript
// create a Unit
const preferencesUnit = new DictUnit({initialValue: 
  {color: 'blue', music: 'EDM', game: 'GTA5'}
})

// make a selection
// the 'select' method takes path as it's params
const musicPreference = preferencesUnit.select('music')
```

### Static Value Access

After creating a Selection object, we can access the value at the selected path anytime, without worrying if the value still exists or not.

```typescript
// access the value at the selected path
console.log(musicPreference.value())
// logs 'EDM' immediately
```

### Reactive Value Access

To observe the value over time we can make an Observable at the selected path, and subscribe to it.

```typescript
// create an Observable
const musicPreference$ = musicPreference.asObservable()

// subsribe for reactive access
musicPreference$.subscribe(value => console.log(value))
// logs 'EDM' immediately, and
// will log whenever the value at the selected path changes
```
