Skip to content

Commit 746fe85

Browse files
committed
fix: allow all units for bitrate
ie, in case of download speed in MB/s
1 parent ea71d16 commit 746fe85

File tree

3 files changed

+46
-36
lines changed

3 files changed

+46
-36
lines changed

src/tools/data-transfer-rate-converter/data-transfer-rate-converter.service.test.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { describe, expect, it } from 'vitest';
2-
import { amountTransferable, neededRate, transferTimeSeconds } from './data-transfer-rate-converter.service';
2+
import { amountTransferable, transferSpeedRate, transferTimeSeconds } from './data-transfer-rate-converter.service';
33

44
describe('data-transfer-converter', () => {
55
describe('transferTimeSeconds', () => {
@@ -12,16 +12,24 @@ describe('data-transfer-converter', () => {
1212
})).toBe(80);
1313
});
1414
});
15-
describe('neededRate', () => {
16-
it('compute neededRate', () => {
17-
expect(neededRate({
15+
describe('transferSpeedRate', () => {
16+
it('compute transferSpeedRate', () => {
17+
expect(transferSpeedRate({
1818
dataSize: 100,
1919
dataSizeUnit: 'MB',
2020
hours: 0,
2121
minutes: 1,
2222
seconds: 20,
2323
bitRateUnit: 'Mb',
2424
})).toBe(10);
25+
expect(transferSpeedRate({
26+
dataSize: 100,
27+
dataSizeUnit: 'MB',
28+
hours: 0,
29+
minutes: 1,
30+
seconds: 20,
31+
bitRateUnit: 'MB',
32+
})).toBe(1.25);
2533
});
2634
});
2735
describe('amountTransferable', () => {

src/tools/data-transfer-rate-converter/data-transfer-rate-converter.service.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { type AllSupportedUnits, type BitsUnits, convertStorageAndRateUnits } from '../data-storage-unit-converter/data-storage-unit-converter.service';
1+
import { type AllSupportedUnits, convertStorageAndRateUnits } from '../data-storage-unit-converter/data-storage-unit-converter.service';
22

33
export function transferTimeSeconds({
44
dataSize,
@@ -9,14 +9,14 @@ export function transferTimeSeconds({
99
dataSize: number
1010
dataSizeUnit: AllSupportedUnits
1111
bitRate: number
12-
bitRateUnit: BitsUnits
12+
bitRateUnit: AllSupportedUnits
1313
}): number {
1414
const dataSizeInBytes = convertStorageAndRateUnits({ value: dataSize, fromUnit: dataSizeUnit, toUnit: 'B' });
1515
const bitRateInBytes = convertStorageAndRateUnits({ value: bitRate, fromUnit: bitRateUnit, toUnit: 'B' });
1616
return bitRateInBytes > 0 ? dataSizeInBytes / bitRateInBytes : 0;
1717
}
1818

19-
export function neededRate({
19+
export function transferSpeedRate({
2020
dataSize,
2121
dataSizeUnit,
2222
hours,
@@ -29,7 +29,7 @@ export function neededRate({
2929
hours: number
3030
minutes: number
3131
seconds: number
32-
bitRateUnit: BitsUnits
32+
bitRateUnit: AllSupportedUnits
3333
}): number {
3434
const dataSizeInBits = convertStorageAndRateUnits({ value: dataSize, fromUnit: dataSizeUnit, toUnit: 'b' });
3535
const timeInSeconds = hours * 3600 + minutes * 60 + seconds;
@@ -45,7 +45,7 @@ export function amountTransferable({
4545
dataSizeUnit,
4646
}: {
4747
bitRate: number
48-
bitRateUnit: BitsUnits
48+
bitRateUnit: AllSupportedUnits
4949
hours: number
5050
minutes: number
5151
seconds: number

src/tools/data-transfer-rate-converter/data-transfer-rate-converter.vue

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<script setup lang="ts">
22
import { formatDuration, intervalToDuration } from 'date-fns';
3-
import { type AllSupportedUnits, type BitsUnits, displayStorageAndRateUnits } from '../data-storage-unit-converter/data-storage-unit-converter.service';
4-
import { amountTransferable, neededRate, transferTimeSeconds } from './data-transfer-rate-converter.service';
3+
import { type AllSupportedUnits, displayStorageAndRateUnits } from '../data-storage-unit-converter/data-storage-unit-converter.service';
4+
import { amountTransferable, transferSpeedRate, transferTimeSeconds } from './data-transfer-rate-converter.service';
55
66
const allStorateUnits = [
77
{ value: 'B', label: 'Bytes (B)' },
@@ -35,6 +35,8 @@ const allBitsUnits = [
3535
{ value: 'Yb', label: 'Yottabits (Ybit)' },
3636
];
3737
38+
const allRateUnits = [...allBitsUnits, ...allStorateUnits];
39+
3840
function convertToTimeDisplay(seconds: number) {
3941
if (seconds === 0) {
4042
return '0';
@@ -59,15 +61,15 @@ const transferTimeOutput = computed(() => {
5961
dataSize: Number(transferTimeInput.value.dataSize),
6062
dataSizeUnit: transferTimeInput.value.dataSizeUnit as AllSupportedUnits,
6163
bitRate: Number(transferTimeInput.value.bitRate),
62-
bitRateUnit: transferTimeInput.value.bitRateUnit as BitsUnits,
64+
bitRateUnit: transferTimeInput.value.bitRateUnit as AllSupportedUnits,
6365
}));
6466
}
6567
catch (e: any) {
6668
return e.toString();
6769
}
6870
});
6971
70-
const neededRateInput = ref<{
72+
const transferSpeedRateInput = ref<{
7173
dataSize: string
7274
dataSizeUnit: string
7375
hours: number
@@ -82,18 +84,18 @@ const neededRateInput = ref<{
8284
seconds: 0,
8385
bitRateUnit: 'Mb',
8486
});
85-
const neededRateOutput = computed(() => {
87+
const transferSpeedRateOutput = computed(() => {
8688
try {
8789
return displayStorageAndRateUnits({
88-
unit: neededRateInput.value.bitRateUnit as BitsUnits,
90+
unit: transferSpeedRateInput.value.bitRateUnit as AllSupportedUnits,
8991
appendUnit: true,
90-
value: neededRate({
91-
dataSize: Number(neededRateInput.value.dataSize),
92-
dataSizeUnit: neededRateInput.value.dataSizeUnit as AllSupportedUnits,
93-
hours: neededRateInput.value.hours,
94-
minutes: neededRateInput.value.minutes,
95-
seconds: neededRateInput.value.seconds,
96-
bitRateUnit: neededRateInput.value.bitRateUnit as BitsUnits,
92+
value: transferSpeedRate({
93+
dataSize: Number(transferSpeedRateInput.value.dataSize),
94+
dataSizeUnit: transferSpeedRateInput.value.dataSizeUnit as AllSupportedUnits,
95+
hours: transferSpeedRateInput.value.hours,
96+
minutes: transferSpeedRateInput.value.minutes,
97+
seconds: transferSpeedRateInput.value.seconds,
98+
bitRateUnit: transferSpeedRateInput.value.bitRateUnit as AllSupportedUnits,
9799
}),
98100
});
99101
}
@@ -124,7 +126,7 @@ const amountTransferableOutput = computed(() => {
124126
appendUnit: true,
125127
value: amountTransferable({
126128
bitRate: Number(amountTransferableInput.value.bitRate),
127-
bitRateUnit: amountTransferableInput.value.bitRateUnit as BitsUnits,
129+
bitRateUnit: amountTransferableInput.value.bitRateUnit as AllSupportedUnits,
128130
hours: amountTransferableInput.value.hours,
129131
minutes: amountTransferableInput.value.minutes,
130132
seconds: amountTransferableInput.value.seconds,
@@ -157,7 +159,7 @@ const amountTransferableOutput = computed(() => {
157159
<c-select
158160
v-model:value="transferTimeInput.bitRateUnit"
159161
searchable
160-
:options="allBitsUnits"
162+
:options="allRateUnits"
161163
placeholder="Select a bit rate unit"
162164
ml-1
163165
/>
@@ -171,35 +173,35 @@ const amountTransferableOutput = computed(() => {
171173
placeholder="Transfer time will be here..."
172174
/>
173175
</c-card>
174-
<c-card title="Needed Bit Rate" mb-2>
176+
<c-card title="Transfer Bit Rate/Speed" mb-2>
175177
<n-form-item label="Data Size:" label-placement="left">
176-
<n-input v-model:value="neededRateInput.dataSize" placeholder="Data Size..." :min="0" w-full />
178+
<n-input v-model:value="transferSpeedRateInput.dataSize" placeholder="Data Size..." :min="0" w-full />
177179
<c-select
178-
v-model:value="neededRateInput.dataSizeUnit"
180+
v-model:value="transferSpeedRateInput.dataSizeUnit"
179181
:options="allStorateUnits"
180182
placeholder="Select a storage unit"
181183
ml-1
182184
/>
183185
</n-form-item>
184186

185187
<n-form-item label="Duration (h/m/s):" label-placement="left">
186-
<n-input-number v-model:value="neededRateInput.hours" mr-1 placeholder="Hours" :min="0" w-full />
187-
<n-input-number v-model:value="neededRateInput.minutes" mr-1 placeholder="Minutes" :min="0" w-full />
188-
<n-input-number v-model:value="neededRateInput.seconds" mr-1 placeholder="Seconds" :min="0" w-full />
188+
<n-input-number v-model:value="transferSpeedRateInput.hours" mr-1 placeholder="Hours" :min="0" w-full />
189+
<n-input-number v-model:value="transferSpeedRateInput.minutes" mr-1 placeholder="Minutes" :min="0" w-full />
190+
<n-input-number v-model:value="transferSpeedRateInput.seconds" mr-1 placeholder="Seconds" :min="0" w-full />
189191
</n-form-item>
190192

191193
<n-divider />
192194

193195
<div flex items-baseline gap-2>
194196
<InputCopyable
195-
label="Needed Bit Rate:"
197+
label="Transfer Bit Rate/Speed:"
196198
label-position="left"
197-
:value="neededRateOutput"
198-
placeholder="Needed Bit Rate will be here..."
199+
:value="transferSpeedRateOutput"
200+
placeholder="Bit Rate will be here..."
199201
/>
200202
<c-select
201-
v-model:value="transferTimeInput.bitRateUnit"
202-
:options="allBitsUnits"
203+
v-model:value="transferSpeedRateInput.bitRateUnit"
204+
:options="allRateUnits"
203205
placeholder="Select a bit rate unit"
204206
ml-1
205207
/>
@@ -210,7 +212,7 @@ const amountTransferableOutput = computed(() => {
210212
<n-input v-model:value="amountTransferableInput.bitRate" placeholder="Bit Rate..." :min="0" w-full />
211213
<c-select
212214
v-model:value="amountTransferableInput.bitRateUnit"
213-
:options="allBitsUnits"
215+
:options="allRateUnits"
214216
placeholder="Select a bit rate unit"
215217
ml-1
216218
/>

0 commit comments

Comments
 (0)