dgz-ui-shared 1.2.17 → 1.2.19
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/chunks/DateRangePicker-BEguo3VF.es.js +177 -0
- package/dist/chunks/DateRangePicker-BEguo3VF.es.js.map +1 -0
- package/dist/chunks/DateRangePicker-lHqe5Mb6.cjs.js +2 -0
- package/dist/chunks/DateRangePicker-lHqe5Mb6.cjs.js.map +1 -0
- package/dist/chunks/Search-BDXQ3bSp.cjs.js +2 -0
- package/dist/chunks/Search-BDXQ3bSp.cjs.js.map +1 -0
- package/dist/chunks/{Search-0PkBZIDP.es.js → Search-I3lwE0J6.es.js} +31 -32
- package/dist/chunks/Search-I3lwE0J6.es.js.map +1 -0
- package/dist/components/datatable/index.cjs.js +1 -1
- package/dist/components/datatable/index.cjs.js.map +1 -1
- package/dist/components/datatable/index.es.js +48 -48
- package/dist/components/datatable/index.es.js.map +1 -1
- package/dist/components/datepicker/index.cjs.js +1 -1
- package/dist/components/datepicker/index.es.js +1 -1
- package/dist/components/filters/index.cjs.js +1 -1
- package/dist/components/filters/index.es.js +1 -1
- package/dist/components/form/index.cjs.js +1 -1
- package/dist/components/form/index.cjs.js.map +1 -1
- package/dist/components/form/index.es.js +32 -33
- package/dist/components/form/index.es.js.map +1 -1
- package/dist/types/components/datepicker/DateRangePicker.d.ts.map +1 -1
- package/dist/types/components/filters/FilterWrapper.d.ts.map +1 -1
- package/dist/types/components/form/MyDatePicker.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/chunks/DateRangePicker-DQoK4BQV.es.js +0 -178
- package/dist/chunks/DateRangePicker-DQoK4BQV.es.js.map +0 -1
- package/dist/chunks/DateRangePicker-H-_fkN-r.cjs.js +0 -2
- package/dist/chunks/DateRangePicker-H-_fkN-r.cjs.js.map +0 -1
- package/dist/chunks/Search-0PkBZIDP.es.js.map +0 -1
- package/dist/chunks/Search-CO1xBkv4.cjs.js +0 -2
- package/dist/chunks/Search-CO1xBkv4.cjs.js.map +0 -1
- package/dist/types/utils/day.d.ts +0 -7
- package/dist/types/utils/day.d.ts.map +0 -1
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { jsxs as n, jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import { Button as k } from "dgz-ui/button";
|
|
3
|
+
import { DATE as L, Calendar as d } from "dgz-ui/calendar";
|
|
4
|
+
import { Input as w } from "dgz-ui/form";
|
|
5
|
+
import { Popover as P, PopoverTrigger as A, PopoverContent as M } from "dgz-ui/popover";
|
|
6
|
+
import { cn as c } from "dgz-ui/utils";
|
|
7
|
+
import { XIcon as z, Calendar1 as E } from "lucide-react";
|
|
8
|
+
import { useState as v, useEffect as F, useMemo as I } from "react";
|
|
9
|
+
import { useTranslation as Z } from "react-i18next";
|
|
10
|
+
const Q = ({
|
|
11
|
+
className: O,
|
|
12
|
+
format: l = L,
|
|
13
|
+
selected: r,
|
|
14
|
+
timezone: h,
|
|
15
|
+
onRangeSelected: m = () => {
|
|
16
|
+
},
|
|
17
|
+
placeholder: T,
|
|
18
|
+
disabled: i,
|
|
19
|
+
error: x,
|
|
20
|
+
inputProps: N,
|
|
21
|
+
...p
|
|
22
|
+
}) => {
|
|
23
|
+
const { t: a } = Z(), [j, y] = v(!1), [t, f] = v();
|
|
24
|
+
F(() => {
|
|
25
|
+
f(r);
|
|
26
|
+
}, [r]);
|
|
27
|
+
const C = I(() => {
|
|
28
|
+
const o = dayjs().endOf("day");
|
|
29
|
+
return [
|
|
30
|
+
{
|
|
31
|
+
from: o.startOf("week").toDate(),
|
|
32
|
+
to: o.endOf("week").toDate(),
|
|
33
|
+
label: a("This week")
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
from: o.startOf("month").toDate(),
|
|
37
|
+
to: o.endOf("month").toDate(),
|
|
38
|
+
label: a("This month")
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
from: o.startOf("year").toDate(),
|
|
42
|
+
to: o.endOf("year").toDate(),
|
|
43
|
+
label: a("This year")
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
from: o.subtract(7, "day").startOf("day").toDate(),
|
|
47
|
+
to: o.toDate(),
|
|
48
|
+
label: a("Last 7 days")
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
from: o.subtract(30, "day").startOf("day").toDate(),
|
|
52
|
+
to: o.toDate(),
|
|
53
|
+
label: a("Last 30 days")
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
from: o.subtract(3, "month").startOf("day").toDate(),
|
|
57
|
+
to: o.toDate(),
|
|
58
|
+
label: a("Last 3 months")
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
from: o.subtract(6, "month").startOf("day").toDate(),
|
|
62
|
+
to: o.toDate(),
|
|
63
|
+
label: a("Last 6 months")
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
from: o.subtract(12, "month").startOf("day").toDate(),
|
|
67
|
+
to: o.toDate(),
|
|
68
|
+
label: a("Last 12 months")
|
|
69
|
+
}
|
|
70
|
+
].map((e) => {
|
|
71
|
+
var D, b;
|
|
72
|
+
return {
|
|
73
|
+
...e,
|
|
74
|
+
isActive: ((D = r == null ? void 0 : r.from) == null ? void 0 : D.getTime()) === e.from.getTime() && ((b = r == null ? void 0 : r.to) == null ? void 0 : b.getTime()) === e.to.getTime()
|
|
75
|
+
};
|
|
76
|
+
});
|
|
77
|
+
}, [a, r]), u = (o) => {
|
|
78
|
+
f(o), o != null && o.from && (o != null && o.to) && (m(o), y(!1));
|
|
79
|
+
};
|
|
80
|
+
return /* @__PURE__ */ n(P, { open: j, onOpenChange: y, children: [
|
|
81
|
+
/* @__PURE__ */ s(A, { asChild: !0, className: "m-0!", disabled: i, children: /* @__PURE__ */ n("div", { className: "relative", children: [
|
|
82
|
+
/* @__PURE__ */ s(
|
|
83
|
+
w,
|
|
84
|
+
{
|
|
85
|
+
variant: x ? "failure" : "default",
|
|
86
|
+
...N,
|
|
87
|
+
readOnly: !0,
|
|
88
|
+
value: t != null && t.from ? t.to ? `${dayjs(t.from).format(l)}-${dayjs(t.to).format(l)}` : dayjs(t.from).format(l) : "",
|
|
89
|
+
placeholder: T,
|
|
90
|
+
disabled: i,
|
|
91
|
+
className: c(O)
|
|
92
|
+
}
|
|
93
|
+
),
|
|
94
|
+
t && /* @__PURE__ */ s(
|
|
95
|
+
z,
|
|
96
|
+
{
|
|
97
|
+
onClick: () => {
|
|
98
|
+
f(void 0), m == null || m(void 0);
|
|
99
|
+
},
|
|
100
|
+
className: c(
|
|
101
|
+
"text-secondary absolute top-3 right-8 size-4 cursor-pointer",
|
|
102
|
+
i && "pointer-events-none opacity-50"
|
|
103
|
+
)
|
|
104
|
+
}
|
|
105
|
+
),
|
|
106
|
+
/* @__PURE__ */ s(
|
|
107
|
+
E,
|
|
108
|
+
{
|
|
109
|
+
className: c(
|
|
110
|
+
"text-secondary absolute top-2.5 right-2 size-5",
|
|
111
|
+
i && "pointer-events-none opacity-50"
|
|
112
|
+
)
|
|
113
|
+
}
|
|
114
|
+
)
|
|
115
|
+
] }) }),
|
|
116
|
+
/* @__PURE__ */ n(M, { className: "flex w-auto p-0", align: "end", side: "bottom", children: [
|
|
117
|
+
/* @__PURE__ */ s(
|
|
118
|
+
"div",
|
|
119
|
+
{
|
|
120
|
+
className: "border-border-alpha-light flex flex-col space-y-1 border-e p-2",
|
|
121
|
+
children: C.map((o, e) => /* @__PURE__ */ s(
|
|
122
|
+
k,
|
|
123
|
+
{
|
|
124
|
+
size: "xs",
|
|
125
|
+
variant: o.isActive ? "default" : "ghost",
|
|
126
|
+
className: "justify-start",
|
|
127
|
+
onClick: () => u(o),
|
|
128
|
+
children: o.label
|
|
129
|
+
},
|
|
130
|
+
e
|
|
131
|
+
))
|
|
132
|
+
}
|
|
133
|
+
),
|
|
134
|
+
/* @__PURE__ */ s(
|
|
135
|
+
d,
|
|
136
|
+
{
|
|
137
|
+
...p,
|
|
138
|
+
className: "border-border-alpha-light border-e",
|
|
139
|
+
mode: "single",
|
|
140
|
+
endMonth: t == null ? void 0 : t.to,
|
|
141
|
+
selected: t == null ? void 0 : t.from,
|
|
142
|
+
selectedToDate: t == null ? void 0 : t.to,
|
|
143
|
+
selectedFromDate: t == null ? void 0 : t.from,
|
|
144
|
+
timeZone: h,
|
|
145
|
+
disabled: t != null && t.to ? {
|
|
146
|
+
after: t.to
|
|
147
|
+
} : void 0,
|
|
148
|
+
onSelect: (o) => {
|
|
149
|
+
f({ ...t, from: o });
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
),
|
|
153
|
+
/* @__PURE__ */ s(
|
|
154
|
+
d,
|
|
155
|
+
{
|
|
156
|
+
...p,
|
|
157
|
+
mode: "single",
|
|
158
|
+
startMonth: t == null ? void 0 : t.from,
|
|
159
|
+
selected: t == null ? void 0 : t.to,
|
|
160
|
+
timeZone: h,
|
|
161
|
+
disabled: t != null && t.from ? {
|
|
162
|
+
before: t.from
|
|
163
|
+
} : void 0,
|
|
164
|
+
selectedToDate: t == null ? void 0 : t.to,
|
|
165
|
+
selectedFromDate: t == null ? void 0 : t.from,
|
|
166
|
+
onSelect: (o) => {
|
|
167
|
+
t && u({ ...t, to: o });
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
)
|
|
171
|
+
] })
|
|
172
|
+
] });
|
|
173
|
+
};
|
|
174
|
+
export {
|
|
175
|
+
Q as D
|
|
176
|
+
};
|
|
177
|
+
//# sourceMappingURL=DateRangePicker-BEguo3VF.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateRangePicker-BEguo3VF.es.js","sources":["../../src/components/datepicker/DateRangePicker.tsx"],"sourcesContent":["import { Button } from 'dgz-ui/button';\nimport { Calendar, type CalendarProps, DATE } from 'dgz-ui/calendar';\nimport { Input, type InputProps } from 'dgz-ui/form';\nimport { Popover, PopoverContent, PopoverTrigger } from 'dgz-ui/popover';\nimport { cn } from 'dgz-ui/utils';\nimport { Calendar1, XIcon } from 'lucide-react';\nimport { type ReactNode, useEffect, useMemo, useState } from 'react';\nimport { type DateRange } from 'react-day-picker';\nimport { useTranslation } from 'react-i18next';\n\n/**\n * Props for the DateRangePicker component.\n */\nexport type DateRangePickerProps = Omit<\n CalendarProps,\n 'mode' | 'disabled' | 'selected'\n> & {\n /** The date format string (e.g., 'YYYY-MM-DD'). */\n format?: string;\n /** Placeholder text when no date is selected. */\n placeholder?: string;\n /** The currently selected date range. */\n selected?: DateRange;\n /** Timezone for date calculations. */\n timezone?: string;\n /** Error message to display (modifies styling). */\n error?: string;\n /** Callback function when a date range is selected. */\n onRangeSelected?: (value?: DateRange) => void;\n inputProps?: InputProps;\n disabled?: boolean;\n};\n\n/**\n * Type definition for a date range preset configuration.\n */\ntype PresetType = DateRange & {\n /** Label for the preset (e.g., \"Last 7 days\"). */\n label: ReactNode;\n isActive?: boolean;\n};\n\n/**\n * DateRangePicker displays a two-month range picker with helpful presets.\n *\n * @param props.format - Display date format.\n * @param props.selected - Currently selected date range.\n * @param props.timezone - Time zone for date calculations.\n * @param props.onRangeSelected - Callback when a full range is selected.\n * @param props.placeholder - Placeholder when no date selected.\n * @param props.error - Optional error message that adjusts styling.\n * @param props.inputProps - Props passed to the underlying Input component.\n * @param props.disabled - Whether the date range picker is disabled.\n * @returns A date range picker component.\n */\nexport const DateRangePicker = ({\n className,\n format = DATE,\n selected,\n timezone,\n onRangeSelected = () => {},\n placeholder,\n disabled,\n error,\n inputProps,\n ...props\n}: DateRangePickerProps) => {\n const { t } = useTranslation();\n const [open, setOpen] = useState(false);\n const [date, setDate] = useState<DateRange | undefined>();\n\n useEffect(() => {\n setDate(selected);\n }, [selected]);\n\n const presets: PresetType[] = useMemo(() => {\n const today = dayjs().endOf('day');\n return [\n {\n from: today.startOf('week').toDate(),\n to: today.endOf('week').toDate(),\n label: t('This week'),\n },\n {\n from: today.startOf('month').toDate(),\n to: today.endOf('month').toDate(),\n label: t('This month'),\n },\n {\n from: today.startOf('year').toDate(),\n to: today.endOf('year').toDate(),\n label: t('This year'),\n },\n {\n from: today.subtract(7, 'day').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 7 days'),\n },\n {\n from: today.subtract(30, 'day').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 30 days'),\n },\n {\n from: today.subtract(3, 'month').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 3 months'),\n },\n {\n from: today.subtract(6, 'month').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 6 months'),\n },\n {\n from: today.subtract(12, 'month').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 12 months'),\n },\n ].map((item) => ({\n ...item,\n isActive:\n selected?.from?.getTime() === item.from.getTime() &&\n selected?.to?.getTime() === item.to.getTime(),\n }));\n }, [t, selected]);\n\n const handleRangeSelect = (range: DateRange) => {\n setDate(range);\n if (range?.from && range?.to) {\n onRangeSelected(range);\n setOpen(false);\n }\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild className={'m-0!'} disabled={disabled}>\n <div className={'relative'}>\n <Input\n variant={error ? 'failure' : 'default'}\n {...inputProps}\n readOnly\n value={\n date?.from\n ? date.to\n ? `${dayjs(date.from).format(format)}-${dayjs(date.to).format(format)}`\n : dayjs(date.from).format(format)\n : ''\n }\n placeholder={placeholder}\n disabled={disabled}\n className={cn(className)}\n />\n {date && (\n <XIcon\n onClick={() => {\n setDate(undefined);\n onRangeSelected?.(undefined);\n }}\n className={cn(\n 'text-secondary absolute top-3 right-8 size-4 cursor-pointer',\n disabled && 'pointer-events-none opacity-50'\n )}\n />\n )}\n <Calendar1\n className={cn(\n 'text-secondary absolute top-2.5 right-2 size-5',\n disabled && 'pointer-events-none opacity-50'\n )}\n />\n </div>\n </PopoverTrigger>\n <PopoverContent className=\"flex w-auto p-0\" align=\"end\" side={'bottom'}>\n <div\n className={\n 'border-border-alpha-light flex flex-col space-y-1 border-e p-2'\n }\n >\n {presets.map((preset, index) => (\n <Button\n size={'xs'}\n key={index}\n variant={preset.isActive ? 'default' : 'ghost'}\n className={'justify-start'}\n onClick={() => handleRangeSelect(preset)}\n >\n {preset.label}\n </Button>\n ))}\n </div>\n <Calendar\n {...props}\n className={'border-border-alpha-light border-e'}\n mode=\"single\"\n endMonth={date?.to}\n selected={date?.from}\n selectedToDate={date?.to}\n selectedFromDate={date?.from}\n timeZone={timezone}\n disabled={\n date?.to\n ? {\n after: date.to,\n }\n : undefined\n }\n onSelect={(from) => {\n setDate({ ...date, from: from as Date | undefined });\n }}\n />\n <Calendar\n {...props}\n mode=\"single\"\n startMonth={date?.from}\n selected={date?.to}\n timeZone={timezone}\n disabled={\n date?.from\n ? {\n before: date.from,\n }\n : undefined\n }\n selectedToDate={date?.to}\n selectedFromDate={date?.from}\n onSelect={(to) => {\n if (date) {\n handleRangeSelect({ ...date, to: to as Date | undefined });\n }\n }}\n />\n </PopoverContent>\n </Popover>\n );\n};\n"],"names":["DateRangePicker","className","format","DATE","selected","timezone","onRangeSelected","placeholder","disabled","error","inputProps","props","t","useTranslation","open","setOpen","useState","date","setDate","useEffect","presets","useMemo","today","item","_a","_b","handleRangeSelect","range","jsxs","Popover","jsx","PopoverTrigger","Input","cn","XIcon","Calendar1","PopoverContent","preset","index","Button","Calendar","from","to"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const e=require("react/jsx-runtime"),k=require("dgz-ui/button"),f=require("dgz-ui/calendar"),L=require("dgz-ui/form"),u=require("dgz-ui/popover"),h=require("dgz-ui/utils"),v=require("lucide-react"),m=require("react"),P=require("react-i18next"),w=({className:j,format:c=f.DATE,selected:s,timezone:y,onRangeSelected:n=()=>{},placeholder:O,disabled:i,error:T,inputProps:q,...b})=>{const{t:r}=P.useTranslation(),[N,D]=m.useState(!1),[t,l]=m.useState();m.useEffect(()=>{l(s)},[s]);const C=m.useMemo(()=>{const o=dayjs().endOf("day");return[{from:o.startOf("week").toDate(),to:o.endOf("week").toDate(),label:r("This week")},{from:o.startOf("month").toDate(),to:o.endOf("month").toDate(),label:r("This month")},{from:o.startOf("year").toDate(),to:o.endOf("year").toDate(),label:r("This year")},{from:o.subtract(7,"day").startOf("day").toDate(),to:o.toDate(),label:r("Last 7 days")},{from:o.subtract(30,"day").startOf("day").toDate(),to:o.toDate(),label:r("Last 30 days")},{from:o.subtract(3,"month").startOf("day").toDate(),to:o.toDate(),label:r("Last 3 months")},{from:o.subtract(6,"month").startOf("day").toDate(),to:o.toDate(),label:r("Last 6 months")},{from:o.subtract(12,"month").startOf("day").toDate(),to:o.toDate(),label:r("Last 12 months")}].map(a=>{var p,x;return{...a,isActive:((p=s==null?void 0:s.from)==null?void 0:p.getTime())===a.from.getTime()&&((x=s==null?void 0:s.to)==null?void 0:x.getTime())===a.to.getTime()}})},[r,s]),d=o=>{l(o),o!=null&&o.from&&(o!=null&&o.to)&&(n(o),D(!1))};return e.jsxs(u.Popover,{open:N,onOpenChange:D,children:[e.jsx(u.PopoverTrigger,{asChild:!0,className:"m-0!",disabled:i,children:e.jsxs("div",{className:"relative",children:[e.jsx(L.Input,{variant:T?"failure":"default",...q,readOnly:!0,value:t!=null&&t.from?t.to?`${dayjs(t.from).format(c)}-${dayjs(t.to).format(c)}`:dayjs(t.from).format(c):"",placeholder:O,disabled:i,className:h.cn(j)}),t&&e.jsx(v.XIcon,{onClick:()=>{l(void 0),n==null||n(void 0)},className:h.cn("text-secondary absolute top-3 right-8 size-4 cursor-pointer",i&&"pointer-events-none opacity-50")}),e.jsx(v.Calendar1,{className:h.cn("text-secondary absolute top-2.5 right-2 size-5",i&&"pointer-events-none opacity-50")})]})}),e.jsxs(u.PopoverContent,{className:"flex w-auto p-0",align:"end",side:"bottom",children:[e.jsx("div",{className:"border-border-alpha-light flex flex-col space-y-1 border-e p-2",children:C.map((o,a)=>e.jsx(k.Button,{size:"xs",variant:o.isActive?"default":"ghost",className:"justify-start",onClick:()=>d(o),children:o.label},a))}),e.jsx(f.Calendar,{...b,className:"border-border-alpha-light border-e",mode:"single",endMonth:t==null?void 0:t.to,selected:t==null?void 0:t.from,selectedToDate:t==null?void 0:t.to,selectedFromDate:t==null?void 0:t.from,timeZone:y,disabled:t!=null&&t.to?{after:t.to}:void 0,onSelect:o=>{l({...t,from:o})}}),e.jsx(f.Calendar,{...b,mode:"single",startMonth:t==null?void 0:t.from,selected:t==null?void 0:t.to,timeZone:y,disabled:t!=null&&t.from?{before:t.from}:void 0,selectedToDate:t==null?void 0:t.to,selectedFromDate:t==null?void 0:t.from,onSelect:o=>{t&&d({...t,to:o})}})]})]})};exports.DateRangePicker=w;
|
|
2
|
+
//# sourceMappingURL=DateRangePicker-lHqe5Mb6.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateRangePicker-lHqe5Mb6.cjs.js","sources":["../../src/components/datepicker/DateRangePicker.tsx"],"sourcesContent":["import { Button } from 'dgz-ui/button';\nimport { Calendar, type CalendarProps, DATE } from 'dgz-ui/calendar';\nimport { Input, type InputProps } from 'dgz-ui/form';\nimport { Popover, PopoverContent, PopoverTrigger } from 'dgz-ui/popover';\nimport { cn } from 'dgz-ui/utils';\nimport { Calendar1, XIcon } from 'lucide-react';\nimport { type ReactNode, useEffect, useMemo, useState } from 'react';\nimport { type DateRange } from 'react-day-picker';\nimport { useTranslation } from 'react-i18next';\n\n/**\n * Props for the DateRangePicker component.\n */\nexport type DateRangePickerProps = Omit<\n CalendarProps,\n 'mode' | 'disabled' | 'selected'\n> & {\n /** The date format string (e.g., 'YYYY-MM-DD'). */\n format?: string;\n /** Placeholder text when no date is selected. */\n placeholder?: string;\n /** The currently selected date range. */\n selected?: DateRange;\n /** Timezone for date calculations. */\n timezone?: string;\n /** Error message to display (modifies styling). */\n error?: string;\n /** Callback function when a date range is selected. */\n onRangeSelected?: (value?: DateRange) => void;\n inputProps?: InputProps;\n disabled?: boolean;\n};\n\n/**\n * Type definition for a date range preset configuration.\n */\ntype PresetType = DateRange & {\n /** Label for the preset (e.g., \"Last 7 days\"). */\n label: ReactNode;\n isActive?: boolean;\n};\n\n/**\n * DateRangePicker displays a two-month range picker with helpful presets.\n *\n * @param props.format - Display date format.\n * @param props.selected - Currently selected date range.\n * @param props.timezone - Time zone for date calculations.\n * @param props.onRangeSelected - Callback when a full range is selected.\n * @param props.placeholder - Placeholder when no date selected.\n * @param props.error - Optional error message that adjusts styling.\n * @param props.inputProps - Props passed to the underlying Input component.\n * @param props.disabled - Whether the date range picker is disabled.\n * @returns A date range picker component.\n */\nexport const DateRangePicker = ({\n className,\n format = DATE,\n selected,\n timezone,\n onRangeSelected = () => {},\n placeholder,\n disabled,\n error,\n inputProps,\n ...props\n}: DateRangePickerProps) => {\n const { t } = useTranslation();\n const [open, setOpen] = useState(false);\n const [date, setDate] = useState<DateRange | undefined>();\n\n useEffect(() => {\n setDate(selected);\n }, [selected]);\n\n const presets: PresetType[] = useMemo(() => {\n const today = dayjs().endOf('day');\n return [\n {\n from: today.startOf('week').toDate(),\n to: today.endOf('week').toDate(),\n label: t('This week'),\n },\n {\n from: today.startOf('month').toDate(),\n to: today.endOf('month').toDate(),\n label: t('This month'),\n },\n {\n from: today.startOf('year').toDate(),\n to: today.endOf('year').toDate(),\n label: t('This year'),\n },\n {\n from: today.subtract(7, 'day').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 7 days'),\n },\n {\n from: today.subtract(30, 'day').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 30 days'),\n },\n {\n from: today.subtract(3, 'month').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 3 months'),\n },\n {\n from: today.subtract(6, 'month').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 6 months'),\n },\n {\n from: today.subtract(12, 'month').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 12 months'),\n },\n ].map((item) => ({\n ...item,\n isActive:\n selected?.from?.getTime() === item.from.getTime() &&\n selected?.to?.getTime() === item.to.getTime(),\n }));\n }, [t, selected]);\n\n const handleRangeSelect = (range: DateRange) => {\n setDate(range);\n if (range?.from && range?.to) {\n onRangeSelected(range);\n setOpen(false);\n }\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild className={'m-0!'} disabled={disabled}>\n <div className={'relative'}>\n <Input\n variant={error ? 'failure' : 'default'}\n {...inputProps}\n readOnly\n value={\n date?.from\n ? date.to\n ? `${dayjs(date.from).format(format)}-${dayjs(date.to).format(format)}`\n : dayjs(date.from).format(format)\n : ''\n }\n placeholder={placeholder}\n disabled={disabled}\n className={cn(className)}\n />\n {date && (\n <XIcon\n onClick={() => {\n setDate(undefined);\n onRangeSelected?.(undefined);\n }}\n className={cn(\n 'text-secondary absolute top-3 right-8 size-4 cursor-pointer',\n disabled && 'pointer-events-none opacity-50'\n )}\n />\n )}\n <Calendar1\n className={cn(\n 'text-secondary absolute top-2.5 right-2 size-5',\n disabled && 'pointer-events-none opacity-50'\n )}\n />\n </div>\n </PopoverTrigger>\n <PopoverContent className=\"flex w-auto p-0\" align=\"end\" side={'bottom'}>\n <div\n className={\n 'border-border-alpha-light flex flex-col space-y-1 border-e p-2'\n }\n >\n {presets.map((preset, index) => (\n <Button\n size={'xs'}\n key={index}\n variant={preset.isActive ? 'default' : 'ghost'}\n className={'justify-start'}\n onClick={() => handleRangeSelect(preset)}\n >\n {preset.label}\n </Button>\n ))}\n </div>\n <Calendar\n {...props}\n className={'border-border-alpha-light border-e'}\n mode=\"single\"\n endMonth={date?.to}\n selected={date?.from}\n selectedToDate={date?.to}\n selectedFromDate={date?.from}\n timeZone={timezone}\n disabled={\n date?.to\n ? {\n after: date.to,\n }\n : undefined\n }\n onSelect={(from) => {\n setDate({ ...date, from: from as Date | undefined });\n }}\n />\n <Calendar\n {...props}\n mode=\"single\"\n startMonth={date?.from}\n selected={date?.to}\n timeZone={timezone}\n disabled={\n date?.from\n ? {\n before: date.from,\n }\n : undefined\n }\n selectedToDate={date?.to}\n selectedFromDate={date?.from}\n onSelect={(to) => {\n if (date) {\n handleRangeSelect({ ...date, to: to as Date | undefined });\n }\n }}\n />\n </PopoverContent>\n </Popover>\n );\n};\n"],"names":["DateRangePicker","className","format","DATE","selected","timezone","onRangeSelected","placeholder","disabled","error","inputProps","props","t","useTranslation","open","setOpen","useState","date","setDate","useEffect","presets","useMemo","today","item","_a","_b","handleRangeSelect","range","jsxs","Popover","jsx","PopoverTrigger","Input","cn","XIcon","Calendar1","PopoverContent","preset","index","Button","Calendar","from","to"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const e=require("react/jsx-runtime"),i=require("dgz-ui/button"),S=require("dgz-ui/form"),h=require("dgz-ui/popover"),g=require("./lodash-BjH0kD7j.cjs.js"),x=require("lucide-react"),a=require("react"),E=require("react-i18next"),D=require("./useFilter-CsOF1_hM.cjs.js"),$=require("./MyInput-C9PNyYby.cjs.js"),A=require("./MySelect-Ovb1pK5c.cjs.js"),C=require("./index-ClQFzqcq.cjs.js"),O=require("dgz-ui/utils"),N=require("./Keyboard-kyPAAQWP.cjs.js"),W=a.memo(function({filters:n,params:c,onFilter:r,onChange:o,onCancel:y,triggerProps:l,contentProps:u,title:t,resetText:k,applyText:I,...B}){const{t:p}=E.useTranslation(),[M,P]=a.useState(!1),[R,d]=a.useState(!1),{form:b}=D.useFilter({params:c}),{watch:T,handleSubmit:z,control:v,reset:q}=b;a.useEffect(()=>{let s=!1;n.map(w=>{const m=g.lodashExports.get(c,`${w.name}`);(Array.isArray(m)?m.length>0:m)&&(s=!0),P(s)})},[n,c]);const f=T();a.useEffect(()=>{o==null||o(f)},[f,o]);const F=a.useCallback((s={})=>{r==null||r(s),d(!1)},[r]),K=a.useCallback(()=>{q(),r&&r({...Object.fromEntries(n.map(s=>[s.name,void 0]))}),d(!1)},[r,q,n]);return e.jsxs(h.Popover,{open:R,onOpenChange:d,children:[e.jsx(h.PopoverTrigger,{...l,children:e.jsx(i.Button,{asChild:!0,size:"sm",variant:"secondary",className:"ml-auto px-3",...B,children:e.jsxs("div",{className:"flex items-center",children:[M?e.jsx(x.ListFilterPlusIcon,{className:"size-5"}):e.jsx(x.ListFilterIcon,{className:"size-5"})," ",e.jsx("span",{className:"hidden lg:inline!",children:t||p("Filter")}),e.jsx(x.ChevronDown,{})]})})}),e.jsx(h.PopoverContent,{side:"bottom",align:"end",...u,children:e.jsx(S.Form,{...b,children:e.jsxs("form",{onSubmit:z(F),className:"space-y-4",children:[e.jsx("div",{className:"h-full shrink space-y-6 p-1",children:n.map(s=>s.options?e.jsx(A.MySelect,{control:v,name:s.name,isSearchable:!!s.isSearchable,placeholder:s.placeholder,isMulti:s.isMulti,options:s.options,label:s.label},s.name):e.jsx($.MyInput,{control:v,placeholder:s.placeholder,name:s.name,label:s.label},s.name))}),e.jsxs("div",{className:"flex shrink-0 justify-end gap-2",children:[e.jsx(i.Button,{variant:"destructive",type:"reset",size:"sm",onClick:K,children:k||p("Reset")}),e.jsx(i.Button,{type:"submit",size:"sm",children:I||p("Apply")})]})]})})})]})}),L=({placeholder:j,onSearchChange:n,className:c,inputProps:r,...o})=>{const{t:y}=E.useTranslation(),[l,u]=a.useState("");return e.jsxs("div",{...o,className:O.cn("relative w-full",c),children:[e.jsx(S.Input,{...r,placeholder:j||y("Type text and press Enter"),onInput:t=>u(g.lodashExports.get(t,"target.value","")),onKeyUp:t=>{t.key===N.Keyboard.ENTER&&(n(l||void 0),t.stopPropagation(),t.preventDefault())},onKeyDown:t=>{t.key===N.Keyboard.ENTER&&(t.stopPropagation(),t.preventDefault())}}),e.jsx(i.Button,{type:"button",variant:"ghost",className:"text-foreground absolute top-0 right-0 cursor-pointer rounded-md bg-transparent!",onClick:()=>n(l),children:e.jsx(C.pv,{})})]})};exports.FilterWrapper=W;exports.Search=L;
|
|
2
|
+
//# sourceMappingURL=Search-BDXQ3bSp.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Search-BDXQ3bSp.cjs.js","sources":["../../src/components/filters/FilterWrapper.tsx","../../src/components/filters/Search.tsx"],"sourcesContent":["import { Button, type ButtonProps } from 'dgz-ui/button';\nimport { Form, type Option } from 'dgz-ui/form';\nimport {\n Popover,\n type PopoverContainerProps,\n PopoverContent,\n PopoverTrigger,\n} from 'dgz-ui/popover';\nimport { get } from 'lodash';\nimport { ChevronDown, ListFilterIcon, ListFilterPlusIcon } from 'lucide-react';\nimport { memo, type ReactNode, useCallback, useEffect, useState } from 'react';\nimport type { FieldValues } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { useFilter } from '../../hooks';\nimport { MyInput, MySelect } from '../form';\n\n/**\n * Interface representing a filter configuration.\n */\nexport interface FilterInterface {\n /** Label for the filter field. */\n label?: ReactNode;\n /** Placeholder text for the input/select. */\n placeholder?: string;\n /** Default value for the filter. */\n value?: string | string[];\n /** Name of the filter field (used as key). */\n name: string;\n /** Whether the filter supports multiple values (for select inputs). */\n isMulti?: boolean;\n /** Whether the filter supports searchable inputs (for select inputs). */\n isSearchable?: boolean;\n /** Options for select inputs. */\n options?: Option[];\n}\n\n/**\n * Props for the FilterWrapper component.\n */\nexport interface FilterWrapperProps\n extends Omit<ButtonProps, 'title'>, PopoverContainerProps {\n /** Array of filter definitions to render. */\n filters: FilterInterface[];\n /** Current active parameters/filters. */\n params?: Record<string, unknown>;\n /** Callback fired when filters are applied. */\n onFilter?: (filters: Record<string, unknown>) => void;\n /** Callback fired when the filter popover is closed/cancelled. */\n onCancel?: () => void;\n /** Callback fired when filter form values change. */\n onChange?: (filters: FieldValues) => void;\n /** Title for the filter button. */\n title?: ReactNode;\n /** Text for the reset button. */\n resetText?: ReactNode;\n /** Text for the apply button. */\n applyText?: ReactNode;\n}\n\n/**\n * FilterWrapper shows a popover with a dynamic list of field filters and emits selected filter values.\n *\n * @param props.filters - Array of filter definitions to render.\n * @param props.params - Current params used to detect active filters.\n * @param props.onFilter - Callback fired when user applies filters.\n * @param props.onCancel - Callback fired on cancel.\n * @param props.onChange - Callback fired whenever filter form values change.\n */\nexport const FilterWrapper = memo(function FilterWrapper({\n filters,\n params,\n onFilter,\n onChange,\n onCancel,\n triggerProps,\n contentProps,\n title,\n resetText,\n applyText,\n ...btnProps\n}: FilterWrapperProps) {\n const { t } = useTranslation();\n const [isFiltered, setIsFiltered] = useState(false);\n const [open, setOpen] = useState(false);\n const { form } = useFilter({ params });\n\n const { watch, handleSubmit, control, reset } = form;\n\n useEffect(() => {\n let hasFilter = false;\n filters.map((filter) => {\n const value = get(params, `${filter.name}`);\n if (Array.isArray(value) ? value.length > 0 : Boolean(value)) {\n hasFilter = true;\n }\n\n setIsFiltered(hasFilter);\n });\n }, [filters, params]);\n\n const values = watch();\n\n useEffect(() => {\n onChange?.(values);\n }, [values, onChange]);\n\n const handleFilter = useCallback(\n (data = {}) => {\n onFilter?.(data);\n setOpen(false);\n },\n [onFilter]\n );\n\n const handleReset = useCallback(() => {\n reset();\n if (onFilter) {\n onFilter({\n ...Object.fromEntries(\n filters.map((filter) => [filter.name, undefined])\n ),\n });\n }\n setOpen(false);\n }, [onFilter, reset, filters]);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger {...triggerProps}>\n <Button\n asChild\n size={'sm'}\n variant=\"secondary\"\n className={'ml-auto px-3'}\n {...btnProps}\n >\n <div className={'flex items-center'}>\n {isFiltered ? (\n <ListFilterPlusIcon className={'size-5'} />\n ) : (\n <ListFilterIcon className={'size-5'} />\n )}{' '}\n <span className={'hidden lg:inline!'}>{title || t('Filter')}</span>\n <ChevronDown />\n </div>\n </Button>\n </PopoverTrigger>\n <PopoverContent side={'bottom'} align={'end'} {...contentProps}>\n <Form {...form}>\n <form onSubmit={handleSubmit(handleFilter)} className={'space-y-4'}>\n <div className={'h-full shrink space-y-6 p-1'}>\n {filters.map((filter) =>\n filter.options ? (\n <MySelect\n key={filter.name}\n control={control}\n name={filter.name}\n isSearchable={Boolean(filter.isSearchable)}\n placeholder={filter.placeholder}\n isMulti={filter.isMulti}\n options={filter.options}\n label={filter.label}\n />\n ) : (\n <MyInput\n key={filter.name}\n control={control}\n placeholder={filter.placeholder}\n name={filter.name}\n label={filter.label}\n />\n )\n )}\n </div>\n <div className={'flex shrink-0 justify-end gap-2'}>\n <Button\n variant={'destructive'}\n type=\"reset\"\n size={'sm'}\n onClick={handleReset}\n >\n {resetText || t('Reset')}\n </Button>\n <Button type=\"submit\" size={'sm'}>\n {applyText || t('Apply')}\n </Button>\n </div>\n </form>\n </Form>\n </PopoverContent>\n </Popover>\n );\n});\n","import { RiSearchLine } from '@remixicon/react';\nimport { Button } from 'dgz-ui/button';\nimport type { CardProps } from 'dgz-ui/card';\nimport { Input, type InputProps } from 'dgz-ui/form';\nimport { cn } from 'dgz-ui/utils';\nimport { get } from 'lodash';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Keyboard } from '../../enums';\n\n/**\n * Props for the Search component.\n */\nexport type SearchProps = Omit<CardProps, 'title'> & {\n /** Custom placeholder text for the input. */\n placeholder?: string;\n /** Callback fired when the search is triggered. */\n onSearchChange: (search?: string) => void;\n inputProps?: InputProps;\n};\n\n/**\n * Search input with a submit button that triggers a search action.\n *\n * This component renders a search input field and a search button. The search\n * is triggered when the user presses Enter or clicks the button. The search\n * value is then passed to the `onSearchChange` callback.\n *\n * @param {SearchProps} props - The props for the component.\n * @param {string} [props.placeholder] - Optional placeholder text for the input field.\n * @param {Function} props.onSearchChange - Callback function that is called when a search is performed.\n * @param {string} [props.className] - Optional class name for the component.\n * @param {InputProps} [props.inputProps] - Optional props to pass to the underlying Input component.\n */\nexport const Search = ({\n placeholder,\n onSearchChange,\n className,\n inputProps,\n ...props\n}: SearchProps) => {\n const { t } = useTranslation();\n const [search, setSearch] = useState('');\n\n return (\n <div {...props} className={cn('relative w-full', className)}>\n <Input\n {...inputProps}\n placeholder={placeholder || t('Type text and press Enter')}\n onInput={(evt) => setSearch(get(evt, 'target.value', ''))}\n onKeyUp={(evt) => {\n if (evt.key === Keyboard.ENTER) {\n onSearchChange(search || undefined);\n evt.stopPropagation();\n evt.preventDefault();\n }\n }}\n onKeyDown={(event) => {\n if (event.key === Keyboard.ENTER) {\n event.stopPropagation();\n event.preventDefault();\n }\n }}\n />\n <Button\n type={'button'}\n variant={'ghost'}\n className={\n 'text-foreground absolute top-0 right-0 cursor-pointer rounded-md bg-transparent!'\n }\n onClick={() => onSearchChange(search)}\n >\n <RiSearchLine />\n </Button>\n </div>\n );\n};\n"],"names":["FilterWrapper","memo","filters","params","onFilter","onChange","onCancel","triggerProps","contentProps","title","resetText","applyText","btnProps","t","useTranslation","isFiltered","setIsFiltered","useState","open","setOpen","form","useFilter","watch","handleSubmit","control","reset","useEffect","hasFilter","filter","value","get","values","handleFilter","useCallback","data","handleReset","jsxs","Popover","jsx","PopoverTrigger","Button","ListFilterPlusIcon","ListFilterIcon","ChevronDown","PopoverContent","Form","MySelect","MyInput","Search","placeholder","onSearchChange","className","inputProps","props","search","setSearch","cn","Input","evt","Keyboard","event","RiSearchLine"],"mappings":"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"}
|
|
@@ -13,43 +13,42 @@ import { p as V } from "./index-E1NtSoNr.es.js";
|
|
|
13
13
|
import { cn as X } from "dgz-ui/utils";
|
|
14
14
|
import { K as S } from "./Keyboard-CJVAJWdO.es.js";
|
|
15
15
|
const pe = G(function({
|
|
16
|
-
filters:
|
|
17
|
-
params:
|
|
18
|
-
onFilter:
|
|
19
|
-
onChange:
|
|
16
|
+
filters: t,
|
|
17
|
+
params: n,
|
|
18
|
+
onFilter: o,
|
|
19
|
+
onChange: r,
|
|
20
20
|
onCancel: y,
|
|
21
21
|
triggerProps: i,
|
|
22
22
|
contentProps: m,
|
|
23
|
-
title:
|
|
23
|
+
title: a,
|
|
24
24
|
resetText: M,
|
|
25
25
|
applyText: P,
|
|
26
26
|
...z
|
|
27
27
|
}) {
|
|
28
|
-
const { t: p } = I(), [T, j] = h(!1), [w, d] = h(!1), { form: v } = H({ params:
|
|
28
|
+
const { t: p } = I(), [T, j] = h(!1), [w, d] = h(!1), { form: v } = H({ params: n }), { watch: D, handleSubmit: F, control: b, reset: N } = v;
|
|
29
29
|
x(() => {
|
|
30
30
|
let e = !1;
|
|
31
|
-
|
|
32
|
-
const u = k.get(
|
|
31
|
+
t.map((A) => {
|
|
32
|
+
const u = k.get(n, `${A.name}`);
|
|
33
33
|
(Array.isArray(u) ? u.length > 0 : u) && (e = !0), j(e);
|
|
34
34
|
});
|
|
35
|
-
}, [
|
|
35
|
+
}, [t, n]);
|
|
36
36
|
const g = D();
|
|
37
37
|
x(() => {
|
|
38
|
-
|
|
39
|
-
}, [g,
|
|
38
|
+
r == null || r(g);
|
|
39
|
+
}, [g, r]);
|
|
40
40
|
const K = E(
|
|
41
41
|
(e = {}) => {
|
|
42
|
-
|
|
42
|
+
o == null || o(e), d(!1);
|
|
43
43
|
},
|
|
44
|
-
[
|
|
44
|
+
[o]
|
|
45
45
|
), R = E(() => {
|
|
46
|
-
N(),
|
|
47
|
-
...r,
|
|
46
|
+
N(), o && o({
|
|
48
47
|
...Object.fromEntries(
|
|
49
|
-
|
|
48
|
+
t.map((e) => [e.name, void 0])
|
|
50
49
|
)
|
|
51
50
|
}), d(!1);
|
|
52
|
-
}, [
|
|
51
|
+
}, [o, N, t]);
|
|
53
52
|
return /* @__PURE__ */ l(C, { open: w, onOpenChange: d, children: [
|
|
54
53
|
/* @__PURE__ */ s(L, { ...i, children: /* @__PURE__ */ s(
|
|
55
54
|
c,
|
|
@@ -62,13 +61,13 @@ const pe = G(function({
|
|
|
62
61
|
children: /* @__PURE__ */ l("div", { className: "flex items-center", children: [
|
|
63
62
|
T ? /* @__PURE__ */ s(U, { className: "size-5" }) : /* @__PURE__ */ s($, { className: "size-5" }),
|
|
64
63
|
" ",
|
|
65
|
-
/* @__PURE__ */ s("span", { className: "hidden lg:inline!", children:
|
|
64
|
+
/* @__PURE__ */ s("span", { className: "hidden lg:inline!", children: a || p("Filter") }),
|
|
66
65
|
/* @__PURE__ */ s(q, {})
|
|
67
66
|
] })
|
|
68
67
|
}
|
|
69
68
|
) }),
|
|
70
69
|
/* @__PURE__ */ s(W, { side: "bottom", align: "end", ...m, children: /* @__PURE__ */ s(B, { ...v, children: /* @__PURE__ */ l("form", { onSubmit: F(K), className: "space-y-4", children: [
|
|
71
|
-
/* @__PURE__ */ s("div", { className: "h-full shrink space-y-6 p-1", children:
|
|
70
|
+
/* @__PURE__ */ s("div", { className: "h-full shrink space-y-6 p-1", children: t.map(
|
|
72
71
|
(e) => e.options ? /* @__PURE__ */ s(
|
|
73
72
|
Q,
|
|
74
73
|
{
|
|
@@ -109,24 +108,24 @@ const pe = G(function({
|
|
|
109
108
|
] });
|
|
110
109
|
}), de = ({
|
|
111
110
|
placeholder: f,
|
|
112
|
-
onSearchChange:
|
|
113
|
-
className:
|
|
114
|
-
inputProps:
|
|
115
|
-
...
|
|
111
|
+
onSearchChange: t,
|
|
112
|
+
className: n,
|
|
113
|
+
inputProps: o,
|
|
114
|
+
...r
|
|
116
115
|
}) => {
|
|
117
116
|
const { t: y } = I(), [i, m] = h("");
|
|
118
|
-
return /* @__PURE__ */ l("div", { ...
|
|
117
|
+
return /* @__PURE__ */ l("div", { ...r, className: X("relative w-full", n), children: [
|
|
119
118
|
/* @__PURE__ */ s(
|
|
120
119
|
O,
|
|
121
120
|
{
|
|
122
|
-
...
|
|
121
|
+
...o,
|
|
123
122
|
placeholder: f || y("Type text and press Enter"),
|
|
124
|
-
onInput: (
|
|
125
|
-
onKeyUp: (
|
|
126
|
-
|
|
123
|
+
onInput: (a) => m(k.get(a, "target.value", "")),
|
|
124
|
+
onKeyUp: (a) => {
|
|
125
|
+
a.key === S.ENTER && (t(i || void 0), a.stopPropagation(), a.preventDefault());
|
|
127
126
|
},
|
|
128
|
-
onKeyDown: (
|
|
129
|
-
|
|
127
|
+
onKeyDown: (a) => {
|
|
128
|
+
a.key === S.ENTER && (a.stopPropagation(), a.preventDefault());
|
|
130
129
|
}
|
|
131
130
|
}
|
|
132
131
|
),
|
|
@@ -136,7 +135,7 @@ const pe = G(function({
|
|
|
136
135
|
type: "button",
|
|
137
136
|
variant: "ghost",
|
|
138
137
|
className: "text-foreground absolute top-0 right-0 cursor-pointer rounded-md bg-transparent!",
|
|
139
|
-
onClick: () =>
|
|
138
|
+
onClick: () => t(i),
|
|
140
139
|
children: /* @__PURE__ */ s(V, {})
|
|
141
140
|
}
|
|
142
141
|
)
|
|
@@ -146,4 +145,4 @@ export {
|
|
|
146
145
|
pe as F,
|
|
147
146
|
de as S
|
|
148
147
|
};
|
|
149
|
-
//# sourceMappingURL=Search-
|
|
148
|
+
//# sourceMappingURL=Search-I3lwE0J6.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Search-I3lwE0J6.es.js","sources":["../../src/components/filters/FilterWrapper.tsx","../../src/components/filters/Search.tsx"],"sourcesContent":["import { Button, type ButtonProps } from 'dgz-ui/button';\nimport { Form, type Option } from 'dgz-ui/form';\nimport {\n Popover,\n type PopoverContainerProps,\n PopoverContent,\n PopoverTrigger,\n} from 'dgz-ui/popover';\nimport { get } from 'lodash';\nimport { ChevronDown, ListFilterIcon, ListFilterPlusIcon } from 'lucide-react';\nimport { memo, type ReactNode, useCallback, useEffect, useState } from 'react';\nimport type { FieldValues } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { useFilter } from '../../hooks';\nimport { MyInput, MySelect } from '../form';\n\n/**\n * Interface representing a filter configuration.\n */\nexport interface FilterInterface {\n /** Label for the filter field. */\n label?: ReactNode;\n /** Placeholder text for the input/select. */\n placeholder?: string;\n /** Default value for the filter. */\n value?: string | string[];\n /** Name of the filter field (used as key). */\n name: string;\n /** Whether the filter supports multiple values (for select inputs). */\n isMulti?: boolean;\n /** Whether the filter supports searchable inputs (for select inputs). */\n isSearchable?: boolean;\n /** Options for select inputs. */\n options?: Option[];\n}\n\n/**\n * Props for the FilterWrapper component.\n */\nexport interface FilterWrapperProps\n extends Omit<ButtonProps, 'title'>, PopoverContainerProps {\n /** Array of filter definitions to render. */\n filters: FilterInterface[];\n /** Current active parameters/filters. */\n params?: Record<string, unknown>;\n /** Callback fired when filters are applied. */\n onFilter?: (filters: Record<string, unknown>) => void;\n /** Callback fired when the filter popover is closed/cancelled. */\n onCancel?: () => void;\n /** Callback fired when filter form values change. */\n onChange?: (filters: FieldValues) => void;\n /** Title for the filter button. */\n title?: ReactNode;\n /** Text for the reset button. */\n resetText?: ReactNode;\n /** Text for the apply button. */\n applyText?: ReactNode;\n}\n\n/**\n * FilterWrapper shows a popover with a dynamic list of field filters and emits selected filter values.\n *\n * @param props.filters - Array of filter definitions to render.\n * @param props.params - Current params used to detect active filters.\n * @param props.onFilter - Callback fired when user applies filters.\n * @param props.onCancel - Callback fired on cancel.\n * @param props.onChange - Callback fired whenever filter form values change.\n */\nexport const FilterWrapper = memo(function FilterWrapper({\n filters,\n params,\n onFilter,\n onChange,\n onCancel,\n triggerProps,\n contentProps,\n title,\n resetText,\n applyText,\n ...btnProps\n}: FilterWrapperProps) {\n const { t } = useTranslation();\n const [isFiltered, setIsFiltered] = useState(false);\n const [open, setOpen] = useState(false);\n const { form } = useFilter({ params });\n\n const { watch, handleSubmit, control, reset } = form;\n\n useEffect(() => {\n let hasFilter = false;\n filters.map((filter) => {\n const value = get(params, `${filter.name}`);\n if (Array.isArray(value) ? value.length > 0 : Boolean(value)) {\n hasFilter = true;\n }\n\n setIsFiltered(hasFilter);\n });\n }, [filters, params]);\n\n const values = watch();\n\n useEffect(() => {\n onChange?.(values);\n }, [values, onChange]);\n\n const handleFilter = useCallback(\n (data = {}) => {\n onFilter?.(data);\n setOpen(false);\n },\n [onFilter]\n );\n\n const handleReset = useCallback(() => {\n reset();\n if (onFilter) {\n onFilter({\n ...Object.fromEntries(\n filters.map((filter) => [filter.name, undefined])\n ),\n });\n }\n setOpen(false);\n }, [onFilter, reset, filters]);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger {...triggerProps}>\n <Button\n asChild\n size={'sm'}\n variant=\"secondary\"\n className={'ml-auto px-3'}\n {...btnProps}\n >\n <div className={'flex items-center'}>\n {isFiltered ? (\n <ListFilterPlusIcon className={'size-5'} />\n ) : (\n <ListFilterIcon className={'size-5'} />\n )}{' '}\n <span className={'hidden lg:inline!'}>{title || t('Filter')}</span>\n <ChevronDown />\n </div>\n </Button>\n </PopoverTrigger>\n <PopoverContent side={'bottom'} align={'end'} {...contentProps}>\n <Form {...form}>\n <form onSubmit={handleSubmit(handleFilter)} className={'space-y-4'}>\n <div className={'h-full shrink space-y-6 p-1'}>\n {filters.map((filter) =>\n filter.options ? (\n <MySelect\n key={filter.name}\n control={control}\n name={filter.name}\n isSearchable={Boolean(filter.isSearchable)}\n placeholder={filter.placeholder}\n isMulti={filter.isMulti}\n options={filter.options}\n label={filter.label}\n />\n ) : (\n <MyInput\n key={filter.name}\n control={control}\n placeholder={filter.placeholder}\n name={filter.name}\n label={filter.label}\n />\n )\n )}\n </div>\n <div className={'flex shrink-0 justify-end gap-2'}>\n <Button\n variant={'destructive'}\n type=\"reset\"\n size={'sm'}\n onClick={handleReset}\n >\n {resetText || t('Reset')}\n </Button>\n <Button type=\"submit\" size={'sm'}>\n {applyText || t('Apply')}\n </Button>\n </div>\n </form>\n </Form>\n </PopoverContent>\n </Popover>\n );\n});\n","import { RiSearchLine } from '@remixicon/react';\nimport { Button } from 'dgz-ui/button';\nimport type { CardProps } from 'dgz-ui/card';\nimport { Input, type InputProps } from 'dgz-ui/form';\nimport { cn } from 'dgz-ui/utils';\nimport { get } from 'lodash';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Keyboard } from '../../enums';\n\n/**\n * Props for the Search component.\n */\nexport type SearchProps = Omit<CardProps, 'title'> & {\n /** Custom placeholder text for the input. */\n placeholder?: string;\n /** Callback fired when the search is triggered. */\n onSearchChange: (search?: string) => void;\n inputProps?: InputProps;\n};\n\n/**\n * Search input with a submit button that triggers a search action.\n *\n * This component renders a search input field and a search button. The search\n * is triggered when the user presses Enter or clicks the button. The search\n * value is then passed to the `onSearchChange` callback.\n *\n * @param {SearchProps} props - The props for the component.\n * @param {string} [props.placeholder] - Optional placeholder text for the input field.\n * @param {Function} props.onSearchChange - Callback function that is called when a search is performed.\n * @param {string} [props.className] - Optional class name for the component.\n * @param {InputProps} [props.inputProps] - Optional props to pass to the underlying Input component.\n */\nexport const Search = ({\n placeholder,\n onSearchChange,\n className,\n inputProps,\n ...props\n}: SearchProps) => {\n const { t } = useTranslation();\n const [search, setSearch] = useState('');\n\n return (\n <div {...props} className={cn('relative w-full', className)}>\n <Input\n {...inputProps}\n placeholder={placeholder || t('Type text and press Enter')}\n onInput={(evt) => setSearch(get(evt, 'target.value', ''))}\n onKeyUp={(evt) => {\n if (evt.key === Keyboard.ENTER) {\n onSearchChange(search || undefined);\n evt.stopPropagation();\n evt.preventDefault();\n }\n }}\n onKeyDown={(event) => {\n if (event.key === Keyboard.ENTER) {\n event.stopPropagation();\n event.preventDefault();\n }\n }}\n />\n <Button\n type={'button'}\n variant={'ghost'}\n className={\n 'text-foreground absolute top-0 right-0 cursor-pointer rounded-md bg-transparent!'\n }\n onClick={() => onSearchChange(search)}\n >\n <RiSearchLine />\n </Button>\n </div>\n );\n};\n"],"names":["FilterWrapper","memo","filters","params","onFilter","onChange","onCancel","triggerProps","contentProps","title","resetText","applyText","btnProps","t","useTranslation","isFiltered","setIsFiltered","useState","open","setOpen","form","useFilter","watch","handleSubmit","control","reset","useEffect","hasFilter","filter","value","get","values","handleFilter","useCallback","data","handleReset","jsxs","Popover","jsx","PopoverTrigger","Button","ListFilterPlusIcon","ListFilterIcon","ChevronDown","PopoverContent","Form","MySelect","MyInput","Search","placeholder","onSearchChange","className","inputProps","props","search","setSearch","cn","Input","evt","Keyboard","event","RiSearchLine"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),J=require("../../chunks/index-ClQFzqcq.cjs.js"),m=require("dgz-ui/button"),M=require("dgz-ui/dropdown"),b=require("dgz-ui/utils"),p=require("../../chunks/lodash-BjH0kD7j.cjs.js"),o=require("lucide-react"),y=require("react"),P=require("react-i18next"),_=require("../../chunks/useSortable-B3LF1tg8.cjs.js"),ee=require("../../chunks/Actions-DQPuVKCk.cjs.js"),le=require("../../chunks/ExportData-C1Lrr1gH.cjs.js"),G=require("../../chunks/Search-BDXQ3bSp.cjs.js"),se=require("../../chunks/Loader-D_jX_Wgx.cjs.js"),u=require("../../chunks/MyPagination-CnF3468f.cjs.js"),I=require("dgz-ui/form"),i=require("dgz-ui/table"),Q=require("../../chunks/SortOrder-81BrXp3i.cjs.js"),te=require("../../chunks/Empty-BYOOFAab.cjs.js"),X=({rows:s=[],columns:T,onRowClick:E,rowKey:N,params:c={page:1,limit:u.DEFAULT_LIMIT},hasNumbers:k=!1,hasCheckbox:w=!1,selectedItems:A,onSelectedItemsChange:v,onSortOrderChange:F,isStickyHeader:t,className:H,...O})=>{const{sortObject:r,handleSort:R}=_.useSortable({sortField:c==null?void 0:c.sortField,sortOrder:c==null?void 0:c.sortOrder,onSortOrderChange:F}),{selectedRows:g,isRowSelected:h,isAllRowsSelected:f,handleSelectAllRows:$,handleSelectRow:D}=_.useDataTable({rows:s,defaultSelectedRows:A});return y.useEffect(()=>{JSON.stringify(A)!==JSON.stringify(g)&&g&&(v==null||v(g))},[g,A,v]),e.jsxs(i.Table,{...O,className:b.cn("relative",H),children:[e.jsx(i.TableHeader,{className:b.cn("bg-bg",t&&"sticky top-0 z-1"),children:e.jsxs(i.TableRow,{children:[w&&e.jsx(i.TableHead,{className:"w-12 p-3",children:e.jsx(I.Checkbox,{className:"mt-1",checked:f(N),onCheckedChange:l=>$(N,!!l),"aria-label":"Select all"})}),k&&e.jsx(i.TableHead,{className:"w-12 p-2",children:"#"}),T.filter(l=>!l.hidden).map(l=>e.jsx(i.TableHead,{style:l.styles,className:b.cn("p-2",l.sortable&&"cursor-pointer"),onClick:()=>l.sortable&&R(l.dataIndex),children:e.jsxs("div",{className:"flex items-center gap-2",children:[l.name," ",l.sortable&&((r==null?void 0:r.sortField)===l.key?e.jsxs(e.Fragment,{children:[(r==null?void 0:r.sortOrder)===Q.SortOrder.DESC&&e.jsx(o.ArrowDownWideNarrow,{size:15}),(r==null?void 0:r.sortOrder)===Q.SortOrder.ASC&&e.jsx(o.ArrowUpWideNarrow,{size:15})]}):e.jsx(o.ArrowUpDown,{size:15}))]})},l.key))]})}),e.jsx(i.TableBody,{className:"[&>tr:nth-child(even)]:bg-bg-secondary",children:s.length?s.map((l,q)=>e.jsxs(i.TableRow,{onClick:()=>E==null?void 0:E(l),className:b.cn(E&&"cursor-pointer"),"data-state":h(l[N])&&"selected",children:[w&&e.jsx(i.TableCell,{className:"w-12 p-3",onClick:x=>x.stopPropagation(),children:e.jsx(I.Checkbox,{className:"mt-1",checked:h(l[N]),onCheckedChange:x=>D(l[N],!!x),"aria-label":"Select row"})}),k&&e.jsx(i.TableCell,{className:"w-12 p-2",children:(c.page-1)*(c.limit||u.DEFAULT_LIMIT)+q+1}),T.filter(x=>!x.hidden).map(x=>e.jsx(i.TableCell,{className:"text-body-xs-medium max-w-xs p-2",style:x.styles,children:x.render?x.render(p.lodashExports.get(l,x.dataIndex),l):p.lodashExports.get(l,x.dataIndex,"")},`${q}-${x.key}`))]},`${l[N]}`)):e.jsx(i.TableRow,{children:e.jsx(i.TableCell,{colSpan:k?w?T.length+2:T.length+1:T.length,children:e.jsx(te.Empty,{})})})})]})},de=({dataSource:s,columns:T,onRowClick:E,rowKey:N,hasNumbers:c,hasSearch:k,exportOptions:w,hasCheckbox:A,hasPagination:v,isStickyHeader:F,onParamChange:t,dataKey:H="docs",loading:O,tableKey:r,filters:R,actions:g,handleFilterChange:h,params:f,exportLoading:$=!1,onColumnsUpdate:D,hasColumnsVisibilityDropdown:l,onSelectedItemsChange:q,actionProps:x,filterWrapperProps:Y,exportOptionsProps:Z,columnsVisibilityProps:n,paginationProps:U,searchProps:j,...K})=>{var B;const{t:a}=P.useTranslation(),[z,S]=y.useState([]),{formattedColumns:L,handleColumnsChange:C,resetColumns:V}=_.useColumns({key:r,columns:T});return y.useEffect(()=>{D==null||D(L)},[L,D]),y.useEffect(()=>{q==null||q(z)},[z,q]),e.jsxs("div",{className:"border-border-alpha-light flex grow flex-col overflow-auto rounded-xl border shadow-xs",children:[(k||l&&r||!p.lodashExports.isEmpty(w)||!p.lodashExports.isEmpty(R))&&e.jsxs("div",{className:"flex shrink-0 flex-col items-center justify-between gap-3 p-4 lg:flex-row",children:[e.jsx("div",{className:"w-full shrink",children:k&&e.jsx(G.Search,{...j,inputProps:{...j==null?void 0:j.inputProps,className:b.cn("h-8",(B=j==null?void 0:j.inputProps)==null?void 0:B.className)},className:b.cn("max-w-78 [&_button]:-top-1",j==null?void 0:j.className),defaultValue:p.lodashExports.get(f,"search",""),onSearchChange:d=>t==null?void 0:t({...f,search:d,page:1})})}),e.jsxs("div",{className:"flex shrink-0 items-center justify-end gap-3",children:[w&&e.jsx(le.ExportData,{...Z,options:w,loading:$}),l&&r&&e.jsxs(M.DropdownMenu,{children:[e.jsx(M.DropdownMenuTrigger,{asChild:!0,...n==null?void 0:n.triggerProps,children:e.jsx(m.Button,{variant:"secondary",size:"sm",className:"ml-auto rounded-lg px-3",children:(n==null?void 0:n.title)||e.jsxs(e.Fragment,{children:[e.jsx(J.yn,{})," ",e.jsx("span",{className:"hidden lg:inline!",children:a("Customize columns")}),e.jsx(J.f1,{})]})})}),e.jsxs(M.DropdownMenuContent,{align:"end",...n==null?void 0:n.contentProps,children:[e.jsxs(M.DropdownMenuItem,{className:"capitalize",onClick:V,children:[e.jsx(o.RefreshCw,{})," ",(n==null?void 0:n.resetText)||a("Reset columns")]}),e.jsx(M.DropdownMenuSeparator,{}),L.map(d=>e.jsx(M.DropdownMenuCheckboxItem,{className:"capitalize",checked:!d.hidden,onCheckedChange:W=>C(d,!W),children:d.name},d.key))]})]}),g&&e.jsx(ee.Actions,{...x,actions:g}),R&&e.jsx(G.FilterWrapper,{...Y,filters:R,params:f,onChange:h,onFilter:d=>{t==null||t({...d,page:1}),h==null||h(d)}})]})]}),e.jsx("div",{className:"flex flex-col overflow-auto border-y",children:O?e.jsx(se.Loader,{}):e.jsx(X,{...K,params:{page:(s==null?void 0:s.page)||1,limit:s==null?void 0:s.limit,...f},rows:p.lodashExports.get(s,H,[]),rowKey:N,selectedItems:z,isStickyHeader:F,columns:L,hasCheckbox:A,hasNumbers:c,onRowClick:E,onSelectedItemsChange:S,onSortOrderChange:({sortField:d,sortOrder:W})=>{t==null||t({...f,sortField:d,sortOrder:W})}})}),v&&e.jsxs("div",{className:"flex shrink-0 flex-col items-center justify-between gap-3 p-4 lg:flex-row",children:[e.jsx("div",{className:"text-sm",children:e.jsx(u.MyLimitSelect,{onLimitChange:d=>t==null?void 0:t({...f,limit:d,page:1}),defaultValue:s==null?void 0:s.limit})}),e.jsx("div",{className:"text-muted-foreground text-sm",children:a("{{selectedCount}} of {{total}} row(s) selected",{selectedCount:z.length,total:(s==null?void 0:s.total)||0})}),e.jsx("div",{children:e.jsx(u.MyPagination,{...U,onPageChange:d=>t==null?void 0:t({...f,page:d}),currentPage:s==null?void 0:s.page,totalPages:s==null?void 0:s.totalPages})})]})]})};exports.DataTable=de;exports.MyTable=X;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|