`params.previousData` is undefined in `update` call with `hydraDataProvider`
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 30/100
- Tipo di issue
- Bug
- Chiarezza
- Da chiarire
- Stato di attività
- Ferma
- Stack tecnologico
- react, typescript
Direzione di ricerca
Inizia dalla chiamata di aggiornamento di hydraDataProvider e dall’override personalizzato di update mostrato nella riproduzione, quindi traccia il modo in cui l’azione di salvataggio fornisce params.data e params.previousData. Riproduci il flusso di modifica e determina perché previousData è assente; il lavoro è completato quando la causa e il comportamento previsto sono stati stabiliti, con un controllo di regressione o una documentazione chiara dei parametri di aggiornamento supportati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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;
}
});
};
- Lingua principale
- TypeScript
- Stelle
- 516
- Fork
- 134
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di api-platform/admin
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
api-platform/admin#616 · 1 commento ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 64/100
api-platform/admin#660 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 50/100
api-platform/admin#659 · 1 reazione ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
api-platform/admin#631 · 6 commenti ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
api-platform/admin#626 · 1 commento · 1 reazione ·
Tutte le issue di api-platform/admin
Issue simili
-
blocklist removal
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
MetaMask/eth-phishing-detect#296544 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
pastelsky/bundlephobia#1122 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
category/development priority/P2 scope/file-operations scope/testing type/enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Enatega Customer and Rider app: Add-ons price is not visible to customer after order is placed. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100