Big initialization rework in order to be able to facilitate preloaded backend settings

This commit is contained in:
2018-11-20 12:13:10 -03:00
parent 88d5f55e90
commit fe6653442c
5 changed files with 38 additions and 17 deletions
+22 -4
View File
@@ -3,9 +3,25 @@ import config from 'ember-get-config'
import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin'
export default Ember.Mixin.create ApplicationRouteMixin,
current_user_loaded: (user) ->
current_user_loaded: (user) -> @get('initial_resources_resolve')(user)
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: ->
@_super arguments...
@@ -13,13 +29,15 @@ export default Ember.Mixin.create ApplicationRouteMixin,
_loadCurrentUser: (transition) ->
#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) =>
@set 'router.globals.current_user', user
@current_user_loaded user # overloadable
, =>
@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')
actions:
+4 -2
View File
@@ -7,8 +7,10 @@ export default PagedRemoteArray.extend
#params: {}
session: Ember.inject.service()
filters: {}
scope_key: null
init: ->
query = @get('filters')?.toProperties() || {}
@set 'scope_key', get(@, 'modelName') unless get(@, 'scope_key')
@otherParams ||= {}
@otherParams['q'] = query
#@setOtherParam('q', query) # explicitly not, init does not trigger operational callbacks
@@ -29,9 +31,9 @@ export default PagedRemoteArray.extend
postRequest: (action_name, data = {}) ->
container = Ember.getOwner(@store)
adapter = @store.adapterFor(@modelName)
adapter = @store.adapterFor(get(@, 'modelName'))
session = container.lookup('service:session')
base_url = adapter.buildURL(@modelName)
base_url = adapter.buildURL(get(@, 'modelName'))
url = "#{base_url}/#{action_name}"
request_data = data
request_data = JSON.stringify(data) if typeof data is 'object'
+3 -2
View File
@@ -4,14 +4,15 @@ export default Ember.Component.extend
#filter_calls: 0
tagName: 'tr'
classNames: ['table-filters-row', 'ui', 'form']
filters: Ember.Object.create()
filters: null
content: null # PagedRemoteArray from ember-cli-pagination
key: 'name_eq'
apply_filters: null # allow custom apply filters with application logic
init: ->
@_super arguments...
@set 'filters', @get('content.filters') unless @get('filters')
Ember.defineProperty @, 'filter_calls', Ember.computed.alias("filters.filter_calls")
@_super arguments...
actions:
apply_filters: ->
@@ -4,6 +4,7 @@ export default Ember.Component.extend
tagName: 'th'
classNames: ['filter', 'filter-dropdown-select-multiple']
classNameBindings: ['has_active_filter_value:active-filter', 'key']
filters: null
apply_filters: ->
eager_filter: false # filter on single select
has_active_filter_value: Ember.computed.bool 'selected.length'
+7 -8
View File
@@ -14,15 +14,14 @@
.ui.floating.info.message
i.close.icon{action (mut globals.flash.notice) ''}
= globals.flash.notice
if globals.initial_resources_fulfilled
= outlet
/if globals.preload_resources_fulfilled
/ = outlet
/else
/ .ui.icon.message
/ i.notched.circle.loading.icon
/ .content
/ .header Preloading resources...
/ p Loading resources globally required before continuing with the application.
else
.ui.icon.message
i.notched.circle.loading.icon
.content
.header Initial resources not loaded...
p Loading resources globally required before continuing with the application.
/button.basic.button{ action 'debug'} debug
= outlet 'modal'