🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more →

@vaadin/hilla-react-crud

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@vaadin/hilla-react-crud - npm Package Compare versions

Comparing version

to
24.7.0-alpha15

@@ -58,2 +58,11 @@ import type { AbstractModel, DetachedModelConstructor, Value } from '@vaadin/hilla-lit-form';

/**
* Determines whether to display the "New" button in the toolbar. By default,
* this is set to `true`, meaning the button will be shown.
*
* NOTE: This setting only hides the button; it does not prevent new items
* from being sent to the service. Ensure your backend Java service is
* properly secured to prevent unauthorized creation of new items.
*/
newButton?: boolean;
/**
* Props to pass to the form. See the `AutoForm` component for details.

@@ -82,3 +91,3 @@ */

*/
export declare function AutoCrud<TModel extends AbstractModel>({ service, model, itemIdProperty, formProps, gridProps, style, id, className, }: AutoCrudProps<TModel>): JSX.Element;
export declare function AutoCrud<TModel extends AbstractModel>({ service, model, itemIdProperty, newButton, formProps, gridProps, style, id, className, }: AutoCrudProps<TModel>): JSX.Element;
//# sourceMappingURL=autocrud.d.ts.map

@@ -20,2 +20,3 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";

itemIdProperty,
newButton,
formProps,

@@ -57,3 +58,3 @@ gridProps,

),
/* @__PURE__ */ jsx("div", { className: "auto-crud-toolbar", children: /* @__PURE__ */ jsx(Button, { theme: "primary", onClick: () => setItem(emptyItem), children: "+ New" }) })
newButton !== false && /* @__PURE__ */ jsx("div", { className: "auto-crud-toolbar", children: /* @__PURE__ */ jsx(Button, { theme: "primary", onClick: () => setItem(emptyItem), children: "+ New" }) })
] });

