Skip to content

Commit 544acb4

Browse files
committed
fix: do not throw on missing metadata
1 parent c8a33e6 commit 544acb4

File tree

6 files changed

+40
-17
lines changed

6 files changed

+40
-17
lines changed

.changeset/witty-shirts-film.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@hydrofoil/shaperone-wc": patch
3+
---
4+
5+
Do not throw when meta is missing

packages/core/models/editors/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export interface SingleEditorMatch extends SingleEditor {
3131
score: number | null
3232
}
3333

34-
type EditorMap<T> = Record<string, T>
34+
type EditorMap<T> = Record<string, T | undefined>
3535

3636
export interface EditorsState {
3737
metadata: AnyPointer

packages/core/models/editors/reducers/addMetadata.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,19 @@ type MultiEditors = EditorsState['multiEditors']
99
type SingleEditors = EditorsState['singleEditors']
1010

1111
function updateMeta<T>(metadata: AnyPointer) {
12-
return (previousValue: T, [key, editor]: [string, Editor<EditorMatcher>]): T => ({
13-
...previousValue,
14-
[key]: {
15-
...editor,
16-
meta: new EditorMeta(metadata.node(editor.term)),
17-
},
18-
})
12+
return (previousValue: T, [key, editor]: [string, Editor<EditorMatcher> | undefined]): T => {
13+
if (!editor) {
14+
return previousValue
15+
}
16+
17+
return {
18+
...previousValue,
19+
[key]: {
20+
...editor,
21+
meta: new EditorMeta(metadata.node(editor.term)),
22+
},
23+
}
24+
}
1925
}
2026

2127
export function addMetadata(state: EditorsState, dataset: DatasetCore): EditorsState {

packages/core/models/forms/effects.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,26 @@
11
import type { Store } from '../../state/index'
2+
import { Editor, MultiEditor, SingleEditor } from '../editors'
3+
4+
function toDefined<T>(arr: T[], next: T | undefined): T[] {
5+
if (!next) {
6+
return arr
7+
}
8+
9+
return [...arr, next]
10+
}
211

312
export function effects(store: Store) {
413
const dispatch = store.getDispatch()
514

615
return {
716
'editors/addMatchers': () => {
8-
const { editors: { singleEditors, multiEditors } } = store.getState()
17+
const { editors } = store.getState()
18+
const singleEditors = Object.values(editors.singleEditors).reduce<Editor<SingleEditor>[]>(toDefined, [])
19+
const multiEditors = Object.values(editors.multiEditors).reduce<Editor<MultiEditor>[]>(toDefined, [])
20+
921
dispatch.forms.setEditors({
10-
singleEditors: [...Object.values(singleEditors)],
11-
multiEditors: [...Object.values(multiEditors)],
22+
singleEditors,
23+
multiEditors,
1224
})
1325
},
1426
}

packages/core/test/models/editors/reducers/addMetadata.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ describe('core/models/editors/reducers/addMetadata', () => {
5050
const after = addMetadata(before, dataset)
5151

5252
// expect
53-
expect(after.allEditors[ex.Foo.value].meta.label).to.eq('Foo editor')
54-
expect(after.allEditors[ex.Bar.value].meta.label).to.eq('Bar editor')
55-
expect(after.singleEditors[ex.Foo.value].meta.label).to.eq('Foo editor')
56-
expect(after.singleEditors[ex.Bar.value].meta.label).to.eq('Bar editor')
53+
expect(after.allEditors[ex.Foo.value]?.meta.label).to.eq('Foo editor')
54+
expect(after.allEditors[ex.Bar.value]?.meta.label).to.eq('Bar editor')
55+
expect(after.singleEditors[ex.Foo.value]?.meta.label).to.eq('Foo editor')
56+
expect(after.singleEditors[ex.Bar.value]?.meta.label).to.eq('Bar editor')
5757
})
5858
})

packages/wc/DefaultRenderer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ export const DefaultRenderer: Renderer = {
6767
}
6868
const component = components[editor.value]
6969
if (!component) {
70-
return html`No component found for ${editors.allEditors[editor.value].meta.label}`
70+
return html`No component found for ${editors.allEditors[editor.value]?.meta.label || editor.value}`
7171
}
7272

7373
if (!component.loaded) {
@@ -126,7 +126,7 @@ export const DefaultRenderer: Renderer = {
126126
}
127127
const component = components[editor.value]
128128
if (!component) {
129-
return html`No component found for ${editors.allEditors[editor.value].meta.label}`
129+
return html`No component found for ${editors.allEditors[editor.value]?.meta.label || editor.value}`
130130
}
131131

132132
if (!component.loaded) {

0 commit comments

Comments
 (0)