Skip to content

Commit fc1d904

Browse files
committed
After CR
1 parent 7c2f972 commit fc1d904

File tree

8 files changed

+66
-91
lines changed

8 files changed

+66
-91
lines changed

src/bundle/Resources/public/js/scripts/admin.location.view.js

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,22 @@
88
const queryString = window.location.search;
99
const urlParams = new URLSearchParams(queryString);
1010
const publishedContentId = urlParams.get('publishedContentId');
11+
const sendForm = () => {
12+
doc.querySelector('#form_subitems_content_edit_create').click();
13+
};
14+
const updateForm = (contentId, languageCode) => {
15+
doc.querySelector('#form_subitems_content_edit_content_info').value = contentId;
16+
doc.querySelector(`#form_subitems_content_edit_language_${languageCode}`).checked = true;
17+
};
1118
const handleEditItem = (content, location, isLanguageSelectorOpened) => {
1219
const contentId = content._id;
1320
const locationId = location._id;
1421
const languageCode = content.mainLanguageCode;
1522
const checkVersionDraftLink = Routing.generate('ibexa.version_draft.has_no_conflict', { contentId, languageCode, locationId });
16-
const updateForm = () => {
17-
doc.querySelector('#form_subitems_content_edit_content_info').value = contentId;
18-
doc.querySelector(`#form_subitems_content_edit_language_${languageCode}`).checked = true;
19-
};
23+
2024
const addDraft = () => {
21-
updateForm();
22-
doc.querySelector('#form_subitems_content_edit_create').click();
25+
updateForm(contentId, languageCode);
26+
sendForm();
2327
bootstrap.Modal.getOrCreateInstance(doc.querySelector('#version-draft-conflict-modal')).hide();
2428
};
2529
const attachModalListeners = (wrapper) => {
@@ -74,10 +78,10 @@
7478
if (response.status === 409) {
7579
response.text().then(showModal);
7680
} else if (response.status === 200) {
77-
updateForm();
81+
updateForm(contentId, languageCode);
7882

7983
if (!isLanguageSelectorOpened) {
80-
doc.querySelector('#form_subitems_content_edit_create').click();
84+
sendForm();
8185
}
8286
}
8387
})
@@ -205,7 +209,7 @@
205209
doc.body.addEventListener(
206210
'ibexa-sub-items:submit-version-edit-form',
207211
() => {
208-
doc.querySelector('#form_subitems_content_edit_create').click();
212+
sendForm();
209213
},
210214
false,
211215
);

src/bundle/Resources/translations/ibexa_locationview.en.xliff

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@
7777
<note>key: edit.languages.edit</note>
7878
</trans-unit>
7979
<trans-unit id="36c14ac08f24f86dbd38979c15f7ddaa9447d8c8" resname="instant.filter.languages.placeholder">
80-
<source>instant.filter.languages.placeholder</source>
81-
<target state="new">instant.filter.languages.placeholder</target>
80+
<source>Search...</source>
81+
<target state="new">Search...</target>
8282
<note>key: instant.filter.languages.placeholder</note>
8383
</trans-unit>
8484
<trans-unit id="de8bb1e6f538f44a79b62917155d15d17691211c" resname="instant.filter.languages.select_language.desc">

src/bundle/Resources/translations/ibexa_sub_items.en.xliff

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -201,11 +201,6 @@
201201
<target state="new">Hide</target>
202202
<note>key: hide_locations_btn.label</note>
203203
</trans-unit>
204-
<trans-unit id="36c14ac08f24f86dbd38979c15f7ddaa9447d8c8" resname="instant.filter.languages.placeholder">
205-
<source>Search...</source>
206-
<target state="new">Search...</target>
207-
<note>key: instant.filter.languages.placeholder</note>
208-
</trans-unit>
209204
<trans-unit id="de8bb1e6f538f44a79b62917155d15d17691211c" resname="instant.filter.languages.select_language.desc">
210205
<source>Languages</source>
211206
<target state="new">Languages</target>

