@farm-investimentos/front-mfe-components 15.3.6 → 15.4.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farm-investimentos/front-mfe-components",
3
- "version": "15.3.6",
3
+ "version": "15.4.0",
4
4
  "author": "farm investimentos",
5
5
  "private": false,
6
6
  "main": "./dist/front-mfe-components.common.js",
@@ -77,14 +77,23 @@ export const IsNull = () => ({
77
77
  </div>`,
78
78
  });
79
79
 
80
- export const BottomFalse = () => ({
80
+ export const OnlyAllowedDates = () => ({
81
81
  data() {
82
82
  return {
83
- date: '2023-08-01',
83
+ date: '',
84
84
  };
85
85
  },
86
- template: `<div style='max-width: 320px'><farm-input-datepicker position="bottom" inputId="input-custom-id-1" v-model="date" /></div>`,
86
+ props: {
87
+ allowedDates: {
88
+ default: () => (value) => {
89
+ const day = parseInt(value.split('-')[2], 10);
90
+ return [5, 10, 15, 20, 25].includes(day);
91
+ }
92
+ }
93
+ },
94
+ template: `<div style='max-width: 320px'><farm-input-datepicker position="bottom" :allowed-dates="allowedDates" inputId="input-custom-id-1" v-model="date" /></div>`,
87
95
  });
96
+
88
97
  export const TopPositioned = () => ({
89
98
  data() {
90
99
  return {
@@ -107,4 +116,4 @@ export const CenterPositioned = () => ({
107
116
  <farm-input-datepicker inputId="input-custom-id-0" v-model="date" position="center" />
108
117
  {{ date }}
109
118
  </div>`,
110
- });
119
+ });
@@ -19,6 +19,7 @@
19
19
  :header-date-format="formatDatePickerHeader"
20
20
  :max="max"
21
21
  :min="min"
22
+ :allowed-dates="allowedDates"
22
23
  >
23
24
  <farm-btn plain title="Limpar" color="primary" :disabled="isDisabled" @click="clear">
24
25
  Limpar
@@ -45,7 +46,7 @@
45
46
  :readonly="readonly"
46
47
  :mask="`${readonly ? '' : '##/##/####'}`"
47
48
  :id="inputId"
48
- :rules="[checkDateValid, checkMax, checkMin, checkRequire]"
49
+ :rules="[checkDateValid, checkMax, checkMin, checkRequire, checkIsInAllowedDates]"
49
50
  @keyup="keyUpInput"
50
51
  />
51
52
  </template>
@@ -104,6 +105,13 @@ export default defineComponent({
104
105
  type: String as PropType<'top' | 'bottom' | 'center'>,
105
106
  default: 'bottom',
106
107
  },
108
+ /**
109
+ * Allowed dates to be selected and validated
110
+ */
111
+ allowedDates: {
112
+ type: Function,
113
+ default: () => {},
114
+ },
107
115
  /**
108
116
  * Required field (inside form)
109
117
  */
@@ -154,6 +162,15 @@ export default defineComponent({
154
162
  }
155
163
  return true;
156
164
  },
165
+ checkIsInAllowedDates: value => {
166
+ const dateSelected = convertDate(value);
167
+
168
+ if (!this.required && value.length === 0) {
169
+ return true;
170
+ }
171
+
172
+ return this.allowedDates(dateSelected) || 'Data inválida';
173
+ },
157
174
  };
158
175
  },
