diff --git a/apps/docs/CHANGELOG.md b/apps/docs/CHANGELOG.md index 60c506d9..34ba3b6c 100644 --- a/apps/docs/CHANGELOG.md +++ b/apps/docs/CHANGELOG.md @@ -1,5 +1,12 @@ # hawa-docs +## 0.0.93 + +### Patch Changes + +- Updated dependencies + - @sikka/hawa@0.42.8 + ## 0.0.92 ### Patch Changes diff --git a/apps/docs/package.json b/apps/docs/package.json index 1759de95..e704ce24 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -1,6 +1,6 @@ { "name": "hawa-docs", - "version": "0.0.92", + "version": "0.0.93", "private": true, "scripts": { "dev": "next dev -p 3001", diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md index ce1f5c1e..7548ca1c 100644 --- a/packages/components/CHANGELOG.md +++ b/packages/components/CHANGELOG.md @@ -1,5 +1,11 @@ # @sikka/hawa +## 0.42.8 + +### Patch Changes + +- `DataTable`: add `resetSelection` prop to be used to reset selection by passing in a changing value. + ## 0.42.7 ### Patch Changes diff --git a/packages/components/elements/dataTable/DataTable.tsx b/packages/components/elements/dataTable/DataTable.tsx index 4279ab85..95ee515c 100644 --- a/packages/components/elements/dataTable/DataTable.tsx +++ b/packages/components/elements/dataTable/DataTable.tsx @@ -49,6 +49,7 @@ type DataTableProps = { enableGoTo?: boolean; enableSelection?: boolean; enableFiltering?: boolean; + resetSelection?: boolean; filters?: { accessorKey: string; value: string; label: string }[]; hideHeader?: boolean; data: DataProps[]; @@ -92,6 +93,7 @@ export const DataTable = ({ data, paginationPosition = "bottom", translateFn, + resetSelection, enableHideColumns, enableSelection, enableFiltering, @@ -189,6 +191,10 @@ export const DataTable = ({ localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(columnVisibility)); }, [columnVisibility]); + React.useEffect(() => { + setRowSelection({}); + }, [resetSelection]); + React.useEffect(() => { setColumnVisibility((prev) => { let newColumnVisibility: VisibilityState = {}; diff --git a/packages/components/package.json b/packages/components/package.json index 7403533e..c58e13c0 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@sikka/hawa", - "version": "0.42.7", + "version": "0.42.8", "description": "Modern UI Kit made with Tailwind", "author": { "name": "Sikka Software", diff --git a/packages/storybook/CHANGELOG.md b/packages/storybook/CHANGELOG.md index f172cd46..2d844a1d 100644 --- a/packages/storybook/CHANGELOG.md +++ b/packages/storybook/CHANGELOG.md @@ -1,5 +1,12 @@ # hawa-storybook +## 0.26.114 + +### Patch Changes + +- Updated dependencies + - @sikka/hawa@0.42.8 + ## 0.26.113 ### Patch Changes diff --git a/packages/storybook/package.json b/packages/storybook/package.json index 9dac7952..3b2b158a 100644 --- a/packages/storybook/package.json +++ b/packages/storybook/package.json @@ -1,6 +1,6 @@ { "name": "hawa-storybook", - "version": "0.26.113", + "version": "0.26.114", "description": "Modern UI Kit made with Tailwind", "author": { "name": "Sikka Software", diff --git a/packages/storybook/stories/ElementsStories/DataTable.stories.tsx b/packages/storybook/stories/ElementsStories/DataTable.stories.tsx index 2e2b68ae..3c58ffcf 100644 --- a/packages/storybook/stories/ElementsStories/DataTable.stories.tsx +++ b/packages/storybook/stories/ElementsStories/DataTable.stories.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from "react"; +import { useEffect, useRef, useState } from "react"; import { Story } from "@storybook/blocks"; import type { Meta, StoryObj } from "@storybook/react"; @@ -244,7 +244,198 @@ export const WithHideColumns: Story = { }, }; export const WithSelection: Story = { - render: Template.bind({}), + render: (args: any, globals: any) => { + const locale = globals.globals?.locale === "ar" ? "ar" : "en"; + const direction = locale === "ar" ? "rtl" : "ltr"; + setLocale(locale); + + const companiesColumns: ColumnDef[] = [ + { + maxSize: 20, + accessorKey: "name", + enableHiding: false, + meta: { sortable: true }, + header: ({ column }) => ( + column.toggleSorting(column.getIsSorted() === "asc")} + label={t("company")} + /> + ), + }, + { + accessorKey: "location", + header: t("location"), + maxSize: 200, + meta: { hidden: true }, + }, + { + accessorKey: "website", + meta: { sortable: true }, + header: ({ column }) => ( + column.toggleSorting(column.getIsSorted() === "asc")} + label={t("website")} + /> + ), + cell: ({ row }) => ( + + {row.getValue("website")} + + ), + }, + + { + accessorKey: "employees", + meta: { sortable: true, hidden: true }, + header: ({ column }) => { + return ( + + column.toggleSorting(column.getIsSorted() === "asc") + } + /> + ); + }, + cell: (d) => ( +
+ {d.row.getValue("employees")?.toLocaleString()} +
+ ), + }, + { + accessorKey: "share_price", + meta: { sortable: true }, + header: ({ column }) => { + return ( + + column.toggleSorting(column.getIsSorted() === "asc") + } + /> + ); + }, + cell: ({ row }) => { + const amount = parseFloat(row.getValue("share_price")); + const formatted = new Intl.NumberFormat("en-US", { + style: "currency", + currency: "USD", + }).format(amount); + + return
{formatted}
; + }, + }, + + { + id: "actions", + header: t("actions"), + enableHiding: false, + enableResizing: false, + cell: ({ row }) => { + return ( + + + Open menu + + + + + + + } + items={[ + { + label: "copy", + value: "copy", + // action: () => navigator.clipboard.writeText(payment.id), + }, + ]} + /> + + ); + }, + }, + ]; + const [isLoading, setIsLoading] = useState(true); + const [isRowsSelected, setIsRowsSelected] = useState(true); + + useEffect(() => { + // Set a timeout to change isLoading to true after 2 seconds + const timeoutId = setTimeout(() => { + setIsLoading(false); + }, 2000); + + // Clear the timeout if the component unmounts before the timeout is reached + return () => { + clearTimeout(timeoutId); + }; + }, []); // Empty dependency array ensures this effect runs only once + + const handleResetSelection = () => { + setIsRowsSelected(!isRowsSelected); + }; + + return ( +
+ + + resetSelection={isRowsSelected} + translateFn={t} + // isLoading={isLoading} + // defaultSort="share_price" + columns={companiesColumns} + showCount + // data={[]} + // data={companiesData} + filters={[".com", ".sa", ".ae"]} + paginationPosition="top" + data={generatedData} + // itemsPerPage={[10, 50, 100, 150, 200, 500]} + bulkActions={[ + { + label: "Copy", + value: "copy", + action: (rows: any) => { + console.log("rows are ", rows); + }, + }, + ]} + condensed + direction={direction} + texts={{ + columns: t("columns"), + of: t("of"), + item: "عناصر", + total: t("total"), + page: t("page"), + noData: t("no-data"), + goTo: t("go-to"), + searchPlaceholder: t("search-items"), + selectedRows: t("selected-rows"), + }} + {...args} + /> + +
+ ); + }, args: { enableHideColumns: true, enableSearch: true,