summaryrefslogtreecommitdiff
path: root/src/components/rules
diff options
context:
space:
mode:
authorLarvan2 <[email protected]>2026-03-15 15:01:57 +0800
committerLarvan2 <[email protected]>2026-03-15 15:01:57 +0800
commit0e420859f5f7011ba124c965d8319bf3bf4c5fe3 (patch)
tree2fc344b757e119ebae6e0b6243121fddba61603c /src/components/rules
parent17c4d2855ffb6914fcbece27367bafdd27a4c182 (diff)
refactor: reorganize code
Diffstat (limited to 'src/components/rules')
-rw-r--r--src/components/rules/RuleProviderItem.tsx2
-rw-r--r--src/components/rules/RulesPageFab.tsx2
-rw-r--r--src/components/rules/rules.hooks.tsx85
3 files changed, 3 insertions, 86 deletions
diff --git a/src/components/rules/RuleProviderItem.tsx b/src/components/rules/RuleProviderItem.tsx
index 0f654dd..7077ed1 100644
--- a/src/components/rules/RuleProviderItem.tsx
+++ b/src/components/rules/RuleProviderItem.tsx
@@ -3,7 +3,7 @@ import * as React from 'react';
import { Activity, Database, RefreshCw } from 'react-feather';
import Button from '~/components/Button';
-import { useUpdateRuleProviderItem } from '~/components/rules/rules.hooks';
+import { useUpdateRuleProviderItem } from '~/modules/rules/hooks';
import s from './RuleProviderItem.module.scss';
diff --git a/src/components/rules/RulesPageFab.tsx b/src/components/rules/RulesPageFab.tsx
index 91b618f..f9dee23 100644
--- a/src/components/rules/RulesPageFab.tsx
+++ b/src/components/rules/RulesPageFab.tsx
@@ -1,9 +1,9 @@
import * as React from 'react';
import { useTranslation } from 'react-i18next';
-import { useUpdateAllRuleProviderItems } from '~/components/rules/rules.hooks';
import { Fab, position as fabPosition } from '~/components/shared/Fab';
import { RotateIcon } from '~/components/shared/RotateIcon';
+import { useUpdateAllRuleProviderItems } from '~/modules/rules/hooks';
import { ClashAPIConfig } from '~/types';
type RulesPageFabProps = {
diff --git a/src/components/rules/rules.hooks.tsx b/src/components/rules/rules.hooks.tsx
index bc6aeeb..6fb09cd 100644
--- a/src/components/rules/rules.hooks.tsx
+++ b/src/components/rules/rules.hooks.tsx
@@ -1,84 +1 @@
-import * as React from 'react';
-import { useMutation, useQuery, useQueryClient } from 'react-query';
-import { useRecoilState } from 'recoil';
-
-import {
- fetchRuleProviders,
- refreshRuleProviderByName,
- updateRuleProviders,
-} from '~/api/rule-provider';
-import { fetchRules } from '~/api/rules';
-import { ruleFilterText } from '~/store/rules';
-import type { ClashAPIConfig } from '~/types';
-
-const { useCallback } = React;
-
-export function useUpdateRuleProviderItem(
- name: string,
- apiConfig: ClashAPIConfig
-): [(ev: React.MouseEvent<HTMLButtonElement>) => unknown, boolean] {
- const queryClient = useQueryClient();
- const { mutate, isLoading } = useMutation(refreshRuleProviderByName, {
- onSuccess: () => {
- queryClient.invalidateQueries('/providers/rules');
- },
- });
- const onClickRefreshButton = (ev: React.MouseEvent<HTMLButtonElement>) => {
- ev.preventDefault();
- mutate({ name, apiConfig });
- };
- return [onClickRefreshButton, isLoading];
-}
-
-export function useUpdateAllRuleProviderItems(
- apiConfig: ClashAPIConfig
-): [(ev: React.MouseEvent<HTMLButtonElement>) => unknown, boolean] {
- const queryClient = useQueryClient();
- const { data: provider } = useRuleProviderQuery(apiConfig);
- const { mutate, isLoading } = useMutation(updateRuleProviders, {
- onSuccess: () => {
- queryClient.invalidateQueries('/providers/rules');
- },
- });
- const onClickRefreshButton = (ev: React.MouseEvent<HTMLButtonElement>) => {
- ev.preventDefault();
- mutate({ names: provider.names, apiConfig });
- };
- return [onClickRefreshButton, isLoading];
-}
-
-export function useInvalidateQueries() {
- const queryClient = useQueryClient();
- return useCallback(() => {
- queryClient.invalidateQueries('/rules');
- queryClient.invalidateQueries('/providers/rules');
- }, [queryClient]);
-}
-
-export function useRuleProviderQuery(apiConfig: ClashAPIConfig) {
- return useQuery(['/providers/rules', apiConfig], () =>
- fetchRuleProviders('/providers/rules', apiConfig)
- );
-}
-
-export function useRuleAndProvider(apiConfig: ClashAPIConfig) {
- const { data: rules, isFetching } = useQuery(['/rules', apiConfig], () =>
- fetchRules('/rules', apiConfig)
- );
- const { data: provider } = useRuleProviderQuery(apiConfig);
-
- const [filterText] = useRecoilState(ruleFilterText);
- if (filterText === '') {
- return { rules, provider, isFetching };
- } else {
- const f = filterText.toLowerCase();
- return {
- rules: rules.filter((r) => r.payload.toLowerCase().indexOf(f) >= 0),
- isFetching,
- provider: {
- byName: provider.byName,
- names: provider.names.filter((t) => t.toLowerCase().indexOf(f) >= 0),
- },
- };
- }
-}
+export * from '~/modules/rules/hooks';