8000 Refactor: 리팩토링 by guesung · Pull Request #152 · guesung/Web-Memo · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Refactor: 리팩토링 #152

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 46 commits into from
Jan 29, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
a104053
chore: onSuccess 제거
guesung Jan 27, 2025
997b96c
refactor: 불필요한 h-full 제거
guesung Jan 27, 2025
7698964
chore: onSuccess 제거
guesung Jan 27, 2025
7d06ae0
fix: sentry 설정을 instrumentation에서 수행
guesung Jan 27, 2025
ad6bd87
feat: GTM 추가
guesung Jan 27, 2025
f245104
refactor: 불필요한 속성 및 컴포넌트 제거
guesung Jan 27, 2025
8260d24
docs: 주석으로 코드에 대한 설명 추가
guesung Jan 27, 2025
a8eed27
refactor: InitSentryUserInfo 컴포넌트 이동
guesung Jan 27, 2025
674b37b
feat: eslint-plugin-unused-imports 설치 및 세팅
guesung Jan 27, 2025
23003fe
refactor: 네이밍 앞에 -Memo-` prefix로 통일
guesung Jan 27, 2025
3f97f8a
refactor: Header를 주로 사용하는 측인 layout/[lng]에 위치
guesung Jan 27, 2025
d26e3c5
refactor: 불필요한 파일 제거
guesung Jan 27, 2025
49aad85
refactor: 불필요한 함수 래퍼 제거 및 변수명 수정
guesung Jan 27, 2025
98b1643
refactor: handleRequestAppend 함수 분리
guesung Jan 27, 2025
222edaa
refactor: `groupKey` 기본값 설정
guesung Jan 27, 2025
ffce8a2
refactor: 불필요한 단언문(!) 제거
guesung Jan 27, 2025
cd865f6
chore: sentry의 silent옵션 제거
guesung Jan 27, 2025
ba4e7d2
refactor: `ExtensionDialog` 이동
guesung Jan 27, 2025
5effc82
fix: 확장 프로그램이 설치된 경우에만 가이드 실행
guesung Jan 27, 2025
0e984fe
refactor: ExtensionInstallCheckDialog 분리
guesung Jan 27, 2025
f3cea97
feat: ExtensionInstallCheckDialog 동적 import
guesung Jan 27, 2025
c36ae28
refactor: 기명 함수로 수정
guesung Jan 27, 2025
3387b08
chore: placeholder 시간 최소화
guesung Jan 27, 2025
c65a9d2
refactor: 변수명, 함수명을 직관적으로 수정
guesung Jan 27, 2025
3a7260c
refactor: queries와 mutations 분리
guesung Jan 27, 2025
8a67cf6
feat: 공통 훅을 shared폴더로 묶기
guesung Jan 27, 2025
1bcbaf5
refactor: 순서 변경
guesung Jan 27, 2025
d3b102d
refactor: 불필요한 훅 제거
guesung Jan 27, 2025
332c990
refactor: `useKeyboardBind`를 isMetaKey도 받을 수 있도록 확장
guesung Jan 27, 2025
6e4f530
fix: 메타키 이슈 해결
guesung Jan 27, 2025
b4b7da1
chore: type import
guesung Jan 29, 2025
8b13f87
refactor: 사용하지 않는 타입 제거
guesung Jan 29, 2025
6fd9acf
refactor: 컨벤션에 맞는 폴더로 이동
guesung Jan 29, 2025
04d5dd7
refactor: 폴더 구조 컨벤션에 맞게 수정
guesung Jan 29, 2025
0d75066
refactor: 불필요한 컴포넌트 depth 제거
guesung Jan 29, 2025
754ac33
refactor: Header를 공통 컴포넌트로 이동
guesung Jan 29, 2025
e66b39b
refactor: container에서 section 네이밍으로 통일
guesung Jan 29, 2025
a43e8ae
refactor: 컴포넌트 파일을 재 역할에 맞는 폴더로 이동
guesung Jan 29, 2025
6d59902
refactor: server.ts와 client.ts에 `util`을 앞에 붙여주기
guesung Jan 29, 2025
7c474c1
refactor: 불필요한 import 및 컴포넌트 제거
guesung Jan 29, 2025
30c97d8
chore: type imports eslint rules 추가
guesung Jan 29, 2025
dbcb5ec
style: type import eslint 적용
guesung Jan 29, 2025
8d035c2
chore: web의 eslintl 제거
guesung Jan 29, 2025
22293f6
fix: eslint-import-resolver-typescript로 eslint typescript resolve
guesung Jan 29, 2025
e947836
fix: fix the lint
guesung Jan 29, 2025
413f8c0
fix: 잘못된 import경로 수정
guesung Jan 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -21,26 +21,34 @@
"sourceType": "module",
},
"plugins": [
"unused-imports",
"prettier",
"simple-import-sort",
"react",
"@typescript-eslint",
"react-hooks",
"import",
"jsx-a11y",
"turbo",
],
"settings": {
"react": {
"version": "detect",
},
"import/resolver": {
"typescript": {
"alwaysTryTypes": true,
"project": "./tsconfig.json",
},
},
},
"rules": {
"@typescript-eslint/consistent-type-imports": "error",
"react/react-in-jsx-scope": "off",
"import/no-unresolved": "off",
"react/prop-types": "off",
"simple-import-sort/imports": "error",
"simple-import-sort/exports": "error",
"unused-imports/no-unused-imports": "error",
},
"globals": {
"chrome": "readonly",
Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -85,12 +85,14 @@
"eslint": "8.57.0",
"eslint-config-airbnb-typescript": "18.0.0",
"eslint-config-prettier": "9.1.0",
"eslint-import-resolver-typescript": "^3.7.0",
"eslint-plugin-import": "2.29.1",
"eslint-plugin-jsx-a11y": "6.10.0",
"eslint-plugin-prettier": "5.2.1",
"eslint-plugin-react": "7.35.0",
"eslint-plugin-react-hooks": "4.6.2",
"eslint-plugin-simple-import-sort": "^12.1.1",
"eslint-plugin-unused-imports": "^4.1.4",
"husky": "^9.1.5",
"lint-staged": "^15.2.7",
"overlay-kit": "^1.4.1",
Expand Down
7 changes: 7 additions & 0 deletions packages/shared/src/hooks/common/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export { default as useDidMount } from './useDidMount';
export { default as useError } from './useError';
export { default as useFetch } from './useFetch';
export { default as useKeyboardBind } from './useKeyboardBind';
export { default as useThrottle } from './useThrottle';
export { default as useUserPreferDarkMode } from './useUserPreferDarkMode';
export { default as useDebounce } from './useDebounce';
28 changes: 28 additions & 0 deletions packages/shared/src/hooks/common/useKeyboardBind.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { useEffect } from 'react';

type KeyboardEventKey = 'Backspace' | 'Escape' | 's';

interface UseKeyboardBindProps {
key: KeyboardEventKey;
callback: () => void;
isMetaKey?: boolean;
}

export default function useKeyboardBind({ key, callback, isMetaKey = false }: UseKeyboardBindProps) {
useEffect(
function keyboardBind() {
const handleKeyDown = (event: KeyboardEvent) => {
const metaKey = isMetaKey ? event.metaKey : true;
if (metaKey && event.key === key) {
event.preventDefault();

callback();
}
};

window.addEventListener('keydown', handleKeyDown);
return () => window.removeEventListener('keydown', handleKeyDown);
},
[key, callback],
);
}
11 changes: 2 additions & 9 deletions packages/shared/src/hooks/index.ts
E30A
Original file line number Diff line number Diff line change
@@ -1,10 +1,3 @@
export * from './supabase';

export { default as useDidMount } from './useDidMount';
export { default as useError } from './useError';
export { default as useFetch } from './useFetch';
export { default as useKeyboardBind } from './useKeyboardBind';
export { default as useThrottle } from './useThrottle';
export { default as useUserPreferDarkMode } from './useUserPreferDarkMode';
export { default as useDebounce } from './useDebounce';
export { useRAF } from './useRAF';
export * from './common';
export * from './extension';
16 changes: 2 additions & 14 deletions packages/shared/src/hooks/supabase/index.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,2 @@
export { default as useCategoryDeleteMutation } from './useCategoryDeleteMutation';
export { default as useCategoryPatchMutation } from './useCategoryPatchMutation';
export { default as useCategoryPostMutation } from './useCategoryPostMutation';
export { default as useCategoryQuery } from './useCategoryQuery';
export { default as useCategoryUpsertMutation } from './useCategoryUpsertMutation';
export { default as useDeleteMemosMutation } from './useDeleteMemosMutation';
export { default as useMemoPatchMutation } from './useMemoPatchMutation';
export { default as useMemoPostMutation } from './useMemoPostMutation';
export { default as useMemoQuery } from './useMemoQuery';
export { default as useMemosQuery } from './useMemosQuery';
export { default as useMemosUpsertMutation } from './useMemosUpsertMutation';
export { default as useSupabaseUser } from './useSupabaseUser';
export { default as useSignoutMutation } from './useSignoutMutation';
export { default as useFeedbackMutation } from './useFeedbackMutation';
export * from './queries';
export * from './mutations';
10 changes: 10 additions & 0 deletions packages/shared/src/hooks/supabase/mutations/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
export { default as useCategoryDeleteMutation } from './useCategoryDeleteMutation';
export { default as useCategoryPatchMutation } from './useCategoryPatchMutation';
export { default as useCategoryPostMutation } from './useCategoryPostMutation';
export { default as useCategoryUpsertMutation } from './useCategoryUpsertMutation';
export { default as useDeleteMemosMutation } from './useDeleteMemosMutation';
export { default as useMemoPatchMutation } from './useMemoPatchMutation';
export { default as useMemoPostMutation } from './useMemoPostMutation';
export { default as useMemosUpsertMutation } from './useMemosUpsertMutation';
export { default as useSignoutMutation } from './useSignoutMutation';
export { default as useFeedbackMutation } from './useFeedbackMutation';
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { QUERY_KEY } from '@src/constants';
import { CategoryService } from '@src/utils';
import { useMutation, useQueryClient } from '@tanstack/react-query';

import useSupabaseClientQuery from './useSupabaseClientQuery';
import { useSupabaseClientQuery } from '../queries';

export default function useCategoryDeleteMutation() {
const queryClient = useQueryClient();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { QUERY_KEY } from '@src/constants';
import { CategoryService } from '@src/utils';
import { useMutation, useQueryClient } from '@tanstack/react-query';

import useSupabaseClientQuery from './useSupabaseClientQuery';
import { useSupabaseClientQuery } from '../queries';

export default function useCategoryPatchMutation() {
const queryClient = useQueryClient();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { QUERY_KEY } from '@src/constants';
import { CategoryService } from '@src/utils';
import { useMutation, useQueryClient } from '@tanstack/react-query';

import useSupabaseClientQuery from './useSupabaseClientQuery';
import { useSupabaseClientQuery } from '../queries';

export default function useCategoryPostMutation() {
const queryClient = useQueryClient();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { QUERY_KEY } from '@src/constants';
import { CategoryService } from '@src/utils';
import { useMutation, useQueryClient } from '@tanstack/react-query';

import useSupabaseClientQuery from './useSupabaseClientQuery';
import { useSupabaseClientQuery } from '../queries';

export default function useCategoryUpsertMutation() {
const queryClient = useQueryClient();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { MemoSupabaseResponse } from '@src/types';
import { MemoService } from '@src/utils';
import { useMutation, useQueryClient } from '@tanstack/react-query';

import useSupabaseClientQuery from './useSupabaseClientQuery';
import { useSupabaseClientQuery } from '../queries';

export default function useDeleteMemosMutation() {
const queryClient = useQueryClient();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { FeedbackService } from '@src/utils';
import { useMutation } from '@tanstack/react-query';

import useSupabaseFeedbackClientQuery from './useSupabaseFeedbackClientQuery';
import { useSupabaseFeedbackClientQuery } from '../queries';

export default function useFeedbackMutation() {
const { data: supabaseClient } = useSupabaseFeedbackClientQuery();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { MemoRow, MemoSupabaseResponse, MemoTable } from '@src/types';
import { MemoService } from '@src/utils';
import { useMutation, useQueryClient } from '@tanstack/react-query';

import useSupabaseClientQuery from './useSupabaseClientQuery';
import { useSupabaseClientQuery } from '../queries';

type MutationVariables = {
id: MemoRow['id'];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { MemoSupabaseResponse, MemoTable } from '@src/types';
import { MemoService } from '@src/utils';
import { useMutation, useQueryClient } from '@tanstack/react-query';

import useSupabaseClientQuery from './useSupabaseClientQuery';
import { useSupabaseClientQuery } from '../queries';

type MutationError = Error;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { MemoRow, MemoSupabaseResponse, MemoTable } from '@src/types';
import { MemoService } from '@src/utils';
import { useMutation, useQueryClient } from '@tanstack/react-query';

import useSupabaseClientQuery from './useSupabaseClientQuery';
import { useSupabaseClientQuery } from '../queries';

type MutationVariables = MemoTable['Insert'][];
type MutationData = Awaited<ReturnType<MemoService['upsertMemos']>>;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useMutation } from '@tanstack/react-query';
import useSupabaseClientQuery from './useSupabaseClientQuery';
import { useSupabaseClientQuery } from '../queries';
import { AuthService } from '@src/utils/Supabase';

export default function useSignoutMutation() {
Expand Down
6 changes: 6 additions & 0 deletions packages/shared/src/hooks/supabase/queries/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export { default as useMemosQuery } from './useMemosQuery';
export { default as useMemoQuery } from './useMemoQuery';
export { default as useCategoryQuery } from './useCategoryQuery';
export { default as useSupabaseUserQuery } from './useSupabaseUserQuery';
export { default as useSupabaseClientQuery } from './useSupabaseClientQuery';
export { default as useSupabaseFeedbackClientQuery } from './useSupabaseFeedbackClientQuery';
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { useSuspenseQuery } from '@tanstack/react-query';

import useSupabaseClientQuery from './useSupabaseClientQuery';

export default function useSupabaseUser() {
export default function useSupabaseUserQuery() {
const { data: supabaseClient } = useSupabaseClientQuery();

const query = useSuspenseQuery<UserResponse, Error>({
Expand Down
19 changes: 0 additions & 19 deletions packages/shared/src/hooks/useKeyboardBind.ts

This file was deleted.

25 changes: 0 additions & 25 deletions packages/shared/src/hooks/useRAF.ts

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { StorageKeyType } from '@src/modules/chrome-storage';

import { I18n } from '../../utils/extension/module/I18n';
import { I18n } from '@src/utils/extension';

export default class ChromeSyncStorage {
static async get<T>(key: StorageKeyType): Promise<T> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,6 @@ export default class ExtensionBridge {
try {
chrome.runtime.sendMessage(EXTENSION.id, { type: BRIDGE_MESSAGE_TYPES.GET_EXTENSION_MANIFEST }, callbackFn);
} catch (error) {
console.log('여기서 에러가 발생했습니다.');
throw new ExtensionError('Failed to request extension manifest', ExtensionErrorCode.RUNTIME_ERROR, error);
}
}
Expand Down
2 changes: 1 addition & 1 deletion packages/shared/src/modules/extension-bridge/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
export * from './constant';
export { default as ExtensionBridge } from './ExtensionBridge';
export * from './constant';
export * from './type';
2 changes: 1 addition & 1 deletion packages/shared/src/modules/local-storage/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export * from './constant';
export { default as LocalStorage } from './LocalStorage';
export * from './constant';
export * from './type';
export * from './util';
1 change: 0 additions & 1 deletion packages/web/next.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,4 @@ export default withSentryConfig(nextConfig, {
org: 'guesung',
project: 'web-memo',
authToken: CONFIG.sentryAuthToken,
silent: process.env.NODE_ENV === 'production',
});
4 changes: 2 additions & 2 deletions packages/web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"analyze": "ANALYZE=true next build",
"start": "next start",
"type-check": "tsc --noEmit",
"tsc-watch": "tsc-watch"
"tsc-watch": "tsc-watch",
"lint": "eslint . --fix"
},
"dependencies": {
"@egjs/react-infinitegrid": "^4.12.0",
Expand All @@ -31,7 +32,6 @@
"accept-language": "^3.0.20",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.1",
"eslint": "9.9.1",
"eslint-config-next": "14.2.7",
"i18next": "^23.16.8",
"i18next-browser-languagedetector": "^8.0.0",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
'use client';

import { URL } from '@extension/shared/constants';
import { checkLocalStorageTrue, setLocalStorageTrue } from '@extension/shared/modules/local-storage';
import {
Button,
Dialog,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle,
} from '@src/components/ui';
import { useGetExtensionManifest } from '@src/hooks';
import type { LanguageType } from '@src/modules/i18n';
import useTranslation from '@src/modules/i18n/util.client';
import { useEffect, useState } from 'react';

interface ExtensionInstallCheckDialogProps extends LanguageType {}
export default function ExtensionInstallCheckDialog({ lng }: ExtensionInstallCheckDialogProps) {
const [open, setOpen] = useState(false);
const manifest = useGetExtensionManifest();

const { t } = useTranslation(lng);

const closeDialog = () => {
setOpen(false);
};

const handleOkClick = () => {
window.open(URL.chromeStore, '_blank', 'noopener,noreferrer');
closeDialog();
};

const handleCancelClick = () => {
setLocalStorageTrue('install');
};
Comment on lines +35 to +37
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

handleCancelClick 함수에서 dialog 닫기 로직 누락

handleCancelClick 함수에서 로컬 스토리지 값만 설정하고 dialog를 닫지 않고 있습니다. 사용자 경험 향상을 위해 closeDialog() 함수도 호출해야 합니다.

다음과 같이 수정해주세요:

  const handleCancelClick = () => {
    setLocalStorageTrue('install');
+   closeDialog();
  };
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const handleCancelClick = () => {
setLocalStorageTrue('install');
};
const handleCancelClick = () => {
setLocalStorageTrue('install');
closeDialog();
};


useEffect(() => {
const isInstalled = typeof manifest === 'object';

if (!isInstalled && !checkLocalStorageTrue('install')) setOpen(true);
}, [manifest]);

return (
<Dialog open={open} >
<DialogContent >
<DialogHeader>
<DialogTitle>{t('dialogInstall.title')}</DialogTitle>
<DialogDescription>{t('dialogInstall.description')}</DialogDescription>
</DialogHeader>
<DialogFooter>
<Button variant="secondary">
{t('dialogInstall.cancel')}
</Button>
<Button >
</DialogFooter>
</DialogContent>
</Dialog>
);
}
Loading
Loading
0