Big initialization rework in order to be able to facilitate preloaded backend settings
This commit is contained in:
@@ -3,9 +3,25 @@ import config from 'ember-get-config'
|
|||||||
import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin'
|
import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin'
|
||||||
|
|
||||||
export default Ember.Mixin.create ApplicationRouteMixin,
|
export default Ember.Mixin.create ApplicationRouteMixin,
|
||||||
current_user_loaded: (user) ->
|
current_user_loaded: (user) -> @get('initial_resources_resolve')(user)
|
||||||
beforeModel: (transition) ->
|
beforeModel: (transition) ->
|
||||||
@_loadCurrentUser arguments... unless transition?.targetName is 'login'
|
@set 'router.globals.initial_resources_fulfilled', false
|
||||||
|
time_now = new Date()
|
||||||
|
console.log "Application beforeModel"
|
||||||
|
initial_resources_loaded = new Ember.RSVP.Promise((resolve, reject) =>
|
||||||
|
@set 'initial_resources_resolve', resolve
|
||||||
|
@set 'initial_resources_reject', reject
|
||||||
|
).then((resources) =>
|
||||||
|
console.log "Initial resources loaded (#{Math.round((new Date() - time_now) / 100) / 10}s)" # rounded devide by 1000
|
||||||
|
@set 'router.globals.initial_resources_fulfilled', true
|
||||||
|
).catch((reason) =>
|
||||||
|
console.log "No initial resource loading (#{Math.round((new Date() - time_now) / 100) / 10}s)" # rounded devide by 1000
|
||||||
|
@set('router.globals.flash_message', reason) if reason
|
||||||
|
).finally -> Ember.$('#initial-loader').remove()
|
||||||
|
|
||||||
|
@set 'initial_resources_loaded_promise', initial_resources_loaded
|
||||||
|
@_loadCurrentUser arguments...
|
||||||
|
initial_resources_loaded
|
||||||
|
|
||||||
sessionAuthenticated: ->
|
sessionAuthenticated: ->
|
||||||
@_super arguments...
|
@_super arguments...
|
||||||
@@ -13,13 +29,15 @@ export default Ember.Mixin.create ApplicationRouteMixin,
|
|||||||
|
|
||||||
_loadCurrentUser: (transition) ->
|
_loadCurrentUser: (transition) ->
|
||||||
#if userId = @get('session.data.authenticated.user_id')
|
#if userId = @get('session.data.authenticated.user_id')
|
||||||
return if transition?.targetName is 'login'
|
if transition?.targetName is 'login' # don't load current user on login page
|
||||||
|
@get('initial_resources_reject')('Please login')
|
||||||
|
return
|
||||||
@get('store').queryRecord('user', me: true).then (user) =>
|
@get('store').queryRecord('user', me: true).then (user) =>
|
||||||
@set 'router.globals.current_user', user
|
@set 'router.globals.current_user', user
|
||||||
@current_user_loaded user # overloadable
|
@current_user_loaded user # overloadable
|
||||||
, =>
|
, =>
|
||||||
@set 'router.globals.current_user', null
|
@set 'router.globals.current_user', null
|
||||||
#@transitionTo('login').then (loginRoute) -> loginRoute.set('router.globals.flash.notice', 'Please login')
|
#@get('initial_resources_reject')('Unauthenticated user')
|
||||||
@transitionTo('login')
|
@transitionTo('login')
|
||||||
|
|
||||||
actions:
|
actions:
|
||||||
|
|||||||
@@ -7,8 +7,10 @@ export default PagedRemoteArray.extend
|
|||||||
#params: {}
|
#params: {}
|
||||||
session: Ember.inject.service()
|
session: Ember.inject.service()
|
||||||
filters: {}
|
filters: {}
|
||||||
|
scope_key: null
|
||||||
init: ->
|
init: ->
|
||||||
query = @get('filters')?.toProperties() || {}
|
query = @get('filters')?.toProperties() || {}
|
||||||
|
@set 'scope_key', get(@, 'modelName') unless get(@, 'scope_key')
|
||||||
@otherParams ||= {}
|
@otherParams ||= {}
|
||||||
@otherParams['q'] = query
|
@otherParams['q'] = query
|
||||||
#@setOtherParam('q', query) # explicitly not, init does not trigger operational callbacks
|
#@setOtherParam('q', query) # explicitly not, init does not trigger operational callbacks
|
||||||
@@ -29,9 +31,9 @@ export default PagedRemoteArray.extend
|
|||||||
|
|
||||||
postRequest: (action_name, data = {}) ->
|
postRequest: (action_name, data = {}) ->
|
||||||
container = Ember.getOwner(@store)
|
container = Ember.getOwner(@store)
|
||||||
adapter = @store.adapterFor(@modelName)
|
adapter = @store.adapterFor(get(@, 'modelName'))
|
||||||
session = container.lookup('service:session')
|
session = container.lookup('service:session')
|
||||||
base_url = adapter.buildURL(@modelName)
|
base_url = adapter.buildURL(get(@, 'modelName'))
|
||||||
url = "#{base_url}/#{action_name}"
|
url = "#{base_url}/#{action_name}"
|
||||||
request_data = data
|
request_data = data
|
||||||
request_data = JSON.stringify(data) if typeof data is 'object'
|
request_data = JSON.stringify(data) if typeof data is 'object'
|
||||||
|
|||||||
@@ -4,14 +4,15 @@ export default Ember.Component.extend
|
|||||||
#filter_calls: 0
|
#filter_calls: 0
|
||||||
tagName: 'tr'
|
tagName: 'tr'
|
||||||
classNames: ['table-filters-row', 'ui', 'form']
|
classNames: ['table-filters-row', 'ui', 'form']
|
||||||
filters: Ember.Object.create()
|
filters: null
|
||||||
content: null # PagedRemoteArray from ember-cli-pagination
|
content: null # PagedRemoteArray from ember-cli-pagination
|
||||||
key: 'name_eq'
|
key: 'name_eq'
|
||||||
apply_filters: null # allow custom apply filters with application logic
|
apply_filters: null # allow custom apply filters with application logic
|
||||||
|
|
||||||
init: ->
|
init: ->
|
||||||
@_super arguments...
|
@set 'filters', @get('content.filters') unless @get('filters')
|
||||||
Ember.defineProperty @, 'filter_calls', Ember.computed.alias("filters.filter_calls")
|
Ember.defineProperty @, 'filter_calls', Ember.computed.alias("filters.filter_calls")
|
||||||
|
@_super arguments...
|
||||||
|
|
||||||
actions:
|
actions:
|
||||||
apply_filters: ->
|
apply_filters: ->
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ export default Ember.Component.extend
|
|||||||
tagName: 'th'
|
tagName: 'th'
|
||||||
classNames: ['filter', 'filter-dropdown-select-multiple']
|
classNames: ['filter', 'filter-dropdown-select-multiple']
|
||||||
classNameBindings: ['has_active_filter_value:active-filter', 'key']
|
classNameBindings: ['has_active_filter_value:active-filter', 'key']
|
||||||
|
filters: null
|
||||||
apply_filters: ->
|
apply_filters: ->
|
||||||
eager_filter: false # filter on single select
|
eager_filter: false # filter on single select
|
||||||
has_active_filter_value: Ember.computed.bool 'selected.length'
|
has_active_filter_value: Ember.computed.bool 'selected.length'
|
||||||
|
|||||||
@@ -14,15 +14,14 @@
|
|||||||
.ui.floating.info.message
|
.ui.floating.info.message
|
||||||
i.close.icon{action (mut globals.flash.notice) ''}
|
i.close.icon{action (mut globals.flash.notice) ''}
|
||||||
= globals.flash.notice
|
= globals.flash.notice
|
||||||
= outlet
|
if globals.initial_resources_fulfilled
|
||||||
/if globals.preload_resources_fulfilled
|
= outlet
|
||||||
/ = outlet
|
else
|
||||||
/else
|
.ui.icon.message
|
||||||
/ .ui.icon.message
|
i.notched.circle.loading.icon
|
||||||
/ i.notched.circle.loading.icon
|
.content
|
||||||
/ .content
|
.header Initial resources not loaded...
|
||||||
/ .header Preloading resources...
|
p Loading resources globally required before continuing with the application.
|
||||||
/ p Loading resources globally required before continuing with the application.
|
|
||||||
/button.basic.button{ action 'debug'} debug
|
/button.basic.button{ action 'debug'} debug
|
||||||
= outlet 'modal'
|
= outlet 'modal'
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user