Skip to content

feat/#64 Workspace 가입 버튼#65

Merged
marulog merged 1 commit intodevelopfrom
feat/#64
Dec 30, 2025
Merged

feat/#64 Workspace 가입 버튼#65
marulog merged 1 commit intodevelopfrom
feat/#64

Conversation

@marulog
Copy link
Contributor

@marulog marulog commented Dec 30, 2025

🍀 이슈 번호


✅ 작업 사항

  • 디자인 변경
  • 워크스페이스 가입 버튼 추가
  • 안내 문구 삽입
image

⌨ 기타

@marulog marulog self-assigned this Dec 30, 2025
@marulog marulog linked an issue Dec 30, 2025 that may be closed by this pull request
@gemini-code-assist
Copy link

Summary of Changes

Hello @marulog, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 PR은 사용자가 로그인 페이지에서 직접 슬랙 워크스페이스에 가입할 수 있도록 새로운 기능을 도입합니다. 'Workspace 가입하기' 버튼과 함께, 사용자가 로그인하기 전에 워크스페이스에 가입해야 한다는 안내 문구를 제공하여 온보딩 과정을 명확하게 합니다. 또한, 랭킹 목록의 디자인 일관성을 위해 작은 스타일 조정이 이루어졌습니다.

Highlights

  • 새 워크스페이스 가입 버튼 추가: 사용자가 슬랙 워크스페이스에 직접 가입할 수 있는 WorkSpaceButton 컴포넌트가 새로 추가되었습니다.
  • 로그인 페이지 개선: LoginPage.tsx에 새로 추가된 워크스페이스 가입 버튼과 함께, 가입 안내 문구가 삽입되어 사용자 경험이 향상되었습니다.
  • 디자인 변경: RankingRow.tsx 파일에서 기존 사용자의 테두리 색상이 border-blue-200에서 border-gray-500으로 변경되었습니다.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@sonarqubecloud
Copy link

@marulog marulog merged commit e991492 into develop Dec 30, 2025
2 checks passed
Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

이번 PR은 로그인 페이지에 워크스페이스 가입 버튼을 추가하고 관련 UI를 개선하는 내용을 담고 있습니다. 전반적으로 좋은 변경이지만, 코드의 유지보수성과 안정성을 높이기 위해 몇 가지 제안 사항을 드립니다.

새로 추가된 WorkSpaceButton 컴포넌트에서는 버튼의 기본 동작으로 인한 예기치 않은 문제를 방지하기 위해 type="button" 속성을 명시하는 것이 중요합니다. 또한, 여러 줄로 된 className을 배열로 관리하여 가독성과 일관성을 높이는 것을 제안합니다.

LoginPage에서는 하드코딩된 INVITE_URL을 환경 변수로 분리하여 관리의 유연성을 높이고, 불필요한 함수 재생성을 막기 위해 이벤트 핸들러에 useCallback을 적용하는 것이 좋겠습니다. 마지막으로 사용자에게 보여지는 안내 문구의 작은 오타를 수정했습니다.

자세한 내용은 각 파일의 주석을 참고해주세요.

Comment on lines +10 to +12
<button
onClick={onClick}
aria-label="워크스페이스 가입하기"

Choose a reason for hiding this comment

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

high

button 요소에 type 속성을 명시하는 것이 좋습니다. type의 기본값은 "submit"이므로, 이 버튼이 <form> 내부에 위치하게 될 경우 의도치 않게 form을 제출할 수 있습니다. type="button"을 추가하여 이러한 예기치 않은 동작을 방지해주세요.

    <button
      type="button"
      onClick={onClick}
      aria-label="워크스페이스 가입하기"

Comment on lines +13 to +24
className="
flex items-center justify-center gap-3
w-[400px] md:w-[480px] max-w-[85%] h-[60px]
bg-white border border-gray-300 rounded-xl

shadow-sm
hover:shadow-md hover:bg-gray-50
active:shadow-sm active:scale-[0.97]

transition-all duration-200 ease-out
select-none
"

Choose a reason for hiding this comment

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

medium

