259 lines
7.2 KiB
TypeScript
259 lines
7.2 KiB
TypeScript
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<Badge>;
|
|
exhibits!: Table<Exhibit>;
|
|
exhibit_tracking!: Table<Exhibit_tracking>;
|
|
|
|
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(); |