Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#1515: Add keywords field to the edit image description slide panel #1605

Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
84de736
magento/adobe-stock-integration#1515: Add keywords field to the edit …
Jul 16, 2020
507f503
magento/adobe-stock-integration#1515: Add keywords field to the edit …
Jul 17, 2020
b3baefd
magento/adobe-stock-integration#1515: Add keywords field to the edit …
Jul 17, 2020
69ebfbb
Merge branch '2.0-develop' of github.com:magento/adobe-stock-integrat…
sivaschenko Jul 20, 2020
e91c4be
magento/adobe-stock-integration#1605: Using the default ui-select com…
sivaschenko Jul 20, 2020
9bf8ac6
Merge branch '2.0-develop' into 1515-add-keywords-field-to-edit-image
sivaschenko Jul 24, 2020
4b670d9
Merge branch '2.0-develop' into 1515-add-keywords-field-to-edit-image
sivaschenko Jul 26, 2020
837ded8
magento/adobe-stock-integration#1605: Added keywords to submit form data
sivaschenko Jul 26, 2020
daa221f
magento/adobe-stock-integration#1515: MFTF test coverage
sivaschenko Jul 26, 2020
23b5a79
Merge branch '2.0-develop' into 1515-add-keywords-field-to-edit-image
sivaschenko Jul 27, 2020
f41bee6
Merge branch '2.0-develop' into 1515-add-keywords-field-to-edit-image
sivaschenko Jul 29, 2020
75940bb
Fixed static tests
sivaschenko Jul 29, 2020
dcd8913
magento/adobe-stock-integration#1605: Added validation
sivaschenko Jul 29, 2020
8282e1e
magento/adobe-stock-integration#1605: Moved generic config to compone…
sivaschenko Jul 30, 2020
2b9f86b
Merge branch '2.0-develop' into 1515-add-keywords-field-to-edit-image
sivaschenko Jul 30, 2020
5307a5d
Fixed static tests
sivaschenko Aug 2, 2020
50f5d8c
Merge branch '2.0-develop' of github.com:magento/adobe-stock-integrat…
sivaschenko Aug 2, 2020
b9aa0c1
Updated bindings
sivaschenko Aug 2, 2020
2eca30e
Fixed static tests
sivaschenko Aug 2, 2020
2fe992c
Merge branch '2.0-develop' into 1515-add-keywords-field-to-edit-image
sivaschenko Aug 2, 2020
8c4c01e
Fixed static tests
sivaschenko Aug 2, 2020
d27bfd5
Fixed tests for embedded media gallery
sivaschenko Aug 2, 2020
90c7bec
Merge branch '2.0-develop' into 1515-add-keywords-field-to-edit-image
sivaschenko Aug 2, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,11 @@ use Magento\Backend\Block\Template;
<div id="media-gallery-image-edit-details-messages" data-bind="scope: 'mediaGalleryEditDetailsMessages'">
<!-- ko template: getTemplate() --><!-- /ko -->
</div>
<div id="media-gallery-image-edit-details" data-bind="scope: 'mediaGalleryEditDetails'">
<!-- ko template: getTemplate() --><!-- /ko -->
</div>
<form data-bind="mageInit:{'validation':{}}" id="image-edit-details-form" method="post" enctype="multipart/form-data">
<div id="media-gallery-image-edit-details" data-bind="scope: 'mediaGalleryEditDetails'">
<!-- ko template: getTemplate() --><!-- /ko -->
</div>
</form>
</div>

<script type="text/x-magento-init">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/

