Skip to content

Commit

Permalink
[use-local-storage] Add definition (#4455)
Browse files Browse the repository at this point in the history
  • Loading branch information
Brianzchen committed Jun 13, 2023
1 parent c57729d commit 56c47e4
Show file tree
Hide file tree
Showing 4 changed files with 125 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// @flow
import { describe, it, test } from 'flow-typed-test';
import useLocalStorage from 'use-local-storage';

describe('use-local-storage', () => {
it('works', () => {
const [username, setUsername] = useLocalStorage('name', '');
setUsername();
setUsername('test');
username.toLowerCase();

const [a, setA] = useLocalStorage<number>('name', 1);
setA(1);
});

it('errors', () => {
// $FlowExpectedError[incompatible-call]
useLocalStorage<number>('name', 'test');

const [number, setNumber] = useLocalStorage('name', 1);
// $FlowExpectedError[incompatible-call]
setNumber('test')
});

test('options', () => {
useLocalStorage('name', '', {});
useLocalStorage('name', '', {
serializer: (obj) => {
/* Serialize logic */
return '';
},
parser: (str) => {
/* Parse logic */
return '';
},
logger: console.log,
syncData: false,
});

// $FlowExpectedError[incompatible-call]
useLocalStorage('name', '', '');
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
declare module 'use-local-storage' {
import type { ReactSetStateFunction } from 'react';

declare type Serializer<T> = (object: T | void) => string;
declare type Parser<T> = (val: string) => (T | void);

declare type Options<T> = Partial<{|
serializer: Serializer<T>,
parser: Parser<T>,
logger: (error: any) => void,
syncData: boolean,
|}>;

declare module.exports: <T>(
key: string,
defaultValue: T,
options?: Options<T>,
) => [T, ReactSetStateFunction<T | void>];
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// @flow
import { describe, it, test } from 'flow-typed-test';
import useLocalStorage from 'use-local-storage';

describe('use-local-storage', () => {
it('works', () => {
const [username, setUsername] = useLocalStorage('name', '');
setUsername();
setUsername('test');
username.toLowerCase();

const [a, setA] = useLocalStorage<number>('name', 1);
setA(1);
});

it('errors', () => {
// $FlowExpectedError[incompatible-call]
useLocalStorage<number>('name', 'test');

const [number, setNumber] = useLocalStorage<number>('name', 1);
// $FlowExpectedError[incompatible-call]
setNumber('test')
});

test('options', () => {
useLocalStorage('name', '', {});
useLocalStorage('name', '', {
serializer: (obj) => {
/* Serialize logic */
return '';
},
parser: (str) => {
/* Parse logic */
return '';
},
logger: console.log,
syncData: false,
});

// $FlowExpectedError[incompatible-shape]
useLocalStorage('name', '', '');
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
declare module 'use-local-storage' {
import type { ReactSetStateFunction } from 'react';

declare type Serializer<T> = (object: T | void) => string;
declare type Parser<T> = (val: string) => (T | void);
declare type Dispatch<A> = (A) => void;

declare type Options<T> = $Shape<{|
serializer: Serializer<T>,
parser: Parser<T>,
logger: (error: any) => void,
syncData: boolean,
|}>;

declare module.exports: <T>(
key: string,
defaultValue: T,
options?: Options<T>,
) => [T, ReactSetStateFunction<T | void>];
}

0 comments on commit 56c47e4

Please sign in to comment.