Use VueJS resource

This commit is contained in:
Phil Hughes 2016-07-13 13:48:21 +01:00 committed by Douwe Maan
parent 4af0146fa5
commit 43131802a9
7 changed files with 48 additions and 28 deletions

View file

@ -1,4 +1,5 @@
#= require vue
#= require vue-resource
#= require_directory ./stores
#= require_directory ./services
#= require_directory ./components

View file

@ -3,7 +3,7 @@
comments: CommentsStore.state
loading: false
props:
endpoint: String
namespace: String
computed:
resolved: ->
resolvedCount = 0
@ -22,8 +22,6 @@
this.loading = true
ResolveService
.resolveAll(this.endpoint, ids, !this.allResolved)
.done =>
CommentsStore.updateAll(!this.allResolved)
.always =>
.resolveAll(this.namespace, ids, !this.allResolved)
.then =>
this.loading = false

View file

@ -2,7 +2,7 @@
props:
noteId: Number
resolved: Boolean
endpoint: String
namespace: String
data: ->
comments: CommentsStore.state
loading: false
@ -18,13 +18,10 @@
resolve: ->
this.loading = true
ResolveService
.resolve(this.endpoint, !this.isResolved)
.done =>
CommentsStore.update(this.noteId, !this.isResolved)
this.$nextTick this.updateTooltip
.always =>
.resolve(this.namespace, this.noteId, !this.isResolved)
.then =>
this.loading = false
this.$nextTick this.updateTooltip
compiled: ->
$(this.$els.button).tooltip()
destroyed: ->

View file

@ -1,14 +1,31 @@
@ResolveService =
resolve: (endpoint, resolve) ->
$.ajax
data:
resolved: resolve
type: 'post'
url: endpoint
resolveAll: (endpoint, ids, resolve) ->
$.ajax
data:
id: ids
resolve: resolve
type: 'post'
url: endpoint
class ResolveService
constructor: ->
actions = {
resolve:
method: 'POST'
url: 'notes{/id}/resolve'
all:
method: 'POST'
url: 'notes/resolve_all'
}
Vue.http.headers.common['X-CSRF-Token'] = $.rails.csrfToken()
@resource = Vue.resource('notes{/id}', {}, actions)
resolve: (namespace, id, resolve) ->
Vue.http.options.root = "/#{namespace}"
@resource
.resolve({ id: id }, { resolved: resolve })
.then (response) ->
if response.status is 200
CommentsStore.update(id, resolve)
resolveAll: (namespace, ids, resolve) ->
Vue.http.options.root = "/#{namespace}"
@resource
.all({}, { ids: ids, resolve: resolve })
.then (response) ->
CommentsStore.updateAll(resolve)
$ ->
@ResolveService = new ResolveService()

View file

@ -46,7 +46,7 @@
- if current_user
#resolve-all-app{ "v-cloak" => true }
%resolve-all{ ":endpoint" => "'#{resolve_all_namespace_project_notes_path(@project.namespace, @project)}'", "inline-template" => true }
%resolve-all{ ":namespace" => "'#{@project.namespace.path}/#{@project.path}'", "inline-template" => true }
.line-resolve-all{ "v-show" => "commentsCount > 0" }
%button.btn.btn-gray{ type: "button", "aria-label" => "Resolve all", "@click" => "updateAll", ":disabled" => "loading" }
= icon("spinner spin", "v-show" => "loading")

View file

@ -21,7 +21,7 @@
- if access and not note.system
%span.note-role.hidden-xs= access
- if !note.system && current_user
%resolve-btn{ ":endpoint" => "'#{resolve_namespace_project_note_path(note.project.namespace, note.project, note)}'", ":note-id" => note.id, ":resolved" => "false", "inline-template" => true, "v-ref:note_#{note.id}" => true }
%resolve-btn{ ":namespace" => "'#{note.project.namespace.path}/#{note.project.path}'", ":note-id" => note.id, ":resolved" => "false", "inline-template" => true, "v-ref:note_#{note.id}" => true }
.note-action-button
= icon("spin spinner", "v-show" => "loading")
%button.line-resolve-btn{ type: "button", ":class" => "{ 'is-active': isResolved }", ":aria-label" => "buttonText", "@click" => "resolve", ":title" => "buttonText", "v-show" => "!loading", "v-el:button" => true }

File diff suppressed because one or more lines are too long