Skip to content

Commit ac2a8b9

Browse files
authored
CourseExperimental: сохранять выбранные файлы при навигации между заданиями (#574)
* wip * wip * wip
1 parent 5bf8099 commit ac2a8b9

7 files changed

Lines changed: 32 additions & 25 deletions

File tree

hwproj.front/src/components/Files/FilePreview.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ const FilePreview: React.FC<FilePreviewProps> = (props) => {
126126
color="text.secondary"
127127
sx={{fontSize: hasRemoveButton ? '0.7rem' : '0.65rem'}}
128128
>
129-
{getFileSize(props.fileInfo.sizeInBytes)}
129+
{getFileSize(props.fileInfo.size)}
130130
</Typography>
131131
</Box>
132132

hwproj.front/src/components/Files/FilesUploader.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {Alert, Button, Grid} from "@mui/material";
88
import FilesPreviewList from "./FilesPreviewList";
99

1010
interface IFilesUploaderProps {
11+
homeworkId: number;
1112
initialFilesInfo?: IFileInfo[];
1213
onChange: (selectedFiles: IFileInfo[]) => void;
1314
isLoading?: boolean;
@@ -69,8 +70,10 @@ const FilesUploader: React.FC<IFilesUploaderProps> = (props) => {
6970
newFilesInfo.push({
7071
name: file.name,
7172
type: file.type,
72-
sizeInBytes: file.size,
73-
file: file
73+
size: file.size,
74+
file: file,
75+
homeworkId: props.homeworkId,
76+
key: "local" //TODO
7477
})
7578
}
7679
setSelectedFilesInfo(previouslySelected => {

hwproj.front/src/components/Files/IFileInfo.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ export interface IFileInfo {
22
file?: File;
33
type?: string;
44
name: string;
5-
sizeInBytes: number;
5+
// В байтах
6+
size: number;
7+
homeworkId: number;
68
key?: string;
79
}

hwproj.front/src/components/Homeworks/AddHomework.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ const AddHomework: React.FC<IAddHomeworkProps> = (props) => {
179179
.filter(fileInfo => fileInfo.file != undefined)
180180
.map(fileInfo => fileInfo.file!))
181181
}}
182-
/>
182+
homeworkId={props.id}/>
183183
<PublicationAndDeadlineDates
184184
hasDeadline={false}
185185
isDeadlineStrict={false}

hwproj.front/src/components/Homeworks/CourseHomeworkExperimental.tsx

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ const CourseHomeworkEditor: FC<{
110110
const [title, setTitle] = useState<string>(homework.title!)
111111
const [tags, setTags] = useState<string[]>(homework.tags!)
112112
const [description, setDescription] = useState<string>(homework.description!)
113-
const [filesControlState, setFilesControlState] = useState<IEditFilesState>({
113+
const [filesState, setFilesState] = useState<IEditFilesState>({
114114
initialFilesInfo: filesInfo,
115115
selectedFilesInfo: filesInfo,
116116
isLoadingInfo: false
@@ -168,8 +168,8 @@ const CourseHomeworkEditor: FC<{
168168
isModified: true,
169169
}
170170

171-
props.onUpdate({fileInfos: [], homework: update})
172-
}, [title, description, tags, metadata, hasErrors])
171+
props.onUpdate({fileInfos: filesState.selectedFilesInfo, homework: update})
172+
}, [title, description, tags, metadata, hasErrors, filesState.selectedFilesInfo])
173173

174174
useEffect(() => {
175175
setHasErrors(!title || metadata.hasErrors)
@@ -228,18 +228,18 @@ const CourseHomeworkEditor: FC<{
228228
const updatedHomeworkId = updatedHomework.value!.id!
229229

230230
// Если какие-то файлы из ранее добавленных больше не выбраны, удаляем их из хранилища
231-
const deleteOperations = filesControlState.initialFilesInfo
231+
const deleteOperations = filesState.initialFilesInfo
232232
.filter(initialFile =>
233233
initialFile.key &&
234-
!filesControlState.selectedFilesInfo.some(s => s.key === initialFile.key)
234+
!filesState.selectedFilesInfo.some(s => s.key === initialFile.key)
235235
)
236236
.map(initialFile => UpdateFilesUtils.deleteFileWithErrorsHadling(courseId, initialFile));
237237

238238
// Если какие-то файлы из выбранных сейчас не были добавлены раньше, загружаем их в хранилище
239-
const uploadOperations = filesControlState.selectedFilesInfo
239+
const uploadOperations = filesState.selectedFilesInfo
240240
.filter(selectedFile =>
241241
selectedFile.file &&
242-
!filesControlState.initialFilesInfo.some(i => i.key === selectedFile.key)
242+
!filesState.initialFilesInfo.some(i => i.key === selectedFile.key)
243243
)
244244
.map(selectedFile => UpdateFilesUtils.uploadFileWithErrorsHadling(
245245
selectedFile.file!,
@@ -253,12 +253,12 @@ const CourseHomeworkEditor: FC<{
253253
if (deleteOperations.length === 0 && uploadOperations.length === 0) {
254254
if (isNewHomework) props.onUpdate({
255255
homework: update,
256-
fileInfos: filesControlState.selectedFilesInfo,
256+
fileInfos: [],
257257
isDeleted: true
258258
}) // remove fake homework
259259
props.onUpdate({
260260
homework: updatedHomework.value!,
261-
fileInfos: filesControlState.selectedFilesInfo,
261+
fileInfos: filesState.selectedFilesInfo,
262262
isSaved: true
263263
})
264264
} else {
@@ -280,7 +280,7 @@ const CourseHomeworkEditor: FC<{
280280
}) // remove fake homework
281281
props.onUpdate({
282282
homework: updatedHomework.value!,
283-
fileInfos: filesControlState.selectedFilesInfo,
283+
fileInfos: filesState.selectedFilesInfo,
284284
isSaved: true
285285
})
286286
}
@@ -335,15 +335,15 @@ const CourseHomeworkEditor: FC<{
335335
<Grid item xs={12} style={{marginBottom: "15px"}}>
336336
<Grid container direction="column">
337337
<FilesUploader
338-
initialFilesInfo={filesControlState.selectedFilesInfo}
339-
isLoading={filesControlState.isLoadingInfo}
338+
initialFilesInfo={filesState.selectedFilesInfo}
339+
isLoading={filesState.isLoadingInfo}
340340
onChange={(filesInfo) => {
341-
setFilesControlState((prevState) => ({
341+
setFilesState((prevState) => ({
342342
...prevState,
343343
selectedFilesInfo: filesInfo
344-
}))
344+
}));
345345
}}
346-
/>
346+
homeworkId={homeworkId}/>
347347
<PublicationAndDeadlineDates
348348
hasDeadline={metadata.hasDeadline}
349349
isDeadlineStrict={metadata.isDeadlineStrict}

hwproj.front/src/components/Homeworks/EditHomework.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,9 +282,9 @@ const EditHomework: FC = () => {
282282
setFilesControlState((prevState) => ({
283283
...prevState,
284284
selectedFilesInfo: filesInfo
285-
}))
285+
}));
286286
}}
287-
/>
287+
homeworkId={+homeworkId!}/>
288288
<PublicationAndDeadlineDates
289289
hasDeadline={editHomework.hasDeadline}
290290
isDeadlineStrict={editHomework.isDeadlineStrict}

hwproj.front/src/components/Utils/FileInfoConverter.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {IFileInfo} from "components/Files/IFileInfo";
2-
import {FileInfoDTO} from "../../api"
2+
import {FileInfoDTO} from "@/api"
33

44
export default class FileInfoConverter {
55
public static fromFileInfoDTO(fileInfoDto: FileInfoDTO): IFileInfo {
@@ -11,9 +11,11 @@ export default class FileInfoConverter {
1111
}
1212

1313
return {
14+
...fileInfoDto,
1415
name: fileInfoDto.name,
15-
sizeInBytes: fileInfoDto.size,
16-
key: fileInfoDto.key
16+
size: fileInfoDto.size,
17+
key: fileInfoDto.key,
18+
homeworkId: fileInfoDto.homeworkId,
1719
};
1820
}
1921

0 commit comments

Comments
 (0)