Skip to content

Commit

Permalink
replaceFilterByPrefix
Browse files Browse the repository at this point in the history
  • Loading branch information
macobo committed May 21, 2024
1 parent 9d1873e commit 23903c6
Show file tree
Hide file tree
Showing 10 changed files with 24 additions and 20 deletions.
4 changes: 2 additions & 2 deletions assets/js/dashboard/stats/locations/map.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import LazyLoader from '../../components/lazy-loader'
import MoreLink from '../more-link'
import * as api from '../../api'
import { navigateToQuery } from '../../query'
import { cleanLabels, omitFiltersByKeyPrefix } from '../../util/filters';
import { cleanLabels, replaceFilterByPrefix } from '../../util/filters';

class Countries extends React.Component {
constructor(props) {
Expand Down Expand Up @@ -113,7 +113,7 @@ class Countries extends React.Component {
done: (datamap) => {
datamap.svg.selectAll('.datamaps-subunit').on('click', (geography) => {
const country = this.state.countries.find(c => c.alpha_3 === geography.id)
const filters = omitFiltersByKeyPrefix(this.props.query, "country").concat([["is", "country", [country.code]]])
const filters = replaceFilterByPrefix(this.props.query, "country", ["is", "country", [country.code]])
const labels = cleanLabels(filters, this.props.query.labels, "country", { [country.code]: country.name })

if (country) {
Expand Down
4 changes: 2 additions & 2 deletions assets/js/dashboard/stats/modals/conversions.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import * as api from '../../api'
import * as url from "../../util/url";
import numberFormatter from '../../util/number-formatter'
import { parseQuery } from '../../query'
import { omitFiltersByKeyPrefix } from '../../util/filters'
import { replaceFilterByPrefix } from '../../util/filters'

/*global BUILD_EXTRA*/
/*global require*/
Expand Down Expand Up @@ -60,7 +60,7 @@ function ConversionsModal(props) {
}

function filterSearchLink(listItem) {
const filters = omitFiltersByKeyPrefix(query, "goal").concat([["is", "goal", [listItem.name]]])
const filters = replaceFilterByPrefix(query, "goal", ["is", "goal", [listItem.name]])
return url.updatedQuery({ filters })
}

Expand Down
4 changes: 2 additions & 2 deletions assets/js/dashboard/stats/modals/entry-pages.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import * as api from '../../api'
import numberFormatter, { durationFormatter } from '../../util/number-formatter'
import { parseQuery } from '../../query'
import { trimURL, updatedQuery } from '../../util/url'
import { hasGoalFilter, omitFiltersByKeyPrefix } from "../../util/filters";
import { hasGoalFilter, replaceFilterByPrefix } from "../../util/filters";

class EntryPagesModal extends React.Component {
constructor(props) {
Expand Down Expand Up @@ -75,7 +75,7 @@ class EntryPagesModal extends React.Component {
}

renderPage(page) {
const filters = omitFiltersByKeyPrefix(this.state.query, "entry_page").concat([["is", "entry_page", [page.name]]])
const filters = replaceFilterByPrefix(this.state.query, "entry_page", ["is", "entry_page", [page.name]])
return (
<tr className="text-sm dark:text-gray-200" key={page.name}>
<td className="p-2 truncate">
Expand Down
4 changes: 2 additions & 2 deletions assets/js/dashboard/stats/modals/exit-pages.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import * as api from '../../api'
import numberFormatter, {percentageFormatter} from '../../util/number-formatter'
import { parseQuery } from '../../query'
import { trimURL, updatedQuery } from '../../util/url'
import { hasGoalFilter, omitFiltersByKeyPrefix } from "../../util/filters";
import { hasGoalFilter, replaceFilterByPrefix } from "../../util/filters";
class ExitPagesModal extends React.Component {
constructor(props) {
super(props)
Expand Down Expand Up @@ -56,7 +56,7 @@ class ExitPagesModal extends React.Component {
}

renderPage(page) {
const filters = omitFiltersByKeyPrefix(this.state.query, "exit_page").concat([["is", "exit_page", [page.name]]])
const filters = replaceFilterByPrefix(this.state.query, "exit_page", ["is", "exit_page", [page.name]])
return (
<tr className="text-sm dark:text-gray-200" key={page.name}>
<td className="p-2 truncate">
Expand Down
4 changes: 2 additions & 2 deletions assets/js/dashboard/stats/modals/pages.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import * as api from '../../api'
import numberFormatter, { durationFormatter } from '../../util/number-formatter'
import { parseQuery } from '../../query'
import { trimURL, updatedQuery } from '../../util/url'
import { hasGoalFilter, omitFiltersByKeyPrefix } from "../../util/filters";
import { hasGoalFilter, replaceFilterByPrefix } from "../../util/filters";

class PagesModal extends React.Component {
constructor(props) {
Expand Down Expand Up @@ -58,7 +58,7 @@ class PagesModal extends React.Component {
}

renderPage(page) {
const filters = omitFiltersByKeyPrefix(this.state.query, "page").concat([["is", "page", [page.name]]])
const filters = replaceFilterByPrefix(this.state.query, "page", ["is", "page", [page.name]])
const timeOnPage = page['time_on_page'] ? durationFormatter(page['time_on_page']) : '-';
return (
<tr className="text-sm dark:text-gray-200" key={page.name}>
Expand Down
4 changes: 2 additions & 2 deletions assets/js/dashboard/stats/modals/props.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import * as url from "../../util/url";
import numberFormatter from '../../util/number-formatter'
import { parseQuery } from '../../query'
import { specialTitleWhenGoalFilter } from "../behaviours/goal-conversions";
import { EVENT_PROPS_PREFIX, hasGoalFilter, omitFiltersByKeyPrefix } from "../../util/filters"
import { EVENT_PROPS_PREFIX, hasGoalFilter, replaceFilterByPrefix } from "../../util/filters"

/*global BUILD_EXTRA*/
/*global require*/
Expand Down Expand Up @@ -62,7 +62,7 @@ function PropsModal(props) {
}

function filterSearchLink(listItem) {
const filters = omitFiltersByKeyPrefix(query, EVENT_PROPS_PREFIX).concat([["is", `${EVENT_PROPS_PREFIX}${propKey}`, [listItem.name]]])
const filters = replaceFilterByPrefix(query, EVENT_PROPS_PREFIX, ["is", `${EVENT_PROPS_PREFIX}${propKey}`, [listItem.name]])
return url.updatedQuery({ filters })
}

Expand Down
4 changes: 2 additions & 2 deletions assets/js/dashboard/stats/modals/referrer-drilldown.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import * as api from '../../api'
import numberFormatter, {durationFormatter} from '../../util/number-formatter'
import {parseQuery} from '../../query'
import { updatedQuery } from "../../util/url";
import { hasGoalFilter, omitFiltersByKeyPrefix } from "../../util/filters";
import { hasGoalFilter, replaceFilterByPrefix } from "../../util/filters";

class ReferrerDrilldownModal extends React.Component {
constructor(props) {
Expand Down Expand Up @@ -71,7 +71,7 @@ class ReferrerDrilldownModal extends React.Component {
}

renderReferrerName(referrer) {
const filters = omitFiltersByKeyPrefix(this.state.query, "referrer").concat([["is", "referrer", [referrer.name]]])
const filters = replaceFilterByPrefix(this.state.query, "referrer", ["is", "referrer", [referrer.name]])
return (
<span className="flex group items-center">
<img src={`/favicon/sources/${referrer.name}`} referrerPolicy="no-referrer" className="h-4 w-4 mr-2 inline" />
Expand Down
6 changes: 3 additions & 3 deletions assets/js/dashboard/stats/modals/table.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import Modal from './modal'
import * as api from '../../api'
import numberFormatter from '../../util/number-formatter'
import {parseQuery} from '../../query'
import { cleanLabels, hasGoalFilter, omitFiltersByKeyPrefix } from "../../util/filters";
import { cleanLabels, hasGoalFilter, replaceFilterByPrefix } from "../../util/filters";
import { updatedQuery } from "../../util/url";

class ModalTable extends React.Component {
Expand Down Expand Up @@ -43,9 +43,9 @@ class ModalTable extends React.Component {
}

renderTableItem(tableItem) {
const filters = omitFiltersByKeyPrefix(this.state.query, this.props.filterKey).concat([[
const filters = replaceFilterByPrefix(this.state.query, this.props.filterKey, [
"is", this.props.filterKey, [tableItem.code]
]])
])

const labels = cleanLabels(filters, this.state.query.labels, this.props.filterKey, { [tableItem.code]: tableItem.name })

Expand Down
4 changes: 2 additions & 2 deletions assets/js/dashboard/stats/reports/list.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import Bar from '../bar'
import LazyLoader from '../../components/lazy-loader'
import classNames from 'classnames'
import { trimURL, updatedQuery } from '../../util/url'
import { cleanLabels, hasGoalFilter, omitFiltersByKeyPrefix } from '../../util/filters'
import { cleanLabels, hasGoalFilter, replaceFilterByPrefix } from '../../util/filters'
const MAX_ITEMS = 9
const MIN_HEIGHT = 380
const ROW_HEIGHT = 32
Expand Down Expand Up @@ -227,7 +227,7 @@ export default function ListReport(props) {
if (!prefixAndFilter) { return null }

const {prefix, filter, labels} = prefixAndFilter
const newFilters = omitFiltersByKeyPrefix(props.query, prefix).concat([filter])
const newFilters = replaceFilterByPrefix(props.query, prefix, filter)
const newLabels = cleanLabels(newFilters, props.query.labels, filter[1], labels)

return updatedQuery({ filters: newFilters, labels: newLabels })
Expand Down
6 changes: 5 additions & 1 deletion assets/js/dashboard/util/filters.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,14 @@ export function getFiltersByKeyPrefix(query, prefix) {
return query.filters.filter(([_operation, filterKey, _clauses]) => filterKey.startsWith(prefix))
}

export function omitFiltersByKeyPrefix(query, prefix) {
function omitFiltersByKeyPrefix(query, prefix) {
return query.filters.filter(([_operation, filterKey, _clauses]) => !filterKey.startsWith(prefix))
}

export function replaceFilterByPrefix(query, prefix, filter) {
return omitFiltersByKeyPrefix(query, prefix).concat([filter])
}

export function isFilteringOnFixedValue(query, filterKey, expectedValue) {
const filters = query.filters.filter(([_operation, key]) => filterKey == key)
if (filters.length == 1) {
Expand Down

0 comments on commit 23903c6

Please sign in to comment.