Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

`params.previousData` is undefined in `update` call with `hydraDataProvider`

Abierto
#520 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
30/100
Tipo de issue
Error
Claridad
Necesita aclaración
Estado de actividad
Estancado
Stack tecnológico
react, typescript
Área
api, frontend

Línea de trabajo

Comienza por la llamada de actualización de hydraDataProvider y por la sobreescritura personalizada de update mostrada en la reproducción; después, sigue cómo la acción de guardado proporciona params.data y params.previousData. Reproduce el flujo de edición y determina por qué falta previousData; se considera terminado cuando se hayan establecido la causa y el comportamiento esperado, junto con una comprobación de regresión o una documentación clara de los parámetros de actualización compatibles.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

API Platform version(s) affected: 3.4.4

Description
We need to use PATCH instead of PUT to update existing resources, so I drew inspiration from this comment https://github.com/api-platform/admin/issues/370#issuecomment-831749350 and overwrote the update method of our data provider, which is an instance of hydraDataProvider.

The new update method should create a diff between the current resource data (given in params.data) and the previous data (given in params.previousData) and then execute a PATCH request.

However, params.previousData is undefined when a user edits a resource and clicks the save button.

I figured it may be caused by some previous error on the page where this behavior occurs, but there are no errors in the JavaScript console on that page. The first error that occurs is that params.previousData is undefined when our diff function is called.

We haven't added much custom logic to our admin implementation, most things are done by the default implementations and automations of API Platform Admin.

What could cause this issue? Is params.previousData supposed to be empty?

How to reproduce

// We use the built-in fetchHydra() and parseHydraDocumentation() functions, 
// but wrapped them to handle authorization as shown in the API Platform Admin docs and examples
const baseDataProvider = hydraDataProvider({
    entrypoint: ENTRYPOINT,
    httpClient: fetchHydraWithAuthentication, 
    apiDocumentationParser: apiDocumentationParser
});

baseDataProvider.update = function(resource, params) {
    return this.httpClient(`${this.entrypoint}/${resource}/${params.id}`, {
        method: 'PATCH',
        body: JSON.stringify(diff(params.data, params.previousData)), 
    }).then(({json}) => ({data: json}));
};

// We use lodash helpers to implement this diff function
const diff = (object, base) => {
    return transform(object, (result, value, key) => {
        if (!isEqual(value, base[key])) {
            result[key] = isObject(value) && isObject(base[key]) ? diff(value, base[key]) : value;
        }
    });
};
Lenguaje dominante
TypeScript
Estrellas
516
Forks
134
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de api-platform/admin

Todos los issues de api-platform/admin

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.