Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,11 @@ import { style } from '@vanilla-extract/css';
import { vars } from '~/vars.css';

export const root = style({
display: 'flex',
flexDirection: 'column',
height: '100vh',
width: '100vw',
overflow: 'hidden',
minHeight: '100dvh',
backgroundColor: vars.colors.sub,
padding: vars.spacing.lg,
});

export const container = style({
padding: vars.spacing.xl,
maxWidth: '1200px',
Expand Down
63 changes: 34 additions & 29 deletions apps/graduate/src/admin/pages/filePreview/ui/FilePreviewPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import FilePreviewContent from './FilePreviewContent';
import FilePreviewToolbar from './FilePreviewToolbar';
import { getSubmissionTypeIndex } from '../../schedule/constants';
import { useFile } from '../model';
import * as style from '../styles/PreviewPage.css';
import * as style from '../styles/FilePreviewPage.css';

import { useGraduationBatchApproval } from '~/admin/entities/graduation-approval/model';
import { useStudentDetail } from '~/admin/features/studentDetail';
Expand Down Expand Up @@ -138,34 +138,39 @@ export default function FilePreviewPage() {
};

return (
<div className={style.container}>
<div className={style.backButtonWrapper}>
<Button onClick={handleGoBack} type='text' size='large'>
뒤로가기
</Button>
</div>
<div className={style.filePreviewContainer}>
<FilePreviewContent
fileUrl={`${API_URL}${file.physicalPath}`}
error={error}
onRetry={() => refetch()}
/>

<div
className={style.toolbarTriggerArea}
onMouseEnter={handleShowToolbar}
onMouseLeave={handleHideToolbar}
>
<div className={style.toolbarWrapper} data-visible={isToolbarVisible}>
<FilePreviewToolbar
studentId={studentId}
name={name}
isApproved={approval ?? false}
onApprove={handleApprove}
onChangeFile={handleNextFile}
canNavigate={canNavigate}
isApproving={approvalMutation.isPending}
/>
<div className={style.root}>
<div className={style.container}>
<div className={style.backButtonWrapper}>
<Button onClick={handleGoBack} type='text' size='large'>
뒤로가기
</Button>
</div>
<div className={style.filePreviewContainer}>
<FilePreviewContent
fileUrl={`${API_URL}${file.physicalPath}`}
error={error}
onRetry={() => refetch()}
/>

<div
className={style.toolbarTriggerArea}
onMouseEnter={handleShowToolbar}
onMouseLeave={handleHideToolbar}
>
<div
className={style.toolbarWrapper}
data-visible={isToolbarVisible}
>
<FilePreviewToolbar
studentId={studentId}
name={name}
isApproved={approval ?? false}
onApprove={handleApprove}
onChangeFile={handleNextFile}
canNavigate={canNavigate}
isApproving={approvalMutation.isPending}
/>
</div>
</div>
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@ import { style } from '@vanilla-extract/css';

import { vars } from '~/vars.css';

export const root = style({
minHeight: '100dvh',
backgroundColor: vars.colors.sub,
padding: vars.spacing.lg,
});

export const container = style({
padding: vars.spacing.xl,
maxWidth: '1000px',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,14 @@ import { style } from '@vanilla-extract/css';

import { vars } from '~/vars.css';

export const root = style({
minHeight: '100dvh',
backgroundColor: vars.colors.sub,
padding: vars.spacing.lg,
});

export const container = style({
backgroundColor: vars.colors.sub,
padding: vars.spacing.xl,
maxWidth: '1200px',
margin: '0 auto',
Expand Down
196 changes: 99 additions & 97 deletions apps/graduate/src/admin/pages/notice/ui/NoticeAdminCreatePage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -184,115 +184,117 @@ export default function NoticeAdminCreatePage({
}

return (
<div className={style.container}>
<div className={style.backButtonWrapper}>
<Button onClick={handleGoBack} type='text' size='large'>
목록으로
</Button>
</div>
<div className={style.root}>
<div className={style.container}>
<div className={style.backButtonWrapper}>
<Button onClick={handleGoBack} type='text' size='large'>
목록으로
</Button>
</div>

<div className={style.formCard}>
<h1 className={style.formTitle}>
{isEditMode ? '공지사항 수정' : '공지사항 작성'}
</h1>
<div className={style.formCard}>
<h1 className={style.formTitle}>
{isEditMode ? '공지사항 수정' : '공지사항 작성'}
</h1>

{isEditMode && (
<div className={style.metaInfo}>
<div className={style.metaItem}>작성일: {createdAt}</div>
</div>
)}
{isEditMode && (
<div className={style.metaInfo}>
<div className={style.metaItem}>작성일: {createdAt}</div>
</div>
)}

<form onSubmit={handleSubmit(onSubmit)}>
<div className={style.formField}>
<label className={style.label}>
제목 <span className={style.required}>*</span>
</label>
<Controller
name='title'
control={control}
rules={{ required: '제목을 입력해주세요.' }}
render={({ field }) => (
<Input
{...field}
placeholder='제목을 입력하세요'
size='large'
status={errors.title ? 'error' : ''}
/>
<form onSubmit={handleSubmit(onSubmit)}>
<div className={style.formField}>
<label className={style.label}>
제목 <span className={style.required}>*</span>
</label>
<Controller
name='title'
control={control}
rules={{ required: '제목을 입력해주세요.' }}
render={({ field }) => (
<Input
{...field}
placeholder='제목을 입력하세요'
size='large'
status={errors.title ? 'error' : ''}
/>
)}
/>
{errors.title && (
<p className={style.errorMessage}>{errors.title.message}</p>
)}
/>
{errors.title && (
<p className={style.errorMessage}>{errors.title.message}</p>
)}
</div>
</div>

<div className={style.formField}>
<Controller
name='isPinned'
control={control}
render={({ field: { value, onChange } }) => (
<Checkbox
checked={value}
onChange={e => onChange(e.target.checked)}
>
<span className={style.checkboxLabel}>
상단 고정 (공지로 표시)
</span>
</Checkbox>
)}
/>
</div>
<div className={style.formField}>
<Controller
name='isPinned'
control={control}
render={({ field: { value, onChange } }) => (
<Checkbox
checked={value}
onChange={e => onChange(e.target.checked)}
>
<span className={style.checkboxLabel}>
상단 고정 (공지로 표시)
</span>
</Checkbox>
)}
/>
</div>

<div className={style.formField}>
<label className={style.label}>
내용 <span className={style.required}>*</span>
</label>
<Controller
name='content'
control={control}
rules={{ required: '내용을 입력해주세요.' }}
render={({ field: { value, onChange } }) => (
<TextEditor
title=''
value={value || ''}
onChange={onChange}
onSave={() => {}}
isSaved={true}
className={style.textarea}
/>
<div className={style.formField}>
<label className={style.label}>
내용 <span className={style.required}>*</span>
</label>
<Controller
name='content'
control={control}
rules={{ required: '내용을 입력해주세요.' }}
render={({ field: { value, onChange } }) => (
<TextEditor
title=''
value={value || ''}
onChange={onChange}
onSave={() => {}}
isSaved={true}
className={style.textarea}
/>
)}
/>
{errors.content && (
<p className={style.errorMessage}>{errors.content.message}</p>
)}
/>
{errors.content && (
<p className={style.errorMessage}>{errors.content.message}</p>
)}
</div>
</div>

<div className={style.formField}>
<label className={style.label}>첨부파일</label>
<Upload {...uploadProps}>
<Button>파일 선택</Button>
</Upload>
</div>
<div className={style.formField}>
<label className={style.label}>첨부파일</label>
<Upload {...uploadProps}>
<Button>파일 선택</Button>
</Upload>
</div>

<Divider />
<Divider />

<div className={style.actionSection}>
<div className={style.leftActions}>
{isEditMode && (
<Button onClick={handleDelete} size='large' danger>
삭제
<div className={style.actionSection}>
<div className={style.leftActions}>
{isEditMode && (
<Button onClick={handleDelete} size='large' danger>
삭제
</Button>
)}
</div>
<div className={style.rightActions}>
<Button onClick={handleGoBack} size='large'>
취소
</Button>
)}
</div>
<div className={style.rightActions}>
<Button onClick={handleGoBack} size='large'>
취소
</Button>
<Button type='primary' htmlType='submit' size='large'>
{isEditMode ? '수정' : '작성'}
</Button>
<Button type='primary' htmlType='submit' size='large'>
{isEditMode ? '수정' : '작성'}
</Button>
</div>
</div>
</div>
</form>
</form>
</div>
</div>
</div>
);
Expand Down
Loading
Loading