Security News
Fluent Assertions Faces Backlash After Abandoning Open Source Licensing
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
@ngxs-labs/attach-action
Advanced tools
⚡️ Attach independent, pure and easy to test Action Handlers to NGXS States.
This package allows to attach ActionHandlers
to State
classes.
To install @ngxs-labs/attach-action
run the following command:
yarn add @ngxs-labs/attach-action
npm install @ngxs-labs/attach-action
Especially large codebases can get the issue of ending up in sprawling and hard to test NGXS-state-classes. Breaking the state into smaller chunks is not always an option, especially when the data is very cohesive and the interaction between it is complex.
Thus we wanted to move actions into independent, testable and simple to grasp files. For this purpose, a small helper function was introduced which allows the declaration of actions which are handled outside of the state class.
Following this approach brought us in the desirable condition to have all actions and usefully grouped selectors in separate classes. Our file structure in large enterprise applications therefore usually looks ruffly like this:
/store
/shop
shop.state.ts
shop.actions.ts
actions/
add-product-to-cart.action.ts
add-product-to-cart.action.spec.ts
fetch-products.action.ts
fetch-products.action.spec.ts
selectors/
products.selector.ts
prices.selector.ts
The responsibility of the state-class itself is just to group und bootstrap all the action declarations:
@State<ShopStateModel>({ name: 'shop', defaults: DEFAULT_SHOP_STATE })
export class ShopState {
constructor(productService: ProductService) {
attachAction(ShopState, AddProductToCartAction, addProductToCart);
attachAction(ShopState, FetchProductsAction, fetchProducts(productService));
attachAction(ShopState, AnotherAction, ...);
attachAction(ShopState, [ActionA, ActionB], ...);
}
}
The actions are just idiomatic (higher-order) functions:
export const addProductToCart =
(ctx: StateContext<ShopStateModel>, act: AddProductToCartAction) => {
ctx.patchState({cart: [act.product]})
}
export const fetchProducts =
(productService: ProductService) =>
(ctx: StateContext<ShopStateModel>, act: FetchProductsAction) => {
productService.fetchProducts().subscribe(products => {
ctx.patchState({products})
});
}
FAQs
Unknown package
The npm package @ngxs-labs/attach-action receives a total of 270 weekly downloads. As such, @ngxs-labs/attach-action popularity was classified as not popular.
We found that @ngxs-labs/attach-action demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 7 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.