통화나 단위에 따라 precision 정규식이 자동으로 적용되도록 커스텀 number field를 만들었다.

그리고 합계의 경우는 "(단가 × 수량) × 건수"로 구해지는데 이 값은 논리적으로 무한값이어야 한다.

왜냐하면 가로의 길이는 "단가 × 수량"이라는 한계값을 둘 수도 있으나, "건수"라는 세로의 높이는 얼마든지 늘어날수 있기 때문이다.

즉 가로의 폭은 임계치가 있다하더라도 세로로는 얼마든지 계속늘어날수 있는 면적이 곧 합계이므로

해당값은 논리적으로는 number가 표현할 수 있는 범위를 초과할수 있으므로 문자값으로 취급한다.

 

<dom-module id="cc-number-field">
    <style>
        :host {
            display: flex;
            width: 100%;
        }    
    </style>
    
    <template>
        <sc-text-field  id="elNumber"
                         value="{{value}}"
                         input-cover="true"
                         format-type="{{formatType}}"
                         placeholder$="[[placeholder]]"
                         class$="[[class]]"
                         required="{{required}}"
                         readonly="{{readonly}}"
                         input-clear="{{inputClear}}"
                         validator="onValidator">
        </sc-text-field>
    </template>
    
    <script>
        Polymer({
            is : "cc-number-field",
            properties : {
                required : {
                    type : Object,
                    value : function() {
                        return false;
                    }
                },
                readonly : {
                    type : Object,
                    value : function() {
                        return true;
                    }
                },
                inputClear : {
                    type : Object,
                    value : function() {
                        return false;
                    }
                },
                formatType : {
                    type : Object,
                    value : function() {
                        return "";
                    }
                },
                unit : {
                    type : Object,
                    value : function() {
                        return {};
                    }
                },
                value : {
                    type : Object,
                    value : function() {
                        return {};
                    },
                    notify : true,
                },
                validator : {
                    type : Object,
                    value : function() {
                        return {};
                    }
                },
            },
            
            observers : [
                "_onChangeUnit(unit)"
            ],

            _onChangeUnit : function(unit)
            {
                var me = this;

                me.$.elNumber.regex = CCPrecManager.regex(me.formatType, me.unit);

                // 기존값 있다면 다시 계산
                if (UT.isNotEmpty(me.value))
                {
                    me.value = CCPrecManager.format(me.formatType, me.value, me.unit);
                }
            },

            onValidator : function(value)
            {
                var me = this;

                if (UT.isFunction(me.domHost[me.validator]))
                {
                    return me.domHost[me.validator].call(me.domHost, me.value);
                }

                return true;
            },
        });
    </script>
</dom-module>
<cc-number-field value="{{app.amt}}" unit="{{app.cur}}" format-type="amt" placeholder="금액" class="align-right" required="[[formula('isEditable')]]" readonly="[[!formula('isEditable')]]"></cc-number-field>