Sha256: 007fa0d79cd98cdc1a7bbb82964a8dc3998e2c55306d41ccfd3f66a773dc4b3c

Contents?: true

Size: 1.95 KB

Versions: 4

Compression:

Stored size: 1.95 KB

Contents

class Lanes.Models.Query.CollectionResult extends Lanes.Models.Query.Result

    constructor: (@query) ->
        @collection.on('add remove reset', =>
            @query.trigger('change', @query)
        )
        @collection.on('sort', =>
            @query.changeCount += 1
        )

        this

    rowAt: (index, options = {}) ->
        model = @collection.at(index)
        for field, i in @query.fields.models
            model[field.id]

    allRows: (options) ->
        rows = (@rowAt(i, options) for i in [0...@length])
        _.Promise.resolve(rows)

    modelAt: (index, options = {}) ->
        model = @collection.at(index)
        if options.clone then model.clone() else model

    saveModelChanges: (model, index) ->
        old = @collection.at(index)

        @collection.remove(old)
        @collection.add(model, at:index)
        @query.changeCount++

    addBlankRow: (index) ->
        @collection.add({}, at: index)

    removeRow: (index = 0) ->
        @collection.remove(
            @collection.at(index)
        )

    reload: ->
        @collection.reload().then(@)

    ensureLoaded: ->
        @collection.ensureLoaded().then(@)

    reset: Lanes.emptyFn

    rowRepresentation: (rowNum) ->
        @modelAt(rowNum)

    valueForField: (rowNum, field) ->
        @collection.at(rowNum)[field.id]

    fieldToSortValue:
        any:    (v) -> v
        bigdec: (v) -> parseFloat(v)

    _updateSort: ->
        field = @query.sortField
        asc = @query.sortAscending
        f2v = @fieldToSortValue[field.type] || @fieldToSortValue.any
        @collection.comparator = field.sortBy or (a, b) ->
            a = f2v(a[field.id]); b = f2v(b[field.id])
            result = if a < b then -1 else if a > b then 1 else 0
            if asc then result else result * -1
        @collection.sort()

Object.defineProperties Lanes.Models.Query.CollectionResult.prototype,
    length:
        get: -> @query.src.length
    collection:
        get: -> @query.src

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
lanes-0.5.6 client/lanes/models/query/CollectionResult.coffee
lanes-0.5.5 client/lanes/models/query/CollectionResult.coffee
lanes-0.5.0 client/lanes/models/query/CollectionResult.coffee
lanes-0.4.0 client/lanes/models/query/CollectionResult.coffee