diff --git a/src/admin/components/lists/events-list.vue b/src/admin/components/lists/events-list.vue index 5b2560ecd..cf5bb34c5 100644 --- a/src/admin/components/lists/events-list.vue +++ b/src/admin/components/lists/events-list.vue @@ -53,7 +53,6 @@ }" v-html="event.user_name" /> -<<<<<<< HEAD -======= ->>>>>>> Initiated items page in repository @@ -135,17 +132,10 @@ events: Array }, methods: { -<<<<<<< HEAD // ...mapActions('event', [ // 'approve', // 'notApprove' // ]), -======= - ...mapActions('event', [ - 'approve', - 'notApprove' - ]), ->>>>>>> Initiated items page in repository // approveEvent(eventId){ // this.approve(eventId); // }, diff --git a/src/admin/js/theme-main.js b/src/admin/js/theme-main.js index db5cc2655..3b4642419 100644 --- a/src/admin/js/theme-main.js +++ b/src/admin/js/theme-main.js @@ -29,6 +29,7 @@ import FilterCategorySelectbox from '../../classes/filter-types/category/Selectb import TaincanFormItem from '../../classes/field-types/tainacan-form-item.vue'; import TaincanFiltersList from '../../classes/filter-types/tainacan-filter-item.vue'; import ItemsPage from '../pages/lists/items-page.vue'; +import TableViewMode from '../../theme-helper/table-view-mode.vue'; // Remaining imports import HelpButton from '../components/other/help-button.vue'; @@ -76,6 +77,8 @@ Vue.component('help-button', HelpButton); Vue.component('draggable', draggable); Vue.component('items-page', ItemsPage); +Vue.component('table-view-mode', TableViewMode); + Vue.use(eventBusSearch, { store: store, router: routerTheme}); import ThemeItemsList from '../theme-items-list.vue'; diff --git a/src/admin/pages/lists/items-page.vue b/src/admin/pages/lists/items-page.vue index ce32eebf3..232191809 100644 --- a/src/admin/pages/lists/items-page.vue +++ b/src/admin/pages/lists/items-page.vue @@ -255,23 +255,37 @@ - - + :is-loading="isLoadingItems" + :is-on-theme="isOnTheme" + :is-on-trash="status == 'trash'"/>
+

