Skip to content

Commit

Permalink
chore: Merge IFilterState interface into IFilterData
Browse files Browse the repository at this point in the history
  • Loading branch information
Devil7DK committed Sep 24, 2023
1 parent ced62a6 commit fd0c806
Show file tree
Hide file tree
Showing 7 changed files with 23 additions and 23 deletions.
3 changes: 3 additions & 0 deletions src/interfaces/IFilterData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,7 @@ export interface IFilterData {
startsWith?: string[];
twinNames?: boolean;
religion?: Religion;
startsWithMode: 'none' | 'auto' | 'manual';
tob: string;
tz: string;
}
7 changes: 0 additions & 7 deletions src/interfaces/IFilterState.ts

This file was deleted.

1 change: 0 additions & 1 deletion src/interfaces/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
export * from './IFilterData';
export * from './IFilterState';
export * from './IName';
export * from './IResponseData';
export * from './ITwinName';
6 changes: 6 additions & 0 deletions src/pages/Filters/Filters.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ export const Filters: React.FC = () => {
const [startsWithMode, setStartsWithMode] =
useFilterState('startsWithMode');

const [tob] = useFilterState('tob');
const [tz] = useFilterState('tz');

const onTwinNamesClick = (
e: React.MouseEvent<HTMLButtonElement, MouseEvent>
) => {
Expand Down Expand Up @@ -102,6 +105,9 @@ export const Filters: React.FC = () => {
startsWith,
twinNames,
religion,
startsWithMode,
tob,
tz,
},
{ headers: { token } }
)
Expand Down
3 changes: 1 addition & 2 deletions src/pages/Names/Names.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,10 @@ export const Names: React.FC = () => {
const page = Number(searchParams.get('page'));
const limit = Number(searchParams.get('limit'));

const [filters, setFilters] = useState<IFilterData>({});
const [filters, setFilters] = useState<IFilterData>({} as IFilterData);
const [total, setTotal] = useState(0);
const [data, setData] = useState<IName[] | ITwinName[]>([]);
const [loading, setLoading] = useState(false);
const [exporting, setExporting] = useState(false);

useEffect(() => {
setLoading(true);
Expand Down
12 changes: 6 additions & 6 deletions src/utils/Common.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import dayjs from 'dayjs';

import { IFilterState } from '../interfaces';
import { IFilterData } from '../interfaces';
import { getDefaultTimezone } from './Timezone';
import { getLunarMansion, getLunarMansionIndex } from './astro';

Expand All @@ -10,23 +10,23 @@ const sentenseCase = (str: string) => {

export const getStateFromParams = (params: URLSearchParams) => {
return {
gender: (params.get('gender') as IFilterState['gender']) || undefined,
gender: (params.get('gender') as IFilterData['gender']) || undefined,
startsWith:
(params
.get('startsWith')
?.split(',') as IFilterState['startsWith']) || undefined,
?.split(',') as IFilterData['startsWith']) || undefined,
twinNames: params.get('twinNames') === 'true',
religion:
(params.get('religion') as IFilterState['religion']) || undefined,
(params.get('religion') as IFilterData['religion']) || undefined,
startsWithMode:
(params.get('startsWithMode') as IFilterState['startsWithMode']) ||
(params.get('startsWithMode') as IFilterData['startsWithMode']) ||
'none',
tob: params.get('tob') || dayjs().format('YYYY-MM-DDTHH:mm'),
tz: params.get('tz') || getDefaultTimezone(),
};
};

export const getDocumentTitleByFilter = (filter: IFilterState) => {
export const getDocumentTitleByFilter = (filter: IFilterData) => {
let documentTitle = [];

if (filter.twinNames) {
Expand Down
14 changes: 7 additions & 7 deletions src/utils/FilterState.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,17 @@ import React, {
} from 'react';
import { useSearchParams } from 'react-router-dom';

import { IFilterState } from '../interfaces';
import { IFilterData } from '../interfaces';
import { getDocumentTitleByFilter, getStateFromParams } from './Common';

const FilterStateContext = createContext<IFilterState>({} as IFilterState);
const FilterStateContext = createContext<IFilterData>({} as IFilterData);

export const FilterStateProvider: React.FC<PropsWithChildren> = ({
children,
}) => {
const [searchParams] = useSearchParams();

const state = useMemo<IFilterState>(
const state = useMemo<IFilterData>(
() => getStateFromParams(searchParams),
[searchParams]
);
Expand All @@ -36,18 +36,18 @@ export const FilterStateProvider: React.FC<PropsWithChildren> = ({
);
};

export const useFilterState = <K extends keyof IFilterState>(
export const useFilterState = <K extends keyof IFilterData>(
key: K
): [IFilterState[K], Dispatch<SetStateAction<IFilterState[K]>>] => {
): [IFilterData[K], Dispatch<SetStateAction<IFilterData[K]>>] => {
const [_, setSearchParams] = useSearchParams();

const state = useContext(FilterStateContext);

const setFilterState = useCallback(
(
value:
| IFilterState[K]
| ((prevState: IFilterState[K]) => IFilterState[K])
| IFilterData[K]
| ((prevState: IFilterData[K]) => IFilterData[K])
) => {
const newValue =
value instanceof Function ? value(state[key]) : value;
Expand Down

0 comments on commit fd0c806

Please sign in to comment.