mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-15 03:12:54 +03:00
bd60c8089b
closes https://github.com/TryGhost/Team/issues/776 Since switching to using a real NQL filter in the `posts.email_recipient_filter` field where we used to show `free members`, `paid members`, or `all members` we were showing `status:free`, `status:-free`, and `status:free,status:-free` respectively. If labels are used in a filter the text became even longer. - added a `membersCountCache` service - `.count(filter)` fetches a numeric count from the members API, if the filter has been counted in the last minute it returns the count directly from a cache instead to avoid hammering the members API when we show counts in multiple places across the UI - `.countString(filter)` fetches a count but returns a humanized string with the logic extracted from what we displayed in the confirm email sending modal - added a `<GhRecipientFilterCount @filter="" />` component that acts as a wrapper around the async count from `membersCountCache` - updated confirm email send modal, plus save notification and editor status displays for scheduled posts to use the new service and component
48 lines
1.5 KiB
JavaScript
48 lines
1.5 KiB
JavaScript
import Component from '@glimmer/component';
|
|
import config from 'ghost-admin/config/environment';
|
|
import {formatPostTime} from 'ghost-admin/helpers/gh-format-post-time';
|
|
import {get} from '@ember/object';
|
|
import {inject as service} from '@ember/service';
|
|
import {task} from 'ember-concurrency-decorators';
|
|
import {timeout} from 'ember-concurrency';
|
|
import {tracked} from '@glimmer/tracking';
|
|
|
|
export default class GhEditorPostStatusComponent extends Component {
|
|
@service clock;
|
|
@service settings;
|
|
|
|
@tracked _isSaving = false;
|
|
|
|
// this.args.isSaving will only be true briefly whilst the post is saving,
|
|
// we want to ensure that the "Saving..." message is shown for at least
|
|
// a few seconds so that it's noticeable so we use autotracking to trigger
|
|
// a task that sets _isSaving to true for 3 seconds
|
|
get isSaving() {
|
|
if (this.args.isSaving) {
|
|
this.showSavingMessage.perform();
|
|
}
|
|
|
|
return this._isSaving;
|
|
}
|
|
|
|
get scheduledTime() {
|
|
// force a recompute every second
|
|
get(this.clock, 'second');
|
|
|
|
return formatPostTime(
|
|
this.args.post.publishedAtUTC,
|
|
{timezone: this.settings.get('timezone'), scheduled: true}
|
|
);
|
|
}
|
|
|
|
@task({drop: true})
|
|
*showSavingMessage() {
|
|
this._isSaving = true;
|
|
yield timeout(config.environment === 'test' ? 0 : 3000);
|
|
|
|
if (!this.isDestroyed && !this.isDestroying) {
|
|
this._isSaving = false;
|
|
}
|
|
}
|
|
}
|