@winchsa/ui 0.1.15 → 0.1.17
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/dist/components/forms/LicensePlateInput.vue +8 -10
- package/dist/components/forms/LicensePlateInput.vue.d.ts +7 -1
- package/dist/components/forms/ManualDate.vue +4 -2
- package/dist/components/forms/ManualDate.vue.d.ts +4 -0
- package/dist/components/forms/TimePicker.vue +1 -1
- package/dist/components/table/EditableDataTable.vue.d.ts +2 -0
- package/dist/components/table/EditableDataTableRow.vue +10 -3
- package/dist/types.d.ts +5 -0
- package/dist/utils/ruleValidator.d.ts +1 -0
- package/dist/utils/ruleValidator.js +8 -1
- package/dist/utils/ruleValidator.mjs +8 -1
- package/package.json +1 -1
|
@@ -7,7 +7,10 @@ const props = defineProps({
|
|
|
7
7
|
hideDetails: { type: Boolean, required: false },
|
|
8
8
|
label: { type: String, required: false },
|
|
9
9
|
customId: { type: String, required: false },
|
|
10
|
-
errorMessages: { type: [Array, String], required: false }
|
|
10
|
+
errorMessages: { type: [Array, String], required: false },
|
|
11
|
+
validateOn: { type: null, required: false, default: "submit lazy" },
|
|
12
|
+
error: { type: Boolean, required: false },
|
|
13
|
+
rules: { type: Array, required: false }
|
|
11
14
|
});
|
|
12
15
|
const model = defineModel({ type: [Array, null], ...{ default: ["", "", "", ""] } });
|
|
13
16
|
const LangLabel = computed(() => props.label ? t(props.label) : "");
|
|
@@ -63,12 +66,6 @@ const handleInput = (e, index) => {
|
|
|
63
66
|
const clear = () => {
|
|
64
67
|
model.value = null;
|
|
65
68
|
};
|
|
66
|
-
const requiredRule = (value) => {
|
|
67
|
-
if (value?.length !== 4 || !value.every((item) => item !== "")) {
|
|
68
|
-
return t("validation.required");
|
|
69
|
-
}
|
|
70
|
-
return true;
|
|
71
|
-
};
|
|
72
69
|
watch(() => model.value, (newVal) => {
|
|
73
70
|
if (Array.isArray(newVal)) {
|
|
74
71
|
model.value = newVal;
|
|
@@ -83,8 +80,9 @@ watch(() => model.value, (newVal) => {
|
|
|
83
80
|
<VValidation
|
|
84
81
|
v-slot="{ errorMessages: validationErrors, isValid }"
|
|
85
82
|
v-model="model"
|
|
86
|
-
:
|
|
87
|
-
|
|
83
|
+
:error="error"
|
|
84
|
+
:rules="rules"
|
|
85
|
+
:validate-on="validateOn"
|
|
88
86
|
>
|
|
89
87
|
<div class="d-flex flex-column h-100">
|
|
90
88
|
<VLabel
|
|
@@ -96,7 +94,7 @@ watch(() => model.value, (newVal) => {
|
|
|
96
94
|
class="app-license-plate-input position-relative"
|
|
97
95
|
style="min-height: 45px;"
|
|
98
96
|
:class="{
|
|
99
|
-
'app-license-plate-input--error':
|
|
97
|
+
'app-license-plate-input--error': error || isValid.value === false
|
|
100
98
|
}"
|
|
101
99
|
>
|
|
102
100
|
<input
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
import type { ValidateOn } from '../../types';
|
|
1
2
|
type __VLS_Props = {
|
|
2
3
|
hideDetails?: boolean;
|
|
3
4
|
label?: string;
|
|
4
5
|
customId?: string;
|
|
5
6
|
errorMessages?: string[] | string;
|
|
7
|
+
validateOn?: ValidateOn;
|
|
8
|
+
error?: boolean;
|
|
9
|
+
rules?: ((value: unknown) => string)[];
|
|
6
10
|
};
|
|
7
11
|
type __VLS_PublicProps = {
|
|
8
12
|
modelValue?: string[] | null;
|
|
@@ -11,5 +15,7 @@ declare const _default: import("vue").DefineComponent<__VLS_PublicProps, {}, {},
|
|
|
11
15
|
"update:modelValue": (value: string[] | null) => any;
|
|
12
16
|
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
13
17
|
"onUpdate:modelValue"?: ((value: string[] | null) => any) | undefined;
|
|
14
|
-
}>, {
|
|
18
|
+
}>, {
|
|
19
|
+
validateOn: "submit" | "lazy" | "input" | "blur" | "input lazy" | "blur lazy" | "submit lazy" | "lazy input" | "lazy blur" | "lazy submit";
|
|
20
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
15
21
|
export default _default;
|
|
@@ -12,6 +12,8 @@ const props = defineProps({
|
|
|
12
12
|
errorMessages: { type: [Array, String], required: false },
|
|
13
13
|
type: { type: null, required: false },
|
|
14
14
|
disabled: { type: Boolean, required: false },
|
|
15
|
+
validateOn: { type: null, required: false, default: "submit lazy" },
|
|
16
|
+
error: { type: Boolean, required: false },
|
|
15
17
|
rules: { type: Array, required: false }
|
|
16
18
|
});
|
|
17
19
|
const emit = defineEmits(["update:model-value"]);
|
|
@@ -142,8 +144,8 @@ watch(() => props.modelValue, (val) => {
|
|
|
142
144
|
<VValidation
|
|
143
145
|
v-slot="{ errorMessages: validationErrors, isValid }"
|
|
144
146
|
v-model="date"
|
|
147
|
+
:error="error"
|
|
145
148
|
:rules="rules"
|
|
146
|
-
validate-on="submit lazy"
|
|
147
149
|
>
|
|
148
150
|
<div class="d-flex flex-column">
|
|
149
151
|
<VLabel
|
|
@@ -152,7 +154,7 @@ watch(() => props.modelValue, (val) => {
|
|
|
152
154
|
:text="LangLabel"
|
|
153
155
|
/>
|
|
154
156
|
<div class="app-date-input position-relative" style="min-height: 45px;" :class="{
|
|
155
|
-
'app-date-input--error':
|
|
157
|
+
'app-date-input--error': isValid.value === false || yearIsInvalid || error,
|
|
156
158
|
'app-date-input--disabled': disabled
|
|
157
159
|
}">
|
|
158
160
|
<input
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ValidateOn } from '../../types';
|
|
1
2
|
type __VLS_Props = {
|
|
2
3
|
hideDetails?: boolean;
|
|
3
4
|
label?: string;
|
|
@@ -6,6 +7,8 @@ type __VLS_Props = {
|
|
|
6
7
|
errorMessages?: string[] | string;
|
|
7
8
|
type?: 'gregorian' | 'hijri' | string | undefined;
|
|
8
9
|
disabled?: boolean;
|
|
10
|
+
validateOn?: ValidateOn;
|
|
11
|
+
error?: boolean;
|
|
9
12
|
rules?: ((value: unknown) => string)[];
|
|
10
13
|
};
|
|
11
14
|
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
@@ -13,6 +16,7 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
13
16
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
14
17
|
"onUpdate:model-value"?: ((value: string) => any) | undefined;
|
|
15
18
|
}>, {
|
|
19
|
+
validateOn: "submit" | "lazy" | "input" | "blur" | "input lazy" | "blur lazy" | "submit lazy" | "lazy input" | "lazy blur" | "lazy submit";
|
|
16
20
|
customId: string;
|
|
17
21
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
18
22
|
export default _default;
|
|
@@ -48,6 +48,8 @@ declare const headers: import("vue").ComputedRef<{
|
|
|
48
48
|
options?: Record<string, unknown>[] | import("../../types").OptionItem[] | import("vue").Ref<import("../../types").OptionItem[]>;
|
|
49
49
|
disableIfEmpty?: boolean;
|
|
50
50
|
maxDate?: Date | null;
|
|
51
|
+
validateOn?: import("../../types").ValidateOn;
|
|
52
|
+
isAppRtl?: boolean;
|
|
51
53
|
}[]>;
|
|
52
54
|
declare const moduleIdentifier: import("vue").ComputedRef<string>;
|
|
53
55
|
declare const __VLS_ctx: InstanceType<__VLS_PickNotAny<typeof __VLS_self, new () => {}>>;
|
|
@@ -175,7 +175,7 @@ const placeholder = (header) => {
|
|
|
175
175
|
:params="autoCompleteParams"
|
|
176
176
|
:search-internally="header.searchInternally"
|
|
177
177
|
:searchable="header.searchable"
|
|
178
|
-
:fetch-enabled="header.dependsOn ? item[`${header.dependsOn}`] : true"
|
|
178
|
+
:fetch-enabled="header.dependsOn ? Boolean(item[`${header.dependsOn}`]) : true"
|
|
179
179
|
:group-label="header.groupLabel || 'name'"
|
|
180
180
|
:group-values="header.groupValues || 'children'"
|
|
181
181
|
:item-label="header.itemLabel || 'name'"
|
|
@@ -194,6 +194,7 @@ const placeholder = (header) => {
|
|
|
194
194
|
<DatePicker
|
|
195
195
|
v-if="header.type === 'datepicker'"
|
|
196
196
|
v-model="item[header.key]"
|
|
197
|
+
:validate-on="header.validateOn"
|
|
197
198
|
class="pa-0 h-100 app-input-outline"
|
|
198
199
|
:placeholder="placeholder(header)"
|
|
199
200
|
:rules="header.rules"
|
|
@@ -212,10 +213,12 @@ const placeholder = (header) => {
|
|
|
212
213
|
<TimePicker
|
|
213
214
|
v-if="header.type === 'timepicker'"
|
|
214
215
|
v-model="item[header.key]"
|
|
216
|
+
:validate-on="header.validateOn"
|
|
215
217
|
class="pa-0 h-100 app-flex-1 app-max-w-150px app-input-outline"
|
|
216
218
|
:rules="header.rules"
|
|
217
219
|
:show-icon="false"
|
|
218
220
|
:disabled="isDisabled"
|
|
221
|
+
:is-app-rtl="header.isAppRtl"
|
|
219
222
|
:error-messages="errorMessages"
|
|
220
223
|
:error="error"
|
|
221
224
|
append-inner-icon="none"
|
|
@@ -225,6 +228,9 @@ const placeholder = (header) => {
|
|
|
225
228
|
<LicensePlateInput
|
|
226
229
|
v-if="header.type === 'license_plate'"
|
|
227
230
|
v-model="item[header.key]"
|
|
231
|
+
:validate-on="header.validateOn"
|
|
232
|
+
:rules="header.rules"
|
|
233
|
+
:error="error"
|
|
228
234
|
class="pa-0 h-100 app-flex-1 app-max-w-150px app-input-outline"
|
|
229
235
|
:custom-id="`field.${index}.${header.key}`"
|
|
230
236
|
:error-messages="errorMessages"
|
|
@@ -235,12 +241,13 @@ const placeholder = (header) => {
|
|
|
235
241
|
v-if="header.type === 'manual_date'"
|
|
236
242
|
v-model="item[header.key]"
|
|
237
243
|
class="pa-0 h-100 app-flex-1 app-input-outline"
|
|
238
|
-
:
|
|
244
|
+
:validate-on="header.validateOn"
|
|
239
245
|
:rules="header.rules"
|
|
246
|
+
:error="error"
|
|
247
|
+
:custom-id="`field.${index}.${header.key}`"
|
|
240
248
|
:type="item[header.dependsOn]"
|
|
241
249
|
:disabled="isDisabled"
|
|
242
250
|
:error-messages="errorMessages"
|
|
243
|
-
:error="error"
|
|
244
251
|
hide-details
|
|
245
252
|
/>
|
|
246
253
|
</template>
|
package/dist/types.d.ts
CHANGED
|
@@ -8,6 +8,9 @@ string |
|
|
|
8
8
|
number |
|
|
9
9
|
null
|
|
10
10
|
|
|
11
|
+
export type ValidateOn = "submit lazy" | "lazy" | "blur" | "input" | "submit" | "input lazy" | "blur lazy" | "lazy input" | "lazy blur" | "lazy submit" | undefined
|
|
12
|
+
|
|
13
|
+
|
|
11
14
|
export type ItemData = Record<string, string | number | null>
|
|
12
15
|
export type Params = Record<string, string | number | null | undefined | string[] | Date[] | number[] | (string | number)[] | boolean>
|
|
13
16
|
|
|
@@ -144,6 +147,8 @@ export type EditableDataTableItem = {
|
|
|
144
147
|
options?: Record<string, unknown>[] | OptionItem[] | Ref<OptionItem[]>
|
|
145
148
|
disableIfEmpty?: boolean
|
|
146
149
|
maxDate?: Date | null
|
|
150
|
+
validateOn?: ValidateOn
|
|
151
|
+
isAppRtl?: boolean
|
|
147
152
|
}
|
|
148
153
|
|
|
149
154
|
export type OptionItem = {
|
|
@@ -32,6 +32,7 @@ export declare const ruleValidator: () => {
|
|
|
32
32
|
month?: string;
|
|
33
33
|
day?: string;
|
|
34
34
|
}) => string | true;
|
|
35
|
+
requiredPlateValidator: (value: string[] | null | undefined) => string | true;
|
|
35
36
|
};
|
|
36
37
|
export declare const useFormValidation: () => {
|
|
37
38
|
validateAndScroll: (refVForm: VForm | undefined) => Promise<boolean>;
|
|
@@ -134,6 +134,12 @@ const ruleValidator = () => {
|
|
|
134
134
|
}
|
|
135
135
|
return true;
|
|
136
136
|
};
|
|
137
|
+
const requiredPlateValidator = value => {
|
|
138
|
+
if (!value || !value?.every(val => val !== "")) {
|
|
139
|
+
return t("validation.required");
|
|
140
|
+
}
|
|
141
|
+
return true;
|
|
142
|
+
};
|
|
137
143
|
const dateValidator = value => {
|
|
138
144
|
if ((0, _utils.isEmpty)(value)) {
|
|
139
145
|
return true;
|
|
@@ -168,7 +174,8 @@ const ruleValidator = () => {
|
|
|
168
174
|
dateValidator,
|
|
169
175
|
regexValidator,
|
|
170
176
|
idNumberValidator,
|
|
171
|
-
requiredManualDateValidator
|
|
177
|
+
requiredManualDateValidator,
|
|
178
|
+
requiredPlateValidator
|
|
172
179
|
};
|
|
173
180
|
};
|
|
174
181
|
exports.ruleValidator = ruleValidator;
|
|
@@ -123,6 +123,12 @@ export const ruleValidator = () => {
|
|
|
123
123
|
}
|
|
124
124
|
return true;
|
|
125
125
|
};
|
|
126
|
+
const requiredPlateValidator = (value) => {
|
|
127
|
+
if (!value || !value?.every((val) => val !== "")) {
|
|
128
|
+
return t("validation.required");
|
|
129
|
+
}
|
|
130
|
+
return true;
|
|
131
|
+
};
|
|
126
132
|
const dateValidator = (value) => {
|
|
127
133
|
if (isEmpty(value)) {
|
|
128
134
|
return true;
|
|
@@ -155,7 +161,8 @@ export const ruleValidator = () => {
|
|
|
155
161
|
dateValidator,
|
|
156
162
|
regexValidator,
|
|
157
163
|
idNumberValidator,
|
|
158
|
-
requiredManualDateValidator
|
|
164
|
+
requiredManualDateValidator,
|
|
165
|
+
requiredPlateValidator
|
|
159
166
|
};
|
|
160
167
|
};
|
|
161
168
|
export const useFormValidation = () => {
|