Skip to content

Instantly share code, notes, and snippets.

@mtt87
Last active August 29, 2015 14:11
Show Gist options
  • Save mtt87/3b976c1131f53f1f58d2 to your computer and use it in GitHub Desktop.
Save mtt87/3b976c1131f53f1f58d2 to your computer and use it in GitHub Desktop.
Prismic.io + Angular the right way, advice needed
// DRY????? :( How can I avoid to repeat $window.Prismic.Api('...', callback) ??
app.factory('Prismic', function($window, $q) {
return {
blogList: function(page) {
var blogList = $q.defer();
$window.Prismic.Api('https://thtest.prismic.io/api', function(err, Api) {
Api.form('everything')
.ref(Api.master())
.query(Prismic.Predicates.at('document.type', 'article')).pageSize(3).page(page).submit(function(err, response) {
if (err) {
console.log(err);
}
blogList.resolve({
err: err,
result: response.results
});
});
});
return blogList.promise;
},
singleBlogPost: function(id) {
var singleBlogPost = $q.defer();
$window.Prismic.Api('https://thtest.prismic.io/api', function(err, Api) {
Api.form('everything')
.ref(Api.master())
.query(Prismic.Predicates.at('document.id', id)).submit(function(err, response) {
if (err) {
console.log(err);
}
singleBlogPost.resolve({
err: err,
result: response.results
});
});
});
return singleBlogPost.promise;
}
};
});
@mconventi
Copy link

.factory('ArticlesService', ['$http', '$q', 'API_URL', function($http, $q, API_URL) {

var that = {
    articles: {
        //Here store information already requested
        '<postId>': { ... }
    },
    ... //if you need more info to provide
};

var makeAPIRequest = function(...) {
    ...
}

that.getList = function() {

    makeAPIRequest(...)
    ....

};

that.getDetail = function(id, ...) {

    //Check if the article exists that.articles[id] or needs the integration of other more information in order to avoid to get the article many times (remember that a service is singleton)

    return that.articles[id];
}

return that;

}]);

@bettiolo
Copy link

what about this?

app.factory('Prismic', function($window, $q) {
    return {
        blogList: function(page) {
            var query = query('document.type', 'article').pageSize(3).page(page);
            return submit(query);
        },
        singleBlogPost: function(id) {
            var query = query('document.id', 'id');
            return submit(query);
        }
    };
});

function query(where, what) {
    $window.Prismic.Api('https://thtest.prismic.io/api', function(err, Api) {
        return Api.form('everything')
            .ref(Api.master())
            .query(Prismic.Predicates.at(where, what))
    });
}

function submit(query) {
    var q = $q.defer();
    query.submit(function(err, response) {
        if (err) {
            console.log(err);
        }
        q.resolve({
            err: err,
            result: response.results
        });
    });
    return q.promise;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment