diff --git a/src/components/selectable_list/selectable_list.js b/src/components/selectable_list/selectable_list.js
index 93efa840..809133f5 100644
--- a/src/components/selectable_list/selectable_list.js
+++ b/src/components/selectable_list/selectable_list.js
@@ -6,14 +6,32 @@ const SelectableList = {
List,
Checkbox
},
- props: List.props,
+ props: {
+ items: {
+ type: Array,
+ default: () => []
+ },
+ getKey: {
+ type: Function,
+ default: item => item.id
+ }
+ },
data () {
return {
selected: []
}
},
+ computed: {
+ allSelected () {
+ return !this.items.find(item => !this.isSelected(item))
+ }
+ },
methods: {
- toggle (checked, key) {
+ isSelected (item) {
+ return this.selected.indexOf(this.getKey(item)) !== -1
+ },
+ toggle (checked, item) {
+ const key = this.getKey(item)
const oldChecked = this.isSelected(key)
if (checked !== oldChecked) {
if (checked) {
@@ -23,8 +41,12 @@ const SelectableList = {
}
}
},
- isSelected (key) {
- return this.selected.indexOf(key) !== -1
+ toggleAll (value) {
+ if (value) {
+ this.selected = this.items.map(this.getKey)
+ } else {
+ this.selected = []
+ }
}
}
}
diff --git a/src/components/selectable_list/selectable_list.vue b/src/components/selectable_list/selectable_list.vue
index d8938062..e8c5d09b 100644
--- a/src/components/selectable_list/selectable_list.vue
+++ b/src/components/selectable_list/selectable_list.vue
@@ -1,14 +1,21 @@
-
-
-
-
- toggle(checked, p.keyVal)" />
-
-
+
+
+
+
+
+
+ toggle(checked, p.item)" />
+
+
+
+
+
+
@@ -19,6 +26,7 @@
.selectable-list {
&-item-inner {
display: flex;
+ align-items: center;
}
&-item-selected-inner {
@@ -26,8 +34,14 @@
background-color: var(--lightBg, $fallback--lightBg);
}
+ &-header {
+ display: flex;
+ align-items: center;
+ padding: 0.6em 0;
+ }
+
&-checkbox-wrapper {
- padding: 10px;
+ padding: 0 10px;
flex: none;
}
}
--
cgit v1.2.3-70-g09d2
From 468aec0de1b7e25a66eb9e6ef44cf9787d0c6d86 Mon Sep 17 00:00:00 2001
From: taehoon
Date: Sat, 6 Apr 2019 13:14:43 -0400
Subject: rewrite checkbox component as non-functional
---
src/components/checkbox/checkbox.js | 44 ------------------------
src/components/checkbox/checkbox.scss | 49 ---------------------------
src/components/checkbox/checkbox.vue | 63 +++++++++++++++++++++++++++++++++++
3 files changed, 63 insertions(+), 93 deletions(-)
delete mode 100644 src/components/checkbox/checkbox.js
delete mode 100644 src/components/checkbox/checkbox.scss
create mode 100644 src/components/checkbox/checkbox.vue
(limited to 'src/components/checkbox')
diff --git a/src/components/checkbox/checkbox.js b/src/components/checkbox/checkbox.js
deleted file mode 100644
index 76e7e4f4..00000000
--- a/src/components/checkbox/checkbox.js
+++ /dev/null
@@ -1,44 +0,0 @@
-// 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 (
-
- )
- }
-}
diff --git a/src/components/checkbox/checkbox.scss b/src/components/checkbox/checkbox.scss
deleted file mode 100644
index 42556d89..00000000
--- a/src/components/checkbox/checkbox.scss
+++ /dev/null
@@ -1,49 +0,0 @@
-@import '../../_variables.scss';
-
-.checkbox {
- position: relative;
- display: inline-block;
- padding-left: 1.2em;
- min-height: 1.2em;
-
- &-indicator::before {
- position: absolute;
- left: 0;
- top: 0;
- display: block;
- content: '✔';
- transition: color 200ms;
- width: 1.1em;
- height: 1.1em;
- border-radius: $fallback--checkboxRadius;
- border-radius: var(--checkboxRadius, $fallback--checkboxRadius);
- box-shadow: 0px 0px 2px black inset;
- box-shadow: var(--inputShadow);
- background-color: $fallback--fg;
- background-color: var(--input, $fallback--fg);
- vertical-align: top;
- text-align: center;
- line-height: 1.1em;
- font-size: 1.1em;
- color: transparent;
- overflow: hidden;
- box-sizing: border-box;
- }
-
- input[type=checkbox] {
- display: none;
-
- &:checked + .checkbox-indicator::before {
- color: $fallback--text;
- color: var(--text, $fallback--text);
- }
-
- &:disabled + .checkbox-indicator::before {
- opacity: .5;
- }
- }
-
- & > span {
- margin-left: .5em;
- }
-}
diff --git a/src/components/checkbox/checkbox.vue b/src/components/checkbox/checkbox.vue
new file mode 100644
index 00000000..5f55c5bf
--- /dev/null
+++ b/src/components/checkbox/checkbox.vue
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
--
cgit v1.2.3-70-g09d2
From 8088043a0c811a2e215e12715029ca8563ac2304 Mon Sep 17 00:00:00 2001
From: taehoon
Date: Sat, 6 Apr 2019 13:21:41 -0400
Subject: import scss variables
---
src/components/checkbox/checkbox.vue | 2 ++
1 file changed, 2 insertions(+)
(limited to 'src/components/checkbox')
diff --git a/src/components/checkbox/checkbox.vue b/src/components/checkbox/checkbox.vue
index 5f55c5bf..b821a4f6 100644
--- a/src/components/checkbox/checkbox.vue
+++ b/src/components/checkbox/checkbox.vue
@@ -13,6 +13,8 @@ export default {