#50 pronouns cards - sorting

This commit is contained in:
Avris 2020-10-25 12:30:55 +01:00
parent 4d510d8176
commit 4ed81ecdfb
5 changed files with 49 additions and 10 deletions

View File

@ -1,9 +1,14 @@
<template> <template>
<ul class="list-unstyled"> <draggable tag="ul" v-model="iVal" handle=".handle" ghostClass="ghost" @end="$emit('input', iVal)" class="list-unstyled" :group="group">
<li v-for="(v, i) in value" ref="items"> <li v-for="(v, i) in iVal" ref="items">
<div class="input-group mb-1"> <div class="input-group mb-1">
<slot v-bind:val="value[i]" v-bind:update="curry(update)(i)"> <div class="input-group-prepend">
<input v-model="value[i]" type="text" class="form-control" required/> <button class="btn btn-light border handle" type="button">
<Icon v="bars"/>
</button>
</div>
<slot v-bind:val="iVal[i]" v-bind:update="curry(update)(i)">
<input v-model="iVal[i]" type="text" class="form-control" required/>
</slot> </slot>
<div class="input-group-append"> <div class="input-group-append">
<button class="btn btn-outline-danger" type="button" @click.prevent="remove(i)"> <button class="btn btn-outline-danger" type="button" @click.prevent="remove(i)">
@ -13,27 +18,38 @@
</div> </div>
</li> </li>
<li> <li slot="footer">
<button class="btn btn-outline-success btn-block" type="button" @click.prevent="add"> <button class="btn btn-outline-success btn-block" type="button" @click.prevent="add">
<Icon v="plus"/> <Icon v="plus"/>
</button> </button>
</li> </li>
</ul> </draggable>
</template> </template>
<script> <script>
import { curry } from "../src/helpers"; import { curry } from "../src/helpers";
import draggable from 'vuedraggable'
export default { export default {
components: {
draggable,
},
props: { props: {
value: {}, value: {},
prototype: { 'default': '' }, prototype: { 'default': '' },
group: {},
}, },
data() { data() {
return { return {
iVal: this.value,
curry: curry, curry: curry,
} }
}, },
watch: {
value() {
this.iVal = this.value;
}
},
methods: { methods: {
remove(i) { remove(i) {
const v = [...this.value]; const v = [...this.value];
@ -54,3 +70,10 @@
}, },
} }
</script> </script>
<style lang="scss" scoped>
.ghost {
opacity: 0.5;
background: #c8ebfb;
}
</style>

View File

@ -1,5 +1,5 @@
<template> <template>
<ListInput v-model="v" :prototype="{key: '', value: 0}" v-slot="s"> <ListInput v-model="v" :prototype="{key: '', value: 0}" v-slot="s" :group="group">
<div class="input-group-prepend"> <div class="input-group-prepend">
<button type="button" :class="['btn', parseInt(s.val.value) === 1 ? 'btn-primary' : 'btn-outline-secondary']" <button type="button" :class="['btn', parseInt(s.val.value) === 1 ? 'btn-primary' : 'btn-outline-secondary']"
@click="s.update({key: s.val.key, value: 1})"> @click="s.update({key: s.val.key, value: 1})">
@ -20,7 +20,10 @@
<script> <script>
export default { export default {
props: { value: {} }, props: {
value: {},
group: {},
},
data() { return { v: this.value } }, data() { return { v: this.value } },
watch: { v() { this.$emit('input', this.v); } } watch: { v() { this.$emit('input', this.v); } }
} }

View File

@ -27,7 +27,8 @@
"sqlite3": "^5.0.0", "sqlite3": "^5.0.0",
"suml-loader": "^0.1.1", "suml-loader": "^0.1.1",
"ulid": "^2.3.0", "ulid": "^2.3.0",
"vue-matomo": "^3.13.5-0" "vue-matomo": "^3.13.5-0",
"vuedraggable": "^2.24.3"
}, },
"devDependencies": { "devDependencies": {
"@fortawesome/fontawesome-pro": "git+ssh://git@gitlab.com:Avris/FontAwesomePro.git", "@fortawesome/fontawesome-pro": "git+ssh://git@gitlab.com:Avris/FontAwesomePro.git",

View File

@ -72,7 +72,7 @@
<h4 class="h5"> <h4 class="h5">
<T>profile.column</T> {{i + 1}} <T>profile.column</T> {{i + 1}}
</h4> </h4>
<OpinionListInput v-model="words[i]"/> <OpinionListInput v-model="words[i]" group="words"/>
</template> </template>
</div> </div>

View File

@ -7863,6 +7863,11 @@ sort-keys@^2.0.0:
dependencies: dependencies:
is-plain-obj "^1.0.0" is-plain-obj "^1.0.0"
sortablejs@1.10.2:
version "1.10.2"
resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.10.2.tgz#6e40364d913f98b85a14f6678f92b5c1221f5290"
integrity sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A==
source-list-map@^2.0.0: source-list-map@^2.0.0:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
@ -8787,6 +8792,13 @@ vue@^2.6.12:
resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.12.tgz#f5ebd4fa6bd2869403e29a896aed4904456c9123" resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.12.tgz#f5ebd4fa6bd2869403e29a896aed4904456c9123"
integrity sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg== integrity sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==
vuedraggable@^2.24.3:
version "2.24.3"
resolved "https://registry.yarnpkg.com/vuedraggable/-/vuedraggable-2.24.3.tgz#43c93849b746a24ce503e123d5b259c701ba0d19"
integrity sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g==
dependencies:
sortablejs "1.10.2"
vuex@^3.5.1: vuex@^3.5.1:
version "3.5.1" version "3.5.1"
resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.5.1.tgz#f1b8dcea649bc25254cf4f4358081dbf5da18b3d" resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.5.1.tgz#f1b8dcea649bc25254cf4f4358081dbf5da18b3d"