ar-design 0.4.23 → 0.4.25

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.
@@ -8,6 +8,10 @@
8
8
  display: flex;
9
9
  flex-wrap: nowrap;
10
10
  flex-direction: row;
11
+
12
+ > .wrapper {
13
+ width: 100%;
14
+ }
11
15
  }
12
16
  .ar-date-picker > label {
13
17
  position: absolute;
@@ -1,15 +1,23 @@
1
- import React from "react";
1
+ import React, { Dispatch, SetStateAction } from "react";
2
2
  import { TableColumnType } from "../../../../libs/types";
3
3
  import { Config } from "../IProps";
4
4
  interface IProps<T> {
5
5
  data: T[];
6
6
  columns: TableColumnType<T>[];
7
+ refs: {
8
+ _checkboxItems: React.MutableRefObject<(HTMLInputElement | null)[]>;
9
+ _selectionItems: React.MutableRefObject<T[]>;
10
+ };
7
11
  states: {
12
+ setSelectAll: {
13
+ get: boolean;
14
+ set: Dispatch<SetStateAction<boolean>>;
15
+ };
8
16
  showSubitems: {
9
17
  get: {
10
18
  [key: string]: boolean;
11
19
  };
12
- set: React.Dispatch<React.SetStateAction<{
20
+ set: Dispatch<React.SetStateAction<{
13
21
  [key: string]: boolean;
14
22
  }>>;
15
23
  };
@@ -23,6 +31,6 @@ interface IProps<T> {
23
31
  };
24
32
  config: Config<T>;
25
33
  }
26
- declare function TBody<T extends object>({ data, columns, methods, states, config }: IProps<T>): React.JSX.Element | React.JSX.Element[];
34
+ declare function TBody<T extends object>({ data, columns, refs, methods, states, config }: IProps<T>): React.JSX.Element | React.JSX.Element[];
27
35
  declare const _default: typeof TBody;
28
36
  export default _default;
@@ -2,14 +2,11 @@ import React, { Fragment, memo, useEffect, useRef, useState } from "react";
2
2
  import { ARIcon } from "../../../icons";
3
3
  import Checkbox from "../../../form/checkbox";
4
4
  import Editable from "./Editable";
5
- function TBody({ data, columns, methods, states, config }) {
5
+ function TBody({ data, columns, refs, methods, states, config }) {
6
6
  // refs
7
7
  const _tBodyTR = useRef([]);
8
- const _checkboxItems = useRef([]);
9
- // refs -> Selection
10
- const _selectionItems = useRef([]);
11
8
  // states
12
- const [_, setTriggerForRender] = useState(false);
9
+ const [triggerForRender, setTriggerForRender] = useState(false);
13
10
  const [rowHeights, setRowHeights] = useState([]);
14
11
  // variables
15
12
  const _subrowSelector = config.subrow?.selector ?? "subitems";
@@ -22,17 +19,17 @@ function TBody({ data, columns, methods, states, config }) {
22
19
  _tBodyTR.current[index] = element;
23
20
  }, ...(methods.rowBackgroundColor ? { style: { backgroundColor: methods.rowBackgroundColor(item) } } : {}), ...(methods.onDnD && data.length > 1 ? { className: "draggable", draggable: true } : {}) },
24
21
  methods.selections && (React.createElement("td", { className: "flex justify-content-center sticky-left", "data-sticky-position": "left" },
25
- React.createElement(Checkbox, { key: Date.now(), ref: (element) => (_checkboxItems.current[index] = element), variant: "filled", color: "green", checked: _selectionItems.current.some((selectionItem) => methods.trackBy?.(selectionItem) === methods.trackBy?.(item)), onChange: (event) => {
22
+ React.createElement(Checkbox, { key: Date.now(), ref: (element) => (refs._checkboxItems.current[index] = element), variant: "filled", color: "green", checked: refs._selectionItems.current.some((selectionItem) => methods.trackBy?.(selectionItem) === methods.trackBy?.(item)), onChange: (event) => {
26
23
  const key = methods.trackBy?.(item);
27
24
  if (event.target.checked) {
28
- if (!_selectionItems.current.some((_item) => methods.trackBy?.(_item) === key)) {
29
- _selectionItems.current = [..._selectionItems.current, item];
25
+ if (!refs._selectionItems.current.some((_item) => methods.trackBy?.(_item) === key)) {
26
+ refs._selectionItems.current = [...refs._selectionItems.current, item];
30
27
  }
31
28
  }
32
29
  else {
33
- _selectionItems.current = _selectionItems.current.filter((_item) => methods.trackBy?.(_item) !== key);
30
+ refs._selectionItems.current = refs._selectionItems.current.filter((_item) => methods.trackBy?.(_item) !== key);
34
31
  }
35
- methods.selections?.(_selectionItems.current);
32
+ methods.selections?.(refs._selectionItems.current);
36
33
  setTriggerForRender((prev) => !prev);
37
34
  } }))),
38
35
  isHasSubitems && _subrowButton ? (React.createElement("td", null, item[_subrowSelector] && (React.createElement("div", { className: "subitem-open-button-wrapper" },
@@ -133,7 +130,14 @@ function TBody({ data, columns, methods, states, config }) {
133
130
  useEffect(() => {
134
131
  const heights = _tBodyTR.current.map((el) => (el ? el.getBoundingClientRect().height : 0));
135
132
  setRowHeights(heights);
133
+ setTriggerForRender((prev) => !prev);
136
134
  }, [data]);
135
+ useEffect(() => {
136
+ if (Array.isArray(refs._checkboxItems.current) && refs._checkboxItems.current.length > 0) {
137
+ const allChecked = refs._checkboxItems.current.every((item) => item?.checked === true);
138
+ states.setSelectAll.set(allChecked);
139
+ }
140
+ }, [triggerForRender]);
137
141
  return data.length > 0 ? (data.map((item, index) => React.createElement(React.Fragment, { key: index }, renderRow(item, index, 1)))) : (React.createElement("tr", null,
138
142
  React.createElement("td", { colSpan: columns.length || 1 },
139
143
  React.createElement("div", { className: "no-item" },
@@ -656,7 +656,10 @@ const Table = forwardRef(({ children, trackBy, title, description, data, columns
656
656
  } }))))));
657
657
  })))),
658
658
  React.createElement("tbody", { ref: _tBody },
659
- React.createElement(TBody, { data: getData, columns: columns, states: { showSubitems: { get: showSubitems, set: setShowSubitems } }, methods: {
659
+ React.createElement(TBody, { data: getData, columns: columns, refs: { _checkboxItems: _checkboxItems, _selectionItems: _selectionItems }, states: {
660
+ setSelectAll: { get: selectAll, set: setSelectAll },
661
+ showSubitems: { get: showSubitems, set: setShowSubitems },
662
+ }, methods: {
660
663
  trackBy: trackBy,
661
664
  selections: selections,
662
665
  onDnD: onDnD,
@@ -251,10 +251,8 @@ const DatePicker = ({ variant, color, onChange, config, validation, ...attribute
251
251
  attributes.placeholder && attributes.placeholder.length > 0 && (React.createElement("label", { ref: _placeholder },
252
252
  validation ? "* " : "",
253
253
  attributes.placeholder)),
254
- React.createElement("div", { className: "wrapper", ...(String(attributes.value).length > 0
255
- ? {
256
- style: {
257
- clipPath: `polygon(
254
+ React.createElement("div", { className: "wrapper", style: {
255
+ clipPath: `polygon(
258
256
  -15px 0,
259
257
  10px -5px,
260
258
  10px 5px,
@@ -264,9 +262,7 @@ const DatePicker = ({ variant, color, onChange, config, validation, ...attribute
264
262
  calc(100% + 5px) calc(100% + 5px),
265
263
  -5px calc(100% + 5px)
266
264
  )`,
267
- },
268
- }
269
- : {}) },
265
+ } },
270
266
  React.createElement(Input, { ref: _beginDate, variant: variant, color: color, ...attributes, value: DATE.ParseValue(String(attributes.value), config?.isClock), type: config?.isClock ? "datetime-local" : "date", onKeyDown: (event) => {
271
267
  if (event.code === "Space")
272
268
  event.preventDefault();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ar-design",
3
- "version": "0.4.23",
3
+ "version": "0.4.25",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",