Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor #27

Merged
merged 1 commit into from
Feb 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .changeset/bright-coats-peel.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
'jotai-x': patch
---

Add test cases and fix bugs
Fix `deps` param
7 changes: 7 additions & 0 deletions .changeset/polite-insects-occur.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'jotai-x': minor
---

- Rename `useStoreValue` to `useAtomStoreValue`
- Rename `useStoreSet` to `useAtomStoreSet`
- Rename `useStoreState` to `useAtomStoreState`
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ An extension for [Jotai](https://github.com/pmndrs/jotai) that auto-generates ty
## Features

- Auto-generated type-safe hooks for each state field
- Simple patterns: `useStoreValue('name')` and `useStoreSet('name', value)`
- Simple patterns: `use<StoreName>Value(key)` and `use<StoreName>Set(key, value)`
- Extend your store with computed values using `extend`
- Built-in support for hydration, synchronization, and scoped providers

Expand Down Expand Up @@ -413,11 +413,13 @@ useUserValue('name');

```ts
// Before
const { useAppStore } = createAtomStore({ name: 'Alice' }, { name: 'app' });
const name = useAppStore().get.name();
const setName = useAppStore().set.name();
const [name, setName] = useAppStore().use.name();

// Now
const { useAppStore, useAppValue, useAppSet, useAppState } = createAtomStore({ name: 'Alice' }, { name: 'app' });
const name = useAppValue('name');
const setName = useAppSet('name');
const [name, setName] = useAppState('name');
Expand Down
4 changes: 3 additions & 1 deletion packages/jotai-x/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ An extension for [Jotai](https://github.com/pmndrs/jotai) that auto-generates ty
## Features

- Auto-generated type-safe hooks for each state field
- Simple patterns: `useStoreValue('name')` and `useStoreSet('name', value)`
- Simple patterns: `use<StoreName>Value('name')` and `use<StoreName>Set('name', value)`
- Extend your store with computed values using `extend`
- Built-in support for hydration, synchronization, and scoped providers

Expand Down Expand Up @@ -413,11 +413,13 @@ useUserValue('name');

```ts
// Before
const { useAppStore } = createAtomStore({ name: 'Alice' }, { name: 'app' });
const name = useAppStore().get.name();
const setName = useAppStore().set.name();
const [name, setName] = useAppStore().use.name();

// Now
const { useAppStore, useAppValue, useAppSet, useAppState } = createAtomStore({ name: 'Alice' }, { name: 'app' });
const name = useAppValue('name');
const setName = useAppSet('name');
const [name, setName] = useAppState('name');
Expand Down
12 changes: 6 additions & 6 deletions packages/jotai-x/src/createAtomStore.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ import { splitAtom } from 'jotai/utils';

import {
createAtomStore,
useAtomStoreSet,
useAtomStoreState,
useAtomStoreValue,
useStoreAtomValue,
useStoreSet,
useStoreState,
useStoreValue,
} from './createAtomStore';

describe('createAtomStore', () => {
Expand Down Expand Up @@ -487,7 +487,7 @@ describe('createAtomStore', () => {
/* eslint-enable react-compiler/react-compiler */
const store = useMyTestStoreStore();
const becomeFriends0 = useMyTestStoreValue('becomeFriends');
const becomeFriends1 = useStoreValue(store, 'becomeFriends');
const becomeFriends1 = useAtomStoreValue(store, 'becomeFriends');
const becomeFriends2 = useStoreAtomValue(
store,
myTestStoreStore.atom.becomeFriends
Expand Down Expand Up @@ -582,7 +582,7 @@ describe('createAtomStore', () => {
/* eslint-enable react-compiler/react-compiler */
const store = useMyTestStoreStore();
const setName = useMyTestStoreSet('name');
const setBecomeFriends = useStoreSet(store, 'becomeFriends');
const setBecomeFriends = useAtomStoreSet(store, 'becomeFriends');
const [becameFriends, setBecameFriends] = React.useState(false);

return (
Expand Down Expand Up @@ -682,7 +682,7 @@ describe('createAtomStore', () => {
/* eslint-enable react-compiler/react-compiler */
const store = useMyTestStoreStore();
const [name, setName] = useMyTestStoreState('name');
const [, setBecomeFriends] = useStoreState(store, 'becomeFriends');
const [, setBecomeFriends] = useAtomStoreState(store, 'becomeFriends');
const [becameFriends, setBecameFriends] = React.useState(false);

return (
Expand Down
12 changes: 6 additions & 6 deletions packages/jotai-x/src/createAtomStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -922,19 +922,19 @@ Please wrap them with useCallback or configure the deps array correctly.`
} as any;
};

export function useStoreValue<T, E, K extends keyof StoreAtoms<T, E>>(
export function useAtomStoreValue<T, E, K extends keyof StoreAtoms<T, E>>(
store: ReturnOfUseStoreApi<T, E>,
key: K
): StoreAtoms<T, E>[K] extends Atom<infer V> ? V : never;
export function useStoreValue<T, E, K extends keyof StoreAtoms<T, E>, S>(
export function useAtomStoreValue<T, E, K extends keyof StoreAtoms<T, E>, S>(
store: ReturnOfUseStoreApi<T, E>,
key: K,
selector: StoreAtoms<T, E>[K] extends Atom<infer V>
? (v: V, prevSelectorOutput?: S) => S
: never,
deps?: unknown[]
): S;
export function useStoreValue<T, E, K extends keyof StoreAtoms<T, E>, S>(
export function useAtomStoreValue<T, E, K extends keyof StoreAtoms<T, E>, S>(
store: ReturnOfUseStoreApi<T, E>,
key: K,
selector: StoreAtoms<T, E>[K] extends Atom<infer V>
Expand All @@ -943,7 +943,7 @@ export function useStoreValue<T, E, K extends keyof StoreAtoms<T, E>, S>(
equalityFn: (prevSelectorOutput: S, selectorOutput: S) => boolean,
deps?: unknown[]
): S;
export function useStoreValue<T, E, K extends keyof StoreAtoms<T, E>, S>(
export function useAtomStoreValue<T, E, K extends keyof StoreAtoms<T, E>, S>(
store: ReturnOfUseStoreApi<T, E>,
key: K,
selector?: StoreAtoms<T, E>[K] extends Atom<infer V>
Expand All @@ -955,14 +955,14 @@ export function useStoreValue<T, E, K extends keyof StoreAtoms<T, E>, S>(
return store.useValue(key, selector, equalityFnOrDeps, deps);
}

export function useStoreSet<T, E, K extends keyof StoreAtoms<T, E>>(
export function useAtomStoreSet<T, E, K extends keyof StoreAtoms<T, E>>(
store: ReturnOfUseStoreApi<T, E>,
key: K
) {
return store.useSet(key);
}

export function useStoreState<T, E, K extends keyof StoreAtoms<T, E>>(
export function useAtomStoreState<T, E, K extends keyof StoreAtoms<T, E>>(
store: ReturnOfUseStoreApi<T, E>,
key: K
) {
Expand Down
4 changes: 2 additions & 2 deletions packages/jotai-x/src/elementAtom.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import '@testing-library/jest-dom';
import React from 'react';
import { act, render } from '@testing-library/react';

import { createAtomStore, useStoreValue } from './createAtomStore';
import { createAtomStore, useAtomStoreValue } from './createAtomStore';

type TElement = any;

Expand All @@ -24,7 +24,7 @@ export const useElement = <T extends TElement = TElement>(
pluginKey = SCOPE_ELEMENT
): T => {
const store = useElementStore(pluginKey);
const value = useStoreValue(store, 'element');
const value = useAtomStoreValue(store, 'element');

if (!value) {
console.warn(
Expand Down
Loading