diff options
| author | taehoon <th.dev91@gmail.com> | 2019-04-03 21:13:25 -0400 |
|---|---|---|
| committer | taehoon <th.dev91@gmail.com> | 2019-04-17 11:32:48 -0400 |
| commit | a50999093716d8ce6db47a47b9290395456985de (patch) | |
| tree | 11fafba72ac65f46303d9c7bd1b3d77334798870 /src/components/checkbox/checkbox.js | |
| parent | e9f4244b26832009bb0648afdb8e9c48177503ae (diff) | |
add checkbox component
Diffstat (limited to 'src/components/checkbox/checkbox.js')
| -rw-r--r-- | src/components/checkbox/checkbox.js | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/components/checkbox/checkbox.js b/src/components/checkbox/checkbox.js new file mode 100644 index 00000000..76e7e4f4 --- /dev/null +++ b/src/components/checkbox/checkbox.js @@ -0,0 +1,44 @@ +// TODO: Template-based functional component is supported in vue-loader 13.3.0+. +// Also, somehow, props are not provided through 'context' even though they are defined. +// Need to upgrade vue-loader + +import './checkbox.scss' + +export default { + functional: true, + name: 'Checkbox', + model: { + prop: 'checked', + event: 'change' + }, + render (createElement, { data, children }) { + const { props = {}, attrs = {}, on = {}, ...rest } = data + const { name, checked, disabled, readonly, ...restAttrs } = attrs + const { change, ...restListeners } = on + const wrapperProps = { + attrs: restAttrs, + on: restListeners, + ...rest + } + const inputProps = { + attrs: { + name, + checked, + disabled, + readonly, + ...props + }, + on: {} + } + if (change) { + inputProps.on.change = e => change(e.target.checked) + } + return ( + <label class="checkbox" {...wrapperProps}> + <input type="checkbox" {...inputProps} /> + <i class="checkbox-indicator" /> + {children && <span>{children}</span>} + </label> + ) + } +} |
