Skip to content

Commit 70bbf7a

Browse files
committed
refactor button components and add example code
1 parent 4f29358 commit 70bbf7a

File tree

3 files changed

+174
-0
lines changed

3 files changed

+174
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<template>
2+
<openwb-base-setting-element>
3+
<template #title>{{ title }}</template>
4+
<template #help>
5+
<slot name="help"></slot>
6+
</template>
7+
<template #default>
8+
<div class="btn-group btn-block btn-group-toggle">
9+
<label
10+
v-for="button in buttons"
11+
:key="button.value"
12+
class="btn"
13+
:class="[
14+
value == button.buttonValue ? 'active' : '',
15+
button.class ? button.class : 'btn-outline-info',
16+
]"
17+
>
18+
<input
19+
type="radio"
20+
v-model="value"
21+
:value="button.buttonValue"
22+
v-bind="$attrs"
23+
/>
24+
{{ button.text }}
25+
<font-awesome-icon
26+
:icon="['fas', 'check']"
27+
:style="[
28+
value == button.buttonValue
29+
? 'visibility: visible'
30+
: 'visibility: hidden',
31+
]"
32+
/>
33+
</label>
34+
</div>
35+
</template>
36+
</openwb-base-setting-element>
37+
</template>
38+
39+
<script>
40+
import { library } from "@fortawesome/fontawesome-svg-core";
41+
import {
42+
faQuestionCircle as fasQuestionCircle,
43+
faCheck as fasCheck,
44+
} from "@fortawesome/free-solid-svg-icons";
45+
import { faQuestionCircle as farQuestionCircle } from "@fortawesome/free-regular-svg-icons";
46+
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
47+
48+
library.add(fasQuestionCircle, farQuestionCircle, fasCheck);
49+
50+
export default {
51+
name: "OpenwbButtonGroupInput",
52+
inheritAttrs: false,
53+
props: {
54+
title: String,
55+
modelValue: { type: [String, Number, Boolean] },
56+
buttons: Object,
57+
},
58+
emits: ["update:modelValue"],
59+
data() {
60+
return {
61+
showHelp: false,
62+
};
63+
},
64+
computed: {
65+
value: {
66+
get() {
67+
return this.modelValue;
68+
},
69+
set(newValue) {
70+
this.$emit("update:modelValue", newValue);
71+
},
72+
},
73+
},
74+
methods: {
75+
toggleHelp() {
76+
this.showHelp = !this.showHelp && this.$slots.help !== undefined;
77+
},
78+
},
79+
components: {
80+
FontAwesomeIcon,
81+
},
82+
};
83+
</script>
+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<template>
2+
<openwb-base-setting-element>
3+
<template #title>{{ title }}</template>
4+
<template #help>
5+
<slot name="help"></slot>
6+
</template>
7+
<template #default>
8+
<openwb-base-click-button
9+
:class="(disabled ? 'btn-outline-' : 'btn-') + subtype"
10+
:disabled="disabled"
11+
v-bind="$attrs"
12+
@buttonClicked.stop="handleClick"
13+
>
14+
{{ buttonText }}
15+
</openwb-base-click-button>
16+
</template>
17+
</openwb-base-setting-element>
18+
</template>
19+
20+
<script>
21+
export default {
22+
name: "OpenwbButtonInput2",
23+
inheritAttrs: false,
24+
props: {
25+
title: String,
26+
buttonText: String,
27+
disabled: { type: Boolean, default: false },
28+
subtype: {
29+
type: String,
30+
validator: function (value) {
31+
return (
32+
[
33+
"info",
34+
"success",
35+
"warning",
36+
"danger",
37+
"primary",
38+
"secondary",
39+
"light",
40+
"dark",
41+
].indexOf(value) !== -1
42+
);
43+
},
44+
default: "secondary",
45+
},
46+
},
47+
emits: ["buttonClicked"],
48+
methods: {
49+
handleClick(event) {
50+
this.$emit("buttonClicked", event);
51+
},
52+
},
53+
};
54+
</script>

src/views/TestingStore.vue

+37
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,43 @@
11
<template>
22
<div class="testingStore">
33
<form name="testingStoreForm">
4+
<openwb-base-card title="Elemente mit BaseSettingElement">
5+
<OpenwbBaseHeading>
6+
Basiselement
7+
</OpenwbBaseHeading>
8+
<OpenwbBaseSettingElement>
9+
<template #help>
10+
Basis-Element für alle weiteren Elemente.
11+
Das ist ein <a href="test">Link</a>.
12+
</template>
13+
</OpenwbBaseSettingElement>
14+
<OpenwbBaseHeading>
15+
Abgeleitete Elemente
16+
</OpenwbBaseHeading>
17+
<openwb-base-button-input2
18+
title="Button Input"
19+
buttonText="Klick mich"
20+
subtype="info"
21+
>
22+
<template #help>
23+
Einfacher Click-Button für Aktionen.
24+
</template>
25+
</openwb-base-button-input2>
26+
<openwb-base-button-group-input2
27+
title="Button Group Input"
28+
:buttons="[
29+
{ buttonValue: 1, text: 'Eins' },
30+
{ buttonValue: 2, text: 'Zwei' },
31+
]"
32+
:model-value="$store.state.examples.buttonGroup1"
33+
@update:model-value="updateState('buttonGroup1', $event)"
34+
>
35+
<template #help>
36+
Button-Group Element zur Auswahl weniger Optionen.
37+
Bei vielen Optionen besser ein Dropdown verwenden.
38+
</template>
39+
</openwb-base-button-group-input2>
40+
</openwb-base-card>
441
<openwb-base-card title="Einfache Eingabefelder">
542
<openwb-base-text-input
643
title="1. Text"

0 commit comments

Comments
 (0)