111 lines
2.3 KiB
JavaScript
111 lines
2.3 KiB
JavaScript
import Vue from 'vue'
|
|
import Vuex from 'vuex'
|
|
import FileTree from '@/utils/FileTree'
|
|
|
|
Vue.use(Vuex)
|
|
|
|
export default new Vuex.Store({
|
|
state:
|
|
{
|
|
projects: {},
|
|
project: null,
|
|
files: new FileTree({ autoWash: true }),
|
|
file: null,
|
|
version: null
|
|
},
|
|
|
|
mutations:
|
|
{
|
|
/**
|
|
* Projects
|
|
*/
|
|
updateProjects(state, data)
|
|
{
|
|
state.projects = data
|
|
|
|
// Has a current project
|
|
if(state.project)
|
|
{
|
|
// Current project has been removed
|
|
if(typeof state.projects[data] === 'undefined')
|
|
{
|
|
state.project = null
|
|
}
|
|
}
|
|
|
|
// No current project
|
|
else
|
|
{
|
|
const projectKeys = Object.keys(state.projects)
|
|
|
|
// If only one project, set has current
|
|
if(projectKeys.length === 1)
|
|
{
|
|
state.project = state.projects[projectKeys[0]]
|
|
}
|
|
}
|
|
},
|
|
|
|
addProject(state, data)
|
|
{
|
|
state.projects.push(data)
|
|
},
|
|
|
|
setProject(state, data)
|
|
{
|
|
// Test of project exist
|
|
if(typeof state.projects[data] !== 'undefined')
|
|
{
|
|
state.project = state.projects[data]
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Files
|
|
*/
|
|
updateFiles(state, data)
|
|
{
|
|
state.files = new FileTree({ autoWash: true })
|
|
|
|
for(const file of data)
|
|
{
|
|
state.files.addFile(file.path.full, file)
|
|
}
|
|
},
|
|
|
|
createFile(state, data)
|
|
{
|
|
state.files.addFile(data.path.full, data)
|
|
},
|
|
|
|
deleteFile(state, data)
|
|
{
|
|
state.files.removeFile(data.path.full)
|
|
},
|
|
|
|
setFile(state, data)
|
|
{
|
|
const file = state.files.getFile(data)
|
|
|
|
if(file)
|
|
{
|
|
state.file = file
|
|
}
|
|
},
|
|
|
|
createVersion(state, data)
|
|
{
|
|
const file = state.files.getFile(data.file)
|
|
|
|
if(file)
|
|
{
|
|
file.data.versions.push(data.version)
|
|
}
|
|
},
|
|
|
|
setVersion(state, data)
|
|
{
|
|
state.version = data
|
|
}
|
|
}
|
|
}) |