// Copyright 2016 Documize Inc. . All rights reserved. // // This software (Documize Community Edition) is licensed under // GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html // // You can operate outside the AGPL restrictions by purchasing // Documize Enterprise Edition and obtaining a commercial license // by contacting . // // https://documize.com import Ember from 'ember'; const { RSVP, inject: { service } } = Ember; export default Ember.Service.extend({ session: service('session'), ajax: service(), appMeta: service(), store: service(), pins: [], initialized: false, getUserPins() { let userId = this.get('session.user.id'); if (!this.get('session.authenticated')) { return new RSVP.resolve([]); } return this.get('ajax').request(`pin/${userId}`, { method: 'GET' }).then((response) => { if (is.not.array(response)) { response = []; } let pins = Ember.ArrayProxy.create({ content: Ember.A([]) }); pins = response.map((pin) => { let data = this.get('store').normalize('pin', pin); return this.get('store').push(data); }); this.set('pins', pins); this.set('initialized', true); return pins; }); }, // Pin an item. pinItem(data) { let userId = this.get('session.user.id'); if(this.get('session.authenticated')) { return this.get('ajax').request(`pin/${userId}`, { method: 'POST', data: JSON.stringify(data) }).then((response) => { let data = this.get('store').normalize('pin', response); return this.get('store').push(data); }); } }, // Unpin an item. unpinItem(pinId) { let userId = this.get('session.user.id'); if(this.get('session.authenticated')) { return this.get('ajax').request(`pin/${userId}/${pinId}`, { method: 'DELETE' }); } }, // updateSequence persists order after use drag-drop sorting. updateSequence(data) { let userId = this.get('session.user.id'); if(this.get('session.authenticated')) { return this.get('ajax').request(`pin/${userId}/sequence`, { method: 'POST', data: JSON.stringify(data) }).then((response) => { if (is.not.array(response)) { response = []; } let pins = Ember.ArrayProxy.create({ content: Ember.A([]) }); pins = response.map((pin) => { let data = this.get('store').normalize('pin', pin); return this.get('store').push(data); }); this.set('pins', pins); return pins; }); } }, isDocumentPinned(documentId) { let userId = this.get('session.user.id'); let pins = this.get('pins'); return new Ember.RSVP.Promise((resolve) => { if (this.get('initialized') === false) { this.getUserPins().then((pins) => { pins.forEach((pin) => { if (pin.get('userId') === userId && pin.get('documentId') === documentId) { resolve(pin.get('id')); } }); }); } else { pins.forEach((pin) => { if (pin.get('userId') === userId && pin.get('documentId') === documentId) { resolve(pin.get('id')); } }); } resolve(''); }); }, isSpacePinned(spaceId) { let userId = this.get('session.user.id'); let pins = this.get('pins'); return new Ember.RSVP.Promise((resolve) => { if (!this.get('initialized')) { this.getUserPins().then((pins) => { pins.forEach((pin) => { if (pin.get('userId') === userId && pin.get('documentId') === '' && pin.get('folderId') === spaceId) { resolve(pin.get('id')); } }); }); } else { pins.forEach((pin) => { if (pin.get('userId') === userId && pin.get('documentId') === '' && pin.get('folderId') === spaceId) { resolve(pin.get('id')); } }); } resolve(''); }); } });