import Dexie, { type Table } from 'dexie'; export interface Event { id_random: string; code: string; account_id_random: string; conference: boolean; type: string; name: string; summary: null|string; description: null|string; start_datetime: Date; end_datetime: Date; timezone: null|string; location_address_json: null|string; mod_abstracts_json: null|string; mod_badges_json: null|string; mod_exhibits_json: null|string; mod_pres_mgmt_json: null|string; cfg_json: string; enable: null|boolean; hide: null|boolean; priority: null|boolean sort: null|number; group: null|string; notes: null|string; created_on: Date; updated_on: null|Date; } export interface Badge { // id?: number; id_random: string; event_badge_id_random: string; event_id_random: string; pronouns: null|string; informal_name: null|string; title_names: null|string; given_name: string; middle_name: null|string; family_name: null|string; designations: null|string; professional_title: null|string; professional_title_override: null|string; full_name: string; full_name_override: null|string; affiliations: string; affiliations_override: null|string; email: string; email_override: null|string; address_line_1: null|string; address_line_2: null|string; address_line_3: null|string; city: null|string; country_subdivision_code: null|string; state_province: null|string; state_province_abb: null|string; postal_code: null|string; country_alpha_2_code: null|string; country: null|string; full_address: null|string; location: null|string; location_override: null|string; query_str: null|string; badge_type: string; badge_type_code: string; badge_type_code_override: null|string; badge_type_override: null|string; external_event_id: string; external_id: string; external_person_id: string; enable: null|boolean; hide: null|boolean; priority: null|boolean sort: null|number; group: null|string; notes: null|string; created_on: Date; updated_on: null|Date; } export interface Exhibit { // id?: number; id_random: string; event_exhibit_id_random: string; event_id_random: string; code: string; name: string; // tagline: null|string; description: null|string; staff_passcode: null data_json: null|string; leads_api_access: null|boolean; leads_custom_questions_json: null|string; leads_device_sm_qty: null|number; leads_device_lg_qty: null|number; license_max: number; license_li_json: null|string; cfg_json: string; enable: null|boolean; hide: null|boolean; priority: null|boolean sort: null|number; group: null|string; notes: null|string; created_on: Date; updated_on: null|Date; } export interface Exhibit_tracking { // id?: number; id_random: string; event_exhibit_tracking_id_random: string; event_exhibit_id_random: string; event_badge_id_random: string; event_person_id_random: null|string; // Is this needed? external_person_id: null|string; // This is an email address exhibitor_notes: null|string; responses_json: null|string; data_json: null|string; event_exhibit_name: string; // Extra field for convenience event_badge_title_names: null|string; event_badge_given_name: string; event_badge_family_name: null|string; event_badge_designations: null|string; event_badge_full_name: string; event_badge_full_name_override: null|string; event_badge_professional_title: null|string; event_badge_professional_title_override: null|string; event_badge_affiliations: null|string; event_badge_affiliations_override: null|string; event_badge_email: null|string; event_badge_email_override: null|string; event_badge_location: null|string; event_badge_location_override: null|string; event_badge_country: null|string; enable: null|boolean; hide: null|boolean; priority: null|boolean sort: null|number; group: null|string; notes: null|string; created_on: Date; updated_on: null|Date; } export interface Session { id_random: string; event_session_id_random: string; external_id: string; code: string; for_type: string; for_id_random: string; type_code: string; event_id_random: string; event_location_id_random: string; name: string; description: null|string; start_datetime: Date; end_datetime: Date; hide_event_launcher: null|boolean; enable: null|boolean; hide: null|boolean; priority: null|boolean sort: null|number; group: null|string; notes: null|string; created_on: Date; updated_on: null|Date; } export class MySubClassedDexie extends Dexie { // 'badges' is added by dexie when declaring the stores() // We just tell the typing system this is the case badges!: Table; exhibits!: Table; exhibit_tracking!: Table; constructor() { super('ae_events_db'); this.version(1).stores({ events: ` id_random, code, account_id_random, conference, type, name, summary, description, start_datetime, end_datetime, timezone, location_address_json, mod_abstracts_json, mod_badges_json, mod_exhibits_json, mod_pres_mgmt_json, cfg_json, enable, hide, priority, sort, group, notes, created_on, updated_on`, // badges: '++id, full_name, email' // Primary key and indexed props badges: ` id_random, event_badge_id_random, event_id_random, full_name, full_name_override, email, email_override, affiliations, affiliations_override, badge_type, badge_type_code, badge_type_code_override, badge_type_override, external_event_id, external_id, external_person_id, enable, hide, priority, sort, group, notes, created_on, updated_on`, exhibits: ` id_random, event_exhibit_id_random, code, name, description, staff_passcode, data_json, license_max, license_li_json, cfg_json, enable, hide, priority, sort, group, notes, created_on, updated_on, [priority+name]`, exhibit_tracking: ` id_random, event_exhibit_tracking_id_random, event_exhibit_id_random, event_badge_id_random, event_person_id_random, exhibitor_notes, responses_json, data_json, event_badge_full_name, event_badge_email, enable, hide, priority, sort, group, notes, created_on, updated_on`, sessions: ` id_random, event_session_id_random, external_id, code, for_type, for_id_random, type_code, event_id_random, event_location_id_random, name, description, start_datetime, end_datetime, hide_event_launcher, enable, hide, priority, sort, group, notes, created_on, updated_on`, }); } } export const db_events = new MySubClassedDexie();