{group.name}}
- secondary={
-
-
- {group.type}
-
- {group.now}
-
-
-
- }
- slotProps={{
- secondary: {
- component: 'div',
- sx: {
- display: 'flex',
- alignItems: 'center',
- color: '#ccc',
- },
- },
- }}
- />
-
- )
-
- const proxyCount = (
-
-
-
- alpha(theme.palette.primary.main, 0.1),
- color: (theme) => theme.palette.primary.main,
- }}
- />
-
-
- )
-
- const toolsBlock = (
-
- {toolsOnLeft && proxyCount}
- onLocation(group)}
- onCheckDelay={() => onCheckAll(group.name)}
- onHeadState={(p) => onHeadState(group.name, p)}
- />
- {!toolsOnLeft && proxyCount}
-
- )
-
- return (
-
- {
- if (headState?.open) {
- onGroupToggle?.(group)
- }
- onHeadState?.(group.name, { open: !headState?.open })
- }}
- >
-
-
- {toolsOnLeft ? toolsBlock : nameBlock}
- {toolsOnLeft ? nameBlock : toolsBlock}
- {headState?.open ? : }
-
-
-
-
- )
- }
+ if (type === 0) return
if (type === 1) {
return (
@@ -271,23 +291,7 @@ export const ProxyRender = memo(function ProxyRender(props: RenderProps) {
}
if (type === 3) {
- return (
-
-
-
- {t('proxies.page.empty.noProxies')}
-
-
- )
+ return
}
if (type === 4) {
diff --git a/src/components/proxy/use-render-list.test.ts b/src/components/proxy/use-render-list.test.ts
index fe3ac7e13..86e547014 100644
--- a/src/components/proxy/use-render-list.test.ts
+++ b/src/components/proxy/use-render-list.test.ts
@@ -106,14 +106,21 @@ it('skips delay-independent projections and reuses members for delay sorting', (
}
state.delays.set('plain', { of: () => 42 })
state.delays.set('sorted', { of: () => 42 })
- render()
+ const initial = render().renderList
vi.mocked(filterSort).mockClear()
vi.mocked(resolveMember).mockClear()
state.delays.set('plain', { of: () => 43 })
- render()
+ const flatMap = vi.spyOn(Array.prototype, 'flatMap')
+ const flat = vi.spyOn(Array.prototype, 'flat')
+ const unrelated = render().renderList
expect(filterSort).toHaveBeenCalledTimes(0)
+ expect(flatMap.mock.calls.length + flat.mock.calls.length).toBe(0)
+ expect(unrelated.filter((item, i) => item !== initial[i])).toHaveLength(0)
state.delays.set('sorted', { of: () => 43 })
- render()
+ const settled = render().renderList
expect(filterSort).toHaveBeenCalledTimes(1)
expect(resolveMember).toHaveBeenCalledTimes(0)
+ expect(settled.filter((item, i) => item !== initial[i])).toHaveLength(0)
+ flatMap.mockRestore()
+ flat.mockRestore()
})
diff --git a/src/components/proxy/use-render-list.ts b/src/components/proxy/use-render-list.ts
index 24f1a182e..116f73972 100644
--- a/src/components/proxy/use-render-list.ts
+++ b/src/components/proxy/use-render-list.ts
@@ -68,6 +68,7 @@ type GroupCache = {
/// does not throw away every other group's sorted order.
delays: DelaySnapshot | undefined
occurrences: ResolvedMemberOccurrence[] | undefined
+ projected: ResolvedMemberOccurrence[] | undefined
items: IRenderItem[]
}
@@ -260,11 +261,15 @@ export const useRenderList = (
const groupCacheRef = useRef