From 0b913a7ede76c5c30027f66bfbc7e48640584f94 Mon Sep 17 00:00:00 2001 From: Huan Phan Date: Thu, 7 Mar 2024 09:36:28 +0700 Subject: [PATCH 1/2] =?UTF-8?q?refs=202.2.1.=E3=83=A6=E3=83=BC=E3=82=B6?= =?UTF-8?q?=E6=A8=A9=E9=99=90=E8=A8=AD=E5=AE=9A=E6=A9=9F=E8=83=BD:=20Add?= =?UTF-8?q?=20source=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/dashboard/controller.ts | 14 ++++++++++++++ app/dashboard/template.hbs | 1 + .../components/new-project-modal/component.ts | 11 +++++++++++ .../components/new-project-modal/template.hbs | 2 +- translations/en-us.yml | 2 ++ translations/ja.yml | 2 ++ 6 files changed, 31 insertions(+), 1 deletion(-) diff --git a/app/dashboard/controller.ts b/app/dashboard/controller.ts index 8f24ac8ad..5a3088979 100644 --- a/app/dashboard/controller.ts +++ b/app/dashboard/controller.ts @@ -54,6 +54,7 @@ export default class Dashboard extends Controller { popular!: QueryHasManyResult; useSimplePage: boolean = simplePage; useSearch: string = useSearch ? 'true' : 'false'; + canCreateNewProject: boolean = true; @task({ restartable: true }) setupTask = task(function *(this: Dashboard) { @@ -66,6 +67,7 @@ export default class Dashboard extends Controller { this.findNodes.perform(), this.getPopularAndNoteworthy.perform(popularNode, 'popular'), this.getPopularAndNoteworthy.perform(noteworthyNode, 'noteworthy'), + this.checkCreateProjectPermission.perform(), ]); this.set('institutions', institutions.toArray()); @@ -119,6 +121,18 @@ export default class Dashboard extends Controller { } }); + @task({ restartable: true }) + checkCreateProjectPermission = task(function *(this: Dashboard) { + const user = yield this.currentUser.user; + const url: string = `${config.OSF.apiUrl}/v2/users/${user.id}/settings/create-project-permission/`; + try { + const response = yield this.currentUser.authenticatedAJAX({ url }); + if (response) { + this.set('canCreateNewProject', response.can_create_new_project); + } + } catch (e) {} + }); + @alias('currentUser.user') user!: User; @or('nodes.length', 'filter', 'findNodes.isRunning') hasNodes!: boolean; diff --git a/app/dashboard/template.hbs b/app/dashboard/template.hbs index a350b3471..d7a3809e9 100644 --- a/app/dashboard/template.hbs +++ b/app/dashboard/template.hbs @@ -31,6 +31,7 @@ @onClick={{action this.openModal}} @type='success' @class='m-t-md f-w-xl' + @disabled={{not this.canCreateNewProject}} > {{t 'dashboard.create_new_project_button'}} diff --git a/lib/osf-components/addon/components/new-project-modal/component.ts b/lib/osf-components/addon/components/new-project-modal/component.ts index 67f124ec0..501496372 100644 --- a/lib/osf-components/addon/components/new-project-modal/component.ts +++ b/lib/osf-components/addon/components/new-project-modal/component.ts @@ -56,6 +56,7 @@ export default class NewProjectModal extends Component { regions: Region[] = []; running: boolean = false; createError: boolean = false; + createErrorMessage?: string; makeProjectAffiliate: boolean = projectAffiliate; @@ -147,6 +148,16 @@ export default class NewProjectModal extends Component { this.afterProjectCreated(node); } catch (error) { this.toast.error(this.intl.t('new_project.create_failed_header')); + var errorMessage = this.intl.t('new_project.create_failed_msg'); + const errorObj = error.errors.firstObject; + if (errorObj && errorObj.status) { + if (errorObj.status === 403) { + errorMessage = this.intl.t('new_project.forbidden'); + } else if (errorObj.status === 400 && errorObj.type === 1) { + errorMessage = this.intl.t('new_project.limited'); + } + } + this.set('createErrorMessage', errorMessage); this.set('createError', true); } }); diff --git a/lib/osf-components/addon/components/new-project-modal/template.hbs b/lib/osf-components/addon/components/new-project-modal/template.hbs index bce166c19..ccf72b616 100644 --- a/lib/osf-components/addon/components/new-project-modal/template.hbs +++ b/lib/osf-components/addon/components/new-project-modal/template.hbs @@ -8,7 +8,7 @@ -
{{t 'new_project.create_failed_msg'}}
+
{{this.createErrorMessage}}
Date: Thu, 7 Mar 2024 09:56:38 +0700 Subject: [PATCH 2/2] =?UTF-8?q?refs=202.2.1.=E3=83=A6=E3=83=BC=E3=82=B6?= =?UTF-8?q?=E6=A8=A9=E9=99=90=E8=A8=AD=E5=AE=9A=E6=A9=9F=E8=83=BD:=20Fix?= =?UTF-8?q?=20Travis=20CI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/dashboard/controller.ts | 4 +++- .../addon/components/new-project-modal/component.ts | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/dashboard/controller.ts b/app/dashboard/controller.ts index 5a3088979..66f0bae04 100644 --- a/app/dashboard/controller.ts +++ b/app/dashboard/controller.ts @@ -130,7 +130,9 @@ export default class Dashboard extends Controller { if (response) { this.set('canCreateNewProject', response.can_create_new_project); } - } catch (e) {} + } catch (e) { + this.set('canCreateNewProject', true); + } }); @alias('currentUser.user') user!: User; diff --git a/lib/osf-components/addon/components/new-project-modal/component.ts b/lib/osf-components/addon/components/new-project-modal/component.ts index 501496372..ecc2ab329 100644 --- a/lib/osf-components/addon/components/new-project-modal/component.ts +++ b/lib/osf-components/addon/components/new-project-modal/component.ts @@ -148,7 +148,7 @@ export default class NewProjectModal extends Component { this.afterProjectCreated(node); } catch (error) { this.toast.error(this.intl.t('new_project.create_failed_header')); - var errorMessage = this.intl.t('new_project.create_failed_msg'); + let errorMessage = this.intl.t('new_project.create_failed_msg'); const errorObj = error.errors.firstObject; if (errorObj && errorObj.status) { if (errorObj.status === 403) {