@firstnoodle-ui/bui 0.0.66 → 0.0.67

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.
@@ -1,15 +1,5 @@
1
- import { Ref } from 'vue';
2
- import { LocationQuery } from 'vue-router';
3
- import { Filter, TypedSorting } from '../types';
4
- type FilterOptions<T> = {
5
- groupId: string;
6
- filters: Filter<T>[];
7
- defaultSorting: TypedSorting<T>;
8
- sortingMethod?: (sorting: TypedSorting<T>, items: T[]) => T[];
9
- items?: Ref<T[]>;
10
- remoteFilterMethod?: (sorting: TypedSorting<T>, filters: Filter<T>[]) => Promise<T[]>;
11
- };
12
- export declare const useFilters: <T>({ filters, groupId, items, remoteFilterMethod, defaultSorting, sortingMethod }: FilterOptions<T>) => {
1
+ import { Filter, FilterOptions, NestedKeyOf, TypedSorting } from '../types';
2
+ export declare const useFilters: <T, AllowedSortingFields extends NestedKeyOf<T>>({ groupId, filters, sorting, items, remoteFilterMethod }: FilterOptions<T, AllowedSortingFields>) => {
13
3
  activeFilters: import('vue').ComputedRef<{
14
4
  id: string;
15
5
  name: string;
@@ -21,14 +11,14 @@ export declare const useFilters: <T>({ filters, groupId, items, remoteFilterMeth
21
11
  value: import('..').FilterValue;
22
12
  execute: (value: import('..').FilterValue, operator: import('..').Operator, entity: T) => boolean;
23
13
  }[]>;
24
- activeSorting: Ref<{
14
+ activeSorting: import('vue').Ref<{
25
15
  direction: import('..').SortingDirection;
26
- field: import('vue').UnwrapRef<keyof T>;
27
- }, TypedSorting<T> | {
16
+ field: import('vue').UnwrapRef<AllowedSortingFields>;
17
+ }, TypedSorting<T, AllowedSortingFields> | {
28
18
  direction: import('..').SortingDirection;
29
- field: import('vue').UnwrapRef<keyof T>;
19
+ field: import('vue').UnwrapRef<AllowedSortingFields>;
30
20
  }>;
31
- availableFilters: Ref<{
21
+ availableFilters: import('vue').Ref<{
32
22
  id: string;
33
23
  name: string;
34
24
  component: string;
@@ -50,10 +40,8 @@ export declare const useFilters: <T>({ filters, groupId, items, remoteFilterMeth
50
40
  execute: (value: import('..').FilterValue, operator: import('..').Operator, entity: T) => boolean;
51
41
  }[]>;
52
42
  filteringActive: import('vue').ComputedRef<boolean>;
53
- filteredItems: Ref<import('@vue/reactivity').UnwrapRefSimple<T>[], T[] | import('@vue/reactivity').UnwrapRefSimple<T>[]>;
54
- loadingItems: Ref<boolean, boolean>;
43
+ filteredItems: import('vue').Ref<import('@vue/reactivity').UnwrapRefSimple<T>[], T[] | import('@vue/reactivity').UnwrapRefSimple<T>[]>;
44
+ loadingItems: import('vue').Ref<boolean, boolean>;
55
45
  applyFilters: () => Promise<void>;
56
46
  clearFilters: () => Promise<void>;
57
- updateFilters: (routeQuery: LocationQuery) => void;
58
47
  };
59
- export {};
@@ -1,9 +1,17 @@
1
+ import { Ref } from 'vue';
1
2
  export declare const sortingDirections: readonly ["asc", "desc"];
2
3
  export type SortingDirection = (typeof sortingDirections)[number];
3
4
  export declare const operators: readonly ["=", "!=", "<", "<=", ">", ">="];
4
5
  export type Operator = (typeof operators)[number];
5
6
  export declare const operatorLetters: readonly ["eq", "ne", "lt", "le", "gt", "ge"];
6
7
  export type OperatorLetters = (typeof operatorLetters)[number];
8
+ export type FilterOptions<T, AllowedSortingFields extends NestedKeyOf<T>> = {
9
+ groupId: string;
10
+ filters: Filter<T>[];
11
+ sorting: SortingConfig<T, AllowedSortingFields>;
12
+ items?: Ref<T[]>;
13
+ remoteFilterMethod?: (sorting: TypedSorting<T, AllowedSortingFields>, filters: Filter<T>[]) => Promise<T[]>;
14
+ };
7
15
  export type FilterValue = string | null;
8
16
  export type Filter<FilteredEntity> = {
9
17
  id: string;
@@ -29,9 +37,16 @@ export type ParsedSortingQuery = {
29
37
  direction: SortingDirection;
30
38
  field: string;
31
39
  };
32
- export type TypedSorting<T> = {
40
+ export type NestedKeyOf<T> = T extends object ? {
41
+ [K in keyof T & string]: T[K] extends object ? K | `${K}.${NestedKeyOf<T[K]>}` : K;
42
+ }[keyof T & string] : never;
43
+ export type TypedSorting<T, AllowedFields extends NestedKeyOf<T>> = {
33
44
  direction: SortingDirection;
34
- field: keyof T;
45
+ field: AllowedFields;
46
+ };
47
+ export type SortingConfig<T, AllowedSortingFields extends NestedKeyOf<T>> = {
48
+ default: TypedSorting<T, AllowedSortingFields>;
49
+ sortingMethod: (sorting: TypedSorting<T, AllowedSortingFields>, items: T[]) => T[];
35
50
  };
36
51
  export type ParsedFiltersAndSorting = {
37
52
  sorting: ParsedSortingQuery | undefined;
@@ -1,5 +1,5 @@
1
- import { TypedSorting } from '../types';
1
+ import { NestedKeyOf, TypedSorting } from '../types';
2
2
  /**
3
3
  * Sorts an array of objects by a given field, automatically detecting the field type (string, number, or date)
4
4
  */
5
- export declare function sortByField<T extends Record<string, any>>(sorting: TypedSorting<T>, items: T[]): T[];
5
+ export declare function sortByField<T extends Record<string, any>, AllowedSortingFields extends NestedKeyOf<T>>(sorting: TypedSorting<T, AllowedSortingFields>, items: T[]): T[];