Ghost/ghost/admin/app/templates/member.hbs
Kevin Ansfield 3817f583fa 🐛 Fixed unexpected "unsaved changes" modal when deleting a member
closes https://github.com/TryGhost/Team/issues/2275

When deleting a member, after confirming deletion another "unsaved changes" modal popped up. From that point, if you clicked to stay you remained on the member screen with stale data (the member was still deleted) resulting in further errors when any attempt to make changes was made.

- prevented the unsaved changes check running for a deleted member because it would always return `true` in that case
- ensured the data setup for the unsaved changes check still occurs when a member is accessed directly via the URL
  - previously it was skipped because the data setup only occurred inside `fetchMemberTask` but that isn't called when the route already loaded the model via it's `model()` hook
2022-12-05 11:48:37 +00:00

119 lines
4.8 KiB
Handlebars

<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header sticky gh-member-header">
<div class="flex flex-column">
{{#if this.fromAnalytics}}
<div class="gh-canvas-breadcrumb">
<LinkTo @route="posts">
Posts
</LinkTo>
{{svg-jar "arrow-right-small"}}
<LinkTo @route="posts.analytics" @models={{this.fromAnalytics}}>
Analytics
</LinkTo>
{{#unless this.directlyFromAnalytics}}
{{svg-jar "arrow-right-small"}}
<LinkTo @route="members" data-test-link="members-back">
Members
</LinkTo>
{{/unless}}
{{svg-jar "arrow-right-small"}} {{if this.member.isNew "New member" "Edit member"}}
</div>
{{else}}
<div class="gh-canvas-breadcrumb">
<LinkTo @route="members" data-test-link="members-back">
Members
</LinkTo>
{{svg-jar "arrow-right-small"}} {{if this.member.isNew "New member" "Edit member"}}
</div>
{{/if}}
<h2 class="gh-canvas-title" data-test-screen-title>
{{#if this.member.isNew}}
New<span class="gh-canvas-title-hide-for-mobile">&nbsp;member</span>
{{else}}
{{or this.member.name this.member.email}}
{{/if}}
</h2>
</div>
<section class="view-actions">
{{#if this.session.user.isAdmin}}
{{#unless this.member.isNew}}
<span class="dropdown">
<GhDropdownButton
@dropdownName="members-actions-menu"
@classNames="gh-btn gh-btn-icon icon-only gh-btn-action-icon"
@title="Members Actions"
data-test-button="member-actions"
>
<span>
{{svg-jar "settings"}}
<span class="hidden">Actions</span>
</span>
</GhDropdownButton>
<GhDropdown
@name="members-actions-menu"
@tagName="ul"
@classNames="gh-member-actions-menu dropdown-menu dropdown-triangle-top-right"
>
<li>
<button
class="mr2"
type="button"
{{on "click" this.toggleImpersonateMemberModal}}
data-test-button="impersonate"
>
<span>Impersonate</span>
</button>
</li>
<li>
<button
type="button"
class="mr2"
{{on "click" this.confirmDeleteMember}}
data-test-button="delete-member"
>
<span class="red">Delete member</span>
</button>
</li>
</GhDropdown>
</span>
{{/unless}}
{{/if}}
<GhTaskButton @class="gh-btn gh-btn-primary gh-btn-icon" @type="button" @task={{this.saveTask}} @data-test-button="save" />
</section>
</GhCanvasHeader>
<div>
<form class="member-basic-info-form">
<GhMemberSettingsForm
@member={{this.member}}
@scratchMember={{this.scratchMember}}
@setProperty={{this.setProperty}}
@onLabelEdit={{this.editLabel}}
@saveMember={{this.save}}
@isSaveRunning={{this.saveTask.isRunning}}
@isLoading={{this.isLoading}} />
</form>
</div>
</section>
{{#if this.showImpersonateMemberModal}}
<GhFullscreenModal
@modal="impersonate-member"
@model={{this.member}}
@close={{this.toggleImpersonateMemberModal}}
@modifier="action wide" />
{{/if}}
{{#if this.showLabelModal}}
<GhFullscreenModal
@modal="members-label-form"
@model={{this.labelModalData}}
@close={{this.toggleLabelModal}}
@modifier="action wide"
/>
{{/if}}