diff --git a/packages/frontend-2/components/viewer/controls/Left.vue b/packages/frontend-2/components/viewer/controls/Left.vue index 95173e6a5..03ffc2769 100644 --- a/packages/frontend-2/components/viewer/controls/Left.vue +++ b/packages/frontend-2/components/viewer/controls/Left.vue @@ -243,7 +243,7 @@ const isTablet = breakpoints.smaller('lg') const { getTooltipProps } = useSmartTooltipDelay() const isSavedViewsEnabled = useAreSavedViewsEnabled() const { $intercom } = useNuxtApp() -const { hasActiveFilters } = useFilterUtilities() +const { hasActiveFilters, filters } = useFilterUtilities() const activePanel = ref('none') const modelsSubView = ref(ModelsSubView.Main) @@ -339,6 +339,17 @@ watch(isSmallerOrEqualSm, (newVal) => { activePanel.value = newVal ? 'none' : 'models' }) +// Auto-open filters panel when a new filter is applied from elsewhere +watch( + () => filters.propertyFilter.isApplied.value && filters.propertyFilter.filter.value, + (newFilterApplied, oldFilterApplied) => { + // Only trigger if we're going from no filter to having a filter (not when changing filters or removing) + if (newFilterApplied && !oldFilterApplied) { + activePanel.value = 'filters' + } + } +) + defineExpose({ forceClosePanel, forceClosePanels: forceClosePanel diff --git a/packages/frontend-2/components/viewer/filters/Panel.vue b/packages/frontend-2/components/viewer/filters/Panel.vue index e0d0ad3fb..27c56074c 100644 --- a/packages/frontend-2/components/viewer/filters/Panel.vue +++ b/packages/frontend-2/components/viewer/filters/Panel.vue @@ -116,64 +116,19 @@ const { removePropertyFilter, applyPropertyFilter, unApplyPropertyFilter, - filters: { propertyFilter } + filters: { propertyFilter }, + getRelevantFilters, + isRevitProperty } = useFilterUtilities() const { metadata: { availableFilters: allFilters } } = useInjectedViewer() -const revitPropertyRegex = /^parameters\./ -// Note: we've split this regex check in two to not clash with navis properties. This makes generally makes dim very sad, as we're layering hacks. -// Navis object properties come under `properties`, same as revit ones - as such we can't assume they're the same. Here we're targeting revit's -// specific two subcategories of `properties`. -const revitPropertyRegexDui3000InstanceProps = /^properties\.Instance/ // note this is partially valid for civil3d, or dim should test against it -const revitPropertyRegexDui3000TypeProps = /^properties\.Type/ // note this is partially valid for civil3d, or dim should test against it - const showAllFilters = ref(false) -const isRevitProperty = (key: string): boolean => { - return ( - revitPropertyRegex.test(key) || - revitPropertyRegexDui3000InstanceProps.test(key) || - revitPropertyRegexDui3000TypeProps.test(key) - ) -} - const relevantFilters = computed(() => { - return (allFilters.value || []).filter((f: PropertyInfo) => { - if ( - f.key.endsWith('.units') || - f.key.endsWith('.speckle_type') || - f.key.includes('.parameters.') || - // f.key.includes('level.') || - f.key.includes('renderMaterial') || - f.key.includes('.domain') || - f.key.includes('plane.') || - f.key.includes('baseLine') || - f.key.includes('referenceLine') || - f.key.includes('end.') || - f.key.includes('start.') || - f.key.includes('endPoint.') || - f.key.includes('midPoint.') || - f.key.includes('startPoint.') || - f.key.includes('startPoint.') || - f.key.includes('.materialName') || - f.key.includes('.materialClass') || - f.key.includes('.materialCategory') || - f.key.includes('displayStyle') || - f.key.includes('displayValue') || - f.key.includes('displayMesh') - ) { - return false - } - // handle revit params: the actual one single value we're interested is in paramters.HOST_BLA BLA_.value, the rest are not needed - if (isRevitProperty(f.key)) { - if (f.key.endsWith('.value')) return true - else return false - } - return true - }) + return getRelevantFilters(allFilters.value) }) const speckleTypeFilter = computed(() => diff --git a/packages/frontend-2/components/viewer/selection/KeyValuePair.vue b/packages/frontend-2/components/viewer/selection/KeyValuePair.vue new file mode 100644 index 000000000..46eee36e4 --- /dev/null +++ b/packages/frontend-2/components/viewer/selection/KeyValuePair.vue @@ -0,0 +1,154 @@ + + + diff --git a/packages/frontend-2/components/viewer/selection/Object.vue b/packages/frontend-2/components/viewer/selection/Object.vue index 21cb9d6de..ef7c2115b 100644 --- a/packages/frontend-2/components/viewer/selection/Object.vue +++ b/packages/frontend-2/components/viewer/selection/Object.vue @@ -30,69 +30,14 @@
-
-
-
- {{ kvp.key }} -
-
-
- - - - - {{ kvp.units }} - - -
-
-
-
+ :kvp="kvp" + />