mirror of
https://github.com/tdurieux/anonymous_github.git
synced 2026-07-23 13:31:00 +02:00
fix: dashboard menu clickability + expiration date UX (#753)
* fix: dashboard menu clickability + expiration date UX Dashboard actions menu: - Inactive (expired/removed) rows dimmed via their cells instead of the row, so `opacity` no longer creates a stacking context that trapped the actions dropdown beneath later rows and made its items unclickable. - Add an "Extend 6 months" menu item for expired repos/PRs/gists. Expiration form (anonymize): - Fix the "After , the content will be removed." blank date: guard the helper text and add min/max validation feedback so an invalid pick no longer nulls the model into a broken sentence. - Add a `min` (today) so past dates can no longer be selected, and compute min/max from local date parts (not UTC) to avoid a timezone off-by-one in the native picker. - Default expiration is now 6 months (single source of truth, removing a latent double-offset bug); max stays at 1 year. - Block submitting a missing/out-of-range expiration date. Backend: - New POST /:id/extend endpoint for repos, PRs and gists that pushes the expiration +6 months and re-anonymizes so expired items come back online, mirroring the refresh flow. Shared extendExpirationDate helper. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix: add frontend translation for invalid_status error code The new /extend endpoints throw an "invalid_status" AnonymousError, which the error-code coverage test requires to have a locale entry. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -269,11 +269,14 @@
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="paper-field-label" for="expirationDate">Expiration date</label>
|
||||
<input class="form-control" type="date" name="expirationDate" id="expirationDate" ng-model="options.expirationDate" max="{{maxExpirationDate}}" />
|
||||
<input class="form-control" type="date" name="expirationDate" id="expirationDate" ng-model="options.expirationDate" ng-class="{'is-invalid': anonymize.expirationDate.$invalid}" min="{{minExpirationDate}}" max="{{maxExpirationDate}}" required />
|
||||
<div class="invalid-feedback" ng-show="anonymize.expirationDate.$error.min">Pick a date in the future.</div>
|
||||
<div class="invalid-feedback" ng-show="anonymize.expirationDate.$error.max">Pick a date on or before {{maxExpirationDate | date}}.</div>
|
||||
<div class="invalid-feedback" ng-show="anonymize.expirationDate.$error.required || anonymize.expirationDate.$error.date">Enter a valid expiration date.</div>
|
||||
</div>
|
||||
</div>
|
||||
<small class="form-text text-muted" ng-show="options.expirationMode=='remove'">After {{options.expirationDate | date}}, the content will be removed.</small>
|
||||
<small class="form-text text-muted" ng-show="options.expirationMode=='redirect'">After {{options.expirationDate | date}}, visitors will be redirected to GitHub.</small>
|
||||
<small class="form-text text-muted" ng-show="options.expirationMode=='remove' && options.expirationDate">After {{options.expirationDate | date}}, the content will be removed.</small>
|
||||
<small class="form-text text-muted" ng-show="options.expirationMode=='redirect' && options.expirationDate">After {{options.expirationDate | date}}, visitors will be redirected to GitHub.</small>
|
||||
</section>
|
||||
|
||||
<section class="paper-settings-section" ng-show="isUpdate && detectedType === 'repo'">
|
||||
|
||||
Reference in New Issue
Block a user