mirror of
https://github.com/Tria-plc/emaui.git
synced 2026-08-30 12:18:12 +00:00
feat: expand supported document MIME types and add a helper description to the requirement editor
This commit is contained in:
@@ -24,12 +24,34 @@ import {
|
|||||||
import { ConditionBuilder, type ConditionValue } from './ConditionBuilder';
|
import { ConditionBuilder, type ConditionValue } from './ConditionBuilder';
|
||||||
import type { ConditionTarget } from '../config/schema-paths';
|
import type { ConditionTarget } from '../config/schema-paths';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* File types a slot may be opened to.
|
||||||
|
*
|
||||||
|
* Longer than the three a slot starts with, because what an applicant
|
||||||
|
* actually has is not always a scan: a phone photographs an ID as HEIC, a
|
||||||
|
* scanner writes multi-page TIFF, and an academic record often arrives as the
|
||||||
|
* Word file its institution issued. Widening a slot stays a deliberate choice
|
||||||
|
* — the defaults below do not change — but it no longer needs a release.
|
||||||
|
*/
|
||||||
const MIME_OPTIONS = [
|
const MIME_OPTIONS = [
|
||||||
{ value: 'application/pdf', label: 'PDF' },
|
{ value: 'application/pdf', label: 'PDF' },
|
||||||
{ value: 'image/jpeg', label: 'JPEG' },
|
{ value: 'image/jpeg', label: 'JPEG' },
|
||||||
{ value: 'image/png', label: 'PNG' },
|
{ value: 'image/png', label: 'PNG' },
|
||||||
|
{ value: 'image/webp', label: 'WebP' },
|
||||||
|
{ value: 'image/heic', label: 'HEIC (iPhone photo)' },
|
||||||
|
{ value: 'image/heif', label: 'HEIF' },
|
||||||
|
{ value: 'image/tiff', label: 'TIFF (scan)' },
|
||||||
|
{ value: 'image/bmp', label: 'BMP' },
|
||||||
|
{ value: 'application/msword', label: 'Word (.doc)' },
|
||||||
|
{
|
||||||
|
value: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
||||||
|
label: 'Word (.docx)',
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/** What a new slot accepts until someone widens it. */
|
||||||
|
const DEFAULT_MIME_TYPES = ['application/pdf', 'image/jpeg', 'image/png'];
|
||||||
|
|
||||||
type DraftRequirement = Omit<DocumentRequirement, 'id' | 'licenseTypeId' | 'isActive'>;
|
type DraftRequirement = Omit<DocumentRequirement, 'id' | 'licenseTypeId' | 'isActive'>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -50,7 +72,7 @@ function emptyDraft(applicationKind: ApplicationKind, personal: boolean): DraftR
|
|||||||
// A personal document is never demanded by one application, so "always
|
// A personal document is never demanded by one application, so "always
|
||||||
// required" would be a promise nothing here can keep.
|
// required" would be a promise nothing here can keep.
|
||||||
mode: personal ? 'OPTIONAL' : 'ALWAYS',
|
mode: personal ? 'OPTIONAL' : 'ALWAYS',
|
||||||
allowedMimeTypes: ['application/pdf', 'image/jpeg', 'image/png'],
|
allowedMimeTypes: [...DEFAULT_MIME_TYPES],
|
||||||
maxSizeMb: 5,
|
maxSizeMb: 5,
|
||||||
requiresValidityDates: false,
|
requiresValidityDates: false,
|
||||||
allowMultiple: false,
|
allowMultiple: false,
|
||||||
@@ -293,6 +315,11 @@ export function DocumentRequirementEditorDrawer({
|
|||||||
|
|
||||||
<MultiSelect
|
<MultiSelect
|
||||||
label={t('certReq.doc.allowedTypes', 'Allowed file types')}
|
label={t('certReq.doc.allowedTypes', 'Allowed file types')}
|
||||||
|
description={t(
|
||||||
|
'certReq.doc.allowedTypesHelp',
|
||||||
|
'The applicant can only upload these. PDF, JPEG and PNG are selected by default.',
|
||||||
|
)}
|
||||||
|
searchable
|
||||||
data={MIME_OPTIONS}
|
data={MIME_OPTIONS}
|
||||||
value={draft.allowedMimeTypes}
|
value={draft.allowedMimeTypes}
|
||||||
onChange={(v) => setDraft((d) => ({ ...d, allowedMimeTypes: v }))}
|
onChange={(v) => setDraft((d) => ({ ...d, allowedMimeTypes: v }))}
|
||||||
|
|||||||
@@ -1350,6 +1350,8 @@ export const am: Translations = {
|
|||||||
modeOptional: "አማራጭ ስቀላ",
|
modeOptional: "አማራጭ ስቀላ",
|
||||||
conditionRequired: "ሁኔታዊ መስፈርት ሁኔታ ያስፈልገዋል",
|
conditionRequired: "ሁኔታዊ መስፈርት ሁኔታ ያስፈልገዋል",
|
||||||
allowedTypes: "የተፈቀዱ የፋይል ዓይነቶች",
|
allowedTypes: "የተፈቀዱ የፋይል ዓይነቶች",
|
||||||
|
allowedTypesHelp:
|
||||||
|
"አመልካቹ እነዚህን ብቻ መስቀል ይችላል። በነባሪ PDF፣ JPEG እና PNG ተመርጠዋል።",
|
||||||
maxSize: "ከፍተኛ የፋይል መጠን (MB)",
|
maxSize: "ከፍተኛ የፋይል መጠን (MB)",
|
||||||
requiresValidity: "የቀን ገደብ ያስፈልጋል",
|
requiresValidity: "የቀን ገደብ ያስፈልጋል",
|
||||||
allowMultiple: "ብዙ ስቀላዎችን ፍቀድ",
|
allowMultiple: "ብዙ ስቀላዎችን ፍቀድ",
|
||||||
|
|||||||
@@ -1355,6 +1355,8 @@ export const en = {
|
|||||||
modeOptional: 'Optional upload',
|
modeOptional: 'Optional upload',
|
||||||
conditionRequired: 'A conditional requirement needs a condition',
|
conditionRequired: 'A conditional requirement needs a condition',
|
||||||
allowedTypes: 'Allowed file types',
|
allowedTypes: 'Allowed file types',
|
||||||
|
allowedTypesHelp:
|
||||||
|
'The applicant can only upload these. PDF, JPEG and PNG are selected by default.',
|
||||||
maxSize: 'Max file size (MB)',
|
maxSize: 'Max file size (MB)',
|
||||||
requiresValidity: 'Requires validity dates',
|
requiresValidity: 'Requires validity dates',
|
||||||
allowMultiple: 'Allow multiple uploads',
|
allowMultiple: 'Allow multiple uploads',
|
||||||
|
|||||||
Reference in New Issue
Block a user