@acvl/frontend-components 0.0.90 → 0.0.92

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
@@ -217,6 +217,7 @@ interface GridArgs {
217
217
  ignoreSort?: boolean;
218
218
  }
219
219
  interface GridColDefPropsOverrides extends GridBaseColDef {
220
+ /** Lo que el panel de filtros necesita de la columna. La edición en línea no lo lee. */
220
221
  extra?: {
221
222
  queryArgs?: ComoOpcionesProps;
222
223
  options?: {
@@ -224,6 +225,19 @@ interface GridColDefPropsOverrides extends GridBaseColDef {
224
225
  label: string;
225
226
  }[];
226
227
  max?: number;
228
+ /**
229
+ * La llave de query que escribe el filtro, en lugar de la que deriva el panel
230
+ * (`<campo>__in`, o `id__in` para `nombre`). La usa, por ejemplo, una columna que filtra
231
+ * eligiendo registros sin llamarse `nombre`: el número económico de un tracto.
232
+ */
233
+ filterField?: string;
234
+ /**
235
+ * El filtro con el que busca el selector del panel al teclear. Es el `searchField` de
236
+ * `ControlledAutocomplete` y, como ahí, por defecto es `nombre__icontains`. Un modelo sin
237
+ * `nombre`, o cuyo filterset no lo declara, tiene que dar el suyo (por ejemplo `search`):
238
+ * django-filter ignora en silencio el parámetro que no conoce, y el tecleo no filtraría.
239
+ */
240
+ searchField?: string;
227
241
  };
228
242
  input?: any;
229
243
  filterName?: string;
@@ -2246,6 +2260,11 @@ interface FieldProps {
2246
2260
  * (`renderEditCellWithErrorTooltip` con `mutationErrors`); la ficha, sobre el campo. La columna
2247
2261
  * `codigo` del listado no es filtrable, así que el backend no tiene que atender `codigo__in`.
2248
2262
  *
2263
+ * **Los filtros del recurso aceptan `id__in`.** El listado filtra la columna `nombre` eligiendo
2264
+ * registros, y el panel de filtros manda los ids elegidos como `id__in` —en django-filter,
2265
+ * `"id": ["exact", "in"]`—. Donde no lo atiende, django-filter ignora el parámetro en silencio:
2266
+ * el filtro se ofrece y no hace nada.
2267
+ *
2249
2268
  * Y lo que ya pide cualquier pantalla de la librería:
2250
2269
  *
2251
2270
  * - El listado, paginado con `results` y `count`.
@@ -2257,13 +2276,19 @@ interface FieldProps {
2257
2276
  * - Guardar (POST o PATCH) contesta `{ detail, list }`: `manualCacheRefresh` copia `detail` en la
2258
2277
  * caché del detalle y `list` en el renglón del listado, sin volver a pedirlos.
2259
2278
  *
2260
- * Y lo que necesita quien lo referencie, aunque ni el listado ni la ficha lo consultan:
2279
+ * Y `como_opciones`, con `{ value, label }` y el id como `value`. De ahí saca sus opciones
2280
+ * cualquier selector que liste el catálogo (`ControlledAutocomplete` con
2281
+ * `queryArgs: { endpoint }`), y ya no sólo los de otros modelos:
2261
2282
  *
2262
- * - `como_opciones`, con `{ value, label }`. De ahí saca sus opciones cualquier selector que
2263
- * liste el catálogo (`ControlledAutocomplete` con `queryArgs: { endpoint }`): el campo con el
2264
- * que el formulario de otro modelo lo elige, o la columna que apunta a él en el panel de
2265
- * filtros de otra grilla. Sin esto el catálogo se administra, pero no se puede elegir desde
2266
- * ningún lado.
2283
+ * - **el propio listado**, para su filtro por nombre: la columna `nombre` lleva `queryArgs` con
2284
+ * este `endpoint`, y lo que el usuario elige ahí se manda como `id__in` —por eso el `value`
2285
+ * tiene que ser el id—;
2286
+ * - el campo con el que el formulario de otro modelo lo elige, o la columna que apunta a él en el
2287
+ * panel de filtros de otra grilla.
2288
+ *
2289
+ * Al teclear, el selector busca con `nombre__icontains` (su `searchField` por omisión), así que
2290
+ * los filtros del recurso lo aceptan también. Sin `como_opciones` el filtro por nombre del
2291
+ * listado sale vacío y el catálogo no se puede elegir desde ningún otro lado.
2267
2292
  */
2268
2293
  interface DefinicionDeCatalogo {
2269
2294
  /**
@@ -2368,6 +2393,12 @@ declare const crearFabricaDeCatalogos: <BaseQuery extends BaseQueryFn<string | F
2368
2393
  * Un catálogo puede omitir alguna de las de la base con `ocultarColumnas` — quitar, nunca cambiar
2369
2394
  * lo que hacen; ver `DefinicionDeCatalogo`.
2370
2395
  *
2396
+ * `nombre` **se filtra eligiendo registros**. El panel de filtros convierte la columna `nombre`
2397
+ * en `id__in` (`filterFieldFor`): la lista que se manda son ids, no nombres. Por eso lleva
2398
+ * `extra.queryArgs` con el endpoint del catálogo: el selector saca sus opciones del
2399
+ * `como_opciones` de ese mismo recurso, cuyo `value` es el id. Sin `queryArgs` el selector
2400
+ * aparecía vacío. `extra` sólo lo lee el panel de filtros; la edición en línea no lo toca.
2401
+ *
2371
2402
  * `codigo` **no es filtrable**. En el panel de filtros una columna de texto es un selector
2372
2403
  * múltiple que filtra por `<campo>__in`, y el contrato no le pide al backend `codigo__in`: donde
2373
2404
  * no lo atiende —django-filter ignora en silencio el parámetro que no conoce— el filtro se
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acvl/frontend-components",
3
- "version": "0.0.90",
3
+ "version": "0.0.92",
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",