@@ -308,9 +322,6 @@ import Pagination from '../../components/search/pagination.vue' import { mapActions, mapGetters } from 'vuex'; - // import TainacanCardsList from '../../components/item-view-modes/tainacan-cards-list.vue'; - // import TainacanListList from '../../components/item-view-modes/tainacan-list-list.vue'; - export default { name: 'ItemsPage', data() { @@ -327,7 +338,8 @@ isOnTheme: false, futureSearchQuery: '', isHeaderShrinked: false, - localTableFields: [] + localTableFields: [], + registeredViewModes: tainacan_plugin.registered_view_modes } }, props: { diff --git a/src/api/endpoints/class-tainacan-rest-items-controller.php b/src/api/endpoints/class-tainacan-rest-items-controller.php index 9424b3132..16c6670cb 100644 --- a/src/api/endpoints/class-tainacan-rest-items-controller.php +++ b/src/api/endpoints/class-tainacan-rest-items-controller.php @@ -220,23 +220,30 @@ class REST_Items_Controller extends REST_Controller { $response = []; - if ( isset($request['view_mode_template']) ) { + $return_template = false; + + if ( isset($request['view_mode']) ) { // TODO: Check if requested view mode is really enabled for current collection - $view_mode = \Tainacan\Theme_Helper::get_instance()->get_view_mode($request['view_mode_template']); - - if ( $view_mode && isset($view_mode['template']) && file_exists($view_mode['template']) ) { - - ob_start(); - - global $wp_query; - $wp_query = $items; - $displayed_metadata = array_map(function($el) { return (int) $el; }, $request['fetch_only']['meta']); - include $view_mode['template']; - - $response = ob_get_clean(); - } + $view_mode = \Tainacan\Theme_Helper::get_instance()->get_view_mode($request['view_mode']); + if ($view_mode && $view_mode['type'] == 'template' && isset($view_mode['template']) && file_exists($view_mode['template'])) { + $return_template = true; + } + + } + + if ( $return_template ) { + + ob_start(); + + global $wp_query; + $wp_query = $items; + $displayed_metadata = array_map(function($el) { return (int) $el; }, $request['fetch_only']['meta']); + include $view_mode['template']; + + $response = ob_get_clean(); + } else { if ($items->have_posts()) { diff --git a/src/js/event-bus-search.js b/src/js/event-bus-search.js index 189399b0b..ec0a3d97a 100644 --- a/src/js/event-bus-search.js +++ b/src/js/event-bus-search.js @@ -126,7 +126,10 @@ export default { this.$emit( 'hasToPrepareFieldsAndFilters', to); else { this.$emit( 'isLoadingItems', true); - this.$store.dispatch('collection/fetchItems', { 'collectionId': this.collectionId, 'isOnTheme': (this.$route.name == null) }) + this.$store.dispatch('collection/fetchItems', + { 'collectionId': this.collectionId, + 'isOnTheme': (this.$route.name == null) + }) .then((res) => { this.$emit( 'isLoadingItems', false); this.$emit( 'hasFiltered', res.hasFiltered); diff --git a/src/js/store/modules/collection/actions.js b/src/js/store/modules/collection/actions.js index 459c7440e..a431dd565 100644 --- a/src/js/store/modules/collection/actions.js +++ b/src/js/store/modules/collection/actions.js @@ -24,17 +24,18 @@ export const fetchItems = ({ rootGetters, dispatch, commit }, { collectionId, is axios.tainacan.get(endpoint + qs.stringify(postQueries) ) .then(res => { + let items = res.data; - - if (postQueries['format'] != 'table' && postQueries['format'] != undefined && postQueries['format'] != '') { + let viewModeObject = tainacan_plugin.registered_view_modes[postQueries.view_mode]; + + if (isOnTheme && viewModeObject != undefined && viewModeObject.type == 'template') { commit('setItemsListTemplate', items ); - dispatch('search/setTotalItems', res.headers['x-wp-total'], { root: true } ); resolve({'itemsListTemplate': items, 'total': res.headers['x-wp-total'], hasFiltered: hasFiltered}); } else { commit('setItems', items ); - dispatch('search/setTotalItems', res.headers['x-wp-total'], { root: true } ); resolve({'items': items, 'total': res.headers['x-wp-total'], hasFiltered: hasFiltered}); } + dispatch('search/setTotalItems', res.headers['x-wp-total'], { root: true } ); }) .catch(error => reject(error)); }); diff --git a/src/js/store/modules/search/actions.js b/src/js/store/modules/search/actions.js index 8ecbe3713..0fba89260 100644 --- a/src/js/store/modules/search/actions.js +++ b/src/js/store/modules/search/actions.js @@ -97,7 +97,7 @@ export const setSearchQuery = ({ commit }, searchQuery ) => { commit('setSearchQuery', searchQuery ); }; -// Set ViewMode (format) +// Set ViewMode (view_mode) export const setViewMode = ({ commit }, viewMode ) => { commit('setViewMode', viewMode ); }; \ No newline at end of file diff --git a/src/js/store/modules/search/getters.js b/src/js/store/modules/search/getters.js index 7ce5bab83..b65c1058b 100644 --- a/src/js/store/modules/search/getters.js +++ b/src/js/store/modules/search/getters.js @@ -45,7 +45,7 @@ export const getStatus = state => { } export const getViewMode = state => { - return state.postquery.format; + return state.postquery.view_mode; } export const getFetchOnly = state => { diff --git a/src/js/store/modules/search/index.js b/src/js/store/modules/search/index.js index 45a3f5bd5..0b42bd391 100644 --- a/src/js/store/modules/search/index.js +++ b/src/js/store/modules/search/index.js @@ -19,7 +19,7 @@ const state = { '1': 'creation_date', '2': 'author_name' }, - format: 'table' + view_mode: 'table' }, totalItems: 0 }; diff --git a/src/js/store/modules/search/mutations.js b/src/js/store/modules/search/mutations.js index a198e0171..1a4657cb1 100644 --- a/src/js/store/modules/search/mutations.js +++ b/src/js/store/modules/search/mutations.js @@ -115,5 +115,5 @@ export const setStatus = ( state, status ) => { }; export const setViewMode = ( state, viewMode ) => { - state.postquery.format = viewMode; + state.postquery.view_mode = viewMode; }; \ No newline at end of file diff --git a/src/theme-helper/class-tainacan-theme-helper.php b/src/theme-helper/class-tainacan-theme-helper.php index 0307f8c26..76265cbdc 100644 --- a/src/theme-helper/class-tainacan-theme-helper.php +++ b/src/theme-helper/class-tainacan-theme-helper.php @@ -48,6 +48,13 @@ class Theme_Helper { add_filter('get_the_archive_title', array($this, 'filter_archive_title')); add_shortcode( 'tainacan-search', array($this, 'search_shortcode')); + + $this->register_view_mode('table', [ + 'label' => __('Table', 'tainacan'), + 'dynamic_metadata' => true, + 'icon' => '', + 'type' => 'component', + ]); } diff --git a/src/admin/components/lists/view-mode-table.vue b/src/theme-helper/table-view-mode.vue similarity index 97% rename from src/admin/components/lists/view-mode-table.vue rename to src/theme-helper/table-view-mode.vue index 45df8cdf5..7de8790f0 100644 --- a/src/admin/components/lists/view-mode-table.vue +++ b/src/theme-helper/table-view-mode.vue @@ -1,8 +1,7 @@