@orbe-agro/client-core 5.3.273 → 5.3.275
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/@ecme/components/shared/DataTable.js +22 -8
- package/dist/@ecme/components/shared/DataTable.js.map +1 -1
- package/dist/@types/@ecme/components/shared/DataTable.d.ts +1 -0
- package/dist/@types/@ecme/components/shared/DataTable.d.ts.map +1 -1
- package/dist/base/configs/api.config.js +1 -1
- package/dist/base/configs/api.config.js.map +1 -1
- package/lib/@ecme/components/shared/DataTable.tsx +28 -9
- package/lib/base/configs/api.config.ts +1 -1
- package/package.json +1 -1
|
@@ -197,16 +197,30 @@ function DataTable(props) {
|
|
|
197
197
|
}
|
|
198
198
|
}, [table.getState().rowSelection, onSelectionChange, table]);
|
|
199
199
|
useEffect(() => {
|
|
200
|
-
if (props.
|
|
201
|
-
const
|
|
202
|
-
|
|
203
|
-
|
|
200
|
+
if (props.selectedRows && data.length > 0) {
|
|
201
|
+
const externalSelection = {};
|
|
202
|
+
data.forEach((row, index) => {
|
|
203
|
+
const isSelected = props.selectedRows?.some((selectedRow) => selectedRow === row);
|
|
204
|
+
if (isSelected) {
|
|
205
|
+
externalSelection[index] = true;
|
|
206
|
+
}
|
|
204
207
|
});
|
|
205
|
-
setRowSelection(
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
+
setRowSelection(externalSelection);
|
|
209
|
+
}
|
|
210
|
+
}, [props.selectedRows, data]);
|
|
211
|
+
useEffect(() => {
|
|
212
|
+
if (!props.selectedRows) {
|
|
213
|
+
if (props.isAllSelected === true && table) {
|
|
214
|
+
const all = {};
|
|
215
|
+
table.getRowModel().rows.forEach((row) => {
|
|
216
|
+
all[row.id] = true;
|
|
217
|
+
});
|
|
218
|
+
setRowSelection(all);
|
|
219
|
+
} else if (props.isAllSelected === false) {
|
|
220
|
+
setRowSelection({});
|
|
221
|
+
}
|
|
208
222
|
}
|
|
209
|
-
}, [props.isAllSelected]);
|
|
223
|
+
}, [props.isAllSelected, table, props.selectedRows]);
|
|
210
224
|
return /* @__PURE__ */ jsxs(Loading, { loading: Boolean(loading && data.length !== 0), type: "cover", children: [
|
|
211
225
|
/* @__PURE__ */ jsxs(Table, { ...rest, children: [
|
|
212
226
|
/* @__PURE__ */ jsx(THead, { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx(Tr, { children: headerGroup.headers.map((header) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.js","sources":["../../../../lib/@ecme/components/shared/DataTable.tsx"],"sourcesContent":["import FileNotFound from '@/assets/svg/FileNotFound'\nimport type { CheckboxProps } from '@/components/ui/Checkbox'\nimport Checkbox from '@/components/ui/Checkbox'\nimport Pagination from '@/components/ui/Pagination'\nimport Select from '@/components/ui/Select'\nimport type { SkeletonProps } from '@/components/ui/Skeleton'\nimport type { TableProps } from '@/components/ui/Table'\nimport Table from '@/components/ui/Table'\nimport {\n CellContext,\n ColumnDef,\n ColumnSort,\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n Row,\n useReactTable,\n} from '@tanstack/react-table'\nimport classNames from 'classnames'\nimport type { ChangeEvent, ReactNode, Ref } from 'react'\nimport {\n Fragment,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState\n} from 'react'\nimport { useTranslation } from 'react-i18next'\nimport TableRowSkeleton from './loaders/TableRowSkeleton'\nimport Loading from './Loading'\n\nexport type OnSortParam = { order: 'asc' | 'desc' | ''; key: string | number }\n\nexport type DataTableProps<T> = {\n columns: ColumnDef<T>[]\n customNoDataIcon?: ReactNode\n data?: T[]\n loading?: boolean\n noData?: boolean\n instanceId?: string\n onCheckBoxChange?: (checked: boolean, row: T) => void\n onIndeterminateCheckBoxChange?: (checked: boolean, rows: Row<T>[]) => void\n onPaginationChange?: (page: number) => void\n onSelectChange?: (num: number) => void\n onSort?: (sort: OnSortParam) => void\n pageSizes?: number[]\n manualSorting?: boolean\n selectable?: boolean\n skeletonAvatarColumns?: number[]\n skeletonAvatarProps?: SkeletonProps\n pagingData?: {\n total: number\n pageIndex: number\n pageSize: number\n }\n checkboxChecked?: (row: T) => boolean\n indeterminateCheckboxChecked?: (row: Row<T>[]) => boolean\n ref?: Ref<DataTableResetHandle | HTMLTableElement>\n onSelectionChange?: (selected: T[]) => void\n renderSubComponent?: (row: Row<T>) => React.ReactNode\n getRowCanExpand?: (row: Row<T>) => boolean\n hidePagination?: boolean\n isAllSelected?: boolean\n} & TableProps\n\nexport type CheckBoxChangeEvent = ChangeEvent<HTMLInputElement>\n\nexport interface IndeterminateCheckboxProps\n extends Omit<CheckboxProps, 'onChange'> {\n onChange: (event: CheckBoxChangeEvent) => void\n indeterminate: boolean\n onCheckBoxChange?: (event: CheckBoxChangeEvent) => void\n onIndeterminateCheckBoxChange?: (event: CheckBoxChangeEvent) => void\n}\n\nconst { Tr, Th, Td, THead, TBody, Sorter } = Table\n\nconst IndeterminateCheckbox = (props: IndeterminateCheckboxProps) => {\n const {\n indeterminate,\n onChange,\n onCheckBoxChange,\n onIndeterminateCheckBoxChange,\n ...rest\n } = props\n\n const ref = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n if (typeof indeterminate === 'boolean' && ref.current) {\n ref.current.indeterminate = !rest.checked && indeterminate\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref, indeterminate])\n\n const handleChange = (e: CheckBoxChangeEvent) => {\n onChange(e)\n onCheckBoxChange?.(e)\n onIndeterminateCheckBoxChange?.(e)\n }\n\n return (\n <Checkbox\n ref={ref}\n className=\"mb-0\"\n onChange={(_, e) => handleChange(e)}\n {...rest}\n />\n )\n}\n\nexport type DataTableResetHandle = {\n resetSorting: () => void\n resetSelected: () => void\n}\n\nfunction DataTable<T>(props: DataTableProps<T>) {\n const {\n skeletonAvatarColumns,\n columns: columnsProp = [],\n data = [],\n customNoDataIcon,\n loading,\n noData,\n onCheckBoxChange,\n onIndeterminateCheckBoxChange,\n onPaginationChange,\n onSelectChange,\n onSort,\n pageSizes = [10, 25, 50, 100],\n selectable = false,\n skeletonAvatarProps,\n pagingData = {\n total: 0,\n pageIndex: 1,\n pageSize: 10,\n },\n checkboxChecked,\n indeterminateCheckboxChecked,\n instanceId = 'data-table',\n ref,\n renderSubComponent = () => null,\n getRowCanExpand = () => false,\n onSelectionChange,\n hidePagination = false,\n ...rest\n } = props\n\n const { pageSize, pageIndex, total } = pagingData\n\n const [sorting, setSorting] = useState<ColumnSort[] | null>(null)\n const [selection, setRowSelection] = useState({})\n\n const { t } = useTranslation()\n\n const pageSizeOption = useMemo(\n () =>\n pageSizes.map((number) => ({\n value: number,\n label: `${number} / ${t('common.table.pageAbbr')}`,\n })),\n [pageSizes],\n )\n\n useEffect(() => {\n if (Array.isArray(sorting)) {\n const sortOrder =\n sorting.length > 0 ? (sorting[0].desc ? 'desc' : 'asc') : ''\n const id = sorting.length > 0 ? sorting[0].id : ''\n onSort?.({ order: sortOrder, key: id })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sorting])\n\n const handleIndeterminateCheckBoxChange = (\n checked: boolean,\n rows: Row<T>[],\n ) => {\n if (!loading) {\n onIndeterminateCheckBoxChange?.(checked, rows)\n }\n }\n\n const handleCheckBoxChange = (checked: boolean, row: T) => {\n if (!loading) {\n onCheckBoxChange?.(checked, row)\n }\n }\n\n const finalColumns: ColumnDef<T>[] = useMemo(() => {\n const columns = columnsProp\n\n if (selectable) {\n return [\n {\n id: 'select',\n maxSize: 50,\n header: ({ table }) => (\n <IndeterminateCheckbox\n checked={\n indeterminateCheckboxChecked\n ? indeterminateCheckboxChecked(\n table.getRowModel().rows,\n )\n : table.getIsAllRowsSelected()\n }\n indeterminate={table.getIsSomeRowsSelected()}\n onChange={table.getToggleAllRowsSelectedHandler()}\n onIndeterminateCheckBoxChange={(e) => {\n handleIndeterminateCheckBoxChange(\n e.target.checked,\n table.getRowModel().rows,\n )\n }}\n />\n ),\n cell: ({ row }) => (\n <IndeterminateCheckbox\n checked={\n checkboxChecked\n ? checkboxChecked(row.original)\n : row.getIsSelected()\n }\n disabled={!row.getCanSelect()}\n indeterminate={row.getIsSomeSelected()}\n onChange={row.getToggleSelectedHandler()}\n onCheckBoxChange={(e) =>\n handleCheckBoxChange(\n e.target.checked,\n row.original,\n )\n }\n />\n ),\n },\n ...columns,\n ]\n }\n return columns\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [columnsProp, selectable, loading, checkboxChecked])\n\n const table = useReactTable({\n data,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns: finalColumns,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n manualPagination: true,\n manualSorting: props.manualSorting ?? false,\n onSortingChange: (sorter) => {\n setSorting(sorter as ColumnSort[])\n },\n onRowSelectionChange: setRowSelection,\n state: {\n sorting: sorting as ColumnSort[],\n rowSelection: selection,\n },\n getRowCanExpand,\n })\n\n const resetSorting = () => {\n table.resetSorting()\n }\n\n const resetSelected = () => {\n table.resetRowSelection(true)\n }\n\n useImperativeHandle(ref, () => ({\n resetSorting,\n resetSelected,\n }))\n\n const handlePaginationChange = (page: number) => {\n if (!loading) {\n resetSelected()\n onPaginationChange?.(page)\n }\n }\n\n const handleSelectChange = (value?: number) => {\n if (!loading) {\n onSelectChange?.(Number(value))\n }\n }\n\n const prevSelectedRef = useRef<T[]>([])\n\n useEffect(() => {\n if (!onSelectionChange) return\n\n const selectedRows = table\n .getSelectedRowModel()\n .rows.map((r) => r.original as T)\n\n const isEqual =\n selectedRows.length === prevSelectedRef.current.length &&\n selectedRows.every(\n (item, idx) => item === prevSelectedRef.current[idx],\n )\n\n if (!isEqual) {\n prevSelectedRef.current = selectedRows\n onSelectionChange(selectedRows)\n }\n }, [table.getState().rowSelection, onSelectionChange, table])\n\n useEffect(() => {\n if (props.isAllSelected && table) {\n const all = {}\n table.getRowModel().rows.forEach((row) => {\n all[row.id] = true\n })\n setRowSelection(all)\n } else {\n setRowSelection({})\n }\n }, [props.isAllSelected])\n\n return (\n <Loading loading={Boolean(loading && data.length !== 0)} type=\"cover\">\n <Table {...rest}>\n <THead>\n {table.getHeaderGroups().map((headerGroup) => (\n <Tr key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n // 1. LEITURA E VALIDAÇÕES DO ALINHAMENTO\n const headerAlign = (header.column.columnDef as any).meta?.headerAlign || 'between';\n\n let justifyClass = 'justify-between'; // Padrão: Nome Esquerda, Sorter Direita\n\n // Flag para o alinhamento complexo desejado\n const sorterEnd = headerAlign === 'name-center-sorter-end';\n\n // Define a classe de justificação principal para os alinhamentos simples\n if (headerAlign === 'center') {\n justifyClass = 'justify-center'; // Nome + Sorter juntos no centro\n } else if (headerAlign === 'start') {\n justifyClass = 'justify-start'; // Nome + Sorter juntos na esquerda\n } else if (headerAlign === 'end') {\n justifyClass = 'justify-end'; // Nome + Sorter juntos na direita\n }\n\n // Se for o layout complexo, usamos 'justify-center' como base\n if (sorterEnd) {\n // Usamos justify-center, e o ml-auto do Sorter o empurra para o canto.\n justifyClass = 'justify-center';\n }\n\n // Define classes para o SPAN do nome (Ocupa largura total e centraliza o texto)\n const nameClasses = classNames('truncate', {\n // Se for sorterEnd, o SPAN ocupa a largura total para centralizar o nome\n 'w-full text-center': sorterEnd,\n });\n\n // Define a classe para o wrapper do Sorter.\n let sorterClasses = '';\n if (sorterEnd) {\n // Para sorterEnd, ml-auto empurra o Sorter para a EXTREMA direita\n sorterClasses = 'ml-auto';\n }\n\n return (\n <Th\n key={header.id}\n colSpan={header.colSpan}\n >\n {header.isPlaceholder ? null : (\n <div\n className={classNames(\n 'flex items-center gap-1', // O 'gap-1' fornece o espaçamento entre Nome e Sorter\n justifyClass,\n header.column.getCanSort() &&\n 'cursor-pointer select-none',\n loading &&\n 'pointer-events-none',\n )}\n onClick={header.column.getToggleSortingHandler()}\n >\n {/* 2. RENDERIZAÇÃO DO NOME (Sempre primeiro, pois o Sorter deve ser à direita) */}\n <span className={nameClasses}>\n {flexRender(\n header.column.columnDef\n .header,\n header.getContext(),\n )}\n </span>\n\n {/* 3. RENDERIZAÇÃO DO SORTER: Sempre depois do nome. O ml-auto será aplicado APENAS em sorterEnd */}\n {header.column.getCanSort() && (\n // O Sorter deve estar em uma div se precisar de classes condicionais (ml-auto)\n <div className={sorterClasses}>\n <Sorter\n sort={header.column.getIsSorted()}\n />\n </div>\n )}\n </div>\n )}\n </Th>\n );\n })}\n </Tr>\n ))}\n </THead>\n {loading && data.length === 0 ? (\n <TableRowSkeleton\n columns={(finalColumns as Array<T>).length}\n rows={pagingData.pageSize}\n avatarInColumns={skeletonAvatarColumns}\n avatarProps={skeletonAvatarProps}\n />\n ) : (\n <TBody>\n {noData ? (\n <Tr>\n <Td\n className=\"hover:bg-transparent\"\n colSpan={finalColumns.length}\n >\n <div className=\"flex flex-col items-center gap-4\">\n {customNoDataIcon ? (\n customNoDataIcon\n ) : (\n <>\n <FileNotFound />\n <span className=\"font-semibold\">\n No data found!\n </span>\n </>\n )}\n </div>\n </Td>\n </Tr>\n ) : (\n table\n .getRowModel()\n .rows.slice(0, pageSize)\n .map((row) => {\n return (\n <Fragment key={row.id}>\n <Tr key={row.id}>\n {row\n .getVisibleCells()\n .map((cell) => {\n return (\n <Td\n key={cell.id}\n style={{\n width: cell.column.getSize(),\n }}\n >\n {flexRender(\n cell.column\n .columnDef\n .cell,\n cell.getContext(),\n )}\n </Td>\n )\n })}\n </Tr>\n {row.getIsExpanded() && (\n <Tr>\n <Td\n colSpan={\n row.getVisibleCells()\n .length\n }\n >\n {renderSubComponent(\n row,\n )}\n </Td>\n </Tr>\n )}\n </Fragment>\n )\n })\n )}\n </TBody>\n )}\n </Table>\n {!hidePagination && (\n <div className=\"mt-4 flex items-center justify-between\">\n <Pagination\n pageSize={pageSize}\n currentPage={pageIndex}\n total={total}\n onChange={handlePaginationChange}\n />\n <div style={{ minWidth: 130 }}>\n <Select\n instanceId={instanceId}\n size=\"sm\"\n menuPlacement=\"top\"\n isSearchable={false}\n value={pageSizeOption.filter(\n (option) => option.value === pageSize,\n )}\n options={pageSizeOption}\n onChange={(option) =>\n handleSelectChange(option?.value)\n }\n />\n </div>\n </div>\n )}\n </Loading>\n )\n}\n\nexport { DataTable }\nexport type { CellContext, ColumnDef, ColumnSort, Row }\nexport default DataTable\n"],"names":["table","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataTable.js","sources":["../../../../lib/@ecme/components/shared/DataTable.tsx"],"sourcesContent":["import FileNotFound from '@/assets/svg/FileNotFound'\nimport type { CheckboxProps } from '@/components/ui/Checkbox'\nimport Checkbox from '@/components/ui/Checkbox'\nimport Pagination from '@/components/ui/Pagination'\nimport Select from '@/components/ui/Select'\nimport type { SkeletonProps } from '@/components/ui/Skeleton'\nimport type { TableProps } from '@/components/ui/Table'\nimport Table from '@/components/ui/Table'\nimport {\n CellContext,\n ColumnDef,\n ColumnSort,\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n Row,\n useReactTable,\n} from '@tanstack/react-table'\nimport classNames from 'classnames'\nimport type { ChangeEvent, ReactNode, Ref } from 'react'\nimport {\n Fragment,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState\n} from 'react'\nimport { useTranslation } from 'react-i18next'\nimport TableRowSkeleton from './loaders/TableRowSkeleton'\nimport Loading from './Loading'\n\nexport type OnSortParam = { order: 'asc' | 'desc' | ''; key: string | number }\n\nexport type DataTableProps<T> = {\n columns: ColumnDef<T>[]\n customNoDataIcon?: ReactNode\n data?: T[]\n loading?: boolean\n noData?: boolean\n instanceId?: string\n onCheckBoxChange?: (checked: boolean, row: T) => void\n onIndeterminateCheckBoxChange?: (checked: boolean, rows: Row<T>[]) => void\n onPaginationChange?: (page: number) => void\n onSelectChange?: (num: number) => void\n onSort?: (sort: OnSortParam) => void\n pageSizes?: number[]\n manualSorting?: boolean\n selectable?: boolean\n skeletonAvatarColumns?: number[]\n skeletonAvatarProps?: SkeletonProps\n pagingData?: {\n total: number\n pageIndex: number\n pageSize: number\n }\n checkboxChecked?: (row: T) => boolean\n indeterminateCheckboxChecked?: (row: Row<T>[]) => boolean\n ref?: Ref<DataTableResetHandle | HTMLTableElement>\n onSelectionChange?: (selected: T[]) => void\n renderSubComponent?: (row: Row<T>) => React.ReactNode\n getRowCanExpand?: (row: Row<T>) => boolean\n hidePagination?: boolean\n isAllSelected?: boolean\n selectedRows?: T[]\n} & TableProps\n\nexport type CheckBoxChangeEvent = ChangeEvent<HTMLInputElement>\n\nexport interface IndeterminateCheckboxProps\n extends Omit<CheckboxProps, 'onChange'> {\n onChange: (event: CheckBoxChangeEvent) => void\n indeterminate: boolean\n onCheckBoxChange?: (event: CheckBoxChangeEvent) => void\n onIndeterminateCheckBoxChange?: (event: CheckBoxChangeEvent) => void\n}\n\nconst { Tr, Th, Td, THead, TBody, Sorter } = Table\n\nconst IndeterminateCheckbox = (props: IndeterminateCheckboxProps) => {\n const {\n indeterminate,\n onChange,\n onCheckBoxChange,\n onIndeterminateCheckBoxChange,\n ...rest\n } = props\n\n const ref = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n if (typeof indeterminate === 'boolean' && ref.current) {\n ref.current.indeterminate = !rest.checked && indeterminate\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref, indeterminate])\n\n const handleChange = (e: CheckBoxChangeEvent) => {\n onChange(e)\n onCheckBoxChange?.(e)\n onIndeterminateCheckBoxChange?.(e)\n }\n\n return (\n <Checkbox\n ref={ref}\n className=\"mb-0\"\n onChange={(_, e) => handleChange(e)}\n {...rest}\n />\n )\n}\n\nexport type DataTableResetHandle = {\n resetSorting: () => void\n resetSelected: () => void\n}\n\nfunction DataTable<T>(props: DataTableProps<T>) {\n const {\n skeletonAvatarColumns,\n columns: columnsProp = [],\n data = [],\n customNoDataIcon,\n loading,\n noData,\n onCheckBoxChange,\n onIndeterminateCheckBoxChange,\n onPaginationChange,\n onSelectChange,\n onSort,\n pageSizes = [10, 25, 50, 100],\n selectable = false,\n skeletonAvatarProps,\n pagingData = {\n total: 0,\n pageIndex: 1,\n pageSize: 10,\n },\n checkboxChecked,\n indeterminateCheckboxChecked,\n instanceId = 'data-table',\n ref,\n renderSubComponent = () => null,\n getRowCanExpand = () => false,\n onSelectionChange,\n hidePagination = false,\n ...rest\n } = props\n\n const { pageSize, pageIndex, total } = pagingData\n\n const [sorting, setSorting] = useState<ColumnSort[] | null>(null)\n const [selection, setRowSelection] = useState({})\n\n const { t } = useTranslation()\n\n const pageSizeOption = useMemo(\n () =>\n pageSizes.map((number) => ({\n value: number,\n label: `${number} / ${t('common.table.pageAbbr')}`,\n })),\n [pageSizes],\n )\n\n useEffect(() => {\n if (Array.isArray(sorting)) {\n const sortOrder =\n sorting.length > 0 ? (sorting[0].desc ? 'desc' : 'asc') : ''\n const id = sorting.length > 0 ? sorting[0].id : ''\n onSort?.({ order: sortOrder, key: id })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sorting])\n\n const handleIndeterminateCheckBoxChange = (\n checked: boolean,\n rows: Row<T>[],\n ) => {\n if (!loading) {\n onIndeterminateCheckBoxChange?.(checked, rows)\n }\n }\n\n const handleCheckBoxChange = (checked: boolean, row: T) => {\n if (!loading) {\n onCheckBoxChange?.(checked, row)\n }\n }\n\n const finalColumns: ColumnDef<T>[] = useMemo(() => {\n const columns = columnsProp\n\n if (selectable) {\n return [\n {\n id: 'select',\n maxSize: 50,\n header: ({ table }) => (\n <IndeterminateCheckbox\n checked={\n indeterminateCheckboxChecked\n ? indeterminateCheckboxChecked(\n table.getRowModel().rows,\n )\n : table.getIsAllRowsSelected()\n }\n indeterminate={table.getIsSomeRowsSelected()}\n onChange={table.getToggleAllRowsSelectedHandler()}\n onIndeterminateCheckBoxChange={(e) => {\n handleIndeterminateCheckBoxChange(\n e.target.checked,\n table.getRowModel().rows,\n )\n }}\n />\n ),\n cell: ({ row }) => (\n <IndeterminateCheckbox\n checked={\n checkboxChecked\n ? checkboxChecked(row.original)\n : row.getIsSelected()\n }\n disabled={!row.getCanSelect()}\n indeterminate={row.getIsSomeSelected()}\n onChange={row.getToggleSelectedHandler()}\n onCheckBoxChange={(e) =>\n handleCheckBoxChange(\n e.target.checked,\n row.original,\n )\n }\n />\n ),\n },\n ...columns,\n ]\n }\n return columns\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [columnsProp, selectable, loading, checkboxChecked])\n\n const table = useReactTable({\n data,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns: finalColumns,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n manualPagination: true,\n manualSorting: props.manualSorting ?? false,\n onSortingChange: (sorter) => {\n setSorting(sorter as ColumnSort[])\n },\n onRowSelectionChange: setRowSelection,\n state: {\n sorting: sorting as ColumnSort[],\n rowSelection: selection,\n },\n getRowCanExpand,\n })\n\n const resetSorting = () => {\n table.resetSorting()\n }\n\n const resetSelected = () => {\n table.resetRowSelection(true)\n }\n\n useImperativeHandle(ref, () => ({\n resetSorting,\n resetSelected,\n }))\n\n const handlePaginationChange = (page: number) => {\n if (!loading) {\n resetSelected()\n onPaginationChange?.(page)\n }\n }\n\n const handleSelectChange = (value?: number) => {\n if (!loading) {\n onSelectChange?.(Number(value))\n }\n }\n\n const prevSelectedRef = useRef<T[]>([])\n\n useEffect(() => {\n if (!onSelectionChange) return\n\n const selectedRows = table\n .getSelectedRowModel()\n .rows.map((r) => r.original as T)\n\n const isEqual =\n selectedRows.length === prevSelectedRef.current.length &&\n selectedRows.every(\n (item, idx) => item === prevSelectedRef.current[idx],\n )\n\n if (!isEqual) {\n prevSelectedRef.current = selectedRows\n onSelectionChange(selectedRows)\n }\n }, [table.getState().rowSelection, onSelectionChange, table])\n\n // Sync external selectedRows prop with internal selection state\n useEffect(() => {\n if (props.selectedRows && data.length > 0) {\n const externalSelection = {}\n data.forEach((row, index) => {\n const isSelected = props.selectedRows?.some(selectedRow => selectedRow === row)\n if (isSelected) {\n externalSelection[index] = true\n }\n })\n setRowSelection(externalSelection)\n }\n }, [props.selectedRows, data])\n\n // isAllSelected management - only when selectedRows is not provided\n useEffect(() => {\n if (!props.selectedRows) { // Only manage isAllSelected when selectedRows is not used\n if (props.isAllSelected === true && table) {\n const all = {}\n table.getRowModel().rows.forEach((row) => {\n all[row.id] = true\n })\n setRowSelection(all)\n } else if (props.isAllSelected === false) {\n setRowSelection({})\n }\n // When isAllSelected is undefined, preserve current selections\n }\n }, [props.isAllSelected, table, props.selectedRows])\n\n return (\n <Loading loading={Boolean(loading && data.length !== 0)} type=\"cover\">\n <Table {...rest}>\n <THead>\n {table.getHeaderGroups().map((headerGroup) => (\n <Tr key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n // 1. LEITURA E VALIDAÇÕES DO ALINHAMENTO\n const headerAlign = (header.column.columnDef as any).meta?.headerAlign || 'between';\n\n let justifyClass = 'justify-between'; // Padrão: Nome Esquerda, Sorter Direita\n\n // Flag para o alinhamento complexo desejado\n const sorterEnd = headerAlign === 'name-center-sorter-end';\n\n // Define a classe de justificação principal para os alinhamentos simples\n if (headerAlign === 'center') {\n justifyClass = 'justify-center'; // Nome + Sorter juntos no centro\n } else if (headerAlign === 'start') {\n justifyClass = 'justify-start'; // Nome + Sorter juntos na esquerda\n } else if (headerAlign === 'end') {\n justifyClass = 'justify-end'; // Nome + Sorter juntos na direita\n }\n\n // Se for o layout complexo, usamos 'justify-center' como base\n if (sorterEnd) {\n // Usamos justify-center, e o ml-auto do Sorter o empurra para o canto.\n justifyClass = 'justify-center';\n }\n\n // Define classes para o SPAN do nome (Ocupa largura total e centraliza o texto)\n const nameClasses = classNames('truncate', {\n // Se for sorterEnd, o SPAN ocupa a largura total para centralizar o nome\n 'w-full text-center': sorterEnd,\n });\n\n // Define a classe para o wrapper do Sorter.\n let sorterClasses = '';\n if (sorterEnd) {\n // Para sorterEnd, ml-auto empurra o Sorter para a EXTREMA direita\n sorterClasses = 'ml-auto';\n }\n\n return (\n <Th\n key={header.id}\n colSpan={header.colSpan}\n >\n {header.isPlaceholder ? null : (\n <div\n className={classNames(\n 'flex items-center gap-1', // O 'gap-1' fornece o espaçamento entre Nome e Sorter\n justifyClass,\n header.column.getCanSort() &&\n 'cursor-pointer select-none',\n loading &&\n 'pointer-events-none',\n )}\n onClick={header.column.getToggleSortingHandler()}\n >\n {/* 2. RENDERIZAÇÃO DO NOME (Sempre primeiro, pois o Sorter deve ser à direita) */}\n <span className={nameClasses}>\n {flexRender(\n header.column.columnDef\n .header,\n header.getContext(),\n )}\n </span>\n\n {/* 3. RENDERIZAÇÃO DO SORTER: Sempre depois do nome. O ml-auto será aplicado APENAS em sorterEnd */}\n {header.column.getCanSort() && (\n // O Sorter deve estar em uma div se precisar de classes condicionais (ml-auto)\n <div className={sorterClasses}>\n <Sorter\n sort={header.column.getIsSorted()}\n />\n </div>\n )}\n </div>\n )}\n </Th>\n );\n })}\n </Tr>\n ))}\n </THead>\n {loading && data.length === 0 ? (\n <TableRowSkeleton\n columns={(finalColumns as Array<T>).length}\n rows={pagingData.pageSize}\n avatarInColumns={skeletonAvatarColumns}\n avatarProps={skeletonAvatarProps}\n />\n ) : (\n <TBody>\n {noData ? (\n <Tr>\n <Td\n className=\"hover:bg-transparent\"\n colSpan={finalColumns.length}\n >\n <div className=\"flex flex-col items-center gap-4\">\n {customNoDataIcon ? (\n customNoDataIcon\n ) : (\n <>\n <FileNotFound />\n <span className=\"font-semibold\">\n No data found!\n </span>\n </>\n )}\n </div>\n </Td>\n </Tr>\n ) : (\n table\n .getRowModel()\n .rows.slice(0, pageSize)\n .map((row) => {\n return (\n <Fragment key={row.id}>\n <Tr key={row.id}>\n {row\n .getVisibleCells()\n .map((cell) => {\n return (\n <Td\n key={cell.id}\n style={{\n width: cell.column.getSize(),\n }}\n >\n {flexRender(\n cell.column\n .columnDef\n .cell,\n cell.getContext(),\n )}\n </Td>\n )\n })}\n </Tr>\n {row.getIsExpanded() && (\n <Tr>\n <Td\n colSpan={\n row.getVisibleCells()\n .length\n }\n >\n {renderSubComponent(\n row,\n )}\n </Td>\n </Tr>\n )}\n </Fragment>\n )\n })\n )}\n </TBody>\n )}\n </Table>\n {!hidePagination && (\n <div className=\"mt-4 flex items-center justify-between\">\n <Pagination\n pageSize={pageSize}\n currentPage={pageIndex}\n total={total}\n onChange={handlePaginationChange}\n />\n <div style={{ minWidth: 130 }}>\n <Select\n instanceId={instanceId}\n size=\"sm\"\n menuPlacement=\"top\"\n isSearchable={false}\n value={pageSizeOption.filter(\n (option) => option.value === pageSize,\n )}\n options={pageSizeOption}\n onChange={(option) =>\n handleSelectChange(option?.value)\n }\n />\n </div>\n </div>\n )}\n </Loading>\n )\n}\n\nexport { DataTable }\nexport type { CellContext, ColumnDef, ColumnSort, Row }\nexport default DataTable"],"names":["table","Fragment"],"mappings":"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"}
|
|
@@ -37,6 +37,7 @@ export type DataTableProps<T> = {
|
|
|
37
37
|
getRowCanExpand?: (row: Row<T>) => boolean;
|
|
38
38
|
hidePagination?: boolean;
|
|
39
39
|
isAllSelected?: boolean;
|
|
40
|
+
selectedRows?: T[];
|
|
40
41
|
} & TableProps;
|
|
41
42
|
export type CheckBoxChangeEvent = ChangeEvent<HTMLInputElement>;
|
|
42
43
|
export interface IndeterminateCheckboxProps extends Omit<CheckboxProps, 'onChange'> {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../../lib/@ecme/components/shared/DataTable.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAI7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAEvD,OAAO,EACH,WAAW,EACX,SAAS,EACT,UAAU,EAMV,GAAG,EAEN,MAAM,uBAAuB,CAAA;AAE9B,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAaxD,MAAM,MAAM,WAAW,GAAG;IAAE,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAA;AAE9E,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAC5B,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAA;IACvB,gBAAgB,CAAC,EAAE,SAAS,CAAA;IAC5B,IAAI,CAAC,EAAE,CAAC,EAAE,CAAA;IACV,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,CAAA;IACrD,6BAA6B,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAA;IAC1E,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAA;IACpC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAA;IAChC,mBAAmB,CAAC,EAAE,aAAa,CAAA;IACnC,UAAU,CAAC,EAAE;QACT,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,QAAQ,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAA;IACrC,4BAA4B,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAA;IACzD,GAAG,CAAC,EAAE,GAAG,CAAC,oBAAoB,GAAG,gBAAgB,CAAC,CAAA;IAClD,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,IAAI,CAAA;IAC3C,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,CAAA;IACrD,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAA;IAC1C,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,aAAa,CAAC,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../../lib/@ecme/components/shared/DataTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.config.js","sources":["../../../lib/base/configs/api.config.ts"],"sourcesContent":["/**\n * @desc Ambiente atual.\n *\n * \"development\" -> iniciado com \"yarn start\".\n *\n * \"production\" -> versão gerado com \"yarn build\".\n **/\nconst NODE_ENV = import.meta.env.MODE\n\n/**\n * @desc Endereço da API usado em modo de desenvolvimento, quando rodando a aplicação com \"yarn start\".\n *\n * @see http://localhost:8080/api (LOCAL)\n *\n * @see http://172.16.14.27:30001/api (QAS)\n *\n * */\n\nconst DEV_API_URL = 'http://localhost:8081'\n\n/**\n * @desc Endereço da API usado em versão de produção.\n *\n * VITE_APP_API_URL é definido no arquivo \".env.development\" e \".env.production\".\n *\n * Ambiente \".env.development\" é usado com o comando \"yarn build:dev\".\n *\n * Ambiente \".env.production\" é usado com o comando \"yarn build:prod\".\n *\n * Os ambientes sobrescrevem qualquer outro ambiente e as variáveis carregadas neles.\n **/\nconst BUILD_API_URL = import.meta.env.
|
|
1
|
+
{"version":3,"file":"api.config.js","sources":["../../../lib/base/configs/api.config.ts"],"sourcesContent":["/**\n * @desc Ambiente atual.\n *\n * \"development\" -> iniciado com \"yarn start\".\n *\n * \"production\" -> versão gerado com \"yarn build\".\n **/\nconst NODE_ENV = import.meta.env.MODE\n\n/**\n * @desc Endereço da API usado em modo de desenvolvimento, quando rodando a aplicação com \"yarn start\".\n *\n * @see http://localhost:8080/api (LOCAL)\n *\n * @see http://172.16.14.27:30001/api (QAS)\n *\n * */\n\nconst DEV_API_URL = 'http://localhost:8081'\n\n/**\n * @desc Endereço da API usado em versão de produção.\n *\n * VITE_APP_API_URL é definido no arquivo \".env.development\" e \".env.production\".\n *\n * Ambiente \".env.development\" é usado com o comando \"yarn build:dev\".\n *\n * Ambiente \".env.production\" é usado com o comando \"yarn build:prod\".\n *\n * Os ambientes sobrescrevem qualquer outro ambiente e as variáveis carregadas neles.\n **/\nconst BUILD_API_URL = import.meta.env.VITE_APP_API_URL\n\nexport function getApiUrl() {\n // Se não tem URL da API definida ou está no modo 'development', usa a URL de desenvolvimento\n if (NODE_ENV === 'development' || !BUILD_API_URL) {\n return DEV_API_URL\n }\n\n // Ajustes para CORS\n const origin = globalThis?.location?.origin ?? document?.referrer\n if (origin && (origin.includes(':5173') || origin.includes(':31000'))) {\n const modifiedOrigin = origin\n .replace(':5173', ':8081')\n .replace(':31000', ':30001')\n return modifiedOrigin ?? BUILD_API_URL\n }\n\n if (origin?.includes('.qas.')) {\n return 'https://gateway.apps.qas.orbeagro.com.br'\n }\n\n if (origin?.includes('.prd.')) {\n return 'https://gateway.apps.prd.orbeagro.com.br'\n }\n\n return BUILD_API_URL\n}\n\nexport const API_URL = getApiUrl()\n\nexport const GOOGLE_MAP_API_KEY = import.meta.env.VITE_APP_GOOGLE_MAP_API_KEY\nexport const GOOGLE_MAP_MAP_ID = import.meta.env.VITE_APP_GOOGLE_MAP_MAP_ID\n\nconst apiConfig = {\n API_URL,\n GOOGLE_MAP_API_KEY,\n GOOGLE_MAP_MAP_ID,\n NODE_ENV,\n DEV_API_URL,\n BUILD_API_URL,\n}\n\nexport default apiConfig\n"],"names":[],"mappings":"AAOA,MAAM,WAAW;AAWjB,MAAM,cAAc;AAapB,MAAM,gBAAgB;AAEf,SAAS,YAAY;AAEpB,MAAA,aAAa,iBAAiB,CAAC,eAAe;AACvC,WAAA;AAAA,EAAA;AAIX,QAAM,SAAS,YAAY,UAAU,UAAU,UAAU;AACrD,MAAA,WAAW,OAAO,SAAS,OAAO,KAAK,OAAO,SAAS,QAAQ,IAAI;AAC7D,UAAA,iBAAiB,OAClB,QAAQ,SAAS,OAAO,EACxB,QAAQ,UAAU,QAAQ;AAC/B,WAAO,kBAAkB;AAAA,EAAA;AAGzB,MAAA,QAAQ,SAAS,OAAO,GAAG;AACpB,WAAA;AAAA,EAAA;AAGP,MAAA,QAAQ,SAAS,OAAO,GAAG;AACpB,WAAA;AAAA,EAAA;AAGJ,SAAA;AACX;AAEO,MAAM,UAAU,UAAU;AAEpB,MAAA,qBAAqB;AACrB,MAAA,oBAAoB;AAEjC,MAAM,YAAY;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;"}
|
|
@@ -64,6 +64,7 @@ export type DataTableProps<T> = {
|
|
|
64
64
|
getRowCanExpand?: (row: Row<T>) => boolean
|
|
65
65
|
hidePagination?: boolean
|
|
66
66
|
isAllSelected?: boolean
|
|
67
|
+
selectedRows?: T[]
|
|
67
68
|
} & TableProps
|
|
68
69
|
|
|
69
70
|
export type CheckBoxChangeEvent = ChangeEvent<HTMLInputElement>
|
|
@@ -311,17 +312,35 @@ function DataTable<T>(props: DataTableProps<T>) {
|
|
|
311
312
|
}
|
|
312
313
|
}, [table.getState().rowSelection, onSelectionChange, table])
|
|
313
314
|
|
|
315
|
+
// Sync external selectedRows prop with internal selection state
|
|
314
316
|
useEffect(() => {
|
|
315
|
-
if (props.
|
|
316
|
-
const
|
|
317
|
-
|
|
318
|
-
|
|
317
|
+
if (props.selectedRows && data.length > 0) {
|
|
318
|
+
const externalSelection = {}
|
|
319
|
+
data.forEach((row, index) => {
|
|
320
|
+
const isSelected = props.selectedRows?.some(selectedRow => selectedRow === row)
|
|
321
|
+
if (isSelected) {
|
|
322
|
+
externalSelection[index] = true
|
|
323
|
+
}
|
|
319
324
|
})
|
|
320
|
-
setRowSelection(
|
|
321
|
-
} else {
|
|
322
|
-
setRowSelection({})
|
|
325
|
+
setRowSelection(externalSelection)
|
|
323
326
|
}
|
|
324
|
-
}, [props.
|
|
327
|
+
}, [props.selectedRows, data])
|
|
328
|
+
|
|
329
|
+
// isAllSelected management - only when selectedRows is not provided
|
|
330
|
+
useEffect(() => {
|
|
331
|
+
if (!props.selectedRows) { // Only manage isAllSelected when selectedRows is not used
|
|
332
|
+
if (props.isAllSelected === true && table) {
|
|
333
|
+
const all = {}
|
|
334
|
+
table.getRowModel().rows.forEach((row) => {
|
|
335
|
+
all[row.id] = true
|
|
336
|
+
})
|
|
337
|
+
setRowSelection(all)
|
|
338
|
+
} else if (props.isAllSelected === false) {
|
|
339
|
+
setRowSelection({})
|
|
340
|
+
}
|
|
341
|
+
// When isAllSelected is undefined, preserve current selections
|
|
342
|
+
}
|
|
343
|
+
}, [props.isAllSelected, table, props.selectedRows])
|
|
325
344
|
|
|
326
345
|
return (
|
|
327
346
|
<Loading loading={Boolean(loading && data.length !== 0)} type="cover">
|
|
@@ -518,4 +537,4 @@ function DataTable<T>(props: DataTableProps<T>) {
|
|
|
518
537
|
|
|
519
538
|
export { DataTable }
|
|
520
539
|
export type { CellContext, ColumnDef, ColumnSort, Row }
|
|
521
|
-
export default DataTable
|
|
540
|
+
export default DataTable
|
|
@@ -29,7 +29,7 @@ const DEV_API_URL = 'http://localhost:8081'
|
|
|
29
29
|
*
|
|
30
30
|
* Os ambientes sobrescrevem qualquer outro ambiente e as variáveis carregadas neles.
|
|
31
31
|
**/
|
|
32
|
-
const BUILD_API_URL = import.meta.env.
|
|
32
|
+
const BUILD_API_URL = import.meta.env.VITE_APP_API_URL
|
|
33
33
|
|
|
34
34
|
export function getApiUrl() {
|
|
35
35
|
// Se não tem URL da API definida ou está no modo 'development', usa a URL de desenvolvimento
|
package/package.json
CHANGED