@zydon/common 2.8.92 → 2.8.93
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-M7CMUCPI.js → chunk-PWIIOB4W.js} +1 -1
- package/dist/chunk-PWIIOB4W.js.map +1 -0
- package/dist/components/Filters/index.js +1 -1
- package/dist/hooks/useFiltersSearchParams.d.ts +1 -1
- package/dist/hooks/useFiltersSearchParams.js +2 -2
- package/dist/hooks/useFiltersSearchParams.js.map +1 -1
- package/dist/utils/filters.d.ts +2 -2
- package/dist/utils/filters.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-M7CMUCPI.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
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"],p=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}},g=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:o,finalDate:i}=l(e);return o&&i&&a.toDateString()===o.toDateString()&&r.toDateString()===i.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},o=new URLSearchParams(s??"");return o.set(t,E[a.period]),a.period==="CUSTOM"&&a.initialDate&&a.finalDate?o.set(e,`${_(a.initialDate)}_${_(a.finalDate)}`):o.delete(e),o},P=(a,r={})=>{let{paramKey:s,dataKey:t}={...c,...r},e=a.get(s);if(!e)return null;let o=R[e];if(!o)return null;if(o!=="CUSTOM")return {period:o,...l(o)};let i=a.get(t);if(!i)return {period:"CUSTOM",initialDate:null,finalDate:null};let[D,S]=i.split("_"),n=D?A(D):null,T=S?A(S):null;return n&&n.setHours(0,0,0,0),T&&T.setHours(23,59,59,999),{period:"CUSTOM",initialDate:n,finalDate:T}};
|
|
2
2
|
|
|
3
3
|
export { m as a, p as b, O as c, l as d, g as e, M as f, E as g, c as h, N as i, P as j };
|
|
4
|
-
//# sourceMappingURL=chunk-
|
|
4
|
+
//# sourceMappingURL=chunk-PWIIOB4W.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: keyof typeof 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: keyof typeof 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: keyof typeof 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 (value.period === Period.CUSTOM && value.initialDate && value.finalDate) {\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"]}
|
|
@@ -9,7 +9,7 @@ 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, d, f, j as j$1, i } from '../../chunk-
|
|
12
|
+
import { b as b$1, a as a$1, d, f, j as j$1, i } from '../../chunk-PWIIOB4W.js';
|
|
13
13
|
import '../../chunk-7QZTU4E7.js';
|
|
14
14
|
import { memo, useState, useMemo, useEffect, useCallback, useRef } from 'react';
|
|
15
15
|
import p from '@mui/material/Stack';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { e, j, i, h } from '../chunk-
|
|
1
|
+
import { e, j, i, h } from '../chunk-PWIIOB4W.js';
|
|
2
2
|
import '../chunk-7QZTU4E7.js';
|
|
3
3
|
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
4
4
|
|
|
5
|
-
var c=typeof window>"u",
|
|
5
|
+
var c=typeof window>"u",V=({type:d="FREE",paramKey:t=h.paramKey,dataKey:a=h.dataKey,defaultValue:m}={})=>{let[f,l]=useState(()=>{let e$1=m??e(d);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=V;
|
|
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,QAiBzD,IAAMC,EAAY,OAAO,OAAW,IAE9BC,EAAyB,CAAC,CAC9B,KAAAC,
|
|
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,EAAO,OACP,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?: keyof typeof Type;\n paramKey?: string;\n dataKey?: string;\n defaultValue?: FilterValue;\n}\n\nconst IS_SERVER = typeof window === 'undefined';\n\nconst useFiltersSearchParams = ({\n 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/utils/filters.d.ts
CHANGED
|
@@ -2,12 +2,12 @@ import { Period, Type, FilterValue, FilterUrlKeys } from '../types/period.js';
|
|
|
2
2
|
|
|
3
3
|
declare const periodLabels: Record<Period, string>;
|
|
4
4
|
declare const getPeriodsByType: (type: keyof typeof Type) => Period[];
|
|
5
|
-
declare const getDefaultPeriodForType: (type: Type) => Period;
|
|
5
|
+
declare const getDefaultPeriodForType: (type: keyof typeof Type) => Period;
|
|
6
6
|
declare const getPeriodDates: (period: Period, reference?: Date) => {
|
|
7
7
|
initialDate: Date | null;
|
|
8
8
|
finalDate: Date | null;
|
|
9
9
|
};
|
|
10
|
-
declare const buildDefaultFilter: (type: Type) => FilterValue;
|
|
10
|
+
declare const buildDefaultFilter: (type: keyof typeof Type) => FilterValue;
|
|
11
11
|
declare const findMatchingPeriod: (startDate: Date | null, endDate: Date | null, candidates: Period[]) => Period;
|
|
12
12
|
declare const periodSlugs: Record<Period, string>;
|
|
13
13
|
declare const DEFAULT_FILTER_KEYS: Required<FilterUrlKeys>;
|
package/dist/utils/filters.js
CHANGED
|
@@ -1,3 +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-
|
|
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-PWIIOB4W.js';
|
|
2
2
|
import '../chunk-7QZTU4E7.js';
|
|
3
3
|
//# sourceMappingURL=filters.js.map
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
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: keyof typeof 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 (value.period === Period.CUSTOM && value.initialDate && value.finalDate) {\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"]}
|