mirror of
https://github.com/frappe/books.git
synced 2024-11-12 16:36:27 +00:00
fix: TypeError, .round is not a func
- type vue files for Currency, Float, Int, Data - use Number for safe parse cause faster
This commit is contained in:
parent
7c99a76e20
commit
368714a84a
@ -1,9 +1,9 @@
|
|||||||
import { Fyo } from 'fyo';
|
import { Fyo } from 'fyo';
|
||||||
import { Doc } from 'fyo/model/doc';
|
import { Doc } from 'fyo/model/doc';
|
||||||
import { DateTime } from 'luxon';
|
import { DateTime } from 'luxon';
|
||||||
import { Money } from 'pesa';
|
|
||||||
import { Field, FieldType, FieldTypeEnum } from 'schemas/types';
|
import { Field, FieldType, FieldTypeEnum } from 'schemas/types';
|
||||||
import { getIsNullOrUndef, safeParseFloat, titleCase } from 'utils';
|
import { getIsNullOrUndef, safeParseFloat, titleCase } from 'utils';
|
||||||
|
import { isPesa } from '.';
|
||||||
import {
|
import {
|
||||||
DEFAULT_CURRENCY,
|
DEFAULT_CURRENCY,
|
||||||
DEFAULT_DATE_FORMAT,
|
DEFAULT_DATE_FORMAT,
|
||||||
@ -138,8 +138,8 @@ function formatNumber(value: unknown, fyo: Fyo): string {
|
|||||||
value = fyo.pesa(value.toFixed(20));
|
value = fyo.pesa(value.toFixed(20));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((value as Money).round) {
|
if (isPesa(value)) {
|
||||||
const floatValue = safeParseFloat((value as Money).round());
|
const floatValue = safeParseFloat(value.round());
|
||||||
return numberFormatter.format(floatValue);
|
return numberFormatter.format(floatValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
class="text-end"
|
class="text-end"
|
||||||
:class="[inputClasses, containerClasses]"
|
:class="[inputClasses, containerClasses]"
|
||||||
:type="inputType"
|
:type="inputType"
|
||||||
:value="value?.round()"
|
:value="round(value)"
|
||||||
:placeholder="inputPlaceholder"
|
:placeholder="inputPlaceholder"
|
||||||
:readonly="isReadOnly"
|
:readonly="isReadOnly"
|
||||||
:tabindex="isReadOnly ? '-1' : '0'"
|
:tabindex="isReadOnly ? '-1' : '0'"
|
||||||
@ -29,13 +29,16 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
<script lang="ts">
|
||||||
<script>
|
// @ts-nocheck
|
||||||
|
import { isPesa } from 'fyo/utils';
|
||||||
|
import { Money } from 'pesa';
|
||||||
import { fyo } from 'src/initFyo';
|
import { fyo } from 'src/initFyo';
|
||||||
import { nextTick } from 'vue';
|
import { safeParseFloat } from 'utils/index';
|
||||||
|
import { defineComponent, nextTick } from 'vue';
|
||||||
import Float from './Float.vue';
|
import Float from './Float.vue';
|
||||||
|
|
||||||
export default {
|
export default defineComponent({
|
||||||
name: 'Currency',
|
name: 'Currency',
|
||||||
extends: Float,
|
extends: Float,
|
||||||
emits: ['input', 'focus'],
|
emits: ['input', 'focus'],
|
||||||
@ -51,17 +54,44 @@ export default {
|
|||||||
this.showInput = true;
|
this.showInput = true;
|
||||||
this.$emit('focus', e);
|
this.$emit('focus', e);
|
||||||
},
|
},
|
||||||
parse(value) {
|
round(v: unknown) {
|
||||||
return fyo.pesa(value);
|
if (!isPesa(v)) {
|
||||||
|
v = this.parse(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isPesa(v)) {
|
||||||
|
return v.round();
|
||||||
|
}
|
||||||
|
|
||||||
|
return fyo.pesa(0).round();
|
||||||
},
|
},
|
||||||
onBlur(e) {
|
parse(value: unknown): Money {
|
||||||
let { value } = e.target;
|
if (isPesa(value)) {
|
||||||
if (value !== 0 && !value) {
|
return value;
|
||||||
value = fyo.pesa(0).round();
|
}
|
||||||
|
|
||||||
|
if (typeof value === 'string') {
|
||||||
|
value = safeParseFloat(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof value === 'number') {
|
||||||
|
return fyo.pesa(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof value === 'bigint') {
|
||||||
|
return fyo.pesa(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return fyo.pesa(0);
|
||||||
|
},
|
||||||
|
onBlur(e: FocusEvent) {
|
||||||
|
const target = e.target;
|
||||||
|
if (!(target instanceof HTMLInputElement)) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.showInput = false;
|
this.showInput = false;
|
||||||
this.triggerChange(value);
|
this.triggerChange(target.value);
|
||||||
},
|
},
|
||||||
activateInput() {
|
activateInput() {
|
||||||
if (this.isReadOnly) {
|
if (this.isReadOnly) {
|
||||||
@ -79,5 +109,5 @@ export default {
|
|||||||
return fyo.format(this.value ?? fyo.pesa(0), this.df, this.doc);
|
return fyo.format(this.value ?? fyo.pesa(0), this.df, this.doc);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
<script>
|
<script lang="ts">
|
||||||
import Base from './Base';
|
import Base from './Base.vue';
|
||||||
|
import { defineComponent } from 'vue';
|
||||||
|
|
||||||
export default {
|
export default defineComponent({
|
||||||
name: 'Data',
|
name: 'Data',
|
||||||
extends: Base,
|
extends: Base,
|
||||||
computed: {
|
computed: {
|
||||||
inputType() {
|
inputType() {
|
||||||
return 'text';
|
return 'text';
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
};
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,19 +1,20 @@
|
|||||||
<script>
|
<script lang="ts">
|
||||||
import { safeParseFloat } from 'utils/index';
|
import { safeParseFloat } from 'utils/index';
|
||||||
|
import { defineComponent } from 'vue';
|
||||||
import Int from './Int.vue';
|
import Int from './Int.vue';
|
||||||
|
|
||||||
export default {
|
export default defineComponent({
|
||||||
name: 'Float',
|
name: 'Float',
|
||||||
extends: Int,
|
extends: Int,
|
||||||
computed: {
|
computed: {
|
||||||
inputType() {
|
inputType() {
|
||||||
return 'number';
|
return 'number';
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
parse(value) {
|
|
||||||
return safeParseFloat(value)
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
methods: {
|
||||||
|
parse(value: unknown): number {
|
||||||
|
return safeParseFloat(value);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
<script>
|
<script lang="ts">
|
||||||
import Data from "./Data.vue";
|
import Data from './Data.vue';
|
||||||
|
import { defineComponent } from 'vue';
|
||||||
|
import { safeParseInt } from 'utils/index';
|
||||||
|
|
||||||
export default {
|
export default defineComponent({
|
||||||
name: 'Int',
|
name: 'Int',
|
||||||
extends: Data,
|
extends: Data,
|
||||||
computed: {
|
computed: {
|
||||||
@ -10,10 +12,9 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
parse(value) {
|
parse(value: unknown): number {
|
||||||
const parsedValue = parseInt(value, 10);
|
return safeParseInt(value);
|
||||||
return isNaN(parsedValue) ? 0 : parsedValue;
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -180,11 +180,11 @@ function safeParseNumber(value: unknown, parser: (v: string) => number) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function safeParseFloat(value: unknown): number {
|
export function safeParseFloat(value: unknown): number {
|
||||||
return safeParseNumber(value, parseFloat);
|
return safeParseNumber(value, Number);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function safeParseInt(value: unknown): number {
|
export function safeParseInt(value: unknown): number {
|
||||||
return safeParseNumber(value, parseInt);
|
return safeParseNumber(value, (v: string) => Math.trunc(Number(v)));
|
||||||
}
|
}
|
||||||
|
|
||||||
export function joinMapLists<A, B>(
|
export function joinMapLists<A, B>(
|
||||||
|
Loading…
Reference in New Issue
Block a user