@@ -124,7 +124,7 @@ import ChevronLeft from 'vue-material-design-icons/ChevronLeft.vue'
import FilterCog from 'vue-material-design-icons/FilterCog.vue'
import Magnify from 'vue-material-design-icons/Magnify.vue'
import { NcActions, NcActionButton, NcActionInput, NcActionButtonGroup, NcActionCaption, NcActionRadio } from '@nextcloud/vue'
-import { mapState, mapGetters } from 'vuex'
+import { mapState } from 'vuex'
import { AbstractColumn } from '../mixins/columnClass.js'
import { FilterIds } from '../mixins/filter.js'
import permissionsMixin from '../mixins/permissionsMixin.js'
@@ -161,6 +161,14 @@ export default {
type: Boolean,
default: false,
},
+ element: {
+ type: Object,
+ default: () => {},
+ },
+ isView: {
+ type: Boolean,
+ default: false,
+ },
},
data() {
return {
@@ -176,7 +184,6 @@ export default {
...mapState({
viewSetting: state => state.data.viewSetting,
}),
- ...mapGetters(['activeView']),
getOperators() {
const possibleOperators = this.column.getPossibleOperators()
return possibleOperators
diff --git a/src/shared/components/ncTable/partials/TableRow.vue b/src/shared/components/ncTable/partials/TableRow.vue
index 71124c9e7..01f54916f 100644
--- a/src/shared/components/ncTable/partials/TableRow.vue
+++ b/src/shared/components/ncTable/partials/TableRow.vue
@@ -8,7 +8,7 @@
:value="getCellValue(col)" />
-
+
@@ -72,9 +72,12 @@ export default {
type: Object,
default: null,
},
+ view: {
+ type: Object,
+ default: () => {},
+ },
},
computed: {
- ...mapGetters(['activeView']),
getSelection: {
get: () => { return this.selected },
set: () => { alert('updating selection') },
diff --git a/src/shared/components/ncTable/partials/columnTypePartials/forms/MainForm.vue b/src/shared/components/ncTable/partials/columnTypePartials/forms/MainForm.vue
index 9654e44b0..0cf593ffc 100644
--- a/src/shared/components/ncTable/partials/columnTypePartials/forms/MainForm.vue
+++ b/src/shared/components/ncTable/partials/columnTypePartials/forms/MainForm.vue
@@ -26,7 +26,7 @@
- {{ activeView.isBaseView? t('tables', 'Add column to views') : t('tables', 'Add column to other views') }}
+ {{ t('tables', 'Add column to other views') }}
view.tableId === this.activeView.tableId && view !== this.activeView && !view.isBaseView).filter(view => !this.localSelectedViews.includes(view))
+ if (this.isView) {
+ return this.views.filter(view => view.tableId === this.activeElement.tableId && view !== this.activeElement).filter(view => !this.localSelectedViews.includes(view))
+ }
+ return this.views.filter(view => view.tableId === this.activeElement.id).filter(view => !this.localSelectedViews.includes(view))
},
},
mounted() {
if (this.editColumn) return
- if (this.activeView.isBaseView) {
+ if (!this.isView) {
this.localSelectedViews = this.viewsForTable
} else {
this.localSelectedViews = []
diff --git a/src/shared/components/ncTable/sections/CustomTable.vue b/src/shared/components/ncTable/sections/CustomTable.vue
index 5fb491fd5..2fda82862 100644
--- a/src/shared/components/ncTable/sections/CustomTable.vue
+++ b/src/shared/components/ncTable/sections/CustomTable.vue
@@ -5,8 +5,9 @@
$emit('import', table)"
@create-column="$emit('create-column')"
@@ -23,6 +24,7 @@
:columns="columns"
:selected="isRowSelected(row.id)"
:view-setting="viewSetting"
+ :view="view"
@update-row-selection="updateRowSelection"
@edit-row="rowId => $emit('edit-row', rowId)" />
diff --git a/src/store/data.js b/src/store/data.js
index 06e245a2a..b99d08050 100644
--- a/src/store/data.js
+++ b/src/store/data.js
@@ -117,9 +117,14 @@ export default {
let res = null
try {
- if (tableId) {
- res = await axios.get(generateUrl('/apps/tables/view/' + viewId + '/column/' + tableId))
- } else {
+ if (tableId && viewId) {
+ // Get all table columns. Try to access from view (Test if you have read access for view to read table columns)
+ res = await axios.get(generateUrl('/apps/tables/column/table/' + tableId + '/view/' + viewId))
+ } else if (tableId && !viewId) {
+ // Get all table columns without view. Table manage rights needed
+ res = await axios.get(generateUrl('/apps/tables/column/table/' + tableId))
+ } else if (!tableId && viewId) {
+ // Get all view columns.
res = await axios.get(generateUrl('/apps/tables/column/view/' + viewId))
}
if (!Array.isArray(res.data)) {
@@ -135,13 +140,14 @@ export default {
commit('setLoading', false)
return columns
},
- async loadColumnsFromBE({ commit, dispatch }, { view }) {
- const columns = await dispatch('getColumnsFromBE', { viewId: view.id })
- let allColumns = columns.concat(MetaColumns.filter(col => view.columns.includes(col.id)))
- allColumns = allColumns.sort(function(a, b) {
- return view.columns.indexOf(a.id) - view.columns.indexOf(b.id)
- })
-
+ async loadColumnsFromBE({ commit, dispatch }, { view, table }) {
+ let allColumns = await dispatch('getColumnsFromBE', { tableId: table?.id, viewId: view?.id })
+ if (view) {
+ allColumns = allColumns.concat(MetaColumns.filter(col => view.columns.includes(col.id)))
+ allColumns = allColumns.sort(function(a, b) {
+ return view.columns.indexOf(a.id) - view.columns.indexOf(b.id)
+ })
+ }
commit('setColumns', allColumns)
return true
},
@@ -199,12 +205,16 @@ export default {
},
// ROWS
- async loadRowsFromBE({ commit }, { viewId }) {
+ async loadRowsFromBE({ commit }, { tableId, viewId }) {
commit('setLoading', true)
let res = null
try {
- res = await axios.get(generateUrl('/apps/tables/row/view/' + viewId))
+ if (viewId) {
+ res = await axios.get(generateUrl('/apps/tables/row/view/' + viewId))
+ } else {
+ res = await axios.get(generateUrl('/apps/tables/row/table/' + tableId))
+ }
} catch (e) {
displayError(e, t('tables', 'Could not load rows.'))
return false
@@ -218,11 +228,11 @@ export default {
removeRows({ commit }) {
commit('setRows', [])
},
- async updateRow({ state, commit, dispatch }, { id, viewId, data }) {
+ async updateRow({ state, commit, dispatch }, { id, viewId, tableId, data }) {
let res = null
try {
- res = await axios.put(generateUrl('/apps/tables/row/' + id), { viewId, data })
+ res = await axios.put(generateUrl('/apps/tables/row/' + id), { viewId, tableId, data })
} catch (e) {
console.debug(e?.response)
if (e?.response?.data?.message?.startsWith('User should not be able to access row')) {
@@ -241,11 +251,11 @@ export default {
commit('setRows', [...rows])
return true
},
- async insertNewRow({ state, commit, dispatch }, { viewId, data }) {
+ async insertNewRow({ state, commit, dispatch }, { viewId, tableId, data }) {
let res = null
try {
- res = await axios.post(generateUrl('/apps/tables/row'), { viewId, data })
+ res = await axios.post(generateUrl('/apps/tables/row'), { viewId, tableId, data })
} catch (e) {
displayError(e, t('tables', 'Could not insert row.'))
return false
@@ -257,9 +267,10 @@ export default {
commit('setRows', [...rows])
return true
},
- async removeRow({ state, commit, dispatch }, { rowId, viewId }) {
+ async removeRow({ state, commit, dispatch }, { rowId, tableId, viewId }) {
try {
- await axios.delete(generateUrl('/apps/tables/view/' + viewId + '/row/' + rowId))
+ if (viewId) await axios.delete(generateUrl('/apps/tables/view/' + viewId + '/row/' + rowId))
+ else await axios.delete(generateUrl('/apps/tables/table/' + tableId + '/row/' + rowId))
} catch (e) {
if (e?.response?.data?.message?.startsWith('User should not be able to access row')) {
showError(t('tables', 'Outdated data. View is reloaded'))
diff --git a/src/store/store.js b/src/store/store.js
index acba7180a..6a7444197 100644
--- a/src/store/store.js
+++ b/src/store/store.js
@@ -20,25 +20,41 @@ export default new Vuex.Store({
tables: [],
views: [],
activeViewId: null,
+ activeTableId: null,
activeRowId: null,
+ activeElementIsView: false,
},
getters: {
getTable: (state) => (id) => {
- return state.tables.filter(table => table.id === id)[0]
+ return state.tables.find(table => table.id === id)
},
getView: (state) => (id) => {
- return state.views.filter(view => view.id === id)[0]
- },
- getBaseView: (state) => (tableId) => {
- return state.views.filter(view => view.tableId === tableId).find(view => view.isBaseView)
+ return state.views.find(view => view.id === id)
},
activeView(state) {
- if (state.views && state.views.filter(item => item.id === state.activeViewId).length > 0) {
- return state.views.filter(item => item.id === state.activeViewId)[0]
+ if (state.views && state.activeViewId) {
+ return state.views.find(item => item.id === state.activeViewId)
+ }
+ return null
+ },
+ activeTable(state) {
+ if (state.tables && state.activeTableId) {
+ return state.tables.find(item => item.id === state.activeTableId)
+ }
+ return null
+ },
+ activeElement(state) {
+ if (state.activeTableId && state.tables) {
+ return state.tables.find(item => item.id === state.activeTableId)
+ } else if (state.views && state.activeViewId) {
+ return state.views.find(item => item.id === state.activeViewId)
}
return null
},
+ isView(state) {
+ return state.activeElementIsView
+ },
},
mutations: {
setTablesLoading(state, value) {
@@ -47,6 +63,15 @@ export default new Vuex.Store({
setActiveViewId(state, viewId) {
if (state.activeViewId !== viewId) {
state.activeViewId = viewId
+ state.activeTableId = null
+ state.activeElementIsView = true
+ }
+ },
+ setActiveTableId(state, tableId) {
+ if (state.activeTableId !== tableId) {
+ state.activeTableId = tableId
+ state.activeViewId = null
+ state.activeElementIsView = false
}
},
setTables(state, tables) {
@@ -83,10 +108,9 @@ export default new Vuex.Store({
} else {
const tables = state.tables
tables.push(res.data)
- state.views.push(res.data.baseView)
commit('setTables', tables)
}
- return res.data.baseView.id
+ return res.data
},
async loadTablesFromBE({ commit, state }) {
commit('setTablesLoading', true)
@@ -97,7 +121,7 @@ export default new Vuex.Store({
// Set Views
state.views = []
res.data.forEach(table => {
- state.views = state.views.concat([table.baseView, ...table.views])
+ if (table.views) state.views = state.views.concat(table.views)
})
} catch (e) {
displayError(e, t('tables', 'Could not load tables.'))
@@ -219,8 +243,8 @@ export default new Vuex.Store({
commit('setTables', [...tables])
return true
},
- setTableHasShares({ state, commit, getters }, { elementId, hasShares }) {
- const table = getters.getTable(elementId)
+ setTableHasShares({ state, commit, getters }, { tableId, hasShares }) {
+ const table = getters.getTable(tableId)
table.hasShares = !!hasShares
commit('setTable', table)
},
|