@tipp/ui 2.1.5 → 2.1.6
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/dist/app/index.cjs.map +1 -1
- package/dist/app/index.js +14 -14
- package/dist/app/platform/coach-question-list.js +2 -2
- package/dist/app/platform/contents-card.js +2 -2
- package/dist/app/platform/curriculum-card.js +2 -2
- package/dist/app/platform/edit-coaching-time.cjs.map +1 -1
- package/dist/app/platform/edit-coaching-time.js +14 -14
- package/dist/app/platform/edit-service-type.cjs.map +1 -1
- package/dist/app/platform/edit-service-type.js +14 -14
- package/dist/app/platform/goal-manage-card-edit.cjs.map +1 -1
- package/dist/app/platform/goal-manage-card-edit.js +14 -14
- package/dist/app/platform/goal-manage-card-read.js +2 -2
- package/dist/app/platform/on-offline-radio-card.cjs.map +1 -1
- package/dist/app/platform/on-offline-radio-card.js +14 -14
- package/dist/app/platform/report-card.js +2 -2
- package/dist/app/platform/reservation-card.cjs.map +1 -1
- package/dist/app/platform/reservation-card.js +14 -14
- package/dist/app/platform/session-card.cjs.map +1 -1
- package/dist/app/platform/session-card.js +14 -14
- package/dist/app/platform/session-review-simple-read.js +2 -2
- package/dist/app/platform/userInfos/coaching-customer-info/index.js +2 -2
- package/dist/app/platform/userInfos/coaching-customer-info/large.js +2 -2
- package/dist/app/platform/userInfos/coaching-customer-info/medium.js +2 -2
- package/dist/app/platform/userInfos/coaching-customer-info/small.js +2 -2
- package/dist/app/platform/userInfos/session-user-info-detail.js +2 -2
- package/dist/app/platform/userInfos/utils.js +2 -2
- package/dist/atoms/index.js +2 -2
- package/dist/atoms/pagination.js +2 -2
- package/dist/chunk-4QIUPPBA.js +123 -0
- package/dist/chunk-4QIUPPBA.js.map +1 -0
- package/dist/chunk-J7CUTDKS.js +59 -0
- package/dist/chunk-J7CUTDKS.js.map +1 -0
- package/dist/chunk-OHA7BIRX.js +61 -0
- package/dist/chunk-OHA7BIRX.js.map +1 -0
- package/dist/chunk-YHT7DP6A.js +89 -0
- package/dist/chunk-YHT7DP6A.js.map +1 -0
- package/dist/chunk-YN4SHJ2O.js +143 -0
- package/dist/chunk-YN4SHJ2O.js.map +1 -0
- package/dist/icon.js +6 -6
- package/dist/icons/index.js +6 -6
- package/dist/index.cjs +9 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +32 -32
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-comp.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-body.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-footer.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-header.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-layout.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-radio.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-option.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-text.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-text.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/complete-review.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.js +4 -4
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-video.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumContents/index.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/index.js +5 -5
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/curriculum-item-title.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/curriculum-sidebar-item-wrapper.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-item.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-title.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumSidebar/index.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumSidebar/index.js +4 -4
- package/dist/molecules/curriculumV2/CurriculumSidebar/sidebar-item.js +2 -2
- package/dist/molecules/curriculumV2/curriculum-context.cjs +9 -2
- package/dist/molecules/curriculumV2/curriculum-context.cjs.map +1 -1
- package/dist/molecules/curriculumV2/curriculum-context.d.cts +2 -0
- package/dist/molecules/curriculumV2/curriculum-context.d.ts +2 -0
- package/dist/molecules/curriculumV2/curriculum-context.js +1 -1
- package/dist/molecules/curriculumV2/curriculum-sub-nav.cjs.map +1 -1
- package/dist/molecules/curriculumV2/curriculum-sub-nav.js +4 -4
- package/dist/molecules/curriculumV2/curriculum-v2-layout.js +2 -2
- package/dist/molecules/curriculumV2/index.cjs +9 -2
- package/dist/molecules/curriculumV2/index.cjs.map +1 -1
- package/dist/molecules/curriculumV2/index.js +7 -7
- package/dist/molecules/date-picker/date-picker-button.js +2 -2
- package/dist/molecules/date-picker/index.js +2 -2
- package/dist/molecules/expand-table/index.js +3 -3
- package/dist/molecules/expand-table/row.js +2 -2
- package/dist/molecules/index.cjs +9 -2
- package/dist/molecules/index.cjs.map +1 -1
- package/dist/molecules/index.js +27 -27
- package/dist/molecules/navigation.js +2 -2
- package/dist/molecules/radio-button-card.js +2 -2
- package/dist/molecules/stepper.js +2 -2
- package/dist/molecules/tag-selector.js +2 -2
- package/dist/molecules/time-select.js +2 -2
- package/dist/utils/curriculum.utils.js +2 -2
- package/package.json +1 -1
- package/src/molecules/curriculumV2/curriculum-context.tsx +16 -2
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
CurriculumSidebar
|
|
3
|
-
} from "../../../chunk-
|
|
3
|
+
} from "../../../chunk-OHA7BIRX.js";
|
|
4
4
|
import "../../../chunk-OSM7B4AJ.js";
|
|
5
5
|
import "../../../chunk-LRKARLHL.js";
|
|
6
6
|
import "../../../chunk-4BKYFOTB.js";
|
|
7
7
|
import "../../../chunk-22HJDAZH.js";
|
|
8
8
|
import "../../../chunk-HFXODPRR.js";
|
|
9
|
-
import "../../../chunk-
|
|
9
|
+
import "../../../chunk-YN4SHJ2O.js";
|
|
10
10
|
import "../../../chunk-AI7EZKUN.js";
|
|
11
11
|
import "../../../chunk-A6W2ZWYA.js";
|
|
12
12
|
import "../../../chunk-QD5ZSFPG.js";
|
|
@@ -70,18 +70,18 @@ import "../../../chunk-LQY4RKWI.js";
|
|
|
70
70
|
import "../../../chunk-ZD7MNMED.js";
|
|
71
71
|
import "../../../chunk-53ZVUOHV.js";
|
|
72
72
|
import "../../../chunk-VY56ZADJ.js";
|
|
73
|
-
import "../../../chunk-2TPQQBUQ.js";
|
|
74
73
|
import "../../../chunk-HLFTU725.js";
|
|
75
74
|
import "../../../chunk-XD3KUE4Q.js";
|
|
76
75
|
import "../../../chunk-MEKWBVXE.js";
|
|
77
76
|
import "../../../chunk-PVL7SJYR.js";
|
|
78
|
-
import "../../../chunk-25Q6QLSN.js";
|
|
79
77
|
import "../../../chunk-TPEIE4IP.js";
|
|
80
78
|
import "../../../chunk-XSX6K7SK.js";
|
|
81
79
|
import "../../../chunk-UQN63IRS.js";
|
|
82
80
|
import "../../../chunk-K25BYIJ7.js";
|
|
83
81
|
import "../../../chunk-ECVAWQXV.js";
|
|
84
82
|
import "../../../chunk-D7EYDD4E.js";
|
|
83
|
+
import "../../../chunk-2TPQQBUQ.js";
|
|
84
|
+
import "../../../chunk-25Q6QLSN.js";
|
|
85
85
|
import "../../../chunk-J242TTFH.js";
|
|
86
86
|
import "../../../chunk-EAXUQEO5.js";
|
|
87
87
|
import "../../../chunk-2NMEKWO5.js";
|
|
@@ -68,18 +68,18 @@ import "../../../chunk-LQY4RKWI.js";
|
|
|
68
68
|
import "../../../chunk-ZD7MNMED.js";
|
|
69
69
|
import "../../../chunk-53ZVUOHV.js";
|
|
70
70
|
import "../../../chunk-VY56ZADJ.js";
|
|
71
|
-
import "../../../chunk-2TPQQBUQ.js";
|
|
72
71
|
import "../../../chunk-HLFTU725.js";
|
|
73
72
|
import "../../../chunk-XD3KUE4Q.js";
|
|
74
73
|
import "../../../chunk-MEKWBVXE.js";
|
|
75
74
|
import "../../../chunk-PVL7SJYR.js";
|
|
76
|
-
import "../../../chunk-25Q6QLSN.js";
|
|
77
75
|
import "../../../chunk-TPEIE4IP.js";
|
|
78
76
|
import "../../../chunk-XSX6K7SK.js";
|
|
79
77
|
import "../../../chunk-UQN63IRS.js";
|
|
80
78
|
import "../../../chunk-K25BYIJ7.js";
|
|
81
79
|
import "../../../chunk-ECVAWQXV.js";
|
|
82
80
|
import "../../../chunk-D7EYDD4E.js";
|
|
81
|
+
import "../../../chunk-2TPQQBUQ.js";
|
|
82
|
+
import "../../../chunk-25Q6QLSN.js";
|
|
83
83
|
import "../../../chunk-J242TTFH.js";
|
|
84
84
|
import "../../../chunk-EAXUQEO5.js";
|
|
85
85
|
import "../../../chunk-2NMEKWO5.js";
|
|
@@ -38,7 +38,8 @@ function CurriculumProvider(props) {
|
|
|
38
38
|
onReviewValueChange,
|
|
39
39
|
curriculumReviewAnswers,
|
|
40
40
|
tempCurriculumReviewAnswers,
|
|
41
|
-
curriculumCompleteMap
|
|
41
|
+
curriculumCompleteMap,
|
|
42
|
+
onChangeSelectedContent
|
|
42
43
|
} = props;
|
|
43
44
|
const sidebarRef = (0, import_react.useRef)(null);
|
|
44
45
|
const scrollNavItem = (0, import_react.useCallback)((index) => {
|
|
@@ -112,11 +113,17 @@ function CurriculumProvider(props) {
|
|
|
112
113
|
},
|
|
113
114
|
[list, selectedIndexState]
|
|
114
115
|
);
|
|
116
|
+
const selectedItem = (0, import_react.useMemo)(() => {
|
|
117
|
+
return list[selectedIndexState];
|
|
118
|
+
}, [list, selectedIndexState]);
|
|
115
119
|
const selectedSectionTitle = (0, import_react.useMemo)(() => {
|
|
116
120
|
var _a2;
|
|
117
121
|
const prevItems = list.slice(0, selectedIndexState).reverse();
|
|
118
122
|
return (_a2 = prevItems.find((item) => item.type === "sectionTitle")) != null ? _a2 : null;
|
|
119
123
|
}, [list, selectedIndexState]);
|
|
124
|
+
(0, import_react.useEffect)(() => {
|
|
125
|
+
onChangeSelectedContent == null ? void 0 : onChangeSelectedContent(selectedItem);
|
|
126
|
+
}, [selectedItem]);
|
|
120
127
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CurriculumContext.Provider, { value: {
|
|
121
128
|
curriculum,
|
|
122
129
|
scrollNavItem,
|
|
@@ -128,7 +135,7 @@ function CurriculumProvider(props) {
|
|
|
128
135
|
selectPrev,
|
|
129
136
|
selectNext,
|
|
130
137
|
selectedSectionTitle,
|
|
131
|
-
selectedItem
|
|
138
|
+
selectedItem,
|
|
132
139
|
scrollAreaRef: sidebarRef,
|
|
133
140
|
onReviewSubmit,
|
|
134
141
|
onReviewValueChange,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/molecules/curriculumV2/curriculum-context.tsx"],"sourcesContent":["import React, {\n createContext,\n useContext,\n useState,\n useMemo,\n useCallback,\n useRef,\n} from 'react';\nimport { \n type CurriculumSectionTitleContents,\n} from '@/types/curriculumContents.type';\nimport type { Curriculum, CurriculumListContents } from '@/types/curriculum.type';\n\n\nexport interface CurriculumContextValue {\n curriculum: Curriculum;\n selectedIndex: number;\n setSelectedIndex: (idx: number) => void;\n selectedId: string;\n hasPrev: boolean;\n hasNext: boolean;\n selectPrev: (cb?: (moveIndex: number) => void) => void;\n selectNext: (cb?: (moveIndex: number) => void) => void;\n selectedItem: CurriculumListContents;\n /** 선택된 아이템의 이전 아이템 중 가장 가까운 섹션 타이틀 */\n selectedSectionTitle: CurriculumSectionTitleContents | null;\n /** 컨텐츠 목록 스크롤 이동 함수 */\n scrollNavItem: (uuid: string) => void;\n /** 스크롤 영역 참조 */\n scrollAreaRef: React.RefObject<HTMLDivElement | null>;\n /** 리뷰 제출 함수 */\n onReviewSubmit: ({\n reviewId,\n answer,\n }: {\n reviewId: string;\n answer: Record<string, string>;\n }) => Promise<boolean>;\n /** 리뷰 응답 값 변경 시 호출 */\n onReviewValueChange: ({\n reviewId,\n answer,\n }: {\n reviewId: string;\n answer: Record<string, string>;\n }) => void;\n /** 과제 완료 후 저장된 값 */\n curriculumReviewAnswers: Record<string, string>;\n /** 과제 완료 전 임시 저장된 값 */\n tempCurriculumReviewAnswers: Record<string, string>; \n /** 항목 수강 완료 여부 */\n curriculumCompleteMap: Record<string, boolean>;\n}\n\nconst CurriculumContext = createContext<CurriculumContextValue | undefined>(\n undefined\n);\n\nexport interface CurriculumProviderProps extends Pick<CurriculumContextValue, 'curriculum' | 'onReviewSubmit' | 'onReviewValueChange' | 'curriculumReviewAnswers' | 'tempCurriculumReviewAnswers' | 'curriculumCompleteMap'> {\n children: React.ReactNode; \n onReviewValueChange: ({\n reviewId,\n answer,\n }: {\n reviewId: string;\n answer: Record<string, string>;\n }) => void; \n}\n\nexport function CurriculumProvider(props: CurriculumProviderProps): React.ReactElement {\n const {\n children,\n curriculum,\n onReviewSubmit, \n onReviewValueChange,\n curriculumReviewAnswers,\n tempCurriculumReviewAnswers, \n curriculumCompleteMap\n } = props;\n const sidebarRef = useRef<HTMLDivElement>(null);\n\n const scrollNavItem = useCallback((index: string) => {\n const element = sidebarRef.current?.querySelector(\n `[data-curriculum-item-index=\"${index}\"]`\n );\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n }, []);\n\n const list = curriculum.contents.list;\n // 선택 가능한 인덱스만 추출\n const selectableIndexes = useMemo(\n () =>\n list\n .map((item, i) => (item.type !== 'sectionTitle' ? i : null))\n .filter((i): i is number => i !== null),\n [list]\n );\n // 최초 선택값: 첫 번째 선택 가능한 인덱스\n const [selectedIndexState, setSelectedIndexState] = useState<number>(\n selectableIndexes[0] ?? 0\n );\n\n // 선택 인덱스 보정 함수\n const setSelectedIndex = useCallback(\n (idx: number) => {\n if (selectableIndexes.includes(idx)) {\n setSelectedIndexState(idx);\n } else {\n // idx가 선택 불가면, selectableIndexes에서 가장 가까운 다음 인덱스 선택\n const next = selectableIndexes.find((i) => i > idx);\n const prev = [...selectableIndexes].reverse().find((i) => i < idx);\n if (next !== undefined) setSelectedIndexState(next);\n else if (prev !== undefined) setSelectedIndexState(prev);\n }\n },\n [selectableIndexes]\n );\n\n // 현재 선택 인덱스가 selectableIndexes 내 몇 번째인지\n const selectablePos = useMemo(\n () => selectableIndexes.indexOf(selectedIndexState),\n [selectableIndexes, selectedIndexState]\n );\n const hasPrev = selectablePos > 0;\n const hasNext = selectablePos < selectableIndexes.length - 1;\n\n const selectPrev = useCallback(\n (cb?: (moveIndex: number) => void) => {\n setSelectedIndexState((cur) => {\n let prevIndex = cur;\n const pos = selectableIndexes.indexOf(cur);\n if (pos > 0) {\n prevIndex = selectableIndexes[pos - 1];\n }\n if (cb) cb(prevIndex);\n return prevIndex;\n });\n },\n [selectableIndexes]\n );\n const selectNext = useCallback(\n (cb?: (moveIndex: number) => void) => {\n setSelectedIndexState((cur) => {\n let nextIndex = cur;\n const pos = selectableIndexes.indexOf(cur);\n if (pos < selectableIndexes.length - 1) {\n nextIndex = selectableIndexes[pos + 1];\n }\n if (cb) cb(nextIndex);\n return nextIndex;\n });\n },\n [selectableIndexes]\n );\n\n const selectedId = useMemo(\n () => list[selectedIndexState]?.uuid ?? '',\n [list, selectedIndexState]\n );\n\n const selectedSectionTitle = useMemo(() => {\n // selectedIndexState 이전 인덱스 중 가장 가까운 섹션 타이틀 찾기\n const prevItems = list.slice(0, selectedIndexState).reverse();\n return prevItems.find((item) => item.type === 'sectionTitle') ?? null;\n }, [list, selectedIndexState]);\n \n\n return (\n <CurriculumContext.Provider value={{\n curriculum,\n scrollNavItem,\n selectedIndex: selectedIndexState,\n setSelectedIndex,\n selectedId,\n hasPrev,\n hasNext,\n selectPrev,\n selectNext,\n selectedSectionTitle,\n selectedItem
|
|
1
|
+
{"version":3,"sources":["../../../src/molecules/curriculumV2/curriculum-context.tsx"],"sourcesContent":["import React, {\n createContext,\n useContext,\n useState,\n useMemo,\n useCallback,\n useRef,\n useEffect,\n} from 'react';\nimport { \n type CurriculumSectionTitleContents,\n} from '@/types/curriculumContents.type';\nimport type { Curriculum, CurriculumListContents } from '@/types/curriculum.type';\n\n\nexport interface CurriculumContextValue {\n curriculum: Curriculum;\n selectedIndex: number;\n setSelectedIndex: (idx: number) => void;\n selectedId: string;\n hasPrev: boolean;\n hasNext: boolean;\n selectPrev: (cb?: (moveIndex: number) => void) => void;\n selectNext: (cb?: (moveIndex: number) => void) => void;\n selectedItem: CurriculumListContents;\n /** 선택된 아이템의 이전 아이템 중 가장 가까운 섹션 타이틀 */\n selectedSectionTitle: CurriculumSectionTitleContents | null;\n /** 컨텐츠 목록 스크롤 이동 함수 */\n scrollNavItem: (uuid: string) => void;\n /** 스크롤 영역 참조 */\n scrollAreaRef: React.RefObject<HTMLDivElement | null>;\n /** 리뷰 제출 함수 */\n onReviewSubmit: ({\n reviewId,\n answer,\n }: {\n reviewId: string;\n answer: Record<string, string>;\n }) => Promise<boolean>;\n /** 리뷰 응답 값 변경 시 호출 */\n onReviewValueChange: ({\n reviewId,\n answer,\n }: {\n reviewId: string;\n answer: Record<string, string>;\n }) => void;\n /** 과제 완료 후 저장된 값 */\n curriculumReviewAnswers: Record<string, string>;\n /** 과제 완료 전 임시 저장된 값 */\n tempCurriculumReviewAnswers: Record<string, string>; \n /** 항목 수강 완료 여부 */\n curriculumCompleteMap: Record<string, boolean>;\n}\n\nconst CurriculumContext = createContext<CurriculumContextValue | undefined>(\n undefined\n);\n\nexport interface CurriculumProviderProps extends Pick<CurriculumContextValue, 'curriculum' | 'onReviewSubmit' | 'onReviewValueChange' | 'curriculumReviewAnswers' | 'tempCurriculumReviewAnswers' | 'curriculumCompleteMap'> {\n children: React.ReactNode; \n onReviewValueChange: ({\n reviewId,\n answer,\n }: {\n reviewId: string;\n answer: Record<string, string>;\n }) => void; \n\n /** 현재 화면에 표시 중인 컨텐츠 인덱스 변경 시 호출 */\n onChangeSelectedContent?: (item: CurriculumListContents) => void;\n}\n\nexport function CurriculumProvider(props: CurriculumProviderProps): React.ReactElement {\n const {\n children,\n curriculum,\n onReviewSubmit, \n onReviewValueChange,\n curriculumReviewAnswers,\n tempCurriculumReviewAnswers, \n curriculumCompleteMap,\n onChangeSelectedContent\n } = props;\n const sidebarRef = useRef<HTMLDivElement>(null);\n\n const scrollNavItem = useCallback((index: string) => {\n const element = sidebarRef.current?.querySelector(\n `[data-curriculum-item-index=\"${index}\"]`\n );\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n }, []);\n\n const list = curriculum.contents.list;\n // 선택 가능한 인덱스만 추출\n const selectableIndexes = useMemo(\n () =>\n list\n .map((item, i) => (item.type !== 'sectionTitle' ? i : null))\n .filter((i): i is number => i !== null),\n [list]\n );\n // 최초 선택값: 첫 번째 선택 가능한 인덱스\n const [selectedIndexState, setSelectedIndexState] = useState<number>(\n selectableIndexes[0] ?? 0\n );\n\n // 선택 인덱스 보정 함수\n const setSelectedIndex = useCallback(\n (idx: number) => {\n if (selectableIndexes.includes(idx)) {\n setSelectedIndexState(idx);\n } else {\n // idx가 선택 불가면, selectableIndexes에서 가장 가까운 다음 인덱스 선택\n const next = selectableIndexes.find((i) => i > idx);\n const prev = [...selectableIndexes].reverse().find((i) => i < idx);\n if (next !== undefined) setSelectedIndexState(next);\n else if (prev !== undefined) setSelectedIndexState(prev);\n }\n },\n [selectableIndexes]\n );\n\n // 현재 선택 인덱스가 selectableIndexes 내 몇 번째인지\n const selectablePos = useMemo(\n () => selectableIndexes.indexOf(selectedIndexState),\n [selectableIndexes, selectedIndexState]\n );\n const hasPrev = selectablePos > 0;\n const hasNext = selectablePos < selectableIndexes.length - 1;\n\n const selectPrev = useCallback(\n (cb?: (moveIndex: number) => void) => {\n setSelectedIndexState((cur) => {\n let prevIndex = cur;\n const pos = selectableIndexes.indexOf(cur);\n if (pos > 0) {\n prevIndex = selectableIndexes[pos - 1];\n }\n if (cb) cb(prevIndex);\n return prevIndex;\n });\n },\n [selectableIndexes]\n );\n const selectNext = useCallback(\n (cb?: (moveIndex: number) => void) => {\n setSelectedIndexState((cur) => {\n let nextIndex = cur;\n const pos = selectableIndexes.indexOf(cur);\n if (pos < selectableIndexes.length - 1) {\n nextIndex = selectableIndexes[pos + 1];\n }\n if (cb) cb(nextIndex);\n return nextIndex;\n });\n },\n [selectableIndexes]\n );\n\n const selectedId = useMemo(\n () => list[selectedIndexState]?.uuid ?? '',\n [list, selectedIndexState]\n );\n\n const selectedItem = useMemo(()=>{\n return list[selectedIndexState];\n },[list,selectedIndexState])\n\n const selectedSectionTitle = useMemo(() => {\n // selectedIndexState 이전 인덱스 중 가장 가까운 섹션 타이틀 찾기\n const prevItems = list.slice(0, selectedIndexState).reverse();\n return prevItems.find((item) => item.type === 'sectionTitle') ?? null;\n }, [list, selectedIndexState]);\n \n\n useEffect(()=>{\n onChangeSelectedContent?.(selectedItem);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- useEffect 호출 최적화\n },[selectedItem])\n\n return (\n <CurriculumContext.Provider value={{\n curriculum,\n scrollNavItem,\n selectedIndex: selectedIndexState,\n setSelectedIndex,\n selectedId,\n hasPrev,\n hasNext,\n selectPrev,\n selectNext,\n selectedSectionTitle,\n selectedItem,\n scrollAreaRef: sidebarRef,\n onReviewSubmit, \n onReviewValueChange,\n curriculumReviewAnswers,\n tempCurriculumReviewAnswers, \n curriculumCompleteMap\n }}>\n {children}\n </CurriculumContext.Provider>\n );\n}\n\nexport function useCurriculumContext(): CurriculumContextValue {\n const ctx = useContext(CurriculumContext);\n if (!ctx)\n throw new Error(\n 'useCurriculumContext must be used within CurriculumProvider'\n );\n return ctx;\n}\n"],"mappings":"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","names":["_a"]}
|
|
@@ -41,6 +41,8 @@ interface CurriculumProviderProps extends Pick<CurriculumContextValue, 'curricul
|
|
|
41
41
|
reviewId: string;
|
|
42
42
|
answer: Record<string, string>;
|
|
43
43
|
}) => void;
|
|
44
|
+
/** 현재 화면에 표시 중인 컨텐츠 인덱스 변경 시 호출 */
|
|
45
|
+
onChangeSelectedContent?: (item: CurriculumListContents) => void;
|
|
44
46
|
}
|
|
45
47
|
declare function CurriculumProvider(props: CurriculumProviderProps): React__default.ReactElement;
|
|
46
48
|
declare function useCurriculumContext(): CurriculumContextValue;
|
|
@@ -41,6 +41,8 @@ interface CurriculumProviderProps extends Pick<CurriculumContextValue, 'curricul
|
|
|
41
41
|
reviewId: string;
|
|
42
42
|
answer: Record<string, string>;
|
|
43
43
|
}) => void;
|
|
44
|
+
/** 현재 화면에 표시 중인 컨텐츠 인덱스 변경 시 호출 */
|
|
45
|
+
onChangeSelectedContent?: (item: CurriculumListContents) => void;
|
|
44
46
|
}
|
|
45
47
|
declare function CurriculumProvider(props: CurriculumProviderProps): React__default.ReactElement;
|
|
46
48
|
declare function useCurriculumContext(): CurriculumContextValue;
|