Ghost/ghost/admin/app/components/gh-nav-menu/footer.js
Kevin Ansfield 26d05aecd8
Fixed Theme.errors clash with Ember Data Model's errors property (#16106)
no issue

- the Ember Data `Model` class has an `errors` property by default that
is set to a `DS.Errors` instance but the Theme model was overriding that
with an `errors` attr
- it hasn't been an issue so far but causes problems in Ember/Ember Data
3.28.x because that tries to use the `DS.Errors` interface on the
overridden attr property which then throws errors because the `errors`
attr doesn't have the right methods
2023-02-28 13:28:32 +00:00

53 lines
1.8 KiB
JavaScript

import Component from '@ember/component';
import ThemeErrorsModal from '../modals/design/theme-errors';
import calculatePosition from 'ember-basic-dropdown/utils/calculate-position';
import classic from 'ember-classic-decorator';
import {action} from '@ember/object';
import {and, match} from '@ember/object/computed';
import {inject} from 'ghost-admin/decorators/inject';
import {inject as service} from '@ember/service';
@classic
export default class Footer extends Component {
@service session;
@service router;
@service whatsNew;
@service feature;
@service modals;
@service themeManagement;
@inject config;
@and('config.clientExtensions.dropdown', 'session.user.isOwnerOnly')
showDropdownExtension;
@match('router.currentRouteName', /^settings/)
isSettingsRoute;
@action
openThemeErrors() {
this.advancedModal = this.modals.open(ThemeErrorsModal, {
title: 'Theme errors',
canActivate: false,
// Warnings will only be set for developers, otherwise it will always be empty
warnings: this.themeManagement.activeTheme.warnings,
errors: this.themeManagement.activeTheme.gscanErrors
});
}
get hasThemeErrors() {
return this.themeManagement.activeTheme && this.themeManagement.activeTheme.gscanErrors.length;
}
// equivalent to "left: auto; right: -20px"
userDropdownPosition(trigger, dropdown) {
let {horizontalPosition, verticalPosition, style} = calculatePosition(...arguments);
let {width: dropdownWidth} = dropdown.firstElementChild.getBoundingClientRect();
style.right += (dropdownWidth - 20);
style['z-index'] = '1100';
return {horizontalPosition, verticalPosition, style};
}
}