demo-orgs: Move helper function to get days remaining until deletion.

Moves the get_demo_organization_deadline_days_remaining helper from
"web/src/navbar_alerts.ts" to "web/src/demo_organizations_ui.ts".

Prep commit for updating the navbar alert for demo organization to
have a button that opens the modal for converting the organization
to a permanent organization.
This commit is contained in:
Lauryn Menard
2025-04-29 17:37:42 +02:00
committed by Tim Abbott
parent a9e3331fcc
commit d732a7b801
4 changed files with 39 additions and 24 deletions

View File

@@ -1,4 +1,5 @@
import $ from "jquery"; import $ from "jquery";
import assert from "minimalistic-assert";
import {z} from "zod"; import {z} from "zod";
import render_convert_demo_organization_form from "../templates/settings/convert_demo_organization_form.hbs"; import render_convert_demo_organization_form from "../templates/settings/convert_demo_organization_form.hbs";
@@ -8,7 +9,6 @@ import * as channel from "./channel.ts";
import * as dialog_widget from "./dialog_widget.ts"; import * as dialog_widget from "./dialog_widget.ts";
import {$t} from "./i18n.ts"; import {$t} from "./i18n.ts";
import * as keydown_util from "./keydown_util.ts"; import * as keydown_util from "./keydown_util.ts";
import {get_demo_organization_deadline_days_remaining} from "./navbar_alerts.ts";
import * as settings_config from "./settings_config.ts"; import * as settings_config from "./settings_config.ts";
import * as settings_data from "./settings_data.ts"; import * as settings_data from "./settings_data.ts";
import * as settings_org from "./settings_org.ts"; import * as settings_org from "./settings_org.ts";
@@ -16,6 +16,15 @@ import type {RequestOpts} from "./settings_ui.ts";
import {current_user, realm} from "./state_data.ts"; import {current_user, realm} from "./state_data.ts";
import type {HTMLSelectOneElement} from "./types.ts"; import type {HTMLSelectOneElement} from "./types.ts";
export function get_demo_organization_deadline_days_remaining(): number {
const now = Date.now();
assert(realm.demo_organization_scheduled_deletion_date !== undefined);
const deadline = realm.demo_organization_scheduled_deletion_date * 1000;
const day = 24 * 60 * 60 * 1000; // hours * minutes * seconds * milliseconds
const days_remaining = Math.round(Math.abs(deadline - now) / day);
return days_remaining;
}
export function insert_demo_organization_warning(): void { export function insert_demo_organization_warning(): void {
const days_remaining = get_demo_organization_deadline_days_remaining(); const days_remaining = get_demo_organization_deadline_days_remaining();
const rendered_demo_organization_warning = render_demo_organization_warning({ const rendered_demo_organization_warning = render_demo_organization_warning({

View File

@@ -8,6 +8,7 @@ import render_navbar_banners_testing_popover from "../templates/popovers/navbar_
import * as banners from "./banners.ts"; import * as banners from "./banners.ts";
import type {AlertBanner} from "./banners.ts"; import type {AlertBanner} from "./banners.ts";
import * as channel from "./channel.ts"; import * as channel from "./channel.ts";
import * as demo_organizations_ui from "./demo_organizations_ui.ts";
import * as desktop_notifications from "./desktop_notifications.ts"; import * as desktop_notifications from "./desktop_notifications.ts";
import * as feedback_widget from "./feedback_widget.ts"; import * as feedback_widget from "./feedback_widget.ts";
import {$t, $t_html} from "./i18n.ts"; import {$t, $t_html} from "./i18n.ts";
@@ -172,15 +173,6 @@ export function toggle_organization_profile_incomplete_banner(): void {
} }
} }
export function get_demo_organization_deadline_days_remaining(): number {
const now = Date.now();
assert(realm.demo_organization_scheduled_deletion_date !== undefined);
const deadline = realm.demo_organization_scheduled_deletion_date * 1000;
const day = 24 * 60 * 60 * 1000; // hours * minutes * seconds * milliseconds
const days_remaining = Math.round(Math.abs(deadline - now) / day);
return days_remaining;
}
export function should_offer_to_update_timezone(): boolean { export function should_offer_to_update_timezone(): boolean {
// This offer is only for logged-in users with the setting enabled. // This offer is only for logged-in users with the setting enabled.
return ( return (
@@ -358,7 +350,7 @@ const bankruptcy_banner = (): AlertBanner => {
}; };
const demo_organization_deadline_banner = (): AlertBanner => { const demo_organization_deadline_banner = (): AlertBanner => {
const days_remaining = get_demo_organization_deadline_days_remaining(); const days_remaining = demo_organizations_ui.get_demo_organization_deadline_days_remaining();
return { return {
process: "demo-organization-deadline", process: "demo-organization-deadline",
intent: days_remaining <= 7 ? "danger" : "info", intent: days_remaining <= 7 ? "danger" : "info",

View File

@@ -0,0 +1,27 @@
"use strict";
const assert = require("node:assert/strict");
const {addDays} = require("date-fns");
const {zrequire} = require("./lib/namespace.cjs");
const {run_test} = require("./lib/test.cjs");
const demo_organization_ui = zrequire("demo_organizations_ui");
const {set_realm} = zrequire("state_data");
const realm = {};
set_realm(realm);
run_test("get_demo_organization_deadline_days_remaining", ({override}) => {
const start_time = new Date("2024-01-01T10:00:00.000Z"); // Wednesday 1/1/2024 10:00:00 AM (UTC+0)
override(Date, "now", () => start_time);
const demo_organization_scheduled_deletion_date = addDays(start_time, 7); // Wednesday 1/8/2024 10:00:00 AM (UTC+0)
override(
realm,
"demo_organization_scheduled_deletion_date",
Math.trunc(demo_organization_scheduled_deletion_date / 1000),
);
assert.equal(demo_organization_ui.get_demo_organization_deadline_days_remaining(), 7);
});

View File

@@ -152,16 +152,3 @@ test("should_show_server_upgrade_banner", ({override}) => {
override(Date, "now", () => addDays(start_time, 8).getTime()); // Thursday 1/9/2024 10:00:00 AM (UTC+0) override(Date, "now", () => addDays(start_time, 8).getTime()); // Thursday 1/9/2024 10:00:00 AM (UTC+0)
assert.equal(navbar_alerts.should_show_server_upgrade_banner(ls), true); assert.equal(navbar_alerts.should_show_server_upgrade_banner(ls), true);
}); });
test("get_demo_organization_deadline_days_remaining", ({override}) => {
const start_time = new Date("2024-01-01T10:00:00.000Z"); // Wednesday 1/1/2024 10:00:00 AM (UTC+0)
override(Date, "now", () => start_time);
const demo_organization_scheduled_deletion_date = addDays(start_time, 7); // Wednesday 1/8/2024 10:00:00 AM (UTC+0)
override(
realm,
"demo_organization_scheduled_deletion_date",
Math.trunc(demo_organization_scheduled_deletion_date / 1000),
);
assert.equal(navbar_alerts.get_demo_organization_deadline_days_remaining(), 7);
});