Tutorial: Application configuration example

Application configuration example

This is an example of a config that can be used in a sidecar application.

(function(app) {

    /**
     * Application configuration.
     */
    app.augment('config', {

        /**
         * Application identifier.
         * @type {string}
         */
        appId: 'portal',

        /**
         * Application environment. Possible values: `dev`, `test`, `prod`
         * @type {string}
         */
        env: 'dev',

        /**
         * Flag indicating whether to output Sugar API debug information.
         * @type {boolean}
         */
        debugSugarApi: true,

        /**
         * Logger configuration.
         * @type {Object} logger
         * @property {string} logger.level The logger level
         * @property {string} logger.formatter The formatter to use. Defaults to
         *   `SimpleFormatter`.
         * @property {string} logger.consoleWriter The writer to use for the client
         *   side. Defaults to `ConsoleWriter`.
         * @property {string} logger.serverWriter The writer to use for the server
         *  side. Defaults to `ServerWriter`.
         */
        logger: {
            level: 'DEBUG',
        },

        /**
         * Sugar REST server URL.
         *
         * The URL can be relative or absolute.
         * @type {string}
         */
        serverUrl: '../../sugarcrm/rest/v10',

        /**
         * Sugar site URL.
         *
         * The URL can be relative or absolute.
         * @type {string}
         */
        siteUrl: '../../sugarcrm',

        /**
         * Minimal server version a client is compatible with.
         * @type {string}
         */
        minServerVersion: '6.6',

        /**
         * Server request timeout (in seconds).
         * @type {number}
         */
        serverTimeout: 30,

        /**
         * Max query result set size.
         * @type {number}
         */
        maxQueryResult: 20,

        /**
         * Max search query result set size (for global search)
         * @type {number}
         */
        maxSearchQueryResult: 3,

        /**
         * A list of routes that don't require authentication (in addition to `login`).
         * @type {Array}
         */
        unsecureRoutes: ['signup', 'error'],

        /**
         * Platform name.
         * @type {string}
         */
        platform: 'portal',

        /**
         * Default module to load for the home route (index).
         * If not specified, the framework loads `home` layout for the module `Home`.
         */
        defaultModule: 'Cases',

        /**
         * A list of metadata types to fetch by default.
         * @type {Array}
         */
        metadataTypes: [],

        /**
         * The field and direction to order by.
         *
         * For list views, the default ordering.
         *
         *     orderByDefaults: {
         *         moduleName: {
         *             field: '<name_of_field>',
         *             direction: '(asc|desc)'
         *         }
         *     }
         *
         * @type {Object}
         */
        orderByDefaults: {
            Cases: {
                field: 'case_number',
                direction: 'asc',
            },
            Bugs: {
                field: 'bug_number',
                direction: 'asc',
            },
            Notes: {
                field: 'date_modified',
                direction: 'desc',
            },
        },

        /**
         * Hash of addtional views of the format below to init and render on app start
         *
         *     additionalComponents: {
         *         viewName: {
         *             target: 'CSSDomselector'
         *         }
         *     }
         *
         * @type {Object}
         */
        additionalComponents: {
            header: {
                target: '#header',
            },
            footer: {
                target: '#footer',
            },
        },

        /**
         * Alerts element selector.
         * @type {string}
         */
        alertsEl: '#alerts',

        /**
         * Alert dismiss timeout in milliseconds.
         * @type {number}
         */
        alertAutoCloseDelay: 9000,

        /**
         * Client ID for oAuth
         * Defaults to sugar other values are support_portal
         * @type {Array}
         */
        clientID: 'sugar',

        /**
         * Syncs config from server on app start
         * Defaults to true otherwise set to false
         * @type {boolean}
         */
        syncConfig: true,

        /**
         * Loads css dinamically when the app inits
         * Defaults to false otherwise set 'url' or 'text'
         * @type {string}
         */
        loadCss: false,

        /**
         * Offline configuration.
         */
        offline: {

            /**
             * Flag indicating if offline mode is enabled.
             */
            enabled: false,

            debug: {
                /**
                 * Ignore app.config.offlineEnabled setting.
                 */
                ignoreEnabled: true,
                /**
                 * Render debug settings view.
                 */
                render: true,
                /**
                 * Drop db on app sync.
                 */
                forceMigrate: true,
                /**
                 * Force offline connection.
                 */
                online: true,
                /**
                 * Disable sync manager.
                 */
                syncManagerEnabled: true,
                /**
                 * Disable status monitor.
                 */
                monitorStatus: false,
                /**
                 * Emulate out-of-space situation.
                 */
                outOfSpace: false,
            },

            /**
             * Minimum server version that is required by offline mode.
             */
            minServerVersion: '7.1.5',

            /**
             * Flag indicating if HTTP throttling is enabled for read requests.
             */
            httpThrottlingEnabled: true,

            /**
             * HTTP throttling timeout.
             *
             * Repeated requests are ignored for the specified interval.
             */
            httpThrottleTimeout: 5000, //(msec)

            /**
             * Size of HTTP throttling cache.
             */
            httpThrottleCacheSize: 10,

            /**
             * List of modules to exclude from offline access.
             */
            exclude: [],

            /**
             * Defines configuration for the 'static' data pre-fetching.
             */
            prefetch: {

                /**
                 * Flag indicating if prefetching is enabled during app.sync.
                 */
                enabled: true,

                /**
                 * Specified number of records from static modules are prefetched from server after app sync.
                 */
                staticModules: {
                    Users: 20,
                    Teams: 20,
                    ProductCategories: 20,
                    ProductTypes: 40,
                    ProductTemplates: 20,
                    Manufacturers: 20,
                },

                /**
                 * Default max threshold prefetched records per module
                 */
                maxThreshold: 20,

                /**
                 * Prefetching page size.
                 */
                pageSize: 20,

                /**
                 * Relationships prefetch section
                 */
                relationships: {
                    pageSize: 20,
                    maxThreshold: 100,
                },
            },

            /**
             * Storage provider.
             */
            storageProvider: 'sql',

            /**
             * Storage provider.
             */
            storageAdapter: 'webSql',

            /**
             * Database size, in megabytes.
             */
            storageSize: 5,

            /**
             * Records purge interval (days).
             */
            defaultPurgeInterval: 7,

            /**
             * Synchronization configuration.
             */
            syncManager: {

                /**
                 * Flag indicating if synchronization is enabled.
                 */
                enabled: true,

                /**
                 * Period of synchronization iteration (seconds).
                 */
                syncTimeout: 10,

                /**
                 * List of synchronization workers.
                 */
                executors: {

                    /**
                     * 'What is New?' synchronization.
                     */
                    wins: {

                        /**
                         * Flag indicating if the worker is enabled.
                         */
                        enabled: true,
                        /**
                         * Synchronization interval (seconds).
                         */
                        interval: 30,
                        /**
                         * Synchronization priority (lowest value gets higher priority).
                         */
                        priority: 1,
                        /**
                         * Maximum number of records to synchronize.
                         */
                        preSyncMaxRecords: 100,
                        /**
                         * Page size for batch records update.
                         */
                        syncPageSize: 20,
                        /**
                         * Page size for 'What is New?' request.
                         */
                        preSyncPageSize: 20,
                    },

                    /**
                     * Transaction Log synchronization.
                     */
                    txLog: {

                        /**
                         * Flag indicating if the worker is enabled.
                         */
                        enabled: true,

                        /**
                         * Synchronization interval (seconds).
                         */
                        interval: 10,
                        /**
                         * Synchronization priority (lowest value gets higher priority).
                         */
                        priority: 0,
                    },
                },
            },

            /**
             * Maximum size of result set for mixed collection (search).
             */
            maxMixedCollectionQueryResult: 30,

            /**
             * Offline status monitor interval, ms
             */
            monitorTimeout: 2000,

            /**
             * How ofter a user will see the cleanup confirmation dialog, ms
             */
            cleanupConfirmationInterval: 60000,
        },

    }, false);

})(SUGAR.App);