159
176
  watch: {
@@ -0,0 +1,49 @@
1
+ @import '../TextFieldV2/TextFieldV2.scss';
2
+ @import '../../configurations/mixins';
3
+
4
+ .farm-select {
5
+ &__hint-text {
6
+ @include hintText;
7
+ }
8
+ }
9
+
10
+ .farm-listitem--selected {
11
+ background-color: var(--farm-neutral-lighten);
12
+ }
13
+
14
+ .farm-contextmenu {
15
+ width: 100%;
16
+ }
17
+
18
+ .farm-icon {
19
+ transition: all ease 0.3s;
20
+ cursor: pointer;
21
+
22
+ &--rotate {
23
+ transform: rotate(180deg);
24
+ }
25
+ }
26
+
27
+ .farm-select__checkbox {
28
+ margin-right: 8px;
29
+ }
30
+
31
+ :deep(.farm-listitem:hover .farm-typography) {
32
+ color: var(--farm-primary-base);
33
+ }
34
+
35
+ :deep(.farm-listitem:focus .farm-typography) {
36
+ color: var(--farm-primary-base);
37
+ }
38
+
39
+ :deep(.farm-listitem:hover .farm-checkbox .farm-icon) {
40
+ color: var(--farm-primary-lighten);
41
+ }
42
+
43
+ :deep(.farm-listitem:focus .farm-checkbox .farm-icon) {
44
+ color: var(--farm-primary-lighten);
45
+ }
46
+
47
+ :deep(.farm-listitem:hover .farm-checkbox.farm-checkbox--checked .farm-icon) {
48
+ color: white;
49
+ }
@@ -0,0 +1,328 @@
1
+ import SelectAutoComplete from './SelectAutoComplete.vue';
2
+
3
+ export default {
4
+ title: 'Form/SelectAutoComplete',
5
+ component: SelectAutoComplete,
6
+ };
7
+
8
+ export const Primary = () => ({
9
+ data() {
10
+ return {
11
+ v: null,
12
+ items: [
13
+ { value: 0, text: 'value 0' },
14
+ { value: 1, text: 'value 1' },
15
+ { value: 2, text: 'value 2' },
16
+ { value: 3, text: 'value 3' },
17
+ ],
18
+ };
19
+ },
20
+ template: `<div style="width: 120px;">
21
+ <farm-label for="select_id">
22
+ label
23
+ </farm-label>
24
+ <farm-select-auto-complete id="select_id" v-model="v" :items="items" />
25
+ v-model: {{ v }}
26
+
27
+ </div>`,
28
+ });
29
+
30
+ export const InitialValue = () => ({
31
+ data() {
32
+ return {
33
+ v: 1,
34
+ items: [
35
+ { value: 1, text: ' value 1' },
36
+ { value: 2, text: ' value 2' },
37
+ { value: 3, text: ' value 3' },
38
+ ],
39
+ };
40
+ },
41
+ template: `<div style="width: 480px">
42
+ <farm-select-auto-complete v-model="v" :items="items" />
43
+ v-model: {{ v }}
44
+ </div>`,
45
+ });
46
+
47
+ export const Readonly = () => ({
48
+ data() {
49
+ return {
50
+ v: 1,
51
+ items: [
52
+ { value: 1, text: ' value 1' },
53
+ { value: 2, text: ' value 2' },
54
+ { value: 3, text: ' value 3' },
55
+ ],
56
+ };
57
+ },
58
+ template: `<div style="width: 480px">
59
+ <farm-select-auto-complete v-model="v" :items="items" readonly />
60
+ v-model: {{ v }}
61
+ </div>`,
62
+ });
63
+
64
+ export const HintText = () => ({
65
+ data() {
66
+ return {
67
+ v: null,
68
+ items: [
69
+ { value: 1, text: ' value 1' },
70
+ { value: 2, text: ' value 2' },
71
+ { value: 3, text: ' value 3' },
72
+ ],
73
+ };
74
+ },
75
+ template: `<div style="width: 480px">
76
+ <farm-select-auto-complete v-model="v" :items="items" hint="Hint Text" :persistent-hint="false" />
77
+ v-model: {{ v }}
78
+ </div>`,
79
+ });
80
+
81
+ export const PersistentHintText = () => ({
82
+ data() {
83
+ return {
84
+ v: null,
85
+ items: [
86
+ { value: 1, text: ' value 1' },
87
+ { value: 2, text: ' value 2' },
88
+ { value: 3, text: ' value 3' },
89
+ ],
90
+ };
91
+ },
92
+ template: `<div style="width: 480px">
93
+ <farm-select-auto-complete v-model="v" :items="items" hint="Hint Text" />
94
+ v-model: {{ v }}
95
+ </div>`,
96
+ });
97
+
98
+ export const Disabled = () => ({
99
+ data() {
100
+ return {
101
+ v: 1,
102
+ items: [
103
+ { value: 1, text: ' value 1' },
104
+ { value: 2, text: ' value 2' },
105
+ { value: 3, text: ' value 3' },
106
+ ],
107
+ };
108
+ },
109
+ template: `<div style="width: 480px">
110
+ <farm-select-auto-complete v-model="v" :items="items" disabled />
111
+ v-model: {{ v }}
112
+ </div>`,
113
+ });
114
+
115
+ export const Validate = () => ({
116
+ data() {
117
+ return {
118
+ v: null,
119
+ items: [
120
+ { value: 1, text: ' value 1' },
121
+ { value: 2, text: ' value 2' },
122
+ { value: 3, text: ' value 3' },
123
+ ],
124
+ rules: {
125
+ required: value => !!value || 'Required field',
126
+ },
127
+ };
128
+ },
129
+ template: `<div style="width: 480px">
130
+ <farm-label required>Required</farm-label>
131
+ <farm-select-auto-complete v-model="v" :items="items" :rules="[rules.required]" />
132
+ v-model: {{ v }}
133
+ </div>`,
134
+ });
135
+
136
+ export const Reset = () => ({
137
+ data() {
138
+ return {
139
+ v: null,
140
+ items: [
141
+ { value: 1, text: ' value 1' },
142
+ { value: 2, text: ' value 2' },
143
+ { value: 3, text: ' value 3' },
144
+ ],
145
+ rules: {
146
+ required: value => !!value || 'Required field',
147
+ },
148
+ };
149
+ },
150
+ methods: {
151
+ click() {
152
+ this.$refs.select.reset();
153
+ },
154
+ },
155
+ template: `<div style="width: 480px">
156
+ <farm-select-auto-complete v-model="v" :items="items" ref="select" :rules="[rules.required]" />
157
+ v-model: {{ v }}
158
+ <farm-btn @click="click">
159
+ reset
160
+ </farm-btn>
161
+ </div>`,
162
+ });
163
+
164
+ export const CustomKeys = () => ({
165
+ data() {
166
+ return {
167
+ v: null,
168
+ items: [
169
+ { id: 1, label: ' value 1' },
170
+ { id: 2, label: ' value 2' },
171
+ { id: 3, label: ' value 3' },
172
+ ],
173
+ };
174
+ },
175
+ template: `<div style="width: 480px">
176
+ <farm-select-auto-complete v-model="v" :items="items" item-text="label" item-value="id" />
177
+ v-model: {{ v }}
178
+ </div>`,
179
+ });
180
+
181
+ export const OutsideChangeVmodel = () => ({
182
+ data() {
183
+ return {
184
+ v: null,
185
+ items: [
186
+ { value: 1, text: 'value 1' },
187
+ { value: 2, text: 'value 2' },
188
+ { value: 3, text: 'value 3' },
189
+ ],
190
+ };
191
+ },
192
+ methods: {
193
+ onClick() {
194
+ this.v = 2;
195
+ },
196
+ },
197
+ template: `<div style="width: 120px">
198
+ <farm-select-auto-complete v-model="v" :items="items" />
199
+ v-model: {{ v }}
200
+ <farm-btn @click="onClick">
201
+ change value
202
+ </farm-btn>
203
+ </div>`,
204
+ });
205
+
206
+ export const NoItems = () => ({
207
+ data() {
208
+ return {
209
+ v: null,
210
+ items: [],
211
+ };
212
+ },
213
+ template: `<div style="width: 120px">
214
+ <farm-select-auto-complete v-model="v" :items="items" />
215
+ v-model: {{ v }}
216
+ </div>`,
217
+ });
218
+
219
+ export const Multiple = () => ({
220
+ data() {
221
+ return {
222
+ v: null,
223
+ items: [
224
+ { value: 0, text: 'value 0' },
225
+ { value: 1, text: 'value 1' },
226
+ { value: 2, text: 'value 2' },
227
+ { value: 3, text: 'value 3' },
228
+ ],
229
+ };
230
+ },
231
+ template: `<div style="width: 400px">
232
+ <farm-select-auto-complete v-model="v" :items="items" multiple />
233
+ v-model: {{ v }}
234
+ </div>`,
235
+ });
236
+
237
+ export const MultipleInitValue = () => ({
238
+ data() {
239
+ return {
240
+ v: [2, 3],
241
+ items: [
242
+ { id: 0, label: 'value 0' },
243
+ { id: 1, label: 'value 1' },
244
+ { id: 2, label: 'value 2' },
245
+ { id: 3, label: 'value 3' },
246
+ ],
247
+ };
248
+ },
249
+ methods: {
250
+ click() {
251
+ this.$refs.select.reset();
252
+ },
253
+ },
254
+ template: `<div style="width: 400px">
255
+ <farm-select-auto-complete
256
+ v-model="v"
257
+ item-value="id"
258
+ item-text="label"
259
+ ref="select"
260
+ multiple
261
+ :items="items"
262
+ />
263
+ v-model: {{ v }}
264
+ <farm-btn @click="click">
265
+ reset
266
+ </farm-btn>
267
+ </div>`,
268
+ });
269
+
270
+ export const MultipleResetByValue = () => ({
271
+ data() {
272
+ return {
273
+ filters: {
274
+ v: null,
275
+ },
276
+ items: [
277
+ { id: 1, label: 'value 1' },
278
+ { id: 2, label: 'value 2' },
279
+ { id: 3, label: 'value 3' },
280
+ ],
281
+ };
282
+ },
283
+ methods: {
284
+ click() {
285
+ this.filters.v = [1];
286
+ },
287
+ },
288
+ template: `<div style="width: 400px">
289
+ <farm-select-auto-complete
290
+ v-model="filters.v"
291
+ item-value="id"
292
+ item-text="label"
293
+ ref="select"
294
+ multiple
295
+ :items="items"
296
+ />
297
+ v-model: {{ filters.v }}
298
+ <farm-btn @click="click">
299
+ reset
300
+ </farm-btn>
301
+ </div>`,
302
+ });
303
+
304
+ export const ChangeEvent = () => ({
305
+ data() {
306
+ return {
307
+ v: null,
308
+ items: [
309
+ { value: 0, text: 'value 0' },
310
+ { value: 1, text: 'value 1' },
311
+ { value: 2, text: 'value 2' },
312
+ { value: 3, text: 'value 3' },
313
+ ],
314
+ };
315
+ },
316
+ methods: {
317
+ onChange(value) {
318
+ alert('Selected value: ' + value);
319
+ },
320
+ },
321
+ template: `<div style="width: 120px;">
322
+ <farm-label for="select_id">
323
+ label
324
+ </farm-label>
325
+ <farm-select-auto-complete id="select_id" v-model="v" :items="items" @change="onChange" />
326
+
327
+ </div>`,
328
+ });