ar-design 0.3.95 → 0.3.96
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/data-display/table/Editable.d.ts +3 -3
- package/dist/components/data-display/table/Editable.js +7 -7
- package/dist/components/data-display/table/IProps.d.ts +1 -1
- package/dist/components/data-display/table/index.js +2 -2
- package/dist/components/feedback/drawer/index.js +1 -0
- package/dist/libs/core/application/hooks/index.js +16 -13
- package/package.json +1 -1
|
@@ -3,9 +3,9 @@ import { Errors, TableColumnType } from "../../../libs/types";
|
|
|
3
3
|
interface IProps<T> {
|
|
4
4
|
c: TableColumnType<T>;
|
|
5
5
|
item: T;
|
|
6
|
-
|
|
7
|
-
onEditable: (item: T,
|
|
6
|
+
trackByValue: string;
|
|
7
|
+
onEditable: (item: T, trackByValue: string) => void;
|
|
8
8
|
validation?: Errors<T>;
|
|
9
9
|
}
|
|
10
|
-
declare const Editable: <T>({ c, item,
|
|
10
|
+
declare const Editable: <T>({ c, item, trackByValue, onEditable, validation }: IProps<T>) => React.JSX.Element | null;
|
|
11
11
|
export default Editable;
|
|
@@ -3,7 +3,7 @@ import React, { useEffect, useState } from "react";
|
|
|
3
3
|
import Input from "../../form/input";
|
|
4
4
|
import DatePicker from "../../form/date-picker";
|
|
5
5
|
import Select from "../../form/select";
|
|
6
|
-
const Editable = function ({ c, item,
|
|
6
|
+
const Editable = function ({ c, item, trackByValue, onEditable, validation }) {
|
|
7
7
|
// variables
|
|
8
8
|
const key = c.key;
|
|
9
9
|
const itemValue = item[c.key];
|
|
@@ -11,7 +11,7 @@ const Editable = function ({ c, item, index, onEditable, validation }) {
|
|
|
11
11
|
const selectItems = Array.isArray(itemValue)
|
|
12
12
|
? c.editable?.options?.filter((x) => itemValue.includes(x.value))
|
|
13
13
|
: [];
|
|
14
|
-
const _vText = validation?.[`${c.key}_${
|
|
14
|
+
const _vText = validation?.[`${c.key}_${trackByValue}`];
|
|
15
15
|
// states
|
|
16
16
|
const [value, setValue] = useState(itemValue);
|
|
17
17
|
// useEffects
|
|
@@ -22,26 +22,26 @@ const Editable = function ({ c, item, index, onEditable, validation }) {
|
|
|
22
22
|
return (React.createElement(Input, { variant: "borderless", value: value, onChange: (event) => {
|
|
23
23
|
const { value } = event.target;
|
|
24
24
|
setValue(value);
|
|
25
|
-
onEditable({ ...item, [key]: c.editable?.type === "number" ? Number(value) : value },
|
|
25
|
+
onEditable({ ...item, [key]: c.editable?.type === "number" ? Number(value) : value }, trackByValue);
|
|
26
26
|
}, validation: { text: _vText } }));
|
|
27
27
|
case "input-number":
|
|
28
28
|
return (React.createElement(Input.Number, { variant: "borderless", name: c.key, value: value, onChange: (event) => {
|
|
29
29
|
const { value } = event.target;
|
|
30
30
|
setValue(value);
|
|
31
|
-
onEditable({ ...item, [key]: c.editable?.type === "number" ? Number(value) : value },
|
|
31
|
+
onEditable({ ...item, [key]: c.editable?.type === "number" ? Number(value) : value }, trackByValue);
|
|
32
32
|
}, validation: { text: _vText } }));
|
|
33
33
|
case "date-picker":
|
|
34
34
|
return (React.createElement(DatePicker, { variant: "borderless", value: value, onChange: (value) => {
|
|
35
35
|
setValue(value);
|
|
36
|
-
onEditable({ ...item, [key]: value },
|
|
36
|
+
onEditable({ ...item, [key]: value }, trackByValue);
|
|
37
37
|
}, validation: { text: _vText } }));
|
|
38
38
|
case "single-select":
|
|
39
39
|
return (React.createElement(Select, { variant: "borderless", value: selectItem, options: c.editable.options, onClick: async () => await c.editable?.method?.(), onChange: (option) => {
|
|
40
|
-
onEditable({ ...item, [key]: option?.value },
|
|
40
|
+
onEditable({ ...item, [key]: option?.value }, trackByValue);
|
|
41
41
|
}, validation: { text: _vText } }));
|
|
42
42
|
case "multiple-select":
|
|
43
43
|
return (React.createElement(Select, { variant: "borderless", value: selectItems, options: c.editable.options, onClick: async () => await c.editable?.method?.(), onChange: (options) => {
|
|
44
|
-
onEditable({ ...item, [key]: options.map((option) => option.value) },
|
|
44
|
+
onEditable({ ...item, [key]: options.map((option) => option.value) }, trackByValue);
|
|
45
45
|
}, validation: { text: _vText }, multiple: true }));
|
|
46
46
|
default:
|
|
47
47
|
return null;
|
|
@@ -74,7 +74,7 @@ interface IProps<T> extends IChildren {
|
|
|
74
74
|
selections?: (selectionItems: T[]) => void;
|
|
75
75
|
previousSelections?: T[];
|
|
76
76
|
searchedParams?: (params: SearchedParam | null, query: string, operator: FilterOperator) => void;
|
|
77
|
-
onEditable?: (item: T,
|
|
77
|
+
onEditable?: (item: T, trackByValue: string) => void;
|
|
78
78
|
onDnD?: (item: T[]) => void;
|
|
79
79
|
pagination?: {
|
|
80
80
|
totalRecords: number;
|
|
@@ -419,7 +419,7 @@ const Table = forwardRef(({ children, trackBy, title, description, data, columns
|
|
|
419
419
|
return (React.createElement("div", { key: `last-before-${i}`, style: { left: `${i + 0.65}rem` }, className: "last-before" }));
|
|
420
420
|
}),
|
|
421
421
|
React.createElement("div", { className: "before" }))),
|
|
422
|
-
React.isValidElement(render) ? (render) : c.editable && onEditable ? (React.createElement(Editable, { c: c, item: item,
|
|
422
|
+
React.isValidElement(render) ? (render) : c.editable && onEditable ? (React.createElement(Editable, { c: c, item: item, trackByValue: trackBy?.(item) ?? "", onEditable: onEditable, validation: config.validation })) : (render),
|
|
423
423
|
config.isTreeView && cIndex === 0 && (React.createElement("div", { className: "after" },
|
|
424
424
|
React.createElement("div", { className: "circle" }))))));
|
|
425
425
|
};
|
|
@@ -508,7 +508,7 @@ const Table = forwardRef(({ children, trackBy, title, description, data, columns
|
|
|
508
508
|
}, [checkboxSelectedParams]);
|
|
509
509
|
useEffect(() => {
|
|
510
510
|
if (typeof selections === "function" && Array.isArray(selectionItems)) {
|
|
511
|
-
selections(selectionItems);
|
|
511
|
+
selections(selectionItems.map((selectionItem) => ({ ...selectionItem, trackByValue: trackBy?.(selectionItem) })));
|
|
512
512
|
}
|
|
513
513
|
if (Array.isArray(_checkboxItems.current) && _checkboxItems.current.length > 0) {
|
|
514
514
|
const allChecked = _checkboxItems.current.every((item) => item?.checked === true);
|
|
@@ -16,6 +16,7 @@ const Drawer = function ({ title, tabs = [], activeTab, open, validation, onChan
|
|
|
16
16
|
// states
|
|
17
17
|
const [currentTab, setCurrentTab] = useState(0);
|
|
18
18
|
// hooks
|
|
19
|
+
console.log(validation?.data, "validation?.data");
|
|
19
20
|
const { errors, onSubmit, setSubmit } = useValidation(validation?.data, validation?.rules, currentTab + 1);
|
|
20
21
|
// methods
|
|
21
22
|
const handleValidationControlForClose = useCallback(() => {
|
|
@@ -71,10 +71,10 @@ export const useValidation = function (data, params, step) {
|
|
|
71
71
|
callback(result);
|
|
72
72
|
});
|
|
73
73
|
};
|
|
74
|
-
const setError = (key, message, step,
|
|
74
|
+
const setError = (key, message, step, trackByValue) => {
|
|
75
75
|
let _key = step ? `${step}_${key}` : key;
|
|
76
|
-
if (
|
|
77
|
-
_key = `${_key}_${
|
|
76
|
+
if (trackByValue !== undefined)
|
|
77
|
+
_key = `${_key}_${trackByValue}`;
|
|
78
78
|
setErrors((prev) => ({ ...prev, [_key]: message }));
|
|
79
79
|
_errors.current = { ..._errors.current, [_key]: message };
|
|
80
80
|
};
|
|
@@ -102,9 +102,12 @@ export const useValidation = function (data, params, step) {
|
|
|
102
102
|
if (Array.isArray(value)) {
|
|
103
103
|
// Eğer value bir dizi ise ve subkey sadece bir seviye ise,
|
|
104
104
|
// dizinin her bir elemanına subkey uygulanabilir.
|
|
105
|
-
const extractedValues = value.map((item) =>
|
|
105
|
+
const extractedValues = value.map((item) => ({
|
|
106
|
+
value: item?.[param.subkey],
|
|
107
|
+
trackByValue: item?.trackByValue,
|
|
108
|
+
}));
|
|
106
109
|
// Elde edilen değerler topluca paramsShape'e gönderilebilir ya da başka bir şekilde işlenebilir.
|
|
107
|
-
extractedValues.map((extractedValue
|
|
110
|
+
extractedValues.map((extractedValue) => paramsShape(param, extractedValue.value, extractedValue.trackByValue));
|
|
108
111
|
}
|
|
109
112
|
else {
|
|
110
113
|
// Value bir obje ise, subkey doğrudan kullanılır.
|
|
@@ -117,7 +120,7 @@ export const useValidation = function (data, params, step) {
|
|
|
117
120
|
paramsShape(param, value);
|
|
118
121
|
}
|
|
119
122
|
};
|
|
120
|
-
const paramsShape = (param, value,
|
|
123
|
+
const paramsShape = (param, value, trackByValue) => {
|
|
121
124
|
const vLenght = value ? value.length : 0;
|
|
122
125
|
const getKey = (subkey) => {
|
|
123
126
|
if (!subkey)
|
|
@@ -127,13 +130,13 @@ export const useValidation = function (data, params, step) {
|
|
|
127
130
|
};
|
|
128
131
|
const handleValidation = (key, s) => {
|
|
129
132
|
if (s.type === "required" && Utils.IsNullOrEmpty(value)) {
|
|
130
|
-
setError(key, s.message, param.step,
|
|
133
|
+
setError(key, s.message, param.step, trackByValue);
|
|
131
134
|
}
|
|
132
135
|
if (s.type === "minimum" && vLenght < s.value) {
|
|
133
|
-
setError(key, Utils.StringFormat(s.message, s.value), param.step,
|
|
136
|
+
setError(key, Utils.StringFormat(s.message, s.value), param.step, trackByValue);
|
|
134
137
|
}
|
|
135
138
|
if (s.type === "maximum" && vLenght > s.value) {
|
|
136
|
-
setError(key, Utils.StringFormat(s.message, s.value), param.step,
|
|
139
|
+
setError(key, Utils.StringFormat(s.message, s.value), param.step, trackByValue);
|
|
137
140
|
}
|
|
138
141
|
// Regexes
|
|
139
142
|
// const phoneRegex = /^((\+90|0)?([2-5]\d{2})\d{7}|\+[1-9]\d{7,14})$/;
|
|
@@ -142,16 +145,16 @@ export const useValidation = function (data, params, step) {
|
|
|
142
145
|
const ibanRegex = /^TR\d{24}$/;
|
|
143
146
|
const accountNumberRegex = /^\d{6,16}$/;
|
|
144
147
|
if (s.type === "phone" && value && !phoneRegex.test(value.replace(/\D/g, ""))) {
|
|
145
|
-
setError(key, s.message, param.step,
|
|
148
|
+
setError(key, s.message, param.step, trackByValue);
|
|
146
149
|
}
|
|
147
150
|
if (s.type === "email" && value && !emailRegex.test(value)) {
|
|
148
|
-
setError(key, s.message, param.step,
|
|
151
|
+
setError(key, s.message, param.step, trackByValue);
|
|
149
152
|
}
|
|
150
153
|
if (s.type === "iban" && value && !ibanRegex.test(value.replace(/\s/g, ""))) {
|
|
151
|
-
setError(key, s.message, param.step,
|
|
154
|
+
setError(key, s.message, param.step, trackByValue);
|
|
152
155
|
}
|
|
153
156
|
if (s.type === "account-number" && value && !accountNumberRegex.test(value)) {
|
|
154
|
-
setError(key, s.message, param.step,
|
|
157
|
+
setError(key, s.message, param.step, trackByValue);
|
|
155
158
|
}
|
|
156
159
|
};
|
|
157
160
|
param.shape?.forEach((s) => {
|