fix(fe): save numeric range filter when saving view
fix(fe): save numeric range filter when saving view
This commit is contained in:
@@ -25,7 +25,8 @@ import {
|
|||||||
SortMode,
|
SortMode,
|
||||||
type DataSlice,
|
type DataSlice,
|
||||||
type QueryCriteria,
|
type QueryCriteria,
|
||||||
type ExtendedPropertyInfo
|
type ExtendedPropertyInfo,
|
||||||
|
type SerializedFilterData
|
||||||
} from '~/lib/viewer/helpers/filters/types'
|
} from '~/lib/viewer/helpers/filters/types'
|
||||||
import { getConditionLabel } from '~/lib/viewer/helpers/filters/constants'
|
import { getConditionLabel } from '~/lib/viewer/helpers/filters/constants'
|
||||||
import { useFilteringDataStore } from '~/lib/viewer/composables/filtering/dataStore'
|
import { useFilteringDataStore } from '~/lib/viewer/composables/filtering/dataStore'
|
||||||
@@ -705,13 +706,7 @@ export function useFilterUtilities(
|
|||||||
|
|
||||||
// Store filters that need to be restored once data store is ready
|
// Store filters that need to be restored once data store is ready
|
||||||
const pendingFiltersToRestore = ref<{
|
const pendingFiltersToRestore = ref<{
|
||||||
filters: Array<{
|
filters: SerializedFilterData[]
|
||||||
key: string | null
|
|
||||||
isApplied: boolean
|
|
||||||
selectedValues: string[]
|
|
||||||
id: string
|
|
||||||
condition: FilterCondition
|
|
||||||
}>
|
|
||||||
activeColorFilterId: string | null
|
activeColorFilterId: string | null
|
||||||
filterLogic?: FilterLogic
|
filterLogic?: FilterLogic
|
||||||
} | null>(null)
|
} | null>(null)
|
||||||
@@ -720,13 +715,7 @@ export function useFilterUtilities(
|
|||||||
* Restores filters from serialized state
|
* Restores filters from serialized state
|
||||||
*/
|
*/
|
||||||
const restoreFilters = async (
|
const restoreFilters = async (
|
||||||
serializedFilters: Array<{
|
serializedFilters: SerializedFilterData[],
|
||||||
key: string | null
|
|
||||||
isApplied: boolean
|
|
||||||
selectedValues: string[]
|
|
||||||
id: string
|
|
||||||
condition: FilterCondition
|
|
||||||
}>,
|
|
||||||
activeColorFilterId: string | null,
|
activeColorFilterId: string | null,
|
||||||
filterLogic?: FilterLogic
|
filterLogic?: FilterLogic
|
||||||
) => {
|
) => {
|
||||||
@@ -764,13 +753,7 @@ export function useFilterUtilities(
|
|||||||
* Actually applies the filters once we have the property data
|
* Actually applies the filters once we have the property data
|
||||||
*/
|
*/
|
||||||
const applyFiltersFromSerialized = (
|
const applyFiltersFromSerialized = (
|
||||||
serializedFilters: Array<{
|
serializedFilters: SerializedFilterData[],
|
||||||
key: string | null
|
|
||||||
isApplied: boolean
|
|
||||||
selectedValues: string[]
|
|
||||||
id: string
|
|
||||||
condition: FilterCondition
|
|
||||||
}>,
|
|
||||||
availableProperties: ExtendedPropertyInfo[]
|
availableProperties: ExtendedPropertyInfo[]
|
||||||
) => {
|
) => {
|
||||||
for (const serializedFilter of serializedFilters) {
|
for (const serializedFilter of serializedFilters) {
|
||||||
@@ -787,6 +770,14 @@ export function useFilterUtilities(
|
|||||||
updateActiveFilterValues(filterId, serializedFilter.selectedValues)
|
updateActiveFilterValues(filterId, serializedFilter.selectedValues)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (serializedFilter.numericRange) {
|
||||||
|
setNumericRange(
|
||||||
|
filterId,
|
||||||
|
serializedFilter.numericRange.min,
|
||||||
|
serializedFilter.numericRange.max
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
if (!serializedFilter.isApplied) {
|
if (!serializedFilter.isApplied) {
|
||||||
toggleFilterApplied(filterId)
|
toggleFilterApplied(filterId)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,10 @@ import {
|
|||||||
import { useFilterUtilities } from '~/lib/viewer/composables/filtering/filtering'
|
import { useFilterUtilities } from '~/lib/viewer/composables/filtering/filtering'
|
||||||
import { useFilteringDataStore } from '~/lib/viewer/composables/filtering/dataStore'
|
import { useFilteringDataStore } from '~/lib/viewer/composables/filtering/dataStore'
|
||||||
import { CameraController, SectionTool, VisualDiffMode } from '@speckle/viewer'
|
import { CameraController, SectionTool, VisualDiffMode } from '@speckle/viewer'
|
||||||
import type { FilterLogic, FilterCondition } from '~/lib/viewer/helpers/filters/types'
|
import type {
|
||||||
|
FilterLogic,
|
||||||
|
SerializedFilterData
|
||||||
|
} from '~/lib/viewer/helpers/filters/types'
|
||||||
import type { Merge, PartialDeep } from 'type-fest'
|
import type { Merge, PartialDeep } from 'type-fest'
|
||||||
import {
|
import {
|
||||||
defaultMeasurementOptions,
|
defaultMeasurementOptions,
|
||||||
@@ -97,7 +100,9 @@ export function useStateSerialization() {
|
|||||||
isApplied: filterData.isApplied,
|
isApplied: filterData.isApplied,
|
||||||
selectedValues: filterData.selectedValues,
|
selectedValues: filterData.selectedValues,
|
||||||
id: filterData.id,
|
id: filterData.id,
|
||||||
condition: filterData.condition
|
condition: filterData.condition,
|
||||||
|
numericRange:
|
||||||
|
filterData.type === 'numeric' ? filterData.numericRange : undefined
|
||||||
}))
|
}))
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -298,13 +303,7 @@ export function useApplySerializedState() {
|
|||||||
|
|
||||||
if (filters.propertyFilters?.length) {
|
if (filters.propertyFilters?.length) {
|
||||||
restoreFilters(
|
restoreFilters(
|
||||||
filters.propertyFilters as Array<{
|
filters.propertyFilters as SerializedFilterData[],
|
||||||
key: string | null
|
|
||||||
isApplied: boolean
|
|
||||||
selectedValues: string[]
|
|
||||||
id: string
|
|
||||||
condition: FilterCondition
|
|
||||||
}>,
|
|
||||||
filters.activeColorFilterId,
|
filters.activeColorFilterId,
|
||||||
filters.filterLogic as FilterLogic
|
filters.filterLogic as FilterLogic
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -215,3 +215,12 @@ export type ColorGroup = {
|
|||||||
value: string
|
value: string
|
||||||
color: string
|
color: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type SerializedFilterData = {
|
||||||
|
key: Nullable<string>
|
||||||
|
isApplied: boolean
|
||||||
|
selectedValues: string[]
|
||||||
|
id: string
|
||||||
|
condition: FilterCondition
|
||||||
|
numericRange?: { min: number; max: number }
|
||||||
|
}
|
||||||
|
|||||||
@@ -69,8 +69,10 @@ export interface SectionBoxData {
|
|||||||
* v1.6 -> 1.7
|
* v1.6 -> 1.7
|
||||||
* - ui.filters.filterLogic added
|
* - ui.filters.filterLogic added
|
||||||
* - ui.filters.propertyFilters.condition updated
|
* - ui.filters.propertyFilters.condition updated
|
||||||
|
* v1.7 -> 1.8
|
||||||
|
* - ui.filters.propertyFilters.numericRange added
|
||||||
*/
|
*/
|
||||||
export const SERIALIZED_VIEWER_STATE_VERSION = 1.7
|
export const SERIALIZED_VIEWER_STATE_VERSION = 1.8
|
||||||
|
|
||||||
export type SerializedViewerState = {
|
export type SerializedViewerState = {
|
||||||
projectId: string
|
projectId: string
|
||||||
@@ -117,6 +119,7 @@ export type SerializedViewerState = {
|
|||||||
selectedValues: string[]
|
selectedValues: string[]
|
||||||
id: string
|
id: string
|
||||||
condition: string
|
condition: string
|
||||||
|
numericRange?: { min: number; max: number }
|
||||||
}>
|
}>
|
||||||
activeColorFilterId: Nullable<string>
|
activeColorFilterId: Nullable<string>
|
||||||
filterLogic: string
|
filterLogic: string
|
||||||
@@ -283,6 +286,7 @@ const initializeMissingData = (state: UnformattedState): SerializedViewerState =
|
|||||||
selectedValues: string[]
|
selectedValues: string[]
|
||||||
id: string
|
id: string
|
||||||
condition: string
|
condition: string
|
||||||
|
numericRange?: { min: number; max: number }
|
||||||
}> = []
|
}> = []
|
||||||
|
|
||||||
// If new propertyFilters exist and are not empty, use them
|
// If new propertyFilters exist and are not empty, use them
|
||||||
|
|||||||
Reference in New Issue
Block a user