feat(reports): add two new filename format options to file downloads report
Adds 'Session Code + Date + Time + Name' and 'Session Code + Date + Session Time + Presentation Time + Presenter Full Name' format presets. The second format uses presentation start datetime for the pres_time part and event_presenter_full_name for the full presenter name part. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -75,28 +75,32 @@ type FormatKey =
|
||||
| 'session_code_date'
|
||||
| 'session_code_date_time'
|
||||
| 'session_code_date_name'
|
||||
| 'session_code_date_time_name'
|
||||
| 'session_presenter'
|
||||
| 'session_date_presenter'
|
||||
| 'session_presentation_presenter'
|
||||
| 'session_date_presentation_presenter';
|
||||
| 'session_date_presentation_presenter'
|
||||
| 'session_date_stime_ptime_presenter_full';
|
||||
|
||||
const FORMAT_PRESETS: Record<FormatKey, { label: string; group: string }> = {
|
||||
original: { label: 'Original filename', group: 'Universal' },
|
||||
session_code: { label: 'Session Code', group: 'Session' },
|
||||
session_code_name: { label: 'Session Code + Name', group: 'Session' },
|
||||
session_code_date: { label: 'Session Code + Date', group: 'Session' },
|
||||
session_code_date_time: { label: 'Session Code + Date + Time', group: 'Session' },
|
||||
session_code_date_name: { label: 'Session Code + Date + Name', group: 'Session' },
|
||||
session_presenter: { label: 'Session Code + Presenter (Family, Given)', group: 'Presenter' },
|
||||
session_date_presenter: { label: 'Session Code + Date + Presenter', group: 'Presenter' },
|
||||
session_presentation_presenter: { label: 'Session Code + Presentation + Presenter', group: 'Presenter' },
|
||||
session_date_presentation_presenter: { label: 'Session Code + Date + Presentation + Presenter (Full)', group: 'Presenter' }
|
||||
original: { label: 'Original filename', group: 'Universal' },
|
||||
session_code: { label: 'Session Code', group: 'Session' },
|
||||
session_code_name: { label: 'Session Code + Name', group: 'Session' },
|
||||
session_code_date: { label: 'Session Code + Date', group: 'Session' },
|
||||
session_code_date_time: { label: 'Session Code + Date + Time', group: 'Session' },
|
||||
session_code_date_name: { label: 'Session Code + Date + Name', group: 'Session' },
|
||||
session_code_date_time_name: { label: 'Session Code + Date + Time + Name', group: 'Session' },
|
||||
session_presenter: { label: 'Session Code + Presenter (Family, Given)', group: 'Presenter' },
|
||||
session_date_presenter: { label: 'Session Code + Date + Presenter', group: 'Presenter' },
|
||||
session_presentation_presenter: { label: 'Session Code + Presentation + Presenter', group: 'Presenter' },
|
||||
session_date_presentation_presenter: { label: 'Session Code + Date + Presentation + Presenter (Full)', group: 'Presenter' },
|
||||
session_date_stime_ptime_presenter_full: { label: 'Session Code + Date + Session Time + Presentation Time + Presenter Full', group: 'Presenter' }
|
||||
};
|
||||
|
||||
const FORMAT_GROUPS: Record<string, FormatKey[]> = {
|
||||
Universal: ['original'],
|
||||
Session: ['session_code', 'session_code_name', 'session_code_date', 'session_code_date_time', 'session_code_date_name'],
|
||||
Presenter: ['session_presenter', 'session_date_presenter', 'session_presentation_presenter', 'session_date_presentation_presenter']
|
||||
Session: ['session_code', 'session_code_name', 'session_code_date', 'session_code_date_time', 'session_code_date_name', 'session_code_date_time_name'],
|
||||
Presenter: ['session_presenter', 'session_date_presenter', 'session_presentation_presenter', 'session_date_presentation_presenter', 'session_date_stime_ptime_presenter_full']
|
||||
};
|
||||
|
||||
let selected_format = $state<FormatKey>('session_code_name');
|
||||
@@ -113,25 +117,29 @@ function build_filename(file: any, fmt: FormatKey): string {
|
||||
// Preserve the original stem as-is; only the prefix/suffix are user-controlled.
|
||||
stem = file.filename_no_ext ?? (file.filename ?? 'file').replace(/\.[^.]+$/, '');
|
||||
} else {
|
||||
const session_code = clean_part(file.event_session_code);
|
||||
const session_name = clean_part(file.event_session_name, 30);
|
||||
const session_date = date_part(file.event_session_start_datetime);
|
||||
const session_time = time_part(file.event_session_start_datetime);
|
||||
const pres_name = clean_part(file.event_presentation_name ?? file.event_session_name, 25);
|
||||
const fam = clean_part(file.event_presenter_family_name);
|
||||
const given = clean_part(file.event_presenter_given_name);
|
||||
const session_code = clean_part(file.event_session_code);
|
||||
const session_name = clean_part(file.event_session_name, 30);
|
||||
const session_date = date_part(file.event_session_start_datetime);
|
||||
const session_time = time_part(file.event_session_start_datetime);
|
||||
const pres_name = clean_part(file.event_presentation_name ?? file.event_session_name, 25);
|
||||
const pres_time = time_part(file.event_presentation_start_datetime);
|
||||
const fam = clean_part(file.event_presenter_family_name);
|
||||
const given = clean_part(file.event_presenter_given_name);
|
||||
const presenter_full = clean_part(file.event_presenter_full_name);
|
||||
|
||||
let parts: string[];
|
||||
switch (fmt) {
|
||||
case 'session_code': parts = [session_code]; break;
|
||||
case 'session_code_name': parts = [session_code, session_name]; break;
|
||||
case 'session_code_date': parts = [session_code, session_date]; break;
|
||||
case 'session_code_date_time': parts = [session_code, session_date, session_time]; break;
|
||||
case 'session_code_date_name': parts = [session_code, session_date, session_name]; break;
|
||||
case 'session_presenter': parts = [session_code, fam, given]; break;
|
||||
case 'session_date_presenter': parts = [session_code, session_date, fam, given]; break;
|
||||
case 'session_presentation_presenter': parts = [session_code, pres_name, fam, given]; break;
|
||||
case 'session_date_presentation_presenter': parts = [session_code, session_date, pres_name, fam, given]; break;
|
||||
case 'session_code': parts = [session_code]; break;
|
||||
case 'session_code_name': parts = [session_code, session_name]; break;
|
||||
case 'session_code_date': parts = [session_code, session_date]; break;
|
||||
case 'session_code_date_time': parts = [session_code, session_date, session_time]; break;
|
||||
case 'session_code_date_name': parts = [session_code, session_date, session_name]; break;
|
||||
case 'session_code_date_time_name': parts = [session_code, session_date, session_time, session_name]; break;
|
||||
case 'session_presenter': parts = [session_code, fam, given]; break;
|
||||
case 'session_date_presenter': parts = [session_code, session_date, fam, given]; break;
|
||||
case 'session_presentation_presenter': parts = [session_code, pres_name, fam, given]; break;
|
||||
case 'session_date_presentation_presenter': parts = [session_code, session_date, pres_name, fam, given]; break;
|
||||
case 'session_date_stime_ptime_presenter_full': parts = [session_code, session_date, session_time, pres_time, presenter_full]; break;
|
||||
default: stem = file.filename_no_ext ?? 'file'; return `${pre}${stem}${suf}.${ext}`;
|
||||
}
|
||||
stem = parts.filter(Boolean).join('_').replace(/_+/g, '_').replace(/^_|_$/, '');
|
||||
|
||||
Reference in New Issue
Block a user