@ihabdevteam/core 0.9.0 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/components.cjs.js +11 -11
- package/dist/components.esm.js +13 -13
- package/dist/hooks.cjs.js +154 -154
- package/dist/hooks.esm.js +154 -154
- package/dist/ihabdevteam-core.cjs.js +13 -13
- package/dist/ihabdevteam-core.d.ts +10 -6
- package/dist/ihabdevteam-core.esm.js +15 -15
- package/dist/packages/core/src/components.d.ts +2 -0
- package/dist/packages/core/src/components.js +8 -0
- package/dist/packages/core/src/hooks/useDailyTrainingSelection.js +8 -1
- package/dist/packages/core/src/hooks/useVisitAllPanel.js +12 -5
- package/package.json +1 -1
|
@@ -230,8 +230,10 @@ export type { ConfirmPopupProps } from './components/Popup/ConfirmPopup';
|
|
|
230
230
|
export { default as CouponInputPopup } from './components/Popup/CouponInputPopup';
|
|
231
231
|
export type { CouponInputPopupProps } from './components/Popup/CouponInputPopup';
|
|
232
232
|
export { default as MenuTooltip } from './components/Tooltip/MenuTooltip';
|
|
233
|
+
export { default as InfoTooltip } from './components/Tooltip/InfoTooltip';
|
|
233
234
|
export { default as TooltipInfo } from './components/Tooltip/InfoTooltip';
|
|
234
235
|
export { default as DescriptionTooltip } from './components/Tooltip/DescriptionTooltip';
|
|
236
|
+
export { default as TextBoxTooltip } from './components/Tooltip/TextBoxTooltip';
|
|
235
237
|
export { default as TooltipTextBox } from './components/Tooltip/TextBoxTooltip';
|
|
236
238
|
export { default as TrainingTooltip, TRAINING_TOOLTIP_HOVER_DELAY_MS } from './components/Tooltip/TrainingTooltip';
|
|
237
239
|
export type { TooltipTrainingProps } from './components/Tooltip/TrainingTooltip';
|
|
@@ -164,10 +164,18 @@ export { default as ListPopup } from './components/Popup/ListPopup';
|
|
|
164
164
|
export { default as ConfirmPopup } from './components/Popup/ConfirmPopup';
|
|
165
165
|
export { default as CouponInputPopup } from './components/Popup/CouponInputPopup';
|
|
166
166
|
export { default as MenuTooltip } from './components/Tooltip/MenuTooltip';
|
|
167
|
+
export { default as InfoTooltip } from './components/Tooltip/InfoTooltip';
|
|
168
|
+
/* 배럴 이름이 파일명과 뒤집혀 있었다(TooltipInfo). 소비자가 그것을 알아채고
|
|
169
|
+
`import { TooltipInfo as InfoTooltip }` 로 도로 바꿔 쓰고 있었다 — 이름이 틀렸다는
|
|
170
|
+
가장 분명한 증거다. 파일명·형제 컴포넌트(DescriptionTooltip, MenuTooltip)와 맞췄다.
|
|
171
|
+
옛 이름은 깨뜨리지 않으려고 남겨둔다. 소비자가 다 옮기면 지운다. */
|
|
167
172
|
export { default as TooltipInfo } from './components/Tooltip/InfoTooltip';
|
|
168
173
|
/* 제목 + 사유 목록을 띄우는 툴팁. 컴포넌트는 진작 있었는데 배럴에 없어 소비자가
|
|
169
174
|
쓸 수 없었다(어드민이 '왜 재생성 권고인지'를 이걸로 알린다). */
|
|
170
175
|
export { default as DescriptionTooltip } from './components/Tooltip/DescriptionTooltip';
|
|
176
|
+
export { default as TextBoxTooltip } from './components/Tooltip/TextBoxTooltip';
|
|
177
|
+
/* 같은 까닭. 이쪽은 옛 이름을 쓰는 소비자가 한 곳도 없어(실측 0건) 원래는 그냥
|
|
178
|
+
바꿔도 됐지만, 짝이 되는 InfoTooltip 과 다르게 다룰 까닭이 없어 나란히 남긴다. */
|
|
171
179
|
export { default as TooltipTextBox } from './components/Tooltip/TextBoxTooltip';
|
|
172
180
|
export { default as TrainingTooltip, TRAINING_TOOLTIP_HOVER_DELAY_MS } from './components/Tooltip/TrainingTooltip';
|
|
173
181
|
export { default as EffectPartyPopper } from './components/Effect/EffectPartyPopper';
|
|
@@ -18,6 +18,12 @@ export function useDailyTrainingSelection(userId) {
|
|
|
18
18
|
const yesterdayRef = useRef(null);
|
|
19
19
|
const [loaded, setLoaded] = useState(false);
|
|
20
20
|
const [showYesterday, setShowYesterday] = useState(false);
|
|
21
|
+
// 선택을 ref 에 담으면 바뀌어도 리렌더가 없다. loaded 만으로는 신호가 안 되는데,
|
|
22
|
+
// 두 번째 이후 계산에서는 이미 true 라 setLoaded(true) 가 그대로 빠져나가기 때문이다.
|
|
23
|
+
// 그 경우가 로그인 직후다: userId 가 undefined → 실제 id 로 바뀌면 refs 는 그 사람의
|
|
24
|
+
// 선택으로 갱신되지만 화면은 익명 선택을 계속 보여준다(실측: 모두가 같은 묶음을 받음).
|
|
25
|
+
// 계산이 끝날 때마다 올리는 이 값이 리렌더를 보장한다.
|
|
26
|
+
const [revision, setRevision] = useState(0);
|
|
21
27
|
useEffect(() => {
|
|
22
28
|
let cancelled = false;
|
|
23
29
|
let timer;
|
|
@@ -38,6 +44,7 @@ export function useDailyTrainingSelection(userId) {
|
|
|
38
44
|
todayRef.current = sel.today;
|
|
39
45
|
yesterdayRef.current = sel.yesterday;
|
|
40
46
|
setLoaded(true);
|
|
47
|
+
setRevision(n => n + 1);
|
|
41
48
|
cancelled = true;
|
|
42
49
|
stop();
|
|
43
50
|
};
|
|
@@ -82,6 +89,6 @@ export function useDailyTrainingSelection(userId) {
|
|
|
82
89
|
? src[typeKey]
|
|
83
90
|
: (fallback?.[typeKey]?.length ? fallback[typeKey] : undefined);
|
|
84
91
|
return pick;
|
|
85
|
-
}, [showYesterday]);
|
|
92
|
+
}, [showYesterday, revision]);
|
|
86
93
|
return { loaded, showYesterday, setShowYesterday, getTrainingPerType };
|
|
87
94
|
}
|
|
@@ -26,16 +26,23 @@ export function useVisitAllPanel(mergedVisits) {
|
|
|
26
26
|
return true;
|
|
27
27
|
}), [mergedVisits, vapSearch, vapStatus]);
|
|
28
28
|
const vapTotal = Math.max(1, Math.ceil(vapFiltered.length / Number(vapPageSize)));
|
|
29
|
-
//
|
|
29
|
+
// 결과가 줄면 지금 쪽이 총 쪽수를 넘는다. 자르는 자리에서는 진작 조이고 있었는데
|
|
30
|
+
// **돌려주는 vapPage 는 날것이었다** — 그래서 쪽 표시에 그대로 넣으면 "3 / 1" 처럼
|
|
31
|
+
// 없는 쪽이 떴다. 찾기 칸은 그 자리에서 쪽을 1로 되돌려 줘서 가려져 있었고, 목록이
|
|
32
|
+
// 밖에서 줄어드는 길(다른 고객으로 바뀜·서버가 다시 준 목록)에서 드러났다.
|
|
33
|
+
//
|
|
34
|
+
// 상태는 손대지 않고 돌려주는 값만 조인다. 상태는 "어디로 가려 했나"(의도)이고
|
|
35
|
+
// 돌려주는 값은 "지금 어디인가"(사실)다. 그래서 setVapPage 의 뜻이 안 바뀌어
|
|
36
|
+
// 소비자를 깨뜨리지 않고, 줄었다 늘어나면 원래 보던 쪽으로 돌아온다.
|
|
37
|
+
const vapPageClamped = Math.min(vapPage, vapTotal);
|
|
30
38
|
const vapPageItems = useMemo(() => {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}, [vapFiltered, vapPage, vapPageSize, vapTotal]);
|
|
39
|
+
return vapFiltered.slice((vapPageClamped - 1) * Number(vapPageSize), vapPageClamped * Number(vapPageSize));
|
|
40
|
+
}, [vapFiltered, vapPageClamped, vapPageSize]);
|
|
34
41
|
return {
|
|
35
42
|
vapSearch, setVapSearch,
|
|
36
43
|
vapPageSize, setVapPageSize,
|
|
37
44
|
vapStatus, setVapStatus,
|
|
38
|
-
vapPage, setVapPage,
|
|
45
|
+
vapPage: vapPageClamped, setVapPage,
|
|
39
46
|
vapFiltered,
|
|
40
47
|
vapTotal,
|
|
41
48
|
vapPageItems,
|