ember-arcgis-page-layout
Version:
Page Layout infrastructure components
129 lines (115 loc) • 3.22 kB
JavaScript
import Ember from 'ember';
export default Ember.Service.extend({
itemsService: Ember.inject.service('items-service'),
/**
* Return all pages belonging to a user
*/
getUserPages (username, num = 100, start = 1) {
let form = {
q: 'owner:' + username + ' AND tags:hub-page-config AND type:Web Mapping Application',
sortField: 'title',
num: num,
start: start
};
return this.get('itemsService').search(form);
},
getOrgPages (orgId, num = 10, start = 1) {
let form = {
q: 'tags:hub-page-config AND type:Web Mapping Application AND orgid:' + orgId,
sortField: 'title',
num: num,
start: start
};
return this.get('itemsService').search(form);
},
/**
* Search for all page-template items
*/
getPageTemplates (tag = 'hub-page-template', num = 100, start = 1) {
let form = {
q: 'tags:' + tag + ' AND type:Web Mapping Application',
sortField: 'title',
num: num,
start: start
};
return this.get('itemsService').search(form);
},
getPageTemplate (id) {
return Ember.RSVP.hash({
item: this.get('itemsService').getById(id),
data: this.get('itemsService').getDataById(id)
});
},
/**
* Get an Page item by it's Id
*/
getPage (id) {
Ember.debug('PAGES.getPage(id) is DEPRECATED. Use PAGES.getById(id).');
return this.get('itemsService').getDataById(id)
.then((data) => {
// we use the `.values` part of the app config hash
data.values.id = id;
return data.values;
});
},
getById (id) {
return Ember.RSVP.hash({
item: this.get('itemsService').getById(id),
data: this.get('itemsService').getDataById(id)
});
},
/**
* Create a Page
*/
create (page, itemOverride = null, source = 'opendatapages') {
let data = {
'source': source,
'folderId': null,
'values': page
};
let item = {
'title': page.title,
'owner': page.owner,
'type': 'Web Mapping Application',
'typeKeywords': [
'Web Map',
'Map',
'Mapping Site',
'Online Map',
'JavaScript',
'selfConfigured'
],
'text': JSON.stringify(data)
};
if (itemOverride) {
// deep merge
Ember.$.extend(true, item, itemOverride);
console.log('Merged Item: ' + JSON.stringify(item));
}
return this.get('itemsService').create(item)
.then((resp) => {
// get the id an update the url
item.id = resp.id;
item.url = 'https://dbouwman.github.io/opendata-pages/#/pages/' + resp.id;
return this.get('itemsService').update(item);
});
},
/**
* Update a page item... just a proxy to itemsService.update()
*/
update (item) {
return this.get('itemsService').update(item);
},
/**
* Delete a page... just a proxy to itemsService.destroy()
*/
destroy (page) {
return this.get('itemsService').destroy(page.id, page.owner);
},
encodePageAsForm (form = {}) {
Ember.merge(form, this.get('defaultParams'));
return Object.keys(form).map((key) => {
return [key, form[key]].map(encodeURIComponent).join('=');
}).join('&');
},
});