From 29c09b6472e2dcf9d3a02f2e7da68dee08caa92d Mon Sep 17 00:00:00 2001 From: andrewwallacespeckle Date: Mon, 1 Sep 2025 14:48:58 +0100 Subject: [PATCH] tidy up composable --- .../viewer/filters/LogicSelector.vue | 4 +- .../components/viewer/filters/Panel.vue | 4 +- .../lib/viewer/composables/filtering.ts | 81 ++----------------- 3 files changed, 9 insertions(+), 80 deletions(-) diff --git a/packages/frontend-2/components/viewer/filters/LogicSelector.vue b/packages/frontend-2/components/viewer/filters/LogicSelector.vue index 6a926c75d..e638bb379 100644 --- a/packages/frontend-2/components/viewer/filters/LogicSelector.vue +++ b/packages/frontend-2/components/viewer/filters/LogicSelector.vue @@ -33,7 +33,7 @@ defineProps<{ modelValue: FilterLogic }>() -const { setFilterLogicAndUpdate } = useFilterUtilities() +const { setFilterLogic } = useFilterUtilities() const filterLogicOptions = ref([ { value: FilterLogic.All, label: 'Match all rules' }, @@ -47,7 +47,7 @@ const handleLogicChange = ( | undefined ) => { if (option && !Array.isArray(option)) { - setFilterLogicAndUpdate(option.value) + setFilterLogic(option.value) } } diff --git a/packages/frontend-2/components/viewer/filters/Panel.vue b/packages/frontend-2/components/viewer/filters/Panel.vue index 660a20d46..044c4d43d 100644 --- a/packages/frontend-2/components/viewer/filters/Panel.vue +++ b/packages/frontend-2/components/viewer/filters/Panel.vue @@ -95,7 +95,7 @@ const { addActiveFilter, resetFilters, currentFilterLogic, - setFilterLogicAndUpdate + setFilterLogic } = useFilterUtilities() const { @@ -153,7 +153,7 @@ const propertySelectOptions = computed((): PropertySelectOption[] => { const filterLogic = computed({ get: () => currentFilterLogic.value, - set: (value: FilterLogic) => setFilterLogicAndUpdate(value) + set: (value: FilterLogic) => setFilterLogic(value) }) const mp = useMixpanel() diff --git a/packages/frontend-2/lib/viewer/composables/filtering.ts b/packages/frontend-2/lib/viewer/composables/filtering.ts index 6f66d1dca..d8529e044 100644 --- a/packages/frontend-2/lib/viewer/composables/filtering.ts +++ b/packages/frontend-2/lib/viewer/composables/filtering.ts @@ -7,7 +7,7 @@ import type { TreeNode, Viewer } from '@speckle/viewer' -import { Hash, CaseLower } from 'lucide-vue-next' + import { FilteringExtension } from '@speckle/viewer' import { until } from '@vueuse/shared' import { difference, uniq } from 'lodash-es' @@ -297,16 +297,6 @@ function createFilteringDataStore() { computeSliceIntersections() } - const replaceExistingSlice = (dataSlice: DataSlice) => { - const sliceByWidgetIdIndex = dataSlices.value.findIndex( - (slice) => slice.widgetId === dataSlice.widgetId - ) - if (sliceByWidgetIdIndex !== -1) { - dataSlices.value[sliceByWidgetIdIndex] = dataSlice - computeSliceIntersections() - } - } - const popSlice = (dataSlice: DataSlice) => { const sliceByWidgetIdIndex = dataSlices.value.findIndex( (slice) => slice.widgetId === dataSlice.widgetId @@ -345,14 +335,6 @@ function createFilteringDataStore() { dataSlices.value = [] } - const clearPropertyIndexCache = () => { - for (const dataSource of dataSources.value) { - if (dataSource._propertyIndexCache) { - dataSource._propertyIndexCache = {} - } - } - } - const setFilterLogic = (logic: FilterLogic) => { currentFilterLogic.value = logic } @@ -415,13 +397,11 @@ function createFilteringDataStore() { populateDataStore, queryObjects, pushOrReplaceSlice, - replaceExistingSlice, popSlice, computeSliceIntersections, getFinalObjectIds, updateViewer, clearDataOnRouteLeave, - clearPropertyIndexCache, setFilterLogic, currentFilterLogic, setGhostMode, @@ -692,12 +672,12 @@ export function useFilterUtilities( /** * Sets filter logic and updates slices */ - const setFilterLogicAndUpdate = (logic: FilterLogic) => { + const setFilterLogic = (logic: FilterLogic) => { dataStore.setFilterLogic(logic) updateDataStoreSlices() } - const setGhostModeAndUpdate = (enabled: boolean) => { + const setGhostMode = (enabled: boolean) => { dataStore.setGhostMode(enabled) updateDataStoreSlices() } @@ -1191,66 +1171,21 @@ export function useFilterUtilities( return color.startsWith('#') ? color : `#${color}` } - /** - * Get the appropriate icon component for a property type - */ - const getPropertyTypeIcon = (type: 'number' | 'string') => { - switch (type) { - case 'number': - return Hash - case 'string': - default: - return CaseLower - } - } - - /** - * Get the appropriate CSS classes for a property type icon - */ - const getPropertyTypeIconClasses = (type: 'number' | 'string'): string => { - switch (type) { - case 'number': - return 'text-green-300' - case 'string': - default: - return 'text-violet-500' - } - } - - /** - * Determine the type of a property from filter data - */ - const getPropertyType = (filterData: FilterData): 'number' | 'string' => { - return filterData.type === FilterType.Numeric ? 'number' : 'string' - } - - /** - * Get both icon and classes for a property type in one call - */ - const getPropertyTypeDisplay = (type: 'number' | 'string') => { - return { - icon: getPropertyTypeIcon(type), - classes: getPropertyTypeIconClasses(type) - } - } - return { isolateObjects, unIsolateObjects, hideObjects, showObjects, filters, - // Filter value functions getAvailableFilterValues, - // Multi-filter functions addActiveFilter, removeActiveFilter, toggleFilterApplied, updateActiveFilterValues, updateFilterCondition, - setFilterLogicAndUpdate, - setGhostModeAndUpdate, + setFilterLogic, + setGhostMode, updateDataStoreSlices, toggleActiveFilterValue, isActiveFilterValueSelected, @@ -1274,15 +1209,9 @@ export function useFilterUtilities( toggleColorFilter, getFilterColorGroups, getFilterValueColor, - // Property type functions - getPropertyType, - getPropertyTypeIcon, - getPropertyTypeIconClasses, - getPropertyTypeDisplay, // Numeric range filtering setNumericRange, // Filter logic - setFilterLogic: dataStore.setFilterLogic, currentFilterLogic: dataStore.currentFilterLogic, getFinalObjectIds: dataStore.getFinalObjectIds, // Ghost mode