@@ -60,0 +61,0 @@ const autoForm = /* @__PURE__ */ jsx(

@@ -1,5 +0,7 @@

import type { GridDataProviderCallback, GridDataProviderParams } from '@vaadin/react-components/Grid';
import type { GridDataProvider } from '@vaadin/react-components/Grid';
import type { ComboBoxDataProvider, ComboBoxDataProviderCallback, ComboBoxDataProviderParams } from '@vaadin/react-components';
import type { GridDataProvider, GridDataProviderCallback, GridDataProviderParams } from '@vaadin/react-components/Grid';
import { type DependencyList } from 'react';
import type { CountService, ListService } from './crud';
import type FilterUnion from './types/com/vaadin/hilla/crud/filter/FilterUnion';
import type Pageable from './types/com/vaadin/hilla/mappedtypes/Pageable';
import type Sort from './types/com/vaadin/hilla/mappedtypes/Sort';

@@ -44,2 +46,15 @@ type MaybeCountService<TItem> = Partial<CountService<TItem>>;

}
export declare abstract class AbstractComboBoxDataProvider<TItem> {
protected readonly list: ComboBoxFetchMethod<TItem>;
protected readonly loadTotalCount?: boolean;
protected sort: Sort | undefined;
protected totalCount: number | undefined;
protected filteredCount: number | undefined;
constructor(list: ComboBoxFetchMethod<TItem>, sort: Sort | undefined);
reset(): void;
load(params: ComboBoxDataProviderParams, callback: ComboBoxDataProviderCallback<TItem>): void;
protected fetchPage(params: ComboBoxDataProviderParams): Promise<DataPage<TItem>>;
protected abstract fetchTotalCount(page: DataPage<TItem>): Promise<number | undefined> | number | undefined;
protected abstract fetchFilteredCount(page: DataPage<TItem>): Promise<number | undefined> | number | undefined;
}
export declare class InfiniteDataProvider<TItem> extends DataProvider<TItem> {

@@ -49,2 +64,6 @@ protected fetchTotalCount(): undefined;

}
export declare class InfiniteComboBoxDataProvider<TItem> extends AbstractComboBoxDataProvider<TItem> {
protected fetchTotalCount(): undefined;
protected fetchFilteredCount(page: DataPage<TItem>): number | undefined;
}
export declare class FixedSizeDataProvider<TItem> extends DataProvider<TItem> {

@@ -62,3 +81,30 @@ service: ListAndCountService<TItem>;

export declare function useDataProvider<TItem>(service: ListAndMaybeCountService<TItem>, filter?: FilterUnion): UseDataProviderResult<TItem>;
export type UseGridDataProviderResult<TItem> = GridDataProvider<TItem> & {
refresh(): void;
};
export type GridFetchMethod<TItem> = (pageable: Pageable) => Promise<TItem[]>;
/**
* Creates a data provider for a grid component that fetches data using the provided fetch callback.
*
* @param fetch - the callback that fetches the data for the grid. The callback should return a promise that resolves to an array of items.
* @param dependencies - A list of all reactive values referenced inside of the fetch callback. A change to any of the listed values will cause the grid to refresh its data.
* @returns a data provider that can be assigned to a <Grid> component usings its dataProvider property and additionally contains a refresh method that can be called to force a reload of the grid data.
*/
export declare function useGridDataProvider<TItem>(fetch: GridFetchMethod<TItem>, dependencies?: DependencyList): UseGridDataProviderResult<TItem>;
export type UseComboBoxDataProviderResult<TItem> = ComboBoxDataProvider<TItem> & {
refresh(): void;
};
export type ComboBoxFetchMethod<TItem> = (pageable: Pageable, filterString: string) => Promise<TItem[]>;
type ComboboxDataProviderOptions = {
sort?: Sort;
};
/**
* Creates a data provider for a combo box component that fetches data using the provided fetch callback.
*
* @param fetch - the method that fetches the data for the grid. The method should return a promise that resolves to an array of items.
* @param dependencies - A list of all reactive values referenced inside of the fetch callback. A change to any of the listed values will cause the combo box to refresh its data.
* @returns a data provider that can be assigned to a <ComboBox> component usings its dataProvider property and additionally contains a refresh method that can be called to force a reload of the combo box data.
*/
export declare function useComboBoxDataProvider<TItem>(fetch: ComboBoxFetchMethod<TItem>, options?: ComboboxDataProviderOptions, dependencies?: DependencyList): UseComboBoxDataProviderResult<TItem>;
export {};
//# sourceMappingURL=data-provider.d.ts.map

@@ -66,2 +66,53 @@ import { useMemo, useState } from "react";

}
class AbstractComboBoxDataProvider {
list;
loadTotalCount;
sort;
totalCount;
filteredCount;
constructor(list, sort) {
this.list = list;
this.sort = sort;
}
reset() {
this.totalCount = void 0;
this.filteredCount = void 0;
}
load(params, callback) {
this.fetchPage(params).then(async (page) => {
this.filteredCount = await this.fetchFilteredCount(page);
if (this.loadTotalCount) {
this.totalCount = await this.fetchTotalCount(page);
}
callback(page.items, this.filteredCount);
}).catch((error) => {
throw error;
});
}
async fetchPage(params) {
const pageNumber = params.page;
const { pageSize } = params;
const pageRequest = {
pageNumber,
pageSize,
sort: this.sort ?? { orders: [] }
};
const items = await this.list(pageRequest, params.filter);
return { items, pageRequest };
}
}
function determineInfiniteScrollingSize(page, lastKnownSize) {
const { items, pageRequest } = page;
const { pageNumber, pageSize } = pageRequest;
let infiniteScrollingSize;
if (items.length === pageSize) {
infiniteScrollingSize = (pageNumber + 1) * pageSize + 1;
if (lastKnownSize !== void 0 && infiniteScrollingSize < lastKnownSize) {
infiniteScrollingSize = lastKnownSize;
}
} else {
infiniteScrollingSize = pageNumber * pageSize + items.length;
}
return infiniteScrollingSize;
}
class InfiniteDataProvider extends DataProvider {

@@ -74,16 +125,15 @@ // cannot be static, otherwise it does not implement superclass

fetchFilteredCount(page) {
const { items, pageRequest } = page;
const { pageNumber, pageSize } = pageRequest;
let infiniteScrollingSize;
if (items.length === pageSize) {
infiniteScrollingSize = (pageNumber + 1) * pageSize + 1;
if (this.filteredCount !== void 0 && infiniteScrollingSize < this.filteredCount) {
infiniteScrollingSize = this.filteredCount;
}
} else {
infiniteScrollingSize = pageNumber * pageSize + items.length;
}
return infiniteScrollingSize;
return determineInfiniteScrollingSize(page, this.filteredCount);
}
}
class InfiniteComboBoxDataProvider extends AbstractComboBoxDataProvider {
// cannot be static, otherwise it does not implement superclass
// eslint-disable-next-line @typescript-eslint/class-methods-use-this
fetchTotalCount() {
return void 0;
}
fetchFilteredCount(page) {
return determineInfiniteScrollingSize(page, this.filteredCount);
}
}
class FixedSizeDataProvider extends DataProvider {

@@ -129,10 +179,45 @@ constructor(service, options = {}) {

}
function useGridDataProvider(fetch, dependencies) {
const result = useDataProvider(
useMemo(
() => ({
list: async (pageable) => fetch(pageable)
}),
dependencies ?? []
)
);
const dataProvider = result.dataProvider;
dataProvider.refresh = result.refresh;
return dataProvider;
}
function createComboBoxDataProvider(list, sort) {
return new InfiniteComboBoxDataProvider(list, sort);
}
function useComboBoxDataProvider(fetch, options, dependencies) {
const [refreshCounter, setRefreshCounter] = useState(0);
const dataProvider = useMemo(
() => createComboBoxDataProvider(fetch, options?.sort),
[options?.sort, ...dependencies ?? []]
);
return useMemo(() => {
const dataProviderWithRefresh = (...args) => dataProvider.load(...args);
dataProviderWithRefresh.refresh = () => {
dataProvider.reset();
setRefreshCounter(refreshCounter + 1);
};
return dataProviderWithRefresh;
}, [dataProvider, refreshCounter]);
}
export {
AbstractComboBoxDataProvider,
DataProvider,
FixedSizeDataProvider,
InfiniteComboBoxDataProvider,
InfiniteDataProvider,
createDataProvider,
isCountService,
useDataProvider
useComboBoxDataProvider,
useDataProvider,
useGridDataProvider
};
//# sourceMappingURL=data-provider.js.map

@@ -5,3 +5,3 @@ export * from './autogrid-feature.js';

export * from './autocrud-feature.js';
export { useDataProvider } from './data-provider.js';
export { useDataProvider, useGridDataProvider, useComboBoxDataProvider } from './data-provider.js';
//# sourceMappingURL=index.d.ts.map

@@ -5,3 +5,3 @@ function __REGISTER__(feature, vaadinObj = window.Vaadin ??= {}) {

is: feature ? `${"@vaadin/hilla-react-crud"}/${feature}` : "@vaadin/hilla-react-crud",
version: "24.7.0-alpha14"
version: "24.7.0-alpha15"
});

