Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0b26613f6e | |||
| 72180e0ea1 |
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "lms",
|
||||
"version": "1.0.15",
|
||||
"version": "1.0.18",
|
||||
"description": "Autonomy Studio LMS Electron app",
|
||||
"main": "./out/main/index.js",
|
||||
"author": {
|
||||
|
||||
@@ -655,8 +655,6 @@ function LocalPcWorkspaceMockup({
|
||||
const studentSlug = makeStudentSlug(studentEmail)
|
||||
const clonePathPreview = makePlatformWorkspaceRoot(configuredWorkspaceRoot, studentSlug, weekNumber, platformKey)
|
||||
const remoteRuntimeRoot = `/tmp/autonomy-studio/sessions/${`${platformId}-${studentSlug}-week-${weekNumber}`.replace(/[^a-zA-Z0-9_.-]+/g, '-')}`
|
||||
const draftClonePathPreview = makePlatformWorkspaceRoot(configuredDraftWorkspaceRoot, studentSlug, weekNumber, platformKey)
|
||||
const draftGiteaRepositoryPreview = `${sourceSettingsDraft.giteaBaseUrl.replace(/\/+$/, '')}/${sourceSettingsDraft.giteaOwner}/${studentSlug}-week-${weekNumber}.git`
|
||||
const {
|
||||
visualizationStacks,
|
||||
visualizationStack,
|
||||
@@ -1415,8 +1413,8 @@ function LocalPcWorkspaceMockup({
|
||||
workspaceRoot: remoteWorkspace
|
||||
? platformSourceSettingsDefaults.workspaceRoot
|
||||
: sourceSettingsDraft.workspaceRoot.trim() || defaultStudioSourceSettings.workspaceRoot,
|
||||
giteaBaseUrl: sourceSettingsDraft.giteaBaseUrl.trim().replace(/\/+$/, '') || defaultStudioSourceSettings.giteaBaseUrl,
|
||||
giteaOwner: sourceSettingsDraft.giteaOwner.trim() || defaultStudioSourceSettings.giteaOwner,
|
||||
giteaBaseUrl: sourceSettings.giteaBaseUrl,
|
||||
giteaOwner: sourceSettings.giteaOwner,
|
||||
gpuEnabled: sourceSettingsDraft.gpuEnabled,
|
||||
rosDomainId: sourceSettingsDraft.rosDomainId.trim() || defaultStudioSourceSettings.rosDomainId
|
||||
})
|
||||
@@ -2418,8 +2416,6 @@ function LocalPcWorkspaceMockup({
|
||||
configuredDraftWorkspaceRoot={configuredDraftWorkspaceRoot}
|
||||
sourceSettingsDraft={sourceSettingsDraft}
|
||||
platformSourceSettingsDefaults={platformSourceSettingsDefaults}
|
||||
draftClonePathPreview={draftClonePathPreview}
|
||||
draftGiteaRepositoryPreview={draftGiteaRepositoryPreview}
|
||||
onUpdateSourceSetting={updateSourceSetting}
|
||||
onResetSourceSettings={setSourceSettingsDraft}
|
||||
onSaveSourceSettings={saveSourceSettings}
|
||||
@@ -3013,8 +3009,9 @@ export default function App(): React.JSX.Element {
|
||||
|
||||
useEffect(() => {
|
||||
if (!courseSelectionVisible) return
|
||||
if (studentCoursesLoaded || studentCoursesLoading) return
|
||||
void loadStudentCourses({ autoSelectSingle: false })
|
||||
}, [courseSelectionVisible, loadStudentCourses])
|
||||
}, [courseSelectionVisible, loadStudentCourses, studentCoursesLoaded, studentCoursesLoading])
|
||||
|
||||
const loadCurriculum = useCallback(async (): Promise<void> => {
|
||||
if (!authReady || !studentCoursesLoaded || courseSelectionVisible || !selectedCourseId) return
|
||||
@@ -4068,10 +4065,7 @@ export default function App(): React.JSX.Element {
|
||||
activeLearningStep={activeLearningStep}
|
||||
allowFutureLearningSteps={publicGuideCourseActive}
|
||||
onLearningStepSelect={publicGuideCourseActive ? setActiveLearningStep : undefined}
|
||||
onSubmissionRecorded={() => {
|
||||
setCurriculumRefreshSignal((current) => current + 1)
|
||||
void loadStudentCourses({ autoSelectSingle: false })
|
||||
}}
|
||||
onSubmissionRecorded={() => undefined}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
|
||||
@@ -87,7 +87,7 @@ const LAUNCHER_API_BASE_URL = NOTIFICATION_API_BASE_URL.replace(/\/api$/, '')
|
||||
const LMS_AUTH_SESSION_STORAGE_KEY = 'autonomy-studio.lms.auth-session'
|
||||
const NOTIFICATION_DROPDOWN_LIMIT = 10
|
||||
const NOTIFICATION_MODAL_PAGE_SIZE = 8
|
||||
const NOTIFICATION_REFRESH_INTERVAL_MS = 10_000
|
||||
const NOTIFICATION_REFRESH_INTERVAL_MS = 60_000
|
||||
|
||||
const normalizeNotification = (notification: NotificationMessage): NotificationMessage => ({
|
||||
...notification,
|
||||
|
||||
@@ -10,8 +10,6 @@ type Props = {
|
||||
configuredDraftWorkspaceRoot: string
|
||||
sourceSettingsDraft: StudioSourceSettings
|
||||
platformSourceSettingsDefaults: StudioSourceSettings
|
||||
draftClonePathPreview: string
|
||||
draftGiteaRepositoryPreview: string
|
||||
onUpdateSourceSetting: <Key extends keyof StudioSourceSettings>(key: Key, value: StudioSourceSettings[Key]) => void
|
||||
onResetSourceSettings: (settings: StudioSourceSettings) => void
|
||||
onSaveSourceSettings: () => void
|
||||
@@ -26,8 +24,6 @@ function WorkspaceSettingsView({
|
||||
configuredDraftWorkspaceRoot,
|
||||
sourceSettingsDraft,
|
||||
platformSourceSettingsDefaults,
|
||||
draftClonePathPreview,
|
||||
draftGiteaRepositoryPreview,
|
||||
onUpdateSourceSetting,
|
||||
onResetSourceSettings,
|
||||
onSaveSourceSettings
|
||||
@@ -50,7 +46,7 @@ function WorkspaceSettingsView({
|
||||
<div className={['mt-5 rounded-lg border p-4', dark ? 'border-white/10 bg-[#1f1f1f]' : 'border-[#e1e6ef] bg-[#f8fafc]'].join(' ')}>
|
||||
<p className={['text-[13px] font-black', textStrong].join(' ')}>공용 플랫폼 환경</p>
|
||||
<p className={['mt-2 text-[12px] font-semibold leading-relaxed', textMid].join(' ')}>
|
||||
원격 플랫폼의 워크스페이스와 저장소 설정은 강사/관리자 설정을 사용합니다.
|
||||
원격 플랫폼의 워크스페이스 설정은 강사/관리자 설정을 사용합니다.
|
||||
</p>
|
||||
<div className="mt-4 grid gap-2 text-[12px] font-semibold">
|
||||
<div className={['rounded-md px-3 py-2', dark ? 'bg-white/[0.05] text-white/62' : 'bg-white text-[#4f596b]'].join(' ')}>
|
||||
@@ -76,12 +72,6 @@ function WorkspaceSettingsView({
|
||||
onChange={(value) => onUpdateSourceSetting('rosDomainId', value.replace(/[^\d]/g, '').slice(0, 3))}
|
||||
dark={dark}
|
||||
/>
|
||||
<StudioSettingsField
|
||||
label="Gitea 주소"
|
||||
value={sourceSettingsDraft.giteaBaseUrl}
|
||||
onChange={(value) => onUpdateSourceSetting('giteaBaseUrl', value)}
|
||||
dark={dark}
|
||||
/>
|
||||
<StudioSettingsSwitch
|
||||
label="GPU 가속"
|
||||
description="ON이면 Docker 실행 시 NVIDIA GPU를 사용합니다."
|
||||
@@ -91,18 +81,6 @@ function WorkspaceSettingsView({
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className={['mt-5 rounded-lg border p-4', dark ? 'border-white/10 bg-[#1f1f1f]' : 'border-[#e1e6ef] bg-[#f8fafc]'].join(' ')}>
|
||||
<p className={['text-[12px] font-black', textMid].join(' ')}>저장소</p>
|
||||
<div className="mt-3 grid gap-2 font-mono text-[12px]">
|
||||
<div className={['rounded-md px-3 py-2', dark ? 'bg-white/[0.05] text-white/68' : 'bg-white text-[#4f596b]'].join(' ')}>
|
||||
clone path: {draftClonePathPreview}
|
||||
</div>
|
||||
<div className={['rounded-md px-3 py-2', dark ? 'bg-white/[0.05] text-white/68' : 'bg-white text-[#4f596b]'].join(' ')}>
|
||||
repository: {draftGiteaRepositoryPreview}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="mt-5 flex justify-end gap-2">
|
||||
<button
|
||||
type="button"
|
||||
|
||||
Reference in New Issue
Block a user