-
Notifications
You must be signed in to change notification settings - Fork 83
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
feat: implementing fetchBranchList #477
Conversation
@all-contributors please add @ss-won for code |
I've put up a pull request to add @ss-won! 🎉 |
7fd043f
to
90f0f09
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
매우 중요한 기능인데, 작업 감사합니다!!
@@ -20,22 +20,24 @@ import type { IDESentEvents } from "types/IDESentEvents"; | |||
const App = () => { | |||
const initRef = useRef<boolean>(false); | |||
|
|||
const { filteredData, fetchAnalyzedData, loading, setLoading } = useGlobalData(); | |||
const { filteredData, fetchAnalyzedData, fetchBranchList, loading, setLoading } = useGlobalData(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
지금보니, fetch해서 가져온 거니, fetchedBranchList
라고 하면 더 명확할 것 같습니다!
혹은 그냥 branchList
라고 해도 될 듯?
(앞의 것도 fetchedAnalyzedData 로 해야 할것 같긴한데..)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안그래도 이미 fetch해온 response data만 전달받아서 상태 업데이트를 하는 함수에 fetch라는 이름이 좀 어색하다고 생각하긴 했었는데 🤔..마땅히 좋은 이름은 떠오르지 않네요. branchList는 또 state 명칭으로 쓰고 있어서 변수명 중복 이슈가 있고 아래 3안 중에 고민해서 일단 적용해보겠습니다.
- fetchedBranchList, fetchedAnalyzedData
- handleChangeBranchList, handleChangeAnalyzedData
- updateBranchList, updateAnalyzedData
// TODO 초기에 base branch를 fetch해서 적용 | ||
const [selectedBranch, setSelectedBranch] = useState<string>("main"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
넵 이 부분은 빠르게 적용되면 좋겠습니다.
main이 아닌 master가 될 수도 있어서...
혹은 engine에서 넘겨줄 때의 list의 index 0을 쓴다던지? 등의 방법이 있을 것 같네요.
가장 명확한 것은 default는 현재 git이 사용하고 있는 branch가 될 것 같습니다.
filteredRange: DateFilterRange; | ||
filteredData: ClusterNode[]; | ||
selectedData: ClusterNode[]; | ||
setFilteredData: Dispatch<React.SetStateAction<ClusterNode[]>>; | ||
setSelectedData: Dispatch<React.SetStateAction<ClusterNode[]>>; | ||
setFilteredRange: Dispatch<React.SetStateAction<DateFilterRange>>; | ||
fetchAnalyzedData: (analyzedData: ClusterNode[]) => void; | ||
setFilteredData: Dispatch<SetStateAction<ClusterNode[]>>; | ||
setSelectedData: Dispatch<SetStateAction<ClusterNode[]>>; | ||
setFilteredRange: Dispatch<SetStateAction<DateFilterRange>>; | ||
loading: boolean; | ||
setLoading: Dispatch<React.SetStateAction<boolean>>; | ||
}; | ||
setLoading: Dispatch<SetStateAction<boolean>>; | ||
branchList: string[]; | ||
setBranchList: Dispatch<SetStateAction<string[]>>; | ||
selectedBranch: string; | ||
setSelectedBranch: Dispatch<SetStateAction<string>>; | ||
} & IDESentEvents; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
슬슬 요 부분을 정리할 때가 온 것 같습니다 ㅎㅎ
상태관리용 미들웨어가 필요하지 않을까용
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
넵 아무래도 state가 계속 늘어날 가능성이 있고 비동기 작업이 많고, 타입도 좀 더 깔끔하게 관리하기 위해서 상태관리 라이브러리 사용하면 좋을 것 같네요.
가벼운 용량의 zustand나 jotai 사용하면 좋지 않을까 싶은데, 해당 내용 관련 이슈 올려보겠습니다.
import type { IDESentEvents } from "types/IDESentEvents"; | ||
|
||
import fakeData from "../fake-assets/cluster-nodes.json"; | ||
import fakeBranchList from "../fake-assets/branch-list.json"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
#222 도 참고 부탁드립니다! |
const storedBranchList = context.workspaceState.get<string[]>("branchList") ?? []; | ||
context.workspaceState.update( | ||
"branchList", | ||
(await getBranchNames(gitPath, currentWorkspacePath)) ?? storedBranchList | ||
); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
여기 로직 관련해서 질문이 있는데요~
caching되어 있는 branch 관련 데이터가 없다면 getBranchNames 함수를 호출하는 방식으로 해야 하지 않을까요??
const storedBranchList = context.workspaceState.get<string[]>("branchList") ?? []; | |
context.workspaceState.update( | |
"branchList", | |
(await getBranchNames(gitPath, currentWorkspacePath)) ?? storedBranchList | |
); | |
const branchListData = context.workspaceState.get<string[]>("branchList") ?? (await getBranchNames(gitPath, currentWorkspacePath)); | |
context.workspaceState.upsate("branchList", branchListData); |
이런 식으로요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
네네 맞습니다! 짜다보니 caching이 아니라 오류 대체 fallback store 처럼 되어버리긴 했습니다. 🥲
전 일단 기존에 저장된 부분을 previous, 새로 fetching하는 부분을 latest라고 생각했습니다.
현재는 refresh랑 기본 fetch랑 구분이 없다보니..branch list의 상태가 바뀌는 것을 업데이트 하기 위해 매번 fetching 하는 방식 + fetch에 혹시 오류가 있을 경우에는 기존 저장된 previous 값이 있다면 대체하는 방향으로 로직을 작성하였습니다.
어제 잠시 이야기 나눈 대로, refresh랑 fetch part 로직을 분리하는게 좋겠네요! 일단은 단순 fetch 함수에는 말씀하신대로 caching을 적용해 놓겠습니다 :) refresh part 작성 나눠서 같이 진행해봐요~
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cache를 하려면, 기존 데이터가 바뀌지 않았다는 전제가 깔려있어야 하는데,
아직 그걸(브랜치 상태) 모니터링하는 부분이 없어서, 조금 아리까리하네요.
(실제 브랜치 리스트의 변경이 있어도 계속 처음 caching된 데이터만 가져올테니)
일단 브랜치 리스트 가져오는 것이 cost가 큰 작업이 아닌 것 같으니, cache는 추후에 고민해봐도 좋을 것 같습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ss-won
네네! refresh, fetch 로직 분리하는 PR 얼른 올려보도록 할게용
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍🏻👍🏻👍🏻
일단 merge 후 해당 리뷰 내용 반영하겠습니다~ |
Related issue
Result
Work list
Discussion