fix: добавил прочие вложения на форму заявки на прием
Tests / frontend-test (push) Successful in 1m12s
Tests / frontend-test (push) Successful in 1m12s
This commit is contained in:
@@ -35,11 +35,12 @@
|
|||||||
и в просмотре показывается ссылкой «№ код ↗», которая открывает
|
и в просмотре показывается ссылкой «№ код ↗», которая открывает
|
||||||
`RecruitingSelectionView` в **новой вкладке** (deep-link через `routeUrl`,
|
`RecruitingSelectionView` в **новой вкладке** (deep-link через `routeUrl`,
|
||||||
rptype=recruiting-selection, rpid/rplist из сохранённых полей).
|
rptype=recruiting-selection, rpid/rplist из сохранённых полей).
|
||||||
- **Вложения по категориям** — две области: «Удостоверение» и «Резюме» (в каждую
|
- **Вложения по категориям** — три зоны загрузки: «Удостоверение», «Резюме» и
|
||||||
можно несколько файлов). Вложения SP плоские, поэтому категория кодируется
|
«Прочие вложения» (в каждую можно несколько файлов). Вложения SP плоские, поэтому
|
||||||
префиксом в имени файла «<Категория> — <имя>» (`attachmentCategories.ts`); при
|
категория кодируется префиксом в имени файла «<Категория> — <имя>»
|
||||||
показе группируются и префикс срезается. Старые файлы без префикса показываются
|
(`attachmentCategories.ts`); при показе группируются и префикс срезается.
|
||||||
блоком «Прочие вложения», чтобы не исчезали.
|
«Прочие» грузятся БЕЗ префикса — это та же «незакатегоризированная» корзина, куда
|
||||||
|
же попадают и старые файлы, загруженные до разделения (не исчезают).
|
||||||
- Печать — общий механизм (без «Вложений»).
|
- Печать — общий механизм (без «Вложений»).
|
||||||
|
|
||||||
## Секции формы
|
## Секции формы
|
||||||
|
|||||||
@@ -70,9 +70,11 @@ const RecruitingHireForm: React.FC<IRequestFormProps> = ({
|
|||||||
editListId
|
editListId
|
||||||
}) => {
|
}) => {
|
||||||
const [data, setData] = useState<IFormData>(EMPTY_DATA);
|
const [data, setData] = useState<IFormData>(EMPTY_DATA);
|
||||||
// Вложения — две категории: удостоверение и резюме (см. attachmentCategories.ts).
|
// Вложения — три зоны: удостоверение, резюме и прочие (см. attachmentCategories.ts).
|
||||||
|
// «Прочие» грузятся без префикса — это та же «незакатегоризированная» корзина.
|
||||||
const [idFiles, setIdFiles] = useState<File[]>([]);
|
const [idFiles, setIdFiles] = useState<File[]>([]);
|
||||||
const [resumeFiles, setResumeFiles] = useState<File[]>([]);
|
const [resumeFiles, setResumeFiles] = useState<File[]>([]);
|
||||||
|
const [otherFiles, setOtherFiles] = useState<File[]>([]);
|
||||||
const [existingAttachments, setExistingAttachments] = useState<IAttachmentInfo[]>([]);
|
const [existingAttachments, setExistingAttachments] = useState<IAttachmentInfo[]>([]);
|
||||||
// При открытии на редактирование (editId) — сразу известен, иначе появится
|
// При открытии на редактирование (editId) — сразу известен, иначе появится
|
||||||
// после первого сохранения.
|
// после первого сохранения.
|
||||||
@@ -221,15 +223,17 @@ const RecruitingHireForm: React.FC<IRequestFormProps> = ({
|
|||||||
if (code) {
|
if (code) {
|
||||||
setRequestCode(code);
|
setRequestCode(code);
|
||||||
}
|
}
|
||||||
// Категорию кодируем префиксом в имени файла (SP-вложения плоские).
|
// Категорию кодируем префиксом в имени файла (SP-вложения плоские); прочие — без префикса.
|
||||||
const filesToUpload = [
|
const filesToUpload = [
|
||||||
...prefixFiles(idFiles, ATT_CATEGORY_ID),
|
...prefixFiles(idFiles, ATT_CATEGORY_ID),
|
||||||
...prefixFiles(resumeFiles, ATT_CATEGORY_RESUME)
|
...prefixFiles(resumeFiles, ATT_CATEGORY_RESUME),
|
||||||
|
...otherFiles
|
||||||
];
|
];
|
||||||
if (filesToUpload.length > 0) {
|
if (filesToUpload.length > 0) {
|
||||||
await uploadAttachments(writeListId || dataListTitle(FORM_ID), id, filesToUpload); // файлы — после создания элемента
|
await uploadAttachments(writeListId || dataListTitle(FORM_ID), id, filesToUpload); // файлы — после создания элемента
|
||||||
setIdFiles([]); // выгруженные файлы убираем, чтобы пересохранение не дублировало
|
setIdFiles([]); // выгруженные файлы убираем, чтобы пересохранение не дублировало
|
||||||
setResumeFiles([]);
|
setResumeFiles([]);
|
||||||
|
setOtherFiles([]);
|
||||||
setExistingAttachments(await getAttachments(writeListId || dataListTitle(FORM_ID), id)); // показать добавленные
|
setExistingAttachments(await getAttachments(writeListId || dataListTitle(FORM_ID), id)); // показать добавленные
|
||||||
}
|
}
|
||||||
if (onSaved) {
|
if (onSaved) {
|
||||||
@@ -340,11 +344,12 @@ const RecruitingHireForm: React.FC<IRequestFormProps> = ({
|
|||||||
)}
|
)}
|
||||||
<FileDropzone files={resumeFiles} onChange={setResumeFiles} />
|
<FileDropzone files={resumeFiles} onChange={setResumeFiles} />
|
||||||
</FormField>
|
</FormField>
|
||||||
{otherAttachments.length > 0 && (
|
|
||||||
<FormField label="Прочие вложения" full>
|
<FormField label="Прочие вложения" full>
|
||||||
|
{otherAttachments.length > 0 && (
|
||||||
<AttachmentList items={otherAttachments} onRemove={handleRemoveAttachment} />
|
<AttachmentList items={otherAttachments} onRemove={handleRemoveAttachment} />
|
||||||
</FormField>
|
|
||||||
)}
|
)}
|
||||||
|
<FileDropzone files={otherFiles} onChange={setOtherFiles} />
|
||||||
|
</FormField>
|
||||||
</CollapseSection>
|
</CollapseSection>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user