@westartcom/bread-quasar-fields 0.0.6 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/fields/CheckboxField.vue +5 -5
- package/fields/EmailField.vue +2 -1
- package/fields/ModelSearchField.vue +3 -2
- package/fields/NumberField.vue +10 -11
- package/fields/SelectField.vue +5 -2
- package/fields/TelField.vue +8 -9
- package/fields/TextField.vue +1 -1
- package/fields/TextareaField.vue +11 -11
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -1 +1,9 @@
|
|
|
1
|
+
# Introduction
|
|
2
|
+
|
|
1
3
|
This is a library to enable quasar in the bread framework. You are meant to import these fields into your `ModelForm.vue` file.
|
|
4
|
+
|
|
5
|
+
# TODO
|
|
6
|
+
|
|
7
|
+
- [ ] Think about the dependencies of this library, it's not really optional depending on what fields you are using, right now it's forcing install of all dependices even though you might not be using the field at all.
|
|
8
|
+
- [ ] Interfaces and Enums, should they be in this library or in the install of the bread framework?
|
|
9
|
+
- [ ] `RepeatableNestedFieldsField.vue` requires `ModelForm.vue` which is not included in this library, should it be?
|
package/fields/CheckboxField.vue
CHANGED
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
:value="optionValue"
|
|
20
20
|
v-model="internalValue">
|
|
21
21
|
|
|
22
|
-
<
|
|
23
|
-
<
|
|
22
|
+
<i class="fa-regular fa-square-check fa-fw" v-if="internalValue && internalValue.includes(optionValue)"></i>
|
|
23
|
+
<i class="fa-regular fa-square fa-fw" v-if="!internalValue || !internalValue.includes(optionValue)"></i>
|
|
24
24
|
|
|
25
25
|
{{ label }}
|
|
26
26
|
</label>
|
|
@@ -71,8 +71,8 @@ export default defineComponent({
|
|
|
71
71
|
],
|
|
72
72
|
|
|
73
73
|
components: {
|
|
74
|
-
CheckboxBlankOutlineIcon: defineAsyncComponent(() => import('@westartcom/bread-quasar-fields/icons/CheckboxBlankOutlineIcon.vue')),
|
|
75
|
-
CheckboxMarkedIcon: defineAsyncComponent(() => import('@westartcom/bread-quasar-fields/icons/CheckboxMarkedIcon.vue'))
|
|
74
|
+
// CheckboxBlankOutlineIcon: defineAsyncComponent(() => import('@westartcom/bread-quasar-fields/icons/CheckboxBlankOutlineIcon.vue')),
|
|
75
|
+
// CheckboxMarkedIcon: defineAsyncComponent(() => import('@westartcom/bread-quasar-fields/icons/CheckboxMarkedIcon.vue'))
|
|
76
76
|
},
|
|
77
77
|
|
|
78
78
|
data() {
|
|
@@ -154,7 +154,7 @@ export default defineComponent({
|
|
|
154
154
|
user-select: none;
|
|
155
155
|
cursor: pointer;
|
|
156
156
|
display: inline-flex;
|
|
157
|
-
align-items:
|
|
157
|
+
align-items: center;
|
|
158
158
|
|
|
159
159
|
:deep(svg) {
|
|
160
160
|
margin-right: var(--global-spacing-half);
|
package/fields/EmailField.vue
CHANGED
|
@@ -12,8 +12,9 @@
|
|
|
12
12
|
:maxlength="(field.extra_data && field.extra_data.max) ? field.extra_data.max : null"
|
|
13
13
|
:minlength="(field.extra_data && field.extra_data.min) ? field.extra_data.min : null"
|
|
14
14
|
v-model="internalValue"
|
|
15
|
-
:rules="(field.required) ? [val => !!val || '
|
|
15
|
+
:rules="(field.required) ? [val => !!val || $i18n.get('validation.required', { attribute: field.label as string })] : []"
|
|
16
16
|
:hint="field.description"
|
|
17
|
+
:errors="internalErrors"
|
|
17
18
|
outlined>
|
|
18
19
|
</q-input>
|
|
19
20
|
</div>
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
</template>
|
|
34
34
|
|
|
35
35
|
<div class="toggle-button" v-show="!isLoadingInitial" @click="toggleOptions">
|
|
36
|
-
<
|
|
37
|
-
<
|
|
36
|
+
<i class="q-icon fa-solid fa-angle-down q-select__dropdown-icon" aria-hidden="true" role="presentation" v-if="!select.visible"> </i>
|
|
37
|
+
<i class="q-icon fa-solid fa-angle-up q-select__dropdown-icon" aria-hidden="true" role="presentation" v-if="select.visible"> </i>
|
|
38
38
|
</div>
|
|
39
39
|
</div>
|
|
40
40
|
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
class="q-px-md"
|
|
46
46
|
placeholder="Search.."
|
|
47
47
|
v-model="select.searchQuery"
|
|
48
|
+
input-debounce="300"
|
|
48
49
|
borderless
|
|
49
50
|
clearable
|
|
50
51
|
clear-icon="fa-regular fa-circle-xmark"></q-input>
|
package/fields/NumberField.vue
CHANGED
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="field-wrap"
|
|
2
|
+
<div :id="id" class="field-wrap">
|
|
3
3
|
<div class="field-wrap-inner">
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
</div>
|
|
7
|
-
|
|
8
|
-
<input
|
|
4
|
+
<q-input
|
|
5
|
+
:label="field.label + ((field.required) ? ' *' : '')"
|
|
9
6
|
:name="field.name"
|
|
10
7
|
:id="id + '-input'"
|
|
11
8
|
:placeholder="field.placeholder"
|
|
12
|
-
:max="(field.extra_data && field.extra_data.max) ? field.extra_data.max : null"
|
|
13
|
-
:min="(field.extra_data && field.extra_data.min) ? field.extra_data.min : null"
|
|
14
9
|
type="number"
|
|
15
10
|
class="field"
|
|
16
11
|
:class="{'invalid': (invalid && internalErrors && internalErrors.length)}"
|
|
17
|
-
|
|
12
|
+
:maxlength="(field.extra_data && field.extra_data.max) ? field.extra_data.max : null"
|
|
13
|
+
:minlength="(field.extra_data && field.extra_data.min) ? field.extra_data.min : null"
|
|
14
|
+
v-model="internalValue"
|
|
15
|
+
:rules="(field.required) ? [val => !!val || 'Field is required'] : []"
|
|
16
|
+
:hint="field.description"
|
|
17
|
+
outlined>
|
|
18
|
+
</q-input>
|
|
18
19
|
</div>
|
|
19
20
|
|
|
20
|
-
<div class="field-description" v-if="field.description">{{ field.description }}</div>
|
|
21
|
-
|
|
22
21
|
<div class="validation-errors" v-if="invalid && internalErrors && internalErrors.length">
|
|
23
22
|
<span class="error danger-txt-color" v-for="(error, index) in internalErrors" :key="index + 'error'">{{ error }}</span>
|
|
24
23
|
</div>
|
package/fields/SelectField.vue
CHANGED
|
@@ -18,8 +18,9 @@
|
|
|
18
18
|
<q-chip
|
|
19
19
|
removable
|
|
20
20
|
icon-remove="fa-solid fa-remove"
|
|
21
|
-
@remove="scope.removeAtIndex(scope.index)"
|
|
22
|
-
|
|
21
|
+
@remove="scope.removeAtIndex(scope.index)"
|
|
22
|
+
v-if="modelValue">
|
|
23
|
+
{{ filteredOptions[modelValue] }}
|
|
23
24
|
</q-chip>
|
|
24
25
|
</template>
|
|
25
26
|
</q-select>
|
|
@@ -118,6 +119,7 @@ import pickBy from 'lodash-es/pickBy';
|
|
|
118
119
|
import { ModelFieldDefinition } from '@westartcom/bread-quasar-fields/interfaces/ModelDefinition';
|
|
119
120
|
import { FieldType } from '@westartcom/bread-quasar-fields/enums/FieldType';
|
|
120
121
|
import { InputType } from '@westartcom/bread-quasar-fields/enums/InputType';
|
|
122
|
+
import {upperCase} from "lodash-es";
|
|
121
123
|
|
|
122
124
|
interface SelectFieldDefinition extends ModelFieldDefinition<FieldType.ENUM, InputType.SELECT> {
|
|
123
125
|
default: string;
|
|
@@ -296,6 +298,7 @@ export default defineComponent({
|
|
|
296
298
|
},
|
|
297
299
|
|
|
298
300
|
methods: {
|
|
301
|
+
upperCase,
|
|
299
302
|
qFilter(val, update) {
|
|
300
303
|
this.select.searchQuery = val;
|
|
301
304
|
update(() => {
|
package/fields/TelField.vue
CHANGED
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="field-wrap" :id="id">
|
|
3
3
|
<div class="field-wrap-inner">
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
</div>
|
|
7
|
-
|
|
8
|
-
<input
|
|
4
|
+
<q-input
|
|
5
|
+
:label="field.label + ((field.required) ? ' *' : '')"
|
|
9
6
|
:name="field.name"
|
|
10
7
|
:id="id + '-input'"
|
|
11
|
-
maxlength="255"
|
|
12
8
|
:placeholder="field.placeholder"
|
|
13
9
|
type="tel"
|
|
14
10
|
class="field"
|
|
15
11
|
:class="{'invalid': (invalid && internalErrors && internalErrors.length)}"
|
|
16
|
-
|
|
12
|
+
:maxlength="255"
|
|
13
|
+
v-model="internalValue"
|
|
14
|
+
:rules="(field.required) ? [val => !!val || 'Field is required'] : []"
|
|
15
|
+
:hint="field.description"
|
|
16
|
+
outlined>
|
|
17
|
+
</q-input>
|
|
17
18
|
</div>
|
|
18
19
|
|
|
19
|
-
<div class="field-description" v-if="field.description">{{ field.description }}</div>
|
|
20
|
-
|
|
21
20
|
<div class="validation-errors" v-if="invalid && internalErrors && internalErrors.length">
|
|
22
21
|
<span class="error danger-txt-color" v-for="(error, index) in internalErrors" :key="index + 'error'">{{ error }}</span>
|
|
23
22
|
</div>
|
package/fields/TextField.vue
CHANGED
package/fields/TextareaField.vue
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="field-wrap"
|
|
2
|
+
<div :id="id" class="field-wrap">
|
|
3
3
|
<div class="field-wrap-inner">
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
</div>
|
|
7
|
-
|
|
8
|
-
<textarea
|
|
4
|
+
<q-input
|
|
5
|
+
:label="field.label + ((field.required) ? ' *' : '')"
|
|
9
6
|
:name="field.name"
|
|
10
7
|
:id="id + '-input'"
|
|
11
8
|
:placeholder="field.placeholder"
|
|
12
|
-
|
|
13
|
-
:minlength="(field.extra_data && field.extra_data.min) ? field.extra_data.min : null"
|
|
14
|
-
rows="5"
|
|
9
|
+
type="textarea"
|
|
15
10
|
class="field"
|
|
16
11
|
:class="{'invalid': (invalid && internalErrors && internalErrors.length)}"
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
:maxlength="(field.extra_data && field.extra_data.max) ? field.extra_data.max : null"
|
|
13
|
+
:minlength="(field.extra_data && field.extra_data.min) ? field.extra_data.min : null"
|
|
14
|
+
v-model="internalValue"
|
|
15
|
+
:rules="(field.required) ? [val => !!val || 'Field is required'] : []"
|
|
16
|
+
:hint="field.description"
|
|
17
|
+
outlined>
|
|
18
|
+
</q-input>
|
|
19
19
|
</div>
|
|
20
20
|
|
|
21
21
|
<div class="field-description" v-if="field.description">{{ field.description }}</div>
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@westartcom/bread-quasar-fields",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8",
|
|
4
4
|
"description": "Quasar compatible fields for bread package",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
8
|
},
|
|
9
|
+
"private": false,
|
|
9
10
|
"author": "Christoffer",
|
|
10
11
|
"license": "ISC",
|
|
11
12
|
"dependencies": {
|