refactor(stores): Phase 2a — split store defaults into domain sub-files
ae_stores.ts - Extract auth/identity section (~80 lines) into ae_stores__auth_loc_defaults.ts - Spread auth_loc_defaults into ae_app_local_data_defaults (zero consumer changes) ae_events_stores.ts (both loc and sess structs) - badges → ae_events_stores__badges_defaults.ts - launcher → ae_events_stores__launcher_defaults.ts - leads → ae_events_stores__leads_defaults.ts - pres_mgmt → ae_events_stores__pres_mgmt_defaults.ts Each new file exports *_loc_defaults and *_sess_defaults. The store files now reference these by name instead of embedding inline objects. All $ae_loc.* and $events_loc.* consumer paths are unchanged. svelte-check: 0 errors, 0 warnings
This commit is contained in:
@@ -8,6 +8,11 @@ import type { Writable } from 'svelte/store';
|
|||||||
|
|
||||||
import type { key_val } from '$lib/stores/ae_stores';
|
import type { key_val } from '$lib/stores/ae_stores';
|
||||||
|
|
||||||
|
import { badges_loc_defaults, badges_sess_defaults } from '$lib/stores/ae_events_stores__badges_defaults';
|
||||||
|
import { launcher_loc_defaults, launcher_sess_defaults } from '$lib/stores/ae_events_stores__launcher_defaults';
|
||||||
|
import { leads_loc_defaults, leads_sess_defaults } from '$lib/stores/ae_events_stores__leads_defaults';
|
||||||
|
import { pres_mgmt_loc_defaults, pres_mgmt_sess_defaults } from '$lib/stores/ae_events_stores__pres_mgmt_defaults';
|
||||||
|
|
||||||
// Deployment version stamp. Compared against events_sess.ver in events/+layout.svelte
|
// Deployment version stamp. Compared against events_sess.ver in events/+layout.svelte
|
||||||
// to detect stale persisted data after a deploy (triggers a reload). Bump this alongside
|
// to detect stale persisted data after a deploy (triggers a reload). Bump this alongside
|
||||||
// events_session_data_struct.ver. See store_versions.ts for the schema-level wipe mechanism.
|
// events_session_data_struct.ver. See store_versions.ts for the schema-level wipe mechanism.
|
||||||
@@ -56,271 +61,17 @@ const events_local_data_struct: key_val = {
|
|||||||
person: {}
|
person: {}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Badge Printing
|
// Badge Printing — see ae_events_stores__badges_defaults.ts
|
||||||
badges: {
|
badges: badges_loc_defaults,
|
||||||
auto_view: true,
|
|
||||||
|
|
||||||
show_hidden: false, // These are hidden (archived) leads so the list is not as long.
|
// Event Presentation Launcher — see ae_events_stores__launcher_defaults.ts
|
||||||
show_not_enabled: false,
|
launcher: launcher_loc_defaults,
|
||||||
|
|
||||||
show_printed: false,
|
// Lead Retrievals (Exhibit) — see ae_events_stores__leads_defaults.ts
|
||||||
allow_reprint: false,
|
leads: leads_loc_defaults,
|
||||||
|
|
||||||
show_element__cfg: true,
|
// Presentation Management — see ae_events_stores__pres_mgmt_defaults.ts
|
||||||
show_element__cfg_detail: false,
|
pres_mgmt: pres_mgmt_loc_defaults
|
||||||
|
|
||||||
fulltext_search_qry_str: null,
|
|
||||||
search_badge_type_code: null,
|
|
||||||
|
|
||||||
// New additions for search stabilization (Standardized Pattern 2026-01-27)
|
|
||||||
search_version: 0,
|
|
||||||
qry__remote_first: false,
|
|
||||||
|
|
||||||
// New additions for filter states
|
|
||||||
qry_printed_status: 'all', // Default to all
|
|
||||||
qry_affiliations: null, // Default to null for no filter
|
|
||||||
qry_sort_order: '', // Default to empty string for default sort
|
|
||||||
|
|
||||||
status_qry__search: null,
|
|
||||||
use_id_li: true,
|
|
||||||
search_status: null,
|
|
||||||
search_complete: false,
|
|
||||||
|
|
||||||
classes__form: 'border border-surface-200 p-4 space-y-4 rounded-container'
|
|
||||||
},
|
|
||||||
|
|
||||||
// Event Presentation Launcher (and native Electron app)
|
|
||||||
launcher: {
|
|
||||||
// default - browser, onsite - browser onsite, native - Electron app onsite
|
|
||||||
app_mode: 'default', // 'default', 'native', 'onsite'
|
|
||||||
ws_connect: false,
|
|
||||||
|
|
||||||
qry_limit__files: 25,
|
|
||||||
qry_limit__presentations: 25,
|
|
||||||
qry_limit__presenters: 75,
|
|
||||||
qry_limit__sessions: 50,
|
|
||||||
|
|
||||||
hide__launcher_header: false,
|
|
||||||
hide__launcher_menu: false,
|
|
||||||
hide__launcher_footer: false,
|
|
||||||
|
|
||||||
hide__modal_header_title: false,
|
|
||||||
|
|
||||||
hide_drawer__debug: true,
|
|
||||||
hide__ws_element: true,
|
|
||||||
hide__ws_form: true,
|
|
||||||
hide__ws_messages: true,
|
|
||||||
hide__ws_commands: true,
|
|
||||||
|
|
||||||
hide_content__draft_files: true,
|
|
||||||
|
|
||||||
show_content__disabled_files: false,
|
|
||||||
show_content__hidden_files: false,
|
|
||||||
show_content__hidden_presentations: false,
|
|
||||||
show_content__hidden_presenters: false,
|
|
||||||
show_content__hidden_sessions: false,
|
|
||||||
show_content__draft_files: false,
|
|
||||||
|
|
||||||
// These should be renamed to match the pres_mgmt section. Use "hide" instead of "show".
|
|
||||||
show_content__session_code: true,
|
|
||||||
show_content__presentation_code: true,
|
|
||||||
show_content__presenter_code: true,
|
|
||||||
|
|
||||||
show_section__controller: false,
|
|
||||||
|
|
||||||
// 3-Way Section States (V5 Overhaul)
|
|
||||||
// Values: 'collapsed' | 'auto' | 'pinned'
|
|
||||||
section_state__health: 'auto',
|
|
||||||
section_state__native_os: 'collapsed',
|
|
||||||
section_state__sync_timers: 'collapsed',
|
|
||||||
section_state__updates: 'collapsed',
|
|
||||||
section_state__controller: 'auto',
|
|
||||||
section_state__screen_saver: 'collapsed',
|
|
||||||
section_state__app_modes: 'collapsed',
|
|
||||||
section_state__local_actions: 'collapsed',
|
|
||||||
|
|
||||||
datetime_format: 'datetime_12_long',
|
|
||||||
time_format: 'time_12_short',
|
|
||||||
time_hours: 12, // 12 or 24
|
|
||||||
|
|
||||||
sync_intervals: {
|
|
||||||
event: 90000,
|
|
||||||
device: 60000,
|
|
||||||
location: 30000,
|
|
||||||
session: 15000,
|
|
||||||
presentation: 45000,
|
|
||||||
presenter: 60000,
|
|
||||||
file_sync: 10000
|
|
||||||
},
|
|
||||||
|
|
||||||
slct: {
|
|
||||||
event_id: null,
|
|
||||||
event_location_id: null,
|
|
||||||
event_session_id: null,
|
|
||||||
event_presentation_id: null,
|
|
||||||
event_presenter_id: null,
|
|
||||||
event_file_id: null // event_file_id
|
|
||||||
},
|
|
||||||
|
|
||||||
native: {
|
|
||||||
host_file_config_path: 'device_configs/ae_native_app_config.default.json'
|
|
||||||
},
|
|
||||||
|
|
||||||
idle_timer: 7 * 60 * 1000, // How many seconds until idle
|
|
||||||
idle_cycle: 5 * 1000, // How frequently the idle status is checked
|
|
||||||
idle_loop_period: 3 * 60 * 1000, // How frequently the loop runs for the screen saver and similar
|
|
||||||
|
|
||||||
screen_saver_img_kv: {}, // This key value list is generate when the launcher_file_cont is loaded. It only adds image file types.
|
|
||||||
modal__title: '-- Not Set --',
|
|
||||||
modal__open: null,
|
|
||||||
modal__open_filename: null,
|
|
||||||
modal_img_src: null,
|
|
||||||
|
|
||||||
controller: 'local',
|
|
||||||
controller_group_code: 'launcher-00',
|
|
||||||
controller_client_id: null
|
|
||||||
// controller_cmd: null,
|
|
||||||
// controller_trigger_send: null,
|
|
||||||
},
|
|
||||||
|
|
||||||
// Lead Retrievals (Exhibit)
|
|
||||||
leads: {
|
|
||||||
show_option__paid_tab: true,
|
|
||||||
show_content__scan_alert: true, // For QR scanner bug...
|
|
||||||
show_content__scan_requirements: true,
|
|
||||||
show_content__custom_question_descriptions: true,
|
|
||||||
show_content__email_link_warning: true,
|
|
||||||
|
|
||||||
default_to_scan: true,
|
|
||||||
// Fallback external registration ID used when building lead export data.
|
|
||||||
// Should be overridden by the active event's external_event_id in cfg_json.
|
|
||||||
default__external_registration_id: '2024_Annual Meeting',
|
|
||||||
|
|
||||||
auto_view: true, // Show the new lead after added by scan or search
|
|
||||||
auto_hide_on_sign_in: true,
|
|
||||||
|
|
||||||
show_hidden: false, // These are hidden (archived) leads so the list is not as long.
|
|
||||||
show_not_enabled: false,
|
|
||||||
|
|
||||||
refresh_interval__tracking_li: 30000, // 30 seconds
|
|
||||||
|
|
||||||
// Standardized Search Pattern 2026-01-28
|
|
||||||
search_version: 0,
|
|
||||||
qry__remote_first: false,
|
|
||||||
qry__search_text: '',
|
|
||||||
qry__sort_order: 'name_asc',
|
|
||||||
|
|
||||||
// Standardized Search Pattern (Tracking) 2026-01-28
|
|
||||||
tracking__search_version: 0,
|
|
||||||
tracking__qry__remote_first: false,
|
|
||||||
tracking__qry__search_text: '',
|
|
||||||
tracking__qry__sort_order: 'created_desc',
|
|
||||||
tracking__qry__licensee_email: 'all',
|
|
||||||
|
|
||||||
// The entered_passcode is the exhibit booths shared passcode for staff. This is used to initially access the lead retrieval service.
|
|
||||||
entered_passcode: null,
|
|
||||||
|
|
||||||
// auth_exhibit_kv: key-value of exhibit IDs this browser client
|
|
||||||
// is authorized for, mapped to { key, updated_on }. Entries expire
|
|
||||||
// after a configurable max age and must be re-authenticated.
|
|
||||||
auth_exhibit_kv: {},
|
|
||||||
|
|
||||||
edit_license_li: false,
|
|
||||||
|
|
||||||
// The "tab" is a key value list of exhibit ID and tab name. This is intentionally using local storage to store the current tab for each exhibit.
|
|
||||||
// example: {'LNDF-67-89-92': 'start', 'OFLN-32-38-14': 'add_scan'}
|
|
||||||
tab: {}
|
|
||||||
},
|
|
||||||
|
|
||||||
// Presentation Management
|
|
||||||
pres_mgmt: {
|
|
||||||
sync_local_config: false,
|
|
||||||
lock_config: true,
|
|
||||||
|
|
||||||
datetime_format: 'datetime_12_long',
|
|
||||||
time_format: 'time_12_short',
|
|
||||||
time_hours: 12, // 12 or 24
|
|
||||||
|
|
||||||
qry_enabled: 'enabled', // all, disabled, enabled
|
|
||||||
qry_hidden: 'not_hidden', // all, hidden, not_hidden
|
|
||||||
qry_limit__files: 75,
|
|
||||||
qry_limit__presentations: 25,
|
|
||||||
qry_limit__presenters: 500,
|
|
||||||
qry_limit__sessions: 100,
|
|
||||||
qry_max: 500, // This is the max number the limit is allowed to be set to.
|
|
||||||
qry__files_offset_seconds: null,
|
|
||||||
qry__files_sort: 'created_on',
|
|
||||||
|
|
||||||
// New additions for search stabilization (Standardized Pattern 2026-01-27)
|
|
||||||
search_version: 0,
|
|
||||||
qry__remote_first: false,
|
|
||||||
|
|
||||||
qry_and__file_count: true, // Essentially it should be greater than 0
|
|
||||||
|
|
||||||
save_search_text: true,
|
|
||||||
saved_search__session: null,
|
|
||||||
|
|
||||||
require__presenter_agree: false,
|
|
||||||
require__session_agree: false,
|
|
||||||
|
|
||||||
show_content__event_view: null,
|
|
||||||
show_content__location_qr: false,
|
|
||||||
show_content__presentation_description: false, // Note that this is for *all* presentations in the user interface. It is a global setting.
|
|
||||||
show_content__presenter_page_help: true,
|
|
||||||
// show_content__presenter_start: false,
|
|
||||||
show_content__presenter_view: null,
|
|
||||||
show_content__presenter_qr: false,
|
|
||||||
show_content__session_description: false,
|
|
||||||
show_content__session_files: false,
|
|
||||||
show_content__session_help: true,
|
|
||||||
show_content__session_presentations: false,
|
|
||||||
show_content__session_search_view: null,
|
|
||||||
show_content__session_search_help: true,
|
|
||||||
show_content__session_search_room_name: false,
|
|
||||||
show_content__session_view: null,
|
|
||||||
show_content__session_qr: false,
|
|
||||||
hide__session_msg: true,
|
|
||||||
hide__session_poc: true,
|
|
||||||
hide__session_poc_biography: true,
|
|
||||||
hide__presenter_biography: true,
|
|
||||||
|
|
||||||
// Only specific to lists and tables:
|
|
||||||
hide__session_li_location_field: false,
|
|
||||||
hide__session_li_poc_field: false,
|
|
||||||
hide__launcher_link_legacy: true, // Flask version
|
|
||||||
hide__launcher_link: true, // New Svelte version
|
|
||||||
hide__location_link: true,
|
|
||||||
|
|
||||||
show_content__disabled_files: false,
|
|
||||||
show_content__hidden_files: false,
|
|
||||||
show_content__hidden_presentations: false,
|
|
||||||
show_content__hidden_presenters: false,
|
|
||||||
show_content__hidden_sessions: false,
|
|
||||||
|
|
||||||
show__direct_download: false,
|
|
||||||
|
|
||||||
// No longer used. Use "hide" instead of "show". Now it is initially set in the remote event config sync.
|
|
||||||
// show_content__presentation_code: true,
|
|
||||||
// show_content__presenter_code: true,
|
|
||||||
// show_content__session_code: true,
|
|
||||||
|
|
||||||
show_menu__presenter: null,
|
|
||||||
show_menu__session: null,
|
|
||||||
show_menu__session_search: null,
|
|
||||||
show_menu__event_reports: null,
|
|
||||||
|
|
||||||
show_report: null,
|
|
||||||
|
|
||||||
disable_submit__opt_out: true,
|
|
||||||
submit_status__opt_out: null,
|
|
||||||
|
|
||||||
device_kv: {
|
|
||||||
// 'LNDF-67-89-92': {'collapse': true},
|
|
||||||
},
|
|
||||||
location_kv: {
|
|
||||||
// 'LNDF-67-89-92': {'collapse': true},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -358,22 +109,8 @@ const events_session_data_struct: key_val = {
|
|||||||
person: {}
|
person: {}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Badge Printing
|
// Badge Printing — see ae_events_stores__badges_defaults.ts
|
||||||
badges: {
|
badges: badges_sess_defaults,
|
||||||
fulltext_search_qry_str: null,
|
|
||||||
search_badge_type_code: null,
|
|
||||||
status_qry__search: null,
|
|
||||||
use_id_li: true,
|
|
||||||
search_status: null,
|
|
||||||
search_complete: true,
|
|
||||||
|
|
||||||
show_form__search: true,
|
|
||||||
show_form__search_results: true,
|
|
||||||
show_form__scan: false,
|
|
||||||
|
|
||||||
qr_scan_start: true,
|
|
||||||
qr_scan_result: null
|
|
||||||
},
|
|
||||||
|
|
||||||
// Event Files - uploads for sessions, presenters, etc
|
// Event Files - uploads for sessions, presenters, etc
|
||||||
files: {
|
files: {
|
||||||
@@ -384,158 +121,14 @@ const events_session_data_struct: key_val = {
|
|||||||
processed_file_list: []
|
processed_file_list: []
|
||||||
},
|
},
|
||||||
|
|
||||||
// Event Presentation Launcher (and native Electron app)
|
// Event Presentation Launcher — see ae_events_stores__launcher_defaults.ts
|
||||||
launcher: {
|
launcher: launcher_sess_defaults,
|
||||||
ws_connect_status: null,
|
|
||||||
av_recording_status: null,
|
|
||||||
controller_cmd: null,
|
|
||||||
controller_trigger_send: null,
|
|
||||||
event_file_open: {}, // This is from the older Launcher.
|
|
||||||
native: {},
|
|
||||||
|
|
||||||
// Shared observability for Sync Monitor and Config Drawer
|
// Lead Retrievals (Exhibit) — see ae_events_stores__leads_defaults.ts
|
||||||
sync_stats: {
|
leads: leads_sess_defaults,
|
||||||
total: 0,
|
|
||||||
cached: 0,
|
|
||||||
missing: 0,
|
|
||||||
currently_syncing: null
|
|
||||||
},
|
|
||||||
heartbeat_info: {
|
|
||||||
last_timestamp: null,
|
|
||||||
status: 'pending'
|
|
||||||
},
|
|
||||||
|
|
||||||
modal__title: '',
|
// Presentation Management — see ae_events_stores__pres_mgmt_defaults.ts
|
||||||
modal__open_event_file_id: false,
|
pres_mgmt: pres_mgmt_sess_defaults
|
||||||
modal__event_file_obj: null,
|
|
||||||
|
|
||||||
loading__session_li_status: null,
|
|
||||||
loading__session_id_status: null,
|
|
||||||
|
|
||||||
trigger_reload__event_session_obj_id: null,
|
|
||||||
trigger_reload__event_session_obj_li: null,
|
|
||||||
trigger_reload__event_location_obj_id: null,
|
|
||||||
trigger_reload__event_location_obj_li: null,
|
|
||||||
|
|
||||||
trigger__ws_connect: null,
|
|
||||||
trigger__ws_disconnect: null
|
|
||||||
},
|
|
||||||
|
|
||||||
// Lead Retrievals (Exhibit)
|
|
||||||
leads: {
|
|
||||||
show_form__license: false,
|
|
||||||
show_form__search: false,
|
|
||||||
show_form__scan: false,
|
|
||||||
show_form__view_lead: false, // Set to event_exhibit_tracking_id
|
|
||||||
// show_form__view_lead: [],
|
|
||||||
|
|
||||||
show_confirm__add_lead: [],
|
|
||||||
|
|
||||||
submit_status__license: null, // 'saving', 'created', 'updated'
|
|
||||||
// create_status__license: null, // 'creating', 'created', 'updated'
|
|
||||||
// update_status__license: null, // 'updating', 'created', 'updated'
|
|
||||||
|
|
||||||
submit_status__search: null, // 'searching', 'complete'
|
|
||||||
|
|
||||||
last_refresh_time: null as string | null,
|
|
||||||
next_refresh_countdown: 0,
|
|
||||||
|
|
||||||
entered_passcode: null,
|
|
||||||
|
|
||||||
tmp_license: {
|
|
||||||
index: null,
|
|
||||||
// 'agree' : false, // The user must agree to the license agreement.
|
|
||||||
email: '',
|
|
||||||
full_name: '',
|
|
||||||
passcode: '',
|
|
||||||
session_count: 0,
|
|
||||||
updated_on: new Date().toISOString()
|
|
||||||
},
|
|
||||||
|
|
||||||
entered_search_str: null,
|
|
||||||
|
|
||||||
lead_data_changed: null,
|
|
||||||
|
|
||||||
qr_scan_start: true,
|
|
||||||
qr_scan_result: null
|
|
||||||
},
|
|
||||||
|
|
||||||
// Presentation Management
|
|
||||||
pres_mgmt: {
|
|
||||||
// link: {
|
|
||||||
// ae_core: true,
|
|
||||||
// pres_mgmt__launcher_id: null, // event_location_id
|
|
||||||
// pres_mgmt__location_id: null, // event_location_id
|
|
||||||
// pres_mgmt__presenter_id: null, // event_presenter_id
|
|
||||||
// pres_mgmt__reports: null, // event_id
|
|
||||||
// pres_mgmt__session_id: null, // event_session_id
|
|
||||||
// pres_mgmt__session_search: null, // event_id
|
|
||||||
// },
|
|
||||||
// presenter__url_str: null,
|
|
||||||
presenter__updated_on: null,
|
|
||||||
session_updated_on: null,
|
|
||||||
|
|
||||||
location_name_qry_str: null,
|
|
||||||
fulltext_search_qry_str: null,
|
|
||||||
status_qry__search: null,
|
|
||||||
|
|
||||||
disable_submit__event_file_obj: true,
|
|
||||||
|
|
||||||
show_form__search: true,
|
|
||||||
show_form__search_results: true,
|
|
||||||
|
|
||||||
show_content__agree_text: false,
|
|
||||||
show_content__presenter_start: false,
|
|
||||||
|
|
||||||
show_content__presentation_description: false, // Note that this is per presentation. The event_presentation_id_random should match.
|
|
||||||
|
|
||||||
show_report: null,
|
|
||||||
// show_report__presenters_agree: false,
|
|
||||||
// show_report__recent_files: false,
|
|
||||||
|
|
||||||
show_field_edit__filename: false, // For file rename
|
|
||||||
|
|
||||||
new_upload_list: null,
|
|
||||||
files_uploading_count: null,
|
|
||||||
|
|
||||||
qry_limit__files: 75,
|
|
||||||
qry_limit__presentations: 25,
|
|
||||||
qry_limit__presenters: 500,
|
|
||||||
qry_limit__sessions: 100,
|
|
||||||
|
|
||||||
show_fields__presentation: true,
|
|
||||||
show_fields__session: true,
|
|
||||||
|
|
||||||
show_modal__presenter_agree: false,
|
|
||||||
show__session_poc_profile: false,
|
|
||||||
show_modal__session_poc_agree: false,
|
|
||||||
|
|
||||||
// hide__edit_location: {},
|
|
||||||
show__edit_location: {},
|
|
||||||
|
|
||||||
show__edit_poc_person: {},
|
|
||||||
|
|
||||||
show__view_alert: {}, // key values
|
|
||||||
show__edit_alert_msg: {}, // key values
|
|
||||||
|
|
||||||
tmp__alert_msg: {}, // key values
|
|
||||||
|
|
||||||
session_qr_url: {}, // key value of session_id and URL string
|
|
||||||
|
|
||||||
status_rpt: {
|
|
||||||
recent_files: null,
|
|
||||||
presenters_agree: null,
|
|
||||||
presenters_biography: null
|
|
||||||
},
|
|
||||||
|
|
||||||
rpt__session_no_files: true,
|
|
||||||
rpt__session_poc_agree: false, // Default to false for new events.
|
|
||||||
rpt__session_no_bio: true,
|
|
||||||
|
|
||||||
rpt__presenter_agree: true,
|
|
||||||
|
|
||||||
tmp_val__filename_no_ext: null // For file rename
|
|
||||||
}
|
|
||||||
|
|
||||||
// Speakers Management (Collection)
|
// Speakers Management (Collection)
|
||||||
|
|
||||||
|
|||||||
57
src/lib/stores/ae_events_stores__badges_defaults.ts
Normal file
57
src/lib/stores/ae_events_stores__badges_defaults.ts
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
/**
|
||||||
|
* ae_events_stores__badges_defaults.ts
|
||||||
|
*
|
||||||
|
* Default state for the badges (badge printing) section of ae_events_stores.ts.
|
||||||
|
* badges_loc_defaults → events_loc.badges (persisted to localStorage)
|
||||||
|
* badges_sess_defaults → events_sess.badges (in-memory, resets on page load)
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Persisted badge UI state — survives browser sessions.
|
||||||
|
export const badges_loc_defaults = {
|
||||||
|
auto_view: true,
|
||||||
|
|
||||||
|
show_hidden: false, // Hidden (archived) badges are excluded from the main list.
|
||||||
|
show_not_enabled: false,
|
||||||
|
|
||||||
|
show_printed: false,
|
||||||
|
allow_reprint: false,
|
||||||
|
|
||||||
|
show_element__cfg: true,
|
||||||
|
show_element__cfg_detail: false,
|
||||||
|
|
||||||
|
fulltext_search_qry_str: null,
|
||||||
|
search_badge_type_code: null,
|
||||||
|
|
||||||
|
// Search stabilization — version bump clears cache and re-runs (Standardized Pattern 2026-01-27).
|
||||||
|
search_version: 0,
|
||||||
|
qry__remote_first: false,
|
||||||
|
|
||||||
|
// Filter states
|
||||||
|
qry_printed_status: 'all', // 'all' | 'printed' | 'not_printed'
|
||||||
|
qry_affiliations: null, // null = no affiliation filter
|
||||||
|
qry_sort_order: '', // '' = default sort order
|
||||||
|
|
||||||
|
status_qry__search: null,
|
||||||
|
use_id_li: true,
|
||||||
|
search_status: null,
|
||||||
|
search_complete: false,
|
||||||
|
|
||||||
|
classes__form: 'border border-surface-200 p-4 space-y-4 rounded-container'
|
||||||
|
};
|
||||||
|
|
||||||
|
// In-memory badge state — resets on page load.
|
||||||
|
export const badges_sess_defaults = {
|
||||||
|
fulltext_search_qry_str: null,
|
||||||
|
search_badge_type_code: null,
|
||||||
|
status_qry__search: null,
|
||||||
|
use_id_li: true,
|
||||||
|
search_status: null,
|
||||||
|
search_complete: true,
|
||||||
|
|
||||||
|
show_form__search: true,
|
||||||
|
show_form__search_results: true,
|
||||||
|
show_form__scan: false,
|
||||||
|
|
||||||
|
qr_scan_start: true,
|
||||||
|
qr_scan_result: null
|
||||||
|
};
|
||||||
139
src/lib/stores/ae_events_stores__launcher_defaults.ts
Normal file
139
src/lib/stores/ae_events_stores__launcher_defaults.ts
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
/**
|
||||||
|
* ae_events_stores__launcher_defaults.ts
|
||||||
|
*
|
||||||
|
* Default state for the launcher (Event Presentation Launcher + Electron native app)
|
||||||
|
* section of ae_events_stores.ts.
|
||||||
|
* launcher_loc_defaults → events_loc.launcher (persisted to localStorage)
|
||||||
|
* launcher_sess_defaults → events_sess.launcher (in-memory, resets on page load)
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Persisted launcher config — survives browser sessions.
|
||||||
|
export const launcher_loc_defaults = {
|
||||||
|
// App mode: 'default' = browser, 'onsite' = browser onsite, 'native' = Electron app onsite.
|
||||||
|
app_mode: 'default',
|
||||||
|
ws_connect: false,
|
||||||
|
|
||||||
|
qry_limit__files: 25,
|
||||||
|
qry_limit__presentations: 25,
|
||||||
|
qry_limit__presenters: 75,
|
||||||
|
qry_limit__sessions: 50,
|
||||||
|
|
||||||
|
hide__launcher_header: false,
|
||||||
|
hide__launcher_menu: false,
|
||||||
|
hide__launcher_footer: false,
|
||||||
|
|
||||||
|
hide__modal_header_title: false,
|
||||||
|
|
||||||
|
hide_drawer__debug: true,
|
||||||
|
hide__ws_element: true,
|
||||||
|
hide__ws_form: true,
|
||||||
|
hide__ws_messages: true,
|
||||||
|
hide__ws_commands: true,
|
||||||
|
|
||||||
|
hide_content__draft_files: true,
|
||||||
|
|
||||||
|
show_content__disabled_files: false,
|
||||||
|
show_content__hidden_files: false,
|
||||||
|
show_content__hidden_presentations: false,
|
||||||
|
show_content__hidden_presenters: false,
|
||||||
|
show_content__hidden_sessions: false,
|
||||||
|
show_content__draft_files: false,
|
||||||
|
|
||||||
|
// These should be renamed to match the pres_mgmt section. Use "hide" instead of "show".
|
||||||
|
show_content__session_code: true,
|
||||||
|
show_content__presentation_code: true,
|
||||||
|
show_content__presenter_code: true,
|
||||||
|
|
||||||
|
show_section__controller: false,
|
||||||
|
|
||||||
|
// 3-Way Section States (V5 Overhaul)
|
||||||
|
// Values: 'collapsed' | 'auto' | 'pinned'
|
||||||
|
section_state__health: 'auto',
|
||||||
|
section_state__native_os: 'collapsed',
|
||||||
|
section_state__sync_timers: 'collapsed',
|
||||||
|
section_state__updates: 'collapsed',
|
||||||
|
section_state__controller: 'auto',
|
||||||
|
section_state__screen_saver: 'collapsed',
|
||||||
|
section_state__app_modes: 'collapsed',
|
||||||
|
section_state__local_actions: 'collapsed',
|
||||||
|
|
||||||
|
datetime_format: 'datetime_12_long',
|
||||||
|
time_format: 'time_12_short',
|
||||||
|
time_hours: 12, // 12 or 24
|
||||||
|
|
||||||
|
sync_intervals: {
|
||||||
|
event: 90000,
|
||||||
|
device: 60000,
|
||||||
|
location: 30000,
|
||||||
|
session: 15000,
|
||||||
|
presentation: 45000,
|
||||||
|
presenter: 60000,
|
||||||
|
file_sync: 10000
|
||||||
|
},
|
||||||
|
|
||||||
|
slct: {
|
||||||
|
event_id: null,
|
||||||
|
event_location_id: null,
|
||||||
|
event_session_id: null,
|
||||||
|
event_presentation_id: null,
|
||||||
|
event_presenter_id: null,
|
||||||
|
event_file_id: null
|
||||||
|
},
|
||||||
|
|
||||||
|
native: {
|
||||||
|
host_file_config_path: 'device_configs/ae_native_app_config.default.json'
|
||||||
|
},
|
||||||
|
|
||||||
|
idle_timer: 7 * 60 * 1000, // Milliseconds until idle state is entered.
|
||||||
|
idle_cycle: 5 * 1000, // How frequently idle status is checked (ms).
|
||||||
|
idle_loop_period: 3 * 60 * 1000, // How frequently screen-saver loop and similar run (ms).
|
||||||
|
|
||||||
|
screen_saver_img_kv: {}, // Built when launcher_file_cont loads — image files only.
|
||||||
|
modal__title: '-- Not Set --',
|
||||||
|
modal__open: null,
|
||||||
|
modal__open_filename: null,
|
||||||
|
modal_img_src: null,
|
||||||
|
|
||||||
|
controller: 'local',
|
||||||
|
controller_group_code: 'launcher-00',
|
||||||
|
controller_client_id: null
|
||||||
|
// controller_cmd: null,
|
||||||
|
// controller_trigger_send: null,
|
||||||
|
};
|
||||||
|
|
||||||
|
// In-memory launcher state — resets on page load (mostly real-time status/triggers).
|
||||||
|
export const launcher_sess_defaults = {
|
||||||
|
ws_connect_status: null,
|
||||||
|
av_recording_status: null,
|
||||||
|
controller_cmd: null,
|
||||||
|
controller_trigger_send: null,
|
||||||
|
event_file_open: {}, // From older launcher version; retained for compatibility.
|
||||||
|
native: {},
|
||||||
|
|
||||||
|
// Shared observability for Sync Monitor and Config Drawer.
|
||||||
|
sync_stats: {
|
||||||
|
total: 0,
|
||||||
|
cached: 0,
|
||||||
|
missing: 0,
|
||||||
|
currently_syncing: null
|
||||||
|
},
|
||||||
|
heartbeat_info: {
|
||||||
|
last_timestamp: null,
|
||||||
|
status: 'pending'
|
||||||
|
},
|
||||||
|
|
||||||
|
modal__title: '',
|
||||||
|
modal__open_event_file_id: false,
|
||||||
|
modal__event_file_obj: null,
|
||||||
|
|
||||||
|
loading__session_li_status: null,
|
||||||
|
loading__session_id_status: null,
|
||||||
|
|
||||||
|
trigger_reload__event_session_obj_id: null,
|
||||||
|
trigger_reload__event_session_obj_li: null,
|
||||||
|
trigger_reload__event_location_obj_id: null,
|
||||||
|
trigger_reload__event_location_obj_li: null,
|
||||||
|
|
||||||
|
trigger__ws_connect: null,
|
||||||
|
trigger__ws_disconnect: null
|
||||||
|
};
|
||||||
90
src/lib/stores/ae_events_stores__leads_defaults.ts
Normal file
90
src/lib/stores/ae_events_stores__leads_defaults.ts
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
/**
|
||||||
|
* ae_events_stores__leads_defaults.ts
|
||||||
|
*
|
||||||
|
* Default state for the leads (exhibitor lead retrieval) section of ae_events_stores.ts.
|
||||||
|
* leads_loc_defaults → events_loc.leads (persisted to localStorage)
|
||||||
|
* leads_sess_defaults → events_sess.leads (in-memory, resets on page load)
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Persisted leads config — survives browser sessions.
|
||||||
|
export const leads_loc_defaults = {
|
||||||
|
show_option__paid_tab: true,
|
||||||
|
show_content__scan_alert: true, // Workaround for QR scanner edge-case bug.
|
||||||
|
show_content__scan_requirements: true,
|
||||||
|
show_content__custom_question_descriptions: true,
|
||||||
|
show_content__email_link_warning: true,
|
||||||
|
|
||||||
|
default_to_scan: true,
|
||||||
|
// Fallback external registration ID used when building lead export data.
|
||||||
|
// Should be overridden by the active event's external_event_id in cfg_json.
|
||||||
|
default__external_registration_id: '2024_Annual Meeting',
|
||||||
|
|
||||||
|
auto_view: true, // Show the new lead immediately after adding by scan or search.
|
||||||
|
auto_hide_on_sign_in: true,
|
||||||
|
|
||||||
|
show_hidden: false, // Hidden (archived) leads are excluded from the main list.
|
||||||
|
show_not_enabled: false,
|
||||||
|
|
||||||
|
refresh_interval__tracking_li: 30000, // 30 seconds.
|
||||||
|
|
||||||
|
// Standardized Search Pattern 2026-01-28
|
||||||
|
search_version: 0,
|
||||||
|
qry__remote_first: false,
|
||||||
|
qry__search_text: '',
|
||||||
|
qry__sort_order: 'name_asc',
|
||||||
|
|
||||||
|
// Standardized Search Pattern (Tracking) 2026-01-28
|
||||||
|
tracking__search_version: 0,
|
||||||
|
tracking__qry__remote_first: false,
|
||||||
|
tracking__qry__search_text: '',
|
||||||
|
tracking__qry__sort_order: 'created_desc',
|
||||||
|
tracking__qry__licensee_email: 'all',
|
||||||
|
|
||||||
|
// Exhibitor's shared passcode for staff booth access. Used for initial lead retrieval auth.
|
||||||
|
entered_passcode: null,
|
||||||
|
|
||||||
|
// auth_exhibit_kv: key-value of exhibit IDs this browser client is authorized for,
|
||||||
|
// mapped to { key, updated_on }. Entries expire after a configurable max age.
|
||||||
|
auth_exhibit_kv: {},
|
||||||
|
|
||||||
|
edit_license_li: false,
|
||||||
|
|
||||||
|
// Per-exhibit current tab. Key = exhibit ID (random), value = tab name.
|
||||||
|
// Intentionally persisted so each exhibit's last-used tab is remembered across sessions.
|
||||||
|
// Example: {'LNDF-67-89-92': 'start', 'OFLN-32-38-14': 'add_scan'}
|
||||||
|
tab: {}
|
||||||
|
};
|
||||||
|
|
||||||
|
// In-memory leads state — resets on page load.
|
||||||
|
export const leads_sess_defaults = {
|
||||||
|
show_form__license: false,
|
||||||
|
show_form__search: false,
|
||||||
|
show_form__scan: false,
|
||||||
|
show_form__view_lead: false, // Set to event_exhibit_tracking_id when a lead is active.
|
||||||
|
|
||||||
|
show_confirm__add_lead: [],
|
||||||
|
|
||||||
|
submit_status__license: null, // 'saving' | 'created' | 'updated'
|
||||||
|
submit_status__search: null, // 'searching' | 'complete'
|
||||||
|
|
||||||
|
last_refresh_time: null as string | null,
|
||||||
|
next_refresh_countdown: 0,
|
||||||
|
|
||||||
|
entered_passcode: null,
|
||||||
|
|
||||||
|
tmp_license: {
|
||||||
|
index: null,
|
||||||
|
email: '',
|
||||||
|
full_name: '',
|
||||||
|
passcode: '',
|
||||||
|
session_count: 0,
|
||||||
|
updated_on: new Date().toISOString()
|
||||||
|
},
|
||||||
|
|
||||||
|
entered_search_str: null,
|
||||||
|
|
||||||
|
lead_data_changed: null,
|
||||||
|
|
||||||
|
qr_scan_start: true,
|
||||||
|
qr_scan_result: null
|
||||||
|
};
|
||||||
150
src/lib/stores/ae_events_stores__pres_mgmt_defaults.ts
Normal file
150
src/lib/stores/ae_events_stores__pres_mgmt_defaults.ts
Normal file
@@ -0,0 +1,150 @@
|
|||||||
|
/**
|
||||||
|
* ae_events_stores__pres_mgmt_defaults.ts
|
||||||
|
*
|
||||||
|
* Default state for the pres_mgmt (Presentation Management) section of ae_events_stores.ts.
|
||||||
|
* pres_mgmt_loc_defaults → events_loc.pres_mgmt (persisted to localStorage)
|
||||||
|
* pres_mgmt_sess_defaults → events_sess.pres_mgmt (in-memory, resets on page load)
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Persisted pres_mgmt config — survives browser sessions.
|
||||||
|
export const pres_mgmt_loc_defaults = {
|
||||||
|
sync_local_config: false,
|
||||||
|
lock_config: true,
|
||||||
|
|
||||||
|
datetime_format: 'datetime_12_long',
|
||||||
|
time_format: 'time_12_short',
|
||||||
|
time_hours: 12, // 12 or 24
|
||||||
|
|
||||||
|
qry_enabled: 'enabled', // 'all' | 'disabled' | 'enabled'
|
||||||
|
qry_hidden: 'not_hidden', // 'all' | 'hidden' | 'not_hidden'
|
||||||
|
qry_limit__files: 75,
|
||||||
|
qry_limit__presentations: 25,
|
||||||
|
qry_limit__presenters: 500,
|
||||||
|
qry_limit__sessions: 100,
|
||||||
|
qry_max: 500, // Maximum value the limit is allowed to be set to.
|
||||||
|
qry__files_offset_seconds: null,
|
||||||
|
qry__files_sort: 'created_on',
|
||||||
|
|
||||||
|
// Search stabilization — version bump clears cache and re-runs (Standardized Pattern 2026-01-27).
|
||||||
|
search_version: 0,
|
||||||
|
qry__remote_first: false,
|
||||||
|
|
||||||
|
qry_and__file_count: true, // When true, only sessions with at least 1 file are returned.
|
||||||
|
|
||||||
|
save_search_text: true,
|
||||||
|
saved_search__session: null,
|
||||||
|
|
||||||
|
require__presenter_agree: false,
|
||||||
|
require__session_agree: false,
|
||||||
|
|
||||||
|
show_content__event_view: null,
|
||||||
|
show_content__location_qr: false,
|
||||||
|
show_content__presentation_description: false, // Global toggle — applies to all presentations.
|
||||||
|
show_content__presenter_page_help: true,
|
||||||
|
show_content__presenter_view: null,
|
||||||
|
show_content__presenter_qr: false,
|
||||||
|
show_content__session_description: false,
|
||||||
|
show_content__session_files: false,
|
||||||
|
show_content__session_help: true,
|
||||||
|
show_content__session_presentations: false,
|
||||||
|
show_content__session_search_view: null,
|
||||||
|
show_content__session_search_help: true,
|
||||||
|
show_content__session_search_room_name: false,
|
||||||
|
show_content__session_view: null,
|
||||||
|
show_content__session_qr: false,
|
||||||
|
hide__session_msg: true,
|
||||||
|
hide__session_poc: true,
|
||||||
|
hide__session_poc_biography: true,
|
||||||
|
hide__presenter_biography: true,
|
||||||
|
|
||||||
|
// List/table-specific visibility.
|
||||||
|
hide__session_li_location_field: false,
|
||||||
|
hide__session_li_poc_field: false,
|
||||||
|
hide__launcher_link_legacy: true, // Flask version.
|
||||||
|
hide__launcher_link: true, // SvelteKit version.
|
||||||
|
hide__location_link: true,
|
||||||
|
|
||||||
|
show_content__disabled_files: false,
|
||||||
|
show_content__hidden_files: false,
|
||||||
|
show_content__hidden_presentations: false,
|
||||||
|
show_content__hidden_presenters: false,
|
||||||
|
show_content__hidden_sessions: false,
|
||||||
|
|
||||||
|
show__direct_download: false,
|
||||||
|
|
||||||
|
// Menu visibility — null means "use server-side default".
|
||||||
|
// Use "hide" prefix for any new additions here.
|
||||||
|
show_menu__presenter: null,
|
||||||
|
show_menu__session: null,
|
||||||
|
show_menu__session_search: null,
|
||||||
|
show_menu__event_reports: null,
|
||||||
|
|
||||||
|
show_report: null,
|
||||||
|
|
||||||
|
disable_submit__opt_out: true,
|
||||||
|
submit_status__opt_out: null,
|
||||||
|
|
||||||
|
device_kv: {},
|
||||||
|
location_kv: {}
|
||||||
|
};
|
||||||
|
|
||||||
|
// In-memory pres_mgmt state — resets on page load.
|
||||||
|
export const pres_mgmt_sess_defaults = {
|
||||||
|
presenter__updated_on: null,
|
||||||
|
session_updated_on: null,
|
||||||
|
|
||||||
|
location_name_qry_str: null,
|
||||||
|
fulltext_search_qry_str: null,
|
||||||
|
status_qry__search: null,
|
||||||
|
|
||||||
|
disable_submit__event_file_obj: true,
|
||||||
|
|
||||||
|
show_form__search: true,
|
||||||
|
show_form__search_results: true,
|
||||||
|
|
||||||
|
show_content__agree_text: false,
|
||||||
|
show_content__presenter_start: false,
|
||||||
|
show_content__presentation_description: false, // Per-presentation (keyed by event_presentation_id_random).
|
||||||
|
|
||||||
|
show_report: null,
|
||||||
|
|
||||||
|
show_field_edit__filename: false, // For file rename.
|
||||||
|
|
||||||
|
new_upload_list: null,
|
||||||
|
files_uploading_count: null,
|
||||||
|
|
||||||
|
qry_limit__files: 75,
|
||||||
|
qry_limit__presentations: 25,
|
||||||
|
qry_limit__presenters: 500,
|
||||||
|
qry_limit__sessions: 100,
|
||||||
|
|
||||||
|
show_fields__presentation: true,
|
||||||
|
show_fields__session: true,
|
||||||
|
|
||||||
|
show_modal__presenter_agree: false,
|
||||||
|
show__session_poc_profile: false,
|
||||||
|
show_modal__session_poc_agree: false,
|
||||||
|
|
||||||
|
show__edit_location: {},
|
||||||
|
show__edit_poc_person: {},
|
||||||
|
|
||||||
|
show__view_alert: {}, // Key-value: show alert by ID.
|
||||||
|
show__edit_alert_msg: {}, // Key-value: show edit alert msg by ID.
|
||||||
|
tmp__alert_msg: {}, // Key-value: temp alert msg content by ID.
|
||||||
|
|
||||||
|
session_qr_url: {}, // Key-value: session_id → URL string.
|
||||||
|
|
||||||
|
status_rpt: {
|
||||||
|
recent_files: null,
|
||||||
|
presenters_agree: null,
|
||||||
|
presenters_biography: null
|
||||||
|
},
|
||||||
|
|
||||||
|
rpt__session_no_files: true,
|
||||||
|
rpt__session_poc_agree: false, // Default to false for new events.
|
||||||
|
rpt__session_no_bio: true,
|
||||||
|
|
||||||
|
rpt__presenter_agree: true,
|
||||||
|
|
||||||
|
tmp_val__filename_no_ext: null // For file rename.
|
||||||
|
};
|
||||||
@@ -2,6 +2,8 @@
|
|||||||
// before svelte-persisted-store hydrates from it.
|
// before svelte-persisted-store hydrates from it.
|
||||||
import { AE_LOC_VERSION } from '$lib/stores/store_versions';
|
import { AE_LOC_VERSION } from '$lib/stores/store_versions';
|
||||||
|
|
||||||
|
import { auth_loc_defaults } from '$lib/stores/ae_stores__auth_loc_defaults';
|
||||||
|
|
||||||
import { persisted } from 'svelte-persisted-store';
|
import { persisted } from 'svelte-persisted-store';
|
||||||
|
|
||||||
import { readable, writable } from 'svelte/store';
|
import { readable, writable } from 'svelte/store';
|
||||||
@@ -78,73 +80,8 @@ const ae_app_local_data_defaults: key_val = {
|
|||||||
adv_mode: false,
|
adv_mode: false,
|
||||||
sync_local_config: true, // When true, pulls site config from the remote API on load.
|
sync_local_config: true, // When true, pulls site config from the remote API on load.
|
||||||
|
|
||||||
account_id: ae_account_id,
|
// Auth and identity section — see ae_stores__auth_loc_defaults.ts.
|
||||||
account_code: 'not_set',
|
...auth_loc_defaults,
|
||||||
account_name: 'Account Name Not Set',
|
|
||||||
allow_access: true, // Set to key site key was used, otherwise set to true.
|
|
||||||
site_domain: null, // https://example.com, https://dev.example.com, etc.
|
|
||||||
site_access_key: null, // This is the general site access key
|
|
||||||
site_domain_access_key: null, // This is specific to a (sub)domain.
|
|
||||||
site_cfg_json: {
|
|
||||||
slct__event_id: null,
|
|
||||||
slct__event_badge_template_id: null,
|
|
||||||
slct__sponsorship_cfg_id: null,
|
|
||||||
header_image_path: null
|
|
||||||
},
|
|
||||||
|
|
||||||
// Per-permission-level passcodes loaded from the site record on login.
|
|
||||||
// null = no passcode required for that tier. Overwritten by the site API response.
|
|
||||||
site_access_code_kv: {
|
|
||||||
administrator: null,
|
|
||||||
trusted: null,
|
|
||||||
public: 'public1980',
|
|
||||||
authenticated: 'auth1980'
|
|
||||||
},
|
|
||||||
|
|
||||||
access_type: 'anonymous',
|
|
||||||
administrator_access: false,
|
|
||||||
trusted_access: false,
|
|
||||||
public_access: false,
|
|
||||||
authenticated_access: false,
|
|
||||||
anonymous_access: true,
|
|
||||||
|
|
||||||
user_email: null,
|
|
||||||
// Stored on sign-in so the original permission level can be restored if temporarily escalated.
|
|
||||||
user_access_type: null,
|
|
||||||
|
|
||||||
jwt: null, // JSON Web Token for authenticated API requests.
|
|
||||||
|
|
||||||
person_id: null,
|
|
||||||
person: {
|
|
||||||
id: null,
|
|
||||||
given_name: null,
|
|
||||||
full_name: null,
|
|
||||||
full_name_override: null, // Previously called display_name.
|
|
||||||
primary_email: null,
|
|
||||||
user_id: null,
|
|
||||||
|
|
||||||
qry_limit__people: 150,
|
|
||||||
|
|
||||||
show_content__person_page_help: false
|
|
||||||
},
|
|
||||||
|
|
||||||
user_id: null,
|
|
||||||
user: {
|
|
||||||
id: null,
|
|
||||||
username: null,
|
|
||||||
name: null,
|
|
||||||
email: null,
|
|
||||||
allow_auth_key: null, // Magic-link token — allows sign-in without password.
|
|
||||||
super: false,
|
|
||||||
manager: false, // Can manage accounts and users globally.
|
|
||||||
administrator: false, // Account-level administrator.
|
|
||||||
verified: false,
|
|
||||||
public: false,
|
|
||||||
person_id: null,
|
|
||||||
access_type: null,
|
|
||||||
|
|
||||||
qry_limit__users: 100
|
|
||||||
},
|
|
||||||
|
|
||||||
qry__enabled: 'enabled', // all, disabled, enabled
|
qry__enabled: 'enabled', // all, disabled, enabled
|
||||||
qry__hidden: 'not_hidden', // all, hidden, not_hidden
|
qry__hidden: 'not_hidden', // all, hidden, not_hidden
|
||||||
|
|||||||
90
src/lib/stores/ae_stores__auth_loc_defaults.ts
Normal file
90
src/lib/stores/ae_stores__auth_loc_defaults.ts
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
/**
|
||||||
|
* ae_stores__auth_loc_defaults.ts
|
||||||
|
*
|
||||||
|
* Authentication and identity defaults for the ae_loc persisted store.
|
||||||
|
* Spread into ae_app_local_data_defaults via ae_stores.ts — zero consumer
|
||||||
|
* changes needed; all $ae_loc.* paths remain unchanged.
|
||||||
|
*
|
||||||
|
* Three authentication paths share this store region:
|
||||||
|
* 1. Site passcode — site_access_code_kv, access_type, *_access flags
|
||||||
|
* 2. AE user/password — jwt, user{}, user_id
|
||||||
|
* 3. Resolved identity — person{}, person_id (populated after either path)
|
||||||
|
*
|
||||||
|
* See documentation/AE__Permissions_and_Security.md for the full hierarchy.
|
||||||
|
*/
|
||||||
|
export const auth_loc_defaults = {
|
||||||
|
// account_id is always null at module init — the env var is intentionally not
|
||||||
|
// read here; the value is set from the site API after the first trusted login.
|
||||||
|
account_id: null,
|
||||||
|
account_code: 'not_set',
|
||||||
|
account_name: 'Account Name Not Set',
|
||||||
|
|
||||||
|
// Set to the site access key used for login, or true if no site passcode is required.
|
||||||
|
allow_access: true,
|
||||||
|
|
||||||
|
site_domain: null, // e.g. https://example.com, https://dev.example.com
|
||||||
|
site_access_key: null, // General site access key.
|
||||||
|
site_domain_access_key: null, // Subdomain-specific access key.
|
||||||
|
site_cfg_json: {
|
||||||
|
slct__event_id: null,
|
||||||
|
slct__event_badge_template_id: null,
|
||||||
|
slct__sponsorship_cfg_id: null,
|
||||||
|
header_image_path: null
|
||||||
|
},
|
||||||
|
|
||||||
|
// Per-permission-level passcodes loaded from the site record on login.
|
||||||
|
// null = no passcode required for that tier. Overwritten by the site API response.
|
||||||
|
site_access_code_kv: {
|
||||||
|
administrator: null,
|
||||||
|
trusted: null,
|
||||||
|
public: 'public1980',
|
||||||
|
authenticated: 'auth1980'
|
||||||
|
},
|
||||||
|
|
||||||
|
// Current permission level. Updated by ae_utils__perm_checks after any auth event.
|
||||||
|
// Values: 'anonymous' | 'public' | 'authenticated' | 'trusted' | 'administrator'
|
||||||
|
access_type: 'anonymous',
|
||||||
|
// Cumulative flags — true means "you have AT LEAST this access level."
|
||||||
|
administrator_access: false,
|
||||||
|
trusted_access: false,
|
||||||
|
public_access: false,
|
||||||
|
authenticated_access: false,
|
||||||
|
anonymous_access: true,
|
||||||
|
|
||||||
|
user_email: null,
|
||||||
|
// Stored on sign-in so the original permission level can be restored if temporarily escalated.
|
||||||
|
user_access_type: null,
|
||||||
|
|
||||||
|
jwt: null, // JSON Web Token for authenticated API requests.
|
||||||
|
|
||||||
|
// Resolved person identity — populated after either auth path.
|
||||||
|
person_id: null,
|
||||||
|
person: {
|
||||||
|
id: null,
|
||||||
|
given_name: null,
|
||||||
|
full_name: null,
|
||||||
|
full_name_override: null, // Previously called display_name.
|
||||||
|
primary_email: null,
|
||||||
|
user_id: null,
|
||||||
|
qry_limit__people: 150,
|
||||||
|
show_content__person_page_help: false
|
||||||
|
},
|
||||||
|
|
||||||
|
// AE user account — only populated for AE username/password login.
|
||||||
|
user_id: null,
|
||||||
|
user: {
|
||||||
|
id: null,
|
||||||
|
username: null,
|
||||||
|
name: null,
|
||||||
|
email: null,
|
||||||
|
allow_auth_key: null, // Magic-link token — allows sign-in without password.
|
||||||
|
super: false,
|
||||||
|
manager: false, // Can manage accounts and users globally.
|
||||||
|
administrator: false, // Account-level administrator.
|
||||||
|
verified: false,
|
||||||
|
public: false,
|
||||||
|
person_id: null,
|
||||||
|
access_type: null,
|
||||||
|
qry_limit__users: 100
|
||||||
|
}
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user