diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index df36fcf..0000000 Binary files a/public/favicon.ico and /dev/null differ diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 0000000..a1a6a97 Binary files /dev/null and b/public/favicon.png differ diff --git a/public/index.html b/public/index.html index 32e2d00..dc4bbbf 100644 --- a/public/index.html +++ b/public/index.html @@ -4,7 +4,7 @@ - + <%= htmlWebpackPlugin.options.title %> diff --git a/src/api/index.js b/src/api/index.js index f7d0add..6a016ac 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -12,4 +12,40 @@ const apiClient = axios.create({ export function getPhotoLogList() { return apiClient.get('/photologs/') +} + +export function getPhotoLog(id) { + return apiClient.get('/photolog/'+id+'/') +} + +export function addNewPhotoLog(title, date) { + return apiClient.post('/addphotolog/', { + title, + date: date, + render_date: true, + start_slide_image: null, + slides: [] + }) +} + +export function updatePhotoLog({id, title, date, render_date, start_slide_image, slides}) { + return apiClient.put('/updatephotolog/'+id+'/', { + title, + date, + render_date, + start_slide_image, + slides + }) +} + +export function deletePhotoLog(id) { + return apiClient.delete('/deletephotolog/'+id+'/') +} + +export function getPhotoGroups() { + return apiClient.get('/photogroups/') +} + +export function getPhotosByGroup(group_id) { + return apiClient.get('/photos/?photogroup='+group_id) } \ No newline at end of file diff --git a/src/components/PhotoSelectModal.vue b/src/components/PhotoSelectModal.vue new file mode 100644 index 0000000..c8134ac --- /dev/null +++ b/src/components/PhotoSelectModal.vue @@ -0,0 +1,157 @@ + + + + + + \ No newline at end of file diff --git a/src/router/index.js b/src/router/index.js index 5792f42..e76698a 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -17,9 +17,16 @@ const routes = [ component: LogsList }, { - path: '/logs/create', + path: '/logs/create/:e?', name: 'CreateLog', - component: CreateLog + component: CreateLog, + props: (route) => { + const e = Number.parseInt(route.params.e) + if (Number.isNaN(e)) { + return '' + } + return {e} + } } ] diff --git a/src/store/index.js b/src/store/index.js index 374b65e..0cebec5 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1,22 +1,142 @@ import { createStore } from 'vuex' -import { getPhotoLogList } from '@/api' +import { + getPhotoLogList, + deletePhotoLog, + addNewPhotoLog, + getPhotoLog, + updatePhotoLog, + getPhotoGroups, + getPhotosByGroup +} from '@/api' export default createStore({ state: { - photoLogList: [] + photoLogList: [], + photoLogs: [], + photoGroups: [], + photos: [] }, mutations: { SET_PHOTO_LOG_LIST(state, newPhotoLogList) { state.photoLogList = newPhotoLogList + }, + SET_PHOTO_LOG(state, photoLog) { + let log_index = state.photoLogs.findIndex(log => log.id === photoLog.id) + if (log_index > -1) { + state.photoLogs[log_index] = photoLog + } else { + state.photoLogs.push(photoLog) + } + }, + REMOVE_PHOTO_LOG(state, id) { + let log_index = state.photoLogList.findIndex(log => log.id === id) + state.photoLogList.splice(log_index, 1) + }, + SET_PHOTO_GROUPS(state, groups) { + state.photoGroups = groups + }, + SET_PHOTOS_IN_GROUP(state, {group_id, photos}) { + if (group_id in state.photos) { + state.photos.group_id = photos + } else { + state.photos = {...state.photos, [group_id]: photos} + } } }, actions: { loadPhotoLogList({commit}) { - getPhotoLogList().then((response) => { - commit('SET_PHOTO_LOG_LIST', response.data) + return new Promise((resolve, reject) => { + getPhotoLogList().then((response) => { + commit('SET_PHOTO_LOG_LIST', response.data) + resolve() + }).catch((error) => { + console.log(error) + reject() + }) + }) + }, + loadPhotoLog({commit}, id) { + return new Promise((resolve, reject) => { + getPhotoLog(id).then((response) => { + commit('SET_PHOTO_LOG', response.data) + resolve() + }).catch((error) => { + console.log(error) + reject() + }) + }) + }, + deletePhotoLog({commit}, id) { + deletePhotoLog(id).then(() => { + commit('REMOVE_PHOTO_LOG', id) }).catch((error) => { console.log(error) }) + }, + addNewPhotoLog({dispatch}, {title, date}) { + return new Promise((resolve, reject) => { + addNewPhotoLog(title, date).then((response) => { + dispatch('loadPhotoLogList') + resolve(response.data.id) + }).catch((error) => { + console.log(error) + reject(error) + }) + }) + }, + updatePhotoLogDetails({commit}, photolog) { + if (photolog !== null) { + commit('SET_PHOTO_LOG', photolog) + return updatePhotoLog(photolog) + } + }, + loadPhotoGroups({commit}) { + return new Promise((resolve, reject) => { + getPhotoGroups().then((response) => { + commit('SET_PHOTO_GROUPS', response.data) + resolve(response.data) + }).catch((error) => { + reject(error) + }) + }) + }, + loadPhotosInGroup({commit}, group_id) { + return new Promise((resolve, reject) => { + getPhotosByGroup(group_id).then((response) => { + commit('SET_PHOTOS_IN_GROUP', {group_id, photos: response.data}) + resolve(response.data) + }).catch((error) => { + reject(error) + }) + }) + }, + loadPhotosInAllGroups({dispatch, getters}) { + for (const index in getters.photoGroups) { + const group_id = getters.photoGroups[index].id + dispatch('loadPhotosInGroup', group_id) + } + } + }, + getters: { + photoLogById: (state) => (id) => { + let log = state.photoLogList.filter(log => log.id == id) + if (log.length > 0) { + return log[0] + } + return null + }, + photoLogDetailsById: (state) => (id) => { + let log = state.photoLogs.filter(log => log.id == id) + if (log.length > 0) { + return log[0] + } + return null + }, + photoGroups (state) { + return state.photoGroups + }, + photos (state) { + return state.photos } }, modules: {}, diff --git a/src/views/CreateLog.vue b/src/views/CreateLog.vue index 1b7ca5a..81e9beb 100644 --- a/src/views/CreateLog.vue +++ b/src/views/CreateLog.vue @@ -1,14 +1,278 @@ \ No newline at end of file + + + \ No newline at end of file diff --git a/src/views/LogsList.vue b/src/views/LogsList.vue index 0fbe104..bfa3e02 100644 --- a/src/views/LogsList.vue +++ b/src/views/LogsList.vue @@ -9,7 +9,9 @@ - {{ photolog.title }} + + {{ photolog.title }} + {{ photolog.date }} Delete @@ -72,7 +74,10 @@ export default { this.deleteModalContent = 'Do you want to permanently delete "' + logtitle + '"?' }, deleteLog() { - console.log('delete ' + this.deleteId) + if (this.deleteId !== null) { + this.$store.dispatch('deletePhotoLog', this.deleteId) + this.deleteId = null + } } } }