diff --git a/frontend/app/features/content/shared/list/content.component.html b/frontend/app/features/content/shared/list/content.component.html
index e8fab4253..f9163e31f 100644
--- a/frontend/app/features/content/shared/list/content.component.html
+++ b/frontend/app/features/content/shared/list/content.component.html
@@ -22,38 +22,36 @@
|
-
-
-
-
-
-
-
+
+
+
|
diff --git a/frontend/app/features/schemas/pages/schema/fields/field.component.html b/frontend/app/features/schemas/pages/schema/fields/field.component.html
index cddad0626..bf5b3db73 100644
--- a/frontend/app/features/schemas/pages/schema/fields/field.component.html
+++ b/frontend/app/features/schemas/pages/schema/fields/field.component.html
@@ -41,54 +41,52 @@
-
+
diff --git a/frontend/app/features/schemas/pages/schema/schema-page.component.html b/frontend/app/features/schemas/pages/schema/schema-page.component.html
index af9467156..3ba58ee8a 100644
--- a/frontend/app/features/schemas/pages/schema/schema-page.component.html
+++ b/frontend/app/features/schemas/pages/schema/schema-page.component.html
@@ -19,35 +19,33 @@
-
-
+
-
-
-
-
+
+
+
{{ 'schemas.contextMenuTour' | sqxTranslate }}
diff --git a/frontend/app/features/settings/pages/clients/clients-page.component.html b/frontend/app/features/settings/pages/clients/clients-page.component.html
index 5178455bf..b21a553cb 100644
--- a/frontend/app/features/settings/pages/clients/clients-page.component.html
+++ b/frontend/app/features/settings/pages/clients/clients-page.component.html
@@ -22,7 +22,9 @@
-
+
diff --git a/frontend/app/shared/components/assets/asset-folder.component.html b/frontend/app/shared/components/assets/asset-folder.component.html
index a6d0864e7..d9c4eca31 100644
--- a/frontend/app/shared/components/assets/asset-folder.component.html
+++ b/frontend/app/shared/components/assets/asset-folder.component.html
@@ -8,7 +8,7 @@
{{assetFolder.folderName | sqxTranslate}}
+
diff --git a/frontend/app/shared/components/forms/language-selector.component.html b/frontend/app/shared/components/forms/language-selector.component.html
index 06a619277..e24ec3cf3 100644
--- a/frontend/app/shared/components/forms/language-selector.component.html
+++ b/frontend/app/shared/components/forms/language-selector.component.html
@@ -4,8 +4,8 @@
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/frontend/app/shared/services/apps.service.spec.ts b/frontend/app/shared/services/apps.service.spec.ts
index 326d135b9..22fc907fc 100644
--- a/frontend/app/shared/services/apps.service.spec.ts
+++ b/frontend/app/shared/services/apps.service.spec.ts
@@ -195,6 +195,25 @@ describe('AppsService', () => {
expect(app!).toEqual(createApp(12));
}));
+ it('should make delete request to leave app',
+ inject([AppsService, HttpTestingController], (appsService: AppsService, httpMock: HttpTestingController) => {
+
+ const resource: Resource = {
+ _links: {
+ delete: { method: 'DELETE', href: '/api/apps/my-app/contributors/me' }
+ }
+ };
+
+ appsService.deleteApp(resource).subscribe();
+
+ const req = httpMock.expectOne('http://service/p/api/apps/my-app/contributors/me');
+
+ expect(req.request.method).toEqual('DELETE');
+ expect(req.request.headers.get('If-Match')).toBeNull();
+
+ req.flush({});
+ }));
+
it('should make delete request to archive app',
inject([AppsService, HttpTestingController], (appsService: AppsService, httpMock: HttpTestingController) => {
diff --git a/frontend/app/shared/services/apps.service.ts b/frontend/app/shared/services/apps.service.ts
index d2b96e28a..6f5a255c4 100644
--- a/frontend/app/shared/services/apps.service.ts
+++ b/frontend/app/shared/services/apps.service.ts
@@ -195,6 +195,18 @@ export class AppsService {
pretifyError('i18n:apps.removeImageFailed'));
}
+ public leaveApp(resource: Resource): Observable {
+ const link = resource._links['leave'];
+
+ const url = this.apiUrl.buildUrl(link.href);
+
+ return this.http.request(link.method, url).pipe(
+ tap(() => {
+ this.analytics.trackEvent('App', 'Left');
+ }),
+ pretifyError('i18n:apps.leaveFailed'));
+ }
+
public deleteApp(resource: Resource): Observable {
const link = resource._links['delete'];
diff --git a/frontend/app/shared/state/apps.state.spec.ts b/frontend/app/shared/state/apps.state.spec.ts
index 297207eef..5fb02e864 100644
--- a/frontend/app/shared/state/apps.state.spec.ts
+++ b/frontend/app/shared/state/apps.state.spec.ts
@@ -163,6 +163,15 @@ describe('AppsState', () => {
expect(appsState.snapshot.apps).toEqual([app1, updated]);
});
+ it('should remove app from snapshot when left', () => {
+ appsService.setup(x => x.leaveApp(app2))
+ .returns(() => of({})).verifiable();
+
+ appsState.leave(app2).subscribe();
+
+ expect(appsState.snapshot.apps).toEqual([app1]);
+ });
+
it('should remove app from snapshot when archived', () => {
appsService.setup(x => x.deleteApp(app2))
.returns(() => of({})).verifiable();
diff --git a/frontend/app/shared/state/apps.state.ts b/frontend/app/shared/state/apps.state.ts
index 87ea46e75..0b4d2afbb 100644
--- a/frontend/app/shared/state/apps.state.ts
+++ b/frontend/app/shared/state/apps.state.ts
@@ -131,24 +131,36 @@ export class AppsState extends State {
shareSubscribed(this.dialogs));
}
+ public leave(app: AppDto): Observable {
+ return this.appsService.leaveApp(app).pipe(
+ tap(() => {
+ this.removeApp(app);
+ }),
+ shareSubscribed(this.dialogs));
+ }
+
public delete(app: AppDto): Observable {
return this.appsService.deleteApp(app).pipe(
tap(() => {
- this.next(s => {
- const apps = s.apps.filter(x => x.name !== app.name);
-
- const selectedApp =
- s.selectedApp &&
- s.selectedApp.id === app.id ?
- null :
- s.selectedApp;
-
- return { ...s, apps, selectedApp };
- });
+ this.removeApp(app);
}),
shareSubscribed(this.dialogs));
}
+ private removeApp(app: AppDto) {
+ this.next(s => {
+ const apps = s.apps.filter(x => x.name !== app.name);
+
+ const selectedApp =
+ s.selectedApp &&
+ s.selectedApp.id === app.id ?
+ null :
+ s.selectedApp;
+
+ return { ...s, apps, selectedApp };
+ });
+ }
+
private replaceApp(updated: AppDto, app: AppDto) {
this.next(s => {
const apps = s.apps.replaceBy('id', updated);
diff --git a/frontend/app/theme/_common.scss b/frontend/app/theme/_common.scss
index 9cd733bea..482fe579c 100644
--- a/frontend/app/theme/_common.scss
+++ b/frontend/app/theme/_common.scss
@@ -135,20 +135,6 @@ body {
}
}
-.dropdown-options {
- & {
- display: inline-block;
- }
-
- .dropdown-menu {
- @include absolute(100%, 0, auto, auto);
- }
-
- .dropdown-item {
- cursor: pointer;
- }
-}
-
.dropdown-item {
cursor: pointer;
}
|