@zydon/common 2.8.89 → 2.8.91
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/{chunk-4UECQEE3.js → chunk-4OMAWSNC.js} +3 -3
- package/dist/chunk-4OMAWSNC.js.map +1 -0
- package/dist/{chunk-K3T3E52L.js → chunk-7QZTU4E7.js} +3 -3
- package/dist/chunk-7QZTU4E7.js.map +1 -0
- package/dist/components/Filters/index.d.ts +10 -2
- package/dist/components/Filters/index.js +4 -4
- package/dist/components/Filters/index.js.map +1 -1
- package/dist/hooks/useFiltersSearchParams.d.ts +1 -2
- package/dist/hooks/useFiltersSearchParams.js +3 -3
- package/dist/hooks/useFiltersSearchParams.js.map +1 -1
- package/dist/types/period.d.ts +10 -1
- package/dist/types/period.js +1 -1
- package/dist/utils/filters.d.ts +17 -0
- package/dist/utils/filters.js +3 -0
- package/dist/utils/filters.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-4UECQEE3.js.map +0 -1
- package/dist/chunk-K3T3E52L.js.map +0 -1
- package/dist/props-8e304e21.d.ts +0 -17
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var
|
|
1
|
+
var m={["LAST_YEAR"]:"Ano passado",["LAST_MONTH"]:"M\xEAs passado",["LAST_28_DAYS"]:"\xDAltimos 28 dias",["LAST_7_DAYS"]:"\xDAltimos 7 dias",["LAST_WEEK"]:"Semana passada",["YESTERDAY"]:"Ontem",["TODAY"]:"Hoje",["TOMORROW"]:"Amanh\xE3",["NEXT_7_DAYS"]:"Pr\xF3ximos 7 dias",["NEXT_30_DAYS"]:"Pr\xF3ximos 30 dias",["NEXT_90_DAYS"]:"Pr\xF3ximos 90 dias",["NEXT_MONTH"]:"Pr\xF3ximo m\xEAs",["THIS_YEAR"]:"Este ano",["NEXT_YEAR"]:"Pr\xF3ximo ano",["CUSTOM"]:"Personalizado"},Y=["TODAY","YESTERDAY","LAST_7_DAYS","LAST_WEEK","LAST_28_DAYS","LAST_MONTH","LAST_YEAR","CUSTOM"],d=["TODAY","TOMORROW","NEXT_7_DAYS","NEXT_30_DAYS","NEXT_90_DAYS","NEXT_MONTH","THIS_YEAR","NEXT_YEAR","CUSTOM"],u=["LAST_YEAR","LAST_MONTH","LAST_28_DAYS","LAST_7_DAYS","LAST_WEEK","YESTERDAY","TODAY","TOMORROW","NEXT_7_DAYS","NEXT_30_DAYS","NEXT_90_DAYS","NEXT_MONTH","THIS_YEAR","NEXT_YEAR","CUSTOM"],g=a=>{switch(a){case"PAST":return Y;case"FUTURE":return d;default:return u}},O=a=>{switch(a){case"FUTURE":return "NEXT_7_DAYS";case"PAST":default:return "LAST_28_DAYS"}},l=(a,r)=>{if(a==="CUSTOM")return {initialDate:null,finalDate:null};let s=r?new Date(r):new Date,t=new Date(s),e=new Date(s);switch(a){case"TODAY":break;case"YESTERDAY":t.setDate(t.getDate()-1),e.setDate(e.getDate()-1);break;case"TOMORROW":t.setDate(t.getDate()+1),e.setDate(e.getDate()+1);break;case"LAST_7_DAYS":t.setDate(t.getDate()-6);break;case"LAST_28_DAYS":t.setDate(t.getDate()-27);break;case"LAST_WEEK":{e.setDate(e.getDate()-e.getDay()-1),t.setTime(e.getTime()),t.setDate(t.getDate()-6);break}case"LAST_MONTH":t.setMonth(t.getMonth()-1,1),e.setDate(0);break;case"LAST_YEAR":t.setFullYear(t.getFullYear()-1,0,1),e.setFullYear(e.getFullYear()-1,11,31);break;case"NEXT_7_DAYS":e.setDate(e.getDate()+6);break;case"NEXT_30_DAYS":e.setDate(e.getDate()+29);break;case"NEXT_90_DAYS":e.setDate(e.getDate()+89);break;case"NEXT_MONTH":t.setMonth(t.getMonth()+1,1),e.setMonth(e.getMonth()+2,0);break;case"THIS_YEAR":t.setMonth(0,1),e.setMonth(11,31);break;case"NEXT_YEAR":t.setFullYear(t.getFullYear()+1,0,1),e.setFullYear(e.getFullYear()+1,11,31);break}return t.setHours(0,0,0,0),e.setHours(23,59,59,999),{initialDate:t,finalDate:e}},p=a=>{let r=O(a);return {period:r,...l(r)}},M=(a,r,s)=>!a||!r?"CUSTOM":s.find(e=>{if(e==="CUSTOM")return !1;let{initialDate:i,finalDate:n}=l(e);return i&&n&&a.toDateString()===i.toDateString()&&r.toDateString()===n.toDateString()})??"CUSTOM",E={["LAST_YEAR"]:"ano-passado",["LAST_MONTH"]:"mes-passado",["LAST_28_DAYS"]:"ultimos-28-dias",["LAST_7_DAYS"]:"ultimos-7-dias",["LAST_WEEK"]:"semana-passada",["YESTERDAY"]:"ontem",["TODAY"]:"hoje",["TOMORROW"]:"amanha",["NEXT_7_DAYS"]:"proximos-7-dias",["NEXT_30_DAYS"]:"proximos-30-dias",["NEXT_90_DAYS"]:"proximos-90-dias",["NEXT_MONTH"]:"proximo-mes",["THIS_YEAR"]:"este-ano",["NEXT_YEAR"]:"proximo-ano",["CUSTOM"]:"personalizado"},R=Object.fromEntries(Object.entries(E).map(([a,r])=>[r,a])),c={paramKey:"periodo",dataKey:"data"},_=a=>{let r=a.getFullYear(),s=String(a.getMonth()+1).padStart(2,"0"),t=String(a.getDate()).padStart(2,"0");return `${r}-${s}-${t}`},A=a=>{let r=/^(\d{4})-(\d{2})-(\d{2})$/.exec(a);if(!r)return null;let[,s,t,e]=r;return new Date(Number(s),Number(t)-1,Number(e))},N=(a,r={},s)=>{let{paramKey:t,dataKey:e}={...c,...r},i=new URLSearchParams(s??"");return i.set(t,E[a.period]),a.period==="CUSTOM"&&a.initialDate&&a.finalDate?i.set(e,`${_(a.initialDate)}_${_(a.finalDate)}`):i.delete(e),i},P=(a,r={})=>{let{paramKey:s,dataKey:t}={...c,...r},e=a.get(s);if(!e)return null;let i=R[e];if(!i)return null;if(i!=="CUSTOM")return {period:i,...l(i)};let n=a.get(t);if(!n)return {period:"CUSTOM",initialDate:null,finalDate:null};let[D,S]=n.split("_"),o=D?A(D):null,T=S?A(S):null;return o&&o.setHours(0,0,0,0),T&&T.setHours(23,59,59,999),{period:"CUSTOM",initialDate:o,finalDate:T}};
|
|
2
2
|
|
|
3
|
-
export {
|
|
4
|
-
//# sourceMappingURL=chunk-
|
|
3
|
+
export { m as a, g as b, O as c, l as d, p as e, M as f, E as g, c as h, N as i, P as j };
|
|
4
|
+
//# sourceMappingURL=chunk-4OMAWSNC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/filters.ts"],"names":["periodLabels","PAST_PERIODS","FUTURE_PERIODS","FREE_PERIODS","getPeriodsByType","type","getDefaultPeriodForType","getPeriodDates","period","reference","now","initialDate","finalDate","buildDefaultFilter","findMatchingPeriod","startDate","endDate","candidates","periodSlugs","slugToPeriod","key","slug","DEFAULT_FILTER_KEYS","formatDateOnly","date","year","month","day","parseDateOnly","raw","match","serializeFilterToSearchParams","value","keys","baseParams","paramKey","dataKey","params","deserializeFilterFromSearchParams","dataRaw","initialRaw","finalRaw"],"mappings":"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","sourcesContent":["import { FilterUrlKeys, FilterValue, Period, Type } from 'types/period';\n\nexport const periodLabels: Record<Period, string> = {\n [Period.LAST_YEAR]: 'Ano passado',\n [Period.LAST_MONTH]: 'Mês passado',\n [Period.LAST_28_DAYS]: 'Últimos 28 dias',\n [Period.LAST_7_DAYS]: 'Últimos 7 dias',\n [Period.LAST_WEEK]: 'Semana passada',\n [Period.YESTERDAY]: 'Ontem',\n [Period.TODAY]: 'Hoje',\n [Period.TOMORROW]: 'Amanhã',\n [Period.NEXT_7_DAYS]: 'Próximos 7 dias',\n [Period.NEXT_30_DAYS]: 'Próximos 30 dias',\n [Period.NEXT_90_DAYS]: 'Próximos 90 dias',\n [Period.NEXT_MONTH]: 'Próximo mês',\n [Period.THIS_YEAR]: 'Este ano',\n [Period.NEXT_YEAR]: 'Próximo ano',\n [Period.CUSTOM]: 'Personalizado',\n};\n\nconst PAST_PERIODS: Period[] = [\n Period.TODAY,\n Period.YESTERDAY,\n Period.LAST_7_DAYS,\n Period.LAST_WEEK,\n Period.LAST_28_DAYS,\n Period.LAST_MONTH,\n Period.LAST_YEAR,\n Period.CUSTOM,\n];\n\nconst FUTURE_PERIODS: Period[] = [\n Period.TODAY,\n Period.TOMORROW,\n Period.NEXT_7_DAYS,\n Period.NEXT_30_DAYS,\n Period.NEXT_90_DAYS,\n Period.NEXT_MONTH,\n Period.THIS_YEAR,\n Period.NEXT_YEAR,\n Period.CUSTOM,\n];\n\nconst FREE_PERIODS: Period[] = [\n Period.LAST_YEAR,\n Period.LAST_MONTH,\n Period.LAST_28_DAYS,\n Period.LAST_7_DAYS,\n Period.LAST_WEEK,\n Period.YESTERDAY,\n Period.TODAY,\n Period.TOMORROW,\n Period.NEXT_7_DAYS,\n Period.NEXT_30_DAYS,\n Period.NEXT_90_DAYS,\n Period.NEXT_MONTH,\n Period.THIS_YEAR,\n Period.NEXT_YEAR,\n Period.CUSTOM,\n];\n\nexport const getPeriodsByType = (type: Type): Period[] => {\n switch (type) {\n case Type.PAST:\n return PAST_PERIODS;\n case Type.FUTURE:\n return FUTURE_PERIODS;\n default:\n return FREE_PERIODS;\n }\n};\n\nexport const getDefaultPeriodForType = (type: Type): Period => {\n switch (type) {\n case Type.FUTURE:\n return Period.NEXT_7_DAYS;\n case Type.PAST:\n default:\n return Period.LAST_28_DAYS;\n }\n};\n\nexport const getPeriodDates = (\n period: Period,\n reference?: Date,\n): { initialDate: Date | null; finalDate: Date | null } => {\n if (period === Period.CUSTOM) {\n return { initialDate: null, finalDate: null };\n }\n\n const now = reference ? new Date(reference) : new Date();\n const initialDate = new Date(now);\n const finalDate = new Date(now);\n\n switch (period) {\n case Period.TODAY:\n break;\n\n case Period.YESTERDAY:\n initialDate.setDate(initialDate.getDate() - 1);\n finalDate.setDate(finalDate.getDate() - 1);\n break;\n\n case Period.TOMORROW:\n initialDate.setDate(initialDate.getDate() + 1);\n finalDate.setDate(finalDate.getDate() + 1);\n break;\n\n case Period.LAST_7_DAYS:\n initialDate.setDate(initialDate.getDate() - 6);\n break;\n\n case Period.LAST_28_DAYS:\n initialDate.setDate(initialDate.getDate() - 27);\n break;\n\n case Period.LAST_WEEK: {\n finalDate.setDate(finalDate.getDate() - finalDate.getDay() - 1);\n initialDate.setTime(finalDate.getTime());\n initialDate.setDate(initialDate.getDate() - 6);\n break;\n }\n\n case Period.LAST_MONTH:\n initialDate.setMonth(initialDate.getMonth() - 1, 1);\n finalDate.setDate(0);\n break;\n\n case Period.LAST_YEAR:\n initialDate.setFullYear(initialDate.getFullYear() - 1, 0, 1);\n finalDate.setFullYear(finalDate.getFullYear() - 1, 11, 31);\n break;\n\n case Period.NEXT_7_DAYS:\n finalDate.setDate(finalDate.getDate() + 6);\n break;\n\n case Period.NEXT_30_DAYS:\n finalDate.setDate(finalDate.getDate() + 29);\n break;\n\n case Period.NEXT_90_DAYS:\n finalDate.setDate(finalDate.getDate() + 89);\n break;\n\n case Period.NEXT_MONTH:\n initialDate.setMonth(initialDate.getMonth() + 1, 1);\n finalDate.setMonth(finalDate.getMonth() + 2, 0);\n break;\n\n case Period.THIS_YEAR:\n initialDate.setMonth(0, 1);\n finalDate.setMonth(11, 31);\n break;\n\n case Period.NEXT_YEAR:\n initialDate.setFullYear(initialDate.getFullYear() + 1, 0, 1);\n finalDate.setFullYear(finalDate.getFullYear() + 1, 11, 31);\n break;\n }\n\n initialDate.setHours(0, 0, 0, 0);\n finalDate.setHours(23, 59, 59, 999);\n\n return { initialDate, finalDate };\n};\n\nexport const buildDefaultFilter = (type: Type): FilterValue => {\n const period = getDefaultPeriodForType(type);\n return { period, ...getPeriodDates(period) };\n};\n\nexport const findMatchingPeriod = (\n startDate: Date | null,\n endDate: Date | null,\n candidates: Period[],\n): Period => {\n if (!startDate || !endDate) return Period.CUSTOM;\n\n const match = candidates.find(period => {\n if (period === Period.CUSTOM) return false;\n\n const { initialDate, finalDate } = getPeriodDates(period);\n\n return (\n initialDate &&\n finalDate &&\n startDate.toDateString() === initialDate.toDateString() &&\n endDate.toDateString() === finalDate.toDateString()\n );\n });\n\n return match ?? Period.CUSTOM;\n};\n\nexport const periodSlugs: Record<Period, string> = {\n [Period.LAST_YEAR]: 'ano-passado',\n [Period.LAST_MONTH]: 'mes-passado',\n [Period.LAST_28_DAYS]: 'ultimos-28-dias',\n [Period.LAST_7_DAYS]: 'ultimos-7-dias',\n [Period.LAST_WEEK]: 'semana-passada',\n [Period.YESTERDAY]: 'ontem',\n [Period.TODAY]: 'hoje',\n [Period.TOMORROW]: 'amanha',\n [Period.NEXT_7_DAYS]: 'proximos-7-dias',\n [Period.NEXT_30_DAYS]: 'proximos-30-dias',\n [Period.NEXT_90_DAYS]: 'proximos-90-dias',\n [Period.NEXT_MONTH]: 'proximo-mes',\n [Period.THIS_YEAR]: 'este-ano',\n [Period.NEXT_YEAR]: 'proximo-ano',\n [Period.CUSTOM]: 'personalizado',\n};\n\nconst slugToPeriod: Record<string, Period> = Object.fromEntries(\n (Object.entries(periodSlugs) as [Period, string][]).map(([key, slug]) => [\n slug,\n key,\n ]),\n);\n\nexport const DEFAULT_FILTER_KEYS: Required<FilterUrlKeys> = {\n paramKey: 'periodo',\n dataKey: 'data',\n};\n\nconst formatDateOnly = (date: Date): string => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n\n return `${year}-${month}-${day}`;\n};\n\nconst parseDateOnly = (raw: string): Date | null => {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(raw);\n if (!match) return null;\n\n const [, year, month, day] = match;\n\n return new Date(Number(year), Number(month) - 1, Number(day));\n};\n\nexport const serializeFilterToSearchParams = (\n value: FilterValue,\n keys: FilterUrlKeys = {},\n baseParams?: URLSearchParams,\n): URLSearchParams => {\n const { paramKey, dataKey } = { ...DEFAULT_FILTER_KEYS, ...keys };\n const params = new URLSearchParams(baseParams ?? '');\n\n params.set(paramKey, periodSlugs[value.period]);\n\n if (\n value.period === Period.CUSTOM &&\n value.initialDate &&\n value.finalDate\n ) {\n params.set(\n dataKey,\n `${formatDateOnly(value.initialDate)}_${formatDateOnly(value.finalDate)}`,\n );\n } else {\n params.delete(dataKey);\n }\n\n return params;\n};\n\nexport const deserializeFilterFromSearchParams = (\n params: URLSearchParams,\n keys: FilterUrlKeys = {},\n): FilterValue | null => {\n const { paramKey, dataKey } = { ...DEFAULT_FILTER_KEYS, ...keys };\n const slug = params.get(paramKey);\n if (!slug) return null;\n\n const period = slugToPeriod[slug];\n if (!period) return null;\n\n if (period !== Period.CUSTOM) {\n return { period, ...getPeriodDates(period) };\n }\n\n const dataRaw = params.get(dataKey);\n if (!dataRaw) {\n return { period: Period.CUSTOM, initialDate: null, finalDate: null };\n }\n\n const [initialRaw, finalRaw] = dataRaw.split('_');\n const initialDate = initialRaw ? parseDateOnly(initialRaw) : null;\n const finalDate = finalRaw ? parseDateOnly(finalRaw) : null;\n\n if (initialDate) initialDate.setHours(0, 0, 0, 0);\n if (finalDate) finalDate.setHours(23, 59, 59, 999);\n\n return { period: Period.CUSTOM, initialDate, finalDate };\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var _=(T=>(T.LAST_YEAR="LAST_YEAR",T.LAST_MONTH="LAST_MONTH",T.LAST_28_DAYS="LAST_28_DAYS",T.LAST_7_DAYS="LAST_7_DAYS",T.LAST_WEEK="LAST_WEEK",T.YESTERDAY="YESTERDAY",T.TODAY="TODAY",T.TOMORROW="TOMORROW",T.NEXT_7_DAYS="NEXT_7_DAYS",T.NEXT_30_DAYS="NEXT_30_DAYS",T.NEXT_90_DAYS="NEXT_90_DAYS",T.NEXT_MONTH="NEXT_MONTH",T.THIS_YEAR="THIS_YEAR",T.NEXT_YEAR="NEXT_YEAR",T.CUSTOM="CUSTOM",T))(_||{});
|
|
1
|
+
var _=(T=>(T.LAST_YEAR="LAST_YEAR",T.LAST_MONTH="LAST_MONTH",T.LAST_28_DAYS="LAST_28_DAYS",T.LAST_7_DAYS="LAST_7_DAYS",T.LAST_WEEK="LAST_WEEK",T.YESTERDAY="YESTERDAY",T.TODAY="TODAY",T.TOMORROW="TOMORROW",T.NEXT_7_DAYS="NEXT_7_DAYS",T.NEXT_30_DAYS="NEXT_30_DAYS",T.NEXT_90_DAYS="NEXT_90_DAYS",T.NEXT_MONTH="NEXT_MONTH",T.THIS_YEAR="THIS_YEAR",T.NEXT_YEAR="NEXT_YEAR",T.CUSTOM="CUSTOM",T))(_||{}),E=(A=>(A.FREE="FREE",A.PAST="PAST",A.FUTURE="FUTURE",A))(E||{});
|
|
2
2
|
|
|
3
|
-
export { _ as a };
|
|
4
|
-
//# sourceMappingURL=chunk-
|
|
3
|
+
export { _ as a, E as b };
|
|
4
|
+
//# sourceMappingURL=chunk-7QZTU4E7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types/period.ts"],"names":["Period","Type"],"mappings":"AAAO,IAAKA,OACVA,EAAA,UAAY,YACZA,EAAA,WAAa,aACbA,EAAA,aAAe,eACfA,EAAA,YAAc,cACdA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,MAAQ,QACRA,EAAA,SAAW,WACXA,EAAA,YAAc,cACdA,EAAA,aAAe,eACfA,EAAA,aAAe,eACfA,EAAA,WAAa,aACbA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,OAAS,SAfCA,OAAA,IAkBAC,OACVA,EAAA,KAAO,OACPA,EAAA,KAAO,OACPA,EAAA,OAAS,SAHCA,OAAA","sourcesContent":["export enum Period {\n LAST_YEAR = 'LAST_YEAR',\n LAST_MONTH = 'LAST_MONTH',\n LAST_28_DAYS = 'LAST_28_DAYS',\n LAST_7_DAYS = 'LAST_7_DAYS',\n LAST_WEEK = 'LAST_WEEK',\n YESTERDAY = 'YESTERDAY',\n TODAY = 'TODAY',\n TOMORROW = 'TOMORROW',\n NEXT_7_DAYS = 'NEXT_7_DAYS',\n NEXT_30_DAYS = 'NEXT_30_DAYS',\n NEXT_90_DAYS = 'NEXT_90_DAYS',\n NEXT_MONTH = 'NEXT_MONTH',\n THIS_YEAR = 'THIS_YEAR',\n NEXT_YEAR = 'NEXT_YEAR',\n CUSTOM = 'CUSTOM',\n}\n\nexport enum Type {\n FREE = 'FREE',\n PAST = 'PAST',\n FUTURE = 'FUTURE',\n}\n\nexport interface FilterValue {\n period: Period;\n initialDate: Date | null;\n finalDate: Date | null;\n}\n\nexport interface FilterUrlKeys {\n paramKey?: string;\n dataKey?: string;\n}\n"]}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { Type, FilterValue } from '../../types/period.js';
|
|
3
|
+
|
|
4
|
+
interface FiltersProps {
|
|
5
|
+
type?: Type;
|
|
6
|
+
value: FilterValue;
|
|
7
|
+
onChange: (value: FilterValue) => void;
|
|
8
|
+
paramKey?: string;
|
|
9
|
+
dataKey?: string;
|
|
10
|
+
label?: string;
|
|
11
|
+
}
|
|
4
12
|
|
|
5
13
|
declare const Filters: ({ type, value, onChange, paramKey, dataKey, label, }: FiltersProps) => react_jsx_runtime.JSX.Element;
|
|
6
14
|
|
|
@@ -9,10 +9,10 @@ import { a as a$6 } from '../../chunk-2GTD4JW2.js';
|
|
|
9
9
|
import '../../chunk-PBLSVXV5.js';
|
|
10
10
|
import { a as a$8 } from '../../chunk-LQRRMVFN.js';
|
|
11
11
|
import { b } from '../../chunk-2ZJUGM2S.js';
|
|
12
|
-
import { b as b$1, a as a$1,
|
|
13
|
-
import '../../chunk-
|
|
12
|
+
import { b as b$1, a as a$1, d, f, j as j$1, i } from '../../chunk-4OMAWSNC.js';
|
|
13
|
+
import '../../chunk-7QZTU4E7.js';
|
|
14
14
|
import { memo, useState, useMemo, useEffect, useCallback, useRef } from 'react';
|
|
15
|
-
import
|
|
15
|
+
import p from '@mui/material/Stack';
|
|
16
16
|
import { useForm } from 'react-hook-form';
|
|
17
17
|
import de from '@mui/material/Button';
|
|
18
18
|
import pe from '@mui/material/Checkbox';
|
|
@@ -21,7 +21,7 @@ import G from '@mui/material/Typography';
|
|
|
21
21
|
import { styled } from '@mui/material/styles';
|
|
22
22
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
23
23
|
|
|
24
|
-
var N=styled(a)(({theme:o})=>({marginTop:10,"& .MuiPopover-paper":{width:540,padding:o.spacing(3),backgroundColor:o.palette.background.paper,borderRadius:o.spacing(1),backgroundImage:"none",[o.breakpoints.down("sm")]:{width:"90vw",maxWidth:"calc(100vw - 32px)",padding:o.spacing(2)}}})),j=styled(c)(({theme:o})=>({[o.breakpoints.up("sm")]:{"&.MuiDateRangeCalendar-root":{margin:-24}},"& .MuiPickersCalendarHeader-label":{textTransform:"capitalize"},[o.breakpoints.down(400)]:{"& .MuiPickersCalendarHeader-root":{padding:o.spacing(0,7)},"& .MuiDayCalendar-header, & .MuiDayCalendar-weekContainer":{gap:0},"& .MuiPickersDay-root, & .MuiDateRangePickerDay-root":{width:32,height:32},"& .MuiDayCalendar-weekDayLabel":{width:32,height:32},"& .MuiDayCalendar-slideTransition":{minHeight:210}},[o.breakpoints.down(350)]:{"& .MuiPickersDay-root, & .MuiDateRangePickerDay-root":{width:28,height:28},"& .MuiDayCalendar-weekDayLabel":{width:28,height:28},"& .MuiDayCalendar-slideTransition":{minHeight:196}}}));var ue=["D","S","T","Q","Q","S","S"],fe=({open:o,onClose:
|
|
24
|
+
var N=styled(a)(({theme:o})=>({marginTop:10,"& .MuiPopover-paper":{width:540,padding:o.spacing(3),backgroundColor:o.palette.background.paper,borderRadius:o.spacing(1),backgroundImage:"none",[o.breakpoints.down("sm")]:{width:"90vw",maxWidth:"calc(100vw - 32px)",padding:o.spacing(2)}}})),j=styled(c)(({theme:o})=>({[o.breakpoints.up("sm")]:{"&.MuiDateRangeCalendar-root":{margin:-24}},"& .MuiPickersCalendarHeader-label":{textTransform:"capitalize"},[o.breakpoints.down(400)]:{"& .MuiPickersCalendarHeader-root":{padding:o.spacing(0,7)},"& .MuiDayCalendar-header, & .MuiDayCalendar-weekContainer":{gap:0},"& .MuiPickersDay-root, & .MuiDateRangePickerDay-root":{width:32,height:32},"& .MuiDayCalendar-weekDayLabel":{width:32,height:32},"& .MuiDayCalendar-slideTransition":{minHeight:210}},[o.breakpoints.down(350)]:{"& .MuiPickersDay-root, & .MuiDateRangePickerDay-root":{width:28,height:28},"& .MuiDayCalendar-weekDayLabel":{width:28,height:28},"& .MuiDayCalendar-slideTransition":{minHeight:196}}}));var ue=["D","S","T","Q","Q","S","S"],fe=({open:o,onClose:u,type:l,value:i,onApply:m})=>{let y=b("down","sm"),f$1=useForm({defaultValues:i}),{handleSubmit:C,getValues:D,setValue:t,watch:s,reset:S}=f$1,[w,d$1]=useState([i.initialDate,i.finalDate]),K=s("initialDate"),ee=s("finalDate"),F=s("period"),oe=!K||!ee,te=l==="PAST",ae=l==="FUTURE",c=useMemo(()=>b$1(l),[l]),M=useMemo(()=>c.map(e=>({label:a$1[e],value:e})),[c]);useEffect(()=>{o&&S(i);},[o,S,i]),useEffect(()=>{d$1([i.initialDate,i.finalDate]);},[i.finalDate,i.initialDate]);let I=useCallback(e=>{let{initialDate:r,finalDate:n}=d(e);d$1([r,n]),t("period",e),t("initialDate",r),t("finalDate",n);},[t]),ie=useCallback(e=>{if(d$1(e),e[0]&&t("initialDate",e[0]),e[1]&&t("finalDate",e[1]),e[0]&&e[1]){let r=f(e[0],e[1],c);t("period",r);}},[c,t]),re=useCallback(e=>{t("initialDate",e);let r=D("finalDate");if(e&&r){let n=[e,r];d$1(n);let x=f(n[0],n[1],c);t("period",x);}},[c,D,t]),ne=useCallback(e=>{t("finalDate",e);let r=D("initialDate");if(r&&e){let n=[r,e];d$1(n);let x=f(n[0],n[1],c);t("period",x);}},[c,D,t]),le=useCallback(e=>{m(e),u();},[m,u]);return jsx(N,{open:o,onClose:u,arrow:y?"top-center":"top-left",disabledArrow:!0,children:jsxs(a$2,{methods:f$1,onSubmit:C(le),gap:2,children:[jsx(G,{variant:"overline",color:"text.disabled",children:"Defina o per\xEDodo"}),jsxs(p,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:2,children:[jsx(a$3,{name:"initialDate",label:"In\xEDcio",onChange:re,slotProps:{textField:{size:"small"}}}),jsx(a$3,{name:"finalDate",label:"T\xE9rmino",onChange:ne,slotProps:{textField:{size:"small"}}})]}),jsx(p,{display:{xs:"block",sm:"none"},children:jsx(a$4,{name:"period",options:M,onChange:e=>e&&I(e),value:F,size:"small",disableClearable:!0,fullWidth:!0})}),jsxs(p,{direction:{xs:"column",sm:"row"},alignItems:"center",justifyContent:{xs:"center",sm:"space-between"},gap:{xs:2,sm:3},children:[jsx(p,{overflow:"hidden",children:jsx(a$5,{fillContent:!0,sx:{display:{xs:"none",sm:"flex"},maxHeight:360},children:M.map(e=>jsxs(p,{direction:"row",alignItems:"center",gap:.5,sx:{m:.4},children:[jsx(pe,{id:`period_${e.value}`,name:`period_${e.value}`,icon:jsx(a$6,{icon:"CHECKMARK_CIRCLE_ROUNDED",color:"primary.main"}),checkedIcon:jsx(a$6,{icon:"CHECKMARK_CIRCLE",color:"primary.main"}),checked:F===e.value,onChange:()=>I(e.value)}),jsx(G,{component:"label",htmlFor:`period_${e.value}`,mt:.2,variant:"body2",color:"text.primary",sx:{cursor:"pointer",whiteSpace:"nowrap"},children:e.label})]},e.value))})}),jsx(q,{orientation:"vertical",flexItem:!0,sx:{display:{xs:"none",sm:"block"},mx:3}}),jsx(p,{width:{xs:"100%",sm:"auto"},alignItems:"center",justifyContent:"center",children:jsx(j,{calendars:1,value:w,onChange:ie,disableFuture:te,disablePast:ae,showDaysOutsideCurrentMonth:!0,fixedWeekNumber:6,dayOfWeekFormatter:e=>ue[e.day()],sx:{"& .MuiDateRangeCalendar-root":{width:{xs:"100%",sm:"auto"}}}})})]}),jsx(q,{flexItem:!0}),jsxs(p,{direction:"row",alignItems:"center",justifyContent:"flex-end",gap:1,children:[jsx(de,{variant:"outlined",color:"inherit",onClick:u,children:"Cancelar"}),jsx(a$7,{actionType:"SAVE",variant:"contained",color:"primary",type:"submit",disabled:oe,children:"Aplicar"})]})]})})},J=memo(fe);var X=styled(de)(({theme:o})=>({color:o.palette.text.primary,borderColor:o.palette.divider,"&:hover":{backgroundColor:"transparent"},[o.breakpoints.down("md")]:{"&.filters-button":{minWidth:"auto",padding:"6px 8px",fontSize:0,overflow:"hidden","& .MuiButton-startIcon":{margin:0,fontSize:"1rem"}}}}));var Z=typeof window>"u",ke=({type:o="FREE",value:u,onChange:l,paramKey:i$1,dataKey:m,label:y="Per\xEDodo"})=>{let f=a$8(),C=useRef(!1);useEffect(()=>{if(Z||!i$1||C.current)return;C.current=!0;let t=new URLSearchParams(window.location.search),s=j$1(t,{paramKey:i$1,dataKey:m});s&&l(s);},[m,l,i$1]);let D=useCallback(t=>{if(l(t),Z||!i$1)return;let s=new URLSearchParams(window.location.search),w=i(t,{paramKey:i$1,dataKey:m},s).toString(),d=`${window.location.pathname}${w?`?${w}`:""}${window.location.hash}`;window.history.replaceState(window.history.state,"",d);},[m,l,i$1]);return jsxs(Fragment,{children:[jsx(p,{alignItems:"flex-start",children:jsx(X,{variant:"outlined",endIcon:jsx(a$6,{icon:"ARROW_DOWN_SIMPLE"}),size:"small",onClick:f.onOpen,children:y})}),jsx(J,{open:f.open,onClose:f.onClose,type:o,value:u,onApply:D})]})},to=ke;
|
|
25
25
|
|
|
26
26
|
export { to as default };
|
|
27
27
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/Filters/index.tsx","../../../src/components/Filters/FilterPopover/index.tsx","../../../src/components/Filters/FilterPopover/styles.ts","../../../src/components/Filters/styles.ts"],"names":["useCallback","useEffect","useRef","Stack","memo","useMemo","useState","useForm","Button","Checkbox","Divider","Typography","styled","MenuPopover","MenuPopover_default","theme","ResponsiveDateRangeCalendar","DateRangeCalendar_default","jsx","jsxs","DAYS_OF_WEEK","FilterPopover","open","onClose","type","value","onApply","isMobile","useResponsive_default","methods","handleSubmit","getValues","setValue","watch","reset","dateRange","setDateRange","watchedInitialDate","watchedFinalDate","watchedPeriod","isSubmitDisabled","disableFuture","disablePast","availablePeriods","getPeriodsByType","periodOptions","period","periodLabels","onPeriodChange","next","initialDate","finalDate","getPeriodDates","handleRangeChange","newRange","matching","findMatchingPeriod","handleInitialDateChange","date","handleFinalDateChange","onSubmit","formData","Form_default","DateField_default","Autocomplete_default","Scrollbar_default","option","Icon_default","day","ActionButton_default","FilterPopover_default","MUIButton","Fragment","IS_SERVER","Filters","onChange","paramKey","dataKey","label","popover","usePopover_default","hydratedRef","params","fromUrl","deserializeFilterFromSearchParams","handleApply","current","search","serializeFilterToSearchParams","url","Filters_default"],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\nimport Stack from '@mui/material/Stack';\n\nimport Icon from 'components/Icon';\nimport usePopover from 'hooks/usePopover';\nimport { Icon as IconEnum } from 'types/icon';\nimport { FilterValue } from 'types/period';\n\nimport FilterPopover from './FilterPopover';\nimport { FiltersProps, Type } from './props';\nimport { Button } from './styles';\nimport {\n deserializeFilterFromSearchParams,\n serializeFilterToSearchParams,\n} from './utils';\n\nconst IS_SERVER = typeof window === 'undefined';\n\nconst Filters = ({\n type = Type.FREE,\n value,\n onChange,\n paramKey,\n dataKey,\n label = 'Período',\n}: FiltersProps) => {\n const popover = usePopover();\n\n const hydratedRef = useRef(false);\n\n useEffect(() => {\n if (IS_SERVER || !paramKey || hydratedRef.current) return;\n\n hydratedRef.current = true;\n\n const params = new URLSearchParams(window.location.search);\n const fromUrl = deserializeFilterFromSearchParams(params, {\n paramKey,\n dataKey,\n });\n\n if (fromUrl) onChange(fromUrl);\n }, [dataKey, onChange, paramKey]);\n\n const handleApply = useCallback(\n (next: FilterValue) => {\n onChange(next);\n\n if (IS_SERVER || !paramKey) return;\n\n const current = new URLSearchParams(window.location.search);\n const params = serializeFilterToSearchParams(\n next,\n { paramKey, dataKey },\n current,\n );\n const search = params.toString();\n const url = `${window.location.pathname}${\n search ? `?${search}` : ''\n }${window.location.hash}`;\n\n window.history.replaceState(window.history.state, '', url);\n },\n [dataKey, onChange, paramKey],\n );\n\n return (\n <>\n <Stack alignItems=\"flex-start\">\n <Button\n variant=\"outlined\"\n endIcon={<Icon icon={IconEnum.ARROW_DOWN_SIMPLE} />}\n size=\"small\"\n onClick={popover.onOpen}\n >\n {label}\n </Button>\n </Stack>\n\n <FilterPopover\n open={popover.open}\n onClose={popover.onClose}\n type={type}\n value={value}\n onApply={handleApply}\n />\n </>\n );\n};\n\nexport default Filters;\n","import { memo, useCallback, useEffect, useMemo, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport Button from '@mui/material/Button';\nimport Checkbox from '@mui/material/Checkbox';\nimport Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport ActionButton from 'components/ActionButton';\nimport Autocomplete from 'components/Autocomplete';\nimport DateField from 'components/form/DateField';\nimport Form from 'components/form/Form';\nimport Icon from 'components/Icon';\nimport Scrollbar from 'components/Scrollbar';\nimport useResponsive from 'hooks/useResponsive';\nimport { Icon as IconEnum } from 'types/icon';\nimport { FilterValue, Period } from 'types/period';\n\nimport { Type } from '../props';\nimport {\n findMatchingPeriod,\n getPeriodDates,\n getPeriodsByType,\n periodLabels,\n} from '../utils';\n\nimport { FilterPopoverProps } from './props';\nimport { MenuPopover, ResponsiveDateRangeCalendar } from './styles';\n\nconst DAYS_OF_WEEK = ['D', 'S', 'T', 'Q', 'Q', 'S', 'S'];\n\nconst FilterPopover = ({\n open,\n onClose,\n type,\n value,\n onApply,\n}: FilterPopoverProps) => {\n const isMobile = useResponsive('down', 'sm');\n\n const methods = useForm<FilterValue>({\n defaultValues: value,\n });\n const { handleSubmit, getValues, setValue, watch, reset } = methods;\n\n const [dateRange, setDateRange] = useState<[Date | null, Date | null]>([\n value.initialDate,\n value.finalDate,\n ]);\n\n const watchedInitialDate = watch('initialDate');\n const watchedFinalDate = watch('finalDate');\n const watchedPeriod = watch('period');\n\n const isSubmitDisabled = !watchedInitialDate || !watchedFinalDate;\n const disableFuture = type === Type.PAST;\n const disablePast = type === Type.FUTURE;\n\n const availablePeriods = useMemo(() => getPeriodsByType(type), [type]);\n\n const periodOptions = useMemo(\n () =>\n availablePeriods.map(period => ({\n label: periodLabels[period],\n value: period,\n })),\n [availablePeriods],\n );\n\n useEffect(() => {\n if (open) reset(value);\n }, [open, reset, value]);\n\n useEffect(() => {\n setDateRange([value.initialDate, value.finalDate]);\n }, [value.finalDate, value.initialDate]);\n\n const onPeriodChange = useCallback(\n (next: Period) => {\n const { initialDate, finalDate } = getPeriodDates(next);\n\n setDateRange([initialDate, finalDate]);\n\n setValue('period', next);\n setValue('initialDate', initialDate);\n setValue('finalDate', finalDate);\n },\n [setValue],\n );\n\n const handleRangeChange = useCallback(\n (newRange: [Date | null, Date | null]) => {\n setDateRange(newRange);\n\n if (newRange[0]) setValue('initialDate', newRange[0]);\n if (newRange[1]) setValue('finalDate', newRange[1]);\n\n if (newRange[0] && newRange[1]) {\n const matching = findMatchingPeriod(\n newRange[0],\n newRange[1],\n availablePeriods,\n );\n\n setValue('period', matching);\n }\n },\n [availablePeriods, setValue],\n );\n\n const handleInitialDateChange = useCallback(\n (date: Date) => {\n setValue('initialDate', date);\n\n const finalDate = getValues('finalDate');\n\n if (date && finalDate) {\n const newRange: [Date, Date] = [date, finalDate];\n\n setDateRange(newRange);\n\n const matching = findMatchingPeriod(\n newRange[0],\n newRange[1],\n availablePeriods,\n );\n\n setValue('period', matching);\n }\n },\n [availablePeriods, getValues, setValue],\n );\n\n const handleFinalDateChange = useCallback(\n (date: Date) => {\n setValue('finalDate', date);\n\n const initialDate = getValues('initialDate');\n\n if (initialDate && date) {\n const newRange: [Date, Date] = [initialDate, date];\n\n setDateRange(newRange);\n\n const matching = findMatchingPeriod(\n newRange[0],\n newRange[1],\n availablePeriods,\n );\n\n setValue('period', matching);\n }\n },\n [availablePeriods, getValues, setValue],\n );\n\n const onSubmit = useCallback(\n (formData: FilterValue) => {\n onApply(formData);\n onClose();\n },\n [onApply, onClose],\n );\n\n return (\n <MenuPopover\n open={open}\n onClose={onClose}\n arrow={isMobile ? 'top-center' : 'top-left'}\n disabledArrow\n >\n <Form methods={methods} onSubmit={handleSubmit(onSubmit)} gap={2}>\n <Typography variant=\"overline\" color=\"text.disabled\">\n Defina o período\n </Typography>\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={2}\n >\n <DateField\n name=\"initialDate\"\n label=\"Início\"\n onChange={handleInitialDateChange}\n slotProps={{ textField: { size: 'small' } }}\n />\n\n <DateField\n name=\"finalDate\"\n label=\"Término\"\n onChange={handleFinalDateChange}\n slotProps={{ textField: { size: 'small' } }}\n />\n </Stack>\n\n <Stack display={{ xs: 'block', sm: 'none' }}>\n <Autocomplete\n name=\"period\"\n options={periodOptions}\n onChange={next => next && onPeriodChange(next as Period)}\n value={watchedPeriod}\n size=\"small\"\n disableClearable\n fullWidth\n />\n </Stack>\n\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n alignItems=\"center\"\n justifyContent={{ xs: 'center', sm: 'space-between' }}\n gap={{ xs: 2, sm: 3 }}\n overflow=\"hidden\"\n >\n <Scrollbar\n fillContent\n sx={{\n display: { xs: 'none', sm: 'block' },\n maxHeight: 360,\n }}\n >\n {periodOptions.map(option => (\n <Stack\n key={option.value}\n direction=\"row\"\n alignItems=\"center\"\n gap={0.5}\n sx={{ m: 0.4 }}\n >\n <Checkbox\n id={`period_${option.value}`}\n name={`period_${option.value}`}\n icon={\n <Icon\n icon={IconEnum.CHECKMARK_CIRCLE_ROUNDED}\n color=\"primary.main\"\n />\n }\n checkedIcon={\n <Icon\n icon={IconEnum.CHECKMARK_CIRCLE}\n color=\"primary.main\"\n />\n }\n checked={watchedPeriod === option.value}\n onChange={() => onPeriodChange(option.value)}\n />\n\n <Typography\n component=\"label\"\n htmlFor={`period_${option.value}`}\n mt={0.2}\n variant=\"body2\"\n color=\"text.primary\"\n sx={{ cursor: 'pointer', whiteSpace: 'nowrap' }}\n >\n {option.label}\n </Typography>\n </Stack>\n ))}\n </Scrollbar>\n\n <Divider\n orientation=\"vertical\"\n flexItem\n sx={{ display: { xs: 'none', sm: 'block' } }}\n />\n\n <Stack\n width={{ xs: '100%', sm: 'auto' }}\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n <ResponsiveDateRangeCalendar\n calendars={1}\n value={dateRange}\n onChange={handleRangeChange}\n disableFuture={disableFuture}\n disablePast={disablePast}\n showDaysOutsideCurrentMonth\n fixedWeekNumber={6}\n dayOfWeekFormatter={day => DAYS_OF_WEEK[day.day()]}\n sx={{\n '& .MuiDateRangeCalendar-root': {\n width: { xs: '100%', sm: 'auto' },\n },\n }}\n />\n </Stack>\n </Stack>\n\n <Divider flexItem />\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"flex-end\"\n gap={1}\n >\n <Button variant=\"outlined\" color=\"inherit\" onClick={onClose}>\n Cancelar\n </Button>\n\n <ActionButton\n actionType=\"SAVE\"\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={isSubmitDisabled}\n >\n Aplicar\n </ActionButton>\n </Stack>\n </Form>\n </MenuPopover>\n );\n};\n\nexport default memo(FilterPopover);\n","import { styled } from '@mui/material/styles';\n\nimport CommonDateRangeCalendar from 'components/DateRangeCalendar';\nimport CommonMenuPopover from 'components/MenuPopover';\n\nexport const MenuPopover = styled(CommonMenuPopover)(({ theme }) => ({\n marginTop: 10,\n\n '& .MuiPopover-paper': {\n width: 540,\n padding: theme.spacing(3),\n backgroundColor: theme.palette.background.paper,\n borderRadius: theme.spacing(1),\n backgroundImage: 'none',\n\n [theme.breakpoints.down('sm')]: {\n width: '90vw',\n maxWidth: 'calc(100vw - 32px)',\n padding: theme.spacing(2),\n },\n },\n}));\n\nexport const ResponsiveDateRangeCalendar = styled(CommonDateRangeCalendar)(\n ({ theme }) => ({\n [theme.breakpoints.up('sm')]: {\n '&.MuiDateRangeCalendar-root': {\n margin: -24,\n },\n },\n\n '& .MuiPickersCalendarHeader-label': {\n textTransform: 'capitalize',\n },\n\n [theme.breakpoints.down(400)]: {\n '& .MuiPickersCalendarHeader-root': {\n padding: theme.spacing(0, 7),\n },\n\n '& .MuiDayCalendar-header, & .MuiDayCalendar-weekContainer': {\n gap: 0,\n },\n\n '& .MuiPickersDay-root, & .MuiDateRangePickerDay-root': {\n width: 32,\n height: 32,\n },\n\n '& .MuiDayCalendar-weekDayLabel': {\n width: 32,\n height: 32,\n },\n\n '& .MuiDayCalendar-slideTransition': {\n minHeight: 210,\n },\n },\n\n [theme.breakpoints.down(350)]: {\n '& .MuiPickersDay-root, & .MuiDateRangePickerDay-root': {\n width: 28,\n height: 28,\n },\n\n '& .MuiDayCalendar-weekDayLabel': {\n width: 28,\n height: 28,\n },\n\n '& .MuiDayCalendar-slideTransition': {\n minHeight: 196,\n },\n },\n }),\n);\n","import MUIButton from '@mui/material/Button';\nimport { styled } from '@mui/material/styles';\n\nexport const Button = styled(MUIButton)(({ theme }) => ({\n color: theme.palette.text.primary,\n borderColor: theme.palette.divider,\n\n '&:hover': {\n backgroundColor: 'transparent',\n },\n\n [theme.breakpoints.down('md')]: {\n '&.filters-button': {\n minWidth: 'auto',\n padding: '6px 8px',\n fontSize: 0,\n overflow: 'hidden',\n\n '& .MuiButton-startIcon': {\n margin: 0,\n fontSize: '1rem',\n },\n },\n },\n}));\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Filters/index.tsx","../../../src/components/Filters/FilterPopover/index.tsx","../../../src/components/Filters/FilterPopover/styles.ts","../../../src/components/Filters/styles.ts"],"names":["useCallback","useEffect","useRef","Stack","memo","useMemo","useState","useForm","Button","Checkbox","Divider","Typography","styled","MenuPopover","MenuPopover_default","theme","ResponsiveDateRangeCalendar","DateRangeCalendar_default","jsx","jsxs","DAYS_OF_WEEK","FilterPopover","open","onClose","type","value","onApply","isMobile","useResponsive_default","methods","handleSubmit","getValues","setValue","watch","reset","dateRange","setDateRange","watchedInitialDate","watchedFinalDate","watchedPeriod","isSubmitDisabled","disableFuture","disablePast","availablePeriods","getPeriodsByType","periodOptions","period","periodLabels","onPeriodChange","next","initialDate","finalDate","getPeriodDates","handleRangeChange","newRange","matching","findMatchingPeriod","handleInitialDateChange","date","handleFinalDateChange","onSubmit","formData","Form_default","DateField_default","Autocomplete_default","Scrollbar_default","option","Icon_default","day","ActionButton_default","FilterPopover_default","MUIButton","Fragment","IS_SERVER","Filters","onChange","paramKey","dataKey","label","popover","usePopover_default","hydratedRef","params","fromUrl","deserializeFilterFromSearchParams","handleApply","current","search","serializeFilterToSearchParams","url","Filters_default"],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\nimport Stack from '@mui/material/Stack';\n\nimport Icon from 'components/Icon';\nimport usePopover from 'hooks/usePopover';\nimport { Icon as IconEnum } from 'types/icon';\nimport { FilterValue, Type } from 'types/period';\nimport {\n deserializeFilterFromSearchParams,\n serializeFilterToSearchParams,\n} from 'utils/filters';\n\nimport FilterPopover from './FilterPopover';\nimport { FiltersProps } from './props';\nimport { Button } from './styles';\n\nconst IS_SERVER = typeof window === 'undefined';\n\nconst Filters = ({\n type = Type.FREE,\n value,\n onChange,\n paramKey,\n dataKey,\n label = 'Período',\n}: FiltersProps) => {\n const popover = usePopover();\n\n const hydratedRef = useRef(false);\n\n useEffect(() => {\n if (IS_SERVER || !paramKey || hydratedRef.current) return;\n\n hydratedRef.current = true;\n\n const params = new URLSearchParams(window.location.search);\n const fromUrl = deserializeFilterFromSearchParams(params, {\n paramKey,\n dataKey,\n });\n\n if (fromUrl) onChange(fromUrl);\n }, [dataKey, onChange, paramKey]);\n\n const handleApply = useCallback(\n (next: FilterValue) => {\n onChange(next);\n\n if (IS_SERVER || !paramKey) return;\n\n const current = new URLSearchParams(window.location.search);\n const params = serializeFilterToSearchParams(\n next,\n { paramKey, dataKey },\n current,\n );\n const search = params.toString();\n const url = `${window.location.pathname}${\n search ? `?${search}` : ''\n }${window.location.hash}`;\n\n window.history.replaceState(window.history.state, '', url);\n },\n [dataKey, onChange, paramKey],\n );\n\n return (\n <>\n <Stack alignItems=\"flex-start\">\n <Button\n variant=\"outlined\"\n endIcon={<Icon icon={IconEnum.ARROW_DOWN_SIMPLE} />}\n size=\"small\"\n onClick={popover.onOpen}\n >\n {label}\n </Button>\n </Stack>\n\n <FilterPopover\n open={popover.open}\n onClose={popover.onClose}\n type={type}\n value={value}\n onApply={handleApply}\n />\n </>\n );\n};\n\nexport default Filters;\n","import { memo, useCallback, useEffect, useMemo, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport Button from '@mui/material/Button';\nimport Checkbox from '@mui/material/Checkbox';\nimport Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport ActionButton from 'components/ActionButton';\nimport Autocomplete from 'components/Autocomplete';\nimport DateField from 'components/form/DateField';\nimport Form from 'components/form/Form';\nimport Icon from 'components/Icon';\nimport Scrollbar from 'components/Scrollbar';\nimport useResponsive from 'hooks/useResponsive';\nimport { Icon as IconEnum } from 'types/icon';\nimport { FilterValue, Period, Type } from 'types/period';\nimport {\n findMatchingPeriod,\n getPeriodDates,\n getPeriodsByType,\n periodLabels,\n} from 'utils/filters';\n\nimport { FilterPopoverProps } from './props';\nimport { MenuPopover, ResponsiveDateRangeCalendar } from './styles';\n\nconst DAYS_OF_WEEK = ['D', 'S', 'T', 'Q', 'Q', 'S', 'S'];\n\nconst FilterPopover = ({\n open,\n onClose,\n type,\n value,\n onApply,\n}: FilterPopoverProps) => {\n const isMobile = useResponsive('down', 'sm');\n\n const methods = useForm<FilterValue>({\n defaultValues: value,\n });\n const { handleSubmit, getValues, setValue, watch, reset } = methods;\n\n const [dateRange, setDateRange] = useState<[Date | null, Date | null]>([\n value.initialDate,\n value.finalDate,\n ]);\n\n const watchedInitialDate = watch('initialDate');\n const watchedFinalDate = watch('finalDate');\n const watchedPeriod = watch('period');\n\n const isSubmitDisabled = !watchedInitialDate || !watchedFinalDate;\n const disableFuture = type === Type.PAST;\n const disablePast = type === Type.FUTURE;\n\n const availablePeriods = useMemo(() => getPeriodsByType(type), [type]);\n\n const periodOptions = useMemo(\n () =>\n availablePeriods.map(period => ({\n label: periodLabels[period],\n value: period,\n })),\n [availablePeriods],\n );\n\n useEffect(() => {\n if (open) reset(value);\n }, [open, reset, value]);\n\n useEffect(() => {\n setDateRange([value.initialDate, value.finalDate]);\n }, [value.finalDate, value.initialDate]);\n\n const onPeriodChange = useCallback(\n (next: Period) => {\n const { initialDate, finalDate } = getPeriodDates(next);\n\n setDateRange([initialDate, finalDate]);\n\n setValue('period', next);\n setValue('initialDate', initialDate);\n setValue('finalDate', finalDate);\n },\n [setValue],\n );\n\n const handleRangeChange = useCallback(\n (newRange: [Date | null, Date | null]) => {\n setDateRange(newRange);\n\n if (newRange[0]) setValue('initialDate', newRange[0]);\n if (newRange[1]) setValue('finalDate', newRange[1]);\n\n if (newRange[0] && newRange[1]) {\n const matching = findMatchingPeriod(\n newRange[0],\n newRange[1],\n availablePeriods,\n );\n\n setValue('period', matching);\n }\n },\n [availablePeriods, setValue],\n );\n\n const handleInitialDateChange = useCallback(\n (date: Date) => {\n setValue('initialDate', date);\n\n const finalDate = getValues('finalDate');\n\n if (date && finalDate) {\n const newRange: [Date, Date] = [date, finalDate];\n\n setDateRange(newRange);\n\n const matching = findMatchingPeriod(\n newRange[0],\n newRange[1],\n availablePeriods,\n );\n\n setValue('period', matching);\n }\n },\n [availablePeriods, getValues, setValue],\n );\n\n const handleFinalDateChange = useCallback(\n (date: Date) => {\n setValue('finalDate', date);\n\n const initialDate = getValues('initialDate');\n\n if (initialDate && date) {\n const newRange: [Date, Date] = [initialDate, date];\n\n setDateRange(newRange);\n\n const matching = findMatchingPeriod(\n newRange[0],\n newRange[1],\n availablePeriods,\n );\n\n setValue('period', matching);\n }\n },\n [availablePeriods, getValues, setValue],\n );\n\n const onSubmit = useCallback(\n (formData: FilterValue) => {\n onApply(formData);\n onClose();\n },\n [onApply, onClose],\n );\n\n return (\n <MenuPopover\n open={open}\n onClose={onClose}\n arrow={isMobile ? 'top-center' : 'top-left'}\n disabledArrow\n >\n <Form methods={methods} onSubmit={handleSubmit(onSubmit)} gap={2}>\n <Typography variant=\"overline\" color=\"text.disabled\">\n Defina o período\n </Typography>\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={2}\n >\n <DateField\n name=\"initialDate\"\n label=\"Início\"\n onChange={handleInitialDateChange}\n slotProps={{ textField: { size: 'small' } }}\n />\n\n <DateField\n name=\"finalDate\"\n label=\"Término\"\n onChange={handleFinalDateChange}\n slotProps={{ textField: { size: 'small' } }}\n />\n </Stack>\n\n <Stack display={{ xs: 'block', sm: 'none' }}>\n <Autocomplete\n name=\"period\"\n options={periodOptions}\n onChange={next => next && onPeriodChange(next as Period)}\n value={watchedPeriod}\n size=\"small\"\n disableClearable\n fullWidth\n />\n </Stack>\n\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n alignItems=\"center\"\n justifyContent={{ xs: 'center', sm: 'space-between' }}\n gap={{ xs: 2, sm: 3 }}\n >\n <Stack overflow=\"hidden\">\n <Scrollbar\n fillContent\n sx={{\n display: { xs: 'none', sm: 'flex' },\n maxHeight: 360,\n }}\n >\n {periodOptions.map(option => (\n <Stack\n key={option.value}\n direction=\"row\"\n alignItems=\"center\"\n gap={0.5}\n sx={{ m: 0.4 }}\n >\n <Checkbox\n id={`period_${option.value}`}\n name={`period_${option.value}`}\n icon={\n <Icon\n icon={IconEnum.CHECKMARK_CIRCLE_ROUNDED}\n color=\"primary.main\"\n />\n }\n checkedIcon={\n <Icon\n icon={IconEnum.CHECKMARK_CIRCLE}\n color=\"primary.main\"\n />\n }\n checked={watchedPeriod === option.value}\n onChange={() => onPeriodChange(option.value)}\n />\n\n <Typography\n component=\"label\"\n htmlFor={`period_${option.value}`}\n mt={0.2}\n variant=\"body2\"\n color=\"text.primary\"\n sx={{ cursor: 'pointer', whiteSpace: 'nowrap' }}\n >\n {option.label}\n </Typography>\n </Stack>\n ))}\n </Scrollbar>\n </Stack>\n\n <Divider\n orientation=\"vertical\"\n flexItem\n sx={{ display: { xs: 'none', sm: 'block' }, mx: 3 }}\n />\n\n <Stack\n width={{ xs: '100%', sm: 'auto' }}\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n <ResponsiveDateRangeCalendar\n calendars={1}\n value={dateRange}\n onChange={handleRangeChange}\n disableFuture={disableFuture}\n disablePast={disablePast}\n showDaysOutsideCurrentMonth\n fixedWeekNumber={6}\n dayOfWeekFormatter={day => DAYS_OF_WEEK[day.day()]}\n sx={{\n '& .MuiDateRangeCalendar-root': {\n width: { xs: '100%', sm: 'auto' },\n },\n }}\n />\n </Stack>\n </Stack>\n\n <Divider flexItem />\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"flex-end\"\n gap={1}\n >\n <Button variant=\"outlined\" color=\"inherit\" onClick={onClose}>\n Cancelar\n </Button>\n\n <ActionButton\n actionType=\"SAVE\"\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={isSubmitDisabled}\n >\n Aplicar\n </ActionButton>\n </Stack>\n </Form>\n </MenuPopover>\n );\n};\n\nexport default memo(FilterPopover);\n","import { styled } from '@mui/material/styles';\n\nimport CommonDateRangeCalendar from 'components/DateRangeCalendar';\nimport CommonMenuPopover from 'components/MenuPopover';\n\nexport const MenuPopover = styled(CommonMenuPopover)(({ theme }) => ({\n marginTop: 10,\n\n '& .MuiPopover-paper': {\n width: 540,\n padding: theme.spacing(3),\n backgroundColor: theme.palette.background.paper,\n borderRadius: theme.spacing(1),\n backgroundImage: 'none',\n\n [theme.breakpoints.down('sm')]: {\n width: '90vw',\n maxWidth: 'calc(100vw - 32px)',\n padding: theme.spacing(2),\n },\n },\n}));\n\nexport const ResponsiveDateRangeCalendar = styled(CommonDateRangeCalendar)(\n ({ theme }) => ({\n [theme.breakpoints.up('sm')]: {\n '&.MuiDateRangeCalendar-root': {\n margin: -24,\n },\n },\n\n '& .MuiPickersCalendarHeader-label': {\n textTransform: 'capitalize',\n },\n\n [theme.breakpoints.down(400)]: {\n '& .MuiPickersCalendarHeader-root': {\n padding: theme.spacing(0, 7),\n },\n\n '& .MuiDayCalendar-header, & .MuiDayCalendar-weekContainer': {\n gap: 0,\n },\n\n '& .MuiPickersDay-root, & .MuiDateRangePickerDay-root': {\n width: 32,\n height: 32,\n },\n\n '& .MuiDayCalendar-weekDayLabel': {\n width: 32,\n height: 32,\n },\n\n '& .MuiDayCalendar-slideTransition': {\n minHeight: 210,\n },\n },\n\n [theme.breakpoints.down(350)]: {\n '& .MuiPickersDay-root, & .MuiDateRangePickerDay-root': {\n width: 28,\n height: 28,\n },\n\n '& .MuiDayCalendar-weekDayLabel': {\n width: 28,\n height: 28,\n },\n\n '& .MuiDayCalendar-slideTransition': {\n minHeight: 196,\n },\n },\n }),\n);\n","import MUIButton from '@mui/material/Button';\nimport { styled } from '@mui/material/styles';\n\nexport const Button = styled(MUIButton)(({ theme }) => ({\n color: theme.palette.text.primary,\n borderColor: theme.palette.divider,\n\n '&:hover': {\n backgroundColor: 'transparent',\n },\n\n [theme.breakpoints.down('md')]: {\n '&.filters-button': {\n minWidth: 'auto',\n padding: '6px 8px',\n fontSize: 0,\n overflow: 'hidden',\n\n '& .MuiButton-startIcon': {\n margin: 0,\n fontSize: '1rem',\n },\n },\n },\n}));\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import '../chunk-
|
|
1
|
+
import { e, j, i, h } from '../chunk-4OMAWSNC.js';
|
|
2
|
+
import '../chunk-7QZTU4E7.js';
|
|
3
3
|
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
4
4
|
|
|
5
|
-
var c=typeof window>"u",P=({type:
|
|
5
|
+
var c=typeof window>"u",P=({type:m="FREE",paramKey:t=h.paramKey,dataKey:a=h.dataKey,defaultValue:p}={})=>{let[f,l]=useState(()=>{let e$1=p??e(m);if(c)return e$1;let r=new URLSearchParams(window.location.search);return j(r,{paramKey:t,dataKey:a})??e$1}),n=useRef({paramKey:t,dataKey:a});n.current={paramKey:t,dataKey:a},useEffect(()=>{if(c)return;let e=()=>{let r=new URLSearchParams(window.location.search),s=j(r,n.current);s&&l(s);};return window.addEventListener("popstate",e),()=>window.removeEventListener("popstate",e)},[]);let h=useCallback(e=>{if(l(e),c)return;let r=new URLSearchParams(window.location.search),u=i(e,n.current,r).toString(),F=`${window.location.pathname}${u?`?${u}`:""}${window.location.hash}`;window.history.replaceState(window.history.state,"",F);},[]);return [f,h]},v=P;
|
|
6
6
|
|
|
7
7
|
export { v as default };
|
|
8
8
|
//# sourceMappingURL=useFiltersSearchParams.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useFiltersSearchParams.ts"],"names":["useCallback","useEffect","useRef","useState","IS_SERVER","useFiltersSearchParams","type","paramKey","DEFAULT_FILTER_KEYS","dataKey","defaultValue","value","setValue","fallback","buildDefaultFilter","params","deserializeFilterFromSearchParams","keysRef","handler","next","update","current","search","serializeFilterToSearchParams","url","useFiltersSearchParams_default"],"mappings":"2FAAA,OAAS,eAAAA,EAAa,aAAAC,EAAW,UAAAC,EAAQ,YAAAC,MAAgB,
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useFiltersSearchParams.ts"],"names":["useCallback","useEffect","useRef","useState","IS_SERVER","useFiltersSearchParams","type","paramKey","DEFAULT_FILTER_KEYS","dataKey","defaultValue","value","setValue","fallback","buildDefaultFilter","params","deserializeFilterFromSearchParams","keysRef","handler","next","update","current","search","serializeFilterToSearchParams","url","useFiltersSearchParams_default"],"mappings":"2FAAA,OAAS,eAAAA,EAAa,aAAAC,EAAW,UAAAC,EAAQ,YAAAC,MAAgB,QAiBzD,IAAMC,EAAY,OAAO,OAAW,IAE9BC,EAAyB,CAAC,CAC9B,KAAAC,SACA,SAAAC,EAAWC,EAAoB,SAC/B,QAAAC,EAAUD,EAAoB,QAC9B,aAAAE,CACF,EAAmC,CAAC,IAG/B,CACH,GAAM,CAACC,EAAOC,CAAQ,EAAIT,EAAsB,IAAM,CACpD,IAAMU,EAAWH,GAAgBI,EAAmBR,CAAI,EAExD,GAAIF,EAAW,OAAOS,EAEtB,IAAME,EAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAEzD,OACEC,EAAkCD,EAAQ,CAAE,SAAAR,EAAU,QAAAE,CAAQ,CAAC,GAC/DI,CAEJ,CAAC,EAEKI,EAAUf,EAAO,CAAE,SAAAK,EAAU,QAAAE,CAAQ,CAAC,EAC5CQ,EAAQ,QAAU,CAAE,SAAAV,EAAU,QAAAE,CAAQ,EAEtCR,EAAU,IAAM,CACd,GAAIG,EAAW,OAEf,IAAMc,EAAU,IAAM,CACpB,IAAMH,EAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM,EACnDI,EAAOH,EAAkCD,EAAQE,EAAQ,OAAO,EAElEE,GAAMP,EAASO,CAAI,CACzB,EAEA,cAAO,iBAAiB,WAAYD,CAAO,EAEpC,IAAM,OAAO,oBAAoB,WAAYA,CAAO,CAC7D,EAAG,CAAC,CAAC,EAEL,IAAME,EAASpB,EAAamB,GAAsB,CAGhD,GAFAP,EAASO,CAAI,EAETf,EAAW,OAEf,IAAMiB,EAAU,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAMpDC,EALSC,EACbJ,EACAF,EAAQ,QACRI,CACF,EACsB,SAAS,EACzBG,EAAM,GAAG,OAAO,SAAS,WAC7BF,EAAS,IAAIA,IAAW,KACvB,OAAO,SAAS,OAEnB,OAAO,QAAQ,aAAa,OAAO,QAAQ,MAAO,GAAIE,CAAG,CAC3D,EAAG,CAAC,CAAC,EAEL,MAAO,CAACb,EAAOS,CAAM,CACvB,EAEOK,EAAQpB","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { FilterValue, Type } from 'types/period';\nimport {\n buildDefaultFilter,\n DEFAULT_FILTER_KEYS,\n deserializeFilterFromSearchParams,\n serializeFilterToSearchParams,\n} from 'utils/filters';\n\ninterface UseFiltersSearchParamsOptions {\n type?: Type;\n paramKey?: string;\n dataKey?: string;\n defaultValue?: FilterValue;\n}\n\nconst IS_SERVER = typeof window === 'undefined';\n\nconst useFiltersSearchParams = ({\n type = Type.FREE,\n paramKey = DEFAULT_FILTER_KEYS.paramKey,\n dataKey = DEFAULT_FILTER_KEYS.dataKey,\n defaultValue,\n}: UseFiltersSearchParamsOptions = {}): [\n FilterValue,\n (value: FilterValue) => void,\n] => {\n const [value, setValue] = useState<FilterValue>(() => {\n const fallback = defaultValue ?? buildDefaultFilter(type);\n\n if (IS_SERVER) return fallback;\n\n const params = new URLSearchParams(window.location.search);\n\n return (\n deserializeFilterFromSearchParams(params, { paramKey, dataKey }) ??\n fallback\n );\n });\n\n const keysRef = useRef({ paramKey, dataKey });\n keysRef.current = { paramKey, dataKey };\n\n useEffect(() => {\n if (IS_SERVER) return;\n\n const handler = () => {\n const params = new URLSearchParams(window.location.search);\n const next = deserializeFilterFromSearchParams(params, keysRef.current);\n\n if (next) setValue(next);\n };\n\n window.addEventListener('popstate', handler);\n\n return () => window.removeEventListener('popstate', handler);\n }, []);\n\n const update = useCallback((next: FilterValue) => {\n setValue(next);\n\n if (IS_SERVER) return;\n\n const current = new URLSearchParams(window.location.search);\n const params = serializeFilterToSearchParams(\n next,\n keysRef.current,\n current,\n );\n const search = params.toString();\n const url = `${window.location.pathname}${\n search ? `?${search}` : ''\n }${window.location.hash}`;\n\n window.history.replaceState(window.history.state, '', url);\n }, []);\n\n return [value, update];\n};\n\nexport default useFiltersSearchParams;\n"]}
|
package/dist/types/period.d.ts
CHANGED
|
@@ -15,10 +15,19 @@ declare enum Period {
|
|
|
15
15
|
NEXT_YEAR = "NEXT_YEAR",
|
|
16
16
|
CUSTOM = "CUSTOM"
|
|
17
17
|
}
|
|
18
|
+
declare enum Type {
|
|
19
|
+
FREE = "FREE",
|
|
20
|
+
PAST = "PAST",
|
|
21
|
+
FUTURE = "FUTURE"
|
|
22
|
+
}
|
|
18
23
|
interface FilterValue {
|
|
19
24
|
period: Period;
|
|
20
25
|
initialDate: Date | null;
|
|
21
26
|
finalDate: Date | null;
|
|
22
27
|
}
|
|
28
|
+
interface FilterUrlKeys {
|
|
29
|
+
paramKey?: string;
|
|
30
|
+
dataKey?: string;
|
|
31
|
+
}
|
|
23
32
|
|
|
24
|
-
export { FilterValue, Period };
|
|
33
|
+
export { FilterUrlKeys, FilterValue, Period, Type };
|
package/dist/types/period.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { a as Period } from '../chunk-
|
|
1
|
+
export { a as Period, b as Type } from '../chunk-7QZTU4E7.js';
|
|
2
2
|
//# sourceMappingURL=period.js.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Period, Type, FilterValue, FilterUrlKeys } from '../types/period.js';
|
|
2
|
+
|
|
3
|
+
declare const periodLabels: Record<Period, string>;
|
|
4
|
+
declare const getPeriodsByType: (type: Type) => Period[];
|
|
5
|
+
declare const getDefaultPeriodForType: (type: Type) => Period;
|
|
6
|
+
declare const getPeriodDates: (period: Period, reference?: Date) => {
|
|
7
|
+
initialDate: Date | null;
|
|
8
|
+
finalDate: Date | null;
|
|
9
|
+
};
|
|
10
|
+
declare const buildDefaultFilter: (type: Type) => FilterValue;
|
|
11
|
+
declare const findMatchingPeriod: (startDate: Date | null, endDate: Date | null, candidates: Period[]) => Period;
|
|
12
|
+
declare const periodSlugs: Record<Period, string>;
|
|
13
|
+
declare const DEFAULT_FILTER_KEYS: Required<FilterUrlKeys>;
|
|
14
|
+
declare const serializeFilterToSearchParams: (value: FilterValue, keys?: FilterUrlKeys, baseParams?: URLSearchParams) => URLSearchParams;
|
|
15
|
+
declare const deserializeFilterFromSearchParams: (params: URLSearchParams, keys?: FilterUrlKeys) => FilterValue | null;
|
|
16
|
+
|
|
17
|
+
export { DEFAULT_FILTER_KEYS, buildDefaultFilter, deserializeFilterFromSearchParams, findMatchingPeriod, getDefaultPeriodForType, getPeriodDates, getPeriodsByType, periodLabels, periodSlugs, serializeFilterToSearchParams };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { h as DEFAULT_FILTER_KEYS, e as buildDefaultFilter, j as deserializeFilterFromSearchParams, f as findMatchingPeriod, c as getDefaultPeriodForType, d as getPeriodDates, b as getPeriodsByType, a as periodLabels, g as periodSlugs, i as serializeFilterToSearchParams } from '../chunk-4OMAWSNC.js';
|
|
2
|
+
import '../chunk-7QZTU4E7.js';
|
|
3
|
+
//# sourceMappingURL=filters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Filters/utils.ts"],"names":["periodLabels","PAST_PERIODS","FUTURE_PERIODS","FREE_PERIODS","getPeriodsByType","type","getDefaultPeriodForType","getPeriodDates","period","reference","now","initialDate","finalDate","buildDefaultFilter","findMatchingPeriod","startDate","endDate","candidates","periodSlugs","slugToPeriod","key","slug","DEFAULT_FILTER_KEYS","formatDateOnly","date","year","month","day","parseDateOnly","raw","match","serializeFilterToSearchParams","value","keys","baseParams","paramKey","dataKey","params","deserializeFilterFromSearchParams","dataRaw","initialRaw","finalRaw"],"mappings":"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","sourcesContent":["import { FilterValue, Period } from 'types/period';\n\nimport { Type } from './props';\n\nexport const periodLabels: Record<Period, string> = {\n [Period.LAST_YEAR]: 'Ano passado',\n [Period.LAST_MONTH]: 'Mês passado',\n [Period.LAST_28_DAYS]: 'Últimos 28 dias',\n [Period.LAST_7_DAYS]: 'Últimos 7 dias',\n [Period.LAST_WEEK]: 'Semana passada',\n [Period.YESTERDAY]: 'Ontem',\n [Period.TODAY]: 'Hoje',\n [Period.TOMORROW]: 'Amanhã',\n [Period.NEXT_7_DAYS]: 'Próximos 7 dias',\n [Period.NEXT_30_DAYS]: 'Próximos 30 dias',\n [Period.NEXT_90_DAYS]: 'Próximos 90 dias',\n [Period.NEXT_MONTH]: 'Próximo mês',\n [Period.THIS_YEAR]: 'Este ano',\n [Period.NEXT_YEAR]: 'Próximo ano',\n [Period.CUSTOM]: 'Personalizado',\n};\n\nconst PAST_PERIODS: Period[] = [\n Period.TODAY,\n Period.YESTERDAY,\n Period.LAST_7_DAYS,\n Period.LAST_WEEK,\n Period.LAST_28_DAYS,\n Period.LAST_MONTH,\n Period.LAST_YEAR,\n Period.CUSTOM,\n];\n\nconst FUTURE_PERIODS: Period[] = [\n Period.TODAY,\n Period.TOMORROW,\n Period.NEXT_7_DAYS,\n Period.NEXT_30_DAYS,\n Period.NEXT_90_DAYS,\n Period.NEXT_MONTH,\n Period.THIS_YEAR,\n Period.NEXT_YEAR,\n Period.CUSTOM,\n];\n\nconst FREE_PERIODS: Period[] = [\n Period.LAST_YEAR,\n Period.LAST_MONTH,\n Period.LAST_28_DAYS,\n Period.LAST_7_DAYS,\n Period.LAST_WEEK,\n Period.YESTERDAY,\n Period.TODAY,\n Period.TOMORROW,\n Period.NEXT_7_DAYS,\n Period.NEXT_30_DAYS,\n Period.NEXT_90_DAYS,\n Period.NEXT_MONTH,\n Period.THIS_YEAR,\n Period.NEXT_YEAR,\n Period.CUSTOM,\n];\n\nexport const getPeriodsByType = (type: Type): Period[] => {\n switch (type) {\n case Type.PAST:\n return PAST_PERIODS;\n case Type.FUTURE:\n return FUTURE_PERIODS;\n default:\n return FREE_PERIODS;\n }\n};\n\nexport const getDefaultPeriodForType = (type: Type): Period => {\n switch (type) {\n case Type.FUTURE:\n return Period.NEXT_7_DAYS;\n case Type.PAST:\n default:\n return Period.LAST_28_DAYS;\n }\n};\n\nexport const getPeriodDates = (\n period: Period,\n reference?: Date,\n): { initialDate: Date | null; finalDate: Date | null } => {\n if (period === Period.CUSTOM) {\n return { initialDate: null, finalDate: null };\n }\n\n const now = reference ? new Date(reference) : new Date();\n const initialDate = new Date(now);\n const finalDate = new Date(now);\n\n switch (period) {\n case Period.TODAY:\n break;\n\n case Period.YESTERDAY:\n initialDate.setDate(initialDate.getDate() - 1);\n finalDate.setDate(finalDate.getDate() - 1);\n break;\n\n case Period.TOMORROW:\n initialDate.setDate(initialDate.getDate() + 1);\n finalDate.setDate(finalDate.getDate() + 1);\n break;\n\n case Period.LAST_7_DAYS:\n initialDate.setDate(initialDate.getDate() - 6);\n break;\n\n case Period.LAST_28_DAYS:\n initialDate.setDate(initialDate.getDate() - 27);\n break;\n\n case Period.LAST_WEEK: {\n finalDate.setDate(finalDate.getDate() - finalDate.getDay() - 1);\n initialDate.setTime(finalDate.getTime());\n initialDate.setDate(initialDate.getDate() - 6);\n break;\n }\n\n case Period.LAST_MONTH:\n initialDate.setMonth(initialDate.getMonth() - 1, 1);\n finalDate.setDate(0);\n break;\n\n case Period.LAST_YEAR:\n initialDate.setFullYear(initialDate.getFullYear() - 1, 0, 1);\n finalDate.setFullYear(finalDate.getFullYear() - 1, 11, 31);\n break;\n\n case Period.NEXT_7_DAYS:\n finalDate.setDate(finalDate.getDate() + 6);\n break;\n\n case Period.NEXT_30_DAYS:\n finalDate.setDate(finalDate.getDate() + 29);\n break;\n\n case Period.NEXT_90_DAYS:\n finalDate.setDate(finalDate.getDate() + 89);\n break;\n\n case Period.NEXT_MONTH:\n initialDate.setMonth(initialDate.getMonth() + 1, 1);\n finalDate.setMonth(finalDate.getMonth() + 2, 0);\n break;\n\n case Period.THIS_YEAR:\n initialDate.setMonth(0, 1);\n finalDate.setMonth(11, 31);\n break;\n\n case Period.NEXT_YEAR:\n initialDate.setFullYear(initialDate.getFullYear() + 1, 0, 1);\n finalDate.setFullYear(finalDate.getFullYear() + 1, 11, 31);\n break;\n }\n\n initialDate.setHours(0, 0, 0, 0);\n finalDate.setHours(23, 59, 59, 999);\n\n return { initialDate, finalDate };\n};\n\nexport const buildDefaultFilter = (type: Type): FilterValue => {\n const period = getDefaultPeriodForType(type);\n return { period, ...getPeriodDates(period) };\n};\n\nexport const findMatchingPeriod = (\n startDate: Date | null,\n endDate: Date | null,\n candidates: Period[],\n): Period => {\n if (!startDate || !endDate) return Period.CUSTOM;\n\n const match = candidates.find(period => {\n if (period === Period.CUSTOM) return false;\n\n const { initialDate, finalDate } = getPeriodDates(period);\n\n return (\n initialDate &&\n finalDate &&\n startDate.toDateString() === initialDate.toDateString() &&\n endDate.toDateString() === finalDate.toDateString()\n );\n });\n\n return match ?? Period.CUSTOM;\n};\n\nexport const periodSlugs: Record<Period, string> = {\n [Period.LAST_YEAR]: 'ano-passado',\n [Period.LAST_MONTH]: 'mes-passado',\n [Period.LAST_28_DAYS]: 'ultimos-28-dias',\n [Period.LAST_7_DAYS]: 'ultimos-7-dias',\n [Period.LAST_WEEK]: 'semana-passada',\n [Period.YESTERDAY]: 'ontem',\n [Period.TODAY]: 'hoje',\n [Period.TOMORROW]: 'amanha',\n [Period.NEXT_7_DAYS]: 'proximos-7-dias',\n [Period.NEXT_30_DAYS]: 'proximos-30-dias',\n [Period.NEXT_90_DAYS]: 'proximos-90-dias',\n [Period.NEXT_MONTH]: 'proximo-mes',\n [Period.THIS_YEAR]: 'este-ano',\n [Period.NEXT_YEAR]: 'proximo-ano',\n [Period.CUSTOM]: 'personalizado',\n};\n\nconst slugToPeriod: Record<string, Period> = Object.fromEntries(\n (Object.entries(periodSlugs) as [Period, string][]).map(([key, slug]) => [\n slug,\n key,\n ]),\n);\n\nexport interface FilterUrlKeys {\n paramKey?: string;\n dataKey?: string;\n}\n\nexport const DEFAULT_FILTER_KEYS: Required<FilterUrlKeys> = {\n paramKey: 'periodo',\n dataKey: 'data',\n};\n\nconst formatDateOnly = (date: Date): string => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n\n return `${year}-${month}-${day}`;\n};\n\nconst parseDateOnly = (raw: string): Date | null => {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(raw);\n if (!match) return null;\n\n const [, year, month, day] = match;\n\n return new Date(Number(year), Number(month) - 1, Number(day));\n};\n\nexport const serializeFilterToSearchParams = (\n value: FilterValue,\n keys: FilterUrlKeys = {},\n baseParams?: URLSearchParams,\n): URLSearchParams => {\n const { paramKey, dataKey } = { ...DEFAULT_FILTER_KEYS, ...keys };\n const params = new URLSearchParams(baseParams ?? '');\n\n params.set(paramKey, periodSlugs[value.period]);\n\n if (\n value.period === Period.CUSTOM &&\n value.initialDate &&\n value.finalDate\n ) {\n params.set(\n dataKey,\n `${formatDateOnly(value.initialDate)}_${formatDateOnly(value.finalDate)}`,\n );\n } else {\n params.delete(dataKey);\n }\n\n return params;\n};\n\nexport const deserializeFilterFromSearchParams = (\n params: URLSearchParams,\n keys: FilterUrlKeys = {},\n): FilterValue | null => {\n const { paramKey, dataKey } = { ...DEFAULT_FILTER_KEYS, ...keys };\n const slug = params.get(paramKey);\n if (!slug) return null;\n\n const period = slugToPeriod[slug];\n if (!period) return null;\n\n if (period !== Period.CUSTOM) {\n return { period, ...getPeriodDates(period) };\n }\n\n const dataRaw = params.get(dataKey);\n if (!dataRaw) {\n return { period: Period.CUSTOM, initialDate: null, finalDate: null };\n }\n\n const [initialRaw, finalRaw] = dataRaw.split('_');\n const initialDate = initialRaw ? parseDateOnly(initialRaw) : null;\n const finalDate = finalRaw ? parseDateOnly(finalRaw) : null;\n\n if (initialDate) initialDate.setHours(0, 0, 0, 0);\n if (finalDate) finalDate.setHours(23, 59, 59, 999);\n\n return { period: Period.CUSTOM, initialDate, finalDate };\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/period.ts"],"names":["Period"],"mappings":"AAAO,IAAKA,OACVA,EAAA,UAAY,YACZA,EAAA,WAAa,aACbA,EAAA,aAAe,eACfA,EAAA,YAAc,cACdA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,MAAQ,QACRA,EAAA,SAAW,WACXA,EAAA,YAAc,cACdA,EAAA,aAAe,eACfA,EAAA,aAAe,eACfA,EAAA,WAAa,aACbA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,OAAS,SAfCA,OAAA","sourcesContent":["export enum Period {\n LAST_YEAR = 'LAST_YEAR',\n LAST_MONTH = 'LAST_MONTH',\n LAST_28_DAYS = 'LAST_28_DAYS',\n LAST_7_DAYS = 'LAST_7_DAYS',\n LAST_WEEK = 'LAST_WEEK',\n YESTERDAY = 'YESTERDAY',\n TODAY = 'TODAY',\n TOMORROW = 'TOMORROW',\n NEXT_7_DAYS = 'NEXT_7_DAYS',\n NEXT_30_DAYS = 'NEXT_30_DAYS',\n NEXT_90_DAYS = 'NEXT_90_DAYS',\n NEXT_MONTH = 'NEXT_MONTH',\n THIS_YEAR = 'THIS_YEAR',\n NEXT_YEAR = 'NEXT_YEAR',\n CUSTOM = 'CUSTOM',\n}\n\nexport interface FilterValue {\n period: Period;\n initialDate: Date | null;\n finalDate: Date | null;\n}\n"]}
|
package/dist/props-8e304e21.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { FilterValue } from './types/period.js';
|
|
2
|
-
|
|
3
|
-
declare enum Type {
|
|
4
|
-
FREE = "FREE",
|
|
5
|
-
PAST = "PAST",
|
|
6
|
-
FUTURE = "FUTURE"
|
|
7
|
-
}
|
|
8
|
-
interface FiltersProps {
|
|
9
|
-
type?: Type;
|
|
10
|
-
value: FilterValue;
|
|
11
|
-
onChange: (value: FilterValue) => void;
|
|
12
|
-
paramKey?: string;
|
|
13
|
-
dataKey?: string;
|
|
14
|
-
label?: string;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export { FiltersProps as F, Type as T };
|