diff --git a/apps/console/src/components/requests/RequestDetails.tsx b/apps/console/src/components/requests/RequestDetails.tsx
index 6707ebb6c..101f41cb9 100644
--- a/apps/console/src/components/requests/RequestDetails.tsx
+++ b/apps/console/src/components/requests/RequestDetails.tsx
@@ -90,6 +90,19 @@ export const RequestDetails = (props: Props) => {
title: "Request ID",
description: report.id,
},
+ {
+ title: "Properties",
+ description: (
+
+ {report.properties && Object.keys(report.properties).map((key) => (
+
+ {key}:
+ {report.properties[key]}
+
+ ))}
+
+ ),
+ },
{
title: "Cache",
description: (
diff --git a/apps/console/src/components/requests/filters/FilterItem.tsx b/apps/console/src/components/requests/filters/FilterItem.tsx
index f0fddbe71..583909d71 100644
--- a/apps/console/src/components/requests/filters/FilterItem.tsx
+++ b/apps/console/src/components/requests/filters/FilterItem.tsx
@@ -38,8 +38,12 @@ export const FilterItem = ({
onRemoveFilter,
}: Props) => {
const translatedField = useMemo(() => {
- const found = FILTER_FIELDS_LIST.find((f) => f.value === field);
- return found?.label.toLocaleLowerCase();
+ if (field.includes(".")) {
+ const fieldParts = field.split(".");
+ return fieldParts.reduce((acc, part) => `${acc} ${part}`, "");
+ }
+
+ return field;
}, [field]);
return (
@@ -58,7 +62,7 @@ const formSchema = z.object({
field: z.string().min(1).max(100),
operator: z.nativeEnum(FilterOperator),
value: z.string().min(1).max(100),
- // property: z.string().min(1).max(100).optional(),
+ property: z.string().min(1).max(100).optional(),
});
export const AddFilterForm = ({
@@ -74,13 +78,16 @@ export const AddFilterForm = ({
field: "",
operator: FilterOperator.Eq,
value: "",
- // property: undefined,
+ property: undefined,
},
});
const onSubmit = (values: z.infer) => {
const filterValue: FilterInput = {
- field: values.field,
+ field:
+ values.field !== "property"
+ ? values.field
+ : `properties.${values.property}`,
operator: values.operator,
value: values.value,
};
@@ -89,8 +96,7 @@ export const AddFilterForm = ({
form.reset();
};
- const formValues = form.watch();
- const { field } = formValues;
+ const field = form.watch("field");
const selectedFilterField = FILTER_FIELDS_LIST.find(
(fieldInList) => fieldInList.value === field
);
@@ -131,7 +137,7 @@ export const AddFilterForm = ({
)}
/>
- {/* {form.watch("field") === "property" && (
+ {form.watch("field") === "property" && (
)}
/>
- )} */}
+ )}
{
+ await knex.schema.table("reports", (table) => {
+ table.string("properties");
+ });
+}
+
+
+export async function down(knex: Knex): Promise {
+ await knex.schema.table("reports", (table) => {
+ table.dropColumn("properties");
+ });
+}
+
diff --git a/libs/types/src/reports.ts b/libs/types/src/reports.ts
index c57f63d29..1ba2114f1 100644
--- a/libs/types/src/reports.ts
+++ b/libs/types/src/reports.ts
@@ -26,12 +26,14 @@ export interface ReportSchema {
cacheEnabled: boolean;
cacheHit: boolean;
promptId: string;
+ properties?: string;
}
export interface SerializedReport
- extends Omit {
+ extends Omit {
requestBody: Record;
responseBody: Record;
+ properties?: Record;
}
export const serializeReport = (doc: ReportSchema): SerializedReport => {
@@ -39,6 +41,7 @@ export const serializeReport = (doc: ReportSchema): SerializedReport => {
...doc,
requestBody: JSON.parse(doc.requestBody),
responseBody: JSON.parse(doc.responseBody),
+ properties: doc.properties ? JSON.parse(doc.properties) : null,
};
};
@@ -56,14 +59,18 @@ export interface PaginatedReportsSchema {
cacheEnabled: boolean;
cacheHit: boolean;
promptId: string;
+ properties?: string;
}
-export type SerializedPaginatedReport = PaginatedReportsSchema;
+export type SerializedPaginatedReport = Omit & {
+ properties?: Record;
+}
export const serializePaginatedReport = (
doc: PaginatedReportsSchema
): SerializedPaginatedReport => {
return {
...doc,
+ properties: doc.properties ? JSON.parse(doc.properties) : null,
};
};