Skip to content

Commit 44e44ef

Browse files
committed
Extract a selectContentTypesForm component from editProject
and also: - move common into app dir - dialog.appenChild This form will be reused in the main project editing flow. so it was time to componentize
1 parent 1e52742 commit 44e44ef

5 files changed

Lines changed: 64 additions & 29 deletions

File tree

src/cms/server/public/app/components/dialog.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ const dialog = {
2424
return this.$content.innerHTML
2525
},
2626

27+
appendChild(node) {
28+
this.$content.appendChild(node)
29+
return this
30+
},
31+
2732
show() {
2833
this.$el.showModal()
2934
},
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { createDOMNodeFromHTML } from '../common.js'
2+
3+
const template = ({ defaultContentTypes }) => {
4+
return (
5+
`<form>
6+
<h1>content types</h1>
7+
${defaultContentTypes.map(contentType => `
8+
<label><input type="checkbox" name="${contentType.name}">${contentType.name}</label>
9+
`
10+
).join('')}
11+
12+
<button>Ok</button>
13+
</form>`
14+
)
15+
}
16+
17+
const selectContentTypesForm = ({ defaultContentTypes, onSubmit }) => {
18+
const onFormSubmit = async (e) => {
19+
e.preventDefault()
20+
const formData = new FormData($el)
21+
const keyValues = Array.from(formData.entries())
22+
const selectedKeys = keyValues.filter(([key, value]) => value === 'on').map(([key]) => key)
23+
const selectedContentTypes = defaultContentTypes.filter(ct => selectedKeys.includes(ct.name))
24+
onSubmit(selectedContentTypes)
25+
}
26+
27+
const addEventListeners = () => {
28+
$el.addEventListener('submit', onFormSubmit)
29+
}
30+
31+
const html = template({
32+
defaultContentTypes
33+
})
34+
const $el = createDOMNodeFromHTML(html)
35+
36+
addEventListeners()
37+
38+
return {
39+
$el
40+
}
41+
}
42+
43+
export default selectContentTypesForm

src/cms/server/public/app/editProject.js

Lines changed: 15 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import api from '../api.js'
2-
import { setIframeSrc } from '../common.js'
2+
import { setIframeSrc } from './common.js'
33
import dialog from './components/dialog.js'
4+
import selectContentTypesForm from './components/selectContentTypesForm.js'
45

56
const defaultContentTypes = [{
67
name: 'Homepage',
@@ -71,6 +72,7 @@ const defaultContentTypes = [{
7172
}
7273
}]
7374

75+
7476
const editProject = async ({ ssgOptions }) => {
7577
console.log('starting editor with ssgOptions', ssgOptions)
7678
await api.ssg.watch(ssgOptions)
@@ -81,34 +83,19 @@ const editProject = async ({ ssgOptions }) => {
8183
return console.log('contentTypes', contentTypes)
8284
}
8385
console.log('no contentTypes')
84-
85-
dialog.html(
86-
87-
`<h1>content types</h1>
88-
89-
<form>
90-
${defaultContentTypes.map(contentType => `
91-
<label><input type="checkbox" name="${contentType.name}">${contentType.name}</label>
92-
`
93-
).join('')}
94-
95-
<button>Ok</button>
96-
</form>`
97-
).show()
98-
99-
const form = dialog.find('form')
100-
form.addEventListener('submit', e => {
101-
const formData = new FormData(form)
102-
const keyValues = Array.from(formData.entries())
103-
const selectedKeys = keyValues.filter(([key, value]) => value === 'on').map(([key]) => key)
104-
const selectedContentTypes = defaultContentTypes.filter(ct => selectedKeys.includes(ct.name))
105-
console.log('selectedContentTypes', selectedContentTypes)
106-
e.preventDefault()
107-
selectedContentTypes.forEach(async contentType => {
108-
await api.contentTypes.create(contentType)
109-
})
110-
dialog.hide()
86+
const { $el: $contentTypeForm } = selectContentTypesForm({
87+
defaultContentTypes,
88+
onSubmit: (selectedContentTypes) => {
89+
console.log('selectedContentTypes', selectedContentTypes)
90+
selectedContentTypes.forEach(async contentType => {
91+
await api.contentTypes.create(contentType)
92+
})
93+
dialog.hide()
94+
}
11195
})
96+
dialog
97+
.appendChild($contentTypeForm)
98+
.show()
11299
}
113100

114101
export default editProject

src/cms/server/public/app/explorePanel.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { query, createDOMNodeFromHTML, setIframeSrc } from '../common.js'
1+
import { query, createDOMNodeFromHTML, setIframeSrc } from './common.js'
22
import ssgBuild from './explorePanel/ssgBuild.js'
33
import ssgWatch from './explorePanel/ssgWatch.js'
44
import ssgStopWatcher from './explorePanel/ssgStopWatcher.js'

0 commit comments

Comments
 (0)