joaopaulolousada / ngx-zustand Goto Github PK
View Code? Open in Web Editor NEWThis package provides a Zustand adapter for Angular apps.
License: MIT License
This package provides a Zustand adapter for Angular apps.
License: MIT License
import { Injectable } from '@angular/core';
interface CounterState {
counter: number;
increment: () => void;
// decrement: () => void;
}
@Injectable({
providedIn: 'root',
})
export class CounterService extends ZustandBaseService<CounterState> {
initStore() {
return set => ({
counter: 0,
increment: counter => set({ counter }),
// decrement: () => set(state => ({ counter: state.counter - 1 })),
});
}
}
I did something like that , but it's throwing an error like Cannot find name 'ZustandBaseService'.ts(2304)
so from where I can import it??
I don't understand why these errors appear with the library, can someone help me. thank you
Information:
"typescript": "~4.0.2"
Angular CLI: 11.0.7
Node: 14.19.1
OS: linux x64
the errors:
Build at: 2023-11-09T12:49:24.967Z - Hash: f7bcd2d370c48f38868f - Time: 7962ms
Error: node_modules/ngx-zustand/lib/zustand-base.service.d.ts:13:53 - error TS1005: '>' expected.
13 useStore(selector: Parameters<typeof useStore<T, S>>[1]): Observable;
~
node_modules/ngx-zustand/lib/zustand-base.service.d.ts:13:58 - error TS1005: ',' expected.
13 useStore(selector: Parameters<typeof useStore<T, S>>[1]): Observable;
~
node_modules/ngx-zustand/lib/zustand-base.service.d.ts:13:63 - error TS1005: ';' expected.
13 useStore(selector: Parameters<typeof useStore<T, S>>[1]): Observable;
~
node_modules/ngx-zustand/lib/zustand-base.service.d.ts:13:64 - error TS1128: Declaration or statement expected.
13 useStore(selector: Parameters<typeof useStore<T, S>>[1]): Observable;
~
node_modules/ngx-zustand/lib/zustand-base.service.d.ts:13:79 - error TS1005: '(' expected.
13 useStore(selector: Parameters<typeof useStore<T, S>>[1]): Observable;
~
node_modules/ngx-zustand/lib/zustand-base.service.d.ts:14:1 - error TS1128: Declaration or statement expected.
14 }
~
File witch erros:
import { Observable } from 'rxjs';
import { StateCreator, StoreApi } from 'zustand/vanilla';
export { StateCreator } from 'zustand/vanilla';
import { useStore } from './use-store';
export declare abstract class ZustandBaseService {
private store;
constructor();
abstract initStore(): StateCreator;
createStore(): StoreApi;
getState(): T;
setState(payload: Partial): void;
useStore(): Observable;
useStore(selector: Parameters<typeof useStore<T, S>>[1]): Observable;
}
According to the code example, you have to create the store inside the Service.
Is it possible to expose the store created this way as a vanilla store. Or else allow me to create a vanilla store first outside of Angular, then import it into the Angular Service.
Example:
import { createStore } from 'zustand/vanilla'
const store = createStore((set) => ({
counter: 0,
increment: () => set((state) => ({ counter: state.counter + 1 })),
decrement: () => set((state) => ({ counter: state.counter - 1 })),
});)
interface CounterState {
counter: number;
increment: () => void;
decrement: () => void;
}
@Injectable({
providedIn: 'root',
})
export class CounterService extends ZustandBaseService<CounterState> {
initStore() {
return store
}
}
I am fairly new to Angular, so I do appreciate if you could point me to a better way. My intention is to use Zustand (the vanilla store specifically) to interface between Angular app with a separate non-angular system.
The React adapter allows this via the create
function
import { create } from 'zustand'
import { vanillaStore } from './vanillaStore'
const useStore = create(vanillaStore)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.