pankod/refine

View on GitHub
packages/core/src/definitions/helpers/queryKeys/index.ts

Summary

Maintainability
A
3 hrs
Test Coverage
import { QueryKey } from "@tanstack/react-query";

import { IQueryKeys, MetaQuery } from "../../../contexts/data/types";
import { keys as newKeys } from "../keys";
import { pickNotDeprecated } from "../pickNotDeprecated";

/**
 * @deprecated `queryKeys` is deprecated. Please use `keys` instead.
 */
export const queryKeys = (
  resource?: string,
  dataProviderName?: string,
  meta?: MetaQuery,
  /**
   * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.
   */
  metaData?: MetaQuery | undefined,
): IQueryKeys => {
  const providerName = dataProviderName || "default";
  const keys: IQueryKeys = {
    all: [providerName],
    resourceAll: [providerName, resource || ""],
    list: (config) => [
      ...keys.resourceAll,
      "list",
      {
        ...config,
        ...(pickNotDeprecated(meta, metaData) || {}),
      } as QueryKey,
    ],
    many: (ids) =>
      [
        ...keys.resourceAll,
        "getMany",
        ids?.map(String) as QueryKey,
        { ...(pickNotDeprecated(meta, metaData) || {}) } as QueryKey,
      ].filter((item) => item !== undefined),
    detail: (id) => [
      ...keys.resourceAll,
      "detail",
      id?.toString(),
      { ...(pickNotDeprecated(meta, metaData) || {}) } as QueryKey,
    ],
    logList: (meta) =>
      ["logList", resource, meta as any, metaData as QueryKey].filter(
        (item) => item !== undefined,
      ),
  };
  return keys;
};

export const queryKeysReplacement = (preferLegacyKeys?: boolean) => {
  return (
    resource?: string,
    dataProviderName?: string,
    meta?: MetaQuery,
    /**
     * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.
     */
    metaData?: MetaQuery | undefined,
  ): IQueryKeys => {
    const providerName = dataProviderName || "default";

    const keys: IQueryKeys = {
      all: newKeys().data(providerName).get(preferLegacyKeys),
      resourceAll: newKeys()
        .data(dataProviderName)
        .resource(resource ?? "")
        .get(preferLegacyKeys),
      list: (config) =>
        newKeys()
          .data(dataProviderName)
          .resource(resource ?? "")
          .action("list")
          .params({
            ...config,
            ...(pickNotDeprecated(meta, metaData) || {}),
          })
          .get(preferLegacyKeys),
      many: (ids) =>
        newKeys()
          .data(dataProviderName)
          .resource(resource ?? "")
          .action("many")
          .ids(...(ids ?? []))
          .params({
            ...(pickNotDeprecated(meta, metaData) || {}),
          })
          .get(preferLegacyKeys),
      detail: (id) =>
        newKeys()
          .data(dataProviderName)
          .resource(resource ?? "")
          .action("one")
          .id(id ?? "")
          .params({
            ...(pickNotDeprecated(meta, metaData) || {}),
          })
          .get(preferLegacyKeys),
      logList: (meta) =>
        [
          ...newKeys()
            .audit()
            .resource(resource)
            .action("list")
            .params(meta)
            .get(preferLegacyKeys),
          metaData as QueryKey,
        ].filter((item) => item !== undefined),
    };

    return keys;
  };
};