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

types: fix some mutation type issue #2421

Merged
merged 3 commits into from
Feb 11, 2023
Merged

types: fix some mutation type issue #2421

merged 3 commits into from
Feb 11, 2023

Conversation

promer94
Copy link
Collaborator

@promer94 promer94 commented Feb 11, 2023

Trigger function should enforce arg type if arg type decleared in fetcher

close #2418

Previously

const { trigger } = useSWRMutation('key', (_, opts: { arg: { foo: string } }) => 'any'))
// will not throw error
trigger()

Now

const { trigger } = useSWRMutation('key', (_, opts: { arg: { foo: string } }) => 'any'))
// will throw error now
trigger()

Swr mutate type should work with trigger

close #2406 #2280

Previously

const { mutate } = useSWR("/some/key", fetcher);
  const { trigger } = useSWRMutation("/some/key", fetcher);

  return (
    <button
      onClick={async () => {
        mutate(trigger(), { // <-  Argument of type 'Promise<{ foo: string; } | undefined>' is not assignable to parameter of type '{ foo: string; } | Promise<{ foo: string; }> | MutatorCallback<{ foo: string; }> | undefined'. ...
          optimisticData: {
            foo: 'baz'
          }
        })
      }}
    />
  );

Now

const { mutate } = useSWR("/some/key", fetcher);
  const { trigger } = useSWRMutation("/some/key", fetcher);

  return (
    <button
      onClick={async () => {
        // it works now
        mutate(trigger(), {
            foo: 'baz'
          }
        })
      }}
    />
  );

Shoud be able to configure the type of optimisticData and populateCache

Previous

const { data } = useSWR('key', async () => {
    return ['foo']
})
const { trigger } = useSWRMutation(
    'key',
    async (_, { arg }: { arg: 'foo' }) => {
       return arg.toUpperCase()
    }
)

trigger('bar', {
      optimisticData: current => {
         // current should be inferred as string[] | undefined since it is from the cache, but it is actullay inferred as string to match the return type of fetcher
        // and it also should return string[] to match the cache type
      },
      populateCache: (added, current) => {
         // current should be inferred as string since it is from the cache, but it is actullay inferred as string to match the return type of fetcher
        // and it also should return string[] to match the cache type 
      },
      revalidate: false
    })

Now

const { data } = useSWR('key', async () => {
    return ['foo']
})
const { trigger } = useSWRMutation(
    'key',
    async (_, { arg }: { arg: 'foo' }) => {
       return arg.toUpperCase()
    }
)

trigger<typeof data>('bar', {
      optimisticData: current => {
         // current can be configued by generic now
      },
      populateCache: (added, current) => {
         // current can be configued by generic now
      },
      revalidate: false
    })

@codesandbox-ci
Copy link

codesandbox-ci bot commented Feb 11, 2023

This pull request is automatically built and testable in CodeSandbox.

To see build info of the built libraries, click here or the icon next to each commit SHA.

Latest deployment of this branch, based on commit b4df51d:

Sandbox Source
SWR-Basic Configuration
SWR-States Configuration
SWR-Infinite Configuration
SWR-SSR Configuration

