From 5942cd6cd240e4cab4711c8ed457db29497e2dae Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 7 Dec 2023 13:48:33 -0800 Subject: [PATCH] Fix: disable toggle for share link creation without archive version, fix auto-copy in Safari (#4885) * Fix: disable share link archive switch if archive version doesnt exist * Fix: Add brief timeout before copy after share link creation for Safari, only show if succeeded * Update messages.xlf --- src-ui/messages.xlf | 52 +++++++++---------- .../share-links-dropdown.component.html | 2 +- .../share-links-dropdown.component.spec.ts | 22 ++++++-- .../share-links-dropdown.component.ts | 24 ++++++--- .../document-detail.component.html | 2 +- src-ui/src/app/data/paperless-document.ts | 2 + 6 files changed, 65 insertions(+), 39 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 9bef07c8e..d9c8836cd 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -247,18 +247,18 @@ Document was added to Paperless-ngx. src/app/app.component.ts - 83 + 81 src/app/app.component.ts - 92 + 90 Open document src/app/app.component.ts - 85 + 83 src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html @@ -269,28 +269,28 @@ Could not add : src/app/app.component.ts - 107 + 105 Document is being processed by Paperless-ngx. src/app/app.component.ts - 122 + 120 Prev src/app/app.component.ts - 128 + 126 Next src/app/app.component.ts - 129 + 127 src/app/components/document-detail/document-detail.component.html @@ -301,98 +301,98 @@ End src/app/app.component.ts - 130 + 128 The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some. src/app/app.component.ts - 136 + 134 Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms. src/app/app.component.ts - 143 + 141 The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar. src/app/app.component.ts - 148 + 146 The filtering tools allow you to quickly find documents using various searches, dates, tags, etc. src/app/app.component.ts - 155 + 153 Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar. src/app/app.component.ts - 161 + 159 Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view. src/app/app.component.ts - 166 + 164 Manage e-mail accounts and rules for automatically importing documents. src/app/app.component.ts - 174 + 172 Consumption templates give you finer control over the document ingestion process. src/app/app.component.ts - 182 + 180 File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. src/app/app.component.ts - 190 + 188 Check out the settings for various tweaks to the web app and toggle settings for saved views. src/app/app.component.ts - 198 + 196 Thank you! 🙏 src/app/app.component.ts - 206 + 204 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 208 + 206 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 210 + 208 @@ -3884,7 +3884,7 @@ src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts - 93 + 97 @@ -3912,28 +3912,28 @@ Error retrieving links src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts - 74 + 78 days src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts - 93 + 97 Error deleting link src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts - 120 + 126 Error creating link src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts - 148 + 156 diff --git a/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.html b/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.html index 2d708981f..c88933686 100644 --- a/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.html +++ b/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.html @@ -38,7 +38,7 @@
  • - +
    diff --git a/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.spec.ts b/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.spec.ts index 27955a8a5..0b7284383 100644 --- a/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.spec.ts +++ b/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.spec.ts @@ -19,6 +19,7 @@ import { ToastService } from 'src/app/services/toast.service' import { environment } from 'src/environments/environment' import { ShareLinksDropdownComponent } from './share-links-dropdown.component' import { Clipboard } from '@angular/cdk/clipboard' +import { By } from '@angular/platform-browser' describe('ShareLinksDropdownComponent', () => { let component: ShareLinksDropdownComponent @@ -88,7 +89,7 @@ describe('ShareLinksDropdownComponent', () => { .mockReturnValueOnce(throwError(() => new Error('Unable to get links'))) component.documentId = 99 - component.refresh() + component.ngOnInit() fixture.detectChanges() expect(toastSpy).toHaveBeenCalled() }) @@ -97,12 +98,13 @@ describe('ShareLinksDropdownComponent', () => { const createSpy = jest.spyOn(shareLinkService, 'createLinkForDocument') component.documentId = 99 component.expirationDays = 7 - component.archiveVersion = false + component.useArchiveVersion = false const expiration = new Date() expiration.setDate(expiration.getDate() + 7) const copySpy = jest.spyOn(clipboard, 'copy') + copySpy.mockReturnValue(true) const refreshSpy = jest.spyOn(component, 'refresh') component.createLink() @@ -117,8 +119,10 @@ describe('ShareLinksDropdownComponent', () => { fixture.detectChanges() tick(3000) - expect(copySpy).toHaveBeenCalled() expect(refreshSpy).toHaveBeenCalled() + expect(copySpy).toHaveBeenCalled() + expect(component.copied).toEqual(1) + tick(100) // copy timeout })) it('should show error on link creation if needed', () => { @@ -212,4 +216,16 @@ describe('ShareLinksDropdownComponent', () => { 'http://example.domainwithapiinit.com:1234/subpath/share/123abc123' ) }) + + it('should disable archive switch & option if no archive available', () => { + component.hasArchiveVersion = false + component.ngOnInit() + fixture.detectChanges() + expect(component.useArchiveVersion).toBeFalsy() + expect( + fixture.debugElement.query(By.css("input[type='checkbox']")).attributes[ + 'ng-reflect-is-disabled' + ] + ).toBeTruthy() + }) }) diff --git a/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts b/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts index fa2df3a54..cce951ba2 100644 --- a/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts +++ b/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts @@ -38,6 +38,9 @@ export class ShareLinksDropdownComponent implements OnInit { @Input() disabled: boolean = false + @Input() + hasArchiveVersion: boolean = true + shareLinks: PaperlessShareLink[] loading: boolean = false @@ -46,7 +49,7 @@ export class ShareLinksDropdownComponent implements OnInit { expirationDays: number = 7 - archiveVersion: boolean = true + useArchiveVersion: boolean = true constructor( private shareLinkService: ShareLinkService, @@ -56,6 +59,7 @@ export class ShareLinksDropdownComponent implements OnInit { ngOnInit(): void { if (this._documentId !== undefined) this.refresh() + this.useArchiveVersion = this.hasArchiveVersion } refresh() { @@ -94,11 +98,13 @@ export class ShareLinksDropdownComponent implements OnInit { } copy(link: PaperlessShareLink) { - this.clipboard.copy(this.getShareUrl(link)) - this.copied = link.id - setTimeout(() => { - this.copied = null - }, 3000) + const success = this.clipboard.copy(this.getShareUrl(link)) + if (success) { + this.copied = link.id + setTimeout(() => { + this.copied = null + }, 3000) + } } canShare(link: PaperlessShareLink): boolean { @@ -132,7 +138,7 @@ export class ShareLinksDropdownComponent implements OnInit { this.shareLinkService .createLinkForDocument( this._documentId, - this.archiveVersion + this.useArchiveVersion ? PaperlessFileVersion.Archive : PaperlessFileVersion.Original, expiration @@ -140,7 +146,9 @@ export class ShareLinksDropdownComponent implements OnInit { .subscribe({ next: (result) => { this.loading = false - this.copy(result) + setTimeout(() => { + this.copy(result) + }, 10) this.refresh() }, error: (e) => { diff --git a/src-ui/src/app/components/document-detail/document-detail.component.html b/src-ui/src/app/components/document-detail/document-detail.component.html index ea14b750d..aa2f91a35 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.html +++ b/src-ui/src/app/components/document-detail/document-detail.component.html @@ -69,7 +69,7 @@ (added)="addField($event)"> - +
    diff --git a/src-ui/src/app/data/paperless-document.ts b/src-ui/src/app/data/paperless-document.ts index b00c478fc..8071e2b45 100644 --- a/src-ui/src/app/data/paperless-document.ts +++ b/src-ui/src/app/data/paperless-document.ts @@ -50,6 +50,8 @@ export interface PaperlessDocument extends ObjectWithPermissions { original_file_name?: string + archived_file_name?: string + download_url?: string thumbnail_url?: string