diff --git a/addon/mixins/application-route.coffee b/addon/mixins/application-route.coffee index 6d32a51..3624487 100644 --- a/addon/mixins/application-route.coffee +++ b/addon/mixins/application-route.coffee @@ -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: diff --git a/addon/utils/paged-remote-array.coffee b/addon/utils/paged-remote-array.coffee index 2ec8db4..3d0f780 100644 --- a/addon/utils/paged-remote-array.coffee +++ b/addon/utils/paged-remote-array.coffee @@ -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' diff --git a/app/components/table-filters.coffee b/app/components/table-filters.coffee index 7e7d87d..524302e 100644 --- a/app/components/table-filters.coffee +++ b/app/components/table-filters.coffee @@ -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: -> diff --git a/app/components/table-filters/dropdown-select-multiple.coffee b/app/components/table-filters/dropdown-select-multiple.coffee index d2175a4..7bee4cd 100644 --- a/app/components/table-filters/dropdown-select-multiple.coffee +++ b/app/components/table-filters/dropdown-select-multiple.coffee @@ -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' diff --git a/tests/dummy/app/templates/application.emblem b/tests/dummy/app/templates/application.emblem index 7c21e96..0d288e7 100644 --- a/tests/dummy/app/templates/application.emblem +++ b/tests/dummy/app/templates/application.emblem @@ -14,15 +14,14 @@ .ui.floating.info.message i.close.icon{action (mut globals.flash.notice) ''} = globals.flash.notice - = 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. + if globals.initial_resources_fulfilled + = outlet + 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'