@acvl/frontend-components 0.0.89 → 0.0.91

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -2243,11 +2243,13 @@ interface FieldProps {
2243
2243
  *
2244
2244
  * **La unicidad de `codigo` la garantiza el backend, no la grilla.** Un choque vuelve como un
2245
2245
  * 400 con el error en `codigo`, y la edición en línea lo pinta sobre la celda
2246
- * (`renderEditCellWithErrorTooltip` con `mutationErrors`); la ficha, sobre el campo. El
2247
- * `extra.queryArgs.endpoint` que lleva la columna `codigo` no valida nada: es lo que hace que el
2248
- * panel de filtros la ofrezca como selector múltiple, con las opciones que sirve el
2249
- * `como_opciones` de ese mismo endpoint, y filtre por `codigo__in`. Por eso el recurso también
2250
- * tiene que servir `como_opciones`.
2246
+ * (`renderEditCellWithErrorTooltip` con `mutationErrors`); la ficha, sobre el campo. La columna
2247
+ * `codigo` del listado no es filtrable, así que el backend no tiene que atender `codigo__in`.
2248
+ *
2249
+ * **Los filtros del recurso aceptan `id__in`.** El listado filtra la columna `nombre` eligiendo
2250
+ * registros, y el panel de filtros manda los ids elegidos como `id__in` —en django-filter,
2251
+ * `"id": ["exact", "in"]`—. Donde no lo atiende, django-filter ignora el parámetro en silencio:
2252
+ * el filtro se ofrece y no hace nada.
2251
2253
  *
2252
2254
  * Y lo que ya pide cualquier pantalla de la librería:
2253
2255
  *
@@ -2259,6 +2261,20 @@ interface FieldProps {
2259
2261
  * borrado que el servidor va a rechazar.
2260
2262
  * - Guardar (POST o PATCH) contesta `{ detail, list }`: `manualCacheRefresh` copia `detail` en la
2261
2263
  * caché del detalle y `list` en el renglón del listado, sin volver a pedirlos.
2264
+ *
2265
+ * Y `como_opciones`, con `{ value, label }` y el id como `value`. De ahí saca sus opciones
2266
+ * cualquier selector que liste el catálogo (`ControlledAutocomplete` con
2267
+ * `queryArgs: { endpoint }`), y ya no sólo los de otros modelos:
2268
+ *
2269
+ * - **el propio listado**, para su filtro por nombre: la columna `nombre` lleva `queryArgs` con
2270
+ * este `endpoint`, y lo que el usuario elige ahí se manda como `id__in` —por eso el `value`
2271
+ * tiene que ser el id—;
2272
+ * - el campo con el que el formulario de otro modelo lo elige, o la columna que apunta a él en el
2273
+ * panel de filtros de otra grilla.
2274
+ *
2275
+ * Al teclear, el selector busca con `nombre__icontains` (su `searchField` por omisión), así que
2276
+ * los filtros del recurso lo aceptan también. Sin `como_opciones` el filtro por nombre del
2277
+ * listado sale vacío y el catálogo no se puede elegir desde ningún otro lado.
2262
2278
  */
2263
2279
  interface DefinicionDeCatalogo {
2264
2280
  /**
@@ -2363,10 +2379,17 @@ declare const crearFabricaDeCatalogos: <BaseQuery extends BaseQueryFn<string | F
2363
2379
  * Un catálogo puede omitir alguna de las de la base con `ocultarColumnas` — quitar, nunca cambiar
2364
2380
  * lo que hacen; ver `DefinicionDeCatalogo`.
2365
2381
  *
2366
- * `codigo` lleva `extra.queryArgs.endpoint`, que es lo que hace que el panel de filtros la
2367
- * ofrezca como selector múltiple con las opciones del propio recurso (`como_opciones`). **No
2368
- * valida la unicidad**: eso lo hace el backend al guardar, y el choque vuelve como el error que
2369
- * `renderEditCellWithErrorTooltip` pinta sobre la celda.
2382
+ * `nombre` **se filtra eligiendo registros**. El panel de filtros convierte la columna `nombre`
2383
+ * en `id__in` (`filterFieldFor`): la lista que se manda son ids, no nombres. Por eso lleva
2384
+ * `extra.queryArgs` con el endpoint del catálogo: el selector saca sus opciones del
2385
+ * `como_opciones` de ese mismo recurso, cuyo `value` es el id. Sin `queryArgs` el selector
2386
+ * aparecía vacío. `extra` sólo lo lee el panel de filtros; la edición en línea no lo toca.
2387
+ *
2388
+ * `codigo` **no es filtrable**. En el panel de filtros una columna de texto es un selector
2389
+ * múltiple que filtra por `<campo>__in`, y el contrato no le pide al backend `codigo__in`: donde
2390
+ * no lo atiende —django-filter ignora en silencio el parámetro que no conoce— el filtro se
2391
+ * ofrecía y no hacía nada. Tampoco valida la unicidad: eso lo hace el backend al guardar, y el
2392
+ * choque vuelve como el error que `renderEditCellWithErrorTooltip` pinta sobre la celda.
2370
2393
  */
2371
2394
  declare const columnasDeCatalogo: (definicion: DefinicionDeCatalogo) => (props?: EditGridColumnsProps) => GridColDefPropsOverrides[];
2372
2395
 
@@ -2672,6 +2695,9 @@ interface CatalogoListProps {
2672
2695
  * una pestaña hay que pasarla explícitamente: ahí `useLocation()` devuelve la ruta de la
2673
2696
  * página contenedora, así que sin esto los renglones navegarían al detalle de la página que
2674
2697
  * contiene las pestañas y todas ellas compartirían una sola llave de persistencia.
2698
+ *
2699
+ * No decide contra qué recurso se exporta: eso es siempre `definicion.endpoint` (ver
2700
+ * `CatalogoList`).
2675
2701
  */
2676
2702
  pathname?: string;
2677
2703
  /**
@@ -2700,6 +2726,14 @@ interface CatalogoListProps {
2700
2726
  *
2701
2727
  * El alta siempre está —sujeta al permiso de agregar—; la importación CSV sólo si se pasa
2702
2728
  * `csvUpload`.
2729
+ *
2730
+ * **La exportación CSV va siempre contra `definicion.endpoint`.** `ExportCSV` exporta contra el
2731
+ * `csvProps.endpoint` que reciba y, sin él, contra la ruta de la página (`useLocation()`) —a
2732
+ * propósito no contra el `pathname` de la grilla, que también es llave de persistencia y no tiene
2733
+ * por qué ser una URL—. Pero la ruta es de la página, no del recurso: dentro de una pestaña es la
2734
+ * de la página que contiene las pestañas, y la descarga pedía algo que no es el catálogo. El
2735
+ * endpoint es el recurso esté donde esté montado el listado, así que se pasa siempre, igual como
2736
+ * página propia que como pestaña. Lo arma `dataGridPropsDeCatalogo`.
2703
2737
  */
2704
2738
  declare const CatalogoList: ({ definicion, api, pathname, csvUpload }: CatalogoListProps) => react_jsx_runtime.JSX.Element;
2705
2739
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acvl/frontend-components",
3
- "version": "0.0.89",
3
+ "version": "0.0.91",
4
4
  "description": "Component library for ACV frontend projects.",
5
5
  "homepage": "https://github.com/ACV-Logistics/acv-frontend-components#readme",
6
6
  "access": "public",