diff --git a/.drone.yml b/.drone.yml index eaa7556ba..e0cc61ad6 100644 --- a/.drone.yml +++ b/.drone.yml @@ -225,6 +225,10 @@ trigger: kind: pipeline name: frontend steps: + - name: install + image: node:11-alpine + commands: + - npm install - name: eslint image: node:11-alpine commands: @@ -232,7 +236,6 @@ steps: - name: jsbuild image: node:11-alpine commands: - - npm install - npm run build trigger: branch: diff --git a/src/components/Sidebar.vue b/src/components/Sidebar.vue index 625fee610..3a5234a00 100644 --- a/src/components/Sidebar.vue +++ b/src/components/Sidebar.vue @@ -21,9 +21,7 @@ --> - - diff --git a/src/components/board/DeletedTabSidebard.vue b/src/components/board/DeletedTabSidebard.vue new file mode 100644 index 000000000..eb4076b14 --- /dev/null +++ b/src/components/board/DeletedTabSidebard.vue @@ -0,0 +1,26 @@ + + + diff --git a/src/components/board/SharingTabSidebard.vue b/src/components/board/SharingTabSidebard.vue new file mode 100644 index 000000000..da5e75e36 --- /dev/null +++ b/src/components/board/SharingTabSidebard.vue @@ -0,0 +1,65 @@ + + + diff --git a/src/components/board/TagsTabSidebard.vue b/src/components/board/TagsTabSidebard.vue new file mode 100644 index 000000000..6b79db502 --- /dev/null +++ b/src/components/board/TagsTabSidebard.vue @@ -0,0 +1,164 @@ + + + + diff --git a/src/components/board/TimelineTabSidebard.vue b/src/components/board/TimelineTabSidebard.vue new file mode 100644 index 000000000..ff9cd5526 --- /dev/null +++ b/src/components/board/TimelineTabSidebard.vue @@ -0,0 +1,26 @@ + + + diff --git a/src/mixins/color.js b/src/mixins/color.js index 43d2b5cf2..fbc90580a 100644 --- a/src/mixins/color.js +++ b/src/mixins/color.js @@ -81,6 +81,15 @@ export default { return '#000000' } + }, + colorIsValid(hex) { + + var re = new RegExp('[A-Fa-f0-9]{6}') + if (re.test(hex)) { + return true + } + return false + } } diff --git a/src/models/index.js b/src/models/index.js index 4649a5e57..10da0feee 100644 --- a/src/models/index.js +++ b/src/models/index.js @@ -46,3 +46,10 @@ * @property {boolean} archived * @property {number} order */ +/** + * Label model + * + * @typedef {Object} Label + * @property {String} title + * @property {String} color + */ diff --git a/src/services/BoardApi.js b/src/services/BoardApi.js index ebb493168..8f8efb23f 100644 --- a/src/services/BoardApi.js +++ b/src/services/BoardApi.js @@ -135,4 +135,50 @@ export class BoardApi { }) } + // Label API Calls + deleteLabel(id) { + return axios.delete(this.url(`/labels/${id}`)) + .then( + (response) => { + return Promise.resolve(response.data) + }, + (err) => { + return Promise.reject(err) + } + ) + .catch((err) => { + return Promise.reject(err) + }) + } + + updateLabel(label) { + return axios.put(this.url(`/labels/${label.id}`), label) + .then( + (response) => { + return Promise.resolve(response.data) + }, + (err) => { + return Promise.reject(err) + } + ) + .catch((err) => { + return Promise.reject(err) + }) + } + + createLabel(labelData) { + return axios.post(this.url('/labels'), labelData) + .then( + (response) => { + return Promise.resolve(response.data) + }, + (err) => { + return Promise.reject(err) + } + ) + .catch((err) => { + return Promise.reject(err) + }) + } + } diff --git a/src/store/main.js b/src/store/main.js index a31610595..1cb946e12 100644 --- a/src/store/main.js +++ b/src/store/main.js @@ -51,12 +51,16 @@ export default new Vuex.Store({ sidebarShown: false, currentBoard: null, boards: [], + sharees: [], boardFilter: BOARD_FILTERS.ALL }, getters: { boards: state => { return state.boards }, + sharees: state => { + return state.sharees + }, noneArchivedBoards: state => { return state.boards.filter(board => { return board.archived === false && !board.deletedAt @@ -80,6 +84,9 @@ export default new Vuex.Store({ || (state.boardFilter === BOARD_FILTERS.SHARED && board.shared === 1) }) return boards.map(boardToMenuItem) + }, + currentBoardLabels: state => { + return state.currentBoard.labels } }, mutations: { @@ -132,6 +139,30 @@ export default new Vuex.Store({ }, setCurrentBoard(state, board) { state.currentBoard = board + }, + + // label mutators + removeLabelFromCurrentBoard(state, labelId) { + const removeIndex = state.currentBoard.labels.findIndex((l) => { + return labelId === l.id + }) + + if (removeIndex > -1) { + state.currentBoard.labels.splice(removeIndex, 1) + } + }, + updateLabelFromCurrentBoard(state, newLabel) { + + let labelToUpdate = state.currentBoard.labels.find((l) => { + return newLabel.id === l.id + }) + + labelToUpdate.title = newLabel.title + labelToUpdate.color = newLabel.color + }, + addLabelToCurrentBoard(state, newLabel) { + + state.currentBoard.labels.push(newLabel) } }, actions: { @@ -185,14 +216,15 @@ export default new Vuex.Store({ const boards = await apiClient.loadBoards() commit('setBoards', boards) }, - async loadSharees({ commit }) { - const params = { - format: 'json', - perPage: 4, - itemType: [0, 1] - } - const { data } = await axios.get(OC.linkToOCS('apps/files_sharing/api/v1') + 'sharees', { params }) - commit('setSharees', data.users) + loadSharees({ commit }) { + const params = new URLSearchParams() + params.append('format', 'json') + params.append('perPage', 4) + params.append('itemType', 0) + params.append('itemType', 1) + axios.get(OC.linkToOCS('apps/files_sharing/api/v1') + 'sharees', { params }).then((response) => { + commit('setSharees', response.data.ocs.data.users) + }) }, setBoardFilter({ commmit }, filter) { commmit('setBoardFilter', filter) @@ -208,6 +240,27 @@ export default new Vuex.Store({ }, setCurrentBoard({ commit }, board) { commit('setCurrentBoard', board) + }, + + // label actions + removeLabelFromCurrentBoard({ commit }, label) { + apiClient.deleteLabel(label) + .then((label) => { + commit('removeLabelFromCurrentBoard', label.id) + }) + }, + updateLabelFromCurrentBoard({ commit }, newLabel) { + apiClient.updateLabel(newLabel) + .then((newLabel) => { + commit('updateLabelFromCurrentBoard', newLabel) + }) + }, + addLabelToCurrentBoard({ commit }, newLabel) { + newLabel.boardId = this.state.currentBoard.id + apiClient.createLabel(newLabel) + .then((newLabel) => { + commit('addLabelToCurrentBoard', newLabel) + }) } } })