You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
3.2 KiB
141 lines
3.2 KiB
import { useStore } from 'vuex'
|
|
import { inject, ref } from 'vue';
|
|
import { useRoute, useRouter } from 'vue-router';
|
|
import { isEmpty } from 'lodash'
|
|
|
|
import { useCidReq } from './cidReq'
|
|
import { useI18n } from 'vue-i18n';
|
|
|
|
export function useDatatableList (servicePrefix) {
|
|
const moduleName = servicePrefix.toLowerCase()
|
|
|
|
const store = useStore()
|
|
const router = useRouter()
|
|
const route = useRoute()
|
|
const { t } = useI18n()
|
|
|
|
const { cid, sid, gid } = useCidReq()
|
|
|
|
const flashMessageList = inject('flashMessageList')
|
|
|
|
const filters = ref({})
|
|
|
|
const expandedFilter = ref(false)
|
|
|
|
const options = ref({
|
|
sortBy: [],
|
|
sortDesc: false,
|
|
page: 1,
|
|
itemsPerPage: 5,
|
|
})
|
|
|
|
function onUpdateOptions ({ page, itemsPerPage, sortBy, sortDesc }) {
|
|
page = page || options.value.page
|
|
|
|
if (!isEmpty(route.query.cert) && route.query.cert === '1') {
|
|
filters.value.filetype = 'certificate'
|
|
} else {
|
|
filters.value.filetype = ['file', 'folder']
|
|
}
|
|
|
|
let params = { ...filters.value }
|
|
|
|
if (1 === filters.value.loadNode) {
|
|
params['resourceNode.parent'] = route.params.node
|
|
}
|
|
|
|
if (itemsPerPage > 0) {
|
|
params = { ...params, itemsPerPage, page }
|
|
}
|
|
|
|
if (!isEmpty(sortBy)) {
|
|
params[`order[${sortBy}]`] = sortDesc ? 'desc' : 'asc'
|
|
}
|
|
|
|
let type = route.query.type
|
|
|
|
params = { ...params, cid, sid, gid, type, page }
|
|
|
|
store.dispatch(`${moduleName}/fetchAll`, params)
|
|
.then(() => options.value = { sortBy, sortDesc, itemsPerPage, page })
|
|
}
|
|
|
|
function goToAddItem () {
|
|
console.log('addHandler');
|
|
|
|
let folderParams = route.query;
|
|
|
|
router.push({
|
|
name: `${servicePrefix}Create`,
|
|
query: folderParams,
|
|
});
|
|
}
|
|
|
|
function goToEditItem (item) {
|
|
let folderParams = route.query;
|
|
folderParams['id'] = item['@id'];
|
|
|
|
if ('folder' === item.filetype || isEmpty(item.filetype)) {
|
|
router.push({
|
|
name: `${servicePrefix}Update`,
|
|
params: { id: item['@id'] },
|
|
query: folderParams
|
|
});
|
|
}
|
|
|
|
if ('file' === item.filetype) {
|
|
folderParams['getFile'] = true;
|
|
if (item.resourceNode.resourceFile &&
|
|
item.resourceNode.resourceFile.mimeType &&
|
|
'text/html' === item.resourceNode.resourceFile.mimeType
|
|
) {
|
|
//folderParams['getFile'] = true;
|
|
}
|
|
|
|
this.$router.push({
|
|
name: `${servicePrefix}UpdateFile`,
|
|
params: { id: item['@id'] },
|
|
query: folderParams
|
|
});
|
|
}
|
|
}
|
|
|
|
function onShowItem (item) {
|
|
console.log('listmixin showHandler', item);
|
|
|
|
let folderParams = route.query;
|
|
|
|
if (item) {
|
|
folderParams['id'] = item['@id'];
|
|
}
|
|
|
|
router.push({
|
|
name: `${servicePrefix}Show`,
|
|
params: folderParams,
|
|
query: folderParams,
|
|
});
|
|
}
|
|
|
|
async function deleteItem (item) {
|
|
await store.dispatch(`${moduleName}/del`, item.value)
|
|
|
|
onUpdateOptions(options.value);
|
|
|
|
toast.add({
|
|
severity: 'success',
|
|
detail: t('Deleted'),
|
|
life: 3500,
|
|
});
|
|
}
|
|
|
|
return {
|
|
filters,
|
|
expandedFilter,
|
|
options,
|
|
onUpdateOptions,
|
|
goToAddItem,
|
|
onShowItem,
|
|
goToEditItem,
|
|
deleteItem,
|
|
}
|
|
}
|
|
|