@shuding shuding merged commit 21dffae into vercel:main Feb 11, 2023
@promer94 promer94 deleted the typing branch February 11, 2023 14:56
renovate bot added a commit to Unleash/unleash that referenced this pull request Mar 9, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [swr](https://swr.vercel.app)
([source](https://togithub.com/vercel/swr)) | [`2.0.3` ->
`2.0.4`](https://renovatebot.com/diffs/npm/swr/2.0.3/2.0.4) |
[![age](https://badges.renovateapi.com/packages/npm/swr/2.0.4/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/npm/swr/2.0.4/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/npm/swr/2.0.4/compatibility-slim/2.0.3)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/npm/swr/2.0.4/confidence-slim/2.0.3)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>vercel/swr</summary>

### [`v2.0.4`](https://togithub.com/vercel/swr/releases/tag/v2.0.4)

[Compare
Source](https://togithub.com/vercel/swr/compare/v2.0.3...v2.0.4)

#### Patches

- build: fix release job condition by
[@&#8203;huozhi](https://togithub.com/huozhi) in
[vercel/swr#2392
- types: fix some mutation type issue by
[@&#8203;promer94](https://togithub.com/promer94) in
[vercel/swr#2421
- fix: Error retry should be handled by global revalidator instead of
local revalidation function by
[@&#8203;promer94](https://togithub.com/promer94) in
[vercel/swr#2415
- fix: ensure initCache setter function stays within bounds of
subscriptions by [@&#8203;lfbergee](https://togithub.com/lfbergee) in
[vercel/swr#2411

#### Misc

- test: stream ssr e2e by
[@&#8203;promer94](https://togithub.com/promer94) in
[vercel/swr#2395
- test: fix an act warning by
[@&#8203;koba04](https://togithub.com/koba04) in
[vercel/swr#2403

#### New Contributors

- [@&#8203;lfbergee](https://togithub.com/lfbergee) made their first
contribution in
[vercel/swr#2411

**Full Changelog**:
vercel/swr@v2.0.3...v2.0.4

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/Unleash/unleash).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4xNTkuMCIsInVwZGF0ZWRJblZlciI6IjM0LjE1OS4wIn0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@osrl
Copy link

osrl commented Mar 13, 2023

Hi, This PR broke my build:

Previously

export function useCreateCreditCard(
  config?: SWRMutationConfiguration<boolean, any>
) {
  const client = useApi();

  const fetcher: MutationFetcher<boolean> = async () => {
    const response = await client.createCreditCard();

    return !!response;
  };

  return useSWRMutation(['api', 'credit-card'], fetcher, config);
}

I can't call trigger(). (Expected 1-2 arguments, but got 0)

Now I have to do this:

export function useCreateCreditCard(
  config?: SWRMutationConfiguration<boolean, any, never>
) {
  const client = useApi();

  const fetcher: MutationFetcher<boolean, never> = async () => {
    const response = await client.createCreditCard();

    return !!response;
  };

  return useSWRMutation(['api', 'credit-card'], fetcher, config);
}

Did I used it wrong before?

@promer94
Copy link
Collaborator Author

For most time you don't need MutationFetcher. This just works

export function useCreateCreditCard(
  config?: SWRMutationConfiguration<boolean, any, never>
) {
  const client = useApi();
  const fetcher = async () => {
    const response = await client.createCreditCard();
    return !!response;
  };

  return useSWRMutation(['api', 'credit-card'], fetcher, config);
}

kodiakhq bot pushed a commit to kula-app/OnLaunch that referenced this pull request Mar 15, 2023
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [swr](https://swr.vercel.app) ([source](https://togithub.com/vercel/swr)) | [`2.0.3` -> `2.1.0`](https://renovatebot.com/diffs/npm/swr/2.0.3/2.1.0) | [![age](https://badges.renovateapi.com/packages/npm/swr/2.1.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/swr/2.1.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/swr/2.1.0/compatibility-slim/2.0.3)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/swr/2.1.0/confidence-slim/2.0.3)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>vercel/swr</summary>

### [`v2.1.0`](https://togithub.com/vercel/swr/releases/tag/v2.1.0)

[Compare Source](https://togithub.com/vercel/swr/compare/v2.0.4...v2.1.0)

#### Feature

-   Subscription mode by [@&#8203;huozhi](https://togithub.com/huozhi) in [vercel/swr#1263
-   parallel option for useSWRInfinite by [@&#8203;koba04](https://togithub.com/koba04) in [vercel/swr#2404

Checkout [subscription docs](https://swr.vercel.app/docs/subscription) and [useSWRInfinite parallel fetching docs](https://swr.vercel.app/docs/pagination#parallel-fetching-mode) for more details

#### Patches

-   fix: use the latest config in useSWRMutation by [@&#8203;koba04](https://togithub.com/koba04) in [vercel/swr#2468
-   Fix: type support for suspense and fallbackData([#&#8203;2396](https://togithub.com/vercel/swr/issues/2396)) by [@&#8203;taro-28](https://togithub.com/taro-28) in [vercel/swr#2452
-   Error should be reset when new data comes by [@&#8203;huozhi](https://togithub.com/huozhi) in [vercel/swr#2472
-   fix: avoid creating new snapshot if cache is not updated at client during streaming by [@&#8203;promer94](https://togithub.com/promer94) in [vercel/swr#2475
-   refactor: initialize the cache only on first access by [@&#8203;promer94](https://togithub.com/promer94) in [vercel/swr#2479

#### Misc

-   ci: fix publish workflow by [@&#8203;promer94](https://togithub.com/promer94) in [vercel/swr#2453
-   ci: faster e2e test by [@&#8203;promer94](https://togithub.com/promer94) in [vercel/swr#2428
-   test: add a test for keepPreviousData without changing key by [@&#8203;koba04](https://togithub.com/koba04) in [vercel/swr#2470
-   Always assume subscriptions will return sub count from current key by [@&#8203;huozhi](https://togithub.com/huozhi) in [vercel/swr#2460
-   test: Fix flaky e2e test by [@&#8203;promer94](https://togithub.com/promer94) in [vercel/swr#2476
-   chore: Add subscription example by [@&#8203;huozhi](https://togithub.com/huozhi) in [vercel/swr#2480

#### New Contributors

-   [@&#8203;taro-28](https://togithub.com/taro-28) made their first contribution in [vercel/swr#2452

**Full Changelog**: vercel/swr@v2.0.4...v2.1.0

### [`v2.0.4`](https://togithub.com/vercel/swr/releases/tag/v2.0.4)

[Compare Source](https://togithub.com/vercel/swr/compare/v2.0.3...v2.0.4)

#### Patches

-   build: fix release job condition by [@&#8203;huozhi](https://togithub.com/huozhi) in [vercel/swr#2392
-   types: fix some mutation type issue by [@&#8203;promer94](https://togithub.com/promer94) in [vercel/swr#2421
-   fix: Error retry should be handled by global revalidator instead of local revalidation function by [@&#8203;promer94](https://togithub.com/promer94) in [vercel/swr#2415
-   fix: ensure initCache setter function stays within bounds of subscriptions by [@&#8203;lfbergee](https://togithub.com/lfbergee) in [vercel/swr#2411

#### Misc

-   test: stream ssr e2e by [@&#8203;promer94](https://togithub.com/promer94) in [vercel/swr#2395
-   test: fix an act warning by [@&#8203;koba04](https://togithub.com/koba04) in [vercel/swr#2403

#### New Contributors

-   [@&#8203;lfbergee](https://togithub.com/lfbergee) made their first contribution in [vercel/swr#2411

**Full Changelog**: vercel/swr@v2.0.3...v2.0.4

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/kula-app/OnLaunch).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS44LjMiLCJ1cGRhdGVkSW5WZXIiOiIzNS44LjMifQ==-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants