diff --git a/components/Main.tsx b/components/Main.tsx
index 746416c..4133547 100644
--- a/components/Main.tsx
+++ b/components/Main.tsx
@@ -153,12 +153,21 @@ export default function Main() {
${
filters.length > 0
? `WHERE ${filters
- .map(
- (filter) =>
- `"${filter.field}" IN (${filter.values
+ .map((filter) => {
+ if (filter.dateExtract) {
+ const originalField = filter.field
+ .replace(`${filter.dateExtract}(`, "")
+ .replace(")", "");
+ return `CAST(EXTRACT(${
+ filter.dateExtract
+ } FROM CAST("${originalField}" AS DATE)) AS VARCHAR) IN (${filter.values
.map((value) => `'${value}'`)
- .join(", ")})`
- )
+ .join(", ")})`;
+ }
+ return `"${filter.field}" IN (${filter.values
+ .map((value) => `'${value}'`)
+ .join(", ")})`;
+ })
.join(" AND ")}`
: ""
}
@@ -282,14 +291,25 @@ export default function Main() {
${
filters.length > 0
? `WHERE ${filters
- .map(
- (filter) =>
- `TABLE${files.findIndex(
+ .map((filter) => {
+ if (filter.dateExtract) {
+ const originalField = filter.field
+ .replace(`${filter.dateExtract}(`, "")
+ .replace(")", "");
+ return `CAST(EXTRACT(${
+ filter.dateExtract
+ } FROM CAST(TABLE${files.findIndex(
(file) => file.name === filter.table
- )}."${filter.field}" IN (${filter.values
+ )}."${originalField}" AS DATE)) AS VARCHAR) IN (${filter.values
.map((value) => `'${value}'`)
- .join(", ")})`
- )
+ .join(", ")})`;
+ }
+ return `TABLE${files.findIndex(
+ (file) => file.name === filter.table
+ )}."${filter.field}" IN (${filter.values
+ .map((value) => `'${value}'`)
+ .join(", ")})`;
+ })
.join(" AND ")}`
: ""
}
diff --git a/stores/usePivotStore.ts b/stores/usePivotStore.ts
index d227931..4d09726 100644
--- a/stores/usePivotStore.ts
+++ b/stores/usePivotStore.ts
@@ -22,6 +22,7 @@ export type filterType = {
table: string;
field: string;
values: string[];
+ dateExtract?: "YEAR" | "MONTH" | "QUARTER";
};
export type PivotState = {
@@ -54,7 +55,12 @@ export type PivotState = {
clearAggregation: () => void;
clearFileAggregation: (table?: string) => void;
filters: filterType[];
- addFilter: (table: string, field: string, values: string[]) => void;
+ addFilter: (
+ table: string,
+ field: string,
+ values: string[],
+ dateExtract?: "YEAR" | "MONTH" | "QUARTER"
+ ) => void;
clearFilter: (table: string, field: string) => void;
clearFilters: () => void;
clearFileFilters: (table?: string) => void;
@@ -148,13 +154,17 @@ export const usePivotStore = create
((set) => ({
table && state.aggregation.table === table ? {} : state.aggregation,
})),
filters: [],
- addFilter: (table, field, values) => {
+ addFilter: (table, field, values, dateExtract) => {
set((state) => {
+ const fieldId = dateExtract ? `${dateExtract}(${field})` : field;
const filteredFilters = state.filters.filter(
- (f) => !(f.table === table && f.field === field)
+ (f) => !(f.table === table && f.field === fieldId)
);
return {
- filters: [...filteredFilters, { table, field, values }],
+ filters: [
+ ...filteredFilters,
+ { table, field: fieldId, values, dateExtract },
+ ],
};
});
},
From f83ce2486794bde434933233596772d4b3b3b6c0 Mon Sep 17 00:00:00 2001
From: Danilo Cristian da Silva Sousa
<73763541+danilo-css@users.noreply.github.com>
Date: Wed, 19 Feb 2025 11:22:14 -0300
Subject: [PATCH 4/4] Update FilterDialog.tsx
---
components/FilterDialog.tsx | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/components/FilterDialog.tsx b/components/FilterDialog.tsx
index 449e8cc..d63b2d6 100644
--- a/components/FilterDialog.tsx
+++ b/components/FilterDialog.tsx
@@ -89,7 +89,8 @@ export default function FilterDialog({
console.error("Error fetching filter options:", error);
toast({
title: "Error",
- description: "Failed to fetch filter values. Please try again.",
+ description:
+ "Failed to fetch filter values. Please make sure this is a proper date or text field.",
variant: "destructive",
});
} finally {