src/bundle/Resources/translations/ibexa_universal_discovery_widget.en.xliff

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,11 @@
191191
<target state="new">Items already added to the list are marked as selected and unable to deselect.</target>
192192
<note>key: init_selected_locations.alert.title</note>
193193
</trans-unit>
194+
<trans-unit id="36c14ac08f24f86dbd38979c15f7ddaa9447d8c8" resname="instant.filter.languages.placeholder">
195+
<source>Search...</source>
196+
<target state="new">Search...</target>
197+
<note>key: instant.filter.languages.placeholder</note>
198+
</trans-unit>
194199
<trans-unit id="2d4febe56a341671c069ff47b6e6adfd2bba005c" resname="limitation.pick.error">
195200
<source>Could not fetch content names</source>
196201
<target state="new">Could not fetch content names</target>

src/bundle/Resources/views/themes/admin/ui/component/edit_content_translation_select.html.twig

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
}|merge(data_attr|default({})) %}
1313

1414
<div {{ html.attributes(container_attr) }}>
15-
{% block before_body %}
16-
{% endblock %}
15+
{% block before_body %}{% endblock %}
1716

1817
{% block header %}
1918
{% if title %}
@@ -40,8 +39,7 @@
4039
</div>
4140
{% endif %}
4241

43-
{% block content_items %}
44-
{% endblock %}
42+
{% block content_items %}{% endblock %}
4543
</div>
4644
</div>
4745
{% endblock %}
@@ -52,6 +50,5 @@
5250
</div>
5351
{% endblock %}
5452

55-
{% block after_body %}
56-
{% endblock %}
57-
</div>
53+
{% block after_body %}{% endblock %}
54+
</div>

src/bundle/ui-dev/src/modules/sub-items/components/sub-items-list/instant.filter.component.js

Lines changed: 15 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,32 @@
1-
import React, { useEffect, useState, useRef } from 'react';
1+
import React, { useState, useMemo } from 'react';
22
import PropTypes from 'prop-types';
33

44
import { getTranslator } from '@ibexa-admin-ui/src/bundle/Resources/public/js/scripts/helpers/context.helper';
55
import { createCssClassNames } from '@ibexa-admin-ui-modules/common/helpers/css.class.names';
66

