fix: is Empty and is Not empty operators (#17317)
This commit is contained in:
1 parent
1c8cf62582
commit
4c6f242345
2 files changed
+54
-1
No files matched your search
@@ -15,6 +15,7 @@ describe("queryValueValidationSchema", () => {
|
||||
field: "name",
|
||||
operator: "equal",
|
||||
value: ["John"],
|
||||
valueSrc: ["value"],
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -48,6 +49,7 @@ describe("queryValueValidationSchema", () => {
|
||||
field: "name",
|
||||
operator: "equal",
|
||||
value: [],
|
||||
valueSrc: ["value"],
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -84,6 +86,7 @@ describe("queryValueValidationSchema", () => {
|
||||
field: "name",
|
||||
operator: "equal",
|
||||
value: [],
|
||||
valueSrc: ["value"],
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -110,6 +113,7 @@ describe("queryValueValidationSchema", () => {
|
||||
field: "name",
|
||||
operator: "equal",
|
||||
value: [[]],
|
||||
valueSrc: ["value"],
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -136,6 +140,7 @@ describe("queryValueValidationSchema", () => {
|
||||
field: "name",
|
||||
operator: "equal",
|
||||
value: [undefined, undefined],
|
||||
valueSrc: ["value"],
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -162,6 +167,7 @@ describe("queryValueValidationSchema", () => {
|
||||
field: "name",
|
||||
operator: "equal",
|
||||
value: [null],
|
||||
valueSrc: ["value"],
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -183,6 +189,7 @@ describe("queryValueValidationSchema", () => {
|
||||
field: "name",
|
||||
operator: "equal",
|
||||
value: [""],
|
||||
valueSrc: ["value"],
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -209,4 +216,42 @@ describe("queryValueValidationSchema", () => {
|
||||
const result2 = queryValueSaveValidationSchema.safeParse(undefined);
|
||||
expect(result2.success).toBe(true);
|
||||
});
|
||||
|
||||
it("should allow fields with no value if valueSrc is empty", () => {
|
||||
const result = queryValueSaveValidationSchema.safeParse({
|
||||
id: "7",
|
||||
type: "group",
|
||||
children1: {
|
||||
rule1: {
|
||||
type: "rule",
|
||||
properties: {
|
||||
field: "name",
|
||||
operator: "is_empty",
|
||||
value: [],
|
||||
valueSrc: [],
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
expect(result.success).toBe(true);
|
||||
});
|
||||
|
||||
it("should not allow fields with no value if valueSrc is not empty", () => {
|
||||
const result = queryValueSaveValidationSchema.safeParse({
|
||||
id: "7",
|
||||
type: "group",
|
||||
children1: {
|
||||
rule1: {
|
||||
type: "rule",
|
||||
properties: {
|
||||
field: "name",
|
||||
operator: "is_empty",
|
||||
value: [],
|
||||
valueSrc: ["value"],
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
expect(result.success).toBe(false);
|
||||
});
|
||||
});
|
||||
@@ -64,6 +64,7 @@ export enum RouteActionType {
|
||||
export const routeActionTypeSchema = z.nativeEnum(RouteActionType);
|
||||
/**
|
||||
* Stricter schema for validating before saving to DB
|
||||
* It doesn't decide what will be saved, it is just to validate the data before saving
|
||||
*/
|
||||
export const queryValueSaveValidationSchema = queryValueSchema
|
||||
.omit({ children1: true })
|
||||
@@ -78,6 +79,7 @@ export const queryValueSaveValidationSchema = queryValueSchema
|
||||
field: z.any().optional(),
|
||||
operator: z.any().optional(),
|
||||
value: z.any().optional(),
|
||||
valueSrc: z.any().optional(),
|
||||
})
|
||||
.optional(),
|
||||
})
|
||||
@@ -94,7 +96,13 @@ export const queryValueSaveValidationSchema = queryValueSchema
|
||||
if (!isObject(rule.properties)) return;
|
||||
|
||||
const value = rule.properties.value || [];
|
||||
if (!(value instanceof Array)) {
|
||||
const valueSrc = rule.properties.valueSrc;
|
||||
if (!(value instanceof Array) || !(valueSrc instanceof Array)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!valueSrc.length) {
|
||||
// If valueSrc is empty, value could be empty for operators like is_empty, is_not_empty
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user