Skip to content

Commit 340574a

Browse files
committed
feat: add specification for textarea
1 parent 0131ce7 commit 340574a

File tree

5 files changed

+108
-31
lines changed

5 files changed

+108
-31
lines changed

docs/ru/inputs/input-password.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ ____
6767
Поле не прошло валидацию:
6868
<FormField :errors = "['The password is too simple']" type = "password" name = "pass" label = "С ошибкой" />
6969

70-
____
7170

7271

7372
----

docs/ru/inputs/input-textarea.md

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
<script setup>
2+
import {FormField, Form, useFormValues} from '../../../src';
3+
4+
const form = new Form();
5+
const values = useFormValues(form)
6+
7+
</script>
8+
9+
# Поле textarea
10+
11+
Поле используется для ввода длинного текста.
12+
13+
- Ключевое слово `textarea`.
14+
- WhatWG [Спецификация](https://html.spec.whatwg.org/multipage/form-elements.html#the-textarea-element).
15+
16+
## Параметры
17+
18+
### autofocus <Badge type = "info">Необязательный</Badge>
19+
20+
- Тип `boolean | 'true' | 'false'`
21+
22+
Если данный параметр передаётся, при установке данного поля, на него будет автоматически передано управление.
23+
24+
### autoresize <Badge type = "info">Необязательный</Badge>
25+
- Тип `boolean | number | string`
26+
27+
После ввода данных поле будет растягиваться, если данный параметр задан.
28+
29+
Если передать `true`, поле будет
30+
растягиваться под размер текста внутри него.
31+
32+
Передача численного значения установит максимальное количество
33+
строк, которое поле будет отображать без прокрутки. При превышении это количества
34+
появится вертикальная прокрутка.
35+
36+
### placeholder <Badge type = "info">Необязательный</Badge>
37+
- Тип `string`
38+
39+
Строковое значение подсказки перед вводом данных.
40+
41+
____
42+
43+
Так же все параметры, общие для всех `FormField`. Информацию о них можно посмотреть на [этой странице](./form-field.md#params).
44+
45+
## Значение
46+
47+
Данное поле работает со строковыми значениями.
48+
49+
## Спецификация
50+
51+
- Поле доступно при использовании `Tab` и `Shift + Tab`.
52+
- Блокировка отменяет навигацию через `Tab`.
53+
- Блокировка поля изменяет стилистику `textarea`.
54+
- Ошибка валидации изменяет стилистику `textarea`.
55+
- При установке `autoresize` размер должен всегда проверяться, при изменении
56+
значения
57+
58+
## Примеры
59+
60+
61+
Для данного поля нет дополнительных обязательных параметров, по этому нам необходимо
62+
указать лишь `type` и `name`:
63+
64+
::: code-group
65+
66+
```html
67+
<form-field name = "pass" type="textarea"/>
68+
```
69+
70+
```ts
71+
import {FormField} from "jenesius-vue-form";
72+
73+
```
74+
75+
:::
76+
77+
Поле по умолчанию:
78+
<FormField type = "textarea" name = "description" label = "Введите описание" />
79+
80+
____
81+
82+
В заблокированном состоянии:
83+
<FormField disabled type = "textarea" name = "description" label = "Заблокированное" />
84+
85+
____
86+
87+
Поле не прошло валидацию:
88+
<FormField :errors = "['The password is too simple']" type = "textarea" name = "description" label = "С ошибкой" />
89+
90+
____
91+
92+
Автоматическое увеличение поля при изменении данных:
93+
<FormField autoresize type = "textarea" name = "description" label = "Делаем больше" />
94+
95+
96+
----
97+
Текущее состояние формы:
98+
```ts-vue
99+
{{values}}
100+
```

project/pages/test/App.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
<button @click = "show = !show">{{labelButton}}</button>
1111
<br>
1212

13+
<textarea rows="10"/>
14+
1315
<button @click = "change">change field name</button>
1416
<button @click = "clean">clean values</button>
1517

src/widgets/inputs/input-textarea/widget-input-textarea.vue

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
<script setup lang="ts">
1919
import FieldWrap from "../field-wrap.vue";
20-
import {onMounted, ref, watch} from "vue";
20+
import {nextTick, onMounted, ref, watch} from "vue";
2121
2222
const props = withDefaults(defineProps<{
2323
label?: string,
@@ -62,13 +62,11 @@ function resize() {
6262
}
6363
6464
watch(() => props.modelValue, () => {
65-
resize()
65+
nextTick(resize)
6666
}, {
6767
immediate: true
6868
})
69-
onMounted(() => {
70-
resize()
71-
})
69+
onMounted(resize)
7270
7371
</script>
7472

tests/integrations/inputs/input-textarea.spec.ts

Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ function defaultMount(component = defineTextareaComponent()) {
2121
})
2222
}
2323

24-
describe("Input checkbox", () => {
24+
describe("Input Password", () => {
2525
let app: VueWrapper<any>
2626
let form: Form
2727
let input: Omit<DOMWrapper<HTMLTextAreaElement>, "exists">
@@ -58,7 +58,8 @@ describe("Input checkbox", () => {
5858
await app.vm.$nextTick();
5959
const text = "Information about jenesius"
6060
await input.setValue(text);
61-
expect(form.getValueByName(name)).toBe(text)
61+
await app.vm.$nextTick()
62+
expect(form.getValueByName(name)).toBe(undefined)
6263
})
6364
test("При блокировании поля меняет стилистика", async () => {
6465
expect(app.find(".input-textarea:disabled").exists()).toBe(false)
@@ -74,27 +75,4 @@ describe("Input checkbox", () => {
7475
expect(app.find('.input-textarea_error').exists()).toBe(true)
7576
})
7677

77-
78-
test("При вводе большого текста в поле, оно должно увеличиваться в размере", async () => {
79-
80-
console.log(input.element.scrollHeight, input.element.clientHeight)
81-
const text = `
82-
КЛАРА У КАРЛА
83-
УКРАЛА
84-
КАРАЛЛЫ
85-
А
86-
КАРЛ
87-
У КЛАРЫ
88-
УКРАЛ
89-
КЛАРНЕТ
90-
А Я
91-
ПОСЕДЕЛ
92-
ПИСАВ
93-
ЭТИ ТЕСТЫ И ЭТУ ДОКУ
94-
`
95-
await input.setValue(text);
96-
console.log(input.element.scrollHeight, input.element.clientHeight)
97-
98-
})
99-
10078
})

0 commit comments

Comments
 (0)