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.
@@ -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
- index: number;
7
- onEditable: (item: T, index: number) => void;
6
+ trackByValue: string;
7
+ onEditable: (item: T, trackByValue: string) => void;
8
8
  validation?: Errors<T>;
9
9
  }
10
- declare const Editable: <T>({ c, item, index, onEditable, validation }: IProps<T>) => React.JSX.Element | null;
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, index, onEditable, validation }) {
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}_${index}`];
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 }, index);
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 }, index);
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 }, index);
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 }, index);
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) }, index);
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, index: number) => void;
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, index: index, onEditable: onEditable, validation: config.validation })) : (render),
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, index) => {
74
+ const setError = (key, message, step, trackByValue) => {
75
75
  let _key = step ? `${step}_${key}` : key;
76
- if (index !== undefined)
77
- _key = `${_key}_${index}`;
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) => item?.[param.subkey]);
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, index) => paramsShape(param, extractedValue, index));
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, index) => {
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, index);
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, index);
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, index);
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, index);
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, index);
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, index);
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, index);
157
+ setError(key, s.message, param.step, trackByValue);
155
158
  }
156
159
  };
157
160
  param.shape?.forEach((s) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ar-design",
3
- "version": "0.3.95",
3
+ "version": "0.3.96",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",