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

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.1",
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: {
@@ -152,6 +152,19 @@ export default defineComponent({
152
152
  this.menuField = false;
153
153
  this.$refs.contextmenu.inputValue = false;
154
154
  },
155
+ sortDates(dates) {
156
+ if(dates?.length !== 2) {
157
+ return dates;
158
+ }
159
+ const firstDate = new Date(dates[0]);
160
+ const secondDate = new Date(dates[1]);
161
+
162
+ if (firstDate.getTime() < secondDate.getTime()) {
163
+ return [dates[0], dates[1]];
164
+ }
165
+
166
+ return [dates[1], dates[0]];
167
+ },
155
168
  formatDatePickerHeader,
156
169
  },
157
170
  computed: {
@@ -160,6 +173,7 @@ export default defineComponent({
160
173
  return this.value;
161
174
  },
162
175
  set(val) {
176
+ val = this.sortDates(val);
163
177
  this.$emit('input', val);
164
178
  },
165
179
  },
@@ -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
+ });