Actualización de 0.18 a 0.21
Actualización de 0.18 → 0.21
Sección titulada «Actualización de 0.18 → 0.21»0.21.0 ya está publicada. Estas son las entradas ### Breaking de su
sección del changelog, una a una, con lo que cada una le pide
cambiar. Las versiones 0.19 y 0.20 no introducen cambios incompatibles, por lo que
esto representa un solo salto desde 0.18: léalo antes de pasar a 0.21, no después.
Ambos son errores de compilación, no cambios silenciosos de comportamiento: la compilación señala cada línea que hay que editar, y el grep de cada sección las encuentra antes que ella.
31. context.client.data ya no compila en un callback de colección
Sección titulada «31. context.client.data ya no compila en un callback de colección»RebaseCallContext["client"] ahora es RebaseCallbackClient: RebaseClient
sin data. En el lado del servidor, ese cliente es el singleton rebase, que no
tiene data desde 0.18, por lo que context.client.data.collection(…) compilaba
y luego lanzaba Cannot read properties of undefined (reading 'collection') en
cada llamada. Ahora, en su lugar, produce un error de compilación.
Qué cambiar: realice las consultas a través de context.data, el descriptor de
acceso que las consultas de un callback siempre debieron utilizar. Se ejecuta con los
privilegios de lo que haya disparado el callback, en la propia transacción de escritura.
La guía de callbacks explica a qué puede acceder cada
descriptor en el contexto.
afterSave: async ({ context }) => { await context.client.data.audit_logs.create({ action: "approved" }); await context.data.audit_logs.create({ action: "approved" });}grep -rn "client\.data\b" configcontext.client.dataAsAdmin sigue disponible para aquellos callbacks que necesiten ver
lo que un administrador puede ver. admin.browserCallbacks también cambia: la sintaxis
anterior se ejecutaba allí porque el cliente del panel incluye data, pero ahora también
deja de compilar. useRebaseContext().client en un componente de React conserva su data.
32. selectedEntities desaparece: una selección ahora son filas o una consulta
Sección titulada «32. selectedEntities desaparece: una selección ahora son filas o una consulta»Una vista de colección ahora puede seleccionar todas las filas que coincidan con su filtro,
no solo las filas que ha cargado, por lo que SelectionController ya no entrega un
Entity[]. selectionController.selection es una unión EntitySelection:
{ type: "entities", entities } para filas marcadas manualmente, o
{ type: "query", query, excluded, count? } para todas las filas que coincidan con una
consulta, la mayoría de las cuales nadie ha leído aún.
Qué cambiar: una acción personalizada que lea la selección la transforma en filas
mediante resolveSelection de @rebasepro/cms. Devuelve las filas marcadas de una sola
vez y lee la selección de una consulta página por página —con un callback de progreso
opcional—, lanzando un error en lugar de devolver un prefijo cuando la consulta coincide
con más de 20.000 filas.
const handlePublish = async () => { for (const entity of selectionController.selectedEntities) { const selected = await resolveSelection({ selection: selectionController.selection, accessor: data.collection(path) }); for (const entity of selected) { await data.collection(entity.path).update(entity.id, { status: "published" }); }};grep -rn "selectedEntities" config frontendEsto incluye tres cambios menores adicionales:
selectionController.selectedEntities.length→selectionController.selectedCount. Esundefined, nunca 0, cuando se seleccionan todas las filas que coinciden con una consulta y la colección no se puede contabilizar; contemple ese caso en la interfaz, no le asigne un valor por defecto.setSelectedEntities(prev => …)→setSelection(prev => …), que recibe y devuelve unEntitySelection.setSelectedEntities(rows)con un array sigue funcionando.- La comprobación para saber si “hay algo seleccionado” ahora es
selectionController.hasSelection.
isEntitySelected y toggleEntitySelection se mantienen sin cambios y son lo que debe
seguir utilizando una casilla de verificación por fila. El
ejemplo de acciones de colección
muestra el patrón completo.