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 @@
+
+
+
+
+
+
+ {{num_selected}}/{{max_select}} photo(s) selected
+
+
+ maximum of {{selecions_left}} photo(s) left
+
+
+ {{num_selected}} photo(s) selected
+
+
+
+
+
+
+
+
+
+
+
+
+ {{group.date}}
+
+
+
+
+
+ Cancel
+ Select
+
+
+
+
+
+
+
+
+
\ 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 @@
- Create Log
+
+
+ Create Log
+ Generate
+
+ {{start_slide_image}}
+ {{slides}}
+
+
+
+
+
+
+
Slides
+
+
+
+
+
+
+
+
+ Edit
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancel
+ Create
+
+
+
+
+
+
+
\ 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
+ }
}
}
}