no issue
- use `URL.createObjectURL(file)` to get a blob url rather than using `FileReader.readAsDataURL` which generates a very large data attribute
- speeds up the display of previews and associated browser hangs when an upload finishes, especially noticeable with large images and fast connections where multiple uploads finish around the same time
closes https://github.com/TryGhost/Ghost/issues/9840
- added error on uploading an invalid image format
- updated to use overall error method(`onFailed`) to set error message instead of individual upload failures(`onUploadFailure`)
refs https://github.com/TryGhost/Ghost/issues/10137
- when closing the edit webhook modal we were rolling back the changed attributes of the webhook model but not clearing the errors object which meant a validation error was shown when re-opening the edit webhook modal
- add `reset()` method to the webhook edit controller and call that when leaving the edit route instead of only rolling back the changed attributes
refs https://github.com/TryGhost/Ghost/issues/10137
- adjust modal title depending on `webhook.isNew` state
- add acceptance tests for modal creation
- add missing mirage webhook factory
- mock integrations/api-keys/webhooks in test env rather than development
closes https://github.com/TryGhost/Ghost/issues/10136
- use a CP and `{{#link-to current-when}}` to add the `.active` class any time the current route name starts with `settings.integration` which covers built-in and custom integration screens
no issue
- `gh-posts-list-item`'s excerpt CP attempts to use `.slice` on whichever value is given to it, if it's `null` or `undefined` (as is the case when using mirage) then it would error with ".slice is not a function"
no issue
- similar to the previous fix for authors, tags also need to be converted from POJOs to mirage Model objects when creating/saving records in the mirage route handlers
- refactored the code so that the POJO->Model transform can be shared across post and update requests
no issue
- the `paginatedResponse` helper util tries to convert strings to integers but had no logic for handling `'all'` so it would always default to 15 in that case
refs https://github.com/TryGhost/Ghost/issues/10049
- update `{{koenig-card}}` component to compare payload values and create a snapshot when exiting edit mode for container cards (markdown, html, code)
- update image card to trigger snapshots on image upload/selection and width change
closesTryGhost/Ghost#9942
- move custom integrations UI out from behind the developer experiments flag
- put Admin API key and web hook secret fields behind the developer experiments flag
- do not show "unsaved changes" modal when adding/editing a webhook
- fixed all webhooks showing for each custom integration
no issue
- nav menu had many unused CSS classes that were sometimes used for test selectors
- `:contains` is not a native CSS selector so will cause issues when we switch to native test helpers
no issue
- add `{{aspect-ratio-box}}` to make it easier to adjust box sizes at a fixed ratio based on container height which isn't possible with CSS directly
- used `{{gh-uploader}}` to add upload facility to the icon shown on the integration screen
requires https://github.com/TryGhost/Ghost/pull/10033
- added `settings.integration.webhooks.edit` route
- `/integrations/:integration_id/webhooks/:webhook_id`
- added error handling to the webhook form modal that copes with the actual errors we get back from the server
- added `event-name` helper to display humanised event names in the webhooks list
- added delete button to the webhooks list and associated confirmation modal
no issue
- display "last seen" time if available for API keys
- use CSS to for hover behaviour instead of JS toggle
- add background to "copy" button so it's visible when on top of key data
- use ember-concurrency tasks instead of actions and used the derived state to show a temporary "copied to clipboard" message in place of the "last seen at" time
no issue
- the webhook form needs to be re-usable for the "edit webhook" modal
- renamed modal
- added logic to adjust the confirm button's text depending on the state of the passed in webhook model
no issue
- `belongsTo` relationships were failing to save on the server correctly because they did not contain the `_id` suffix
- became noticeable when the first standalone `belongsTo` relationship was added to webhooks
- added conditional for special-case `_by` relationships which don't require an additional `_id` when saving to the API
refs https://github.com/TryGhost/Ghost/issues/9865, https://github.com/TryGhost/Ghost/issues/9942
- `integration`, `api-key`, and `webhook` models and respective mirage mocks
- moves integration routes around to match ember's concept of nested routes (nested routes reflect nested UI not nested URLs)
- adds custom integrations list to integrations screen
- adds custom integration screen
- allow editing of integration details
- show list of webhooks
- webhook creation modal
NB: the `enableDeveloperExperiments` flag needs to be enabled in the `config.development.json` file for the custom integrations UI to be displayed until it's out of development.