Skip to content

Commit

Permalink
refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
zbeyens committed Feb 6, 2025
1 parent b5ff55d commit 754bffa
Show file tree
Hide file tree
Showing 7 changed files with 28 additions and 17 deletions.
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

0 comments on commit 754bffa

Please sign in to comment.