ar-design 0.3.8 → 0.3.9

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,7 +3,8 @@ import { TableColumnType } from "../../../libs/types";
3
3
  interface IProps<T> {
4
4
  c: TableColumnType<T>;
5
5
  item: T;
6
- onEditable: (item: T) => void;
6
+ index: number;
7
+ onEditable: (item: T, index: number) => void;
7
8
  }
8
- declare const Editable: <T>({ c, item, onEditable }: IProps<T>) => React.JSX.Element | null;
9
+ declare const Editable: <T>({ c, item, index, onEditable }: IProps<T>) => React.JSX.Element | null;
9
10
  export default Editable;
@@ -3,7 +3,7 @@ import React, { 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, onEditable }) {
6
+ const Editable = function ({ c, item, index, onEditable }) {
7
7
  const key = c.key;
8
8
  const itemValue = item[c.key];
9
9
  const selectItem = c.editable?.options?.find((x) => x.value === itemValue);
@@ -12,30 +12,26 @@ const Editable = function ({ c, item, onEditable }) {
12
12
  : [];
13
13
  // states
14
14
  const [value, setValue] = useState(itemValue);
15
- const [selectionItem, setSelectionItem] = useState(selectItem);
16
- const [selectionItems, setSelectionItems] = useState(selectItems);
17
15
  switch (c.editable?.type) {
18
16
  case "string":
19
17
  case "number":
20
18
  return (React.createElement(Input, { variant: "borderless", value: value, onChange: (event) => {
21
19
  const { value } = event.target;
22
20
  setValue(value);
23
- onEditable({ ...item, [key]: c.editable?.type === "number" ? Number(value) : value });
21
+ onEditable({ ...item, [key]: c.editable?.type === "number" ? Number(value) : value }, index);
24
22
  } }));
25
23
  case "date-picker":
26
24
  return (React.createElement(DatePicker, { variant: "borderless", value: value, onChange: (value) => {
27
25
  setValue(value);
28
- onEditable({ ...item, [key]: value });
26
+ onEditable({ ...item, [key]: value }, index);
29
27
  } }));
30
28
  case "single-select":
31
- return (React.createElement(Select, { variant: "borderless", value: selectionItem, options: c.editable.options, onClick: async () => await c.editable?.method?.(), onChange: (option) => {
32
- setSelectionItem(option);
33
- onEditable({ ...item, [key]: option?.value });
29
+ return (React.createElement(Select, { variant: "borderless", value: selectItem, options: c.editable.options, onClick: async () => await c.editable?.method?.(), onChange: (option) => {
30
+ onEditable({ ...item, [key]: option?.value }, index);
34
31
  } }));
35
32
  case "multiple-select":
36
- return (React.createElement(Select, { variant: "borderless", value: selectionItems, options: c.editable.options, onClick: async () => await c.editable?.method?.(), onChange: (options) => {
37
- setSelectionItems(options);
38
- onEditable({ ...item, [key]: options.map((option) => option.value) });
33
+ return (React.createElement(Select, { variant: "borderless", value: selectItems, options: c.editable.options, onClick: async () => await c.editable?.method?.(), onChange: (options) => {
34
+ onEditable({ ...item, [key]: options.map((option) => option.value) }, index);
39
35
  }, multiple: true }));
40
36
  default:
41
37
  return null;
@@ -142,7 +142,7 @@ interface IProps<T> extends IChildren {
142
142
  * @param operator - Kullanılan filtre operatörü.
143
143
  */
144
144
  searchedParams?: (params: SearchedParam | null, query: string, operator: FilterOperator) => void;
145
- onEditable?: (item: T) => void;
145
+ onEditable?: (item: T, index: number) => void;
146
146
  /**
147
147
  * Sayfalama ayarları.
148
148
  */
@@ -38,6 +38,8 @@ const Table = forwardRef(({ children, title, description, data, columns, actions
38
38
  const _searchTimeOut = useRef(null);
39
39
  // refs -> Filter
40
40
  const _filterButton = useRef([]);
41
+ // refs -> Previous Selection Items
42
+ const _hasInitialized = useRef(false);
41
43
  // variables
42
44
  const _subrowOpenAutomatically = config.subrow?.openAutomatically ?? false;
43
45
  const _subrowSelector = config.subrow?.selector ?? "subitems";
@@ -399,7 +401,7 @@ const Table = forwardRef(({ children, title, description, data, columns, actions
399
401
  return (React.createElement("div", { key: `last-before-${i}`, style: { left: `${i + 0.65}rem` }, className: "last-before" }));
400
402
  }),
401
403
  React.createElement("div", { className: "before" }))),
402
- React.isValidElement(render) ? (render) : c.editable && onEditable ? (React.createElement(Editable, { c: c, item: item, onEditable: onEditable })) : (render),
404
+ React.isValidElement(render) ? (render) : c.editable && onEditable ? (React.createElement(Editable, { c: c, item: item, index: index, onEditable: onEditable })) : (render),
403
405
  config.isTreeView && cIndex === 0 && (React.createElement("div", { className: "after" },
404
406
  React.createElement("div", { className: "circle" }))))));
405
407
  };
@@ -426,13 +428,14 @@ const Table = forwardRef(({ children, title, description, data, columns, actions
426
428
  };
427
429
  // useEffects
428
430
  useEffect(() => {
429
- // Eğer `previousSelections` özelliğinden değer geliyorsa bu daha önce seçim yapılmış öğeleri gönderiyorum
430
- // demektir ve otomatik olarak seçim yap demek anlamına gekmektedir.
431
+ if (_hasInitialized.current)
432
+ return;
431
433
  if (previousSelections && previousSelections.length > 0) {
432
434
  const validSelections = data.filter((item) => previousSelections.some((selected) => JSON.stringify(selected) === JSON.stringify(item)));
433
435
  setSelectionItems(validSelections);
436
+ _hasInitialized.current = true; // sadece bir kez ayarla
434
437
  }
435
- }, [previousSelections]);
438
+ }, [previousSelections, data]);
436
439
  useEffect(() => {
437
440
  if (config?.isServerSide && searchedParams) {
438
441
  const searchRecord = {};
@@ -475,15 +478,12 @@ const Table = forwardRef(({ children, title, description, data, columns, actions
475
478
  pagination.onChange(1);
476
479
  }, [checkboxSelectedParams]);
477
480
  useEffect(() => {
478
- if (!selections)
479
- return;
480
- selections(selectionItems);
481
- }, [selectionItems]);
482
- useEffect(() => {
483
- if (!selections)
484
- return;
485
- if (_checkboxItems.current.length > 0) {
486
- setSelectAll(_checkboxItems.current.every((item) => item?.checked === true));
481
+ if (typeof selections === "function" && Array.isArray(selectionItems)) {
482
+ selections(selectionItems);
483
+ }
484
+ if (Array.isArray(_checkboxItems.current) && _checkboxItems.current.length > 0) {
485
+ const allChecked = _checkboxItems.current.every((item) => item?.checked === true);
486
+ setSelectAll(allChecked);
487
487
  }
488
488
  }, [selectionItems, currentPage]);
489
489
  useEffect(() => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ar-design",
3
- "version": "0.3.8",
3
+ "version": "0.3.9",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",