aboutsummaryrefslogtreecommitdiff
path: root/src/tools/integer-base-converter/integer-base-converter.vue
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/integer-base-converter/integer-base-converter.vue')
-rw-r--r--src/tools/integer-base-converter/integer-base-converter.vue49
1 files changed, 39 insertions, 10 deletions
diff --git a/src/tools/integer-base-converter/integer-base-converter.vue b/src/tools/integer-base-converter/integer-base-converter.vue
index 04c4321..33b1dee 100644
--- a/src/tools/integer-base-converter/integer-base-converter.vue
+++ b/src/tools/integer-base-converter/integer-base-converter.vue
@@ -4,7 +4,7 @@
<div v-if="styleStore.isSmallScreen">
<n-input-group>
<n-input-group-label style="flex: 0 0 120px"> Input number: </n-input-group-label>
- <n-input-number v-model:value="inputNumber" min="0" style="width: 100%" />
+ <n-input v-model:value="input" style="width: 100%" :status="error ? 'error' : undefined" />
</n-input-group>
<n-input-group>
<n-input-group-label style="flex: 0 0 120px"> Input base: </n-input-group-label>
@@ -14,51 +14,65 @@
<n-input-group v-else>
<n-input-group-label style="flex: 0 0 120px"> Input number: </n-input-group-label>
- <n-input-number v-model:value="inputNumber" min="0" />
+ <n-input v-model:value="input" :status="error ? 'error' : undefined" />
<n-input-group-label style="flex: 0 0 120px"> Input base: </n-input-group-label>
<n-input-number v-model:value="inputBase" max="64" min="2" />
</n-input-group>
+
+ <n-alert v-if="error" style="margin-top: 25px" type="error">{{ error }}</n-alert>
<n-divider />
<n-input-group>
<n-input-group-label style="flex: 0 0 170px"> Binary (2): </n-input-group-label>
- <input-copyable :value="convertBase({ value: String(inputNumber), fromBase: inputBase, toBase: 2 })" readonly />
+ <input-copyable
+ :value="errorlessConvert({ value: input, fromBase: inputBase, toBase: 2 })"
+ readonly
+ placeholder="Binary version will be here..."
+ />
</n-input-group>
<n-input-group>
<n-input-group-label style="flex: 0 0 170px"> Octal (8): </n-input-group-label>
- <input-copyable :value="convertBase({ value: String(inputNumber), fromBase: inputBase, toBase: 8 })" readonly />
+ <input-copyable
+ :value="errorlessConvert({ value: input, fromBase: inputBase, toBase: 8 })"
+ readonly
+ placeholder="Octal version will be here..."
+ />
</n-input-group>
<n-input-group>
<n-input-group-label style="flex: 0 0 170px"> Decimal (10): </n-input-group-label>
<input-copyable
- :value="convertBase({ value: String(inputNumber), fromBase: inputBase, toBase: 10 })"
+ :value="errorlessConvert({ value: input, fromBase: inputBase, toBase: 10 })"
readonly
+ placeholder="Decimal version will be here..."
/>
</n-input-group>
<n-input-group>
<n-input-group-label style="flex: 0 0 170px"> Hexadecimal (16): </n-input-group-label>
<input-copyable
- :value="convertBase({ value: String(inputNumber), fromBase: inputBase, toBase: 16 })"
+ :value="errorlessConvert({ value: input, fromBase: inputBase, toBase: 16 })"
readonly
+ placeholder="Decimal version will be here..."
/>
</n-input-group>
<n-input-group>
<n-input-group-label style="flex: 0 0 170px"> Base64 (64): </n-input-group-label>
<input-copyable
- :value="convertBase({ value: String(inputNumber), fromBase: inputBase, toBase: 64 })"
+ :value="errorlessConvert({ value: input, fromBase: inputBase, toBase: 64 })"
readonly
+ placeholder="Base64 version will be here..."
/>
</n-input-group>
<n-input-group>
<n-input-group-label style="flex: 0 0 85px"> Custom: </n-input-group-label>
<n-input-number v-model:value="outputBase" style="flex: 0 0 86px" max="64" min="2" />
<input-copyable
- :value="convertBase({ value: String(inputNumber), fromBase: inputBase, toBase: outputBase })"
+ :value="errorlessConvert({ value: input, fromBase: inputBase, toBase: outputBase })"
readonly
+ :placeholder="`Base ${outputBase} will be here...`"
/>
</n-input-group>
</n-card>
@@ -66,16 +80,31 @@
</template>
<script setup lang="ts">
-import { ref } from 'vue';
+import { computed, ref } from 'vue';
import { useStyleStore } from '@/stores/style.store';
+import { getErrorMessageIfThrows } from '@/utils/error';
import { convertBase } from './integer-base-converter.model';
import InputCopyable from '../../components/InputCopyable.vue';
const styleStore = useStyleStore();
-const inputNumber = ref(42);
+const input = ref('42');
const inputBase = ref(10);
const outputBase = ref(42);
+
+function errorlessConvert(...args: Parameters<typeof convertBase>) {
+ try {
+ return convertBase(...args);
+ } catch (err) {
+ return '';
+ }
+}
+
+const error = computed(() =>
+ getErrorMessageIfThrows(() =>
+ convertBase({ value: input.value, fromBase: inputBase.value, toBase: outputBase.value }),
+ ),
+);
</script>
<style lang="less" scoped>