7-
const FILTER_TIMEOUT = 200;
8-
97
const InstantFilter = (props) => {
108
const Translator = getTranslator();
11-
const _refInstantFilter = useRef(null);
129
const [filterQuery, setFilterQuery] = useState('');
13-
const [itemsMap, setItemsMap] = useState([]);
1410
const searchInputWrapperClassName = createCssClassNames({
1511
'ibexa-instant-filter__input-wrapper': true,
16-
'ibexa-instant-filter__input-wrapper--hidden': !props.hasSearchEnabled,
12+
'ibexa-instant-filter__input-wrapper--hidden': !props.isSearchEnabled,
1713
});
18-
let filterTimeout = null;
19-
20-
useEffect(() => {
21-
const items = [..._refInstantFilter.current.querySelectorAll('.ibexa-instant-filter__item')];
22-
const itemsMapNext = items.map((item) => ({
23-
label: item.textContent.toLowerCase(),
24-
element: item,
25-
}));
14+
const filteredItems = useMemo(() => {
15+
if (!filterQuery) {
16+
return props.items;
17+
}
2618

27-
setItemsMap(itemsMapNext);
28-
}, [props.items]);
29-
30-
useEffect(() => {
3119
const filterQueryLowerCase = filterQuery.toLowerCase();
3220

33-
filterTimeout = window.setTimeout(() => {
34-
itemsMap.forEach((item) => {
35-
const methodName = item.label.includes(filterQueryLowerCase) ? 'removeAttribute' : 'setAttribute';
36-
37-
item.element[methodName]('hidden', true);
38-
});
39-
}, FILTER_TIMEOUT);
21+
return props.items.filter((item) => {
22+
const itemLabelLowerCase = item.label.toLowerCase();
4023

41-
return () => {
42-
window.clearTimeout(filterTimeout);
43-
};
44-
}, [filterQuery]);
24+
return itemLabelLowerCase.includes(filterQueryLowerCase);
25+
});
26+
}, [props.items, filterQuery]);
4527

4628
return (
47-
<div className="ibexa-instant-filter" ref={_refInstantFilter}>
29+
<div className="ibexa-instant-filter">
4830
<div className={searchInputWrapperClassName}>
4931
<input
5032
type="text"
@@ -58,7 +40,7 @@ const InstantFilter = (props) => {
5840
{Translator.trans(/*@Desc("Languages")*/ 'instant.filter.languages.select_language.desc', {}, 'ibexa_sub_items')}
5941
</div>
6042
<div className="ibexa-instant-filter__items">
61-
{props.items.map((item) => {
43+
{filteredItems.map((item) => {
6244
const radioId = `item_${item.value}`;
6345
const labelClassName = createCssClassNames({
6446
'form-check-label': true,
@@ -91,14 +73,14 @@ const InstantFilter = (props) => {
9173
};
9274

9375
InstantFilter.propTypes = {
94-
hasSearchEnabled: PropTypes.bool,
76+
isSearchEnabled: PropTypes.bool,
9577
activeLanguage: PropTypes.string,
9678
items: PropTypes.array,
9779
handleItemChange: PropTypes.func,
9880
};
9981

10082
InstantFilter.defaultProps = {
101-
hasSearchEnabled: true,
83+
isSearchEnabled: true,
10284
activeLanguage: '',
10385
items: [],
10486
handleItemChange: () => {},

src/bundle/ui-dev/src/modules/sub-items/components/sub-items-list/language.selector.compoment.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ const LanguageSelector = (props) => {
1313
const discardBtnRef = useRef(null);
1414
const submitBtnRef = useRef(null);
1515
const [activeLanguage, setActiveLanguage] = useState('');
16-
const hasSearchEnabled = props.languageItems.length >= MIN_ITEMS_WITH_SEARCH;
16+
const isSearchEnabled = props.languageItems.length >= MIN_ITEMS_WITH_SEARCH;
1717
const className = createCssClassNames({
1818
'c-language-selector': true,
1919
'ibexa-extra-actions': true,
2020
'ibexa-extra-actions--edit': true,
2121
'ibexa-extra-actions--hidden': !props.isOpen,
22-
'ibexa-extra-actions--has-search': hasSearchEnabled,
22+
'ibexa-extra-actions--has-search': isSearchEnabled,
2323
});
2424
const closeLanguageSelector = (event) => {
2525
if (!event.target.closest('.c-table-view-item__btn') && !event.target.classList.contains('ibexa-instant-filter__input')) {
@@ -60,7 +60,7 @@ const LanguageSelector = (props) => {
6060
items={props.languageItems}
6161
activeLanguage={activeLanguage}
6262
handleItemChange={handleItemChange}
63-
hasSearchEnabled={hasSearchEnabled}
63+
isSearchEnabled={isSearchEnabled}
6464
/>
6565
</div>
6666
<div className="ibexa-extra-actions__confirm-wrapper">

src/bundle/ui-dev/src/modules/universal-discovery/components/translation-selector/translation.selector.js

Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,19 @@
1-
import React, { useEffect, useRef, useState } from 'react';
1+
import React, { useEffect, useMemo, useState } from 'react';
22
import PropTypes from 'prop-types';
33

44
import { createCssClassNames } from '../../../common/helpers/css.class.names';
55

66
import { getAdminUiConfig, getTranslator } from '@ibexa-admin-ui/src/bundle/Resources/public/js/scripts/helpers/context.helper';
77

88
const MIN_ITEMS_WITH_SEARCH = 10;
9-
const FILTER_TIMEOUT = 200;
109

1110
const TranslationSelectorButton = ({ hideTranslationSelector, selectTranslation, version, isOpen }) => {
1211
const Translator = getTranslator();
1312
const adminUiConfig = getAdminUiConfig();
14-
const _refInstantFilter = useRef(null);
1513
const [filterQuery, setFilterQuery] = useState('');
16-
const [itemsMap, setItemsMap] = useState([]);
1714
const [activeLanguage, setActiveLanguage] = useState('');
1815
const languageCodes = version ? version.VersionInfo.languageCodes.split(',') : [];
19-
const hasSearchEnabled = languageCodes.length >= MIN_ITEMS_WITH_SEARCH;
16+
const isSearchEnabled = languageCodes.length >= MIN_ITEMS_WITH_SEARCH;
2017
const editTranslationLabel = Translator.trans(
2118
/*@Desc("Select translation")*/ 'meta_preview.edit_translation',
2219
{},
@@ -26,33 +23,28 @@ const TranslationSelectorButton = ({ hideTranslationSelector, selectTranslation,
2623
setFilterQuery('');
2724
setActiveLanguage('');
2825
};
26+
const getLanguageName = (languageCode, lowerCase = true) => {
27+
const language = window.ibexa.adminUiConfig.languages.mappings[languageCode];
2928

30-
let filterTimeout = null;
29+
if (!language) {
30+
return null;
31+
}
3132

32-
useEffect(() => {
33-
const items = [..._refInstantFilter.current.querySelectorAll('.ibexa-instant-filter__item')];
34-
const itemsMapNext = items.map((item) => ({
35-
label: item.textContent.toLowerCase(),
36-
element: item,
37-
}));
33+
return lowerCase ? language.name.toLowerCase() : language.name;
34+
};
3835

39-
setItemsMap(itemsMapNext);
40-
}, []);
36+
const filteredLanguageCodes = useMemo(() => {
37+
if (!filterQuery) {
38+
return languageCodes;
39+
}
4140

42-
useEffect(() => {
4341
const filterQueryLowerCase = filterQuery.toLowerCase();
4442

45-
filterTimeout = window.setTimeout(() => {
46-
itemsMap.forEach((item) => {
47-
const methodName = item.label.includes(filterQueryLowerCase) ? 'removeAttribute' : 'setAttribute';
48-
49-
item.element[methodName]('hidden', true);
50-
});
51-
}, FILTER_TIMEOUT);
43+
return languageCodes.filter((languageCode) => {
44+
const languageNameLowerCase = getLanguageName(languageCode);
5245

53-
return () => {
54-
window.clearTimeout(filterTimeout);
55-
};
46+
return languageNameLowerCase.includes(filterQueryLowerCase);
47+
});
5648
}, [filterQuery]);
5749

5850
useEffect(() => {
@@ -61,20 +53,20 @@ const TranslationSelectorButton = ({ hideTranslationSelector, selectTranslation,
6153
}
6254
}, [isOpen]);
6355

64-
const className = createCssClassNames({
56+
const containerClassName = createCssClassNames({
6557
'c-translation-selector': true,
6658
'ibexa-extra-actions': true,
6759
'ibexa-extra-actions--edit': true,
6860
'ibexa-extra-actions--full-height': true,
6961
'ibexa-extra-actions--hidden': !isOpen,
70-
'ibexa-extra-actions--has-search': hasSearchEnabled,
62+
'ibexa-extra-actions--has-search': isSearchEnabled,
7163
});
7264
const searchInputWrapperClassName = createCssClassNames({
7365
'ibexa-instant-filter__input-wrapper': true,
74-
'ibexa-instant-filter__input-wrapper--hidden': !hasSearchEnabled,
66+
'ibexa-instant-filter__input-wrapper--hidden': !isSearchEnabled,
7567
});
7668
const renderLanguages = () => {
77-
return languageCodes.map((languageCode) => {
69+
return filteredLanguageCodes.map((languageCode) => {
7870
const languageNodeClassName = createCssClassNames({
7971
'ibexa-instant-filter__item': true,
8072
'ibexa-instant-filter__item--active': activeLanguage === languageCode,
@@ -89,20 +81,20 @@ const TranslationSelectorButton = ({ hideTranslationSelector, selectTranslation,
8981
};
9082

9183
return (
92-
<div className={className}>
84+
<div className={containerClassName}>
9385
<div className="ibexa-extra-actions__header">
9486
<h2 className="ibexa-extra-actions__header-content">{editTranslationLabel}</h2>
9587
</div>
9688
<div className="ibexa-extra-actions__content">
97-
<div className="ibexa-instant-filter" ref={_refInstantFilter}>
89+
<div className="ibexa-instant-filter">
9890
<div className={searchInputWrapperClassName}>
9991
<input
10092
type="text"
10193
className="ibexa-instant-filter__input ibexa-input ibexa-input--text form-control"
10294
placeholder={Translator.trans(
10395
/*@Desc("Search...")*/ 'instant.filter.languages.placeholder',
10496
{},
105-
'ibexa_sub_items',
97+
'ibexa_universal_discovery_widget',
10698
)}
10799
value={filterQuery}
108100
onChange={(event) => setFilterQuery(event.target.value)}

0 commit comments

Comments
 (0)