Skip to content

Commit dcc6a40

Browse files
committed
refactor(auth): drop stale area compat
1 parent eda4309 commit dcc6a40

5 files changed

Lines changed: 36 additions & 89 deletions

File tree

server/src/utils/areaPerms.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -564,6 +564,7 @@ function normalizeAreaRestrictions(areaRestrictions, req) {
564564
usesGlobalAreaLookup ? globalAreas : requestAreas,
565565
usesGlobalAreaLookup ? globalAreaMaps : requestAreaMaps,
566566
false,
567+
'key',
567568
)
568569
})
569570

src/components/Config.jsx

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,6 @@ import { deepMerge } from '@utils/deepMerge'
1313
import { useHideElement } from '@hooks/useHideElement'
1414
import { getGlowRules } from '@utils/getGlowRules'
1515
import { useScannerSessionStorage } from '@features/scanner'
16-
import {
17-
getScanAreaMenuFeatures,
18-
migrateLegacyAreaKeys,
19-
} from '@features/scanArea/utils'
2016
import { timeCheck } from '@utils/timeCheck'
2117
import { analytics } from '@utils/analytics'
2218
import { checkHoliday } from '@features/holiday'
@@ -53,15 +49,6 @@ export function Config({ children }) {
5349
const localState = JSON.parse(
5450
localStorage.getItem('local-state') || '{ "state": {} }',
5551
)
56-
const selectedAreas = localState?.state?.filters?.scanAreas?.filter?.areas
57-
const migratedAreas =
58-
selectedAreas?.length && data.scanAreasMenu?.length
59-
? migrateLegacyAreaKeys(
60-
getScanAreaMenuFeatures(data.scanAreasMenu),
61-
selectedAreas,
62-
data.user?.perms?.areaRestrictions || [],
63-
)
64-
: null
6552

6653
/**
6754
* @template T
@@ -114,20 +101,6 @@ export function Config({ children }) {
114101
useScannerSessionStorage.setState((prev) => ({
115102
cooldown: Math.max(prev.cooldown, data.user.cooldown || 0),
116103
}))
117-
if (migratedAreas) {
118-
useStorage.setState((prev) => ({
119-
filters: {
120-
...prev.filters,
121-
scanAreas: {
122-
...prev.filters.scanAreas,
123-
filter: {
124-
...prev.filters.scanAreas?.filter,
125-
areas: migratedAreas,
126-
},
127-
},
128-
},
129-
}))
130-
}
131104
useMemory.setState({
132105
auth: {
133106
strategy: data.user?.strategy || '',

src/features/scanArea/ScanAreaTile.jsx

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { useWebhookStore, handleClick } from '@store/useWebhookStore'
88
import { useMemory } from '@store/useMemory'
99
import { useStorage } from '@store/useStorage'
1010
import { getProperName } from '@utils/strings'
11-
import { getAreaKeys, getValidAreaKeys, migrateLegacyAreaKeys } from './utils'
11+
import { getAreaKeys, getValidAreaKeys } from './utils'
1212

1313
/**
1414
*
@@ -28,19 +28,9 @@ function ScanArea(featureCollection) {
2828
(s) => s.auth.perms.areaRestrictions || [],
2929
)
3030
const webhook = useWebhookStore((s) => !!s.mode)
31-
const migratedAreas = React.useMemo(
32-
() =>
33-
migrateLegacyAreaKeys(
34-
featureCollection.features,
35-
selectedAreas,
36-
accessibleAreaKeys,
37-
),
38-
[accessibleAreaKeys, featureCollection.features, selectedAreas],
39-
)
40-
const effectiveSelectedAreas = migratedAreas || selectedAreas
4131
const selectionKey = React.useMemo(
42-
() => [...effectiveSelectedAreas].sort().join(','),
43-
[effectiveSelectedAreas],
32+
() => [...selectedAreas].sort().join(','),
33+
[selectedAreas],
4434
)
4535
const orderedFeatureCollection = React.useMemo(
4636
() => ({
@@ -90,9 +80,9 @@ function ScanArea(featureCollection) {
9080
)
9181
const { setAreas } = useStorage.getState()
9282
const hasAll = areaKeys.every((area) =>
93-
effectiveSelectedAreas.includes(area),
83+
selectedAreas.includes(area),
9484
)
95-
const legacyGroupKey = layer.feature.properties.parent
85+
const groupKey = layer.feature.properties.parent
9686
? featureCollection.features.find(
9787
(feature) =>
9888
!feature.properties.manual &&
@@ -105,7 +95,7 @@ function ScanArea(featureCollection) {
10595
let nextAreaKeys = areaKeys
10696
let unselectAll = hasAll
10797

108-
if (legacyGroupKey && selectedAreas.includes(legacyGroupKey)) {
98+
if (groupKey && selectedAreas.includes(groupKey)) {
10999
const siblingAreaKeys = featureCollection.features
110100
.filter(
111101
(feature) =>
@@ -116,7 +106,7 @@ function ScanArea(featureCollection) {
116106
)
117107
.map((feature) => feature.properties.key)
118108
nextAreaKeys = [
119-
legacyGroupKey,
109+
groupKey,
120110
...(selectedAreas.includes(layer.feature.properties.key)
121111
? [layer.feature.properties.key]
122112
: []),
@@ -127,7 +117,7 @@ function ScanArea(featureCollection) {
127117
unselectAll = false
128118
} else if (areaKeys.length > 1 && !hasAll) {
129119
nextAreaKeys = areaKeys.filter(
130-
(area) => !effectiveSelectedAreas.includes(area),
120+
(area) => !selectedAreas.includes(area),
131121
)
132122
}
133123

@@ -145,7 +135,7 @@ function ScanArea(featureCollection) {
145135
accessibleAreaKeys,
146136
)
147137
const isSelected = areaKeys.length
148-
? areaKeys.every((area) => effectiveSelectedAreas.includes(area))
138+
? areaKeys.every((area) => selectedAreas.includes(area))
149139
: false
150140
const popupContent = getProperName(name)
151141
if (layer instanceof Polygon) {

src/features/scanArea/utils.js

Lines changed: 0 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,5 @@
11
// @ts-check
22

3-
/**
4-
* @param {import('@rm/types').Config['areas']['scanAreasMenu']} scanAreasMenu
5-
* @returns {Pick<import('@rm/types').RMFeature, 'properties'>[]}
6-
*/
7-
export function getScanAreaMenuFeatures(scanAreasMenu = []) {
8-
return scanAreasMenu.flatMap((parent) => [
9-
...(parent?.details ? [parent.details] : []),
10-
...(parent?.children || []),
11-
])
12-
}
13-
143
/**
154
* @param {Pick<import('@rm/types').RMFeature, 'properties'>[]} features
165
* @param {Pick<import('@rm/types').RMFeature, 'properties'>} feature
@@ -65,35 +54,3 @@ export function getValidAreaKeys(features, accessibleAreaKeys = []) {
6554
),
6655
]
6756
}
68-
69-
/**
70-
* @param {Pick<import('@rm/types').RMFeature, 'properties'>[]} features
71-
* @param {string[]} selectedAreas
72-
* @param {string[]} [accessibleAreaKeys]
73-
* @returns {string[] | null}
74-
*/
75-
export function migrateLegacyAreaKeys(
76-
features,
77-
selectedAreas,
78-
accessibleAreaKeys = [],
79-
) {
80-
const migrated = new Set(selectedAreas)
81-
let changed = false
82-
83-
features.forEach((feature) => {
84-
if (!feature.properties?.key || !migrated.has(feature.properties.key)) {
85-
return
86-
}
87-
88-
const areaKeys = getAreaKeys(features, feature, accessibleAreaKeys)
89-
if (areaKeys.length === 1 && areaKeys[0] === feature.properties.key) {
90-
return
91-
}
92-
93-
migrated.delete(feature.properties.key)
94-
areaKeys.forEach((area) => migrated.add(area))
95-
changed = true
96-
})
97-
98-
return changed ? [...migrated] : null
99-
}

src/store/useStorage.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import { persist, createJSONStorage } from 'zustand/middleware'
77

88
import { setDeep } from '@utils/setDeep'
99

10+
const SCAN_AREA_FILTER_RESET_VERSION = 1
11+
1012
/**
1113
* @typedef {{
1214
* darkMode: boolean,
@@ -174,6 +176,30 @@ export const useStorage = create(
174176
{
175177
name: 'local-state',
176178
storage: createJSONStorage(() => localStorage),
179+
version: SCAN_AREA_FILTER_RESET_VERSION,
180+
migrate: (persistedState, version) => {
181+
if (
182+
!persistedState ||
183+
version >= SCAN_AREA_FILTER_RESET_VERSION ||
184+
!persistedState.filters?.scanAreas?.filter?.areas
185+
) {
186+
return persistedState
187+
}
188+
189+
return {
190+
...persistedState,
191+
filters: {
192+
...persistedState.filters,
193+
scanAreas: {
194+
...persistedState.filters.scanAreas,
195+
filter: {
196+
...persistedState.filters.scanAreas.filter,
197+
areas: [],
198+
},
199+
},
200+
},
201+
}
202+
},
177203
},
178204
),
179205
)

0 commit comments

Comments
 (0)