define([
'Magento_Ui/js/form/element/ui-select',
'jquery',
'underscore'
], function (Select, $, _) {
'use strict';

return Select.extend({
defaults: {
template: 'Magento_MediaGalleryUi/image/edit/keyword-ui-select',
label: 'Keywords',
image: {}
},

/** @inheritdoc */
initialize: function () {
this._super();
return this;
},

getKeywordsOp: function () {
var imageTags = this.image.tags,
option = [];

imageTags.forEach(function (tag) {
option.push({
label: tag,
value: tag
});
});

this.options(option);
},

addLastElement: function (data) {

},
});
});
42 changes: 40 additions & 2 deletions MediaGalleryUi/view/adminhtml/web/js/image/image-edit.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@ define([
'jquery',
'underscore',
'uiComponent',
'uiLayout',
'Magento_MediaGalleryUi/js/action/getDetails'
], function ($, _, Component, getDetails) {
], function ($, _, Component, layout, getDetails) {
'use strict';

return Component.extend({
Expand All @@ -20,10 +21,42 @@ define([
images: [],
image: null,
modules: {
mediaGridMessages: '${ $.mediaGridMessages }'
mediaGridMessages: '${ $.mediaGridMessages }',
select: '${ $.name }_select'
},
viewConfig: [
{
component: 'Magento_MediaGalleryUi/js/image/edit/keyword-ui-select',
name: '${ $.name }_select'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd use a more specific name for the keywords field/select

Suggested change
name: '${ $.name }_select'
name: '${ $.name }_keywords'

}
],
exports: {
image: '${ $.name }_select:image'
}
},

/**
* Initialize the component
*
* @returns {Object}
*/
initialize: function () {
this._super().initView();

return this;
},

/**
* Initialize child components
*
* @returns {Object}
*/
initView: function () {
layout(this.viewConfig);

return this;
},

/**
* Init observable variables
*
Expand All @@ -49,6 +82,7 @@ define([
this.images[imageId] = imageDetails[imageId];
this.image(this.images[imageId]);
this.openEditImageDetailsModal();
this.getKeywordsOp();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To avoid this call, simply make sure the keywords component is rendering options based on the imported image

}.bind(this)).fail(function (message) {
this.addMediaGridMessage('error', message);
}.bind(this));
Expand Down Expand Up @@ -91,6 +125,10 @@ define([
modalElement.modal('closeModal');
},

getKeywordsOp: function() {
this.select().getKeywordsOp();
},

/**
* Add media grid message
*
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<!-- ko ifnot: disableLabel -->
<label
class="admin__form-field-label"
data-bind="attr: {for: uid}
">
<span translate="label"></span>
</label>
<!-- /ko -->
<div
class="admin__action-multiselect-wrap action-select-wrap"
tabindex="0"
data-bind="
attr: {
id: uid
},
css: {
_active: listVisible,
'admin__action-multiselect-tree': isTree()
},
event: {
focusin: onFocusIn,
focusout: onFocusOut,
keydown: keydownSwitcher
},
outerClick: outerClick.bind($data)
">
<!-- ko ifnot: chipsEnabled -->
<div
class="action-select admin__action-multiselect"
data-role="advanced-select"
data-bind="
css: {_active: listVisible},
click: function(data, event) {
toggleListVisible(data, event)
}
">
<div class="admin__action-multiselect-text"
data-role="selected-option"
ifnot="validationLoading"
data-bind="
css: {warning: warn().length},
text: setCaption()
">
</div>
<button if="isRemoveSelectedIcon && hasData() || !validationLoading"
class="action-close"
type="button"
data-action="remove-selected-item"
tabindex="-1"
click="clear"
>
<span class="action-close-text" translate="'Close'"></span>
</button>
<div data-role="spinner"
class="admin__data-grid-loading-mask"
visible="validationLoading"
if="validationLoading">
<div class="spinner">
<span repeat="8"/>
</div>
</div>
</div>
<!-- /ko -->
<!-- ko if: chipsEnabled -->
<div
class="action-select admin__action-multiselect"
data-role="advanced-select"
data-bind="
css: {_active: listVisible},
click: function(data, event) {
toggleListVisible(data, event)
}
">
<div class="admin__action-multiselect-text"
data-bind="
visible: !hasData(),
i18n: selectedPlaceholders.defaultPlaceholder
">
</div>
<!-- ko foreach: { data: getSelected(), as: 'option'} -->
<span class="admin__action-multiselect-crumb">
<span data-bind="text: label">
</span>
<button
class="action-close"
type="button"
data-action="remove-selected-item"
tabindex="-1"
data-bind="click: $parent.removeSelected.bind($parent, value)
">
<span class="action-close-text" translate="'Close'"></span>
</button>
</span>
<!-- /ko -->
</div>
<!-- /ko -->
<div class="action-menu" css="{ _active: listVisible}">
<div data-role="spinner"
class="admin__data-grid-loading-mask"
visible="loading"
if="loading">
<div class="spinner">
<span repeat="8"/>
</div>
</div>
<!-- ko if: filterOptions -->
<div class="admin__action-multiselect-search-wrap">
<input
class="admin__control-text admin__action-multiselect-search"
data-role="advanced-select-text"
type="text"
data-bind="
event: {
keydown: filterOptionsKeydown
},
attr: {
id: uid+2,
placeholder: filterPlaceholder
},
valueUpdate: 'afterkeydown',
value: filterInputValue,
hasFocus: filterOptionsFocus
">
<label
class="admin__action-multiselect-search-label"
data-action="advanced-select-search"
data-bind="attr: {for: uid+2}
">
</label>
<div if="itemsQuantity"
data-bind="text: itemsQuantity"
class="admin__action-multiselect-search-count">
</div>
</div>
<div ifnot="options().length"
class="admin__action-multiselect-empty-area">
<ul data-bind="html: emptyOptionsHtml"/>
</div>
<!-- /ko -->
<ul class="admin__action-multiselect-menu-inner _root"
data-bind="
event: {
mousemove: function(data, event){onMousemove($data, $index(), event)},
scroll: function(data, event){onScrollDown(data, event)}
}
">
<!-- ko foreach: { data: options, as: 'option'} -->
<li class="admin__action-multiselect-menu-inner-item _root"
data-bind="css: { _parent: $data.optgroup }"
data-role="option-group">
<div class="action-menu-item"
data-bind="
css: {
_selected: $parent.isSelectedValue(option),
_hover: $parent.isHovered(option, $element),
_expended: $parent.getLevelVisibility($data) && $parent.showLevels($data),
_unclickable: $parent.isLabelDecoration($data),
_last: $parent.addLastElement($data),
'_with-checkbox': $parent.showCheckbox
},
click: function(data, event){
$parent.toggleOptionSelected($data, $index(), event);
},
clickBubble: false
">
<!-- ko if: $data.optgroup && $parent.showOpenLevelsActionIcon-->
<div class="admin__action-multiselect-dropdown"
data-bind="
click: function(event){
$parent.showLevels($data);
$parent.openChildLevel($data, $element, event);
},
clickBubble: false
">
</div>
<!-- /ko-->
<!--ko if: $parent.showCheckbox-->
<input
class="admin__control-checkbox"
type="checkbox"
tabindex="-1"
data-bind="attr: { 'checked': $parent.isSelected(option.value) }">
<!-- /ko-->
<label class="admin__action-multiselect-label">
<span data-bind="text: option.label"></span>
<span
if="$parent.getPath(option)"
class="admin__action-multiselect-item-path"
data-bind="text: $parent.getPath(option)"></span>
</label>
</div>
<!-- ko if: $data.optgroup -->
<!-- ko template: {name: $parent.optgroupTmpl, data: {root: $parent, current: $data}} -->
<!-- /ko -->
<!-- /ko-->
</li>
<!-- /ko -->
</ul>
<!-- ko if: $data.closeBtn -->
<div class="admin__action-multiselect-actions-wrap">
<button class="action-default"
data-action="close-advanced-select"
type="button"
data-bind="click: outerClick">
<span translate="closeBtnLabel"></span>
</button>
</div>
<!-- /ko -->
</div>
</div>
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
*/
-->
<div class="edit-image-details" if="image">
<form data-bind="mageInit:{'validation':{}}" id="image-edit-details-form" method="post" enctype="multipart/form-data">
<fieldset class="admin__fieldset">
<input type="hidden" data-bind="value: image().id" data-ui-id="id" name="id"/>
<div class="admin__field _required">
Expand Down Expand Up @@ -40,6 +39,10 @@
data-validate="{'validate-alphanum-with-spaces':true, 'validate-length':true}"></textarea>
</div>
</div>
<div class="admin__field">
<!-- ko scope: select -->
<!-- ko template: getTemplate() --><!-- /ko -->
<!-- /ko -->
</div>
</fieldset>
</form>
</div>