diff --git a/migrations/20250211040017_create_subscribers_table.js b/migrations/20250211040017_create_subscribers_table.js new file mode 100644 index 00000000..8fce51b0 --- /dev/null +++ b/migrations/20250211040017_create_subscribers_table.js @@ -0,0 +1,16 @@ +export function up(knex) { + return knex.schema.createTable("subscribers", function (table) { + table.increments("id").primary(); + table.string("email").notNullable(); + table.integer("incident_id").notNullable().defaultTo(0); + table.timestamp("created_at").defaultTo(knex.fn.now()); + table.timestamp("updated_at").defaultTo(knex.fn.now()); + table.string("status", 255).defaultTo("ACTIVE"); + table.string("token").notNullable().unique(); + table.unique(["email", "incident_id"]); + }); +} + +export function down(knex) { + return knex.schema.dropTableIfExists("subscribers"); +} diff --git a/src/lib/components/IncidentNew.svelte b/src/lib/components/IncidentNew.svelte index d9d98947..37ced440 100644 --- a/src/lib/components/IncidentNew.svelte +++ b/src/lib/components/IncidentNew.svelte @@ -7,6 +7,7 @@ import { Button } from "$lib/components/ui/button"; import GMI from "$lib/components/gmi.svelte"; import { page } from "$app/stores"; + import { createEventDispatcher } from "svelte"; export let incident; export let index; export let lang; @@ -21,6 +22,8 @@ const lastedFor = fd(startTime, endTime, selectedLang); const startedAt = fdn(startTime, selectedLang); + export let showSubButton = false; + let isFuture = false; //is future incident if (nowTime < startTime) { @@ -62,6 +65,10 @@ maintenanceBadge = "Upcoming Maintenance"; maintenanceBadgeColor = "text-upcoming-maintenance"; } + let dispatch = createEventDispatcher(); + function showSubscribeFn() { + dispatch("subscribe"); + }
{invalidFormMessage}
+{validFormMessage}
+{invalidFormMessage}
+id | +incident_id | +status | +token | +|
---|---|---|---|---|
{subscriber.id} | +{subscriber.email} | +{subscriber.incident_id} | +{subscriber.status} | +{subscriber.token} | +
+ Subscribe to updates for {selectedIncident.title} via email. You'll receive email notifications when incidents are + updated. +
+Loading...
+ {:else if error} +{error}
+ {:else} ++ Unsubscribe from {incident.title} You'll stop receiving email notifications when this incident is updated. +
+ {#if invalidFormMessage != ""} ++ {invalidFormMessage} +
++ {validFormMessage} +
++ + ${this.siteData.siteName} + + | +
Status | +${data.status} | +
Time | +${formattedTime} | +
New Event Update: ${data.description}
+Notify Subscribers
+