Add fulltext search to measures page
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
This commit is contained in:
@@ -13,9 +13,11 @@ import {
|
|||||||
DropdownItem,
|
DropdownItem,
|
||||||
FileButton,
|
FileButton,
|
||||||
IconFolderUpload,
|
IconFolderUpload,
|
||||||
|
IconMagnifyingGlass,
|
||||||
IconPencil,
|
IconPencil,
|
||||||
IconPlusLarge,
|
IconPlusLarge,
|
||||||
IconTrashCan,
|
IconTrashCan,
|
||||||
|
Input,
|
||||||
Option,
|
Option,
|
||||||
PageHeader,
|
PageHeader,
|
||||||
Select,
|
Select,
|
||||||
@@ -99,6 +101,7 @@ const measuresPageFragment = graphql`
|
|||||||
@argumentDefinitions(
|
@argumentDefinitions(
|
||||||
first: { type: "Int", defaultValue: 20 }
|
first: { type: "Int", defaultValue: 20 }
|
||||||
after: { type: "CursorKey" }
|
after: { type: "CursorKey" }
|
||||||
|
query: { type: "String", defaultValue: null }
|
||||||
state: { type: "MeasureState", defaultValue: null }
|
state: { type: "MeasureState", defaultValue: null }
|
||||||
category: { type: "String", defaultValue: null }
|
category: { type: "String", defaultValue: null }
|
||||||
) {
|
) {
|
||||||
@@ -106,7 +109,7 @@ const measuresPageFragment = graphql`
|
|||||||
measures(
|
measures(
|
||||||
first: $first
|
first: $first
|
||||||
after: $after
|
after: $after
|
||||||
filter: { state: $state, category: $category }
|
filter: { query: $query, state: $state, category: $category }
|
||||||
)
|
)
|
||||||
@connection(
|
@connection(
|
||||||
key: "MeasuresPage_measures"
|
key: "MeasuresPage_measures"
|
||||||
@@ -162,6 +165,7 @@ export default function MeasuresPage({ queryRef }: MeasuresPageProps) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const [isPending, startTransition] = useTransition();
|
const [isPending, startTransition] = useTransition();
|
||||||
|
const [queryFilter, setQueryFilter] = useState<string | null>(null);
|
||||||
const [stateFilter, setStateFilter] = useState<MeasureState | null>(null);
|
const [stateFilter, setStateFilter] = useState<MeasureState | null>(null);
|
||||||
const [categoryFilter, setCategoryFilter] = useState<string | null>(null);
|
const [categoryFilter, setCategoryFilter] = useState<string | null>(null);
|
||||||
|
|
||||||
@@ -175,6 +179,7 @@ export default function MeasuresPage({ queryRef }: MeasuresPageProps) {
|
|||||||
startTransition(() => {
|
startTransition(() => {
|
||||||
refetch(
|
refetch(
|
||||||
{
|
{
|
||||||
|
query: queryFilter,
|
||||||
state: stateFilter,
|
state: stateFilter,
|
||||||
category: categoryFilter,
|
category: categoryFilter,
|
||||||
...overrides,
|
...overrides,
|
||||||
@@ -184,6 +189,12 @@ export default function MeasuresPage({ queryRef }: MeasuresPageProps) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleQueryFilterChange = (value: string) => {
|
||||||
|
const newQuery = value === "" ? null : value;
|
||||||
|
setQueryFilter(newQuery);
|
||||||
|
refetchFilters({ query: newQuery });
|
||||||
|
};
|
||||||
|
|
||||||
const handleStateFilterChange = (value: string) => {
|
const handleStateFilterChange = (value: string) => {
|
||||||
const newState = value === "ALL" ? null : (value as MeasureState);
|
const newState = value === "ALL" ? null : (value as MeasureState);
|
||||||
setStateFilter(newState);
|
setStateFilter(newState);
|
||||||
@@ -197,6 +208,7 @@ export default function MeasuresPage({ queryRef }: MeasuresPageProps) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const currentFilter = {
|
const currentFilter = {
|
||||||
|
query: queryFilter,
|
||||||
state: stateFilter,
|
state: stateFilter,
|
||||||
category: categoryFilter,
|
category: categoryFilter,
|
||||||
};
|
};
|
||||||
@@ -209,9 +221,9 @@ export default function MeasuresPage({ queryRef }: MeasuresPageProps) {
|
|||||||
const allFiltersNullConnectionId = ConnectionHandler.getConnectionID(
|
const allFiltersNullConnectionId = ConnectionHandler.getConnectionID(
|
||||||
organizationId,
|
organizationId,
|
||||||
MeasuresConnectionKey,
|
MeasuresConnectionKey,
|
||||||
{ filter: { state: null, category: null } },
|
{ filter: { query: null, state: null, category: null } },
|
||||||
);
|
);
|
||||||
const hasActiveFilter = stateFilter || categoryFilter;
|
const hasActiveFilter = queryFilter || stateFilter || categoryFilter;
|
||||||
const createConnectionIds = hasActiveFilter
|
const createConnectionIds = hasActiveFilter
|
||||||
? [allFiltersNullConnectionId, connectionId]
|
? [allFiltersNullConnectionId, connectionId]
|
||||||
: [connectionId];
|
: [connectionId];
|
||||||
@@ -282,6 +294,12 @@ export default function MeasuresPage({ queryRef }: MeasuresPageProps) {
|
|||||||
</PageHeader>
|
</PageHeader>
|
||||||
|
|
||||||
<div className="flex items-center gap-4">
|
<div className="flex items-center gap-4">
|
||||||
|
<Input
|
||||||
|
icon={IconMagnifyingGlass}
|
||||||
|
placeholder={__("Search measures...")}
|
||||||
|
value={queryFilter ?? ""}
|
||||||
|
onValueChange={handleQueryFilterChange}
|
||||||
|
/>
|
||||||
<Select
|
<Select
|
||||||
value={stateFilter ?? "ALL"}
|
value={stateFilter ?? "ALL"}
|
||||||
onValueChange={handleStateFilterChange}
|
onValueChange={handleStateFilterChange}
|
||||||
|
|||||||
Reference in New Issue
Block a user