(
featureConfig: FeatureConfig<FeatureName, FeatureState> & {
extraSelectors?: ExtraSelectorsFactory<
FeatureName,
FeatureState,
ExtraSelectors
>;
}
)
| 199 | * ``` |
| 200 | */ |
| 201 | export function createFeature< |
| 202 | FeatureName extends string, |
| 203 | FeatureState, |
| 204 | ExtraSelectors extends SelectorsDictionary, |
| 205 | >( |
| 206 | featureConfig: FeatureConfig<FeatureName, FeatureState> & { |
| 207 | extraSelectors?: ExtraSelectorsFactory< |
| 208 | FeatureName, |
| 209 | FeatureState, |
| 210 | ExtraSelectors |
| 211 | >; |
| 212 | } |
| 213 | ): Feature<FeatureName, FeatureState> & ExtraSelectors { |
| 214 | const { |
| 215 | name, |
| 216 | reducer, |
| 217 | extraSelectors: extraSelectorsFactory, |
| 218 | } = featureConfig; |
| 219 | |
| 220 | const featureSelector = createFeatureSelector<FeatureState>(name); |
| 221 | const nestedSelectors = createNestedSelectors(featureSelector, reducer); |
| 222 | const baseSelectors = { |
| 223 | [`select${capitalize(name)}State`]: featureSelector, |
| 224 | ...nestedSelectors, |
| 225 | } as BaseSelectors<FeatureName, FeatureState>; |
| 226 | const extraSelectors = extraSelectorsFactory |
| 227 | ? extraSelectorsFactory(baseSelectors) |
| 228 | : {}; |
| 229 | |
| 230 | return { |
| 231 | name, |
| 232 | reducer, |
| 233 | ...baseSelectors, |
| 234 | ...extraSelectors, |
| 235 | } as Feature<FeatureName, FeatureState> & ExtraSelectors; |
| 236 | } |
| 237 | |
| 238 | function createNestedSelectors<FeatureState>( |
| 239 | featureSelector: MemoizedSelector<Record<string, any>, FeatureState>, |
nothing calls this directly
no test coverage detected