Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import user from '../singletons/user-instance'
import { StartupDataStore } from '../../js/model/Startup/startup'
import { BasicDataTypePropertyName } from './reserved.properties'
import { render } from '@testing-library/react'
import Extensions from '../../extension-points'

// trim whitespace, lowercase
function customNormalizer(text: string) {
Expand Down Expand Up @@ -108,6 +109,7 @@ function addTestDefs() {
isInjected: false,
hidden: true,
},
...Extensions.extraFilters?.typeDefinitions
},
})
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ import { StartupDataStore } from '../../js/model/Startup/startup'
import { useMetacardDefinitions } from '../../js/model/Startup/metacard-definitions.hooks'
import { ReservedBasicDatatype } from '../reserved-basic-datatype/reserved.basic-datatype'
import { BasicDataTypePropertyName } from '../filter-builder/reserved.properties'
import Extensions from '../../extension-points'

function isNested(filter: any) {
let nested = false
filter.filters.forEach((subfilter: any) => {
Expand All @@ -60,7 +62,7 @@ function isAnyDate(filter: any) {
return (
StartupDataStore.MetacardDefinitions.getAttributeMap()[
stripQuotes(filter.property)
].type === 'DATE'
]?.type === 'DATE'
)
}
let typesFound = {} as any
Expand Down Expand Up @@ -137,6 +139,7 @@ export function translateFilterToBasicMap(filter: FilterBuilderClass) {
value: new BasicDatatypeFilter({
value: [],
}),
...Extensions.extraFilters?.extraPropertyValueMaps
},
} as PropertyValueMapType
let downConversion = false
Expand All @@ -153,6 +156,9 @@ export function translateFilterToBasicMap(filter: FilterBuilderClass) {
) {
propertyValueMap[BasicDataTypePropertyName].on = true
propertyValueMap[BasicDataTypePropertyName].value = subfilter
} else if (Extensions.extraFilters?.isExtraFilterClass(subfilter))
{
Extensions.extraFilters.translateExtraFilterToBasicMap(propertyValueMap, subfilter)
} else if (!isFilterBuilderClass(subfilter)) {
if (['anyDate', 'anyText', 'anyGeo'].includes(subfilter.property)) {
propertyValueMap[CQLUtils.getProperty(subfilter)] =
Expand Down Expand Up @@ -205,7 +211,7 @@ type QueryBasicProps = {
errorListener?: (validationResults: {
[key: string]: ValidationResult | undefined
}) => void
Extensions?: React.FunctionComponent
QueryBasicPropsExtensions?: React.FunctionComponent
}
export const constructFilterFromBasicFilter = ({
basicFilter,
Expand Down Expand Up @@ -254,6 +260,7 @@ export const constructFilterFromBasicFilter = ({
})
)
}
Extensions.extraFilters?.constructExtraFilters(basicFilter, filters)
return new FilterBuilderClass({
type: 'AND',
filters,
Expand Down Expand Up @@ -283,7 +290,7 @@ const useBasicFilterFromModel = ({ model }: QueryBasicProps) => {
return basicFilter
}

const QueryBasic = ({ model, errorListener, Extensions }: QueryBasicProps) => {
const QueryBasic = ({ model, errorListener, QueryBasicPropsExtensions }: QueryBasicProps) => {
const MetacardDefinitions = useMetacardDefinitions()
const inputRef = React.useRef<HTMLDivElement | null>(null)
const basicFilter = useBasicFilterFromModel({ model })
Expand Down Expand Up @@ -464,11 +471,17 @@ const QueryBasic = ({ model, errorListener, Extensions }: QueryBasicProps) => {
</Grid>
) : null}
</div>
{Extensions.extraFilters?.queryBasicCheckboxFilters && (
<Extensions.extraFilters.queryBasicCheckboxFilters
model
basicFilter
/>
)}
<div className="py-2 w-full">
<Swath className="w-full h-1" />
</div>
<div className="basic-settings">
<QuerySettings model={model} Extensions={Extensions} />
<QuerySettings model={model} Extensions={QueryBasicPropsExtensions} />
</div>
</div>
</>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,14 @@ import { providers, Props as ProviderProps } from './providers'
import metacardInteractions from './metacard-interactions'
import { LazyQueryResult } from '../js/model/LazyQueryResult/LazyQueryResult'
import { MetacardAttribute, ResultType } from '../js/model/Types'
import { ValueTypes } from '../component/filter-builder/filter.structure'
import { CQLStandardFilterBuilderClass, FilterBuilderClass, FilterClass, ValueTypes } from '../component/filter-builder/filter.structure'
import { Suggestion } from '../react-component/location/gazetteer'
import { MetacardInteractionProps } from '../react-component/metacard-interactions'
import { PermissiveComponentType } from '../typescript'
import { InputsType } from '../react-component/location/location'
import { CustomHover } from '../component/visualization/histogram/add-on-helpers'
import { AttributeMapType } from '../js/model/Startup/startup.types'
import { Attribute } from '../react-component/filter/filterHelper'

type EditorProps = {
result: LazyQueryResult
Expand Down Expand Up @@ -115,6 +117,24 @@ export type ExtensionPointsType = {
}) => React.ReactNode | null
extraSidebarButtons?: PermissiveComponentType
includeNavigationButtons?: boolean
extraFilters?: {
filterTypesHandler: (cqlAst: FilterBuilderClass | FilterClass | CQLStandardFilterBuilderClass) => CQLStandardFilterBuilderClass | FilterClass | null
isExtraFilterClass: (subfilter: any) => boolean
translateExtraFilterToBasicMap: (propertyFilterMap: any, subfilter: any) => null
constructExtraFilters: (basicfilter: any, filters: any[]) => null
typeDefinitions: AttributeMapType
filterPropertyNames: string[]
getFilterInput: (property: string) => React.ReactNode | null
attributes: Attribute[]
queryBasicCheckboxFilters?: ({
model,
basicFilter
} : {
model: any
basicFilter: any
}) => React.ReactNode | null
extraPropertyValueMaps?: any[]
}
}

const ExtensionPoints: ExtensionPointsType = {
Expand Down Expand Up @@ -146,6 +166,7 @@ const ExtensionPoints: ExtensionPointsType = {
timelineItemAddOn: () => null,
extraSidebarButtons: () => null,
includeNavigationButtons: false,
extraFilters: undefined
}

export default ExtensionPoints
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import CQLUtils from './CQLUtils'
import _cloneDeep from 'lodash/cloneDeep'
import wkx from 'wkx'
import { StartupDataStore } from './model/Startup/startup'
import Extensions from '../extension-points'

const getPointRadiusFilter = (
point: [number, number],
Expand Down Expand Up @@ -935,6 +936,7 @@ function getDataTypesConfigurationUsingStartupStore() {
function handleAllFilterTypes(
cqlAst: FilterBuilderClass | FilterClass | CQLStandardFilterBuilderClass
): CQLStandardFilterBuilderClass | FilterClass {
let extraFilterClass : CQLStandardFilterBuilderClass | FilterClass | null;
if (isCQLStandardFilterBuilderClass(cqlAst) || isFilterBuilderClass(cqlAst)) {
return new CQLStandardFilterBuilderClass({
type: cqlAst.type,
Expand Down Expand Up @@ -969,6 +971,8 @@ function handleAllFilterTypes(
}),
],
})
} else if ( Extensions.extraFilters && (extraFilterClass = Extensions.extraFilters.filterTypesHandler(cqlAst))) {
return extraFilterClass
} else if (isResourceSizeFilterClass(cqlAst)) {
const bytesValue = convertResourceSizeFilterClassValueToBytes(cqlAst)
return new FilterClass({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
SearchResultMetacardDefinitionType,
StartupPayloadType,
} from './startup.types'
import Extensions from '../../../extension-points'

function sortMetacardTypes(metacardTypes: AttributeMapType = {}) {
return Object.values(metacardTypes).sort((a, b) => {
Expand Down Expand Up @@ -189,7 +190,7 @@ class MetacardDefinitions extends Subscribable<{
return this.attributeMap?.[attributeName]?.enumerations || []
}
getSearchOnlyAttributes = () => {
return ['anyText', 'anyGeo', 'anyDate', BasicDataTypePropertyName]
return ['anyText', 'anyGeo', 'anyDate', BasicDataTypePropertyName, ...(Extensions.extraFilters?.filterPropertyNames ?? [])]
}
getSortedAttributes = () => {
return this.sortedAttributes || []
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import {
isBasicDatatypeClass,
} from '../../../component/filter-builder/filter.structure'
import { useComparatorsForAttribute } from './comparatorUtils'
import Extensions from '../../../extension-points'

type Props = {
filter: FilterClass
Expand All @@ -42,7 +43,7 @@ const FilterComparator = ({ filter, setFilter, textFieldProps }: Props) => {
}
}, [filter, setFilter, comparators])

if (isBasicDatatypeClass(filter)) {
if (isBasicDatatypeClass(filter) || Extensions.extraFilters?.isExtraFilterClass(filter)) {
return null
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ import { BasicDataTypePropertyName } from '../../../component/filter-builder/res
import { ResourceSizeField } from '../../../component/fields/resource-size'
import { ResourceSizeRangeField } from '../../../component/fields/resource-size-range'
import { useConfiguration } from '../../../js/model/Startup/configuration.hooks'
import Extensions from '../../../extension-points'

export type Props = {
filter: FilterClass
setFilter: (filter: FilterClass) => void
Expand Down Expand Up @@ -113,6 +115,10 @@ const FilterInput = ({
)
}

if (filter.property in (Extensions.extraFilters?.filterPropertyNames ?? [])) {
return (Extensions.extraFilters?.getFilterInput(filter.property))
}

if (resourceSizeIdentifiers.includes(filter.property)) {
switch (filter.type) {
case 'BETWEEN':
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ import {
AttributeMapType,
AttributeTypes,
} from '../../js/model/Startup/startup.types'
import Extensions from '../../extension-points'

export type Attribute = {
label: string
value: string
Expand Down Expand Up @@ -69,7 +71,7 @@ export const getGroupedFilteredAttributes = (): {
const groupedFilteredAttributes = validCommonAttributes
.concat([
toAttribute(basicDataTypeAttributeDefinition, 'Special Attributes'),
])
]).concat((Extensions.extraFilters?.attributes ?? []))
.concat(getFilteredAttributeList('All Attributes'))
const groups =
validCommonAttributes.length > 0
Expand Down