await expect(page.getByTitle('Storage path', { exact: true })).toHaveText(
/\w+/
)
- await expect(
- page.getByRole('button', { name: 'Save', exact: true })
- ).toBeDisabled()
+ await expect(page.getByRole('button', { name: 'Save' }).nth(1)).toBeDisabled()
await page.getByTitle('Storage path').getByTitle('Clear all').click()
- await expect(
- page.getByRole('button', { name: 'Save', exact: true })
- ).toBeEnabled()
+ await expect(page.getByRole('button', { name: 'Save' }).nth(1)).toBeEnabled()
})
test('should warn on unsaved changes', async ({ page }) => {
await expect(page.getByTitle('Correspondent', { exact: true })).toHaveText(
/\w+/
)
- await expect(
- page.getByRole('button', { name: 'Save', exact: true })
- ).toBeDisabled()
+ await expect(page.getByRole('button', { name: 'Save' }).nth(1)).toBeDisabled()
await page
.getByTitle('Storage path', { exact: true })
.getByTitle('Clear all')
.click()
- await expect(
- page.getByRole('button', { name: 'Save', exact: true })
- ).toBeEnabled()
+ await expect(page.getByRole('button', { name: 'Save' }).nth(1)).toBeEnabled()
await page.getByRole('button', { name: 'Close', exact: true }).click()
await expect(page.getByRole('dialog')).toHaveText(/unsaved changes/)
await page.getByRole('button', { name: 'Cancel' }).click()
</button>
</div>
- <div class="btn-group ms-auto">
- <button type="button" class="btn btn-sm btn-outline-secondary" (click)="discard()" i18n [disabled]="!userCanEdit || networkActive || (isDirty$ | async) !== true">Discard</button>
- <ng-container *pngxIfPermissions="{ action: PermissionAction.Change, type: PermissionType.Document }">
- <button *ngIf="hasNext()" type="button" class="btn btn-sm btn-outline-primary" (click)="saveEditNext()" i18n [disabled]="!userCanEdit || networkActive || (isDirty$ | async) !== true">Save & next</button>
- <button *ngIf="!hasNext()" type="button" class="btn btn-sm btn-outline-primary" (click)="save(true)" i18n [disabled]="!userCanEdit || networkActive || (isDirty$ | async) !== true">Save & close</button>
- <button type="submit" class="btn btn-sm btn-primary" i18n [disabled]="!userCanEdit || networkActive || (isDirty$ | async) !== true">Save</button>
- </ng-container>
- </div>
+ <ng-container *ngTemplateOutlet="saveButtons"></ng-container>
</div>
<ul ngbNav #nav="ngbNav" class="nav-underline flex-nowrap flex-md-wrap overflow-auto" (navChange)="onNavChange($event)" [(activeId)]="activeNavID">
</div>
</ng-container>
</div>
+
+ <div class="d-flex border-top pt-3">
+ <ng-container *ngTemplateOutlet="saveButtons"></ng-container>
+ </div>
</ng-template>
</li>
</div>
+<ng-template #saveButtons>
+ <div class="btn-group ms-auto">
+ <ng-container *pngxIfPermissions="{ action: PermissionAction.Change, type: PermissionType.Document }">
+ <button type="submit" class="order-3 btn btn-sm btn-primary" i18n [disabled]="!userCanEdit || networkActive || (isDirty$ | async) !== true">Save</button>
+ <button *ngIf="hasNext()" type="button" class="order-1 btn btn-sm btn-outline-primary" (click)="saveEditNext()" i18n [disabled]="!userCanEdit || networkActive || (isDirty$ | async) !== true">Save & next</button>
+ <button *ngIf="!hasNext()" type="button" class="order-2 btn btn-sm btn-outline-primary" (click)="save(true)" i18n [disabled]="!userCanEdit || networkActive || (isDirty$ | async) !== true">Save & close</button>
+ </ng-container>
+ <button type="button" class="order-0 btn btn-sm btn-outline-secondary" (click)="discard()" i18n [disabled]="!userCanEdit || networkActive || (isDirty$ | async) !== true">Discard</button>
+ </div>
+</ng-template>
+
<ng-template #previewContent>
<div *ngIf="!metadata" class="w-100 h-100 d-flex align-items-center justify-content-center">
<div>
.input-group .btn-outline-secondary {
border-color: var(--bs-border-color);
}
+
+.btn-group .btn.order-0 {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ border-top-left-radius: var(--bs-border-radius-sm);
+ border-bottom-left-radius: var(--bs-border-radius-sm);
+}
+
+.btn-group .btn.order-3 {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ border-top-right-radius: var(--bs-border-radius-sm);
+ border-bottom-right-radius: var(--bs-border-radius-sm);
+}