Skip to content

Commit

Permalink
Containerize
Browse files Browse the repository at this point in the history
  • Loading branch information
cmdcolin committed Dec 14, 2023
1 parent d0df21b commit f3acb1c
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ const DropdownTrackSelector = observer(function ({
const { view } = model
const [open, setOpen] = useState(false)
const session = getSession(model)
console.log('k2', { tracks: tracks.map(t => t.trackId) })

Check warning on line 30 in plugins/data-management/src/HierarchicalTrackSelectorWidget/components/tree/DropdownTrackSelector.tsx

View workflow job for this annotation

GitHub Actions / Lint on node 20 and ubuntu-latest

Unexpected console statement
return view ? (
<CascadingMenuButton
closeAfterItemClick={false}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,12 @@ function postF() {
: 'empty'
}

function postF2(assemblyNames: string[] = []) {
return [postF(), assemblyNames.join(',')].filter(f => !!f).join('-')
}

const MAX_RECENTLY_USED = 10
const lsKeyFavoritesF = () => `favoriteTracks-${postF()}}`
const lsKeyRecentlyUsedF = () => `recentlyUsedTracks-${postF()}}`

/**
* #stateModel HierarchicalTrackSelectorWidget
Expand Down Expand Up @@ -87,21 +91,14 @@ export default function stateTreeFactory(pluginManager: PluginManager) {
favorites: types.optional(types.array(types.string), () =>
JSON.parse(localStorageGetItem(lsKeyFavoritesF()) || '[]'),
),
/**
* #property
* this is removed in postProcessSnapshot, so is generally only loaded
* from localstorage
*/
recentlyUsed: types.optional(types.array(types.string), () =>
JSON.parse(localStorageGetItem(lsKeyRecentlyUsedF()) || '[]'),
),

/**
* #property
*/
faceted: types.optional(facetedStateTreeF(), {}),
})
.volatile(() => ({
recentlyUsed: [] as string[],
selection: [] as AnyConfigurationModel[],
filterText: '',
recentlyUsedCounter: 0,
Expand Down Expand Up @@ -192,6 +189,12 @@ export default function stateTreeFactory(pluginManager: PluginManager) {
setRecentlyUsedCounter(val: number) {
self.recentlyUsedCounter = val
},
/**
* #action
*/
setRecentlyUsed(str: string[]) {
self.recentlyUsed = str
},
/**
* #action
*/
Expand All @@ -202,20 +205,23 @@ export default function stateTreeFactory(pluginManager: PluginManager) {
* #action
*/
addToRecentlyUsed(id: string) {
self.recentlyUsedCounter += 1
if (!self.recentlyUsed.includes(id)) {
if (self.recentlyUsed.length >= 10) {
self.recentlyUsed.shift()
}
self.recentlyUsed.push(id)
self.recentlyUsedCounter = Math.min(
self.recentlyUsedCounter + 1,
MAX_RECENTLY_USED,
)
self.recentlyUsed =
self.recentlyUsed.length >= MAX_RECENTLY_USED
? [...self.recentlyUsed.slice(1), id]
: [...self.recentlyUsed, id]
}
},

/**
* #action
*/
clearRecentlyUsed() {
self.recentlyUsed.clear()
self.recentlyUsed = []
},
/**
* #action
Expand Down Expand Up @@ -302,6 +308,9 @@ export default function stateTreeFactory(pluginManager: PluginManager) {
},
}))
.views(self => ({
get recentlyUsedLocalStorageKey() {
return `recentlyUsedTracks-${postF2(self.assemblyNames)}`
},
/**
* #getter
*/
Expand Down Expand Up @@ -331,34 +340,43 @@ export default function stateTreeFactory(pluginManager: PluginManager) {
...filterTracks(getSession(self).tracks, self),
].filter(notEmpty)
},

/**
* #getter
*/
get allTrackConfigurations() {
const { connectionInstances = [] } = getSession(self)
return [
...this.configAndSessionTrackConfigurations,
...connectionInstances?.flatMap(c => c.tracks),
]
},

/**
* #getter
*/
get allTrackConfigurationTrackIdSet() {
return new Map(this.allTrackConfigurations.map(t => [t.trackId, t]))
},
}))
.views(self => ({
/**
* #getter
* filters out tracks that are not in the favorites group
*/
get favoriteTracks() {
return self.allTrackConfigurations.filter(t =>
self.favoritesSet.has(t.trackId),
)
return self.favorites
.filter(t => self.allTrackConfigurationTrackIdSet.has(t))
.map(t => self.allTrackConfigurationTrackIdSet.get(t))
},

/**
* #getter
* filters out tracks that are not in the recently used group
*/
get recentlyUsedTracks() {
return self.allTrackConfigurations.filter(t =>
self.recentlyUsedSet.has(t.trackId),
)
return self.recentlyUsed
.filter(t => self.allTrackConfigurationTrackIdSet.has(t))
.map(t => self.allTrackConfigurationTrackIdSet.get(t))
},
}))
.views(self => ({
Expand Down Expand Up @@ -480,27 +498,37 @@ export default function stateTreeFactory(pluginManager: PluginManager) {
}))
.actions(self => ({
afterAttach() {
// this should be the first autorun to properly initialize
addDisposer(
self,
autorun(() => {
self.setRecentlyUsed(
JSON.parse(
localStorageGetItem(self.recentlyUsedLocalStorageKey) || '[]',
),
)
}),
)
// this should be the second autorun
addDisposer(
self,
autorun(() => {
localStorageSetItem(
lsKeyFavoritesF(),
JSON.stringify(self.favorites),
)
localStorageSetItem(
lsKeyRecentlyUsedF(),
JSON.stringify(self.recentlyUsed),
)
if (self.recentlyUsed) {
localStorageSetItem(
self.recentlyUsedLocalStorageKey,
JSON.stringify(self.recentlyUsed),
)
}
}),
)
},
}))
.postProcessSnapshot(snap => {
const {
favorites: _,
recentlyUsed: __,
...rest
} = snap as Omit<typeof snap, symbol>
const { favorites: _, ...rest } = snap as Omit<typeof snap, symbol>
return rest
})
}
Expand Down

0 comments on commit f3acb1c

Please sign in to comment.