mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-16 17:46:45 +00:00
feat(core): Refactor data table update row to use filters (no-changelog) (#19092)
This commit is contained in:
@@ -3,40 +3,9 @@ import { z } from 'zod';
|
||||
import { Z } from 'zod-class';
|
||||
|
||||
import { dataStoreColumnNameSchema } from '../../schemas/data-store.schema';
|
||||
import { dataTableFilterSchema } from '../../schemas/data-table-filter.schema';
|
||||
import { paginationSchema } from '../pagination/pagination.dto';
|
||||
|
||||
const FilterConditionSchema = z.union([
|
||||
z.literal('eq'),
|
||||
z.literal('neq'),
|
||||
z.literal('like'),
|
||||
z.literal('ilike'),
|
||||
z.literal('gt'),
|
||||
z.literal('gte'),
|
||||
z.literal('lt'),
|
||||
z.literal('lte'),
|
||||
]);
|
||||
export type ListDataStoreContentFilterConditionType = z.infer<typeof FilterConditionSchema>;
|
||||
|
||||
const filterRecord = z.object({
|
||||
columnName: dataStoreColumnNameSchema,
|
||||
condition: FilterConditionSchema.default('eq'),
|
||||
value: z.union([z.string(), z.number(), z.boolean(), z.date(), z.null()]),
|
||||
});
|
||||
|
||||
const chainedFilterSchema = z.union([z.literal('and'), z.literal('or')]);
|
||||
|
||||
export type ListDataStoreContentFilter = z.infer<typeof filterSchema>;
|
||||
|
||||
// ---------------------
|
||||
// Parameter Validators
|
||||
// ---------------------
|
||||
|
||||
const filterSchema = z.object({
|
||||
type: chainedFilterSchema.default('and'),
|
||||
filters: z.array(filterRecord).default([]),
|
||||
});
|
||||
|
||||
// Filter parameter validation
|
||||
const filterValidator = z
|
||||
.string()
|
||||
.optional()
|
||||
@@ -45,7 +14,7 @@ const filterValidator = z
|
||||
try {
|
||||
const parsed: unknown = jsonParse(val);
|
||||
try {
|
||||
return filterSchema.parse(parsed);
|
||||
return dataTableFilterSchema.parse(parsed);
|
||||
} catch (e) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
@@ -64,7 +33,6 @@ const filterValidator = z
|
||||
}
|
||||
});
|
||||
|
||||
// SortBy parameter validation
|
||||
const sortByValidator = z
|
||||
.string()
|
||||
.optional()
|
||||
|
||||
@@ -5,13 +5,14 @@ import {
|
||||
dataStoreColumnNameSchema,
|
||||
dataStoreColumnValueSchema,
|
||||
} from '../../schemas/data-store.schema';
|
||||
import { dataTableFilterSchema } from '../../schemas/data-table-filter.schema';
|
||||
|
||||
const updateDataStoreRowShape = {
|
||||
filter: z
|
||||
.record(dataStoreColumnNameSchema, dataStoreColumnValueSchema)
|
||||
.refine((obj) => Object.keys(obj).length > 0, {
|
||||
message: 'filter must not be empty',
|
||||
}),
|
||||
const updateFilterSchema = dataTableFilterSchema.refine((filter) => filter.filters.length > 0, {
|
||||
message: 'filter must not be empty',
|
||||
});
|
||||
|
||||
const updateDataTableRowShape = {
|
||||
filter: updateFilterSchema,
|
||||
data: z
|
||||
.record(dataStoreColumnNameSchema, dataStoreColumnValueSchema)
|
||||
.refine((obj) => Object.keys(obj).length > 0, {
|
||||
@@ -20,4 +21,4 @@ const updateDataStoreRowShape = {
|
||||
returnData: z.boolean().default(false),
|
||||
};
|
||||
|
||||
export class UpdateDataStoreRowDto extends Z.class(updateDataStoreRowShape) {}
|
||||
export class UpdateDataTableRowDto extends Z.class(updateDataTableRowShape) {}
|
||||
|
||||
@@ -85,14 +85,10 @@ export { OidcConfigDto } from './oidc/config.dto';
|
||||
|
||||
export { CreateDataStoreDto } from './data-store/create-data-store.dto';
|
||||
export { UpdateDataStoreDto } from './data-store/update-data-store.dto';
|
||||
export { UpdateDataStoreRowDto } from './data-store/update-data-store-row.dto';
|
||||
export { UpdateDataTableRowDto } from './data-store/update-data-store-row.dto';
|
||||
export { UpsertDataStoreRowsDto } from './data-store/upsert-data-store-rows.dto';
|
||||
export { ListDataStoreQueryDto } from './data-store/list-data-store-query.dto';
|
||||
export { ListDataStoreContentQueryDto } from './data-store/list-data-store-content-query.dto';
|
||||
export type {
|
||||
ListDataStoreContentFilter,
|
||||
ListDataStoreContentFilterConditionType,
|
||||
} from './data-store/list-data-store-content-query.dto';
|
||||
export { CreateDataStoreColumnDto } from './data-store/create-data-store-column.dto';
|
||||
export { AddDataStoreRowsDto } from './data-store/add-data-store-rows.dto';
|
||||
export { AddDataStoreColumnDto } from './data-store/add-data-store-column.dto';
|
||||
|
||||
@@ -56,3 +56,8 @@ export {
|
||||
type DataStoreListOptions,
|
||||
dateTimeSchema,
|
||||
} from './schemas/data-store.schema';
|
||||
|
||||
export type {
|
||||
DataTableFilter,
|
||||
DataTableFilterConditionType,
|
||||
} from './schemas/data-table-filter.schema';
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
import { z } from 'zod';
|
||||
|
||||
import { dataStoreColumnNameSchema } from './data-store.schema';
|
||||
|
||||
export const FilterConditionSchema = z.union([
|
||||
z.literal('eq'),
|
||||
z.literal('neq'),
|
||||
z.literal('like'),
|
||||
z.literal('ilike'),
|
||||
z.literal('gt'),
|
||||
z.literal('gte'),
|
||||
z.literal('lt'),
|
||||
z.literal('lte'),
|
||||
]);
|
||||
|
||||
export type DataTableFilterConditionType = z.infer<typeof FilterConditionSchema>;
|
||||
|
||||
export const dataTableFilterRecordSchema = z.object({
|
||||
columnName: dataStoreColumnNameSchema,
|
||||
condition: FilterConditionSchema.default('eq'),
|
||||
value: z.union([z.string(), z.number(), z.boolean(), z.date(), z.null()]),
|
||||
});
|
||||
|
||||
export const dataTableFilterTypeSchema = z.union([z.literal('and'), z.literal('or')]);
|
||||
|
||||
export const dataTableFilterSchema = z.object({
|
||||
type: dataTableFilterTypeSchema.default('and'),
|
||||
filters: z.array(dataTableFilterRecordSchema).default([]),
|
||||
});
|
||||
|
||||
export type DataTableFilter = z.infer<typeof dataTableFilterSchema>;
|
||||
Reference in New Issue
Block a user