Pular para o conteúdo principal

All

Recupera todas as entidades no cache como um Array.

  • definition: obrigatório Uma Entity singular que este array contém ou um mapeamento de valores de atributo para Entities.
  • schemaAttribute: opcional (obrigatório se definition não for um schema singular) O atributo de cada entidade encontrada que define qual schema, conforme o mapeamento da definição, usar na normalização. Pode ser uma string ou uma função. Se for uma função, recebe os seguintes argumentos: _ value: O valor de entrada da entidade. _ parent: O objeto pai do array de entrada. * key: A chave sob a qual o array de entrada aparece no objeto pai.

Métodos de instância​

  • define(definition): Quando usado, o definition informado será mesclado com a definição original passada ao construtor de All. Este método costuma ser útil para criar referências circulares no schema.

Uso​

Para descrever um array simples de um único tipo de entidade:

Fixtures
GET /users
[{"id":"123","name":"Jim"},{"id":"456","name":"Jane"}]
POST /users
{"id":"777","name":"ABC"}
▶api/User
▶NewUser
▶UsersPage.tsx
import { RestEndpoint, All } from '@data-client/rest';
import { useSuspense } from '@data-client/react';
import { User } from './api/User';
import NewUser from './NewUser';

const getUsers = new RestEndpoint({
  path: '/users',
  schema: new All(User),
});

function UsersPage() {
  const users = useSuspense(getUsers);
  return (
    <div>
      {users.map(user => (
        <div key={user.pk()}>{user.name}</div>
      ))}
      <NewUser />
    </div>
  );
}
render(<UsersPage />);
Resultado
Store▶

Tipos polimórficos​

Se os seus dados de entrada são um array com mais de um tipo de entidade, é necessário definir um mapeamento de schema.

observação

Se os seus dados retornarem um objeto para o qual você não forneceu um mapeamento, o objeto original será retornado no resultado e nenhuma entidade será criada.

schemaAttribute string​

Fixtures
GET /feed
[{"id":1,"type":"link","url":"https://ntucker.true.io","title":"Nate site"},{"id":10,"type":"post","content":"good day!"}]
▶api/Feed
import { Entity, RestEndpoint, All } from '@data-client/rest';

export abstract class FeedItem extends Entity {
  readonly id: number = 0;
  declare readonly type: 'link' | 'post';
}
export class Link extends FeedItem {
  readonly type = 'link' as const;
  readonly url: string = '';
  readonly title: string = '';
}
export class Post extends FeedItem {
  readonly type = 'post' as const;
  readonly content: string = '';
}
export const getFeed = new RestEndpoint({
  path: '/feed',
  schema: new All(
    {
      link: Link,
      post: Post,
    },
    'type',
  ),
});
▶FeedList
Resultado
Store▶

schemaAttribute função​

Os valores retornados devem corresponder a uma chave em definition. Aqui mostraremos o mesmo comportamento do caso 'string', exceto que acrescentaremos um 's'.

Fixtures
GET /feed
[{"id":1,"type":"link","url":"https://ntucker.true.io","title":"Nate site"},{"id":10,"type":"post","content":"good day!"}]
▶api/Feed
import { Entity, RestEndpoint, All } from '@data-client/rest';

export abstract class FeedItem extends Entity {
  readonly id: number = 0;
  declare readonly type: 'link' | 'post';
}
export class Link extends FeedItem {
  readonly type = 'link' as const;
  readonly url: string = '';
  readonly title: string = '';
}
export class Post extends FeedItem {
  readonly type = 'post' as const;
  readonly content: string = '';
}
export const getFeed = new RestEndpoint({
  path: '/feed',
  schema: new All(
    {
      links: Link,
      posts: Post,
    },
    (input: Link | Post, parent: unknown, key: string) => `${input.type}s`,
  ),
});
▶FeedList
Resultado
Store▶