Skip to content

Commit ed741fa

Browse files
committed
IBX-10126: Added save selected view type for UDW
1 parent 03ee5c9 commit ed741fa

File tree

6 files changed

+70
-19
lines changed

6 files changed

+70
-19
lines changed

src/bundle/Resources/config/universal_discovery_widget.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ system:
44
configuration:
55
# Default UDW Configuration
66
_default:
7+
prefix: 'udw'
78
multiple: false
89
multiple_items_limit: 0
910
root_location_id: 1

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

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -116,20 +116,19 @@
116116

117117
bootstrap.Modal.getOrCreateInstance(doc.querySelector(SELECTOR_MODAL_BULK_ACTION_FAIL)).show();
118118
};
119-
const getLocationActiveView = (parentLocationId) => {
120-
const mediaLocationId = ibexa.adminUiConfig.locations.media;
121-
const defaultActiveView = parentLocationId === mediaLocationId ? 'grid' : 'table';
122-
const activeView = localStorage.getItem(`ibexa-subitems-active-view-location-${parentLocationId}`);
123-
124-
return activeView || defaultActiveView;
125-
};
126-
119+
// const getLocationActiveView = (parentLocationId) => {
120+
// const mediaLocationId = ibexa.adminUiConfig.locations.media;
121+
// const defaultActiveView = parentLocationId === mediaLocationId ? 'grid' : 'table';
122+
// const activeView = localStorage.getItem(`ibexa-subitems-active-view-location-${parentLocationId}`);
123+
124+
// return activeView || defaultActiveView;
125+
// };
126+
console.log(listContainers)
127127
listContainers.forEach((container) => {
128128
const sortField = container.getAttribute('data-sort-field');
129129
const sortOrder = container.getAttribute('data-sort-order');
130130
const subitemsRoot = ReactDOM.createRoot(container);
131131
const parentLocationId = parseInt(container.dataset.location, 10);
132-
const activeView = getLocationActiveView(parentLocationId);
133132
const subItemsList = JSON.parse(container.dataset.items).SubitemsList;
134133
const items = subItemsList.SubitemsRow.map((item) => ({
135134
content: item.Content,
@@ -169,7 +168,7 @@
169168
React.createElement(ibexa.modules.SubItems, {
170169
handleEditItem,
171170
generateLink,
172-
activeView,
171+
// activeView,
173172
parentLocationId,
174173
sortClauses: { [sortField]: sortOrder },
175174
restInfo: { token, siteaccess },
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
export const VIEW_MODE_GRID = 'grid';
22
export const VIEW_MODE_TABLE = 'table';
3+
export const VIEW_MODE_MEDIA_STORAGE_KEY = 'ibexa-subitems-active-view-mode-media';
4+
export const VIEW_MODE_CONTENT_STORAGE_KEY = 'ibexa-subitems-active-view-mode-content';
5+

src/bundle/ui-dev/src/modules/sub-items/sub.items.module.js

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,12 @@ import deepClone from '../common/helpers/deep.clone.helper.js';
1717
import { createCssClassNames } from '../common/helpers/css.class.names';
1818
import { updateLocationPriority, loadLocation as loadLocationService } from './services/sub.items.service';
1919
import { bulkAddLocations, bulkDeleteItems, bulkHideLocations, bulkUnhideLocations, bulkMoveLocations } from './services/bulk.service.js';
20-
import { VIEW_MODE_GRID, VIEW_MODE_TABLE } from './constants.js';
20+
import {
21+
VIEW_MODE_GRID,
22+
VIEW_MODE_TABLE,
23+
VIEW_MODE_MEDIA_STORAGE_KEY,
24+
VIEW_MODE_CONTENT_STORAGE_KEY
25+
} from './constants.js';
2126

2227
const { Translator, ibexa, Popper, document } = window;
2328

@@ -61,7 +66,6 @@ export const columnsLabels = {
6166
'object-id': Translator.trans(/*@Desc("Object ID")*/ 'items_table.columns.object_id', {}, 'ibexa_sub_items'),
6267
'object-remote-id': Translator.trans(/*@Desc("Object remote ID")*/ 'items_table.columns.object_remote_id', {}, 'ibexa_sub_items'),
6368
};
64-
6569
export default class SubItemsModule extends Component {
6670
constructor(props) {
6771
super(props);
@@ -112,7 +116,7 @@ export default class SubItemsModule extends Component {
112116
const sortClauseData = this.getDefaultSortClause(props.sortClauses);
113117

114118
this.state = {
115-
activeView: props.activeView,
119+
activeView: this.getActiveViewMode(),
116120
activePageItems: null,
117121
pages: [],
118122
selectedItems: new Map(),
@@ -365,6 +369,31 @@ export default class SubItemsModule extends Component {
365369
});
366370
}
367371

372+
checkIsMediaLocation() {
373+
return this.props.parentLocationId === ibexa.adminUiConfig.locations.media;
374+
}
375+
376+
getDefaultViewMode() {
377+
return this.checkIsMediaLocation() ? VIEW_MODE_GRID : VIEW_MODE_TABLE;
378+
}
379+
380+
getActiveViewMode() {
381+
if (this.props.activeView) {
382+
return this.props.activeView
383+
}
384+
385+
const storageKey = this.checkIsMediaLocation() ? VIEW_MODE_MEDIA_STORAGE_KEY : VIEW_MODE_CONTENT_STORAGE_KEY;
386+
const defaultViewMode = this.getDefaultViewMode();
387+
388+
return localStorage.getItem(storageKey) || defaultViewMode;
389+
}
390+
391+
setActiveViewMode(activeView) {
392+
const storageKey = this.checkIsMediaLocation() ? VIEW_MODE_MEDIA_STORAGE_KEY : VIEW_MODE_CONTENT_STORAGE_KEY;
393+
394+
localStorage.setItem(storageKey, activeView);
395+
}
396+
368397
/**
369398
* Switches active view
370399
*
@@ -377,7 +406,7 @@ export default class SubItemsModule extends Component {
377406
() => ({ activeView }),
378407
() => {
379408
ibexa.helpers.tooltips.hideAll();
380-
window.localStorage.setItem(`ibexa-subitems-active-view-location-${this.props.parentLocationId}`, activeView);
409+
this.setActiveViewMode(activeView);
381410
},
382411
);
383412
}
@@ -1343,7 +1372,7 @@ export default class SubItemsModule extends Component {
13431372

13441373
updateTrashModal() {
13451374
document.body.dispatchEvent(
1346-
new CustomEvent('ibexa-trash-modal-refresh', {
1375+
new CustomEvent('ibexa-trash-modal-rezresh', {
13471376
detail: {
13481377
numberOfSubitems: this.state.totalCount,
13491378
},
@@ -1594,7 +1623,7 @@ SubItemsModule.defaultProps = {
15941623
loadLocation: loadLocationService,
15951624
sortClauses: {},
15961625
updateLocationPriority,
1597-
activeView: VIEW_MODE_TABLE,
1626+
activeView: '',
15981627
extraActions: [],
15991628
languages: window.ibexa.adminUiConfig.languages,
16001629
items: [],

src/bundle/ui-dev/src/modules/universal-discovery/components/view-switcher/view.switcher.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,26 @@ import PropTypes from 'prop-types';
33

44
import SimpleDropdown from '../../../common/simple-dropdown/simple.dropdown';
55
import { getTranslator } from '../../../../../../Resources/public/js/scripts/helpers/context.helper';
6-
import { CurrentViewContext, ViewContext } from '../../universal.discovery.module';
6+
import {
7+
ITEMS_VIEW_TYPE_STORAGE_KEY_PREFIX,
8+
CurrentViewContext,
9+
MarkedLocationIdContext,
10+
ViewContext,
11+
RootLocationIdContext,
12+
} from '../../universal.discovery.module';
713

814
const ViewSwitcher = ({ isDisabled }) => {
915
const Translator = getTranslator();
1016
const viewLabel = Translator.trans(/*@Desc("View")*/ 'view_switcher.view', {}, 'ibexa_universal_discovery_widget');
1117
const [currentView, setCurrentView] = useContext(CurrentViewContext);
1218
const { views } = useContext(ViewContext);
19+
const rootLocationId = useContext(RootLocationIdContext);
20+
const [markedLocationId] = useContext(MarkedLocationIdContext);
1321
const selectedOption = views.find((option) => option.value === currentView);
1422
const onOptionClick = ({ value }) => {
23+
const itemsViewTypeStorageKey = `${ITEMS_VIEW_TYPE_STORAGE_KEY_PREFIX}-${markedLocationId ?? rootLocationId}`;
24+
25+
window.localStorage.setItem(itemsViewTypeStorageKey, value);
1526
setCurrentView(value);
1627
};
1728

src/bundle/ui-dev/src/modules/universal-discovery/universal.discovery.module.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ const defaultRestInfo = {
3434
token: document.querySelector('meta[name="CSRF-Token"]')?.content,
3535
siteaccess: document.querySelector('meta[name="SiteAccess"]')?.content,
3636
};
37+
const DEFAULT_ITEMS_VIEW_TYPE_MODE = 'grid';
38+
export const ITEMS_VIEW_TYPE_STORAGE_KEY = 'ibexa-subitems-active-view-mode-media';
39+
40+
export const ITEMS_VIEW_TYPE_STORAGE_KEY_PREFIX = 'ibexa-udw-active-view-location'; // TO DO: delete !!!!!!!!
3741

3842
export const SORTING_OPTIONS = [
3943
{
@@ -209,6 +213,10 @@ const UniversalDiscoveryModule = (props) => {
209213
const adminUiConfig = getAdminUiConfig();
210214
const { tabs } = adminUiConfig.universalDiscoveryWidget;
211215
const defaultMarkedLocationId = props.startingLocationId || props.rootLocationId;
216+
const defaultActiveViewMode = props.activeView || localStorage.getItem(ITEMS_VIEW_TYPE_STORAGE_KEY) || DEFAULT_ITEMS_VIEW_TYPE_MODE;
217+
218+
console.log(defaultActiveViewMode, props.activeView, localStorage.getItem(ITEMS_VIEW_TYPE_STORAGE_KEY), DEFAULT_ITEMS_VIEW_TYPE_MODE);
219+
212220
const abortControllerRef = useRef();
213221
const dropdownPortalRef = useRef();
214222
const [{ activeTab, previousActiveTab }, setActiveTabsData] = useState({
@@ -222,7 +230,7 @@ const UniversalDiscoveryModule = (props) => {
222230
}));
223231
const [sorting, setSorting] = useState(props.activeSortClause);
224232
const [sortOrder, setSortOrder] = useState(props.activeSortOrder);
225-
const [currentView, setCurrentView] = useState(props.activeView);
233+
const [currentView, setCurrentView] = useState(defaultActiveViewMode);
226234
const [markedLocationId, setMarkedLocationId] = useState(defaultMarkedLocationId !== 1 ? defaultMarkedLocationId : null);
227235
const [createContentVisible, setCreateContentVisible] = useState(false);
228236
const [contentOnTheFlyData, setContentOnTheFlyData] = useState({});
@@ -739,7 +747,7 @@ UniversalDiscoveryModule.defaultProps = {
739747
containersOnly: false,
740748
activeSortClause: 'date',
741749
activeSortOrder: 'ascending',
742-
activeView: 'finder',
750+
activeView: '',
743751
selectedLocations: [],
744752
initSelectedItems: [],
745753
isInitLocationsDeselectionBlocked: false,

0 commit comments

Comments
 (0)