Skip to content

Commit

Permalink
Merge pull request #1439 from cityofaustin/19052_update_components_ad…
Browse files Browse the repository at this point in the history
…vanced_search

adds components dropdown and contains not operator
  • Loading branch information
tillyw authored Oct 10, 2024
2 parents a31522d + 9edf1c5 commit 7021c0b
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export const FILTERS_COMMON_OPERATORS = {
},
string_contains_not_case_insensitive: {
operator: "_nilike",
label: "contains not",
label: "does not contain",
description: "String is NOT contained in field (case-insensitive)",
envelope: "%{VALUE}%",
type: "string",
Expand Down
4 changes: 4 additions & 0 deletions moped-editor/src/queries/project.js
Original file line number Diff line number Diff line change
Expand Up @@ -982,6 +982,10 @@ export const LOOKUP_TABLES_QUERY = gql`
phase_id
phase_name
}
moped_components(order_by: { component_name_full: asc }) {
component_id
component_name_full
}
}
`;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
defaultOperator: "string_contains_case_insensitive",
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_equals_case_insensitive",
"string_does_not_equal_case_insensitive",
"string_begins_with_case_insensitive",
Expand All @@ -45,6 +46,7 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
defaultOperator: "string_contains_case_insensitive",
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_equals_case_insensitive",
"string_does_not_equal_case_insensitive",
"string_begins_with_case_insensitive",
Expand All @@ -59,6 +61,7 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
defaultOperator: "string_contains_case_insensitive",
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_equals_case_insensitive",
"string_does_not_equal_case_insensitive",
"string_begins_with_case_insensitive",
Expand All @@ -73,6 +76,7 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
defaultOperator: "string_contains_case_insensitive",
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_equals_case_insensitive",
"string_does_not_equal_case_insensitive",
"string_begins_with_case_insensitive",
Expand Down Expand Up @@ -105,12 +109,14 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
getOptionLabel: (option) => option.type_name,
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_equals_case_insensitive",
"string_does_not_equal_case_insensitive",
],
},
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_equals_case_insensitive",
"string_does_not_equal_case_insensitive",
"string_begins_with_case_insensitive",
Expand Down Expand Up @@ -152,6 +158,7 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
"string_equals_case_insensitive",
"string_does_not_equal_case_insensitive",
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_begins_with_case_insensitive",
"string_ends_with_case_insensitive",
"string_is_blank",
Expand All @@ -166,11 +173,15 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
lookup: {
table_name: "moped_users",
getOptionLabel: (option) => `${option.first_name} ${option.last_name}`,
operators: ["string_contains_case_insensitive"],
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
],
},
defaultOperator: "string_contains_case_insensitive",
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_begins_with_case_insensitive",
"string_ends_with_case_insensitive",
"string_is_null",
Expand All @@ -195,6 +206,7 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
"string_equals_case_insensitive",
"string_does_not_equal_case_insensitive",
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_begins_with_case_insensitive",
"string_ends_with_case_insensitive",
"string_is_null",
Expand All @@ -219,6 +231,7 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
"string_equals_case_insensitive",
"string_does_not_equal_case_insensitive",
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_begins_with_case_insensitive",
"string_ends_with_case_insensitive",
"string_is_null",
Expand All @@ -235,13 +248,15 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
getOptionLabel: (option) => option.entity_name,
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_equals_case_insensitive",
"string_does_not_equal_case_insensitive",
],
},
defaultOperator: "string_contains_case_insensitive",
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_equals_case_insensitive",
"string_does_not_equal_case_insensitive",
"string_begins_with_case_insensitive",
Expand All @@ -258,6 +273,7 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
defaultOperator: "string_contains_case_insensitive",
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_begins_with_case_insensitive",
"string_ends_with_case_insensitive",
"string_equals_case_insensitive",
Expand All @@ -274,11 +290,15 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
lookup: {
table_name: "moped_fund_sources",
getOptionLabel: (option) => option.funding_source_name,
operators: ["string_contains_case_insensitive"],
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive"
],
},
defaultOperator: "string_contains_case_insensitive",
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_is_null",
"string_is_not_null",
],
Expand Down Expand Up @@ -308,6 +328,7 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
defaultOperator: "string_contains_case_insensitive",
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_begins_with_case_insensitive",
"string_ends_with_case_insensitive",
"string_equals_case_insensitive",
Expand Down Expand Up @@ -356,12 +377,15 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
getOptionLabel: (option) => `${option.first_name} ${option.last_name}`,
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_equals_case_insensitive",
"string_does_not_equal_case_insensitive",
],
},
defaultOperator: "string_contains_case_insensitive",
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_equals_case_insensitive",
"string_does_not_equal_case_insensitive",
"string_is_null",
Expand All @@ -378,12 +402,15 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
getOptionLabel: (option) => `${option.first_name} ${option.last_name}`,
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_equals_case_insensitive",
"string_does_not_equal_case_insensitive",
],
},
defaultOperator: "string_contains_case_insensitive",
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_equals_case_insensitive",
"string_does_not_equal_case_insensitive",
"string_is_null",
Expand All @@ -398,6 +425,7 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
defaultOperator: "string_contains_case_insensitive",
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_begins_with_case_insensitive",
"string_ends_with_case_insensitive",
"string_equals_case_insensitive",
Expand All @@ -414,6 +442,7 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
defaultOperator: "string_contains_case_insensitive",
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_begins_with_case_insensitive",
"string_ends_with_case_insensitive",
"string_equals_case_insensitive",
Expand All @@ -430,11 +459,15 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
lookup: {
table_name: "moped_tags",
getOptionLabel: (option) => option.name,
operators: ["string_contains_case_insensitive"],
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
],
},
defaultOperator: "string_contains_case_insensitive",
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_begins_with_case_insensitive",
"string_ends_with_case_insensitive",
"string_is_null",
Expand All @@ -459,6 +492,7 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
"string_equals_case_insensitive",
"string_does_not_equal_case_insensitive",
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_begins_with_case_insensitive",
"string_ends_with_case_insensitive",
],
Expand All @@ -481,6 +515,7 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
"string_equals_case_insensitive",
"string_does_not_equal_case_insensitive",
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_begins_with_case_insensitive",
"string_ends_with_case_insensitive",
"string_is_null",
Expand Down Expand Up @@ -515,9 +550,18 @@ export const PROJECT_LIST_VIEW_FILTERS_CONFIG = {
label: "Components",
placeholder: "component",
type: "string",
lookup: {
table_name: "moped_components",
getOptionLabel: (option) => `${option.component_name_full}`,
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive"
],
},
defaultOperator: "string_contains_case_insensitive",
operators: [
"string_contains_case_insensitive",
"string_contains_not_case_insensitive",
"string_is_null",
"string_is_not_null",
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const makeAdvancedSearchWhereFilters = (filters) =>
let { field, value, operator } = filters[filter];

// Use field name to get the filter config and GraphQL operator config for that field
const filterConfigForField = PROJECT_LIST_VIEW_FILTERS_CONFIG[field]
const filterConfigForField = PROJECT_LIST_VIEW_FILTERS_CONFIG[field];
const { type } = filterConfigForField;

// Use operator name to get the GraphQL operator config for that operator
Expand Down Expand Up @@ -63,6 +63,11 @@ const makeAdvancedSearchWhereFilters = (filters) =>
}
}
let whereString = `${field}: { ${gqlOperator}: ${value} }`;
// If we would like to return results that do not contain a particular string ('_nilike'), we should return null values as well
if (gqlOperator.includes("_nilike")) {
const whereStringWithNullValues = `_or: [ { ${whereString} }, { ${field}: { ${`_is_null`}: true } }]`;
whereString = whereStringWithNullValues;
}
// If we are filtering on a date there are some exceptions we need to handle bc the date/timestampz conversion
if (type === "date" && !gqlOperator.includes("is_null")) {
const nextDay = JSON.stringify(
Expand Down

0 comments on commit 7021c0b

Please sign in to comment.