Skip to content

Commit 33da836

Browse files
authored
Merge pull request nullstack#350 from nullstack/bind-date
✨ bind date
2 parents d0df4ef + eb2fd96 commit 33da836

File tree

4 files changed

+35
-0
lines changed

4 files changed

+35
-0
lines changed

client/events.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,12 @@ export function generateCallback(selector, name) {
6767
object[property] = event.target[valueName] === 'true'
6868
} else if (typeof object[property] === 'number') {
6969
object[property] = +event.target[valueName] || 0
70+
} else if (object[property] instanceof Date) {
71+
const [yyyy, mm, dd] = event.target[valueName].split('-')
72+
object[property].setFullYear(yyyy)
73+
object[property].setMonth(+mm - 1)
74+
object[property].setDate(dd)
75+
object[property] = object[property]
7076
} else {
7177
object[property] = event.target[valueName]
7278
}

plugins/bindable.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ function transform({ node, environment }) {
1212
node.children = [object[property] ?? '']
1313
} else if (node.type === 'input' && node.attributes.type === 'checkbox') {
1414
node.attributes.checked = object[property]
15+
} else if (node.type === 'input' && node.attributes.type === 'date' && object[property] instanceof Date) {
16+
const yyyy = object[property].getFullYear()
17+
const mm = (object[property].getMonth() + 1).toString().padStart(2, '0')
18+
const dd = object[property].getDate().toString().padStart(2, '0')
19+
node.attributes.value = `${yyyy}-${mm}-${dd}`
1520
} else {
1621
node.attributes.value = object[property] ?? ''
1722
}

tests/src/TwoWayBindings.njs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class TwoWayBindings extends Nullstack {
99
boolean = true
1010
character = 'a'
1111
text = 'aaaa'
12+
date = new Date()
1213

1314
object = { count: 1 }
1415
array = ['a', 'b', 'c']
@@ -143,6 +144,14 @@ class TwoWayBindings extends Nullstack {
143144
>
144145
rebounce
145146
</button>
147+
<input
148+
type="date"
149+
bind={this.date}
150+
data-instanceof-date={this.date instanceof Date}
151+
data-date={this.date.getDate()}
152+
data-month={this.date.getMonth() + 1}
153+
data-year={this.date.getFullYear()}
154+
/>
146155
</div>
147156
)
148157
}

tests/src/TwoWayBindings.test.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,4 +257,19 @@ describe('TwoWayBindings', () => {
257257
const element = await page.$('[data-render-clicked-and-inputed]')
258258
expect(element).toBeTruthy()
259259
})
260+
261+
test('dates can be bound to date inputs', async () => {
262+
await page.$eval('[data-instanceof-date]', (element) => {
263+
element.focus()
264+
element.value = '1992-10-16'
265+
element.blur()
266+
const event = new Event('input')
267+
element.dispatchEvent(event)
268+
})
269+
await page.waitForSelector('[data-date="16"]')
270+
await page.waitForSelector('[data-month="10"]')
271+
await page.waitForSelector('[data-year="1992"]')
272+
const element = await page.$('[data-date="16"]')
273+
expect(element).toBeTruthy()
274+
})
260275
})

0 commit comments

Comments
 (0)