Move everything to models and services #17
|
@ -206,7 +206,8 @@
|
|||
import message from '../../message'
|
||||
import flatPickr from 'vue-flatpickr-component';
|
||||
import 'flatpickr/dist/flatpickr.css';
|
||||
import {List} from '../../models/list.js'
|
||||
|
||||
import {ListService} from '../../services/list';
|
||||
|
||||
export default {
|
||||
data() {
|
||||
|
@ -254,8 +255,14 @@
|
|||
this.isTaskEdit = false
|
||||
//const cancel = message.setLoading(this)
|
||||
|
||||
this.list = new List({id: this.listID})
|
||||
this.list.fetch()
|
||||
let listService = new ListService()
|
||||
|
||||
let list = listService.get({id: this.listID}, {})
|
||||
// eslint-disable-next-line
|
||||
console.log(list)
|
||||
|
||||
/*this.list = new List({id: this.listID})
|
||||
this.list.fetch()*/
|
||||
|
||||
/*
|
||||
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
import {Model} from 'vue-mc'
|
||||
import {URL_PREFIX} from './config'
|
||||
let config = require('../../public/config.json')
|
||||
|
||||
import {reduce, replace} from 'lodash'
|
||||
|
||||
export class List extends Model {
|
||||
export default class ListModel {
|
||||
|
||||
constructor(data) {
|
||||
// eslint-disable-next-line
|
||||
console.log('ListModel Constructor', data)
|
||||
|
||||
// How to put that data in the model?
|
||||
}
|
||||
|
||||
// Default attributes that define the "empty" state.
|
||||
defaults() {
|
||||
return {
|
||||
|
@ -19,7 +21,7 @@ export class List extends Model {
|
|||
updated: 0,
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
// Custom options
|
||||
options() {
|
||||
return {
|
||||
|
@ -55,16 +57,5 @@ export class List extends Model {
|
|||
delete: '/lists/{id}',
|
||||
}
|
||||
}
|
||||
|
||||
update() {
|
||||
/*let method = this.getOption('methods.update')
|
||||
let route = this.getRoute('update')
|
||||
let params = this.getRouteParameters()
|
||||
let url = this.getURL(route, params)*/
|
||||
// eslint-disable-next-line
|
||||
consolge.log(this.toString())
|
||||
//let data = {this.data};
|
||||
|
||||
//return this.getRequest({method, url, data}).send();
|
||||
}
|
||||
*/
|
||||
}
|
114
src/services/abstractService.js
Normal file
114
src/services/abstractService.js
Normal file
|
@ -0,0 +1,114 @@
|
|||
import axios from 'axios'
|
||||
import {reduce, replace} from 'lodash'
|
||||
|
||||
let config = require('../../public/config.json')
|
||||
|
||||
export default class AbstractService {
|
||||
http = null
|
||||
paths = {
|
||||
create: '',
|
||||
get: '',
|
||||
update: '',
|
||||
delete: '',
|
||||
}
|
||||
///////////////////////////////////////
|
||||
// SERVICE INIT
|
||||
///////////////////////////////////////
|
||||
|
||||
constructor(paths) {
|
||||
this.http = axios.create({
|
||||
baseURL: config.VIKUNJA_API_BASE_URL,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': 'Bearer ' + localStorage.getItem('token'),
|
||||
},
|
||||
})
|
||||
|
||||
// Set the default auth header if we have a token
|
||||
if (localStorage.getItem('token') !== '' && localStorage.getItem('token') !== null && localStorage.getItem('token') !== undefined) {
|
||||
this.http.defaults.headers.common['Authorization'] = 'Bearer ' + localStorage.getItem('token')
|
||||
}
|
||||
|
||||
this.paths = {
|
||||
create: paths.create !== undefined ? paths.create : '',
|
||||
get: paths.get !== undefined ? paths.get : '',
|
||||
update: paths.update !== undefined ? paths.update : '',
|
||||
delete: paths.delete !== undefined ? paths.delete : '',
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////
|
||||
// GLOBAL ERROR HANDLER
|
||||
///////////////////////////////////////
|
||||
errorHandler(url, error) {
|
||||
// eslint-disable-next-line
|
||||
console.log('[Err][GET][%s] %o', url, error);
|
||||
if (error.response) {
|
||||
return Promise.reject({response: error});
|
||||
} else if (error.request) {
|
||||
return Promise.reject({request: error});
|
||||
} else {
|
||||
return Promise.reject({message: error});
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////
|
||||
// Helper functions //
|
||||
//////////////////////
|
||||
|
||||
getRouteReplacements(route) {
|
||||
var parameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||||
var replace$$1 = {};
|
||||
var pattern = this.getRouteParameterPattern();
|
||||
pattern = new RegExp(pattern instanceof RegExp ? pattern.source : pattern, 'g');
|
||||
|
||||
for (var parameter; (parameter = pattern.exec(route)) !== null;) {
|
||||
replace$$1[parameter[0]] = parameters[parameter[1]];
|
||||
}
|
||||
|
||||
return replace$$1;
|
||||
}
|
||||
|
||||
getRouteParameterPattern() {
|
||||
return /\{([^}]+)\}/
|
||||
}
|
||||
|
||||
///////////////////////////////////////
|
||||
// GLOBAL ACTIONS
|
||||
///////////////////////////////////////
|
||||
|
||||
getData(pathparams, params) {
|
||||
|
||||
// parse the url
|
||||
let replacements = this.getRouteReplacements(this.paths.get, pathparams); // Replace all route parameters with their replacement values.
|
||||
|
||||
let replaced = reduce(replacements, function (result, value, parameter) {
|
||||
return replace(result, parameter, value);
|
||||
}, this.paths.get)
|
||||
|
||||
|
||||
// eslint-disable-next-line
|
||||
console.log('[Req][GET][%s] %o', this.paths.get, params, replaced);
|
||||
return this.http.get(replaced, {params: params})
|
||||
.catch(error => {
|
||||
return this.errorHandler(this.paths.get, error);
|
||||
})
|
||||
.then(response => {
|
||||
// eslint-disable-next-line
|
||||
console.log('[Res][GET][%s] %o', this.paths.get, response);
|
||||
//if (Array.isArray(response.data)) {
|
||||
return Promise.resolve(response.data)
|
||||
/*}
|
||||
else {
|
||||
if (Array.isArray(response.data.content)) {
|
||||
const paginatedResponse = new PaginatedDomain();
|
||||
paginatedResponse.setDataFromHttpResponse(response);
|
||||
return Promise.resolve(paginatedResponse);
|
||||
}
|
||||
return Promise.resolve({...response.data});
|
||||
}*/
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
23
src/services/list.js
Normal file
23
src/services/list.js
Normal file
|
@ -0,0 +1,23 @@
|
|||
import AbstractService from './abstractService'
|
||||
import ListModel from '../models/list'
|
||||
|
||||
export class ListService extends AbstractService {
|
||||
constructor() {
|
||||
super({
|
||||
create: '/namespaces/{namespaceID}/lists',
|
||||
get: '/lists/{id}',
|
||||
update: '/lists/{id}',
|
||||
delete: '/lists/{id}',
|
||||
})
|
||||
}
|
||||
|
||||
get = (pathparams, params) => {
|
||||
//return this.getData(params);
|
||||
// You can get the Promise response here to create a Model object
|
||||
return this.getData(pathparams, params).then(
|
||||
response => {
|
||||
return Promise.resolve(new ListModel(response))
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user