여러 줄의 className 문자열은 가독성을 해치고 잠재적인 공백 문제를 일으킬 수 있습니다. RankingRow.tsx에서 사용된 것처럼 클래스 이름 배열을 join(" ")으로 결합하는 방식을 사용하면 더 깔끔하고 일관성 있는 코드를 유지할 수 있습니다.

      className={[
        "flex items-center justify-center gap-3",
        "w-[400px] md:w-[480px] max-w-[85%] h-[60px]",
        "bg-white border border-gray-300 rounded-xl",
        "shadow-sm",
        "hover:shadow-md hover:bg-gray-50",
        "active:shadow-sm active:scale-[0.97]",
        "transition-all duration-200 ease-out",
        "select-none",
      ].join(" ")}

Comment on lines +8 to +9
const INVITE_URL =
"https://join.slack.com/t/slackjudge/shared_invite/zt-3jvozgq6d-~pNce8kQdm6SFy4InCmryA";

Choose a reason for hiding this comment

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

medium

INVITE_URL과 같은 설정 값은 하드코딩하는 대신 환경 변수로 관리하는 것이 좋습니다. 이렇게 하면 다른 환경(개발, 스테이징, 프로덕션)에서 다른 값을 사용하기 용이하고, 코드를 변경하지 않고도 URL을 업데이트할 수 있어 유지보수성이 향상됩니다. .env 파일에 VITE_SLACK_INVITE_URL과 같은 변수를 추가하고 import.meta.env.VITE_SLACK_INVITE_URL로 불러와 사용해주세요.

Suggested change
const INVITE_URL =
"https://join.slack.com/t/slackjudge/shared_invite/zt-3jvozgq6d-~pNce8kQdm6SFy4InCmryA";
const INVITE_URL = import.meta.env.VITE_SLACK_INVITE_URL;

Comment on lines 13 to +19
const handleSlackLogin = () => {
window.location.href = `https://slack.com/openid/connect/authorize?scope=email openid profile&client_id=${SLACK_CLIENT_ID}&redirect_uri=${SLACK_REDIRECT_URI}&response_type=code`
};

const handleWorkSpace = () => {
window.open(INVITE_URL, "_blank", "noopener,noreferrer");
};

Choose a reason for hiding this comment

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

medium

handleSlackLoginhandleWorkSpace 함수는 컴포넌트가 렌더링될 때마다 새로 생성됩니다. 이 함수들은 props나 state에 의존하지 않으므로 React.useCallback으로 감싸서 불필요한 재생성을 방지하는 것이 성능 최적화에 좋습니다. (파일 상단에 import React from "react"; 추가가 필요할 수 있습니다.)

Suggested change
const handleSlackLogin = () => {
window.location.href = `https://slack.com/openid/connect/authorize?scope=email openid profile&client_id=${SLACK_CLIENT_ID}&redirect_uri=${SLACK_REDIRECT_URI}&response_type=code`
};
const handleWorkSpace = () => {
window.open(INVITE_URL, "_blank", "noopener,noreferrer");
};
const handleSlackLogin = React.useCallback(() => {
window.location.href = `https://slack.com/openid/connect/authorize?scope=email openid profile&client_id=${SLACK_CLIENT_ID}&redirect_uri=${SLACK_REDIRECT_URI}&response_type=code`
}, []);
const handleWorkSpace = React.useCallback(() => {
window.open(INVITE_URL, "_blank", "noopener,noreferrer");
}, []);

</div>

<div className="w-[400px] md:w-[480px] max-w-[85%] text-center text-sm text-gray-400 leading-relaxed">
워크스페이스에 가입한 후, 로그인을 진행해주세요.

Choose a reason for hiding this comment

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

medium

안내 문구에 오타가 있습니다. 쉼표 뒤에 공백이 두 개 들어가 있습니다. 하나로 수정해주세요.

Suggested change
워크스페이스에 가입한 , 로그인을 진행해주세요.
워크스페이스에 가입한 , 로그인을 진행해주세요.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: 워크 스페이스 가입 버튼 추가

1 participant