@farmzone/fz-react-ui 1.0.17 → 1.0.18
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/index.cjs +136 -105
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +136 -105
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -4139,45 +4139,15 @@ function TableHeader(props) {
|
|
|
4139
4139
|
};
|
|
4140
4140
|
};
|
|
4141
4141
|
const renderColumnTitle = (column, isClickableHead) => {
|
|
4142
|
-
const baseClasses = "pt-0.5 select-none";
|
|
4142
|
+
const baseClasses = "pt-0.5 select-none truncate";
|
|
4143
4143
|
const subTitleClasses = column.key === "subTitle" ? "inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-blue-100 text-blue-800" : "";
|
|
4144
|
-
|
|
4145
|
-
|
|
4146
|
-
|
|
4147
|
-
|
|
4148
|
-
|
|
4149
|
-
|
|
4150
|
-
|
|
4151
|
-
children: renderSortIcon(column.key)
|
|
4152
|
-
}
|
|
4153
|
-
)
|
|
4154
|
-
] });
|
|
4155
|
-
}
|
|
4156
|
-
if (column.align === "center") {
|
|
4157
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-center w-full", children: [
|
|
4158
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `flex items-center justify-center ${column.sortable ? "pl-5" : ""}`, children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: `whitespace-nowrap ${baseClasses} ${isClickableHead} ${subTitleClasses}`, children: column.title }) }),
|
|
4159
|
-
column.sortable && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4160
|
-
"div",
|
|
4161
|
-
{
|
|
4162
|
-
className: `w-5 flex flex-col gap-[1.5px] items-center justify-center cursor-pointer ${isClickableHead}`,
|
|
4163
|
-
children: renderSortIcon(column.key)
|
|
4164
|
-
}
|
|
4165
|
-
)
|
|
4166
|
-
] });
|
|
4167
|
-
}
|
|
4168
|
-
if (column.align === "right") {
|
|
4169
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-end w-full", children: [
|
|
4170
|
-
column.sortable && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4171
|
-
"div",
|
|
4172
|
-
{
|
|
4173
|
-
className: `w-5 flex flex-col gap-[1.5px] items-center justify-center cursor-pointer ${isClickableHead}`,
|
|
4174
|
-
children: renderSortIcon(column.key)
|
|
4175
|
-
}
|
|
4176
|
-
),
|
|
4177
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: `pr-3 truncate ${baseClasses} ${isClickableHead} ${subTitleClasses}`, children: column.title }) })
|
|
4178
|
-
] });
|
|
4179
|
-
}
|
|
4180
|
-
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: `px-1.5 truncate ${baseClasses} ${isClickableHead} ${subTitleClasses}`, children: column.title });
|
|
4144
|
+
const hasSortIcon = column.sortable;
|
|
4145
|
+
const textAlignClass = column.align === "center" ? "text-center" : column.align === "right" ? "text-right" : "text-left";
|
|
4146
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center w-full", children: [
|
|
4147
|
+
hasSortIcon && column.align === "center" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-5 shrink-0" }),
|
|
4148
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `flex-1 px-3 ${textAlignClass} ${baseClasses} ${isClickableHead} ${subTitleClasses}`, children: column.title }),
|
|
4149
|
+
hasSortIcon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `w-6 shrink-0 flex items-center justify-center cursor-pointer ${isClickableHead}`, children: renderSortIcon(column.key) })
|
|
4150
|
+
] });
|
|
4181
4151
|
};
|
|
4182
4152
|
const createGroupHeaders = () => {
|
|
4183
4153
|
const mainGroups2 = {};
|
|
@@ -4597,32 +4567,64 @@ function TableEmpty(props) {
|
|
|
4597
4567
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-md text-gray-500", children: "\uB4F1\uB85D\uB41C \uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4." })
|
|
4598
4568
|
] }) }) });
|
|
4599
4569
|
}
|
|
4570
|
+
function TableCellTooltip({ children, content }) {
|
|
4571
|
+
return /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive__namespace.Provider, { delayDuration: 0, children: /* @__PURE__ */ jsxRuntime.jsxs(TooltipPrimitive__namespace.Root, { children: [
|
|
4572
|
+
/* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive__namespace.Trigger, { asChild: true, children }),
|
|
4573
|
+
/* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4574
|
+
TooltipPrimitive__namespace.Content,
|
|
4575
|
+
{
|
|
4576
|
+
side: "bottom",
|
|
4577
|
+
sideOffset: 5,
|
|
4578
|
+
collisionPadding: 8,
|
|
4579
|
+
className: "relative animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 z-50 w-full max-w-[500px] origin-(--radix-tooltip-content-transform-origin) rounded-md bg-neutral-700 text-sm font-medium text-white",
|
|
4580
|
+
style: { zIndex: Z_INDEX.TOOLTIP },
|
|
4581
|
+
children: [
|
|
4582
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4583
|
+
"div",
|
|
4584
|
+
{
|
|
4585
|
+
className: "px-3 py-[5px] break-words whitespace-normal custom-view-scrollbar",
|
|
4586
|
+
style: { overflowY: "auto", maxHeight: "250px" },
|
|
4587
|
+
children: content
|
|
4588
|
+
}
|
|
4589
|
+
),
|
|
4590
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4591
|
+
TooltipPrimitive__namespace.Arrow,
|
|
4592
|
+
{
|
|
4593
|
+
className: cn(
|
|
4594
|
+
"z-50 w-2.5 h-2.5 translate-y-[calc(-50%_-_0px)] rotate-45 rounded-[2px]",
|
|
4595
|
+
"bg-neutral-700 !fill-neutral-700"
|
|
4596
|
+
),
|
|
4597
|
+
style: { fill: "currentColor" }
|
|
4598
|
+
}
|
|
4599
|
+
)
|
|
4600
|
+
]
|
|
4601
|
+
}
|
|
4602
|
+
) })
|
|
4603
|
+
] }) });
|
|
4604
|
+
}
|
|
4600
4605
|
function TableCellContent(props) {
|
|
4601
4606
|
const { cellContent, tooltipText, align, tooltipConfig, onCellClick } = props;
|
|
4602
|
-
const textRef = React6.useRef(null);
|
|
4603
4607
|
const [isOverflowing, setIsOverflowing] = React6.useState(false);
|
|
4604
|
-
React6.
|
|
4605
|
-
|
|
4606
|
-
|
|
4607
|
-
|
|
4608
|
-
|
|
4609
|
-
|
|
4610
|
-
|
|
4611
|
-
|
|
4612
|
-
|
|
4613
|
-
|
|
4608
|
+
const observerRef = React6.useRef(null);
|
|
4609
|
+
const refCallback = React6.useCallback(
|
|
4610
|
+
(el) => {
|
|
4611
|
+
observerRef.current?.disconnect();
|
|
4612
|
+
observerRef.current = null;
|
|
4613
|
+
if (!el || tooltipConfig !== "overflow") return;
|
|
4614
|
+
const check = () => setIsOverflowing(el.scrollWidth > el.clientWidth);
|
|
4615
|
+
const observer = new ResizeObserver(check);
|
|
4616
|
+
observer.observe(el);
|
|
4617
|
+
observerRef.current = observer;
|
|
4618
|
+
},
|
|
4619
|
+
[tooltipConfig]
|
|
4620
|
+
);
|
|
4614
4621
|
const shouldShowTooltip = tooltipConfig === "always" || tooltipConfig === "overflow" && isOverflowing;
|
|
4615
4622
|
const textAlign = align === "center" ? "center" : align === "right" ? "right" : "left";
|
|
4616
|
-
|
|
4617
|
-
|
|
4618
|
-
{
|
|
4619
|
-
|
|
4620
|
-
|
|
4621
|
-
style: { textAlign },
|
|
4622
|
-
onClick: onCellClick,
|
|
4623
|
-
children: shouldShowTooltip ? /* @__PURE__ */ jsxRuntime.jsx(Tooltip2, { content: tooltipText, position: "bottom", asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: cellContent }) }) : cellContent
|
|
4624
|
-
}
|
|
4625
|
-
);
|
|
4623
|
+
const divClassName = `ellipsis-1-line table-item w-full min-w-0 ${onCellClick ? "hover:text-main cursor-pointer" : "cursor-default"}`;
|
|
4624
|
+
if (!shouldShowTooltip) {
|
|
4625
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref: refCallback, className: divClassName, style: { textAlign }, onClick: onCellClick, children: cellContent });
|
|
4626
|
+
}
|
|
4627
|
+
return /* @__PURE__ */ jsxRuntime.jsx(TableCellTooltip, { content: tooltipText, children: /* @__PURE__ */ jsxRuntime.jsx("div", { ref: refCallback, className: divClassName, style: { textAlign }, onClick: onCellClick, children: cellContent }) });
|
|
4626
4628
|
}
|
|
4627
4629
|
|
|
4628
4630
|
// src/components/Table/config/utils.ts
|
|
@@ -5052,6 +5054,11 @@ function Table(props) {
|
|
|
5052
5054
|
}
|
|
5053
5055
|
}
|
|
5054
5056
|
}, [orderedColumns]);
|
|
5057
|
+
const tableMinWidth = React6.useMemo(() => {
|
|
5058
|
+
const allUserColsHaveWidth = orderedColumns.every((col) => col.key === "__checkbox__" || col.width !== void 0);
|
|
5059
|
+
if (!allUserColsHaveWidth) return void 0;
|
|
5060
|
+
return orderedColumns.reduce((sum, col) => sum + parseColPx(col), 0);
|
|
5061
|
+
}, [orderedColumns]);
|
|
5055
5062
|
const estimatedLeadingPinnedWidth = React6.useMemo(
|
|
5056
5063
|
() => leadingPinnedCols.reduce((sum, col) => sum + parseColPx(col), 0),
|
|
5057
5064
|
[leadingPinnedCols]
|
|
@@ -5221,51 +5228,63 @@ function Table(props) {
|
|
|
5221
5228
|
ref: scrollRef,
|
|
5222
5229
|
className: "relative w-full overflow-y-auto overflow-x-auto custom-view-scrollbar bg-white",
|
|
5223
5230
|
style: { height: `${tableHeight}px` },
|
|
5224
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5225
|
-
|
|
5226
|
-
|
|
5227
|
-
{
|
|
5228
|
-
|
|
5229
|
-
|
|
5230
|
-
|
|
5231
|
-
|
|
5232
|
-
|
|
5233
|
-
|
|
5234
|
-
|
|
5235
|
-
|
|
5236
|
-
|
|
5237
|
-
|
|
5238
|
-
|
|
5239
|
-
|
|
5240
|
-
|
|
5241
|
-
|
|
5242
|
-
|
|
5243
|
-
|
|
5244
|
-
|
|
5245
|
-
|
|
5246
|
-
|
|
5247
|
-
|
|
5248
|
-
|
|
5249
|
-
|
|
5250
|
-
{
|
|
5251
|
-
|
|
5252
|
-
|
|
5253
|
-
|
|
5254
|
-
|
|
5255
|
-
|
|
5256
|
-
|
|
5257
|
-
|
|
5258
|
-
|
|
5259
|
-
|
|
5260
|
-
|
|
5261
|
-
|
|
5262
|
-
|
|
5263
|
-
|
|
5264
|
-
|
|
5265
|
-
|
|
5266
|
-
|
|
5267
|
-
|
|
5268
|
-
|
|
5231
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5232
|
+
"table",
|
|
5233
|
+
{
|
|
5234
|
+
className: `table-fixed border-spacing-0${tableMinWidth === void 0 ? " w-full" : ""}`,
|
|
5235
|
+
style: tableMinWidth !== void 0 ? { width: tableMinWidth, minWidth: tableMinWidth } : {
|
|
5236
|
+
minWidth: orderedColumns.reduce(
|
|
5237
|
+
(sum, col) => sum + (col.key === "__checkbox__" || col.width !== void 0 ? parseColPx(col) : 80),
|
|
5238
|
+
0
|
|
5239
|
+
)
|
|
5240
|
+
},
|
|
5241
|
+
children: [
|
|
5242
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5243
|
+
TableHeader,
|
|
5244
|
+
{
|
|
5245
|
+
columns: orderedColumns,
|
|
5246
|
+
getAlignStyle,
|
|
5247
|
+
sortOption,
|
|
5248
|
+
onSortChange,
|
|
5249
|
+
onColumnDragStartCapture: handleColumnDragStartCapture,
|
|
5250
|
+
onColumnDragStart: handleColumnDragStart,
|
|
5251
|
+
onColumnDrop: handleColumnDrop,
|
|
5252
|
+
onColumnDragEnd: handleColumnDragEnd,
|
|
5253
|
+
onColumnDragOver: handleColumnDragOver,
|
|
5254
|
+
isColumnDraggable
|
|
5255
|
+
}
|
|
5256
|
+
),
|
|
5257
|
+
/* @__PURE__ */ jsxRuntime.jsx("tbody", { className: "w-full h-full", children: showSkeleton ? Array.from({ length: 3 }).map((_, rowIdx) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "hover:bg-gray-50", children: [
|
|
5258
|
+
leadingPinnedCols.map((col, idx) => /* @__PURE__ */ jsxRuntime.jsx(SkeletonTd, { col, showSquare: idx === 0 && !!checkboxInfo }, `leading-${idx}`)),
|
|
5259
|
+
leftColspan > 0 && /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: leftColspan, style: { padding: 0, border: "none" } }),
|
|
5260
|
+
virtualItems.map((vc) => /* @__PURE__ */ jsxRuntime.jsx(SkeletonTd, { col: groupCols[vc.index] }, `group-${vc.index}`)),
|
|
5261
|
+
rightColspan > 0 && /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: rightColspan, style: { padding: 0, border: "none" } }),
|
|
5262
|
+
trailingPinnedCols.map((col, idx) => /* @__PURE__ */ jsxRuntime.jsx(SkeletonTd, { col }, `trailing-${idx}`))
|
|
5263
|
+
] }, rowIdx)) : showEmpty ? /* @__PURE__ */ jsxRuntime.jsx(TableEmpty, { columnCount: allColumns.length }) : rows.map((row) => {
|
|
5264
|
+
const rowId = String(getRowKey(row.original, row.index));
|
|
5265
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5266
|
+
TableDataRow,
|
|
5267
|
+
{
|
|
5268
|
+
record: row.original,
|
|
5269
|
+
rowIdx: row.index,
|
|
5270
|
+
rowId,
|
|
5271
|
+
draggable: rowDraggable && !showSkeleton,
|
|
5272
|
+
onDragStart: handleRowDragStart,
|
|
5273
|
+
onDragOver: handleRowDragOver,
|
|
5274
|
+
onDrop: handleRowDrop,
|
|
5275
|
+
onDragEnd: handleRowDragEnd,
|
|
5276
|
+
leftColspan,
|
|
5277
|
+
rightColspan,
|
|
5278
|
+
renderLeadingPinnedCols,
|
|
5279
|
+
renderVisibleGroupCols,
|
|
5280
|
+
renderTrailingPinnedCols
|
|
5281
|
+
},
|
|
5282
|
+
row.id
|
|
5283
|
+
);
|
|
5284
|
+
}) })
|
|
5285
|
+
]
|
|
5286
|
+
}
|
|
5287
|
+
)
|
|
5269
5288
|
}
|
|
5270
5289
|
),
|
|
5271
5290
|
!showSkeleton && (paginationInfo || renderFooter?.renderLeft || renderFooter?.renderRight) && /* @__PURE__ */ jsxRuntime.jsx("div", { ref: footerRef, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -7784,12 +7803,22 @@ function PageFilter(props) {
|
|
|
7784
7803
|
primaryColor
|
|
7785
7804
|
} = props;
|
|
7786
7805
|
const initialValuesRef = React6.useRef(values);
|
|
7806
|
+
const pendingAutoSubmitRef = React6.useRef(null);
|
|
7807
|
+
const onSubmitRef = React6.useRef(onSubmit);
|
|
7808
|
+
onSubmitRef.current = onSubmit;
|
|
7809
|
+
React6.useEffect(() => {
|
|
7810
|
+
const pending = pendingAutoSubmitRef.current;
|
|
7811
|
+
if (pending && String(values[pending.key] ?? "") === pending.value) {
|
|
7812
|
+
pendingAutoSubmitRef.current = null;
|
|
7813
|
+
onSubmitRef.current();
|
|
7814
|
+
}
|
|
7815
|
+
}, [values]);
|
|
7787
7816
|
const handleInputChange = (key) => (e) => {
|
|
7788
7817
|
onChange({ [key]: e.target.value });
|
|
7789
7818
|
};
|
|
7790
7819
|
const handleSelectChange = (key, autoSubmit) => (value) => {
|
|
7791
7820
|
onChange({ [key]: value });
|
|
7792
|
-
if (autoSubmit)
|
|
7821
|
+
if (autoSubmit) pendingAutoSubmitRef.current = { key, value };
|
|
7793
7822
|
};
|
|
7794
7823
|
const handleRadioChange = (key) => (value) => {
|
|
7795
7824
|
onChange({ [key]: value });
|
|
@@ -7804,9 +7833,11 @@ function PageFilter(props) {
|
|
|
7804
7833
|
onChange({ [key]: checked ? "true" : "false" });
|
|
7805
7834
|
};
|
|
7806
7835
|
const handleSubmit = () => {
|
|
7836
|
+
pendingAutoSubmitRef.current = null;
|
|
7807
7837
|
onSubmit();
|
|
7808
7838
|
};
|
|
7809
7839
|
const handleReset = () => {
|
|
7840
|
+
pendingAutoSubmitRef.current = null;
|
|
7810
7841
|
onChange(initialValuesRef.current);
|
|
7811
7842
|
onReset?.();
|
|
7812
7843
|
};
|