Loading components.d.ts +1 −4 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ // @ts-nocheck // Generated by unplugin-vue-components // Read more: https://github.com/vuejs/core/pull/3399 export {}; export {} /* prettier-ignore */ declare module 'vue' { Loading @@ -13,14 +13,11 @@ declare module 'vue' { Divider: typeof import('primevue/divider')['default'] Drawer: typeof import('primevue/drawer')['default'] LogoAndLabel: typeof import('./src/components/LogoAndLabel.vue')['default'] Popover: typeof import('primevue/popover')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] ScrollPanel: typeof import('primevue/scrollpanel')['default'] SpeedDial: typeof import('primevue/speeddial')['default'] Splitter: typeof import('primevue/splitter')['default'] SplitterPanel: typeof import('primevue/splitterpanel')['default'] Textarea: typeof import('primevue/textarea')['default'] TextItem: typeof import('./src/components/entities/TextItem.vue')['default'] Tree: typeof import('primevue/tree')['default'] UserInfoHeaderWithSettings: typeof import('./src/components/UserInfoHeaderWithSettings.vue')['default'] Loading src/components/entities/TextItem.vue +45 −23 Original line number Diff line number Diff line Loading @@ -2,7 +2,8 @@ import type { IText } from '@/interfaces/entities'; import type { IEntity } from '@/interfaces/environment'; import { useDataStore } from '@/stores/data'; import {useTextareaAutosize} from "@vueuse/core"; import { useTextareaAutosize } from '@vueuse/core'; import { editEntity } from '@/helpers'; interface Props { entityData: IText; Loading @@ -12,42 +13,56 @@ const entityData = ref(props.entityData); const dataStore = useDataStore(); const editEntity = (newState: IEntity) => { let prevState = dataStore.homeEntities; prevState = prevState.map((entity: IEntity) => { if (entity.uuid !== entityData.value.uuid) return entity; return newState; }); dataStore.editHomeEntities(prevState); }; const addTitle = () => { editEntity({ ...entityData.value, title: 'Title' }); editEntity({ ...entityData.value, title: 'Title' }, entityData.value.uuid); entityData.value = { ...entityData.value, title: 'Title' }; }; const editTitle = () => { editEntity({ ...entityData.value, title: entityData.value.title }); editEntity({ ...entityData.value, title: entityData.value.title }, entityData.value.uuid); }; const editText = () => { editEntity({ ...entityData.value, text: entityData.value.text }); editEntity({ ...entityData.value, text: entityData.value.text }, entityData.value.uuid); }; const deleteEntity = () => { let prevState = dataStore.homeEntities; prevState = prevState.filter((entity: IEntity) => entity.uuid !== entityData.value.uuid); dataStore.editHomeEntities(prevState); } }; const deleteTitle = () => { const newState = { ...entityData.value }; delete newState.title; editEntity({ ...newState }, entityData.value.uuid); entityData.value = newState; }; const { textarea, triggerResize } = useTextareaAutosize(); </script> <template> <div class="textContainer relative"> <input ref="input" v-if="entityData?.title" type="text" v-model="entityData.title" @change="editTitle" @input="triggerResize" class="w-full mb-2 font-bold pl-2" /> <textarea ref="textarea" v-model="entityData.text" class="w-full indent-5 resize-none pl-4 -ml-4 border-0 border-l-4 border-solid border-l-blue-400" @change="editText" @input="triggerResize" placeholder="Enter text..."/> <input ref="input" v-if="entityData.title" type="text" v-model="entityData.title" @change="editTitle" @input="triggerResize" class="w-full mb-2 font-bold pl-2" /> <textarea ref="textarea" v-model="entityData.text" class="w-full indent-5 resize-none pl-4 -ml-4 border-0 border-l-4 border-solid border-l-blue-400" @change="editText" @input="triggerResize" placeholder="Enter text..." /> <button v-if="!entityData.title" v-if="!entityData?.title" @click.prevent="addTitle" class="addTitleButton absolute top-0 left-4 bg-blue-500 py-0.5 px-2 rounded-md -translate-y-full border-2 border-solid border-black transition-all select-none" > Loading @@ -59,6 +74,13 @@ const { textarea, triggerResize } = useTextareaAutosize(); > <i class="pi pi-trash pr-2"></i>Delete </button> <button v-if="entityData?.title" @click.prevent="deleteTitle" class="deleteEntityButton absolute top-0 left-4 bg-blue-500 py-0.5 px-2 rounded-md -translate-y-full border-2 border-solid border-black transition-all select-none" > <i class="pi pi-trash pr-2"></i>Delete title </button> </div> </template> Loading src/helpers/index.ts +11 −0 Original line number Diff line number Diff line import { useInterfaceStore } from '@/stores/interface'; import type { IEntity } from '@/interfaces/environment'; import { useDataStore } from '@/stores/data'; export async function uploadFile($event: Event) { const target = $event.target as HTMLInputElement; Loading @@ -23,3 +24,13 @@ export function setDefaultHomeBackground() { ); localStorage.removeItem('homeBackgroundUrl'); } export const editEntity = (newState: IEntity, entityUuid: string) => { const dataStore = useDataStore(); let prevState = dataStore.homeEntities; prevState = prevState.map((entity: IEntity) => { if (entity.uuid !== entityUuid) return entity; return newState; }); dataStore.editHomeEntities(prevState); }; src/modules/EntityItem.vue +1 −1 File changed.Contains only whitespace changes. Show changes Loading
components.d.ts +1 −4 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ // @ts-nocheck // Generated by unplugin-vue-components // Read more: https://github.com/vuejs/core/pull/3399 export {}; export {} /* prettier-ignore */ declare module 'vue' { Loading @@ -13,14 +13,11 @@ declare module 'vue' { Divider: typeof import('primevue/divider')['default'] Drawer: typeof import('primevue/drawer')['default'] LogoAndLabel: typeof import('./src/components/LogoAndLabel.vue')['default'] Popover: typeof import('primevue/popover')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] ScrollPanel: typeof import('primevue/scrollpanel')['default'] SpeedDial: typeof import('primevue/speeddial')['default'] Splitter: typeof import('primevue/splitter')['default'] SplitterPanel: typeof import('primevue/splitterpanel')['default'] Textarea: typeof import('primevue/textarea')['default'] TextItem: typeof import('./src/components/entities/TextItem.vue')['default'] Tree: typeof import('primevue/tree')['default'] UserInfoHeaderWithSettings: typeof import('./src/components/UserInfoHeaderWithSettings.vue')['default'] Loading
src/components/entities/TextItem.vue +45 −23 Original line number Diff line number Diff line Loading @@ -2,7 +2,8 @@ import type { IText } from '@/interfaces/entities'; import type { IEntity } from '@/interfaces/environment'; import { useDataStore } from '@/stores/data'; import {useTextareaAutosize} from "@vueuse/core"; import { useTextareaAutosize } from '@vueuse/core'; import { editEntity } from '@/helpers'; interface Props { entityData: IText; Loading @@ -12,42 +13,56 @@ const entityData = ref(props.entityData); const dataStore = useDataStore(); const editEntity = (newState: IEntity) => { let prevState = dataStore.homeEntities; prevState = prevState.map((entity: IEntity) => { if (entity.uuid !== entityData.value.uuid) return entity; return newState; }); dataStore.editHomeEntities(prevState); }; const addTitle = () => { editEntity({ ...entityData.value, title: 'Title' }); editEntity({ ...entityData.value, title: 'Title' }, entityData.value.uuid); entityData.value = { ...entityData.value, title: 'Title' }; }; const editTitle = () => { editEntity({ ...entityData.value, title: entityData.value.title }); editEntity({ ...entityData.value, title: entityData.value.title }, entityData.value.uuid); }; const editText = () => { editEntity({ ...entityData.value, text: entityData.value.text }); editEntity({ ...entityData.value, text: entityData.value.text }, entityData.value.uuid); }; const deleteEntity = () => { let prevState = dataStore.homeEntities; prevState = prevState.filter((entity: IEntity) => entity.uuid !== entityData.value.uuid); dataStore.editHomeEntities(prevState); } }; const deleteTitle = () => { const newState = { ...entityData.value }; delete newState.title; editEntity({ ...newState }, entityData.value.uuid); entityData.value = newState; }; const { textarea, triggerResize } = useTextareaAutosize(); </script> <template> <div class="textContainer relative"> <input ref="input" v-if="entityData?.title" type="text" v-model="entityData.title" @change="editTitle" @input="triggerResize" class="w-full mb-2 font-bold pl-2" /> <textarea ref="textarea" v-model="entityData.text" class="w-full indent-5 resize-none pl-4 -ml-4 border-0 border-l-4 border-solid border-l-blue-400" @change="editText" @input="triggerResize" placeholder="Enter text..."/> <input ref="input" v-if="entityData.title" type="text" v-model="entityData.title" @change="editTitle" @input="triggerResize" class="w-full mb-2 font-bold pl-2" /> <textarea ref="textarea" v-model="entityData.text" class="w-full indent-5 resize-none pl-4 -ml-4 border-0 border-l-4 border-solid border-l-blue-400" @change="editText" @input="triggerResize" placeholder="Enter text..." /> <button v-if="!entityData.title" v-if="!entityData?.title" @click.prevent="addTitle" class="addTitleButton absolute top-0 left-4 bg-blue-500 py-0.5 px-2 rounded-md -translate-y-full border-2 border-solid border-black transition-all select-none" > Loading @@ -59,6 +74,13 @@ const { textarea, triggerResize } = useTextareaAutosize(); > <i class="pi pi-trash pr-2"></i>Delete </button> <button v-if="entityData?.title" @click.prevent="deleteTitle" class="deleteEntityButton absolute top-0 left-4 bg-blue-500 py-0.5 px-2 rounded-md -translate-y-full border-2 border-solid border-black transition-all select-none" > <i class="pi pi-trash pr-2"></i>Delete title </button> </div> </template> Loading
src/helpers/index.ts +11 −0 Original line number Diff line number Diff line import { useInterfaceStore } from '@/stores/interface'; import type { IEntity } from '@/interfaces/environment'; import { useDataStore } from '@/stores/data'; export async function uploadFile($event: Event) { const target = $event.target as HTMLInputElement; Loading @@ -23,3 +24,13 @@ export function setDefaultHomeBackground() { ); localStorage.removeItem('homeBackgroundUrl'); } export const editEntity = (newState: IEntity, entityUuid: string) => { const dataStore = useDataStore(); let prevState = dataStore.homeEntities; prevState = prevState.map((entity: IEntity) => { if (entity.uuid !== entityUuid) return entity; return newState; }); dataStore.editHomeEntities(prevState); };