1
0
Fork 0
liza/src/client/ClientDependencyFactory.js

373 lines
10 KiB
JavaScript

/**
* Factory for Client dependencies
*
* Copyright (C) 2017 R-T Specialty, LLC.
*
* This file is part of the Liza Data Collection Framework
*
* Liza is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* XXX: This class is temporary; I understand that it is a mess. It allows
* us to inject all the dependencies and is a slow transition between the
* terribly tightly coupled old system to a necessary Facade yet to be
* created.
*
* It's like that graphic of the evolution of a monkey into a man:
* functions -> poorly attempted prototypes -> better prototypes -> classes
*
* Note that many of these classes are not yet in liza, but they will be in
* time.
*/
var Step = require( '../step/Step' ),
GeneralStepUi = require( '../ui/step/GeneralStepUi' ),
StepUiBuilder = require( '../ui/step/StepUiBuilder' ),
Group = require( '../group/Group' ),
GroupUi = require( '../ui/group/GroupUi' ),
FlatGroupUi = require( '../ui/group/FlatGroupUi' ),
TableGroupUi = require( '../ui/group/TableGroupUi' ),
TabbedGroupUi = require( '../ui/group/TabbedGroupUi' ),
TabbedBlockGroupUi = require( '../ui/group/TabbedBlockGroupUi' ),
SideTableGroupUi = require( '../ui/group/SideTableGroupUi' ),
CollapseTableGroupUi = require( '../ui/group/CollapseTableGroupUi' ),
// TODO: delete me
AccordionGroupUi = require( 'program/ui/AccordionGroupUi' ),
Ui = require( '../ui/Ui' ),
UiStyler = require( '../ui/UiStyler' ),
UiNotifyBar = require( '../ui/UiNotifyBar' ),
UiNavBar = require( '../ui/nav/UiNavBar' ),
UiDialog = require( '../ui/dialog/UiDialog' ),
JqueryDialog = require( '../ui/dialog/JqueryDialog' ),
BaseQuote = require( '../quote/BaseQuote' ),
ClientQuote = require( './quote/ClientQuote' ),
QuoteDataBucket = require( '../bucket/QuoteDataBucket' ),
StagingBucket = require( '../bucket/StagingBucket' ),
StagingBucketAutoDiscard = require( '../bucket/StagingBucketAutoDiscard' ),
DelayedStagingBucket = require( '../bucket/DelayedStagingBucket' ),
standardValidator = require( '../validate/standardBucketValidator' ),
DataValidator = require( '../validate/DataValidator' ),
ValidStateMonitor = require( '../validate/ValidStateMonitor' ),
Failure = require( '../validate/Failure' ),
Field = require( '../field/BucketField' ),
XhttpQuoteTransport = require( './transport/XhttpQuoteTransport' ),
JqueryHttpDataProxy = require( './proxy/JqueryHttpDataProxy' ),
XhttpQuoteStagingTransport =
require( './transport/XhttpQuoteStagingTransport' ),
Nav = require( './nav//Nav' ),
HashNav = require( '../ui/nav/HashNav' ),
ClientDataProxy = require( './ClientDataProxy' ),
ElementStyler = require( '../ui/ElementStyler' ),
FormErrorBox = require( '../ui/sidebar/FormErrorBox' ),
NavStyler = require( '../ui/nav/NavStyler' ),
Sidebar = require( '../ui/sidebar/Sidebar' ),
FieldClassMatcher = require( '../field/FieldClassMatcher' ),
DataApiFactory = require( '../dapi/DataApiFactory' ),
DataApiManager = require( '../dapi/DataApiManager' ),
RootDomContext = require( '../ui/context/RootDomContext' ),
DomFieldFactory = require( '../ui/field/DomFieldFactory' ),
StepErrorStyler = require( '../ui/styler/StepErrorStyler' ),
SidebarErrorStyler = require( '../ui/styler/SidebarErrorStyler' ),
ErrorFieldStyler = require( '../ui/styler/ErrorFieldStyler' ),
NaFieldStyler = require( '../ui/styler/NaFieldStyler' ),
NaFieldStylerAnimation = require( '../ui/styler/NaFieldStylerAnimation' ),
DelegateEventHandler = require( './event/DelegateEventHandler' ),
diffStore = require( 'liza/system/client' ).data.diffStore,
Class = require( 'easejs' ).Class;
var liza_event = require( './event' );
function requireh( name )
{
return liza_event[ name ];
}
module.exports = Class( 'ClientDependencyFactory',
{
/**
* Creates a new ElementStyler instance
*
* @return {ElementStyler}
*/
createElementStyler: ElementStyler,
/**
* Creates a new data proxy used for client-server communication
*
* @return {ClientDataProxy}
*/
createDataProxy: ClientDataProxy,
createNav: Nav,
createNavStyler: NavStyler,
createHashNav: HashNav,
createDataApiManager: function()
{
return DataApiManager( DataApiFactory() );
},
createProgram: function( id, dapi_manager )
{
return require( 'program/' + id + '/Program' )(
dapi_manager
);
},
createDataBucket: QuoteDataBucket,
createStagingBucket: function( bucket )
{
return DelayedStagingBucket( bucket );
},
createStagingBucketDiscard: StagingBucketAutoDiscard,
createDataBucketTransport: function ( quote_id, step_id, proxy )
{
return XhttpQuoteTransport(
( quote_id + '/step/' + step_id + '/post' ),
proxy
);
},
createStagingDataBucketTransport: function( quote_id )
{
return XhttpQuoteStagingTransport(
( quote_id + '/quicksave' ),
JqueryHttpDataProxy( jQuery )
);
},
createQuote: function ( quote_id, data )
{
var _self = this;
return ClientQuote(
BaseQuote( quote_id, this.createDataBucket() ),
data,
function( bucket )
{
return _self.createStagingBucket( bucket );
}
);
},
createValidatorFormatter: function( field_map )
{
return standardValidator( field_map );
},
/**
* Create validator for bucket/class changes
*
* @param {Object} field_map field qtype map
* @param {ValidStateMonitor} monitor field error monitor
*
* @return {DataValidator}
*/
createDataValidator: function( field_map, monitor )
{
return DataValidator(
this.createValidatorFormatter( field_map ),
monitor,
this,
diffStore
);
},
createFieldValidator: function( field_map )
{
return ValidStateMonitor();
},
/**
* Create failure for given field
*
* @param {string} name field name
* @param {number} index field index
* @param {string} reason failure reason
* @param {?string} cause_name field name of cause
* @param {?number} cause_index field index of cause
*
* @return {Failure}
*/
createFieldFailure: function( name, index, reason, cause_name, cause_index )
{
return Failure(
Field( name, index ),
reason,
( cause_name )
? Field( cause_name, cause_index )
: undefined
);
},
createUi: Ui,
createUiDialog: function()
{
return UiDialog( jQuery, function()
{
return JqueryDialog( jQuery );
} );
},
createUiNavBar: UiNavBar,
createUiStyler: UiStyler,
createDomFieldFactory: DomFieldFactory,
createStepErrorStyler: function( msg_default )
{
return StepErrorStyler( msg_default, ErrorFieldStyler() );
},
createSidebarErrorStyler: SidebarErrorStyler,
createRootDomContext: RootDomContext,
createStep: Step,
createStepUi: function(
step, styler, formatter, group_builder, data_get, callback
)
{
StepUiBuilder( styler, formatter, group_builder, data_get )
.setStep( step )
.build( GeneralStepUi, callback );
},
createGroup: Group,
createGroupUi: function (
group, $content, styler, root_context, na_styler
)
{
// default
var obj = FlatGroupUi;
if ( $content.hasClass( 'table' ) )
{
obj = TableGroupUi;
}
else if ( $content.hasClass( 'sidetable' ) )
{
obj = SideTableGroupUi;
}
else if ( $content.hasClass( 'collapsetable' ) )
{
obj = CollapseTableGroupUi;
}
else if ( $content.hasClass( 'tabbed' ) )
{
obj = TabbedGroupUi;
}
else if ( $content.hasClass( 'tabbedblock' ) )
{
obj = TabbedBlockGroupUi;
}
else if ( $content.hasClass( 'accordion' ) )
{
obj = AccordionGroupUi;
}
return obj(
group, $content, styler, jQuery, root_context, na_styler
);
},
createNaFieldStyler: function()
{
return NaFieldStyler
.use( NaFieldStylerAnimation( jQuery ) )();
},
createFormErrorBox: FormErrorBox,
createSidebar: Sidebar,
createNotifyBar: UiNotifyBar,
createFieldClassMatcher: FieldClassMatcher,
createClientEventHandler: function(
client, data_validator, styler, data_proxy, jquery
)
{
const field_vis_handler = requireh( 'FieldVisibilityEventHandler' )(
client.getUi(),
data_validator
);
return DelegateEventHandler( {
'indvRate': requireh( 'IndvRateEventHandler' )(
client, data_proxy
),
'rate': requireh( 'RateEventHandler' )( client, data_proxy ),
'kickBack': requireh( 'KickbackEventHandler' )( client ),
'status': requireh( 'StatusEventHandler' )( styler ),
'show': field_vis_handler,
'hide': field_vis_handler,
'action$cvv2Dialog': requireh( 'Cvv2DialogEventHandler' )( jquery )
} );
}
});