diff --git a/src/admin/components/lists/fields-list.vue b/src/admin/components/lists/fields-list.vue
index 0c8262eca..08d273758 100644
--- a/src/admin/components/lists/fields-list.vue
+++ b/src/admin/components/lists/fields-list.vue
@@ -12,7 +12,7 @@
:options="{group: { name:'fields', pull: false, put: true }, 'handle': '.handle', chosenClass: 'sortable-chosen', filter: '.not-sortable-item'}">
@@ -43,7 +43,7 @@
-
+
@@ -260,7 +260,9 @@ export default {
height: 1em;
width: 1em;
}
- &.not-sortable-item {
+ &.not-sortable-item, &.not-sortable-item:hover {
+ box-shadow: none !important;
+ top: 0px !important;
color: gray;
cursor: default;
}
diff --git a/src/admin/components/lists/filters-list.vue b/src/admin/components/lists/filters-list.vue
index 471fc72dc..497696df8 100644
--- a/src/admin/components/lists/filters-list.vue
+++ b/src/admin/components/lists/filters-list.vue
@@ -1,21 +1,314 @@
-
Filters List
-
+
+
+
+
+
+
+
+
+
{{ filter.name }}
+
{{ $i18n.get(filter.filter_type_object.component)}}
+
+ {{ filter.disabled ? $i18n.get('label_disabled') : $i18n.get('label_enabled') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ filter.name }}
+
+
+
+
+ {{ filter.name }}
+
+
+
+
+
+
+
-
-
diff --git a/src/admin/tainacan-admin-i18n.php b/src/admin/tainacan-admin-i18n.php
index 59a80b6c3..56c23dbcf 100644
--- a/src/admin/tainacan-admin-i18n.php
+++ b/src/admin/tainacan-admin-i18n.php
@@ -76,7 +76,10 @@ return [
'label_items_per_page' => __('Items per Page:', 'tainacan'),
'label_active_fields' => __('Active Fields', 'tainacan'),
'label_available_fields' => __('Available Fields', 'tainacan'),
- 'label_available_fields_types' => __('Available Fields Types', 'tainacan'),
+ 'label_available_fields_types' => __('Available Field Types', 'tainacan'),
+ 'label_active_filters' => __('Active Filters', 'tainacan'),
+ 'label_available_filters' => __('Available Filters', 'tainacan'),
+ 'label_available_filter_types' => __('Available Filter Types', 'tainacan'),
'label_per_page' => __('per Page', 'tainacan'),
'label_table_fields' => __('Fields on table', 'tainacan'),
'label_required' => __('Required', 'tainacan'),
diff --git a/src/js/store/modules/fields/actions.js b/src/js/store/modules/fields/actions.js
index d9f796b5b..f6a42fc85 100644
--- a/src/js/store/modules/fields/actions.js
+++ b/src/js/store/modules/fields/actions.js
@@ -59,7 +59,7 @@ export const sendField = ( { commit }, { collectionId, name, fieldType, status,
status: status
})
.then( res => {
- commit('setField', { collection_id: collectionId, name: name, field_type: fieldType, status: status });
+ commit('setSingleField', { collection_id: collectionId, name: name, field_type: fieldType, status: status });
resolve( res.data );
})
.catch(error => {
diff --git a/src/js/store/modules/filter/actions.js b/src/js/store/modules/filter/actions.js
index b77c19476..39438ea38 100644
--- a/src/js/store/modules/filter/actions.js
+++ b/src/js/store/modules/filter/actions.js
@@ -1,6 +1,7 @@
import axios from '../../../axios/axios';
import qs from 'qs';
+// METAQUERIES ----------------------------------------------------
export const search_by_collection = ({ state, dispatch, rootGetters }, collectionId) => {
return new Promise((resolve, reject) =>{
axios.tainacan.get('/collection/' + collectionId + '/items?' + qs.stringify( state.postquery ))
@@ -14,9 +15,8 @@ export const search_by_collection = ({ state, dispatch, rootGetters }, collecti
});
};
-
-export const set_postquery_attribute = ({ commit }, field, value ) => {
- commit('setPostQuery', { attr: field, value: value } );
+export const set_postquery_attribute = ({ commit }, filter, value ) => {
+ commit('setPostQuery', { attr: filter, value: value } );
};
export const add_metaquery = ( { commit }, filter ) => {
@@ -27,5 +27,140 @@ export const remove_metaquery = ( { commit }, filter ) => {
commit('removeMetaQuery', filter );
};
+// FILTERS --------------------------------------------------------
+export const fetchFilters = ({ commit }, {collectionId, isRepositoryLevel}) => {
+ return new Promise((resolve, reject) => {
+ let endpoint = '';
+ if (!isRepositoryLevel)
+ endpoint = '/collection/' + collectionId + '/filters/';
+ else
+ endpoint = '/filters/';
+
+ axios.tainacan.get(endpoint + '?context=edit')
+ .then((res) => {
+ let filters= res.data;
+ commit('setFilters', filters);
+ resolve (filters);
+ })
+ .catch((error) => {
+ console.log(error);
+ reject(error);
+ });
+ });
+}
+export const fetchFilter = ({ commit }, {collectionId, filterId, isRepositoryLevel}) => {
+ return new Promise((resolve, reject) => {
+
+ let endpoint = '';
+ if (!isRepositoryLevel)
+ endpoint = '/collection/' + collectionId + '/filters/' + filterId;
+ else
+ endpoint = '/filters/' + filterId;
+
+ axios.tainacan.get(endpoint + '?context=edit')
+ .then((res) => {
+ let filter = res.data;
+ commit('setSingleFilter', filter);
+ resolve (filter);
+ })
+ .catch((error) => {
+ console.log(error);
+ reject(error);
+ });
+ });
+}
+
+export const sendFilter = ( { commit }, { collectionId, fieldId, name, filterType, status, isRepositoryLevel }) => {
+ return new Promise(( resolve, reject ) => {
+ let endpoint = '';
+ if (!isRepositoryLevel)
+ endpoint = '/collection/' + collectionId + '/field/' + fieldId +'/filters/';
+ else
+ endpoint = '/filters/';
+ axios.tainacan.post(endpoint + '?context=edit', {
+ name: name,
+ filter_type: filterType,
+ status: status
+ })
+ .then( res => {
+ commit('setSingleFilter', { collection_id: collectionId, name: name, filter_type: filterType, status: status });
+ resolve( res.data );
+ })
+ .catch(error => {
+ reject( error.response );
+ });
+ });
+};
+
+export const updateFilter = ( { commit }, { collectionId, fieldId, filterId, isRepositoryLevel, options }) => {
+ return new Promise(( resolve, reject ) => {
+ let endpoint = '';
+
+ if (!isRepositoryLevel)
+ endpoint = '/collection/' + collectionId + '/field/' + fieldId +'/filters/';
+ else
+ endpoint = '/filters/' + filterId;
+
+ axios.tainacan.put(endpoint, options)
+ .then( res => {
+ commit('setSingleFilter', res.data);
+ resolve( res.data );
+ })
+ .catch(error => {
+ console.log(error);
+ reject({ error_message: error['response']['data'].error_message, errors: error['response']['data'].errors });
+ });
+ });
+};
+
+
+export const deleteFilter = ({ commit }, { collectionId, fieldId, filterId, isRepositoryLevel }) => {
+ let endpoint = '';
+ if (!isRepositoryLevel)
+ endpoint = '/collection/' + collectionId + '/field/' + fieldId +'/filters/';
+ else
+ endpoint = '/filters/' + filterId;
+
+ return new Promise((resolve, reject) => {
+ axios.tainacan.delete(endpoint)
+ .then( res => {
+ commit('deleteFilter', { filterId } );
+ resolve( res.data );
+ }).catch((error) => {
+ console.log(error);
+ reject( error );
+ });
+
+ });
+};
+
+export const updateCollectionFiltersOrder = ({ commit }, { collectionId, filtersOrder }) => {
+ return new Promise((resolve, reject) => {
+ axios.tainacan.patch('/collections/' + collectionId, {
+ filters_order: filtersOrder
+ }).then( res => {
+ commit('setCollection', res.data);
+ resolve( res.data );
+ }).catch( error => {
+ reject( error.response );
+ });
+
+ });
+}
+
+export const fetchFilterTypes = ({ commit} ) => {
+ return new Promise((resolve, reject) => {
+ axios.tainacan.get('/filter-types')
+ .then((res) => {
+ let filterTypes = res.data;
+ commit('setFilterTypes', filterTypes);
+ resolve (filterTypes);
+ })
+ .catch((error) => {
+ console.log(error);
+ reject(error);
+ });
+ });
+}
diff --git a/src/js/store/modules/filter/getters.js b/src/js/store/modules/filter/getters.js
index 7b02215b3..bef8849a0 100644
--- a/src/js/store/modules/filter/getters.js
+++ b/src/js/store/modules/filter/getters.js
@@ -8,4 +8,13 @@ export const getMetaQuery = state => {
export const getTaxQuery = state => {
return state.taxquery;
+}
+
+export const getFilters = state => {
+
+ return state.filters;
+}
+
+export const getFilterTypes = state => {
+ return state.flterTypes;
}
\ No newline at end of file
diff --git a/src/js/store/modules/filter/index.js b/src/js/store/modules/filter/index.js
index cd31313b2..9863a909b 100644
--- a/src/js/store/modules/filter/index.js
+++ b/src/js/store/modules/filter/index.js
@@ -8,7 +8,9 @@ const state = {
post_type: [],
metaquery: [],
taxquery: []
- }
+ },
+ filters: [],
+ filterTypes: []
};
export default {
diff --git a/src/js/store/modules/filter/mutations.js b/src/js/store/modules/filter/mutations.js
index 5cbb6a4cb..62a6d22a4 100644
--- a/src/js/store/modules/filter/mutations.js
+++ b/src/js/store/modules/filter/mutations.js
@@ -1,9 +1,10 @@
import Vue from 'vue';
+// METAQUERIES ----------------------------------------------------------------------------
export const setPostQuery = ( state, { attr, value }) => {
Vue.set( state.postquery, attr , value );
};
-
+
export const addMetaQuery = ( state, filter ) => {
let index = state.postquery.metaquery.findIndex( item => item.key === filter.field_id);
if ( index >= 0){
@@ -29,3 +30,29 @@ export const removeMetaQuery = ( state, filter ) => {
state.metaquery.splice(index, 1);
}
}
+
+// FILTERS ------------------------------------------------------------------------
+export const deleteFilter = ( state, filter ) => {
+ let index = state.filters.findIndex(deletedFilter => deletedFilter.id === filter.id);
+ if (index >= 0) {
+ state.filters.splice(index, 1);
+ }
+}
+
+export const setSingleFilter = (state, filter) => {
+ let index = state.filters.findIndex(newFilter => newFilter.id === filter.id);
+
+ if ( index >= 0){
+ Vue.set( state.filters, index, filter );
+ } else {
+ state.filters.push( filter );
+ }
+}
+
+export const setFilters = (state, filters) => {
+ state.filters = filters;
+}
+
+export const setFilterTypes = (state, filterTypes) => {
+ state.filterTypes = filterTypes;
+}
\ No newline at end of file