UNPKG

recoil

Version:

Recoil - A state management library for React

137 lines (120 loc) 3.92 kB
/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @emails oncall+recoil * @flow strict-local * @format */ 'use strict'; import type {RecoilState} from '../../core/Recoil_RecoilValue'; const {useRecoilValue} = require('../../hooks/Recoil_Hooks'); const atom = require('../Recoil_atom'); const readOnlySelector = require('../Recoil_readOnlySelector'); const { noWait, waitForAll, waitForAllSettled, waitForNone, } = require('../Recoil_WaitFor'); const numberAtom: RecoilState<number> = atom({key: 'number', default: 0}); const stringAtom: RecoilState<string> = atom({key: 'string', default: ''}); // eslint-disable-next-line no-unused-vars let num: number; // eslint-disable-next-line no-unused-vars let str: string; ////////////// // waitForAll ////////////// // Test tuple unwrapping of types // eslint-disable-next-line fb-www/react-hooks const arrayResults = useRecoilValue( // $FlowIssue[invalid-tuple-map] waitForAll([readOnlySelector(numberAtom), readOnlySelector(stringAtom)]), ); num = arrayResults[0]; str = arrayResults[1]; // $FlowExpectedError num = arrayResults[1]; // $FlowExpectedError str = arrayResults[0]; // Test object unwrapping of types // eslint-disable-next-line fb-www/react-hooks const objResults = useRecoilValue( // $FlowIssue[invalid-tuple-map] // $FlowIssue[incompatible-call] waitForAll({num: numberAtom, str: stringAtom}), ); num = objResults.num; str = objResults.str; // $FlowExpectedError num = objResults.str; // $FlowExpectedError str = objResults.num; ////////////// // waitForNone ////////////// // Test tuple unwrapping of types // eslint-disable-next-line fb-www/react-hooks const arrayResultsNone = useRecoilValue( // $FlowIssue[invalid-tuple-map] waitForNone([readOnlySelector(numberAtom), readOnlySelector(stringAtom)]), ); num = arrayResultsNone[0].valueOrThrow(); str = arrayResultsNone[1].valueOrThrow(); // $FlowExpectedError num = arrayResultsNone[1].valueOrThrow(); // $FlowExpectedError str = arrayResultsNone[0].valueOrThrow(); // Test object unwrapping of types // eslint-disable-next-line fb-www/react-hooks const objResultsNone = useRecoilValue( // $FlowIssue[incompatible-call] waitForNone({num: numberAtom, str: stringAtom}), ); num = objResultsNone.num.valueOrThrow(); str = objResultsNone.str.valueOrThrow(); // $FlowExpectedError num = objResultsNone.str.valueOrThrow(); // $FlowExpectedError str = objResultsNone.num.valueOrThrow(); ////////////// // waitForAllSettled ////////////// // Test tuple unwrapping of types // eslint-disable-next-line fb-www/react-hooks const arrayResultsAllSettled = useRecoilValue( waitForAllSettled([ // $FlowIssue[invalid-tuple-map] readOnlySelector(numberAtom), // $FlowIssue[invalid-tuple-map] readOnlySelector(stringAtom), ]), ); num = arrayResultsAllSettled[0].valueOrThrow(); str = arrayResultsAllSettled[1].valueOrThrow(); // $FlowExpectedError num = arrayResultsAllSettled[1].valueOrThrow(); // $FlowExpectedError str = arrayResultsAllSettled[0].valueOrThrow(); // Test object unwrapping of types // eslint-disable-next-line fb-www/react-hooks const objResultsAllSettled = useRecoilValue( // $FlowIssue[invalid-tuple-map] // $FlowIssue[incompatible-call] waitForAllSettled({num: numberAtom, str: stringAtom}), ); num = objResultsAllSettled.num.valueOrThrow(); str = objResultsAllSettled.str.valueOrThrow(); // $FlowExpectedError num = objResultsAllSettled.str.valueOrThrow(); // $FlowExpectedError str = objResultsAllSettled.num.valueOrThrow(); ////////////// // noWait ////////////// num = useRecoilValue(noWait(numberAtom)).valueOrThrow(); // eslint-disable-line fb-www/react-hooks // $FlowExpectedError str = useRecoilValue(noWait(numberAtom)).valueOrThrow(); // eslint-disable-line fb-www/react-hooks