import type { BCMSLanguage } from '@becomes/cms-sdk/types'; import { BCMSJwtRoleName } from '@becomes/cms-sdk/types'; import * as uuid from 'uuid'; import { computed, defineComponent, nextTick, onMounted, ref } from 'vue'; import BCMSIcon from '../icon'; import { LanguageService } from '../../services'; import { useTranslation } from '../../translations'; import { BCMSSelect } from '../input'; import { DefaultComponentProps } from '../_default'; const component = defineComponent({ props: { ...DefaultComponentProps, }, setup() { const translations = computed(() => { return useTranslation(); }); const store = window.bcms.vue.store; const userMe = computed(() => store.getters.user_me); const isAdmin = computed(() => { return userMe.value?.roles[0].name === BCMSJwtRoleName.ADMIN; }); const isDropdownVisible = ref(false); const languagesDropdownData = ref({ x: 0, y: 0, id: uuid.v4(), }); const languagesDropdownDataEl = ref(null); const languageCode = ref({ label: '', value: '', error: '', }); const langs = computed(() => { return store.getters.language_items; }); async function removeLanguage(lang: BCMSLanguage) { if ( await window.bcms.confirm( translations.value.page.settings.languages.confirm.delete.title, translations.value.page.settings.languages.confirm.delete.description( { langCode: lang.code, } ) ) ) { await window.bcms.util.throwable( async () => { await window.bcms.sdk.language.deleteById(lang._id); }, async () => { window.bcms.notification.success( translations.value.page.settings.languages.notification .langDeleteSuccess ); } ); } } function checkForDropdownOverflow() { nextTick(() => { const el = languagesDropdownDataEl.value; if (el) { const rect = el.getBoundingClientRect(); const xDiff = rect.right - window.innerWidth; const yDiff = rect.bottom - window.innerHeight; if (xDiff > 5) { languagesDropdownData.value.x = xDiff + 10; } if (yDiff > 5) { languagesDropdownData.value.y = yDiff + 10; } } }); } async function addLanguage() { if (languageCode.value.value === '') { languageCode.value.error = translations.value.page.settings.languages.error.emptyLanguage; return; } languageCode.value.error = ''; const isoLanguage = LanguageService.get(languageCode.value.value); if (isoLanguage) { await window.bcms.util.throwable( async () => { return await window.bcms.sdk.language.create(isoLanguage); }, async (value) => { languageCode.value = { label: '', value: '', error: '', }; window.bcms.notification.success( translations.value.page.settings.languages.notification.langAddSuccess( { label: value.name, } ) ); } ); isDropdownVisible.value = false; } } onMounted(async () => { await window.bcms.util.throwable(async () => { await window.bcms.sdk.language.getAll(); }); }); return () => (

{translations.value.page.settings.languages.title}

{isAdmin.value && (

{translations.value.page.settings.languages.description}

)}
); }, }); export default component;