mirror of
https://github.com/zulip/zulip.git
synced 2025-11-11 17:36:27 +00:00
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:
committed by
Tim Abbott
parent
a9e3331fcc
commit
d732a7b801
@@ -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({
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
27
web/tests/demo_organizations.test.cjs
Normal file
27
web/tests/demo_organizations.test.cjs
Normal 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);
|
||||||
|
});
|
||||||
@@ -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);
|
|
||||||
});
|
|
||||||
|
|||||||
Reference in New Issue
Block a user