From 210d1e8437f865b59c0046e724a582814b0ff057 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20H=C3=A4usler?= Date: Wed, 8 Nov 2023 18:25:16 +0100 Subject: [PATCH] Refactoring the code and Fixing Bug Risks (#10) * Delete locales/de.json * Translated de.json * ci: add .deepsource.toml * refactor: replace template strings with regular string literals Template literals are useful when you need: 1. [Interpolated strings](https://en.wikipedia.org/wiki/String_interpolation). * refactor: replace short hand type conversions with function calls Prefer using explicit casts by calling `Number`, `Boolean`, or `String` over using operators like `+`, `!!` or `"" +`. This is considered best practice as it improves readability. * refactor: remove unnecessary boolean casts In contexts such as an `if` statement's test where the result of the expression will already be coerced to a `Boolean`, casting to a `Boolean` via double negation (`!!`) or a `Boolean` call is unnecessary. * refactor: fix explicit type declarations Explicit types where they can be easily inferred may add unnecessary verbosity for variables or parameters initialized to a number, string, or boolean * refactor: convert logical operator to optional chainining The [optional chaining](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining) operator can be used to perform null checks before accessing a property, or calling a function. * removed translations for de.json * Delete .deepsource.toml --------- Co-authored-by: deepsource-io[bot] <42547082+deepsource-io[bot]@users.noreply.github.com> Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> Co-authored-by: Felix <41747605+Defelo@users.noreply.github.com> Co-authored-by: Defelo --- app.vue | 2 +- components/Btn.vue | 2 +- components/Chip.vue | 2 +- components/Reported-Tasks/Table.vue | 2 +- components/ScrollToBtn.vue | 2 +- components/SectionTitle.vue | 6 ++--- components/Table.vue | 2 +- components/appUsers/Account.vue | 2 +- components/appUsers/Progress.vue | 2 +- components/appUsers/Table.vue | 2 +- components/companies/Table.vue | 2 +- components/form/Coins.vue | 4 ++-- components/form/Company.vue | 8 +++---- components/form/Job.vue | 16 ++++++------- components/form/Login.vue | 12 +++++----- components/form/Skill.vue | 12 +++++----- components/form/XP.vue | 2 +- components/input/Btn.vue | 2 +- components/input/Checkbox.vue | 2 +- components/input/CheckboxGroup.vue | 2 +- components/input/List.vue | 6 ++--- components/input/Media.vue | 12 +++++----- components/input/OTP.vue | 16 ++++++------- components/input/Radio.vue | 2 +- components/input/Select.vue | 4 ++-- components/input/SkillReq.vue | 6 ++--- components/input/Tags.vue | 4 ++-- components/input/Textarea.vue | 12 +++++----- components/input/index.vue | 12 +++++----- components/jobs/Header.vue | 2 +- components/jobs/Table.vue | 4 ++-- components/navbar/Back.vue | 2 +- components/navbar/Drawer.vue | 2 +- components/skeleton/Media.vue | 2 +- components/skeleton/Text.vue | 2 +- components/skill-tree/Pathways.vue | 2 +- components/skill-tree/SubTable.vue | 4 ++-- components/skill-tree/Table.vue | 6 ++--- composables/appUsers.ts | 24 +++++++++---------- composables/auth.ts | 10 ++++---- composables/companies.ts | 6 ++--- composables/fetch.js | 4 ++-- composables/helpers.ts | 12 +++++----- composables/jobs.ts | 6 ++--- composables/reportedSubtasks.ts | 2 +- composables/response.ts | 2 +- composables/skill-tree.ts | 24 +++++++++---------- composables/user.ts | 10 ++++---- pages/dashboard/companies/index.vue | 2 +- pages/dashboard/jobs/index.vue | 2 +- .../skill-tree/[rootSkill]/manage.vue | 6 ++--- .../skill-tree/[rootSkill]/sub-skills.vue | 2 +- pages/dashboard/skill-tree/index.vue | 2 +- 53 files changed, 150 insertions(+), 150 deletions(-) diff --git a/app.vue b/app.vue index b37528e..5f97033 100644 --- a/app.vue +++ b/app.vue @@ -17,7 +17,7 @@ export default { const dialog = useDialog(); function handleDialogOnBackdrop() { - return dialog.value && dialog.value.triggerPrimaryActionOnBackdropClick; + return dialog.value?.triggerPrimaryActionOnBackdropClick; } const user = useUser(); diff --git a/components/Btn.vue b/components/Btn.vue index 491f491..9b3cb46 100644 --- a/components/Btn.vue +++ b/components/Btn.vue @@ -47,7 +47,7 @@ export default defineComponent({ ? `secondary bg-transparent text-heading hover:bg-transparent border ${props.borderColor} hover:ring-4 md:hover:ring-8 hover:ring-tertiary` : '', props.tertiary - ? `tertiary bg-transparent text-heading hover:bg-transparent hover:scale-105 border border-transparent hover:ring-4 md:hover:ring-8 hover:ring-transparent` + ? "tertiary bg-transparent text-heading hover:bg-transparent hover:scale-105 border border-transparent hover:ring-4 md:hover:ring-8 hover:ring-transparent" : '', ]; }); diff --git a/components/Chip.vue b/components/Chip.vue index 8173138..273ef61 100644 --- a/components/Chip.vue +++ b/components/Chip.vue @@ -45,7 +45,7 @@ export default defineComponent({ 'chip-color-12', ]; - return !!props.color + return (props.color) ? props.color : colors[getRandomNumber(0, colors.length - 1)]; }); diff --git a/components/Reported-Tasks/Table.vue b/components/Reported-Tasks/Table.vue index 47a802b..0886e06 100644 --- a/components/Reported-Tasks/Table.vue +++ b/components/Reported-Tasks/Table.vue @@ -105,7 +105,7 @@ export default { const router = useRouter(); function onclickEditItem(item: any) { - if (!!!item || !!!item.id) return; + if (Boolean(!item) || Boolean(!item.id)) return; const reportReason = useReportReason(); reportReason.value = item?.comment ?? ""; const reportSubtaskType = useReportSubtaskType(); diff --git a/components/ScrollToBtn.vue b/components/ScrollToBtn.vue index 1e50b62..59ab7d4 100644 --- a/components/ScrollToBtn.vue +++ b/components/ScrollToBtn.vue @@ -17,7 +17,7 @@ export default defineComponent({ }, setup(props) { function onclickScrollUp() { - if (!!!props.scrollRef) return; + if (!props.scrollRef) return; props.scrollRef.scrollIntoView({ block: "start", behavior: "smooth", diff --git a/components/SectionTitle.vue b/components/SectionTitle.vue index 8212067..2575b6d 100644 --- a/components/SectionTitle.vue +++ b/components/SectionTitle.vue @@ -44,9 +44,9 @@ export default defineComponent({ size: { type: String, default: 'md' }, center: { type: Boolean, default: false }, full: { type: Boolean, default: false }, - heading: { type: String, default: `` }, - subheading: { type: String, default: `` }, - body: { type: String, default: `` }, + heading: { type: String, default: "" }, + subheading: { type: String, default: "" }, + body: { type: String, default: "" }, sub: { type: Boolean, default: false }, noLink: { type: Boolean, default: false }, link: { default: { to: '', text: '' } }, diff --git a/components/Table.vue b/components/Table.vue index 2de883d..e1fb664 100644 --- a/components/Table.vue +++ b/components/Table.vue @@ -70,7 +70,7 @@ export default defineComponent({ function handleWindowResize() { windowWidth.value = window?.innerWidth ?? 0; if ( - !!windowWidth.value && + Boolean(windowWidth.value) && windowWidth.value > 0 && windowWidth.value <= 767 ) { diff --git a/components/appUsers/Account.vue b/components/appUsers/Account.vue index 8f4df28..44dbc97 100644 --- a/components/appUsers/Account.vue +++ b/components/appUsers/Account.vue @@ -145,7 +145,7 @@ export default defineComponent({ watch( () => id.value, async (newValue, oldValue) => { - if (!!newValue) { + if (newValue) { const [balance, errorBalance] = await getBalanceOfThisUser(newValue); totalCoins.value = balance?.coins ?? 0; } diff --git a/components/appUsers/Progress.vue b/components/appUsers/Progress.vue index 373a24b..d08ac93 100644 --- a/components/appUsers/Progress.vue +++ b/components/appUsers/Progress.vue @@ -74,7 +74,7 @@ export default defineComponent({ watch( () => id.value, async (newValue, oldValue) => { - if (!!newValue) { + if (newValue) { loading.value = true; const [success, error] = await getXPOfThisUser(newValue); loading.value = false; diff --git a/components/appUsers/Table.vue b/components/appUsers/Table.vue index 31c3b8c..ab5156e 100644 --- a/components/appUsers/Table.vue +++ b/components/appUsers/Table.vue @@ -275,7 +275,7 @@ export default { const router = useRouter(); const appUser = useAppUser(); function onclickViewUser(user: any) { - if (!!!user || !!!user.id) return; + if (Boolean(!user) || Boolean(!user.id)) return; appUser.value = user; router.push(`/dashboard/users/${user.id}`); diff --git a/components/companies/Table.vue b/components/companies/Table.vue index e7db59d..349f6a2 100644 --- a/components/companies/Table.vue +++ b/components/companies/Table.vue @@ -172,7 +172,7 @@ export default { const company = useCompany(); function onclickEditItem(item: any) { - if (!!!item || !!!item.id) return; + if (Boolean(!item) || Boolean(!item.id)) return; company.value = item; router.push(`/dashboard/companies/${item.id}`); diff --git a/components/form/Coins.vue b/components/form/Coins.vue index 9da33b2..03bf0c5 100644 --- a/components/form/Coins.vue +++ b/components/form/Coins.vue @@ -66,14 +66,14 @@ export default defineComponent({ valid: false, value: 0, rules: [ - (v: number) => !!v || 'Coins cannot be empty', + (v: number) => Boolean(v) || 'Coins cannot be empty', (v: number) => v >= 0 || 'Coins cannot be less than 0', ], }, description: { valid: false, value: '', - rules: [(v: number) => !!v || 'Description cannot be empty'], + rules: [(v: number) => Boolean(v) || 'Description cannot be empty'], }, credit_note: { valid: true, diff --git a/components/form/Company.vue b/components/form/Company.vue index 5e95a34..74fa5e0 100644 --- a/components/form/Company.vue +++ b/components/form/Company.vue @@ -99,7 +99,7 @@ export default defineComponent({ valid: false, value: '', rules: [ - (v: string) => !!v || 'Error.InputEmpty_Inputs.CompanyName', + (v: string) => Boolean(v) || 'Error.InputEmpty_Inputs.CompanyName', (v: string) => !v || v.length >= 3 || 'Error.InputMinLength_3', (v: string) => v.length <= 255 || 'Error.InputMaxLength_255', ], @@ -181,7 +181,7 @@ export default defineComponent({ watch( () => props.data, (newValue, oldValue) => { - if (!!!newValue) return; + if (!newValue) return; form.name.value = newValue?.name ?? ''; form.description.value = newValue?.description ?? ''; form.website.value = newValue?.website ?? ''; @@ -196,7 +196,7 @@ export default defineComponent({ async function onclickSubmitForm() { if (form.validate()) { form.submitting = true; - const [success, error] = !!props.data + const [success, error] = (props.data) ? await editCompany(props.data.id, form.body()) : await createCompany(form.body()); form.submitting = false; @@ -209,7 +209,7 @@ export default defineComponent({ const router = useRouter(); function successHandler(res: any) { - router.push(`/dashboard/companies`); + router.push("/dashboard/companies"); } function errorHandler(res: any) { diff --git a/components/form/Job.vue b/components/form/Job.vue index 4429f07..6e4b1d6 100644 --- a/components/form/Job.vue +++ b/components/form/Job.vue @@ -170,7 +170,7 @@ export default defineComponent({ unit: 'MC', per: 'task', }, - rules: [(v: any) => !!v || 'Error.InputEmpty_Inputs.ThisField'], + rules: [(v: any) => Boolean(v) || 'Error.InputEmpty_Inputs.ThisField'], }, company_id: { valid: true, @@ -181,7 +181,7 @@ export default defineComponent({ valid: false, value: '', rules: [ - (v: string) => !!v || 'Error.InputEmpty_Inputs.JobTitle', + (v: string) => Boolean(v) || 'Error.InputEmpty_Inputs.JobTitle', (v: string) => !v || v.length >= 5 || 'Error.InputMinLength_5', (v: string) => v.length <= 255 || 'Error.InputMaxLength_255', ], @@ -190,7 +190,7 @@ export default defineComponent({ valid: false, value: '', rules: [ - (v: string) => !!v || 'Error.InputEmpty_Inputs.Contact', + (v: string) => Boolean(v) || 'Error.InputEmpty_Inputs.Contact', (v: string) => !v || v.length >= 5 || 'Error.InputMinLength_5', (v: string) => v.length <= 255 || 'Error.InputMaxLength_255', ], @@ -199,7 +199,7 @@ export default defineComponent({ valid: false, value: '', rules: [ - (v: string) => !!v || 'Error.InputEmpty_Inputs.JobLocation', + (v: string) => Boolean(v) || 'Error.InputEmpty_Inputs.JobLocation', (v: string) => v.length <= 255 || 'Error.InputMaxLength_255', ], }, @@ -259,7 +259,7 @@ export default defineComponent({ valid: false, value: '', rules: [ - (v: string) => !!v || 'Error.InputEmpty_Inputs.Description', + (v: string) => Boolean(v) || 'Error.InputEmpty_Inputs.Description', (v: string) => v.length <= 2000 || 'Error.InputMaxLength_2000', ], }, @@ -277,7 +277,7 @@ export default defineComponent({ value: {}, rules: [ (v: any) => - !!form.skill_requirements.value || + Boolean(form.skill_requirements.value) || 'Error.InputEmpty_Inputs.SkillRequirements', ], }, @@ -313,7 +313,7 @@ export default defineComponent({ watch( () => props.data, (newValue, oldValue) => { - if (!!!newValue) return; + if (!newValue) return; form.company_id.value = newValue?.company?.id ?? ''; form.title.value = newValue?.title ?? ''; form.contact.value = newValue?.contact ?? ''; @@ -341,7 +341,7 @@ export default defineComponent({ async function onclickSubmitForm() { if (form.validate()) { form.submitting = true; - const [success, error] = !!props.data + const [success, error] = (props.data) ? await editJob(props.data.id, form.body()) : await createJob(form.body()); form.submitting = false; diff --git a/components/form/Login.vue b/components/form/Login.vue index 00c2e7f..33513d0 100644 --- a/components/form/Login.vue +++ b/components/form/Login.vue @@ -60,19 +60,19 @@ export default defineComponent({ valid: false, value: '', rules: [ - (v: string) => !!v || 'Error.InputEmpty_Inputs.EmailOrUsername', + (v: string) => Boolean(v) || 'Error.InputEmpty_Inputs.EmailOrUsername', ], }, password: { valid: false, value: '', - rules: [(v: string) => !!v || 'Error.InputEmpty_Inputs.Password'], + rules: [(v: string) => Boolean(v) || 'Error.InputEmpty_Inputs.Password'], }, mfa_code: { valid: true, value: '', rules: [ - (v: string) => !!v || 'Error.InputEmpty_Inputs.MFACode', + (v: string) => Boolean(v) || 'Error.InputEmpty_Inputs.MFACode', (v: string) => v.length >= 6 || 'Error.InputMinLength_6', ], }, @@ -134,7 +134,7 @@ export default defineComponent({ form.submitting = false; // checking is logged in user is admin or not - if (!!success && user.value.admin == false) { + if (Boolean(success) && user.value.admin == false) { errorHandler({ detail: 'Error.NotAuthorized' }); setStates(null); return; @@ -147,7 +147,7 @@ export default defineComponent({ } function successHandler(res: any) { - router.push(`/dashboard`); + router.push("/dashboard"); } const needMFA = ref(false); @@ -157,7 +157,7 @@ export default defineComponent({ let isMFA = msg == 'Error.InvalidCode'; - if (!!isMFA && !!needMFA.value) { + if (Boolean(isMFA) && Boolean(needMFA.value)) { openSnackbar('error', msg); } diff --git a/components/form/Skill.vue b/components/form/Skill.vue index 923a760..9e3b0ba 100644 --- a/components/form/Skill.vue +++ b/components/form/Skill.vue @@ -84,12 +84,12 @@ export default defineComponent({ id: { valid: false, value: '', - rules: [(v: string) => !!v || 'Error.InputEmpty_Inputs.SkillID'], + rules: [(v: string) => Boolean(v) || 'Error.InputEmpty_Inputs.SkillID'], }, name: { valid: false, value: '', - rules: [(v: string) => !!v || 'Error.InputEmpty_Inputs.SkillName'], + rules: [(v: string) => Boolean(v) || 'Error.InputEmpty_Inputs.SkillName'], }, icon: { valid: true, @@ -139,10 +139,10 @@ export default defineComponent({ () => props.data, (newValue, oldValue) => { form.id.value = newValue?.id ?? ''; - form.id.valid = !!form.id.value; + form.id.valid = Boolean(form.id.value); form.name.value = newValue?.name ?? ''; - form.name.valid = !!form.name.value; + form.name.valid = Boolean(form.name.value); form.icon.value = newValue?.icon ?? ''; form.dependencies.value = newValue?.dependencies ?? []; @@ -155,7 +155,7 @@ export default defineComponent({ async function onclickSubmitForm() { if (form.validate()) { form.submitting = true; - const [success, error] = !!props.data + const [success, error] = (props.data) ? await updateSkill(props.rootSkillID, props.subSkillID, { ...form.body(), column: props.col, @@ -178,7 +178,7 @@ export default defineComponent({ function onclickDeleteSkill() { openDialog( 'warning', - `Delete Skill`, + "Delete Skill", `Are you sure you want to delete ${ props.data?.name ?? 'this skill' }. This action cannot be undone.`, diff --git a/components/form/XP.vue b/components/form/XP.vue index b944860..89d8713 100644 --- a/components/form/XP.vue +++ b/components/form/XP.vue @@ -40,7 +40,7 @@ export default defineComponent({ valid: false, value: props.subSkillXP, rules: [ - (v: number) => !!v || 'XP cannot be empty', + (v: number) => Boolean(v) || 'XP cannot be empty', (v: number) => v >= 0 || 'XP cannot be less than 0', ], }, diff --git a/components/input/Btn.vue b/components/input/Btn.vue index 1e4bfb6..8101484 100644 --- a/components/input/Btn.vue +++ b/components/input/Btn.vue @@ -76,7 +76,7 @@ export default defineComponent({ ? `bg-transparent text-heading font-medium hover:bg-transparent border ${props.borderColor} hover:ring-8 hover:ring-tertiary` : "", props.tertiary - ? `bg-transparent text-heading font-medium hover:bg-transparent hover:scale-105 border border-transparent hover:ring-8 hover:ring-transparent` + ? "bg-transparent text-heading font-medium hover:bg-transparent hover:scale-105 border border-transparent hover:ring-8 hover:ring-transparent" : "", ]; }); diff --git a/components/input/Checkbox.vue b/components/input/Checkbox.vue index b91e84d..b1f6947 100644 --- a/components/input/Checkbox.vue +++ b/components/input/Checkbox.vue @@ -75,7 +75,7 @@ export default defineComponent({ set(value) { emit('update:modelValue', value); error.value = value ? '' : 'This is required'; - emit('valid', !!!error.value); + emit('valid', Boolean(!error.value)); }, }); diff --git a/components/input/CheckboxGroup.vue b/components/input/CheckboxGroup.vue index af49705..4e92f4f 100644 --- a/components/input/CheckboxGroup.vue +++ b/components/input/CheckboxGroup.vue @@ -58,7 +58,7 @@ export default defineComponent({ let currentOption = props.modelValue.find( (value) => option.value == value ); - return { ...option, selected: falseOnly ? false : !!currentOption }; + return { ...option, selected: falseOnly ? false : Boolean(currentOption) }; }); Object.assign(mappedOptions, [...arr]); } diff --git a/components/input/List.vue b/components/input/List.vue index cd3d65b..b0e0bcb 100644 --- a/components/input/List.vue +++ b/components/input/List.vue @@ -50,7 +50,7 @@ export default defineComponent({ value: '', rules: [ (v: string) => { - if (!v && !!addToList.value) { + if (!v && Boolean(addToList.value)) { return 'Cannot add empty string to list'; } else return true; }, @@ -63,14 +63,14 @@ export default defineComponent({ function onclickAddToList() { addToList.value = true; - if (!!!input.value) return; + if (!input.value) return; let isSame = props.modelValue.find( (item: string) => item.toLocaleLowerCase() == input.value.toLocaleLowerCase() ); - if (!!!isSame) { + if (!isSame) { emit('update:modelValue', [...props.modelValue, input.value]); } diff --git a/components/input/Media.vue b/components/input/Media.vue index a7586db..0e7f687 100644 --- a/components/input/Media.vue +++ b/components/input/Media.vue @@ -91,9 +91,9 @@ export default defineComponent({ let file = event?.target?.files[0] ?? null; validate(file); - emit('file', !!!error.value ? file : null); + emit('file', (!error.value) ? file : null); - if (!!!file) return; + if (!file) return; url.value = URL.createObjectURL(file); } @@ -114,18 +114,18 @@ export default defineComponent({ let label = props.video ? 'video' : 'image'; if (DOM_INPUT) { - if (!!!file && !!!url.value) { + if (Boolean(!file) && Boolean(!url.value)) { error.value = `${label} cannot be empty`; - } else if (!!file && file.size && file.size / 8000000 > props.maxSize) { + } else if (Boolean(file) && file.size && file.size / 8000000 > props.maxSize) { error.value = `${label} must be less than 5 mb`; } else { - error.value = ``; + error.value = ""; } if (!DOM_INPUT.value) return; DOM_INPUT.value.setCustomValidity(error.value); - emit('valid', !!!error.value); + emit('valid', Boolean(!error.value)); } } diff --git a/components/input/OTP.vue b/components/input/OTP.vue index 3cbcc30..30d638d 100644 --- a/components/input/OTP.vue +++ b/components/input/OTP.vue @@ -58,7 +58,7 @@ export default defineComponent({ }); // ============================================================= refs - const touched = ref(!!props.modelValue); + const touched = ref(Boolean(props.modelValue)); const DOM_INPUTS = ref([]); const totalOTPChars = computed(() => { @@ -87,7 +87,7 @@ export default defineComponent({ let finalOTP = ''; for (let i = 0; i < otp.length; i++) { - if (!!otp[i] && !!DOM_INPUTS.value[i]) { + if (Boolean(otp[i]) && Boolean(DOM_INPUTS.value[i])) { DOM_INPUTS.value[i].value = otp[i]; finalOTP = finalOTP + otp[i]; DOM_INPUTS.value[i].focus(); @@ -96,7 +96,7 @@ export default defineComponent({ emit('update:modelValue', finalOTP); - let msg: string = ''; + let msg = ''; props.rules .slice() @@ -105,11 +105,11 @@ export default defineComponent({ if (rule(finalOTP) != true) { const [string, placeholder] = rule(finalOTP).split('_'); - if (!!placeholder) { + if (placeholder) { msg = t(string, { placeholder: t(placeholder), }); - } else if (!!string) { + } else if (string) { msg = t(string); } else { msg = t(rule(finalOTP)); @@ -118,14 +118,14 @@ export default defineComponent({ }); DOM_INPUTS.value[0].setCustomValidity(msg); - emit('valid', !!!msg); + emit('valid', Boolean(!msg)); error.value = msg; } function onkeydownDelete(index: number) { let value = DOM_INPUTS.value[index].value; - if (!!!value && index > 0) { + if (Boolean(!value) && index > 0) { DOM_INPUTS.value[index].focus(); } } @@ -138,7 +138,7 @@ export default defineComponent({ onMounted(() => { nextTick(() => { - if (!!DOM_INPUTS.value[0]) DOM_INPUTS.value[0].focus(); + if (DOM_INPUTS.value[0]) DOM_INPUTS.value[0].focus(); }); }); diff --git a/components/input/Radio.vue b/components/input/Radio.vue index ddca513..fa66f1d 100644 --- a/components/input/Radio.vue +++ b/components/input/Radio.vue @@ -64,7 +64,7 @@ export default defineComponent({ set(value) { emit('update:modelValue', value); error.value = value ? '' : 'This is required'; - emit('valid', !!!error.value); + emit('valid', Boolean(!error.value)); }, }); diff --git a/components/input/Select.vue b/components/input/Select.vue index b548692..df215f7 100644 --- a/components/input/Select.vue +++ b/components/input/Select.vue @@ -71,12 +71,12 @@ export default defineComponent({ return props.modelValue; }, set(value: string) { - if (!!!value) return; + if (!value) return; emit('update:modelValue', value); }, }); - input.value = !!input.value ? input.value : props.options[0]?.value ?? ''; + input.value = (input.value) ? input.value : props.options[0]?.value ?? ''; const selectedOptionLabel = computed(() => { return ( diff --git a/components/input/SkillReq.vue b/components/input/SkillReq.vue index 2ef6609..517b85d 100644 --- a/components/input/SkillReq.vue +++ b/components/input/SkillReq.vue @@ -62,7 +62,7 @@ export default defineComponent({ value: '', rules: [ (v: string) => { - if (!v && !!addToList.value) { + if (!v && Boolean(addToList.value)) { return 'Cannot add empty string to list'; } else return true; }, @@ -81,7 +81,7 @@ export default defineComponent({ function onclickAddToList() { addToList.value = true; - if (!!!skill.value) return; + if (!skill.value) return; const keys = Object.keys(props.modelValue); @@ -90,7 +90,7 @@ export default defineComponent({ key.toLocaleLowerCase() == skill.value.toLocaleLowerCase() ); - if (!!!isSame) { + if (!isSame) { let obj: any = {}; obj[skill.value.toString()] = requirement.value; emit('update:modelValue', { ...props.modelValue, ...obj }); diff --git a/components/input/Tags.vue b/components/input/Tags.vue index e358961..fbd3aaa 100644 --- a/components/input/Tags.vue +++ b/components/input/Tags.vue @@ -57,13 +57,13 @@ export default defineComponent({ const isValid = ref(true); const tags = computed(() => { - if (!isValid.value || !!!input.value.includes(' ')) { + if (!isValid.value || Boolean(!input.value.includes(' '))) { return [...props.modelValue]; } let arr: string[] = input.value.split(' '); - arr = arr.filter((string) => !!string); + arr = arr.filter((string) => Boolean(string)); arr = [...props.modelValue, ...arr]; arr = [...new Set(arr)]; diff --git a/components/input/Textarea.vue b/components/input/Textarea.vue index d09448f..1803c9a 100644 --- a/components/input/Textarea.vue +++ b/components/input/Textarea.vue @@ -85,14 +85,14 @@ export default defineComponent({ }, }); - const touched = ref(!!props.modelValue); + const touched = ref(Boolean(props.modelValue)); const DOM_INPUT = ref(null); const error = computed(() => { - if (!!!DOM_INPUT.value || (!touched.value && !input.value)) return ''; + if (Boolean(!DOM_INPUT.value) || (!touched.value && !input.value)) return ''; - let msg: string = ''; + let msg = ''; props.rules .slice() @@ -101,11 +101,11 @@ export default defineComponent({ if (rule(input.value) != true) { const [string, placeholder] = rule(input.value).split('_'); - if (!!placeholder) { + if (placeholder) { msg = t(string, { placeholder: t(placeholder), }); - } else if (!!string) { + } else if (string) { msg = t(string); } else { msg = t(rule(input.value)); @@ -114,7 +114,7 @@ export default defineComponent({ }); DOM_INPUT.value.setCustomValidity(msg); - emit('valid', !!!msg); + emit('valid', Boolean(!msg)); return msg; }); diff --git a/components/input/index.vue b/components/input/index.vue index b47d5d1..ac3b739 100644 --- a/components/input/index.vue +++ b/components/input/index.vue @@ -90,14 +90,14 @@ export default defineComponent({ }, }); - const touched = ref(!!props.modelValue); + const touched = ref(Boolean(props.modelValue)); const DOM_INPUT = ref(null); const error = computed(() => { - if (!!!DOM_INPUT.value || (!touched.value && !input.value)) return ''; + if (Boolean(!DOM_INPUT.value) || (!touched.value && !input.value)) return ''; - let msg: string = ''; + let msg = ''; props.rules .slice() @@ -106,11 +106,11 @@ export default defineComponent({ if (rule(input.value) != true) { const [string, placeholder] = rule(input.value).split('_'); - if (!!placeholder) { + if (placeholder) { msg = t(string, { placeholder: t(placeholder), }); - } else if (!!string) { + } else if (string) { msg = t(string); } else { msg = t(rule(input.value)); @@ -119,7 +119,7 @@ export default defineComponent({ }); DOM_INPUT.value.setCustomValidity(msg); - emit('valid', !!!msg); + emit('valid', Boolean(!msg)); return msg; }); diff --git a/components/jobs/Header.vue b/components/jobs/Header.vue index 44725f9..78b859a 100644 --- a/components/jobs/Header.vue +++ b/components/jobs/Header.vue @@ -95,7 +95,7 @@ export default defineComponent({ const lastUpdated = computed(() => { let timestamp = props.data?.last_update ?? null; - if (!!!timestamp) return ``; + if (!timestamp) return ""; return `${get_x_timeAgo(timestamp)}`; }); diff --git a/components/jobs/Table.vue b/components/jobs/Table.vue index 4fcbcb2..1784919 100644 --- a/components/jobs/Table.vue +++ b/components/jobs/Table.vue @@ -190,14 +190,14 @@ export default { const job = useJob(); function onclickViewItem(item: any) { - if (!!!item || !!!item.id) return; + if (Boolean(!item) || Boolean(!item.id)) return; job.value = item; router.push(`/dashboard/jobs/${item.id}`); } function onclickEditItem(item: any) { - if (!!!item || !!!item.id) return; + if (Boolean(!item) || Boolean(!item.id)) return; job.value = item; router.push(`/dashboard/jobs/${item.id}/edit`); diff --git a/components/navbar/Back.vue b/components/navbar/Back.vue index 4931cda..d825cba 100644 --- a/components/navbar/Back.vue +++ b/components/navbar/Back.vue @@ -31,7 +31,7 @@ export default defineComponent({ return window.history.length > 2; } function onclickNavigate() { - if (!!!pathname.value) { + if (!pathname.value) { hasHistory() ? router.go(-1) : router.push('/'); } else { router.push(pathname.value); diff --git a/components/navbar/Drawer.vue b/components/navbar/Drawer.vue index 70d9ce9..f9006b2 100644 --- a/components/navbar/Drawer.vue +++ b/components/navbar/Drawer.vue @@ -46,7 +46,7 @@ export default { // for small screens, make navbar drawer absolute if ( - !!windowWidth.value && + Boolean(windowWidth.value) && windowWidth.value > 0 && windowWidth.value <= 1024 ) { diff --git a/components/skeleton/Media.vue b/components/skeleton/Media.vue index f417db5..3b0c3f4 100644 --- a/components/skeleton/Media.vue +++ b/components/skeleton/Media.vue @@ -12,7 +12,7 @@ export default defineComponent({ }, setup(props) { const color = computed(() => { - if (!!props.color) return props.color; + if (props.color) return props.color; else return 'bg-[#2e405a]'; }); diff --git a/components/skeleton/Text.vue b/components/skeleton/Text.vue index 72cbe63..af8228f 100644 --- a/components/skeleton/Text.vue +++ b/components/skeleton/Text.vue @@ -23,7 +23,7 @@ export default defineComponent({ }); const color = computed(() => { - if (!!props.color) return props.color; + if (props.color) return props.color; else if (props.body) return 'bg-[#2e405a]'; else return 'bg-[#42546e]'; }); diff --git a/components/skill-tree/Pathways.vue b/components/skill-tree/Pathways.vue index b011b53..2804bfa 100644 --- a/components/skill-tree/Pathways.vue +++ b/components/skill-tree/Pathways.vue @@ -63,7 +63,7 @@ export default defineComponent({ dependencies.forEach((dependencyID) => { let dependency = props.skills.find((s) => s.id == dependencyID); - if (!!!dependency) return; + if (!dependency) return; let x2 = getGridCoord(dependency.row); let y2 = getGridCoord(dependency.column); diff --git a/components/skill-tree/SubTable.vue b/components/skill-tree/SubTable.vue index f5939b6..ccaf2a3 100644 --- a/components/skill-tree/SubTable.vue +++ b/components/skill-tree/SubTable.vue @@ -113,14 +113,14 @@ export default { const subSkill = useSubSkill(); function onclickManageItem(item: any) { - if (!!!props.rootSkillID) return; + if (!props.rootSkillID) return; router.push( `/dashboard/skill-tree/${props.rootSkillID}/manage?subSkillID=${item.id}` ); } function onclickEditItem(item: any) { - if (!!!item || !!!item.id) return; + if (Boolean(!item) || Boolean(!item.id)) return; subSkill.value = item; router.push(`/dashboard/skill-tree/${props.rootSkillID}/edit/${item.id}`); diff --git a/components/skill-tree/Table.vue b/components/skill-tree/Table.vue index 5d8a7f0..ee84526 100644 --- a/components/skill-tree/Table.vue +++ b/components/skill-tree/Table.vue @@ -121,21 +121,21 @@ export default { const rootSkill = useRootSkill(); function onclickManageItem(item: any) { - if (!!!item || !!!item.id) return; + if (Boolean(!item) || Boolean(!item.id)) return; rootSkill.value = item; router.push(`/dashboard/skill-tree/${item.id}/manage`); } function onclickEditItem(item: any) { - if (!!!item || !!!item.id) return; + if (Boolean(!item) || Boolean(!item.id)) return; rootSkill.value = item; router.push(`/dashboard/skill-tree/${item.id}/edit`); } function onclickViewItem(item: any) { - if (!!!item || !!!item.id) return; + if (Boolean(!item) || Boolean(!item.id)) return; rootSkill.value = item; router.push(`/dashboard/skill-tree/${item.id}/sub-skills`); diff --git a/composables/appUsers.ts b/composables/appUsers.ts index 443fae9..0311aac 100644 --- a/composables/appUsers.ts +++ b/composables/appUsers.ts @@ -116,7 +116,7 @@ export async function getAppUsers(filters: UserFilter) { export async function getAppUser(id: string) { try { - if (!!!id) { + if (!id) { throw { data: 'Invalid App User Id' }; } const response = await GET(`/auth/users/${id}`); @@ -132,7 +132,7 @@ export async function getAppUser(id: string) { export async function setBanStatusOfAppUser(status: boolean, id: string) { try { - if (!!!id) { + if (!id) { throw { data: 'Invalid App User Id' }; } @@ -163,7 +163,7 @@ export async function setBanStatusOfAppUser(status: boolean, id: string) { export async function getBanUsers() { try { const banUsers = useBanUsers(); - const res = await GET(`/challenges/bans`); + const res = await GET("/challenges/bans"); banUsers.value = res ?? []; } catch (error: any) { return [null, error.data]; @@ -172,7 +172,7 @@ export async function getBanUsers() { export async function deleteAppUser(id: string) { try { - if (!!!id) { + if (!id) { throw { data: 'Invalid App User Id' }; } @@ -195,7 +195,7 @@ export async function deleteAppUser(id: string) { export async function getBalanceOfThisUser(id: string) { try { - if (!!!id) { + if (!id) { throw { data: { detail: 'Missing user id' } }; } @@ -209,7 +209,7 @@ export async function getBalanceOfThisUser(id: string) { export async function setBalanceOfThisUser(id: string, body: any) { try { - if (!!!id) { + if (!id) { throw { data: { detail: 'Missing user id' } }; } @@ -223,7 +223,7 @@ export async function setBalanceOfThisUser(id: string, body: any) { export async function getXPOfThisUser(id: string) { try { - if (!!!id) { + if (!id) { throw { data: { detail: 'Missing user id' } }; } @@ -242,13 +242,13 @@ export async function setXPOfThisUser( xp: any ) { try { - if (!!!id) { + if (!id) { throw { data: { detail: 'Missing user id' } }; } - if (!!!rootSkill) { + if (!rootSkill) { throw { data: { detail: 'Missing root Skill' } }; } - if (!!!subSkill) { + if (!subSkill) { throw { data: { detail: 'Missing sub Skill' } }; } @@ -272,7 +272,7 @@ export async function setEmailVerificationOfThisUser( status: boolean ) { try { - if (!!!id) { + if (!id) { throw { data: { detail: 'Missing user id' } }; } const response = await PATCH(`/auth/users/${id}`, { @@ -303,7 +303,7 @@ export async function setEmailVerificationOfThisUser( export async function banAppUser(body: any) { try { - const res = await POST(`/challenges/bans`, { ...body, reason: '' }); + const res = await POST("/challenges/bans", { ...body, reason: '' }); return [res, null]; } catch (error: any) { return [null, error]; diff --git a/composables/auth.ts b/composables/auth.ts index 2af2d80..79be07d 100644 --- a/composables/auth.ts +++ b/composables/auth.ts @@ -17,7 +17,7 @@ export async function getOAuthProviders() { export async function loginViaOAuthProvider(body: any) { try { - const response = await POST(`/auth/sessions/oauth`, body); + const response = await POST("/auth/sessions/oauth", body); return [response, null]; } catch (error: any) { @@ -49,7 +49,7 @@ export async function logout() { const user = useUser(); try { - if (!!!user.value || !!!user.value.id) { + if (Boolean(!user.value) || Boolean(!user.value.id)) { throw { data: 'Invalid User Id' }; } @@ -96,10 +96,10 @@ export async function requestEmailVerification() { if (isAccountVerified) return [true, null]; try { - if (!!!user_id) { + if (!user_id) { throw { data: { detail: 'Invalid User Id' } }; } - if (!!!user_email) { + if (!user_email) { throw { data: { detail: 'User does not have email' } }; } @@ -119,7 +119,7 @@ export async function verifyAccount(body: any) { if (isAccountVerified) return [true, null]; try { - if (!!!user_id) { + if (!user_id) { throw { data: 'Invalid User Id' }; } diff --git a/composables/companies.ts b/composables/companies.ts index 6ea45a5..4231790 100644 --- a/composables/companies.ts +++ b/composables/companies.ts @@ -6,7 +6,7 @@ export const useCompany = () => useState('company', () => null); export async function getCompany(id: string) { try { // const response = await GET(`/jobs/companies/${id}`); - const response = await GET(`/jobs/companies`); + const response = await GET("/jobs/companies"); const companies = useCompanies(); companies.value = response ?? []; @@ -23,7 +23,7 @@ export async function getCompany(id: string) { export async function createCompany(body: any) { try { - const response = await POST(`/jobs/companies`, body); + const response = await POST("/jobs/companies", body); const company = useCompany(); company.value = response ?? null; @@ -76,7 +76,7 @@ export async function getCompanies(filters: any[]) { query = query + `${key}=${filters[key]}&`; } else if ( typeof filters[key] == 'string' && - !!filters[key] && + Boolean(filters[key]) && filters[key] != '---' ) { query = query + `${key}=${filters[key]}&`; diff --git a/composables/fetch.js b/composables/fetch.js index 68cb6ae..6b2857a 100644 --- a/composables/fetch.js +++ b/composables/fetch.js @@ -91,7 +91,7 @@ const onResponseError = async ({ request, options, response }) => { details.includes("invalid token") || details.includes("invalid refresh token") ) { - router.push(`/`); + router.push("/"); } if (details.includes("user already exists")) { @@ -143,7 +143,7 @@ function isAccessTokenExpired() { const accessToken = getAccessToken(); try { - if (!!!accessToken) { + if (!accessToken) { throw { data: "Invalid Access Token: " + accessToken }; } diff --git a/composables/helpers.ts b/composables/helpers.ts index c8f23d5..5c74e10 100644 --- a/composables/helpers.ts +++ b/composables/helpers.ts @@ -7,20 +7,20 @@ export function getRandomNumber(min: number, max: number) { export function abbreviateNumber(number: number) { if (number == 0) return 0; if (number < 1e3) return number; - if (number >= 1e3 && number < 1e6) return +(number / 1e3).toFixed(1) + 'K'; - if (number >= 1e6 && number < 1e9) return +(number / 1e6).toFixed(1) + 'M'; - if (number >= 1e9 && number < 1e12) return +(number / 1e9).toFixed(1) + 'B'; - if (number >= 1e12) return +(number / 1e12).toFixed(1) + 'T'; + if (number >= 1e3 && number < 1e6) return Number((number / 1e3).toFixed(1)) + 'K'; + if (number >= 1e6 && number < 1e9) return Number((number / 1e6).toFixed(1)) + 'M'; + if (number >= 1e9 && number < 1e12) return Number((number / 1e9).toFixed(1)) + 'B'; + if (number >= 1e12) return Number((number / 1e12).toFixed(1)) + 'T'; } export function get_x_timeAgo(timestamp: number) { - if (!!!timestamp) return timestamp; + if (!timestamp) return timestamp; let dateObj = new Date(timestamp * 1000); const seconds = Math.floor((Date.now() - dateObj.getTime()) / 1000); const interval = intervals.find((i) => i.seconds < seconds); - if (!!!interval) return `Just created`; + if (!interval) return "Just created"; const count = Math.floor(seconds / interval.seconds); return `${count} ${interval.label}${count !== 1 ? 's' : ''} ago`; diff --git a/composables/jobs.ts b/composables/jobs.ts index a13eff5..5333ca8 100644 --- a/composables/jobs.ts +++ b/composables/jobs.ts @@ -19,7 +19,7 @@ export async function getJob(id: string) { export async function createJob(body: any) { try { - const response = await POST(`/jobs/jobs`, body); + const response = await POST("/jobs/jobs", body); const job = useJob(); job.value = response ?? null; @@ -72,7 +72,7 @@ export async function getJobs(filters: any[]) { query = query + `${key}=${filters[key]}&`; } else if ( typeof filters[key] == 'string' && - !!filters[key] && + Boolean(filters[key]) && filters[key] != '---' ) { query = query + `${key}=${filters[key]}&`; @@ -98,7 +98,7 @@ export async function getJobMaxSalary() { const jobMaxSalary = useJobMaxSalary(); - if (!!!response || response.length <= 0) { + if (Boolean(!response) || response.length <= 0) { jobMaxSalary.value = 10000; } else { jobMaxSalary.value = Math.max(...response.map((job) => job.salary.max)); diff --git a/composables/reportedSubtasks.ts b/composables/reportedSubtasks.ts index 574dfaf..15cd3f9 100644 --- a/composables/reportedSubtasks.ts +++ b/composables/reportedSubtasks.ts @@ -26,7 +26,7 @@ export async function getreportedSubtasksList(firstCall: any) { noMoreSubtasks.value = true } const reportedSubtasks: any = useReportedSubtasks(); - if (!!firstCall) { + if (firstCall) { reportedSubtasks.value = [] } arr = [...reportedSubtasks.value, ...response ?? []] diff --git a/composables/response.ts b/composables/response.ts index c75d581..77804e5 100644 --- a/composables/response.ts +++ b/composables/response.ts @@ -17,7 +17,7 @@ export const useSnackbar = () => }; }); -export function openSnackbar(type: string, heading: string, body: string = '') { +export function openSnackbar(type: string, heading: string, body = '') { const snackbar = useSnackbar(); snackbar.value = { show: true, diff --git a/composables/skill-tree.ts b/composables/skill-tree.ts index 62cd938..cf933ea 100644 --- a/composables/skill-tree.ts +++ b/composables/skill-tree.ts @@ -10,7 +10,7 @@ export const useSkillTree = () => useState('skillTree', () => null); export async function getRootSkills() { try { - const response = await GET(`/skills/skilltree`); + const response = await GET("/skills/skilltree"); const rootSkills = useRootSkills(); rootSkills.value = response ?? null; @@ -36,7 +36,7 @@ export async function getRootSkill(id: string) { export async function getSubSkills(rootSkillID: string) { try { - if (!!!rootSkillID) { + if (!rootSkillID) { throw { data: 'Invalid root skill id' }; } @@ -53,13 +53,13 @@ export async function getSubSkills(rootSkillID: string) { export async function getSkillTreeByRootID(rootSkillID: string) { try { - if (!!!rootSkillID) { + if (!rootSkillID) { throw { data: 'Invalid root skill id' }; } const url = rootSkillID == 'root' - ? `/skills/skilltree` + ? "/skills/skilltree" : `/skills/skilltree/${rootSkillID}`; const response = await GET(url); @@ -76,7 +76,7 @@ export async function getSkillTreeByRootID(rootSkillID: string) { export async function createNewSkill(rootSkillID: string, body: any) { const isRoot = rootSkillID == 'root'; try { - if (!!!rootSkillID) { + if (!rootSkillID) { throw { data: 'Invalid root skill id' }; } @@ -88,7 +88,7 @@ export async function createNewSkill(rootSkillID: string, body: any) { const url = rootSkillID == 'root' - ? `/skills/skilltree` + ? "/skills/skilltree" : `/skills/skilltree/${rootSkillID}`; const response = await POST(url, body); @@ -111,11 +111,11 @@ export async function updateSkill( ) { const isRoot = rootSkillID == 'root'; try { - if (!!!rootSkillID) { + if (!rootSkillID) { throw { data: 'Invalid root skill id' }; } - if (isRoot && !!!subSkillID) { + if (isRoot && Boolean(!subSkillID)) { throw { data: 'Invalid sub skill id' }; } @@ -148,11 +148,11 @@ export async function updateSkill( export async function deleteSkill(rootSkillID: string, subSkillID: string) { const isRoot = rootSkillID == 'root'; try { - if (!!!rootSkillID) { + if (!rootSkillID) { throw { data: 'Invalid root skill id' }; } - if (isRoot && !!!subSkillID) { + if (isRoot && Boolean(!subSkillID)) { throw { data: 'Invalid sub skill id' }; } @@ -177,14 +177,14 @@ export async function deleteSkill(rootSkillID: string, subSkillID: string) { export async function updateTreeSettings(rootSkillID: string, body: any) { const isRoot = rootSkillID == 'root'; try { - if (!!!rootSkillID) { + if (!rootSkillID) { throw { data: 'Invalid root skill id' }; } let response = null; if (isRoot) { - response = await PATCH(`/skills/skilltree`, body); + response = await PATCH("/skills/skilltree", body); } else { response = await PATCH(`/skills/skilltree/${rootSkillID}`, { sub_tree_rows: body.rows, diff --git a/composables/user.ts b/composables/user.ts index 4697a5e..ff7edf7 100644 --- a/composables/user.ts +++ b/composables/user.ts @@ -8,7 +8,7 @@ export const useRefreshToken = () => useState('refreshToken', () => ''); export function getAccessToken() { const accessToken = useAccessToken(); - if (!!!accessToken.value) return null; + if (!accessToken.value) return null; const cookie_accessToken = useCookie('accessToken'); if (cookie_accessToken.value != accessToken.value) { @@ -21,7 +21,7 @@ export function getAccessToken() { export function getRefreshToken() { const refreshToken = useRefreshToken(); - if (!!!refreshToken.value) return null; + if (!refreshToken.value) return null; const cookie_refreshToken = useCookie('refreshToken'); if (cookie_refreshToken.value != refreshToken.value) { @@ -60,12 +60,12 @@ export function setStates(response: any) { export const isAuth = computed((): boolean => { const accessToken = useAccessToken(); - return !!accessToken.value; + return Boolean(accessToken.value); }); export const hasEmail = computed((): boolean => { const user = useUser(); - return !!(user.value?.email ?? ''); + return Boolean(user.value?.email ?? ''); }); export async function getUser() { @@ -73,7 +73,7 @@ export async function getUser() { let user_id = user?.value?.id ?? null; try { - if (!!!user_id) { + if (!user_id) { throw { data: 'Invalid User Id' }; } const response = await GET(`/auth/users/${user_id}`); diff --git a/pages/dashboard/companies/index.vue b/pages/dashboard/companies/index.vue index 2c85b25..d01b032 100644 --- a/pages/dashboard/companies/index.vue +++ b/pages/dashboard/companies/index.vue @@ -117,7 +117,7 @@ export default { ]; function onselectSortCompaniesBy(option: string) { - if (!!!companies.value || companies.value.length <= 0) return; + if (Boolean(!companies.value) || companies.value.length <= 0) return; if (option == 'latest') { companies.value.sort(function (x, y) { diff --git a/pages/dashboard/jobs/index.vue b/pages/dashboard/jobs/index.vue index 6b30ecf..5fb216a 100644 --- a/pages/dashboard/jobs/index.vue +++ b/pages/dashboard/jobs/index.vue @@ -123,7 +123,7 @@ export default { ]; function onselectSortJobsBy(option: string) { - if (!!!jobs.value || jobs.value.length <= 0) return; + if (Boolean(!jobs.value) || jobs.value.length <= 0) return; if (option == 'latest') { jobs.value.sort(function (x, y) { diff --git a/pages/dashboard/skill-tree/[rootSkill]/manage.vue b/pages/dashboard/skill-tree/[rootSkill]/manage.vue index 3359e13..f5318e3 100644 --- a/pages/dashboard/skill-tree/[rootSkill]/manage.vue +++ b/pages/dashboard/skill-tree/[rootSkill]/manage.vue @@ -123,11 +123,11 @@ export default { return (route?.query?.subSkillID ?? ''); }, set(value: string) { - if (!!!value) return; + if (!value) return; router.replace({ path: route.path, - query: !!value ? { subSkillID: value } : undefined, + query: (value) ? { subSkillID: value } : undefined, }); }, }); @@ -275,7 +275,7 @@ export default { loading.value = false; // if theres already a selected skill, use their current col and row # - if (!!selectedSkill.value) { + if (selectedSkill.value) { selectedCol.value = selectedSkill.value.column ?? 0; selectedRow.value = selectedSkill.value.row ?? 0; } diff --git a/pages/dashboard/skill-tree/[rootSkill]/sub-skills.vue b/pages/dashboard/skill-tree/[rootSkill]/sub-skills.vue index af55fa7..24d2132 100644 --- a/pages/dashboard/skill-tree/[rootSkill]/sub-skills.vue +++ b/pages/dashboard/skill-tree/[rootSkill]/sub-skills.vue @@ -81,7 +81,7 @@ export default { const subSkills: Ref = useSubSkills(); - const loading = ref(!!!subSkills.value); + const loading = ref(Boolean(!subSkills.value)); const cookie_filters = useCookie('subSkills_filter'); const filters = reactive( diff --git a/pages/dashboard/skill-tree/index.vue b/pages/dashboard/skill-tree/index.vue index edc59e0..424d08d 100644 --- a/pages/dashboard/skill-tree/index.vue +++ b/pages/dashboard/skill-tree/index.vue @@ -68,7 +68,7 @@ export default { const rootSkills: Ref = useRootSkills(); - const loading = ref(!!!rootSkills.value); + const loading = ref(!rootSkills.value); const cookie_filters = useCookie('rootSkills_filter'); const filters = reactive(