mirror of
https://github.com/gristlabs/grist-core.git
synced 2026-03-02 04:09:24 +00:00
(core) DocLimits: display days remaining instead of days of grace period
Summary: Before this change we would always say there are 14 days remaining, regardless of how many actually are remaining. Let's pass around a different `dataLimitsInfo` object that also reports the number of days remaining. Test Plan: Ensure the test suite passes. Reviewers: georgegevoian Reviewed By: georgegevoian Differential Revision: https://phab.getgrist.com/D4332
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import {ApiError} from 'app/common/ApiError';
|
||||
import {APPROACHING_LIMIT_RATIO, DataLimitStatus, DocumentUsage, getUsageRatio} from 'app/common/DocUsage';
|
||||
import {APPROACHING_LIMIT_RATIO, DataLimitInfo, DataLimitStatus,
|
||||
DocumentUsage, getUsageRatio} from 'app/common/DocUsage';
|
||||
import {Features} from 'app/common/Features';
|
||||
import moment from 'moment-timezone';
|
||||
|
||||
@@ -22,22 +23,24 @@ export interface GetDataLimitStatusParams {
|
||||
* Given a set of params that includes document usage, current product features, and
|
||||
* a grace-period start (if any), returns the data limit status of a document.
|
||||
*/
|
||||
export function getDataLimitStatus(params: GetDataLimitStatusParams): DataLimitStatus {
|
||||
export function getDataLimitInfo(params: GetDataLimitStatusParams): DataLimitInfo {
|
||||
const {docUsage, productFeatures, gracePeriodStart} = params;
|
||||
const ratio = getDataLimitRatio(docUsage, productFeatures);
|
||||
if (ratio > 1) {
|
||||
const start = gracePeriodStart;
|
||||
const days = productFeatures?.gracePeriodDays;
|
||||
if (start && days && moment().diff(moment(start), 'days') >= days) {
|
||||
return 'deleteOnly';
|
||||
// In case we forgot to define a grace period, we'll default to two weeks.
|
||||
const days = productFeatures?.gracePeriodDays ?? 14;
|
||||
const daysRemaining = start && days ? days - moment().diff(moment(start), 'days') : NaN;
|
||||
if (daysRemaining > 0) {
|
||||
return {status: 'gracePeriod', daysRemaining};
|
||||
} else {
|
||||
return 'gracePeriod';
|
||||
return {status: 'deleteOnly'};
|
||||
}
|
||||
} else if (ratio > APPROACHING_LIMIT_RATIO) {
|
||||
return 'approachingLimit';
|
||||
} else {
|
||||
return null;
|
||||
return {status: 'approachingLimit'};
|
||||
}
|
||||
|
||||
return {status: null};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -10,13 +10,17 @@ export interface RowCounts {
|
||||
}
|
||||
|
||||
export type DataLimitStatus = 'approachingLimit' | 'gracePeriod' | 'deleteOnly' | null;
|
||||
export interface DataLimitInfo {
|
||||
status: DataLimitStatus;
|
||||
daysRemaining?: number;
|
||||
}
|
||||
|
||||
type DocUsageOrPending = {
|
||||
[Metric in keyof Required<DocumentUsage>]: Required<DocumentUsage>[Metric] | 'pending'
|
||||
}
|
||||
|
||||
export interface DocUsageSummary extends DocUsageOrPending {
|
||||
dataLimitStatus: DataLimitStatus;
|
||||
dataLimitInfo: DataLimitInfo;
|
||||
}
|
||||
|
||||
// Count of non-removed documents in an org, grouped by data limit status.
|
||||
@@ -27,7 +31,7 @@ type FilteredDocUsage = {
|
||||
}
|
||||
|
||||
export interface FilteredDocUsageSummary extends FilteredDocUsage {
|
||||
dataLimitStatus: DataLimitStatus;
|
||||
dataLimitInfo: DataLimitInfo;
|
||||
}
|
||||
|
||||
// Ratio of usage at which we start telling users that they're approaching limits.
|
||||
|
||||
Reference in New Issue
Block a user