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, }; };