feat(node-modal): restore Parent Container selector for child types

Adds back the Parent Container selector in NodeModal, shown when:
- child type is lxc or vm (parents: proxmox/vm/lxc/docker_host)
- child type is docker_container (parents: docker_host/lxc/vm/proxmox)

Selector hidden when no valid candidate node exists on the canvas.
Centralizes the parent-type allowlist in getValidParentTypes
(shared with the virtual-edge auto-parent helper).

ha-relevant: yes
This commit is contained in:
Pouzor
2026-05-16 17:08:06 +02:00
parent 43426e96ac
commit 3a4df578ec
4 changed files with 92 additions and 6 deletions
@@ -311,18 +311,48 @@ describe('NodeModal', () => {
expect(screen.queryByText('Reset to defaults')).toBeNull()
})
// ── Parent Container selector removed ────────────────────────────────
// ── Parent Container selector ─────────────────────────────────────────
it('does not render the Parent Container selector', () => {
renderModal({ initial: BASE })
it('does not render Parent Container for non-child types', () => {
renderModal({
initial: BASE,
parentCandidates: [{ id: 'p1', label: 'Proxmox', type: 'proxmox' }],
})
expect(screen.queryByText('Parent Container')).toBeNull()
})
it('does not render Parent Container for docker_container either', () => {
renderModal({ initial: { ...BASE, type: 'docker_container' } })
it('does not render Parent Container when no valid candidates exist', () => {
renderModal({
initial: { ...BASE, type: 'docker_container' },
parentCandidates: [],
})
expect(screen.queryByText('Parent Container')).toBeNull()
})
it('renders Parent Container for docker_container when docker_host candidate exists', () => {
renderModal({
initial: { ...BASE, type: 'docker_container' },
parentCandidates: [{ id: 'dh1', label: 'Docker Host', type: 'docker_host' }],
})
expect(screen.getByText('Parent Container')).toBeDefined()
})
it('renders Parent Container for docker_container when only an LXC candidate exists', () => {
renderModal({
initial: { ...BASE, type: 'docker_container' },
parentCandidates: [{ id: 'lxc1', label: 'My LXC', type: 'lxc' }],
})
expect(screen.getByText('Parent Container')).toBeDefined()
})
it('renders Parent Container for lxc when proxmox candidate exists', () => {
renderModal({
initial: { ...BASE, type: 'lxc' },
parentCandidates: [{ id: 'px1', label: 'PVE', type: 'proxmox' }],
})
expect(screen.getByText('Parent Container')).toBeDefined()
})
// ── Appearance ────────────────────────────────────────────────────────
it('renders 3 color swatch labels (border, background, icon)', () => {