Files
calendar/packages/app-store/routing-forms/lib/jsonLogic.ts
T
654a204878 feat: Attribute based routing from Team Routing Form to Team Event(with assigned users matching the attribute logic) (#16823)
* Initial commit

* routingForm to Booking a particular team member working

* Happy path working

* Fixes

* Fix router query params forwarding

* Add basicConfig within app

* Tests

* More tests

* Update packages/app-store/routing-forms/components/SingleForm.tsx

Co-authored-by: Omar López <zomars@me.com>

---------

Co-authored-by: Omar López <zomars@me.com>
Co-authored-by: Benny Joo <sldisek783@gmail.com>
2024-10-08 21:12:32 +05:30

54 lines
1.4 KiB
TypeScript

/* eslint-disable @typescript-eslint/no-explicit-any */
import jsonLogic from "json-logic-js";
// converts input to lowercase if string
function normalize<T extends string | string[]>(input: T): T {
if (typeof input === "string") {
return input.toLowerCase() as T;
}
if (input instanceof Array) {
return input.map((item) => {
if (typeof item === "string") {
return item.toLowerCase();
}
// if array item is not a string, return it as is
return item;
}) as T;
}
return input;
}
/**
* Single Select equals and not equals uses it
* Short Text equals and not equals uses it
*/
jsonLogic.add_operation("==", function (a: any, b: any) {
return normalize(a) == normalize(b);
});
jsonLogic.add_operation("===", function (a: any, b: any) {
return normalize(a) === normalize(b);
});
jsonLogic.add_operation("!==", function (a: any, b: any) {
return normalize(a) !== normalize(b);
});
jsonLogic.add_operation("!=", function (a: any, b: any) {
return normalize(a) != normalize(b);
});
/**
* Multiselect "equals" and "not equals" uses it
* Singleselect "any in" and "not in" uses it
* Long Text/Short Text/Email/Phone "contains" also uses it.
*/
jsonLogic.add_operation("in", function (a: string, b: string | string[]) {
const first = normalize(a);
const second = normalize(b);
if (!second) return false;
return second.indexOf(first) !== -1;
});
export default jsonLogic;