@@ -12,7 +12,9 @@ }

export * from "./autocrud-feature.js";
import { useDataProvider } from "./data-provider.js";
import { useDataProvider, useGridDataProvider, useComboBoxDataProvider } from "./data-provider.js";
__REGISTER__();
export {
useDataProvider
useComboBoxDataProvider,
useDataProvider,
useGridDataProvider
};
//# sourceMappingURL=index.js.map
{
"name": "@vaadin/hilla-react-crud",
"version": "24.7.0-alpha14",
"version": "24.7.0-alpha15",
"description": "Hilla CRUD utils for React",

@@ -59,6 +59,6 @@ "main": "index.js",

"dependencies": {
"@vaadin/hilla-frontend": "24.7.0-alpha14",
"@vaadin/hilla-lit-form": "24.7.0-alpha14",
"@vaadin/hilla-react-form": "24.7.0-alpha14",
"@vaadin/react-components": "24.7.0-alpha9"
"@vaadin/hilla-frontend": "24.7.0-alpha15",
"@vaadin/hilla-lit-form": "24.7.0-alpha15",
"@vaadin/hilla-react-form": "24.7.0-alpha15",
"@vaadin/react-components": "24.7.0-alpha10"
},

@@ -65,0 +65,0 @@ "peerDependencies": {

@@ -5,3 +5,3 @@ function __REGISTER__(feature, vaadinObj = window.Vaadin ??= {}) {

is: feature ? `${"@vaadin/hilla-react-crud"}/${feature}` : "@vaadin/hilla-react-crud",
version: "24.7.0-alpha14"
version: "24.7.0-alpha15"
});

@@ -8,0 +8,0 @@ }

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet